<?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>51523</bug_id>
          
          <creation_ts>2010-12-22 23:42:52 -0800</creation_ts>
          <short_desc>check-webkit-style check for meaningless variable names in function declarations.</short_desc>
          <delta_ts>2010-12-27 10:57:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>51451</dependson>
          <blocked>49394</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>eric</cc>
    
    <cc>hamaji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>325912</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-22 23:42:52 -0800</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325920</commentid>
    <comment_count>1</comment_count>
      <attachid>77312</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-23 00:03:30 -0800</bug_when>
    <thetext>Created attachment 77312
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325962</commentid>
    <comment_count>2</comment_count>
      <attachid>77312</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-23 00:57:50 -0800</bug_when>
    <thetext>Comment on attachment 77312
Patch

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

Have you run this across the entire source base to check for false positives?  I worry there may be a bunch.

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:215
&gt; +def _create_acronym(text):
&gt; +    # Removes all lower case letters except those starting words.
&gt; +    text = sub(r&apos;(?&lt;!\b)[a-z]&apos;, &apos;&apos;, text)
&gt; +    return text.upper()

Woh.  So this is used for finding &quot;ec&quot; used with &quot;ExceptionCode&quot;, right?  Probably best to add a comment about how it&apos;s used?

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:1437
&gt; +        parameter_type = parameter[0]
&gt; +        parameter_name = parameter[1]
&gt; +        parameter_line_number = parameter[2]

Eeek.  This is a class. :)

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:1440
&gt; +        if not len(parameter_name):
&gt; +            continue

if not parameter_name works too.

&gt; Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py:-162
&gt; -                             &apos;-multi_line_filter&apos;,

?  bogus filter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326081</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-23 08:19:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 77312 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77312&amp;action=review
&gt; 
&gt; Have you run this across the entire source base to check for false positives?  I worry there may be a bunch.

I agree that it is something really, really important for this style check. Previously, I&apos;ve run this across JavaScriptCore, WebCore and WebKit like this:
   check-webkit-style -f -,+readability/parameter_name WebCore/ 
to check for false positives (and crashes).

As far as I can tell, I have eliminated all false positives except for: JavaScriptCore/jit/JITStubs.cpp

That file has an unusual syntax, and now that I think about it, I think I will just exempt it from this check to get rid of that false positive.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:215
&gt; &gt; +def _create_acronym(text):
&gt; &gt; +    # Removes all lower case letters except those starting words.
&gt; &gt; +    text = sub(r&apos;(?&lt;!\b)[a-z]&apos;, &apos;&apos;, text)
&gt; &gt; +    return text.upper()
&gt; 
&gt; Woh.  So this is used for finding &quot;ec&quot; used with &quot;ExceptionCode&quot;, right?  Probably best to add a comment about how it&apos;s used?

Yep :) Will do.

&gt; 

I&apos;ll fix the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326099</commentid>
    <comment_count>4</comment_count>
      <attachid>77312</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-23 08:40:52 -0800</bug_when>
    <thetext>Comment on attachment 77312
Patch

I need to do some significant revisions to address these comments and the items in the dependent bug, so I&apos;m clearing the r+ for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326992</commentid>
    <comment_count>5</comment_count>
      <attachid>77484</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-27 00:03:06 -0800</bug_when>
    <thetext>Created attachment 77484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326993</commentid>
    <comment_count>6</comment_count>
      <attachid>77484</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-27 00:04:37 -0800</bug_when>
    <thetext>Comment on attachment 77484
Patch

&gt; &gt; Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py:-162
&gt; &gt; -                             &apos;-multi_line_filter&apos;,
&gt; 
&gt; ?  bogus filter?
Yep. Since I was adding a filter in there, I noticed this bogus one. It is in code that I recently changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326994</commentid>
    <comment_count>7</comment_count>
      <attachid>77484</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-27 00:12:38 -0800</bug_when>
    <thetext>Comment on attachment 77484
Patch

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

Will have to look again when I&apos;m less tired.

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:354
&gt; +        # None is a placeholder as this value is computer on demand.

computed. :)  Also, you could just have this be _cached_foo and tehn you don&apos;t need to expain that its&apos; on-demand, or?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326998</commentid>
    <comment_count>8</comment_count>
      <attachid>77485</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-27 00:45:39 -0800</bug_when>
    <thetext>Created attachment 77485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327072</commentid>
    <comment_count>9</comment_count>
      <attachid>77485</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-27 10:16:34 -0800</bug_when>
    <thetext>Comment on attachment 77485
Patch

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

LGTM.  Feel free to land as is.

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:210
&gt; +    text = sub(r&apos;(?&lt;=[A-Za-z0-9])([A-Z])(?=[a-z])&apos;, r&apos;_\1&apos;, text)
&gt; +
&gt; +    # Next add underscores before capitals at the end of words if it was
&gt; +    # preceeded by lower case letter or number.
&gt; +    # (This puts an underscore before A in isA but not A in CBA).
&gt; +    text = sub(r&apos;(?&lt;=[a-z0-9])([A-Z])(?=\b)&apos;, r&apos;_\1&apos;, text)
&gt; +
&gt; +    # Next add underscores when you have a captial letter which is followed by a capital letter
&gt; +    # but is not proceeded by one. (This puts an underscore before A in &apos;WordADay&apos;).
&gt; +    text = sub(r&apos;(?&lt;=[a-z0-9])([A-Z][A-Z_])&apos;, r&apos;_\1&apos;, text)

If you were worried about speed (which it sounds like you are a little based on having built a cache method), you could pre-compile these regexps and save them on the class.  (aka, just define them with _foo = re.compile() on the class and then access them with self._foo)

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:214
&gt; +    # Finally lower case the string and remove an initial underscore if present.
&gt; +    text = text.lower()
&gt; +    return text

This could just be one line. :)  And the comment looks slightly out of date, sinc eyou don&apos;t remove the underscore here.  Looks like your unit tests don&apos;t pass leading underscores, should they?

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:360
&gt; +    def lower_with_underscores_name(self):
&gt; +        &quot;&quot;&quot;Returns the parameter name in the lower with underscores format.&quot;&quot;&quot;
&gt; +        if self._cached_lower_with_underscores_name is None:
&gt; +            self._cached_lower_with_underscores_name = _convert_to_lower_with_underscores(self.name)
&gt; +        return self._cached_lower_with_underscores_name

Sorry, I should have mentioned earlier that you can just use the @memoized decorator if you&apos;d like.  I&apos;m not sure it matters.  It&apos;s in common.meomized iirc.

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:1503
&gt; +        error(parameter.row, &apos;readability/parameter_name&apos;, 5,

I need to come up with a good replacement for this error function someday.

&gt; Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py:122
&gt; +    def test_convert_to_lower_with_underscores(self):
&gt; +        self.assertEquals(cpp_style._convert_to_lower_with_underscores(&apos;ABC&apos;), &apos;abc&apos;)
&gt; +        self.assertEquals(cpp_style._convert_to_lower_with_underscores(&apos;aB&apos;), &apos;a_b&apos;)
&gt; +        self.assertEquals(cpp_style._convert_to_lower_with_underscores(&apos;isAName&apos;), &apos;is_a_name&apos;)
&gt; +        self.assertEquals(cpp_style._convert_to_lower_with_underscores(&apos;AnotherTest&apos;), &apos;another_test&apos;)
&gt; +        self.assertEquals(cpp_style._convert_to_lower_with_underscores(&apos;PassRefPtr&lt;MyClass&gt;&apos;), &apos;pass_ref_ptr&lt;my_class&gt;&apos;)
&gt; +
&gt; +    def test_create_acronym(self):
&gt; +        self.assertEquals(cpp_style._create_acronym(&apos;ABC&apos;), &apos;ABC&apos;)
&gt; +        self.assertEquals(cpp_style._create_acronym(&apos;IsAName&apos;), &apos;IAN&apos;)
&gt; +        self.assertEquals(cpp_style._create_acronym(&apos;PassRefPtr&lt;MyClass&gt;&apos;), &apos;PRP&lt;MC&gt;&apos;)

I&apos;m *so* glad you added these.  So helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327080</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-27 10:57:19 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 77485 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77485&amp;action=review
&gt; 
&gt; LGTM.  Feel free to land as is.

Hurray! So happy to get in this final step.

Landed as http://trac.webkit.org/changeset/74688

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:210
&gt; &gt; +    text = sub(r&apos;(?&lt;=[A-Za-z0-9])([A-Z])(?=[a-z])&apos;, r&apos;_\1&apos;, text)
&gt; &gt; +
&gt; &gt; +    # Next add underscores before capitals at the end of words if it was
&gt; &gt; +    # preceeded by lower case letter or number.
&gt; &gt; +    # (This puts an underscore before A in isA but not A in CBA).
&gt; &gt; +    text = sub(r&apos;(?&lt;=[a-z0-9])([A-Z])(?=\b)&apos;, r&apos;_\1&apos;, text)
&gt; &gt; +
&gt; &gt; +    # Next add underscores when you have a captial letter which is followed by a capital letter
&gt; &gt; +    # but is not proceeded by one. (This puts an underscore before A in &apos;WordADay&apos;).
&gt; &gt; +    text = sub(r&apos;(?&lt;=[a-z0-9])([A-Z][A-Z_])&apos;, r&apos;_\1&apos;, text)
&gt; 
&gt; If you were worried about speed (which it sounds like you are a little based on having built a cache method), you could pre-compile these regexps and save them on the class.  (aka, just define them with _foo = re.compile() on the class and then access them with self._foo)

fwiw, the style code uses a pattern (which I think you dislike) of calling a local sub (etc.) function which caches the regex in a hashtable based on the string.


&gt; 
&gt; &gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:214
&gt; &gt; +    # Finally lower case the string and remove an initial underscore if present.
&gt; &gt; +    text = text.lower()
&gt; &gt; +    return text
&gt; 
&gt; This could just be one line. :)
Fixed.

&gt;  And the comment looks slightly out of date, sinc eyou don&apos;t remove the underscore here. 

Thanks! Removed. (At one point my regex added an underscore at the front of the string and this was a clean-up step, but I made the regex better to avoid this.)

&gt;  Looks like your unit tests don&apos;t pass leading underscores, should they?

Added one just for fun.

&gt; &gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:360
&gt; &gt; +    def lower_with_underscores_name(self):
&gt; &gt; +        &quot;&quot;&quot;Returns the parameter name in the lower with underscores format.&quot;&quot;&quot;
&gt; &gt; +        if self._cached_lower_with_underscores_name is None:
&gt; &gt; +            self._cached_lower_with_underscores_name = _convert_to_lower_with_underscores(self.name)
&gt; &gt; +        return self._cached_lower_with_underscores_name
&gt; 
&gt; Sorry, I should have mentioned earlier that you can just use the @memoized decorator if you&apos;d like.  I&apos;m not sure it matters.  It&apos;s in common.meomized iirc.

Changed to use meomized. That is indeed simpler. I should consider using this for the FunctionDetection.parameter_list as well.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77312</attachid>
            <date>2010-12-23 00:03:30 -0800</date>
            <delta_ts>2010-12-27 00:03:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51523-20101223000329.patch</filename>
            <type>text/plain</type>
            <size>9703</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0NTli
YjY3MzI5OTU2MTczZTVjY2U0MTgwYmU2MDMwMDk4YWY1NTBiLi42OWI2NDk0YWRjNjY5ODI5OGJi
OTg4NDE1ZWRiMWFlYTg4ZTBmZjBlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMTItMjIgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBjaGVjayBmb3IgbWVhbmluZ2xlc3Mg
dmFyaWFibGUgbmFtZXMgaW4gZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE1MjMKKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoX2NvbnZlcnRfdG9f
bG93ZXJfd2l0aF91bmRlcnNjb3Jlcyk6IENoYW5nZXMgYWxsIGNhbWVsQ2FzZSBvciBQYXNjYWxD
YXNlCisgICAgICAgIGludG8gbG93ZXJfd2l0aF91bmRlcnNjb3Jlcy4KKyAgICAgICAgKF9jcmVh
dGVfYWNyb255bSk6IENoYW5nZXMgYWxsIGNhbWVsQ2FzZSBvciBQYXNjYWxDYXNlIGludG8gYW4g
YWNyb255bS4KKyAgICAgICAgKGNoZWNrX2Z1bmN0aW9uX2RlZmluaXRpb24pOiBBZGRlZCBtZXRo
b2Qgd2hpY2ggZG9lcyBhIHN0eWxlCisgICAgICAgIGNoZWNrIGZvciBmdW5jdGlvbiBkZWZpbml0
aW9ucyB0byBjaGVjayBmb3IgbWVhbmluZ2xlc3MgdmFyaWFibGUgbmFtZXMuCisgICAgICAgIChw
cm9jZXNzX2xpbmUpOiBBZGRlZCBjYWxsIHRvIGNoZWNrX2Z1bmN0aW9uX2RlZmluaXRpb24uCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHk6
CisgICAgICAgIChDcHBTdHlsZVRlc3RCYXNlLnBlcmZvcm1fc2luZ2xlX2xpbmVfbGludCk6IFJl
bW92ZWQgdGhlIHBhcmFtZXRlciBuYW1lIGNoZWNrCisgICAgICAgIGJlY2F1c2Ugd2hlbiBvbmx5
IGNoZWNraW5nIGEgc25pcHBldCwgdGhlcmUgYXJlIGEgbG90IG9mIGJvZ3VzIGZ1bmN0aW9ucy4K
KyAgICAgICAgKENwcFN0eWxlVGVzdEJhc2UucGVyZm9ybV9tdWx0aV9saW5lX2xpbnQpOiBEaXR0
by4gKEFuZCByZW1vdmVkIGEgYm9ndXMgZmlsdGVyLikKKyAgICAgICAgKFdlYktpdFN0eWxlVGVz
dC50ZXN0X3BhcmFtZXRlcl9uYW1lcyk6IFRlc3RzIGZvciB0aGUgZnVuY3Rpb25hbGl0eS4KKwog
MjAxMC0xMi0yMSAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlcnMvY3BwLnB5CmluZGV4IDdmMGFiZDY3ODM4NTE0MmYwMDBjZjdkYzA2OGY0YmFm
MmRjMjNhMjAuLmZmYTk5N2I5ZjUyZDQzMzA5YzNhNGVjNWNiMGRjMTc1ZTdmZGE5NzggMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CkBAIC0xOTIsNiAr
MTkyLDI5IEBAIGRlZiBpdGVyYXRpdmVseV9yZXBsYWNlX21hdGNoZXNfd2l0aF9jaGFyKHBhdHRl
cm4sIGNoYXJfcmVwbGFjZW1lbnQsIHMpOgogICAgICAgICBzID0gc1s6c3RhcnRfbWF0Y2hfaW5k
ZXhdICsgY2hhcl9yZXBsYWNlbWVudCAqIG1hdGNoX2xlbmd0aCArIHNbZW5kX21hdGNoX2luZGV4
Ol0KIAogCitkZWYgX2NvbnZlcnRfdG9fbG93ZXJfd2l0aF91bmRlcnNjb3Jlcyh0ZXh0KToKKyAg
ICAiQ29udmVydCBhbGwgdGV4dCBzdHJpbmdzIGluIHRleHQgdG8gbG93ZXJzIHdpdGggdW5kZXJz
Y29yZXMuIgorICAgICMgRmlyc3QgYWRkIHVuZGVyc2NvcmVzIGJlZm9yZSBhbnkgY2FwaXRhbCBs
ZXR0ZXIgZm9sbG93ZWQgYnkgYSBsb3dlciBjYXNlIGxldHRlci4KKyAgICAjIChUaGlzIHB1dCBh
biB1bmRlcnNjb3JlIGJlZm9yZSBQYXNzd29yZCBidXQgbm90IFAgYW5kIEEgaW4gV1BBUGFzc3dv
cmQpLgorICAgIHRleHQgPSBzdWIocicoW0EtWl0pKD89W2Etel0pJywgcidfXDEnLCB0ZXh0KQor
CisgICAgIyBOZXh0IGFkZCB1bmRlcnNjcm9yZXMgd2hlbiB5b3UgaGF2ZSBhIGNhcHRpYWwgbGV0
dGVyIHdoaWNoIGlzIGZvbGxvd2VkIGJ5IGEgY2FwaXRhbCBsZXR0ZXIKKyAgICAjIGJ1dCBpcyBu
b3QgcHJvY2VlZGVkIGJ5IG9uZS4gKFRoaXMgcHV0cyBhbiB1bmRlcnNjb3JlIGJlZm9yZSBBQkMg
aW4gJ1dvcmRBQkMnKS4KKyAgICB0ZXh0ID0gc3ViKHInKD88IVtBLVpdKShbQS1aXVtBLVpdKScs
IHInX1wxJywgdGV4dCkKKworICAgICMgRmluYWxseSBsb3dlciBjYXNlIHRoZSBzdHJpbmcgYW5k
IHJlbW92ZSBhbiBpbml0aWFsIHVuZGVyc2NvcmUgaWYgcHJlc2VudC4KKyAgICB0ZXh0ID0gdGV4
dC5sb3dlcigpCisgICAgaWYgdGV4dC5zdGFydHN3aXRoKCdfJyk6CisgICAgICAgIHRleHQgPSB0
ZXh0WzE6XQorICAgIHJldHVybiB0ZXh0CisKKworZGVmIF9jcmVhdGVfYWNyb255bSh0ZXh0KToK
KyAgICAjIFJlbW92ZXMgYWxsIGxvd2VyIGNhc2UgbGV0dGVycyBleGNlcHQgdGhvc2Ugc3RhcnRp
bmcgd29yZHMuCisgICAgdGV4dCA9IHN1YihyJyg/PCFcYilbYS16XScsICcnLCB0ZXh0KQorICAg
IHJldHVybiB0ZXh0LnVwcGVyKCkKKworCiBkZWYgdXBfdG9fdW5tYXRjaGVkX2Nsb3NpbmdfcGFy
ZW4ocyk6CiAgICAgIiIiU3BsaXRzIGEgc3RyaW5nIGludG8gdHdvIHBhcnRzIHVwIHRvIGZpcnN0
IHVubWF0Y2hlZCAnKScuCiAKQEAgLTEzODQsNiArMTQwNyw0NyBAQCBkZWYgY2hlY2tfZm9yX2Z1
bmN0aW9uX2xlbmd0aHMoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmdW5jdGlvbl9zdGF0ZSwg
ZXJyb3IpOgogICAgICAgICBmdW5jdGlvbl9zdGF0ZS5jb3VudChsaW5lX251bWJlcikgICMgQ291
bnQgbm9uLWJsYW5rL25vbi1jb21tZW50IGxpbmVzLgogCiAKK2RlZiBjaGVja19mdW5jdGlvbl9k
ZWZpbml0aW9uKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZnVuY3Rpb25fc3RhdGUsIGVycm9y
KToKKyAgICAiIiJDaGVjayB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb25zIGZvciBzdHlsZSBpc3N1
ZXMuCisKKyAgICBTcGVjaWZpY2FsbHksIGNoZWNrIHRoYXQgcGFyYW1ldGVyIG5hbWVzIGluIGRl
Y2xhcmF0aW9ucyBhZGQgaW5mb3JtYXRpb24uCisKKyAgICBBcmdzOgorICAgICAgIGNsZWFuX2xp
bmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4KKyAgICAg
ICBsaW5lX251bWJlcjogVGhlIG51bWJlciBvZiB0aGUgbGluZSB0byBjaGVjay4KKyAgICAgICBm
dW5jdGlvbl9zdGF0ZTogQ3VycmVudCBmdW5jdGlvbiBuYW1lIGFuZCBsaW5lcyBpbiBib2R5IHNv
IGZhci4KKyAgICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhbnkgZXJyb3Jz
IGZvdW5kLgorICAgICIiIgorICAgIGRlZiBjaGVja19wYXJhbWV0ZXJfYWdhaW5zdF90ZXh0KGNh
bm9uaWNhbF9wYXJhbWV0ZXJfbmFtZSwgdGV4dCwgZXJyb3IpOgorICAgICAgICAiIiJDaGVja3Mg
dG8gc2VlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgdGV4dC4iIiIK
KyAgICAgICAgY2Fub25pY2FsX3RleHQgPSBfY29udmVydF90b19sb3dlcl93aXRoX3VuZGVyc2Nv
cmVzKHRleHQpCisgICAgICAgIGFjcm9ueW0gPSBfY3JlYXRlX2Fjcm9ueW0odGV4dCkubG93ZXIo
KQorICAgICAgICBpZiBjYW5vbmljYWxfdGV4dC5maW5kKGNhbm9uaWNhbF9wYXJhbWV0ZXJfbmFt
ZSkgIT0gLTEgb3IgYWNyb255bS5maW5kKGNhbm9uaWNhbF9wYXJhbWV0ZXJfbmFtZSkgIT0gLTE6
CisgICAgICAgICAgICBlcnJvcihwYXJhbWV0ZXJfbGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9w
YXJhbWV0ZXJfbmFtZScsIDUsCisgICAgICAgICAgICAgICAgICAnVGhlIHBhcmFtZXRlciBuYW1l
ICIlcyIgYWRkcyBubyBpbmZvcm1hdGlvbiwgc28gaXQgc2hvdWxkIGJlIHJlbW92ZWQuJyAlIHBh
cmFtZXRlcl9uYW1lKQorCisgICAgIyBPbmx5IGRvIGNoZWNrcyB3aGVuIHdlIGhhdmUgYSBmdW5j
dGlvbiBkZWNsYXJhdGlvbi4KKyAgICBpZiBsaW5lX251bWJlciAhPSBmdW5jdGlvbl9zdGF0ZS5i
b2R5X3N0YXJ0X2xpbmVfbnVtYmVyIG9yIG5vdCBmdW5jdGlvbl9zdGF0ZS5pc19kZWNsYXJhdGlv
bjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYXJhbWV0ZXJfbGlzdCA9IGZ1bmN0aW9uX3N0YXRl
LmdldF9wYXJhbWV0ZXJfbGlzdCgpCisgICAgZm9yIHBhcmFtZXRlciBpbiBwYXJhbWV0ZXJfbGlz
dDoKKyAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJbMF0KKyAgICAgICAgcGFyYW1l
dGVyX25hbWUgPSBwYXJhbWV0ZXJbMV0KKyAgICAgICAgcGFyYW1ldGVyX2xpbmVfbnVtYmVyID0g
cGFyYW1ldGVyWzJdCisKKyAgICAgICAgaWYgbm90IGxlbihwYXJhbWV0ZXJfbmFtZSk6CisgICAg
ICAgICAgICBjb250aW51ZQorCisgICAgICAgIGNhbm9uaWNhbF9wYXJhbWV0ZXJfbmFtZSA9IF9j
b252ZXJ0X3RvX2xvd2VyX3dpdGhfdW5kZXJzY29yZXMocGFyYW1ldGVyX25hbWUpCisgICAgICAg
IGlmIGxlbihwYXJhbWV0ZXJfbGlzdCkgPT0gMSBhbmQgbWF0Y2goJ3NldFtBLVpdJywgZnVuY3Rp
b25fc3RhdGUuY3VycmVudF9mdW5jdGlvbik6CisgICAgICAgICAgICB0cmltbWVkX2Z1bmN0aW9u
X25hbWUgPSBmdW5jdGlvbl9zdGF0ZS5jdXJyZW50X2Z1bmN0aW9uW2xlbignc2V0Jyk6XQorICAg
ICAgICAgICAgY2hlY2tfcGFyYW1ldGVyX2FnYWluc3RfdGV4dChjYW5vbmljYWxfcGFyYW1ldGVy
X25hbWUsIHRyaW1tZWRfZnVuY3Rpb25fbmFtZSwgZXJyb3IpCisKKyAgICAgICAgY2hlY2tfcGFy
YW1ldGVyX2FnYWluc3RfdGV4dChjYW5vbmljYWxfcGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlcl90
eXBlLCBlcnJvcikKKworCisKIGRlZiBjaGVja19wYXNzX3B0cl91c2FnZShjbGVhbl9saW5lcywg
bGluZV9udW1iZXIsIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcik6CiAgICAgIiIiQ2hlY2sgZm9yIHBy
b3BlciB1c2FnZSBvZiBQYXNzKlB0ci4KIApAQCAtMzA5Nyw2ICszMTYxLDcgQEAgZGVmIHByb2Nl
c3NfbGluZShmaWxlbmFtZSwgZmlsZV9leHRlbnNpb24sCiAgICAgY2hlY2tfZm9yX2Z1bmN0aW9u
X2xlbmd0aHMoY2xlYW5fbGluZXMsIGxpbmUsIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcikKICAgICBp
ZiBzZWFyY2gocidcYk5PTElOVFxiJywgcmF3X2xpbmVzW2xpbmVdKTogICMgaWdub3JlIG5vbGlu
dCBsaW5lcwogICAgICAgICByZXR1cm4KKyAgICBjaGVja19mdW5jdGlvbl9kZWZpbml0aW9uKGNs
ZWFuX2xpbmVzLCBsaW5lLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpCiAgICAgY2hlY2tfcGFzc19w
dHJfdXNhZ2UoY2xlYW5fbGluZXMsIGxpbmUsIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcikKICAgICBj
aGVja19mb3JfbXVsdGlsaW5lX2NvbW1lbnRzX2FuZF9zdHJpbmdzKGNsZWFuX2xpbmVzLCBsaW5l
LCBlcnJvcikKICAgICBjaGVja19zdHlsZShjbGVhbl9saW5lcywgbGluZSwgZmlsZV9leHRlbnNp
b24sIGNsYXNzX3N0YXRlLCBmaWxlX3N0YXRlLCBlcnJvcikKQEAgLTMxODAsNiArMzI0NSw3IEBA
IGNsYXNzIENwcENoZWNrZXIob2JqZWN0KToKICAgICAgICAgJ3JlYWRhYmlsaXR5L2Z1bmN0aW9u
JywKICAgICAgICAgJ3JlYWRhYmlsaXR5L211bHRpbGluZV9jb21tZW50JywKICAgICAgICAgJ3Jl
YWRhYmlsaXR5L211bHRpbGluZV9zdHJpbmcnLAorICAgICAgICAncmVhZGFiaWxpdHkvcGFyYW1l
dGVyX25hbWUnLAogICAgICAgICAncmVhZGFiaWxpdHkvbmFtaW5nJywKICAgICAgICAgJ3JlYWRh
YmlsaXR5L251bGwnLAogICAgICAgICAncmVhZGFiaWxpdHkvcGFzc19wdHInLApkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQpp
bmRleCBkZjJjYTFlYWQ1YWE2Y2FjYjI3M2VkY2Q4OTMxOGM1NzkzYTQwMTcwLi5lODgyYzRhNzRi
Y2JjMDA0NzI0MjE5NTM1ZmZiMDM2ZDllYzE1MWU1IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQpAQCAtMTUyLDYgKzE1
Miw3IEBAIGNsYXNzIENwcFN0eWxlVGVzdEJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICBiYXNpY19lcnJvcl9ydWxlcyA9ICgnLWJ1aWxkL2hlYWRlcl9ndWFyZCcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICctbGVnYWwvY29weXJpZ2h0JywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJy1yZWFkYWJpbGl0eS9mbl9zaXplJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJy1yZWFkYWJpbGl0eS9wYXJhbWV0ZXJfbmFtZScsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICctd2hpdGVzcGFjZS9lbmRpbmdfbmV3bGluZScpCiAgICAgICAgIHJldHVy
biBzZWxmLnBlcmZvcm1fbGludChjb2RlLCBmaWxlbmFtZSwgYmFzaWNfZXJyb3JfcnVsZXMpCiAK
QEAgLTE1OSw3ICsxNjAsNyBAQCBjbGFzcyBDcHBTdHlsZVRlc3RCYXNlKHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICBkZWYgcGVyZm9ybV9tdWx0aV9saW5lX2xpbnQoc2VsZiwgY29kZSwgZmlsZV9l
eHRlbnNpb24pOgogICAgICAgICBiYXNpY19lcnJvcl9ydWxlcyA9ICgnLWJ1aWxkL2hlYWRlcl9n
dWFyZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbGVnYWwvY29weXJpZ2h0JywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tdWx0aV9saW5lX2ZpbHRlcicsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICctcmVhZGFiaWxpdHkvcGFyYW1ldGVyX25hbWUnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXdoaXRlc3BhY2UvZW5kaW5nX25ld2xpbmUn
KQogICAgICAgICByZXR1cm4gc2VsZi5wZXJmb3JtX2xpbnQoY29kZSwgJ3Rlc3QuJyArIGZpbGVf
ZXh0ZW5zaW9uLCBiYXNpY19lcnJvcl9ydWxlcykKIApAQCAtMzk5Myw2ICszOTk0LDM0IEBAIGNs
YXNzIFdlYktpdFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgnT3duUHRyPHVpbnQzMl90PiB1bmRlcl9zY29yZShuZXcgdWludDMyX3QpOycsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZGVyX3Njb3JlJyArIG5hbWVfdW5kZXJzY29yZV9l
cnJvcl9tZXNzYWdlKQogCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyX25hbWVzKHNlbGYpOgorICAg
ICAgICAjIExlYXZlIG1lYW5pbmdsZXNzIHZhcmlhYmxlIG5hbWVzIG91dCBvZiBmdW5jdGlvbiBk
ZWNsYXJhdGlvbnMuCisgICAgICAgIG1lYW5pbmdsZXNzX3ZhcmlhYmxlX25hbWVfZXJyb3JfbWVz
c2FnZSA9ICdUaGUgcGFyYW1ldGVyIG5hbWUgIiVzIiBhZGRzIG5vIGluZm9ybWF0aW9uLCBzbyBp
dCBzaG91bGQgYmUgcmVtb3ZlZC4gIFtyZWFkYWJpbGl0eS9wYXJhbWV0ZXJfbmFtZV0gWzVdJwor
CisgICAgICAgIHBhcmFtZXRlcl9lcnJvcl9ydWxlcyA9ICgnLScsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnK3JlYWRhYmlsaXR5L3BhcmFtZXRlcl9uYW1lJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVy
Zm9ybV9saW50KCd2b2lkIGZ1bmMoaW50KTsnLCAndGVzdC5jcHAnLCBwYXJhbWV0ZXJfZXJyb3Jf
cnVsZXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZWFuaW5nbGVzc192YXJpYWJsZV9u
YW1lX2Vycm9yX21lc3NhZ2UgJSAnaXRlbUNvdW50JywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5wZXJmb3JtX2xpbnQoJ3ZvaWQgc2V0SXRlbUNvdW50KHNpemVfdCBpdGVtQ291bnQp
OycsICd0ZXN0LmNwcCcsIHBhcmFtZXRlcl9lcnJvcl9ydWxlcykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG1lYW5pbmdsZXNzX3ZhcmlhYmxlX25hbWVfZXJyb3JfbWVzc2FnZSAlICdhYmND
b3VudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9saW50KCd2b2lk
IHNldEFCQ0NvdW50KHNpemVfdCBhYmNDb3VudCk7JywgJ3Rlc3QuY3BwJywgcGFyYW1ldGVyX2Vy
cm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVhbmluZ2xlc3NfdmFyaWFi
bGVfbmFtZV9lcnJvcl9tZXNzYWdlICUgJ2VjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5wZXJmb3JtX2xpbnQoJ3ZvaWQgc2V0RXhjZXB0aW9uQ29kZShpbnQgZWMpOycsICd0ZXN0
LmNwcCcsIHBhcmFtZXRlcl9lcnJvcl9ydWxlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KCcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBz
ZXROYXRlTGF0ZUNvdW50KHNpemVfdCBlbGF0ZSk7JywgJ3Rlc3QuY3BwJywgcGFyYW1ldGVyX2Vy
cm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVhbmluZ2xlc3NfdmFyaWFi
bGVfbmFtZV9lcnJvcl9tZXNzYWdlICUgJ2VjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5wZXJmb3JtX2xpbnQoJ3ZvaWQgZnVuY3QoRXhjZXB0aW9uQ29kZSBlYyk7JywgJ3Rlc3Qu
Y3BwJywgcGFyYW1ldGVyX2Vycm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
bWVhbmluZ2xlc3NfdmFyaWFibGVfbmFtZV9lcnJvcl9tZXNzYWdlICUgJ2NvbnRleHQnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5jdChQYXNz
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IGNvbnRleHQpOycsICd0ZXN0LmNwcCcsIHBh
cmFtZXRlcl9lcnJvcl9ydWxlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5jdChOYXRl
TGF0ZSBlbGF0ZSk7JywgJ3Rlc3QuY3BwJywgcGFyYW1ldGVyX2Vycm9yX3J1bGVzKSkKKworICAg
ICAgICAjIERvbid0IGhhdmUgZ2VuZXJhdGUgd2FybmluZ3MgZm9yIGZ1bmN0aW9ucy4KKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
cGVyZm9ybV9saW50KCd2b2lkIGZ1bmN0KFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gY29udGV4dClcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3tcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31c
bicsICd0ZXN0LmNwcCcsIHBhcmFtZXRlcl9lcnJvcl9ydWxlcykpCiAKICAgICBkZWYgdGVzdF9j
b21tZW50cyhzZWxmKToKICAgICAgICAgIyBBIGNvbW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZiBh
IGxpbmUgaXMgb2suCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77484</attachid>
            <date>2010-12-27 00:03:06 -0800</date>
            <delta_ts>2010-12-27 00:45:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51523-20101227000304.patch</filename>
            <type>text/plain</type>
            <size>17147</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlODlm
MmM0MGE2YWIzMGJlNjBkYTBkODYyZTk2MjlkNzFjYWNkYzc0Li41ZmU4MTg3ODc4MGEwNTY2Y2Fl
YzJmYWUyYmU1ZTY4N2ZkODFmM2MzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzYgQEAKIDIwMTAtMTItMjYgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBjaGVjayBmb3IgbWVhbmluZ2xlc3Mg
dmFyaWFibGUgbmFtZXMgaW4gZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE1MjMKKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogRXhlbXB0ZWQgSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAorICAgICAgICBmcm9tIHRoZSBuZXcgY2hlY2sgYW5kIHdoaXRlc3BhY2Uv
cGFyZW5zIGJlY2F1c2UgdGhlIHN5bnRheCBpcyB1bnVzdWFsIGFuZAorICAgICAgICBwcm9kdWNl
ZCBhIGZhaXIgbnVtYmVyIG9mIHBvc2l0aXZlcyBmb3IgdGhlc2UgY2hlY2tzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoX2NvbnZl
cnRfdG9fbG93ZXJfd2l0aF91bmRlcnNjb3Jlcyk6IFVzZWQgYXMgYSBjYW5vbmljYWwgZm9ybSBm
b3IgdHlwZSBuYW1lcworICAgICAgICBhbmQgcGFyYW1ldGVyIG5hbWVzIHdoZW4gZGV0ZXJtaW5p
bmcgaWYgdGhlIHBhcmFtZXRlciBuYW1lIGlzIHVzZWxlc3MuCisgICAgICAgIChfY3JlYXRlX2Fj
cm9ueW0pOiBVc2VkIHRvIGNoZWNrIGZvciByZWR1bmRhbnQgdmFyaWFibGUgbmFtZXMgaW4gY2Fz
ZXMgbGlrZSAiRXhjZXB0aW9uQ29kZSBlYyIKKyAgICAgICAgKFBhcmFtZXRlci5sb3dlcl93aXRo
X3VuZGVyc2NvcmVzX25hbWUpOiBHaXZlcyBiYWNrIHRoZSBwYXJhbWV0ZXIgbmFtZSBpbiBhIGxv
d2VyX3dpdGhfdW5kZXJzY29yZQorICAgICAgICBmb3JtYXQuCisgICAgICAgIChfY2hlY2tfcGFy
YW1ldGVyX25hbWVfYWdhaW5zdF90ZXh0KTogIENoZWNrcyB0byBzZWUgaWYgdGhlIHBhcmFtZXRl
ciBuYW1lIGlzIGluIHRoZQorICAgICAgICB0ZXh0IG9yIGFuIGFjcm9ueW0gb2YgaXQuCisgICAg
ICAgIChjaGVja19mdW5jdGlvbl9kZWZpbml0aW9uKTogQ2hlY2tzIGZ1bmN0aW9uIGRlZmluaXRp
b25zIGZvciBtZWFuaW5nbGVzcyB2YXJpYWJsZSBuYW1lcy4KKyAgICAgICAgKHByb2Nlc3NfbGlu
ZSk6IEFkZGVkIGNhbGwgdG8gY2hlY2tfZnVuY3Rpb25fZGVmaW5pdGlvbi4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weToKKyAgICAgICAg
KENwcEZ1bmN0aW9uc1Rlc3QudGVzdF9jb252ZXJ0X3RvX2xvd2VyX3dpdGhfdW5kZXJzY29yZXMp
OiBUZXN0IGZvciBfY29udmVydF90b19sb3dlcl93aXRoX3VuZGVyc2NvcmVzLgorICAgICAgICAo
Q3BwRnVuY3Rpb25zVGVzdC50ZXN0X2NyZWF0ZV9hY3JvbnltKTogVGVzdCBmb3IgX2NyZWF0ZV9h
Y3JvbnltLgorICAgICAgICAoQ3BwRnVuY3Rpb25zVGVzdC50ZXN0X2NoZWNrX3BhcmFtZXRlcl9h
Z2FpbnN0X3RleHQpOiBUZXN0IGZvciBfY2hlY2tfcGFyYW1ldGVyX2FnYWluc3RfdGV4dC4KKyAg
ICAgICAgKENwcFN0eWxlVGVzdEJhc2UucGVyZm9ybV9zaW5nbGVfbGluZV9saW50KTogUmVtb3Zl
ZCB0aGUgcGFyYW1ldGVyIG5hbWUgY2hlY2sKKyAgICAgICAgYmVjYXVzZSB3aGVuIG9ubHkgY2hl
Y2tpbmcgYSBzbmlwcGV0LCB0aGVyZSBhcmUgYSBsb3Qgb2YgYm9ndXMgZnVuY3Rpb25zLgorICAg
ICAgICAoQ3BwU3R5bGVUZXN0QmFzZS5wZXJmb3JtX211bHRpX2xpbmVfbGludCk6IERpdHRvIGFu
ZCByZW1vdmVkIGEgYm9ndXMgZmlsdGVyCisgICAgICAgIHRoYXQgSSBwdXQgdGhlcmUgcHJldmlv
dXNseSBhbmQganVzdCBub3RpY2VkLgorICAgICAgICAoV2ViS2l0U3R5bGVUZXN0LnRlc3RfcGFy
YW1ldGVyX25hbWVzKTogVGVzdHMgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IC0tIGJvdGgKKyAgICAg
ICAgY2hlY2tfZnVuY3Rpb25fZGVmaW5pdGlvbiBhbmQgcHJvY2Vzc19saW5lLgorCisyMDEwLTEy
LTI2ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KIAogICAgICAgICBjaGVjay13ZWJraXQtc3R5bGUgc2hvdWxkIGJl
IGFibGUgdG8gcGFyc2UgZnVuY3Rpb24gZGVjbGFyYXRpb24gcGFyYW1ldGVycy4KZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCBiYTY1MDJjMTNiNDY0Mzk1ZWRiMGRl
MTQ1MjJiZDNkOWQwNjJiMjFhLi40YmNkODRhZjI4YzExYzUwNjdiMmFkZTFlZDc1N2YzNDA3ODU0
NWVkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC0xNTYsNiAr
MTU2LDEwIEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAgICMgd2UgZG9uJ3QgY2hl
Y2sgZm9yIHVuZGVyc2NvcmVzIGluIHRoYXQgZGlyZWN0b3J5LgogICAgICAgIi9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvIl0sCiAgICAgIFsiLXJlYWRhYmlsaXR5L25hbWluZyJdKSwKKyAgICAo
WyMgSklUU3R1YnMgaGFzIGFuIHVzdWFsIHN5bnRheCB3aGljaCBjYXVzZXMgZmFsc2UgYWxhcm1z
IGZvciBhIGZldyBjaGVja3MuCisgICAgICAiSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cCJdLAorICAgICBbIi1yZWFkYWJpbGl0eS9wYXJhbWV0ZXJfbmFtZSIsCisgICAgICAiLXdoaXRl
c3BhY2UvcGFyZW5zIl0pLAogCiAgICAgIyBXZWJLaXQyIHJ1bGVzOgogICAgICMgV2ViS2l0MiBk
b2Vzbid0IHVzZSBjb25maWcuaCwgYW5kIGNlcnRhaW4gZGlyZWN0b3JpZXMgaGF2ZSBvdGhlcgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQppbmRleCBmNzIx
YjlmNTEyYTNhZjExNGE2YTUyNDY4ODA2NDg5ZGEzYjFkODE4Li4wMTBiMzRmNTU1MmM1MDVjOTA5
MTJmNzY2NGMwZGJlZWVlOTQyMzk4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXJzL2NwcC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NoZWNrZXJzL2NwcC5weQpAQCAtMTkyLDYgKzE5MiwzNSBAQCBkZWYgaXRlcmF0aXZlbHlfcmVw
bGFjZV9tYXRjaGVzX3dpdGhfY2hhcihwYXR0ZXJuLCBjaGFyX3JlcGxhY2VtZW50LCBzKToKICAg
ICAgICAgcyA9IHNbOnN0YXJ0X21hdGNoX2luZGV4XSArIGNoYXJfcmVwbGFjZW1lbnQgKiBtYXRj
aF9sZW5ndGggKyBzW2VuZF9tYXRjaF9pbmRleDpdCiAKIAorZGVmIF9jb252ZXJ0X3RvX2xvd2Vy
X3dpdGhfdW5kZXJzY29yZXModGV4dCk6CisgICAgIiIiQ29udmVydHMgYWxsIHRleHQgc3RyaW5n
cyBpbiBjYW1lbENhc2Ugb3IgUGFzY2FsQ2FzZSB0byBsb3dlcnMgd2l0aCB1bmRlcnNjb3Jlcy4i
IiIKKworICAgICMgRmlyc3QgYWRkIHVuZGVyc2NvcmVzIGJlZm9yZSBhbnkgY2FwaXRhbCBsZXR0
ZXIgZm9sbG93ZWQgYnkgYSBsb3dlciBjYXNlIGxldHRlcgorICAgICMgYXMgbG9uZyBhcyBpdCBp
cyBpbiBhIHdvcmQuCisgICAgIyAoVGhpcyBwdXQgYW4gdW5kZXJzY29yZSBiZWZvcmUgUGFzc3dv
cmQgYnV0IG5vdCBQIGFuZCBBIGluIFdQQVBhc3N3b3JkKS4KKyAgICB0ZXh0ID0gc3ViKHInKD88
PVtBLVphLXowLTldKShbQS1aXSkoPz1bYS16XSknLCByJ19cMScsIHRleHQpCisKKyAgICAjIE5l
eHQgYWRkIHVuZGVyc2NvcmVzIGJlZm9yZSBjYXBpdGFscyBhdCB0aGUgZW5kIG9mIHdvcmRzIGlm
IGl0IHdhcworICAgICMgcHJlY2VlZGVkIGJ5IGxvd2VyIGNhc2UgbGV0dGVyIG9yIG51bWJlci4K
KyAgICAjIChUaGlzIHB1dHMgYW4gdW5kZXJzY29yZSBiZWZvcmUgQSBpbiBpc0EgYnV0IG5vdCBB
IGluIENCQSkuCisgICAgdGV4dCA9IHN1YihyJyg/PD1bYS16MC05XSkoW0EtWl0pKD89XGIpJywg
cidfXDEnLCB0ZXh0KQorCisgICAgIyBOZXh0IGFkZCB1bmRlcnNjb3JlcyB3aGVuIHlvdSBoYXZl
IGEgY2FwdGlhbCBsZXR0ZXIgd2hpY2ggaXMgZm9sbG93ZWQgYnkgYSBjYXBpdGFsIGxldHRlcgor
ICAgICMgYnV0IGlzIG5vdCBwcm9jZWVkZWQgYnkgb25lLiAoVGhpcyBwdXRzIGFuIHVuZGVyc2Nv
cmUgYmVmb3JlIEEgaW4gJ1dvcmRBRGF5JykuCisgICAgdGV4dCA9IHN1YihyJyg/PD1bYS16MC05
XSkoW0EtWl1bQS1aX10pJywgcidfXDEnLCB0ZXh0KQorCisgICAgIyBGaW5hbGx5IGxvd2VyIGNh
c2UgdGhlIHN0cmluZyBhbmQgcmVtb3ZlIGFuIGluaXRpYWwgdW5kZXJzY29yZSBpZiBwcmVzZW50
LgorICAgIHRleHQgPSB0ZXh0Lmxvd2VyKCkKKyAgICByZXR1cm4gdGV4dAorCisKK2RlZiBfY3Jl
YXRlX2Fjcm9ueW0odGV4dCk6CisgICAgIiIiQ3JlYXRlcyBhbiBhY3JvbnltIGZvciB0aGUgZ2l2
ZW4gdGV4dC4iIiIKKyAgICAjIFJlbW92ZXMgYWxsIGxvd2VyIGNhc2UgbGV0dGVycyBleGNlcHQg
dGhvc2Ugc3RhcnRpbmcgd29yZHMuCisgICAgdGV4dCA9IHN1YihyJyg/PCFcYilbYS16XScsICcn
LCB0ZXh0KQorICAgIHJldHVybiB0ZXh0LnVwcGVyKCkKKworCiBkZWYgdXBfdG9fdW5tYXRjaGVk
X2Nsb3NpbmdfcGFyZW4ocyk6CiAgICAgIiIiU3BsaXRzIGEgc3RyaW5nIGludG8gdHdvIHBhcnRz
IHVwIHRvIGZpcnN0IHVubWF0Y2hlZCAnKScuCiAKQEAgLTMyMiw2ICszNTEsMTQgQEAgY2xhc3Mg
UGFyYW1ldGVyKG9iamVjdCk6CiAgICAgICAgICMgUmVtb3ZlIGFueSBpbml0aWFsaXplcnMgZnJv
bSB0aGUgcGFyYW1ldGVyIG5hbWUgKGUuZy4gaW50IGkgPSA1KS4KICAgICAgICAgc2VsZi5uYW1l
ID0gc3ViKHInPS4qJywgJycsIHBhcmFtZXRlcltwYXJhbWV0ZXJfbmFtZV9pbmRleDpdKS5zdHJp
cCgpCiAgICAgICAgIHNlbGYucm93ID0gcm93CisgICAgICAgICMgTm9uZSBpcyBhIHBsYWNlaG9s
ZGVyIGFzIHRoaXMgdmFsdWUgaXMgY29tcHV0ZXIgb24gZGVtYW5kLgorICAgICAgICBzZWxmLl9s
b3dlcl93aXRoX3VuZGVyc2NvcmVzX25hbWUgPSBOb25lCisKKyAgICBkZWYgbG93ZXJfd2l0aF91
bmRlcnNjb3Jlc19uYW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXJhbWV0ZXIg
bmFtZSBpbiB0aGUgbG93ZXIgd2l0aCB1bmRlcnNjb3JlcyBmb3JtYXQuIiIiCisgICAgICAgIGlm
IHNlbGYuX2xvd2VyX3dpdGhfdW5kZXJzY29yZXNfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAg
c2VsZi5fbG93ZXJfd2l0aF91bmRlcnNjb3Jlc19uYW1lID0gX2NvbnZlcnRfdG9fbG93ZXJfd2l0
aF91bmRlcnNjb3JlcyhzZWxmLm5hbWUpCisgICAgICAgIHJldHVybiBzZWxmLl9sb3dlcl93aXRo
X3VuZGVyc2NvcmVzX25hbWUKIAogCiBjbGFzcyBTaW5nbGVMaW5lVmlldyhvYmplY3QpOgpAQCAt
MTQ0Myw2ICsxNDgwLDcxIEBAIGRlZiBjaGVja19mb3JfZnVuY3Rpb25fbGVuZ3RocyhjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcik6CiAgICAgICAgIGZ1bmN0
aW9uX3N0YXRlLmNvdW50KGxpbmVfbnVtYmVyKSAgIyBDb3VudCBub24tYmxhbmsvbm9uLWNvbW1l
bnQgbGluZXMuCiAKIAorZGVmIF9jaGVja19wYXJhbWV0ZXJfbmFtZV9hZ2FpbnN0X3RleHQocGFy
YW1ldGVyLCB0ZXh0LCBlcnJvcik6CisgICAgIiIiQ2hlY2tzIHRvIHNlZSBpZiB0aGUgcGFyYW1l
dGVyIG5hbWUgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgdGV4dC4KKworICAgIFJldHVybiBmYWxz
ZSBpZiB0aGUgY2hlY2sgZmFpbGVkIChpLmUuIGFuIGVycm9yIHdhcyBwcm9kdWNlZCkuCisgICAg
IiIiCisKKyAgICAjIFRyZWF0ICdsb3dlciB3aXRoIHVuZGVyc2NvcmVzJyBhcyBhIGNhbm9uaWNh
bCBmb3JtIGJlY2F1c2UgaXQgaXMKKyAgICAjIGNhc2UgaW5zZW5zaXRpdmUgd2hpbGUgc3RpbGwg
cmV0YWluaW5nIHdvcmQgYnJlYWtzLiAoVGhpcyBlbnN1cmVzIHRoYXQKKyAgICAjICdlbGF0ZScg
ZG9lc24ndCBsb29rIGxpa2UgaXQgaXMgZHVwbGljYXRpbmcgb2YgJ05hdGVMYXRlJy4pCisgICAg
Y2Fub25pY2FsX3BhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLmxvd2VyX3dpdGhfdW5kZXJzY29y
ZXNfbmFtZSgpCisKKyAgICAjIEFwcGVuZHMgIm9iamVjdCIgdG8gYWxsIHRleHQgdG8gY2F0Y2gg
dmFyaWFibGVzIHRoYXQgZGlkIHRoZSBzYW1lIChidXQgb25seQorICAgICMgZG8gdGhpcyB3aGVu
IHRoZSBwYXJhbWV0ZXIgbmFtZSBpcyBtb3JlIHRoYW4gYSBzaW5nbGUgY2hhcmFjdGVyIHRvIGF2
b2lkCisgICAgIyBmbGFnZ2luZyAnYicgd2hpY2ggbWF5IGJlIGFuIG9rIHZhcmlhYmxlIHdoZW4g
dXNlZCBpbiBhbiByZ2JhIGZ1bmN0aW9uKS4KKyAgICBpZiBsZW4oY2Fub25pY2FsX3BhcmFtZXRl
cl9uYW1lKSA+IDE6CisgICAgICAgIHRleHQgPSBzdWIocicoXHcpXGInLCByJ1wxT2JqZWN0Jywg
dGV4dCkKKyAgICBjYW5vbmljYWxfdGV4dCA9IF9jb252ZXJ0X3RvX2xvd2VyX3dpdGhfdW5kZXJz
Y29yZXModGV4dCkKKworICAgICMgVXNlZCB0byBkZXRlY3QgY2FzZXMgbGlrZSBlYyBmb3IgRXhj
ZXB0aW9uQ29kZS4KKyAgICBhY3JvbnltID0gX2NyZWF0ZV9hY3JvbnltKHRleHQpLmxvd2VyKCkK
KyAgICBpZiBjYW5vbmljYWxfdGV4dC5maW5kKGNhbm9uaWNhbF9wYXJhbWV0ZXJfbmFtZSkgIT0g
LTEgb3IgYWNyb255bS5maW5kKGNhbm9uaWNhbF9wYXJhbWV0ZXJfbmFtZSkgIT0gLTE6CisgICAg
ICAgIGVycm9yKHBhcmFtZXRlci5yb3csICdyZWFkYWJpbGl0eS9wYXJhbWV0ZXJfbmFtZScsIDUs
CisgICAgICAgICAgICAgICdUaGUgcGFyYW1ldGVyIG5hbWUgIiVzIiBhZGRzIG5vIGluZm9ybWF0
aW9uLCBzbyBpdCBzaG91bGQgYmUgcmVtb3ZlZC4nICUgcGFyYW1ldGVyLm5hbWUpCisgICAgICAg
IHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKKworZGVmIGNoZWNrX2Z1bmN0aW9uX2Rl
ZmluaXRpb24oY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3Ip
OgorICAgICIiIkNoZWNrIHRoYXQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9yIHN0eWxlIGlzc3Vl
cy4KKworICAgIFNwZWNpZmljYWxseSwgY2hlY2sgdGhhdCBwYXJhbWV0ZXIgbmFtZXMgaW4gZGVj
bGFyYXRpb25zIGFkZCBpbmZvcm1hdGlvbi4KKworICAgIEFyZ3M6CisgICAgICAgY2xlYW5fbGlu
ZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgorICAgICAg
IGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNoZWNrLgorICAgICAgIGZ1
bmN0aW9uX3N0YXRlOiBDdXJyZW50IGZ1bmN0aW9uIG5hbWUgYW5kIGxpbmVzIGluIGJvZHkgc28g
ZmFyLgorICAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMg
Zm91bmQuCisgICAgIiIiCisgICAgIyBPbmx5IGRvIGNoZWNrcyB3aGVuIHdlIGhhdmUgYSBmdW5j
dGlvbiBkZWNsYXJhdGlvbi4KKyAgICBpZiBsaW5lX251bWJlciAhPSBmdW5jdGlvbl9zdGF0ZS5i
b2R5X3N0YXJ0X2xpbmVfbnVtYmVyIG9yIG5vdCBmdW5jdGlvbl9zdGF0ZS5pc19kZWNsYXJhdGlv
bjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYXJhbWV0ZXJfbGlzdCA9IGZ1bmN0aW9uX3N0YXRl
LnBhcmFtZXRlcl9saXN0KCkKKyAgICBmb3IgcGFyYW1ldGVyIGluIHBhcmFtZXRlcl9saXN0Ogor
ICAgICAgICBpZiBub3QgcGFyYW1ldGVyLm5hbWU6CisgICAgICAgICAgICBjb250aW51ZQorCisg
ICAgICAgICMgQ2hlY2sgdGhlIHBhcmFtZXRlciBuYW1lIGFnYWluc3QgdGhlIGZ1bmN0aW9uIG5h
bWUgZm9yIHNpbmdsZSBwYXJhbWV0ZXIgc2V0IGZ1bmN0aW9ucy4KKyAgICAgICAgaWYgbGVuKHBh
cmFtZXRlcl9saXN0KSA9PSAxIGFuZCBtYXRjaCgnc2V0W0EtWl0nLCBmdW5jdGlvbl9zdGF0ZS5j
dXJyZW50X2Z1bmN0aW9uKToKKyAgICAgICAgICAgIHRyaW1tZWRfZnVuY3Rpb25fbmFtZSA9IGZ1
bmN0aW9uX3N0YXRlLmN1cnJlbnRfZnVuY3Rpb25bbGVuKCdzZXQnKTpdCisgICAgICAgICAgICBp
ZiBub3QgX2NoZWNrX3BhcmFtZXRlcl9uYW1lX2FnYWluc3RfdGV4dChwYXJhbWV0ZXIsIHRyaW1t
ZWRfZnVuY3Rpb25fbmFtZSwgZXJyb3IpOgorICAgICAgICAgICAgICAgICMgU2luY2UgYW4gZXJy
b3Igd2FzIG5vdGVkIGZvciB0aGlzIG5hbWUsIG1vdmUgdG8gdGhlIG5leHQgcGFyYW1ldGVyLgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBDaGVjayB0aGUgcGFyYW1ldGVy
IG5hbWUgYWdhaW5zdCB0aGUgdHlwZS4KKyAgICAgICAgaWYgbm90IF9jaGVja19wYXJhbWV0ZXJf
bmFtZV9hZ2FpbnN0X3RleHQocGFyYW1ldGVyLCBwYXJhbWV0ZXIudHlwZSwgZXJyb3IpOgorICAg
ICAgICAgICAgY29udGludWUKKworICAgICAgICAjIFNraXAgc2luZ2xlIGxldHRlciBwYXJhbWV0
ZXJzIGJlZm9yZSBjb21wYXJpbmcgYWdhaW5zdCB2YWx1ZSAoYmVjYXVzZSAnYScgd291bGQKKyAg
ICAgICAgIyBiZSBmbGFnZ2VkLCBidXQgaXQgbWF5IGJlIGFuIG9rIHZhcmlhYmxlIHdoZW4gdXNl
ZCBpbiBhbiByZ2JhIGZ1bmN0aW9uKS4KKyAgICAgICAgaWYgbGVuKHBhcmFtZXRlci5uYW1lKSA+
IDE6CisgICAgICAgICAgICAjICd2YWx1ZScgaXMgYSBtZWFuaW5nbGVzcyB2YXJpYWJsZSBuYW1l
IHRoYXQgaXMgdXNlZCBpbiBzb21lIHBsYWNlcywgc28gZmxhZyBpdC4KKyAgICAgICAgICAgIF9j
aGVja19wYXJhbWV0ZXJfbmFtZV9hZ2FpbnN0X3RleHQocGFyYW1ldGVyLCAndmFsdWUnLCBlcnJv
cikKKworCiBkZWYgY2hlY2tfcGFzc19wdHJfdXNhZ2UoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVy
LCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpOgogICAgICIiIkNoZWNrIGZvciBwcm9wZXIgdXNhZ2Ug
b2YgUGFzcypQdHIuCiAKQEAgLTMxNTYsNiArMzI1OCw3IEBAIGRlZiBwcm9jZXNzX2xpbmUoZmls
ZW5hbWUsIGZpbGVfZXh0ZW5zaW9uLAogICAgIGNoZWNrX2Zvcl9mdW5jdGlvbl9sZW5ndGhzKGNs
ZWFuX2xpbmVzLCBsaW5lLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpCiAgICAgaWYgc2VhcmNoKHIn
XGJOT0xJTlRcYicsIHJhd19saW5lc1tsaW5lXSk6ICAjIGlnbm9yZSBub2xpbnQgbGluZXMKICAg
ICAgICAgcmV0dXJuCisgICAgY2hlY2tfZnVuY3Rpb25fZGVmaW5pdGlvbihjbGVhbl9saW5lcywg
bGluZSwgZnVuY3Rpb25fc3RhdGUsIGVycm9yKQogICAgIGNoZWNrX3Bhc3NfcHRyX3VzYWdlKGNs
ZWFuX2xpbmVzLCBsaW5lLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpCiAgICAgY2hlY2tfZm9yX211
bHRpbGluZV9jb21tZW50c19hbmRfc3RyaW5ncyhjbGVhbl9saW5lcywgbGluZSwgZXJyb3IpCiAg
ICAgY2hlY2tfc3R5bGUoY2xlYW5fbGluZXMsIGxpbmUsIGZpbGVfZXh0ZW5zaW9uLCBjbGFzc19z
dGF0ZSwgZmlsZV9zdGF0ZSwgZXJyb3IpCkBAIC0zMjM5LDYgKzMzNDIsNyBAQCBjbGFzcyBDcHBD
aGVja2VyKG9iamVjdCk6CiAgICAgICAgICdyZWFkYWJpbGl0eS9mdW5jdGlvbicsCiAgICAgICAg
ICdyZWFkYWJpbGl0eS9tdWx0aWxpbmVfY29tbWVudCcsCiAgICAgICAgICdyZWFkYWJpbGl0eS9t
dWx0aWxpbmVfc3RyaW5nJywKKyAgICAgICAgJ3JlYWRhYmlsaXR5L3BhcmFtZXRlcl9uYW1lJywK
ICAgICAgICAgJ3JlYWRhYmlsaXR5L25hbWluZycsCiAgICAgICAgICdyZWFkYWJpbGl0eS9udWxs
JywKICAgICAgICAgJ3JlYWRhYmlsaXR5L3Bhc3NfcHRyJywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKaW5kZXggNGY4NDY5
M2RmMGI5NDZlODc5NTA2ZmI0OWFhOTkxMjNlMTU1MjZjYS4uYTdlOTAzZmYyZDE1NWE2MTUwODk2
OTk0NTY0NWJhOTFlODM5OWJmYSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKQEAgLTEwOSw2ICsxMDksMTggQEAgY2xh
c3MgQ3BwRnVuY3Rpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAiIiJTdXBwb3J0
cyB0ZXN0aW5nIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCBuZWVkIENwcFN0eWxlVGVzdEJhc2UuIiIi
CiAKKyAgICBkZWYgdGVzdF9jb252ZXJ0X3RvX2xvd2VyX3dpdGhfdW5kZXJzY29yZXMoc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNwcF9zdHlsZS5fY29udmVydF90b19sb3dlcl93
aXRoX3VuZGVyc2NvcmVzKCdBQkMnKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KGNwcF9zdHlsZS5fY29udmVydF90b19sb3dlcl93aXRoX3VuZGVyc2NvcmVzKCdhQicpLCAnYV9i
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3BwX3N0eWxlLl9jb252ZXJ0X3RvX2xvd2Vy
X3dpdGhfdW5kZXJzY29yZXMoJ2lzQU5hbWUnKSwgJ2lzX2FfbmFtZScpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKGNwcF9zdHlsZS5fY29udmVydF90b19sb3dlcl93aXRoX3VuZGVyc2NvcmVz
KCdBbm90aGVyVGVzdCcpLCAnYW5vdGhlcl90ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoY3BwX3N0eWxlLl9jb252ZXJ0X3RvX2xvd2VyX3dpdGhfdW5kZXJzY29yZXMoJ1Bhc3NSZWZQ
dHI8TXlDbGFzcz4nKSwgJ3Bhc3NfcmVmX3B0cjxteV9jbGFzcz4nKQorCisgICAgZGVmIHRlc3Rf
Y3JlYXRlX2Fjcm9ueW0oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNwcF9zdHls
ZS5fY3JlYXRlX2Fjcm9ueW0oJ0FCQycpLCAnQUJDJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoY3BwX3N0eWxlLl9jcmVhdGVfYWNyb255bSgnSXNBTmFtZScpLCAnSUFOJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoY3BwX3N0eWxlLl9jcmVhdGVfYWNyb255bSgnUGFzc1JlZlB0cjxN
eUNsYXNzPicpLCAnUFJQPE1DPicpCisKICAgICBkZWYgdGVzdF9pc19jX29yX29iamVjdGl2ZV9j
KHNlbGYpOgogICAgICAgICBjbGVhbl9saW5lcyA9IGNwcF9zdHlsZS5DbGVhbnNlZExpbmVzKFsn
J10pCiAgICAgICAgIGNsZWFuX29iamNfbGluZXMgPSBjcHBfc3R5bGUuQ2xlYW5zZWRMaW5lcyhb
JyNpbXBvcnQgImhlYWRlci5oIiddKQpAQCAtMjA2LDYgKzIxOCwxMiBAQCBjbGFzcyBDcHBGdW5j
dGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIGluZGV4ICs9IDEKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW5kZXgsIGxlbihleHBlY3RlZF9wYXJhbWV0ZXJzKSkK
IAorICAgIGRlZiB0ZXN0X2NoZWNrX3BhcmFtZXRlcl9hZ2FpbnN0X3RleHQoc2VsZik6CisgICAg
ICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKKyAgICAg
ICAgcGFyYW1ldGVyID0gY3BwX3N0eWxlLlBhcmFtZXRlcignRm9vRiBvb0YnLCA0LCAxKQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKGNwcF9zdHlsZS5fY2hlY2tfcGFyYW1ldGVyX25hbWVfYWdh
aW5zdF90ZXh0KHBhcmFtZXRlciwgJ0Zvb0YnLCBlcnJvcl9jb2xsZWN0b3IpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhlcnJvcl9jb2xsZWN0b3IucmVzdWx0cygpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAnVGhlIHBhcmFtZXRlciBuYW1lICJvb0YiIGFkZHMgbm8gaW5mb3JtYXRp
b24sIHNvIGl0IHNob3VsZCBiZSByZW1vdmVkLiAgW3JlYWRhYmlsaXR5L3BhcmFtZXRlcl9uYW1l
XSBbNV0nKQogCiBjbGFzcyBDcHBTdHlsZVRlc3RCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAiIiJQcm92aWRlcyBzb21lIHVzZWZ1bCBoZWxwZXIgZnVuY3Rpb25zIGZvciBjcHBfc3R5bGUg
dGVzdHMuCkBAIC0yMzksNiArMjU3LDcgQEAgY2xhc3MgQ3BwU3R5bGVUZXN0QmFzZSh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgICAgIGJhc2ljX2Vycm9yX3J1bGVzID0gKCctYnVpbGQvaGVhZGVy
X2d1YXJkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1sZWdhbC9jb3B5cmlnaHQn
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJlYWRhYmlsaXR5L2ZuX3NpemUnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJlYWRhYmlsaXR5L3BhcmFtZXRlcl9uYW1l
JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy13aGl0ZXNwYWNlL2VuZGluZ19uZXds
aW5lJykKICAgICAgICAgcmV0dXJuIHNlbGYucGVyZm9ybV9saW50KGNvZGUsIGZpbGVuYW1lLCBi
YXNpY19lcnJvcl9ydWxlcykKIApAQCAtMjQ2LDcgKzI2NSw3IEBAIGNsYXNzIENwcFN0eWxlVGVz
dEJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBwZXJmb3JtX211bHRpX2xpbmVfbGlu
dChzZWxmLCBjb2RlLCBmaWxlX2V4dGVuc2lvbik6CiAgICAgICAgIGJhc2ljX2Vycm9yX3J1bGVz
ID0gKCctYnVpbGQvaGVhZGVyX2d1YXJkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jy1sZWdhbC9jb3B5cmlnaHQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW11bHRp
X2xpbmVfZmlsdGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1yZWFkYWJpbGl0
eS9wYXJhbWV0ZXJfbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2hpdGVz
cGFjZS9lbmRpbmdfbmV3bGluZScpCiAgICAgICAgIHJldHVybiBzZWxmLnBlcmZvcm1fbGludChj
b2RlLCAndGVzdC4nICsgZmlsZV9leHRlbnNpb24sIGJhc2ljX2Vycm9yX3J1bGVzKQogCkBAIC00
MDk4LDYgKzQxMTcsNTkgQEAgY2xhc3MgV2ViS2l0U3R5bGVUZXN0KENwcFN0eWxlVGVzdEJhc2Up
OgogICAgICAgICBzZWxmLmFzc2VydF9saW50KCdPd25QdHI8dWludDMyX3Q+IHVuZGVyX3Njb3Jl
KG5ldyB1aW50MzJfdCk7JywKICAgICAgICAgICAgICAgICAgICAgICAgICAndW5kZXJfc2NvcmUn
ICsgbmFtZV91bmRlcnNjb3JlX2Vycm9yX21lc3NhZ2UpCiAKKyAgICBkZWYgdGVzdF9wYXJhbWV0
ZXJfbmFtZXMoc2VsZik6CisgICAgICAgICMgTGVhdmUgbWVhbmluZ2xlc3MgdmFyaWFibGUgbmFt
ZXMgb3V0IG9mIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgbWVhbmluZ2xlc3NfdmFy
aWFibGVfbmFtZV9lcnJvcl9tZXNzYWdlID0gJ1RoZSBwYXJhbWV0ZXIgbmFtZSAiJXMiIGFkZHMg
bm8gaW5mb3JtYXRpb24sIHNvIGl0IHNob3VsZCBiZSByZW1vdmVkLiAgW3JlYWRhYmlsaXR5L3Bh
cmFtZXRlcl9uYW1lXSBbNV0nCisKKyAgICAgICAgcGFyYW1ldGVyX2Vycm9yX3J1bGVzID0gKCct
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrcmVhZGFiaWxpdHkvcGFyYW1l
dGVyX25hbWUnKQorICAgICAgICAjIE5vIHZhcmlhYmxlIG5hbWUsIHNvIG5vIGVycm9yLgorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscygnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5wZXJmb3JtX2xpbnQoJ3ZvaWQgZnVuYyhpbnQpOycsICd0ZXN0LmNwcCcsIHBhcmFtZXRlcl9l
cnJvcl9ydWxlcykpCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBjb3B5aW5nIHRoZSBuYW1lIG9m
IHRoZSBzZXQgZnVuY3Rpb24gY2F1c2VzIHRoZSBlcnJvciAod2l0aCBzb21lIG9kZCBjYXNpbmcp
LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZWFuaW5nbGVzc192YXJpYWJsZV9uYW1lX2Vy
cm9yX21lc3NhZ2UgJSAnaXRlbUNvdW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5wZXJmb3JtX2xpbnQoJ3ZvaWQgc2V0SXRlbUNvdW50KHNpemVfdCBpdGVtQ291bnQpOycsICd0
ZXN0LmNwcCcsIHBhcmFtZXRlcl9lcnJvcl9ydWxlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKG1lYW5pbmdsZXNzX3ZhcmlhYmxlX25hbWVfZXJyb3JfbWVzc2FnZSAlICdhYmNDb3VudCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9saW50KCd2b2lkIHNldEFC
Q0NvdW50KHNpemVfdCBhYmNDb3VudCk7JywgJ3Rlc3QuY3BwJywgcGFyYW1ldGVyX2Vycm9yX3J1
bGVzKSkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IGNvcHlpbmcgYSB0eXBlIG5hbWUgd2lsbCB0
cmlnZ2VyIHRoZSB3YXJuaW5nIChldmVuIGlmIHRoZSB0eXBlIGlzIGEgdGVtcGxhdGUgcGFyYW1l
dGVyKS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVhbmluZ2xlc3NfdmFyaWFibGVfbmFt
ZV9lcnJvcl9tZXNzYWdlICUgJ2NvbnRleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5jdChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ+IGNvbnRleHQpOycsICd0ZXN0LmNwcCcsIHBhcmFtZXRlcl9lcnJvcl9ydWxlcykpCisK
KyAgICAgICAgIyBWZXJpZnkgdGhhdCBhY3JvbnltcyBhcyB2YXJpYWJsZSBuYW1lcyB0cmlnZ2Vy
IHRoZSBlcnJvciAoZm9yIGJvdGggc2V0IGZ1bmN0aW9ucyBhbmQgdHlwZSBuYW1lcykuCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lYW5pbmdsZXNzX3ZhcmlhYmxlX25hbWVfZXJyb3JfbWVz
c2FnZSAlICdlYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9saW50
KCd2b2lkIHNldEV4Y2VwdGlvbkNvZGUoaW50IGVjKTsnLCAndGVzdC5jcHAnLCBwYXJhbWV0ZXJf
ZXJyb3JfcnVsZXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZWFuaW5nbGVzc192YXJp
YWJsZV9uYW1lX2Vycm9yX21lc3NhZ2UgJSAnZWMnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5jdChFeGNlcHRpb25Db2RlIGVjKTsnLCAndGVz
dC5jcHAnLCBwYXJhbWV0ZXJfZXJyb3JfcnVsZXMpKQorCisgICAgICAgICMgJ29iamVjdCcgYWxv
bmUsIGFwcGVuZGVkLCBvciBhcyBwYXJ0IG9mIGFuIGFjcm9ueW0gaXMgbWVhbmluZ2xlc3MuCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lYW5pbmdsZXNzX3ZhcmlhYmxlX25hbWVfZXJyb3Jf
bWVzc2FnZSAlICdvYmplY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZv
cm1fbGludCgndm9pZCBmdW5jdChSZW5kZXJWaWV3IG9iamVjdCk7JywgJ3Rlc3QuY3BwJywgcGFy
YW1ldGVyX2Vycm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVhbmluZ2xl
c3NfdmFyaWFibGVfbmFtZV9lcnJvcl9tZXNzYWdlICUgJ3ZpZXdPYmplY3QnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5jdChSZW5kZXJWaWV3
IHZpZXdPYmplY3QpOycsICd0ZXN0LmNwcCcsIHBhcmFtZXRlcl9lcnJvcl9ydWxlcykpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lYW5pbmdsZXNzX3ZhcmlhYmxlX25hbWVfZXJyb3JfbWVz
c2FnZSAlICdydm8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGlu
dCgndm9pZCBmdW5jdChSZW5kZXJWaWV3IHJ2byk7JywgJ3Rlc3QuY3BwJywgcGFyYW1ldGVyX2Vy
cm9yX3J1bGVzKSkKKworICAgICAgICAjICd2YWx1ZScgaXMgYSBtZWFuaW5nbGVzcyB2YXJpYWJs
ZSBuYW1lLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZWFuaW5nbGVzc192YXJpYWJsZV9u
YW1lX2Vycm9yX21lc3NhZ2UgJSAndmFsdWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5jdChSZW5kZXJWaWV3IHZhbHVlKTsnLCAndGVzdC5j
cHAnLCBwYXJhbWV0ZXJfZXJyb3JfcnVsZXMpKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCByLCBn
LCBiLCBhbmQgYSBhcmUgYWxsb3dlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJycsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9saW50KCd2b2lkIHNldFJHQkFW
YWx1ZXMoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOycsICd0ZXN0LmNwcCcsIHBhcmFtZXRl
cl9lcnJvcl9ydWxlcykpCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBhIHNpbXBsZSBzdWJzdHJp
bmcgbWF0Y2ggaXNuJ3QgZG9uZSB3aGljaCB3b3VsZCBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMuCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnBlcmZvcm1fbGludCgndm9pZCBzZXROYXRlTGF0ZUNvdW50KHNpemVfdCBlbGF0ZSk7Jywg
J3Rlc3QuY3BwJywgcGFyYW1ldGVyX2Vycm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9saW50KCd2
b2lkIGZ1bmN0KE5hdGVMYXRlIGVsYXRlKTsnLCAndGVzdC5jcHAnLCBwYXJhbWV0ZXJfZXJyb3Jf
cnVsZXMpKQorCisgICAgICAgICMgRG9uJ3QgaGF2ZSBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IgZnVu
Y3Rpb25zIChvbmx5IGRlY2xhcmF0aW9ucykuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5j
dChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IGNvbnRleHQpXG4nCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7XG4nCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nLCAndGVzdC5jcHAnLCBwYXJhbWV0
ZXJfZXJyb3JfcnVsZXMpKQogCiAgICAgZGVmIHRlc3RfY29tbWVudHMoc2VsZik6CiAgICAgICAg
ICMgQSBjb21tZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGlzIG9rLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77485</attachid>
            <date>2010-12-27 00:45:39 -0800</date>
            <delta_ts>2010-12-27 10:57:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51523-20101227004538.patch</filename>
            <type>text/plain</type>
            <size>17105</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlODlm
MmM0MGE2YWIzMGJlNjBkYTBkODYyZTk2MjlkNzFjYWNkYzc0Li41ZmU4MTg3ODc4MGEwNTY2Y2Fl
YzJmYWUyYmU1ZTY4N2ZkODFmM2MzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzYgQEAKIDIwMTAtMTItMjYgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBjaGVjayBmb3IgbWVhbmluZ2xlc3Mg
dmFyaWFibGUgbmFtZXMgaW4gZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE1MjMKKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogRXhlbXB0ZWQgSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAorICAgICAgICBmcm9tIHRoZSBuZXcgY2hlY2sgYW5kIHdoaXRlc3BhY2Uv
cGFyZW5zIGJlY2F1c2UgdGhlIHN5bnRheCBpcyB1bnVzdWFsIGFuZAorICAgICAgICBwcm9kdWNl
ZCBhIGZhaXIgbnVtYmVyIG9mIHBvc2l0aXZlcyBmb3IgdGhlc2UgY2hlY2tzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoX2NvbnZl
cnRfdG9fbG93ZXJfd2l0aF91bmRlcnNjb3Jlcyk6IFVzZWQgYXMgYSBjYW5vbmljYWwgZm9ybSBm
b3IgdHlwZSBuYW1lcworICAgICAgICBhbmQgcGFyYW1ldGVyIG5hbWVzIHdoZW4gZGV0ZXJtaW5p
bmcgaWYgdGhlIHBhcmFtZXRlciBuYW1lIGlzIHVzZWxlc3MuCisgICAgICAgIChfY3JlYXRlX2Fj
cm9ueW0pOiBVc2VkIHRvIGNoZWNrIGZvciByZWR1bmRhbnQgdmFyaWFibGUgbmFtZXMgaW4gY2Fz
ZXMgbGlrZSAiRXhjZXB0aW9uQ29kZSBlYyIKKyAgICAgICAgKFBhcmFtZXRlci5sb3dlcl93aXRo
X3VuZGVyc2NvcmVzX25hbWUpOiBHaXZlcyBiYWNrIHRoZSBwYXJhbWV0ZXIgbmFtZSBpbiBhIGxv
d2VyX3dpdGhfdW5kZXJzY29yZQorICAgICAgICBmb3JtYXQuCisgICAgICAgIChfY2hlY2tfcGFy
YW1ldGVyX25hbWVfYWdhaW5zdF90ZXh0KTogIENoZWNrcyB0byBzZWUgaWYgdGhlIHBhcmFtZXRl
ciBuYW1lIGlzIGluIHRoZQorICAgICAgICB0ZXh0IG9yIGFuIGFjcm9ueW0gb2YgaXQuCisgICAg
ICAgIChjaGVja19mdW5jdGlvbl9kZWZpbml0aW9uKTogQ2hlY2tzIGZ1bmN0aW9uIGRlZmluaXRp
b25zIGZvciBtZWFuaW5nbGVzcyB2YXJpYWJsZSBuYW1lcy4KKyAgICAgICAgKHByb2Nlc3NfbGlu
ZSk6IEFkZGVkIGNhbGwgdG8gY2hlY2tfZnVuY3Rpb25fZGVmaW5pdGlvbi4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weToKKyAgICAgICAg
KENwcEZ1bmN0aW9uc1Rlc3QudGVzdF9jb252ZXJ0X3RvX2xvd2VyX3dpdGhfdW5kZXJzY29yZXMp
OiBUZXN0IGZvciBfY29udmVydF90b19sb3dlcl93aXRoX3VuZGVyc2NvcmVzLgorICAgICAgICAo
Q3BwRnVuY3Rpb25zVGVzdC50ZXN0X2NyZWF0ZV9hY3JvbnltKTogVGVzdCBmb3IgX2NyZWF0ZV9h
Y3JvbnltLgorICAgICAgICAoQ3BwRnVuY3Rpb25zVGVzdC50ZXN0X2NoZWNrX3BhcmFtZXRlcl9h
Z2FpbnN0X3RleHQpOiBUZXN0IGZvciBfY2hlY2tfcGFyYW1ldGVyX2FnYWluc3RfdGV4dC4KKyAg
ICAgICAgKENwcFN0eWxlVGVzdEJhc2UucGVyZm9ybV9zaW5nbGVfbGluZV9saW50KTogUmVtb3Zl
ZCB0aGUgcGFyYW1ldGVyIG5hbWUgY2hlY2sKKyAgICAgICAgYmVjYXVzZSB3aGVuIG9ubHkgY2hl
Y2tpbmcgYSBzbmlwcGV0LCB0aGVyZSBhcmUgYSBsb3Qgb2YgYm9ndXMgZnVuY3Rpb25zLgorICAg
ICAgICAoQ3BwU3R5bGVUZXN0QmFzZS5wZXJmb3JtX211bHRpX2xpbmVfbGludCk6IERpdHRvIGFu
ZCByZW1vdmVkIGEgYm9ndXMgZmlsdGVyCisgICAgICAgIHRoYXQgSSBwdXQgdGhlcmUgcHJldmlv
dXNseSBhbmQganVzdCBub3RpY2VkLgorICAgICAgICAoV2ViS2l0U3R5bGVUZXN0LnRlc3RfcGFy
YW1ldGVyX25hbWVzKTogVGVzdHMgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IC0tIGJvdGgKKyAgICAg
ICAgY2hlY2tfZnVuY3Rpb25fZGVmaW5pdGlvbiBhbmQgcHJvY2Vzc19saW5lLgorCisyMDEwLTEy
LTI2ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KIAogICAgICAgICBjaGVjay13ZWJraXQtc3R5bGUgc2hvdWxkIGJl
IGFibGUgdG8gcGFyc2UgZnVuY3Rpb24gZGVjbGFyYXRpb24gcGFyYW1ldGVycy4KZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCBiYTY1MDJjMTNiNDY0Mzk1ZWRiMGRl
MTQ1MjJiZDNkOWQwNjJiMjFhLi40YmNkODRhZjI4YzExYzUwNjdiMmFkZTFlZDc1N2YzNDA3ODU0
NWVkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC0xNTYsNiAr
MTU2LDEwIEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAgICMgd2UgZG9uJ3QgY2hl
Y2sgZm9yIHVuZGVyc2NvcmVzIGluIHRoYXQgZGlyZWN0b3J5LgogICAgICAgIi9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvIl0sCiAgICAgIFsiLXJlYWRhYmlsaXR5L25hbWluZyJdKSwKKyAgICAo
WyMgSklUU3R1YnMgaGFzIGFuIHVzdWFsIHN5bnRheCB3aGljaCBjYXVzZXMgZmFsc2UgYWxhcm1z
IGZvciBhIGZldyBjaGVja3MuCisgICAgICAiSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cCJdLAorICAgICBbIi1yZWFkYWJpbGl0eS9wYXJhbWV0ZXJfbmFtZSIsCisgICAgICAiLXdoaXRl
c3BhY2UvcGFyZW5zIl0pLAogCiAgICAgIyBXZWJLaXQyIHJ1bGVzOgogICAgICMgV2ViS2l0MiBk
b2Vzbid0IHVzZSBjb25maWcuaCwgYW5kIGNlcnRhaW4gZGlyZWN0b3JpZXMgaGF2ZSBvdGhlcgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQppbmRleCBmNzIx
YjlmNTEyYTNhZjExNGE2YTUyNDY4ODA2NDg5ZGEzYjFkODE4Li4yMzY0NTFlZGYxMGRmMjhkMTQ4
NjUyMDU2NTZlNDMyMGMyYTMwMmM0IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXJzL2NwcC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NoZWNrZXJzL2NwcC5weQpAQCAtMTkyLDYgKzE5MiwzNSBAQCBkZWYgaXRlcmF0aXZlbHlfcmVw
bGFjZV9tYXRjaGVzX3dpdGhfY2hhcihwYXR0ZXJuLCBjaGFyX3JlcGxhY2VtZW50LCBzKToKICAg
ICAgICAgcyA9IHNbOnN0YXJ0X21hdGNoX2luZGV4XSArIGNoYXJfcmVwbGFjZW1lbnQgKiBtYXRj
aF9sZW5ndGggKyBzW2VuZF9tYXRjaF9pbmRleDpdCiAKIAorZGVmIF9jb252ZXJ0X3RvX2xvd2Vy
X3dpdGhfdW5kZXJzY29yZXModGV4dCk6CisgICAgIiIiQ29udmVydHMgYWxsIHRleHQgc3RyaW5n
cyBpbiBjYW1lbENhc2Ugb3IgUGFzY2FsQ2FzZSB0byBsb3dlcnMgd2l0aCB1bmRlcnNjb3Jlcy4i
IiIKKworICAgICMgRmlyc3QgYWRkIHVuZGVyc2NvcmVzIGJlZm9yZSBhbnkgY2FwaXRhbCBsZXR0
ZXIgZm9sbG93ZWQgYnkgYSBsb3dlciBjYXNlIGxldHRlcgorICAgICMgYXMgbG9uZyBhcyBpdCBp
cyBpbiBhIHdvcmQuCisgICAgIyAoVGhpcyBwdXQgYW4gdW5kZXJzY29yZSBiZWZvcmUgUGFzc3dv
cmQgYnV0IG5vdCBQIGFuZCBBIGluIFdQQVBhc3N3b3JkKS4KKyAgICB0ZXh0ID0gc3ViKHInKD88
PVtBLVphLXowLTldKShbQS1aXSkoPz1bYS16XSknLCByJ19cMScsIHRleHQpCisKKyAgICAjIE5l
eHQgYWRkIHVuZGVyc2NvcmVzIGJlZm9yZSBjYXBpdGFscyBhdCB0aGUgZW5kIG9mIHdvcmRzIGlm
IGl0IHdhcworICAgICMgcHJlY2VlZGVkIGJ5IGxvd2VyIGNhc2UgbGV0dGVyIG9yIG51bWJlci4K
KyAgICAjIChUaGlzIHB1dHMgYW4gdW5kZXJzY29yZSBiZWZvcmUgQSBpbiBpc0EgYnV0IG5vdCBB
IGluIENCQSkuCisgICAgdGV4dCA9IHN1YihyJyg/PD1bYS16MC05XSkoW0EtWl0pKD89XGIpJywg
cidfXDEnLCB0ZXh0KQorCisgICAgIyBOZXh0IGFkZCB1bmRlcnNjb3JlcyB3aGVuIHlvdSBoYXZl
IGEgY2FwdGlhbCBsZXR0ZXIgd2hpY2ggaXMgZm9sbG93ZWQgYnkgYSBjYXBpdGFsIGxldHRlcgor
ICAgICMgYnV0IGlzIG5vdCBwcm9jZWVkZWQgYnkgb25lLiAoVGhpcyBwdXRzIGFuIHVuZGVyc2Nv
cmUgYmVmb3JlIEEgaW4gJ1dvcmRBRGF5JykuCisgICAgdGV4dCA9IHN1YihyJyg/PD1bYS16MC05
XSkoW0EtWl1bQS1aX10pJywgcidfXDEnLCB0ZXh0KQorCisgICAgIyBGaW5hbGx5IGxvd2VyIGNh
c2UgdGhlIHN0cmluZyBhbmQgcmVtb3ZlIGFuIGluaXRpYWwgdW5kZXJzY29yZSBpZiBwcmVzZW50
LgorICAgIHRleHQgPSB0ZXh0Lmxvd2VyKCkKKyAgICByZXR1cm4gdGV4dAorCisKK2RlZiBfY3Jl
YXRlX2Fjcm9ueW0odGV4dCk6CisgICAgIiIiQ3JlYXRlcyBhbiBhY3JvbnltIGZvciB0aGUgZ2l2
ZW4gdGV4dC4iIiIKKyAgICAjIFJlbW92ZXMgYWxsIGxvd2VyIGNhc2UgbGV0dGVycyBleGNlcHQg
dGhvc2Ugc3RhcnRpbmcgd29yZHMuCisgICAgdGV4dCA9IHN1YihyJyg/PCFcYilbYS16XScsICcn
LCB0ZXh0KQorICAgIHJldHVybiB0ZXh0LnVwcGVyKCkKKworCiBkZWYgdXBfdG9fdW5tYXRjaGVk
X2Nsb3NpbmdfcGFyZW4ocyk6CiAgICAgIiIiU3BsaXRzIGEgc3RyaW5nIGludG8gdHdvIHBhcnRz
IHVwIHRvIGZpcnN0IHVubWF0Y2hlZCAnKScuCiAKQEAgLTMyMiw2ICszNTEsMTMgQEAgY2xhc3Mg
UGFyYW1ldGVyKG9iamVjdCk6CiAgICAgICAgICMgUmVtb3ZlIGFueSBpbml0aWFsaXplcnMgZnJv
bSB0aGUgcGFyYW1ldGVyIG5hbWUgKGUuZy4gaW50IGkgPSA1KS4KICAgICAgICAgc2VsZi5uYW1l
ID0gc3ViKHInPS4qJywgJycsIHBhcmFtZXRlcltwYXJhbWV0ZXJfbmFtZV9pbmRleDpdKS5zdHJp
cCgpCiAgICAgICAgIHNlbGYucm93ID0gcm93CisgICAgICAgIHNlbGYuX2NhY2hlZF9sb3dlcl93
aXRoX3VuZGVyc2NvcmVzX25hbWUgPSBOb25lCisKKyAgICBkZWYgbG93ZXJfd2l0aF91bmRlcnNj
b3Jlc19uYW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgbmFtZSBp
biB0aGUgbG93ZXIgd2l0aCB1bmRlcnNjb3JlcyBmb3JtYXQuIiIiCisgICAgICAgIGlmIHNlbGYu
X2NhY2hlZF9sb3dlcl93aXRoX3VuZGVyc2NvcmVzX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAg
IHNlbGYuX2NhY2hlZF9sb3dlcl93aXRoX3VuZGVyc2NvcmVzX25hbWUgPSBfY29udmVydF90b19s
b3dlcl93aXRoX3VuZGVyc2NvcmVzKHNlbGYubmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nh
Y2hlZF9sb3dlcl93aXRoX3VuZGVyc2NvcmVzX25hbWUKIAogCiBjbGFzcyBTaW5nbGVMaW5lVmll
dyhvYmplY3QpOgpAQCAtMTQ0Myw2ICsxNDc5LDcxIEBAIGRlZiBjaGVja19mb3JfZnVuY3Rpb25f
bGVuZ3RocyhjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcik6
CiAgICAgICAgIGZ1bmN0aW9uX3N0YXRlLmNvdW50KGxpbmVfbnVtYmVyKSAgIyBDb3VudCBub24t
Ymxhbmsvbm9uLWNvbW1lbnQgbGluZXMuCiAKIAorZGVmIF9jaGVja19wYXJhbWV0ZXJfbmFtZV9h
Z2FpbnN0X3RleHQocGFyYW1ldGVyLCB0ZXh0LCBlcnJvcik6CisgICAgIiIiQ2hlY2tzIHRvIHNl
ZSBpZiB0aGUgcGFyYW1ldGVyIG5hbWUgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgdGV4dC4KKwor
ICAgIFJldHVybiBmYWxzZSBpZiB0aGUgY2hlY2sgZmFpbGVkIChpLmUuIGFuIGVycm9yIHdhcyBw
cm9kdWNlZCkuCisgICAgIiIiCisKKyAgICAjIFRyZWF0ICdsb3dlciB3aXRoIHVuZGVyc2NvcmVz
JyBhcyBhIGNhbm9uaWNhbCBmb3JtIGJlY2F1c2UgaXQgaXMKKyAgICAjIGNhc2UgaW5zZW5zaXRp
dmUgd2hpbGUgc3RpbGwgcmV0YWluaW5nIHdvcmQgYnJlYWtzLiAoVGhpcyBlbnN1cmVzIHRoYXQK
KyAgICAjICdlbGF0ZScgZG9lc24ndCBsb29rIGxpa2UgaXQgaXMgZHVwbGljYXRpbmcgb2YgJ05h
dGVMYXRlJy4pCisgICAgY2Fub25pY2FsX3BhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLmxvd2Vy
X3dpdGhfdW5kZXJzY29yZXNfbmFtZSgpCisKKyAgICAjIEFwcGVuZHMgIm9iamVjdCIgdG8gYWxs
IHRleHQgdG8gY2F0Y2ggdmFyaWFibGVzIHRoYXQgZGlkIHRoZSBzYW1lIChidXQgb25seQorICAg
ICMgZG8gdGhpcyB3aGVuIHRoZSBwYXJhbWV0ZXIgbmFtZSBpcyBtb3JlIHRoYW4gYSBzaW5nbGUg
Y2hhcmFjdGVyIHRvIGF2b2lkCisgICAgIyBmbGFnZ2luZyAnYicgd2hpY2ggbWF5IGJlIGFuIG9r
IHZhcmlhYmxlIHdoZW4gdXNlZCBpbiBhbiByZ2JhIGZ1bmN0aW9uKS4KKyAgICBpZiBsZW4oY2Fu
b25pY2FsX3BhcmFtZXRlcl9uYW1lKSA+IDE6CisgICAgICAgIHRleHQgPSBzdWIocicoXHcpXGIn
LCByJ1wxT2JqZWN0JywgdGV4dCkKKyAgICBjYW5vbmljYWxfdGV4dCA9IF9jb252ZXJ0X3RvX2xv
d2VyX3dpdGhfdW5kZXJzY29yZXModGV4dCkKKworICAgICMgVXNlZCB0byBkZXRlY3QgY2FzZXMg
bGlrZSBlYyBmb3IgRXhjZXB0aW9uQ29kZS4KKyAgICBhY3JvbnltID0gX2NyZWF0ZV9hY3Jvbnlt
KHRleHQpLmxvd2VyKCkKKyAgICBpZiBjYW5vbmljYWxfdGV4dC5maW5kKGNhbm9uaWNhbF9wYXJh
bWV0ZXJfbmFtZSkgIT0gLTEgb3IgYWNyb255bS5maW5kKGNhbm9uaWNhbF9wYXJhbWV0ZXJfbmFt
ZSkgIT0gLTE6CisgICAgICAgIGVycm9yKHBhcmFtZXRlci5yb3csICdyZWFkYWJpbGl0eS9wYXJh
bWV0ZXJfbmFtZScsIDUsCisgICAgICAgICAgICAgICdUaGUgcGFyYW1ldGVyIG5hbWUgIiVzIiBh
ZGRzIG5vIGluZm9ybWF0aW9uLCBzbyBpdCBzaG91bGQgYmUgcmVtb3ZlZC4nICUgcGFyYW1ldGVy
Lm5hbWUpCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKKworZGVmIGNo
ZWNrX2Z1bmN0aW9uX2RlZmluaXRpb24oY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmdW5jdGlv
bl9zdGF0ZSwgZXJyb3IpOgorICAgICIiIkNoZWNrIHRoYXQgZnVuY3Rpb24gZGVmaW5pdGlvbnMg
Zm9yIHN0eWxlIGlzc3Vlcy4KKworICAgIFNwZWNpZmljYWxseSwgY2hlY2sgdGhhdCBwYXJhbWV0
ZXIgbmFtZXMgaW4gZGVjbGFyYXRpb25zIGFkZCBpbmZvcm1hdGlvbi4KKworICAgIEFyZ3M6Cisg
ICAgICAgY2xlYW5fbGluZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRo
ZSBmaWxlLgorICAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5lIHRvIGNo
ZWNrLgorICAgICAgIGZ1bmN0aW9uX3N0YXRlOiBDdXJyZW50IGZ1bmN0aW9uIG5hbWUgYW5kIGxp
bmVzIGluIGJvZHkgc28gZmFyLgorICAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3
aXRoIGFueSBlcnJvcnMgZm91bmQuCisgICAgIiIiCisgICAgIyBPbmx5IGRvIGNoZWNrcyB3aGVu
IHdlIGhhdmUgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgICBpZiBsaW5lX251bWJlciAhPSBm
dW5jdGlvbl9zdGF0ZS5ib2R5X3N0YXJ0X2xpbmVfbnVtYmVyIG9yIG5vdCBmdW5jdGlvbl9zdGF0
ZS5pc19kZWNsYXJhdGlvbjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYXJhbWV0ZXJfbGlzdCA9
IGZ1bmN0aW9uX3N0YXRlLnBhcmFtZXRlcl9saXN0KCkKKyAgICBmb3IgcGFyYW1ldGVyIGluIHBh
cmFtZXRlcl9saXN0OgorICAgICAgICBpZiBub3QgcGFyYW1ldGVyLm5hbWU6CisgICAgICAgICAg
ICBjb250aW51ZQorCisgICAgICAgICMgQ2hlY2sgdGhlIHBhcmFtZXRlciBuYW1lIGFnYWluc3Qg
dGhlIGZ1bmN0aW9uIG5hbWUgZm9yIHNpbmdsZSBwYXJhbWV0ZXIgc2V0IGZ1bmN0aW9ucy4KKyAg
ICAgICAgaWYgbGVuKHBhcmFtZXRlcl9saXN0KSA9PSAxIGFuZCBtYXRjaCgnc2V0W0EtWl0nLCBm
dW5jdGlvbl9zdGF0ZS5jdXJyZW50X2Z1bmN0aW9uKToKKyAgICAgICAgICAgIHRyaW1tZWRfZnVu
Y3Rpb25fbmFtZSA9IGZ1bmN0aW9uX3N0YXRlLmN1cnJlbnRfZnVuY3Rpb25bbGVuKCdzZXQnKTpd
CisgICAgICAgICAgICBpZiBub3QgX2NoZWNrX3BhcmFtZXRlcl9uYW1lX2FnYWluc3RfdGV4dChw
YXJhbWV0ZXIsIHRyaW1tZWRfZnVuY3Rpb25fbmFtZSwgZXJyb3IpOgorICAgICAgICAgICAgICAg
ICMgU2luY2UgYW4gZXJyb3Igd2FzIG5vdGVkIGZvciB0aGlzIG5hbWUsIG1vdmUgdG8gdGhlIG5l
eHQgcGFyYW1ldGVyLgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBDaGVj
ayB0aGUgcGFyYW1ldGVyIG5hbWUgYWdhaW5zdCB0aGUgdHlwZS4KKyAgICAgICAgaWYgbm90IF9j
aGVja19wYXJhbWV0ZXJfbmFtZV9hZ2FpbnN0X3RleHQocGFyYW1ldGVyLCBwYXJhbWV0ZXIudHlw
ZSwgZXJyb3IpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIFNraXAgc2luZ2xl
IGxldHRlciBwYXJhbWV0ZXJzIGJlZm9yZSBjb21wYXJpbmcgYWdhaW5zdCB2YWx1ZSAoYmVjYXVz
ZSAnYScgd291bGQKKyAgICAgICAgIyBiZSBmbGFnZ2VkLCBidXQgaXQgbWF5IGJlIGFuIG9rIHZh
cmlhYmxlIHdoZW4gdXNlZCBpbiBhbiByZ2JhIGZ1bmN0aW9uKS4KKyAgICAgICAgaWYgbGVuKHBh
cmFtZXRlci5uYW1lKSA+IDE6CisgICAgICAgICAgICAjICd2YWx1ZScgaXMgYSBtZWFuaW5nbGVz
cyB2YXJpYWJsZSBuYW1lIHRoYXQgaXMgdXNlZCBpbiBzb21lIHBsYWNlcywgc28gZmxhZyBpdC4K
KyAgICAgICAgICAgIF9jaGVja19wYXJhbWV0ZXJfbmFtZV9hZ2FpbnN0X3RleHQocGFyYW1ldGVy
LCAndmFsdWUnLCBlcnJvcikKKworCiBkZWYgY2hlY2tfcGFzc19wdHJfdXNhZ2UoY2xlYW5fbGlu
ZXMsIGxpbmVfbnVtYmVyLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpOgogICAgICIiIkNoZWNrIGZv
ciBwcm9wZXIgdXNhZ2Ugb2YgUGFzcypQdHIuCiAKQEAgLTMxNTYsNiArMzI1Nyw3IEBAIGRlZiBw
cm9jZXNzX2xpbmUoZmlsZW5hbWUsIGZpbGVfZXh0ZW5zaW9uLAogICAgIGNoZWNrX2Zvcl9mdW5j
dGlvbl9sZW5ndGhzKGNsZWFuX2xpbmVzLCBsaW5lLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpCiAg
ICAgaWYgc2VhcmNoKHInXGJOT0xJTlRcYicsIHJhd19saW5lc1tsaW5lXSk6ICAjIGlnbm9yZSBu
b2xpbnQgbGluZXMKICAgICAgICAgcmV0dXJuCisgICAgY2hlY2tfZnVuY3Rpb25fZGVmaW5pdGlv
bihjbGVhbl9saW5lcywgbGluZSwgZnVuY3Rpb25fc3RhdGUsIGVycm9yKQogICAgIGNoZWNrX3Bh
c3NfcHRyX3VzYWdlKGNsZWFuX2xpbmVzLCBsaW5lLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpCiAg
ICAgY2hlY2tfZm9yX211bHRpbGluZV9jb21tZW50c19hbmRfc3RyaW5ncyhjbGVhbl9saW5lcywg
bGluZSwgZXJyb3IpCiAgICAgY2hlY2tfc3R5bGUoY2xlYW5fbGluZXMsIGxpbmUsIGZpbGVfZXh0
ZW5zaW9uLCBjbGFzc19zdGF0ZSwgZmlsZV9zdGF0ZSwgZXJyb3IpCkBAIC0zMjM5LDYgKzMzNDEs
NyBAQCBjbGFzcyBDcHBDaGVja2VyKG9iamVjdCk6CiAgICAgICAgICdyZWFkYWJpbGl0eS9mdW5j
dGlvbicsCiAgICAgICAgICdyZWFkYWJpbGl0eS9tdWx0aWxpbmVfY29tbWVudCcsCiAgICAgICAg
ICdyZWFkYWJpbGl0eS9tdWx0aWxpbmVfc3RyaW5nJywKKyAgICAgICAgJ3JlYWRhYmlsaXR5L3Bh
cmFtZXRlcl9uYW1lJywKICAgICAgICAgJ3JlYWRhYmlsaXR5L25hbWluZycsCiAgICAgICAgICdy
ZWFkYWJpbGl0eS9udWxsJywKICAgICAgICAgJ3JlYWRhYmlsaXR5L3Bhc3NfcHRyJywKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3Qu
cHkKaW5kZXggNGY4NDY5M2RmMGI5NDZlODc5NTA2ZmI0OWFhOTkxMjNlMTU1MjZjYS4uYTdlOTAz
ZmYyZDE1NWE2MTUwODk2OTk0NTY0NWJhOTFlODM5OWJmYSAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKQEAgLTEwOSw2
ICsxMDksMTggQEAgY2xhc3MgQ3BwRnVuY3Rpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAK
ICAgICAiIiJTdXBwb3J0cyB0ZXN0aW5nIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCBuZWVkIENwcFN0
eWxlVGVzdEJhc2UuIiIiCiAKKyAgICBkZWYgdGVzdF9jb252ZXJ0X3RvX2xvd2VyX3dpdGhfdW5k
ZXJzY29yZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNwcF9zdHlsZS5fY29u
dmVydF90b19sb3dlcl93aXRoX3VuZGVyc2NvcmVzKCdBQkMnKSwgJ2FiYycpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKGNwcF9zdHlsZS5fY29udmVydF90b19sb3dlcl93aXRoX3VuZGVyc2Nv
cmVzKCdhQicpLCAnYV9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3BwX3N0eWxlLl9j
b252ZXJ0X3RvX2xvd2VyX3dpdGhfdW5kZXJzY29yZXMoJ2lzQU5hbWUnKSwgJ2lzX2FfbmFtZScp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNwcF9zdHlsZS5fY29udmVydF90b19sb3dlcl93
aXRoX3VuZGVyc2NvcmVzKCdBbm90aGVyVGVzdCcpLCAnYW5vdGhlcl90ZXN0JykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoY3BwX3N0eWxlLl9jb252ZXJ0X3RvX2xvd2VyX3dpdGhfdW5kZXJz
Y29yZXMoJ1Bhc3NSZWZQdHI8TXlDbGFzcz4nKSwgJ3Bhc3NfcmVmX3B0cjxteV9jbGFzcz4nKQor
CisgICAgZGVmIHRlc3RfY3JlYXRlX2Fjcm9ueW0oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGNwcF9zdHlsZS5fY3JlYXRlX2Fjcm9ueW0oJ0FCQycpLCAnQUJDJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoY3BwX3N0eWxlLl9jcmVhdGVfYWNyb255bSgnSXNBTmFtZScpLCAn
SUFOJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3BwX3N0eWxlLl9jcmVhdGVfYWNyb255
bSgnUGFzc1JlZlB0cjxNeUNsYXNzPicpLCAnUFJQPE1DPicpCisKICAgICBkZWYgdGVzdF9pc19j
X29yX29iamVjdGl2ZV9jKHNlbGYpOgogICAgICAgICBjbGVhbl9saW5lcyA9IGNwcF9zdHlsZS5D
bGVhbnNlZExpbmVzKFsnJ10pCiAgICAgICAgIGNsZWFuX29iamNfbGluZXMgPSBjcHBfc3R5bGUu
Q2xlYW5zZWRMaW5lcyhbJyNpbXBvcnQgImhlYWRlci5oIiddKQpAQCAtMjA2LDYgKzIxOCwxMiBA
QCBjbGFzcyBDcHBGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAg
IGluZGV4ICs9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW5kZXgsIGxlbihleHBlY3Rl
ZF9wYXJhbWV0ZXJzKSkKIAorICAgIGRlZiB0ZXN0X2NoZWNrX3BhcmFtZXRlcl9hZ2FpbnN0X3Rl
eHQoc2VsZik6CisgICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYu
YXNzZXJ0XykKKyAgICAgICAgcGFyYW1ldGVyID0gY3BwX3N0eWxlLlBhcmFtZXRlcignRm9vRiBv
b0YnLCA0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNwcF9zdHlsZS5fY2hlY2tfcGFy
YW1ldGVyX25hbWVfYWdhaW5zdF90ZXh0KHBhcmFtZXRlciwgJ0Zvb0YnLCBlcnJvcl9jb2xsZWN0
b3IpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnJvcl9jb2xsZWN0b3IucmVzdWx0cygp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHBhcmFtZXRlciBuYW1lICJvb0YiIGFk
ZHMgbm8gaW5mb3JtYXRpb24sIHNvIGl0IHNob3VsZCBiZSByZW1vdmVkLiAgW3JlYWRhYmlsaXR5
L3BhcmFtZXRlcl9uYW1lXSBbNV0nKQogCiBjbGFzcyBDcHBTdHlsZVRlc3RCYXNlKHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAiIiJQcm92aWRlcyBzb21lIHVzZWZ1bCBoZWxwZXIgZnVuY3Rpb25z
IGZvciBjcHBfc3R5bGUgdGVzdHMuCkBAIC0yMzksNiArMjU3LDcgQEAgY2xhc3MgQ3BwU3R5bGVU
ZXN0QmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGJhc2ljX2Vycm9yX3J1bGVzID0g
KCctYnVpbGQvaGVhZGVyX2d1YXJkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1s
ZWdhbC9jb3B5cmlnaHQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJlYWRhYmls
aXR5L2ZuX3NpemUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJlYWRhYmlsaXR5
L3BhcmFtZXRlcl9uYW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy13aGl0ZXNw
YWNlL2VuZGluZ19uZXdsaW5lJykKICAgICAgICAgcmV0dXJuIHNlbGYucGVyZm9ybV9saW50KGNv
ZGUsIGZpbGVuYW1lLCBiYXNpY19lcnJvcl9ydWxlcykKIApAQCAtMjQ2LDcgKzI2NSw3IEBAIGNs
YXNzIENwcFN0eWxlVGVzdEJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBwZXJmb3Jt
X211bHRpX2xpbmVfbGludChzZWxmLCBjb2RlLCBmaWxlX2V4dGVuc2lvbik6CiAgICAgICAgIGJh
c2ljX2Vycm9yX3J1bGVzID0gKCctYnVpbGQvaGVhZGVyX2d1YXJkJywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJy1sZWdhbC9jb3B5cmlnaHQnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnLW11bHRpX2xpbmVfZmlsdGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJy1yZWFkYWJpbGl0eS9wYXJhbWV0ZXJfbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICctd2hpdGVzcGFjZS9lbmRpbmdfbmV3bGluZScpCiAgICAgICAgIHJldHVybiBzZWxm
LnBlcmZvcm1fbGludChjb2RlLCAndGVzdC4nICsgZmlsZV9leHRlbnNpb24sIGJhc2ljX2Vycm9y
X3J1bGVzKQogCkBAIC00MDk4LDYgKzQxMTcsNTkgQEAgY2xhc3MgV2ViS2l0U3R5bGVUZXN0KENw
cFN0eWxlVGVzdEJhc2UpOgogICAgICAgICBzZWxmLmFzc2VydF9saW50KCdPd25QdHI8dWludDMy
X3Q+IHVuZGVyX3Njb3JlKG5ldyB1aW50MzJfdCk7JywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAndW5kZXJfc2NvcmUnICsgbmFtZV91bmRlcnNjb3JlX2Vycm9yX21lc3NhZ2UpCiAKKyAgICBk
ZWYgdGVzdF9wYXJhbWV0ZXJfbmFtZXMoc2VsZik6CisgICAgICAgICMgTGVhdmUgbWVhbmluZ2xl
c3MgdmFyaWFibGUgbmFtZXMgb3V0IG9mIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KKyAgICAgICAg
bWVhbmluZ2xlc3NfdmFyaWFibGVfbmFtZV9lcnJvcl9tZXNzYWdlID0gJ1RoZSBwYXJhbWV0ZXIg
bmFtZSAiJXMiIGFkZHMgbm8gaW5mb3JtYXRpb24sIHNvIGl0IHNob3VsZCBiZSByZW1vdmVkLiAg
W3JlYWRhYmlsaXR5L3BhcmFtZXRlcl9uYW1lXSBbNV0nCisKKyAgICAgICAgcGFyYW1ldGVyX2Vy
cm9yX3J1bGVzID0gKCctJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrcmVh
ZGFiaWxpdHkvcGFyYW1ldGVyX25hbWUnKQorICAgICAgICAjIE5vIHZhcmlhYmxlIG5hbWUsIHNv
IG5vIGVycm9yLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5wZXJmb3JtX2xpbnQoJ3ZvaWQgZnVuYyhpbnQpOycsICd0ZXN0LmNw
cCcsIHBhcmFtZXRlcl9lcnJvcl9ydWxlcykpCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBjb3B5
aW5nIHRoZSBuYW1lIG9mIHRoZSBzZXQgZnVuY3Rpb24gY2F1c2VzIHRoZSBlcnJvciAod2l0aCBz
b21lIG9kZCBjYXNpbmcpLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZWFuaW5nbGVzc192
YXJpYWJsZV9uYW1lX2Vycm9yX21lc3NhZ2UgJSAnaXRlbUNvdW50JywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5wZXJmb3JtX2xpbnQoJ3ZvaWQgc2V0SXRlbUNvdW50KHNpemVfdCBp
dGVtQ291bnQpOycsICd0ZXN0LmNwcCcsIHBhcmFtZXRlcl9lcnJvcl9ydWxlcykpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKG1lYW5pbmdsZXNzX3ZhcmlhYmxlX25hbWVfZXJyb3JfbWVzc2Fn
ZSAlICdhYmNDb3VudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9s
aW50KCd2b2lkIHNldEFCQ0NvdW50KHNpemVfdCBhYmNDb3VudCk7JywgJ3Rlc3QuY3BwJywgcGFy
YW1ldGVyX2Vycm9yX3J1bGVzKSkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IGNvcHlpbmcgYSB0
eXBlIG5hbWUgd2lsbCB0cmlnZ2VyIHRoZSB3YXJuaW5nIChldmVuIGlmIHRoZSB0eXBlIGlzIGEg
dGVtcGxhdGUgcGFyYW1ldGVyKS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWVhbmluZ2xl
c3NfdmFyaWFibGVfbmFtZV9lcnJvcl9tZXNzYWdlICUgJ2NvbnRleHQnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5jdChQYXNzUmVmUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ+IGNvbnRleHQpOycsICd0ZXN0LmNwcCcsIHBhcmFtZXRlcl9l
cnJvcl9ydWxlcykpCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBhY3JvbnltcyBhcyB2YXJpYWJs
ZSBuYW1lcyB0cmlnZ2VyIHRoZSBlcnJvciAoZm9yIGJvdGggc2V0IGZ1bmN0aW9ucyBhbmQgdHlw
ZSBuYW1lcykuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lYW5pbmdsZXNzX3ZhcmlhYmxl
X25hbWVfZXJyb3JfbWVzc2FnZSAlICdlYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYucGVyZm9ybV9saW50KCd2b2lkIHNldEV4Y2VwdGlvbkNvZGUoaW50IGVjKTsnLCAndGVzdC5j
cHAnLCBwYXJhbWV0ZXJfZXJyb3JfcnVsZXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyht
ZWFuaW5nbGVzc192YXJpYWJsZV9uYW1lX2Vycm9yX21lc3NhZ2UgJSAnZWMnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5jdChFeGNlcHRpb25D
b2RlIGVjKTsnLCAndGVzdC5jcHAnLCBwYXJhbWV0ZXJfZXJyb3JfcnVsZXMpKQorCisgICAgICAg
ICMgJ29iamVjdCcgYWxvbmUsIGFwcGVuZGVkLCBvciBhcyBwYXJ0IG9mIGFuIGFjcm9ueW0gaXMg
bWVhbmluZ2xlc3MuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lYW5pbmdsZXNzX3Zhcmlh
YmxlX25hbWVfZXJyb3JfbWVzc2FnZSAlICdvYmplY3QnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5jdChSZW5kZXJWaWV3IG9iamVjdCk7Jywg
J3Rlc3QuY3BwJywgcGFyYW1ldGVyX2Vycm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMobWVhbmluZ2xlc3NfdmFyaWFibGVfbmFtZV9lcnJvcl9tZXNzYWdlICUgJ3ZpZXdPYmpl
Y3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBm
dW5jdChSZW5kZXJWaWV3IHZpZXdPYmplY3QpOycsICd0ZXN0LmNwcCcsIHBhcmFtZXRlcl9lcnJv
cl9ydWxlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lYW5pbmdsZXNzX3ZhcmlhYmxl
X25hbWVfZXJyb3JfbWVzc2FnZSAlICdydm8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5jdChSZW5kZXJWaWV3IHJ2byk7JywgJ3Rlc3QuY3Bw
JywgcGFyYW1ldGVyX2Vycm9yX3J1bGVzKSkKKworICAgICAgICAjICd2YWx1ZScgaXMgYSBtZWFu
aW5nbGVzcyB2YXJpYWJsZSBuYW1lLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZWFuaW5n
bGVzc192YXJpYWJsZV9uYW1lX2Vycm9yX21lc3NhZ2UgJSAndmFsdWUnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBmdW5jdChSZW5kZXJWaWV3IHZh
bHVlKTsnLCAndGVzdC5jcHAnLCBwYXJhbWV0ZXJfZXJyb3JfcnVsZXMpKQorCisgICAgICAgICMg
Q2hlY2sgdGhhdCByLCBnLCBiLCBhbmQgYSBhcmUgYWxsb3dlZC4KKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9saW50
KCd2b2lkIHNldFJHQkFWYWx1ZXMoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOycsICd0ZXN0
LmNwcCcsIHBhcmFtZXRlcl9lcnJvcl9ydWxlcykpCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBh
IHNpbXBsZSBzdWJzdHJpbmcgbWF0Y2ggaXNuJ3QgZG9uZSB3aGljaCB3b3VsZCBjYXVzZSBmYWxz
ZSBwb3NpdGl2ZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBzZXROYXRlTGF0ZUNvdW50KHNp
emVfdCBlbGF0ZSk7JywgJ3Rlc3QuY3BwJywgcGFyYW1ldGVyX2Vycm9yX3J1bGVzKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
cGVyZm9ybV9saW50KCd2b2lkIGZ1bmN0KE5hdGVMYXRlIGVsYXRlKTsnLCAndGVzdC5jcHAnLCBw
YXJhbWV0ZXJfZXJyb3JfcnVsZXMpKQorCisgICAgICAgICMgRG9uJ3QgaGF2ZSBnZW5lcmF0ZSB3
YXJuaW5ncyBmb3IgZnVuY3Rpb25zIChvbmx5IGRlY2xhcmF0aW9ucykuCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKCcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1f
bGludCgndm9pZCBmdW5jdChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IGNvbnRl
eHQpXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7XG4n
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nLCAndGVz
dC5jcHAnLCBwYXJhbWV0ZXJfZXJyb3JfcnVsZXMpKQogCiAgICAgZGVmIHRlc3RfY29tbWVudHMo
c2VsZik6CiAgICAgICAgICMgQSBjb21tZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGlz
IG9rLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>