<?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>27462</bug_id>
          
          <creation_ts>2009-07-20 15:00:05 -0700</creation_ts>
          <short_desc>Add cpplint check for proper include order</short_desc>
          <delta_ts>2009-07-21 11:17:50 -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>Other</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="Adam Treat">manyoso</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>133241</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-20 15:00:05 -0700</bug_when>
    <thetext>cpplint should check to make sure that header files and implementation files follow the proper include order and style mandated here:

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

The only thing not checked here is whether includes surrounded by ifdefs are put at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133244</commentid>
    <comment_count>1</comment_count>
      <attachid>33109</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-20 15:01:35 -0700</bug_when>
    <thetext>Created attachment 33109
Checks include order and tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133353</commentid>
    <comment_count>2</comment_count>
      <attachid>33109</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-20 20:15:05 -0700</bug_when>
    <thetext>Comment on attachment 33109
Checks include order and tests

Here some initial comments to consider.  The checking of header states really took me some time to get through (and I need to look at it a little more).  Since I&apos;m not done, I won&apos;t give this an r-.


&gt; diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
&gt; +2009-07-20  Adam Treat  &lt;adam.treat@torchmobile.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Add a new check to cpplint to flag cases where the include section of a file
&gt; +        does not match the mandated include order and style of the Webkit coding style
&gt; +        guidelines.
&gt; +
&gt; +        Add associated tests.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=27462

I think the style du jour for WebKit changelog&apos;s is to have it like this:

bug title
bug link

description

&gt; diff --git a/WebKitTools/Scripts/modules/cpplint.py b/WebKitTools/Scripts/modules/cpplint.py

&gt; @@ -273,31 +272,28 @@ class _IncludeState(dict):
&gt;      # self._section will move monotonically through this set. If it ever
&gt;      # needs to move backwards, check_next_include_order will raise an error.

Note the comment for the &quot;class _IncludeState(dict):&quot;

 &quot;Calls in an illegal order will raise an _IncludeError with an appropriate error message.&quot;

is incorrect as it was before you started your change (but time to fix it).



&gt; +        errorMessage = &apos;&apos;

You switchedToWebkitCStyleNames instead of python_style_names (note: beforeErrorMessage and afterErrorMessage as well).

&gt; +        if (self._section != self._OTHER_H_SECTION):
&gt; +            beforeErrorMessage = (&apos;Found %s before %s&apos; %
&gt; +                                    (self._TYPE_NAMES[header_type],
&gt; +                                     self._SECTION_NAMES[self._section + 1]));
1. The indenting appears to be off.
2. No need for ; in python.

&gt; +        afterErrorMessage = (&apos;Found %s after %s&apos; %
&gt; +                                (self._TYPE_NAMES[header_type],
&gt; +                                 self._SECTION_NAMES[self._section]));
&gt; +


&gt; +        if header_type == _CONFIG_HEADER:
&gt; +            if self._section &gt; self._CONFIG_SECTION:
Perhaps:
            if self._section &gt;= self._CONFIG_SECTION:

since there is only one item in the config section.


&gt;          elif header_type == _LIKELY_MY_HEADER:
&gt; +            if self._section == self._OTHER_H_SECTION:

Consider:
            if self._section &gt; self._MY_H_SECTION:


&gt;              assert header_type == _OTHER_HEADER
&gt; +            if not file_is_header and self._section != self._MY_H_SECTION and self._section != self._OTHER_H_SECTION:
&gt; +                errorMessage = beforeErrorMessage

I think this is to catch missing config.h files.  Maybe the error should just say that &quot;This cpp files appears to not include config.h or config,h is not included first.&quot;


&gt; +                 if (not is_blank_line(next_line)):

I&apos;ve noticed that you did a lot of if statements with surrounding ().  There isn&apos;t a need for this (unless you want to continue the condition on to a new line).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133456</commentid>
    <comment_count>3</comment_count>
      <attachid>33175</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-21 07:00:06 -0700</bug_when>
    <thetext>Created attachment 33175
New version incorporating comments

I&apos;ve greatly simplified _classify_include following discussions on IRC and incorporated your other comments into this new version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133488</commentid>
    <comment_count>4</comment_count>
      <attachid>33175</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-21 09:34:20 -0700</bug_when>
    <thetext>Comment on attachment 33175
New version incorporating comments

This looks really good.  Just a few things to address.

&gt; diff --git a/WebKitTools/Scripts/modules/cpplint.py b/WebKitTools/Scripts/modules/cpplint.py
&gt; +        if header_type == _CONFIG_HEADER and file_is_header:
&gt; +            return &apos;Header file should not contain WebCore config.h.&apos;
&gt; +        if header_type == _PRIMARY_HEADER and file_is_header:
&gt; +            return &apos;Header file should not contain itself.&apos;
&gt; +
&gt; +        error_message = &apos;&apos;
&gt; +        if self._section != self._OTHER_SECTION:
&gt; +            before_error_message = (&apos;Found %s before %s&apos; %
&gt; +                                    (self._TYPE_NAMES[header_type],
&gt; +                                     self._SECTION_NAMES[self._section + 1]))
&gt; +        after_error_message = (&apos;Found %s after %s&apos; %
&gt; +                                (self._TYPE_NAMES[header_type],
&gt; +                                 self._SECTION_NAMES[self._section]))
&gt; +
&gt; +        if header_type == _CONFIG_HEADER:
&gt; +            if self._section &gt;= self._CONFIG_SECTION:
&gt; +                error_message = after_error_message
&gt; +            self._section = self._CONFIG_SECTION
&gt; +        elif header_type == _PRIMARY_HEADER:
&gt; +            if self._section &gt;= self._PRIMARY_SECTION:
&gt; +                error_message = after_error_message
&gt; +            elif self._section &lt; self._CONFIG_SECTION:
&gt; +                error_message = before_error_message

I think this is primarily here to note that the config.h header include may be missing.  

Maybe it is better just have the message say something about the missing include.
&quot;It appears that config.h wasn&apos;t included (or it wasn&apos;t included first).&quot;


&gt; +            if not file_is_header and self._section &lt; self._PRIMARY_SECTION:

This seems to be ensuring that we got to the primary header.  It is rare but sometimes there is no primary header.
I think the only thing to check here is that the missing config.h file.  The check becomes:
   if not file_is_header and self._section &lt; self._CONFIG_SECTION:

Have the same message as before about missing config.h.  This gets rid of before_error_message by the way.


&gt; +            # Check to make sure all headers besides config.h and the primary header are
&gt; +            # alphabetically sorted.
&gt; +            if not error_message and header_type == _OTHER_HEADER:
&gt; +                 previous_line_number = line_number - 1;
&gt; +                 previous_line = clean_lines.lines[previous_line_number]
&gt; +                 previous_match = _RE_PATTERN_INCLUDE.search(previous_line)
&gt; +                 while not previous_match and previous_line_number &gt; 0:
&gt; +                    previous_line_number -= 1;
&gt; +                    previous_line = clean_lines.lines[previous_line_number]
&gt; +                    previous_match = _RE_PATTERN_INCLUDE.search(previous_line)

I would try to match #ifdef/#else here and break out if you get that without a previous match (just to avoid flagging a sorting issue when there is an ifdef&apos;ed group after the regular includes.



&gt; diff --git a/WebKitTools/Scripts/modules/cpplint_unittest.py b/WebKitTools/Scripts/modules/cpplint_unittest.py

&gt; +    def test_check_next_include_order__no_config(self):
&gt; +        self.assertEqual(&apos;Header file should not contain WebCore config.h.&apos;,
&gt;                           self.include_state.check_next_include_order(
&gt; -                             cpplint._CPP_SYS_HEADER))
&gt; +                            cpplint._CONFIG_HEADER, True))
You seem to be doing a two space indenting here.  Anyway, I just wouldn&apos;t wrap the arguments.


It would be nice to add a test for this case as well:

   #include &quot;test.h&quot;

   #ifdef MY_DEFINE
   #include &quot;a.h&quot;
   #endif
Just to verify that a.h ins&apos;t flagged as a sorting error.



There is a test that says this:
3097	    def test_include(self):
3098	        # FIXME: Implement this.
3099	        pass

Should this test be deleted (or just add a comment there saying where it is tested) or should the header tests move there? etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133507</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-21 10:23:28 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 33175 [details])
&gt; This looks really good.  Just a few things to address.
...
&gt; I think this is primarily here to note that the config.h header include may be
&gt; missing.  
&gt; 
&gt; Maybe it is better just have the message say something about the missing
&gt; include.
&gt; &quot;It appears that config.h wasn&apos;t included (or it wasn&apos;t included first).&quot;

It is there to note the correct order, not just to see if the config.h is missing.  It does say something if there is a missing include whether it is a config header or the primary header.
 
The error messages look like this (from the test cases):

    &quot;Found header this file implements before WebCore config.h.&quot;

and

    &quot;Found other header before WebCore config.h.&quot;

and

    &quot;Found other header before a header this file implements.&quot;

I think these are quite clear error messages and the test cases encompass the range of possible errors pretty well.  I don&apos;t see any need to simplify further.

&gt; 
&gt; &gt; +            if not file_is_header and self._section &lt; self._PRIMARY_SECTION:
&gt; 
&gt; This seems to be ensuring that we got to the primary header.  It is rare but
&gt; sometimes there is no primary header.
&gt; I think the only thing to check here is that the missing config.h file.  The
&gt; check becomes:
&gt;    if not file_is_header and self._section &lt; self._CONFIG_SECTION:

I think this is incorrect.  As you say, it is rare that an implementation file does not have a primary header.  I see no reason to ignore the check for the vast majority of cases to stop a false positive on the rare corner case.  That is why the error message has a confidence of 4 and not 5.  We could bump this down to 3 if you like, but I think the check should stay.
 
&gt; I would try to match #ifdef/#else here and break out if you get that without a
&gt; previous match (just to avoid flagging a sorting issue when there is an
&gt; ifdef&apos;ed group after the regular includes.

Ok, will do.
 
&gt; &gt; +    def test_check_next_include_order__no_config(self):
&gt; &gt; +        self.assertEqual(&apos;Header file should not contain WebCore config.h.&apos;,
&gt; &gt;                           self.include_state.check_next_include_order(
&gt; &gt; -                             cpplint._CPP_SYS_HEADER))
&gt; &gt; +                            cpplint._CONFIG_HEADER, True))
&gt; You seem to be doing a two space indenting here.  Anyway, I just wouldn&apos;t wrap
&gt; the arguments.

Ok, will do.

&gt; 
&gt; It would be nice to add a test for this case as well:
&gt; 
&gt;    #include &quot;test.h&quot;
&gt; 
&gt;    #ifdef MY_DEFINE
&gt;    #include &quot;a.h&quot;
&gt;    #endif
&gt; Just to verify that a.h ins&apos;t flagged as a sorting error.
&gt; 

Ok, will do.
 
&gt; 
&gt; There is a test that says this:
&gt; 3097        def test_include(self):
&gt; 3098            # FIXME: Implement this.
&gt; 3099            pass
&gt; 
&gt; Should this test be deleted (or just add a comment there saying where it is
&gt; tested) or should the header tests move there? etc.

I&apos;ll remove it.

Thanks...

Patch to follow!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133515</commentid>
    <comment_count>6</comment_count>
      <attachid>33187</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-21 10:50:20 -0700</bug_when>
    <thetext>Created attachment 33187
More changes reflecting comments

New version reflecting the state of the review conversation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133523</commentid>
    <comment_count>7</comment_count>
      <attachid>33191</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-21 11:09:02 -0700</bug_when>
    <thetext>Created attachment 33191
New version that special cases &apos;FooCustom.cpp&apos;

New version that special cases &apos;FooCustom.cpp&apos; as discussed on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133524</commentid>
    <comment_count>8</comment_count>
      <attachid>33191</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-21 11:11:54 -0700</bug_when>
    <thetext>Comment on attachment 33191
New version that special cases &apos;FooCustom.cpp&apos;

Would be nice to make s small adjustment on landing.

&gt; +                if filename.endswith(&apos;.h&apos;):
&gt; +                    error(filename, line_number, &apos;build/include_order&apos;, 4,
&gt; +                          &apos;%s Should be: alphabetically sorted.&apos; %
&gt; +                          (error_message))
No need for parens on error_message (since it is a single element).

Btw, wierd python-ism: the parens do nothing here :) 
to make it a tuple with one element you&apos;d have to do this: (error_message,)
 


&gt; +                else:
&gt; +                    error(filename, line_number, &apos;build/include_order&apos;, 4,
&gt; +                          &apos;%s Should be: config.h, primary header, blank line, and then alphabetically sorted.&apos; %
&gt; +                          (error_message))

Same comment about (error_message)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133527</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-21 11:17:50 -0700</bug_when>
    <thetext>Landed with last changes mentioned with r46181.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33109</attachid>
            <date>2009-07-20 15:01:35 -0700</date>
            <delta_ts>2009-07-21 07:00:06 -0700</delta_ts>
            <desc>Checks include order and tests</desc>
            <filename>27462.patch</filename>
            <type>text/plain</type>
            <size>29035</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA4MTQwZDhkLi4xODc2YWVlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDct
MjAgIEFkYW0gVHJlYXQgIDxhZGFtLnRyZWF0QHRvcmNobW9iaWxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgY2hlY2sgdG8g
Y3BwbGludCB0byBmbGFnIGNhc2VzIHdoZXJlIHRoZSBpbmNsdWRlIHNlY3Rpb24gb2YgYSBmaWxl
CisgICAgICAgIGRvZXMgbm90IG1hdGNoIHRoZSBtYW5kYXRlZCBpbmNsdWRlIG9yZGVyIGFuZCBz
dHlsZSBvZiB0aGUgV2Via2l0IGNvZGluZyBzdHlsZQorICAgICAgICBndWlkZWxpbmVzLgorCisg
ICAgICAgIEFkZCBhc3NvY2lhdGVkIHRlc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc0NjIKKworICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9j
cHBsaW50LnB5OgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jcHBsaW50X3VuaXR0ZXN0LnB5
OgorCiAyMDA5LTA3LTIwICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNv
bT4KIAogICAgICAgICBObyByZXZpZXcsIGp1c3QgYWRkaW5nIEdhdmluIEJhcnJhY2xvdWdoIGFz
IHJldmlld2VyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxp
bnQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludC5weQppbmRleCA4OTk3
NDQ0Li43NjdmYmFmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3Bw
bGludC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludC5weQpAQCAt
MjMyLDExICsyMzIsMTAgQEAgZm9yIG9wLCBpbnZfcmVwbGFjZW1lbnQgaW4gWygnPT0nLCAnTkUn
KSwgKCchPScsICdFUScpLAogCiAjIFRoZXNlIGNvbnN0YW50cyBkZWZpbmUgdHlwZXMgb2YgaGVh
ZGVycyBmb3IgdXNlIHdpdGgKICMgX0luY2x1ZGVTdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3Jk
ZXIoKS4KLV9DX1NZU19IRUFERVIgPSAxCi1fQ1BQX1NZU19IRUFERVIgPSAyCi1fTElLRUxZX01Z
X0hFQURFUiA9IDMKLV9QT1NTSUJMRV9NWV9IRUFERVIgPSA0Ci1fT1RIRVJfSEVBREVSID0gNQor
X0NPTkZJR19IRUFERVIgPSAwCitfTElLRUxZX01ZX0hFQURFUiA9IDEKK19QT1NTSUJMRV9NWV9I
RUFERVIgPSAyCitfT1RIRVJfSEVBREVSID0gMwogCiAKIF9yZWdleHBfY29tcGlsZV9jYWNoZSA9
IHt9CkBAIC0yNzMsMzEgKzI3MiwyOCBAQCBjbGFzcyBfSW5jbHVkZVN0YXRlKGRpY3QpOgogICAg
ICMgc2VsZi5fc2VjdGlvbiB3aWxsIG1vdmUgbW9ub3RvbmljYWxseSB0aHJvdWdoIHRoaXMgc2V0
LiBJZiBpdCBldmVyCiAgICAgIyBuZWVkcyB0byBtb3ZlIGJhY2t3YXJkcywgY2hlY2tfbmV4dF9p
bmNsdWRlX29yZGVyIHdpbGwgcmFpc2UgYW4gZXJyb3IuCiAgICAgX0lOSVRJQUxfU0VDVElPTiA9
IDAKLSAgICBfTVlfSF9TRUNUSU9OID0gMQotICAgIF9DX1NFQ1RJT04gPSAyCi0gICAgX0NQUF9T
RUNUSU9OID0gMwotICAgIF9PVEhFUl9IX1NFQ1RJT04gPSA0CisgICAgX0NPTkZJR19TRUNUSU9O
ID0gMQorICAgIF9NWV9IX1NFQ1RJT04gPSAyCisgICAgX09USEVSX0hfU0VDVElPTiA9IDMKIAog
ICAgIF9UWVBFX05BTUVTID0gewotICAgICAgICBfQ19TWVNfSEVBREVSOiAnQyBzeXN0ZW0gaGVh
ZGVyJywKLSAgICAgICAgX0NQUF9TWVNfSEVBREVSOiAnQysrIHN5c3RlbSBoZWFkZXInLAorICAg
ICAgICBfQ09ORklHX0hFQURFUjogJ1dlYkNvcmUgY29uZmlnLmgnLAogICAgICAgICBfTElLRUxZ
X01ZX0hFQURFUjogJ2hlYWRlciB0aGlzIGZpbGUgaW1wbGVtZW50cycsCiAgICAgICAgIF9QT1NT
SUJMRV9NWV9IRUFERVI6ICdoZWFkZXIgdGhpcyBmaWxlIG1heSBpbXBsZW1lbnQnLAogICAgICAg
ICBfT1RIRVJfSEVBREVSOiAnb3RoZXIgaGVhZGVyJywKICAgICAgICAgfQogICAgIF9TRUNUSU9O
X05BTUVTID0gewotICAgICAgICBfSU5JVElBTF9TRUNUSU9OOiAiLi4uIG5vdGhpbmcuIChUaGlz
IGNhbid0IGJlIGFuIGVycm9yLikiLAotICAgICAgICBfTVlfSF9TRUNUSU9OOiAnYSBoZWFkZXIg
dGhpcyBmaWxlIGltcGxlbWVudHMnLAotICAgICAgICBfQ19TRUNUSU9OOiAnQyBzeXN0ZW0gaGVh
ZGVyJywKLSAgICAgICAgX0NQUF9TRUNUSU9OOiAnQysrIHN5c3RlbSBoZWFkZXInLAotICAgICAg
ICBfT1RIRVJfSF9TRUNUSU9OOiAnb3RoZXIgaGVhZGVyJywKKyAgICAgICAgX0lOSVRJQUxfU0VD
VElPTjogIi4uLiBub3RoaW5nLiIsCisgICAgICAgIF9DT05GSUdfU0VDVElPTjogIldlYkNvcmUg
Y29uZmlnLmguIiwKKyAgICAgICAgX01ZX0hfU0VDVElPTjogJ2EgaGVhZGVyIHRoaXMgZmlsZSBp
bXBsZW1lbnRzLicsCisgICAgICAgIF9PVEhFUl9IX1NFQ1RJT046ICdvdGhlciBoZWFkZXIuJywK
ICAgICAgICAgfQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBkaWN0Ll9faW5p
dF9fKHNlbGYpCiAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBzZWxmLl9JTklUSUFMX1NFQ1RJT04K
IAotICAgIGRlZiBjaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoc2VsZiwgaGVhZGVyX3R5cGUpOgor
ICAgIGRlZiBjaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoc2VsZiwgaGVhZGVyX3R5cGUsIGZpbGVf
aXNfaGVhZGVyKToKICAgICAgICAgIiIiUmV0dXJucyBhIG5vbi1lbXB0eSBlcnJvciBtZXNzYWdl
IGlmIHRoZSBuZXh0IGhlYWRlciBpcyBvdXQgb2Ygb3JkZXIuCiAKICAgICAgICAgVGhpcyBmdW5j
dGlvbiBhbHNvIHVwZGF0ZXMgdGhlIGludGVybmFsIHN0YXRlIHRvIGJlIHJlYWR5IHRvIGNoZWNr
CkBAIC0zMDUsMzQgKzMwMSwzOSBAQCBjbGFzcyBfSW5jbHVkZVN0YXRlKGRpY3QpOgogCiAgICAg
ICAgIEFyZ3M6CiAgICAgICAgICAgaGVhZGVyX3R5cGU6IE9uZSBvZiB0aGUgX1hYWF9IRUFERVIg
Y29uc3RhbnRzIGRlZmluZWQgYWJvdmUuCisgICAgICAgICAgZmlsZV9pc19oZWFkZXI6IFdoZXRo
ZXIgdGhlIGZpbGUgdGhhdCBvd25zIHRoaXMgX0luY2x1ZGVTdGF0ZSBpcyBpdHNlbGYgYSBoZWFk
ZXIKIAogICAgICAgICBSZXR1cm5zOgogICAgICAgICAgIFRoZSBlbXB0eSBzdHJpbmcgaWYgdGhl
IGhlYWRlciBpcyBpbiB0aGUgcmlnaHQgb3JkZXIsIG9yIGFuCiAgICAgICAgICAgZXJyb3IgbWVz
c2FnZSBkZXNjcmliaW5nIHdoYXQncyB3cm9uZy4KIAogICAgICAgICAiIiIKLSAgICAgICAgIyBG
SVhNRTogVGhpcyBpc24ndCBXZWJLaXQncyBydWxlLiBXZSBhcmUganVzdCBkaXNhYmxpbmcgdGhp
cyBmb3Igbm93LgotICAgICAgICBlcnJvcl9tZXNzYWdlID0gKCdGb3VuZCAlcyBhZnRlciAlcycg
JQotICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9UWVBFX05BTUVTW2hlYWRlcl90eXBl
XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fU0VDVElPTl9OQU1FU1tzZWxmLl9z
ZWN0aW9uXSkpCi0KLSAgICAgICAgaWYgaGVhZGVyX3R5cGUgPT0gX0NfU1lTX0hFQURFUjoKLSAg
ICAgICAgICAgIGlmIHNlbGYuX3NlY3Rpb24gPD0gc2VsZi5fQ19TRUNUSU9OOgotICAgICAgICAg
ICAgICAgIHNlbGYuX3NlY3Rpb24gPSBzZWxmLl9DX1NFQ1RJT04KLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yX21lc3NhZ2UKLSAgICAgICAgZWxpZiBoZWFk
ZXJfdHlwZSA9PSBfQ1BQX1NZU19IRUFERVI6Ci0gICAgICAgICAgICBpZiBzZWxmLl9zZWN0aW9u
IDw9IHNlbGYuX0NQUF9TRUNUSU9OOgotICAgICAgICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBz
ZWxmLl9DUFBfU0VDVElPTgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3JfbWVzc2FnZQorICAgICAgICBpZiBoZWFkZXJfdHlwZSA9PSBfQ09ORklHX0hFQURF
UiBhbmQgZmlsZV9pc19oZWFkZXI6CisgICAgICAgICAgICByZXR1cm4gJ0hlYWRlciBmaWxlIHNo
b3VsZCBub3QgY29udGFpbiBXZWJDb3JlIGNvbmZpZy5oLicKKyAgICAgICAgaWYgaGVhZGVyX3R5
cGUgPT0gX0xJS0VMWV9NWV9IRUFERVIgYW5kIGZpbGVfaXNfaGVhZGVyOgorICAgICAgICAgICAg
cmV0dXJuICdIZWFkZXIgZmlsZSBzaG91bGQgbm90IGNvbnRhaW4gc2VsZi4nCisKKyAgICAgICAg
ZXJyb3JNZXNzYWdlID0gJycKKyAgICAgICAgaWYgKHNlbGYuX3NlY3Rpb24gIT0gc2VsZi5fT1RI
RVJfSF9TRUNUSU9OKToKKyAgICAgICAgICAgIGJlZm9yZUVycm9yTWVzc2FnZSA9ICgnRm91bmQg
JXMgYmVmb3JlICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2Vs
Zi5fVFlQRV9OQU1FU1toZWFkZXJfdHlwZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fU0VDVElPTl9OQU1FU1tzZWxmLl9zZWN0aW9uICsgMV0pKTsKKyAgICAg
ICAgYWZ0ZXJFcnJvck1lc3NhZ2UgPSAoJ0ZvdW5kICVzIGFmdGVyICVzJyAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9UWVBFX05BTUVTW2hlYWRlcl90eXBlXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX1NFQ1RJT05fTkFNRVNbc2VsZi5f
c2VjdGlvbl0pKTsKKworICAgICAgICBpZiBoZWFkZXJfdHlwZSA9PSBfQ09ORklHX0hFQURFUjoK
KyAgICAgICAgICAgIGlmIHNlbGYuX3NlY3Rpb24gPiBzZWxmLl9DT05GSUdfU0VDVElPTjoKKyAg
ICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBhZnRlckVycm9yTWVzc2FnZQorICAgICAgICAg
ICAgc2VsZi5fc2VjdGlvbiA9IHNlbGYuX0NPTkZJR19TRUNUSU9OCiAgICAgICAgIGVsaWYgaGVh
ZGVyX3R5cGUgPT0gX0xJS0VMWV9NWV9IRUFERVI6Ci0gICAgICAgICAgICBpZiBzZWxmLl9zZWN0
aW9uIDw9IHNlbGYuX01ZX0hfU0VDVElPTjoKLSAgICAgICAgICAgICAgICBzZWxmLl9zZWN0aW9u
ID0gc2VsZi5fTVlfSF9TRUNUSU9OCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IHNlbGYuX3NlY3Rpb24gPSBzZWxmLl9PVEhFUl9IX1NFQ1RJT04KKyAgICAgICAgICAgIGlmIHNl
bGYuX3NlY3Rpb24gPT0gc2VsZi5fT1RIRVJfSF9TRUNUSU9OOgorICAgICAgICAgICAgICAgIGVy
cm9yTWVzc2FnZSA9IGFmdGVyRXJyb3JNZXNzYWdlCisgICAgICAgICAgICBlbGlmIHNlbGYuX3Nl
Y3Rpb24gIT0gc2VsZi5fQ09ORklHX1NFQ1RJT046CisgICAgICAgICAgICAgICAgZXJyb3JNZXNz
YWdlID0gYmVmb3JlRXJyb3JNZXNzYWdlCisgICAgICAgICAgICBzZWxmLl9zZWN0aW9uID0gc2Vs
Zi5fTVlfSF9TRUNUSU9OCiAgICAgICAgIGVsaWYgaGVhZGVyX3R5cGUgPT0gX1BPU1NJQkxFX01Z
X0hFQURFUjoKLSAgICAgICAgICAgIGlmIHNlbGYuX3NlY3Rpb24gPD0gc2VsZi5fTVlfSF9TRUNU
SU9OOgorICAgICAgICAgICAgaWYgc2VsZi5fc2VjdGlvbiA9PSBzZWxmLl9DT05GSUdfU0VDVElP
TjoKICAgICAgICAgICAgICAgICBzZWxmLl9zZWN0aW9uID0gc2VsZi5fTVlfSF9TRUNUSU9OCiAg
ICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgVGhpcyB3aWxsIGFsd2F5cyBiZSB0
aGUgZmFsbGJhY2sgYmVjYXVzZSB3ZSdyZSBub3Qgc3VyZQpAQCAtMzQwLDkgKzM0MSwxMSBAQCBj
bGFzcyBfSW5jbHVkZVN0YXRlKGRpY3QpOgogICAgICAgICAgICAgICAgIHNlbGYuX3NlY3Rpb24g
PSBzZWxmLl9PVEhFUl9IX1NFQ1RJT04KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFzc2Vy
dCBoZWFkZXJfdHlwZSA9PSBfT1RIRVJfSEVBREVSCisgICAgICAgICAgICBpZiBub3QgZmlsZV9p
c19oZWFkZXIgYW5kIHNlbGYuX3NlY3Rpb24gIT0gc2VsZi5fTVlfSF9TRUNUSU9OIGFuZCBzZWxm
Ll9zZWN0aW9uICE9IHNlbGYuX09USEVSX0hfU0VDVElPTjoKKyAgICAgICAgICAgICAgICBlcnJv
ck1lc3NhZ2UgPSBiZWZvcmVFcnJvck1lc3NhZ2UKICAgICAgICAgICAgIHNlbGYuX3NlY3Rpb24g
PSBzZWxmLl9PVEhFUl9IX1NFQ1RJT04KIAotICAgICAgICByZXR1cm4gJycKKyAgICAgICAgcmV0
dXJuIGVycm9yTWVzc2FnZQogCiAKIGNsYXNzIF9DcHBMaW50U3RhdGUob2JqZWN0KToKQEAgLTE5
ODQsMTAgKzE5ODcsNiBAQCBkZWYgX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZWluZm8sIGluY2x1ZGUs
IGlzX3N5c3RlbSk6CiAgICAgICBPbmUgb2YgdGhlIF9YWFhfSEVBREVSIGNvbnN0YW50cy4KIAog
ICAgIEZvciBleGFtcGxlOgotICAgICAgPj4+IF9jbGFzc2lmeV9pbmNsdWRlKEZpbGVJbmZvKCdm
b28vZm9vLmNjJyksICdzdGRpby5oJywgVHJ1ZSkKLSAgICAgIF9DX1NZU19IRUFERVIKLSAgICAg
ID4+PiBfY2xhc3NpZnlfaW5jbHVkZShGaWxlSW5mbygnZm9vL2Zvby5jYycpLCAnc3RyaW5nJywg
VHJ1ZSkKLSAgICAgIF9DUFBfU1lTX0hFQURFUgogICAgICAgPj4+IF9jbGFzc2lmeV9pbmNsdWRl
KEZpbGVJbmZvKCdmb28vZm9vLmNjJyksICdmb28vZm9vLmgnLCBGYWxzZSkKICAgICAgIF9MSUtF
TFlfTVlfSEVBREVSCiAgICAgICA+Pj4gX2NsYXNzaWZ5X2luY2x1ZGUoRmlsZUluZm8oJ2Zvby9m
b29fdW5rbm93bl9leHRlbnNpb24uY2MnKSwKQEAgLTE5OTYsMTUgKzE5OTUsMTEgQEAgZGVmIF9j
bGFzc2lmeV9pbmNsdWRlKGZpbGVpbmZvLCBpbmNsdWRlLCBpc19zeXN0ZW0pOgogICAgICAgPj4+
IF9jbGFzc2lmeV9pbmNsdWRlKEZpbGVJbmZvKCdmb28vZm9vLmNjJyksICdmb28vYmFyLmgnLCBG
YWxzZSkKICAgICAgIF9PVEhFUl9IRUFERVIKICAgICAiIiIKLSAgICAjIFRoaXMgaXMgYSBsaXN0
IG9mIGFsbCBzdGFuZGFyZCBjKysgaGVhZGVyIGZpbGVzLCBleGNlcHQKLSAgICAjIHRob3NlIGFs
cmVhZHkgY2hlY2tlZCBmb3IgYWJvdmUuCi0gICAgaXNfc3RsX2ggPSBpbmNsdWRlIGluIF9TVExf
SEVBREVSUwotICAgIGlzX2NwcF9oID0gaXNfc3RsX2ggb3IgaW5jbHVkZSBpbiBfQ1BQX0hFQURF
UlMKIAotICAgIGlmIGlzX3N5c3RlbToKLSAgICAgICAgaWYgaXNfY3BwX2g6Ci0gICAgICAgICAg
ICByZXR1cm4gX0NQUF9TWVNfSEVBREVSCi0gICAgICAgIHJldHVybiBfQ19TWVNfSEVBREVSCisg
ICAgIyBJZiB0aGUgaW5jbHVkZSBpcyBuYW1lZCBjb25maWcuaCBhbmQgaXNfc3lzdGVtIGlzIGZh
bHNlCisgICAgIyB0aGVuIHRoaXMgaXMgV2ViQ29yZS9jb25maWcuaAorICAgIGlmIChpbmNsdWRl
ID09ICJjb25maWcuaCIgYW5kIG5vdCBpc19zeXN0ZW0pOgorICAgICAgICByZXR1cm4gX0NPTkZJ
R19IRUFERVIKIAogICAgICMgSWYgdGhlIHRhcmdldCBmaWxlIGFuZCB0aGUgaW5jbHVkZSB3ZSdy
ZSBjaGVja2luZyBzaGFyZSBhCiAgICAgIyBiYXNlbmFtZSB3aGVuIHdlIGRyb3AgY29tbW9uIGV4
dGVuc2lvbnMsIGFuZCB0aGUgaW5jbHVkZQpAQCAtMjAxMiw5ICsyMDA3LDcgQEAgZGVmIF9jbGFz
c2lmeV9pbmNsdWRlKGZpbGVpbmZvLCBpbmNsdWRlLCBpc19zeXN0ZW0pOgogICAgIHRhcmdldF9k
aXIsIHRhcmdldF9iYXNlID0gKAogICAgICAgICBvcy5wYXRoLnNwbGl0KF9kcm9wX2NvbW1vbl9z
dWZmaXhlcyhmaWxlaW5mby5yZXBvc2l0b3J5X25hbWUoKSkpKQogICAgIGluY2x1ZGVfZGlyLCBp
bmNsdWRlX2Jhc2UgPSBvcy5wYXRoLnNwbGl0KF9kcm9wX2NvbW1vbl9zdWZmaXhlcyhpbmNsdWRl
KSkKLSAgICBpZiAodGFyZ2V0X2Jhc2UgPT0gaW5jbHVkZV9iYXNlCi0gICAgICAgIGFuZCAoaW5j
bHVkZV9kaXIgPT0gdGFyZ2V0X2RpcgotICAgICAgICAgICAgIG9yIGluY2x1ZGVfZGlyID09IG9z
LnBhdGgubm9ybXBhdGgodGFyZ2V0X2RpciArICcvLi4vcHVibGljJykpKToKKyAgICBpZiAodGFy
Z2V0X2Jhc2UgPT0gaW5jbHVkZV9iYXNlKToKICAgICAgICAgcmV0dXJuIF9MSUtFTFlfTVlfSEVB
REVSCiAKICAgICAjIElmIHRoZSB0YXJnZXQgYW5kIGluY2x1ZGUgc2hhcmUgc29tZSBpbml0aWFs
IGJhc2VuYW1lCkBAIC0yMDY5LDIyICsyMDYyLDQ5IEBAIGRlZiBjaGVja19pbmNsdWRlX2xpbmUo
ZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgaW5jbHVkZV9zdGF0ZSwgZXJyb3Ip
CiAgICAgICAgICAgICBpbmNsdWRlX3N0YXRlW2luY2x1ZGVdID0gbGluZV9udW1iZXIKIAogICAg
ICAgICAgICAgIyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGhlYWRlcnMgYXBwZWFyIGluIHRoZSBy
aWdodCBvcmRlcjoKLSAgICAgICAgICAgICMgMSkgZm9yIGZvby5jYywgZm9vLmggIChwcmVmZXJy
ZWQgbG9jYXRpb24pCi0gICAgICAgICAgICAjIDIpIGMgc3lzdGVtIGZpbGVzCi0gICAgICAgICAg
ICAjIDMpIGNwcCBzeXN0ZW0gZmlsZXMKLSAgICAgICAgICAgICMgNCkgZm9yIGZvby5jYywgZm9v
LmggIChkZXByZWNhdGVkIGxvY2F0aW9uKQotICAgICAgICAgICAgIyA1KSBvdGhlciBnb29nbGUg
aGVhZGVycworICAgICAgICAgICAgIyAxKSBmb3IgaW1wbGVtZW50YXRpb24gZmlsZXM6IGNvbmZp
Zy5oLCBwcmltYXJ5IGhlYWRlciwgYmxhbmsgbGluZSwgYWxwaGFiZXRpY2FsbHkgc29ydGVkCisg
ICAgICAgICAgICAjIDIpIGZvciBoZWFkZXIgZmlsZXM6IGFscGhhYmV0aWNhbGx5IHNvcnRlZAog
ICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBXZSBjbGFzc2lmeSBlYWNoIGluY2x1ZGUgc3Rh
dGVtZW50IGFzIG9uZSBvZiB0aG9zZSA1IHR5cGVzCisgICAgICAgICAgICAjIFdlIGNsYXNzaWZ5
IGVhY2ggaW5jbHVkZSBzdGF0ZW1lbnQgYXMgb25lIG9mIDQgdHlwZXMKICAgICAgICAgICAgICMg
dXNpbmcgYSBudW1iZXIgb2YgdGVjaG5pcXVlcy4gVGhlIGluY2x1ZGVfc3RhdGUgb2JqZWN0IGtl
ZXBzCiAgICAgICAgICAgICAjIHRyYWNrIG9mIHRoZSBoaWdoZXN0IHR5cGUgc2VlbiwgYW5kIGNv
bXBsYWlucyBpZiB3ZSBzZWUgYQogICAgICAgICAgICAgIyBsb3dlciB0eXBlIGFmdGVyIHRoYXQu
Ci0gICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2lu
Y2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICAgICAgX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZWluZm8s
IGluY2x1ZGUsIGlzX3N5c3RlbSkpCisgICAgICAgICAgICBoZWFkZXJfdHlwZSA9IF9jbGFzc2lm
eV9pbmNsdWRlKGZpbGVpbmZvLCBpbmNsdWRlLCBpc19zeXN0ZW0pCisgICAgICAgICAgICBlcnJv
cl9tZXNzYWdlID0gaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoaGVhZGVy
X3R5cGUsIGZpbGVuYW1lLmVuZHN3aXRoKCcuaCcpKQorCisgICAgICAgICAgICAjIENoZWNrIHRv
IG1ha2Ugc3VyZSB3ZSBoYXZlIGEgYmxhbmsgbGluZSBhZnRlciBwcmltYXJ5IGhlYWRlci4KKyAg
ICAgICAgICAgIGlmIG5vdCBlcnJvcl9tZXNzYWdlIGFuZCBoZWFkZXJfdHlwZSA9PSBfTElLRUxZ
X01ZX0hFQURFUjoKKyAgICAgICAgICAgICAgICAgbmV4dF9saW5lID0gY2xlYW5fbGluZXMucmF3
X2xpbmVzW2xpbmVfbnVtYmVyICsgMV0KKyAgICAgICAgICAgICAgICAgaWYgKG5vdCBpc19ibGFu
a19saW5lKG5leHRfbGluZSkpOgorICAgICAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwg
bGluZV9udW1iZXIsICdidWlsZC9pbmNsdWRlX29yZGVyJywgNCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ1lvdSBzaG91bGQgYWRkIGEgYmxhbmsgbGluZSBhZnRlciBpbXBsZW1lbnRhdGlv
biBmaWxlXCdzIG93biBoZWFkZXIuJykKKworICAgICAgICAgICAgIyBDaGVjayB0byBtYWtlIHN1
cmUgYWxsIGhlYWRlcnMgYmVzaWRlcyBjb25maWcuaCBhbmQgdGhlIHByaW1hcnkgaGVhZGVyIGFy
ZQorICAgICAgICAgICAgIyBhbHBoYWJldGljYWxseSBzb3J0ZWQuCisgICAgICAgICAgICBpZiBu
b3QgZXJyb3JfbWVzc2FnZSBhbmQgaGVhZGVyX3R5cGUgPT0gX09USEVSX0hFQURFUjoKKyAgICAg
ICAgICAgICAgICAgcHJldmlvdXNfbGluZV9udW1iZXIgPSBsaW5lX251bWJlciAtIDE7CisgICAg
ICAgICAgICAgICAgIHByZXZpb3VzX2xpbmUgPSBjbGVhbl9saW5lcy5saW5lc1twcmV2aW91c19s
aW5lX251bWJlcl0KKyAgICAgICAgICAgICAgICAgcHJldmlvdXNfbWF0Y2ggPSBfUkVfUEFUVEVS
Tl9JTkNMVURFLnNlYXJjaChwcmV2aW91c19saW5lKQorICAgICAgICAgICAgICAgICB3aGlsZSAo
bm90IHByZXZpb3VzX21hdGNoIGFuZCBwcmV2aW91c19saW5lX251bWJlciA+IDApOgorICAgICAg
ICAgICAgICAgICAgICBwcmV2aW91c19saW5lX251bWJlciAtPSAxOworICAgICAgICAgICAgICAg
ICAgICBwcmV2aW91c19saW5lID0gY2xlYW5fbGluZXMubGluZXNbcHJldmlvdXNfbGluZV9udW1i
ZXJdCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX21hdGNoID0gX1JFX1BBVFRFUk5fSU5D
TFVERS5zZWFyY2gocHJldmlvdXNfbGluZSkKKyAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3Vz
X21hdGNoKToKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfaW5jbHVkZSA9IHByZXZpb3Vz
X21hdGNoLmdyb3VwKDIpCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX2hlYWRlcl90eXBl
ID0gX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZWluZm8sIHByZXZpb3VzX2luY2x1ZGUsIChwcmV2aW91
c19tYXRjaC5ncm91cCgxKSA9PSAnPCcpKQorICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlv
dXNfaGVhZGVyX3R5cGUgPT0gX09USEVSX0hFQURFUiBhbmQgcHJldmlvdXNfbGluZS5zdHJpcCgp
ID4gbGluZS5zdHJpcCgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGZpbGVuYW1l
LCBsaW5lX251bWJlciwgJ2J1aWxkL2luY2x1ZGVfb3JkZXInLCA0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBzb3J0aW5nIHByb2JsZW0uJykKKwogICAgICAg
ICAgICAgaWYgZXJyb3JfbWVzc2FnZToKLSAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwg
bGluZV9udW1iZXIsICdidWlsZC9pbmNsdWRlX29yZGVyJywgNCwKLSAgICAgICAgICAgICAgICAg
ICAgICAnJXMuIFNob3VsZCBiZTogJXMuaCwgYyBzeXN0ZW0sIGMrKyBzeXN0ZW0sIG90aGVyLicg
JQotICAgICAgICAgICAgICAgICAgICAgIChlcnJvcl9tZXNzYWdlLCBmaWxlaW5mby5iYXNlX25h
bWUoKSkpCisgICAgICAgICAgICAgICAgaWYgKGZpbGVuYW1lLmVuZHN3aXRoKCcuaCcpKToKKyAg
ICAgICAgICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVpbGQvaW5j
bHVkZV9vcmRlcicsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICclcyBTaG91bGQgYmU6
IGFscGhhYmV0aWNhbGx5IHNvcnRlZC4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGVy
cm9yX21lc3NhZ2UsIGZpbGVpbmZvLmJhc2VfbmFtZSgpKSkKKyAgICAgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdidWls
ZC9pbmNsdWRlX29yZGVyJywgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzIFNob3Vs
ZCBiZTogY29uZmlnLmgsIHByaW1hcnkgaGVhZGVyLCBibGFuayBsaW5lLCBhbmQgdGhlbiBhbHBo
YWJldGljYWxseSBzb3J0ZWQuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcl9t
ZXNzYWdlKSkKIAogICAgICMgTG9vayBmb3IgYW55IG9mIHRoZSBzdHJlYW0gY2xhc3NlcyB0aGF0
IGFyZSBwYXJ0IG9mIHN0YW5kYXJkIEMrKy4KICAgICBtYXRjaGVkID0gX1JFX1BBVFRFUk5fSU5D
TFVERS5tYXRjaChsaW5lKQpAQCAtMjgxNSw4ICsyODM1LDYgQEAgZGVmIHVzZV93ZWJraXRfc3R5
bGVzKCk6CiAgICAgICAgICctcmVhZGFiaWxpdHkvYnJhY2VzJywgICMgaW50IGZvbygpIHt9Owog
ICAgICAgICAnLXJlYWRhYmlsaXR5L2ZuX3NpemUnLAogICAgICAgICAnLWJ1aWxkL3N0b3JhZ2Vf
Y2xhc3MnLCAgIyBjb25zdCBzdGF0aWMKLSAgICAgICAgJy1idWlsZC9pbmNsdWRlX29yZGVyJywK
LSAgICAgICAgJy1idWlsZC9pbmNsdWRlJywKICAgICAgICAgJy1idWlsZC9lbmRpZl9jb21tZW50
JywKICAgICAgICAgJy13aGl0ZXNwYWNlL2xhYmVscycsCiAgICAgICAgICctcnVudGltZS9hcnJh
eXMnLCAgIyB2YXJpYWJsZSBsZW5ndGggYXJyYXkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvbW9kdWxlcy9jcHBsaW50X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9t
b2R1bGVzL2NwcGxpbnRfdW5pdHRlc3QucHkKaW5kZXggZjZlNDg3OC4uMmYyOWE2MiAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnRfdW5pdHRlc3QucHkKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnRfdW5pdHRlc3QucHkKQEAgLTQy
OCwxNSArNDI4LDYgQEAgY2xhc3MgQ3BwbGludFRlc3QoQ3BwbGludFRlc3RCYXNlKToKICAgICAg
ICAgICAgICdVc2luZyBzaXplb2YodHlwZSkuICBVc2Ugc2l6ZW9mKHZhcm5hbWUpIGluc3RlYWQg
aWYgcG9zc2libGUnCiAgICAgICAgICAgICAnICBbcnVudGltZS9zaXplb2ZdIFsxXScpCiAKLSAg
ICAjIFRlc3QgZmFsc2UgZXJyb3JzIHRoYXQgaGFwcGVuZWQgd2l0aCBzb21lIGluY2x1ZGUgZmls
ZSBuYW1lcwotICAgIGRlZiB0ZXN0X2luY2x1ZGVfZmlsZW5hbWVfZmFsc2VfZXJyb3Ioc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnI2luY2x1ZGUgImZvby9s
b25nLWZvby5oIicsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgK
LSAgICAgICAgICAgICcjaW5jbHVkZSAiZm9vL3NwcmludGYuaCInLAotICAgICAgICAgICAgJycp
Ci0KICAgICAjIFRlc3QgdHlwZWRlZiBjYXNlcy4gIFRoZXJlIHdhcyBhIGJ1ZyB0aGF0IGNwcGxp
bnQgbWlzaWRlbnRpZmllZAogICAgICMgdHlwZWRlZiBmb3IgcG9pbnRlciB0byBmdW5jdGlvbiBh
cyBDLXN0eWxlIGNhc3QgYW5kIHByb2R1Y2VkCiAgICAgIyBmYWxzZS1wb3NpdGl2ZSBlcnJvciBt
ZXNzYWdlcy4KQEAgLTU3MCwxMiArNTYxLDEyIEBAIGNsYXNzIENwcGxpbnRUZXN0KENwcGxpbnRU
ZXN0QmFzZSk6CiAgICAgICAgICAgICAnJycsCiAgICAgICAgICAgICAnJykKICAgICAgICAgc2Vs
Zi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5jbHVkZSA8
YXNzZXJ0Lmg+Ci0gICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RyaW5nPgotICAgICAgICAgICAg
ICAgI2luY2x1ZGUgPHZlY3Rvcj4KLSAgICAgICAgICAgICAgICNpbmNsdWRlICJiYXNlL2Jhc2lj
dHlwZXMuaCIKLSAgICAgICAgICAgICAgICNpbmNsdWRlICJiYXNlL3BvcnQuaCIKLSAgICAgICAg
ICAgICAgIHZlY3RvcjxzdHJpbmc+IGhham9hOycnJywgJycpCisgICAgICAgICAgICAgJycnI2lu
Y2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgorICAgICAgICAgICAgICAgICNpbmNsdWRlICJiYXNl
L3BvcnQuaCIKKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICAgICAgICAg
ICAgICAgI2luY2x1ZGUgPHN0cmluZz4KKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8dmVjdG9y
PgorICAgICAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+IGhham9hOycnJywgJycpCiAgICAgICAg
IHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAogICAgICAgICAgICAgJycnI2luY2x1
ZGUgPHN0cmluZz4KICAgICAgICAgICAgICAgIGludCBpID0gbnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkKQEAgLTU5MSwxNCArNTgyLDE3IEBAIGNsYXNzIENwcGxpbnRUZXN0KENwcGxpbnRUZXN0
QmFzZSk6CiAgICAgICAgICMgVGVzdCB0aGUgVXBkYXRlSW5jbHVkZVN0YXRlIGNvZGUgcGF0aC4K
ICAgICAgICAgbW9ja19oZWFkZXJfY29udGVudHMgPSBbJyNpbmNsdWRlICJibGFoL2Zvby5oIics
ICcjaW5jbHVkZSAiYmxhaC9iYXIuaCInXQogICAgICAgICBtZXNzYWdlID0gc2VsZi5wZXJmb3Jt
X2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJyNpbmNsdWRlICJibGFoL2EuaCIn
LAorICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicKKyAgICAgICAgICAgICcjaW5j
bHVkZSAiYmxhaC9hLmgiXG4nLAogICAgICAgICAgICAgZmlsZW5hbWU9J2JsYWgvYS5jYycsCiAg
ICAgICAgICAgICBpbz1Nb2NrSW8obW9ja19oZWFkZXJfY29udGVudHMpKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhtZXNzYWdlLCAnJykKIAogICAgICAgICBtb2NrX2hlYWRlcl9jb250ZW50
cyA9IFsnI2luY2x1ZGUgPHNldD4nXQogICAgICAgICBtZXNzYWdlID0gc2VsZi5wZXJmb3JtX2lu
Y2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgImJsYWgvYS5oIgor
ICAgICAgICAgICAgJycnI2luY2x1ZGUgImNvbmZpZy5oIgorICAgICAgICAgICAgICAgI2luY2x1
ZGUgImJsYWgvYS5oIgorCiAgICAgICAgICAgICAgICBzdGQ6OnNldDxpbnQ+IGZvbzsnJycsCiAg
ICAgICAgICAgICBmaWxlbmFtZT0nYmxhaC9hLmNjJywKICAgICAgICAgICAgIGlvPU1vY2tJbyht
b2NrX2hlYWRlcl9jb250ZW50cykpCkBAIC02MTcsNyArNjExLDkgQEAgY2xhc3MgQ3BwbGludFRl
c3QoQ3BwbGludFRlc3RCYXNlKToKIAogICAgICAgICAjIElmIHRoZXJlJ3MganVzdCBhIGNjIGFu
ZCB0aGUgaGVhZGVyIGNhbid0IGJlIGZvdW5kIHRoZW4gaXQncyBvay4KICAgICAgICAgbWVzc2Fn
ZSA9IHNlbGYucGVyZm9ybV9pbmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNp
bmNsdWRlICJibGFoL2EuaCIKKyAgICAgICAgICAgICcnJyNpbmNsdWRlICJjb25maWcuaCIKKyAg
ICAgICAgICAgICAgICNpbmNsdWRlICJibGFoL2EuaCIKKwogICAgICAgICAgICAgICAgc3RkOjpz
ZXQ8aW50PiBmb287JycnLAogICAgICAgICAgICAgZmlsZW5hbWU9J2JsYWgvYS5jYycpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lc3NhZ2UsICcnKQpAQCAtNjI1LDcgKzYyMSw5IEBAIGNs
YXNzIENwcGxpbnRUZXN0KENwcGxpbnRUZXN0QmFzZSk6CiAgICAgICAgICMgTWFrZSBzdXJlIHdl
IGZpbmQgdGhlIGhlYWRlcnMgd2l0aCByZWxhdGl2ZSBwYXRocy4KICAgICAgICAgbW9ja19oZWFk
ZXJfY29udGVudHMgPSBbJyddCiAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLnBlcmZvcm1faW5jbHVk
ZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5jbHVkZSAiJXMvYS5oIgorICAgICAg
ICAgICAgJycnI2luY2x1ZGUgImNvbmZpZy5oIgorICAgICAgICAgICAgICAgI2luY2x1ZGUgIiVz
L2EuaCIKKwogICAgICAgICAgICAgICAgc3RkOjpzZXQ8aW50PiBmb287JycnICUgb3MucGF0aC5i
YXNlbmFtZShvcy5nZXRjd2QoKSksCiAgICAgICAgICAgICBmaWxlbmFtZT0nYS5jYycsCiAgICAg
ICAgICAgICBpbz1Nb2NrSW8obW9ja19oZWFkZXJfY29udGVudHMpKQpAQCAtODkxLDEzICs4ODks
NiBAQCBjbGFzcyBDcHBsaW50VGVzdChDcHBsaW50VGVzdEJhc2UpOgogICAgICAgICAgICAgJyAg
ICBtZW1zZXQoYnVmLCAweGNkLCAwKScsCiAgICAgICAgICAgICAnJykKIAotICAgIGRlZiB0ZXN0
X2NoZWNrX2RlcHJlY2F0ZWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1
bGVzX2NoZWNrKCdmb28uY2MnLCAnI2luY2x1ZGUgPGlvc3RyZWFtPicsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTdHJlYW1zIGFyZSBoaWdobHkgZGlzY291cmFn
ZWQuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcmVhZGFi
aWxpdHkvc3RyZWFtc10gWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNf
Y2hlY2soJ2Zvb190ZXN0LmNjJywgJyNpbmNsdWRlIDxpb3N0cmVhbT4nLCAnJykKLSAgICAgICAg
c2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvb191bml0dGVzdC5jYycsICcjaW5j
bHVkZSA8aW9zdHJlYW0+JywgJycpCi0KICAgICBkZWYgdGVzdF9jaGVja19wb3NpeF90aHJlYWRp
bmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3NjdGltZV9yKCknLCAnJykKICAg
ICAgICAgc2VsZi5hc3NlcnRfbGludCgnc3RydG9rX3IoKScsICcnKQpAQCAtMjA2MSw2NSArMjA1
Miw4NiBAQCBjbGFzcyBPcmRlck9mSW5jbHVkZXNUZXN0KENwcGxpbnRUZXN0QmFzZSk6CiAgICAg
ZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBvcy5wYXRoLmFic3BhdGggPSBzZWxmLm9zX3Bh
dGhfYWJzcGF0aF9vcmlnCiAKLSAgICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJf
X290aGVyX3RoZW5fY3BwKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxm
LmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAotICAgICAgICAgICAgY3Bw
bGludC5fT1RIRVJfSEVBREVSKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm91bmQgQysr
IHN5c3RlbSBoZWFkZXIgYWZ0ZXIgb3RoZXIgaGVhZGVyJywKKyAgICBkZWYgdGVzdF9jaGVja19u
ZXh0X2luY2x1ZGVfb3JkZXJfX25vX2NvbmZpZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnSGVhZGVyIGZpbGUgc2hvdWxkIG5vdCBjb250YWluIFdlYkNvcmUgY29uZmlnLmguJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9p
bmNsdWRlX29yZGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHBsaW50Ll9DUFBf
U1lTX0hFQURFUikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwbGludC5fQ09ORklH
X0hFQURFUiwgVHJ1ZSkpCiAKLSAgICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJf
X2NwcF90aGVuX2Moc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5j
bHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBjcHBsaW50
Ll9DUFBfU1lTX0hFQURFUikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIEMgc3lz
dGVtIGhlYWRlciBhZnRlciBDKysgc3lzdGVtIGhlYWRlcicsCisgICAgZGVmIHRlc3RfY2hlY2tf
bmV4dF9pbmNsdWRlX29yZGVyX19ub19zZWxmKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdIZWFkZXIgZmlsZSBzaG91bGQgbm90IGNvbnRhaW4gc2VsZi4nLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwcGxpbnQuX0NfU1lTX0hFQURFUikpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwbGludC5fTElLRUxZX01ZX0hFQURFUiwgVHJ1
ZSkpCiAKLSAgICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJfX2xpa2VseV90aGVu
X2NwcChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5pbmNsdWRlX3N0
YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxpbnQuX0xJS0VM
WV9NWV9IRUFERVIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLmluY2x1ZGVf
c3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAotICAgICAgICAgICAgY3BwbGludC5fQ1BQ
X1NZU19IRUFERVIpKQorICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fbGlr
ZWx5X3RoZW5fY29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBo
ZWFkZXIgdGhpcyBmaWxlIGltcGxlbWVudHMgYmVmb3JlIFdlYkNvcmUgY29uZmlnLmguJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNs
dWRlX29yZGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwcGxpbnQuX0xJS0VMWV9N
WV9IRUFERVIsIEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm91bmQgV2ViQ29y
ZSBjb25maWcuaCBhZnRlciBhIGhlYWRlciB0aGlzIGZpbGUgaW1wbGVtZW50cy4nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVf
b3JkZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwbGludC5fQ09ORklHX0hFQURF
UiwgRmFsc2UpKQogCi0gICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyX19wb3Nz
aWJsZV90aGVuX2NwcChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5p
bmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxp
bnQuX1BPU1NJQkxFX01ZX0hFQURFUikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNl
bGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBj
cHBsaW50Ll9DUFBfU1lTX0hFQURFUikpCisgICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRl
X29yZGVyX19vdGhlcl90aGVuX2NvbmZpZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnRm91bmQgb3RoZXIgaGVhZGVyIGJlZm9yZSBXZWJDb3JlIGNvbmZpZy5oLicsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9v
cmRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHBsaW50Ll9PVEhFUl9IRUFERVIs
IEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm91bmQgV2ViQ29yZSBjb25maWcu
aCBhZnRlciBvdGhlciBoZWFkZXIuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlu
Y2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNwcGxpbnQuX0NPTkZJR19IRUFERVIsIEZhbHNlKSkKIAotICAgIGRlZiB0ZXN0
X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fY3BwX3RoZW5fbGlrZWx5KHNlbGYpOgorICAgIGRl
ZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fY29uZmlnX3RoZW5fb3RoZXJfdGhlbl9s
aWtlbHkoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVkZV9z
dGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBjcHBsaW50Ll9DUFBf
U1lTX0hFQURFUikpCi0gICAgICAgICMgVGhpcyB3aWxsIGV2ZW50dWFsbHkgZmFpbC4KLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5j
bHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxpbnQuX0xJS0VMWV9NWV9IRUFERVIpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHBsaW50Ll9DT05GSUdfSEVBREVSLCBGYWxz
ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIG90aGVyIGhlYWRlciBiZWZvcmUg
YSBoZWFkZXIgdGhpcyBmaWxlIGltcGxlbWVudHMuJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNwcGxpbnQuX09USEVSX0hFQURFUiwgRmFsc2UpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBoZWFkZXIgdGhpcyBmaWxlIGltcGxlbWVudHMgYWZ0
ZXIgb3RoZXIgaGVhZGVyLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRl
X3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjcHBsaW50Ll9MSUtFTFlfTVlfSEVBREVSLCBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9j
aGVja19hbHBhYmV0aWNhbF9pbmNsdWRlX29yZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImEuaCJcbicKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjLmgiXG4nCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYi5oIlxuJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBzb3J0aW5nIHByb2Js
ZW0uICBbYnVpbGQvaW5jbHVkZV9vcmRlcl0gWzRdJykKKworICAgICAgICBzZWxmLmFzc2VydF9s
YW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnI2luY2x1ZGUgImEuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJiLmgiXG4nCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYy5oIlxuJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCiAKLSAgICBkZWYgdGVzdF9jaGVja19uZXh0
X2luY2x1ZGVfb3JkZXJfX2NwcF90aGVuX3Bvc3NpYmxlKHNlbGYpOgotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCcnLCBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVy
KAotICAgICAgICAgICAgY3BwbGludC5fQ1BQX1NZU19IRUFERVIpKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCcnLCBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVy
KAotICAgICAgICAgICAgY3BwbGludC5fUE9TU0lCTEVfTVlfSEVBREVSKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5oJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlIDxhc3NlcnQuaD5cbicKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJiYXIuaCJcbicsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBbHBoYWJldGljYWwgc29y
dGluZyBwcm9ibGVtLiAgW2J1aWxkL2luY2x1ZGVfb3JkZXJdIFs0XScpCisKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5oJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJiYXIuaCJcbicKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlIDxhc3NlcnQuaD5cbicsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQorCisgICAgZGVmIHRl
c3RfY2hlY2tfbGluZV9icmVha19hZnRlcl9vd25faGVhZGVyKHNlbGYpOgorICAgICAgICBzZWxm
LmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNwcCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiY29uZmlnLmgiXG4nCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiZm9vLmgiXG4nCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYmFyLmgi
XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWW91IHNob3Vs
ZCBhZGQgYSBibGFuayBsaW5lIGFmdGVyIGltcGxlbWVudGF0aW9uIGZpbGVcJ3Mgb3duIGhlYWRl
ci4gIFtidWlsZC9pbmNsdWRlX29yZGVyXSBbNF0nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xh
bmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJmb28uaCJcbicKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImJhci5oIlxuJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCiAKICAgICBkZWYgdGVzdF9jbGFzc2lmeV9p
bmNsdWRlKHNlbGYpOgogICAgICAgICBmaWxlX2luZm8gPSBjcHBsaW50LkZpbGVJbmZvCiAgICAg
ICAgIGNsYXNzaWZ5X2luY2x1ZGUgPSBjcHBsaW50Ll9jbGFzc2lmeV9pbmNsdWRlCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoY3BwbGludC5fQ19TWVNfSEVBREVSLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoZmlsZV9pbmZvKCdmb28vZm9vLmNjJyksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RkaW8uaCcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChjcHBsaW50Ll9DUFBfU1lTX0hFQURFUiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzc2lmeV9pbmNsdWRlKGZpbGVfaW5mbygnZm9vL2Zvby5jYycpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChjcHBsaW50Ll9DUFBfU1lTX0hFQURFUiwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChj
cHBsaW50Ll9DT05GSUdfSEVBREVSLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5
X2luY2x1ZGUoZmlsZV9pbmZvKCdmb28vZm9vLmNjJyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAndHlwZWluZm8nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVHJ1ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BwbGlu
dC5fT1RIRVJfSEVBREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1
ZGUoZmlsZV9pbmZvKCdmb28vZm9vLmNjJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnc3RyaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdjb25maWcuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGYWxzZSkpCi0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9MSUtF
TFlfTVlfSEVBREVSLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUo
ZmlsZV9pbmZvKCdmb28vZm9vLmNjJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnZm9vL2Zvby1pbmwuaCcsCkBAIC0yMTI4LDcgKzIxNDAsNyBAQCBjbGFzcyBP
cmRlck9mSW5jbHVkZXNUZXN0KENwcGxpbnRUZXN0QmFzZSk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3NpZnlfaW5jbHVkZShmaWxlX2luZm8oJ2Zvby9pbnRlcm5hbC9mb28uY2MnKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vcHVibGljL2Zv
by5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9QT1NTSUJMRV9NWV9IRUFERVIsCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BwbGludC5fTElLRUxZX01ZX0hFQURFUiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKGZpbGVfaW5mbygnZm9vL2ludGVy
bmFsL2Zvby5jYycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2Zvby9vdGhlci9wdWJsaWMvZm9vLmgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmFsc2UpKQpAQCAtMjEzNiw2ICsyMTQ4LDEwIEBAIGNsYXNzIE9yZGVyT2ZJ
bmNsdWRlc1Rlc3QoQ3BwbGludFRlc3RCYXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzc2lmeV9pbmNsdWRlKGZpbGVfaW5mbygnZm9vL2ludGVybmFsL2Zvby5jYycpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvby9vdGhlci9wdWJsaWMvZm9v
cC5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9PVEhFUl9IRUFERVIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZShmaWxlX2luZm8oJ2Zvby9mb28uY2Mn
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkpCiAKICAgICBk
ZWYgdGVzdF90cnlfZHJvcF9jb21tb25fc3VmZml4ZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ2Zvby9mb28nLCBjcHBsaW50Ll9kcm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Zv
by1pbmwuaCcpKQpAQCAtMjE0OCw3NyArMjE2NCw4IEBAIGNsYXNzIE9yZGVyT2ZJbmNsdWRlc1Rl
c3QoQ3BwbGludFRlc3RCYXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICBjcHBsaW50Ll9k
cm9wX2NvbW1vbl9zdWZmaXhlcygnX3Rlc3QuY2MnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgndGVzdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwbGludC5fZHJvcF9jb21tb25f
c3VmZml4ZXMoJ3Rlc3QuY2MnKSkKLQotICAgIGRlZiB0ZXN0X3JlZ3Jlc3Npb24oc2VsZik6Ci0g
ICAgICAgIGRlZiBmb3JtYXQoaW5jbHVkZXMpOgotICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4o
WycjaW5jbHVkZSAlc1xuJyAlIGluY2x1ZGUgZm9yIGluY2x1ZGUgaW4gaW5jbHVkZXNdKQotCi0g
ICAgICAgICMgVGVzdCBzaW5nbGV0b24gY2FzZXMgZmlyc3QuCi0gICAgICAgIHNlbGYuYXNzZXJ0
X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28vZm9vLmNjJywgZm9ybWF0KFsnImZvby9mb28uaCIn
XSksICcnKQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zv
by5jYycsIGZvcm1hdChbJzxzdGRpby5oPiddKSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xh
bmd1YWdlX3J1bGVzX2NoZWNrKCdmb28vZm9vLmNjJywgZm9ybWF0KFsnPHN0cmluZz4nXSksICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zvby5jYycs
IGZvcm1hdChbJyJmb28vZm9vLWlubC5oIiddKSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xh
bmd1YWdlX3J1bGVzX2NoZWNrKCdmb28vZm9vLmNjJywgZm9ybWF0KFsnImJhci9iYXItaW5sLmgi
J10pLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby9m
b28uY2MnLCBmb3JtYXQoWyciYmFyL2Jhci5oIiddKSwgJycpCi0KLSAgICAgICAgIyBUZXN0IGV2
ZXJ5dGhpbmcgaW4gYSBnb29kIGFuZCBuZXcgb3JkZXIuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xh
bmd1YWdlX3J1bGVzX2NoZWNrKCdmb28vZm9vLmNjJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9ybWF0KFsnImZvby9mb28uaCInLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciZm9vL2Zvby1pbmwuaCInLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3RkaW8uaD4n
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3Ry
aW5nPicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyJiYXIvYmFyLWlubC5oIicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJyJiYXIvYmFyLmgiJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnJykKLSAgICAgICAgIyBUZXN0IGV2ZXJ5dGhpbmcgaW4gYSBnb29kIGJ1
dCBzbGlnaHRseSBkZXByZWNhdGVkIG9yZGVyLgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFn
ZV9ydWxlc19jaGVjaygnZm9vL2Zvby5jYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdChbJyJmb28vZm9vLmgiJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0ZGlvLmg+JywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciZm9vL2Zvby1pbmwuaCIn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciYmFy
L2Jhci1pbmwuaCInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICciYmFyL2Jhci5oIiddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJycpCi0gICAgICAgICMgVGVzdCBldmVyeXRoaW5nIGluIGEgZ29vZCBidXQgZGVw
cmVjYXRlZCBvcmRlci4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2so
J2Zvby9mb28uY2MnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JtYXQoWyc8c3RkaW8uaD4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICc8c3RyaW5nPicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJyJmb28vZm9vLWlubC5oIicsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyJiYXIvYmFyLWlubC5oIicsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyJmb28vZm9vLmgiJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnImJhci9i
YXIuaCInXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQot
Ci0gICAgICAgICMgVGVzdCBiYWQgb3JkZXJzLgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFn
ZV9ydWxlc19jaGVjaygKLSAgICAgICAgICAgICdmb28vZm9vLmNjJywKLSAgICAgICAgICAgIGZv
cm1hdChbJzxzdHJpbmc+JywgJzxzdGRpby5oPiddKSwKLSAgICAgICAgICAgICdGb3VuZCBDIHN5
c3RlbSBoZWFkZXIgYWZ0ZXIgQysrIHN5c3RlbSBoZWFkZXIuJwotICAgICAgICAgICAgJyBTaG91
bGQgYmU6IGZvby5oLCBjIHN5c3RlbSwgYysrIHN5c3RlbSwgb3RoZXIuJwotICAgICAgICAgICAg
JyAgW2J1aWxkL2luY2x1ZGVfb3JkZXJdIFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1
YWdlX3J1bGVzX2NoZWNrKAotICAgICAgICAgICAgJ2Zvby9mb28uY2MnLAotICAgICAgICAgICAg
Zm9ybWF0KFsnImZvby9iYXItaW5sLmgiJywKLSAgICAgICAgICAgICAgICAgICAgJyJmb28vZm9v
LWlubC5oIiddKSwKLSAgICAgICAgICAgICcnKQotICAgICAgICAjIC1pbmwuaCBoZWFkZXJzIGFy
ZSBubyBsb25nZXIgc3BlY2lhbC4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNf
Y2hlY2soJ2Zvby9mb28uY2MnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3JtYXQoWyciZm9vL2Zvby1pbmwuaCInLCAnPHN0cmluZz4nXSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9s
YW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zvby5jYycsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcm1hdChbJyJmb28vYmFyLmgiJywgJyJmb28vYmFyLWlubC5o
IiddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCi0gICAg
ICAgICMgVGVzdCBjb21wb25lbnRpemVkIGhlYWRlci4gIE9LIHRvIGhhdmUgbXkgaGVhZGVyIGlu
IC4uL3B1YmxpYyBkaXIuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNr
KCdmb28vaW50ZXJuYWwvZm9vLmNjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9ybWF0KFsnImZvby9wdWJsaWMvZm9vLmgiJywgJzxzdHJpbmc+J10pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAgICAgIyBPSyB0
byBoYXZlIG15IGhlYWRlciBpbiBvdGhlciBkaXIgKG5vdCBzdHlsaXN0aWNhbGx5LCBidXQKLSAg
ICAgICAgIyBjcHBsaW50IGlzbid0IGFzIGdvb2QgYXMgYSBodW1hbikuCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28vaW50ZXJuYWwvZm9vLmNjJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KFsnImZvby9vdGhlci9w
dWJsaWMvZm9vLmgiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnPHN0cmluZz4nXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcnKQotCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3Rlc3QnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGNwcGxpbnQuX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCd0ZXN0LmNwcCcp
KQogCiBjbGFzcyBDaGVja0ZvckZ1bmN0aW9uTGVuZ3Roc1Rlc3QoQ3BwbGludFRlc3RCYXNlKToK
ICAgICBkZWYgc2V0VXAoc2VsZik6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33175</attachid>
            <date>2009-07-21 07:00:06 -0700</date>
            <delta_ts>2009-07-21 10:50:20 -0700</delta_ts>
            <desc>New version incorporating comments</desc>
            <filename>27462.patch</filename>
            <type>text/plain</type>
            <size>32177</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA4MTQwZDhkLi4xMDYwMTYzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMDct
MjAgIEFkYW0gVHJlYXQgIDxhZGFtLnRyZWF0QHRvcmNobW9iaWxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgY3BwbGludCBjaGVjayBm
b3IgcHJvcGVyIGluY2x1ZGUgb3JkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI3NDYyCisKKyAgICAgICAgQWRkIGEgbmV3IGNoZWNrIHRvIGNwcGxp
bnQgdG8gZmxhZyBjYXNlcyB3aGVyZSB0aGUgaW5jbHVkZSBzZWN0aW9uIG9mIGEgZmlsZQorICAg
ICAgICBkb2VzIG5vdCBtYXRjaCB0aGUgbWFuZGF0ZWQgaW5jbHVkZSBvcmRlciBhbmQgc3R5bGUg
b2YgdGhlIFdlYmtpdCBjb2Rpbmcgc3R5bGUKKyAgICAgICAgZ3VpZGVsaW5lcy4KKworICAgICAg
ICBBZGQgYXNzb2NpYXRlZCB0ZXN0cy4KKworICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jcHBs
aW50LnB5OgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jcHBsaW50X3VuaXR0ZXN0LnB5Ogor
CiAyMDA5LTA3LTIwICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4K
IAogICAgICAgICBObyByZXZpZXcsIGp1c3QgYWRkaW5nIEdhdmluIEJhcnJhY2xvdWdoIGFzIHJl
dmlld2VyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnQu
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludC5weQppbmRleCA4OTk3NDQ0
Li4yOGQ0OTU0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGlu
dC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludC5weQpAQCAtMjMy
LDExICsyMzIsOSBAQCBmb3Igb3AsIGludl9yZXBsYWNlbWVudCBpbiBbKCc9PScsICdORScpLCAo
JyE9JywgJ0VRJyksCiAKICMgVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0eXBlcyBvZiBoZWFkZXJz
IGZvciB1c2Ugd2l0aAogIyBfSW5jbHVkZVN0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigp
LgotX0NfU1lTX0hFQURFUiA9IDEKLV9DUFBfU1lTX0hFQURFUiA9IDIKLV9MSUtFTFlfTVlfSEVB
REVSID0gMwotX1BPU1NJQkxFX01ZX0hFQURFUiA9IDQKLV9PVEhFUl9IRUFERVIgPSA1CitfQ09O
RklHX0hFQURFUiA9IDAKK19QUklNQVJZX0hFQURFUiA9IDEKK19PVEhFUl9IRUFERVIgPSAyCiAK
IAogX3JlZ2V4cF9jb21waWxlX2NhY2hlID0ge30KQEAgLTI3MywzMSArMjcxLDI3IEBAIGNsYXNz
IF9JbmNsdWRlU3RhdGUoZGljdCk6CiAgICAgIyBzZWxmLl9zZWN0aW9uIHdpbGwgbW92ZSBtb25v
dG9uaWNhbGx5IHRocm91Z2ggdGhpcyBzZXQuIElmIGl0IGV2ZXIKICAgICAjIG5lZWRzIHRvIG1v
dmUgYmFja3dhcmRzLCBjaGVja19uZXh0X2luY2x1ZGVfb3JkZXIgd2lsbCByYWlzZSBhbiBlcnJv
ci4KICAgICBfSU5JVElBTF9TRUNUSU9OID0gMAotICAgIF9NWV9IX1NFQ1RJT04gPSAxCi0gICAg
X0NfU0VDVElPTiA9IDIKLSAgICBfQ1BQX1NFQ1RJT04gPSAzCi0gICAgX09USEVSX0hfU0VDVElP
TiA9IDQKKyAgICBfQ09ORklHX1NFQ1RJT04gPSAxCisgICAgX1BSSU1BUllfU0VDVElPTiA9IDIK
KyAgICBfT1RIRVJfU0VDVElPTiA9IDMKIAogICAgIF9UWVBFX05BTUVTID0gewotICAgICAgICBf
Q19TWVNfSEVBREVSOiAnQyBzeXN0ZW0gaGVhZGVyJywKLSAgICAgICAgX0NQUF9TWVNfSEVBREVS
OiAnQysrIHN5c3RlbSBoZWFkZXInLAotICAgICAgICBfTElLRUxZX01ZX0hFQURFUjogJ2hlYWRl
ciB0aGlzIGZpbGUgaW1wbGVtZW50cycsCi0gICAgICAgIF9QT1NTSUJMRV9NWV9IRUFERVI6ICdo
ZWFkZXIgdGhpcyBmaWxlIG1heSBpbXBsZW1lbnQnLAorICAgICAgICBfQ09ORklHX0hFQURFUjog
J1dlYkNvcmUgY29uZmlnLmgnLAorICAgICAgICBfUFJJTUFSWV9IRUFERVI6ICdoZWFkZXIgdGhp
cyBmaWxlIGltcGxlbWVudHMnLAogICAgICAgICBfT1RIRVJfSEVBREVSOiAnb3RoZXIgaGVhZGVy
JywKICAgICAgICAgfQogICAgIF9TRUNUSU9OX05BTUVTID0gewotICAgICAgICBfSU5JVElBTF9T
RUNUSU9OOiAiLi4uIG5vdGhpbmcuIChUaGlzIGNhbid0IGJlIGFuIGVycm9yLikiLAotICAgICAg
ICBfTVlfSF9TRUNUSU9OOiAnYSBoZWFkZXIgdGhpcyBmaWxlIGltcGxlbWVudHMnLAotICAgICAg
ICBfQ19TRUNUSU9OOiAnQyBzeXN0ZW0gaGVhZGVyJywKLSAgICAgICAgX0NQUF9TRUNUSU9OOiAn
QysrIHN5c3RlbSBoZWFkZXInLAotICAgICAgICBfT1RIRVJfSF9TRUNUSU9OOiAnb3RoZXIgaGVh
ZGVyJywKKyAgICAgICAgX0lOSVRJQUxfU0VDVElPTjogIi4uLiBub3RoaW5nLiIsCisgICAgICAg
IF9DT05GSUdfU0VDVElPTjogIldlYkNvcmUgY29uZmlnLmguIiwKKyAgICAgICAgX1BSSU1BUllf
U0VDVElPTjogJ2EgaGVhZGVyIHRoaXMgZmlsZSBpbXBsZW1lbnRzLicsCisgICAgICAgIF9PVEhF
Ul9TRUNUSU9OOiAnb3RoZXIgaGVhZGVyLicsCiAgICAgICAgIH0KIAogICAgIGRlZiBfX2luaXRf
XyhzZWxmKToKICAgICAgICAgZGljdC5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLl9zZWN0
aW9uID0gc2VsZi5fSU5JVElBTF9TRUNUSU9OCiAKLSAgICBkZWYgY2hlY2tfbmV4dF9pbmNsdWRl
X29yZGVyKHNlbGYsIGhlYWRlcl90eXBlKToKKyAgICBkZWYgY2hlY2tfbmV4dF9pbmNsdWRlX29y
ZGVyKHNlbGYsIGhlYWRlcl90eXBlLCBmaWxlX2lzX2hlYWRlcik6CiAgICAgICAgICIiIlJldHVy
bnMgYSBub24tZW1wdHkgZXJyb3IgbWVzc2FnZSBpZiB0aGUgbmV4dCBoZWFkZXIgaXMgb3V0IG9m
IG9yZGVyLgogCiAgICAgICAgIFRoaXMgZnVuY3Rpb24gYWxzbyB1cGRhdGVzIHRoZSBpbnRlcm5h
bCBzdGF0ZSB0byBiZSByZWFkeSB0byBjaGVjawpAQCAtMzA1LDQ0ICsyOTksNDQgQEAgY2xhc3Mg
X0luY2x1ZGVTdGF0ZShkaWN0KToKIAogICAgICAgICBBcmdzOgogICAgICAgICAgIGhlYWRlcl90
eXBlOiBPbmUgb2YgdGhlIF9YWFhfSEVBREVSIGNvbnN0YW50cyBkZWZpbmVkIGFib3ZlLgorICAg
ICAgICAgIGZpbGVfaXNfaGVhZGVyOiBXaGV0aGVyIHRoZSBmaWxlIHRoYXQgb3ducyB0aGlzIF9J
bmNsdWRlU3RhdGUgaXMgaXRzZWxmIGEgaGVhZGVyCiAKICAgICAgICAgUmV0dXJuczoKICAgICAg
ICAgICBUaGUgZW1wdHkgc3RyaW5nIGlmIHRoZSBoZWFkZXIgaXMgaW4gdGhlIHJpZ2h0IG9yZGVy
LCBvciBhbgogICAgICAgICAgIGVycm9yIG1lc3NhZ2UgZGVzY3JpYmluZyB3aGF0J3Mgd3Jvbmcu
CiAKICAgICAgICAgIiIiCi0gICAgICAgICMgRklYTUU6IFRoaXMgaXNuJ3QgV2ViS2l0J3MgcnVs
ZS4gV2UgYXJlIGp1c3QgZGlzYWJsaW5nIHRoaXMgZm9yIG5vdy4KLSAgICAgICAgZXJyb3JfbWVz
c2FnZSA9ICgnRm91bmQgJXMgYWZ0ZXIgJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAo
c2VsZi5fVFlQRV9OQU1FU1toZWFkZXJfdHlwZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX1NFQ1RJT05fTkFNRVNbc2VsZi5fc2VjdGlvbl0pKQotCi0gICAgICAgIGlmIGhlYWRl
cl90eXBlID09IF9DX1NZU19IRUFERVI6Ci0gICAgICAgICAgICBpZiBzZWxmLl9zZWN0aW9uIDw9
IHNlbGYuX0NfU0VDVElPTjoKLSAgICAgICAgICAgICAgICBzZWxmLl9zZWN0aW9uID0gc2VsZi5f
Q19TRUNUSU9OCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cl9tZXNzYWdlCi0gICAgICAgIGVsaWYgaGVhZGVyX3R5cGUgPT0gX0NQUF9TWVNfSEVBREVSOgot
ICAgICAgICAgICAgaWYgc2VsZi5fc2VjdGlvbiA8PSBzZWxmLl9DUFBfU0VDVElPTjoKLSAgICAg
ICAgICAgICAgICBzZWxmLl9zZWN0aW9uID0gc2VsZi5fQ1BQX1NFQ1RJT04KLSAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yX21lc3NhZ2UKLSAgICAgICAgZWxp
ZiBoZWFkZXJfdHlwZSA9PSBfTElLRUxZX01ZX0hFQURFUjoKLSAgICAgICAgICAgIGlmIHNlbGYu
X3NlY3Rpb24gPD0gc2VsZi5fTVlfSF9TRUNUSU9OOgotICAgICAgICAgICAgICAgIHNlbGYuX3Nl
Y3Rpb24gPSBzZWxmLl9NWV9IX1NFQ1RJT04KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fc2VjdGlvbiA9IHNlbGYuX09USEVSX0hfU0VDVElPTgotICAgICAgICBlbGlm
IGhlYWRlcl90eXBlID09IF9QT1NTSUJMRV9NWV9IRUFERVI6Ci0gICAgICAgICAgICBpZiBzZWxm
Ll9zZWN0aW9uIDw9IHNlbGYuX01ZX0hfU0VDVElPTjoKLSAgICAgICAgICAgICAgICBzZWxmLl9z
ZWN0aW9uID0gc2VsZi5fTVlfSF9TRUNUSU9OCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgICMgVGhpcyB3aWxsIGFsd2F5cyBiZSB0aGUgZmFsbGJhY2sgYmVjYXVzZSB3ZSdyZSBu
b3Qgc3VyZQotICAgICAgICAgICAgICAgICMgZW5vdWdoIHRoYXQgdGhlIGhlYWRlciBpcyBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBmaWxlLgotICAgICAgICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBz
ZWxmLl9PVEhFUl9IX1NFQ1RJT04KKyAgICAgICAgaWYgaGVhZGVyX3R5cGUgPT0gX0NPTkZJR19I
RUFERVIgYW5kIGZpbGVfaXNfaGVhZGVyOgorICAgICAgICAgICAgcmV0dXJuICdIZWFkZXIgZmls
ZSBzaG91bGQgbm90IGNvbnRhaW4gV2ViQ29yZSBjb25maWcuaC4nCisgICAgICAgIGlmIGhlYWRl
cl90eXBlID09IF9QUklNQVJZX0hFQURFUiBhbmQgZmlsZV9pc19oZWFkZXI6CisgICAgICAgICAg
ICByZXR1cm4gJ0hlYWRlciBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHNlbGYuJworCisgICAg
ICAgIGVycm9yX21lc3NhZ2UgPSAnJworICAgICAgICBpZiBzZWxmLl9zZWN0aW9uICE9IHNlbGYu
X09USEVSX1NFQ1RJT046CisgICAgICAgICAgICBiZWZvcmVfZXJyb3JfbWVzc2FnZSA9ICgnRm91
bmQgJXMgYmVmb3JlICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c2VsZi5fVFlQRV9OQU1FU1toZWFkZXJfdHlwZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fU0VDVElPTl9OQU1FU1tzZWxmLl9zZWN0aW9uICsgMV0pKQorICAg
ICAgICBhZnRlcl9lcnJvcl9tZXNzYWdlID0gKCdGb3VuZCAlcyBhZnRlciAlcycgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fVFlQRV9OQU1FU1toZWFkZXJfdHlwZV0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9TRUNUSU9OX05BTUVTW3Nl
bGYuX3NlY3Rpb25dKSkKKworICAgICAgICBpZiBoZWFkZXJfdHlwZSA9PSBfQ09ORklHX0hFQURF
UjoKKyAgICAgICAgICAgIGlmIHNlbGYuX3NlY3Rpb24gPj0gc2VsZi5fQ09ORklHX1NFQ1RJT046
CisgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9IGFmdGVyX2Vycm9yX21lc3NhZ2UKKyAg
ICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBzZWxmLl9DT05GSUdfU0VDVElPTgorICAgICAgICBl
bGlmIGhlYWRlcl90eXBlID09IF9QUklNQVJZX0hFQURFUjoKKyAgICAgICAgICAgIGlmIHNlbGYu
X3NlY3Rpb24gPj0gc2VsZi5fUFJJTUFSWV9TRUNUSU9OOgorICAgICAgICAgICAgICAgIGVycm9y
X21lc3NhZ2UgPSBhZnRlcl9lcnJvcl9tZXNzYWdlCisgICAgICAgICAgICBlbGlmIHNlbGYuX3Nl
Y3Rpb24gPCBzZWxmLl9DT05GSUdfU0VDVElPTjoKKyAgICAgICAgICAgICAgICBlcnJvcl9tZXNz
YWdlID0gYmVmb3JlX2Vycm9yX21lc3NhZ2UKKyAgICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBz
ZWxmLl9QUklNQVJZX1NFQ1RJT04KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFzc2VydCBo
ZWFkZXJfdHlwZSA9PSBfT1RIRVJfSEVBREVSCi0gICAgICAgICAgICBzZWxmLl9zZWN0aW9uID0g
c2VsZi5fT1RIRVJfSF9TRUNUSU9OCisgICAgICAgICAgICBpZiBub3QgZmlsZV9pc19oZWFkZXIg
YW5kIHNlbGYuX3NlY3Rpb24gPCBzZWxmLl9QUklNQVJZX1NFQ1RJT046CisgICAgICAgICAgICAg
ICAgZXJyb3JfbWVzc2FnZSA9IGJlZm9yZV9lcnJvcl9tZXNzYWdlCisgICAgICAgICAgICBzZWxm
Ll9zZWN0aW9uID0gc2VsZi5fT1RIRVJfU0VDVElPTgogCi0gICAgICAgIHJldHVybiAnJworICAg
ICAgICByZXR1cm4gZXJyb3JfbWVzc2FnZQogCiAKIGNsYXNzIF9DcHBMaW50U3RhdGUob2JqZWN0
KToKQEAgLTE5NzIsMTEgKzE5NjYsMTEgQEAgZGVmIF9pc190ZXN0X2ZpbGVuYW1lKGZpbGVuYW1l
KToKICAgICByZXR1cm4gRmFsc2UKIAogCi1kZWYgX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZWluZm8s
IGluY2x1ZGUsIGlzX3N5c3RlbSk6CitkZWYgX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZW5hbWUsIGlu
Y2x1ZGUsIGlzX3N5c3RlbSk6CiAgICAgIiIiRmlndXJlcyBvdXQgd2hhdCBraW5kIG9mIGhlYWRl
ciAnaW5jbHVkZScgaXMuCiAKICAgICBBcmdzOgotICAgICAgZmlsZWluZm86IFRoZSBjdXJyZW50
IGZpbGUgY3BwbGludCBpcyBydW5uaW5nIG92ZXIuIEEgRmlsZUluZm8gaW5zdGFuY2UuCisgICAg
ICBmaWxlbmFtZTogVGhlIGN1cnJlbnQgZmlsZSBjcHBsaW50IGlzIHJ1bm5pbmcgb3Zlci4KICAg
ICAgIGluY2x1ZGU6IFRoZSBwYXRoIHRvIGEgI2luY2x1ZGVkIGZpbGUuCiAgICAgICBpc19zeXN0
ZW06IFRydWUgaWYgdGhlICNpbmNsdWRlIHVzZWQgPD4gcmF0aGVyIHRoYW4gIiIuCiAKQEAgLTE5
ODQsNDggKzE5NzgsMjggQEAgZGVmIF9jbGFzc2lmeV9pbmNsdWRlKGZpbGVpbmZvLCBpbmNsdWRl
LCBpc19zeXN0ZW0pOgogICAgICAgT25lIG9mIHRoZSBfWFhYX0hFQURFUiBjb25zdGFudHMuCiAK
ICAgICBGb3IgZXhhbXBsZToKLSAgICAgID4+PiBfY2xhc3NpZnlfaW5jbHVkZShGaWxlSW5mbygn
Zm9vL2Zvby5jYycpLCAnc3RkaW8uaCcsIFRydWUpCi0gICAgICBfQ19TWVNfSEVBREVSCi0gICAg
ICA+Pj4gX2NsYXNzaWZ5X2luY2x1ZGUoRmlsZUluZm8oJ2Zvby9mb28uY2MnKSwgJ3N0cmluZycs
IFRydWUpCi0gICAgICBfQ1BQX1NZU19IRUFERVIKLSAgICAgID4+PiBfY2xhc3NpZnlfaW5jbHVk
ZShGaWxlSW5mbygnZm9vL2Zvby5jYycpLCAnZm9vL2Zvby5oJywgRmFsc2UpCi0gICAgICBfTElL
RUxZX01ZX0hFQURFUgotICAgICAgPj4+IF9jbGFzc2lmeV9pbmNsdWRlKEZpbGVJbmZvKCdmb28v
Zm9vX3Vua25vd25fZXh0ZW5zaW9uLmNjJyksCi0gICAgICAuLi4gICAgICAgICAgICAgICAgICAn
YmFyL2Zvb19vdGhlcl9leHQuaCcsIEZhbHNlKQotICAgICAgX1BPU1NJQkxFX01ZX0hFQURFUgot
ICAgICAgPj4+IF9jbGFzc2lmeV9pbmNsdWRlKEZpbGVJbmZvKCdmb28vZm9vLmNjJyksICdmb28v
YmFyLmgnLCBGYWxzZSkKKyAgICAgID4+PiBfY2xhc3NpZnlfaW5jbHVkZSgnZm9vLmNwcCcsICdj
b25maWcuaCcsIEZhbHNlKQorICAgICAgX0NPTkZJR19IRUFERVIKKyAgICAgID4+PiBfY2xhc3Np
ZnlfaW5jbHVkZSgnZm9vLmNwcCcsICdmb28uaCcsIEZhbHNlKQorICAgICAgX1BSSU1BUllfSEVB
REVSCisgICAgICA+Pj4gX2NsYXNzaWZ5X2luY2x1ZGUoJ2Zvby5jcHAnLCAnYmFyLmgnLCBGYWxz
ZSkKICAgICAgIF9PVEhFUl9IRUFERVIKICAgICAiIiIKLSAgICAjIFRoaXMgaXMgYSBsaXN0IG9m
IGFsbCBzdGFuZGFyZCBjKysgaGVhZGVyIGZpbGVzLCBleGNlcHQKLSAgICAjIHRob3NlIGFscmVh
ZHkgY2hlY2tlZCBmb3IgYWJvdmUuCi0gICAgaXNfc3RsX2ggPSBpbmNsdWRlIGluIF9TVExfSEVB
REVSUwotICAgIGlzX2NwcF9oID0gaXNfc3RsX2ggb3IgaW5jbHVkZSBpbiBfQ1BQX0hFQURFUlMK
IAorICAgICMgSWYgaXQgaXMgYSBzeXN0ZW0gaGVhZGVyIHdlIGtub3cgaXQgaXMgY2xhc3NpZmll
ZCBhcyBfT1RIRVJfSEVBREVSLgogICAgIGlmIGlzX3N5c3RlbToKLSAgICAgICAgaWYgaXNfY3Bw
X2g6Ci0gICAgICAgICAgICByZXR1cm4gX0NQUF9TWVNfSEVBREVSCi0gICAgICAgIHJldHVybiBf
Q19TWVNfSEVBREVSCisgICAgICAgIHJldHVybiBfT1RIRVJfSEVBREVSCisKKyAgICAjIElmIHRo
ZSBpbmNsdWRlIGlzIG5hbWVkIGNvbmZpZy5oIHRoZW4gdGhpcyBpcyBXZWJDb3JlL2NvbmZpZy5o
LgorICAgIGlmIGluY2x1ZGUgPT0gImNvbmZpZy5oIjoKKyAgICAgICAgcmV0dXJuIF9DT05GSUdf
SEVBREVSCiAKICAgICAjIElmIHRoZSB0YXJnZXQgZmlsZSBhbmQgdGhlIGluY2x1ZGUgd2UncmUg
Y2hlY2tpbmcgc2hhcmUgYQotICAgICMgYmFzZW5hbWUgd2hlbiB3ZSBkcm9wIGNvbW1vbiBleHRl
bnNpb25zLCBhbmQgdGhlIGluY2x1ZGUKLSAgICAjIGxpdmVzIGluIC4gLCB0aGVuIGl0J3MgbGlr
ZWx5IHRvIGJlIG93bmVkIGJ5IHRoZSB0YXJnZXQgZmlsZS4KLSAgICB0YXJnZXRfZGlyLCB0YXJn
ZXRfYmFzZSA9ICgKLSAgICAgICAgb3MucGF0aC5zcGxpdChfZHJvcF9jb21tb25fc3VmZml4ZXMo
ZmlsZWluZm8ucmVwb3NpdG9yeV9uYW1lKCkpKSkKLSAgICBpbmNsdWRlX2RpciwgaW5jbHVkZV9i
YXNlID0gb3MucGF0aC5zcGxpdChfZHJvcF9jb21tb25fc3VmZml4ZXMoaW5jbHVkZSkpCi0gICAg
aWYgKHRhcmdldF9iYXNlID09IGluY2x1ZGVfYmFzZQotICAgICAgICBhbmQgKGluY2x1ZGVfZGly
ID09IHRhcmdldF9kaXIKLSAgICAgICAgICAgICBvciBpbmNsdWRlX2RpciA9PSBvcy5wYXRoLm5v
cm1wYXRoKHRhcmdldF9kaXIgKyAnLy4uL3B1YmxpYycpKSk6Ci0gICAgICAgIHJldHVybiBfTElL
RUxZX01ZX0hFQURFUgotCi0gICAgIyBJZiB0aGUgdGFyZ2V0IGFuZCBpbmNsdWRlIHNoYXJlIHNv
bWUgaW5pdGlhbCBiYXNlbmFtZQotICAgICMgY29tcG9uZW50LCBpdCdzIHBvc3NpYmxlIHRoZSB0
YXJnZXQgaXMgaW1wbGVtZW50aW5nIHRoZQotICAgICMgaW5jbHVkZSwgc28gaXQncyBhbGxvd2Vk
IHRvIGJlIGZpcnN0LCBidXQgd2UnbGwgbmV2ZXIKLSAgICAjIGNvbXBsYWluIGlmIGl0J3Mgbm90
IHRoZXJlLgotICAgIHRhcmdldF9maXJzdF9jb21wb25lbnQgPSBfUkVfRklSU1RfQ09NUE9ORU5U
Lm1hdGNoKHRhcmdldF9iYXNlKQotICAgIGluY2x1ZGVfZmlyc3RfY29tcG9uZW50ID0gX1JFX0ZJ
UlNUX0NPTVBPTkVOVC5tYXRjaChpbmNsdWRlX2Jhc2UpCi0gICAgaWYgKHRhcmdldF9maXJzdF9j
b21wb25lbnQgYW5kIGluY2x1ZGVfZmlyc3RfY29tcG9uZW50Ci0gICAgICAgIGFuZCB0YXJnZXRf
Zmlyc3RfY29tcG9uZW50Lmdyb3VwKDApID09IGluY2x1ZGVfZmlyc3RfY29tcG9uZW50Lmdyb3Vw
KDApKToKLSAgICAgICAgcmV0dXJuIF9QT1NTSUJMRV9NWV9IRUFERVIKKyAgICAjIGJhc2VuYW1l
IHRoZW4gd2UgY29uc2lkZXIgaXQgdGhlIHByaW1hcnkgaGVhZGVyLgorICAgIHRhcmdldF9iYXNl
ID0gRmlsZUluZm8oZmlsZW5hbWUpLmJhc2VfbmFtZSgpCisgICAgaW5jbHVkZV9iYXNlID0gRmls
ZUluZm8oaW5jbHVkZSkuYmFzZV9uYW1lKCkKKyAgICBpZiB0YXJnZXRfYmFzZSA9PSBpbmNsdWRl
X2Jhc2U6CisgICAgICAgIHJldHVybiBfUFJJTUFSWV9IRUFERVIKIAogICAgIHJldHVybiBfT1RI
RVJfSEVBREVSCiAKQEAgLTIwNDUsMTUgKzIwMTksOSBAQCBkZWYgY2hlY2tfaW5jbHVkZV9saW5l
KGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGluY2x1ZGVfc3RhdGUsIGVycm9y
KQogICAgICAgaW5jbHVkZV9zdGF0ZTogQW4gX0luY2x1ZGVTdGF0ZSBpbnN0YW5jZSBpbiB3aGlj
aCB0aGUgaGVhZGVycyBhcmUgaW5zZXJ0ZWQuCiAgICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRv
IGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgogICAgICIiIgotICAgIGZpbGVpbmZvID0gRmls
ZUluZm8oZmlsZW5hbWUpCiAKICAgICBsaW5lID0gY2xlYW5fbGluZXMubGluZXNbbGluZV9udW1i
ZXJdCiAKLSAgICAjIyAiaW5jbHVkZSIgc2hvdWxkIHVzZSB0aGUgbmV3IHN0eWxlICJmb28vYmFy
LmgiIGluc3RlYWQgb2YganVzdCAiYmFyLmgiCi0gICAgI2lmIF9SRV9QQVRURVJOX0lOQ0xVREVf
TkVXX1NUWUxFLnNlYXJjaChsaW5lKToKLSAgICAjICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1i
ZXIsICdidWlsZC9pbmNsdWRlJywgNCwKLSAgICAjICAgICAgICAnSW5jbHVkZSB0aGUgZGlyZWN0
b3J5IHdoZW4gbmFtaW5nIC5oIGZpbGVzJykKLQogICAgICMgd2Ugc2hvdWxkbid0IGluY2x1ZGUg
YSBmaWxlIG1vcmUgdGhhbiBvbmNlLiBhY3R1YWxseSwgdGhlcmUgYXJlIGEKICAgICAjIGhhbmRm
dWwgb2YgaW5zdGFuY2VzIHdoZXJlIGRvaW5nIHNvIGlzIG9rYXksIGJ1dCBpbiBnZW5lcmFsIGl0
J3MKICAgICAjIG5vdC4KQEAgLTIwNjksMjIgKzIwMzcsNDkgQEAgZGVmIGNoZWNrX2luY2x1ZGVf
bGluZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBpbmNsdWRlX3N0YXRlLCBl
cnJvcikKICAgICAgICAgICAgIGluY2x1ZGVfc3RhdGVbaW5jbHVkZV0gPSBsaW5lX251bWJlcgog
CiAgICAgICAgICAgICAjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgaGVhZGVycyBhcHBlYXIgaW4g
dGhlIHJpZ2h0IG9yZGVyOgotICAgICAgICAgICAgIyAxKSBmb3IgZm9vLmNjLCBmb28uaCAgKHBy
ZWZlcnJlZCBsb2NhdGlvbikKLSAgICAgICAgICAgICMgMikgYyBzeXN0ZW0gZmlsZXMKLSAgICAg
ICAgICAgICMgMykgY3BwIHN5c3RlbSBmaWxlcwotICAgICAgICAgICAgIyA0KSBmb3IgZm9vLmNj
LCBmb28uaCAgKGRlcHJlY2F0ZWQgbG9jYXRpb24pCi0gICAgICAgICAgICAjIDUpIG90aGVyIGdv
b2dsZSBoZWFkZXJzCisgICAgICAgICAgICAjIDEpIGZvciBpbXBsZW1lbnRhdGlvbiBmaWxlczog
Y29uZmlnLmgsIHByaW1hcnkgaGVhZGVyLCBibGFuayBsaW5lLCBhbHBoYWJldGljYWxseSBzb3J0
ZWQKKyAgICAgICAgICAgICMgMikgZm9yIGhlYWRlciBmaWxlczogYWxwaGFiZXRpY2FsbHkgc29y
dGVkCiAgICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFdlIGNsYXNzaWZ5IGVhY2ggaW5jbHVk
ZSBzdGF0ZW1lbnQgYXMgb25lIG9mIHRob3NlIDUgdHlwZXMKKyAgICAgICAgICAgICMgV2UgY2xh
c3NpZnkgZWFjaCBpbmNsdWRlIHN0YXRlbWVudCBhcyBvbmUgb2YgNCB0eXBlcwogICAgICAgICAg
ICAgIyB1c2luZyBhIG51bWJlciBvZiB0ZWNobmlxdWVzLiBUaGUgaW5jbHVkZV9zdGF0ZSBvYmpl
Y3Qga2VlcHMKICAgICAgICAgICAgICMgdHJhY2sgb2YgdGhlIGhpZ2hlc3QgdHlwZSBzZWVuLCBh
bmQgY29tcGxhaW5zIGlmIHdlIHNlZSBhCiAgICAgICAgICAgICAjIGxvd2VyIHR5cGUgYWZ0ZXIg
dGhhdC4KLSAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSBpbmNsdWRlX3N0YXRlLmNoZWNrX25l
eHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgICAgICBfY2xhc3NpZnlfaW5jbHVkZShmaWxl
aW5mbywgaW5jbHVkZSwgaXNfc3lzdGVtKSkKKyAgICAgICAgICAgIGhlYWRlcl90eXBlID0gX2Ns
YXNzaWZ5X2luY2x1ZGUoZmlsZW5hbWUsIGluY2x1ZGUsIGlzX3N5c3RlbSkKKyAgICAgICAgICAg
IGVycm9yX21lc3NhZ2UgPSBpbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlciho
ZWFkZXJfdHlwZSwgZmlsZW5hbWUuZW5kc3dpdGgoJy5oJykpCisKKyAgICAgICAgICAgICMgQ2hl
Y2sgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBibGFuayBsaW5lIGFmdGVyIHByaW1hcnkgaGVhZGVy
LgorICAgICAgICAgICAgaWYgbm90IGVycm9yX21lc3NhZ2UgYW5kIGhlYWRlcl90eXBlID09IF9Q
UklNQVJZX0hFQURFUjoKKyAgICAgICAgICAgICAgICAgbmV4dF9saW5lID0gY2xlYW5fbGluZXMu
cmF3X2xpbmVzW2xpbmVfbnVtYmVyICsgMV0KKyAgICAgICAgICAgICAgICAgaWYgbm90IGlzX2Js
YW5rX2xpbmUobmV4dF9saW5lKToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUs
IGxpbmVfbnVtYmVyLCAnYnVpbGQvaW5jbHVkZV9vcmRlcicsIDQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICdZb3Ugc2hvdWxkIGFkZCBhIGJsYW5rIGxpbmUgYWZ0ZXIgaW1wbGVtZW50YXRp
b24gZmlsZVwncyBvd24gaGVhZGVyLicpCisKKyAgICAgICAgICAgICMgQ2hlY2sgdG8gbWFrZSBz
dXJlIGFsbCBoZWFkZXJzIGJlc2lkZXMgY29uZmlnLmggYW5kIHRoZSBwcmltYXJ5IGhlYWRlciBh
cmUKKyAgICAgICAgICAgICMgYWxwaGFiZXRpY2FsbHkgc29ydGVkLgorICAgICAgICAgICAgaWYg
bm90IGVycm9yX21lc3NhZ2UgYW5kIGhlYWRlcl90eXBlID09IF9PVEhFUl9IRUFERVI6CisgICAg
ICAgICAgICAgICAgIHByZXZpb3VzX2xpbmVfbnVtYmVyID0gbGluZV9udW1iZXIgLSAxOworICAg
ICAgICAgICAgICAgICBwcmV2aW91c19saW5lID0gY2xlYW5fbGluZXMubGluZXNbcHJldmlvdXNf
bGluZV9udW1iZXJdCisgICAgICAgICAgICAgICAgIHByZXZpb3VzX21hdGNoID0gX1JFX1BBVFRF
Uk5fSU5DTFVERS5zZWFyY2gocHJldmlvdXNfbGluZSkKKyAgICAgICAgICAgICAgICAgd2hpbGUg
bm90IHByZXZpb3VzX21hdGNoIGFuZCBwcmV2aW91c19saW5lX251bWJlciA+IDA6CisgICAgICAg
ICAgICAgICAgICAgIHByZXZpb3VzX2xpbmVfbnVtYmVyIC09IDE7CisgICAgICAgICAgICAgICAg
ICAgIHByZXZpb3VzX2xpbmUgPSBjbGVhbl9saW5lcy5saW5lc1twcmV2aW91c19saW5lX251bWJl
cl0KKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfbWF0Y2ggPSBfUkVfUEFUVEVSTl9JTkNM
VURFLnNlYXJjaChwcmV2aW91c19saW5lKQorICAgICAgICAgICAgICAgICBpZiBwcmV2aW91c19t
YXRjaDoKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfaW5jbHVkZSA9IHByZXZpb3VzX21h
dGNoLmdyb3VwKDIpCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX2hlYWRlcl90eXBlID0g
X2NsYXNzaWZ5X2luY2x1ZGUoZmlsZW5hbWUsIHByZXZpb3VzX2luY2x1ZGUsIChwcmV2aW91c19t
YXRjaC5ncm91cCgxKSA9PSAnPCcpKQorICAgICAgICAgICAgICAgICAgICBpZiBwcmV2aW91c19o
ZWFkZXJfdHlwZSA9PSBfT1RIRVJfSEVBREVSIGFuZCBwcmV2aW91c19saW5lLnN0cmlwKCkgPiBs
aW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGlu
ZV9udW1iZXIsICdidWlsZC9pbmNsdWRlX29yZGVyJywgNCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdBbHBoYWJldGljYWwgc29ydGluZyBwcm9ibGVtLicpCisKICAgICAgICAgICAg
IGlmIGVycm9yX21lc3NhZ2U6Ci0gICAgICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVf
bnVtYmVyLCAnYnVpbGQvaW5jbHVkZV9vcmRlcicsIDQsCi0gICAgICAgICAgICAgICAgICAgICAg
JyVzLiBTaG91bGQgYmU6ICVzLmgsIGMgc3lzdGVtLCBjKysgc3lzdGVtLCBvdGhlci4nICUKLSAg
ICAgICAgICAgICAgICAgICAgICAoZXJyb3JfbWVzc2FnZSwgZmlsZWluZm8uYmFzZV9uYW1lKCkp
KQorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcuaCcpOgorICAgICAgICAg
ICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdidWlsZC9pbmNsdWRlX29y
ZGVyJywgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzIFNob3VsZCBiZTogYWxwaGFi
ZXRpY2FsbHkgc29ydGVkLicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3JfbWVz
c2FnZSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Io
ZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVpbGQvaW5jbHVkZV9vcmRlcicsIDQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICclcyBTaG91bGQgYmU6IGNvbmZpZy5oLCBwcmltYXJ5IGhlYWRl
ciwgYmxhbmsgbGluZSwgYW5kIHRoZW4gYWxwaGFiZXRpY2FsbHkgc29ydGVkLicgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZXJyb3JfbWVzc2FnZSkpCiAKICAgICAjIExvb2sgZm9yIGFu
eSBvZiB0aGUgc3RyZWFtIGNsYXNzZXMgdGhhdCBhcmUgcGFydCBvZiBzdGFuZGFyZCBDKysuCiAg
ICAgbWF0Y2hlZCA9IF9SRV9QQVRURVJOX0lOQ0xVREUubWF0Y2gobGluZSkKQEAgLTI4MTUsOCAr
MjgxMCw2IEBAIGRlZiB1c2Vfd2Via2l0X3N0eWxlcygpOgogICAgICAgICAnLXJlYWRhYmlsaXR5
L2JyYWNlcycsICAjIGludCBmb28oKSB7fTsKICAgICAgICAgJy1yZWFkYWJpbGl0eS9mbl9zaXpl
JywKICAgICAgICAgJy1idWlsZC9zdG9yYWdlX2NsYXNzJywgICMgY29uc3Qgc3RhdGljCi0gICAg
ICAgICctYnVpbGQvaW5jbHVkZV9vcmRlcicsCi0gICAgICAgICctYnVpbGQvaW5jbHVkZScsCiAg
ICAgICAgICctYnVpbGQvZW5kaWZfY29tbWVudCcsCiAgICAgICAgICctd2hpdGVzcGFjZS9sYWJl
bHMnLAogICAgICAgICAnLXJ1bnRpbWUvYXJyYXlzJywgICMgdmFyaWFibGUgbGVuZ3RoIGFycmF5
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludF91bml0dGVz
dC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBsaW50X3VuaXR0ZXN0LnB5Cmlu
ZGV4IGY2ZTQ4NzguLjFjZWNjOGIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9k
dWxlcy9jcHBsaW50X3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxl
cy9jcHBsaW50X3VuaXR0ZXN0LnB5CkBAIC00MjgsMTUgKzQyOCw2IEBAIGNsYXNzIENwcGxpbnRU
ZXN0KENwcGxpbnRUZXN0QmFzZSk6CiAgICAgICAgICAgICAnVXNpbmcgc2l6ZW9mKHR5cGUpLiAg
VXNlIHNpemVvZih2YXJuYW1lKSBpbnN0ZWFkIGlmIHBvc3NpYmxlJwogICAgICAgICAgICAgJyAg
W3J1bnRpbWUvc2l6ZW9mXSBbMV0nKQogCi0gICAgIyBUZXN0IGZhbHNlIGVycm9ycyB0aGF0IGhh
cHBlbmVkIHdpdGggc29tZSBpbmNsdWRlIGZpbGUgbmFtZXMKLSAgICBkZWYgdGVzdF9pbmNsdWRl
X2ZpbGVuYW1lX2ZhbHNlX2Vycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9saW50KAot
ICAgICAgICAgICAgJyNpbmNsdWRlICJmb28vbG9uZy1mb28uaCInLAotICAgICAgICAgICAgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnI2luY2x1ZGUgImZvby9z
cHJpbnRmLmgiJywKLSAgICAgICAgICAgICcnKQotCiAgICAgIyBUZXN0IHR5cGVkZWYgY2FzZXMu
ICBUaGVyZSB3YXMgYSBidWcgdGhhdCBjcHBsaW50IG1pc2lkZW50aWZpZWQKICAgICAjIHR5cGVk
ZWYgZm9yIHBvaW50ZXIgdG8gZnVuY3Rpb24gYXMgQy1zdHlsZSBjYXN0IGFuZCBwcm9kdWNlZAog
ICAgICMgZmFsc2UtcG9zaXRpdmUgZXJyb3IgbWVzc2FnZXMuCkBAIC01NzAsMTIgKzU2MSwxMiBA
QCBjbGFzcyBDcHBsaW50VGVzdChDcHBsaW50VGVzdEJhc2UpOgogICAgICAgICAgICAgJycnLAog
ICAgICAgICAgICAgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNl
KAotICAgICAgICAgICAgJycnI2luY2x1ZGUgPGFzc2VydC5oPgotICAgICAgICAgICAgICAgI2lu
Y2x1ZGUgPHN0cmluZz4KLSAgICAgICAgICAgICAgICNpbmNsdWRlIDx2ZWN0b3I+Ci0gICAgICAg
ICAgICAgICAjaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0gICAgICAgICAgICAgICAjaW5j
bHVkZSAiYmFzZS9wb3J0LmgiCi0gICAgICAgICAgICAgICB2ZWN0b3I8c3RyaW5nPiBoYWpvYTsn
JycsICcnKQorICAgICAgICAgICAgICcnJyNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKKyAg
ICAgICAgICAgICAgICAjaW5jbHVkZSAiYmFzZS9wb3J0LmgiCisgICAgICAgICAgICAgICAgI2lu
Y2x1ZGUgPGFzc2VydC5oPgorICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdHJpbmc+CisgICAg
ICAgICAgICAgICAgI2luY2x1ZGUgPHZlY3Rvcj4KKyAgICAgICAgICAgICAgICB2ZWN0b3I8c3Ry
aW5nPiBoYWpvYTsnJycsICcnKQogICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91
X3VzZSgKICAgICAgICAgICAgICcnJyNpbmNsdWRlIDxzdHJpbmc+CiAgICAgICAgICAgICAgICBp
bnQgaSA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpCkBAIC01OTEsMzMgKzU4MiwyNyBAQCBj
bGFzcyBDcHBsaW50VGVzdChDcHBsaW50VGVzdEJhc2UpOgogICAgICAgICAjIFRlc3QgdGhlIFVw
ZGF0ZUluY2x1ZGVTdGF0ZSBjb2RlIHBhdGguCiAgICAgICAgIG1vY2tfaGVhZGVyX2NvbnRlbnRz
ID0gWycjaW5jbHVkZSAiYmxhaC9mb28uaCInLCAnI2luY2x1ZGUgImJsYWgvYmFyLmgiJ10KICAg
ICAgICAgbWVzc2FnZSA9IHNlbGYucGVyZm9ybV9pbmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAg
ICAgICAgICcjaW5jbHVkZSAiYmxhaC9hLmgiJywKKyAgICAgICAgICAgICcjaW5jbHVkZSAiY29u
ZmlnLmgiXG4nCisgICAgICAgICAgICAnI2luY2x1ZGUgImJsYWgvYS5oIlxuJywKICAgICAgICAg
ICAgIGZpbGVuYW1lPSdibGFoL2EuY2MnLAogICAgICAgICAgICAgaW89TW9ja0lvKG1vY2tfaGVh
ZGVyX2NvbnRlbnRzKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVzc2FnZSwgJycpCiAK
ICAgICAgICAgbW9ja19oZWFkZXJfY29udGVudHMgPSBbJyNpbmNsdWRlIDxzZXQ+J10KICAgICAg
ICAgbWVzc2FnZSA9IHNlbGYucGVyZm9ybV9pbmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAg
ICAgICcnJyNpbmNsdWRlICJibGFoL2EuaCIKKyAgICAgICAgICAgICcnJyNpbmNsdWRlICJjb25m
aWcuaCIKKyAgICAgICAgICAgICAgICNpbmNsdWRlICJibGFoL2EuaCIKKwogICAgICAgICAgICAg
ICAgc3RkOjpzZXQ8aW50PiBmb287JycnLAogICAgICAgICAgICAgZmlsZW5hbWU9J2JsYWgvYS5j
YycsCiAgICAgICAgICAgICBpbz1Nb2NrSW8obW9ja19oZWFkZXJfY29udGVudHMpKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhtZXNzYWdlLCAnJykKIAotICAgICAgICAjIE1ha2Ugc3VyZSB3
ZSBjYW4gZmluZCB0aGUgY29ycmVjdCBoZWFkZXIgZmlsZSBpZiB0aGUgY2MgZmlsZSBzZWVtcyB0
byBiZQotICAgICAgICAjIGEgdGVtcG9yYXJ5IGZpbGUgZ2VuZXJhdGVkIGJ5IEVtYWNzJ3MgZmx5
bWFrZS4KLSAgICAgICAgbW9ja19oZWFkZXJfY29udGVudHMgPSBbJyddCi0gICAgICAgIG1lc3Nh
Z2UgPSBzZWxmLnBlcmZvcm1faW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycj
aW5jbHVkZSAiYmxhaC9hLmgiCi0gICAgICAgICAgICAgICBzdGQ6OnNldDxpbnQ+IGZvbzsnJycs
Ci0gICAgICAgICAgICBmaWxlbmFtZT0nYmxhaC9hX2ZseW1ha2UuY2MnLAotICAgICAgICAgICAg
aW89TW9ja0lvKG1vY2tfaGVhZGVyX2NvbnRlbnRzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMobWVzc2FnZSwgJ0FkZCAjaW5jbHVkZSA8c2V0PiBmb3Igc2V0PD4gICcKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ1tidWlsZC9pbmNsdWRlX3doYXRfeW91X3VzZV0gWzRd
JykKLQogICAgICAgICAjIElmIHRoZXJlJ3MganVzdCBhIGNjIGFuZCB0aGUgaGVhZGVyIGNhbid0
IGJlIGZvdW5kIHRoZW4gaXQncyBvay4KICAgICAgICAgbWVzc2FnZSA9IHNlbGYucGVyZm9ybV9p
bmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlICJibGFoL2EuaCIK
KyAgICAgICAgICAgICcnJyNpbmNsdWRlICJjb25maWcuaCIKKyAgICAgICAgICAgICAgICNpbmNs
dWRlICJibGFoL2EuaCIKKwogICAgICAgICAgICAgICAgc3RkOjpzZXQ8aW50PiBmb287JycnLAog
ICAgICAgICAgICAgZmlsZW5hbWU9J2JsYWgvYS5jYycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKG1lc3NhZ2UsICcnKQpAQCAtNjI1LDcgKzYxMCw5IEBAIGNsYXNzIENwcGxpbnRUZXN0KENw
cGxpbnRUZXN0QmFzZSk6CiAgICAgICAgICMgTWFrZSBzdXJlIHdlIGZpbmQgdGhlIGhlYWRlcnMg
d2l0aCByZWxhdGl2ZSBwYXRocy4KICAgICAgICAgbW9ja19oZWFkZXJfY29udGVudHMgPSBbJydd
CiAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLnBlcmZvcm1faW5jbHVkZV93aGF0X3lvdV91c2UoCi0g
ICAgICAgICAgICAnJycjaW5jbHVkZSAiJXMvYS5oIgorICAgICAgICAgICAgJycnI2luY2x1ZGUg
ImNvbmZpZy5oIgorICAgICAgICAgICAgICAgI2luY2x1ZGUgIiVzL2EuaCIKKwogICAgICAgICAg
ICAgICAgc3RkOjpzZXQ8aW50PiBmb287JycnICUgb3MucGF0aC5iYXNlbmFtZShvcy5nZXRjd2Qo
KSksCiAgICAgICAgICAgICBmaWxlbmFtZT0nYS5jYycsCiAgICAgICAgICAgICBpbz1Nb2NrSW8o
bW9ja19oZWFkZXJfY29udGVudHMpKQpAQCAtODkxLDEzICs4NzgsNiBAQCBjbGFzcyBDcHBsaW50
VGVzdChDcHBsaW50VGVzdEJhc2UpOgogICAgICAgICAgICAgJyAgICBtZW1zZXQoYnVmLCAweGNk
LCAwKScsCiAgICAgICAgICAgICAnJykKIAotICAgIGRlZiB0ZXN0X2NoZWNrX2RlcHJlY2F0ZWQo
c2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY2Mn
LCAnI2luY2x1ZGUgPGlvc3RyZWFtPicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdTdHJlYW1zIGFyZSBoaWdobHkgZGlzY291cmFnZWQuJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvc3RyZWFtc10gWzNd
JykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvb190ZXN0LmNj
JywgJyNpbmNsdWRlIDxpb3N0cmVhbT4nLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3Vh
Z2VfcnVsZXNfY2hlY2soJ2Zvb191bml0dGVzdC5jYycsICcjaW5jbHVkZSA8aW9zdHJlYW0+Jywg
JycpCi0KICAgICBkZWYgdGVzdF9jaGVja19wb3NpeF90aHJlYWRpbmcoc2VsZik6CiAgICAgICAg
IHNlbGYuYXNzZXJ0X2xpbnQoJ3NjdGltZV9yKCknLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnc3RydG9rX3IoKScsICcnKQpAQCAtMjA2MSw4MSArMjA0MSwxMDEgQEAgY2xhc3MgT3Jk
ZXJPZkluY2x1ZGVzVGVzdChDcHBsaW50VGVzdEJhc2UpOgogICAgIGRlZiB0ZWFyRG93bihzZWxm
KToKICAgICAgICAgb3MucGF0aC5hYnNwYXRoID0gc2VsZi5vc19wYXRoX2Fic3BhdGhfb3JpZwog
Ci0gICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyX19vdGhlcl90aGVuX2NwcChz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5pbmNsdWRlX3N0YXRlLmNo
ZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxpbnQuX09USEVSX0hFQURF
UikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIEMrKyBzeXN0ZW0gaGVhZGVyIGFm
dGVyIG90aGVyIGhlYWRlcicsCisgICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVy
X19ub19jb25maWcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlYWRlciBmaWxl
IHNob3VsZCBub3QgY29udGFpbiBXZWJDb3JlIGNvbmZpZy5oLicsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwbGludC5fQ1BQX1NZU19IRUFERVIpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNwcGxpbnQuX0NPTkZJR19IRUFERVIsIFRydWUpKQog
Ci0gICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyX19jcHBfdGhlbl9jKHNlbGYp
OgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tf
bmV4dF9pbmNsdWRlX29yZGVyKAotICAgICAgICAgICAgY3BwbGludC5fQ1BQX1NZU19IRUFERVIp
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBDIHN5c3RlbSBoZWFkZXIgYWZ0ZXIg
QysrIHN5c3RlbSBoZWFkZXInLAorICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRl
cl9fbm9fc2VsZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVhZGVyIGZpbGUg
c2hvdWxkIG5vdCBjb250YWluIGl0c2VsZi4nLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNwcGxpbnQuX0NfU1lTX0hFQURFUikpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3BwbGludC5fUFJJTUFSWV9IRUFERVIsIFRydWUpKQogCi0gICAgZGVmIHRl
c3RfY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyX19saWtlbHlfdGhlbl9jcHAoc2VsZik6Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2lu
Y2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBjcHBsaW50Ll9MSUtFTFlfTVlfSEVBREVSKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRf
aW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxpbnQuX0NQUF9TWVNfSEVBREVSKSkKKyAg
ICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJfX2xpa2VseV90aGVuX2NvbmZpZyhz
ZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm91bmQgaGVhZGVyIHRoaXMgZmlsZSBp
bXBsZW1lbnRzIGJlZm9yZSBXZWJDb3JlIGNvbmZpZy5oLicsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjcHBsaW50Ll9QUklNQVJZX0hFQURFUiwgRmFsc2UpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBXZWJDb3JlIGNvbmZpZy5oIGFmdGVyIGEg
aGVhZGVyIHRoaXMgZmlsZSBpbXBsZW1lbnRzLicsCisgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcHBsaW50Ll9DT05GSUdfSEVBREVSLCBGYWxzZSkpCiAKLSAgICBk
ZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJfX3Bvc3NpYmxlX3RoZW5fY3BwKHNlbGYp
OgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tf
bmV4dF9pbmNsdWRlX29yZGVyKAotICAgICAgICAgICAgY3BwbGludC5fUE9TU0lCTEVfTVlfSEVB
REVSKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5pbmNsdWRlX3N0YXRlLmNo
ZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxpbnQuX0NQUF9TWVNfSEVB
REVSKSkKKyAgICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJfX290aGVyX3RoZW5f
Y29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBvdGhlciBoZWFk
ZXIgYmVmb3JlIFdlYkNvcmUgY29uZmlnLmguJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNwcGxpbnQuX09USEVSX0hFQURFUiwgRmFsc2UpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBXZWJDb3JlIGNvbmZpZy5oIGFmdGVyIG90aGVyIGhlYWRl
ci4nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19u
ZXh0X2luY2x1ZGVfb3JkZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwbGludC5f
Q09ORklHX0hFQURFUiwgRmFsc2UpKQogCi0gICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRl
X29yZGVyX19jcHBfdGhlbl9saWtlbHkoc2VsZik6CisgICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9p
bmNsdWRlX29yZGVyX19jb25maWdfdGhlbl9vdGhlcl90aGVuX2xpa2VseShzZWxmKToKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5j
bHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxpbnQuX0NQUF9TWVNfSEVBREVSKSkKLSAgICAg
ICAgIyBUaGlzIHdpbGwgZXZlbnR1YWxseSBmYWlsLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCcnLCBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAotICAgICAg
ICAgICAgY3BwbGludC5fTElLRUxZX01ZX0hFQURFUikpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNwcGxpbnQuX0NPTkZJR19IRUFERVIsIEZhbHNlKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnRm91bmQgb3RoZXIgaGVhZGVyIGJlZm9yZSBhIGhlYWRlciB0aGlzIGZpbGUg
aW1wbGVtZW50cy4nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0
ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3BwbGludC5fT1RIRVJfSEVBREVSLCBGYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J0ZvdW5kIGhlYWRlciB0aGlzIGZpbGUgaW1wbGVtZW50cyBhZnRlciBvdGhlciBoZWFkZXIuJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9p
bmNsdWRlX29yZGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwcGxpbnQuX1BSSU1B
UllfSEVBREVSLCBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9jaGVja19hbHBhYmV0aWNhbF9pbmNs
dWRlX29yZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVj
aygnZm9vLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lu
Y2x1ZGUgImEuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyNpbmNsdWRlICJjLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiYi5oIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ0FscGhhYmV0aWNhbCBzb3J0aW5nIHByb2JsZW0uICBbYnVpbGQvaW5jbHVkZV9v
cmRlcl0gWzRdJykKKworICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygn
Zm9vLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1
ZGUgImEuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNp
bmNsdWRlICJiLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcjaW5jbHVkZSAiYy5oIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJycpCiAKLSAgICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJfX2NwcF90
aGVuX3Bvc3NpYmxlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLmlu
Y2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAotICAgICAgICAgICAgY3BwbGlu
dC5fQ1BQX1NZU19IRUFERVIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLmlu
Y2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAotICAgICAgICAgICAgY3BwbGlu
dC5fUE9TU0lCTEVfTVlfSEVBREVSKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVs
ZXNfY2hlY2soJ2Zvby5oJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlIDxhc3NlcnQuaD5cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJyNpbmNsdWRlICJiYXIuaCJcbicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdBbHBoYWJldGljYWwgc29ydGluZyBwcm9ibGVtLiAgW2J1aWxk
L2luY2x1ZGVfb3JkZXJdIFs0XScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVs
ZXNfY2hlY2soJ2Zvby5oJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJiYXIuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJyNpbmNsdWRlIDxhc3NlcnQuaD5cbicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcnKQorCisgICAgZGVmIHRlc3RfY2hlY2tfbGluZV9icmVha19h
ZnRlcl9vd25faGVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxl
c19jaGVjaygnZm9vLmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiY29uZmlnLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICcjaW5jbHVkZSAiZm9vLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYmFyLmgiXG4nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnWW91IHNob3VsZCBhZGQgYSBibGFuayBsaW5lIGFm
dGVyIGltcGxlbWVudGF0aW9uIGZpbGVcJ3Mgb3duIGhlYWRlci4gIFtidWlsZC9pbmNsdWRlX29y
ZGVyXSBbNF0nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdm
b28uY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlICJjb25maWcuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJmb28uaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2luY2x1ZGUgImJhci5oIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJycpCiAKICAgICBkZWYgdGVzdF9jbGFzc2lmeV9pbmNsdWRlKHNlbGYpOgotICAgICAg
ICBmaWxlX2luZm8gPSBjcHBsaW50LkZpbGVJbmZvCiAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUg
PSBjcHBsaW50Ll9jbGFzc2lmeV9pbmNsdWRlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3Bw
bGludC5fQ19TWVNfSEVBREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2lu
Y2x1ZGUoZmlsZV9pbmZvKCdmb28vZm9vLmNjJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnc3RkaW8uaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUcnVlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9D
UFBfU1lTX0hFQURFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRl
KGZpbGVfaW5mbygnZm9vL2Zvby5jYycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3N0cmluZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUcnVlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9DUFBfU1lT
X0hFQURFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKGZpbGVf
aW5mbygnZm9vL2Zvby5jYycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3R5cGVpbmZvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRydWUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNwcGxpbnQuX09USEVSX0hFQURF
UiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKGZpbGVfaW5mbygn
Zm9vL2Zvby5jYycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3N0cmluZycsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BwbGludC5fQ09ORklHX0hFQURF
UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKCdmb28vZm9vLmNj
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcuaCcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSkpCi0KLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9MSUtFTFlfTVlfSEVBREVSLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoZmlsZV9pbmZvKCdmb28vZm9vLmNj
JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vL2Zvby1p
bmwuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSkp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BwbGludC5fTElLRUxZX01ZX0hFQURFUiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKGZpbGVfaW5mbygnZm9vL2lu
dGVybmFsL2Zvby5jYycpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNwcGxpbnQuX1BSSU1B
UllfSEVBREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoJ2Zv
by9pbnRlcm5hbC9mb28uY2MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2Zvby9wdWJsaWMvZm9vLmgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmFsc2UpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNwcGxpbnQuX1BP
U1NJQkxFX01ZX0hFQURFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNs
dWRlKGZpbGVfaW5mbygnZm9vL2ludGVybmFsL2Zvby5jYycpLAorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNwcGxpbnQuX1BSSU1BUllfSEVBREVSLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzaWZ5X2luY2x1ZGUoJ2Zvby9pbnRlcm5hbC9mb28uY2MnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvby9vdGhlci9wdWJsaWMvZm9vLmgnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UpKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGNwcGxpbnQuX09USEVSX0hFQURFUiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKGZpbGVfaW5mbygnZm9vL2ludGVybmFsL2Zvby5jYycp
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoJ2Zvby9pbnRlcm5h
bC9mb28uY2MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zv
by9vdGhlci9wdWJsaWMvZm9vcC5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9PVEhF
Ul9IRUFERVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZSgnZm9v
L2Zvby5jYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3Ry
aW5nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpKQog
CiAgICAgZGVmIHRlc3RfdHJ5X2Ryb3BfY29tbW9uX3N1ZmZpeGVzKHNlbGYpOgogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdmb28vZm9vJywgY3BwbGludC5fZHJvcF9jb21tb25fc3VmZml4ZXMo
J2Zvby9mb28taW5sLmgnKSkKQEAgLTIxNDgsNzcgKzIxNDgsOCBAQCBjbGFzcyBPcmRlck9mSW5j
bHVkZXNUZXN0KENwcGxpbnRUZXN0QmFzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgY3Bw
bGludC5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ190ZXN0LmNjJykpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ3Rlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNwcGxpbnQuX2Ryb3Bf
Y29tbW9uX3N1ZmZpeGVzKCd0ZXN0LmNjJykpCi0KLSAgICBkZWYgdGVzdF9yZWdyZXNzaW9uKHNl
bGYpOgotICAgICAgICBkZWYgZm9ybWF0KGluY2x1ZGVzKToKLSAgICAgICAgICAgIHJldHVybiAn
Jy5qb2luKFsnI2luY2x1ZGUgJXNcbicgJSBpbmNsdWRlIGZvciBpbmNsdWRlIGluIGluY2x1ZGVz
XSkKLQotICAgICAgICAjIFRlc3Qgc2luZ2xldG9uIGNhc2VzIGZpcnN0LgotICAgICAgICBzZWxm
LmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zvby5jYycsIGZvcm1hdChbJyJmb28v
Zm9vLmgiJ10pLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2so
J2Zvby9mb28uY2MnLCBmb3JtYXQoWyc8c3RkaW8uaD4nXSksICcnKQotICAgICAgICBzZWxmLmFz
c2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zvby5jYycsIGZvcm1hdChbJzxzdHJpbmc+
J10pLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby9m
b28uY2MnLCBmb3JtYXQoWyciZm9vL2Zvby1pbmwuaCInXSksICcnKQotICAgICAgICBzZWxmLmFz
c2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zvby5jYycsIGZvcm1hdChbJyJiYXIvYmFy
LWlubC5oIiddKSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNr
KCdmb28vZm9vLmNjJywgZm9ybWF0KFsnImJhci9iYXIuaCInXSksICcnKQotCi0gICAgICAgICMg
VGVzdCBldmVyeXRoaW5nIGluIGEgZ29vZCBhbmQgbmV3IG9yZGVyLgotICAgICAgICBzZWxmLmFz
c2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zvby5jYycsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChbJyJmb28vZm9vLmgiJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnImZvby9mb28taW5sLmgi
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0
ZGlvLmg+JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnPHN0cmluZz4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICciYmFyL2Jhci1pbmwuaCInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICciYmFyL2Jhci5oIiddKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJycpCi0gICAgICAgICMgVGVzdCBldmVyeXRoaW5nIGluIGEg
Z29vZCBidXQgc2xpZ2h0bHkgZGVwcmVjYXRlZCBvcmRlci4KLSAgICAgICAgc2VsZi5hc3NlcnRf
bGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby9mb28uY2MnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3JtYXQoWyciZm9vL2Zvby5oIicsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdGRpby5oPicsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJpbmc+JywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnImZvby9mb28t
aW5sLmgiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnImJhci9iYXItaW5sLmgiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnImJhci9iYXIuaCInXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICcnKQotICAgICAgICAjIFRlc3QgZXZlcnl0aGluZyBpbiBhIGdvb2Qg
YnV0IGRlcHJlY2F0ZWQgb3JkZXIuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVz
X2NoZWNrKCdmb28vZm9vLmNjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0KFsnPHN0ZGlvLmg+JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICciZm9vL2Zvby1pbmwuaCInLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciYmFyL2Jhci1pbmwuaCInLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciZm9vL2Zv
by5oIicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyJiYXIvYmFyLmgiJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnJykKLQotICAgICAgICAjIFRlc3QgYmFkIG9yZGVycy4KLSAgICAgICAgc2VsZi5hc3NlcnRf
bGFuZ3VhZ2VfcnVsZXNfY2hlY2soCi0gICAgICAgICAgICAnZm9vL2Zvby5jYycsCi0gICAgICAg
ICAgICBmb3JtYXQoWyc8c3RyaW5nPicsICc8c3RkaW8uaD4nXSksCi0gICAgICAgICAgICAnRm91
bmQgQyBzeXN0ZW0gaGVhZGVyIGFmdGVyIEMrKyBzeXN0ZW0gaGVhZGVyLicKLSAgICAgICAgICAg
ICcgU2hvdWxkIGJlOiBmb28uaCwgYyBzeXN0ZW0sIGMrKyBzeXN0ZW0sIG90aGVyLicKLSAgICAg
ICAgICAgICcgIFtidWlsZC9pbmNsdWRlX29yZGVyXSBbNF0nKQotICAgICAgICBzZWxmLmFzc2Vy
dF9sYW5ndWFnZV9ydWxlc19jaGVjaygKLSAgICAgICAgICAgICdmb28vZm9vLmNjJywKLSAgICAg
ICAgICAgIGZvcm1hdChbJyJmb28vYmFyLWlubC5oIicsCi0gICAgICAgICAgICAgICAgICAgICci
Zm9vL2Zvby1pbmwuaCInXSksCi0gICAgICAgICAgICAnJykKLSAgICAgICAgIyAtaW5sLmggaGVh
ZGVycyBhcmUgbm8gbG9uZ2VyIHNwZWNpYWwuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdl
X3J1bGVzX2NoZWNrKCdmb28vZm9vLmNjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0KFsnImZvby9mb28taW5sLmgiJywgJzxzdHJpbmc+J10pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby9mb28uY2MnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoWyciZm9vL2Jhci5oIicsICciZm9vL2Jh
ci1pbmwuaCInXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcn
KQotICAgICAgICAjIFRlc3QgY29tcG9uZW50aXplZCBoZWFkZXIuICBPSyB0byBoYXZlIG15IGhl
YWRlciBpbiAuLi9wdWJsaWMgZGlyLgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxl
c19jaGVjaygnZm9vL2ludGVybmFsL2Zvby5jYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcm1hdChbJyJmb28vcHVibGljL2Zvby5oIicsICc8c3RyaW5nPidd
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCi0gICAgICAg
ICMgT0sgdG8gaGF2ZSBteSBoZWFkZXIgaW4gb3RoZXIgZGlyIChub3Qgc3R5bGlzdGljYWxseSwg
YnV0Ci0gICAgICAgICMgY3BwbGludCBpc24ndCBhcyBnb29kIGFzIGEgaHVtYW4pLgotICAgICAg
ICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2ludGVybmFsL2Zvby5jYycs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChbJyJmb28v
b3RoZXIvcHVibGljL2Zvby5oIicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJzxzdHJpbmc+J10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnJykKLQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXN0JywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBjcHBsaW50Ll9kcm9wX2NvbW1vbl9zdWZmaXhlcygndGVz
dC5jcHAnKSkKIAogY2xhc3MgQ2hlY2tGb3JGdW5jdGlvbkxlbmd0aHNUZXN0KENwcGxpbnRUZXN0
QmFzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgo=
</data>
<flag name="review"
          id="17495"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33187</attachid>
            <date>2009-07-21 10:50:20 -0700</date>
            <delta_ts>2009-07-21 11:09:02 -0700</delta_ts>
            <desc>More changes reflecting comments</desc>
            <filename>27462.patch</filename>
            <type>text/plain</type>
            <size>35356</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA4MTQwZDhkLi4xMDYwMTYzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMDct
MjAgIEFkYW0gVHJlYXQgIDxhZGFtLnRyZWF0QHRvcmNobW9iaWxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgY3BwbGludCBjaGVjayBm
b3IgcHJvcGVyIGluY2x1ZGUgb3JkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI3NDYyCisKKyAgICAgICAgQWRkIGEgbmV3IGNoZWNrIHRvIGNwcGxp
bnQgdG8gZmxhZyBjYXNlcyB3aGVyZSB0aGUgaW5jbHVkZSBzZWN0aW9uIG9mIGEgZmlsZQorICAg
ICAgICBkb2VzIG5vdCBtYXRjaCB0aGUgbWFuZGF0ZWQgaW5jbHVkZSBvcmRlciBhbmQgc3R5bGUg
b2YgdGhlIFdlYmtpdCBjb2Rpbmcgc3R5bGUKKyAgICAgICAgZ3VpZGVsaW5lcy4KKworICAgICAg
ICBBZGQgYXNzb2NpYXRlZCB0ZXN0cy4KKworICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jcHBs
aW50LnB5OgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jcHBsaW50X3VuaXR0ZXN0LnB5Ogor
CiAyMDA5LTA3LTIwICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4K
IAogICAgICAgICBObyByZXZpZXcsIGp1c3QgYWRkaW5nIEdhdmluIEJhcnJhY2xvdWdoIGFzIHJl
dmlld2VyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnQu
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludC5weQppbmRleCA4OTk3NDQ0
Li4xMjlhYWIzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGlu
dC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludC5weQpAQCAtMjMy
LDExICsyMzIsOSBAQCBmb3Igb3AsIGludl9yZXBsYWNlbWVudCBpbiBbKCc9PScsICdORScpLCAo
JyE9JywgJ0VRJyksCiAKICMgVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0eXBlcyBvZiBoZWFkZXJz
IGZvciB1c2Ugd2l0aAogIyBfSW5jbHVkZVN0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigp
LgotX0NfU1lTX0hFQURFUiA9IDEKLV9DUFBfU1lTX0hFQURFUiA9IDIKLV9MSUtFTFlfTVlfSEVB
REVSID0gMwotX1BPU1NJQkxFX01ZX0hFQURFUiA9IDQKLV9PVEhFUl9IRUFERVIgPSA1CitfQ09O
RklHX0hFQURFUiA9IDAKK19QUklNQVJZX0hFQURFUiA9IDEKK19PVEhFUl9IRUFERVIgPSAyCiAK
IAogX3JlZ2V4cF9jb21waWxlX2NhY2hlID0ge30KQEAgLTI3MywzMSArMjcxLDI3IEBAIGNsYXNz
IF9JbmNsdWRlU3RhdGUoZGljdCk6CiAgICAgIyBzZWxmLl9zZWN0aW9uIHdpbGwgbW92ZSBtb25v
dG9uaWNhbGx5IHRocm91Z2ggdGhpcyBzZXQuIElmIGl0IGV2ZXIKICAgICAjIG5lZWRzIHRvIG1v
dmUgYmFja3dhcmRzLCBjaGVja19uZXh0X2luY2x1ZGVfb3JkZXIgd2lsbCByYWlzZSBhbiBlcnJv
ci4KICAgICBfSU5JVElBTF9TRUNUSU9OID0gMAotICAgIF9NWV9IX1NFQ1RJT04gPSAxCi0gICAg
X0NfU0VDVElPTiA9IDIKLSAgICBfQ1BQX1NFQ1RJT04gPSAzCi0gICAgX09USEVSX0hfU0VDVElP
TiA9IDQKKyAgICBfQ09ORklHX1NFQ1RJT04gPSAxCisgICAgX1BSSU1BUllfU0VDVElPTiA9IDIK
KyAgICBfT1RIRVJfU0VDVElPTiA9IDMKIAogICAgIF9UWVBFX05BTUVTID0gewotICAgICAgICBf
Q19TWVNfSEVBREVSOiAnQyBzeXN0ZW0gaGVhZGVyJywKLSAgICAgICAgX0NQUF9TWVNfSEVBREVS
OiAnQysrIHN5c3RlbSBoZWFkZXInLAotICAgICAgICBfTElLRUxZX01ZX0hFQURFUjogJ2hlYWRl
ciB0aGlzIGZpbGUgaW1wbGVtZW50cycsCi0gICAgICAgIF9QT1NTSUJMRV9NWV9IRUFERVI6ICdo
ZWFkZXIgdGhpcyBmaWxlIG1heSBpbXBsZW1lbnQnLAorICAgICAgICBfQ09ORklHX0hFQURFUjog
J1dlYkNvcmUgY29uZmlnLmgnLAorICAgICAgICBfUFJJTUFSWV9IRUFERVI6ICdoZWFkZXIgdGhp
cyBmaWxlIGltcGxlbWVudHMnLAogICAgICAgICBfT1RIRVJfSEVBREVSOiAnb3RoZXIgaGVhZGVy
JywKICAgICAgICAgfQogICAgIF9TRUNUSU9OX05BTUVTID0gewotICAgICAgICBfSU5JVElBTF9T
RUNUSU9OOiAiLi4uIG5vdGhpbmcuIChUaGlzIGNhbid0IGJlIGFuIGVycm9yLikiLAotICAgICAg
ICBfTVlfSF9TRUNUSU9OOiAnYSBoZWFkZXIgdGhpcyBmaWxlIGltcGxlbWVudHMnLAotICAgICAg
ICBfQ19TRUNUSU9OOiAnQyBzeXN0ZW0gaGVhZGVyJywKLSAgICAgICAgX0NQUF9TRUNUSU9OOiAn
QysrIHN5c3RlbSBoZWFkZXInLAotICAgICAgICBfT1RIRVJfSF9TRUNUSU9OOiAnb3RoZXIgaGVh
ZGVyJywKKyAgICAgICAgX0lOSVRJQUxfU0VDVElPTjogIi4uLiBub3RoaW5nLiIsCisgICAgICAg
IF9DT05GSUdfU0VDVElPTjogIldlYkNvcmUgY29uZmlnLmguIiwKKyAgICAgICAgX1BSSU1BUllf
U0VDVElPTjogJ2EgaGVhZGVyIHRoaXMgZmlsZSBpbXBsZW1lbnRzLicsCisgICAgICAgIF9PVEhF
Ul9TRUNUSU9OOiAnb3RoZXIgaGVhZGVyLicsCiAgICAgICAgIH0KIAogICAgIGRlZiBfX2luaXRf
XyhzZWxmKToKICAgICAgICAgZGljdC5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLl9zZWN0
aW9uID0gc2VsZi5fSU5JVElBTF9TRUNUSU9OCiAKLSAgICBkZWYgY2hlY2tfbmV4dF9pbmNsdWRl
X29yZGVyKHNlbGYsIGhlYWRlcl90eXBlKToKKyAgICBkZWYgY2hlY2tfbmV4dF9pbmNsdWRlX29y
ZGVyKHNlbGYsIGhlYWRlcl90eXBlLCBmaWxlX2lzX2hlYWRlcik6CiAgICAgICAgICIiIlJldHVy
bnMgYSBub24tZW1wdHkgZXJyb3IgbWVzc2FnZSBpZiB0aGUgbmV4dCBoZWFkZXIgaXMgb3V0IG9m
IG9yZGVyLgogCiAgICAgICAgIFRoaXMgZnVuY3Rpb24gYWxzbyB1cGRhdGVzIHRoZSBpbnRlcm5h
bCBzdGF0ZSB0byBiZSByZWFkeSB0byBjaGVjawpAQCAtMzA1LDQ0ICsyOTksNDQgQEAgY2xhc3Mg
X0luY2x1ZGVTdGF0ZShkaWN0KToKIAogICAgICAgICBBcmdzOgogICAgICAgICAgIGhlYWRlcl90
eXBlOiBPbmUgb2YgdGhlIF9YWFhfSEVBREVSIGNvbnN0YW50cyBkZWZpbmVkIGFib3ZlLgorICAg
ICAgICAgIGZpbGVfaXNfaGVhZGVyOiBXaGV0aGVyIHRoZSBmaWxlIHRoYXQgb3ducyB0aGlzIF9J
bmNsdWRlU3RhdGUgaXMgaXRzZWxmIGEgaGVhZGVyCiAKICAgICAgICAgUmV0dXJuczoKICAgICAg
ICAgICBUaGUgZW1wdHkgc3RyaW5nIGlmIHRoZSBoZWFkZXIgaXMgaW4gdGhlIHJpZ2h0IG9yZGVy
LCBvciBhbgogICAgICAgICAgIGVycm9yIG1lc3NhZ2UgZGVzY3JpYmluZyB3aGF0J3Mgd3Jvbmcu
CiAKICAgICAgICAgIiIiCi0gICAgICAgICMgRklYTUU6IFRoaXMgaXNuJ3QgV2ViS2l0J3MgcnVs
ZS4gV2UgYXJlIGp1c3QgZGlzYWJsaW5nIHRoaXMgZm9yIG5vdy4KLSAgICAgICAgZXJyb3JfbWVz
c2FnZSA9ICgnRm91bmQgJXMgYWZ0ZXIgJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAo
c2VsZi5fVFlQRV9OQU1FU1toZWFkZXJfdHlwZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX1NFQ1RJT05fTkFNRVNbc2VsZi5fc2VjdGlvbl0pKQotCi0gICAgICAgIGlmIGhlYWRl
cl90eXBlID09IF9DX1NZU19IRUFERVI6Ci0gICAgICAgICAgICBpZiBzZWxmLl9zZWN0aW9uIDw9
IHNlbGYuX0NfU0VDVElPTjoKLSAgICAgICAgICAgICAgICBzZWxmLl9zZWN0aW9uID0gc2VsZi5f
Q19TRUNUSU9OCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cl9tZXNzYWdlCi0gICAgICAgIGVsaWYgaGVhZGVyX3R5cGUgPT0gX0NQUF9TWVNfSEVBREVSOgot
ICAgICAgICAgICAgaWYgc2VsZi5fc2VjdGlvbiA8PSBzZWxmLl9DUFBfU0VDVElPTjoKLSAgICAg
ICAgICAgICAgICBzZWxmLl9zZWN0aW9uID0gc2VsZi5fQ1BQX1NFQ1RJT04KLSAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yX21lc3NhZ2UKLSAgICAgICAgZWxp
ZiBoZWFkZXJfdHlwZSA9PSBfTElLRUxZX01ZX0hFQURFUjoKLSAgICAgICAgICAgIGlmIHNlbGYu
X3NlY3Rpb24gPD0gc2VsZi5fTVlfSF9TRUNUSU9OOgotICAgICAgICAgICAgICAgIHNlbGYuX3Nl
Y3Rpb24gPSBzZWxmLl9NWV9IX1NFQ1RJT04KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fc2VjdGlvbiA9IHNlbGYuX09USEVSX0hfU0VDVElPTgotICAgICAgICBlbGlm
IGhlYWRlcl90eXBlID09IF9QT1NTSUJMRV9NWV9IRUFERVI6Ci0gICAgICAgICAgICBpZiBzZWxm
Ll9zZWN0aW9uIDw9IHNlbGYuX01ZX0hfU0VDVElPTjoKLSAgICAgICAgICAgICAgICBzZWxmLl9z
ZWN0aW9uID0gc2VsZi5fTVlfSF9TRUNUSU9OCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgICMgVGhpcyB3aWxsIGFsd2F5cyBiZSB0aGUgZmFsbGJhY2sgYmVjYXVzZSB3ZSdyZSBu
b3Qgc3VyZQotICAgICAgICAgICAgICAgICMgZW5vdWdoIHRoYXQgdGhlIGhlYWRlciBpcyBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBmaWxlLgotICAgICAgICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBz
ZWxmLl9PVEhFUl9IX1NFQ1RJT04KKyAgICAgICAgaWYgaGVhZGVyX3R5cGUgPT0gX0NPTkZJR19I
RUFERVIgYW5kIGZpbGVfaXNfaGVhZGVyOgorICAgICAgICAgICAgcmV0dXJuICdIZWFkZXIgZmls
ZSBzaG91bGQgbm90IGNvbnRhaW4gV2ViQ29yZSBjb25maWcuaC4nCisgICAgICAgIGlmIGhlYWRl
cl90eXBlID09IF9QUklNQVJZX0hFQURFUiBhbmQgZmlsZV9pc19oZWFkZXI6CisgICAgICAgICAg
ICByZXR1cm4gJ0hlYWRlciBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHNlbGYuJworCisgICAg
ICAgIGVycm9yX21lc3NhZ2UgPSAnJworICAgICAgICBpZiBzZWxmLl9zZWN0aW9uICE9IHNlbGYu
X09USEVSX1NFQ1RJT046CisgICAgICAgICAgICBiZWZvcmVfZXJyb3JfbWVzc2FnZSA9ICgnRm91
bmQgJXMgYmVmb3JlICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c2VsZi5fVFlQRV9OQU1FU1toZWFkZXJfdHlwZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fU0VDVElPTl9OQU1FU1tzZWxmLl9zZWN0aW9uICsgMV0pKQorICAg
ICAgICBhZnRlcl9lcnJvcl9tZXNzYWdlID0gKCdGb3VuZCAlcyBhZnRlciAlcycgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fVFlQRV9OQU1FU1toZWFkZXJfdHlwZV0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9TRUNUSU9OX05BTUVTW3Nl
bGYuX3NlY3Rpb25dKSkKKworICAgICAgICBpZiBoZWFkZXJfdHlwZSA9PSBfQ09ORklHX0hFQURF
UjoKKyAgICAgICAgICAgIGlmIHNlbGYuX3NlY3Rpb24gPj0gc2VsZi5fQ09ORklHX1NFQ1RJT046
CisgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9IGFmdGVyX2Vycm9yX21lc3NhZ2UKKyAg
ICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBzZWxmLl9DT05GSUdfU0VDVElPTgorICAgICAgICBl
bGlmIGhlYWRlcl90eXBlID09IF9QUklNQVJZX0hFQURFUjoKKyAgICAgICAgICAgIGlmIHNlbGYu
X3NlY3Rpb24gPj0gc2VsZi5fUFJJTUFSWV9TRUNUSU9OOgorICAgICAgICAgICAgICAgIGVycm9y
X21lc3NhZ2UgPSBhZnRlcl9lcnJvcl9tZXNzYWdlCisgICAgICAgICAgICBlbGlmIHNlbGYuX3Nl
Y3Rpb24gPCBzZWxmLl9DT05GSUdfU0VDVElPTjoKKyAgICAgICAgICAgICAgICBlcnJvcl9tZXNz
YWdlID0gYmVmb3JlX2Vycm9yX21lc3NhZ2UKKyAgICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBz
ZWxmLl9QUklNQVJZX1NFQ1RJT04KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFzc2VydCBo
ZWFkZXJfdHlwZSA9PSBfT1RIRVJfSEVBREVSCi0gICAgICAgICAgICBzZWxmLl9zZWN0aW9uID0g
c2VsZi5fT1RIRVJfSF9TRUNUSU9OCisgICAgICAgICAgICBpZiBub3QgZmlsZV9pc19oZWFkZXIg
YW5kIHNlbGYuX3NlY3Rpb24gPCBzZWxmLl9QUklNQVJZX1NFQ1RJT046CisgICAgICAgICAgICAg
ICAgZXJyb3JfbWVzc2FnZSA9IGJlZm9yZV9lcnJvcl9tZXNzYWdlCisgICAgICAgICAgICBzZWxm
Ll9zZWN0aW9uID0gc2VsZi5fT1RIRVJfU0VDVElPTgogCi0gICAgICAgIHJldHVybiAnJworICAg
ICAgICByZXR1cm4gZXJyb3JfbWVzc2FnZQogCiAKIGNsYXNzIF9DcHBMaW50U3RhdGUob2JqZWN0
KToKQEAgLTE5NzIsMTEgKzE5NjYsMTEgQEAgZGVmIF9pc190ZXN0X2ZpbGVuYW1lKGZpbGVuYW1l
KToKICAgICByZXR1cm4gRmFsc2UKIAogCi1kZWYgX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZWluZm8s
IGluY2x1ZGUsIGlzX3N5c3RlbSk6CitkZWYgX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZW5hbWUsIGlu
Y2x1ZGUsIGlzX3N5c3RlbSk6CiAgICAgIiIiRmlndXJlcyBvdXQgd2hhdCBraW5kIG9mIGhlYWRl
ciAnaW5jbHVkZScgaXMuCiAKICAgICBBcmdzOgotICAgICAgZmlsZWluZm86IFRoZSBjdXJyZW50
IGZpbGUgY3BwbGludCBpcyBydW5uaW5nIG92ZXIuIEEgRmlsZUluZm8gaW5zdGFuY2UuCisgICAg
ICBmaWxlbmFtZTogVGhlIGN1cnJlbnQgZmlsZSBjcHBsaW50IGlzIHJ1bm5pbmcgb3Zlci4KICAg
ICAgIGluY2x1ZGU6IFRoZSBwYXRoIHRvIGEgI2luY2x1ZGVkIGZpbGUuCiAgICAgICBpc19zeXN0
ZW06IFRydWUgaWYgdGhlICNpbmNsdWRlIHVzZWQgPD4gcmF0aGVyIHRoYW4gIiIuCiAKQEAgLTE5
ODQsNDggKzE5NzgsMjggQEAgZGVmIF9jbGFzc2lmeV9pbmNsdWRlKGZpbGVpbmZvLCBpbmNsdWRl
LCBpc19zeXN0ZW0pOgogICAgICAgT25lIG9mIHRoZSBfWFhYX0hFQURFUiBjb25zdGFudHMuCiAK
ICAgICBGb3IgZXhhbXBsZToKLSAgICAgID4+PiBfY2xhc3NpZnlfaW5jbHVkZShGaWxlSW5mbygn
Zm9vL2Zvby5jYycpLCAnc3RkaW8uaCcsIFRydWUpCi0gICAgICBfQ19TWVNfSEVBREVSCi0gICAg
ICA+Pj4gX2NsYXNzaWZ5X2luY2x1ZGUoRmlsZUluZm8oJ2Zvby9mb28uY2MnKSwgJ3N0cmluZycs
IFRydWUpCi0gICAgICBfQ1BQX1NZU19IRUFERVIKLSAgICAgID4+PiBfY2xhc3NpZnlfaW5jbHVk
ZShGaWxlSW5mbygnZm9vL2Zvby5jYycpLCAnZm9vL2Zvby5oJywgRmFsc2UpCi0gICAgICBfTElL
RUxZX01ZX0hFQURFUgotICAgICAgPj4+IF9jbGFzc2lmeV9pbmNsdWRlKEZpbGVJbmZvKCdmb28v
Zm9vX3Vua25vd25fZXh0ZW5zaW9uLmNjJyksCi0gICAgICAuLi4gICAgICAgICAgICAgICAgICAn
YmFyL2Zvb19vdGhlcl9leHQuaCcsIEZhbHNlKQotICAgICAgX1BPU1NJQkxFX01ZX0hFQURFUgot
ICAgICAgPj4+IF9jbGFzc2lmeV9pbmNsdWRlKEZpbGVJbmZvKCdmb28vZm9vLmNjJyksICdmb28v
YmFyLmgnLCBGYWxzZSkKKyAgICAgID4+PiBfY2xhc3NpZnlfaW5jbHVkZSgnZm9vLmNwcCcsICdj
b25maWcuaCcsIEZhbHNlKQorICAgICAgX0NPTkZJR19IRUFERVIKKyAgICAgID4+PiBfY2xhc3Np
ZnlfaW5jbHVkZSgnZm9vLmNwcCcsICdmb28uaCcsIEZhbHNlKQorICAgICAgX1BSSU1BUllfSEVB
REVSCisgICAgICA+Pj4gX2NsYXNzaWZ5X2luY2x1ZGUoJ2Zvby5jcHAnLCAnYmFyLmgnLCBGYWxz
ZSkKICAgICAgIF9PVEhFUl9IRUFERVIKICAgICAiIiIKLSAgICAjIFRoaXMgaXMgYSBsaXN0IG9m
IGFsbCBzdGFuZGFyZCBjKysgaGVhZGVyIGZpbGVzLCBleGNlcHQKLSAgICAjIHRob3NlIGFscmVh
ZHkgY2hlY2tlZCBmb3IgYWJvdmUuCi0gICAgaXNfc3RsX2ggPSBpbmNsdWRlIGluIF9TVExfSEVB
REVSUwotICAgIGlzX2NwcF9oID0gaXNfc3RsX2ggb3IgaW5jbHVkZSBpbiBfQ1BQX0hFQURFUlMK
IAorICAgICMgSWYgaXQgaXMgYSBzeXN0ZW0gaGVhZGVyIHdlIGtub3cgaXQgaXMgY2xhc3NpZmll
ZCBhcyBfT1RIRVJfSEVBREVSLgogICAgIGlmIGlzX3N5c3RlbToKLSAgICAgICAgaWYgaXNfY3Bw
X2g6Ci0gICAgICAgICAgICByZXR1cm4gX0NQUF9TWVNfSEVBREVSCi0gICAgICAgIHJldHVybiBf
Q19TWVNfSEVBREVSCisgICAgICAgIHJldHVybiBfT1RIRVJfSEVBREVSCisKKyAgICAjIElmIHRo
ZSBpbmNsdWRlIGlzIG5hbWVkIGNvbmZpZy5oIHRoZW4gdGhpcyBpcyBXZWJDb3JlL2NvbmZpZy5o
LgorICAgIGlmIGluY2x1ZGUgPT0gImNvbmZpZy5oIjoKKyAgICAgICAgcmV0dXJuIF9DT05GSUdf
SEVBREVSCiAKICAgICAjIElmIHRoZSB0YXJnZXQgZmlsZSBhbmQgdGhlIGluY2x1ZGUgd2UncmUg
Y2hlY2tpbmcgc2hhcmUgYQotICAgICMgYmFzZW5hbWUgd2hlbiB3ZSBkcm9wIGNvbW1vbiBleHRl
bnNpb25zLCBhbmQgdGhlIGluY2x1ZGUKLSAgICAjIGxpdmVzIGluIC4gLCB0aGVuIGl0J3MgbGlr
ZWx5IHRvIGJlIG93bmVkIGJ5IHRoZSB0YXJnZXQgZmlsZS4KLSAgICB0YXJnZXRfZGlyLCB0YXJn
ZXRfYmFzZSA9ICgKLSAgICAgICAgb3MucGF0aC5zcGxpdChfZHJvcF9jb21tb25fc3VmZml4ZXMo
ZmlsZWluZm8ucmVwb3NpdG9yeV9uYW1lKCkpKSkKLSAgICBpbmNsdWRlX2RpciwgaW5jbHVkZV9i
YXNlID0gb3MucGF0aC5zcGxpdChfZHJvcF9jb21tb25fc3VmZml4ZXMoaW5jbHVkZSkpCi0gICAg
aWYgKHRhcmdldF9iYXNlID09IGluY2x1ZGVfYmFzZQotICAgICAgICBhbmQgKGluY2x1ZGVfZGly
ID09IHRhcmdldF9kaXIKLSAgICAgICAgICAgICBvciBpbmNsdWRlX2RpciA9PSBvcy5wYXRoLm5v
cm1wYXRoKHRhcmdldF9kaXIgKyAnLy4uL3B1YmxpYycpKSk6Ci0gICAgICAgIHJldHVybiBfTElL
RUxZX01ZX0hFQURFUgotCi0gICAgIyBJZiB0aGUgdGFyZ2V0IGFuZCBpbmNsdWRlIHNoYXJlIHNv
bWUgaW5pdGlhbCBiYXNlbmFtZQotICAgICMgY29tcG9uZW50LCBpdCdzIHBvc3NpYmxlIHRoZSB0
YXJnZXQgaXMgaW1wbGVtZW50aW5nIHRoZQotICAgICMgaW5jbHVkZSwgc28gaXQncyBhbGxvd2Vk
IHRvIGJlIGZpcnN0LCBidXQgd2UnbGwgbmV2ZXIKLSAgICAjIGNvbXBsYWluIGlmIGl0J3Mgbm90
IHRoZXJlLgotICAgIHRhcmdldF9maXJzdF9jb21wb25lbnQgPSBfUkVfRklSU1RfQ09NUE9ORU5U
Lm1hdGNoKHRhcmdldF9iYXNlKQotICAgIGluY2x1ZGVfZmlyc3RfY29tcG9uZW50ID0gX1JFX0ZJ
UlNUX0NPTVBPTkVOVC5tYXRjaChpbmNsdWRlX2Jhc2UpCi0gICAgaWYgKHRhcmdldF9maXJzdF9j
b21wb25lbnQgYW5kIGluY2x1ZGVfZmlyc3RfY29tcG9uZW50Ci0gICAgICAgIGFuZCB0YXJnZXRf
Zmlyc3RfY29tcG9uZW50Lmdyb3VwKDApID09IGluY2x1ZGVfZmlyc3RfY29tcG9uZW50Lmdyb3Vw
KDApKToKLSAgICAgICAgcmV0dXJuIF9QT1NTSUJMRV9NWV9IRUFERVIKKyAgICAjIGJhc2VuYW1l
IHRoZW4gd2UgY29uc2lkZXIgaXQgdGhlIHByaW1hcnkgaGVhZGVyLgorICAgIHRhcmdldF9iYXNl
ID0gRmlsZUluZm8oZmlsZW5hbWUpLmJhc2VfbmFtZSgpCisgICAgaW5jbHVkZV9iYXNlID0gRmls
ZUluZm8oaW5jbHVkZSkuYmFzZV9uYW1lKCkKKyAgICBpZiB0YXJnZXRfYmFzZSA9PSBpbmNsdWRl
X2Jhc2U6CisgICAgICAgIHJldHVybiBfUFJJTUFSWV9IRUFERVIKIAogICAgIHJldHVybiBfT1RI
RVJfSEVBREVSCiAKQEAgLTIwNDUsMTUgKzIwMTksOSBAQCBkZWYgY2hlY2tfaW5jbHVkZV9saW5l
KGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGluY2x1ZGVfc3RhdGUsIGVycm9y
KQogICAgICAgaW5jbHVkZV9zdGF0ZTogQW4gX0luY2x1ZGVTdGF0ZSBpbnN0YW5jZSBpbiB3aGlj
aCB0aGUgaGVhZGVycyBhcmUgaW5zZXJ0ZWQuCiAgICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRv
IGNhbGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgogICAgICIiIgotICAgIGZpbGVpbmZvID0gRmls
ZUluZm8oZmlsZW5hbWUpCiAKICAgICBsaW5lID0gY2xlYW5fbGluZXMubGluZXNbbGluZV9udW1i
ZXJdCiAKLSAgICAjIyAiaW5jbHVkZSIgc2hvdWxkIHVzZSB0aGUgbmV3IHN0eWxlICJmb28vYmFy
LmgiIGluc3RlYWQgb2YganVzdCAiYmFyLmgiCi0gICAgI2lmIF9SRV9QQVRURVJOX0lOQ0xVREVf
TkVXX1NUWUxFLnNlYXJjaChsaW5lKToKLSAgICAjICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1i
ZXIsICdidWlsZC9pbmNsdWRlJywgNCwKLSAgICAjICAgICAgICAnSW5jbHVkZSB0aGUgZGlyZWN0
b3J5IHdoZW4gbmFtaW5nIC5oIGZpbGVzJykKLQogICAgICMgd2Ugc2hvdWxkbid0IGluY2x1ZGUg
YSBmaWxlIG1vcmUgdGhhbiBvbmNlLiBhY3R1YWxseSwgdGhlcmUgYXJlIGEKICAgICAjIGhhbmRm
dWwgb2YgaW5zdGFuY2VzIHdoZXJlIGRvaW5nIHNvIGlzIG9rYXksIGJ1dCBpbiBnZW5lcmFsIGl0
J3MKICAgICAjIG5vdC4KQEAgLTIwNjksMjIgKzIwMzcsNTAgQEAgZGVmIGNoZWNrX2luY2x1ZGVf
bGluZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBpbmNsdWRlX3N0YXRlLCBl
cnJvcikKICAgICAgICAgICAgIGluY2x1ZGVfc3RhdGVbaW5jbHVkZV0gPSBsaW5lX251bWJlcgog
CiAgICAgICAgICAgICAjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgaGVhZGVycyBhcHBlYXIgaW4g
dGhlIHJpZ2h0IG9yZGVyOgotICAgICAgICAgICAgIyAxKSBmb3IgZm9vLmNjLCBmb28uaCAgKHBy
ZWZlcnJlZCBsb2NhdGlvbikKLSAgICAgICAgICAgICMgMikgYyBzeXN0ZW0gZmlsZXMKLSAgICAg
ICAgICAgICMgMykgY3BwIHN5c3RlbSBmaWxlcwotICAgICAgICAgICAgIyA0KSBmb3IgZm9vLmNj
LCBmb28uaCAgKGRlcHJlY2F0ZWQgbG9jYXRpb24pCi0gICAgICAgICAgICAjIDUpIG90aGVyIGdv
b2dsZSBoZWFkZXJzCisgICAgICAgICAgICAjIDEpIGZvciBpbXBsZW1lbnRhdGlvbiBmaWxlczog
Y29uZmlnLmgsIHByaW1hcnkgaGVhZGVyLCBibGFuayBsaW5lLCBhbHBoYWJldGljYWxseSBzb3J0
ZWQKKyAgICAgICAgICAgICMgMikgZm9yIGhlYWRlciBmaWxlczogYWxwaGFiZXRpY2FsbHkgc29y
dGVkCiAgICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFdlIGNsYXNzaWZ5IGVhY2ggaW5jbHVk
ZSBzdGF0ZW1lbnQgYXMgb25lIG9mIHRob3NlIDUgdHlwZXMKKyAgICAgICAgICAgICMgV2UgY2xh
c3NpZnkgZWFjaCBpbmNsdWRlIHN0YXRlbWVudCBhcyBvbmUgb2YgNCB0eXBlcwogICAgICAgICAg
ICAgIyB1c2luZyBhIG51bWJlciBvZiB0ZWNobmlxdWVzLiBUaGUgaW5jbHVkZV9zdGF0ZSBvYmpl
Y3Qga2VlcHMKICAgICAgICAgICAgICMgdHJhY2sgb2YgdGhlIGhpZ2hlc3QgdHlwZSBzZWVuLCBh
bmQgY29tcGxhaW5zIGlmIHdlIHNlZSBhCiAgICAgICAgICAgICAjIGxvd2VyIHR5cGUgYWZ0ZXIg
dGhhdC4KLSAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSBpbmNsdWRlX3N0YXRlLmNoZWNrX25l
eHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgICAgICBfY2xhc3NpZnlfaW5jbHVkZShmaWxl
aW5mbywgaW5jbHVkZSwgaXNfc3lzdGVtKSkKKyAgICAgICAgICAgIGhlYWRlcl90eXBlID0gX2Ns
YXNzaWZ5X2luY2x1ZGUoZmlsZW5hbWUsIGluY2x1ZGUsIGlzX3N5c3RlbSkKKyAgICAgICAgICAg
IGVycm9yX21lc3NhZ2UgPSBpbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlciho
ZWFkZXJfdHlwZSwgZmlsZW5hbWUuZW5kc3dpdGgoJy5oJykpCisKKyAgICAgICAgICAgICMgQ2hl
Y2sgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBibGFuayBsaW5lIGFmdGVyIHByaW1hcnkgaGVhZGVy
LgorICAgICAgICAgICAgaWYgbm90IGVycm9yX21lc3NhZ2UgYW5kIGhlYWRlcl90eXBlID09IF9Q
UklNQVJZX0hFQURFUjoKKyAgICAgICAgICAgICAgICAgbmV4dF9saW5lID0gY2xlYW5fbGluZXMu
cmF3X2xpbmVzW2xpbmVfbnVtYmVyICsgMV0KKyAgICAgICAgICAgICAgICAgaWYgbm90IGlzX2Js
YW5rX2xpbmUobmV4dF9saW5lKToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUs
IGxpbmVfbnVtYmVyLCAnYnVpbGQvaW5jbHVkZV9vcmRlcicsIDQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICdZb3Ugc2hvdWxkIGFkZCBhIGJsYW5rIGxpbmUgYWZ0ZXIgaW1wbGVtZW50YXRp
b24gZmlsZVwncyBvd24gaGVhZGVyLicpCisKKyAgICAgICAgICAgICMgQ2hlY2sgdG8gbWFrZSBz
dXJlIGFsbCBoZWFkZXJzIGJlc2lkZXMgY29uZmlnLmggYW5kIHRoZSBwcmltYXJ5IGhlYWRlciBh
cmUKKyAgICAgICAgICAgICMgYWxwaGFiZXRpY2FsbHkgc29ydGVkLgorICAgICAgICAgICAgaWYg
bm90IGVycm9yX21lc3NhZ2UgYW5kIGhlYWRlcl90eXBlID09IF9PVEhFUl9IRUFERVI6CisgICAg
ICAgICAgICAgICAgIHByZXZpb3VzX2xpbmVfbnVtYmVyID0gbGluZV9udW1iZXIgLSAxOworICAg
ICAgICAgICAgICAgICBwcmV2aW91c19saW5lID0gY2xlYW5fbGluZXMubGluZXNbcHJldmlvdXNf
bGluZV9udW1iZXJdCisgICAgICAgICAgICAgICAgIHByZXZpb3VzX21hdGNoID0gX1JFX1BBVFRF
Uk5fSU5DTFVERS5zZWFyY2gocHJldmlvdXNfbGluZSkKKyAgICAgICAgICAgICAgICAgd2hpbGUg
KG5vdCBwcmV2aW91c19tYXRjaCBhbmQgcHJldmlvdXNfbGluZV9udW1iZXIgPiAwCisgICAgICAg
ICAgICAgICAgICAgICAgICBhbmQgbm90IHNlYXJjaChyJ1xBKCNpZnwjaWZkZWZ8I2lmbmRlZnwj
ZWxzZXwjZWxpZnwjZW5kaWYpJywgcHJldmlvdXNfbGluZSkpOgorICAgICAgICAgICAgICAgICAg
ICBwcmV2aW91c19saW5lX251bWJlciAtPSAxOworICAgICAgICAgICAgICAgICAgICBwcmV2aW91
c19saW5lID0gY2xlYW5fbGluZXMubGluZXNbcHJldmlvdXNfbGluZV9udW1iZXJdCisgICAgICAg
ICAgICAgICAgICAgIHByZXZpb3VzX21hdGNoID0gX1JFX1BBVFRFUk5fSU5DTFVERS5zZWFyY2go
cHJldmlvdXNfbGluZSkKKyAgICAgICAgICAgICAgICAgaWYgcHJldmlvdXNfbWF0Y2g6CisgICAg
ICAgICAgICAgICAgICAgIHByZXZpb3VzX2luY2x1ZGUgPSBwcmV2aW91c19tYXRjaC5ncm91cCgy
KQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19oZWFkZXJfdHlwZSA9IF9jbGFzc2lmeV9p
bmNsdWRlKGZpbGVuYW1lLCBwcmV2aW91c19pbmNsdWRlLCAocHJldmlvdXNfbWF0Y2guZ3JvdXAo
MSkgPT0gJzwnKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJldmlvdXNfaGVhZGVyX3R5cGUg
PT0gX09USEVSX0hFQURFUiBhbmQgcHJldmlvdXNfbGluZS5zdHJpcCgpID4gbGluZS5zdHJpcCgp
OgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAn
YnVpbGQvaW5jbHVkZV9vcmRlcicsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
QWxwaGFiZXRpY2FsIHNvcnRpbmcgcHJvYmxlbS4nKQorCiAgICAgICAgICAgICBpZiBlcnJvcl9t
ZXNzYWdlOgotICAgICAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1
aWxkL2luY2x1ZGVfb3JkZXInLCA0LAotICAgICAgICAgICAgICAgICAgICAgICclcy4gU2hvdWxk
IGJlOiAlcy5oLCBjIHN5c3RlbSwgYysrIHN5c3RlbSwgb3RoZXIuJyAlCi0gICAgICAgICAgICAg
ICAgICAgICAgKGVycm9yX21lc3NhZ2UsIGZpbGVpbmZvLmJhc2VfbmFtZSgpKSkKKyAgICAgICAg
ICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgnLmgnKToKKyAgICAgICAgICAgICAgICAgICAg
ZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVpbGQvaW5jbHVkZV9vcmRlcicsIDQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICclcyBTaG91bGQgYmU6IGFscGhhYmV0aWNhbGx5IHNv
cnRlZC4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yX21lc3NhZ2UpKQorICAg
ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBs
aW5lX251bWJlciwgJ2J1aWxkL2luY2x1ZGVfb3JkZXInLCA0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAnJXMgU2hvdWxkIGJlOiBjb25maWcuaCwgcHJpbWFyeSBoZWFkZXIsIGJsYW5rIGxp
bmUsIGFuZCB0aGVuIGFscGhhYmV0aWNhbGx5IHNvcnRlZC4nICUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGVycm9yX21lc3NhZ2UpKQogCiAgICAgIyBMb29rIGZvciBhbnkgb2YgdGhlIHN0
cmVhbSBjbGFzc2VzIHRoYXQgYXJlIHBhcnQgb2Ygc3RhbmRhcmQgQysrLgogICAgIG1hdGNoZWQg
PSBfUkVfUEFUVEVSTl9JTkNMVURFLm1hdGNoKGxpbmUpCkBAIC0yODE1LDggKzI4MTEsNiBAQCBk
ZWYgdXNlX3dlYmtpdF9zdHlsZXMoKToKICAgICAgICAgJy1yZWFkYWJpbGl0eS9icmFjZXMnLCAg
IyBpbnQgZm9vKCkge307CiAgICAgICAgICctcmVhZGFiaWxpdHkvZm5fc2l6ZScsCiAgICAgICAg
ICctYnVpbGQvc3RvcmFnZV9jbGFzcycsICAjIGNvbnN0IHN0YXRpYwotICAgICAgICAnLWJ1aWxk
L2luY2x1ZGVfb3JkZXInLAotICAgICAgICAnLWJ1aWxkL2luY2x1ZGUnLAogICAgICAgICAnLWJ1
aWxkL2VuZGlmX2NvbW1lbnQnLAogICAgICAgICAnLXdoaXRlc3BhY2UvbGFiZWxzJywKICAgICAg
ICAgJy1ydW50aW1lL2FycmF5cycsICAjIHZhcmlhYmxlIGxlbmd0aCBhcnJheQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnRfdW5pdHRlc3QucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludF91bml0dGVzdC5weQppbmRleCBmNmU0ODc4
Li4wOGFkMDU3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGlu
dF91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludF91
bml0dGVzdC5weQpAQCAtNDI4LDE1ICs0MjgsNiBAQCBjbGFzcyBDcHBsaW50VGVzdChDcHBsaW50
VGVzdEJhc2UpOgogICAgICAgICAgICAgJ1VzaW5nIHNpemVvZih0eXBlKS4gIFVzZSBzaXplb2Yo
dmFybmFtZSkgaW5zdGVhZCBpZiBwb3NzaWJsZScKICAgICAgICAgICAgICcgIFtydW50aW1lL3Np
emVvZl0gWzFdJykKIAotICAgICMgVGVzdCBmYWxzZSBlcnJvcnMgdGhhdCBoYXBwZW5lZCB3aXRo
IHNvbWUgaW5jbHVkZSBmaWxlIG5hbWVzCi0gICAgZGVmIHRlc3RfaW5jbHVkZV9maWxlbmFtZV9m
YWxzZV9lcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKLSAgICAgICAgICAg
ICcjaW5jbHVkZSAiZm9vL2xvbmctZm9vLmgiJywKLSAgICAgICAgICAgICcnKQotICAgICAgICBz
ZWxmLmFzc2VydF9saW50KAotICAgICAgICAgICAgJyNpbmNsdWRlICJmb28vc3ByaW50Zi5oIics
Ci0gICAgICAgICAgICAnJykKLQogICAgICMgVGVzdCB0eXBlZGVmIGNhc2VzLiAgVGhlcmUgd2Fz
IGEgYnVnIHRoYXQgY3BwbGludCBtaXNpZGVudGlmaWVkCiAgICAgIyB0eXBlZGVmIGZvciBwb2lu
dGVyIHRvIGZ1bmN0aW9uIGFzIEMtc3R5bGUgY2FzdCBhbmQgcHJvZHVjZWQKICAgICAjIGZhbHNl
LXBvc2l0aXZlIGVycm9yIG1lc3NhZ2VzLgpAQCAtNTcwLDEyICs1NjEsMTIgQEAgY2xhc3MgQ3Bw
bGludFRlc3QoQ3BwbGludFRlc3RCYXNlKToKICAgICAgICAgICAgICcnJywKICAgICAgICAgICAg
ICcnKQogICAgICAgICBzZWxmLmFzc2VydF9pbmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAg
ICAgICcnJyNpbmNsdWRlIDxhc3NlcnQuaD4KLSAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdHJp
bmc+Ci0gICAgICAgICAgICAgICAjaW5jbHVkZSA8dmVjdG9yPgotICAgICAgICAgICAgICAgI2lu
Y2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotICAgICAgICAgICAgICAgI2luY2x1ZGUgImJhc2Uv
cG9ydC5oIgotICAgICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4gaGFqb2E7JycnLCAnJykKKyAg
ICAgICAgICAgICAnJycjaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCisgICAgICAgICAgICAg
ICAgI2luY2x1ZGUgImJhc2UvcG9ydC5oIgorICAgICAgICAgICAgICAgICNpbmNsdWRlIDxhc3Nl
cnQuaD4KKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RyaW5nPgorICAgICAgICAgICAgICAg
ICNpbmNsdWRlIDx2ZWN0b3I+CisgICAgICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4gaGFqb2E7
JycnLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCiAgICAg
ICAgICAgICAnJycjaW5jbHVkZSA8c3RyaW5nPgogICAgICAgICAgICAgICAgaW50IGkgPSBudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKQpAQCAtNTkxLDMzICs1ODIsMjcgQEAgY2xhc3MgQ3BwbGlu
dFRlc3QoQ3BwbGludFRlc3RCYXNlKToKICAgICAgICAgIyBUZXN0IHRoZSBVcGRhdGVJbmNsdWRl
U3RhdGUgY29kZSBwYXRoLgogICAgICAgICBtb2NrX2hlYWRlcl9jb250ZW50cyA9IFsnI2luY2x1
ZGUgImJsYWgvZm9vLmgiJywgJyNpbmNsdWRlICJibGFoL2Jhci5oIiddCiAgICAgICAgIG1lc3Nh
Z2UgPSBzZWxmLnBlcmZvcm1faW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnI2lu
Y2x1ZGUgImJsYWgvYS5oIicsCisgICAgICAgICAgICAnI2luY2x1ZGUgImNvbmZpZy5oIlxuJwor
ICAgICAgICAgICAgJyNpbmNsdWRlICJibGFoL2EuaCJcbicsCiAgICAgICAgICAgICBmaWxlbmFt
ZT0nYmxhaC9hLmNjJywKICAgICAgICAgICAgIGlvPU1vY2tJbyhtb2NrX2hlYWRlcl9jb250ZW50
cykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lc3NhZ2UsICcnKQogCiAgICAgICAgIG1v
Y2tfaGVhZGVyX2NvbnRlbnRzID0gWycjaW5jbHVkZSA8c2V0PiddCiAgICAgICAgIG1lc3NhZ2Ug
PSBzZWxmLnBlcmZvcm1faW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5j
bHVkZSAiYmxhaC9hLmgiCisgICAgICAgICAgICAnJycjaW5jbHVkZSAiY29uZmlnLmgiCisgICAg
ICAgICAgICAgICAjaW5jbHVkZSAiYmxhaC9hLmgiCisKICAgICAgICAgICAgICAgIHN0ZDo6c2V0
PGludD4gZm9vOycnJywKICAgICAgICAgICAgIGZpbGVuYW1lPSdibGFoL2EuY2MnLAogICAgICAg
ICAgICAgaW89TW9ja0lvKG1vY2tfaGVhZGVyX2NvbnRlbnRzKSkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMobWVzc2FnZSwgJycpCiAKLSAgICAgICAgIyBNYWtlIHN1cmUgd2UgY2FuIGZpbmQg
dGhlIGNvcnJlY3QgaGVhZGVyIGZpbGUgaWYgdGhlIGNjIGZpbGUgc2VlbXMgdG8gYmUKLSAgICAg
ICAgIyBhIHRlbXBvcmFyeSBmaWxlIGdlbmVyYXRlZCBieSBFbWFjcydzIGZseW1ha2UuCi0gICAg
ICAgIG1vY2tfaGVhZGVyX2NvbnRlbnRzID0gWycnXQotICAgICAgICBtZXNzYWdlID0gc2VsZi5w
ZXJmb3JtX2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgImJs
YWgvYS5oIgotICAgICAgICAgICAgICAgc3RkOjpzZXQ8aW50PiBmb287JycnLAotICAgICAgICAg
ICAgZmlsZW5hbWU9J2JsYWgvYV9mbHltYWtlLmNjJywKLSAgICAgICAgICAgIGlvPU1vY2tJbyht
b2NrX2hlYWRlcl9jb250ZW50cykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lc3NhZ2Us
ICdBZGQgI2luY2x1ZGUgPHNldD4gZm9yIHNldDw+ICAnCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdbYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91c2VdIFs0XScpCi0KICAgICAg
ICAgIyBJZiB0aGVyZSdzIGp1c3QgYSBjYyBhbmQgdGhlIGhlYWRlciBjYW4ndCBiZSBmb3VuZCB0
aGVuIGl0J3Mgb2suCiAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLnBlcmZvcm1faW5jbHVkZV93aGF0
X3lvdV91c2UoCi0gICAgICAgICAgICAnJycjaW5jbHVkZSAiYmxhaC9hLmgiCisgICAgICAgICAg
ICAnJycjaW5jbHVkZSAiY29uZmlnLmgiCisgICAgICAgICAgICAgICAjaW5jbHVkZSAiYmxhaC9h
LmgiCisKICAgICAgICAgICAgICAgIHN0ZDo6c2V0PGludD4gZm9vOycnJywKICAgICAgICAgICAg
IGZpbGVuYW1lPSdibGFoL2EuY2MnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXNzYWdl
LCAnJykKQEAgLTYyNSw3ICs2MTAsOSBAQCBjbGFzcyBDcHBsaW50VGVzdChDcHBsaW50VGVzdEJh
c2UpOgogICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBmaW5kIHRoZSBoZWFkZXJzIHdpdGggcmVsYXRp
dmUgcGF0aHMuCiAgICAgICAgIG1vY2tfaGVhZGVyX2NvbnRlbnRzID0gWycnXQogICAgICAgICBt
ZXNzYWdlID0gc2VsZi5wZXJmb3JtX2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAg
JycnI2luY2x1ZGUgIiVzL2EuaCIKKyAgICAgICAgICAgICcnJyNpbmNsdWRlICJjb25maWcuaCIK
KyAgICAgICAgICAgICAgICNpbmNsdWRlICIlcy9hLmgiCisKICAgICAgICAgICAgICAgIHN0ZDo6
c2V0PGludD4gZm9vOycnJyAlIG9zLnBhdGguYmFzZW5hbWUob3MuZ2V0Y3dkKCkpLAogICAgICAg
ICAgICAgZmlsZW5hbWU9J2EuY2MnLAogICAgICAgICAgICAgaW89TW9ja0lvKG1vY2tfaGVhZGVy
X2NvbnRlbnRzKSkKQEAgLTg5MSwxMyArODc4LDYgQEAgY2xhc3MgQ3BwbGludFRlc3QoQ3BwbGlu
dFRlc3RCYXNlKToKICAgICAgICAgICAgICcgICAgbWVtc2V0KGJ1ZiwgMHhjZCwgMCknLAogICAg
ICAgICAgICAgJycpCiAKLSAgICBkZWYgdGVzdF9jaGVja19kZXByZWNhdGVkKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNjJywgJyNpbmNsdWRl
IDxpb3N0cmVhbT4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
U3RyZWFtcyBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLicKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L3N0cmVhbXNdIFszXScpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb29fdGVzdC5jYycsICcjaW5jbHVk
ZSA8aW9zdHJlYW0+JywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2No
ZWNrKCdmb29fdW5pdHRlc3QuY2MnLCAnI2luY2x1ZGUgPGlvc3RyZWFtPicsICcnKQotCiAgICAg
ZGVmIHRlc3RfY2hlY2tfcG9zaXhfdGhyZWFkaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KCdzY3RpbWVfcigpJywgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ3N0cnRv
a19yKCknLCAnJykKQEAgLTIwNjEsODEgKzIwNDEsMTQwIEBAIGNsYXNzIE9yZGVyT2ZJbmNsdWRl
c1Rlc3QoQ3BwbGludFRlc3RCYXNlKToKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAg
IG9zLnBhdGguYWJzcGF0aCA9IHNlbGYub3NfcGF0aF9hYnNwYXRoX29yaWcKIAotICAgIGRlZiB0
ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fb3RoZXJfdGhlbl9jcHAoc2VsZik6Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2lu
Y2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBjcHBsaW50Ll9PVEhFUl9IRUFERVIpKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBDKysgc3lzdGVtIGhlYWRlciBhZnRlciBvdGhlciBo
ZWFkZXInLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVj
a19uZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwcGxp
bnQuX0NQUF9TWVNfSEVBREVSKSkKLQotICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9v
cmRlcl9fY3BwX3RoZW5fYyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2Vs
Zi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNw
cGxpbnQuX0NQUF9TWVNfSEVBREVSKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm91bmQg
QyBzeXN0ZW0gaGVhZGVyIGFmdGVyIEMrKyBzeXN0ZW0gaGVhZGVyJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHBsaW50Ll9DX1NZU19IRUFERVIpKQotCi0g
ICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyX19saWtlbHlfdGhlbl9jcHAoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVj
a19uZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBjcHBsaW50Ll9MSUtFTFlfTVlfSEVB
REVSKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5pbmNsdWRlX3N0YXRlLmNo
ZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxpbnQuX0NQUF9TWVNfSEVB
REVSKSkKLQotICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fcG9zc2libGVf
dGhlbl9jcHAoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVk
ZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBjcHBsaW50Ll9Q
T1NTSUJMRV9NWV9IRUFERVIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLmlu
Y2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAotICAgICAgICAgICAgY3BwbGlu
dC5fQ1BQX1NZU19IRUFERVIpKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRlX29y
ZGVyX19jcHBfdGhlbl9saWtlbHkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycs
IHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAg
ICBjcHBsaW50Ll9DUFBfU1lTX0hFQURFUikpCi0gICAgICAgICMgVGhpcyB3aWxsIGV2ZW50dWFs
bHkgZmFpbC4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5pbmNsdWRlX3N0YXRl
LmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxpbnQuX0xJS0VMWV9N
WV9IRUFERVIpKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyX19jcHBf
dGhlbl9wb3NzaWJsZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5p
bmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxp
bnQuX0NQUF9TWVNfSEVBREVSKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5p
bmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxp
bnQuX1BPU1NJQkxFX01ZX0hFQURFUikpCisgICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNsdWRl
X29yZGVyX19ub19jb25maWcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlYWRl
ciBmaWxlIHNob3VsZCBub3QgY29udGFpbiBXZWJDb3JlIGNvbmZpZy5oLicsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRl
cihjcHBsaW50Ll9DT05GSUdfSEVBREVSLCBUcnVlKSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX25l
eHRfaW5jbHVkZV9vcmRlcl9fbm9fc2VsZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnSGVhZGVyIGZpbGUgc2hvdWxkIG5vdCBjb250YWluIGl0c2VsZi4nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIo
Y3BwbGludC5fUFJJTUFSWV9IRUFERVIsIFRydWUpKQorCisgICAgZGVmIHRlc3RfY2hlY2tfbmV4
dF9pbmNsdWRlX29yZGVyX19saWtlbHlfdGhlbl9jb25maWcoc2VsZik6CisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ0ZvdW5kIGhlYWRlciB0aGlzIGZpbGUgaW1wbGVtZW50cyBiZWZvcmUgV2Vi
Q29yZSBjb25maWcuaC4nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9z
dGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoY3BwbGludC5fUFJJTUFSWV9IRUFERVIsIEZh
bHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm91bmQgV2ViQ29yZSBjb25maWcuaCBh
ZnRlciBhIGhlYWRlciB0aGlzIGZpbGUgaW1wbGVtZW50cy4nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoY3BwbGlu
dC5fQ09ORklHX0hFQURFUiwgRmFsc2UpKQorCisgICAgZGVmIHRlc3RfY2hlY2tfbmV4dF9pbmNs
dWRlX29yZGVyX19vdGhlcl90aGVuX2NvbmZpZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnRm91bmQgb3RoZXIgaGVhZGVyIGJlZm9yZSBXZWJDb3JlIGNvbmZpZy5oLicsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVk
ZV9vcmRlcihjcHBsaW50Ll9PVEhFUl9IRUFERVIsIEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnRm91bmQgV2ViQ29yZSBjb25maWcuaCBhZnRlciBvdGhlciBoZWFkZXIuJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNs
dWRlX29yZGVyKGNwcGxpbnQuX0NPTkZJR19IRUFERVIsIEZhbHNlKSkKKworICAgIGRlZiB0ZXN0
X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fY29uZmlnX3RoZW5fb3RoZXJfdGhlbl9saWtlbHko
c2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVkZV9zdGF0ZS5j
aGVja19uZXh0X2luY2x1ZGVfb3JkZXIoY3BwbGludC5fQ09ORklHX0hFQURFUiwgRmFsc2UpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3VuZCBvdGhlciBoZWFkZXIgYmVmb3JlIGEgaGVh
ZGVyIHRoaXMgZmlsZSBpbXBsZW1lbnRzLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcihjcHBsaW50Ll9PVEhFUl9I
RUFERVIsIEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm91bmQgaGVhZGVyIHRo
aXMgZmlsZSBpbXBsZW1lbnRzIGFmdGVyIG90aGVyIGhlYWRlci4nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoY3Bw
bGludC5fUFJJTUFSWV9IRUFERVIsIEZhbHNlKSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX2FscGFi
ZXRpY2FsX2luY2x1ZGVfb3JkZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdl
X3J1bGVzX2NoZWNrKCdmb28uaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcjaW5jbHVkZSAiYS5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnI2luY2x1ZGUgImMuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJyNpbmNsdWRlICJiLmgiXG4nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnQWxwaGFiZXRpY2FsIHNvcnRpbmcgcHJvYmxlbS4gIFtidWls
ZC9pbmNsdWRlX29yZGVyXSBbNF0nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1
bGVzX2NoZWNrKCdmb28uaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiYS5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnI2luY2x1ZGUgImIuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJyNpbmNsdWRlICJjLmgiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnJykKKworICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxl
c19jaGVjaygnZm9vLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnI2luY2x1ZGUgPGFzc2VydC5oPlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnI2luY2x1ZGUgImJhci5oIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBzb3J0aW5nIHByb2JsZW0uICBbYnVpbGQv
aW5jbHVkZV9vcmRlcl0gWzRdJykKKworICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxl
c19jaGVjaygnZm9vLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnI2luY2x1ZGUgImJhci5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnI2luY2x1ZGUgPGFzc2VydC5oPlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJycpCisKKyAgICBkZWYgdGVzdF9jaGVja19saW5lX2JyZWFrX2Fm
dGVyX293bl9oZWFkZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVz
X2NoZWNrKCdmb28uY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJyNpbmNsdWRlICJmb28uaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJiYXIuaCJcbicsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdZb3Ugc2hvdWxkIGFkZCBhIGJsYW5rIGxpbmUgYWZ0
ZXIgaW1wbGVtZW50YXRpb24gZmlsZVwncyBvd24gaGVhZGVyLiAgW2J1aWxkL2luY2x1ZGVfb3Jk
ZXJdIFs0XScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zv
by5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1
ZGUgImNvbmZpZy5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnI2luY2x1ZGUgImZvby5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
aW5jbHVkZSAiYmFyLmgiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnJykKKworICAgIGRlZiB0ZXN0X2NoZWNrX3ByZXByb2Nlc3Nvcl9pbl9pbmNsdWRlX3Nl
Y3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdm
b28uY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlICJjb25maWcuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJmb28uaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2lmZGVmIEJBWlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2luY2x1ZGUgImJhei5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnI2Vsc2VcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyNpbmNsdWRlICJmb29iYXIuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJyNlbmRpZiJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJyNpbmNsdWRlICJiYXIuaCJcbicsICMgTm8gZmxhZyBiZWNhdXNlIHByZXZpb3VzIGlz
IGluIHByZXByb2Nlc3NvciBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNr
KCdmb28uY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNp
bmNsdWRlICJjb25maWcuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJyNpbmNsdWRlICJmb28uaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnI2lmZGVmIEJBWlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnI2luY2x1ZGUgImJhei5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnI2VuZGlmIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnI2luY2x1ZGUgImJhci5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnI2luY2x1ZGUgImEuaCJcbicsICMgU2hvdWxkIHN0aWxsIGZsYWcgdGhpcy4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBz
b3J0aW5nIHByb2JsZW0uICBbYnVpbGQvaW5jbHVkZV9vcmRlcl0gWzRdJykKKworICAgICAgICBz
ZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNwcCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiY29uZmlnLmgiXG4nCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiZm9vLmgiXG4n
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpZmRlZiBCQVpcbicKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJiYXouaCJcbicKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJiYXIuaCJc
bicgI1Nob3VsZCBzdGlsbCBmbGFnIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJyNlbmRpZiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdBbHBoYWJldGljYWwgc29ydGluZyBwcm9ibGVtLiAgW2J1aWxkL2luY2x1ZGVf
b3JkZXJdIFs0XScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2so
J2Zvby5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lu
Y2x1ZGUgImNvbmZpZy5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnI2luY2x1ZGUgImZvby5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcjaWZkZWYgQkFaXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcjaW5jbHVkZSAiYmF6LmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcjZW5kaWYiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaWZkZWYgRk9PQkFSXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcjaW5jbHVkZSAiZm9vYmFyLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICcjZW5kaWYiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICcjaW5jbHVkZSAiYmFyLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYS5oIlxuJywgIyBTaG91bGQgc3RpbGwgZmxh
ZyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWxwaGFi
ZXRpY2FsIHNvcnRpbmcgcHJvYmxlbS4gIFtidWlsZC9pbmNsdWRlX29yZGVyXSBbNF0nKQogCiAg
ICAgZGVmIHRlc3RfY2xhc3NpZnlfaW5jbHVkZShzZWxmKToKLSAgICAgICAgZmlsZV9pbmZvID0g
Y3BwbGludC5GaWxlSW5mbwogICAgICAgICBjbGFzc2lmeV9pbmNsdWRlID0gY3BwbGludC5fY2xh
c3NpZnlfaW5jbHVkZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNwcGxpbnQuX0NfU1lTX0hF
QURFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKGZpbGVfaW5m
bygnZm9vL2Zvby5jYycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3N0ZGlvLmgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHJ1ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BwbGludC5fQ1BQX1NZU19IRUFERVIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZShmaWxlX2luZm8oJ2Zv
by9mb28uY2MnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdz
dHJpbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BwbGludC5fQ1BQX1NZU19IRUFERVIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZShmaWxlX2luZm8oJ2Zvby9mb28u
Y2MnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlaW5m
bycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9PVEhFUl9IRUFERVIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZShmaWxlX2luZm8oJ2Zvby9mb28uY2MnKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnLAorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNwcGxpbnQuX0NPTkZJR19IRUFERVIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZSgnZm9vL2Zvby5jYycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnLmgnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UpKQotCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY3BwbGludC5fTElLRUxZX01ZX0hFQURFUiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzc2lmeV9pbmNsdWRlKGZpbGVfaW5mbygnZm9vL2Zvby5jYycpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvby9mb28taW5sLmgnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UpKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNwcGxpbnQuX0xJS0VMWV9NWV9IRUFERVIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZShmaWxlX2luZm8oJ2Zvby9pbnRlcm5hbC9mb28uY2Mn
KSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9QUklNQVJZX0hFQURFUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKCdmb28vaW50ZXJuYWwvZm9v
LmNjJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vcHVi
bGljL2Zvby5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZh
bHNlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9QT1NTSUJMRV9NWV9IRUFE
RVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZShmaWxlX2luZm8o
J2Zvby9pbnRlcm5hbC9mb28uY2MnKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50
Ll9QUklNQVJZX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNs
dWRlKCdmb28vaW50ZXJuYWwvZm9vLmNjJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdmb28vb3RoZXIvcHVibGljL2Zvby5oJywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjcHBsaW50Ll9PVEhFUl9IRUFERVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Np
ZnlfaW5jbHVkZShmaWxlX2luZm8oJ2Zvby9pbnRlcm5hbC9mb28uY2MnKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKCdmb28vaW50ZXJuYWwvZm9vLmNjJywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vb3RoZXIvcHVibGlj
L2Zvb3AuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxz
ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BwbGludC5fT1RIRVJfSEVBREVSLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoJ2Zvby9mb28uY2MnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKSkKIAogICAgIGRlZiB0ZXN0
X3RyeV9kcm9wX2NvbW1vbl9zdWZmaXhlcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnZm9vL2ZvbycsIGNwcGxpbnQuX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCdmb28vZm9vLWlubC5o
JykpCkBAIC0yMTQ4LDc3ICsyMTg3LDggQEAgY2xhc3MgT3JkZXJPZkluY2x1ZGVzVGVzdChDcHBs
aW50VGVzdEJhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgIGNwcGxpbnQuX2Ryb3BfY29t
bW9uX3N1ZmZpeGVzKCdfdGVzdC5jYycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXN0
JywKICAgICAgICAgICAgICAgICAgICAgICAgICBjcHBsaW50Ll9kcm9wX2NvbW1vbl9zdWZmaXhl
cygndGVzdC5jYycpKQotCi0gICAgZGVmIHRlc3RfcmVncmVzc2lvbihzZWxmKToKLSAgICAgICAg
ZGVmIGZvcm1hdChpbmNsdWRlcyk6Ci0gICAgICAgICAgICByZXR1cm4gJycuam9pbihbJyNpbmNs
dWRlICVzXG4nICUgaW5jbHVkZSBmb3IgaW5jbHVkZSBpbiBpbmNsdWRlc10pCi0KLSAgICAgICAg
IyBUZXN0IHNpbmdsZXRvbiBjYXNlcyBmaXJzdC4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3Vh
Z2VfcnVsZXNfY2hlY2soJ2Zvby9mb28uY2MnLCBmb3JtYXQoWyciZm9vL2Zvby5oIiddKSwgJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28vZm9vLmNjJywg
Zm9ybWF0KFsnPHN0ZGlvLmg+J10pLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2Vf
cnVsZXNfY2hlY2soJ2Zvby9mb28uY2MnLCBmb3JtYXQoWyc8c3RyaW5nPiddKSwgJycpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28vZm9vLmNjJywgZm9ybWF0
KFsnImZvby9mb28taW5sLmgiJ10pLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2Vf
cnVsZXNfY2hlY2soJ2Zvby9mb28uY2MnLCBmb3JtYXQoWyciYmFyL2Jhci1pbmwuaCInXSksICcn
KQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zvby5jYycs
IGZvcm1hdChbJyJiYXIvYmFyLmgiJ10pLCAnJykKLQotICAgICAgICAjIFRlc3QgZXZlcnl0aGlu
ZyBpbiBhIGdvb2QgYW5kIG5ldyBvcmRlci4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2Vf
cnVsZXNfY2hlY2soJ2Zvby9mb28uY2MnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3JtYXQoWyciZm9vL2Zvby5oIicsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJyJmb28vZm9vLWlubC5oIicsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdGRpby5oPicsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJpbmc+JywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnImJhci9i
YXItaW5sLmgiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnImJhci9iYXIuaCInXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcnKQotICAgICAgICAjIFRlc3QgZXZlcnl0aGluZyBpbiBhIGdvb2QgYnV0IHNsaWdo
dGx5IGRlcHJlY2F0ZWQgb3JkZXIuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVz
X2NoZWNrKCdmb28vZm9vLmNjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0KFsnImZvby9mb28uaCInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICc8c3RkaW8uaD4nLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3RyaW5nPicsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyJmb28vZm9vLWlubC5oIicsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyJiYXIvYmFyLWlu
bC5oIicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyJiYXIvYmFyLmgiJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnJykKLSAgICAgICAgIyBUZXN0IGV2ZXJ5dGhpbmcgaW4gYSBnb29kIGJ1dCBkZXByZWNhdGVk
IG9yZGVyLgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zv
by5jYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChb
JzxzdGRpby5oPicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJzxzdHJpbmc+JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnImZvby9mb28taW5sLmgiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnImJhci9iYXItaW5sLmgiJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnImZvby9mb28uaCInLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciYmFyL2Jhci5oIidd
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCi0KLSAgICAg
ICAgIyBUZXN0IGJhZCBvcmRlcnMuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVz
X2NoZWNrKAotICAgICAgICAgICAgJ2Zvby9mb28uY2MnLAotICAgICAgICAgICAgZm9ybWF0KFsn
PHN0cmluZz4nLCAnPHN0ZGlvLmg+J10pLAotICAgICAgICAgICAgJ0ZvdW5kIEMgc3lzdGVtIGhl
YWRlciBhZnRlciBDKysgc3lzdGVtIGhlYWRlci4nCi0gICAgICAgICAgICAnIFNob3VsZCBiZTog
Zm9vLmgsIGMgc3lzdGVtLCBjKysgc3lzdGVtLCBvdGhlci4nCi0gICAgICAgICAgICAnICBbYnVp
bGQvaW5jbHVkZV9vcmRlcl0gWzRdJykKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVs
ZXNfY2hlY2soCi0gICAgICAgICAgICAnZm9vL2Zvby5jYycsCi0gICAgICAgICAgICBmb3JtYXQo
WyciZm9vL2Jhci1pbmwuaCInLAotICAgICAgICAgICAgICAgICAgICAnImZvby9mb28taW5sLmgi
J10pLAotICAgICAgICAgICAgJycpCi0gICAgICAgICMgLWlubC5oIGhlYWRlcnMgYXJlIG5vIGxv
bmdlciBzcGVjaWFsLgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygn
Zm9vL2Zvby5jYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cm1hdChbJyJmb28vZm9vLWlubC5oIicsICc8c3RyaW5nPiddKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdl
X3J1bGVzX2NoZWNrKCdmb28vZm9vLmNjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0KFsnImZvby9iYXIuaCInLCAnImZvby9iYXItaW5sLmgiJ10pLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAgICAgIyBU
ZXN0IGNvbXBvbmVudGl6ZWQgaGVhZGVyLiAgT0sgdG8gaGF2ZSBteSBoZWFkZXIgaW4gLi4vcHVi
bGljIGRpci4KLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby9p
bnRlcm5hbC9mb28uY2MnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JtYXQoWyciZm9vL3B1YmxpYy9mb28uaCInLCAnPHN0cmluZz4nXSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotICAgICAgICAjIE9LIHRvIGhhdmUg
bXkgaGVhZGVyIGluIG90aGVyIGRpciAobm90IHN0eWxpc3RpY2FsbHksIGJ1dAotICAgICAgICAj
IGNwcGxpbnQgaXNuJ3QgYXMgZ29vZCBhcyBhIGh1bWFuKS4KLSAgICAgICAgc2VsZi5hc3NlcnRf
bGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby9pbnRlcm5hbC9mb28uY2MnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoWyciZm9vL290aGVyL3B1YmxpYy9m
b28uaCInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICc8c3RyaW5nPiddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JycpCi0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndGVzdCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgY3BwbGludC5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ3Rlc3QuY3BwJykpCiAKIGNs
YXNzIENoZWNrRm9yRnVuY3Rpb25MZW5ndGhzVGVzdChDcHBsaW50VGVzdEJhc2UpOgogICAgIGRl
ZiBzZXRVcChzZWxmKToKQEAgLTMwODMsMTAgKzMwNTMsNiBAQCBjbGFzcyBXZWJLaXRTdHlsZVRl
c3QoQ3BwbGludFRlc3RCYXNlKToKICAgICAgICAgIyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiAg
ICAgICAgIHBhc3MKIAotICAgIGRlZiB0ZXN0X2luY2x1ZGUoc2VsZik6Ci0gICAgICAgICMgRklY
TUU6IEltcGxlbWVudCB0aGlzLgotICAgICAgICBwYXNzCi0KIAogZGVmIHRlYXJEb3duKCk6CiAg
ICAgIiIiQSBnbG9iYWwgY2hlY2sgdG8gbWFrZSBzdXJlIGFsbCBlcnJvci1jYXRlZ29yaWVzIGhh
dmUgYmVlbiB0ZXN0ZWQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33191</attachid>
            <date>2009-07-21 11:09:02 -0700</date>
            <delta_ts>2009-07-21 11:11:53 -0700</delta_ts>
            <desc>New version that special cases &apos;FooCustom.cpp&apos;</desc>
            <filename>27462.patch</filename>
            <type>text/plain</type>
            <size>35909</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA4MTQwZDhkLi4xMDYwMTYzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMDct
MjAgIEFkYW0gVHJlYXQgIDxhZGFtLnRyZWF0QHRvcmNobW9iaWxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgY3BwbGludCBjaGVjayBm
b3IgcHJvcGVyIGluY2x1ZGUgb3JkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI3NDYyCisKKyAgICAgICAgQWRkIGEgbmV3IGNoZWNrIHRvIGNwcGxp
bnQgdG8gZmxhZyBjYXNlcyB3aGVyZSB0aGUgaW5jbHVkZSBzZWN0aW9uIG9mIGEgZmlsZQorICAg
ICAgICBkb2VzIG5vdCBtYXRjaCB0aGUgbWFuZGF0ZWQgaW5jbHVkZSBvcmRlciBhbmQgc3R5bGUg
b2YgdGhlIFdlYmtpdCBjb2Rpbmcgc3R5bGUKKyAgICAgICAgZ3VpZGVsaW5lcy4KKworICAgICAg
ICBBZGQgYXNzb2NpYXRlZCB0ZXN0cy4KKworICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jcHBs
aW50LnB5OgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9jcHBsaW50X3VuaXR0ZXN0LnB5Ogor
CiAyMDA5LTA3LTIwICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4K
IAogICAgICAgICBObyByZXZpZXcsIGp1c3QgYWRkaW5nIEdhdmluIEJhcnJhY2xvdWdoIGFzIHJl
dmlld2VyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnQu
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludC5weQppbmRleCA4OTk3NDQ0
Li4yYmNjMmExIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGlu
dC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludC5weQpAQCAtMjMy
LDExICsyMzIsOSBAQCBmb3Igb3AsIGludl9yZXBsYWNlbWVudCBpbiBbKCc9PScsICdORScpLCAo
JyE9JywgJ0VRJyksCiAKICMgVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0eXBlcyBvZiBoZWFkZXJz
IGZvciB1c2Ugd2l0aAogIyBfSW5jbHVkZVN0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigp
LgotX0NfU1lTX0hFQURFUiA9IDEKLV9DUFBfU1lTX0hFQURFUiA9IDIKLV9MSUtFTFlfTVlfSEVB
REVSID0gMwotX1BPU1NJQkxFX01ZX0hFQURFUiA9IDQKLV9PVEhFUl9IRUFERVIgPSA1CitfQ09O
RklHX0hFQURFUiA9IDAKK19QUklNQVJZX0hFQURFUiA9IDEKK19PVEhFUl9IRUFERVIgPSAyCiAK
IAogX3JlZ2V4cF9jb21waWxlX2NhY2hlID0ge30KQEAgLTI3MywzMSArMjcxLDI3IEBAIGNsYXNz
IF9JbmNsdWRlU3RhdGUoZGljdCk6CiAgICAgIyBzZWxmLl9zZWN0aW9uIHdpbGwgbW92ZSBtb25v
dG9uaWNhbGx5IHRocm91Z2ggdGhpcyBzZXQuIElmIGl0IGV2ZXIKICAgICAjIG5lZWRzIHRvIG1v
dmUgYmFja3dhcmRzLCBjaGVja19uZXh0X2luY2x1ZGVfb3JkZXIgd2lsbCByYWlzZSBhbiBlcnJv
ci4KICAgICBfSU5JVElBTF9TRUNUSU9OID0gMAotICAgIF9NWV9IX1NFQ1RJT04gPSAxCi0gICAg
X0NfU0VDVElPTiA9IDIKLSAgICBfQ1BQX1NFQ1RJT04gPSAzCi0gICAgX09USEVSX0hfU0VDVElP
TiA9IDQKKyAgICBfQ09ORklHX1NFQ1RJT04gPSAxCisgICAgX1BSSU1BUllfU0VDVElPTiA9IDIK
KyAgICBfT1RIRVJfU0VDVElPTiA9IDMKIAogICAgIF9UWVBFX05BTUVTID0gewotICAgICAgICBf
Q19TWVNfSEVBREVSOiAnQyBzeXN0ZW0gaGVhZGVyJywKLSAgICAgICAgX0NQUF9TWVNfSEVBREVS
OiAnQysrIHN5c3RlbSBoZWFkZXInLAotICAgICAgICBfTElLRUxZX01ZX0hFQURFUjogJ2hlYWRl
ciB0aGlzIGZpbGUgaW1wbGVtZW50cycsCi0gICAgICAgIF9QT1NTSUJMRV9NWV9IRUFERVI6ICdo
ZWFkZXIgdGhpcyBmaWxlIG1heSBpbXBsZW1lbnQnLAorICAgICAgICBfQ09ORklHX0hFQURFUjog
J1dlYkNvcmUgY29uZmlnLmgnLAorICAgICAgICBfUFJJTUFSWV9IRUFERVI6ICdoZWFkZXIgdGhp
cyBmaWxlIGltcGxlbWVudHMnLAogICAgICAgICBfT1RIRVJfSEVBREVSOiAnb3RoZXIgaGVhZGVy
JywKICAgICAgICAgfQogICAgIF9TRUNUSU9OX05BTUVTID0gewotICAgICAgICBfSU5JVElBTF9T
RUNUSU9OOiAiLi4uIG5vdGhpbmcuIChUaGlzIGNhbid0IGJlIGFuIGVycm9yLikiLAotICAgICAg
ICBfTVlfSF9TRUNUSU9OOiAnYSBoZWFkZXIgdGhpcyBmaWxlIGltcGxlbWVudHMnLAotICAgICAg
ICBfQ19TRUNUSU9OOiAnQyBzeXN0ZW0gaGVhZGVyJywKLSAgICAgICAgX0NQUF9TRUNUSU9OOiAn
QysrIHN5c3RlbSBoZWFkZXInLAotICAgICAgICBfT1RIRVJfSF9TRUNUSU9OOiAnb3RoZXIgaGVh
ZGVyJywKKyAgICAgICAgX0lOSVRJQUxfU0VDVElPTjogIi4uLiBub3RoaW5nLiIsCisgICAgICAg
IF9DT05GSUdfU0VDVElPTjogIldlYkNvcmUgY29uZmlnLmguIiwKKyAgICAgICAgX1BSSU1BUllf
U0VDVElPTjogJ2EgaGVhZGVyIHRoaXMgZmlsZSBpbXBsZW1lbnRzLicsCisgICAgICAgIF9PVEhF
Ul9TRUNUSU9OOiAnb3RoZXIgaGVhZGVyLicsCiAgICAgICAgIH0KIAogICAgIGRlZiBfX2luaXRf
XyhzZWxmKToKICAgICAgICAgZGljdC5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLl9zZWN0
aW9uID0gc2VsZi5fSU5JVElBTF9TRUNUSU9OCiAKLSAgICBkZWYgY2hlY2tfbmV4dF9pbmNsdWRl
X29yZGVyKHNlbGYsIGhlYWRlcl90eXBlKToKKyAgICBkZWYgY2hlY2tfbmV4dF9pbmNsdWRlX29y
ZGVyKHNlbGYsIGhlYWRlcl90eXBlLCBmaWxlX2lzX2hlYWRlcik6CiAgICAgICAgICIiIlJldHVy
bnMgYSBub24tZW1wdHkgZXJyb3IgbWVzc2FnZSBpZiB0aGUgbmV4dCBoZWFkZXIgaXMgb3V0IG9m
IG9yZGVyLgogCiAgICAgICAgIFRoaXMgZnVuY3Rpb24gYWxzbyB1cGRhdGVzIHRoZSBpbnRlcm5h
bCBzdGF0ZSB0byBiZSByZWFkeSB0byBjaGVjawpAQCAtMzA1LDQ0ICsyOTksNDQgQEAgY2xhc3Mg
X0luY2x1ZGVTdGF0ZShkaWN0KToKIAogICAgICAgICBBcmdzOgogICAgICAgICAgIGhlYWRlcl90
eXBlOiBPbmUgb2YgdGhlIF9YWFhfSEVBREVSIGNvbnN0YW50cyBkZWZpbmVkIGFib3ZlLgorICAg
ICAgICAgIGZpbGVfaXNfaGVhZGVyOiBXaGV0aGVyIHRoZSBmaWxlIHRoYXQgb3ducyB0aGlzIF9J
bmNsdWRlU3RhdGUgaXMgaXRzZWxmIGEgaGVhZGVyCiAKICAgICAgICAgUmV0dXJuczoKICAgICAg
ICAgICBUaGUgZW1wdHkgc3RyaW5nIGlmIHRoZSBoZWFkZXIgaXMgaW4gdGhlIHJpZ2h0IG9yZGVy
LCBvciBhbgogICAgICAgICAgIGVycm9yIG1lc3NhZ2UgZGVzY3JpYmluZyB3aGF0J3Mgd3Jvbmcu
CiAKICAgICAgICAgIiIiCi0gICAgICAgICMgRklYTUU6IFRoaXMgaXNuJ3QgV2ViS2l0J3MgcnVs
ZS4gV2UgYXJlIGp1c3QgZGlzYWJsaW5nIHRoaXMgZm9yIG5vdy4KLSAgICAgICAgZXJyb3JfbWVz
c2FnZSA9ICgnRm91bmQgJXMgYWZ0ZXIgJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAo
c2VsZi5fVFlQRV9OQU1FU1toZWFkZXJfdHlwZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX1NFQ1RJT05fTkFNRVNbc2VsZi5fc2VjdGlvbl0pKQotCi0gICAgICAgIGlmIGhlYWRl
cl90eXBlID09IF9DX1NZU19IRUFERVI6Ci0gICAgICAgICAgICBpZiBzZWxmLl9zZWN0aW9uIDw9
IHNlbGYuX0NfU0VDVElPTjoKLSAgICAgICAgICAgICAgICBzZWxmLl9zZWN0aW9uID0gc2VsZi5f
Q19TRUNUSU9OCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cl9tZXNzYWdlCi0gICAgICAgIGVsaWYgaGVhZGVyX3R5cGUgPT0gX0NQUF9TWVNfSEVBREVSOgot
ICAgICAgICAgICAgaWYgc2VsZi5fc2VjdGlvbiA8PSBzZWxmLl9DUFBfU0VDVElPTjoKLSAgICAg
ICAgICAgICAgICBzZWxmLl9zZWN0aW9uID0gc2VsZi5fQ1BQX1NFQ1RJT04KLSAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yX21lc3NhZ2UKLSAgICAgICAgZWxp
ZiBoZWFkZXJfdHlwZSA9PSBfTElLRUxZX01ZX0hFQURFUjoKLSAgICAgICAgICAgIGlmIHNlbGYu
X3NlY3Rpb24gPD0gc2VsZi5fTVlfSF9TRUNUSU9OOgotICAgICAgICAgICAgICAgIHNlbGYuX3Nl
Y3Rpb24gPSBzZWxmLl9NWV9IX1NFQ1RJT04KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fc2VjdGlvbiA9IHNlbGYuX09USEVSX0hfU0VDVElPTgotICAgICAgICBlbGlm
IGhlYWRlcl90eXBlID09IF9QT1NTSUJMRV9NWV9IRUFERVI6Ci0gICAgICAgICAgICBpZiBzZWxm
Ll9zZWN0aW9uIDw9IHNlbGYuX01ZX0hfU0VDVElPTjoKLSAgICAgICAgICAgICAgICBzZWxmLl9z
ZWN0aW9uID0gc2VsZi5fTVlfSF9TRUNUSU9OCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgICMgVGhpcyB3aWxsIGFsd2F5cyBiZSB0aGUgZmFsbGJhY2sgYmVjYXVzZSB3ZSdyZSBu
b3Qgc3VyZQotICAgICAgICAgICAgICAgICMgZW5vdWdoIHRoYXQgdGhlIGhlYWRlciBpcyBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBmaWxlLgotICAgICAgICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBz
ZWxmLl9PVEhFUl9IX1NFQ1RJT04KKyAgICAgICAgaWYgaGVhZGVyX3R5cGUgPT0gX0NPTkZJR19I
RUFERVIgYW5kIGZpbGVfaXNfaGVhZGVyOgorICAgICAgICAgICAgcmV0dXJuICdIZWFkZXIgZmls
ZSBzaG91bGQgbm90IGNvbnRhaW4gV2ViQ29yZSBjb25maWcuaC4nCisgICAgICAgIGlmIGhlYWRl
cl90eXBlID09IF9QUklNQVJZX0hFQURFUiBhbmQgZmlsZV9pc19oZWFkZXI6CisgICAgICAgICAg
ICByZXR1cm4gJ0hlYWRlciBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHNlbGYuJworCisgICAg
ICAgIGVycm9yX21lc3NhZ2UgPSAnJworICAgICAgICBpZiBzZWxmLl9zZWN0aW9uICE9IHNlbGYu
X09USEVSX1NFQ1RJT046CisgICAgICAgICAgICBiZWZvcmVfZXJyb3JfbWVzc2FnZSA9ICgnRm91
bmQgJXMgYmVmb3JlICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c2VsZi5fVFlQRV9OQU1FU1toZWFkZXJfdHlwZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fU0VDVElPTl9OQU1FU1tzZWxmLl9zZWN0aW9uICsgMV0pKQorICAg
ICAgICBhZnRlcl9lcnJvcl9tZXNzYWdlID0gKCdGb3VuZCAlcyBhZnRlciAlcycgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fVFlQRV9OQU1FU1toZWFkZXJfdHlwZV0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9TRUNUSU9OX05BTUVTW3Nl
bGYuX3NlY3Rpb25dKSkKKworICAgICAgICBpZiBoZWFkZXJfdHlwZSA9PSBfQ09ORklHX0hFQURF
UjoKKyAgICAgICAgICAgIGlmIHNlbGYuX3NlY3Rpb24gPj0gc2VsZi5fQ09ORklHX1NFQ1RJT046
CisgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9IGFmdGVyX2Vycm9yX21lc3NhZ2UKKyAg
ICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBzZWxmLl9DT05GSUdfU0VDVElPTgorICAgICAgICBl
bGlmIGhlYWRlcl90eXBlID09IF9QUklNQVJZX0hFQURFUjoKKyAgICAgICAgICAgIGlmIHNlbGYu
X3NlY3Rpb24gPj0gc2VsZi5fUFJJTUFSWV9TRUNUSU9OOgorICAgICAgICAgICAgICAgIGVycm9y
X21lc3NhZ2UgPSBhZnRlcl9lcnJvcl9tZXNzYWdlCisgICAgICAgICAgICBlbGlmIHNlbGYuX3Nl
Y3Rpb24gPCBzZWxmLl9DT05GSUdfU0VDVElPTjoKKyAgICAgICAgICAgICAgICBlcnJvcl9tZXNz
YWdlID0gYmVmb3JlX2Vycm9yX21lc3NhZ2UKKyAgICAgICAgICAgIHNlbGYuX3NlY3Rpb24gPSBz
ZWxmLl9QUklNQVJZX1NFQ1RJT04KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFzc2VydCBo
ZWFkZXJfdHlwZSA9PSBfT1RIRVJfSEVBREVSCi0gICAgICAgICAgICBzZWxmLl9zZWN0aW9uID0g
c2VsZi5fT1RIRVJfSF9TRUNUSU9OCisgICAgICAgICAgICBpZiBub3QgZmlsZV9pc19oZWFkZXIg
YW5kIHNlbGYuX3NlY3Rpb24gPCBzZWxmLl9QUklNQVJZX1NFQ1RJT046CisgICAgICAgICAgICAg
ICAgZXJyb3JfbWVzc2FnZSA9IGJlZm9yZV9lcnJvcl9tZXNzYWdlCisgICAgICAgICAgICBzZWxm
Ll9zZWN0aW9uID0gc2VsZi5fT1RIRVJfU0VDVElPTgogCi0gICAgICAgIHJldHVybiAnJworICAg
ICAgICByZXR1cm4gZXJyb3JfbWVzc2FnZQogCiAKIGNsYXNzIF9DcHBMaW50U3RhdGUob2JqZWN0
KToKQEAgLTE5NzIsMTEgKzE5NjYsMTEgQEAgZGVmIF9pc190ZXN0X2ZpbGVuYW1lKGZpbGVuYW1l
KToKICAgICByZXR1cm4gRmFsc2UKIAogCi1kZWYgX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZWluZm8s
IGluY2x1ZGUsIGlzX3N5c3RlbSk6CitkZWYgX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZW5hbWUsIGlu
Y2x1ZGUsIGlzX3N5c3RlbSk6CiAgICAgIiIiRmlndXJlcyBvdXQgd2hhdCBraW5kIG9mIGhlYWRl
ciAnaW5jbHVkZScgaXMuCiAKICAgICBBcmdzOgotICAgICAgZmlsZWluZm86IFRoZSBjdXJyZW50
IGZpbGUgY3BwbGludCBpcyBydW5uaW5nIG92ZXIuIEEgRmlsZUluZm8gaW5zdGFuY2UuCisgICAg
ICBmaWxlbmFtZTogVGhlIGN1cnJlbnQgZmlsZSBjcHBsaW50IGlzIHJ1bm5pbmcgb3Zlci4KICAg
ICAgIGluY2x1ZGU6IFRoZSBwYXRoIHRvIGEgI2luY2x1ZGVkIGZpbGUuCiAgICAgICBpc19zeXN0
ZW06IFRydWUgaWYgdGhlICNpbmNsdWRlIHVzZWQgPD4gcmF0aGVyIHRoYW4gIiIuCiAKQEAgLTE5
ODQsNDggKzE5NzgsMzUgQEAgZGVmIF9jbGFzc2lmeV9pbmNsdWRlKGZpbGVpbmZvLCBpbmNsdWRl
LCBpc19zeXN0ZW0pOgogICAgICAgT25lIG9mIHRoZSBfWFhYX0hFQURFUiBjb25zdGFudHMuCiAK
ICAgICBGb3IgZXhhbXBsZToKLSAgICAgID4+PiBfY2xhc3NpZnlfaW5jbHVkZShGaWxlSW5mbygn
Zm9vL2Zvby5jYycpLCAnc3RkaW8uaCcsIFRydWUpCi0gICAgICBfQ19TWVNfSEVBREVSCi0gICAg
ICA+Pj4gX2NsYXNzaWZ5X2luY2x1ZGUoRmlsZUluZm8oJ2Zvby9mb28uY2MnKSwgJ3N0cmluZycs
IFRydWUpCi0gICAgICBfQ1BQX1NZU19IRUFERVIKLSAgICAgID4+PiBfY2xhc3NpZnlfaW5jbHVk
ZShGaWxlSW5mbygnZm9vL2Zvby5jYycpLCAnZm9vL2Zvby5oJywgRmFsc2UpCi0gICAgICBfTElL
RUxZX01ZX0hFQURFUgotICAgICAgPj4+IF9jbGFzc2lmeV9pbmNsdWRlKEZpbGVJbmZvKCdmb28v
Zm9vX3Vua25vd25fZXh0ZW5zaW9uLmNjJyksCi0gICAgICAuLi4gICAgICAgICAgICAgICAgICAn
YmFyL2Zvb19vdGhlcl9leHQuaCcsIEZhbHNlKQotICAgICAgX1BPU1NJQkxFX01ZX0hFQURFUgot
ICAgICAgPj4+IF9jbGFzc2lmeV9pbmNsdWRlKEZpbGVJbmZvKCdmb28vZm9vLmNjJyksICdmb28v
YmFyLmgnLCBGYWxzZSkKKyAgICAgID4+PiBfY2xhc3NpZnlfaW5jbHVkZSgnZm9vLmNwcCcsICdj
b25maWcuaCcsIEZhbHNlKQorICAgICAgX0NPTkZJR19IRUFERVIKKyAgICAgID4+PiBfY2xhc3Np
ZnlfaW5jbHVkZSgnZm9vLmNwcCcsICdmb28uaCcsIEZhbHNlKQorICAgICAgX1BSSU1BUllfSEVB
REVSCisgICAgICA+Pj4gX2NsYXNzaWZ5X2luY2x1ZGUoJ2Zvby5jcHAnLCAnYmFyLmgnLCBGYWxz
ZSkKICAgICAgIF9PVEhFUl9IRUFERVIKICAgICAiIiIKLSAgICAjIFRoaXMgaXMgYSBsaXN0IG9m
IGFsbCBzdGFuZGFyZCBjKysgaGVhZGVyIGZpbGVzLCBleGNlcHQKLSAgICAjIHRob3NlIGFscmVh
ZHkgY2hlY2tlZCBmb3IgYWJvdmUuCi0gICAgaXNfc3RsX2ggPSBpbmNsdWRlIGluIF9TVExfSEVB
REVSUwotICAgIGlzX2NwcF9oID0gaXNfc3RsX2ggb3IgaW5jbHVkZSBpbiBfQ1BQX0hFQURFUlMK
IAorICAgICMgSWYgaXQgaXMgYSBzeXN0ZW0gaGVhZGVyIHdlIGtub3cgaXQgaXMgY2xhc3NpZmll
ZCBhcyBfT1RIRVJfSEVBREVSLgogICAgIGlmIGlzX3N5c3RlbToKLSAgICAgICAgaWYgaXNfY3Bw
X2g6Ci0gICAgICAgICAgICByZXR1cm4gX0NQUF9TWVNfSEVBREVSCi0gICAgICAgIHJldHVybiBf
Q19TWVNfSEVBREVSCisgICAgICAgIHJldHVybiBfT1RIRVJfSEVBREVSCisKKyAgICAjIElmIHRo
ZSBpbmNsdWRlIGlzIG5hbWVkIGNvbmZpZy5oIHRoZW4gdGhpcyBpcyBXZWJDb3JlL2NvbmZpZy5o
LgorICAgIGlmIGluY2x1ZGUgPT0gImNvbmZpZy5oIjoKKyAgICAgICAgcmV0dXJuIF9DT05GSUdf
SEVBREVSCiAKICAgICAjIElmIHRoZSB0YXJnZXQgZmlsZSBhbmQgdGhlIGluY2x1ZGUgd2UncmUg
Y2hlY2tpbmcgc2hhcmUgYQotICAgICMgYmFzZW5hbWUgd2hlbiB3ZSBkcm9wIGNvbW1vbiBleHRl
bnNpb25zLCBhbmQgdGhlIGluY2x1ZGUKLSAgICAjIGxpdmVzIGluIC4gLCB0aGVuIGl0J3MgbGlr
ZWx5IHRvIGJlIG93bmVkIGJ5IHRoZSB0YXJnZXQgZmlsZS4KLSAgICB0YXJnZXRfZGlyLCB0YXJn
ZXRfYmFzZSA9ICgKLSAgICAgICAgb3MucGF0aC5zcGxpdChfZHJvcF9jb21tb25fc3VmZml4ZXMo
ZmlsZWluZm8ucmVwb3NpdG9yeV9uYW1lKCkpKSkKLSAgICBpbmNsdWRlX2RpciwgaW5jbHVkZV9i
YXNlID0gb3MucGF0aC5zcGxpdChfZHJvcF9jb21tb25fc3VmZml4ZXMoaW5jbHVkZSkpCi0gICAg
aWYgKHRhcmdldF9iYXNlID09IGluY2x1ZGVfYmFzZQotICAgICAgICBhbmQgKGluY2x1ZGVfZGly
ID09IHRhcmdldF9kaXIKLSAgICAgICAgICAgICBvciBpbmNsdWRlX2RpciA9PSBvcy5wYXRoLm5v
cm1wYXRoKHRhcmdldF9kaXIgKyAnLy4uL3B1YmxpYycpKSk6Ci0gICAgICAgIHJldHVybiBfTElL
RUxZX01ZX0hFQURFUgotCi0gICAgIyBJZiB0aGUgdGFyZ2V0IGFuZCBpbmNsdWRlIHNoYXJlIHNv
bWUgaW5pdGlhbCBiYXNlbmFtZQotICAgICMgY29tcG9uZW50LCBpdCdzIHBvc3NpYmxlIHRoZSB0
YXJnZXQgaXMgaW1wbGVtZW50aW5nIHRoZQotICAgICMgaW5jbHVkZSwgc28gaXQncyBhbGxvd2Vk
IHRvIGJlIGZpcnN0LCBidXQgd2UnbGwgbmV2ZXIKLSAgICAjIGNvbXBsYWluIGlmIGl0J3Mgbm90
IHRoZXJlLgotICAgIHRhcmdldF9maXJzdF9jb21wb25lbnQgPSBfUkVfRklSU1RfQ09NUE9ORU5U
Lm1hdGNoKHRhcmdldF9iYXNlKQotICAgIGluY2x1ZGVfZmlyc3RfY29tcG9uZW50ID0gX1JFX0ZJ
UlNUX0NPTVBPTkVOVC5tYXRjaChpbmNsdWRlX2Jhc2UpCi0gICAgaWYgKHRhcmdldF9maXJzdF9j
b21wb25lbnQgYW5kIGluY2x1ZGVfZmlyc3RfY29tcG9uZW50Ci0gICAgICAgIGFuZCB0YXJnZXRf
Zmlyc3RfY29tcG9uZW50Lmdyb3VwKDApID09IGluY2x1ZGVfZmlyc3RfY29tcG9uZW50Lmdyb3Vw
KDApKToKLSAgICAgICAgcmV0dXJuIF9QT1NTSUJMRV9NWV9IRUFERVIKKyAgICAjIGJhc2VuYW1l
IHRoZW4gd2UgY29uc2lkZXIgaXQgdGhlIHByaW1hcnkgaGVhZGVyLgorICAgIHRhcmdldF9iYXNl
ID0gRmlsZUluZm8oZmlsZW5hbWUpLmJhc2VfbmFtZSgpCisgICAgaW5jbHVkZV9iYXNlID0gRmls
ZUluZm8oaW5jbHVkZSkuYmFzZV9uYW1lKCkKKworICAgICMgQXMgYSBzcGVjaWFsIGNhc2UsIGlm
IHRoZSB0YXJnZXRfYmFzZSBlbmRzIHdpdGggJ0N1c3RvbScgd2UgcmVtb3ZlIHRoaXMKKyAgICAj
IHdoZW4gY29uc2lkZXJpbmcgdGhlIG1hdGNoLiAgVGh1cywgRm9vQ3VzdG9tLmNwcCB3aWxsIGNv
bnNpZGVyIEZvby5oIGFzCisgICAgIyBhIHByaW1hcnkgaGVhZGVyLiAgVGhpcyBpcyBmb3IgZmls
ZXMgaW4gV2ViQ29yZS9iaW5kaW5ncy9qcyBmb3IgaW5zdGFuY2UuCisgICAgaWYgdGFyZ2V0X2Jh
c2UuZW5kc3dpdGgoJ0N1c3RvbScpOgorICAgICAgIHRhcmdldF9iYXNlID0gdGFyZ2V0X2Jhc2Vb
Oi1sZW4oJ0N1c3RvbScpXQorCisgICAgaWYgdGFyZ2V0X2Jhc2UgPT0gaW5jbHVkZV9iYXNlOgor
ICAgICAgICByZXR1cm4gX1BSSU1BUllfSEVBREVSCiAKICAgICByZXR1cm4gX09USEVSX0hFQURF
UgogCkBAIC0yMDQ1LDE1ICsyMDI2LDkgQEAgZGVmIGNoZWNrX2luY2x1ZGVfbGluZShmaWxlbmFt
ZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBpbmNsdWRlX3N0YXRlLCBlcnJvcikKICAgICAg
IGluY2x1ZGVfc3RhdGU6IEFuIF9JbmNsdWRlU3RhdGUgaW5zdGFuY2UgaW4gd2hpY2ggdGhlIGhl
YWRlcnMgYXJlIGluc2VydGVkLgogICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdp
dGggYW55IGVycm9ycyBmb3VuZC4KICAgICAiIiIKLSAgICBmaWxlaW5mbyA9IEZpbGVJbmZvKGZp
bGVuYW1lKQogCiAgICAgbGluZSA9IGNsZWFuX2xpbmVzLmxpbmVzW2xpbmVfbnVtYmVyXQogCi0g
ICAgIyMgImluY2x1ZGUiIHNob3VsZCB1c2UgdGhlIG5ldyBzdHlsZSAiZm9vL2Jhci5oIiBpbnN0
ZWFkIG9mIGp1c3QgImJhci5oIgotICAgICNpZiBfUkVfUEFUVEVSTl9JTkNMVURFX05FV19TVFlM
RS5zZWFyY2gobGluZSk6Ci0gICAgIyAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnYnVp
bGQvaW5jbHVkZScsIDQsCi0gICAgIyAgICAgICAgJ0luY2x1ZGUgdGhlIGRpcmVjdG9yeSB3aGVu
IG5hbWluZyAuaCBmaWxlcycpCi0KICAgICAjIHdlIHNob3VsZG4ndCBpbmNsdWRlIGEgZmlsZSBt
b3JlIHRoYW4gb25jZS4gYWN0dWFsbHksIHRoZXJlIGFyZSBhCiAgICAgIyBoYW5kZnVsIG9mIGlu
c3RhbmNlcyB3aGVyZSBkb2luZyBzbyBpcyBva2F5LCBidXQgaW4gZ2VuZXJhbCBpdCdzCiAgICAg
IyBub3QuCkBAIC0yMDY5LDIyICsyMDQ0LDUwIEBAIGRlZiBjaGVja19pbmNsdWRlX2xpbmUoZmls
ZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgaW5jbHVkZV9zdGF0ZSwgZXJyb3IpCiAg
ICAgICAgICAgICBpbmNsdWRlX3N0YXRlW2luY2x1ZGVdID0gbGluZV9udW1iZXIKIAogICAgICAg
ICAgICAgIyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGhlYWRlcnMgYXBwZWFyIGluIHRoZSByaWdo
dCBvcmRlcjoKLSAgICAgICAgICAgICMgMSkgZm9yIGZvby5jYywgZm9vLmggIChwcmVmZXJyZWQg
bG9jYXRpb24pCi0gICAgICAgICAgICAjIDIpIGMgc3lzdGVtIGZpbGVzCi0gICAgICAgICAgICAj
IDMpIGNwcCBzeXN0ZW0gZmlsZXMKLSAgICAgICAgICAgICMgNCkgZm9yIGZvby5jYywgZm9vLmgg
IChkZXByZWNhdGVkIGxvY2F0aW9uKQotICAgICAgICAgICAgIyA1KSBvdGhlciBnb29nbGUgaGVh
ZGVycworICAgICAgICAgICAgIyAxKSBmb3IgaW1wbGVtZW50YXRpb24gZmlsZXM6IGNvbmZpZy5o
LCBwcmltYXJ5IGhlYWRlciwgYmxhbmsgbGluZSwgYWxwaGFiZXRpY2FsbHkgc29ydGVkCisgICAg
ICAgICAgICAjIDIpIGZvciBoZWFkZXIgZmlsZXM6IGFscGhhYmV0aWNhbGx5IHNvcnRlZAogICAg
ICAgICAgICAgIwotICAgICAgICAgICAgIyBXZSBjbGFzc2lmeSBlYWNoIGluY2x1ZGUgc3RhdGVt
ZW50IGFzIG9uZSBvZiB0aG9zZSA1IHR5cGVzCisgICAgICAgICAgICAjIFdlIGNsYXNzaWZ5IGVh
Y2ggaW5jbHVkZSBzdGF0ZW1lbnQgYXMgb25lIG9mIDQgdHlwZXMKICAgICAgICAgICAgICMgdXNp
bmcgYSBudW1iZXIgb2YgdGVjaG5pcXVlcy4gVGhlIGluY2x1ZGVfc3RhdGUgb2JqZWN0IGtlZXBz
CiAgICAgICAgICAgICAjIHRyYWNrIG9mIHRoZSBoaWdoZXN0IHR5cGUgc2VlbiwgYW5kIGNvbXBs
YWlucyBpZiB3ZSBzZWUgYQogICAgICAgICAgICAgIyBsb3dlciB0eXBlIGFmdGVyIHRoYXQuCi0g
ICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1
ZGVfb3JkZXIoCi0gICAgICAgICAgICAgICAgX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZWluZm8sIGlu
Y2x1ZGUsIGlzX3N5c3RlbSkpCisgICAgICAgICAgICBoZWFkZXJfdHlwZSA9IF9jbGFzc2lmeV9p
bmNsdWRlKGZpbGVuYW1lLCBpbmNsdWRlLCBpc19zeXN0ZW0pCisgICAgICAgICAgICBlcnJvcl9t
ZXNzYWdlID0gaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoaGVhZGVyX3R5
cGUsIGZpbGVuYW1lLmVuZHN3aXRoKCcuaCcpKQorCisgICAgICAgICAgICAjIENoZWNrIHRvIG1h
a2Ugc3VyZSB3ZSBoYXZlIGEgYmxhbmsgbGluZSBhZnRlciBwcmltYXJ5IGhlYWRlci4KKyAgICAg
ICAgICAgIGlmIG5vdCBlcnJvcl9tZXNzYWdlIGFuZCBoZWFkZXJfdHlwZSA9PSBfUFJJTUFSWV9I
RUFERVI6CisgICAgICAgICAgICAgICAgIG5leHRfbGluZSA9IGNsZWFuX2xpbmVzLnJhd19saW5l
c1tsaW5lX251bWJlciArIDFdCisgICAgICAgICAgICAgICAgIGlmIG5vdCBpc19ibGFua19saW5l
KG5leHRfbGluZSk6CisgICAgICAgICAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251
bWJlciwgJ2J1aWxkL2luY2x1ZGVfb3JkZXInLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAnWW91IHNob3VsZCBhZGQgYSBibGFuayBsaW5lIGFmdGVyIGltcGxlbWVudGF0aW9uIGZpbGVc
J3Mgb3duIGhlYWRlci4nKQorCisgICAgICAgICAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSBhbGwg
aGVhZGVycyBiZXNpZGVzIGNvbmZpZy5oIGFuZCB0aGUgcHJpbWFyeSBoZWFkZXIgYXJlCisgICAg
ICAgICAgICAjIGFscGhhYmV0aWNhbGx5IHNvcnRlZC4KKyAgICAgICAgICAgIGlmIG5vdCBlcnJv
cl9tZXNzYWdlIGFuZCBoZWFkZXJfdHlwZSA9PSBfT1RIRVJfSEVBREVSOgorICAgICAgICAgICAg
ICAgICBwcmV2aW91c19saW5lX251bWJlciA9IGxpbmVfbnVtYmVyIC0gMTsKKyAgICAgICAgICAg
ICAgICAgcHJldmlvdXNfbGluZSA9IGNsZWFuX2xpbmVzLmxpbmVzW3ByZXZpb3VzX2xpbmVfbnVt
YmVyXQorICAgICAgICAgICAgICAgICBwcmV2aW91c19tYXRjaCA9IF9SRV9QQVRURVJOX0lOQ0xV
REUuc2VhcmNoKHByZXZpb3VzX2xpbmUpCisgICAgICAgICAgICAgICAgIHdoaWxlIChub3QgcHJl
dmlvdXNfbWF0Y2ggYW5kIHByZXZpb3VzX2xpbmVfbnVtYmVyID4gMAorICAgICAgICAgICAgICAg
ICAgICAgICAgYW5kIG5vdCBzZWFyY2gocidcQSgjaWZ8I2lmZGVmfCNpZm5kZWZ8I2Vsc2V8I2Vs
aWZ8I2VuZGlmKScsIHByZXZpb3VzX2xpbmUpKToKKyAgICAgICAgICAgICAgICAgICAgcHJldmlv
dXNfbGluZV9udW1iZXIgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfbGluZSA9
IGNsZWFuX2xpbmVzLmxpbmVzW3ByZXZpb3VzX2xpbmVfbnVtYmVyXQorICAgICAgICAgICAgICAg
ICAgICBwcmV2aW91c19tYXRjaCA9IF9SRV9QQVRURVJOX0lOQ0xVREUuc2VhcmNoKHByZXZpb3Vz
X2xpbmUpCisgICAgICAgICAgICAgICAgIGlmIHByZXZpb3VzX21hdGNoOgorICAgICAgICAgICAg
ICAgICAgICBwcmV2aW91c19pbmNsdWRlID0gcHJldmlvdXNfbWF0Y2guZ3JvdXAoMikKKyAgICAg
ICAgICAgICAgICAgICAgcHJldmlvdXNfaGVhZGVyX3R5cGUgPSBfY2xhc3NpZnlfaW5jbHVkZShm
aWxlbmFtZSwgcHJldmlvdXNfaW5jbHVkZSwgKHByZXZpb3VzX21hdGNoLmdyb3VwKDEpID09ICc8
JykpCisgICAgICAgICAgICAgICAgICAgIGlmIHByZXZpb3VzX2hlYWRlcl90eXBlID09IF9PVEhF
Ul9IRUFERVIgYW5kIHByZXZpb3VzX2xpbmUuc3RyaXAoKSA+IGxpbmUuc3RyaXAoKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ2J1aWxkL2lu
Y2x1ZGVfb3JkZXInLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FscGhhYmV0
aWNhbCBzb3J0aW5nIHByb2JsZW0uJykKKwogICAgICAgICAgICAgaWYgZXJyb3JfbWVzc2FnZToK
LSAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICdidWlsZC9pbmNs
dWRlX29yZGVyJywgNCwKLSAgICAgICAgICAgICAgICAgICAgICAnJXMuIFNob3VsZCBiZTogJXMu
aCwgYyBzeXN0ZW0sIGMrKyBzeXN0ZW0sIG90aGVyLicgJQotICAgICAgICAgICAgICAgICAgICAg
IChlcnJvcl9tZXNzYWdlLCBmaWxlaW5mby5iYXNlX25hbWUoKSkpCisgICAgICAgICAgICAgICAg
aWYgZmlsZW5hbWUuZW5kc3dpdGgoJy5oJyk6CisgICAgICAgICAgICAgICAgICAgIGVycm9yKGZp
bGVuYW1lLCBsaW5lX251bWJlciwgJ2J1aWxkL2luY2x1ZGVfb3JkZXInLCA0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAnJXMgU2hvdWxkIGJlOiBhbHBoYWJldGljYWxseSBzb3J0ZWQuJyAl
CisgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcl9tZXNzYWdlKSkKKyAgICAgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1i
ZXIsICdidWlsZC9pbmNsdWRlX29yZGVyJywgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
JyVzIFNob3VsZCBiZTogY29uZmlnLmgsIHByaW1hcnkgaGVhZGVyLCBibGFuayBsaW5lLCBhbmQg
dGhlbiBhbHBoYWJldGljYWxseSBzb3J0ZWQuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAg
IChlcnJvcl9tZXNzYWdlKSkKIAogICAgICMgTG9vayBmb3IgYW55IG9mIHRoZSBzdHJlYW0gY2xh
c3NlcyB0aGF0IGFyZSBwYXJ0IG9mIHN0YW5kYXJkIEMrKy4KICAgICBtYXRjaGVkID0gX1JFX1BB
VFRFUk5fSU5DTFVERS5tYXRjaChsaW5lKQpAQCAtMjgxNSw4ICsyODE4LDYgQEAgZGVmIHVzZV93
ZWJraXRfc3R5bGVzKCk6CiAgICAgICAgICctcmVhZGFiaWxpdHkvYnJhY2VzJywgICMgaW50IGZv
bygpIHt9OwogICAgICAgICAnLXJlYWRhYmlsaXR5L2ZuX3NpemUnLAogICAgICAgICAnLWJ1aWxk
L3N0b3JhZ2VfY2xhc3MnLCAgIyBjb25zdCBzdGF0aWMKLSAgICAgICAgJy1idWlsZC9pbmNsdWRl
X29yZGVyJywKLSAgICAgICAgJy1idWlsZC9pbmNsdWRlJywKICAgICAgICAgJy1idWlsZC9lbmRp
Zl9jb21tZW50JywKICAgICAgICAgJy13aGl0ZXNwYWNlL2xhYmVscycsCiAgICAgICAgICctcnVu
dGltZS9hcnJheXMnLCAgIyB2YXJpYWJsZSBsZW5ndGggYXJyYXkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBsaW50X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy9tb2R1bGVzL2NwcGxpbnRfdW5pdHRlc3QucHkKaW5kZXggZjZlNDg3OC4uM2RiYmVj
ZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnRfdW5pdHRl
c3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnRfdW5pdHRlc3Qu
cHkKQEAgLTQyOCwxNSArNDI4LDYgQEAgY2xhc3MgQ3BwbGludFRlc3QoQ3BwbGludFRlc3RCYXNl
KToKICAgICAgICAgICAgICdVc2luZyBzaXplb2YodHlwZSkuICBVc2Ugc2l6ZW9mKHZhcm5hbWUp
IGluc3RlYWQgaWYgcG9zc2libGUnCiAgICAgICAgICAgICAnICBbcnVudGltZS9zaXplb2ZdIFsx
XScpCiAKLSAgICAjIFRlc3QgZmFsc2UgZXJyb3JzIHRoYXQgaGFwcGVuZWQgd2l0aCBzb21lIGlu
Y2x1ZGUgZmlsZSBuYW1lcwotICAgIGRlZiB0ZXN0X2luY2x1ZGVfZmlsZW5hbWVfZmFsc2VfZXJy
b3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoCi0gICAgICAgICAgICAnI2luY2x1
ZGUgImZvby9sb25nLWZvby5oIicsCi0gICAgICAgICAgICAnJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgKLSAgICAgICAgICAgICcjaW5jbHVkZSAiZm9vL3NwcmludGYuaCInLAotICAgICAg
ICAgICAgJycpCi0KICAgICAjIFRlc3QgdHlwZWRlZiBjYXNlcy4gIFRoZXJlIHdhcyBhIGJ1ZyB0
aGF0IGNwcGxpbnQgbWlzaWRlbnRpZmllZAogICAgICMgdHlwZWRlZiBmb3IgcG9pbnRlciB0byBm
dW5jdGlvbiBhcyBDLXN0eWxlIGNhc3QgYW5kIHByb2R1Y2VkCiAgICAgIyBmYWxzZS1wb3NpdGl2
ZSBlcnJvciBtZXNzYWdlcy4KQEAgLTU3MCwxMiArNTYxLDEyIEBAIGNsYXNzIENwcGxpbnRUZXN0
KENwcGxpbnRUZXN0QmFzZSk6CiAgICAgICAgICAgICAnJycsCiAgICAgICAgICAgICAnJykKICAg
ICAgICAgc2VsZi5hc3NlcnRfaW5jbHVkZV93aGF0X3lvdV91c2UoCi0gICAgICAgICAgICAnJycj
aW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RyaW5nPgotICAg
ICAgICAgICAgICAgI2luY2x1ZGUgPHZlY3Rvcj4KLSAgICAgICAgICAgICAgICNpbmNsdWRlICJi
YXNlL2Jhc2ljdHlwZXMuaCIKLSAgICAgICAgICAgICAgICNpbmNsdWRlICJiYXNlL3BvcnQuaCIK
LSAgICAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+IGhham9hOycnJywgJycpCisgICAgICAgICAg
ICAgJycnI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgorICAgICAgICAgICAgICAgICNpbmNs
dWRlICJiYXNlL3BvcnQuaCIKKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8YXNzZXJ0Lmg+Cisg
ICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0cmluZz4KKyAgICAgICAgICAgICAgICAjaW5jbHVk
ZSA8dmVjdG9yPgorICAgICAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+IGhham9hOycnJywgJycp
CiAgICAgICAgIHNlbGYuYXNzZXJ0X2luY2x1ZGVfd2hhdF95b3VfdXNlKAogICAgICAgICAgICAg
JycnI2luY2x1ZGUgPHN0cmluZz4KICAgICAgICAgICAgICAgIGludCBpID0gbnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkKQEAgLTU5MSwzMyArNTgyLDI3IEBAIGNsYXNzIENwcGxpbnRUZXN0KENw
cGxpbnRUZXN0QmFzZSk6CiAgICAgICAgICMgVGVzdCB0aGUgVXBkYXRlSW5jbHVkZVN0YXRlIGNv
ZGUgcGF0aC4KICAgICAgICAgbW9ja19oZWFkZXJfY29udGVudHMgPSBbJyNpbmNsdWRlICJibGFo
L2Zvby5oIicsICcjaW5jbHVkZSAiYmxhaC9iYXIuaCInXQogICAgICAgICBtZXNzYWdlID0gc2Vs
Zi5wZXJmb3JtX2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJyNpbmNsdWRlICJi
bGFoL2EuaCInLAorICAgICAgICAgICAgJyNpbmNsdWRlICJjb25maWcuaCJcbicKKyAgICAgICAg
ICAgICcjaW5jbHVkZSAiYmxhaC9hLmgiXG4nLAogICAgICAgICAgICAgZmlsZW5hbWU9J2JsYWgv
YS5jYycsCiAgICAgICAgICAgICBpbz1Nb2NrSW8obW9ja19oZWFkZXJfY29udGVudHMpKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXNzYWdlLCAnJykKIAogICAgICAgICBtb2NrX2hlYWRl
cl9jb250ZW50cyA9IFsnI2luY2x1ZGUgPHNldD4nXQogICAgICAgICBtZXNzYWdlID0gc2VsZi5w
ZXJmb3JtX2luY2x1ZGVfd2hhdF95b3VfdXNlKAotICAgICAgICAgICAgJycnI2luY2x1ZGUgImJs
YWgvYS5oIgorICAgICAgICAgICAgJycnI2luY2x1ZGUgImNvbmZpZy5oIgorICAgICAgICAgICAg
ICAgI2luY2x1ZGUgImJsYWgvYS5oIgorCiAgICAgICAgICAgICAgICBzdGQ6OnNldDxpbnQ+IGZv
bzsnJycsCiAgICAgICAgICAgICBmaWxlbmFtZT0nYmxhaC9hLmNjJywKICAgICAgICAgICAgIGlv
PU1vY2tJbyhtb2NrX2hlYWRlcl9jb250ZW50cykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KG1lc3NhZ2UsICcnKQogCi0gICAgICAgICMgTWFrZSBzdXJlIHdlIGNhbiBmaW5kIHRoZSBjb3Jy
ZWN0IGhlYWRlciBmaWxlIGlmIHRoZSBjYyBmaWxlIHNlZW1zIHRvIGJlCi0gICAgICAgICMgYSB0
ZW1wb3JhcnkgZmlsZSBnZW5lcmF0ZWQgYnkgRW1hY3MncyBmbHltYWtlLgotICAgICAgICBtb2Nr
X2hlYWRlcl9jb250ZW50cyA9IFsnJ10KLSAgICAgICAgbWVzc2FnZSA9IHNlbGYucGVyZm9ybV9p
bmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNsdWRlICJibGFoL2EuaCIK
LSAgICAgICAgICAgICAgIHN0ZDo6c2V0PGludD4gZm9vOycnJywKLSAgICAgICAgICAgIGZpbGVu
YW1lPSdibGFoL2FfZmx5bWFrZS5jYycsCi0gICAgICAgICAgICBpbz1Nb2NrSW8obW9ja19oZWFk
ZXJfY29udGVudHMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXNzYWdlLCAnQWRkICNp
bmNsdWRlIDxzZXQ+IGZvciBzZXQ8PiAgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnW2J1aWxkL2luY2x1ZGVfd2hhdF95b3VfdXNlXSBbNF0nKQotCiAgICAgICAgICMgSWYg
dGhlcmUncyBqdXN0IGEgY2MgYW5kIHRoZSBoZWFkZXIgY2FuJ3QgYmUgZm91bmQgdGhlbiBpdCdz
IG9rLgogICAgICAgICBtZXNzYWdlID0gc2VsZi5wZXJmb3JtX2luY2x1ZGVfd2hhdF95b3VfdXNl
KAotICAgICAgICAgICAgJycnI2luY2x1ZGUgImJsYWgvYS5oIgorICAgICAgICAgICAgJycnI2lu
Y2x1ZGUgImNvbmZpZy5oIgorICAgICAgICAgICAgICAgI2luY2x1ZGUgImJsYWgvYS5oIgorCiAg
ICAgICAgICAgICAgICBzdGQ6OnNldDxpbnQ+IGZvbzsnJycsCiAgICAgICAgICAgICBmaWxlbmFt
ZT0nYmxhaC9hLmNjJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVzc2FnZSwgJycpCkBA
IC02MjUsNyArNjEwLDkgQEAgY2xhc3MgQ3BwbGludFRlc3QoQ3BwbGludFRlc3RCYXNlKToKICAg
ICAgICAgIyBNYWtlIHN1cmUgd2UgZmluZCB0aGUgaGVhZGVycyB3aXRoIHJlbGF0aXZlIHBhdGhz
LgogICAgICAgICBtb2NrX2hlYWRlcl9jb250ZW50cyA9IFsnJ10KICAgICAgICAgbWVzc2FnZSA9
IHNlbGYucGVyZm9ybV9pbmNsdWRlX3doYXRfeW91X3VzZSgKLSAgICAgICAgICAgICcnJyNpbmNs
dWRlICIlcy9hLmgiCisgICAgICAgICAgICAnJycjaW5jbHVkZSAiY29uZmlnLmgiCisgICAgICAg
ICAgICAgICAjaW5jbHVkZSAiJXMvYS5oIgorCiAgICAgICAgICAgICAgICBzdGQ6OnNldDxpbnQ+
IGZvbzsnJycgJSBvcy5wYXRoLmJhc2VuYW1lKG9zLmdldGN3ZCgpKSwKICAgICAgICAgICAgIGZp
bGVuYW1lPSdhLmNjJywKICAgICAgICAgICAgIGlvPU1vY2tJbyhtb2NrX2hlYWRlcl9jb250ZW50
cykpCkBAIC04OTEsMTMgKzg3OCw2IEBAIGNsYXNzIENwcGxpbnRUZXN0KENwcGxpbnRUZXN0QmFz
ZSk6CiAgICAgICAgICAgICAnICAgIG1lbXNldChidWYsIDB4Y2QsIDApJywKICAgICAgICAgICAg
ICcnKQogCi0gICAgZGVmIHRlc3RfY2hlY2tfZGVwcmVjYXRlZChzZWxmKToKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5jYycsICcjaW5jbHVkZSA8aW9zdHJl
YW0+JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0cmVhbXMg
YXJlIGhpZ2hseSBkaXNjb3VyYWdlZC4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9zdHJlYW1zXSBbM10nKQotICAgICAgICBzZWxmLmFz
c2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vX3Rlc3QuY2MnLCAnI2luY2x1ZGUgPGlvc3Ry
ZWFtPicsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9v
X3VuaXR0ZXN0LmNjJywgJyNpbmNsdWRlIDxpb3N0cmVhbT4nLCAnJykKLQogICAgIGRlZiB0ZXN0
X2NoZWNrX3Bvc2l4X3RocmVhZGluZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRfbGludCgn
c2N0aW1lX3IoKScsICcnKQogICAgICAgICBzZWxmLmFzc2VydF9saW50KCdzdHJ0b2tfcigpJywg
JycpCkBAIC0yMDYxLDgxICsyMDQxLDE0NCBAQCBjbGFzcyBPcmRlck9mSW5jbHVkZXNUZXN0KENw
cGxpbnRUZXN0QmFzZSk6CiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBvcy5wYXRo
LmFic3BhdGggPSBzZWxmLm9zX3BhdGhfYWJzcGF0aF9vcmlnCiAKLSAgICBkZWYgdGVzdF9jaGVj
a19uZXh0X2luY2x1ZGVfb3JkZXJfX290aGVyX3RoZW5fY3BwKHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCcnLCBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29y
ZGVyKAotICAgICAgICAgICAgY3BwbGludC5fT1RIRVJfSEVBREVSKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnRm91bmQgQysrIHN5c3RlbSBoZWFkZXIgYWZ0ZXIgb3RoZXIgaGVhZGVyJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9p
bmNsdWRlX29yZGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHBsaW50Ll9DUFBf
U1lTX0hFQURFUikpCi0KLSAgICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJfX2Nw
cF90aGVuX2Moc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVk
ZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBjcHBsaW50Ll9D
UFBfU1lTX0hFQURFUikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIEMgc3lzdGVt
IGhlYWRlciBhZnRlciBDKysgc3lzdGVtIGhlYWRlcicsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3BwbGludC5fQ19TWVNfSEVBREVSKSkKLQotICAgIGRlZiB0
ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fbGlrZWx5X3RoZW5fY3BwKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9p
bmNsdWRlX29yZGVyKAotICAgICAgICAgICAgY3BwbGludC5fTElLRUxZX01ZX0hFQURFUikpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0
X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBjcHBsaW50Ll9DUFBfU1lTX0hFQURFUikpCi0K
LSAgICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1ZGVfb3JkZXJfX3Bvc3NpYmxlX3RoZW5fY3Bw
KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLmluY2x1ZGVfc3RhdGUu
Y2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAotICAgICAgICAgICAgY3BwbGludC5fUE9TU0lCTEVf
TVlfSEVBREVSKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5pbmNsdWRlX3N0
YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRlcigKLSAgICAgICAgICAgIGNwcGxpbnQuX0NQUF9T
WVNfSEVBREVSKSkKLQotICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fY3Bw
X3RoZW5fbGlrZWx5KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLmlu
Y2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKAotICAgICAgICAgICAgY3BwbGlu
dC5fQ1BQX1NZU19IRUFERVIpKQotICAgICAgICAjIFRoaXMgd2lsbCBldmVudHVhbGx5IGZhaWwu
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19u
ZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBjcHBsaW50Ll9MSUtFTFlfTVlfSEVBREVS
KSkKLQotICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9fY3BwX3RoZW5fcG9z
c2libGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVkZV9z
dGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBjcHBsaW50Ll9DUFBf
U1lTX0hFQURFUikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuaW5jbHVkZV9z
dGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoCi0gICAgICAgICAgICBjcHBsaW50Ll9QT1NT
SUJMRV9NWV9IRUFERVIpKQorICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRlcl9f
bm9fY29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWFkZXIgZmlsZSBz
aG91bGQgbm90IGNvbnRhaW4gV2ViQ29yZSBjb25maWcuaC4nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoY3BwbGlu
dC5fQ09ORklHX0hFQURFUiwgVHJ1ZSkpCisKKyAgICBkZWYgdGVzdF9jaGVja19uZXh0X2luY2x1
ZGVfb3JkZXJfX25vX3NlbGYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlYWRl
ciBmaWxlIHNob3VsZCBub3QgY29udGFpbiBpdHNlbGYuJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcGxpbnQu
X1BSSU1BUllfSEVBREVSLCBUcnVlKSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVk
ZV9vcmRlcl9fbGlrZWx5X3RoZW5fY29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdGb3VuZCBoZWFkZXIgdGhpcyBmaWxlIGltcGxlbWVudHMgYmVmb3JlIFdlYkNvcmUgY29u
ZmlnLmguJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hl
Y2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcGxpbnQuX1BSSU1BUllfSEVBREVSLCBGYWxzZSkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIFdlYkNvcmUgY29uZmlnLmggYWZ0ZXIgYSBo
ZWFkZXIgdGhpcyBmaWxlIGltcGxlbWVudHMuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcGxpbnQuX0NPTkZJ
R19IRUFERVIsIEZhbHNlKSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX25leHRfaW5jbHVkZV9vcmRl
cl9fb3RoZXJfdGhlbl9jb25maWcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0Zv
dW5kIG90aGVyIGhlYWRlciBiZWZvcmUgV2ViQ29yZSBjb25maWcuaC4nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIo
Y3BwbGludC5fT1RIRVJfSEVBREVSLCBGYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J0ZvdW5kIFdlYkNvcmUgY29uZmlnLmggYWZ0ZXIgb3RoZXIgaGVhZGVyLicsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlX3N0YXRlLmNoZWNrX25leHRfaW5jbHVkZV9vcmRl
cihjcHBsaW50Ll9DT05GSUdfSEVBREVSLCBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9jaGVja19u
ZXh0X2luY2x1ZGVfb3JkZXJfX2NvbmZpZ190aGVuX290aGVyX3RoZW5fbGlrZWx5KHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4
dF9pbmNsdWRlX29yZGVyKGNwcGxpbnQuX0NPTkZJR19IRUFERVIsIEZhbHNlKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnRm91bmQgb3RoZXIgaGVhZGVyIGJlZm9yZSBhIGhlYWRlciB0aGlz
IGZpbGUgaW1wbGVtZW50cy4nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVk
ZV9zdGF0ZS5jaGVja19uZXh0X2luY2x1ZGVfb3JkZXIoY3BwbGludC5fT1RIRVJfSEVBREVSLCBG
YWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvdW5kIGhlYWRlciB0aGlzIGZpbGUg
aW1wbGVtZW50cyBhZnRlciBvdGhlciBoZWFkZXIuJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmluY2x1ZGVfc3RhdGUuY2hlY2tfbmV4dF9pbmNsdWRlX29yZGVyKGNwcGxpbnQuX1BS
SU1BUllfSEVBREVSLCBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9jaGVja19hbHBhYmV0aWNhbF9p
bmNsdWRlX29yZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19j
aGVjaygnZm9vLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2luY2x1ZGUgImEuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJjLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcjaW5jbHVkZSAiYi5oIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBzb3J0aW5nIHByb2JsZW0uICBbYnVpbGQvaW5jbHVk
ZV9vcmRlcl0gWzRdJykKKworICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVj
aygnZm9vLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lu
Y2x1ZGUgImEuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyNpbmNsdWRlICJiLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiYy5oIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2so
J2Zvby5oJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlIDxhc3NlcnQuaD5cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJiYXIuaCJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdBbHBoYWJldGljYWwgc29ydGluZyBwcm9ibGVtLiAgW2J1aWxkL2luY2x1ZGVf
b3JkZXJdIFs0XScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2so
J2Zvby5oJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlICJiYXIuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyNpbmNsdWRlIDxhc3NlcnQuaD5cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcnKQorCisgICAgZGVmIHRlc3RfY2hlY2tfbGluZV9icmVha19hZnRlcl9vd25f
aGVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygn
Zm9vLmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5j
bHVkZSAiY29uZmlnLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiZm9vLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcjaW5jbHVkZSAiYmFyLmgiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnWW91IHNob3VsZCBhZGQgYSBibGFuayBsaW5lIGFmdGVyIGltcGxl
bWVudGF0aW9uIGZpbGVcJ3Mgb3duIGhlYWRlci4gIFtidWlsZC9pbmNsdWRlX29yZGVyXSBbNF0n
KQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJjb25m
aWcuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlICJmb28uaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUg
ImJhci5oIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycp
CisKKyAgICBkZWYgdGVzdF9jaGVja19wcmVwcm9jZXNzb3JfaW5faW5jbHVkZV9zZWN0aW9uKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNwcCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiY29u
ZmlnLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5j
bHVkZSAiZm9vLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpZmRlZiBC
QVpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRl
ICJiYXouaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNl
bHNlXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVk
ZSAiZm9vYmFyLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcjZW5kaWYiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
aW5jbHVkZSAiYmFyLmgiXG4nLCAjIE5vIGZsYWcgYmVjYXVzZSBwcmV2aW91cyBpcyBpbiBwcmVw
cm9jZXNzb3Igc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnJykKKworICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmNw
cCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAi
Y29uZmlnLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj
aW5jbHVkZSAiZm9vLmgiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpZmRl
ZiBCQVpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNs
dWRlICJiYXouaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyNlbmRpZiJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNp
bmNsdWRlICJiYXIuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyNpbmNsdWRlICJhLmgiXG4nLCAjIFNob3VsZCBzdGlsbCBmbGFnIHRoaXMuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBbHBoYWJldGljYWwgc29ydGluZyBw
cm9ibGVtLiAgW2J1aWxkL2luY2x1ZGVfb3JkZXJdIFs0XScpCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5jcHAnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImNvbmZpZy5oIlxuJworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgImZvby5oIlxuJworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcjaWZkZWYgQkFaXG4nCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYmF6LmgiXG4nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjaW5jbHVkZSAiYmFyLmgiXG4nICNTaG91
bGQgc3RpbGwgZmxhZyB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjZW5kaWYiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnQWxwaGFiZXRpY2FsIHNvcnRpbmcgcHJvYmxlbS4gIFtidWlsZC9pbmNsdWRlX29yZGVyXSBb
NF0nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3Bw
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJj
b25maWcuaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNp
bmNsdWRlICJmb28uaCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lmZGVm
IEJBWlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1
ZGUgImJhei5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2VuZGlmIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2lm
ZGVmIEZPT0JBUlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
I2luY2x1ZGUgImZvb2Jhci5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnI2VuZGlmIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnI2luY2x1ZGUgImJhci5oIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnI2luY2x1ZGUgImEuaCJcbicsICMgU2hvdWxkIHN0aWxsIGZsYWcgdGhpcy4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FscGhhYmV0aWNhbCBz
b3J0aW5nIHByb2JsZW0uICBbYnVpbGQvaW5jbHVkZV9vcmRlcl0gWzRdJykKIAogICAgIGRlZiB0
ZXN0X2NsYXNzaWZ5X2luY2x1ZGUoc2VsZik6Ci0gICAgICAgIGZpbGVfaW5mbyA9IGNwcGxpbnQu
RmlsZUluZm8KICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZSA9IGNwcGxpbnQuX2NsYXNzaWZ5X2lu
Y2x1ZGUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9DX1NZU19IRUFERVIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZShmaWxlX2luZm8oJ2Zvby9m
b28uY2MnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGRp
by5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNwcGxpbnQuX0NQUF9TWVNfSEVBREVSLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoZmlsZV9pbmZvKCdmb28vZm9vLmNj
JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGNwcGxpbnQuX0NQUF9TWVNfSEVBREVSLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoZmlsZV9pbmZvKCdmb28vZm9vLmNjJyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZWluZm8nLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY3BwbGludC5fT1RIRVJfSEVBREVSLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoZmlsZV9pbmZvKCdmb28vZm9vLmNjJyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nJywKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjcHBsaW50Ll9DT05GSUdfSEVBREVSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoJ2Zvby9mb28uY3BwJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcuaCcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjcHBsaW50Ll9MSUtFTFlfTVlfSEVBREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzaWZ5X2luY2x1ZGUoZmlsZV9pbmZvKCdmb28vZm9vLmNjJyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vL2Zvby1pbmwuaCcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoY3BwbGludC5fTElLRUxZX01ZX0hFQURFUiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzc2lmeV9pbmNsdWRlKGZpbGVfaW5mbygnZm9vL2ludGVybmFsL2Zvby5jYycpLAorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNwcGxpbnQuX1BSSU1BUllfSEVBREVSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2luY2x1ZGUoJ2Zvby9pbnRlcm5hbC9mb28uY3BwJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vcHVibGljL2Zv
by5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9QT1NTSUJMRV9NWV9IRUFERVIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZShmaWxlX2luZm8oJ2Zvby9p
bnRlcm5hbC9mb28uY2MnKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9QUklN
QVJZX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9pbmNsdWRlKCdm
b28vaW50ZXJuYWwvZm9vLmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnZm9vL290aGVyL3B1YmxpYy9mb28uaCcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGYWxzZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3Bw
bGludC5fT1RIRVJfSEVBREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X2lu
Y2x1ZGUoZmlsZV9pbmZvKCdmb28vaW50ZXJuYWwvZm9vLmNjJyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZSgnZm9vL2ludGVybmFsL2Zvby5jcHAnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvby9vdGhlci9wdWJsaWMvZm9v
cC5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcHBsaW50Ll9PVEhFUl9IRUFERVIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3NpZnlfaW5jbHVkZSgnZm9vL2Zvby5jcHAnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChjcHBsaW50Ll9QUklNQVJZX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzc2lmeV9pbmNsdWRlKCdmb29DdXN0b20uY3BwJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdmb28uaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGYWxzZSkpCiAKICAgICBkZWYgdGVzdF90cnlfZHJvcF9jb21tb25f
c3VmZml4ZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Zvby9mb28nLCBjcHBs
aW50Ll9kcm9wX2NvbW1vbl9zdWZmaXhlcygnZm9vL2Zvby1pbmwuaCcpKQpAQCAtMjE0OCw3NyAr
MjE5MSw4IEBAIGNsYXNzIE9yZGVyT2ZJbmNsdWRlc1Rlc3QoQ3BwbGludFRlc3RCYXNlKToKICAg
ICAgICAgICAgICAgICAgICAgICAgICBjcHBsaW50Ll9kcm9wX2NvbW1vbl9zdWZmaXhlcygnX3Rl
c3QuY2MnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndGVzdCcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3BwbGludC5fZHJvcF9jb21tb25fc3VmZml4ZXMoJ3Rlc3QuY2MnKSkKLQot
ICAgIGRlZiB0ZXN0X3JlZ3Jlc3Npb24oc2VsZik6Ci0gICAgICAgIGRlZiBmb3JtYXQoaW5jbHVk
ZXMpOgotICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4oWycjaW5jbHVkZSAlc1xuJyAlIGluY2x1
ZGUgZm9yIGluY2x1ZGUgaW4gaW5jbHVkZXNdKQotCi0gICAgICAgICMgVGVzdCBzaW5nbGV0b24g
Y2FzZXMgZmlyc3QuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdm
b28vZm9vLmNjJywgZm9ybWF0KFsnImZvby9mb28uaCInXSksICcnKQotICAgICAgICBzZWxmLmFz
c2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zvby5jYycsIGZvcm1hdChbJzxzdGRpby5o
PiddKSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28v
Zm9vLmNjJywgZm9ybWF0KFsnPHN0cmluZz4nXSksICcnKQotICAgICAgICBzZWxmLmFzc2VydF9s
YW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zvby5jYycsIGZvcm1hdChbJyJmb28vZm9vLWlubC5o
IiddKSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28v
Zm9vLmNjJywgZm9ybWF0KFsnImJhci9iYXItaW5sLmgiJ10pLCAnJykKLSAgICAgICAgc2VsZi5h
c3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby9mb28uY2MnLCBmb3JtYXQoWyciYmFyL2Jh
ci5oIiddKSwgJycpCi0KLSAgICAgICAgIyBUZXN0IGV2ZXJ5dGhpbmcgaW4gYSBnb29kIGFuZCBu
ZXcgb3JkZXIuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28v
Zm9vLmNjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0
KFsnImZvby9mb28uaCInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICciZm9vL2Zvby1pbmwuaCInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICc8c3RkaW8uaD4nLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3RyaW5nPicsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyJiYXIvYmFyLWlubC5oIicsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyJiYXIvYmFyLmgi
J10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAg
ICAgIyBUZXN0IGV2ZXJ5dGhpbmcgaW4gYSBnb29kIGJ1dCBzbGlnaHRseSBkZXByZWNhdGVkIG9y
ZGVyLgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vL2Zvby5j
YycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChbJyJm
b28vZm9vLmgiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnPHN0ZGlvLmg+JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnPHN0cmluZz4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICciZm9vL2Zvby1pbmwuaCInLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICciYmFyL2Jhci1pbmwuaCInLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciYmFyL2Jhci5oIiddKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCi0gICAgICAgICMg
VGVzdCBldmVyeXRoaW5nIGluIGEgZ29vZCBidXQgZGVwcmVjYXRlZCBvcmRlci4KLSAgICAgICAg
c2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby9mb28uY2MnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoWyc8c3RkaW8uaD4nLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3RyaW5nPics
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyJmb28v
Zm9vLWlubC5oIicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJyJiYXIvYmFyLWlubC5oIicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJyJmb28vZm9vLmgiJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnImJhci9iYXIuaCInXSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotCi0gICAgICAgICMgVGVzdCBiYWQgb3Jk
ZXJzLgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygKLSAgICAgICAg
ICAgICdmb28vZm9vLmNjJywKLSAgICAgICAgICAgIGZvcm1hdChbJzxzdHJpbmc+JywgJzxzdGRp
by5oPiddKSwKLSAgICAgICAgICAgICdGb3VuZCBDIHN5c3RlbSBoZWFkZXIgYWZ0ZXIgQysrIHN5
c3RlbSBoZWFkZXIuJwotICAgICAgICAgICAgJyBTaG91bGQgYmU6IGZvby5oLCBjIHN5c3RlbSwg
YysrIHN5c3RlbSwgb3RoZXIuJwotICAgICAgICAgICAgJyAgW2J1aWxkL2luY2x1ZGVfb3JkZXJd
IFs0XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKAotICAgICAg
ICAgICAgJ2Zvby9mb28uY2MnLAotICAgICAgICAgICAgZm9ybWF0KFsnImZvby9iYXItaW5sLmgi
JywKLSAgICAgICAgICAgICAgICAgICAgJyJmb28vZm9vLWlubC5oIiddKSwKLSAgICAgICAgICAg
ICcnKQotICAgICAgICAjIC1pbmwuaCBoZWFkZXJzIGFyZSBubyBsb25nZXIgc3BlY2lhbC4KLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby9mb28uY2MnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoWyciZm9vL2Zvby1p
bmwuaCInLCAnPHN0cmluZz4nXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcnKQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9v
L2Zvby5jYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1h
dChbJyJmb28vYmFyLmgiJywgJyJmb28vYmFyLWlubC5oIiddKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJycpCi0gICAgICAgICMgVGVzdCBjb21wb25lbnRpemVk
IGhlYWRlci4gIE9LIHRvIGhhdmUgbXkgaGVhZGVyIGluIC4uL3B1YmxpYyBkaXIuCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28vaW50ZXJuYWwvZm9vLmNjJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KFsnImZvby9w
dWJsaWMvZm9vLmgiJywgJzxzdHJpbmc+J10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnJykKLSAgICAgICAgIyBPSyB0byBoYXZlIG15IGhlYWRlciBpbiBvdGhl
ciBkaXIgKG5vdCBzdHlsaXN0aWNhbGx5LCBidXQKLSAgICAgICAgIyBjcHBsaW50IGlzbid0IGFz
IGdvb2QgYXMgYSBodW1hbikuCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2No
ZWNrKCdmb28vaW50ZXJuYWwvZm9vLmNjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0KFsnImZvby9vdGhlci9wdWJsaWMvZm9vLmgiJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nXSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNwcGxpbnQu
X2Ryb3BfY29tbW9uX3N1ZmZpeGVzKCd0ZXN0LmNwcCcpKQogCiBjbGFzcyBDaGVja0ZvckZ1bmN0
aW9uTGVuZ3Roc1Rlc3QoQ3BwbGludFRlc3RCYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBA
IC0zMDgzLDEwICszMDU3LDYgQEAgY2xhc3MgV2ViS2l0U3R5bGVUZXN0KENwcGxpbnRUZXN0QmFz
ZSk6CiAgICAgICAgICMgRklYTUU6IEltcGxlbWVudCB0aGlzLgogICAgICAgICBwYXNzCiAKLSAg
ICBkZWYgdGVzdF9pbmNsdWRlKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KLSAgICAgICAgcGFzcwotCiAKIGRlZiB0ZWFyRG93bigpOgogICAgICIiIkEgZ2xvYmFsIGNo
ZWNrIHRvIG1ha2Ugc3VyZSBhbGwgZXJyb3ItY2F0ZWdvcmllcyBoYXZlIGJlZW4gdGVzdGVkLgo=
</data>
<flag name="review"
          id="17506"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>