<?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>48883</bug_id>
          
          <creation_ts>2010-11-02 15:59:49 -0700</creation_ts>
          <short_desc>executive_unittest relies on echo and cat utilities from coreutils, which are not present on Windows</short_desc>
          <delta_ts>2010-11-04 08:27:52 -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>New Bugs</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>
          
          <blocked>48728</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Adam Roben (:aroben)">aroben</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>303747</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-02 15:59:49 -0700</bug_when>
    <thetext>executive_unittest relies on echo and cat utilities from coreutils, which are not present on Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303749</commentid>
    <comment_count>1</comment_count>
      <attachid>72756</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-02 16:01:17 -0700</bug_when>
    <thetext>Created attachment 72756
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304181</commentid>
    <comment_count>2</comment_count>
      <attachid>72756</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-03 12:04:05 -0700</bug_when>
    <thetext>Comment on attachment 72756
Patch

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304186</commentid>
    <comment_count>3</comment_count>
      <attachid>72756</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-03 12:10:29 -0700</bug_when>
    <thetext>Comment on attachment 72756
Patch

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

I&apos;m glad you did this, we&apos;ve needed these for a while.

In general looks great.  Please see my comments below.

&gt; WebKitTools/Scripts/webkitpy/common/system/executive_unittest.py:51
&gt; +        executive.run_command(tuple(echo.command_arguments(&apos;foo&apos;)))

Why tuple() here?

&gt; WebKitTools/Scripts/webkitpy/test/cat.py:27
&gt; +    return [&apos;python&apos;, __file__] + list(args)

.extend(args)  (or *args) would have worked here too I think.

I wonder if we need to get the interpreter path.  We&apos;re assuming python is in their path (which is probably a valid assumption), but just curious.

&gt; WebKitTools/Scripts/webkitpy/test/cat.py:34
&gt; +    if sys.platform == &apos;win32&apos; and hasattr(sys.stdout, &apos;fileno&apos;):
&gt; +        import msvcrt
&gt; +        import os
&gt; +        msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

What does this do?  Why is it needed?

&gt; WebKitTools/Scripts/webkitpy/test/cat.py:38
&gt; +

I believe there are supposed to be two blank lines between any blocks at the global scope.

&gt; WebKitTools/Scripts/webkitpy/test/echo.py:31
&gt; +def main(args=None):
&gt; +    if not args:

Now here is one instance, where unless you intended to treat [] and None the same, thsi might be a typo.

&gt; WebKitTools/Scripts/webkitpy/test/echo.py:37
&gt; +    if sys.platform == &apos;win32&apos; and hasattr(sys.stdout, &apos;fileno&apos;):
&gt; +        import msvcrt
&gt; +        import os
&gt; +        msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

Should we share this code somewhere under a nice name?  make_stdout_binary?  no clue.

&gt; WebKitTools/Scripts/webkitpy/test/echo.py:42
&gt; +        args[0:1] = []

This removes one item?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304196</commentid>
    <comment_count>4</comment_count>
      <attachid>72756</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-03 12:20:56 -0700</bug_when>
    <thetext>Comment on attachment 72756
Patch

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

&gt;&gt; WebKitTools/Scripts/webkitpy/common/system/executive_unittest.py:51
&gt;&gt; +        executive.run_command(tuple(echo.command_arguments(&apos;foo&apos;)))
&gt; 
&gt; Why tuple() here?

The point of this line is to test what happens when you pass a tuple to run_command. (You can see this by looking at the previous form of the line.)

&gt;&gt; WebKitTools/Scripts/webkitpy/test/cat.py:27
&gt;&gt; +    return [&apos;python&apos;, __file__] + list(args)
&gt; 
&gt; .extend(args)  (or *args) would have worked here too I think.
&gt; 
&gt; I wonder if we need to get the interpreter path.  We&apos;re assuming python is in their path (which is probably a valid assumption), but just curious.

.extend(args) would work, but it seems less concise (since I&apos;d have to declare the list, then extend it, then return the result).

Getting the interpreter path is probably a good idea. I guess we can cross that bridge when we come to it.

&gt;&gt; WebKitTools/Scripts/webkitpy/test/cat.py:34
&gt;&gt; +        msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
&gt; 
&gt; What does this do?  Why is it needed?

On Windows, file descriptors can either be in binary mode or in text mode. In text mode, \n is converted to \r\n. In binary mode it is not. (Maybe there are other differences, too.) This code puts sys.stdout into binary mode. It&apos;s needed because our tests expect cat not to modify line endings.

&gt;&gt; WebKitTools/Scripts/webkitpy/test/cat.py:38
&gt;&gt; +
&gt; 
&gt; I believe there are supposed to be two blank lines between any blocks at the global scope.

We use a single blank line to separate standard imports from package imports, even though those are different &quot;blocks&quot;. But I&apos;m fine with adding another blank line here. We should modify check-webkit-style to enforce this. (PEP8 just says &quot;Separate top-level function and class definitions with two blank lines.&quot;)

&gt;&gt; WebKitTools/Scripts/webkitpy/test/echo.py:31
&gt;&gt; +    if not args:
&gt; 
&gt; Now here is one instance, where unless you intended to treat [] and None the same, thsi might be a typo.

I did not mean to treat [] and None the same. I guess I should change this to &quot;if args is None:&quot; and add a test.

&gt;&gt; WebKitTools/Scripts/webkitpy/test/echo.py:37
&gt;&gt; +        msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
&gt; 
&gt; Should we share this code somewhere under a nice name?  make_stdout_binary?  no clue.

I guess I could stick a function in webkitpy.common.system. Does that sound good?

&gt;&gt; WebKitTools/Scripts/webkitpy/test/echo.py:42
&gt;&gt; +        args[0:1] = []
&gt; 
&gt; This removes one item?

Yes. I could use del args[0:1] if that would be clearer. Or args = args[1:]. What do you prefer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304198</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-03 12:24:15 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 72756 [details])
&gt; We use a single blank line to separate standard imports from package imports, even though those are different &quot;blocks&quot;. But I&apos;m fine with adding another blank line here. We should modify check-webkit-style to enforce this. (PEP8 just says &quot;Separate top-level function and class definitions with two blank lines.&quot;)

I&apos;m happy to follow pep8 here.  I&apos;ll stop adding an extra blank line before the __main__ stuff then.

&gt; &gt;&gt; WebKitTools/Scripts/webkitpy/test/echo.py:37
&gt; &gt;&gt; +        msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
&gt; &gt; 
&gt; &gt; Should we share this code somewhere under a nice name?  make_stdout_binary?  no clue.
&gt; 
&gt; I guess I could stick a function in webkitpy.common.system. Does that sound good?

I like sharing code. :)  So yes.

&gt; &gt;&gt; WebKitTools/Scripts/webkitpy/test/echo.py:42
&gt; &gt;&gt; +        args[0:1] = []
&gt; &gt; 
&gt; &gt; This removes one item?
&gt; 
&gt; Yes. I could use del args[0:1] if that would be clearer. Or args = args[1:]. What do you prefer?

args = args[1:] or args.pop(0) seem slightly clearer to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304201</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-03 12:31:42 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 72756 [details] [details])
&gt; &gt; &gt;&gt; WebKitTools/Scripts/webkitpy/test/echo.py:42
&gt; &gt; &gt;&gt; +        args[0:1] = []
&gt; &gt; &gt; 
&gt; &gt; &gt; This removes one item?
&gt; &gt; 
&gt; &gt; Yes. I could use del args[0:1] if that would be clearer. Or args = args[1:]. What do you prefer?
&gt; 
&gt; args = args[1:] or args.pop(0) seem slightly clearer to me.

Turns out &quot;del args[0]&quot; will work. I&apos;ll go with that, as it seems clearest of all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304645</commentid>
    <comment_count>7</comment_count>
      <attachid>72942</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-04 07:38:23 -0700</bug_when>
    <thetext>Created attachment 72942
Incorporates Eric&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304647</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-04 07:41:53 -0700</bug_when>
    <thetext>Attachment 72942 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebKitTools/ChangeLog&apos;, u&apos;WebKitTools/Scripts/webkitpy/common/system/executive_unittest.py&apos;, u&apos;WebKitTools/Scripts/webkitpy/common/system/fileutils.py&apos;, u&apos;WebKitTools/Scripts/webkitpy/test/cat.py&apos;, u&apos;WebKitTools/Scripts/webkitpy/test/cat_unittest.py&apos;, u&apos;WebKitTools/Scripts/webkitpy/test/echo.py&apos;, u&apos;WebKitTools/Scripts/webkitpy/test/echo_unittest.py&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/test/echo.py:31:  expected 2 blank lines, found 1  [pep8/E302] [5]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304655</commentid>
    <comment_count>9</comment_count>
      <attachid>72942</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-04 07:50:40 -0700</bug_when>
    <thetext>Comment on attachment 72942
Incorporates Eric&apos;s comments

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

Looks good.  You&apos;ll want to fix the style before landing.

&gt; WebKitTools/Scripts/webkitpy/common/system/fileutils.py:33
&gt; +def make_stdout_binary():
&gt; +    &quot;&quot;&quot;Puts sys.stdout into binary mode (on platforms that have a distinction
&gt; +    between text and binary mode).&quot;&quot;&quot;
&gt; +    if sys.platform != &apos;win32&apos; or not hasattr(sys.stdout, &apos;fileno&apos;):
&gt; +        return
&gt; +    import msvcrt
&gt; +    import os
&gt; +    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

Do we need a way to reset out of binary mode after unit tests?  Is it a concern that binary mode may bleed between unit tests?  I guess if we&apos;re using OutputCapture it&apos;s not?

&gt; WebKitTools/Scripts/webkitpy/test/cat.py:34
&gt; +    if sys.platform == &apos;win32&apos; and hasattr(sys.stdout, &apos;fileno&apos;):
&gt; +        import msvcrt
&gt; +        import os
&gt; +        msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

So you have a make_stdout_binary call but you&apos;re not using it here. :)

&gt; WebKitTools/Scripts/webkitpy/test/echo.py:27
&gt; +# Add WebKitTools/Scripts to the path to ensure we can find webkitpy.
&gt; +sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))

Why does echo need this and webkitpy does not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304670</commentid>
    <comment_count>10</comment_count>
      <attachid>72942</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-04 08:08:38 -0700</bug_when>
    <thetext>Comment on attachment 72942
Incorporates Eric&apos;s comments

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

&gt;&gt; WebKitTools/Scripts/webkitpy/common/system/fileutils.py:33
&gt;&gt; +    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
&gt; 
&gt; Do we need a way to reset out of binary mode after unit tests?  Is it a concern that binary mode may bleed between unit tests?  I guess if we&apos;re using OutputCapture it&apos;s not?

Yeah, OutputCapture is saving us here by swapping in a new sys.stdout. I could add a make_stdout_text but we wouldn&apos;t need to call it anywhere.

&gt;&gt; WebKitTools/Scripts/webkitpy/test/cat.py:34
&gt;&gt; +        msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
&gt; 
&gt; So you have a make_stdout_binary call but you&apos;re not using it here. :)

Whoopsie! I&apos;ll have to add the sys.path gunk here, too.

&gt;&gt; WebKitTools/Scripts/webkitpy/test/echo.py:27
&gt;&gt; +sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
&gt; 
&gt; Why does echo need this and webkitpy does not?

It looks, when you execute a Python script, the script&apos;s parent directory gets put on the front of sys.path. test-webkitpy, by virtue of being in WebKitTools/Scripts, thus gets WebKitTools/Scripts in its sys.path automatically. Since this script is not in that directory, we have to add it manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304674</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-11-04 08:27:52 -0700</bug_when>
    <thetext>Committed r71336: &lt;http://trac.webkit.org/changeset/71336&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72756</attachid>
            <date>2010-11-02 16:01:17 -0700</date>
            <delta_ts>2010-11-04 07:38:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48883-20101102190117.patch</filename>
            <type>text/plain</type>
            <size>14794</size>
            <attacher name="Adam Roben (:aroben)">aroben</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1ODBjYTFiMjM1ZTc4YTIxZmVlNjQ5MzRkNjc4ZWVlYTBlYWEwODE0Li4yNDRkNTRj
Yjk3NTRjZmI3ZDRjNmYwYzI4ZjRiOTQ3NDhjMmRhNDVhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAK
KzIwMTAtMTEtMDIgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
ZHVjZSBvdXIgZGVwZW5kZW5jZSBvbiBjb3JldXRpbHMgd2hlbiBydW5uaW5nIFB5dGhvbiB0ZXN0
cworCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB2ZXJzaW9ucyBvZiB0aGUgc3RhbmRh
cmQgZWNobyBhbmQgY2F0IHV0aWxpdGllcworICAgICAgICBpbXBsZW1lbnRlZCBpbiBQeXRob24u
IFRoZXkgYXJlIHByb2JhYmx5IG1pc3NpbmcgZmVhdHVyZXMgb2YgdGhlaXIKKyAgICAgICAgY29y
ZXV0aWxzIGVxdWl2YWxlbnRzLCBidXQgdGhleSBjYW4gZG8gd2hhdCdzIG5lY2Vzc2FyeSBmb3Ig
b3VyIFB5dGhvbgorICAgICAgICB0ZXN0cy4gVGhpcyBpcyB1c2VmdWwgb24gV2luZG93cywgd2hl
cmUgdGhlc2UgdXRpbGl0aWVzIHR5cGljYWxseQorICAgICAgICBhcmVuJ3QgYXZhaWxhYmxlLgor
CisgICAgICAgIEZpeGVzIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ4ODgzPiBleGVjdXRpdmVfdW5p
dHRlc3QgcmVsaWVzIG9uIGVjaG8KKyAgICAgICAgYW5kIGNhdCB1dGlsaXRpZXMgZnJvbSBjb3Jl
dXRpbHMsIHdoaWNoIGFyZSBub3QgcHJlc2VudCBvbiBXaW5kb3dzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5OiBDaGFuZ2VkIHRvIHVzZQorICAgICAgICBv
dXIgUHl0aG9uLWJhc2VkIGVjaG8gYW5kIGNhdC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9jYXQucHk6IEFkZGVkLgorICAgICAgICAoY29tbWFuZF9hcmd1bWVudHMpOiBSZXR1
cm5zIGEgbGlzdCBmb3IgaW52b2tpbmcgY2F0IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KKyAg
ICAgICAgKG1haW4pOiBBY3RzIGxpa2UgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGNvcmV1
dGlscyBjYXQgdXRpbGl0eS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9jYXRf
dW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoQ2F0VGVzdC5hc3NlcnRfY2F0KTogUnVucyBj
YXQgd2l0aCB0aGUgZ2l2ZW4gaW5wdXQgYW5kIGVuc3VyZXMgdGhlCisgICAgICAgIG91dHB1dCBt
YXRjaGVzIHRoZSBpbnB1dC4KKyAgICAgICAgKENhdFRlc3QudGVzdF9iYXNpYyk6IFBlcmZvcm1z
IGEgc2ltcGxlIHRlc3Qgb2YgY2F0LgorICAgICAgICAoQ2F0VGVzdC50ZXN0X25vX25ld2xpbmUp
OiBUZXN0cyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgaW5wdXQgc3RyaW5nCisgICAgICAgIGRvZXNu
J3QgaGF2ZSBhIHRyYWlsaW5nIG5ld2xpbmUuCisgICAgICAgIChDYXRUZXN0LnRlc3RfdW5pY29k
ZSk6IFRlc3RzIHBhc3NpbmcgYSB1bmljb2RlIHN0cmluZyB0byBjYXQuCisgICAgICAgIChDYXRU
ZXN0LnRlc3RfYXNfY29tbWFuZCk6IFRlc3RzIHJ1bm5pbmcgY2F0IGFzIGEgc2VwYXJhdGUgY29t
bWFuZC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9lY2hvLnB5OiBBZGRlZC4K
KyAgICAgICAgKGNvbW1hbmRfYXJndW1lbnRzKTogUmV0dXJucyBhIGxpc3QgZm9yIGludm9raW5n
IGVjaG8gd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLgorICAgICAgICAobWFpbik6IEFjdHMgbGlr
ZSBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgY29yZXV0aWxzIGVjaG8gdXRpbGl0eS4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9lY2hvX3VuaXR0ZXN0LnB5OiBBZGRlZC4K
KyAgICAgICAgKEVjaG9UZXN0LnRlc3RfYmFzaWMpOiBQZXJmb3JtcyBhIHNpbXBsZSB0ZXN0IG9m
IGVjaG8uCisgICAgICAgIChFY2hvVGVzdC50ZXN0X25vX25ld2xpbmUpOiBUZXN0cyBwYXNzaW5n
IC1uIHRvIGVjaG8gdG8gc3VwcHJlc3MgdGhlCisgICAgICAgIHRyYWlsaW5nIG5ld2xpbmUuCisg
ICAgICAgIChFY2hvVGVzdC50ZXN0X3VuaWNvZGUpOiBUZXN0cyBwYXNzaW5nIHVuaWNvZGUgYW5k
IG5vbi11bmljb2RlIHN0cmluZ3MKKyAgICAgICAgdG8gZWNoby4KKyAgICAgICAgKEVjaG9UZXN0
LnRlc3RfYXJndW1lbnRfb3JkZXIpOiBUZXN0cyB3aGF0IGhhcHBlbnMgd2hlbiAtbiBpcyBub3Qg
dGhlCisgICAgICAgIGZpcnN0IGFyZ3VtZW50LgorICAgICAgICAoRWNob1Rlc3QudGVzdF9hc19j
b21tYW5kKTogVGVzdHMgcnVubmluZyBlY2hvIGFzIGEgc2VwYXJhdGUgY29tbWFuZC4KKwogMjAx
MC0xMS0wMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkKaW5kZXgg
MzJmOGY1MTk4ZWEzYTg3ODVkZjg2YmJjZjQwOWE3Y2EwMGFiODNiZS4uNjEwNmJlOGU5OGM2MDdh
YTU4N2ExYzUxOGRiNjQyMWFiY2Y5ZTFjOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0
LnB5CkBAIC0zMyw2ICszMyw3IEBAIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIHJ1bl9j
b21tYW5kLCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS50ZXN0IGltcG9ydCBjYXQsIGVjaG8K
IAogCiBjbGFzcyBFeGVjdXRpdmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQ2LDggKzQ3
LDggQEAgY2xhc3MgRXhlY3V0aXZlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGV4
ZWN1dGl2ZSA9IEV4ZWN1dGl2ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlv
bkVycm9yLCBleGVjdXRpdmUucnVuX2NvbW1hbmQsICJlY2hvIikKICAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIGV4ZWN1dGl2ZS5ydW5fY29tbWFuZCwgdSJlY2hvIikK
LSAgICAgICAgZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsiZWNobyIsICJmb28iXSkKLSAgICAgICAg
ZXhlY3V0aXZlLnJ1bl9jb21tYW5kKCgiZWNobyIsICJmb28iKSkKKyAgICAgICAgZXhlY3V0aXZl
LnJ1bl9jb21tYW5kKGVjaG8uY29tbWFuZF9hcmd1bWVudHMoJ2ZvbycpKQorICAgICAgICBleGVj
dXRpdmUucnVuX2NvbW1hbmQodHVwbGUoZWNoby5jb21tYW5kX2FyZ3VtZW50cygnZm9vJykpKQog
CiAgICAgZGVmIHRlc3RfcnVuX2NvbW1hbmRfd2l0aF91bmljb2RlKHNlbGYpOgogICAgICAgICAi
IiJWYWxpZGF0ZSB0aGF0IGl0IGlzIHNhZmUgdG8gcGFzcyB1bmljb2RlKCkgb2JqZWN0cwpAQCAt
NTcsMjQgKzU4LDI0IEBAIGNsYXNzIEV4ZWN1dGl2ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICB1bmljb2RlX3RvciA9IHUiV2ViS2l0IFx1MjY2MSBUb3IgQXJuZSBWZXN0Ylx1MDBG
OCEiCiAgICAgICAgIHV0ZjhfdG9yID0gdW5pY29kZV90b3IuZW5jb2RlKCJ1dGYtOCIpCiAKLSAg
ICAgICAgb3V0cHV0ID0gZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsiY2F0Il0sIGlucHV0PXVuaWNv
ZGVfdG9yKQorICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2NvbW1hbmQoY2F0LmNvbW1h
bmRfYXJndW1lbnRzKCksIGlucHV0PXVuaWNvZGVfdG9yKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhvdXRwdXQsIHVuaWNvZGVfdG9yKQogCi0gICAgICAgIG91dHB1dCA9IGV4ZWN1dGl2ZS5y
dW5fY29tbWFuZChbImVjaG8iLCAiLW4iLCB1bmljb2RlX3Rvcl0pCisgICAgICAgIG91dHB1dCA9
IGV4ZWN1dGl2ZS5ydW5fY29tbWFuZChlY2hvLmNvbW1hbmRfYXJndW1lbnRzKCItbiIsIHVuaWNv
ZGVfdG9yKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3V0cHV0LCB1bmljb2RlX3RvcikK
IAotICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2NvbW1hbmQoWyJlY2hvIiwgIi1uIiwg
dW5pY29kZV90b3JdLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQorICAgICAgICBvdXRwdXQgPSBleGVj
dXRpdmUucnVuX2NvbW1hbmQoZWNoby5jb21tYW5kX2FyZ3VtZW50cygiLW4iLCB1bmljb2RlX3Rv
ciksIGRlY29kZV9vdXRwdXQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG91dHB1
dCwgdXRmOF90b3IpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBzdHIoKSBpbnB1dCBhbHNv
IHdvcmtzLgotICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2NvbW1hbmQoWyJjYXQiXSwg
aW5wdXQ9dXRmOF90b3IsIGRlY29kZV9vdXRwdXQ9RmFsc2UpCisgICAgICAgIG91dHB1dCA9IGV4
ZWN1dGl2ZS5ydW5fY29tbWFuZChjYXQuY29tbWFuZF9hcmd1bWVudHMoKSwgaW5wdXQ9dXRmOF90
b3IsIGRlY29kZV9vdXRwdXQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG91dHB1
dCwgdXRmOF90b3IpCiAKICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgaGF2ZSBvbmUg
cnVuKiBtZXRob2QgdG8gdGVzdAotICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2FuZF90
aHJvd19pZl9mYWlsKFsiZWNobyIsICItbiIsIHVuaWNvZGVfdG9yXSwgcXVpZXQ9VHJ1ZSkKKyAg
ICAgICAgb3V0cHV0ID0gZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChlY2hvLmNvbW1h
bmRfYXJndW1lbnRzKCItbiIsIHVuaWNvZGVfdG9yKSwgcXVpZXQ9VHJ1ZSkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMob3V0cHV0LCB1bmljb2RlX3RvcikKIAotICAgICAgICBvdXRwdXQgPSBl
eGVjdXRpdmUucnVuX2FuZF90aHJvd19pZl9mYWlsKFsiZWNobyIsICItbiIsIHVuaWNvZGVfdG9y
XSwgcXVpZXQ9VHJ1ZSwgZGVjb2RlX291dHB1dD1GYWxzZSkKKyAgICAgICAgb3V0cHV0ID0gZXhl
Y3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChlY2hvLmNvbW1hbmRfYXJndW1lbnRzKCItbiIs
IHVuaWNvZGVfdG9yKSwgcXVpZXQ9VHJ1ZSwgZGVjb2RlX291dHB1dD1GYWxzZSkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMob3V0cHV0LCB1dGY4X3RvcikKIAogICAgIGRlZiB0ZXN0X2tpbGxf
cHJvY2VzcyhzZWxmKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGVzdC9jYXQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvY2F0LnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU1MzcwM2ZhMTY1ODUzMWVlMjk0NTA5Y2RmZjNkMThmM2NlMTUyODMKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvY2F0LnB5CkBA
IC0wLDAgKzEsNDAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IHN5cworCisKK2RlZiBjb21tYW5kX2FyZ3VtZW50cygqYXJncyk6CisgICAgcmV0dXJu
IFsncHl0aG9uJywgX19maWxlX19dICsgbGlzdChhcmdzKQorCisKK2RlZiBtYWluKCk6CisgICAg
aWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGhhc2F0dHIoc3lzLnN0ZG91dCwgJ2ZpbGVu
bycpOgorICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBt
c3ZjcnQuc2V0bW9kZShzeXMuc3Rkb3V0LmZpbGVubygpLCBvcy5PX0JJTkFSWSkKKworICAgIHN5
cy5zdGRvdXQud3JpdGUoc3lzLnN0ZGluLnJlYWQoKSkKKyAgICByZXR1cm4gMAorCitpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgorICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9jYXRfdW5pdHRlc3QucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvY2F0X3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRl
ZDFmNjc5YTg0ODdhMGEzZDUxMzMwMGFhZjg2Yjc1Y2JlMmJhNjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvY2F0X3VuaXR0ZXN0LnB5CkBAIC0w
LDAgKzEsNTIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IFN0cmluZ0lPCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0
CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZXhlY3V0aXZlLCBvdXRwdXRj
YXB0dXJlCitmcm9tIHdlYmtpdHB5LnRlc3QgaW1wb3J0IGNhdAorCisKK2NsYXNzIENhdFRlc3Qo
b3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlVGVzdENhc2VCYXNlKToKKyAgICBkZWYgYXNzZXJ0
X2NhdChzZWxmLCBpbnB1dCk6CisgICAgICAgIHNhdmVkX3N0ZGluID0gc3lzLnN0ZGluCisgICAg
ICAgIHN5cy5zdGRpbiA9IFN0cmluZ0lPLlN0cmluZ0lPKGlucHV0KQorICAgICAgICBjYXQubWFp
bigpCisgICAgICAgIHNlbGYuYXNzZXJ0U3Rkb3V0KGlucHV0KQorICAgICAgICBzeXMuc3RkaW4g
PSBzYXZlZF9zdGRpbgorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYu
YXNzZXJ0X2NhdCgnZm9vIGJhciBiYXpcbicpCisKKyAgICBkZWYgdGVzdF9ub19uZXdsaW5lKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydF9jYXQoJ2ZvbyBiYXIgYmF6JykKKworICAgIGRlZiB0
ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2NhdCh1J1dlYktpdCBcdTI2
NjEgVG9yIEFybmUgVmVzdGJcdTAwRjghJykKKworICAgIGRlZiB0ZXN0X2FzX2NvbW1hbmQoc2Vs
Zik6CisgICAgICAgIGlucHV0ID0gJ2ZvbyBiYXIgYmF6XG4nCisgICAgICAgIG91dHB1dCA9IGV4
ZWN1dGl2ZS5FeGVjdXRpdmUoKS5ydW5fY29tbWFuZChjYXQuY29tbWFuZF9hcmd1bWVudHMoKSwg
aW5wdXQ9aW5wdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5wdXQsIG91dHB1dCkKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9lY2hvLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L2VjaG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzBjMGMy
Y2UzYWI2YzNlYzFiNTA3MzQ1NWM0NTM4ODZmZGU0NDMzYwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9lY2hvLnB5CkBAIC0wLDAgKzEsNDkgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHN5cworCisK
K2RlZiBjb21tYW5kX2FyZ3VtZW50cygqYXJncyk6CisgICAgcmV0dXJuIFsncHl0aG9uJywgX19m
aWxlX19dICsgbGlzdChhcmdzKQorCisKK2RlZiBtYWluKGFyZ3M9Tm9uZSk6CisgICAgaWYgbm90
IGFyZ3M6CisgICAgICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KKworICAgIGlmIHN5cy5wbGF0Zm9y
bSA9PSAnd2luMzInIGFuZCBoYXNhdHRyKHN5cy5zdGRvdXQsICdmaWxlbm8nKToKKyAgICAgICAg
aW1wb3J0IG1zdmNydAorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgbXN2Y3J0LnNldG1vZGUo
c3lzLnN0ZG91dC5maWxlbm8oKSwgb3MuT19CSU5BUlkpCisKKyAgICBwcmludF9uZXdsaW5lID0g
VHJ1ZQorICAgIGlmIGxlbihhcmdzKSBhbmQgYXJnc1swXSA9PSAnLW4nOgorICAgICAgICBwcmlu
dF9uZXdsaW5lID0gRmFsc2UKKyAgICAgICAgYXJnc1swOjFdID0gW10KKyAgICBzeXMuc3Rkb3V0
LndyaXRlKCcgJy5qb2luKGFyZ3MpKQorICAgIGlmIHByaW50X25ld2xpbmU6CisgICAgICAgIHN5
cy5zdGRvdXQud3JpdGUoJ1xuJykKKyAgICByZXR1cm4gMAorCitpZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgorICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGVzdC9lY2hvX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L2VjaG9fdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE2OWUwNzAwZjBl
MDlhOTdjYjVlZTljNjgxZGU3MzYwZjhhYWI4ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9lY2hvX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNDkg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zLnBh
dGgKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0
IGV4ZWN1dGl2ZSwgb3V0cHV0Y2FwdHVyZQorZnJvbSB3ZWJraXRweS50ZXN0IGltcG9ydCBlY2hv
CisKKworY2xhc3MgRWNob1Rlc3Qob3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlVGVzdENhc2VC
YXNlKToKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgZWNoby5tYWluKFsnZm9v
JywgJ2JhcicsICdiYXonXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRvdXQoJ2ZvbyBiYXIgYmF6
XG4nKQorCisgICAgZGVmIHRlc3Rfbm9fbmV3bGluZShzZWxmKToKKyAgICAgICAgZWNoby5tYWlu
KFsnLW4nLCAnZm9vJywgJ2JhcicsICdiYXonXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRvdXQo
J2ZvbyBiYXIgYmF6JykKKworICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgIGVj
aG8ubWFpbihbdSdXZWJLaXQgXHUyNjYxJywgJ1RvciBBcm5lJywgdSdWZXN0Ylx1MDBGOCEnXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRTdGRvdXQodSdXZWJLaXQgXHUyNjYxIFRvciBBcm5lIFZlc3Ri
XHUwMEY4IVxuJykKKworICAgIGRlZiB0ZXN0X2FyZ3VtZW50X29yZGVyKHNlbGYpOgorICAgICAg
ICBlY2hvLm1haW4oWydmb28nLCAnLW4nLCAnYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U3Rk
b3V0KCdmb28gLW4gYmFyXG4nKQorCisgICAgZGVmIHRlc3RfYXNfY29tbWFuZChzZWxmKToKKyAg
ICAgICAgb3V0cHV0ID0gZXhlY3V0aXZlLkV4ZWN1dGl2ZSgpLnJ1bl9jb21tYW5kKGVjaG8uY29t
bWFuZF9hcmd1bWVudHMoJ2ZvbycsICdiYXInLCAnYmF6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwob3V0cHV0LCAnZm9vIGJhciBiYXpcbicpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72942</attachid>
            <date>2010-11-04 07:38:23 -0700</date>
            <delta_ts>2010-11-04 08:08:38 -0700</delta_ts>
            <desc>Incorporates Eric&apos;s comments</desc>
            <filename>bug-48883-20101104103821.patch</filename>
            <type>text/plain</type>
            <size>17922</size>
            <attacher name="Adam Roben (:aroben)">aroben</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAzNjcxOTE2NzgwOWZjMWE0NTA3M2U1NGZmMjJkZTA2YTE4NTRmMGE3Li44Njc0NmYx
OTQ0Y2RkN2I4MjYzZjJhNjQwMDVjYTlkZmNkZDRjNGY0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAK
KzIwMTAtMTEtMDIgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
ZHVjZSBvdXIgZGVwZW5kZW5jZSBvbiBjb3JldXRpbHMgd2hlbiBydW5uaW5nIFB5dGhvbiB0ZXN0
cworCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB2ZXJzaW9ucyBvZiB0aGUgc3RhbmRh
cmQgZWNobyBhbmQgY2F0IHV0aWxpdGllcworICAgICAgICBpbXBsZW1lbnRlZCBpbiBQeXRob24u
IFRoZXkgYXJlIHByb2JhYmx5IG1pc3NpbmcgZmVhdHVyZXMgb2YgdGhlaXIKKyAgICAgICAgY29y
ZXV0aWxzIGVxdWl2YWxlbnRzLCBidXQgdGhleSBjYW4gZG8gd2hhdCdzIG5lY2Vzc2FyeSBmb3Ig
b3VyIFB5dGhvbgorICAgICAgICB0ZXN0cy4gVGhpcyBpcyB1c2VmdWwgb24gV2luZG93cywgd2hl
cmUgdGhlc2UgdXRpbGl0aWVzIHR5cGljYWxseQorICAgICAgICBhcmVuJ3QgYXZhaWxhYmxlLgor
CisgICAgICAgIEZpeGVzIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ4ODgzPiBleGVjdXRpdmVfdW5p
dHRlc3QgcmVsaWVzIG9uIGVjaG8KKyAgICAgICAgYW5kIGNhdCB1dGlsaXRpZXMgZnJvbSBjb3Jl
dXRpbHMsIHdoaWNoIGFyZSBub3QgcHJlc2VudCBvbiBXaW5kb3dzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5OiBDaGFuZ2VkIHRvIHVzZQorICAgICAgICBv
dXIgUHl0aG9uLWJhc2VkIGVjaG8gYW5kIGNhdC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9maWxldXRpbHMucHk6IEFkZGVkLgorICAgICAgICAobWFrZV9zdGRv
dXRfYmluYXJ5KTogT24gV2luZG93cywgcHV0cyBzeXMuc3Rkb3V0IGludG8gYmluYXJ5IG1vZGUg
c28KKyAgICAgICAgdGhhdCBcbiB3b24ndCBiZSB0cmFuc2xhdGVkIGludG8gXHJcbi4gSSBjb3Vs
ZG4ndCB0aGluayBvZiBhIGdvb2Qgd2F5CisgICAgICAgIHRvIHRlc3QgdGhpcyBkaXJlY3RseSB3
aXRob3V0IHRvdWNoaW5nIHRoZSBmaWxlc3lzdGVtLCBidXQgaXQgaXMgdGVzdGVkCisgICAgICAg
IGluZGlyZWN0bHkgYnkgZWNob191bml0dGVzdC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9jYXQucHk6IEFkZGVkLgorICAgICAgICAoY29tbWFuZF9hcmd1bWVudHMpOiBSZXR1
cm5zIGEgbGlzdCBmb3IgaW52b2tpbmcgY2F0IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KKyAg
ICAgICAgKG1haW4pOiBBY3RzIGxpa2UgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGNvcmV1
dGlscyBjYXQgdXRpbGl0eS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9jYXRf
dW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoQ2F0VGVzdC5hc3NlcnRfY2F0KTogUnVucyBj
YXQgd2l0aCB0aGUgZ2l2ZW4gaW5wdXQgYW5kIGVuc3VyZXMgdGhlCisgICAgICAgIG91dHB1dCBt
YXRjaGVzIHRoZSBpbnB1dC4KKyAgICAgICAgKENhdFRlc3QudGVzdF9iYXNpYyk6IFBlcmZvcm1z
IGEgc2ltcGxlIHRlc3Qgb2YgY2F0LgorICAgICAgICAoQ2F0VGVzdC50ZXN0X25vX25ld2xpbmUp
OiBUZXN0cyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgaW5wdXQgc3RyaW5nCisgICAgICAgIGRvZXNu
J3QgaGF2ZSBhIHRyYWlsaW5nIG5ld2xpbmUuCisgICAgICAgIChDYXRUZXN0LnRlc3RfdW5pY29k
ZSk6IFRlc3RzIHBhc3NpbmcgYSB1bmljb2RlIHN0cmluZyB0byBjYXQuCisgICAgICAgIChDYXRU
ZXN0LnRlc3RfYXNfY29tbWFuZCk6IFRlc3RzIHJ1bm5pbmcgY2F0IGFzIGEgc2VwYXJhdGUgY29t
bWFuZC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9lY2hvLnB5OiBBZGRlZC4K
KyAgICAgICAgKGNvbW1hbmRfYXJndW1lbnRzKTogUmV0dXJucyBhIGxpc3QgZm9yIGludm9raW5n
IGVjaG8gd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLgorICAgICAgICAobWFpbik6IEFjdHMgbGlr
ZSBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgY29yZXV0aWxzIGVjaG8gdXRpbGl0eS4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9lY2hvX3VuaXR0ZXN0LnB5OiBBZGRlZC4K
KyAgICAgICAgKEVjaG9UZXN0LnRlc3RfYmFzaWMpOiBQZXJmb3JtcyBhIHNpbXBsZSB0ZXN0IG9m
IGVjaG8uCisgICAgICAgIChFY2hvVGVzdC50ZXN0X25vX25ld2xpbmUpOiBUZXN0cyBwYXNzaW5n
IC1uIHRvIGVjaG8gdG8gc3VwcHJlc3MgdGhlCisgICAgICAgIHRyYWlsaW5nIG5ld2xpbmUuCisg
ICAgICAgIChFY2hvVGVzdC50ZXN0X3VuaWNvZGUpOiBUZXN0cyBwYXNzaW5nIHVuaWNvZGUgYW5k
IG5vbi11bmljb2RlIHN0cmluZ3MKKyAgICAgICAgdG8gZWNoby4KKyAgICAgICAgKEVjaG9UZXN0
LnRlc3RfYXJndW1lbnRfb3JkZXIpOiBUZXN0cyB3aGF0IGhhcHBlbnMgd2hlbiAtbiBpcyBub3Qg
dGhlCisgICAgICAgIGZpcnN0IGFyZ3VtZW50LgorICAgICAgICAoRWNob1Rlc3QudGVzdF9lbXB0
eV9hcmd1bWVudHMpOiBUZXN0cyB3aGF0IGhhcHBlbnMgd2hlbiB5b3UgcGFzcyBbXSB0bworICAg
ICAgICBlY2hvLm1haW4uCisgICAgICAgIChFY2hvVGVzdC50ZXN0X25vX2FyZ3VtZW50cyk6IFRl
c3RzIHdoYXQgaGFwcGVucyB3aGVuIHlvdSBjYWxsCisgICAgICAgIGVjaG8ubWFpbiB3aXRoIG5v
IGFyZ3VtZW50cy4KKyAgICAgICAgKEVjaG9UZXN0LnRlc3RfYXNfY29tbWFuZCk6IFRlc3RzIHJ1
bm5pbmcgZWNobyBhcyBhIHNlcGFyYXRlIGNvbW1hbmQuCisKIDIwMTAtMTEtMDMgIEFkYW0gUm9i
ZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFsd2F5cyB1c2UgdXBwZXJjYXNlIGRy
aXZlIG5hbWVzIGluIHN0cmluZ3MgcmV0dXJuZWQgYnkgYWJzcGF0aF90b191cmkKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVf
dW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZXhlY3V0aXZlX3VuaXR0ZXN0LnB5CmluZGV4IDMyZjhmNTE5OGVhM2E4Nzg1ZGY4NmJiY2Y0MDlh
N2NhMDBhYjgzYmUuLjYxMDZiZThlOThjNjA3YWE1ODdhMWM1MThkYjY0MjFhYmNmOWUxYzggMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVj
dXRpdmVfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weQpAQCAtMzMsNiArMzMsNyBAQCBpbXBvcnQg
c3lzCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1
dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBydW5fY29tbWFuZCwgU2NyaXB0RXJyb3IKK2Zyb20gd2Vi
a2l0cHkudGVzdCBpbXBvcnQgY2F0LCBlY2hvCiAKIAogY2xhc3MgRXhlY3V0aXZlVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CkBAIC00Niw4ICs0Nyw4IEBAIGNsYXNzIEV4ZWN1dGl2ZVRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQogICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgZXhlY3V0aXZlLnJ1bl9jb21tYW5k
LCAiZWNobyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBleGVj
dXRpdmUucnVuX2NvbW1hbmQsIHUiZWNobyIpCi0gICAgICAgIGV4ZWN1dGl2ZS5ydW5fY29tbWFu
ZChbImVjaG8iLCAiZm9vIl0pCi0gICAgICAgIGV4ZWN1dGl2ZS5ydW5fY29tbWFuZCgoImVjaG8i
LCAiZm9vIikpCisgICAgICAgIGV4ZWN1dGl2ZS5ydW5fY29tbWFuZChlY2hvLmNvbW1hbmRfYXJn
dW1lbnRzKCdmb28nKSkKKyAgICAgICAgZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHR1cGxlKGVjaG8u
Y29tbWFuZF9hcmd1bWVudHMoJ2ZvbycpKSkKIAogICAgIGRlZiB0ZXN0X3J1bl9jb21tYW5kX3dp
dGhfdW5pY29kZShzZWxmKToKICAgICAgICAgIiIiVmFsaWRhdGUgdGhhdCBpdCBpcyBzYWZlIHRv
IHBhc3MgdW5pY29kZSgpIG9iamVjdHMKQEAgLTU3LDI0ICs1OCwyNCBAQCBjbGFzcyBFeGVjdXRp
dmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgdW5pY29kZV90b3IgPSB1IldlYktp
dCBcdTI2NjEgVG9yIEFybmUgVmVzdGJcdTAwRjghIgogICAgICAgICB1dGY4X3RvciA9IHVuaWNv
ZGVfdG9yLmVuY29kZSgidXRmLTgiKQogCi0gICAgICAgIG91dHB1dCA9IGV4ZWN1dGl2ZS5ydW5f
Y29tbWFuZChbImNhdCJdLCBpbnB1dD11bmljb2RlX3RvcikKKyAgICAgICAgb3V0cHV0ID0gZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKGNhdC5jb21tYW5kX2FyZ3VtZW50cygpLCBpbnB1dD11bmljb2Rl
X3RvcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3V0cHV0LCB1bmljb2RlX3RvcikKIAot
ICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2NvbW1hbmQoWyJlY2hvIiwgIi1uIiwgdW5p
Y29kZV90b3JdKQorICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2NvbW1hbmQoZWNoby5j
b21tYW5kX2FyZ3VtZW50cygiLW4iLCB1bmljb2RlX3RvcikpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKG91dHB1dCwgdW5pY29kZV90b3IpCiAKLSAgICAgICAgb3V0cHV0ID0gZXhlY3V0aXZl
LnJ1bl9jb21tYW5kKFsiZWNobyIsICItbiIsIHVuaWNvZGVfdG9yXSwgZGVjb2RlX291dHB1dD1G
YWxzZSkKKyAgICAgICAgb3V0cHV0ID0gZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGVjaG8uY29tbWFu
ZF9hcmd1bWVudHMoIi1uIiwgdW5pY29kZV90b3IpLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQsIHV0ZjhfdG9yKQogCiAgICAgICAgICMgTWFr
ZSBzdXJlIHRoYXQgc3RyKCkgaW5wdXQgYWxzbyB3b3Jrcy4KLSAgICAgICAgb3V0cHV0ID0gZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKFsiY2F0Il0sIGlucHV0PXV0ZjhfdG9yLCBkZWNvZGVfb3V0cHV0
PUZhbHNlKQorICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2NvbW1hbmQoY2F0LmNvbW1h
bmRfYXJndW1lbnRzKCksIGlucHV0PXV0ZjhfdG9yLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQsIHV0ZjhfdG9yKQogCiAgICAgICAgICMgRklY
TUU6IFdlIHNob3VsZCBvbmx5IGhhdmUgb25lIHJ1biogbWV0aG9kIHRvIHRlc3QKLSAgICAgICAg
b3V0cHV0ID0gZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChbImVjaG8iLCAiLW4iLCB1
bmljb2RlX3Rvcl0sIHF1aWV0PVRydWUpCisgICAgICAgIG91dHB1dCA9IGV4ZWN1dGl2ZS5ydW5f
YW5kX3Rocm93X2lmX2ZhaWwoZWNoby5jb21tYW5kX2FyZ3VtZW50cygiLW4iLCB1bmljb2RlX3Rv
ciksIHF1aWV0PVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG91dHB1dCwgdW5pY29k
ZV90b3IpCiAKLSAgICAgICAgb3V0cHV0ID0gZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFp
bChbImVjaG8iLCAiLW4iLCB1bmljb2RlX3Rvcl0sIHF1aWV0PVRydWUsIGRlY29kZV9vdXRwdXQ9
RmFsc2UpCisgICAgICAgIG91dHB1dCA9IGV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwo
ZWNoby5jb21tYW5kX2FyZ3VtZW50cygiLW4iLCB1bmljb2RlX3RvciksIHF1aWV0PVRydWUsIGRl
Y29kZV9vdXRwdXQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG91dHB1dCwgdXRm
OF90b3IpCiAKICAgICBkZWYgdGVzdF9raWxsX3Byb2Nlc3Moc2VsZik6CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXV0aWxzLnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGV1dGlscy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41NTgyMWY4MzU4MzhkZmUzNTY4ZDc1NTA3ZGQ5YTIyNDExNGM2YzY3Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2ZpbGV1dGlscy5weQpAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKKworCitkZWYgbWFrZV9zdGRvdXRfYmluYXJ5KCk6
CisgICAgIiIiUHV0cyBzeXMuc3Rkb3V0IGludG8gYmluYXJ5IG1vZGUgKG9uIHBsYXRmb3JtcyB0
aGF0IGhhdmUgYSBkaXN0aW5jdGlvbgorICAgIGJldHdlZW4gdGV4dCBhbmQgYmluYXJ5IG1vZGUp
LiIiIgorICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInIG9yIG5vdCBoYXNhdHRyKHN5cy5z
dGRvdXQsICdmaWxlbm8nKToKKyAgICAgICAgcmV0dXJuCisgICAgaW1wb3J0IG1zdmNydAorICAg
IGltcG9ydCBvcworICAgIG1zdmNydC5zZXRtb2RlKHN5cy5zdGRvdXQuZmlsZW5vKCksIG9zLk9f
QklOQVJZKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L2Nh
dC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9jYXQucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTUzNzAzZmExNjU4NTMxZWUyOTQ1MDljZGZmM2QxOGYzY2UxNTI4MwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9jYXQucHkKQEAgLTAsMCAr
MSw0MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
IyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
c3lzCisKKworZGVmIGNvbW1hbmRfYXJndW1lbnRzKCphcmdzKToKKyAgICByZXR1cm4gWydweXRo
b24nLCBfX2ZpbGVfX10gKyBsaXN0KGFyZ3MpCisKKworZGVmIG1haW4oKToKKyAgICBpZiBzeXMu
cGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgaGFzYXR0cihzeXMuc3Rkb3V0LCAnZmlsZW5vJyk6Cisg
ICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIG1zdmNydC5z
ZXRtb2RlKHN5cy5zdGRvdXQuZmlsZW5vKCksIG9zLk9fQklOQVJZKQorCisgICAgc3lzLnN0ZG91
dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpKQorICAgIHJldHVybiAwCisKK2lmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L2NhdF91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGVzdC9jYXRfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVkMWY2Nzlh
ODQ4N2EwYTNkNTEzMzAwYWFmODZiNzVjYmUyYmE2OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9jYXRfdW5pdHRlc3QucHkKQEAgLTAsMCArMSw1
MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgU3Ry
aW5nSU8KK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBleGVjdXRpdmUsIG91dHB1dGNhcHR1cmUK
K2Zyb20gd2Via2l0cHkudGVzdCBpbXBvcnQgY2F0CisKKworY2xhc3MgQ2F0VGVzdChvdXRwdXRj
YXB0dXJlLk91dHB1dENhcHR1cmVUZXN0Q2FzZUJhc2UpOgorICAgIGRlZiBhc3NlcnRfY2F0KHNl
bGYsIGlucHV0KToKKyAgICAgICAgc2F2ZWRfc3RkaW4gPSBzeXMuc3RkaW4KKyAgICAgICAgc3lz
LnN0ZGluID0gU3RyaW5nSU8uU3RyaW5nSU8oaW5wdXQpCisgICAgICAgIGNhdC5tYWluKCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRTdGRvdXQoaW5wdXQpCisgICAgICAgIHN5cy5zdGRpbiA9IHNhdmVk
X3N0ZGluCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRf
Y2F0KCdmb28gYmFyIGJhelxuJykKKworICAgIGRlZiB0ZXN0X25vX25ld2xpbmUoc2VsZik6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0X2NhdCgnZm9vIGJhciBiYXonKQorCisgICAgZGVmIHRlc3RfdW5p
Y29kZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfY2F0KHUnV2ViS2l0IFx1MjY2MSBUb3Ig
QXJuZSBWZXN0Ylx1MDBGOCEnKQorCisgICAgZGVmIHRlc3RfYXNfY29tbWFuZChzZWxmKToKKyAg
ICAgICAgaW5wdXQgPSAnZm9vIGJhciBiYXpcbicKKyAgICAgICAgb3V0cHV0ID0gZXhlY3V0aXZl
LkV4ZWN1dGl2ZSgpLnJ1bl9jb21tYW5kKGNhdC5jb21tYW5kX2FyZ3VtZW50cygpLCBpbnB1dD1p
bnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnB1dCwgb3V0cHV0KQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L2VjaG8ucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvZWNoby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41N2QxNDhhMjYwZTJh
YjAxNWJiY2I1YjlmNWVlNjBhZWU4N2EwZTBlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L2VjaG8ucHkKQEAgLTAsMCArMSw1MSBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MucGF0aAoraW1wb3J0
IHN5cworCisjIEFkZCBXZWJLaXRUb29scy9TY3JpcHRzIHRvIHRoZSBwYXRoIHRvIGVuc3VyZSB3
ZSBjYW4gZmluZCB3ZWJraXRweS4KK3N5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmRpcm5hbWUob3Mu
cGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSkKKworZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtIGltcG9ydCBmaWxldXRpbHMKKworZGVmIGNvbW1hbmRfYXJndW1lbnRz
KCphcmdzKToKKyAgICByZXR1cm4gWydweXRob24nLCBfX2ZpbGVfX10gKyBsaXN0KGFyZ3MpCisK
KworZGVmIG1haW4oYXJncz1Ob25lKToKKyAgICBpZiBhcmdzIGlzIE5vbmU6CisgICAgICAgIGFy
Z3MgPSBzeXMuYXJndlsxOl0KKworICAgIGZpbGV1dGlscy5tYWtlX3N0ZG91dF9iaW5hcnkoKQor
CisgICAgcHJpbnRfbmV3bGluZSA9IFRydWUKKyAgICBpZiBsZW4oYXJncykgYW5kIGFyZ3NbMF0g
PT0gJy1uJzoKKyAgICAgICAgcHJpbnRfbmV3bGluZSA9IEZhbHNlCisgICAgICAgIGRlbCBhcmdz
WzBdCisgICAgc3lzLnN0ZG91dC53cml0ZSgnICcuam9pbihhcmdzKSkKKyAgICBpZiBwcmludF9u
ZXdsaW5lOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCisgICAgcmV0dXJuIDAKKwor
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvZWNob191bml0dGVzdC5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9lY2hvX3VuaXR0ZXN0LnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmJjMTNiNWVlYTE5ZTIzZDVhNzZlMTg0NmI4Y2M1MGZkNDc2YzJlMzkKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvZWNob191bml0dGVz
dC5weQpAQCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBleGVjdXRpdmUsIG91dHB1dGNhcHR1cmUK
K2Zyb20gd2Via2l0cHkudGVzdCBpbXBvcnQgZWNobworCisKK2NsYXNzIEVjaG9UZXN0KG91dHB1
dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZVRlc3RDYXNlQmFzZSk6CisgICAgZGVmIHRlc3RfYmFzaWMo
c2VsZik6CisgICAgICAgIGVjaG8ubWFpbihbJ2ZvbycsICdiYXInLCAnYmF6J10pCisgICAgICAg
IHNlbGYuYXNzZXJ0U3Rkb3V0KCdmb28gYmFyIGJhelxuJykKKworICAgIGRlZiB0ZXN0X25vX25l
d2xpbmUoc2VsZik6CisgICAgICAgIGVjaG8ubWFpbihbJy1uJywgJ2ZvbycsICdiYXInLCAnYmF6
J10pCisgICAgICAgIHNlbGYuYXNzZXJ0U3Rkb3V0KCdmb28gYmFyIGJheicpCisKKyAgICBkZWYg
dGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICBlY2hvLm1haW4oW3UnV2ViS2l0IFx1MjY2MScs
ICdUb3IgQXJuZScsIHUnVmVzdGJcdTAwRjghJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U3Rkb3V0
KHUnV2ViS2l0IFx1MjY2MSBUb3IgQXJuZSBWZXN0Ylx1MDBGOCFcbicpCisKKyAgICBkZWYgdGVz
dF9hcmd1bWVudF9vcmRlcihzZWxmKToKKyAgICAgICAgZWNoby5tYWluKFsnZm9vJywgJy1uJywg
J2JhciddKQorICAgICAgICBzZWxmLmFzc2VydFN0ZG91dCgnZm9vIC1uIGJhclxuJykKKworICAg
IGRlZiB0ZXN0X2VtcHR5X2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgb2xkX2FyZ3YgPSBzeXMu
YXJndgorICAgICAgICBzeXMuYXJndiA9IFsnZWNoby5weScsICdmb28nLCAnYmFyJywgJ2Jheidd
CisgICAgICAgIGVjaG8ubWFpbihbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRvdXQoJ1xuJykK
KyAgICAgICAgc3lzLmFyZ3YgPSBvbGRfYXJndgorCisgICAgZGVmIHRlc3Rfbm9fYXJndW1lbnRz
KHNlbGYpOgorICAgICAgICBvbGRfYXJndiA9IHN5cy5hcmd2CisgICAgICAgIHN5cy5hcmd2ID0g
WydlY2hvLnB5JywgJ2ZvbycsICdiYXInLCAnYmF6J10KKyAgICAgICAgZWNoby5tYWluKCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRTdGRvdXQoJ2ZvbyBiYXIgYmF6XG4nKQorICAgICAgICBzeXMuYXJn
diA9IG9sZF9hcmd2CisKKyAgICBkZWYgdGVzdF9hc19jb21tYW5kKHNlbGYpOgorICAgICAgICBv
dXRwdXQgPSBleGVjdXRpdmUuRXhlY3V0aXZlKCkucnVuX2NvbW1hbmQoZWNoby5jb21tYW5kX2Fy
Z3VtZW50cygnZm9vJywgJ2JhcicsICdiYXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChv
dXRwdXQsICdmb28gYmFyIGJhelxuJykK
</data>
<flag name="review"
          id="63285"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>