<?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>34676</bug_id>
          
          <creation_ts>2010-02-05 23:13:44 -0800</creation_ts>
          <short_desc>check-webkit-style: Switch from using getopt.getopt() to optparse.OptionsParser</short_desc>
          <delta_ts>2010-04-02 01:28:16 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>34677</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>188419</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-05 23:13:44 -0800</bug_when>
    <thetext>This was originally suggested here:

https://bugs.webkit.org/show_bug.cgi?id=33045#c17</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207021</commentid>
    <comment_count>1</comment_count>
      <attachid>52270</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-01 00:30:45 -0700</bug_when>
    <thetext>Created attachment 52270
Proposed patch

Note that check-webkit-style is now doing the pep8 check for Python files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207095</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-01 05:11:15 -0700</bug_when>
    <thetext>To assist the reviewing process, this is what help looks like with this patch:

&gt; check-webkit-style --min-confidence=xxx
Usage: check-webkit-style [--help] [options] [path1] [path2] ...

Overview:
  Check coding style according to WebKit style guidelines:

      http://webkit.org/coding/coding-style.html

  Path arguments can be files and directories.  If neither a git commit nor
  paths are passed, then all changes in your source control working directory
  are checked.

Style errors:
  This script assigns to every style error a confidence score from 1-5 and
  a category name.  A confidence score of 5 means the error is certainly
  a problem, and 1 means it could be fine.

  Category names appear in error messages in brackets, for example
  [whitespace/indent].  See the options section below for an option that
  displays all available categories and which are reported by default.

Filters:
  Use filters to configure what errors to report.  Filters are specified using
  a comma-separated list of boolean filter rules.  The script reports errors
  in a category if the category passes the filter, as described below.

  All categories start out passing.  Boolean filter rules are then evaluated
  from left to right, with later rules taking precedence.  For example, the
  rule &quot;+foo&quot; passes any category that starts with &quot;foo&quot;, and &quot;-foo&quot; fails
  any such category.  The filter input &quot;-whitespace,+whitespace/braces&quot; fails
  the category &quot;whitespace/tab&quot; and passes &quot;whitespace/braces&quot;.

  Examples: --filter=-whitespace,+whitespace/braces
            --filter=-whitespace,-runtime/printf,+runtime/printf_format
            --filter=-,+build/include_what_you_use

Paths:
  Certain style-checking behavior depends on the paths relative to
  the WebKit source root of the files being checked.  For example,
  certain types of errors may be handled differently for files in
  WebKit/gtk/webkit/ (e.g. by suppressing &quot;readability/naming&quot; errors
  for files in this directory).

  Consequently, if the path relative to the source root cannot be
  determined for a file being checked, then style checking may not
  work correctly for that file.  This can occur, for example, if no
  WebKit checkout can be found, or if the source root can be detected,
  but one of the files being checked lies outside the source tree.

  If a WebKit checkout can be detected and all files being checked
  are in the source tree, then all paths will automatically be
  converted to paths relative to the source root prior to checking.
  This is also useful for display purposes.

  Currently, this command can detect the source root only if the
  command is run from within a WebKit checkout (i.e. if the current
  working directory is below the root of a checkout).  In particular,
  it is not recommended to run this script from a directory outside
  a checkout.

  Running this script from a top-level WebKit source directory and
  checking only files in the source tree will ensure that all style
  checking behaves correctly -- whether or not a checkout can be
  detected.  This is because all file paths will already be relative
  to the source root and so will not need to be converted.

Options:
  -h, --help            show this help message and exit
  -f RULES, --filter-rules=RULES
                        set a filter to control what categories of style
                        errors to report.  Specify a filter using a comma-
                        delimited list of boolean filter rules, for example &quot;
                        --filter -whitespace,+whitespace/braces&quot;.  Pass a
                        question mark (&quot;?&quot;) to display all categories and
                        which are enabled by default.
  -g COMMIT, --git-commit=COMMIT, --git-diff=COMMIT, --git-since=COMMIT
                        check all changes after the given git commit.
  -m INT, --min-confidence=INT
                        set the minimum confidence of style errors to report.
                        Can be an integer 1-5, with 1 displaying all errors.
                        Defaults to 1.
  -o FORMAT, --output-format=FORMAT
                        set the output format, which can be &quot;emacs&quot; or &quot;vs7&quot;
                        (for Visual Studio).  Defaults to &quot;emacs&quot;.
  -v, --verbose         enable verbose logging.

This script can miss errors and does not substitute for code review.
ERROR: option --min-confidence: invalid integer value: &apos;xxx&apos;
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207135</commentid>
    <comment_count>3</comment_count>
      <attachid>52270</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-01 07:19:23 -0700</bug_when>
    <thetext>Comment on attachment 52270
Proposed patch

This change looks good, I couldn&apos;t look the patch closely yet, though.

I&apos;m not sure if --filter=? is better than --filter= . How about outputting the list of available filters for all invalid filters such as &quot;&quot;, &quot;?&quot;, &quot;runtime/arrays&quot;, and etc?

Also, as this patch changes the behavior of --filter, I think it&apos;s nice to mention this change in your ChangeLog.

&gt; +        sys.exit(2)

Why exit(2) is better than 1?

&gt; This script can miss errors and does not substitute for code review.
&gt; ERROR: option --min-confidence: invalid integer value: &apos;xxx&apos;

Cannot we have one blank line before the &quot;ERROR: ...&quot; line?

Putting r- for now to reduce the number of patches in our review queue, but I&apos;ll re-put r+ if I&apos;m convinced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207157</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-01 07:58:19 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I&apos;m not sure if --filter=? is better than --filter= . How about outputting the
&gt; list of available filters for all invalid filters such as &quot;&quot;, &quot;?&quot;,
&gt; &quot;runtime/arrays&quot;, and etc?

I couldn&apos;t seem to get --filter= to work before.  I thought this was because OptionParser has different parsing semantics than getopt.  However, it seems to be working fine now (I must have been doing something wrong before), so I can change it back to --filter.  Thanks for asking about this.

I think we should maybe keep the existing behavior of showing an error message in the case of a bad filter?

&gt; check-webkit-style --filter=a 
Usage: check-webkit-style [--help] [options] [path1] [path2] ...

Overview:
  Check coding style according to WebKit style guidelines:
...
This script can miss errors and does not substitute for code review.
ERROR: Invalid filter rule &quot;a&quot;: every rule must start with + or -.

Maybe there is a way to distinguish between bad filter syntax (e.g. the above) vs. unrecognized category names.  For the latter it would make sense to provide the list.  I&apos;ll look into how easy it would be to do this.

&gt; Also, as this patch changes the behavior of --filter, I think it&apos;s nice to
&gt; mention this change in your ChangeLog.
&gt; 
&gt; &gt; +        sys.exit(2)
&gt; 
&gt; Why exit(2) is better than 1?

This was to match Python&apos;s optparse.OptionParser existing behavior, since we are replacing/overriding OptionParser.error():

(from optparse.py)

    def exit(self, status=0, msg=None):
        if msg:
            sys.stderr.write(msg)
        sys.exit(status)

    def error(self, msg):
        &quot;&quot;&quot;error(msg : string)

        Print a usage message incorporating &apos;msg&apos; to stderr and exit.
        If you override this in a subclass, it should not return -- it
        should either exit or raise an exception.
        &quot;&quot;&quot;
        self.print_usage(sys.stderr)
        self.exit(2, &quot;%s: error: %s\n&quot; % (self.get_prog_name(), msg))

&gt; 
&gt; &gt; This script can miss errors and does not substitute for code review.
&gt; &gt; ERROR: option --min-confidence: invalid integer value: &apos;xxx&apos;
&gt; 
&gt; Cannot we have one blank line before the &quot;ERROR: ...&quot; line?

Yes, we can certainly do that.  I noticed before that the OptionParser class strips all white space from the epilog string if you try to include it there, which is why I left it that way.  But since we&apos;re already concatenating the help output ourselves, we can now easily circumvent that issue.

Thanks for the quick feedback!

&gt; 
&gt; Putting r- for now to reduce the number of patches in our review queue, but
&gt; I&apos;ll re-put r+ if I&apos;m convinced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207158</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-01 08:00:53 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; &gt; +        sys.exit(2)
&gt; &gt; 
&gt; &gt; Why exit(2) is better than 1?

FYI, the Python documentation says this--

&quot;Some systems have a convention for assigning specific meanings to specific exit codes, but these are generally underdeveloped; Unix programs generally use 2 for command line syntax errors and 1 for all other kind of errors. If another type of object is passed, None is equivalent to passing zero, and any other object is printed to sys.stderr and results in an exit code of 1. In particular, sys.exit(&quot;some error message&quot;) is a quick way to exit a program when an error occurs.&quot;

(from http://docs.python.org/library/sys.html#sys.exit )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207167</commentid>
    <comment_count>6</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-01 08:17:08 -0700</bug_when>
    <thetext>&gt; I think we should maybe keep the existing behavior of showing an error message
&gt; in the case of a bad filter?

Yeah, I think it&apos;s fine.

&gt; &gt; Also, as this patch changes the behavior of --filter, I think it&apos;s nice to
&gt; &gt; mention this change in your ChangeLog.
&gt; &gt; 
&gt; &gt; &gt; +        sys.exit(2)
&gt; &gt; 
&gt; &gt; Why exit(2) is better than 1?
&gt; 
&gt; This was to match Python&apos;s optparse.OptionParser existing behavior, since we
&gt; are replacing/overriding OptionParser.error():

Thanks for the description! I think this info is useful if it is written in the code. So, could you add a brief comment to describe why our exit code should be 2?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207659</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-01 21:57:47 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; I&apos;m not sure if --filter=? is better than --filter= . How about outputting the
&gt; &gt; list of available filters for all invalid filters such as &quot;&quot;, &quot;?&quot;,
&gt; &gt; &quot;runtime/arrays&quot;, and etc?
&gt; 
&gt; I couldn&apos;t seem to get --filter= to work before.  I thought this was because
&gt; OptionParser has different parsing semantics than getopt.  However, it seems to
&gt; be working fine now (I must have been doing something wrong before), so I can
&gt; change it back to --filter.  Thanks for asking about this.

Maybe what it was before is that I didn&apos;t like how &quot;-f=&quot; doesn&apos;t work while &quot;--filter=&quot; does.  I&apos;ll make a note in the help string that you need to do &quot;-f &apos;&apos;&quot; if using the short form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207673</commentid>
    <comment_count>8</comment_count>
      <attachid>52378</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-01 22:28:13 -0700</bug_when>
    <thetext>Created attachment 52378
Proposed patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207781</commentid>
    <comment_count>9</comment_count>
      <attachid>52378</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-02 00:45:43 -0700</bug_when>
    <thetext>Comment on attachment 52378
Proposed patch 2

Looks good. Thanks for considering my comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207805</commentid>
    <comment_count>10</comment_count>
      <attachid>52378</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-02 01:28:08 -0700</bug_when>
    <thetext>Comment on attachment 52378
Proposed patch 2

Clearing flags on attachment: 52378

Committed r56987: &lt;http://trac.webkit.org/changeset/56987&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207806</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-02 01:28:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52270</attachid>
            <date>2010-04-01 00:30:45 -0700</date>
            <delta_ts>2010-04-01 22:28:13 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-34676-1.diff</filename>
            <type>text/plain</type>
            <size>23707</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlOWI0MDE1Li4yZTRlNWVkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDEgQEAKIDIwMTAtMDMt
MzEgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmUtd3JvdGUgY2hlY2std2Via2l0
LXN0eWxlJ3MgYXJndW1lbnQgcGFyc2luZyBjb2RlIHRvIHVzZQorICAgICAgICBQeXRob24ncyBv
cHRwYXJzZXIgbW9kdWxlIGFuZCBtb3JlIHVuaWZvcm0gZXJyb3ItaGFuZGxpbmcgbG9naWMuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0Njc2CisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL29wdHBhcnNlci5weToKKyAgICAgICAg
ICAtIFJlbW92ZWQgIm9wdGlvbiBoZWxwIiBmcm9tIGNoZWNrLXdlYmtpdC1zdHlsZSdzIHVzYWdl
IHN0cmluZworICAgICAgICAgICAgc2luY2UgdGhhdCBpcyBwcm92aWRlZCBzZXBhcmF0ZWx5IGJ5
IHRoZSBPcHRpb25QYXJzZXIgY2xhc3MuCisgICAgICAgICAgLSBBbHNvIGNoYW5nZWQgdGhlIHVz
YWdlIHN0cmluZyBmcm9tIGEgZnVuY3Rpb24gdG8gYSBjb25zdGFudAorICAgICAgICAgICAgc3Ry
aW5nIF9VU0FHRS4KKyAgICAgICAgICAtIEFkZGVkIGFuIF9FUElMT0cgc3RyaW5nIHdoaWNoIHJl
bmRlcnMgYWZ0ZXIgT3B0aW9uUGFyc2VyJ3MKKyAgICAgICAgICAgIHVzYWdlIHN0cmluZyBhbmQg
b3B0aW9uIGhlbHAuCisgICAgICAgICAgLSBJbiB0aGUgQXJndW1lbnRQYXJzZXIgY2xhc3M6Cisg
ICAgICAgICAgICAtIENoYW5nZWQgdGhlIGNvbnN0cnVjdG9yJ3Mgc3RkZXJyX3dyaXRlIHBhcmFt
ZXRlciB0byBhCisgICAgICAgICAgICAgIG1vY2tfc3RkZXJyIHNpbmNlIHRoZSBPcHRpb25QYXJz
ZXIgYWNjZXB0cyBhIHN5cy5zdGRlcnIKKyAgICAgICAgICAgICAgc3Vic3RpdHV0ZSByYXRoZXIg
dGhhbiBhIHN5cy5zdGRlcnIud3JpdGUgc3Vic3RpdHV0ZS4KKyAgICAgICAgICAgIC0gQ2hhbmdl
ZCB0aGUgY29uc3RydWN0b3IgdG8gc2V0IGEgX3BhcnNlciBkYXRhIGF0dHJpYnV0ZSB3aXRoCisg
ICAgICAgICAgICAgIGFuIE9wdGlvblBhcnNlciBpbnN0YW5jZS4KKyAgICAgICAgICAgIC0gQWRk
ZWQgYSBfY3JlYXRlX29wdGlvbl9wYXJzZXIoKSBtZXRob2Qgd2hpY2ggaW5zdGFudGlhdGVzCisg
ICAgICAgICAgICAgIHRoZSBPcHRpb25QYXJzZXIuCisgICAgICAgICAgICAtIFVwZGF0ZWQgX2V4
aXRfd2l0aF9oZWxwKCkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgT3B0aW9uUGFyc2VyJ3MKKyAgICAg
ICAgICAgICAgaGVscCBtZXRob2QuCisgICAgICAgICAgICAtIFVwZGF0ZWQgdGhlIHBhcnNlKCkg
bWV0aG9kIGFzIG5lY2Vzc2FyeS4gIEFsc28gY2hhbmdlZCB0aGUKKyAgICAgICAgICAgICAgcmFp
c2luZyBvZiBWYWx1ZUVycm9ycyB0byBjYWxscyB0byBfZXhpdF93aXRoX2hlbHAoKS4KKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAgIC0gUmVtb3ZlZCB0aGUgQ3JlYXRlVXNhZ2VUZXN0IGNsYXNzIHNpbmNlIHRoZSBjcmVh
dGVfdXNhZ2UgbWV0aG9kCisgICAgICAgICAgICB3YXMgcmVwbGFjZWQgYnkgYSBjb25zdGFudCBz
dHJpbmcuCisgICAgICAgICAgLSBBZGRlZCBhIF9Nb2NrU3RkRXJyIGNsYXNzIHRvIHRoZSBBcmd1
bWVudFBhcnNlclRlc3QgY2xhc3MuCisgICAgICAgICAgLSBVcGRhdGVkIHRoZSB1bml0IHRlc3Rz
IGFzIG5lY2Vzc2FyeS4KKworCisyMDEwLTAzLTMxICBDaHJpcyBKZXJkb25layAgPGNqZXJkb25l
a0B3ZWJraXQub3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgTGV2aW4uCiAKICAgICAg
ICAgQWRkZWQgUHl0aG9uIHN0eWxlIGNoZWNraW5nIHRvIGNoZWNrLXdlYmtpdC1zdHlsZSB1c2lu
ZwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJz
ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL29wdHBhcnNlci5weQpp
bmRleCAzNDAzZGQ4Li4wNzc0YjExIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL29wdHBhcnNlci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL29wdHBhcnNlci5weQpAQCAtMjIsNyArMjIsNyBAQAogCiAiIiJTdXBwb3J0cyB0
aGUgcGFyc2luZyBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IgY2hlY2std2Via2l0LXN0eWxl
LiIiIgogCi1pbXBvcnQgZ2V0b3B0Citmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIK
IGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cwpAQCAtMzIsNzggKzMy
LDQyIEBAIGZyb20gZmlsdGVyIGltcG9ydCB2YWxpZGF0ZV9maWx0ZXJfcnVsZXMKIAogX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCitfVVNBR0UgPSAiIiJ1c2FnZTogJXByb2cg
Wy0taGVscF0gW29wdGlvbnNdIFtwYXRoMV0gW3BhdGgyXSAuLi4KIAotZGVmIF9jcmVhdGVfdXNh
Z2UoZGVmYXVsdF9vcHRpb25zKToKLSAgICAiIiJSZXR1cm4gdGhlIHVzYWdlIHN0cmluZyB0byBk
aXNwbGF5IGZvciBjb21tYW5kIGhlbHAuCitPdmVydmlldzoKKyAgQ2hlY2sgY29kaW5nIHN0eWxl
IGFjY29yZGluZyB0byBXZWJLaXQgc3R5bGUgZ3VpZGVsaW5lczoKIAotICAgIEFyZ3M6Ci0gICAg
ICBkZWZhdWx0X29wdGlvbnM6IEEgRGVmYXVsdENvbW1hbmRPcHRpb25WYWx1ZXMgaW5zdGFuY2Uu
CisgICAgICBodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvY29kaW5nLXN0eWxlLmh0bWwKIAotICAg
ICIiIgotICAgIHVzYWdlID0gIiIiCi1TeW50YXg6ICUocHJvZ3JhbV9uYW1lKXMgWy0tZmlsdGVy
PS14LCt5LC4uLl0gWy0tZ2l0LWNvbW1pdD08U2luZ2xlQ29tbWl0Pl0KLSAgICAgICAgWy0tbWlu
LWNvbmZpZGVuY2U9I10gWy0tb3V0cHV0PXZzN10gWy0tdmVyYm9zZV0gW2ZpbGUgb3IgZGlyZWN0
b3J5XSAuLi4KLQotICBUaGUgc3R5bGUgZ3VpZGVsaW5lcyB0aGlzIHRyaWVzIHRvIGZvbGxvdyBh
cmUgaGVyZToKLSAgICBodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvY29kaW5nLXN0eWxlLmh0bWwK
LQotICBFdmVyeSBzdHlsZSBlcnJvciBpcyBnaXZlbiBhIGNvbmZpZGVuY2Ugc2NvcmUgZnJvbSAx
LTUsIHdpdGggNSBtZWFuaW5nCi0gIHdlIGFyZSBjZXJ0YWluIG9mIHRoZSBwcm9ibGVtLCBhbmQg
MSBtZWFuaW5nIGl0IGNvdWxkIGJlIGEgbGVnaXRpbWF0ZQotICBjb25zdHJ1Y3QuICBUaGlzIGNh
biBtaXNzIHNvbWUgZXJyb3JzIGFuZCBkb2VzIG5vdCBzdWJzdGl0dXRlIGZvcgotICBjb2RlIHJl
dmlldy4KLQotICBUbyBwcmV2ZW50IHNwZWNpZmljIGxpbmVzIGZyb20gYmVpbmcgbGludGVkLCBh
ZGQgYSAnLy8gTk9MSU5UJyBjb21tZW50IHRvIHRoZQotICBlbmQgb2YgdGhlIGxpbmUuCi0KLSAg
TGludGVkIGV4dGVuc2lvbnMgYXJlIC5jcHAsIC5jIGFuZCAuaC4gIE90aGVyIGZpbGUgdHlwZXMg
YXJlIGlnbm9yZWQuCi0KLSAgVGhlIGZpbGUgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBhY2Nl
cHRzIG11bHRpcGxlIGZpbGVzLiAgTGVhdmluZwotICBvdXQgdGhlIGZpbGUgcGFyYW1ldGVyIGFw
cGxpZXMgdGhlIGNoZWNrIHRvIGFsbCBmaWxlcyBjb25zaWRlcmVkIGNoYW5nZWQKLSAgYnkgeW91
ciBzb3VyY2UgY29udHJvbCBtYW5hZ2VtZW50IHN5c3RlbS4KLQotICBGbGFnczoKKyAgUGF0aCBh
cmd1bWVudHMgY2FuIGJlIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4gIElmIG5laXRoZXIgYSBnaXQg
Y29tbWl0IG5vcgorICBwYXRocyBhcmUgcGFzc2VkLCB0aGVuIGFsbCBjaGFuZ2VzIGluIHlvdXIg
c291cmNlIGNvbnRyb2wgd29ya2luZyBkaXJlY3RvcnkKKyAgYXJlIGNoZWNrZWQuCiAKLSAgICBm
aWx0ZXI9LXgsK3ksLi4uCi0gICAgICBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGJvb2xlYW4g
ZmlsdGVyIHJ1bGVzIHVzZWQgdG8gZmlsdGVyCi0gICAgICB3aGljaCBjYXRlZ29yaWVzIG9mIHN0
eWxlIGd1aWRlbGluZXMgdG8gY2hlY2suICBUaGUgc2NyaXB0IGNoZWNrcwotICAgICAgYSBjYXRl
Z29yeSBpZiB0aGUgY2F0ZWdvcnkgcGFzc2VzIHRoZSBmaWx0ZXIgcnVsZXMsIGFzIGZvbGxvd3Mu
CitTdHlsZSBlcnJvcnM6CisgIFRoaXMgc2NyaXB0IGFzc2lnbnMgdG8gZXZlcnkgc3R5bGUgZXJy
b3IgYSBjb25maWRlbmNlIHNjb3JlIGZyb20gMS01IGFuZAorICBhIGNhdGVnb3J5IG5hbWUuICBB
IGNvbmZpZGVuY2Ugc2NvcmUgb2YgNSBtZWFucyB0aGUgZXJyb3IgaXMgY2VydGFpbmx5CisgIGEg
cHJvYmxlbSwgYW5kIDEgbWVhbnMgaXQgY291bGQgYmUgZmluZS4KIAotICAgICAgQW55IHdlYmtp
dCBjYXRlZ29yeSBzdGFydHMgb3V0IHBhc3NpbmcuICBBbGwgZmlsdGVyIHJ1bGVzIGFyZSB0aGVu
Ci0gICAgICBldmFsdWF0ZWQgbGVmdCB0byByaWdodCwgd2l0aCBsYXRlciBydWxlcyB0YWtpbmcg
cHJlY2VkZW5jZS4gIEZvcgotICAgICAgZXhhbXBsZSwgdGhlIHJ1bGUgIitmb28iIHBhc3NlcyBh
bnkgY2F0ZWdvcnkgdGhhdCBzdGFydHMgd2l0aCAiZm9vIiwKLSAgICAgIGFuZCAiLWZvbyIgZmFp
bHMgYW55IHN1Y2ggY2F0ZWdvcnkuICBUaGUgZmlsdGVyIGlucHV0ICItd2hpdGVzcGFjZSwKLSAg
ICAgICt3aGl0ZXNwYWNlL2JyYWNlcyIgZmFpbHMgdGhlIGNhdGVnb3J5ICJ3aGl0ZXNwYWNlL3Rh
YiIgYW5kIHBhc3NlcwotICAgICAgIndoaXRlc3BhY2UvYnJhY2VzIi4KKyAgQ2F0ZWdvcnkgbmFt
ZXMgYXBwZWFyIGluIGVycm9yIG1lc3NhZ2VzIGluIGJyYWNrZXRzLCBmb3IgZXhhbXBsZQorICBb
d2hpdGVzcGFjZS9pbmRlbnRdLiAgU2VlIHRoZSBvcHRpb25zIHNlY3Rpb24gYmVsb3cgZm9yIGFu
IG9wdGlvbiB0aGF0CisgIGRpc3BsYXlzIGFsbCBhdmFpbGFibGUgY2F0ZWdvcmllcyBhbmQgd2hp
Y2ggYXJlIHJlcG9ydGVkIGJ5IGRlZmF1bHQuCiAKLSAgICAgIEV4YW1wbGVzOiAtLWZpbHRlcj0t
d2hpdGVzcGFjZSwrd2hpdGVzcGFjZS9icmFjZXMKLSAgICAgICAgICAgICAgICAtLWZpbHRlcj0t
d2hpdGVzcGFjZSwtcnVudGltZS9wcmludGYsK3J1bnRpbWUvcHJpbnRmX2Zvcm1hdAotICAgICAg
ICAgICAgICAgIC0tZmlsdGVyPS0sK2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlCitGaWx0ZXJz
OgorICBVc2UgZmlsdGVycyB0byBjb25maWd1cmUgd2hhdCBlcnJvcnMgdG8gcmVwb3J0LiAgRmls
dGVycyBhcmUgc3BlY2lmaWVkIHVzaW5nCisgIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYm9v
bGVhbiBmaWx0ZXIgcnVsZXMuICBUaGUgc2NyaXB0IHJlcG9ydHMgZXJyb3JzCisgIGluIGEgY2F0
ZWdvcnkgaWYgdGhlIGNhdGVnb3J5IHBhc3NlcyB0aGUgZmlsdGVyLCBhcyBkZXNjcmliZWQgYmVs
b3cuCiAKLSAgICAgIENhdGVnb3J5IG5hbWVzIGFwcGVhciBpbiBlcnJvciBtZXNzYWdlcyBpbiBi
cmFja2V0cywgZm9yIGV4YW1wbGUKLSAgICAgIFt3aGl0ZXNwYWNlL2luZGVudF0uICBUbyBzZWUg
YSBsaXN0IG9mIGFsbCBjYXRlZ29yaWVzIGF2YWlsYWJsZSB0bwotICAgICAgJShwcm9ncmFtX25h
bWUpcywgYWxvbmcgd2l0aCB3aGljaCBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LCBwYXNzCi0gICAg
ICB0aGUgZW1wdHkgZmlsdGVyIGFzIGZvbGxvd3M6Ci0gICAgICAgICAtLWZpbHRlcj0KKyAgQWxs
IGNhdGVnb3JpZXMgc3RhcnQgb3V0IHBhc3NpbmcuICBCb29sZWFuIGZpbHRlciBydWxlcyBhcmUg
dGhlbiBldmFsdWF0ZWQKKyAgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB3aXRoIGxhdGVyIHJ1bGVzIHRh
a2luZyBwcmVjZWRlbmNlLiAgRm9yIGV4YW1wbGUsIHRoZQorICBydWxlICIrZm9vIiBwYXNzZXMg
YW55IGNhdGVnb3J5IHRoYXQgc3RhcnRzIHdpdGggImZvbyIsIGFuZCAiLWZvbyIgZmFpbHMKKyAg
YW55IHN1Y2ggY2F0ZWdvcnkuICBUaGUgZmlsdGVyIGlucHV0ICItd2hpdGVzcGFjZSwrd2hpdGVz
cGFjZS9icmFjZXMiIGZhaWxzCisgIHRoZSBjYXRlZ29yeSAid2hpdGVzcGFjZS90YWIiIGFuZCBw
YXNzZXMgIndoaXRlc3BhY2UvYnJhY2VzIi4KIAotICAgIGdpdC1jb21taXQ9PFNpbmdsZUNvbW1p
dD4KLSAgICAgIENoZWNrcyB0aGUgc3R5bGUgb2YgZXZlcnl0aGluZyBmcm9tIHRoZSBnaXZlbiBj
b21taXQgdG8gdGhlIGxvY2FsIHRyZWUuCi0KLSAgICBtaW4tY29uZmlkZW5jZT0jCi0gICAgICBB
biBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgNSBpbmNsdXNpdmUgdGhhdCBpcyB0aGUgbWluaW11bSBj
b25maWRlbmNlCi0gICAgICBsZXZlbCBvZiBzdHlsZSBlcnJvcnMgdG8gcmVwb3J0LiAgSW4gcGFy
dGljdWxhciwgdGhlIHZhbHVlIDEgZGlzcGxheXMKLSAgICAgIGFsbCBlcnJvcnMuICBUaGUgZGVm
YXVsdCBpcyAlKGRlZmF1bHRfbWluX2NvbmZpZGVuY2Upcy4KLQotICAgIG91dHB1dD12czcKLSAg
ICAgIFRoZSBvdXRwdXQgZm9ybWF0LCB3aGljaCBtYXkgYmUgb25lIG9mCi0gICAgICAgIGVtYWNz
IDogdG8gZWFzZSBlbWFjcyBwYXJzaW5nCi0gICAgICAgIHZzNyAgIDogY29tcGF0aWJsZSB3aXRo
IFZpc3VhbCBTdHVkaW8KLSAgICAgIERlZmF1bHRzIHRvICIlKGRlZmF1bHRfb3V0cHV0X2Zvcm1h
dClzIi4gT3RoZXIgZm9ybWF0cyBhcmUgdW5zdXBwb3J0ZWQuCi0KLSAgICB2ZXJib3NlCi0gICAg
ICBMb2dnaW5nIGlzIHZlcmJvc2UgaWYgdGhpcyBmbGFnIGlzIHByZXNlbnQuCi0KLVBhdGggY29u
c2lkZXJhdGlvbnM6CisgIEV4YW1wbGVzOiAtLWZpbHRlcj0td2hpdGVzcGFjZSwrd2hpdGVzcGFj
ZS9icmFjZXMKKyAgICAgICAgICAgIC0tZmlsdGVyPS13aGl0ZXNwYWNlLC1ydW50aW1lL3ByaW50
ZiwrcnVudGltZS9wcmludGZfZm9ybWF0CisgICAgICAgICAgICAtLWZpbHRlcj0tLCtidWlsZC9p
bmNsdWRlX3doYXRfeW91X3VzZQogCitQYXRoczoKICAgQ2VydGFpbiBzdHlsZS1jaGVja2luZyBi
ZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBwYXRocyByZWxhdGl2ZSB0bwogICB0aGUgV2ViS2l0IHNv
dXJjZSByb290IG9mIHRoZSBmaWxlcyBiZWluZyBjaGVja2VkLiAgRm9yIGV4YW1wbGUsCiAgIGNl
cnRhaW4gdHlwZXMgb2YgZXJyb3JzIG1heSBiZSBoYW5kbGVkIGRpZmZlcmVudGx5IGZvciBmaWxl
cyBpbgpAQCAtMTMxLDEzICs5NSwxMCBAQCBQYXRoIGNvbnNpZGVyYXRpb25zOgogICBjaGVja2lu
ZyBvbmx5IGZpbGVzIGluIHRoZSBzb3VyY2UgdHJlZSB3aWxsIGVuc3VyZSB0aGF0IGFsbCBzdHls
ZQogICBjaGVja2luZyBiZWhhdmVzIGNvcnJlY3RseSAtLSB3aGV0aGVyIG9yIG5vdCBhIGNoZWNr
b3V0IGNhbiBiZQogICBkZXRlY3RlZC4gIFRoaXMgaXMgYmVjYXVzZSBhbGwgZmlsZSBwYXRocyB3
aWxsIGFscmVhZHkgYmUgcmVsYXRpdmUKLSAgdG8gdGhlIHNvdXJjZSByb290IGFuZCBzbyB3aWxs
IG5vdCBuZWVkIHRvIGJlIGNvbnZlcnRlZC4KLQotIiIiICUgeydwcm9ncmFtX25hbWUnOiBvcy5w
YXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSwKLSAgICAgICAnZGVmYXVsdF9taW5fY29uZmlkZW5j
ZSc6IGRlZmF1bHRfb3B0aW9ucy5taW5fY29uZmlkZW5jZSwKLSAgICAgICAnZGVmYXVsdF9vdXRw
dXRfZm9ybWF0JzogZGVmYXVsdF9vcHRpb25zLm91dHB1dF9mb3JtYXR9CisgIHRvIHRoZSBzb3Vy
Y2Ugcm9vdCBhbmQgc28gd2lsbCBub3QgbmVlZCB0byBiZSBjb252ZXJ0ZWQuIiIiCiAKLSAgICBy
ZXR1cm4gdXNhZ2UKK19FUElMT0cgPSAoIlRoaXMgc2NyaXB0IGNhbiBtaXNzIGVycm9ycyBhbmQg
ZG9lcyBub3Qgc3Vic3RpdHV0ZSBmb3IgIgorICAgICAgICAgICAiY29kZSByZXZpZXcuIikKIAog
CiAjIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBoYXZlIGtub3dsZWRnZSBvZiB0aGUgZmxhZyBrZXkg
bmFtZXMuCkBAIC0yNjIsNyArMjIzLDYgQEAgY2xhc3MgQXJndW1lbnRQcmludGVyKG9iamVjdCk6
CiAgICAgICAgIHJldHVybiBmbGFnX3N0cmluZy5zdHJpcCgpCiAKIAotIyBGSVhNRTogUmVwbGFj
ZSB0aGUgdXNlIG9mIGdldG9wdC5nZXRvcHQoKSB3aXRoIG9wdHBhcnNlLk9wdGlvblBhcnNlci4K
IGNsYXNzIEFyZ3VtZW50UGFyc2VyKG9iamVjdCk6CiAKICAgICAjIEZJWE1FOiBNb3ZlIHRoZSBk
b2N1bWVudGF0aW9uIG9mIHRoZSBhdHRyaWJ1dGVzIHRvIHRoZSBfX2luaXRfXwpAQCAtMjg3LDgg
KzI0Nyw4IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAg
IGFsbF9jYXRlZ29yaWVzLAogICAgICAgICAgICAgICAgICBkZWZhdWx0X29wdGlvbnMsCiAgICAg
ICAgICAgICAgICAgIGJhc2VfZmlsdGVyX3J1bGVzPU5vbmUsCi0gICAgICAgICAgICAgICAgIGNy
ZWF0ZV91c2FnZT1Ob25lLAotICAgICAgICAgICAgICAgICBzdGRlcnJfd3JpdGU9Tm9uZSk6Cisg
ICAgICAgICAgICAgICAgIG1vY2tfc3RkZXJyPU5vbmUsCisgICAgICAgICAgICAgICAgIHVzYWdl
PU5vbmUpOgogICAgICAgICAiIiJDcmVhdGUgYW4gQXJndW1lbnRQYXJzZXIgaW5zdGFuY2UuCiAK
ICAgICAgICAgQXJnczoKQEAgLTMxMCwzMSArMjcwLDg5IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2Vy
KG9iamVjdCk6CiAgICAgICAgICIiIgogICAgICAgICBpZiBiYXNlX2ZpbHRlcl9ydWxlcyBpcyBO
b25lOgogICAgICAgICAgICAgYmFzZV9maWx0ZXJfcnVsZXMgPSBbXQotICAgICAgICBpZiBjcmVh
dGVfdXNhZ2UgaXMgTm9uZToKLSAgICAgICAgICAgIGNyZWF0ZV91c2FnZSA9IF9jcmVhdGVfdXNh
Z2UKLSAgICAgICAgaWYgc3RkZXJyX3dyaXRlIGlzIE5vbmU6Ci0gICAgICAgICAgICBzdGRlcnJf
d3JpdGUgPSBzeXMuc3RkZXJyLndyaXRlCisgICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIgaWYg
bW9ja19zdGRlcnIgaXMgTm9uZSBlbHNlIG1vY2tfc3RkZXJyCisgICAgICAgIGlmIHVzYWdlIGlz
IE5vbmU6CisgICAgICAgICAgICB1c2FnZSA9IF9VU0FHRQogCiAgICAgICAgIHNlbGYuX2FsbF9j
YXRlZ29yaWVzID0gYWxsX2NhdGVnb3JpZXMKICAgICAgICAgc2VsZi5fYmFzZV9maWx0ZXJfcnVs
ZXMgPSBiYXNlX2ZpbHRlcl9ydWxlcworCiAgICAgICAgICMgRklYTUU6IFJlbmFtZSB0aGVzZSB0
byByZWZsZWN0IHRoYXQgdGhleSBhcmUgaW50ZXJuYWwuCi0gICAgICAgIHNlbGYuY3JlYXRlX3Vz
YWdlID0gY3JlYXRlX3VzYWdlCiAgICAgICAgIHNlbGYuZGVmYXVsdF9vcHRpb25zID0gZGVmYXVs
dF9vcHRpb25zCi0gICAgICAgIHNlbGYuc3RkZXJyX3dyaXRlID0gc3RkZXJyX3dyaXRlCi0KLSAg
ICBkZWYgX2V4aXRfd2l0aF91c2FnZShzZWxmLCBlcnJvcl9tZXNzYWdlPScnKToKKyAgICAgICAg
c2VsZi5zdGRlcnJfd3JpdGUgPSBzdGRlcnIud3JpdGUKKworICAgICAgICBzZWxmLl9wYXJzZXIg
PSBzZWxmLl9jcmVhdGVfb3B0aW9uX3BhcnNlcihzdGRlcnI9c3RkZXJyLAorICAgICAgICAgICAg
dXNhZ2U9dXNhZ2UsCisgICAgICAgICAgICBkZWZhdWx0X21pbl9jb25maWRlbmNlPXNlbGYuZGVm
YXVsdF9vcHRpb25zLm1pbl9jb25maWRlbmNlLAorICAgICAgICAgICAgZGVmYXVsdF9vdXRwdXRf
Zm9ybWF0PXNlbGYuZGVmYXVsdF9vcHRpb25zLm91dHB1dF9mb3JtYXQpCisKKyAgICBkZWYgX2Ny
ZWF0ZV9vcHRpb25fcGFyc2VyKHNlbGYsIHN0ZGVyciwgdXNhZ2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0X21pbl9jb25maWRlbmNlLCBkZWZhdWx0X291dHB1dF9mb3Jt
YXQpOgorICAgICAgICAjIFNpbmNlIHRoZSBlcGlsb2cgc3RyaW5nIGlzIHNob3J0LCBpdCBpcyBu
b3QgbmVjZXNzYXJ5IHRvIHJlcGxhY2UKKyAgICAgICAgIyB0aGUgZXBpbG9nIHN0cmluZyB3aXRo
IGEgbW9jayBlcGlsb2cgc3RyaW5nIHdoZW4gdGVzdGluZy4KKyAgICAgICAgIyBGb3IgdGhpcyBy
ZWFzb24sIHdlIHVzZSBfRVBJTE9HIGRpcmVjdGx5IHJhdGhlciB0aGFuIHBhc3NpbmcgaXQKKyAg
ICAgICAgIyBhcyBhbiBhcmd1bWVudCBsaWtlIHdlIGRvIGZvciB0aGUgdXNhZ2Ugc3RyaW5nLgor
ICAgICAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9dXNhZ2UsIGVwaWxvZz1fRVBJTE9H
KQorCisgICAgICAgIGZpbHRlcl9oZWxwID0gKCdzZXQgYSBmaWx0ZXIgdG8gY29udHJvbCB3aGF0
IGNhdGVnb3JpZXMgb2Ygc3R5bGUgJworICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3JzIHRv
IHJlcG9ydC4gIFNwZWNpZnkgYSBmaWx0ZXIgdXNpbmcgYSBjb21tYS0nCisgICAgICAgICAgICAg
ICAgICAgICAgICdkZWxpbWl0ZWQgbGlzdCBvZiBib29sZWFuIGZpbHRlciBydWxlcywgZm9yIGV4
YW1wbGUgJworICAgICAgICAgICAgICAgICAgICAgICAnIi0tZmlsdGVyIC13aGl0ZXNwYWNlLCt3
aGl0ZXNwYWNlL2JyYWNlcyIuICAnCisgICAgICAgICAgICAgICAgICAgICAgICdQYXNzIGEgcXVl
c3Rpb24gbWFyayAoIj8iKSB0byBkaXNwbGF5IGFsbCBjYXRlZ29yaWVzICcKKyAgICAgICAgICAg
ICAgICAgICAgICAgJ2FuZCB3aGljaCBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LicpCisgICAgICAg
IHBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZpbHRlci1ydWxlcyIsIG1ldGF2YXI9IlJVTEVT
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iZmlsdGVyX3ZhbHVlIiwgaGVscD1m
aWx0ZXJfaGVscCkKKworICAgICAgICBnaXRfaGVscCA9ICJjaGVjayBhbGwgY2hhbmdlcyBhZnRl
ciB0aGUgZ2l2ZW4gZ2l0IGNvbW1pdC4iCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZyIs
ICItLWdpdC1jb21taXQiLCAiLS1naXQtZGlmZiIsICItLWdpdC1zaW5jZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1ldGF2YXI9IkNPTU1JVCIsIGRlc3Q9ImdpdF9zaW5jZSIsIGhlbHA9
Z2l0X2hlbHAsKQorCisgICAgICAgIG1pbl9jb25maWRlbmNlX2hlbHAgPSAoInNldCB0aGUgbWlu
aW11bSBjb25maWRlbmNlIG9mIHN0eWxlIGVycm9ycyAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRvIHJlcG9ydC4gIENhbiBiZSBhbiBpbnRlZ2VyIDEtNSwgd2l0aCAxICIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzcGxheWluZyBhbGwgZXJyb3JzLiAgRGVm
YXVsdHMgdG8gJWRlZmF1bHQuIikKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1tIiwgIi0t
bWluLWNvbmZpZGVuY2UiLCBtZXRhdmFyPSJJTlQiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlPSJpbnQiLCBkZXN0PSJtaW5fY29uZmlkZW5jZSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ9ZGVmYXVsdF9taW5fY29uZmlkZW5jZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD1taW5fY29uZmlkZW5jZV9oZWxwKQorCisgICAgICAgIG91dHB1dF9mb3Jt
YXRfaGVscCA9ICgnc2V0IHRoZSBvdXRwdXQgZm9ybWF0LCB3aGljaCBjYW4gYmUgImVtYWNzIiAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3IgInZzNyIgKGZvciBWaXN1YWwgU3R1
ZGlvKS4gICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZWZhdWx0cyB0byAiJWRl
ZmF1bHQiLicpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dHB1dC1mb3Jt
YXQiLCBtZXRhdmFyPSJGT1JNQVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2Vz
PVsiZW1hY3MiLCAidnM3Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9Im91dHB1
dF9mb3JtYXQiLCBkZWZhdWx0PWRlZmF1bHRfb3V0cHV0X2Zvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD1vdXRwdXRfZm9ybWF0X2hlbHApCisKKyAgICAgICAgdmVyYm9zZV9o
ZWxwID0gImVuYWJsZSB2ZXJib3NlIGxvZ2dpbmcuIgorICAgICAgICBwYXJzZXIuYWRkX29wdGlv
bigiLXYiLCAiLS12ZXJib3NlIiwgZGVzdD0iaXNfdmVyYm9zZSIsIGRlZmF1bHQ9RmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9dmVyYm9z
ZV9oZWxwKQorCisgICAgICAgICMgT3ZlcnJpZGUgT3B0aW9uUGFyc2VyJ3MgZXJyb3IoKSBtZXRo
b2Qgc28gdGhhdCBvcHRpb24gaGVscCB3aWxsCisgICAgICAgICMgYWxzbyBkaXNwbGF5IHdoZW4g
YW4gZXJyb3Igb2NjdXJzLiAgTm9ybWFsbHksIGp1c3QgdGhlIHVzYWdlCisgICAgICAgICMgc3Ry
aW5nIGRpc3BsYXlzIGFuZCBub3Qgb3B0aW9uIGhlbHAuCisgICAgICAgIHBhcnNlci5lcnJvciA9
IHNlbGYuX2V4aXRfd2l0aF9oZWxwCisKKyAgICAgICAgIyBPdmVycmlkZSBPcHRpb25QYXJzZXIn
cyBwcmludF9oZWxwKCkgbWV0aG9kIHNvIHRoYXQgaGVscCBvdXRwdXQKKyAgICAgICAgIyBkb2Vz
IG5vdCByZW5kZXIgdG8gdGhlIHNjcmVlbiB3aGlsZSBydW5uaW5nIHVuaXQgdGVzdHMuCisgICAg
ICAgIHByaW50X2hlbHAgPSBwYXJzZXIucHJpbnRfaGVscAorICAgICAgICBwYXJzZXIucHJpbnRf
aGVscCA9IGxhbWJkYTogcHJpbnRfaGVscChmaWxlPXN0ZGVycikKKworICAgICAgICByZXR1cm4g
cGFyc2VyCisKKyAgICBkZWYgX2V4aXRfd2l0aF9oZWxwKHNlbGYsIGVycm9yX21lc3NhZ2U9Tm9u
ZSk6CiAgICAgICAgICIiIkV4aXQgYW5kIHByaW50IGEgdXNhZ2Ugc3RyaW5nIHdpdGggYW4gb3B0
aW9uYWwgZXJyb3IgbWVzc2FnZS4KIAogICAgICAgICBBcmdzOgogICAgICAgICAgIGVycm9yX21l
c3NhZ2U6IEEgc3RyaW5nIHRoYXQgaXMgYW4gZXJyb3IgbWVzc2FnZSB0byBwcmludC4KIAogICAg
ICAgICAiIiIKLSAgICAgICAgdXNhZ2UgPSBzZWxmLmNyZWF0ZV91c2FnZShzZWxmLmRlZmF1bHRf
b3B0aW9ucykKLSAgICAgICAgc2VsZi5zdGRlcnJfd3JpdGUodXNhZ2UpCisgICAgICAgICMgVGhl
IG1ldGhvZCBmb3JtYXRfaGVscCgpIGluY2x1ZGVzIGJvdGggdGhlIHVzYWdlIHN0cmluZyBhbmQK
KyAgICAgICAgIyB0aGUgZmxhZyBvcHRpb25zLgorICAgICAgICBoZWxwID0gc2VsZi5fcGFyc2Vy
LmZvcm1hdF9oZWxwKCkKKyAgICAgICAgc2VsZi5zdGRlcnJfd3JpdGUoaGVscCkKICAgICAgICAg
aWYgZXJyb3JfbWVzc2FnZToKLSAgICAgICAgICAgIHN5cy5leGl0KCdcbkZBVEFMIEVSUk9SOiAn
ICsgZXJyb3JfbWVzc2FnZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHN5cy5leGl0KDEp
CisgICAgICAgICAgICBfbG9nLmVycm9yKGVycm9yX21lc3NhZ2UpCisgICAgICAgIHN5cy5leGl0
KDIpCiAKICAgICBkZWYgX2V4aXRfd2l0aF9jYXRlZ29yaWVzKHNlbGYpOgogICAgICAgICAiIiJF
eGl0IGFuZCBwcmludCB0aGUgc3R5bGUgY2F0ZWdvcmllcyBhbmQgZGVmYXVsdCBmaWx0ZXIgcnVs
ZXMuIiIiCkBAIC0zODEsNjkgKzM5OSw0NiBAQCBjbGFzcyBBcmd1bWVudFBhcnNlcihvYmplY3Qp
OgogICAgICAgICAgIG9wdGlvbnM6IEEgQ29tbWFuZE9wdGlvblZhbHVlcyBpbnN0YW5jZS4KIAog
ICAgICAgICAiIiIKLSAgICAgICAgaXNfdmVyYm9zZSA9IEZhbHNlCi0gICAgICAgIG1pbl9jb25m
aWRlbmNlID0gc2VsZi5kZWZhdWx0X29wdGlvbnMubWluX2NvbmZpZGVuY2UKLSAgICAgICAgb3V0
cHV0X2Zvcm1hdCA9IHNlbGYuZGVmYXVsdF9vcHRpb25zLm91dHB1dF9mb3JtYXQKKyAgICAgICAg
KG9wdGlvbnMsIHBhdGhzKSA9IHNlbGYuX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3M9YXJncykKIAot
ICAgICAgICAjIFRoZSBmbGFncyB0aGF0IHRoZSBDb21tYW5kT3B0aW9uVmFsdWVzIGNsYXNzIHN1
cHBvcnRzLgotICAgICAgICBmbGFncyA9IFsnZmlsdGVyPScsICdnaXQtY29tbWl0PScsICdoZWxw
JywgJ21pbi1jb25maWRlbmNlPScsCi0gICAgICAgICAgICAgICAgICdvdXRwdXQ9JywgJ3ZlcmJv
c2UnXQorICAgICAgICBmaWx0ZXJfdmFsdWUgPSBvcHRpb25zLmZpbHRlcl92YWx1ZQorICAgICAg
ICBnaXRfY29tbWl0ID0gb3B0aW9ucy5naXRfc2luY2UKKyAgICAgICAgaXNfdmVyYm9zZSA9IG9w
dGlvbnMuaXNfdmVyYm9zZQorICAgICAgICBtaW5fY29uZmlkZW5jZSA9IG9wdGlvbnMubWluX2Nv
bmZpZGVuY2UKKyAgICAgICAgb3V0cHV0X2Zvcm1hdCA9IG9wdGlvbnMub3V0cHV0X2Zvcm1hdAog
Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIChvcHRzLCBwYXRocykgPSBnZXRvcHQuZ2V0b3B0
KGFyZ3MsICcnLCBmbGFncykKLSAgICAgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciwgZXJy
OgotICAgICAgICAgICAgIyBGSVhNRTogU2V0dGxlIG9uIGFuIGVycm9yIGhhbmRsaW5nIGFwcHJv
YWNoOiBjb21lIHVwCi0gICAgICAgICAgICAjICAgICAgICB3aXRoIGEgY29uc2lzdGVudCBndWlk
ZWxpbmUgYXMgdG8gd2hlbiBhbmQgd2hldGhlcgotICAgICAgICAgICAgIyAgICAgICAgYSBWYWx1
ZUVycm9yIHNob3VsZCBiZSByYWlzZWQgdmVyc3VzIGNhbGxpbmcKLSAgICAgICAgICAgICMgICAg
ICAgIHN5cy5leGl0IHdoZW4gbmVlZGluZyB0byBpbnRlcnJ1cHQgZXhlY3V0aW9uLgotICAgICAg
ICAgICAgc2VsZi5fZXhpdF93aXRoX3VzYWdlKCdJbnZhbGlkIGFyZ3VtZW50czogJXMnICUgZXJy
KQotCi0gICAgICAgIGdpdF9jb21taXQgPSBOb25lCi0gICAgICAgIGZpbHRlcl9ydWxlcyA9IFtd
Ci0KLSAgICAgICAgZm9yIChvcHQsIHZhbCkgaW4gb3B0czoKLSAgICAgICAgICAgICMgUHJvY2Vz
cyAtLWhlbHAgZmlyc3QgKG91dCBvZiBhbHBoYWJldGljYWwgb3JkZXIpLgotICAgICAgICAgICAg
aWYgb3B0ID09ICctLWhlbHAnOgotICAgICAgICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF91c2Fn
ZSgpCi0gICAgICAgICAgICBlbGlmIG9wdCA9PSAnLS1maWx0ZXInOgotICAgICAgICAgICAgICAg
IGlmIG5vdCB2YWw6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF9jYXRlZ29y
aWVzKCkKLSAgICAgICAgICAgICAgICBmaWx0ZXJfcnVsZXMgPSBzZWxmLl9wYXJzZV9maWx0ZXJf
ZmxhZyh2YWwpCi0gICAgICAgICAgICBlbGlmIG9wdCA9PSAnLS1naXQtY29tbWl0JzoKLSAgICAg
ICAgICAgICAgICBnaXRfY29tbWl0ID0gdmFsCi0gICAgICAgICAgICBlbGlmIG9wdCA9PSAnLS1t
aW4tY29uZmlkZW5jZSc6Ci0gICAgICAgICAgICAgICAgbWluX2NvbmZpZGVuY2UgPSB2YWwKLSAg
ICAgICAgICAgIGVsaWYgb3B0ID09ICctLW91dHB1dCc6Ci0gICAgICAgICAgICAgICAgb3V0cHV0
X2Zvcm1hdCA9IHZhbAotICAgICAgICAgICAgZWxpZiBvcHQgPT0gIi0tdmVyYm9zZSI6Ci0gICAg
ICAgICAgICAgICAgaXNfdmVyYm9zZSA9IFRydWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgIyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgYmVjYXVzZSBnZXRvcHQuZ2V0b3B0
KCkKLSAgICAgICAgICAgICAgICAjIHJhaXNlcyBhbiBlcnJvciBpbiB0aGlzIGNhc2UuCi0gICAg
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBvcHRpb246ICIlcyInICUgb3B0
KQotCi0gICAgICAgICMgQ2hlY2sgdmFsaWRpdHkgb2YgcmVzdWx0aW5nIHZhbHVlcy4KKyAgICAg
ICAgaWYgZmlsdGVyX3ZhbHVlID09ICI/IjoKKyAgICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF9j
YXRlZ29yaWVzKCkKKworICAgICAgICAjIFZhbGlkYXRlIHVzZXItcHJvdmlkZWQgdmFsdWVzLgor
CisgICAgICAgICMgRklYTUU6IE1vdmUgdGhlIGNoZWNrb3V0IGVycm9yIG91dHNpZGUgb2YgdGhp
cyBtb2R1bGUuICBUaGUgcGFyc2UKKyAgICAgICAgIyAgICAgICAgbWV0aG9kIHNob3VsZCBub3Qg
bmVlZCB0byBrbm93IHdoZXRoZXIgYSBjaGVja291dCB3YXMgZm91bmQuCiAgICAgICAgIGlmIG5v
dCBmb3VuZF9jaGVja291dCBhbmQgbm90IHBhdGhzOgogICAgICAgICAgICAgX2xvZy5lcnJvcigi
V2ViS2l0IGNoZWNrb3V0IG5vdCBmb3VuZDogWW91IG11c3QgcnVuIHRoaXMgc2NyaXB0ICIKICAg
ICAgICAgICAgICAgICAgICAgICAgImZyb20gaW5zaWRlIGEgV2ViS2l0IGNoZWNrb3V0IGlmIHlv
dSBhcmUgbm90IHBhc3NpbmcgIgogICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWMgcGF0
aHMgdG8gY2hlY2suIikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKLSAgICAgICAgaWYgcGF0
aHMgYW5kIChnaXRfY29tbWl0ICE9IE5vbmUpOgotICAgICAgICAgICAgc2VsZi5fZXhpdF93aXRo
X3VzYWdlKCdJdCBpcyBub3QgcG9zc2libGUgdG8gY2hlY2sgZmlsZXMgYW5kIGEgJwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVjaWZpYyBjb21taXQgYXQgdGhlIHNhbWUg
dGltZS4nKQotCi0gICAgICAgIGlmIG91dHB1dF9mb3JtYXQgbm90IGluICgnZW1hY3MnLCAndnM3
Jyk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIC0tb3V0cHV0IHZhbHVl
ICIlcyI6IFRoZSBvbmx5ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsbG93ZWQg
b3V0cHV0IGZvcm1hdHMgYXJlIGVtYWNzIGFuZCB2czcuJyAlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dF9mb3JtYXQpCi0KLSAgICAgICAgdmFsaWRhdGVfZmlsdGVyX3J1bGVz
KGZpbHRlcl9ydWxlcywgc2VsZi5fYWxsX2NhdGVnb3JpZXMpCisgICAgICAgIGlmIHBhdGhzIGFu
ZCBnaXRfY29tbWl0OgorICAgICAgICAgICAgc2VsZi5fZXhpdF93aXRoX2hlbHAoJ1lvdSBjYW5u
b3QgcHJvdmlkZSBib3RoIHBhdGhzIGFuZCBhIGdpdCAnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnY29tbWl0IGF0IHRoZSBzYW1lIHRpbWUuJykKIAogICAgICAgICBtaW5fY29u
ZmlkZW5jZSA9IGludChtaW5fY29uZmlkZW5jZSkKICAgICAgICAgaWYgKG1pbl9jb25maWRlbmNl
IDwgMSkgb3IgKG1pbl9jb25maWRlbmNlID4gNSk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCdJbnZhbGlkIC0tbWluLWNvbmZpZGVuY2UgdmFsdWUgJXM6IHZhbHVlIG11c3QgJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnYmUgYmV0d2VlbiAxIGFuZCA1IGluY2x1c2l2ZS4n
ICUgbWluX2NvbmZpZGVuY2UpCisgICAgICAgICAgICBzZWxmLl9leGl0X3dpdGhfaGVscCgnb3B0
aW9uIC0tbWluLWNvbmZpZGVuY2U6IGludmFsaWQgaW50ZWdlcjogJworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJyVzOiB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNScKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgbWluX2NvbmZpZGVuY2UpCisKKyAgICAg
ICAgaWYgZmlsdGVyX3ZhbHVlOgorICAgICAgICAgICAgZmlsdGVyX3J1bGVzID0gc2VsZi5fcGFy
c2VfZmlsdGVyX2ZsYWcoZmlsdGVyX3ZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ZmlsdGVyX3J1bGVzID0gW10KKworICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWxpZGF0ZV9m
aWx0ZXJfcnVsZXMoZmlsdGVyX3J1bGVzLCBzZWxmLl9hbGxfY2F0ZWdvcmllcykKKyAgICAgICAg
ZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF9oZWxw
KGVycikKIAogICAgICAgICBvcHRpb25zID0gQ29tbWFuZE9wdGlvblZhbHVlcyhmaWx0ZXJfcnVs
ZXM9ZmlsdGVyX3J1bGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
aXRfY29tbWl0PWdpdF9jb21taXQsCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL29wdHBhcnNlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5CmluZGV4IGUzYzVmYjkuLmUwYTkw
ZmMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFy
c2VyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
b3B0cGFyc2VyX3VuaXR0ZXN0LnB5CkBAIC0yNCw3ICsyNCw2IEBACiAKIGltcG9ydCB1bml0dGVz
dAogCi1mcm9tIG9wdHBhcnNlciBpbXBvcnQgX2NyZWF0ZV91c2FnZQogZnJvbSBvcHRwYXJzZXIg
aW1wb3J0IEFyZ3VtZW50UGFyc2VyCiBmcm9tIG9wdHBhcnNlciBpbXBvcnQgQXJndW1lbnRQcmlu
dGVyCiBmcm9tIG9wdHBhcnNlciBpbXBvcnQgQ29tbWFuZE9wdGlvblZhbHVlcyBhcyBQcm9jZXNz
b3JPcHRpb25zCkBAIC0zMiwxNyArMzEsNiBAQCBmcm9tIG9wdHBhcnNlciBpbXBvcnQgRGVmYXVs
dENvbW1hbmRPcHRpb25WYWx1ZXMKIGZyb20gd2Via2l0cHkuc3R5bGVfcmVmZXJlbmNlcyBpbXBv
cnQgTG9nVGVzdGluZwogCiAKLWNsYXNzIENyZWF0ZVVzYWdlVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6Ci0KLSAgICAiIiJUZXN0cyB0aGUgX2NyZWF0ZV91c2FnZSgpIGZ1bmN0aW9uLiIiIgotCi0g
ICAgZGVmIHRlc3RfY3JlYXRlX3VzYWdlKHNlbGYpOgotICAgICAgICBkZWZhdWx0X29wdGlvbnMg
PSBEZWZhdWx0Q29tbWFuZE9wdGlvblZhbHVlcyhtaW5fY29uZmlkZW5jZT0zLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0
PSJ2czciKQotICAgICAgICAjIEV4ZXJjaXNlIHRoZSBjb2RlIHBhdGggdG8gbWFrZSBzdXJlIHRo
ZSBmdW5jdGlvbiBkb2VzIG5vdCBlcnJvciBvdXQuCi0gICAgICAgIF9jcmVhdGVfdXNhZ2UoZGVm
YXVsdF9vcHRpb25zKQotCi0KIGNsYXNzIEFyZ3VtZW50UHJpbnRlclRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogCiAgICAgIiIiVGVzdHMgdGhlIEFyZ3VtZW50UHJpbnRlciBjbGFzcy4iIiIKQEAg
LTc2LDYgKzY0LDEzIEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAKICAgICAiIiJUZXN0IHRoZSBBcmd1bWVudFBhcnNlciBjbGFzcy4iIiIKIAorICAgIGNs
YXNzIF9Nb2NrU3RkRXJyKG9iamVjdCk6CisKKyAgICAgICAgZGVmIHdyaXRlKHNlbGYsIG1lc3Nh
Z2UpOgorICAgICAgICAgICAgIyBXZSBkbyBub3Qgd2FudCB0aGUgdXNhZ2Ugc3RyaW5nIG9yIHN0
eWxlIGNhdGVnb3JpZXMKKyAgICAgICAgICAgICMgdG8gcHJpbnQgZHVyaW5nIHVuaXQgdGVzdHMs
IHNvIHByaW50IG5vdGhpbmcuCisgICAgICAgICAgICByZXR1cm4KKwogICAgIGRlZiBzZXRVcChz
ZWxmKToKICAgICAgICAgc2VsZi5fbG9nID0gTG9nVGVzdGluZy5zZXRVcChzZWxmKQogCkBAIC05
NiwxOCArOTEsMTcgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKIAogICAgIGRlZiBfY3JlYXRlX3BhcnNlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGFu
IEFyZ3VtZW50UGFyc2VyIGluc3RhbmNlIGZvciB0ZXN0aW5nLiIiIgotICAgICAgICBkZWYgc3Rk
ZXJyX3dyaXRlKG1lc3NhZ2UpOgotICAgICAgICAgICAgIyBXZSBkbyBub3Qgd2FudCB0aGUgdXNh
Z2Ugc3RyaW5nIG9yIHN0eWxlIGNhdGVnb3JpZXMKLSAgICAgICAgICAgICMgdG8gcHJpbnQgZHVy
aW5nIHVuaXQgdGVzdHMsIHNvIHByaW50IG5vdGhpbmcuCi0gICAgICAgICAgICByZXR1cm4KLQog
ICAgICAgICBkZWZhdWx0X29wdGlvbnMgPSBzZWxmLl9jcmVhdGVfZGVmYXVsdHMoKQogCiAgICAg
ICAgIGFsbF9jYXRlZ29yaWVzID0gWyJidWlsZCIgLCJ3aGl0ZXNwYWNlIl0KKworICAgICAgICBt
b2NrX3N0ZGVyciA9IHNlbGYuX01vY2tTdGRFcnIoKQorCiAgICAgICAgIHJldHVybiBBcmd1bWVu
dFBhcnNlcihhbGxfY2F0ZWdvcmllcz1hbGxfY2F0ZWdvcmllcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2VfZmlsdGVyX3J1bGVzPVtdLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdF9vcHRpb25zPWRlZmF1bHRfb3B0aW9ucywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZGVycl93cml0ZT1zdGRlcnJfd3JpdGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtb2NrX3N0ZGVycj1tb2NrX3N0ZGVyciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzYWdlPSJ0ZXN0IHVzYWdlIikKIAogICAgIGRlZiB0ZXN0X3BhcnNl
X2RvY3VtZW50YXRpb24oc2VsZik6CiAgICAgICAgIHBhcnNlID0gc2VsZi5fcGFyc2UKQEAgLTEx
OCwyOCArMTEyLDQ4IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgICMgUmVxdWVzdCB0aGUgdXNhZ2Ugc3RyaW5nLgogICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJzZSwgWyctLWhlbHAnXSkKICAgICAgICAgIyBSZXF1
ZXN0IGRlZmF1bHQgZmlsdGVyIHJ1bGVzIGFuZCBhdmFpbGFibGUgc3R5bGUgY2F0ZWdvcmllcy4K
LSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFsnLS1maWx0ZXI9
J10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0tZmls
dGVyPT8nXSkKIAogICAgIGRlZiB0ZXN0X3BhcnNlX2JhZF92YWx1ZXMoc2VsZik6CiAgICAgICAg
IHBhcnNlID0gc2VsZi5fcGFyc2UKIAogICAgICAgICAjIFBhc3MgYW4gdW5zdXBwb3J0ZWQgYXJn
dW1lbnQuCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0t
YmFkJ10pCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGFyc2UsIFsn
LS1taW4tY29uZmlkZW5jZT1iYWQnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvciwgcGFyc2UsIFsnLS1taW4tY29uZmlkZW5jZT0wJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNlLCBbJy0tbWluLWNvbmZpZGVuY2U9NiddKQorICAgICAg
ICBzZWxmLl9sb2cuYXNzZXJ0TWVzc2FnZXMoWydFUlJPUjogbm8gc3VjaCBvcHRpb246IC0tYmFk
XG4nXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJzZSwgWyct
LW1pbi1jb25maWRlbmNlPWJhZCddKQorICAgICAgICBzZWxmLl9sb2cuYXNzZXJ0TWVzc2FnZXMo
WyJFUlJPUjogb3B0aW9uIC0tbWluLWNvbmZpZGVuY2U6IGludmFsaWQgIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIHZhbHVlOiAnYmFkJ1xuIl0pCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0tbWluLWNvbmZpZGVuY2U9
MCddKQorICAgICAgICBzZWxmLl9sb2cuYXNzZXJ0TWVzc2FnZXMoWydFUlJPUjogb3B0aW9uIC0t
bWluLWNvbmZpZGVuY2U6IGludmFsaWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdpbnRlZ2VyOiAwOiB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICc1XG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFsnLS1taW4tY29uZmlkZW5jZT02J10pCisgICAgICAgIHNl
bGYuX2xvZy5hc3NlcnRNZXNzYWdlcyhbJ0VSUk9SOiBvcHRpb24gLS1taW4tY29uZmlkZW5jZTog
aW52YWxpZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludGVnZXI6IDY6
IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJzVcbiddKQogICAgICAgICBwYXJzZShbJy0tbWluLWNvbmZpZGVuY2U9MSddKSAj
IHdvcmtzCiAgICAgICAgIHBhcnNlKFsnLS1taW4tY29uZmlkZW5jZT01J10pICMgd29ya3MKIAot
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZSwgWyctLW91dHB1dD1i
YWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFsnLS1v
dXRwdXQ9YmFkJ10pCisgICAgICAgIHNlbGYuX2xvZy5hc3NlcnRNZXNzYWdlcyhbIkVSUk9SOiBv
cHRpb24gLS1vdXRwdXQtZm9ybWF0OiBpbnZhbGlkICIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiY2hvaWNlOiAnYmFkJyAoY2hvb3NlIGZyb20gJ2VtYWNzJywgIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIndnM3JylcbiJdKQogICAgICAgICBwYXJzZShb
Jy0tb3V0cHV0PXZzNyddKSAjIHdvcmtzCiAKICAgICAgICAgIyBQYXNzIGEgZmlsdGVyIHJ1bGUg
bm90IGJlZ2lubmluZyB3aXRoICsgb3IgLS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFs
dWVFcnJvciwgcGFyc2UsIFsnLS1maWx0ZXI9YnVpbGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFsnLS1maWx0ZXI9YnVpbGQnXSkKKyAgICAgICAgc2Vs
Zi5fbG9nLmFzc2VydE1lc3NhZ2VzKFsnRVJST1I6IEludmFsaWQgZmlsdGVyIHJ1bGUgImJ1aWxk
IjogZXZlcnkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydWxlIG11c3Qg
c3RhcnQgd2l0aCArIG9yIC0uXG4nXSkKICAgICAgICAgcGFyc2UoWyctLWZpbHRlcj0rYnVpbGQn
XSkgIyB3b3JrcwogICAgICAgICAjIFBhc3MgZmlsZXMgYW5kIGdpdC1jb21taXQgYXQgdGhlIHNh
bWUgdGltZS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFsn
LS1naXQtY29tbWl0PScsICdmaWxlLnR4dCddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhT
eXN0ZW1FeGl0LCBwYXJzZSwgWyctLWdpdC1jb21taXQ9Y29tbWl0dGlzaCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUudHh0J10pCisgICAgICAg
IHNlbGYuX2xvZy5hc3NlcnRNZXNzYWdlcyhbJ0VSUk9SOiBZb3UgY2Fubm90IHByb3ZpZGUgYm90
aCBwYXRocyBhbmQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhIGdpdCBj
b21taXQgYXQgdGhlIHNhbWUgdGltZS5cbiddKQorCisgICAgZGVmIHRlc3RfcGFyc2Vfbm9fcGF0
aHNfd2l0aG91dF9zY20oc2VsZik6CisgICAgICAgIHBhcnNlID0gc2VsZi5fcGFyc2UKIAogICAg
ICAgICAjIFBhdGhzIG11c3QgYmUgcGFzc2VkIHdoZW4gZm91bmRfc2NtIGlzIEZhbHNlLgogICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJzZSwgW10sIGZvdW5kX3NjbT1G
YWxzZSkKQEAgLTE0Nyw3ICsxNjEsOSBAQCBjbGFzcyBBcmd1bWVudFBhcnNlclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICAic2NyaXB0IGZyb20gaW5zaWRlIGEg
V2ViS2l0IGNoZWNrb3V0IGlmIHlvdSBhcmUgbm90ICIKICAgICAgICAgICAgICAgICAgICAgInBh
c3Npbmcgc3BlY2lmaWMgcGF0aHMgdG8gY2hlY2suXG4iXQogICAgICAgICBzZWxmLl9sb2cuYXNz
ZXJ0TWVzc2FnZXMobWVzc2FnZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4
aXQsIHBhcnNlLCBbJy0tdmVyYm9zZT0zJ10sIGZvdW5kX3NjbT1GYWxzZSkKKyAgICAgICAgIyBU
ZXN0IG9uZSBtb3JlIHZhcmlhbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4
aXQsIHBhcnNlLCBbJy0tb3V0cHV0PXZzNyddLCBmb3VuZF9zY209RmFsc2UpCisgICAgICAgIHNl
bGYuX2xvZy5hc3NlcnRNZXNzYWdlcyhtZXNzYWdlcykKIAogICAgIGRlZiB0ZXN0X3BhcnNlX2Rl
ZmF1bHRfYXJndW1lbnRzKHNlbGYpOgogICAgICAgICBwYXJzZSA9IHNlbGYuX3BhcnNlCg==
</data>
<flag name="review"
          id="35704"
          type_id="1"
          status="-"
          setter="hamaji"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52378</attachid>
            <date>2010-04-01 22:28:13 -0700</date>
            <delta_ts>2010-04-02 01:28:08 -0700</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>_patch-34676-2.diff</filename>
            <type>text/plain</type>
            <size>24014</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBhOWYwZDRiLi4xYmU3OTlkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTAtMDQt
MDEgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmUtd3JvdGUgY2hlY2std2Via2l0
LXN0eWxlJ3MgYXJndW1lbnQgcGFyc2luZyBjb2RlIHRvIHVzZQorICAgICAgICBQeXRob24ncyBv
cHRwYXJzZXIgbW9kdWxlIGFuZCBtb3JlIHVuaWZvcm0gZXJyb3ItaGFuZGxpbmcgbG9naWMuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0Njc2CisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL29wdHBhcnNlci5weToKKyAgICAgICAg
ICAtIFJlbW92ZWQgIm9wdGlvbiBoZWxwIiBmcm9tIGNoZWNrLXdlYmtpdC1zdHlsZSdzIHVzYWdl
IHN0cmluZworICAgICAgICAgICAgc2luY2UgdGhhdCBpcyBwcm92aWRlZCBzZXBhcmF0ZWx5IGJ5
IHRoZSBPcHRpb25QYXJzZXIgY2xhc3MuCisgICAgICAgICAgLSBBbHNvIGNoYW5nZWQgdGhlIHVz
YWdlIHN0cmluZyBmcm9tIGEgZnVuY3Rpb24gdG8gYSBjb25zdGFudAorICAgICAgICAgICAgc3Ry
aW5nIF9VU0FHRS4KKyAgICAgICAgICAtIEFkZGVkIGFuIF9FUElMT0cgc3RyaW5nIHdoaWNoIHJl
bmRlcnMgYWZ0ZXIgT3B0aW9uUGFyc2VyJ3MKKyAgICAgICAgICAgIHVzYWdlIHN0cmluZyBhbmQg
b3B0aW9uIGhlbHAuCisgICAgICAgICAgLSBJbiB0aGUgQXJndW1lbnRQYXJzZXIgY2xhc3M6Cisg
ICAgICAgICAgICAtIENoYW5nZWQgdGhlIGNvbnN0cnVjdG9yJ3Mgc3RkZXJyX3dyaXRlIHBhcmFt
ZXRlciB0byBhCisgICAgICAgICAgICAgIG1vY2tfc3RkZXJyIHNpbmNlIHRoZSBPcHRpb25QYXJz
ZXIgYWNjZXB0cyBhIHN5cy5zdGRlcnIKKyAgICAgICAgICAgICAgc3Vic3RpdHV0ZSByYXRoZXIg
dGhhbiBhIHN5cy5zdGRlcnIud3JpdGUgc3Vic3RpdHV0ZS4KKyAgICAgICAgICAgIC0gQ2hhbmdl
ZCB0aGUgY29uc3RydWN0b3IgdG8gc2V0IGEgX3BhcnNlciBkYXRhIGF0dHJpYnV0ZSB3aXRoCisg
ICAgICAgICAgICAgIGFuIE9wdGlvblBhcnNlciBpbnN0YW5jZS4KKyAgICAgICAgICAgIC0gQWRk
ZWQgYSBfY3JlYXRlX29wdGlvbl9wYXJzZXIoKSBtZXRob2Qgd2hpY2ggaW5zdGFudGlhdGVzCisg
ICAgICAgICAgICAgIHRoZSBPcHRpb25QYXJzZXIuCisgICAgICAgICAgICAtIFVwZGF0ZWQgX2V4
aXRfd2l0aF9oZWxwKCkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgT3B0aW9uUGFyc2VyJ3MKKyAgICAg
ICAgICAgICAgaGVscCBtZXRob2QuCisgICAgICAgICAgICAtIFVwZGF0ZWQgdGhlIHBhcnNlKCkg
bWV0aG9kIGFzIG5lY2Vzc2FyeS4gIEFsc28gY2hhbmdlZCB0aGUKKyAgICAgICAgICAgICAgcmFp
c2luZyBvZiBWYWx1ZUVycm9ycyB0byBjYWxscyB0byBfZXhpdF93aXRoX2hlbHAoKS4KKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAgIC0gUmVtb3ZlZCB0aGUgQ3JlYXRlVXNhZ2VUZXN0IGNsYXNzIHNpbmNlIHRoZSBjcmVh
dGVfdXNhZ2UgbWV0aG9kCisgICAgICAgICAgICB3YXMgcmVwbGFjZWQgYnkgYSBjb25zdGFudCBz
dHJpbmcuCisgICAgICAgICAgLSBBZGRlZCBhIF9Nb2NrU3RkRXJyIGNsYXNzIHRvIHRoZSBBcmd1
bWVudFBhcnNlclRlc3QgY2xhc3MuCisgICAgICAgICAgLSBVcGRhdGVkIHRoZSB1bml0IHRlc3Rz
IGFzIG5lY2Vzc2FyeS4KKworCiAyMDEwLTA0LTAxICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGQgbWlzc2luZyBsaWNlbnNlIGhlYWRl
ci4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFy
c2VyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHkK
aW5kZXggMzQwM2RkOC4uMzM5ZmIzZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9vcHRwYXJzZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9vcHRwYXJzZXIucHkKQEAgLTIyLDcgKzIyLDcgQEAKIAogIiIiU3VwcG9ydHMg
dGhlIHBhcnNpbmcgb2YgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGNoZWNrLXdlYmtpdC1zdHls
ZS4iIiIKIAotaW1wb3J0IGdldG9wdAorZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2Vy
CiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKQEAgLTMyLDc4ICsz
Miw0MiBAQCBmcm9tIGZpbHRlciBpbXBvcnQgdmFsaWRhdGVfZmlsdGVyX3J1bGVzCiAKIF9sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAorX1VTQUdFID0gIiIidXNhZ2U6ICVwcm9n
IFstLWhlbHBdIFtvcHRpb25zXSBbcGF0aDFdIFtwYXRoMl0gLi4uCiAKLWRlZiBfY3JlYXRlX3Vz
YWdlKGRlZmF1bHRfb3B0aW9ucyk6Ci0gICAgIiIiUmV0dXJuIHRoZSB1c2FnZSBzdHJpbmcgdG8g
ZGlzcGxheSBmb3IgY29tbWFuZCBoZWxwLgorT3ZlcnZpZXc6CisgIENoZWNrIGNvZGluZyBzdHls
ZSBhY2NvcmRpbmcgdG8gV2ViS2l0IHN0eWxlIGd1aWRlbGluZXM6CiAKLSAgICBBcmdzOgotICAg
ICAgZGVmYXVsdF9vcHRpb25zOiBBIERlZmF1bHRDb21tYW5kT3B0aW9uVmFsdWVzIGluc3RhbmNl
LgorICAgICAgaHR0cDovL3dlYmtpdC5vcmcvY29kaW5nL2NvZGluZy1zdHlsZS5odG1sCiAKLSAg
ICAiIiIKLSAgICB1c2FnZSA9ICIiIgotU3ludGF4OiAlKHByb2dyYW1fbmFtZSlzIFstLWZpbHRl
cj0teCwreSwuLi5dIFstLWdpdC1jb21taXQ9PFNpbmdsZUNvbW1pdD5dCi0gICAgICAgIFstLW1p
bi1jb25maWRlbmNlPSNdIFstLW91dHB1dD12czddIFstLXZlcmJvc2VdIFtmaWxlIG9yIGRpcmVj
dG9yeV0gLi4uCi0KLSAgVGhlIHN0eWxlIGd1aWRlbGluZXMgdGhpcyB0cmllcyB0byBmb2xsb3cg
YXJlIGhlcmU6Ci0gICAgaHR0cDovL3dlYmtpdC5vcmcvY29kaW5nL2NvZGluZy1zdHlsZS5odG1s
Ci0KLSAgRXZlcnkgc3R5bGUgZXJyb3IgaXMgZ2l2ZW4gYSBjb25maWRlbmNlIHNjb3JlIGZyb20g
MS01LCB3aXRoIDUgbWVhbmluZwotICB3ZSBhcmUgY2VydGFpbiBvZiB0aGUgcHJvYmxlbSwgYW5k
IDEgbWVhbmluZyBpdCBjb3VsZCBiZSBhIGxlZ2l0aW1hdGUKLSAgY29uc3RydWN0LiAgVGhpcyBj
YW4gbWlzcyBzb21lIGVycm9ycyBhbmQgZG9lcyBub3Qgc3Vic3RpdHV0ZSBmb3IKLSAgY29kZSBy
ZXZpZXcuCi0KLSAgVG8gcHJldmVudCBzcGVjaWZpYyBsaW5lcyBmcm9tIGJlaW5nIGxpbnRlZCwg
YWRkIGEgJy8vIE5PTElOVCcgY29tbWVudCB0byB0aGUKLSAgZW5kIG9mIHRoZSBsaW5lLgotCi0g
IExpbnRlZCBleHRlbnNpb25zIGFyZSAuY3BwLCAuYyBhbmQgLmguICBPdGhlciBmaWxlIHR5cGVz
IGFyZSBpZ25vcmVkLgotCi0gIFRoZSBmaWxlIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgYWNj
ZXB0cyBtdWx0aXBsZSBmaWxlcy4gIExlYXZpbmcKLSAgb3V0IHRoZSBmaWxlIHBhcmFtZXRlciBh
cHBsaWVzIHRoZSBjaGVjayB0byBhbGwgZmlsZXMgY29uc2lkZXJlZCBjaGFuZ2VkCi0gIGJ5IHlv
dXIgc291cmNlIGNvbnRyb2wgbWFuYWdlbWVudCBzeXN0ZW0uCi0KLSAgRmxhZ3M6CisgIFBhdGgg
YXJndW1lbnRzIGNhbiBiZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuICBJZiBuZWl0aGVyIGEgZ2l0
IGNvbW1pdCBub3IKKyAgcGF0aHMgYXJlIHBhc3NlZCwgdGhlbiBhbGwgY2hhbmdlcyBpbiB5b3Vy
IHNvdXJjZSBjb250cm9sIHdvcmtpbmcgZGlyZWN0b3J5CisgIGFyZSBjaGVja2VkLgogCi0gICAg
ZmlsdGVyPS14LCt5LC4uLgotICAgICAgQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBib29sZWFu
IGZpbHRlciBydWxlcyB1c2VkIHRvIGZpbHRlcgotICAgICAgd2hpY2ggY2F0ZWdvcmllcyBvZiBz
dHlsZSBndWlkZWxpbmVzIHRvIGNoZWNrLiAgVGhlIHNjcmlwdCBjaGVja3MKLSAgICAgIGEgY2F0
ZWdvcnkgaWYgdGhlIGNhdGVnb3J5IHBhc3NlcyB0aGUgZmlsdGVyIHJ1bGVzLCBhcyBmb2xsb3dz
LgorU3R5bGUgZXJyb3JzOgorICBUaGlzIHNjcmlwdCBhc3NpZ25zIHRvIGV2ZXJ5IHN0eWxlIGVy
cm9yIGEgY29uZmlkZW5jZSBzY29yZSBmcm9tIDEtNSBhbmQKKyAgYSBjYXRlZ29yeSBuYW1lLiAg
QSBjb25maWRlbmNlIHNjb3JlIG9mIDUgbWVhbnMgdGhlIGVycm9yIGlzIGNlcnRhaW5seQorICBh
IHByb2JsZW0sIGFuZCAxIG1lYW5zIGl0IGNvdWxkIGJlIGZpbmUuCiAKLSAgICAgIEFueSB3ZWJr
aXQgY2F0ZWdvcnkgc3RhcnRzIG91dCBwYXNzaW5nLiAgQWxsIGZpbHRlciBydWxlcyBhcmUgdGhl
bgotICAgICAgZXZhbHVhdGVkIGxlZnQgdG8gcmlnaHQsIHdpdGggbGF0ZXIgcnVsZXMgdGFraW5n
IHByZWNlZGVuY2UuICBGb3IKLSAgICAgIGV4YW1wbGUsIHRoZSBydWxlICIrZm9vIiBwYXNzZXMg
YW55IGNhdGVnb3J5IHRoYXQgc3RhcnRzIHdpdGggImZvbyIsCi0gICAgICBhbmQgIi1mb28iIGZh
aWxzIGFueSBzdWNoIGNhdGVnb3J5LiAgVGhlIGZpbHRlciBpbnB1dCAiLXdoaXRlc3BhY2UsCi0g
ICAgICArd2hpdGVzcGFjZS9icmFjZXMiIGZhaWxzIHRoZSBjYXRlZ29yeSAid2hpdGVzcGFjZS90
YWIiIGFuZCBwYXNzZXMKLSAgICAgICJ3aGl0ZXNwYWNlL2JyYWNlcyIuCisgIENhdGVnb3J5IG5h
bWVzIGFwcGVhciBpbiBlcnJvciBtZXNzYWdlcyBpbiBicmFja2V0cywgZm9yIGV4YW1wbGUKKyAg
W3doaXRlc3BhY2UvaW5kZW50XS4gIFNlZSB0aGUgb3B0aW9ucyBzZWN0aW9uIGJlbG93IGZvciBh
biBvcHRpb24gdGhhdAorICBkaXNwbGF5cyBhbGwgYXZhaWxhYmxlIGNhdGVnb3JpZXMgYW5kIHdo
aWNoIGFyZSByZXBvcnRlZCBieSBkZWZhdWx0LgogCi0gICAgICBFeGFtcGxlczogLS1maWx0ZXI9
LXdoaXRlc3BhY2UsK3doaXRlc3BhY2UvYnJhY2VzCi0gICAgICAgICAgICAgICAgLS1maWx0ZXI9
LXdoaXRlc3BhY2UsLXJ1bnRpbWUvcHJpbnRmLCtydW50aW1lL3ByaW50Zl9mb3JtYXQKLSAgICAg
ICAgICAgICAgICAtLWZpbHRlcj0tLCtidWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZQorRmlsdGVy
czoKKyAgVXNlIGZpbHRlcnMgdG8gY29uZmlndXJlIHdoYXQgZXJyb3JzIHRvIHJlcG9ydC4gIEZp
bHRlcnMgYXJlIHNwZWNpZmllZCB1c2luZworICBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGJv
b2xlYW4gZmlsdGVyIHJ1bGVzLiAgVGhlIHNjcmlwdCByZXBvcnRzIGVycm9ycworICBpbiBhIGNh
dGVnb3J5IGlmIHRoZSBjYXRlZ29yeSBwYXNzZXMgdGhlIGZpbHRlciwgYXMgZGVzY3JpYmVkIGJl
bG93LgogCi0gICAgICBDYXRlZ29yeSBuYW1lcyBhcHBlYXIgaW4gZXJyb3IgbWVzc2FnZXMgaW4g
YnJhY2tldHMsIGZvciBleGFtcGxlCi0gICAgICBbd2hpdGVzcGFjZS9pbmRlbnRdLiAgVG8gc2Vl
IGEgbGlzdCBvZiBhbGwgY2F0ZWdvcmllcyBhdmFpbGFibGUgdG8KLSAgICAgICUocHJvZ3JhbV9u
YW1lKXMsIGFsb25nIHdpdGggd2hpY2ggYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgcGFzcwotICAg
ICAgdGhlIGVtcHR5IGZpbHRlciBhcyBmb2xsb3dzOgotICAgICAgICAgLS1maWx0ZXI9CisgIEFs
bCBjYXRlZ29yaWVzIHN0YXJ0IG91dCBwYXNzaW5nLiAgQm9vbGVhbiBmaWx0ZXIgcnVsZXMgYXJl
IHRoZW4gZXZhbHVhdGVkCisgIGZyb20gbGVmdCB0byByaWdodCwgd2l0aCBsYXRlciBydWxlcyB0
YWtpbmcgcHJlY2VkZW5jZS4gIEZvciBleGFtcGxlLCB0aGUKKyAgcnVsZSAiK2ZvbyIgcGFzc2Vz
IGFueSBjYXRlZ29yeSB0aGF0IHN0YXJ0cyB3aXRoICJmb28iLCBhbmQgIi1mb28iIGZhaWxzCisg
IGFueSBzdWNoIGNhdGVnb3J5LiAgVGhlIGZpbHRlciBpbnB1dCAiLXdoaXRlc3BhY2UsK3doaXRl
c3BhY2UvYnJhY2VzIiBmYWlscworICB0aGUgY2F0ZWdvcnkgIndoaXRlc3BhY2UvdGFiIiBhbmQg
cGFzc2VzICJ3aGl0ZXNwYWNlL2JyYWNlcyIuCiAKLSAgICBnaXQtY29tbWl0PTxTaW5nbGVDb21t
aXQ+Ci0gICAgICBDaGVja3MgdGhlIHN0eWxlIG9mIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgZ2l2ZW4g
Y29tbWl0IHRvIHRoZSBsb2NhbCB0cmVlLgotCi0gICAgbWluLWNvbmZpZGVuY2U9IwotICAgICAg
QW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDUgaW5jbHVzaXZlIHRoYXQgaXMgdGhlIG1pbmltdW0g
Y29uZmlkZW5jZQotICAgICAgbGV2ZWwgb2Ygc3R5bGUgZXJyb3JzIHRvIHJlcG9ydC4gIEluIHBh
cnRpY3VsYXIsIHRoZSB2YWx1ZSAxIGRpc3BsYXlzCi0gICAgICBhbGwgZXJyb3JzLiAgVGhlIGRl
ZmF1bHQgaXMgJShkZWZhdWx0X21pbl9jb25maWRlbmNlKXMuCi0KLSAgICBvdXRwdXQ9dnM3Ci0g
ICAgICBUaGUgb3V0cHV0IGZvcm1hdCwgd2hpY2ggbWF5IGJlIG9uZSBvZgotICAgICAgICBlbWFj
cyA6IHRvIGVhc2UgZW1hY3MgcGFyc2luZwotICAgICAgICB2czcgICA6IGNvbXBhdGlibGUgd2l0
aCBWaXN1YWwgU3R1ZGlvCi0gICAgICBEZWZhdWx0cyB0byAiJShkZWZhdWx0X291dHB1dF9mb3Jt
YXQpcyIuIE90aGVyIGZvcm1hdHMgYXJlIHVuc3VwcG9ydGVkLgotCi0gICAgdmVyYm9zZQotICAg
ICAgTG9nZ2luZyBpcyB2ZXJib3NlIGlmIHRoaXMgZmxhZyBpcyBwcmVzZW50LgotCi1QYXRoIGNv
bnNpZGVyYXRpb25zOgorICBFeGFtcGxlczogLS1maWx0ZXI9LXdoaXRlc3BhY2UsK3doaXRlc3Bh
Y2UvYnJhY2VzCisgICAgICAgICAgICAtLWZpbHRlcj0td2hpdGVzcGFjZSwtcnVudGltZS9wcmlu
dGYsK3J1bnRpbWUvcHJpbnRmX2Zvcm1hdAorICAgICAgICAgICAgLS1maWx0ZXI9LSwrYnVpbGQv
aW5jbHVkZV93aGF0X3lvdV91c2UKIAorUGF0aHM6CiAgIENlcnRhaW4gc3R5bGUtY2hlY2tpbmcg
YmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgcGF0aHMgcmVsYXRpdmUgdG8KICAgdGhlIFdlYktpdCBz
b3VyY2Ugcm9vdCBvZiB0aGUgZmlsZXMgYmVpbmcgY2hlY2tlZC4gIEZvciBleGFtcGxlLAogICBj
ZXJ0YWluIHR5cGVzIG9mIGVycm9ycyBtYXkgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgZmls
ZXMgaW4KQEAgLTEzMSwxMyArOTUsMTAgQEAgUGF0aCBjb25zaWRlcmF0aW9uczoKICAgY2hlY2tp
bmcgb25seSBmaWxlcyBpbiB0aGUgc291cmNlIHRyZWUgd2lsbCBlbnN1cmUgdGhhdCBhbGwgc3R5
bGUKICAgY2hlY2tpbmcgYmVoYXZlcyBjb3JyZWN0bHkgLS0gd2hldGhlciBvciBub3QgYSBjaGVj
a291dCBjYW4gYmUKICAgZGV0ZWN0ZWQuICBUaGlzIGlzIGJlY2F1c2UgYWxsIGZpbGUgcGF0aHMg
d2lsbCBhbHJlYWR5IGJlIHJlbGF0aXZlCi0gIHRvIHRoZSBzb3VyY2Ugcm9vdCBhbmQgc28gd2ls
bCBub3QgbmVlZCB0byBiZSBjb252ZXJ0ZWQuCi0KLSIiIiAlIHsncHJvZ3JhbV9uYW1lJzogb3Mu
cGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSksCi0gICAgICAgJ2RlZmF1bHRfbWluX2NvbmZpZGVu
Y2UnOiBkZWZhdWx0X29wdGlvbnMubWluX2NvbmZpZGVuY2UsCi0gICAgICAgJ2RlZmF1bHRfb3V0
cHV0X2Zvcm1hdCc6IGRlZmF1bHRfb3B0aW9ucy5vdXRwdXRfZm9ybWF0fQorICB0byB0aGUgc291
cmNlIHJvb3QgYW5kIHNvIHdpbGwgbm90IG5lZWQgdG8gYmUgY29udmVydGVkLiIiIgogCi0gICAg
cmV0dXJuIHVzYWdlCitfRVBJTE9HID0gKCJUaGlzIHNjcmlwdCBjYW4gbWlzcyBlcnJvcnMgYW5k
IGRvZXMgbm90IHN1YnN0aXR1dGUgZm9yICIKKyAgICAgICAgICAgImNvZGUgcmV2aWV3LiIpCiAK
IAogIyBUaGlzIGNsYXNzIHNob3VsZCBub3QgaGF2ZSBrbm93bGVkZ2Ugb2YgdGhlIGZsYWcga2V5
IG5hbWVzLgpAQCAtMjYyLDcgKzIyMyw2IEBAIGNsYXNzIEFyZ3VtZW50UHJpbnRlcihvYmplY3Qp
OgogICAgICAgICByZXR1cm4gZmxhZ19zdHJpbmcuc3RyaXAoKQogCiAKLSMgRklYTUU6IFJlcGxh
Y2UgdGhlIHVzZSBvZiBnZXRvcHQuZ2V0b3B0KCkgd2l0aCBvcHRwYXJzZS5PcHRpb25QYXJzZXIu
CiBjbGFzcyBBcmd1bWVudFBhcnNlcihvYmplY3QpOgogCiAgICAgIyBGSVhNRTogTW92ZSB0aGUg
ZG9jdW1lbnRhdGlvbiBvZiB0aGUgYXR0cmlidXRlcyB0byB0aGUgX19pbml0X18KQEAgLTI4Nyw4
ICsyNDcsOCBAQCBjbGFzcyBBcmd1bWVudFBhcnNlcihvYmplY3QpOgogICAgICAgICAgICAgICAg
ICBhbGxfY2F0ZWdvcmllcywKICAgICAgICAgICAgICAgICAgZGVmYXVsdF9vcHRpb25zLAogICAg
ICAgICAgICAgICAgICBiYXNlX2ZpbHRlcl9ydWxlcz1Ob25lLAotICAgICAgICAgICAgICAgICBj
cmVhdGVfdXNhZ2U9Tm9uZSwKLSAgICAgICAgICAgICAgICAgc3RkZXJyX3dyaXRlPU5vbmUpOgor
ICAgICAgICAgICAgICAgICBtb2NrX3N0ZGVycj1Ob25lLAorICAgICAgICAgICAgICAgICB1c2Fn
ZT1Ob25lKToKICAgICAgICAgIiIiQ3JlYXRlIGFuIEFyZ3VtZW50UGFyc2VyIGluc3RhbmNlLgog
CiAgICAgICAgIEFyZ3M6CkBAIC0zMTAsMzEgKzI3MCwxMDEgQEAgY2xhc3MgQXJndW1lbnRQYXJz
ZXIob2JqZWN0KToKICAgICAgICAgIiIiCiAgICAgICAgIGlmIGJhc2VfZmlsdGVyX3J1bGVzIGlz
IE5vbmU6CiAgICAgICAgICAgICBiYXNlX2ZpbHRlcl9ydWxlcyA9IFtdCi0gICAgICAgIGlmIGNy
ZWF0ZV91c2FnZSBpcyBOb25lOgotICAgICAgICAgICAgY3JlYXRlX3VzYWdlID0gX2NyZWF0ZV91
c2FnZQotICAgICAgICBpZiBzdGRlcnJfd3JpdGUgaXMgTm9uZToKLSAgICAgICAgICAgIHN0ZGVy
cl93cml0ZSA9IHN5cy5zdGRlcnIud3JpdGUKKyAgICAgICAgc3RkZXJyID0gc3lzLnN0ZGVyciBp
ZiBtb2NrX3N0ZGVyciBpcyBOb25lIGVsc2UgbW9ja19zdGRlcnIKKyAgICAgICAgaWYgdXNhZ2Ug
aXMgTm9uZToKKyAgICAgICAgICAgIHVzYWdlID0gX1VTQUdFCiAKICAgICAgICAgc2VsZi5fYWxs
X2NhdGVnb3JpZXMgPSBhbGxfY2F0ZWdvcmllcwogICAgICAgICBzZWxmLl9iYXNlX2ZpbHRlcl9y
dWxlcyA9IGJhc2VfZmlsdGVyX3J1bGVzCisKICAgICAgICAgIyBGSVhNRTogUmVuYW1lIHRoZXNl
IHRvIHJlZmxlY3QgdGhhdCB0aGV5IGFyZSBpbnRlcm5hbC4KLSAgICAgICAgc2VsZi5jcmVhdGVf
dXNhZ2UgPSBjcmVhdGVfdXNhZ2UKICAgICAgICAgc2VsZi5kZWZhdWx0X29wdGlvbnMgPSBkZWZh
dWx0X29wdGlvbnMKLSAgICAgICAgc2VsZi5zdGRlcnJfd3JpdGUgPSBzdGRlcnJfd3JpdGUKLQot
ICAgIGRlZiBfZXhpdF93aXRoX3VzYWdlKHNlbGYsIGVycm9yX21lc3NhZ2U9JycpOgorICAgICAg
ICBzZWxmLnN0ZGVycl93cml0ZSA9IHN0ZGVyci53cml0ZQorCisgICAgICAgIHNlbGYuX3BhcnNl
ciA9IHNlbGYuX2NyZWF0ZV9vcHRpb25fcGFyc2VyKHN0ZGVycj1zdGRlcnIsCisgICAgICAgICAg
ICB1c2FnZT11c2FnZSwKKyAgICAgICAgICAgIGRlZmF1bHRfbWluX2NvbmZpZGVuY2U9c2VsZi5k
ZWZhdWx0X29wdGlvbnMubWluX2NvbmZpZGVuY2UsCisgICAgICAgICAgICBkZWZhdWx0X291dHB1
dF9mb3JtYXQ9c2VsZi5kZWZhdWx0X29wdGlvbnMub3V0cHV0X2Zvcm1hdCkKKworICAgIGRlZiBf
Y3JlYXRlX29wdGlvbl9wYXJzZXIoc2VsZiwgc3RkZXJyLCB1c2FnZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHRfbWluX2NvbmZpZGVuY2UsIGRlZmF1bHRfb3V0cHV0X2Zv
cm1hdCk6CisgICAgICAgICMgU2luY2UgdGhlIGVwaWxvZyBzdHJpbmcgaXMgc2hvcnQsIGl0IGlz
IG5vdCBuZWNlc3NhcnkgdG8gcmVwbGFjZQorICAgICAgICAjIHRoZSBlcGlsb2cgc3RyaW5nIHdp
dGggYSBtb2NrIGVwaWxvZyBzdHJpbmcgd2hlbiB0ZXN0aW5nLgorICAgICAgICAjIEZvciB0aGlz
IHJlYXNvbiwgd2UgdXNlIF9FUElMT0cgZGlyZWN0bHkgcmF0aGVyIHRoYW4gcGFzc2luZyBpdAor
ICAgICAgICAjIGFzIGFuIGFyZ3VtZW50IGxpa2Ugd2UgZG8gZm9yIHRoZSB1c2FnZSBzdHJpbmcu
CisgICAgICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT11c2FnZSwgZXBpbG9nPV9FUElM
T0cpCisKKyAgICAgICAgZmlsdGVyX2hlbHAgPSAoJ3NldCBhIGZpbHRlciB0byBjb250cm9sIHdo
YXQgY2F0ZWdvcmllcyBvZiBzdHlsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcnMg
dG8gcmVwb3J0LiAgU3BlY2lmeSBhIGZpbHRlciB1c2luZyBhIGNvbW1hLScKKyAgICAgICAgICAg
ICAgICAgICAgICAgJ2RlbGltaXRlZCBsaXN0IG9mIGJvb2xlYW4gZmlsdGVyIHJ1bGVzLCBmb3Ig
ZXhhbXBsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICciLS1maWx0ZXIgLXdoaXRlc3BhY2Us
K3doaXRlc3BhY2UvYnJhY2VzIi4gIFRvIGRpc3BsYXkgJworICAgICAgICAgICAgICAgICAgICAg
ICAnYWxsIGNhdGVnb3JpZXMgYW5kIHdoaWNoIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIHBhc3Mg
JworICAgICAgICAgICAgICAgICAgICAgICAiIiJubyB2YWx1ZSAoZS5nLiAnLWYgIiInIG9yICct
LWZpbHRlcj0nKS4iIiIpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZpbHRl
ci1ydWxlcyIsIG1ldGF2YXI9IlJVTEVTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dD0iZmlsdGVyX3ZhbHVlIiwgaGVscD1maWx0ZXJfaGVscCkKKworICAgICAgICBnaXRfaGVscCA9
ICJjaGVjayBhbGwgY2hhbmdlcyBhZnRlciB0aGUgZ2l2ZW4gZ2l0IGNvbW1pdC4iCisgICAgICAg
IHBhcnNlci5hZGRfb3B0aW9uKCItZyIsICItLWdpdC1jb21taXQiLCAiLS1naXQtZGlmZiIsICIt
LWdpdC1zaW5jZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9IkNPTU1JVCIs
IGRlc3Q9ImdpdF9zaW5jZSIsIGhlbHA9Z2l0X2hlbHAsKQorCisgICAgICAgIG1pbl9jb25maWRl
bmNlX2hlbHAgPSAoInNldCB0aGUgbWluaW11bSBjb25maWRlbmNlIG9mIHN0eWxlIGVycm9ycyAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHJlcG9ydC4gIENhbiBiZSBhbiBp
bnRlZ2VyIDEtNSwgd2l0aCAxICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlz
cGxheWluZyBhbGwgZXJyb3JzLiAgRGVmYXVsdHMgdG8gJWRlZmF1bHQuIikKKyAgICAgICAgcGFy
c2VyLmFkZF9vcHRpb24oIi1tIiwgIi0tbWluLWNvbmZpZGVuY2UiLCBtZXRhdmFyPSJJTlQiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJpbnQiLCBkZXN0PSJtaW5fY29uZmlkZW5j
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdF9taW5fY29uZmlk
ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1taW5fY29uZmlkZW5jZV9oZWxw
KQorCisgICAgICAgIG91dHB1dF9mb3JtYXRfaGVscCA9ICgnc2V0IHRoZSBvdXRwdXQgZm9ybWF0
LCB3aGljaCBjYW4gYmUgImVtYWNzIiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
b3IgInZzNyIgKGZvciBWaXN1YWwgU3R1ZGlvKS4gICcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdEZWZhdWx0cyB0byAiJWRlZmF1bHQiLicpCisgICAgICAgIHBhcnNlci5hZGRfb3B0
aW9uKCItbyIsICItLW91dHB1dC1mb3JtYXQiLCBtZXRhdmFyPSJGT1JNQVQiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaG9pY2VzPVsiZW1hY3MiLCAidnM3Il0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3Q9Im91dHB1dF9mb3JtYXQiLCBkZWZhdWx0PWRlZmF1bHRfb3V0cHV0
X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1vdXRwdXRfZm9ybWF0X2hl
bHApCisKKyAgICAgICAgdmVyYm9zZV9oZWxwID0gImVuYWJsZSB2ZXJib3NlIGxvZ2dpbmcuIgor
ICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgZGVzdD0iaXNfdmVy
Ym9zZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsIGhlbHA9dmVyYm9zZV9oZWxwKQorCisgICAgICAgICMgT3ZlcnJpZGUgT3B0
aW9uUGFyc2VyJ3MgZXJyb3IoKSBtZXRob2Qgc28gdGhhdCBvcHRpb24gaGVscCB3aWxsCisgICAg
ICAgICMgYWxzbyBkaXNwbGF5IHdoZW4gYW4gZXJyb3Igb2NjdXJzLiAgTm9ybWFsbHksIGp1c3Qg
dGhlIHVzYWdlCisgICAgICAgICMgc3RyaW5nIGRpc3BsYXlzIGFuZCBub3Qgb3B0aW9uIGhlbHAu
CisgICAgICAgIHBhcnNlci5lcnJvciA9IHNlbGYuX2V4aXRfd2l0aF9oZWxwCisKKyAgICAgICAg
IyBPdmVycmlkZSBPcHRpb25QYXJzZXIncyBwcmludF9oZWxwKCkgbWV0aG9kIHNvIHRoYXQgaGVs
cCBvdXRwdXQKKyAgICAgICAgIyBkb2VzIG5vdCByZW5kZXIgdG8gdGhlIHNjcmVlbiB3aGlsZSBy
dW5uaW5nIHVuaXQgdGVzdHMuCisgICAgICAgIHByaW50X2hlbHAgPSBwYXJzZXIucHJpbnRfaGVs
cAorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCA9IGxhbWJkYTogcHJpbnRfaGVscChmaWxlPXN0
ZGVycikKKworICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBkZWYgX2V4aXRfd2l0aF9oZWxw
KHNlbGYsIGVycm9yX21lc3NhZ2U9Tm9uZSk6CiAgICAgICAgICIiIkV4aXQgYW5kIHByaW50IGEg
dXNhZ2Ugc3RyaW5nIHdpdGggYW4gb3B0aW9uYWwgZXJyb3IgbWVzc2FnZS4KIAogICAgICAgICBB
cmdzOgogICAgICAgICAgIGVycm9yX21lc3NhZ2U6IEEgc3RyaW5nIHRoYXQgaXMgYW4gZXJyb3Ig
bWVzc2FnZSB0byBwcmludC4KIAogICAgICAgICAiIiIKLSAgICAgICAgdXNhZ2UgPSBzZWxmLmNy
ZWF0ZV91c2FnZShzZWxmLmRlZmF1bHRfb3B0aW9ucykKLSAgICAgICAgc2VsZi5zdGRlcnJfd3Jp
dGUodXNhZ2UpCisgICAgICAgICMgVGhlIG1ldGhvZCBmb3JtYXRfaGVscCgpIGluY2x1ZGVzIGJv
dGggdGhlIHVzYWdlIHN0cmluZyBhbmQKKyAgICAgICAgIyB0aGUgZmxhZyBvcHRpb25zLgorICAg
ICAgICBoZWxwID0gc2VsZi5fcGFyc2VyLmZvcm1hdF9oZWxwKCkKKyAgICAgICAgIyBTZXBhcmF0
ZSBoZWxwIGZyb20gdGhlIGVycm9yIG1lc3NhZ2Ugd2l0aCBhIHNpbmdsZSBibGFuayBsaW5lLgor
ICAgICAgICBzZWxmLnN0ZGVycl93cml0ZShoZWxwICsgIlxuIikKICAgICAgICAgaWYgZXJyb3Jf
bWVzc2FnZToKLSAgICAgICAgICAgIHN5cy5leGl0KCdcbkZBVEFMIEVSUk9SOiAnICsgZXJyb3Jf
bWVzc2FnZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAg
ICAgICBfbG9nLmVycm9yKGVycm9yX21lc3NhZ2UpCisKKyAgICAgICAgIyBTaW5jZSB3ZSBhcmUg
dXNpbmcgdGhpcyBtZXRob2QgdG8gcmVwbGFjZS9vdmVycmlkZSB0aGUgUHl0aG9uCisgICAgICAg
ICMgbW9kdWxlIG9wdHBhcnNlJ3MgT3B0aW9uUGFyc2VyLmVycm9yKCkgbWV0aG9kLCB3ZSBtYXRj
aCBpdHMKKyAgICAgICAgIyBiZWhhdmlvciBhbmQgZXhpdCB3aXRoIHN0YXR1cyBjb2RlIDIuCisg
ICAgICAgICMKKyAgICAgICAgIyBBcyBhZGRpdGlvbmFsIGJhY2tncm91bmQsIFB5dGhvbiBkb2N1
bWVudGF0aW9uIHNheXMtLQorICAgICAgICAjCisgICAgICAgICMgIlVuaXggcHJvZ3JhbXMgZ2Vu
ZXJhbGx5IHVzZSAyIGZvciBjb21tYW5kIGxpbmUgc3ludGF4IGVycm9ycworICAgICAgICAjICBh
bmQgMSBmb3IgYWxsIG90aGVyIGtpbmQgb2YgZXJyb3JzLiIKKyAgICAgICAgIworICAgICAgICAj
IChmcm9tIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9zeXMuaHRtbCNzeXMuZXhpdCAp
CisgICAgICAgIHN5cy5leGl0KDIpCiAKICAgICBkZWYgX2V4aXRfd2l0aF9jYXRlZ29yaWVzKHNl
bGYpOgogICAgICAgICAiIiJFeGl0IGFuZCBwcmludCB0aGUgc3R5bGUgY2F0ZWdvcmllcyBhbmQg
ZGVmYXVsdCBmaWx0ZXIgcnVsZXMuIiIiCkBAIC0zODEsNjkgKzQxMSw0OCBAQCBjbGFzcyBBcmd1
bWVudFBhcnNlcihvYmplY3QpOgogICAgICAgICAgIG9wdGlvbnM6IEEgQ29tbWFuZE9wdGlvblZh
bHVlcyBpbnN0YW5jZS4KIAogICAgICAgICAiIiIKLSAgICAgICAgaXNfdmVyYm9zZSA9IEZhbHNl
Ci0gICAgICAgIG1pbl9jb25maWRlbmNlID0gc2VsZi5kZWZhdWx0X29wdGlvbnMubWluX2NvbmZp
ZGVuY2UKLSAgICAgICAgb3V0cHV0X2Zvcm1hdCA9IHNlbGYuZGVmYXVsdF9vcHRpb25zLm91dHB1
dF9mb3JtYXQKKyAgICAgICAgKG9wdGlvbnMsIHBhdGhzKSA9IHNlbGYuX3BhcnNlci5wYXJzZV9h
cmdzKGFyZ3M9YXJncykKIAotICAgICAgICAjIFRoZSBmbGFncyB0aGF0IHRoZSBDb21tYW5kT3B0
aW9uVmFsdWVzIGNsYXNzIHN1cHBvcnRzLgotICAgICAgICBmbGFncyA9IFsnZmlsdGVyPScsICdn
aXQtY29tbWl0PScsICdoZWxwJywgJ21pbi1jb25maWRlbmNlPScsCi0gICAgICAgICAgICAgICAg
ICdvdXRwdXQ9JywgJ3ZlcmJvc2UnXQorICAgICAgICBmaWx0ZXJfdmFsdWUgPSBvcHRpb25zLmZp
bHRlcl92YWx1ZQorICAgICAgICBnaXRfY29tbWl0ID0gb3B0aW9ucy5naXRfc2luY2UKKyAgICAg
ICAgaXNfdmVyYm9zZSA9IG9wdGlvbnMuaXNfdmVyYm9zZQorICAgICAgICBtaW5fY29uZmlkZW5j
ZSA9IG9wdGlvbnMubWluX2NvbmZpZGVuY2UKKyAgICAgICAgb3V0cHV0X2Zvcm1hdCA9IG9wdGlv
bnMub3V0cHV0X2Zvcm1hdAogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIChvcHRzLCBwYXRo
cykgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICcnLCBmbGFncykKLSAgICAgICAgZXhjZXB0IGdldG9w
dC5HZXRvcHRFcnJvciwgZXJyOgotICAgICAgICAgICAgIyBGSVhNRTogU2V0dGxlIG9uIGFuIGVy
cm9yIGhhbmRsaW5nIGFwcHJvYWNoOiBjb21lIHVwCi0gICAgICAgICAgICAjICAgICAgICB3aXRo
IGEgY29uc2lzdGVudCBndWlkZWxpbmUgYXMgdG8gd2hlbiBhbmQgd2hldGhlcgotICAgICAgICAg
ICAgIyAgICAgICAgYSBWYWx1ZUVycm9yIHNob3VsZCBiZSByYWlzZWQgdmVyc3VzIGNhbGxpbmcK
LSAgICAgICAgICAgICMgICAgICAgIHN5cy5leGl0IHdoZW4gbmVlZGluZyB0byBpbnRlcnJ1cHQg
ZXhlY3V0aW9uLgotICAgICAgICAgICAgc2VsZi5fZXhpdF93aXRoX3VzYWdlKCdJbnZhbGlkIGFy
Z3VtZW50czogJXMnICUgZXJyKQotCi0gICAgICAgIGdpdF9jb21taXQgPSBOb25lCi0gICAgICAg
IGZpbHRlcl9ydWxlcyA9IFtdCi0KLSAgICAgICAgZm9yIChvcHQsIHZhbCkgaW4gb3B0czoKLSAg
ICAgICAgICAgICMgUHJvY2VzcyAtLWhlbHAgZmlyc3QgKG91dCBvZiBhbHBoYWJldGljYWwgb3Jk
ZXIpLgotICAgICAgICAgICAgaWYgb3B0ID09ICctLWhlbHAnOgotICAgICAgICAgICAgICAgIHNl
bGYuX2V4aXRfd2l0aF91c2FnZSgpCi0gICAgICAgICAgICBlbGlmIG9wdCA9PSAnLS1maWx0ZXIn
OgotICAgICAgICAgICAgICAgIGlmIG5vdCB2YWw6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYu
X2V4aXRfd2l0aF9jYXRlZ29yaWVzKCkKLSAgICAgICAgICAgICAgICBmaWx0ZXJfcnVsZXMgPSBz
ZWxmLl9wYXJzZV9maWx0ZXJfZmxhZyh2YWwpCi0gICAgICAgICAgICBlbGlmIG9wdCA9PSAnLS1n
aXQtY29tbWl0JzoKLSAgICAgICAgICAgICAgICBnaXRfY29tbWl0ID0gdmFsCi0gICAgICAgICAg
ICBlbGlmIG9wdCA9PSAnLS1taW4tY29uZmlkZW5jZSc6Ci0gICAgICAgICAgICAgICAgbWluX2Nv
bmZpZGVuY2UgPSB2YWwKLSAgICAgICAgICAgIGVsaWYgb3B0ID09ICctLW91dHB1dCc6Ci0gICAg
ICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdCA9IHZhbAotICAgICAgICAgICAgZWxpZiBvcHQgPT0g
Ii0tdmVyYm9zZSI6Ci0gICAgICAgICAgICAgICAgaXNfdmVyYm9zZSA9IFRydWUKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgYmVj
YXVzZSBnZXRvcHQuZ2V0b3B0KCkKLSAgICAgICAgICAgICAgICAjIHJhaXNlcyBhbiBlcnJvciBp
biB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBv
cHRpb246ICIlcyInICUgb3B0KQotCi0gICAgICAgICMgQ2hlY2sgdmFsaWRpdHkgb2YgcmVzdWx0
aW5nIHZhbHVlcy4KKyAgICAgICAgaWYgZmlsdGVyX3ZhbHVlIGlzIG5vdCBOb25lIGFuZCBub3Qg
ZmlsdGVyX3ZhbHVlOgorICAgICAgICAgICAgIyBUaGVuIHRoZSB1c2VyIGV4cGxpY2l0bHkgcGFz
c2VkIG5vIGZpbHRlciwgZm9yCisgICAgICAgICAgICAjIGV4YW1wbGUgIi1mICcnIiBvciAiLS1m
aWx0ZXI9Ii4KKyAgICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF9jYXRlZ29yaWVzKCkKKworICAg
ICAgICAjIFZhbGlkYXRlIHVzZXItcHJvdmlkZWQgdmFsdWVzLgorCisgICAgICAgICMgRklYTUU6
IE1vdmUgdGhlIGNoZWNrb3V0IGVycm9yIG91dHNpZGUgb2YgdGhpcyBtb2R1bGUuICBUaGUgcGFy
c2UKKyAgICAgICAgIyAgICAgICAgbWV0aG9kIHNob3VsZCBub3QgbmVlZCB0byBrbm93IHdoZXRo
ZXIgYSBjaGVja291dCB3YXMgZm91bmQuCiAgICAgICAgIGlmIG5vdCBmb3VuZF9jaGVja291dCBh
bmQgbm90IHBhdGhzOgogICAgICAgICAgICAgX2xvZy5lcnJvcigiV2ViS2l0IGNoZWNrb3V0IG5v
dCBmb3VuZDogWW91IG11c3QgcnVuIHRoaXMgc2NyaXB0ICIKICAgICAgICAgICAgICAgICAgICAg
ICAgImZyb20gaW5zaWRlIGEgV2ViS2l0IGNoZWNrb3V0IGlmIHlvdSBhcmUgbm90IHBhc3Npbmcg
IgogICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWMgcGF0aHMgdG8gY2hlY2suIikKICAg
ICAgICAgICAgIHN5cy5leGl0KDEpCiAKLSAgICAgICAgaWYgcGF0aHMgYW5kIChnaXRfY29tbWl0
ICE9IE5vbmUpOgotICAgICAgICAgICAgc2VsZi5fZXhpdF93aXRoX3VzYWdlKCdJdCBpcyBub3Qg
cG9zc2libGUgdG8gY2hlY2sgZmlsZXMgYW5kIGEgJwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdzcGVjaWZpYyBjb21taXQgYXQgdGhlIHNhbWUgdGltZS4nKQotCi0gICAgICAg
IGlmIG91dHB1dF9mb3JtYXQgbm90IGluICgnZW1hY3MnLCAndnM3Jyk6Ci0gICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIC0tb3V0cHV0IHZhbHVlICIlcyI6IFRoZSBvbmx5ICcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsbG93ZWQgb3V0cHV0IGZvcm1hdHMgYXJl
IGVtYWNzIGFuZCB2czcuJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9m
b3JtYXQpCi0KLSAgICAgICAgdmFsaWRhdGVfZmlsdGVyX3J1bGVzKGZpbHRlcl9ydWxlcywgc2Vs
Zi5fYWxsX2NhdGVnb3JpZXMpCisgICAgICAgIGlmIHBhdGhzIGFuZCBnaXRfY29tbWl0OgorICAg
ICAgICAgICAgc2VsZi5fZXhpdF93aXRoX2hlbHAoJ1lvdSBjYW5ub3QgcHJvdmlkZSBib3RoIHBh
dGhzIGFuZCBhIGdpdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbWl0
IGF0IHRoZSBzYW1lIHRpbWUuJykKIAogICAgICAgICBtaW5fY29uZmlkZW5jZSA9IGludChtaW5f
Y29uZmlkZW5jZSkKICAgICAgICAgaWYgKG1pbl9jb25maWRlbmNlIDwgMSkgb3IgKG1pbl9jb25m
aWRlbmNlID4gNSk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIC0tbWlu
LWNvbmZpZGVuY2UgdmFsdWUgJXM6IHZhbHVlIG11c3QgJwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnYmUgYmV0d2VlbiAxIGFuZCA1IGluY2x1c2l2ZS4nICUgbWluX2NvbmZpZGVuY2Up
CisgICAgICAgICAgICBzZWxmLl9leGl0X3dpdGhfaGVscCgnb3B0aW9uIC0tbWluLWNvbmZpZGVu
Y2U6IGludmFsaWQgaW50ZWdlcjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyVzOiB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNScKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICUgbWluX2NvbmZpZGVuY2UpCisKKyAgICAgICAgaWYgZmlsdGVyX3ZhbHVl
OgorICAgICAgICAgICAgZmlsdGVyX3J1bGVzID0gc2VsZi5fcGFyc2VfZmlsdGVyX2ZsYWcoZmls
dGVyX3ZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsdGVyX3J1bGVzID0gW10K
KworICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWxpZGF0ZV9maWx0ZXJfcnVsZXMoZmlsdGVy
X3J1bGVzLCBzZWxmLl9hbGxfY2F0ZWdvcmllcykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3Is
IGVycjoKKyAgICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF9oZWxwKGVycikKIAogICAgICAgICBv
cHRpb25zID0gQ29tbWFuZE9wdGlvblZhbHVlcyhmaWx0ZXJfcnVsZXM9ZmlsdGVyX3J1bGVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXRfY29tbWl0PWdpdF9jb21t
aXQsCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL29wdHBh
cnNlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0
cGFyc2VyX3VuaXR0ZXN0LnB5CmluZGV4IGUzYzVmYjkuLjY2YzFkNzUgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyX3VuaXR0ZXN0LnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvb3B0cGFyc2VyX3VuaXR0ZXN0
LnB5CkBAIC0yNCw3ICsyNCw2IEBACiAKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIG9wdHBhcnNl
ciBpbXBvcnQgX2NyZWF0ZV91c2FnZQogZnJvbSBvcHRwYXJzZXIgaW1wb3J0IEFyZ3VtZW50UGFy
c2VyCiBmcm9tIG9wdHBhcnNlciBpbXBvcnQgQXJndW1lbnRQcmludGVyCiBmcm9tIG9wdHBhcnNl
ciBpbXBvcnQgQ29tbWFuZE9wdGlvblZhbHVlcyBhcyBQcm9jZXNzb3JPcHRpb25zCkBAIC0zMiwx
NyArMzEsNiBAQCBmcm9tIG9wdHBhcnNlciBpbXBvcnQgRGVmYXVsdENvbW1hbmRPcHRpb25WYWx1
ZXMKIGZyb20gd2Via2l0cHkuc3R5bGVfcmVmZXJlbmNlcyBpbXBvcnQgTG9nVGVzdGluZwogCiAK
LWNsYXNzIENyZWF0ZVVzYWdlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0
cyB0aGUgX2NyZWF0ZV91c2FnZSgpIGZ1bmN0aW9uLiIiIgotCi0gICAgZGVmIHRlc3RfY3JlYXRl
X3VzYWdlKHNlbGYpOgotICAgICAgICBkZWZhdWx0X29wdGlvbnMgPSBEZWZhdWx0Q29tbWFuZE9w
dGlvblZhbHVlcyhtaW5fY29uZmlkZW5jZT0zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0PSJ2czciKQotICAgICAgICAj
IEV4ZXJjaXNlIHRoZSBjb2RlIHBhdGggdG8gbWFrZSBzdXJlIHRoZSBmdW5jdGlvbiBkb2VzIG5v
dCBlcnJvciBvdXQuCi0gICAgICAgIF9jcmVhdGVfdXNhZ2UoZGVmYXVsdF9vcHRpb25zKQotCi0K
IGNsYXNzIEFyZ3VtZW50UHJpbnRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgIiIi
VGVzdHMgdGhlIEFyZ3VtZW50UHJpbnRlciBjbGFzcy4iIiIKQEAgLTc2LDYgKzY0LDEzIEBAIGNs
YXNzIEFyZ3VtZW50UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAiIiJUZXN0
IHRoZSBBcmd1bWVudFBhcnNlciBjbGFzcy4iIiIKIAorICAgIGNsYXNzIF9Nb2NrU3RkRXJyKG9i
amVjdCk6CisKKyAgICAgICAgZGVmIHdyaXRlKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICAgICAg
IyBXZSBkbyBub3Qgd2FudCB0aGUgdXNhZ2Ugc3RyaW5nIG9yIHN0eWxlIGNhdGVnb3JpZXMKKyAg
ICAgICAgICAgICMgdG8gcHJpbnQgZHVyaW5nIHVuaXQgdGVzdHMsIHNvIHByaW50IG5vdGhpbmcu
CisgICAgICAgICAgICByZXR1cm4KKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2Vs
Zi5fbG9nID0gTG9nVGVzdGluZy5zZXRVcChzZWxmKQogCkBAIC05NiwxOCArOTEsMTcgQEAgY2xh
c3MgQXJndW1lbnRQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBfY3Jl
YXRlX3BhcnNlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGFuIEFyZ3VtZW50UGFyc2VyIGlu
c3RhbmNlIGZvciB0ZXN0aW5nLiIiIgotICAgICAgICBkZWYgc3RkZXJyX3dyaXRlKG1lc3NhZ2Up
OgotICAgICAgICAgICAgIyBXZSBkbyBub3Qgd2FudCB0aGUgdXNhZ2Ugc3RyaW5nIG9yIHN0eWxl
IGNhdGVnb3JpZXMKLSAgICAgICAgICAgICMgdG8gcHJpbnQgZHVyaW5nIHVuaXQgdGVzdHMsIHNv
IHByaW50IG5vdGhpbmcuCi0gICAgICAgICAgICByZXR1cm4KLQogICAgICAgICBkZWZhdWx0X29w
dGlvbnMgPSBzZWxmLl9jcmVhdGVfZGVmYXVsdHMoKQogCiAgICAgICAgIGFsbF9jYXRlZ29yaWVz
ID0gWyJidWlsZCIgLCJ3aGl0ZXNwYWNlIl0KKworICAgICAgICBtb2NrX3N0ZGVyciA9IHNlbGYu
X01vY2tTdGRFcnIoKQorCiAgICAgICAgIHJldHVybiBBcmd1bWVudFBhcnNlcihhbGxfY2F0ZWdv
cmllcz1hbGxfY2F0ZWdvcmllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2Vf
ZmlsdGVyX3J1bGVzPVtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9v
cHRpb25zPWRlZmF1bHRfb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZGVycl93cml0ZT1zdGRlcnJfd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
b2NrX3N0ZGVycj1tb2NrX3N0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVz
YWdlPSJ0ZXN0IHVzYWdlIikKIAogICAgIGRlZiB0ZXN0X3BhcnNlX2RvY3VtZW50YXRpb24oc2Vs
Zik6CiAgICAgICAgIHBhcnNlID0gc2VsZi5fcGFyc2UKQEAgLTEyNSwyMSArMTE5LDQxIEBAIGNs
YXNzIEFyZ3VtZW50UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAgICAgIyBQ
YXNzIGFuIHVuc3VwcG9ydGVkIGFyZ3VtZW50LgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhT
eXN0ZW1FeGl0LCBwYXJzZSwgWyctLWJhZCddKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KFZhbHVlRXJyb3IsIHBhcnNlLCBbJy0tbWluLWNvbmZpZGVuY2U9YmFkJ10pCi0gICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNlLCBbJy0tbWluLWNvbmZpZGVuY2U9MCdd
KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZSwgWyctLW1pbi1j
b25maWRlbmNlPTYnXSkKKyAgICAgICAgc2VsZi5fbG9nLmFzc2VydE1lc3NhZ2VzKFsnRVJST1I6
IG5vIHN1Y2ggb3B0aW9uOiAtLWJhZFxuJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
U3lzdGVtRXhpdCwgcGFyc2UsIFsnLS1taW4tY29uZmlkZW5jZT1iYWQnXSkKKyAgICAgICAgc2Vs
Zi5fbG9nLmFzc2VydE1lc3NhZ2VzKFsiRVJST1I6IG9wdGlvbiAtLW1pbi1jb25maWRlbmNlOiBp
bnZhbGlkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZWdlciB2YWx1
ZTogJ2JhZCdcbiJdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJz
ZSwgWyctLW1pbi1jb25maWRlbmNlPTAnXSkKKyAgICAgICAgc2VsZi5fbG9nLmFzc2VydE1lc3Nh
Z2VzKFsnRVJST1I6IG9wdGlvbiAtLW1pbi1jb25maWRlbmNlOiBpbnZhbGlkICcKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50ZWdlcjogMDogdmFsdWUgbXVzdCBiZSBiZXR3
ZWVuIDEgYW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNVxuJ10pCisg
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0tbWluLWNvbmZp
ZGVuY2U9NiddKQorICAgICAgICBzZWxmLl9sb2cuYXNzZXJ0TWVzc2FnZXMoWydFUlJPUjogb3B0
aW9uIC0tbWluLWNvbmZpZGVuY2U6IGludmFsaWQgJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdpbnRlZ2VyOiA2OiB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgJworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1XG4nXSkKICAgICAgICAgcGFyc2UoWyct
LW1pbi1jb25maWRlbmNlPTEnXSkgIyB3b3JrcwogICAgICAgICBwYXJzZShbJy0tbWluLWNvbmZp
ZGVuY2U9NSddKSAjIHdvcmtzCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
ciwgcGFyc2UsIFsnLS1vdXRwdXQ9YmFkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5
c3RlbUV4aXQsIHBhcnNlLCBbJy0tb3V0cHV0PWJhZCddKQorICAgICAgICBzZWxmLl9sb2cuYXNz
ZXJ0TWVzc2FnZXMoWyJFUlJPUjogb3B0aW9uIC0tb3V0cHV0LWZvcm1hdDogaW52YWxpZCAiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNob2ljZTogJ2JhZCcgKGNob29zZSBm
cm9tICdlbWFjcycsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3ZzNycp
XG4iXSkKICAgICAgICAgcGFyc2UoWyctLW91dHB1dD12czcnXSkgIyB3b3JrcwogCiAgICAgICAg
ICMgUGFzcyBhIGZpbHRlciBydWxlIG5vdCBiZWdpbm5pbmcgd2l0aCArIG9yIC0uCi0gICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNlLCBbJy0tZmlsdGVyPWJ1aWxkJ10p
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0tZmlsdGVy
PWJ1aWxkJ10pCisgICAgICAgIHNlbGYuX2xvZy5hc3NlcnRNZXNzYWdlcyhbJ0VSUk9SOiBJbnZh
bGlkIGZpbHRlciBydWxlICJidWlsZCI6IGV2ZXJ5ICcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAncnVsZSBtdXN0IHN0YXJ0IHdpdGggKyBvciAtLlxuJ10pCiAgICAgICAgIHBh
cnNlKFsnLS1maWx0ZXI9K2J1aWxkJ10pICMgd29ya3MKICAgICAgICAgIyBQYXNzIGZpbGVzIGFu
ZCBnaXQtY29tbWl0IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KFN5c3RlbUV4aXQsIHBhcnNlLCBbJy0tZ2l0LWNvbW1pdD0nLCAnZmlsZS50eHQnXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgcGFyc2UsIFsnLS1naXQtY29tbWl0PWNv
bW1pdHRpc2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdmaWxlLnR4dCddKQorICAgICAgICBzZWxmLl9sb2cuYXNzZXJ0TWVzc2FnZXMoWydFUlJPUjog
WW91IGNhbm5vdCBwcm92aWRlIGJvdGggcGF0aHMgYW5kICcKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnYSBnaXQgY29tbWl0IGF0IHRoZSBzYW1lIHRpbWUuXG4nXSkKKworICAg
IGRlZiB0ZXN0X3BhcnNlX25vX3BhdGhzX3dpdGhvdXRfc2NtKHNlbGYpOgorICAgICAgICBwYXJz
ZSA9IHNlbGYuX3BhcnNlCiAKICAgICAgICAgIyBQYXRocyBtdXN0IGJlIHBhc3NlZCB3aGVuIGZv
dW5kX3NjbSBpcyBGYWxzZS4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwg
cGFyc2UsIFtdLCBmb3VuZF9zY209RmFsc2UpCkBAIC0xNDcsNyArMTYxLDkgQEAgY2xhc3MgQXJn
dW1lbnRQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAg
InNjcmlwdCBmcm9tIGluc2lkZSBhIFdlYktpdCBjaGVja291dCBpZiB5b3UgYXJlIG5vdCAiCiAg
ICAgICAgICAgICAgICAgICAgICJwYXNzaW5nIHNwZWNpZmljIHBhdGhzIHRvIGNoZWNrLlxuIl0K
ICAgICAgICAgc2VsZi5fbG9nLmFzc2VydE1lc3NhZ2VzKG1lc3NhZ2VzKQotICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJzZSwgWyctLXZlcmJvc2U9MyddLCBmb3VuZF9z
Y209RmFsc2UpCisgICAgICAgICMgVGVzdCBvbmUgbW9yZSB2YXJpYW50LgorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBwYXJzZSwgWyctLW91dHB1dD12czcnXSwgZm91bmRf
c2NtPUZhbHNlKQorICAgICAgICBzZWxmLl9sb2cuYXNzZXJ0TWVzc2FnZXMobWVzc2FnZXMpCiAK
ICAgICBkZWYgdGVzdF9wYXJzZV9kZWZhdWx0X2FyZ3VtZW50cyhzZWxmKToKICAgICAgICAgcGFy
c2UgPSBzZWxmLl9wYXJzZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>