<?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>37489</bug_id>
          
          <creation_ts>2010-04-12 22:21:53 -0700</creation_ts>
          <short_desc>Use pretty patch for confirming webkit-patch diffs</short_desc>
          <delta_ts>2010-04-14 10:27:17 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>211856</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-12 22:21:53 -0700</bug_when>
    <thetext>Use pretty patch for confirming webkit-patch diffs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211859</commentid>
    <comment_count>1</comment_count>
      <attachid>53224</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-12 22:35:21 -0700</bug_when>
    <thetext>Created attachment 53224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212109</commentid>
    <comment_count>2</comment_count>
      <attachid>53224</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-13 15:16:49 -0700</bug_when>
    <thetext>Comment on attachment 53224
Patch

+        except OSError, e:
+            # No pretty diff.  :(
+            self._tool.user.page(diff)

Do we need to show an error message?
Do we need to catch ScriptError as well?  Should we be logging inside that function and returning a bool instead?

Why + instead of %?

+        url = &quot;file://&quot; + urllib.quote(self._pretty_diff_file.name)

Seems kinda hacky:
+        if url.startswith(&quot;file://&quot;):
+            log(&quot;MOCK: user.open_url: file://...&quot;)
+            return

Why not just change what the tmp path is to make it consistent?

Sometimes I really had 80c:
+        args = [
+            &quot;ruby&quot;,
+            &quot;-I&quot;,
+            pretty_patch_path,
+            prettify_path,
+        ]

Seems we may want to explicitly close/delete the temporary file:
+    def pretty_diff_file(self, diff):
+        pretty_diff = self.pretty_diff(diff)
+        diff_file = tempfile.NamedTemporaryFile(suffix=&quot;.html&quot;)
+        diff_file.write(pretty_diff)
+        diff_file.flush()
+        return diff_file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212354</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-14 08:49:13 -0700</bug_when>
    <thetext>&gt; Do we need to show an error message?

Fixed.

&gt; Do we need to catch ScriptError as well?

When would a ScriptError be thrown?  It seems like that would only be in case of a bug in webkit-patch or PrettyPatch.

&gt; Should we be logging inside that function and returning a bool instead?

Done.  We actually need to return the file because we need to keep it alive until the user is done viewing the diff.

&gt; Why + instead of %?

Fixed.

&gt; Seems kinda hacky:
&gt; +        if url.startswith(&quot;file://&quot;):
&gt; +            log(&quot;MOCK: user.open_url: file://...&quot;)
&gt; +            return
&gt; 
&gt; Why not just change what the tmp path is to make it consistent?

I couldn&apos;t find a clean way of doing this.  The problem is ConfirmDiff uses PrettyPatch statically, and PrettyPatch uses tempfile statically.

&gt; Sometimes I really had 80c:

+dpranke :)

&gt; Seems we may want to explicitly close/delete the temporary file:

I&apos;ve added an explicit close.  Python should do the deleting for us.  In fact, we have to work around the fact that Python is super eager to delete the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212356</commentid>
    <comment_count>4</comment_count>
      <attachid>53332</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-14 08:52:11 -0700</bug_when>
    <thetext>Created attachment 53332
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212361</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-14 09:05:15 -0700</bug_when>
    <thetext>ScriptError would be thrown in the case that PrettyPatch/ruby returns non-zero.  Which might happen for a different ruby version or on windows, or who knows what.  Somehow various Chromium folks and bots seem to be triggering it. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212366</commentid>
    <comment_count>6</comment_count>
      <attachid>53336</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-14 09:10:26 -0700</bug_when>
    <thetext>Created attachment 53336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212371</commentid>
    <comment_count>7</comment_count>
      <attachid>53336</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-14 09:20:33 -0700</bug_when>
    <thetext>Comment on attachment 53336
Patch

I think a more natural API would be to close the file in the patch-prep function and return just a path.  The problem is we&apos;d have to move away from a temp function which deletes automatically on close (which I think woudl be a good thing).

Is:
args = [&quot;ruby&quot;,&quot;-I&quot;, pretty_patch_path, prettify_path]
not PEP8 compliant?  Personally I find such a short command easier to read on one line.

Please consider making pretty_diff_file return a path instead of a file, I think that woudl be much cleaner (and better supports future usecases of having a &quot;webkit-patch pretty-diff&quot; command!  The current tmp-hack isn&apos;t very useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212377</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-14 09:25:58 -0700</bug_when>
    <thetext>If we represented the file as a path, how would we delete it securely?  You need to keep temp files as handles to avoid someone else on the system making the path point to something nasty that you don&apos;t want to unlink.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212383</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-14 09:29:28 -0700</bug_when>
    <thetext>How do we end up leaving the temp file open after termination then?  We need to for commands like:

webkit-patch pretty-diff

which would just open your current diff as a diff in a web browser and exit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212384</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-14 09:31:26 -0700</bug_when>
    <thetext>&gt; Is:
&gt; args = [&quot;ruby&quot;,&quot;-I&quot;, pretty_patch_path, prettify_path]
&gt; not PEP8 compliant?  Personally I find such a short command easier to read on
&gt; one line.

It&apos;s probably fine.  In other cases when we&apos;ve made an args array, we&apos;ve ended
up tweaking it over time and eventually moved to the multiline version.  I can
change to back to single line if you like.

&gt; How do we end up leaving the temp file open after termination then?  We need to
&gt; for commands like:
&gt; 
&gt; webkit-patch pretty-diff
&gt; 
&gt; which would just open your current diff as a diff in a web browser and exit.

I&apos;m inclined to worry about that when we create that command.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212388</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-14 09:39:18 -0700</bug_when>
    <thetext>Worrying about it later is OK.  I&apos;m just ready to write the command as soon as you and I agree how. :)  Or You can write it.  Either way, it should be 10 lines of python once we figure out how to keep the temp file around.

class PrettyDiff(AbstractDeclarativeCommand):
    name = &quot;pretty-diff&quot;
    help_text = &quot;Open an HTML version of your current diff in a web browser.&quot;

    def execute(self, options, args, tool):
        diff = tool.scm().create_patch()
        pretty_diff = PrettyPatch().pretty_diff(diff)
        # Stuff it in a file somehow?
        User.open_url(&quot;file:///%s&quot; % path_to_diff)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212394</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-14 09:45:20 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Worrying about it later is OK.  I&apos;m just ready to write the command as soon as
&gt; you and I agree how. :)  Or You can write it.  Either way, it should be 10
&gt; lines of python once we figure out how to keep the temp file around.
&gt; 
&gt; class PrettyDiff(AbstractDeclarativeCommand):
&gt;     name = &quot;pretty-diff&quot;
&gt;     help_text = &quot;Open an HTML version of your current diff in a web browser.&quot;
&gt; 
&gt;     def execute(self, options, args, tool):
&gt;         diff = tool.scm().create_patch()
&gt;         pretty_diff = PrettyPatch().pretty_diff(diff)
&gt;         # Stuff it in a file somehow?
&gt;         User.open_url(&quot;file:///%s&quot; % path_to_diff)

Right, the question is whether we want to leak the temp file.  IMHO, we might want to leak the temp file when you invoke pretty-diff directly but clean up the file when you run upload/post.  Another option is to use something like run-safari, which seems to know how to block (because that&apos;s how the LayoutTests work).  Another option is to re-use the mechanism for storing / cleaning up layout test results (which I&apos;m not sure what it is).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212396</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-14 09:48:31 -0700</bug_when>
    <thetext>I guess I don&apos;t worry about leaking the temp file.  Yes, we could use run-safari which blocks if you&apos;re worried about the leak.

Either way is fine with me.

The layout-test-results don&apos;t clean themselves up.  They just store in a known location in /tmp/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212398</commentid>
    <comment_count>14</comment_count>
      <attachid>53336</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-14 09:50:37 -0700</bug_when>
    <thetext>Comment on attachment 53336
Patch

Ok.  Let&apos;s land this like this and make the pretty-diff command leak the temp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212418</commentid>
    <comment_count>15</comment_count>
      <attachid>53336</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-14 10:27:10 -0700</bug_when>
    <thetext>Comment on attachment 53336
Patch

Clearing flags on attachment: 53336

Committed r57587: &lt;http://trac.webkit.org/changeset/57587&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212419</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-14 10:27:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53224</attachid>
            <date>2010-04-12 22:35:21 -0700</date>
            <delta_ts>2010-04-14 08:52:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37489-20100412223519.patch</filename>
            <type>text/plain</type>
            <size>9595</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1NWZmMWVhLi5kYzAyZGRmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDQt
MTIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgcHJldHR5IHBhdGNoIGZvciBjb25maXJt
aW5nIHdlYmtpdC1wYXRjaCBkaWZmcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzc0ODkKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3ByZXR0eXBhdGNoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvZG93bmxvYWRfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL3VwbG9hZF91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29s
L3N0ZXBzL2NvbmZpcm1kaWZmLnB5OgorCiAyMDEwLTA0LTEyICBFcmljIFNlaWRlbCAgPGVyaWNA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJldHR5cGF0Y2gucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcmV0dHlwYXRjaC5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTU3ZjljCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJldHR5cGF0Y2gucHkKQEAgLTAs
MCArMSw1NSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRp
c3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxl
CisKKworY2xhc3MgUHJldHR5UGF0Y2gob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
ZXhlY3V0aXZlLCBjaGVja291dF9yb290KToKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gZXhl
Y3V0aXZlCisgICAgICAgIHNlbGYuX2NoZWNrb3V0X3Jvb3QgPSBjaGVja291dF9yb290CisKKyAg
ICBkZWYgcHJldHR5X2RpZmZfZmlsZShzZWxmLCBkaWZmKToKKyAgICAgICAgcHJldHR5X2RpZmYg
PSBzZWxmLnByZXR0eV9kaWZmKGRpZmYpCisgICAgICAgIGRpZmZfZmlsZSA9IHRlbXBmaWxlLk5h
bWVkVGVtcG9yYXJ5RmlsZShzdWZmaXg9Ii5odG1sIikKKyAgICAgICAgZGlmZl9maWxlLndyaXRl
KHByZXR0eV9kaWZmKQorICAgICAgICBkaWZmX2ZpbGUuZmx1c2goKQorICAgICAgICByZXR1cm4g
ZGlmZl9maWxlCisKKyAgICBkZWYgcHJldHR5X2RpZmYoc2VsZiwgZGlmZik6CisgICAgICAgIHBy
ZXR0eV9wYXRjaF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX2NoZWNrb3V0X3Jvb3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWdzU2l0ZSIsICJQcmV0dHlQ
YXRjaCIpCisgICAgICAgIHByZXR0aWZ5X3BhdGggPSBvcy5wYXRoLmpvaW4ocHJldHR5X3BhdGNo
X3BhdGgsICJwcmV0dGlmeS5yYiIpCisgICAgICAgIGFyZ3MgPSBbCisgICAgICAgICAgICAicnVi
eSIsCisgICAgICAgICAgICAiLUkiLAorICAgICAgICAgICAgcHJldHR5X3BhdGNoX3BhdGgsCisg
ICAgICAgICAgICBwcmV0dGlmeV9wYXRoLAorICAgICAgICBdCisgICAgICAgIHJldHVybiBzZWxm
Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQoYXJncywgaW5wdXQ9ZGlmZikKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kb3dubG9hZF91bml0dGVz
dC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kb3dubG9h
ZF91bml0dGVzdC5weQppbmRleCA1NmI0YjgyLi40ZTAyYTQ0IDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZG93bmxvYWRfdW5pdHRlc3QucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rvd25sb2Fk
X3VuaXR0ZXN0LnB5CkBAIC0xNDIsNiArMTQyLDYgQEAgd2hlcmUgQVRUQUNITUVOVF9JRCBpcyB0
aGUgSUQgb2YgdGhpcyBhdHRhY2htZW50LgogICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291
dHB1dHMoQ3JlYXRlUm9sbG91dCgpLCBbODUyLCAiUmVhc29uIl0sIG9wdGlvbnM9c2VsZi5fZGVm
YXVsdF9vcHRpb25zKCksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCiAKICAgICBk
ZWYgdGVzdF9yb2xsb3V0KHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiUHJlcGFy
aW5nIHJvbGxvdXQgZm9yIGJ1ZyA0Mi5cblVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5XG5SdW5u
aW5nIHByZXBhcmUtQ2hhbmdlTG9nXG5CdWlsZGluZyBXZWJLaXRcbiIKKyAgICAgICAgZXhwZWN0
ZWRfc3RkZXJyID0gIlByZXBhcmluZyByb2xsb3V0IGZvciBidWcgNDIuXG5VcGRhdGluZyB3b3Jr
aW5nIGRpcmVjdG9yeVxuUnVubmluZyBwcmVwYXJlLUNoYW5nZUxvZ1xuTU9DSzogdXNlci5vcGVu
X3VybDogZmlsZTovLy4uLlxuQnVpbGRpbmcgV2ViS2l0XG4iCiAgICAgICAgIHNlbGYuYXNzZXJ0
X2V4ZWN1dGVfb3V0cHV0cyhSb2xsb3V0KCksIFs4NTIsICJSZWFzb24iXSwgb3B0aW9ucz1zZWxm
Ll9kZWZhdWx0X29wdGlvbnMoKSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKIApk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3Vw
bG9hZF91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy91cGxvYWRfdW5pdHRlc3QucHkKaW5kZXggNGU5ODdjOS4uYjBkZmE4MSAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3VwbG9hZF91bml0
dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
dXBsb2FkX3VuaXR0ZXN0LnB5CkBAIC01OCw3ICs1OCwxNSBAQCBjbGFzcyBVcGxvYWRDb21tYW5k
c1Rlc3QoQ29tbWFuZHNUZXN0KToKICAgICAgICAgb3B0aW9ucy5kZXNjcmlwdGlvbiA9ICJNT0NL
IGRlc2NyaXB0aW9uIgogICAgICAgICBvcHRpb25zLnJlcXVlc3RfY29tbWl0ID0gRmFsc2UKICAg
ICAgICAgb3B0aW9ucy5yZXZpZXcgPSBUcnVlCi0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJS
dW5uaW5nIGNoZWNrLXdlYmtpdC1zdHlsZVxuT2Jzb2xldGluZyAyIG9sZCBwYXRjaGVzIG9uIGJ1
ZyA0MlxuTU9DSyBhZGRfcGF0Y2hfdG9fYnVnOiBidWdfaWQ9NDIsIGRlc2NyaXB0aW9uPU1PQ0sg
ZGVzY3JpcHRpb24sIG1hcmtfZm9yX3Jldmlldz1UcnVlLCBtYXJrX2Zvcl9jb21taXRfcXVldWU9
RmFsc2UsIG1hcmtfZm9yX2xhbmRpbmc9RmFsc2Vcbi0tIEJlZ2luIGNvbW1lbnQgLS1cbk5vbmVc
bi0tIEVuZCBjb21tZW50IC0tXG5NT0NLOiB1c2VyLm9wZW5fdXJsOiBodHRwOi8vZXhhbXBsZS5j
b20vNDJcbiIKKyAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIiIiUnVubmluZyBjaGVjay13ZWJr
aXQtc3R5bGUKK01PQ0s6IHVzZXIub3Blbl91cmw6IGZpbGU6Ly8uLi4KK09ic29sZXRpbmcgMiBv
bGQgcGF0Y2hlcyBvbiBidWcgNDIKK01PQ0sgYWRkX3BhdGNoX3RvX2J1ZzogYnVnX2lkPTQyLCBk
ZXNjcmlwdGlvbj1NT0NLIGRlc2NyaXB0aW9uLCBtYXJrX2Zvcl9yZXZpZXc9VHJ1ZSwgbWFya19m
b3JfY29tbWl0X3F1ZXVlPUZhbHNlLCBtYXJrX2Zvcl9sYW5kaW5nPUZhbHNlCistLSBCZWdpbiBj
b21tZW50IC0tCitOb25lCistLSBFbmQgY29tbWVudCAtLQorTU9DSzogdXNlci5vcGVuX3VybDog
aHR0cDovL2V4YW1wbGUuY29tLzQyCisiIiIKICAgICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9v
dXRwdXRzKFBvc3QoKSwgWzQyXSwgb3B0aW9ucz1vcHRpb25zLCBleHBlY3RlZF9zdGRlcnI9ZXhw
ZWN0ZWRfc3RkZXJyKQogCiAgICAgZGVmIHRlc3RfbGFuZF9zYWZlbHkoc2VsZik6CkBAIC03Nyw3
ICs4NSwxNSBAQCBjbGFzcyBVcGxvYWRDb21tYW5kc1Rlc3QoQ29tbWFuZHNUZXN0KToKICAgICAg
ICAgb3B0aW9ucy5kZXNjcmlwdGlvbiA9ICJNT0NLIGRlc2NyaXB0aW9uIgogICAgICAgICBvcHRp
b25zLnJlcXVlc3RfY29tbWl0ID0gRmFsc2UKICAgICAgICAgb3B0aW9ucy5yZXZpZXcgPSBUcnVl
Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJSdW5uaW5nIGNoZWNrLXdlYmtpdC1zdHlsZVxu
T2Jzb2xldGluZyAyIG9sZCBwYXRjaGVzIG9uIGJ1ZyA0MlxuTU9DSyBhZGRfcGF0Y2hfdG9fYnVn
OiBidWdfaWQ9NDIsIGRlc2NyaXB0aW9uPU1PQ0sgZGVzY3JpcHRpb24sIG1hcmtfZm9yX3Jldmll
dz1UcnVlLCBtYXJrX2Zvcl9jb21taXRfcXVldWU9RmFsc2UsIG1hcmtfZm9yX2xhbmRpbmc9RmFs
c2Vcbi0tIEJlZ2luIGNvbW1lbnQgLS1cbk5vbmVcbi0tIEVuZCBjb21tZW50IC0tXG5NT0NLOiB1
c2VyLm9wZW5fdXJsOiBodHRwOi8vZXhhbXBsZS5jb20vNDJcbiIKKyAgICAgICAgZXhwZWN0ZWRf
c3RkZXJyID0gIiIiUnVubmluZyBjaGVjay13ZWJraXQtc3R5bGUKK01PQ0s6IHVzZXIub3Blbl91
cmw6IGZpbGU6Ly8uLi4KK09ic29sZXRpbmcgMiBvbGQgcGF0Y2hlcyBvbiBidWcgNDIKK01PQ0sg
YWRkX3BhdGNoX3RvX2J1ZzogYnVnX2lkPTQyLCBkZXNjcmlwdGlvbj1NT0NLIGRlc2NyaXB0aW9u
LCBtYXJrX2Zvcl9yZXZpZXc9VHJ1ZSwgbWFya19mb3JfY29tbWl0X3F1ZXVlPUZhbHNlLCBtYXJr
X2Zvcl9sYW5kaW5nPUZhbHNlCistLSBCZWdpbiBjb21tZW50IC0tCitOb25lCistLSBFbmQgY29t
bWVudCAtLQorTU9DSzogdXNlci5vcGVuX3VybDogaHR0cDovL2V4YW1wbGUuY29tLzQyCisiIiIK
ICAgICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFVwbG9hZCgpLCBbNDJdLCBvcHRp
b25zPW9wdGlvbnMsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCiAKICAgICBkZWYg
dGVzdF9tYXJrX2J1Z19maXhlZChzZWxmKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9tb2NrdG9vbC5weQppbmRleCA4OWZkZTZhLi4wNGY2YWViIDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CkBAIC00NTcsOCArNDU3LDEw
IEBAIGNsYXNzIE1vY2tVc2VyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBk
ZWYgb3Blbl91cmwoc2VsZiwgdXJsKToKKyAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgoImZpbGU6
Ly8iKToKKyAgICAgICAgICAgIGxvZygiTU9DSzogdXNlci5vcGVuX3VybDogZmlsZTovLy4uLiIp
CisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgbG9nKCJNT0NLOiB1c2VyLm9wZW5fdXJsOiAl
cyIgJSB1cmwpCi0gICAgICAgIHBhc3MKIAogCiBjbGFzcyBNb2NrSVJDKG9iamVjdCk6CkBAIC00
ODgsMTMgKzQ5MCwyNCBAQCBjbGFzcyBNb2NrU3RhdHVzU2VydmVyKG9iamVjdCk6CiAgICAgICAg
IHJldHVybiAxOTEKIAogCitjbGFzcyBNb2NrRXhlY3V0aXZlKE1vY2spOgorICAgIGRlZiBydW5f
Y29tbWFuZChzZWxmLAorICAgICAgICAgICAgICAgICAgICBhcmdzLAorICAgICAgICAgICAgICAg
ICAgICBjd2Q9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgaW5wdXQ9Tm9uZSwKKyAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfaGFuZGxlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICByZXR1
cm5fZXhpdF9jb2RlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICByZXR1cm5fc3RkZXJyPVRy
dWUpOgorICAgICAgICByZXR1cm4gIk1PQ0sgb3V0cHV0IgorCisKIGNsYXNzIE1vY2tUb29sKCk6
CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nX2V4ZWN1dGl2ZT1GYWxzZSk6CiAgICAgICAg
IHNlbGYud2FrZXVwX2V2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgc2VsZi5idWdz
ID0gTW9ja0J1Z3ppbGxhKCkKICAgICAgICAgc2VsZi5idWlsZGJvdCA9IE1vY2tCdWlsZEJvdCgp
Ci0gICAgICAgIHNlbGYuZXhlY3V0aXZlID0gTW9jaygpCisgICAgICAgIHNlbGYuZXhlY3V0aXZl
ID0gTW9ja0V4ZWN1dGl2ZSgpCiAgICAgICAgIGlmIGxvZ19leGVjdXRpdmU6CiAgICAgICAgICAg
ICBzZWxmLmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwgPSBsYW1iZGEgYXJnczogbG9n
KCJNT0NLIHJ1bl9hbmRfdGhyb3dfaWZfZmFpbDogJXMiICUgYXJncykKICAgICAgICAgc2VsZi5f
aXJjID0gTm9uZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L3N0ZXBzL2NvbmZpcm1kaWZmLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L3N0ZXBzL2NvbmZpcm1kaWZmLnB5CmluZGV4IDc0MmE0ZjEuLjZkZTNhNzggMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jb25maXJtZGlmZi5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29uZmlybWRpZmYu
cHkKQEAgLTI2LDggKzI2LDExIEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitp
bXBvcnQgdXJsbGliCisKIGZyb20gd2Via2l0cHkudG9vbC5zdGVwcy5hYnN0cmFjdHN0ZXAgaW1w
b3J0IEFic3RyYWN0U3RlcAogZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLm9wdGlvbnMgaW1wb3J0
IE9wdGlvbnMKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByZXR0eXBhdGNoIGltcG9ydCBQcmV0dHlQ
YXRjaAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmRlcHJlY2F0ZWRfbG9nZ2luZyBpbXBv
cnQgZXJyb3IKIAogCkBAIC0zOCwxMCArNDEsMjEgQEAgY2xhc3MgQ29uZmlybURpZmYoQWJzdHJh
Y3RTdGVwKToKICAgICAgICAgICAgIE9wdGlvbnMuY29uZmlybSwKICAgICAgICAgXQogCisgICAg
ZGVmIF9zaG93X3ByZXR0eV9kaWZmKHNlbGYsIGRpZmYpOgorICAgICAgICBwcmV0dHlfcGF0Y2gg
PSBQcmV0dHlQYXRjaChzZWxmLl90b29sLmV4ZWN1dGl2ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5jaGVja291dF9yb290KQorICAgICAgICBz
ZWxmLl9wcmV0dHlfZGlmZl9maWxlID0gcHJldHR5X3BhdGNoLnByZXR0eV9kaWZmX2ZpbGUoZGlm
ZikKKyAgICAgICAgdXJsID0gImZpbGU6Ly8iICsgdXJsbGliLnF1b3RlKHNlbGYuX3ByZXR0eV9k
aWZmX2ZpbGUubmFtZSkKKyAgICAgICAgc2VsZi5fdG9vbC51c2VyLm9wZW5fdXJsKHVybCkKKwog
ICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgogICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5j
b25maXJtOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGRpZmYgPSBzZWxmLmNhY2hlZF9s
b29rdXAoc3RhdGUsICJkaWZmIikKLSAgICAgICAgc2VsZi5fdG9vbC51c2VyLnBhZ2UoZGlmZikK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc2hvd19wcmV0dHlfZGlmZihkaWZmKQor
ICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgICMgTm8gcHJldHR5IGRpZmYu
ICA6KAorICAgICAgICAgICAgc2VsZi5fdG9vbC51c2VyLnBhZ2UoZGlmZikKICAgICAgICAgaWYg
bm90IHNlbGYuX3Rvb2wudXNlci5jb25maXJtKCJXYXMgdGhhdCBkaWZmIGNvcnJlY3Q/Iik6CiAg
ICAgICAgICAgICBleGl0KDEpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53332</attachid>
            <date>2010-04-14 08:52:11 -0700</date>
            <delta_ts>2010-04-14 09:10:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37489-20100414085210.patch</filename>
            <type>text/plain</type>
            <size>9833</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU3NTgxKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDQtMTQgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVc2UgcHJldHR5IHBhdGNoIGZvciBjb25maXJtaW5nIHdlYmtpdC1wYXRjaCBkaWZm
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0ODkK
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ByZXR0eXBhdGNoLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZG93bmxvYWRfdW5p
dHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3VwbG9h
ZF91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbmZpcm1kaWZmLnB5
OgorCiAyMDEwLTA0LTE0ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vcHJldHR5cGF0Y2gucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vcHJldHR5cGF0Y2gucHkJKHJldmlzaW9uIDApCisrKyBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcmV0dHlwYXRjaC5weQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1NSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
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
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0
IHRlbXBmaWxlCisKKworY2xhc3MgUHJldHR5UGF0Y2gob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgZXhlY3V0aXZlLCBjaGVja291dF9yb290KToKKyAgICAgICAgc2VsZi5fZXhlY3V0
aXZlID0gZXhlY3V0aXZlCisgICAgICAgIHNlbGYuX2NoZWNrb3V0X3Jvb3QgPSBjaGVja291dF9y
b290CisKKyAgICBkZWYgcHJldHR5X2RpZmZfZmlsZShzZWxmLCBkaWZmKToKKyAgICAgICAgcHJl
dHR5X2RpZmYgPSBzZWxmLnByZXR0eV9kaWZmKGRpZmYpCisgICAgICAgIGRpZmZfZmlsZSA9IHRl
bXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShzdWZmaXg9Ii5odG1sIikKKyAgICAgICAgZGlmZl9m
aWxlLndyaXRlKHByZXR0eV9kaWZmKQorICAgICAgICBkaWZmX2ZpbGUuZmx1c2goKQorICAgICAg
ICByZXR1cm4gZGlmZl9maWxlCisKKyAgICBkZWYgcHJldHR5X2RpZmYoc2VsZiwgZGlmZik6Cisg
ICAgICAgIHByZXR0eV9wYXRjaF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX2NoZWNrb3V0X3Jv
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWdzU2l0ZSIs
ICJQcmV0dHlQYXRjaCIpCisgICAgICAgIHByZXR0aWZ5X3BhdGggPSBvcy5wYXRoLmpvaW4ocHJl
dHR5X3BhdGNoX3BhdGgsICJwcmV0dGlmeS5yYiIpCisgICAgICAgIGFyZ3MgPSBbCisgICAgICAg
ICAgICAicnVieSIsCisgICAgICAgICAgICAiLUkiLAorICAgICAgICAgICAgcHJldHR5X3BhdGNo
X3BhdGgsCisgICAgICAgICAgICBwcmV0dGlmeV9wYXRoLAorICAgICAgICBdCisgICAgICAgIHJl
dHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoYXJncywgaW5wdXQ9ZGlmZikKSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkJKHJldmlz
aW9uIDU3NTgxKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29s
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NjEsOCArNDYxLDEwIEBAIGNsYXNzIE1vY2tVc2VyKG9i
amVjdCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgb3Blbl91cmwoc2VsZiwgdXJs
KToKKyAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgoImZpbGU6Ly8iKToKKyAgICAgICAgICAgIGxv
ZygiTU9DSzogdXNlci5vcGVuX3VybDogZmlsZTovLy4uLiIpCisgICAgICAgICAgICByZXR1cm4K
ICAgICAgICAgbG9nKCJNT0NLOiB1c2VyLm9wZW5fdXJsOiAlcyIgJSB1cmwpCi0gICAgICAgIHBh
c3MKIAogCiBjbGFzcyBNb2NrSVJDKG9iamVjdCk6CkBAIC00OTYsNiArNDk4LDE1IEBAIGNsYXNz
IE1vY2tFeGVjdXRlKE1vY2spOgogICAgIGRlZiBydW5fYW5kX3Rocm93X2lmX2ZhaWwoc2VsZiwg
YXJncywgcXVpZXQ9RmFsc2UpOgogICAgICAgICByZXR1cm4gIk1PQ0sgb3V0cHV0IG9mIGNoaWxk
IHByb2Nlc3MiCiAKKyAgICBkZWYgcnVuX2NvbW1hbmQoc2VsZiwKKyAgICAgICAgICAgICAgICAg
ICAgYXJncywKKyAgICAgICAgICAgICAgICAgICAgY3dkPU5vbmUsCisgICAgICAgICAgICAgICAg
ICAgIGlucHV0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGVycm9yX2hhbmRsZXI9Tm9uZSwK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2V4aXRfY29kZT1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuX3N0ZGVycj1UcnVlKToKKyAgICAgICAgcmV0dXJuICJNT0NLIG91dHB1
dCBvZiBjaGlsZCBwcm9jZXNzIgorCiAKIGNsYXNzIE1vY2tUb29sKCk6CiAKSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kb3dubG9hZF91bml0dGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvZG93bmxvYWRfdW5pdHRlc3QucHkJKHJldmlzaW9uIDU3NTgxKQorKysgV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rvd25sb2FkX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDYgQEAgd2hlcmUgQVRUQUNITUVOVF9JRCBpcyB0aGUg
SUQgb2YgdGhpcyBhdAogICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoQ3JlYXRl
Um9sbG91dCgpLCBbODUyLCAiUmVhc29uIl0sIG9wdGlvbnM9c2VsZi5fZGVmYXVsdF9vcHRpb25z
KCksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCiAKICAgICBkZWYgdGVzdF9yb2xs
b3V0KHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiUHJlcGFyaW5nIHJvbGxvdXQg
Zm9yIGJ1ZyA0Mi5cblVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5XG5SdW5uaW5nIHByZXBhcmUt
Q2hhbmdlTG9nXG5CdWlsZGluZyBXZWJLaXRcbiIKKyAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0g
IlByZXBhcmluZyByb2xsb3V0IGZvciBidWcgNDIuXG5VcGRhdGluZyB3b3JraW5nIGRpcmVjdG9y
eVxuUnVubmluZyBwcmVwYXJlLUNoYW5nZUxvZ1xuTU9DSzogdXNlci5vcGVuX3VybDogZmlsZTov
Ly4uLlxuQnVpbGRpbmcgV2ViS2l0XG4iCiAgICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0
cHV0cyhSb2xsb3V0KCksIFs4NTIsICJSZWFzb24iXSwgb3B0aW9ucz1zZWxmLl9kZWZhdWx0X29w
dGlvbnMoKSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKIApJbmRleDogV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3VwbG9hZF91bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
dXBsb2FkX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1NzU4MSkKKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy91cGxvYWRfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDE1IEBAIGNsYXNzIFVwbG9hZENvbW1hbmRzVGVzdChDb21tYW5kc1Rl
c3QpOgogICAgICAgICBvcHRpb25zLnJlcXVlc3RfY29tbWl0ID0gRmFsc2UKICAgICAgICAgb3B0
aW9ucy5yZXZpZXcgPSBUcnVlCiAgICAgICAgIG9wdGlvbnMuY2MgPSBOb25lCi0gICAgICAgIGV4
cGVjdGVkX3N0ZGVyciA9ICJSdW5uaW5nIGNoZWNrLXdlYmtpdC1zdHlsZVxuT2Jzb2xldGluZyAy
IG9sZCBwYXRjaGVzIG9uIGJ1ZyA0MlxuTU9DSyBhZGRfcGF0Y2hfdG9fYnVnOiBidWdfaWQ9NDIs
IGRlc2NyaXB0aW9uPU1PQ0sgZGVzY3JpcHRpb24sIG1hcmtfZm9yX3Jldmlldz1UcnVlLCBtYXJr
X2Zvcl9jb21taXRfcXVldWU9RmFsc2UsIG1hcmtfZm9yX2xhbmRpbmc9RmFsc2Vcbi0tIEJlZ2lu
IGNvbW1lbnQgLS1cbk5vbmVcbi0tIEVuZCBjb21tZW50IC0tXG5NT0NLOiB1c2VyLm9wZW5fdXJs
OiBodHRwOi8vZXhhbXBsZS5jb20vNDJcbiIKKyAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIiIi
UnVubmluZyBjaGVjay13ZWJraXQtc3R5bGUKK01PQ0s6IHVzZXIub3Blbl91cmw6IGZpbGU6Ly8u
Li4KK09ic29sZXRpbmcgMiBvbGQgcGF0Y2hlcyBvbiBidWcgNDIKK01PQ0sgYWRkX3BhdGNoX3Rv
X2J1ZzogYnVnX2lkPTQyLCBkZXNjcmlwdGlvbj1NT0NLIGRlc2NyaXB0aW9uLCBtYXJrX2Zvcl9y
ZXZpZXc9VHJ1ZSwgbWFya19mb3JfY29tbWl0X3F1ZXVlPUZhbHNlLCBtYXJrX2Zvcl9sYW5kaW5n
PUZhbHNlCistLSBCZWdpbiBjb21tZW50IC0tCitOb25lCistLSBFbmQgY29tbWVudCAtLQorTU9D
SzogdXNlci5vcGVuX3VybDogaHR0cDovL2V4YW1wbGUuY29tLzQyCisiIiIKICAgICAgICAgc2Vs
Zi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFBvc3QoKSwgWzQyXSwgb3B0aW9ucz1vcHRpb25zLCBl
eHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQogCiAgICAgZGVmIHRlc3RfbGFuZF9zYWZl
bHkoc2VsZik6CkBAIC03OSw3ICs4NywxNSBAQCBjbGFzcyBVcGxvYWRDb21tYW5kc1Rlc3QoQ29t
bWFuZHNUZXN0KToKICAgICAgICAgb3B0aW9ucy5yZXF1ZXN0X2NvbW1pdCA9IEZhbHNlCiAgICAg
ICAgIG9wdGlvbnMucmV2aWV3ID0gVHJ1ZQogICAgICAgICBvcHRpb25zLmNjID0gTm9uZQotICAg
ICAgICBleHBlY3RlZF9zdGRlcnIgPSAiUnVubmluZyBjaGVjay13ZWJraXQtc3R5bGVcbk9ic29s
ZXRpbmcgMiBvbGQgcGF0Y2hlcyBvbiBidWcgNDJcbk1PQ0sgYWRkX3BhdGNoX3RvX2J1ZzogYnVn
X2lkPTQyLCBkZXNjcmlwdGlvbj1NT0NLIGRlc2NyaXB0aW9uLCBtYXJrX2Zvcl9yZXZpZXc9VHJ1
ZSwgbWFya19mb3JfY29tbWl0X3F1ZXVlPUZhbHNlLCBtYXJrX2Zvcl9sYW5kaW5nPUZhbHNlXG4t
LSBCZWdpbiBjb21tZW50IC0tXG5Ob25lXG4tLSBFbmQgY29tbWVudCAtLVxuTU9DSzogdXNlci5v
cGVuX3VybDogaHR0cDovL2V4YW1wbGUuY29tLzQyXG4iCisgICAgICAgIGV4cGVjdGVkX3N0ZGVy
ciA9ICIiIlJ1bm5pbmcgY2hlY2std2Via2l0LXN0eWxlCitNT0NLOiB1c2VyLm9wZW5fdXJsOiBm
aWxlOi8vLi4uCitPYnNvbGV0aW5nIDIgb2xkIHBhdGNoZXMgb24gYnVnIDQyCitNT0NLIGFkZF9w
YXRjaF90b19idWc6IGJ1Z19pZD00MiwgZGVzY3JpcHRpb249TU9DSyBkZXNjcmlwdGlvbiwgbWFy
a19mb3JfcmV2aWV3PVRydWUsIG1hcmtfZm9yX2NvbW1pdF9xdWV1ZT1GYWxzZSwgbWFya19mb3Jf
bGFuZGluZz1GYWxzZQorLS0gQmVnaW4gY29tbWVudCAtLQorTm9uZQorLS0gRW5kIGNvbW1lbnQg
LS0KK01PQ0s6IHVzZXIub3Blbl91cmw6IGh0dHA6Ly9leGFtcGxlLmNvbS80MgorIiIiCiAgICAg
ICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhVcGxvYWQoKSwgWzQyXSwgb3B0aW9ucz1v
cHRpb25zLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQogCiAgICAgZGVmIHRlc3Rf
bWFya19idWdfZml4ZWQoc2VsZik6CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvc3RlcHMvY29uZmlybWRpZmYucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbmZpcm1kaWZmLnB5CShyZXZpc2lvbiA1NzU4MSkK
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jb25maXJtZGlmZi5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAKICMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAKK2ltcG9ydCB1cmxsaWIKKwogZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLmFi
c3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCiBmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMu
b3B0aW9ucyBpbXBvcnQgT3B0aW9ucwotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmRlcHJl
Y2F0ZWRfbG9nZ2luZyBpbXBvcnQgZXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByZXR0eXBh
dGNoIGltcG9ydCBQcmV0dHlQYXRjaAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9y
dCBsb2d1dGlscworCisKK19sb2cgPSBsb2d1dGlscy5nZXRfbG9nZ2VyKF9fZmlsZV9fKQogCiAK
IGNsYXNzIENvbmZpcm1EaWZmKEFic3RyYWN0U3RlcCk6CkBAIC0zOCwxMCArNDQsMjggQEAgY2xh
c3MgQ29uZmlybURpZmYoQWJzdHJhY3RTdGVwKToKICAgICAgICAgICAgIE9wdGlvbnMuY29uZmly
bSwKICAgICAgICAgXQogCisgICAgZGVmIF9zaG93X3ByZXR0eV9kaWZmKHNlbGYsIGRpZmYpOgor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmV0dHlfcGF0Y2ggPSBQcmV0dHlQYXRjaChzZWxm
Ll90b29sLmV4ZWN1dGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tvdXRfcm9vdCkKKyAgICAgICAgICAgIHByZXR0eV9kaWZm
X2ZpbGUgPSBwcmV0dHlfcGF0Y2gucHJldHR5X2RpZmZfZmlsZShkaWZmKQorICAgICAgICAgICAg
dXJsID0gImZpbGU6Ly8lcyIgJSB1cmxsaWIucXVvdGUocHJldHR5X2RpZmZfZmlsZS5uYW1lKQor
ICAgICAgICAgICAgc2VsZi5fdG9vbC51c2VyLm9wZW5fdXJsKHVybCkKKyAgICAgICAgICAgICMg
V2UgcmV0dXJuIHRoZSBwcmV0dHlfZGlmZl9maWxlIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIGtl
ZXAgdGhlCisgICAgICAgICAgICAjIGZpbGUgYWxpdmUgdW50aWwgdGhlIHVzZXIgaGFzIGhhZCBh
IGNoYW5jZSB0byBjb25maXJtIHRoZSBkaWZmLgorICAgICAgICAgICAgcmV0dXJuIHByZXR0eV9k
aWZmX2ZpbGUKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBfbG9nLndh
cm5pbmcoIlByZXR0eVBhdGNoIHVuYXZhaWxhYmxlLiIpCisKICAgICBkZWYgcnVuKHNlbGYsIHN0
YXRlKToKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuY29uZmlybToKICAgICAgICAgICAg
IHJldHVybgogICAgICAgICBkaWZmID0gc2VsZi5jYWNoZWRfbG9va3VwKHN0YXRlLCAiZGlmZiIp
Ci0gICAgICAgIHNlbGYuX3Rvb2wudXNlci5wYWdlKGRpZmYpCi0gICAgICAgIGlmIG5vdCBzZWxm
Ll90b29sLnVzZXIuY29uZmlybSgiV2FzIHRoYXQgZGlmZiBjb3JyZWN0PyIpOgorICAgICAgICBw
cmV0dHlfZGlmZl9maWxlID0gc2VsZi5fc2hvd19wcmV0dHlfZGlmZihkaWZmKQorICAgICAgICBp
ZiBub3QgcHJldHR5X2RpZmZfZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rvb2wudXNlci5wYWdl
KGRpZmYpCisgICAgICAgIGRpZmZfY29ycmVjdCA9IHNlbGYuX3Rvb2wudXNlci5jb25maXJtKCJX
YXMgdGhhdCBkaWZmIGNvcnJlY3Q/IikKKyAgICAgICAgaWYgcHJldHR5X2RpZmZfZmlsZToKKyAg
ICAgICAgICAgIHByZXR0eV9kaWZmX2ZpbGUuY2xvc2UoKQorICAgICAgICBpZiBub3QgZGlmZl9j
b3JyZWN0OgogICAgICAgICAgICAgZXhpdCgxKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53336</attachid>
            <date>2010-04-14 09:10:26 -0700</date>
            <delta_ts>2010-04-14 10:27:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37489-20100414091024.patch</filename>
            <type>text/plain</type>
            <size>9976</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU3NTgxKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDQtMTQgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVc2UgcHJldHR5IHBhdGNoIGZvciBjb25maXJtaW5nIHdlYmtpdC1wYXRjaCBkaWZm
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0ODkK
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ByZXR0eXBhdGNoLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZG93bmxvYWRfdW5p
dHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3VwbG9h
ZF91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbmZpcm1kaWZmLnB5
OgorCiAyMDEwLTA0LTE0ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vcHJldHR5cGF0Y2gucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vcHJldHR5cGF0Y2gucHkJKHJldmlzaW9uIDApCisrKyBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcmV0dHlwYXRjaC5weQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1NSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
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
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0
IHRlbXBmaWxlCisKKworY2xhc3MgUHJldHR5UGF0Y2gob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgZXhlY3V0aXZlLCBjaGVja291dF9yb290KToKKyAgICAgICAgc2VsZi5fZXhlY3V0
aXZlID0gZXhlY3V0aXZlCisgICAgICAgIHNlbGYuX2NoZWNrb3V0X3Jvb3QgPSBjaGVja291dF9y
b290CisKKyAgICBkZWYgcHJldHR5X2RpZmZfZmlsZShzZWxmLCBkaWZmKToKKyAgICAgICAgcHJl
dHR5X2RpZmYgPSBzZWxmLnByZXR0eV9kaWZmKGRpZmYpCisgICAgICAgIGRpZmZfZmlsZSA9IHRl
bXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShzdWZmaXg9Ii5odG1sIikKKyAgICAgICAgZGlmZl9m
aWxlLndyaXRlKHByZXR0eV9kaWZmKQorICAgICAgICBkaWZmX2ZpbGUuZmx1c2goKQorICAgICAg
ICByZXR1cm4gZGlmZl9maWxlCisKKyAgICBkZWYgcHJldHR5X2RpZmYoc2VsZiwgZGlmZik6Cisg
ICAgICAgIHByZXR0eV9wYXRjaF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX2NoZWNrb3V0X3Jv
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWdzU2l0ZSIs
ICJQcmV0dHlQYXRjaCIpCisgICAgICAgIHByZXR0aWZ5X3BhdGggPSBvcy5wYXRoLmpvaW4ocHJl
dHR5X3BhdGNoX3BhdGgsICJwcmV0dGlmeS5yYiIpCisgICAgICAgIGFyZ3MgPSBbCisgICAgICAg
ICAgICAicnVieSIsCisgICAgICAgICAgICAiLUkiLAorICAgICAgICAgICAgcHJldHR5X3BhdGNo
X3BhdGgsCisgICAgICAgICAgICBwcmV0dGlmeV9wYXRoLAorICAgICAgICBdCisgICAgICAgIHJl
dHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoYXJncywgaW5wdXQ9ZGlmZikKSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkJKHJldmlz
aW9uIDU3NTgxKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29s
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NjEsOCArNDYxLDEwIEBAIGNsYXNzIE1vY2tVc2VyKG9i
amVjdCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgb3Blbl91cmwoc2VsZiwgdXJs
KToKKyAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgoImZpbGU6Ly8iKToKKyAgICAgICAgICAgIGxv
ZygiTU9DSzogdXNlci5vcGVuX3VybDogZmlsZTovLy4uLiIpCisgICAgICAgICAgICByZXR1cm4K
ICAgICAgICAgbG9nKCJNT0NLOiB1c2VyLm9wZW5fdXJsOiAlcyIgJSB1cmwpCi0gICAgICAgIHBh
c3MKIAogCiBjbGFzcyBNb2NrSVJDKG9iamVjdCk6CkBAIC00OTYsNiArNDk4LDE1IEBAIGNsYXNz
IE1vY2tFeGVjdXRlKE1vY2spOgogICAgIGRlZiBydW5fYW5kX3Rocm93X2lmX2ZhaWwoc2VsZiwg
YXJncywgcXVpZXQ9RmFsc2UpOgogICAgICAgICByZXR1cm4gIk1PQ0sgb3V0cHV0IG9mIGNoaWxk
IHByb2Nlc3MiCiAKKyAgICBkZWYgcnVuX2NvbW1hbmQoc2VsZiwKKyAgICAgICAgICAgICAgICAg
ICAgYXJncywKKyAgICAgICAgICAgICAgICAgICAgY3dkPU5vbmUsCisgICAgICAgICAgICAgICAg
ICAgIGlucHV0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGVycm9yX2hhbmRsZXI9Tm9uZSwK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2V4aXRfY29kZT1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuX3N0ZGVycj1UcnVlKToKKyAgICAgICAgcmV0dXJuICJNT0NLIG91dHB1
dCBvZiBjaGlsZCBwcm9jZXNzIgorCiAKIGNsYXNzIE1vY2tUb29sKCk6CiAKSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kb3dubG9hZF91bml0dGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvZG93bmxvYWRfdW5pdHRlc3QucHkJKHJldmlzaW9uIDU3NTgxKQorKysgV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rvd25sb2FkX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDYgQEAgd2hlcmUgQVRUQUNITUVOVF9JRCBpcyB0aGUg
SUQgb2YgdGhpcyBhdAogICAgICAgICBzZWxmLmFzc2VydF9leGVjdXRlX291dHB1dHMoQ3JlYXRl
Um9sbG91dCgpLCBbODUyLCAiUmVhc29uIl0sIG9wdGlvbnM9c2VsZi5fZGVmYXVsdF9vcHRpb25z
KCksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCiAKICAgICBkZWYgdGVzdF9yb2xs
b3V0KHNlbGYpOgotICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiUHJlcGFyaW5nIHJvbGxvdXQg
Zm9yIGJ1ZyA0Mi5cblVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5XG5SdW5uaW5nIHByZXBhcmUt
Q2hhbmdlTG9nXG5CdWlsZGluZyBXZWJLaXRcbiIKKyAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0g
IlByZXBhcmluZyByb2xsb3V0IGZvciBidWcgNDIuXG5VcGRhdGluZyB3b3JraW5nIGRpcmVjdG9y
eVxuUnVubmluZyBwcmVwYXJlLUNoYW5nZUxvZ1xuTU9DSzogdXNlci5vcGVuX3VybDogZmlsZTov
Ly4uLlxuQnVpbGRpbmcgV2ViS2l0XG4iCiAgICAgICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0
cHV0cyhSb2xsb3V0KCksIFs4NTIsICJSZWFzb24iXSwgb3B0aW9ucz1zZWxmLl9kZWZhdWx0X29w
dGlvbnMoKSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKIApJbmRleDogV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3VwbG9hZF91bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
dXBsb2FkX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA1NzU4MSkKKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy91cGxvYWRfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDE1IEBAIGNsYXNzIFVwbG9hZENvbW1hbmRzVGVzdChDb21tYW5kc1Rl
c3QpOgogICAgICAgICBvcHRpb25zLnJlcXVlc3RfY29tbWl0ID0gRmFsc2UKICAgICAgICAgb3B0
aW9ucy5yZXZpZXcgPSBUcnVlCiAgICAgICAgIG9wdGlvbnMuY2MgPSBOb25lCi0gICAgICAgIGV4
cGVjdGVkX3N0ZGVyciA9ICJSdW5uaW5nIGNoZWNrLXdlYmtpdC1zdHlsZVxuT2Jzb2xldGluZyAy
IG9sZCBwYXRjaGVzIG9uIGJ1ZyA0MlxuTU9DSyBhZGRfcGF0Y2hfdG9fYnVnOiBidWdfaWQ9NDIs
IGRlc2NyaXB0aW9uPU1PQ0sgZGVzY3JpcHRpb24sIG1hcmtfZm9yX3Jldmlldz1UcnVlLCBtYXJr
X2Zvcl9jb21taXRfcXVldWU9RmFsc2UsIG1hcmtfZm9yX2xhbmRpbmc9RmFsc2Vcbi0tIEJlZ2lu
IGNvbW1lbnQgLS1cbk5vbmVcbi0tIEVuZCBjb21tZW50IC0tXG5NT0NLOiB1c2VyLm9wZW5fdXJs
OiBodHRwOi8vZXhhbXBsZS5jb20vNDJcbiIKKyAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIiIi
UnVubmluZyBjaGVjay13ZWJraXQtc3R5bGUKK01PQ0s6IHVzZXIub3Blbl91cmw6IGZpbGU6Ly8u
Li4KK09ic29sZXRpbmcgMiBvbGQgcGF0Y2hlcyBvbiBidWcgNDIKK01PQ0sgYWRkX3BhdGNoX3Rv
X2J1ZzogYnVnX2lkPTQyLCBkZXNjcmlwdGlvbj1NT0NLIGRlc2NyaXB0aW9uLCBtYXJrX2Zvcl9y
ZXZpZXc9VHJ1ZSwgbWFya19mb3JfY29tbWl0X3F1ZXVlPUZhbHNlLCBtYXJrX2Zvcl9sYW5kaW5n
PUZhbHNlCistLSBCZWdpbiBjb21tZW50IC0tCitOb25lCistLSBFbmQgY29tbWVudCAtLQorTU9D
SzogdXNlci5vcGVuX3VybDogaHR0cDovL2V4YW1wbGUuY29tLzQyCisiIiIKICAgICAgICAgc2Vs
Zi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKFBvc3QoKSwgWzQyXSwgb3B0aW9ucz1vcHRpb25zLCBl
eHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQogCiAgICAgZGVmIHRlc3RfbGFuZF9zYWZl
bHkoc2VsZik6CkBAIC03OSw3ICs4NywxNSBAQCBjbGFzcyBVcGxvYWRDb21tYW5kc1Rlc3QoQ29t
bWFuZHNUZXN0KToKICAgICAgICAgb3B0aW9ucy5yZXF1ZXN0X2NvbW1pdCA9IEZhbHNlCiAgICAg
ICAgIG9wdGlvbnMucmV2aWV3ID0gVHJ1ZQogICAgICAgICBvcHRpb25zLmNjID0gTm9uZQotICAg
ICAgICBleHBlY3RlZF9zdGRlcnIgPSAiUnVubmluZyBjaGVjay13ZWJraXQtc3R5bGVcbk9ic29s
ZXRpbmcgMiBvbGQgcGF0Y2hlcyBvbiBidWcgNDJcbk1PQ0sgYWRkX3BhdGNoX3RvX2J1ZzogYnVn
X2lkPTQyLCBkZXNjcmlwdGlvbj1NT0NLIGRlc2NyaXB0aW9uLCBtYXJrX2Zvcl9yZXZpZXc9VHJ1
ZSwgbWFya19mb3JfY29tbWl0X3F1ZXVlPUZhbHNlLCBtYXJrX2Zvcl9sYW5kaW5nPUZhbHNlXG4t
LSBCZWdpbiBjb21tZW50IC0tXG5Ob25lXG4tLSBFbmQgY29tbWVudCAtLVxuTU9DSzogdXNlci5v
cGVuX3VybDogaHR0cDovL2V4YW1wbGUuY29tLzQyXG4iCisgICAgICAgIGV4cGVjdGVkX3N0ZGVy
ciA9ICIiIlJ1bm5pbmcgY2hlY2std2Via2l0LXN0eWxlCitNT0NLOiB1c2VyLm9wZW5fdXJsOiBm
aWxlOi8vLi4uCitPYnNvbGV0aW5nIDIgb2xkIHBhdGNoZXMgb24gYnVnIDQyCitNT0NLIGFkZF9w
YXRjaF90b19idWc6IGJ1Z19pZD00MiwgZGVzY3JpcHRpb249TU9DSyBkZXNjcmlwdGlvbiwgbWFy
a19mb3JfcmV2aWV3PVRydWUsIG1hcmtfZm9yX2NvbW1pdF9xdWV1ZT1GYWxzZSwgbWFya19mb3Jf
bGFuZGluZz1GYWxzZQorLS0gQmVnaW4gY29tbWVudCAtLQorTm9uZQorLS0gRW5kIGNvbW1lbnQg
LS0KK01PQ0s6IHVzZXIub3Blbl91cmw6IGh0dHA6Ly9leGFtcGxlLmNvbS80MgorIiIiCiAgICAg
ICAgIHNlbGYuYXNzZXJ0X2V4ZWN1dGVfb3V0cHV0cyhVcGxvYWQoKSwgWzQyXSwgb3B0aW9ucz1v
cHRpb25zLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQogCiAgICAgZGVmIHRlc3Rf
bWFya19idWdfZml4ZWQoc2VsZik6CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvc3RlcHMvY29uZmlybWRpZmYucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbmZpcm1kaWZmLnB5CShyZXZpc2lvbiA1NzU4MSkK
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jb25maXJtZGlmZi5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTYgQEAKICMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAKK2ltcG9ydCB1cmxsaWIKKwogZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLmFi
c3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCiBmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMu
b3B0aW9ucyBpbXBvcnQgT3B0aW9ucwotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmRlcHJl
Y2F0ZWRfbG9nZ2luZyBpbXBvcnQgZXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByZXR0eXBh
dGNoIGltcG9ydCBQcmV0dHlQYXRjaAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9y
dCBsb2d1dGlscworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQg
U2NyaXB0RXJyb3IKKworCitfbG9nID0gbG9ndXRpbHMuZ2V0X2xvZ2dlcihfX2ZpbGVfXykKIAog
CiBjbGFzcyBDb25maXJtRGlmZihBYnN0cmFjdFN0ZXApOgpAQCAtMzgsMTAgKzQ1LDMwIEBAIGNs
YXNzIENvbmZpcm1EaWZmKEFic3RyYWN0U3RlcCk6CiAgICAgICAgICAgICBPcHRpb25zLmNvbmZp
cm0sCiAgICAgICAgIF0KIAorICAgIGRlZiBfc2hvd19wcmV0dHlfZGlmZihzZWxmLCBkaWZmKToK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJldHR5X3BhdGNoID0gUHJldHR5UGF0Y2goc2Vs
Zi5fdG9vbC5leGVjdXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl90b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCisgICAgICAgICAgICBwcmV0dHlfZGlm
Zl9maWxlID0gcHJldHR5X3BhdGNoLnByZXR0eV9kaWZmX2ZpbGUoZGlmZikKKyAgICAgICAgICAg
IHVybCA9ICJmaWxlOi8vJXMiICUgdXJsbGliLnF1b3RlKHByZXR0eV9kaWZmX2ZpbGUubmFtZSkK
KyAgICAgICAgICAgIHNlbGYuX3Rvb2wudXNlci5vcGVuX3VybCh1cmwpCisgICAgICAgICAgICAj
IFdlIHJldHVybiB0aGUgcHJldHR5X2RpZmZfZmlsZSBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBr
ZWVwIHRoZQorICAgICAgICAgICAgIyBmaWxlIGFsaXZlIHVudGlsIHRoZSB1c2VyIGhhcyBoYWQg
YSBjaGFuY2UgdG8gY29uZmlybSB0aGUgZGlmZi4KKyAgICAgICAgICAgIHJldHVybiBwcmV0dHlf
ZGlmZl9maWxlCisgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKKyAgICAgICAgICAgIF9s
b2cud2FybmluZygiUHJldHR5UGF0Y2ggZmFpbGVkLiAgOigiKQorICAgICAgICBleGNlcHQgT1NF
cnJvciwgZToKKyAgICAgICAgICAgIF9sb2cud2FybmluZygiUHJldHR5UGF0Y2ggdW5hdmFpbGFi
bGUuIikKKwogICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgogICAgICAgICBpZiBub3Qgc2VsZi5f
b3B0aW9ucy5jb25maXJtOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGRpZmYgPSBzZWxm
LmNhY2hlZF9sb29rdXAoc3RhdGUsICJkaWZmIikKLSAgICAgICAgc2VsZi5fdG9vbC51c2VyLnBh
Z2UoZGlmZikKLSAgICAgICAgaWYgbm90IHNlbGYuX3Rvb2wudXNlci5jb25maXJtKCJXYXMgdGhh
dCBkaWZmIGNvcnJlY3Q/Iik6CisgICAgICAgIHByZXR0eV9kaWZmX2ZpbGUgPSBzZWxmLl9zaG93
X3ByZXR0eV9kaWZmKGRpZmYpCisgICAgICAgIGlmIG5vdCBwcmV0dHlfZGlmZl9maWxlOgorICAg
ICAgICAgICAgc2VsZi5fdG9vbC51c2VyLnBhZ2UoZGlmZikKKyAgICAgICAgZGlmZl9jb3JyZWN0
ID0gc2VsZi5fdG9vbC51c2VyLmNvbmZpcm0oIldhcyB0aGF0IGRpZmYgY29ycmVjdD8iKQorICAg
ICAgICBpZiBwcmV0dHlfZGlmZl9maWxlOgorICAgICAgICAgICAgcHJldHR5X2RpZmZfZmlsZS5j
bG9zZSgpCisgICAgICAgIGlmIG5vdCBkaWZmX2NvcnJlY3Q6CiAgICAgICAgICAgICBleGl0KDEp
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>