<?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>63872</bug_id>
          
          <creation_ts>2011-07-03 04:36:56 -0700</creation_ts>
          <short_desc>Add trivial garden-o-matic command (with server)</short_desc>
          <delta_ts>2011-07-05 15:52:05 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>aroben</cc>
    
    <cc>dglazkov</cc>
    
    <cc>mihaip</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>431691</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-03 04:36:56 -0700</bug_when>
    <thetext>Add trivial garden-o-matic command (with server)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431692</commentid>
    <comment_count>1</comment_count>
      <attachid>99571</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-03 04:38:50 -0700</bug_when>
    <thetext>Created attachment 99571
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431789</commentid>
    <comment_count>2</comment_count>
      <attachid>99571</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-03 21:39:17 -0700</bug_when>
    <thetext>Comment on attachment 99571
Patch

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

&gt; Tools/Scripts/webkitpy/tool/commands/abstractservercommand.py:1
&gt; +# Copyright (C) 2010 Google Inc. All rights reserved.

I heard an awful rumor that it&apos;s 2011 now.  I also heard a less awful rumor that we&apos;re using the 2-clause license nowadays (like http://trac.webkit.org/browser/trunk/Source/WebCore/LICENSE-APPLE, but with only one year in the copyright line and &quot;Google Inc&quot; instead of &quot;Apple Inc&quot; on the first line).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431803</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-03 22:22:58 -0700</bug_when>
    <thetext>For realz?  Ok.  I&apos;ll fix it on landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431977</commentid>
    <comment_count>4</comment_count>
      <attachid>99571</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-04 10:09:50 -0700</bug_when>
    <thetext>Comment on attachment 99571
Patch

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

&gt; Tools/Scripts/webkitpy/tool/commands/abstractservercommand.py:35
&gt; +class AbstractServerCommand(AbstractDeclarativeCommand):

I would have called this AbstractLocalServerCommand or AbstractLocalHTTPServerCommand (yes, both are rather large mouthfuls)

&gt; Tools/Scripts/webkitpy/tool/commands/abstractservercommand.py:45
&gt; +    def _prepare_config(self, options, args, tool):
&gt; +        return None

So this is like _prepare_state for AbstractSequenceCommand?

&gt; Tools/Scripts/webkitpy/tool/commands/abstractservercommand.py:50
&gt; +        server_url = &quot;http://localhost:%d/&quot; % options.httpd_port

Could default to None and use a random port above 8000 when not specified.

&gt; Tools/Scripts/webkitpy/tool/commands/abstractservercommand.py:55
&gt; +        # FIXME: This seems racy.
&gt; +        threading.Timer(0.1, lambda: self._tool.user.open_url(server_url)).start()

Yes, quite racy.  The http server for DRT has an &quot;is it up&quot; method which polls in a loop.

&gt; Tools/Scripts/webkitpy/tool/commands/abstractservercommand.py:57
&gt; +        httpd = self.server(httpd_port=options.httpd_port, config=config)

You could **config the config to pass them as keyword arguments intead of as a dictionary.  I&apos;m not sure if that&apos;s more clear or not.

&gt; Tools/Scripts/webkitpy/tool/commands/options.py:33
&gt; +    httpd_port = make_option(&quot;--httpd-port&quot;, action=&quot;store&quot;, type=&quot;int&quot;, default=8127, help=&quot;Port to use for the HTTP server&quot;)

Not sure the default is very helpful.  See above.

I like that we&apos;re maing an Options class for commands.  Might be a little premature though.  I wonder how many other commands have options.

&gt; Tools/Scripts/webkitpy/tool/commands/rebaselineserver.py:-84
&gt; -        if options.dry_run:
&gt; -
&gt; -            def no_op_copyfile(src, dest):
&gt; -                pass
&gt; -
&gt; -            def no_op_add(path, return_exit_code=False):
&gt; -                if return_exit_code:
&gt; -                    return 0
&gt; -
&gt; -            filesystem.copyfile = no_op_copyfile
&gt; -            scm.add = no_op_add
&gt; -

So you&apos;re just removing this?  Seems these could easily use the mock versions.

&gt; Tools/Scripts/webkitpy/tool/commands/rebaselineserver.py:89
&gt; +        return {

Always feels a bit odd returning a dictionary.

&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:37
&gt; +        BaseHTTPServer.HTTPServer.__init__(self, (&quot;&quot;, httpd_port), GardeningHTTPRequestHandler)

What&apos;s the &quot;&quot;, port tuple?

&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:45
&gt; +    STATIC_FILE_DIRECTORY = os.path.join(os.path.dirname(__file__), &quot;data&quot;, &quot;gardeningserver&quot;)

Do you want this to always be relative to __file__?  If you use filesystem.path_for_module you can get a mockable value for __file__.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431996</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-04 11:09:58 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 99571 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=99571&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/tool/commands/abstractservercommand.py:35
&gt; &gt; +class AbstractServerCommand(AbstractDeclarativeCommand):
&gt; 
&gt; I would have called this AbstractLocalServerCommand or AbstractLocalHTTPServerCommand (yes, both are rather large mouthfuls)

Ok.

&gt; &gt; Tools/Scripts/webkitpy/tool/commands/abstractservercommand.py:45
&gt; &gt; +    def _prepare_config(self, options, args, tool):
&gt; &gt; +        return None
&gt; 
&gt; So this is like _prepare_state for AbstractSequenceCommand?

Precisely.

&gt; &gt; Tools/Scripts/webkitpy/tool/commands/abstractservercommand.py:50
&gt; &gt; +        server_url = &quot;http://localhost:%d/&quot; % options.httpd_port
&gt; 
&gt; Could default to None and use a random port above 8000 when not specified.

We could.

&gt; &gt; Tools/Scripts/webkitpy/tool/commands/abstractservercommand.py:55
&gt; &gt; +        # FIXME: This seems racy.
&gt; &gt; +        threading.Timer(0.1, lambda: self._tool.user.open_url(server_url)).start()
&gt; 
&gt; Yes, quite racy.  The http server for DRT has an &quot;is it up&quot; method which polls in a loop.

It seems to work ok.

&gt; &gt; Tools/Scripts/webkitpy/tool/commands/abstractservercommand.py:57
&gt; &gt; +        httpd = self.server(httpd_port=options.httpd_port, config=config)
&gt; 
&gt; You could **config the config to pass them as keyword arguments intead of as a dictionary.  I&apos;m not sure if that&apos;s more clear or not.

Sure.

&gt; &gt; Tools/Scripts/webkitpy/tool/commands/options.py:33
&gt; &gt; +    httpd_port = make_option(&quot;--httpd-port&quot;, action=&quot;store&quot;, type=&quot;int&quot;, default=8127, help=&quot;Port to use for the HTTP server&quot;)
&gt; 
&gt; Not sure the default is very helpful.  See above.
&gt; 
&gt; I like that we&apos;re maing an Options class for commands.  Might be a little premature though.  I wonder how many other commands have options.

Yeah, it was more useful in an earlier version of the patch, but turns not to be need that much in the final version.

&gt; &gt; Tools/Scripts/webkitpy/tool/commands/rebaselineserver.py:-84
&gt; &gt; -        if options.dry_run:
&gt; &gt; -
&gt; &gt; -            def no_op_copyfile(src, dest):
&gt; &gt; -                pass
&gt; &gt; -
&gt; &gt; -            def no_op_add(path, return_exit_code=False):
&gt; &gt; -                if return_exit_code:
&gt; &gt; -                    return 0
&gt; &gt; -
&gt; &gt; -            filesystem.copyfile = no_op_copyfile
&gt; &gt; -            scm.add = no_op_add
&gt; &gt; -
&gt; 
&gt; So you&apos;re just removing this?  Seems these could easily use the mock versions.

Yeah, that code doesn&apos;t seem useful.

&gt; &gt; Tools/Scripts/webkitpy/tool/commands/rebaselineserver.py:89
&gt; &gt; +        return {
&gt; 
&gt; Always feels a bit odd returning a dictionary.

What else would you return?  It can really be anything,

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:37
&gt; &gt; +        BaseHTTPServer.HTTPServer.__init__(self, (&quot;&quot;, httpd_port), GardeningHTTPRequestHandler)
&gt; 
&gt; What&apos;s the &quot;&quot;, port tuple?

No idea.

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:45
&gt; &gt; +    STATIC_FILE_DIRECTORY = os.path.join(os.path.dirname(__file__), &quot;data&quot;, &quot;gardeningserver&quot;)
&gt; 
&gt; Do you want this to always be relative to __file__?  If you use filesystem.path_for_module you can get a mockable value for __file__.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432440</commentid>
    <comment_count>6</comment_count>
      <attachid>99753</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-05 15:26:57 -0700</bug_when>
    <thetext>Created attachment 99753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432449</commentid>
    <comment_count>7</comment_count>
      <attachid>99753</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-05 15:49:51 -0700</bug_when>
    <thetext>Comment on attachment 99753
Patch

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

&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:25
&gt; +import BaseHTTPServer

Is this the import you mean?  Is that part of std python?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432450</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-05 15:52:05 -0700</bug_when>
    <thetext>Committed r90410: &lt;http://trac.webkit.org/changeset/90410&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99571</attachid>
            <date>2011-07-03 04:38:50 -0700</date>
            <delta_ts>2011-07-05 15:26:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63872-20110703043848.patch</filename>
            <type>text/plain</type>
            <size>17522</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTAzMzcKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiM2ZmZGI3MGU4ZGJmOWNmZmVmNTZkM2I5OGVjY2M3N2M5
N2U1NmVhLi43MDAyYzY4NmEyN2UzNDJjMTkyN2YwNjdmNDdjMjY2MDYyZDNiMDIyIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjYg
QEAKIDIwMTEtMDctMDMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAorICAgICAg
ICBBZGQgdHJpdmlhbCBnYXJkZW4tby1tYXRpYyBjb21tYW5kICh3aXRoIHNlcnZlcikKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzODcyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
IGEgdHJpdmlhbCAiSGVsbG8sIHdvcmxkIiBnYXJkZW4tby1tYXRpYyBjb21tYW5kLAorICAgICAg
ICBjb21wbGV0ZSB3aXRoIGFuIEhUVFAgc2VydmVyLiAgVGhpcyBjb21tYW5kIHJlLXVzZXMgYSBi
dW5jaCBvZiBjb2RlCisgICAgICAgIGZyb20gdGhlIGV4aXN0aW5nIHJlYmFzZWxpbmUtc2VydmVy
IGNvbW1hbmQuICBPdmVyIHRpbWUsIHRoaXMgY29tbWFuZAorICAgICAgICB3aWxsIGdyb3cgdG8g
YmUgYSB0b29sIHVzZWZ1bCBmb3IgZ2FyZGVuaW5nIHRoZSBXZWJLaXQgdHJlZS4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9fX2luaXRfXy5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvYWJzdHJhY3RzZXJ2ZXJjb21tYW5kLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZ2FyZGVu
b21hdGljLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvb3B0aW9ucy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90
b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvaW5kZXguaHRtbDogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9yZWJhc2VsaW5l
c2VydmVyLnB5OgorCisyMDExLTA3LTAzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+
CisKICAgICAgICAgRmFjdG9yIFJlZmxlY3Rpb25IYW5kbGVyIG91dCBvZiB0aGUgcmViYXNlbGlu
ZSBzZXJ2ZXIuICBKdXN0IGNvZGUgbW90aW9uLgogCiAgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXIucHk6CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18ucHkKaW5kZXggMjZiZDE5NTZhNTVkODc4
YTUzNjEyMTg5ZjljNTYwZjg5MWRlZDdlYy4uNDA1YjZjZmFmZDlmNzI3OWQ4NTMyZDM1OTE1ZTVk
NzAwZjI1MmY4OSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1h
bmRzL19faW5pdF9fLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9fX2luaXRfXy5weQpAQCAtMSw5ICsxLDEwIEBACiAjIFJlcXVpcmVkIGZvciBQeXRob24gdG8g
c2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKIAotZnJvbSB3ZWJraXRweS50
b29sLmNvbW1hbmRzLmJ1Z3NlYXJjaCBpbXBvcnQgQnVnU2VhcmNoCiBmcm9tIHdlYmtpdHB5LnRv
b2wuY29tbWFuZHMuYnVnZm9ydGVzdCBpbXBvcnQgQnVnRm9yVGVzdAorZnJvbSB3ZWJraXRweS50
b29sLmNvbW1hbmRzLmJ1Z3NlYXJjaCBpbXBvcnQgQnVnU2VhcmNoCiBmcm9tIHdlYmtpdHB5LnRv
b2wuY29tbWFuZHMuZG93bmxvYWQgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5k
cy5lYXJseXdhcm5pbmdzeXN0ZW0gaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkudG9vbC5jb21tYW5k
cy5nYXJkZW5vbWF0aWMgaW1wb3J0IEdhcmRlbk9NYXRpYwogZnJvbSB3ZWJraXRweS50b29sLmNv
bW1hbmRzLm9wZW5idWdzIGltcG9ydCBPcGVuQnVncwogZnJvbSB3ZWJraXRweS50b29sLmNvbW1h
bmRzLnByZXR0eWRpZmYgaW1wb3J0IFByZXR0eURpZmYKIGZyb20gd2Via2l0cHkudG9vbC5jb21t
YW5kcy5xdWVyaWVzIGltcG9ydCAqCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvYWJzdHJhY3RzZXJ2ZXJjb21tYW5kLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL2NvbW1hbmRzL2Fic3RyYWN0c2VydmVyY29tbWFuZC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43YjI5ZTg5YTM2N2UyN2VjOTAzNmMxMDY5ZTIyYzRmNjQ0YmI4MjBhCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Fic3RyYWN0c2VydmVy
Y29tbWFuZC5weQpAQCAtMCwwICsxLDU4IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHRo
cmVhZGluZworCitmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMub3B0aW9ucyBpbXBvcnQgT3B0
aW9ucworZnJvbSB3ZWJraXRweS50b29sLm11bHRpY29tbWFuZHRvb2wgaW1wb3J0IEFic3RyYWN0
RGVjbGFyYXRpdmVDb21tYW5kCisKKworY2xhc3MgQWJzdHJhY3RTZXJ2ZXJDb21tYW5kKEFic3Ry
YWN0RGVjbGFyYXRpdmVDb21tYW5kKToKKyAgICBzZXJ2ZXIgPSBOb25lCisKKyAgICBkZWYgX19p
bml0X18oc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbCisgICAgICAgICAgICBPcHRpb25zLmh0
dHBkX3BvcnQsCisgICAgICAgIF0KKyAgICAgICAgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQu
X19pbml0X18oc2VsZiwgb3B0aW9ucz1vcHRpb25zKQorCisgICAgZGVmIF9wcmVwYXJlX2NvbmZp
ZyhzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
IGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAgICAgICBjb25maWcg
PSBzZWxmLl9wcmVwYXJlX2NvbmZpZyhvcHRpb25zLCBhcmdzLCB0b29sKQorCisgICAgICAgIHNl
cnZlcl91cmwgPSAiaHR0cDovL2xvY2FsaG9zdDolZC8iICUgb3B0aW9ucy5odHRwZF9wb3J0Cisg
ICAgICAgIHByaW50ICJTdGFydGluZyBzZXJ2ZXIgYXQgJXMiICUgc2VydmVyX3VybAorICAgICAg
ICBwcmludCAiVXNlIHRoZSAnRXhpdCcgbGluayBpbiB0aGUgVUksICVzcXVpdHF1aXRxdWl0IG9y
IEN0cmwtQyB0byBzdG9wIiAlIHNlcnZlcl91cmwKKworICAgICAgICAjIEZJWE1FOiBUaGlzIHNl
ZW1zIHJhY3kuCisgICAgICAgIHRocmVhZGluZy5UaW1lcigwLjEsIGxhbWJkYTogc2VsZi5fdG9v
bC51c2VyLm9wZW5fdXJsKHNlcnZlcl91cmwpKS5zdGFydCgpCisKKyAgICAgICAgaHR0cGQgPSBz
ZWxmLnNlcnZlcihodHRwZF9wb3J0PW9wdGlvbnMuaHR0cGRfcG9ydCwgY29uZmlnPWNvbmZpZykK
KyAgICAgICAgaHR0cGQuc2VydmVfZm9yZXZlcigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZ2FyZGVub21hdGljLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL2NvbW1hbmRzL2dhcmRlbm9tYXRpYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjQ3ZGVi
ZDUxOTI1NDc1MzBmMDJhMTAxZjhlNzI3M2M0OWM1NjRhCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2dhcmRlbm9tYXRpYy5weQpAQCAtMCww
ICsxLDM3IEBACisjIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRz
LmFic3RyYWN0c2VydmVyY29tbWFuZCBpbXBvcnQgQWJzdHJhY3RTZXJ2ZXJDb21tYW5kCitmcm9t
IHdlYmtpdHB5LnRvb2wuc2VydmVycy5nYXJkZW5pbmdzZXJ2ZXIgaW1wb3J0IEdhcmRlbmluZ0hU
VFBTZXJ2ZXIKKworCitjbGFzcyBHYXJkZW5PTWF0aWMoQWJzdHJhY3RTZXJ2ZXJDb21tYW5kKToK
KyAgICBuYW1lID0gImdhcmRlbi1vLW1hdGljIgorICAgIGhlbHBfdGV4dCA9ICJFeHBlcmltZW50
YWwgY29tbWFuZCBmb3IgZ2FyZGVuaW5nIHRoZSBXZWJLaXQgdHJlZS4iCisKKyAgICBzZXJ2ZXIg
PSBHYXJkZW5pbmdIVFRQU2VydmVyCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvb3B0aW9ucy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9vcHRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0OGMxNzI3NjIxMGZjNjBlODI0MDY2ZjA5
MDY2MTI3OWU1N2U0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvb3B0aW9ucy5weQpAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24KKworCitjbGFzcyBPcHRpb25z
KG9iamVjdCk6CisgICAgaHR0cGRfcG9ydCA9IG1ha2Vfb3B0aW9uKCItLWh0dHBkLXBvcnQiLCBh
Y3Rpb249InN0b3JlIiwgdHlwZT0iaW50IiwgZGVmYXVsdD04MTI3LCBoZWxwPSJQb3J0IHRvIHVz
ZSBmb3IgdGhlIEhUVFAgc2VydmVyIikKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lc2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXIucHkKaW5kZXggY2IwMmY1YTA3MzFj
MzgzM2I4ZTg2ZjA3NDE2ZmQ2MDE0MGU0ZmExYi4uNGEwYjUzNWU4OWQxM2ZhZWJmMTQwNWZiMGU0
OWU1MzQ0YTUzNmVlYiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXIucHkKQEAgLTMyLDE1ICszMiwxMiBAQCBpbWFn
ZXMgYW5kIHRleHQpIGFuZCBhbGxvd3Mgb25lLWNsaWNrIHJlYmFzZWxpbmluZyBvZiB0ZXN0cy4i
IiIKIAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAotaW1wb3J0IHRocmVhZGluZwotCi1mcm9t
IG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBv
cnQgc3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQgaW1wb3J0IHJlc3VsdHNqc29ucGFy
c2VyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQganNv
bl9yZXN1bHRzX2dlbmVyYXRvcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBv
cnQgZmFjdG9yeQotZnJvbSB3ZWJraXRweS50b29sLm11bHRpY29tbWFuZHRvb2wgaW1wb3J0IEFi
c3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kCitmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuYWJz
dHJhY3RzZXJ2ZXJjb21tYW5kIGltcG9ydCBBYnN0cmFjdFNlcnZlckNvbW1hbmQKIGZyb20gd2Vi
a2l0cHkudG9vbC5zZXJ2ZXJzLnJlYmFzZWxpbmVzZXJ2ZXIgaW1wb3J0IFJlYmFzZWxpbmVIVFRQ
U2VydmVyLCBTVEFURV9ORUVEU19SRUJBU0VMSU5FCiAKIApAQCAtNTQsNDkgKzUxLDI2IEBAIGNs
YXNzIFRlc3RDb25maWcob2JqZWN0KToKICAgICAgICAgc2VsZi5zY20gPSBzY20KIAogCi1jbGFz
cyBSZWJhc2VsaW5lU2VydmVyKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKK2NsYXNzIFJl
YmFzZWxpbmVTZXJ2ZXIoQWJzdHJhY3RTZXJ2ZXJDb21tYW5kKToKICAgICBuYW1lID0gInJlYmFz
ZWxpbmUtc2VydmVyIgogICAgIGhlbHBfdGV4dCA9IF9fZG9jX18KICAgICBhcmd1bWVudF9uYW1l
cyA9ICIvcGF0aC90by9yZXN1bHRzL2RpcmVjdG9yeSIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKLSAgICAgICAgb3B0aW9ucyA9IFsKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWh0dHBk
LXBvcnQiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0iaW50IiwgZGVmYXVsdD04MTI3LCBoZWxwPSJQ
b3J0IHRvIHVzZSBmb3IgdGhlIHRoZSByZWJhc2VsaW5lIEhUVFAgc2VydmVyIiksCi0gICAgICAg
IF0KLSAgICAgICAgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQuX19pbml0X18oc2VsZiwgb3B0
aW9ucz1vcHRpb25zKQorICAgIHNlcnZlciA9IFJlYmFzZWxpbmVIVFRQU2VydmVyCiAKLSAgICBk
ZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICBkZWYgX3ByZXBhcmVf
Y29uZmlnKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgogICAgICAgICByZXN1bHRzX2RpcmVj
dG9yeSA9IGFyZ3NbMF0KICAgICAgICAgZmlsZXN5c3RlbSA9IHN5c3RlbS5maWxlc3lzdGVtLkZp
bGVTeXN0ZW0oKQogICAgICAgICBzY20gPSBzZWxmLl90b29sLnNjbSgpCiAKLSAgICAgICAgaWYg
b3B0aW9ucy5kcnlfcnVuOgotCi0gICAgICAgICAgICBkZWYgbm9fb3BfY29weWZpbGUoc3JjLCBk
ZXN0KToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgIGRlZiBub19vcF9hZGQo
cGF0aCwgcmV0dXJuX2V4aXRfY29kZT1GYWxzZSk6Ci0gICAgICAgICAgICAgICAgaWYgcmV0dXJu
X2V4aXRfY29kZToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKLQotICAgICAgICAgICAg
ZmlsZXN5c3RlbS5jb3B5ZmlsZSA9IG5vX29wX2NvcHlmaWxlCi0gICAgICAgICAgICBzY20uYWRk
ID0gbm9fb3BfYWRkCi0KICAgICAgICAgcHJpbnQgJ1BhcnNpbmcgdW5leHBlY3RlZF9yZXN1bHRz
Lmpzb24uLi4nCiAgICAgICAgIHJlc3VsdHNfanNvbl9wYXRoID0gZmlsZXN5c3RlbS5qb2luKHJl
c3VsdHNfZGlyZWN0b3J5LCAndW5leHBlY3RlZF9yZXN1bHRzLmpzb24nKQogICAgICAgICByZXN1
bHRzX2pzb24gPSBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLmxvYWRfanNvbihmaWxlc3lzdGVtLCBy
ZXN1bHRzX2pzb25fcGF0aCkKIAogICAgICAgICBwb3J0ID0gZmFjdG9yeS5nZXQoKQogICAgICAg
ICBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5ID0gcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICAg
ICAgcGxhdGZvcm1zID0gZmlsZXN5c3RlbS5saXN0ZGlyKAotICAgICAgICAgICAgZmlsZXN5c3Rl
bS5qb2luKGxheW91dF90ZXN0c19kaXJlY3RvcnksICdwbGF0Zm9ybScpKQotICAgICAgICB0ZXN0
X2NvbmZpZyA9IFRlc3RDb25maWcoCi0gICAgICAgICAgICBwb3J0LAotICAgICAgICAgICAgbGF5
b3V0X3Rlc3RzX2RpcmVjdG9yeSwKLSAgICAgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5LAotICAg
ICAgICAgICAgcGxhdGZvcm1zLAotICAgICAgICAgICAgZmlsZXN5c3RlbSwKLSAgICAgICAgICAg
IHNjbSkKKyAgICAgICAgcGxhdGZvcm1zID0gZmlsZXN5c3RlbS5saXN0ZGlyKGZpbGVzeXN0ZW0u
am9pbihsYXlvdXRfdGVzdHNfZGlyZWN0b3J5LCAncGxhdGZvcm0nKSkKKyAgICAgICAgdGVzdF9j
b25maWcgPSBUZXN0Q29uZmlnKHBvcnQsIGxheW91dF90ZXN0c19kaXJlY3RvcnksIHJlc3VsdHNf
ZGlyZWN0b3J5LCBwbGF0Zm9ybXMsIGZpbGVzeXN0ZW0sIHNjbSkKIAogICAgICAgICBwcmludCAn
R2F0aGVyaW5nIGN1cnJlbnQgYmFzZWxpbmVzLi4uJwogICAgICAgICAjIFJlYmFzZWxpbmUgc2Vy
dmVyIGFuZCBpdCdzIGFzc29jaWF0ZWQgSmF2YVNjcmlwdCBleHBlY3RlZCB0aGUgdGVzdHMgc3Vi
dHJlZSB0bwpAQCAtMTEyLDIwICs4NiwxMSBAQCBjbGFzcyBSZWJhc2VsaW5lU2VydmVyKEFic3Ry
YWN0RGVjbGFyYXRpdmVDb21tYW5kKToKICAgICAgICAgcmVzdWx0c2pzb25wYXJzZXIuZm9yX2Vh
Y2hfdGVzdChyZXN1bHRzX2pzb25bJ3Rlc3RzJ10sIGdhdGhlcl9iYXNlbGluZXMpCiAgICAgICAg
IHJlc3VsdHNfanNvblsndGVzdHMnXSA9IG5ld190ZXN0c19zdWJ0cmVlCiAKLSAgICAgICAgc2Vy
dmVyX3VybCA9ICJodHRwOi8vbG9jYWxob3N0OiVkLyIgJSBvcHRpb25zLmh0dHBkX3BvcnQKLSAg
ICAgICAgcHJpbnQgIlN0YXJ0aW5nIHNlcnZlciBhdCAlcyIgJSBzZXJ2ZXJfdXJsCi0gICAgICAg
IHByaW50ICgiVXNlIHRoZSAnRXhpdCcgbGluayBpbiB0aGUgVUksICVzcXVpdHF1aXRxdWl0ICIK
LSAgICAgICAgICAgICJvciBDdHJsLUMgdG8gc3RvcCIpICUgc2VydmVyX3VybAotCi0gICAgICAg
IHRocmVhZGluZy5UaW1lcigKLSAgICAgICAgICAgIC4xLCBsYW1iZGE6IHNlbGYuX3Rvb2wudXNl
ci5vcGVuX3VybChzZXJ2ZXJfdXJsKSkuc3RhcnQoKQotCi0gICAgICAgIGh0dHBkID0gUmViYXNl
bGluZUhUVFBTZXJ2ZXIoCi0gICAgICAgICAgICBodHRwZF9wb3J0PW9wdGlvbnMuaHR0cGRfcG9y
dCwKLSAgICAgICAgICAgIHRlc3RfY29uZmlnPXRlc3RfY29uZmlnLAotICAgICAgICAgICAgcmVz
dWx0c19qc29uPXJlc3VsdHNfanNvbiwKLSAgICAgICAgICAgIHBsYXRmb3Jtc19qc29uPXsKKyAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICd0ZXN0X2NvbmZpZyc6IHRlc3RfY29uZmlnLAor
ICAgICAgICAgICAgInJlc3VsdHNfanNvbiI6IHJlc3VsdHNfanNvbiwKKyAgICAgICAgICAgICJw
bGF0Zm9ybXNfanNvbiI6IHsKICAgICAgICAgICAgICAgICAncGxhdGZvcm1zJzogcGxhdGZvcm1z
LAogICAgICAgICAgICAgICAgICdkZWZhdWx0UGxhdGZvcm0nOiBwb3J0Lm5hbWUoKSwKLSAgICAg
ICAgICAgIH0pCi0gICAgICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQorICAgICAgICAgICAgfSwK
KyAgICAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZl
cnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvaW5kZXguaHRtbCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL2luZGV4Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTI5OTllYzg5MGRiNzg1OWE4MWFjNmY5YmRjODllNmU1MmI4NDhmYQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5n
c2VydmVyL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyIEBACis8aDE+SGVsbG8sIHdvcmxkITwvaDE+
Cis8YSBocmVmPSIvcXVpdHF1aXRxdWl0Ij5RdWl0PC9hPgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYwMWI5YzYxYWRhZjljNmE1ZWIxZjliN2QyODQwMjAwOGI5ZjE0NGEKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9nYXJkZW5pbmdzZXJ2ZXIu
cHkKQEAgLTAsMCArMSw0NSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0
OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBCYXNlSFRUUFNl
cnZlcgoraW1wb3J0IG9zCisKK2Zyb20gd2Via2l0cHkudG9vbC5zZXJ2ZXJzLnJlZmxlY3Rpb25o
YW5kbGVyIGltcG9ydCBSZWZsZWN0aW9uSGFuZGxlcgorCisKK2NsYXNzIEdhcmRlbmluZ0hUVFBT
ZXJ2ZXIoQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGh0dHBkX3BvcnQsIGNvbmZpZyk6CisgICAgICAgIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIu
X19pbml0X18oc2VsZiwgKCIiLCBodHRwZF9wb3J0KSwgR2FyZGVuaW5nSFRUUFJlcXVlc3RIYW5k
bGVyKQorCisKK2NsYXNzIEdhcmRlbmluZ0hUVFBSZXF1ZXN0SGFuZGxlcihSZWZsZWN0aW9uSGFu
ZGxlcik6CisgICAgU1RBVElDX0ZJTEVfTkFNRVMgPSBmcm96ZW5zZXQoWworICAgICAgICAiaW5k
ZXguaHRtbCIsCisgICAgXSkKKworICAgIFNUQVRJQ19GSUxFX0RJUkVDVE9SWSA9IG9zLnBhdGgu
am9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAiZGF0YSIsICJnYXJkZW5pbmdzZXJ2ZXIi
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvcmViYXNl
bGluZXNlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL3JlYmFz
ZWxpbmVzZXJ2ZXIucHkKaW5kZXggZGRlY2QxNjNlYzNhYjIyNzJlYTA1YjY2NDYxN2U3NTBhYzA0
ODA2OS4uMTBjMDY3ZDQ2OGZmMDFkYzY2NzU1ZjQwOGUzMTMyMDcwZWQwYzdiMSAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvcmViYXNlbGluZXNlcnZlci5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9yZWJhc2VsaW5lc2Vy
dmVyLnB5CkBAIC0xOTYsMTEgKzE5NiwxMSBAQCBkZWYgX2dldF90ZXN0X2Jhc2VsaW5lcyh0ZXN0
X2ZpbGUsIHRlc3RfY29uZmlnKToKIAogCiBjbGFzcyBSZWJhc2VsaW5lSFRUUFNlcnZlcihCYXNl
SFRUUFNlcnZlci5IVFRQU2VydmVyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaHR0cGRfcG9y
dCwgdGVzdF9jb25maWcsIHJlc3VsdHNfanNvbiwgcGxhdGZvcm1zX2pzb24pOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBodHRwZF9wb3J0LCBjb25maWcpOgogICAgICAgICBCYXNlSFRUUFNlcnZl
ci5IVFRQU2VydmVyLl9faW5pdF9fKHNlbGYsICgiIiwgaHR0cGRfcG9ydCksIFJlYmFzZWxpbmVI
VFRQUmVxdWVzdEhhbmRsZXIpCi0gICAgICAgIHNlbGYudGVzdF9jb25maWcgPSB0ZXN0X2NvbmZp
ZwotICAgICAgICBzZWxmLnJlc3VsdHNfanNvbiA9IHJlc3VsdHNfanNvbgotICAgICAgICBzZWxm
LnBsYXRmb3Jtc19qc29uID0gcGxhdGZvcm1zX2pzb24KKyAgICAgICAgc2VsZi50ZXN0X2NvbmZp
ZyA9IGNvbmZpZ1sndGVzdF9jb25maWcnXQorICAgICAgICBzZWxmLnJlc3VsdHNfanNvbiA9IGNv
bmZpZ1sncmVzdWx0c19qc29uJ10KKyAgICAgICAgc2VsZi5wbGF0Zm9ybXNfanNvbiA9IGNvbmZp
Z1sncGxhdGZvcm1zX2pzb24nXQogCiAKIGNsYXNzIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRs
ZXIoUmVmbGVjdGlvbkhhbmRsZXIpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99753</attachid>
            <date>2011-07-05 15:26:57 -0700</date>
            <delta_ts>2011-07-05 15:49:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63872-20110705152656.patch</filename>
            <type>text/plain</type>
            <size>14604</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDkwNDA2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjMgQEAKKzIwMTEtMDctMDUgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBBZGQgdHJpdmlhbCBnYXJkZW4tby1tYXRpYyBjb21tYW5kICh3aXRoIHNlcnZlcikK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzODcyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhZGRzIGEgdHJpdmlhbCAiSGVsbG8sIHdvcmxkIiBnYXJkZW4tby1tYXRpYyBjb21tYW5kLAor
ICAgICAgICBjb21wbGV0ZSB3aXRoIGFuIEhUVFAgc2VydmVyLiAgVGhpcyBjb21tYW5kIHJlLXVz
ZXMgYSBidW5jaCBvZiBjb2RlCisgICAgICAgIGZyb20gdGhlIGV4aXN0aW5nIHJlYmFzZWxpbmUt
c2VydmVyIGNvbW1hbmQuICBPdmVyIHRpbWUsIHRoaXMgY29tbWFuZAorICAgICAgICB3aWxsIGdy
b3cgdG8gYmUgYSB0b29sIHVzZWZ1bCBmb3IgZ2FyZGVuaW5nIHRoZSBXZWJLaXQgdHJlZS4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9fX2luaXRfXy5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvYWJzdHJhY3RzZXJ2ZXJjb21t
YW5kLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
Z2FyZGVub21hdGljLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9pbmRleC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9nYXJkZW5pbmdzZXJ2ZXIucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL3JlYmFzZWxp
bmVzZXJ2ZXIucHk6CisKIDIwMTEtMDctMDQgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5CShy
ZXZpc2lvbiA5MDQwNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9f
X2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDEwIEBACiAjIFJlcXVpcmVkIGZv
ciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKIAotZnJv
bSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmJ1Z3NlYXJjaCBpbXBvcnQgQnVnU2VhcmNoCiBmcm9t
IHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuYnVnZm9ydGVzdCBpbXBvcnQgQnVnRm9yVGVzdAorZnJv
bSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmJ1Z3NlYXJjaCBpbXBvcnQgQnVnU2VhcmNoCiBmcm9t
IHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuZG93bmxvYWQgaW1wb3J0ICoKIGZyb20gd2Via2l0cHku
dG9vbC5jb21tYW5kcy5lYXJseXdhcm5pbmdzeXN0ZW0gaW1wb3J0ICoKK2Zyb20gd2Via2l0cHku
dG9vbC5jb21tYW5kcy5nYXJkZW5vbWF0aWMgaW1wb3J0IEdhcmRlbk9NYXRpYwogZnJvbSB3ZWJr
aXRweS50b29sLmNvbW1hbmRzLm9wZW5idWdzIGltcG9ydCBPcGVuQnVncwogZnJvbSB3ZWJraXRw
eS50b29sLmNvbW1hbmRzLnByZXR0eWRpZmYgaW1wb3J0IFByZXR0eURpZmYKIGZyb20gd2Via2l0
cHkudG9vbC5jb21tYW5kcy5xdWVyaWVzIGltcG9ydCAqCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvYWJzdHJhY3Rsb2NhbHNlcnZlcmNvbW1hbmQucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Fic3RyYWN0bG9j
YWxzZXJ2ZXJjb21tYW5kLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL2Fic3RyYWN0bG9jYWxzZXJ2ZXJjb21tYW5kLnB5CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU0IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24KK2lt
cG9ydCB0aHJlYWRpbmcKKworZnJvbSB3ZWJraXRweS50b29sLm11bHRpY29tbWFuZHRvb2wgaW1w
b3J0IEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kCisKKworY2xhc3MgQWJzdHJhY3RMb2NhbFNl
cnZlckNvbW1hbmQoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgorICAgIHNlcnZlciA9IE5v
bmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgb3B0aW9ucyA9IFsKKyAgICAg
ICAgICAgIG1ha2Vfb3B0aW9uKCItLWh0dHBkLXBvcnQiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0i
aW50IiwgZGVmYXVsdD04MTI3LCBoZWxwPSJQb3J0IHRvIHVzZSBmb3IgdGhlIEhUVFAgc2VydmVy
IiksCisgICAgICAgIF0KKyAgICAgICAgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQuX19pbml0
X18oc2VsZiwgb3B0aW9ucz1vcHRpb25zKQorCisgICAgZGVmIF9wcmVwYXJlX2NvbmZpZyhzZWxm
LCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBl
eGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAgICAgICBjb25maWcgPSBzZWxm
Ll9wcmVwYXJlX2NvbmZpZyhvcHRpb25zLCBhcmdzLCB0b29sKQorCisgICAgICAgIHNlcnZlcl91
cmwgPSAiaHR0cDovL2xvY2FsaG9zdDolZC8iICUgb3B0aW9ucy5odHRwZF9wb3J0CisgICAgICAg
IHByaW50ICJTdGFydGluZyBzZXJ2ZXIgYXQgJXMiICUgc2VydmVyX3VybAorICAgICAgICBwcmlu
dCAiVXNlIHRoZSAnRXhpdCcgbGluayBpbiB0aGUgVUksICVzcXVpdHF1aXRxdWl0IG9yIEN0cmwt
QyB0byBzdG9wIiAlIHNlcnZlcl91cmwKKworICAgICAgICAjIEZJWE1FOiBUaGlzIHNlZW1zIHJh
Y3kuCisgICAgICAgIHRocmVhZGluZy5UaW1lcigwLjEsIGxhbWJkYTogc2VsZi5fdG9vbC51c2Vy
Lm9wZW5fdXJsKHNlcnZlcl91cmwpKS5zdGFydCgpCisKKyAgICAgICAgaHR0cGQgPSBzZWxmLnNl
cnZlcihodHRwZF9wb3J0PW9wdGlvbnMuaHR0cGRfcG9ydCwgY29uZmlnPWNvbmZpZykKKyAgICAg
ICAgaHR0cGQuc2VydmVfZm9yZXZlcigpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvZ2FyZGVub21hdGljLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9nYXJkZW5vbWF0aWMucHkJKHJldmlzaW9uIDApCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZ2FyZGVub21hdGljLnB5CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmFi
c3RyYWN0bG9jYWxzZXJ2ZXJjb21tYW5kIGltcG9ydCBBYnN0cmFjdExvY2FsU2VydmVyQ29tbWFu
ZAorZnJvbSB3ZWJraXRweS50b29sLnNlcnZlcnMuZ2FyZGVuaW5nc2VydmVyIGltcG9ydCBHYXJk
ZW5pbmdIVFRQU2VydmVyCisKKworY2xhc3MgR2FyZGVuT01hdGljKEFic3RyYWN0TG9jYWxTZXJ2
ZXJDb21tYW5kKToKKyAgICBuYW1lID0gImdhcmRlbi1vLW1hdGljIgorICAgIGhlbHBfdGV4dCA9
ICJFeHBlcmltZW50YWwgY29tbWFuZCBmb3IgZ2FyZGVuaW5nIHRoZSBXZWJLaXQgdHJlZS4iCisK
KyAgICBzZXJ2ZXIgPSBHYXJkZW5pbmdIVFRQU2VydmVyCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weQko
cmV2aXNpb24gOTA0MDYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
cmViYXNlbGluZXNlcnZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMzIsMTUgKzMyLDEyIEBAIGlt
YWdlcyBhbmQgdGV4dCkgYW5kIGFsbG93cyBvbmUtY2xpY2sgcmUKIAogaW1wb3J0IG9zCiBpbXBv
cnQgb3MucGF0aAotaW1wb3J0IHRocmVhZGluZwotCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtl
X29wdGlvbgogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgc3lzdGVtCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5uZXQgaW1wb3J0IHJlc3VsdHNqc29ucGFyc2VyCiBmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvcgog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQotZnJvbSB3ZWJr
aXRweS50b29sLm11bHRpY29tbWFuZHRvb2wgaW1wb3J0IEFic3RyYWN0RGVjbGFyYXRpdmVDb21t
YW5kCitmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuYWJzdHJhY3Rsb2NhbHNlcnZlcmNvbW1h
bmQgaW1wb3J0IEFic3RyYWN0TG9jYWxTZXJ2ZXJDb21tYW5kCiBmcm9tIHdlYmtpdHB5LnRvb2wu
c2VydmVycy5yZWJhc2VsaW5lc2VydmVyIGltcG9ydCBSZWJhc2VsaW5lSFRUUFNlcnZlciwgU1RB
VEVfTkVFRFNfUkVCQVNFTElORQogCiAKQEAgLTU0LDQ5ICs1MSwyNiBAQCBjbGFzcyBUZXN0Q29u
ZmlnKG9iamVjdCk6CiAgICAgICAgIHNlbGYuc2NtID0gc2NtCiAKIAotY2xhc3MgUmViYXNlbGlu
ZVNlcnZlcihBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6CitjbGFzcyBSZWJhc2VsaW5lU2Vy
dmVyKEFic3RyYWN0TG9jYWxTZXJ2ZXJDb21tYW5kKToKICAgICBuYW1lID0gInJlYmFzZWxpbmUt
c2VydmVyIgogICAgIGhlbHBfdGV4dCA9IF9fZG9jX18KICAgICBhcmd1bWVudF9uYW1lcyA9ICIv
cGF0aC90by9yZXN1bHRzL2RpcmVjdG9yeSIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAg
ICAgICAgb3B0aW9ucyA9IFsKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWh0dHBkLXBvcnQi
LCBhY3Rpb249InN0b3JlIiwgdHlwZT0iaW50IiwgZGVmYXVsdD04MTI3LCBoZWxwPSJQb3J0IHRv
IHVzZSBmb3IgdGhlIHRoZSByZWJhc2VsaW5lIEhUVFAgc2VydmVyIiksCi0gICAgICAgIF0KLSAg
ICAgICAgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQuX19pbml0X18oc2VsZiwgb3B0aW9ucz1v
cHRpb25zKQorICAgIHNlcnZlciA9IFJlYmFzZWxpbmVIVFRQU2VydmVyCiAKLSAgICBkZWYgZXhl
Y3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICBkZWYgX3ByZXBhcmVfY29uZmln
KHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgogICAgICAgICByZXN1bHRzX2RpcmVjdG9yeSA9
IGFyZ3NbMF0KICAgICAgICAgZmlsZXN5c3RlbSA9IHN5c3RlbS5maWxlc3lzdGVtLkZpbGVTeXN0
ZW0oKQogICAgICAgICBzY20gPSBzZWxmLl90b29sLnNjbSgpCiAKLSAgICAgICAgaWYgb3B0aW9u
cy5kcnlfcnVuOgotCi0gICAgICAgICAgICBkZWYgbm9fb3BfY29weWZpbGUoc3JjLCBkZXN0KToK
LSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgIGRlZiBub19vcF9hZGQocGF0aCwg
cmV0dXJuX2V4aXRfY29kZT1GYWxzZSk6Ci0gICAgICAgICAgICAgICAgaWYgcmV0dXJuX2V4aXRf
Y29kZToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKLQotICAgICAgICAgICAgZmlsZXN5
c3RlbS5jb3B5ZmlsZSA9IG5vX29wX2NvcHlmaWxlCi0gICAgICAgICAgICBzY20uYWRkID0gbm9f
b3BfYWRkCi0KICAgICAgICAgcHJpbnQgJ1BhcnNpbmcgdW5leHBlY3RlZF9yZXN1bHRzLmpzb24u
Li4nCiAgICAgICAgIHJlc3VsdHNfanNvbl9wYXRoID0gZmlsZXN5c3RlbS5qb2luKHJlc3VsdHNf
ZGlyZWN0b3J5LCAndW5leHBlY3RlZF9yZXN1bHRzLmpzb24nKQogICAgICAgICByZXN1bHRzX2pz
b24gPSBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLmxvYWRfanNvbihmaWxlc3lzdGVtLCByZXN1bHRz
X2pzb25fcGF0aCkKIAogICAgICAgICBwb3J0ID0gZmFjdG9yeS5nZXQoKQogICAgICAgICBsYXlv
dXRfdGVzdHNfZGlyZWN0b3J5ID0gcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKLSAgICAgICAgcGxh
dGZvcm1zID0gZmlsZXN5c3RlbS5saXN0ZGlyKAotICAgICAgICAgICAgZmlsZXN5c3RlbS5qb2lu
KGxheW91dF90ZXN0c19kaXJlY3RvcnksICdwbGF0Zm9ybScpKQotICAgICAgICB0ZXN0X2NvbmZp
ZyA9IFRlc3RDb25maWcoCi0gICAgICAgICAgICBwb3J0LAotICAgICAgICAgICAgbGF5b3V0X3Rl
c3RzX2RpcmVjdG9yeSwKLSAgICAgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5LAotICAgICAgICAg
ICAgcGxhdGZvcm1zLAotICAgICAgICAgICAgZmlsZXN5c3RlbSwKLSAgICAgICAgICAgIHNjbSkK
KyAgICAgICAgcGxhdGZvcm1zID0gZmlsZXN5c3RlbS5saXN0ZGlyKGZpbGVzeXN0ZW0uam9pbihs
YXlvdXRfdGVzdHNfZGlyZWN0b3J5LCAncGxhdGZvcm0nKSkKKyAgICAgICAgdGVzdF9jb25maWcg
PSBUZXN0Q29uZmlnKHBvcnQsIGxheW91dF90ZXN0c19kaXJlY3RvcnksIHJlc3VsdHNfZGlyZWN0
b3J5LCBwbGF0Zm9ybXMsIGZpbGVzeXN0ZW0sIHNjbSkKIAogICAgICAgICBwcmludCAnR2F0aGVy
aW5nIGN1cnJlbnQgYmFzZWxpbmVzLi4uJwogICAgICAgICAjIFJlYmFzZWxpbmUgc2VydmVyIGFu
ZCBpdCdzIGFzc29jaWF0ZWQgSmF2YVNjcmlwdCBleHBlY3RlZCB0aGUgdGVzdHMgc3VidHJlZSB0
bwpAQCAtMTEyLDIwICs4NiwxMSBAQCBjbGFzcyBSZWJhc2VsaW5lU2VydmVyKEFic3RyYWN0RGVj
bGFyYXRpCiAgICAgICAgIHJlc3VsdHNqc29ucGFyc2VyLmZvcl9lYWNoX3Rlc3QocmVzdWx0c19q
c29uWyd0ZXN0cyddLCBnYXRoZXJfYmFzZWxpbmVzKQogICAgICAgICByZXN1bHRzX2pzb25bJ3Rl
c3RzJ10gPSBuZXdfdGVzdHNfc3VidHJlZQogCi0gICAgICAgIHNlcnZlcl91cmwgPSAiaHR0cDov
L2xvY2FsaG9zdDolZC8iICUgb3B0aW9ucy5odHRwZF9wb3J0Ci0gICAgICAgIHByaW50ICJTdGFy
dGluZyBzZXJ2ZXIgYXQgJXMiICUgc2VydmVyX3VybAotICAgICAgICBwcmludCAoIlVzZSB0aGUg
J0V4aXQnIGxpbmsgaW4gdGhlIFVJLCAlc3F1aXRxdWl0cXVpdCAiCi0gICAgICAgICAgICAib3Ig
Q3RybC1DIHRvIHN0b3AiKSAlIHNlcnZlcl91cmwKLQotICAgICAgICB0aHJlYWRpbmcuVGltZXIo
Ci0gICAgICAgICAgICAuMSwgbGFtYmRhOiBzZWxmLl90b29sLnVzZXIub3Blbl91cmwoc2VydmVy
X3VybCkpLnN0YXJ0KCkKLQotICAgICAgICBodHRwZCA9IFJlYmFzZWxpbmVIVFRQU2VydmVyKAot
ICAgICAgICAgICAgaHR0cGRfcG9ydD1vcHRpb25zLmh0dHBkX3BvcnQsCi0gICAgICAgICAgICB0
ZXN0X2NvbmZpZz10ZXN0X2NvbmZpZywKLSAgICAgICAgICAgIHJlc3VsdHNfanNvbj1yZXN1bHRz
X2pzb24sCi0gICAgICAgICAgICBwbGF0Zm9ybXNfanNvbj17CisgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAndGVzdF9jb25maWcnOiB0ZXN0X2NvbmZpZywKKyAgICAgICAgICAgICJyZXN1
bHRzX2pzb24iOiByZXN1bHRzX2pzb24sCisgICAgICAgICAgICAicGxhdGZvcm1zX2pzb24iOiB7
CiAgICAgICAgICAgICAgICAgJ3BsYXRmb3Jtcyc6IHBsYXRmb3JtcywKICAgICAgICAgICAgICAg
ICAnZGVmYXVsdFBsYXRmb3JtJzogcG9ydC5uYW1lKCksCi0gICAgICAgICAgICB9KQotICAgICAg
ICBodHRwZC5zZXJ2ZV9mb3JldmVyKCkKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0KSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZlci5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9nYXJkZW5p
bmdzZXJ2ZXIucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
c2VydmVycy9nYXJkZW5pbmdzZXJ2ZXIucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdHB5LnRvb2wu
c2VydmVycy5yZWZsZWN0aW9uaGFuZGxlciBpbXBvcnQgUmVmbGVjdGlvbkhhbmRsZXIKKworCitj
bGFzcyBHYXJkZW5pbmdIVFRQU2VydmVyKEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBodHRwZF9wb3J0LCBjb25maWcpOgorICAgICAgICBzZXJ2ZXJf
bmFtZSA9ICIiCisgICAgICAgIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIuX19pbml0X18oc2Vs
ZiwgKHNlcnZlcl9uYW1lLCBodHRwZF9wb3J0KSwgR2FyZGVuaW5nSFRUUFJlcXVlc3RIYW5kbGVy
KQorCisKK2NsYXNzIEdhcmRlbmluZ0hUVFBSZXF1ZXN0SGFuZGxlcihSZWZsZWN0aW9uSGFuZGxl
cik6CisgICAgU1RBVElDX0ZJTEVfTkFNRVMgPSBmcm96ZW5zZXQoWworICAgICAgICAiaW5kZXgu
aHRtbCIsCisgICAgXSkKKworICAgIFNUQVRJQ19GSUxFX0RJUkVDVE9SWSA9IG9zLnBhdGguam9p
bihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAiZGF0YSIsICJnYXJkZW5pbmdzZXJ2ZXIiKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvcmViYXNlbGluZXNlcnZl
ci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9y
ZWJhc2VsaW5lc2VydmVyLnB5CShyZXZpc2lvbiA5MDQwNikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9zZXJ2ZXJzL3JlYmFzZWxpbmVzZXJ2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAg
LTE5NiwxMSArMTk2LDEyIEBAIGRlZiBfZ2V0X3Rlc3RfYmFzZWxpbmVzKHRlc3RfZmlsZSwgdGVz
dF8KIAogCiBjbGFzcyBSZWJhc2VsaW5lSFRUUFNlcnZlcihCYXNlSFRUUFNlcnZlci5IVFRQU2Vy
dmVyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaHR0cGRfcG9ydCwgdGVzdF9jb25maWcsIHJl
c3VsdHNfanNvbiwgcGxhdGZvcm1zX2pzb24pOgotICAgICAgICBCYXNlSFRUUFNlcnZlci5IVFRQ
U2VydmVyLl9faW5pdF9fKHNlbGYsICgiIiwgaHR0cGRfcG9ydCksIFJlYmFzZWxpbmVIVFRQUmVx
dWVzdEhhbmRsZXIpCi0gICAgICAgIHNlbGYudGVzdF9jb25maWcgPSB0ZXN0X2NvbmZpZwotICAg
ICAgICBzZWxmLnJlc3VsdHNfanNvbiA9IHJlc3VsdHNfanNvbgotICAgICAgICBzZWxmLnBsYXRm
b3Jtc19qc29uID0gcGxhdGZvcm1zX2pzb24KKyAgICBkZWYgX19pbml0X18oc2VsZiwgaHR0cGRf
cG9ydCwgY29uZmlnKToKKyAgICAgICAgc2VydmVyX25hbWUgPSAiIgorICAgICAgICBCYXNlSFRU
UFNlcnZlci5IVFRQU2VydmVyLl9faW5pdF9fKHNlbGYsIChzZXJ2ZXJfbmFtZSwgaHR0cGRfcG9y
dCksIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIpCisgICAgICAgIHNlbGYudGVzdF9jb25m
aWcgPSBjb25maWdbJ3Rlc3RfY29uZmlnJ10KKyAgICAgICAgc2VsZi5yZXN1bHRzX2pzb24gPSBj
b25maWdbJ3Jlc3VsdHNfanNvbiddCisgICAgICAgIHNlbGYucGxhdGZvcm1zX2pzb24gPSBjb25m
aWdbJ3BsYXRmb3Jtc19qc29uJ10KIAogCiBjbGFzcyBSZWJhc2VsaW5lSFRUUFJlcXVlc3RIYW5k
bGVyKFJlZmxlY3Rpb25IYW5kbGVyKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL2luZGV4Lmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIv
aW5kZXguaHRtbAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9z
ZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL2luZGV4Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMiBAQAorPGgxPkhlbGxvLCB3b3JsZCE8L2gxPgorPGEgaHJlZj0iL3F1aXRxdWl0cXVp
dCI+UXVpdDwvYT4K
</data>
<flag name="review"
          id="94296"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="94297"
          type_id="3"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>