<?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>25970</bug_id>
          
          <creation_ts>2009-05-22 16:01:24 -0700</creation_ts>
          <short_desc>The implicit setter for DOM Storage does not handle null correctly.</short_desc>
          <delta_ts>2009-05-30 15:39:20 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>122743</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-05-22 16:01:24 -0700</bug_when>
    <thetext>DOM Storage is supposed to only store data in string key/value pairs.  setItem seems to work as expected, but the implicit setter for LocalStorage and SessionStorage appears to not handle this case correctly.  The following reduction demonstrates this:


&lt;html&gt;&lt;head&gt;&lt;title&gt;Safari Reductions&lt;/title&gt;
&lt;script&gt;

function test() {
  window.localStorage.a = null;
  document.getElementById(&quot;a&quot;).innerHTML = typeof window.localStorage.a;

  window.localStorage.setItem(&apos;b&apos;, null);
  document.getElementById(&quot;b&quot;).innerHTML = typeof window.localStorage.b;
}

&lt;/script&gt;
&lt;/head&gt;&lt;body onload=&quot;test();&quot;&gt;
&lt;p&gt;window.localStorage.a = null; &lt;i&gt;typeof window.localStorage.a&lt;/i&gt; = &lt;span id=&quot;a&quot;&gt;&lt;/span&gt;
&lt;br /&gt;(It should be &apos;string&apos;)&lt;/p&gt;
&lt;p&gt;window.localStorage.setItem(&apos;b&apos;, null); &lt;i&gt;typeof window.localStorage.b&lt;/i&gt; = &lt;span id=&quot;b&quot;&gt;&lt;/span&gt;
&lt;br /&gt;(It should be &apos;string&apos;)&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;


Note that this code triggers an ASSERT(!value.isNull()) check in the setItem implementation.

I&apos;ll attempt to fix this (and create a layout test to catch it) in the next couple weeks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123583</commentid>
    <comment_count>1</comment_count>
      <attachid>30782</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-05-29 11:52:25 -0700</bug_when>
    <thetext>Created attachment 30782
A potential fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123585</commentid>
    <comment_count>2</comment_count>
      <attachid>30784</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-05-29 11:56:07 -0700</bug_when>
    <thetext>Created attachment 30784
Fixed changelog from last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123586</commentid>
    <comment_count>3</comment_count>
      <attachid>30782</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-29 11:56:33 -0700</bug_when>
    <thetext>Comment on attachment 30782
A potential fix.

I supposed it&apos;s OK to put the fix down here at the lowest level, but the use of the string &quot;null&quot; seems specific to JavaScript and so it seems to me this should be handled in the JavaScript bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123655</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-29 17:35:28 -0700</bug_when>
    <thetext>Do other non-string values types (in particular undefined) have similar issues...

var undefinedVar;
var array = [1,2,3];
var number = 1.01;
localStorage.a = T;
localStorage.setItem(&apos;b&apos;, T);

... where the behavior is different depending on the style of setter used?

Also, I gotta wonder about the utility of translating null to &apos;null&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123666</commentid>
    <comment_count>5</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-05-29 19:01:07 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Do other non-string values types (in particular undefined) have similar
&gt; issues...
&gt; 
&gt; var undefinedVar;
&gt; var array = [1,2,3];
&gt; var number = 1.01;
&gt; localStorage.a = T;
&gt; localStorage.setItem(&apos;b&apos;, T);
&gt; 
&gt; ... where the behavior is different depending on the style of setter used?
&gt; 
&gt; Also, I gotta wonder about the utility of translating null to &apos;null&apos;.
&gt; 

I added in testing to do an int and a function in an attempt to catch such things, but I suppose I could add a new Array() to it, but it&apos;s pretty clear if you look at the code that null is a special case because strings can be null or an actual string.  </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123667</commentid>
    <comment_count>6</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-05-29 19:07:59 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Do other non-string values types (in particular undefined) have similar
&gt; issues...
&gt; 
&gt; var undefinedVar;
&gt; var array = [1,2,3];
&gt; var number = 1.01;
&gt; localStorage.a = T;
&gt; localStorage.setItem(&apos;b&apos;, T);
&gt; 
&gt; ... where the behavior is different depending on the style of setter used?
&gt; 
&gt; Also, I gotta wonder about the utility of translating null to &apos;null&apos;.
&gt; 

I added in testing to do an int and a function in an attempt to catch such things, but I suppose I could add a new Array() to it, but it&apos;s pretty clear if you look at the code that null is a special case because strings can be null or an actual string.  (In reply to comment #3)
&gt; (From update of attachment 30782 [review])
&gt; I supposed it&apos;s OK to put the fix down here at the lowest level, but the use of
&gt; the string &quot;null&quot; seems specific to JavaScript and so it seems to me this
&gt; should be handled in the JavaScript bindings.
&gt; 

I agree; I don&apos;t like having this outside of the JavaScript code either.  That said, the setter function is a pretty generic one that looks to be shared with many other things that where it being null is not desirable.  Maybe it&apos;s worth creating another one and creating a flag in the .idl bindings that&apos;d tell it to use it?  (Not sure exactly how that&apos;d work, but I could research it.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123673</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-05-29 20:24:32 -0700</bug_when>
    <thetext>This should be easily fixable in JSStorageCustom.cpp in the customPut function.  Replacing the valueToStringWithNullCheck(exec, value), with value.toString(exec) should do the trick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123674</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-05-29 20:45:58 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; This should be easily fixable in JSStorageCustom.cpp in the customPut function.
&gt;  Replacing the valueToStringWithNullCheck(exec, value), with
&gt; value.toString(exec) should do the trick.
&gt; 

Ugh.  You&apos;re right.  I was looking at the wrong function.  I&apos;m testing a new patch right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123675</commentid>
    <comment_count>9</comment_count>
      <attachid>30801</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-05-29 22:53:58 -0700</bug_when>
    <thetext>Created attachment 30801
Fix this the right way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123702</commentid>
    <comment_count>10</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-05-30 15:39:11 -0700</bug_when>
    <thetext>Landed in @r44288 and @r44289 (oops!)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30782</attachid>
            <date>2009-05-29 11:52:25 -0700</date>
            <delta_ts>2009-05-29 12:07:51 -0700</delta_ts>
            <desc>A potential fix.</desc>
            <filename>null.patch</filename>
            <type>text/plain</type>
            <size>8839</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDI2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMDUtMjkgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1OTcwCisgICAgICAgIExv
Y2FsU3RvcmFnZSBhbmQgU2Vzc2lvblN0b3JhZ2UncyBpbXBsaWNpdCBzZXR0ZXJzIGRvIG5vdCBj
b3JyZWN0bHkgCisgICAgICAgIGhhbmRsZSBudWxsLiAgQWRkIGEgY2hlY2sgZm9yIG51bGwgaW4g
aW50ZXJuYWxTZXRJdGVtLiAgSWYgaXQgaXMKKyAgICAgICAgbnVsbCwgc2V0IGl0IHRvICJudWxs
Ii4KKworICAgICAgICBUZXN0czogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdHJp
bmctY29udmVyc2lvbi5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL2RvbXN0b3JhZ2Uvc2Vz
c2lvbnN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24uaHRtbAorCisgICAgICAgICogc3RvcmFnZS9T
dG9yYWdlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6aW50ZXJuYWxT
ZXRJdGVtKToKKwogMjAwOS0wNS0yOSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlQXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VBcmVhLmNwcAkocmV2aXNpb24gNDQyNjUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFy
ZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw5ICs3NCw5IEBAIFN0cmluZyBTdG9yYWdlQXJl
YTo6aW50ZXJuYWxHZXRJdGVtKGNvbnMKICAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5nZXRJdGVt
KGtleSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6OmludGVybmFsU2V0SXRlbShjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBm
cmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWE6OmludGVybmFsU2V0SXRlbShjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiByYXdWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFt
ZSkKIHsKLSAgICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgpKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBy
YXdWYWx1ZS5pc051bGwoKSA/IFN0cmluZygibnVsbCIpIDogcmF3VmFsdWU7CiAgICAgCiAgICAg
aWYgKGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkg
ewogICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0
MjY1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjYgQEAKKzIwMDktMDUtMjkgIEplcmVteSBPcmxvdyAgPHNldCBFTUFJTF9BRERSRVNTIGVudmly
b25tZW50IHZhcmlhYmxlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdHJpbmctY29udmVy
c2lvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogc3Rv
cmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9yYWdlL3N0cmluZy1jb252ZXJzaW9uLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9yYWdl
L3N0cmluZy1jb252ZXJzaW9uLmh0bWw6IEFkZGVkLgorCisyMDA5LTA1LTI4ICBKZXJlbXkgT3Js
b3cgIDxzZXQgRU1BSUxfQUREUkVTUyBlbnZpcm9ubWVudCB2YXJpYWJsZT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFn
ZS9sb2NhbHN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0cmluZy1jb252ZXJzaW9u
Lmh0bWw6IEFkZGVkLgorCisyMDA5LTA1LTI4ICBKZXJlbXkgT3Jsb3cgIDxzZXQgRU1BSUxfQURE
UkVTUyBlbnZpcm9ubWVudCB2YXJpYWJsZT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3Ry
aW5nLWNvbnZlcnNpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2Rv
bXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0cmluZy1jb252ZXJzaW9uLmh0bWw6IEFkZGVkLgorCiAy
MDA5LTA1LTI5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChUZXN0IGZpeCkuCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2Rv
bXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0cmluZy1jb252ZXJzaW9uLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0
cmluZy1jb252ZXJzaW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACitUaGlzIHRlc3QgY2FzZSB2ZXJp
ZmllcyB0aGF0IGxvY2FsIHN0b3JhZ2Ugb25seSBzdG9yZXMgc3RyaW5ncy4KK0xlbmd0aCBpcyAw
CitUZXN0aW5nIGltcGxpY2l0IHNldHRlcnMKK1R5cGUvdmFsdWUgZm9yIG51bGwgaXMgc3RyaW5n
L251bGwKK1R5cGUvdmFsdWUgZm9yIDAgaXMgc3RyaW5nLzAKK1R5cGUvdmFsdWUgZm9yIGZ1bmN0
aW9uKCl7fSBpcyBzdHJpbmcvZnVuY3Rpb24gKCkge30KK1Rlc3RpbmcgZXhwbGljaXQgc2V0dGVy
cworVHlwZS92YWx1ZSBmb3IgbnVsbCBpcyBzdHJpbmcvbnVsbAorVHlwZS92YWx1ZSBmb3IgMCBp
cyBzdHJpbmcvMAorVHlwZS92YWx1ZSBmb3IgZnVuY3Rpb24oKXt9IGlzIHN0cmluZy9mdW5jdGlv
biAoKSB7fQorVGVzdGluZyBpbmRleCBzZXR0ZXJzCitUeXBlL3ZhbHVlIGZvciBudWxsIGlzIHN0
cmluZy9udWxsCitUeXBlL3ZhbHVlIGZvciAwIGlzIHN0cmluZy8wCitUeXBlL3ZhbHVlIGZvciBm
dW5jdGlvbigpe30gaXMgc3RyaW5nL2Z1bmN0aW9uICgpIHt9CisKSW5kZXg6IExheW91dFRlc3Rz
L3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24uaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3N0cmluZy1jb252ZXJzaW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9y
YWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0cmluZy1jb252ZXJzaW9uLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2NsZWFyTG9jYWxTdG9yYWdlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2lmIChs
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisKK2Z1bmN0aW9uIGxvZyhhKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJs
b2dnZXIiKS5pbm5lckhUTUwgKz0gYSArICI8YnI+IjsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgp
Cit7CisgICAgaWYgKCF3aW5kb3cubG9jYWxTdG9yYWdlKSB7CisgICAgICAgIGxvZygid2luZG93
LmxvY2FsU3RvcmFnZSBET0VTIE5PVCBleGlzdCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbG9nKCJMZW5ndGggaXMgIiArIGxvY2FsU3RvcmFnZS5sZW5ndGgpOworCisgICAgbG9n
KCJUZXN0aW5nIGltcGxpY2l0IHNldHRlcnMiKTsKKyAgICBsb2NhbFN0b3JhZ2UuYSA9IG51bGw7
CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZvciBudWxsIGlzICIgKyB0eXBlb2YgbG9jYWxTdG9yYWdl
LmEgKyAiLyIgKyBsb2NhbFN0b3JhZ2UuYSk7CisgICAgbG9jYWxTdG9yYWdlLmIgPSAwOworICAg
IGxvZygiVHlwZS92YWx1ZSBmb3IgMCBpcyAiICsgdHlwZW9mIGxvY2FsU3RvcmFnZS5iICsgIi8i
ICsgbG9jYWxTdG9yYWdlLmIpOworICAgIGxvY2FsU3RvcmFnZS5jID0gZnVuY3Rpb24oKXt9Owor
ICAgIGxvZygiVHlwZS92YWx1ZSBmb3IgZnVuY3Rpb24oKXt9IGlzICIgKyB0eXBlb2YgbG9jYWxT
dG9yYWdlLmMgKyAiLyIgKyBsb2NhbFN0b3JhZ2UuYyk7CisKKyAgICBsb2coIlRlc3RpbmcgZXhw
bGljaXQgc2V0dGVycyIpOworICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdkJywgbnVsbCk7Cisg
ICAgbG9nKCJUeXBlL3ZhbHVlIGZvciBudWxsIGlzICIgKyB0eXBlb2YgbG9jYWxTdG9yYWdlLmQg
KyAiLyIgKyBsb2NhbFN0b3JhZ2UuZCk7CisgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2UnLCAw
KTsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIDAgaXMgIiArIHR5cGVvZiBsb2NhbFN0b3JhZ2Uu
ZSArICIvIiArIGxvY2FsU3RvcmFnZS5lKTsKKyAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZics
IGZ1bmN0aW9uKCl7fSk7CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZvciBmdW5jdGlvbigpe30gaXMg
IiArIHR5cGVvZiBsb2NhbFN0b3JhZ2UuZiArICIvIiArIGxvY2FsU3RvcmFnZS5mKTsKKworICAg
IGxvZygiVGVzdGluZyBpbmRleCBzZXR0ZXJzIik7CisgICAgbG9jYWxTdG9yYWdlWydnJ10gPSBu
dWxsOworICAgIGxvZygiVHlwZS92YWx1ZSBmb3IgbnVsbCBpcyAiICsgdHlwZW9mIGxvY2FsU3Rv
cmFnZS5nICsgIi8iICsgbG9jYWxTdG9yYWdlLmcpOworICAgIGxvY2FsU3RvcmFnZVsnaCddID0g
MDsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIDAgaXMgIiArIHR5cGVvZiBsb2NhbFN0b3JhZ2Uu
aCArICIvIiArIGxvY2FsU3RvcmFnZS5oKTsKKyAgICBsb2NhbFN0b3JhZ2VbJ2knXSA9IGZ1bmN0
aW9uKCl7fTsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIGZ1bmN0aW9uKCl7fSBpcyAiICsgdHlw
ZW9mIGxvY2FsU3RvcmFnZS5pICsgIi8iICsgbG9jYWxTdG9yYWdlLmkpOworfQorCis8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CitUaGlzIHRlc3QgY2FzZSB2
ZXJpZmllcyB0aGF0IGxvY2FsIHN0b3JhZ2Ugb25seSBzdG9yZXMgc3RyaW5ncy4KKzxkaXYgaWQ9
ImxvZ2dlciI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9y
YWdlL2RvbXN0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24tZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zZXNzaW9u
c3RvcmFnZS9zdHJpbmctY29udmVyc2lvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uvc3RyaW5nLWNvbnZl
cnNpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACitUaGlzIHRl
c3QgY2FzZSB2ZXJpZmllcyB0aGF0IHNlc3Npb24gc3RvcmFnZSBvbmx5IHN0b3JlcyBzdHJpbmdz
LgorTGVuZ3RoIGlzIDAKK1Rlc3RpbmcgaW1wbGljaXQgc2V0dGVycworVHlwZS92YWx1ZSBmb3Ig
bnVsbCBpcyBzdHJpbmcvbnVsbAorVHlwZS92YWx1ZSBmb3IgMCBpcyBzdHJpbmcvMAorVHlwZS92
YWx1ZSBmb3IgZnVuY3Rpb24oKXt9IGlzIHN0cmluZy9mdW5jdGlvbiAoKSB7fQorVGVzdGluZyBl
eHBsaWNpdCBzZXR0ZXJzCitUeXBlL3ZhbHVlIGZvciBudWxsIGlzIHN0cmluZy9udWxsCitUeXBl
L3ZhbHVlIGZvciAwIGlzIHN0cmluZy8wCitUeXBlL3ZhbHVlIGZvciBmdW5jdGlvbigpe30gaXMg
c3RyaW5nL2Z1bmN0aW9uICgpIHt9CitUZXN0aW5nIGluZGV4IHNldHRlcnMKK1R5cGUvdmFsdWUg
Zm9yIG51bGwgaXMgc3RyaW5nL251bGwKK1R5cGUvdmFsdWUgZm9yIDAgaXMgc3RyaW5nLzAKK1R5
cGUvdmFsdWUgZm9yIGZ1bmN0aW9uKCl7fSBpcyBzdHJpbmcvZnVuY3Rpb24gKCkge30KKwpJbmRl
eDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9yYWdlL3N0cmluZy1j
b252ZXJzaW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9y
YWdlL3Nlc3Npb25zdG9yYWdlL3N0cmluZy1jb252ZXJzaW9uLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uvc3RyaW5nLWNv
bnZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY2xlYXJTZXNzaW9uU3RvcmFnZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorCitpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBsb2coYSkKK3sKKyAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibG9nZ2VyIikuaW5uZXJIVE1MICs9IGEgKyAiPGJyPiI7Cit9
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICghd2luZG93LnNlc3Npb25TdG9yYWdl
KSB7CisgICAgICAgIGxvZygid2luZG93LnNlc3Npb25TdG9yYWdlIERPRVMgTk9UIGV4aXN0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb2coIkxlbmd0aCBpcyAiICsgc2Vzc2lv
blN0b3JhZ2UubGVuZ3RoKTsKKworICAgIGxvZygiVGVzdGluZyBpbXBsaWNpdCBzZXR0ZXJzIik7
CisgICAgc2Vzc2lvblN0b3JhZ2UuYSA9IG51bGw7CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZvciBu
dWxsIGlzICIgKyB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UuYSArICIvIiArIHNlc3Npb25TdG9yYWdl
LmEpOworICAgIHNlc3Npb25TdG9yYWdlLmIgPSAwOworICAgIGxvZygiVHlwZS92YWx1ZSBmb3Ig
MCBpcyAiICsgdHlwZW9mIHNlc3Npb25TdG9yYWdlLmIgKyAiLyIgKyBzZXNzaW9uU3RvcmFnZS5i
KTsKKyAgICBzZXNzaW9uU3RvcmFnZS5jID0gZnVuY3Rpb24oKXt9OworICAgIGxvZygiVHlwZS92
YWx1ZSBmb3IgZnVuY3Rpb24oKXt9IGlzICIgKyB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UuYyArICIv
IiArIHNlc3Npb25TdG9yYWdlLmMpOworCisgICAgbG9nKCJUZXN0aW5nIGV4cGxpY2l0IHNldHRl
cnMiKTsKKyAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdkJywgbnVsbCk7CisgICAgbG9nKCJU
eXBlL3ZhbHVlIGZvciBudWxsIGlzICIgKyB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UuZCArICIvIiAr
IHNlc3Npb25TdG9yYWdlLmQpOworICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2UnLCAwKTsK
KyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIDAgaXMgIiArIHR5cGVvZiBzZXNzaW9uU3RvcmFnZS5l
ICsgIi8iICsgc2Vzc2lvblN0b3JhZ2UuZSk7CisgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgn
ZicsIGZ1bmN0aW9uKCl7fSk7CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZvciBmdW5jdGlvbigpe30g
aXMgIiArIHR5cGVvZiBzZXNzaW9uU3RvcmFnZS5mICsgIi8iICsgc2Vzc2lvblN0b3JhZ2UuZik7
CisKKyAgICBsb2coIlRlc3RpbmcgaW5kZXggc2V0dGVycyIpOworICAgIHNlc3Npb25TdG9yYWdl
WydnJ10gPSBudWxsOworICAgIGxvZygiVHlwZS92YWx1ZSBmb3IgbnVsbCBpcyAiICsgdHlwZW9m
IHNlc3Npb25TdG9yYWdlLmcgKyAiLyIgKyBzZXNzaW9uU3RvcmFnZS5nKTsKKyAgICBzZXNzaW9u
U3RvcmFnZVsnaCddID0gMDsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIDAgaXMgIiArIHR5cGVv
ZiBzZXNzaW9uU3RvcmFnZS5oICsgIi8iICsgc2Vzc2lvblN0b3JhZ2UuaCk7CisgICAgc2Vzc2lv
blN0b3JhZ2VbJ2knXSA9IGZ1bmN0aW9uKCl7fTsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIGZ1
bmN0aW9uKCl7fSBpcyAiICsgdHlwZW9mIHNlc3Npb25TdG9yYWdlLmkgKyAiLyIgKyBzZXNzaW9u
U3RvcmFnZS5pKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRl
c3QoKTsiPgorVGhpcyB0ZXN0IGNhc2UgdmVyaWZpZXMgdGhhdCBzZXNzaW9uIHN0b3JhZ2Ugb25s
eSBzdG9yZXMgc3RyaW5ncy4KKzxkaXYgaWQ9ImxvZ2dlciI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30784</attachid>
            <date>2009-05-29 11:56:07 -0700</date>
            <delta_ts>2009-05-29 22:53:58 -0700</delta_ts>
            <desc>Fixed changelog from last patch.</desc>
            <filename>null.patch</filename>
            <type>text/plain</type>
            <size>8526</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDI2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMDUtMjkgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1OTcwCisgICAgICAgIExv
Y2FsU3RvcmFnZSBhbmQgU2Vzc2lvblN0b3JhZ2UncyBpbXBsaWNpdCBzZXR0ZXJzIGRvIG5vdCBj
b3JyZWN0bHkgCisgICAgICAgIGhhbmRsZSBudWxsLiAgQWRkIGEgY2hlY2sgZm9yIG51bGwgaW4g
aW50ZXJuYWxTZXRJdGVtLiAgSWYgaXQgaXMKKyAgICAgICAgbnVsbCwgc2V0IGl0IHRvICJudWxs
Ii4KKworICAgICAgICBUZXN0czogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdHJp
bmctY29udmVyc2lvbi5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL2RvbXN0b3JhZ2Uvc2Vz
c2lvbnN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24uaHRtbAorCisgICAgICAgICogc3RvcmFnZS9T
dG9yYWdlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6aW50ZXJuYWxT
ZXRJdGVtKToKKwogMjAwOS0wNS0yOSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlQXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VBcmVhLmNwcAkocmV2aXNpb24gNDQyNjUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFy
ZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw5ICs3NCw5IEBAIFN0cmluZyBTdG9yYWdlQXJl
YTo6aW50ZXJuYWxHZXRJdGVtKGNvbnMKICAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5nZXRJdGVt
KGtleSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6OmludGVybmFsU2V0SXRlbShjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBm
cmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWE6OmludGVybmFsU2V0SXRlbShjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiByYXdWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFt
ZSkKIHsKLSAgICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgpKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBy
YXdWYWx1ZS5pc051bGwoKSA/IFN0cmluZygibnVsbCIpIDogcmF3VmFsdWU7CiAgICAgCiAgICAg
aWYgKGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkg
ewogICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0
MjY1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMDktMDUtMjkgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1OTcwCisgICAgICAgIExvY2FsU3RvcmFn
ZSBhbmQgU2Vzc2lvblN0b3JhZ2UncyBpbXBsaWNpdCBzZXR0ZXJzIGRvIG5vdCBjb3JyZWN0bHkK
KyAgICAgICAgaGFuZGxlIG51bGwuIEFkZCBhIGNoZWNrIGZvciBudWxsIGluIGludGVybmFsU2V0
SXRlbS4gSWYgaXQgaXMKKyAgICAgICAgbnVsbCwgc2V0IGl0IHRvICJudWxsIi4gCisKKyAgICAg
ICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0cmluZy1jb252ZXJzaW9uLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3Rv
cmFnZS9zdHJpbmctY29udmVyc2lvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2Rv
bXN0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24tZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uvc3RyaW5n
LWNvbnZlcnNpb24uaHRtbDogQWRkZWQuCisKIDIwMDktMDUtMjkgIE9saXZlciBIdW50ICA8b2xp
dmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKFRlc3QgZml4KS4K
SW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RyaW5n
LWNvbnZlcnNpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3Jh
Z2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3Rv
cmFnZS9zdHJpbmctY29udmVyc2lvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTUgQEAKK1RoaXMgdGVzdCBjYXNlIHZlcmlmaWVzIHRoYXQgbG9jYWwgc3RvcmFnZSBvbmx5
IHN0b3JlcyBzdHJpbmdzLgorTGVuZ3RoIGlzIDAKK1Rlc3RpbmcgaW1wbGljaXQgc2V0dGVycwor
VHlwZS92YWx1ZSBmb3IgbnVsbCBpcyBzdHJpbmcvbnVsbAorVHlwZS92YWx1ZSBmb3IgMCBpcyBz
dHJpbmcvMAorVHlwZS92YWx1ZSBmb3IgZnVuY3Rpb24oKXt9IGlzIHN0cmluZy9mdW5jdGlvbiAo
KSB7fQorVGVzdGluZyBleHBsaWNpdCBzZXR0ZXJzCitUeXBlL3ZhbHVlIGZvciBudWxsIGlzIHN0
cmluZy9udWxsCitUeXBlL3ZhbHVlIGZvciAwIGlzIHN0cmluZy8wCitUeXBlL3ZhbHVlIGZvciBm
dW5jdGlvbigpe30gaXMgc3RyaW5nL2Z1bmN0aW9uICgpIHt9CitUZXN0aW5nIGluZGV4IHNldHRl
cnMKK1R5cGUvdmFsdWUgZm9yIG51bGwgaXMgc3RyaW5nL251bGwKK1R5cGUvdmFsdWUgZm9yIDAg
aXMgc3RyaW5nLzAKK1R5cGUvdmFsdWUgZm9yIGZ1bmN0aW9uKCl7fSBpcyBzdHJpbmcvZnVuY3Rp
b24gKCkge30KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3Rv
cmFnZS9zdHJpbmctY29udmVyc2lvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0
b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24uaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uv
c3RyaW5nLWNvbnZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY2xlYXJMb2NhbFN0b3JhZ2UuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KKworaWYgKGxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gbG9nKGEpCit7Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZ2dlciIpLmlubmVySFRNTCArPSBhICsgIjxi
cj4iOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sb2NhbFN0
b3JhZ2UpIHsKKyAgICAgICAgbG9nKCJ3aW5kb3cubG9jYWxTdG9yYWdlIERPRVMgTk9UIGV4aXN0
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb2coIkxlbmd0aCBpcyAiICsgbG9j
YWxTdG9yYWdlLmxlbmd0aCk7CisKKyAgICBsb2coIlRlc3RpbmcgaW1wbGljaXQgc2V0dGVycyIp
OworICAgIGxvY2FsU3RvcmFnZS5hID0gbnVsbDsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIG51
bGwgaXMgIiArIHR5cGVvZiBsb2NhbFN0b3JhZ2UuYSArICIvIiArIGxvY2FsU3RvcmFnZS5hKTsK
KyAgICBsb2NhbFN0b3JhZ2UuYiA9IDA7CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZvciAwIGlzICIg
KyB0eXBlb2YgbG9jYWxTdG9yYWdlLmIgKyAiLyIgKyBsb2NhbFN0b3JhZ2UuYik7CisgICAgbG9j
YWxTdG9yYWdlLmMgPSBmdW5jdGlvbigpe307CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZvciBmdW5j
dGlvbigpe30gaXMgIiArIHR5cGVvZiBsb2NhbFN0b3JhZ2UuYyArICIvIiArIGxvY2FsU3RvcmFn
ZS5jKTsKKworICAgIGxvZygiVGVzdGluZyBleHBsaWNpdCBzZXR0ZXJzIik7CisgICAgbG9jYWxT
dG9yYWdlLnNldEl0ZW0oJ2QnLCBudWxsKTsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIG51bGwg
aXMgIiArIHR5cGVvZiBsb2NhbFN0b3JhZ2UuZCArICIvIiArIGxvY2FsU3RvcmFnZS5kKTsKKyAg
ICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZScsIDApOworICAgIGxvZygiVHlwZS92YWx1ZSBmb3Ig
MCBpcyAiICsgdHlwZW9mIGxvY2FsU3RvcmFnZS5lICsgIi8iICsgbG9jYWxTdG9yYWdlLmUpOwor
ICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdmJywgZnVuY3Rpb24oKXt9KTsKKyAgICBsb2coIlR5
cGUvdmFsdWUgZm9yIGZ1bmN0aW9uKCl7fSBpcyAiICsgdHlwZW9mIGxvY2FsU3RvcmFnZS5mICsg
Ii8iICsgbG9jYWxTdG9yYWdlLmYpOworCisgICAgbG9nKCJUZXN0aW5nIGluZGV4IHNldHRlcnMi
KTsKKyAgICBsb2NhbFN0b3JhZ2VbJ2cnXSA9IG51bGw7CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZv
ciBudWxsIGlzICIgKyB0eXBlb2YgbG9jYWxTdG9yYWdlLmcgKyAiLyIgKyBsb2NhbFN0b3JhZ2Uu
Zyk7CisgICAgbG9jYWxTdG9yYWdlWydoJ10gPSAwOworICAgIGxvZygiVHlwZS92YWx1ZSBmb3Ig
MCBpcyAiICsgdHlwZW9mIGxvY2FsU3RvcmFnZS5oICsgIi8iICsgbG9jYWxTdG9yYWdlLmgpOwor
ICAgIGxvY2FsU3RvcmFnZVsnaSddID0gZnVuY3Rpb24oKXt9OworICAgIGxvZygiVHlwZS92YWx1
ZSBmb3IgZnVuY3Rpb24oKXt9IGlzICIgKyB0eXBlb2YgbG9jYWxTdG9yYWdlLmkgKyAiLyIgKyBs
b2NhbFN0b3JhZ2UuaSk7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCk7Ij4KK1RoaXMgdGVzdCBjYXNlIHZlcmlmaWVzIHRoYXQgbG9jYWwgc3RvcmFnZSBv
bmx5IHN0b3JlcyBzdHJpbmdzLgorPGRpdiBpZD0ibG9nZ2VyIj48L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zZXNzaW9uc3RvcmFn
ZS9zdHJpbmctY29udmVyc2lvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9yYWdlL3N0cmluZy1jb252ZXJzaW9uLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFn
ZS9zZXNzaW9uc3RvcmFnZS9zdHJpbmctY29udmVyc2lvbi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgdGVzdCBjYXNlIHZlcmlmaWVzIHRoYXQgc2Vzc2lv
biBzdG9yYWdlIG9ubHkgc3RvcmVzIHN0cmluZ3MuCitMZW5ndGggaXMgMAorVGVzdGluZyBpbXBs
aWNpdCBzZXR0ZXJzCitUeXBlL3ZhbHVlIGZvciBudWxsIGlzIHN0cmluZy9udWxsCitUeXBlL3Zh
bHVlIGZvciAwIGlzIHN0cmluZy8wCitUeXBlL3ZhbHVlIGZvciBmdW5jdGlvbigpe30gaXMgc3Ry
aW5nL2Z1bmN0aW9uICgpIHt9CitUZXN0aW5nIGV4cGxpY2l0IHNldHRlcnMKK1R5cGUvdmFsdWUg
Zm9yIG51bGwgaXMgc3RyaW5nL251bGwKK1R5cGUvdmFsdWUgZm9yIDAgaXMgc3RyaW5nLzAKK1R5
cGUvdmFsdWUgZm9yIGZ1bmN0aW9uKCl7fSBpcyBzdHJpbmcvZnVuY3Rpb24gKCkge30KK1Rlc3Rp
bmcgaW5kZXggc2V0dGVycworVHlwZS92YWx1ZSBmb3IgbnVsbCBpcyBzdHJpbmcvbnVsbAorVHlw
ZS92YWx1ZSBmb3IgMCBpcyBzdHJpbmcvMAorVHlwZS92YWx1ZSBmb3IgZnVuY3Rpb24oKXt9IGlz
IHN0cmluZy9mdW5jdGlvbiAoKSB7fQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0
b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uvc3RyaW5nLWNv
bnZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3Rv
cmFnZS9zZXNzaW9uc3RvcmFnZS9zdHJpbmctY29udmVyc2lvbi5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU0IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9j
bGVhclNlc3Npb25TdG9yYWdlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2lmIChsYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisK
K2Z1bmN0aW9uIGxvZyhhKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dnZXIi
KS5pbm5lckhUTUwgKz0gYSArICI8YnI+IjsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7Cisg
ICAgaWYgKCF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHsKKyAgICAgICAgbG9nKCJ3aW5kb3cuc2Vz
c2lvblN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGxvZygiTGVuZ3RoIGlzICIgKyBzZXNzaW9uU3RvcmFnZS5sZW5ndGgpOworCisgICAgbG9n
KCJUZXN0aW5nIGltcGxpY2l0IHNldHRlcnMiKTsKKyAgICBzZXNzaW9uU3RvcmFnZS5hID0gbnVs
bDsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIG51bGwgaXMgIiArIHR5cGVvZiBzZXNzaW9uU3Rv
cmFnZS5hICsgIi8iICsgc2Vzc2lvblN0b3JhZ2UuYSk7CisgICAgc2Vzc2lvblN0b3JhZ2UuYiA9
IDA7CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZvciAwIGlzICIgKyB0eXBlb2Ygc2Vzc2lvblN0b3Jh
Z2UuYiArICIvIiArIHNlc3Npb25TdG9yYWdlLmIpOworICAgIHNlc3Npb25TdG9yYWdlLmMgPSBm
dW5jdGlvbigpe307CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZvciBmdW5jdGlvbigpe30gaXMgIiAr
IHR5cGVvZiBzZXNzaW9uU3RvcmFnZS5jICsgIi8iICsgc2Vzc2lvblN0b3JhZ2UuYyk7CisKKyAg
ICBsb2coIlRlc3RpbmcgZXhwbGljaXQgc2V0dGVycyIpOworICAgIHNlc3Npb25TdG9yYWdlLnNl
dEl0ZW0oJ2QnLCBudWxsKTsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIG51bGwgaXMgIiArIHR5
cGVvZiBzZXNzaW9uU3RvcmFnZS5kICsgIi8iICsgc2Vzc2lvblN0b3JhZ2UuZCk7CisgICAgc2Vz
c2lvblN0b3JhZ2Uuc2V0SXRlbSgnZScsIDApOworICAgIGxvZygiVHlwZS92YWx1ZSBmb3IgMCBp
cyAiICsgdHlwZW9mIHNlc3Npb25TdG9yYWdlLmUgKyAiLyIgKyBzZXNzaW9uU3RvcmFnZS5lKTsK
KyAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdmJywgZnVuY3Rpb24oKXt9KTsKKyAgICBsb2co
IlR5cGUvdmFsdWUgZm9yIGZ1bmN0aW9uKCl7fSBpcyAiICsgdHlwZW9mIHNlc3Npb25TdG9yYWdl
LmYgKyAiLyIgKyBzZXNzaW9uU3RvcmFnZS5mKTsKKworICAgIGxvZygiVGVzdGluZyBpbmRleCBz
ZXR0ZXJzIik7CisgICAgc2Vzc2lvblN0b3JhZ2VbJ2cnXSA9IG51bGw7CisgICAgbG9nKCJUeXBl
L3ZhbHVlIGZvciBudWxsIGlzICIgKyB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UuZyArICIvIiArIHNl
c3Npb25TdG9yYWdlLmcpOworICAgIHNlc3Npb25TdG9yYWdlWydoJ10gPSAwOworICAgIGxvZygi
VHlwZS92YWx1ZSBmb3IgMCBpcyAiICsgdHlwZW9mIHNlc3Npb25TdG9yYWdlLmggKyAiLyIgKyBz
ZXNzaW9uU3RvcmFnZS5oKTsKKyAgICBzZXNzaW9uU3RvcmFnZVsnaSddID0gZnVuY3Rpb24oKXt9
OworICAgIGxvZygiVHlwZS92YWx1ZSBmb3IgZnVuY3Rpb24oKXt9IGlzICIgKyB0eXBlb2Ygc2Vz
c2lvblN0b3JhZ2UuaSArICIvIiArIHNlc3Npb25TdG9yYWdlLmkpOworfQorCis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CitUaGlzIHRlc3QgY2FzZSB2ZXJp
ZmllcyB0aGF0IHNlc3Npb24gc3RvcmFnZSBvbmx5IHN0b3JlcyBzdHJpbmdzLgorPGRpdiBpZD0i
bG9nZ2VyIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30801</attachid>
            <date>2009-05-29 22:53:58 -0700</date>
            <delta_ts>2009-05-30 10:21:38 -0700</delta_ts>
            <desc>Fix this the right way.</desc>
            <filename>null.patch</filename>
            <type>text/plain</type>
            <size>8475</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDI4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMDUtMjkgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TG9jYWxTdG9yYWdlIGFuZCBTZXNzaW9uU3RvcmFnZSdzIGltcGxpY2l0IHNldHRlcnMgZG8gbm90
IGNvcnJlY3RseSAKKyAgICAgICAgaGFuZGxlIG51bGwuICBUaGUgY3VzdG9tIEpTIGJpbmRpbmdz
IHNob3VsZCBjb252ZXJ0IHRvIHN0cmluZ3MKKyAgICAgICAgdW5jb25kaXRpb25hbGx5IGFuZCBu
b3QgdHJ5IHRvIGhhbmRsZSBudWxsIHNwZWNpYWxseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1OTcwCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24uaHRtbAorICAgICAgICAg
ICAgICAgc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9yYWdlL3N0cmluZy1jb252ZXJzaW9u
Lmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1N0b3JhZ2U6OmN1c3RvbVB1dCk6CisKIDIwMDktMDUtMjkgIE5pa29s
YXMgWmltbWVybWFubiAgPG5pa29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlrb3MuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiA0NDI2NSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBA
QCBib29sIEpTU3RvcmFnZTo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlCiAgICAgaWYgKHByb3Rv
dHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmhhc1Byb3BlcnR5KGV4ZWMs
IHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBTdHJpbmcg
c3RyaW5nVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7Cisg
ICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDQ0MjgzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDUtMjkgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTG9jYWxTdG9yYWdlIGFuZCBTZXNzaW9uU3RvcmFnZSdzIGltcGxpY2l0IHNldHRlcnMgZG8g
bm90IGNvcnJlY3RseQorICAgICAgICBoYW5kbGUgbnVsbC4gIFRoZSBjdXN0b20gSlMgYmluZGlu
Z3Mgc2hvdWxkIGNvbnZlcnQgdG8gc3RyaW5ncworICAgICAgICB1bmNvbmRpdGlvbmFsbHkgYW5k
IG5vdCB0cnkgdG8gaGFuZGxlIG51bGwgc3BlY2lhbGx5LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU5NzAKKworICAgICAgICAqIHN0b3JhZ2UvZG9t
c3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24tZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0cmluZy1jb252
ZXJzaW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9zZXNzaW9u
c3RvcmFnZS9zdHJpbmctY29udmVyc2lvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN0b3JhZ2UvZG9tc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS9zdHJpbmctY29udmVyc2lvbi5odG1s
OiBBZGRlZC4KKwogMjAwOS0wNS0yOCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bmlrb2xhcy56aW1t
ZXJtYW5uQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9yZ2UgU3Rh
aWtvcy4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uv
c3RyaW5nLWNvbnZlcnNpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9zdHJpbmctY29udmVyc2lvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTUgQEAKK1RoaXMgdGVzdCBjYXNlIHZlcmlmaWVzIHRoYXQgbG9jYWwgc3RvcmFn
ZSBvbmx5IHN0b3JlcyBzdHJpbmdzLgorTGVuZ3RoIGlzIDAKK1Rlc3RpbmcgaW1wbGljaXQgc2V0
dGVycworVHlwZS92YWx1ZSBmb3IgbnVsbCBpcyBzdHJpbmcvbnVsbAorVHlwZS92YWx1ZSBmb3Ig
MCBpcyBzdHJpbmcvMAorVHlwZS92YWx1ZSBmb3IgZnVuY3Rpb24oKXt9IGlzIHN0cmluZy9mdW5j
dGlvbiAoKSB7fQorVGVzdGluZyBleHBsaWNpdCBzZXR0ZXJzCitUeXBlL3ZhbHVlIGZvciBudWxs
IGlzIHN0cmluZy9udWxsCitUeXBlL3ZhbHVlIGZvciAwIGlzIHN0cmluZy8wCitUeXBlL3ZhbHVl
IGZvciBmdW5jdGlvbigpe30gaXMgc3RyaW5nL2Z1bmN0aW9uICgpIHt9CitUZXN0aW5nIGluZGV4
IHNldHRlcnMKK1R5cGUvdmFsdWUgZm9yIG51bGwgaXMgc3RyaW5nL251bGwKK1R5cGUvdmFsdWUg
Zm9yIDAgaXMgc3RyaW5nLzAKK1R5cGUvdmFsdWUgZm9yIGZ1bmN0aW9uKCl7fSBpcyBzdHJpbmcv
ZnVuY3Rpb24gKCkge30KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9zdHJpbmctY29udmVyc2lvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24uaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0
b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY2xlYXJMb2NhbFN0b3Jh
Z2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworaWYgKGxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gbG9nKGEp
Cit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZ2dlciIpLmlubmVySFRNTCArPSBh
ICsgIjxicj4iOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5s
b2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgbG9nKCJ3aW5kb3cubG9jYWxTdG9yYWdlIERPRVMgTk9U
IGV4aXN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb2coIkxlbmd0aCBpcyAi
ICsgbG9jYWxTdG9yYWdlLmxlbmd0aCk7CisKKyAgICBsb2coIlRlc3RpbmcgaW1wbGljaXQgc2V0
dGVycyIpOworICAgIGxvY2FsU3RvcmFnZS5hID0gbnVsbDsKKyAgICBsb2coIlR5cGUvdmFsdWUg
Zm9yIG51bGwgaXMgIiArIHR5cGVvZiBsb2NhbFN0b3JhZ2UuYSArICIvIiArIGxvY2FsU3RvcmFn
ZS5hKTsKKyAgICBsb2NhbFN0b3JhZ2UuYiA9IDA7CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZvciAw
IGlzICIgKyB0eXBlb2YgbG9jYWxTdG9yYWdlLmIgKyAiLyIgKyBsb2NhbFN0b3JhZ2UuYik7Cisg
ICAgbG9jYWxTdG9yYWdlLmMgPSBmdW5jdGlvbigpe307CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZv
ciBmdW5jdGlvbigpe30gaXMgIiArIHR5cGVvZiBsb2NhbFN0b3JhZ2UuYyArICIvIiArIGxvY2Fs
U3RvcmFnZS5jKTsKKworICAgIGxvZygiVGVzdGluZyBleHBsaWNpdCBzZXR0ZXJzIik7CisgICAg
bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2QnLCBudWxsKTsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9y
IG51bGwgaXMgIiArIHR5cGVvZiBsb2NhbFN0b3JhZ2UuZCArICIvIiArIGxvY2FsU3RvcmFnZS5k
KTsKKyAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZScsIDApOworICAgIGxvZygiVHlwZS92YWx1
ZSBmb3IgMCBpcyAiICsgdHlwZW9mIGxvY2FsU3RvcmFnZS5lICsgIi8iICsgbG9jYWxTdG9yYWdl
LmUpOworICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdmJywgZnVuY3Rpb24oKXt9KTsKKyAgICBs
b2coIlR5cGUvdmFsdWUgZm9yIGZ1bmN0aW9uKCl7fSBpcyAiICsgdHlwZW9mIGxvY2FsU3RvcmFn
ZS5mICsgIi8iICsgbG9jYWxTdG9yYWdlLmYpOworCisgICAgbG9nKCJUZXN0aW5nIGluZGV4IHNl
dHRlcnMiKTsKKyAgICBsb2NhbFN0b3JhZ2VbJ2cnXSA9IG51bGw7CisgICAgbG9nKCJUeXBlL3Zh
bHVlIGZvciBudWxsIGlzICIgKyB0eXBlb2YgbG9jYWxTdG9yYWdlLmcgKyAiLyIgKyBsb2NhbFN0
b3JhZ2UuZyk7CisgICAgbG9jYWxTdG9yYWdlWydoJ10gPSAwOworICAgIGxvZygiVHlwZS92YWx1
ZSBmb3IgMCBpcyAiICsgdHlwZW9mIGxvY2FsU3RvcmFnZS5oICsgIi8iICsgbG9jYWxTdG9yYWdl
LmgpOworICAgIGxvY2FsU3RvcmFnZVsnaSddID0gZnVuY3Rpb24oKXt9OworICAgIGxvZygiVHlw
ZS92YWx1ZSBmb3IgZnVuY3Rpb24oKXt9IGlzICIgKyB0eXBlb2YgbG9jYWxTdG9yYWdlLmkgKyAi
LyIgKyBsb2NhbFN0b3JhZ2UuaSk7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgdGVzdCBjYXNlIHZlcmlmaWVzIHRoYXQgbG9jYWwgc3Rv
cmFnZSBvbmx5IHN0b3JlcyBzdHJpbmdzLgorPGRpdiBpZD0ibG9nZ2VyIj48L2Rpdj4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zZXNzaW9u
c3RvcmFnZS9zdHJpbmctY29udmVyc2lvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9yYWdlL3N0cmluZy1jb252ZXJz
aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9t
c3RvcmFnZS9zZXNzaW9uc3RvcmFnZS9zdHJpbmctY29udmVyc2lvbi1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgdGVzdCBjYXNlIHZlcmlmaWVzIHRoYXQg
c2Vzc2lvbiBzdG9yYWdlIG9ubHkgc3RvcmVzIHN0cmluZ3MuCitMZW5ndGggaXMgMAorVGVzdGlu
ZyBpbXBsaWNpdCBzZXR0ZXJzCitUeXBlL3ZhbHVlIGZvciBudWxsIGlzIHN0cmluZy9udWxsCitU
eXBlL3ZhbHVlIGZvciAwIGlzIHN0cmluZy8wCitUeXBlL3ZhbHVlIGZvciBmdW5jdGlvbigpe30g
aXMgc3RyaW5nL2Z1bmN0aW9uICgpIHt9CitUZXN0aW5nIGV4cGxpY2l0IHNldHRlcnMKK1R5cGUv
dmFsdWUgZm9yIG51bGwgaXMgc3RyaW5nL251bGwKK1R5cGUvdmFsdWUgZm9yIDAgaXMgc3RyaW5n
LzAKK1R5cGUvdmFsdWUgZm9yIGZ1bmN0aW9uKCl7fSBpcyBzdHJpbmcvZnVuY3Rpb24gKCkge30K
K1Rlc3RpbmcgaW5kZXggc2V0dGVycworVHlwZS92YWx1ZSBmb3IgbnVsbCBpcyBzdHJpbmcvbnVs
bAorVHlwZS92YWx1ZSBmb3IgMCBpcyBzdHJpbmcvMAorVHlwZS92YWx1ZSBmb3IgZnVuY3Rpb24o
KXt9IGlzIHN0cmluZy9mdW5jdGlvbiAoKSB7fQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdl
L2RvbXN0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uvc3RyaW5nLWNvbnZlcnNpb24uaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2Uvc3Ry
aW5nLWNvbnZlcnNpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uv
ZG9tc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS9zdHJpbmctY29udmVyc2lvbi5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU0IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9jbGVhclNlc3Npb25TdG9yYWdlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2lmIChs
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisKK2Z1bmN0aW9uIGxvZyhhKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJs
b2dnZXIiKS5pbm5lckhUTUwgKz0gYSArICI8YnI+IjsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgp
Cit7CisgICAgaWYgKCF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHsKKyAgICAgICAgbG9nKCJ3aW5k
b3cuc2Vzc2lvblN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGxvZygiTGVuZ3RoIGlzICIgKyBzZXNzaW9uU3RvcmFnZS5sZW5ndGgpOworCisg
ICAgbG9nKCJUZXN0aW5nIGltcGxpY2l0IHNldHRlcnMiKTsKKyAgICBzZXNzaW9uU3RvcmFnZS5h
ID0gbnVsbDsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIG51bGwgaXMgIiArIHR5cGVvZiBzZXNz
aW9uU3RvcmFnZS5hICsgIi8iICsgc2Vzc2lvblN0b3JhZ2UuYSk7CisgICAgc2Vzc2lvblN0b3Jh
Z2UuYiA9IDA7CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZvciAwIGlzICIgKyB0eXBlb2Ygc2Vzc2lv
blN0b3JhZ2UuYiArICIvIiArIHNlc3Npb25TdG9yYWdlLmIpOworICAgIHNlc3Npb25TdG9yYWdl
LmMgPSBmdW5jdGlvbigpe307CisgICAgbG9nKCJUeXBlL3ZhbHVlIGZvciBmdW5jdGlvbigpe30g
aXMgIiArIHR5cGVvZiBzZXNzaW9uU3RvcmFnZS5jICsgIi8iICsgc2Vzc2lvblN0b3JhZ2UuYyk7
CisKKyAgICBsb2coIlRlc3RpbmcgZXhwbGljaXQgc2V0dGVycyIpOworICAgIHNlc3Npb25TdG9y
YWdlLnNldEl0ZW0oJ2QnLCBudWxsKTsKKyAgICBsb2coIlR5cGUvdmFsdWUgZm9yIG51bGwgaXMg
IiArIHR5cGVvZiBzZXNzaW9uU3RvcmFnZS5kICsgIi8iICsgc2Vzc2lvblN0b3JhZ2UuZCk7Cisg
ICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZScsIDApOworICAgIGxvZygiVHlwZS92YWx1ZSBm
b3IgMCBpcyAiICsgdHlwZW9mIHNlc3Npb25TdG9yYWdlLmUgKyAiLyIgKyBzZXNzaW9uU3RvcmFn
ZS5lKTsKKyAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdmJywgZnVuY3Rpb24oKXt9KTsKKyAg
ICBsb2coIlR5cGUvdmFsdWUgZm9yIGZ1bmN0aW9uKCl7fSBpcyAiICsgdHlwZW9mIHNlc3Npb25T
dG9yYWdlLmYgKyAiLyIgKyBzZXNzaW9uU3RvcmFnZS5mKTsKKworICAgIGxvZygiVGVzdGluZyBp
bmRleCBzZXR0ZXJzIik7CisgICAgc2Vzc2lvblN0b3JhZ2VbJ2cnXSA9IG51bGw7CisgICAgbG9n
KCJUeXBlL3ZhbHVlIGZvciBudWxsIGlzICIgKyB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UuZyArICIv
IiArIHNlc3Npb25TdG9yYWdlLmcpOworICAgIHNlc3Npb25TdG9yYWdlWydoJ10gPSAwOworICAg
IGxvZygiVHlwZS92YWx1ZSBmb3IgMCBpcyAiICsgdHlwZW9mIHNlc3Npb25TdG9yYWdlLmggKyAi
LyIgKyBzZXNzaW9uU3RvcmFnZS5oKTsKKyAgICBzZXNzaW9uU3RvcmFnZVsnaSddID0gZnVuY3Rp
b24oKXt9OworICAgIGxvZygiVHlwZS92YWx1ZSBmb3IgZnVuY3Rpb24oKXt9IGlzICIgKyB0eXBl
b2Ygc2Vzc2lvblN0b3JhZ2UuaSArICIvIiArIHNlc3Npb25TdG9yYWdlLmkpOworfQorCis8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CitUaGlzIHRlc3QgY2Fz
ZSB2ZXJpZmllcyB0aGF0IHNlc3Npb24gc3RvcmFnZSBvbmx5IHN0b3JlcyBzdHJpbmdzLgorPGRp
diBpZD0ibG9nZ2VyIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="15629"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>