<?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>40172</bug_id>
          
          <creation_ts>2010-06-04 10:27:07 -0700</creation_ts>
          <short_desc>HTML5 parser should be within 1% of old parser performance</short_desc>
          <delta_ts>2010-06-04 23:26:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>39259</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>234266</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 10:27:07 -0700</bug_when>
    <thetext>HTML5 parser should be within 1% of old parser performance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234268</commentid>
    <comment_count>1</comment_count>
      <attachid>57893</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 10:30:06 -0700</bug_when>
    <thetext>Created attachment 57893
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234273</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-04 10:36:03 -0700</bug_when>
    <thetext>Attachment 57893 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/3076033</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234275</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-04 10:37:10 -0700</bug_when>
    <thetext>Attachment 57893 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3086045</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234277</commentid>
    <comment_count>4</comment_count>
      <attachid>57893</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-04 10:39:27 -0700</bug_when>
    <thetext>Comment on attachment 57893
Patch

Seems we should understand which of these changes actually matter.  The m_appropriateEndTagName one seems unrelated.

Also, this changes behavior.  This should fix the \0 layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234278</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-04 10:41:35 -0700</bug_when>
    <thetext>I don’t think that we should limit ourselves to “within 1%”. It would be fine with me if it was 10% faster ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234280</commentid>
    <comment_count>6</comment_count>
      <attachid>57893</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-04 10:43:36 -0700</bug_when>
    <thetext>Comment on attachment 57893
Patch

Looks like this doesn&apos;t compile either because of distinct Vector types. To assign between vectors, currently the inline capacities need to be identical. Also, it&apos;s likely to be inefficient to assign between vectors with inline capacities since the characters need to be copied. We could add code to make assignment between vectors with different inline capacities possible, but it might be worth looking at a design that to uses pointers a bit more so that is not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234289</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-04 10:59:56 -0700</bug_when>
    <thetext>Attachment 57893 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3143019</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234295</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 11:03:50 -0700</bug_when>
    <thetext>There is a function for assigning between vectors of different inline capacities:

    template&lt;typename T, size_t inlineCapacity&gt;
    template&lt;size_t otherCapacity&gt;
    Vector&lt;T, inlineCapacity&gt;&amp; Vector&lt;T, inlineCapacity&gt;::operator=(const Vector&lt;T, otherCapacity&gt;&amp; other)

I had to change this locally to get it to build, but I must have lost the change somehow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234297</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 11:07:25 -0700</bug_when>
    <thetext>&gt; Also, it&apos;s likely to be inefficient to assign between vectors with inline capacities since the
&gt; characters need to be copied. We could add code to make assignment between vectors with
&gt; different inline capacities possible, but it might be worth looking at a design that to uses
&gt; pointers a bit more so that is not needed.

That&apos;s an interesting idea.  I&apos;d have to look at the code to how we can avoid more copies.  For the moment, this patch seems like a big perf win, so I&apos;m inclined to start with it (once it builds) and then iterate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234299</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 11:12:01 -0700</bug_when>
    <thetext>Benchmark numbers:

HTML5 parser w/ patch:

Running 20 times
Ignoring warm-up run (3176)
2805
2795
2810
2810
2789
2817
2822
2814
2811
2840
2826
2826
2831
2845
2841
2832
2849
2857
2849
2841

avg 2825.5
stdev 18.481071397513727

Old parser:

Running 20 times
Ignoring warm-up run (3103)
2769
2781
2770
2771
2786
2783
2775
2780
2796
2787
2784
2808
2799
2795
2814
2807
2810
2805
2833
2822

avg 2793.75
stdev 17.699929378390188</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234303</commentid>
    <comment_count>11</comment_count>
      <attachid>57899</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 11:19:27 -0700</bug_when>
    <thetext>Created attachment 57899
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234332</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-04 12:24:53 -0700</bug_when>
    <thetext>Attachment 57899 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3099036</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234354</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-04 13:08:28 -0700</bug_when>
    <thetext>../../JavaScriptCore/wtf/Vector.h: In member function ‘WTF::Vector&lt;T, inlineCapacity&gt;&amp; WTF::Vector&lt;T, inlineCapacity&gt;::operator=(const WTF::Vector&lt;T, otherCapacity&gt;&amp;) [with unsigned int otherCapacity = 1024u, T = short unsigned int, unsigned int inlineCapacity = 32u]’:
../../WebCore/html/HTML5Lexer.cpp:1589:   instantiated from here
../../JavaScriptCore/wtf/Vector.h:706: error: invalid cast from type ‘const WTF::Vector&lt;short unsigned int, 1024u&gt;’ to type ‘const void*’
make: *** [out/Release/obj.target/webcore/../../WebCore/html/HTML5Lexer.o] Error 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234355</commentid>
    <comment_count>14</comment_count>
      <attachid>57899</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-04 13:09:42 -0700</bug_when>
    <thetext>Comment on attachment 57899
Patch

Would be nice to know which part of this is actually the big speedup.  In general I like the concept, but can&apos;t really r+ since it would break the world. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234357</commentid>
    <comment_count>15</comment_count>
      <attachid>57908</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 13:17:58 -0700</bug_when>
    <thetext>Created attachment 57908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234360</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-04 13:36:47 -0700</bug_when>
    <thetext>Attachment 57899 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3068045</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234436</commentid>
    <comment_count>17</comment_count>
      <attachid>57908</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-04 17:34:13 -0700</bug_when>
    <thetext>Comment on attachment 57908
Patch

Why reinterpret_cast? I&apos;m pretty sure that static_cast will work. Another possibility would be to use local variables or a helper function then you would need no casting at all.

    // Helper function that does a type conversion.
    inline bool typelessPointersAreEqual(const void* a, const void* b) { return a == b; }

    if (typelessPointersAreEqual(&amp;other, this))
        return *this;

I think that&apos;s way better than a reinterpret_cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234475</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 19:14:42 -0700</bug_when>
    <thetext>&gt; I think that&apos;s way better than a reinterpret_cast.

Ok.  They&apos;re pretty close semantically because static_cast to void* doesn&apos;t do any of the multi-inheritance offsets that static_cast usually does.  Using a helper function is just getting the compiler to generate the static_cast implicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234478</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 19:21:36 -0700</bug_when>
    <thetext>Actually, the more I think about it, that check can probably be removed.  If the objects occupy the same address, they must have the same inline capacity, which means we&apos;ll call the more specific template.

We can change it into an ASSERT if we&apos;re scared of just deleting it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234530</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-04 22:27:21 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; They&apos;re pretty close semantically because static_cast to void* doesn&apos;t do any of the multi-inheritance offsets that static_cast usually does.

Sure, what the two casts do is pretty close. But the point of the differently named casts is more about cases where they the casts can&apos;t be used be used. A reinterpret_cast could convert an integer to a pointer for example, but when you see a static_cast you know that’s not going on even without looking at the rest of the line of code. I don’t want to see these sorts of conversions to void* when I grep through the code for all reinterpret_casts.

&gt; Using a helper function is just getting the compiler to generate the static_cast implicitly.

That’s a funny way to put it. In my opinion, relying on normal type conversion rules and avoiding a cast is not “just a way to generate [a cast]”. Casts can force the compiler to perform conversions that normally would not be done. Type conversion does a more limited set.

It’s great, though, that you can avoid the check entirely. I do think you should just omit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234537</commentid>
    <comment_count>21</comment_count>
      <attachid>57962</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 22:48:12 -0700</bug_when>
    <thetext>Created attachment 57962
patch with check converted to assert</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234542</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 22:57:48 -0700</bug_when>
    <thetext>Thanks Darin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234555</commentid>
    <comment_count>23</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-04 23:26:03 -0700</bug_when>
    <thetext>Committed r60738: &lt;http://trac.webkit.org/changeset/60738&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57893</attachid>
            <date>2010-06-04 10:30:06 -0700</date>
            <delta_ts>2010-06-04 11:19:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40172-20100604103004.patch</filename>
            <type>text/plain</type>
            <size>9978</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzQwZjVlNjZhNmZhZjVhMDBmMmYyMThlMmRkZjVmNzJlYjU4NDNlYi4uNzlhMGYxZGY2ZGQ1MDRm
NWI2NWZkMDI3MDAzMTFmYTE3NTY5NzcyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wNi0wNCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEhUTUw1IHBhcnNlciBzaG91bGQgYmUgd2l0aGluIDElIG9m
IG9sZCBwYXJzZXIgcGVyZm9ybWFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMTcyCisKKyAgICAgICAgU3RvcCB1c2luZyBhZG9wdCgpLiAgSSB0
aGluayB0aGlzIGZ1bmN0aW9uIGlzIGNhdXNlIHVzIHRvIGRvIGV4dHJhCisgICAgICAgIG1hbGxv
Y3MgdGhhdCBhcmUgaHVydGluZyBwZXJmb3JtYW5jZS4gIEluc3RlYWQgb2YgY2FjaGluZyBBdG9t
aWNTdHJpbmcKKyAgICAgICAgb24gSFRNTDVUb2tlbiwganVzdCB1c2UgdGhlIEF0b21pY1N0cmlu
ZyBvbiB0aGUgb2xkIHRva2VuLiAgQWxzbywKKyAgICAgICAgcmVzZXJ2ZSBpbmxpbmUgY2FwYWNp
dHkgZm9yIDEwIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiBodG1sL0hUTUw1TGV4ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTDVMZXhlcjo6aXNBcHByb3ByaWF0ZUVuZFRhZyk6CisgICAg
ICAgICogaHRtbC9IVE1MNUxleGVyLmg6CisgICAgICAgICogaHRtbC9IVE1MNVRva2VuLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MNVRva2VuOjpiZWdpblN0YXJ0VGFnKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUw1VG9rZW46OmJlZ2luRW5kVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUw1
VG9rZW46OmJlZ2luQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUw1VG9rZW46OmJl
Z2luQ29tbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MNVRva2VuOjpiZWdpbkRPQ1RZUEUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTDVUb2tlbjo6bmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MNVRva2VuOjpjaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUw1VG9rZW46
OmNvbW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTDVUcmVlQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb252ZXJ0VG9PbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MNVRy
ZWVCdWlsZGVyOjpwYXNzVG9rZW5Ub0xlZ2FjeVBhcnNlcik6CisKIDIwMTAtMDYtMDMgIEFkYW0g
QmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MNUxleGVyLmNwcCBiL1dlYkNv
cmUvaHRtbC9IVE1MNUxleGVyLmNwcAppbmRleCA1ZmI0Njc4YWUyZDg1YzcwNGFiYzg4ZTdkZTA1
YTg1NWQyMDI5ZjVkLi43NmVmN2Y3ZjlkOWE2NDZjYmFiOGM1MGJkMTg5YWMwNmRjNmZjODRiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTDVMZXhlci5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0hUTUw1TGV4ZXIuY3BwCkBAIC0xNTQ1LDcgKzE1NDUsNyBAQCBpbmxpbmUgdm9pZCBIVE1MNUxl
eGVyOjphZGRUb1Bvc3NpYmxlRW5kVGFnKFVDaGFyIGNjKQogCiBpbmxpbmUgYm9vbCBIVE1MNUxl
eGVyOjppc0FwcHJvcHJpYXRlRW5kVGFnKCkKIHsKLSAgICByZXR1cm4gdmVjdG9yRXF1YWxzU3Ry
aW5nKG1fYnVmZmVyZWRFbmRUYWdOYW1lLCBtX2FwcHJvcHJpYXRlRW5kVGFnTmFtZSk7CisgICAg
cmV0dXJuIG1fYnVmZmVyZWRFbmRUYWdOYW1lID09IG1fYXBwcm9wcmlhdGVFbmRUYWdOYW1lOwog
fQogCiBpbmxpbmUgdm9pZCBIVE1MNUxleGVyOjplbWl0Q2hhcmFjdGVyKFVDaGFyIGNoYXJhY3Rl
cikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MNUxleGVyLmggYi9XZWJDb3JlL2h0bWwv
SFRNTDVMZXhlci5oCmluZGV4IGExZGZiZWNlNmJjYmEwYjg0ZGQ5ZDZmYjdhZGQ5OGFmNWE3ZDE1
N2YuLjc0NGFjYWExOGQ4ZTFjZDJhZjQwMDZhMjY0MGYxYTIxN2MzMTU4YzAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaHRtbC9IVE1MNUxleGVyLmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUw1TGV4ZXIu
aApAQCAtMTUyLDcgKzE1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdGF0
ZSBtX3N0YXRlOwogCi0gICAgICAgIEF0b21pY1N0cmluZyBtX2FwcHJvcHJpYXRlRW5kVGFnTmFt
ZTsKKyAgICAgICAgVmVjdG9yPFVDaGFyLCAzMj4gbV9hcHByb3ByaWF0ZUVuZFRhZ05hbWU7CiAK
ICAgICAgICAgLy8gbV90b2tlbiBhbmQgbV9zb3VyY2UgYXJlIG93bmVkIGJ5IHRoZSBjYWxsZXIu
IElmIG5leHRUb2tlbiBpcyBub3QKICAgICAgICAgLy8gb24gdGhlIHN0YWNrLCB0aGVzZSBtZW1i
ZXJzIG1pZ2h0IGJlIHBvaW50aW5nIHRvIHVuYWxsb2NhdGVkIG1lbW9yeS4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MNVRva2VuLmggYi9XZWJDb3JlL2h0bWwvSFRNTDVUb2tlbi5oCmlu
ZGV4IGI0MTg4ZDM3MjQ0ZjNlYzQ1NzNkYWY4MjVkMmE3ZDc1NDIwNmRjNTYuLjFiNWVlOWE5OTZi
NGEyNTliMzkyYmI4Y2FlNjNjZDNiZTM1NzU5YWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9I
VE1MNVRva2VuLmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUw1VG9rZW4uaApAQCAtNTAsNyArNTAs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFdURjo6VmVjdG9yPFVDaGFyLCAzMj4gbV92YWx1ZTsKICAg
ICB9OwogCi0gICAgdHlwZWRlZiBXVEY6OlZlY3RvcjxBdHRyaWJ1dGU+IEF0dHJpYnV0ZUxpc3Q7
CisgICAgdHlwZWRlZiBXVEY6OlZlY3RvcjxBdHRyaWJ1dGUsIDEwPiBBdHRyaWJ1dGVMaXN0Owog
ICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8VUNoYXIsIDEwMjQ+IERhdGFWZWN0b3I7CiAKICAgICBI
VE1MNVRva2VuKCkgeyBjbGVhcigpOyB9CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVW5pbml0aWFsaXplZCk7CiAgICAgICAgIG1fdHlw
ZSA9IFN0YXJ0VGFnOwotICAgICAgICBjbGVhckRhdGEoKTsKKyAgICAgICAgbV9kYXRhLmNsZWFy
KCk7CiAgICAgICAgIG1fc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgICAgICAgbV9jdXJyZW50QXR0
cmlidXRlID0gMDsKICAgICAgICAgbV9hdHRyaWJ1dGVzLmNsZWFyKCk7CkBAIC03Nyw3ICs3Nyw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVW5pbml0aWFsaXpl
ZCk7CiAgICAgICAgIG1fdHlwZSA9IEVuZFRhZzsKLSAgICAgICAgY2xlYXJEYXRhKCk7CisgICAg
ICAgIG1fZGF0YS5jbGVhcigpOwogICAgICAgICBtX3NlbGZDbG9zaW5nID0gZmFsc2U7CiAgICAg
ICAgIG1fY3VycmVudEF0dHJpYnV0ZSA9IDA7CiAgICAgICAgIG1fYXR0cmlidXRlcy5jbGVhcigp
OwpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBl
ID09IFVuaW5pdGlhbGl6ZWQpOwogICAgICAgICBtX3R5cGUgPSBDaGFyYWN0ZXI7Ci0gICAgICAg
IGNsZWFyRGF0YSgpOworICAgICAgICBtX2RhdGEuY2xlYXIoKTsKICAgICAgICAgbV9kYXRhLmFw
cGVuZChjaGFyYWN0ZXIpOwogICAgIH0KIApAQCAtOTcsMTQgKzk3LDE0IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVW5pbml0aWFsaXplZCk7CiAgICAgICAgIG1f
dHlwZSA9IENvbW1lbnQ7Ci0gICAgICAgIGNsZWFyRGF0YSgpOworICAgICAgICBtX2RhdGEuY2xl
YXIoKTsKICAgICB9CiAKICAgICB2b2lkIGJlZ2luRE9DVFlQRSgpCiAgICAgewogICAgICAgICBB
U1NFUlQobV90eXBlID09IFVuaW5pdGlhbGl6ZWQpOwogICAgICAgICBtX3R5cGUgPSBET0NUWVBF
OwotICAgICAgICBjbGVhckRhdGEoKTsKKyAgICAgICAgbV9kYXRhLmNsZWFyKCk7CiAgICAgICAg
IG1fZG9jdHlwZURhdGEuc2V0KG5ldyBEb2N0eXBlRGF0YSgpKTsKICAgICB9CiAKQEAgLTE2Niw0
OCArMTY2LDI0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlczsKICAgICB9
CiAKLSAgICBBdG9taWNTdHJpbmcgbmFtZSgpCisgICAgY29uc3QgRGF0YVZlY3RvciYgbmFtZSgp
CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFN0YXJ0VGFnIHx8IG1fdHlwZSA9PSBF
bmRUYWcgfHwgbV90eXBlID09IERPQ1RZUEUpOwotICAgICAgICBpZiAoIW1fZGF0YS5pc0VtcHR5
KCkgJiYgbV9kYXRhQXNOYW1lQXRvbS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2RhdGFBc05h
bWVBdG9tID0gQXRvbWljU3RyaW5nKGFkb3B0RGF0YUFzU3RyaW5nSW1wbCgpKTsKLSAgICAgICAg
cmV0dXJuIG1fZGF0YUFzTmFtZUF0b207Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBhZG9wdERhdGFBc1N0cmluZ0ltcGwoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2Rh
dGFBc05hbWVBdG9tKTsgLy8gQW4gYXR0ZW1wdCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBjYWxs
ZWQgdHdpY2UuCi0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChtX2RhdGEpOworICAg
ICAgICByZXR1cm4gbV9kYXRhOwogICAgIH0KIAogICAgIGNvbnN0IERhdGFWZWN0b3ImIGNoYXJh
Y3RlcnMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBDaGFyYWN0ZXIpOwotICAg
ICAgICBBU1NFUlQoIW1fZGF0YUFzTmFtZUF0b20pOwogICAgICAgICByZXR1cm4gbV9kYXRhOwog
ICAgIH0KIAogICAgIGNvbnN0IERhdGFWZWN0b3ImIGNvbW1lbnQoKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBDb21tZW50KTsKLSAgICAgICAgQVNTRVJUKCFtX2RhdGFBc05hbWVB
dG9tKTsKICAgICAgICAgcmV0dXJuIG1fZGF0YTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogU2hv
dWxkIGJlIHJlbW92ZWQgb25jZSB3ZSBzdG9wIHVzaW5nIHRoZSBvbGQgcGFyc2VyLgotICAgIFN0
cmluZyB0YWtlQ2hhcmFjdGVycygpCi0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IENo
YXJhY3Rlcik7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoYWRvcHREYXRhQXNTdHJpbmdJbXBsKCkp
OwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgcmVtb3ZlZCBvbmNlIHdlIHN0b3Ag
dXNpbmcgdGhlIG9sZCBwYXJzZXIuCi0gICAgU3RyaW5nIHRha2VDb21tZW50KCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ29tbWVudCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmco
YWRvcHREYXRhQXNTdHJpbmdJbXBsKCkpOwotICAgIH0KLQogICAgIC8vIEZJWE1FOiBEaXN0aW5n
dWlzaCBiZXR3ZWVuIGEgbWlzc2luZyBwdWJsaWMgaWRlbnRpZmVyIGFuZCBhbiBlbXB0eSBvbmUu
CiAgICAgY29uc3QgV1RGOjpWZWN0b3I8VUNoYXI+JiBwdWJsaWNJZGVudGlmaWVyKCkKICAgICB7
CkBAIC0yNjcsMTkgKzI0MywxMiBAQCBwcml2YXRlOgogICAgICAgICBXVEY6OlZlY3RvcjxVQ2hh
cj4gbV9zeXN0ZW1JZGVudGlmaWVyOwogICAgIH07CiAKLSAgICB2b2lkIGNsZWFyRGF0YSgpCi0g
ICAgewotICAgICAgICBtX2RhdGEuY2xlYXIoKTsKLSAgICAgICAgbV9kYXRhQXNOYW1lQXRvbSA9
IEF0b21pY1N0cmluZygpOwotICAgIH0KLQogICAgIFR5cGUgbV90eXBlOwogCiAgICAgLy8gIm5h
bWUiIGZvciBET0NUWVBFLCBTdGFydFRhZywgYW5kIEVuZFRhZwogICAgIC8vICJjaGFyYWN0ZXJz
IiBmb3IgQ2hhcmFjdGVyCiAgICAgLy8gImRhdGEiIGZvciBDb21tZW50CiAgICAgRGF0YVZlY3Rv
ciBtX2RhdGE7Ci0gICAgQXRvbWljU3RyaW5nIG1fZGF0YUFzTmFtZUF0b207CiAKICAgICAvLyBG
b3IgRE9DVFlQRQogICAgIE93blB0cjxEb2N0eXBlRGF0YT4gbV9kb2N0eXBlRGF0YTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MNVRyZWVCdWlsZGVyLmNwcCBiL1dlYkNvcmUvaHRtbC9I
VE1MNVRyZWVCdWlsZGVyLmNwcAppbmRleCA3YzdmODc3MTBkOWE3OGJmM2Q4M2RkYjIwMTk5Mjk5
NzVjYjY0MWE5Li42Zjk1MjhkM2YwZjhhYjZiOWM5ZGY2ZWJhYjA0Y2JlM2M5MTRjYWY1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTDVUcmVlQnVpbGRlci5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUw1VHJlZUJ1aWxkZXIuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGNv
bnZlcnRUb09sZFN0eWxlKEhUTUw1VG9rZW4mIHRva2VuLCBUb2tlbiYgb2xkU3R5bGVUb2tlbikK
ICAgICBjYXNlIEhUTUw1VG9rZW46OkVuZFRhZzogewogICAgICAgICBvbGRTdHlsZVRva2VuLmJl
Z2luVGFnID0gKHRva2VuLnR5cGUoKSA9PSBIVE1MNVRva2VuOjpTdGFydFRhZyk7CiAgICAgICAg
IG9sZFN0eWxlVG9rZW4uc2VsZkNsb3NpbmdUYWcgPSB0b2tlbi5zZWxmQ2xvc2luZygpOwotICAg
ICAgICBvbGRTdHlsZVRva2VuLnRhZ05hbWUgPSB0b2tlbi5uYW1lKCk7CisgICAgICAgIG9sZFN0
eWxlVG9rZW4udGFnTmFtZSA9IEF0b21pY1N0cmluZyh0b2tlbi5uYW1lKCkuZGF0YSgpLCB0b2tl
bi5uYW1lKCkuc2l6ZSgpKTsKICAgICAgICAgSFRNTDVUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0
cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKICAgICAgICAgZm9yIChIVE1MNVRva2VuOjpB
dHRyaWJ1dGVMaXN0OjppdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOwogICAgICAg
ICAgICAgIGl0ZXIgIT0gYXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKSB7CkBAIC04OSwxMSArODks
MTEgQEAgc3RhdGljIHZvaWQgY29udmVydFRvT2xkU3R5bGUoSFRNTDVUb2tlbiYgdG9rZW4sIFRv
a2VuJiBvbGRTdHlsZVRva2VuKQogICAgIH0KICAgICBjYXNlIEhUTUw1VG9rZW46OkNvbW1lbnQ6
CiAgICAgICAgIG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9IGNvbW1lbnRBdG9tOwotICAgICAgICBv
bGRTdHlsZVRva2VuLnRleHQgPSB0b2tlbi50YWtlQ29tbWVudCgpLmltcGwoKTsKKyAgICAgICAg
b2xkU3R5bGVUb2tlbi50ZXh0ID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3RyaXBwaW5nTnVsbENoYXJh
Y3RlcnModG9rZW4uY29tbWVudCgpLmRhdGEoKSwgdG9rZW4uY29tbWVudCgpLnNpemUoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSFRNTDVUb2tlbjo6Q2hhcmFjdGVyOgogICAgICAgICBv
bGRTdHlsZVRva2VuLnRhZ05hbWUgPSB0ZXh0QXRvbTsKLSAgICAgICAgb2xkU3R5bGVUb2tlbi50
ZXh0ID0gdG9rZW4udGFrZUNoYXJhY3RlcnMoKS5pbXBsKCk7CisgICAgICAgIG9sZFN0eWxlVG9r
ZW4udGV4dCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzKHRva2Vu
LmNoYXJhY3RlcnMoKS5kYXRhKCksIHRva2VuLmNoYXJhY3RlcnMoKS5zaXplKCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiB9CkBAIC0xMzUsNyArMTM1LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBI
VE1MNVRyZWVCdWlsZGVyOjpwYXNzVG9rZW5Ub0xlZ2FjeVBhcnNlcihIVE1MNVRva2VuJiB0b2tl
bikKIHsKICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUw1VG9rZW46OkRPQ1RZUEUpIHsKICAg
ICAgICAgRG9jdHlwZVRva2VuIGRvY3R5cGVUb2tlbjsKLSAgICAgICAgZG9jdHlwZVRva2VuLm1f
bmFtZS5hcHBlbmQodG9rZW4ubmFtZSgpLmNoYXJhY3RlcnMoKSwgdG9rZW4ubmFtZSgpLmxlbmd0
aCgpKTsKKyAgICAgICAgZG9jdHlwZVRva2VuLm1fbmFtZS5hcHBlbmQodG9rZW4ubmFtZSgpLmRh
dGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSk7CiAgICAgICAgIGRvY3R5cGVUb2tlbi5tX3B1Ymxp
Y0lEID0gdG9rZW4ucHVibGljSWRlbnRpZmllcigpOwogICAgICAgICBkb2N0eXBlVG9rZW4ubV9z
eXN0ZW1JRCA9IHRva2VuLnN5c3RlbUlkZW50aWZpZXIoKTsKIApAQCAtMTUxLDIzICsxNTEsMjMg
QEAgUGFzc1JlZlB0cjxOb2RlPiBIVE1MNVRyZWVCdWlsZGVyOjpwYXNzVG9rZW5Ub0xlZ2FjeVBh
cnNlcihIVE1MNVRva2VuJiB0b2tlbikKICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUw1VG9r
ZW46OlN0YXJ0VGFnKSB7CiAgICAgICAgIC8vIFRoaXMgd29yayBpcyBzdXBwb3NlZCB0byBiZSBk
b25lIGJ5IHRoZSBwYXJzZXIsIGJ1dAogICAgICAgICAvLyB3aGVuIHVzaW5nIHRoZSBvbGQgcGFy
c2VyIGZvciB3ZSBoYXZlIHRvIGRvIHRoaXMgbWFudWFsbHkuCi0gICAgICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gc2NyaXB0VGFnKSB7CisgICAgICAgIGlmIChvbGRTdHlsZVRva2VuLnRhZ05hbWUg
PT0gc2NyaXB0VGFnKSB7CiAgICAgICAgICAgICBoYW5kbGVTY3JpcHRTdGFydFRhZygpOwogICAg
ICAgICAgICAgbV9sYXN0U2NyaXB0RWxlbWVudCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RWxlbWVu
dD4ocmVzdWx0KTsKICAgICAgICAgICAgIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUgPSBt
X2xleGVyLT5saW5lTnVtYmVyKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodG9rZW4ubmFtZSgpID09
IHRleHRhcmVhVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0aXRsZVRhZykKKyAgICAgICAgfSBlbHNl
IGlmIChvbGRTdHlsZVRva2VuLnRhZ05hbWUgPT0gdGV4dGFyZWFUYWcgfHwgb2xkU3R5bGVUb2tl
bi50YWdOYW1lID09IHRpdGxlVGFnKQogICAgICAgICAgICAgbV9sZXhlci0+c2V0U3RhdGUoSFRN
TDVMZXhlcjo6UkNEQVRBU3RhdGUpOwotICAgICAgICBlbHNlIGlmICh0b2tlbi5uYW1lKCkgPT0g
c3R5bGVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGlmcmFtZVRhZwotICAgICAgICAgICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0geG1wVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBub2VtYmVkVGFnKSB7
CisgICAgICAgIGVsc2UgaWYgKG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSBzdHlsZVRhZyB8fCBv
bGRTdHlsZVRva2VuLnRhZ05hbWUgPT0gaWZyYW1lVGFnCisgICAgICAgICAgICAgICAgIHx8IG9s
ZFN0eWxlVG9rZW4udGFnTmFtZSA9PSB4bXBUYWcgfHwgb2xkU3R5bGVUb2tlbi50YWdOYW1lID09
IG5vZW1iZWRUYWcpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBub3NjcmlwdCBhbmQgbm9mcmFt
ZXMgbWF5IGNvbmRpdGlvbmFsbHkgZW50ZXIgdGhpcyBzdGF0ZSBhcyB3ZWxsLgogICAgICAgICAg
ICAgbV9sZXhlci0+c2V0U3RhdGUoSFRNTDVMZXhlcjo6UkFXVEVYVFN0YXRlKTsKLSAgICAgICAg
fSBlbHNlIGlmICh0b2tlbi5uYW1lKCkgPT0gcGxhaW50ZXh0VGFnKQorICAgICAgICB9IGVsc2Ug
aWYgKG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSBwbGFpbnRleHRUYWcpCiAgICAgICAgICAgICBt
X2xleGVyLT5zZXRTdGF0ZShIVE1MNUxleGVyOjpQTEFJTlRFWFRTdGF0ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKHRva2VuLm5hbWUoKSA9PSBwcmVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGxpc3RpbmdU
YWcpCisgICAgICAgIGVsc2UgaWYgKG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSBwcmVUYWcgfHwg
b2xkU3R5bGVUb2tlbi50YWdOYW1lID09IGxpc3RpbmdUYWcpCiAgICAgICAgICAgICBtX2xleGVy
LT5za2lwTGVhZGluZ05ld0xpbmVGb3JMaXN0aW5nKCk7CiAgICAgfQogICAgIGlmICh0b2tlbi50
eXBlKCkgPT0gSFRNTDVUb2tlbjo6RW5kVGFnKSB7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gc2NyaXB0VGFnKSB7CisgICAgICAgIGlmIChvbGRTdHlsZVRva2VuLnRhZ05hbWUgPT0gc2Ny
aXB0VGFnKSB7CiAgICAgICAgICAgICBpZiAobV9sYXN0U2NyaXB0RWxlbWVudCkgewogICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lICE9IHVuaW5pdGlh
bGl6ZWRMaW5lTnVtYmVyVmFsdWUpOwogICAgICAgICAgICAgICAgIGhhbmRsZVNjcmlwdEVuZFRh
ZyhtX2xhc3RTY3JpcHRFbGVtZW50LmdldCgpLCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5l
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57899</attachid>
            <date>2010-06-04 11:19:27 -0700</date>
            <delta_ts>2010-06-04 13:17:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40172-20100604111925.patch</filename>
            <type>text/plain</type>
            <size>11419</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAwOGQ1NTM1ZmVhYmFkODA3OGY0NzcyZTEyOTBkODgyMDQ3YWZkMjUzLi44
MTVhM2QyNzExOTYwNDhmNWMzNWRkNzNjZjJiNmMwYTJjNmY1Yzc5IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTAtMDYtMDQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIVE1MNSBw
YXJzZXIgc2hvdWxkIGJlIHdpdGhpbiAxJSBvZiBvbGQgcGFyc2VyIHBlcmZvcm1hbmNlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE3MgorCisgICAg
ICAgIEZpeCBjYXN0IGluIHRoaXMgb3BlcmF0b3I9IHRvIGFsbG93IGZvciBhc3NpZ25tZW50IGJl
dHdlZW4gdmVjdG9ycyB3aXRoCisgICAgICAgIGRpZmZlcmVudCBpbmxpbmUgY2FwYWNpdGllcyAo
YXMgY2xlYXJseSBpbnRlbmRlZCBieSBpdHMgYXV0aG9yKS4KKworICAgICAgICAqIHd0Zi9WZWN0
b3IuaDoKKyAgICAgICAgKFdURjo6OjpvcGVyYXRvcik6CisKIDIwMTAtMDYtMDIgIE1hcmsgUm93
ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNs
b3VnaC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaCBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi9WZWN0b3IuaAppbmRleCA0ZDllYTYxOTkxYmJkMTg3NmZhNmI5OGQwNDg2ZTcy
OTRhYjA4Y2Q3Li5jNGJmNzc1YWQwZmZmYWIwYTZlY2NkYTlhNmRkYTFjYTM4Mjg5MzgyIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
d3RmL1ZlY3Rvci5oCkBAIC03MDMsOSArNzAzLDkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVt
cGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHk+IAogICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46Om9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwg
b3RoZXJDYXBhY2l0eT4mIG90aGVyKQogICAgIHsKLSAgICAgICAgaWYgKCZvdGhlciA9PSB0aGlz
KQorICAgICAgICBpZiAoJnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KG90aGVyKSA9PSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih0aGlzKSkKICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
LSAgICAgICAgCisKICAgICAgICAgaWYgKHNpemUoKSA+IG90aGVyLnNpemUoKSkKICAgICAgICAg
ICAgIHNocmluayhvdGhlci5zaXplKCkpOwogICAgICAgICBlbHNlIGlmIChvdGhlci5zaXplKCkg
PiBjYXBhY2l0eSgpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGM0MGY1ZTY2YTZmYWY1YTAwZjJmMjE4ZTJkZGY1ZjcyZWI1ODQzZWIu
Ljc5YTBmMWRmNmRkNTA0ZjViNjVmZDAyNzAwMzExZmExNzU2OTc3MjUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTAtMDYtMDQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIVE1MNSBwYXJzZXIgc2hvdWxk
IGJlIHdpdGhpbiAxJSBvZiBvbGQgcGFyc2VyIHBlcmZvcm1hbmNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE3MgorCisgICAgICAgIFN0b3AgdXNp
bmcgYWRvcHQoKS4gIEkgdGhpbmsgdGhpcyBmdW5jdGlvbiBpcyBjYXVzZSB1cyB0byBkbyBleHRy
YQorICAgICAgICBtYWxsb2NzIHRoYXQgYXJlIGh1cnRpbmcgcGVyZm9ybWFuY2UuICBJbnN0ZWFk
IG9mIGNhY2hpbmcgQXRvbWljU3RyaW5nCisgICAgICAgIG9uIEhUTUw1VG9rZW4sIGp1c3QgdXNl
IHRoZSBBdG9taWNTdHJpbmcgb24gdGhlIG9sZCB0b2tlbi4gIEFsc28sCisgICAgICAgIHJlc2Vy
dmUgaW5saW5lIGNhcGFjaXR5IGZvciAxMCBhdHRyaWJ1dGVzLgorCisgICAgICAgICogaHRtbC9I
VE1MNUxleGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUw1TGV4ZXI6OmlzQXBwcm9wcmlh
dGVFbmRUYWcpOgorICAgICAgICAqIGh0bWwvSFRNTDVMZXhlci5oOgorICAgICAgICAqIGh0bWwv
SFRNTDVUb2tlbi5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTDVUb2tlbjo6YmVnaW5TdGFydFRh
Zyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MNVRva2VuOjpiZWdpbkVuZFRhZyk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MNVRva2VuOjpiZWdpbkNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MNVRva2VuOjpiZWdpbkNvbW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTDVUb2tl
bjo6YmVnaW5ET0NUWVBFKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUw1VG9rZW46Om5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTDVUb2tlbjo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MNVRva2VuOjpjb21tZW50KToKKyAgICAgICAgKiBodG1sL0hUTUw1VHJlZUJ1aWxk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvT2xkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTDVUcmVlQnVpbGRlcjo6cGFzc1Rva2VuVG9MZWdhY3lQYXJzZXIpOgorCiAy
MDEwLTA2LTAzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTDVM
ZXhlci5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTDVMZXhlci5jcHAKaW5kZXggNWZiNDY3OGFlMmQ4
NWM3MDRhYmM4OGU3ZGUwNWE4NTVkMjAyOWY1ZC4uNzZlZjdmN2Y5ZDlhNjQ2Y2JhYjhjNTBiZDE4
OWFjMDZkYzZmYzg0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUw1TGV4ZXIuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9IVE1MNUxleGVyLmNwcApAQCAtMTU0NSw3ICsxNTQ1LDcgQEAgaW5s
aW5lIHZvaWQgSFRNTDVMZXhlcjo6YWRkVG9Qb3NzaWJsZUVuZFRhZyhVQ2hhciBjYykKIAogaW5s
aW5lIGJvb2wgSFRNTDVMZXhlcjo6aXNBcHByb3ByaWF0ZUVuZFRhZygpCiB7Ci0gICAgcmV0dXJu
IHZlY3RvckVxdWFsc1N0cmluZyhtX2J1ZmZlcmVkRW5kVGFnTmFtZSwgbV9hcHByb3ByaWF0ZUVu
ZFRhZ05hbWUpOworICAgIHJldHVybiBtX2J1ZmZlcmVkRW5kVGFnTmFtZSA9PSBtX2FwcHJvcHJp
YXRlRW5kVGFnTmFtZTsKIH0KIAogaW5saW5lIHZvaWQgSFRNTDVMZXhlcjo6ZW1pdENoYXJhY3Rl
cihVQ2hhciBjaGFyYWN0ZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTDVMZXhlci5o
IGIvV2ViQ29yZS9odG1sL0hUTUw1TGV4ZXIuaAppbmRleCBhMWRmYmVjZTZiY2JhMGI4NGRkOWQ2
ZmI3YWRkOThhZjVhN2QxNTdmLi43NDRhY2FhMThkOGUxY2QyYWY0MDA2YTI2NDBmMWEyMTdjMzE1
OGMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTDVMZXhlci5oCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MNUxleGVyLmgKQEAgLTE1Miw3ICsxNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgU3RhdGUgbV9zdGF0ZTsKIAotICAgICAgICBBdG9taWNTdHJpbmcgbV9hcHBy
b3ByaWF0ZUVuZFRhZ05hbWU7CisgICAgICAgIFZlY3RvcjxVQ2hhciwgMzI+IG1fYXBwcm9wcmlh
dGVFbmRUYWdOYW1lOwogCiAgICAgICAgIC8vIG1fdG9rZW4gYW5kIG1fc291cmNlIGFyZSBvd25l
ZCBieSB0aGUgY2FsbGVyLiBJZiBuZXh0VG9rZW4gaXMgbm90CiAgICAgICAgIC8vIG9uIHRoZSBz
dGFjaywgdGhlc2UgbWVtYmVycyBtaWdodCBiZSBwb2ludGluZyB0byB1bmFsbG9jYXRlZCBtZW1v
cnkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTDVUb2tlbi5oIGIvV2ViQ29yZS9odG1s
L0hUTUw1VG9rZW4uaAppbmRleCBiNDE4OGQzNzI0NGYzZWM0NTczZGFmODI1ZDJhN2Q3NTQyMDZk
YzU2Li4xYjVlZTlhOTk2YjRhMjU5YjM5MmJiOGNhZTYzY2QzYmUzNTc1OWFmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvSFRNTDVUb2tlbi5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MNVRva2Vu
LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgICAgICBXVEY6OlZlY3RvcjxVQ2hhciwg
MzI+IG1fdmFsdWU7CiAgICAgfTsKIAotICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8QXR0cmlidXRl
PiBBdHRyaWJ1dGVMaXN0OworICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8QXR0cmlidXRlLCAxMD4g
QXR0cmlidXRlTGlzdDsKICAgICB0eXBlZGVmIFdURjo6VmVjdG9yPFVDaGFyLCAxMDI0PiBEYXRh
VmVjdG9yOwogCiAgICAgSFRNTDVUb2tlbigpIHsgY2xlYXIoKTsgfQpAQCAtNjQsNyArNjQsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFVuaW5pdGlhbGl6ZWQp
OwogICAgICAgICBtX3R5cGUgPSBTdGFydFRhZzsKLSAgICAgICAgY2xlYXJEYXRhKCk7CisgICAg
ICAgIG1fZGF0YS5jbGVhcigpOwogICAgICAgICBtX3NlbGZDbG9zaW5nID0gZmFsc2U7CiAgICAg
ICAgIG1fY3VycmVudEF0dHJpYnV0ZSA9IDA7CiAgICAgICAgIG1fYXR0cmlidXRlcy5jbGVhcigp
OwpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBl
ID09IFVuaW5pdGlhbGl6ZWQpOwogICAgICAgICBtX3R5cGUgPSBFbmRUYWc7Ci0gICAgICAgIGNs
ZWFyRGF0YSgpOworICAgICAgICBtX2RhdGEuY2xlYXIoKTsKICAgICAgICAgbV9zZWxmQ2xvc2lu
ZyA9IGZhbHNlOwogICAgICAgICBtX2N1cnJlbnRBdHRyaWJ1dGUgPSAwOwogICAgICAgICBtX2F0
dHJpYnV0ZXMuY2xlYXIoKTsKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBVbmluaXRpYWxpemVkKTsKICAgICAgICAgbV90eXBlID0gQ2hh
cmFjdGVyOwotICAgICAgICBjbGVhckRhdGEoKTsKKyAgICAgICAgbV9kYXRhLmNsZWFyKCk7CiAg
ICAgICAgIG1fZGF0YS5hcHBlbmQoY2hhcmFjdGVyKTsKICAgICB9CiAKQEAgLTk3LDE0ICs5Nywx
NCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFVuaW5pdGlhbGl6
ZWQpOwogICAgICAgICBtX3R5cGUgPSBDb21tZW50OwotICAgICAgICBjbGVhckRhdGEoKTsKKyAg
ICAgICAgbV9kYXRhLmNsZWFyKCk7CiAgICAgfQogCiAgICAgdm9pZCBiZWdpbkRPQ1RZUEUoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmluaXRpYWxpemVkKTsKICAgICAgICAg
bV90eXBlID0gRE9DVFlQRTsKLSAgICAgICAgY2xlYXJEYXRhKCk7CisgICAgICAgIG1fZGF0YS5j
bGVhcigpOwogICAgICAgICBtX2RvY3R5cGVEYXRhLnNldChuZXcgRG9jdHlwZURhdGEoKSk7CiAg
ICAgfQogCkBAIC0xNjYsNDggKzE2NiwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2F0
dHJpYnV0ZXM7CiAgICAgfQogCi0gICAgQXRvbWljU3RyaW5nIG5hbWUoKQorICAgIGNvbnN0IERh
dGFWZWN0b3ImIG5hbWUoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBTdGFydFRh
ZyB8fCBtX3R5cGUgPT0gRW5kVGFnIHx8IG1fdHlwZSA9PSBET0NUWVBFKTsKLSAgICAgICAgaWYg
KCFtX2RhdGEuaXNFbXB0eSgpICYmIG1fZGF0YUFzTmFtZUF0b20uaXNFbXB0eSgpKQotICAgICAg
ICAgICAgbV9kYXRhQXNOYW1lQXRvbSA9IEF0b21pY1N0cmluZyhhZG9wdERhdGFBc1N0cmluZ0lt
cGwoKSk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFBc05hbWVBdG9tOwotICAgIH0KLQotICAgIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRvcHREYXRhQXNTdHJpbmdJbXBsKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVCghbV9kYXRhQXNOYW1lQXRvbSk7IC8vIEFuIGF0dGVtcHQgdG8gbWFrZSBzdXJl
IHRoaXMgaXNuJ3QgY2FsbGVkIHR3aWNlLgotICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6YWRv
cHQobV9kYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKICAgICB9CiAKICAgICBjb25zdCBE
YXRhVmVjdG9yJiBjaGFyYWN0ZXJzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0g
Q2hhcmFjdGVyKTsKLSAgICAgICAgQVNTRVJUKCFtX2RhdGFBc05hbWVBdG9tKTsKICAgICAgICAg
cmV0dXJuIG1fZGF0YTsKICAgICB9CiAKICAgICBjb25zdCBEYXRhVmVjdG9yJiBjb21tZW50KCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ29tbWVudCk7Ci0gICAgICAgIEFTU0VS
VCghbV9kYXRhQXNOYW1lQXRvbSk7CiAgICAgICAgIHJldHVybiBtX2RhdGE7CiAgICAgfQogCi0g
ICAgLy8gRklYTUU6IFNob3VsZCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3RvcCB1c2luZyB0aGUgb2xk
IHBhcnNlci4KLSAgICBTdHJpbmcgdGFrZUNoYXJhY3RlcnMoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBDaGFyYWN0ZXIpOwotICAgICAgICByZXR1cm4gU3RyaW5nKGFkb3B0RGF0
YUFzU3RyaW5nSW1wbCgpKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIGJlIHJlbW92
ZWQgb25jZSB3ZSBzdG9wIHVzaW5nIHRoZSBvbGQgcGFyc2VyLgotICAgIFN0cmluZyB0YWtlQ29t
bWVudCgpCi0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IENvbW1lbnQpOwotICAgICAg
ICByZXR1cm4gU3RyaW5nKGFkb3B0RGF0YUFzU3RyaW5nSW1wbCgpKTsKLSAgICB9Ci0KICAgICAv
LyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1pc3NpbmcgcHVibGljIGlkZW50aWZlciBh
bmQgYW4gZW1wdHkgb25lLgogICAgIGNvbnN0IFdURjo6VmVjdG9yPFVDaGFyPiYgcHVibGljSWRl
bnRpZmllcigpCiAgICAgewpAQCAtMjY3LDE5ICsyNDMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
V1RGOjpWZWN0b3I8VUNoYXI+IG1fc3lzdGVtSWRlbnRpZmllcjsKICAgICB9OwogCi0gICAgdm9p
ZCBjbGVhckRhdGEoKQotICAgIHsKLSAgICAgICAgbV9kYXRhLmNsZWFyKCk7Ci0gICAgICAgIG1f
ZGF0YUFzTmFtZUF0b20gPSBBdG9taWNTdHJpbmcoKTsKLSAgICB9Ci0KICAgICBUeXBlIG1fdHlw
ZTsKIAogICAgIC8vICJuYW1lIiBmb3IgRE9DVFlQRSwgU3RhcnRUYWcsIGFuZCBFbmRUYWcKICAg
ICAvLyAiY2hhcmFjdGVycyIgZm9yIENoYXJhY3RlcgogICAgIC8vICJkYXRhIiBmb3IgQ29tbWVu
dAogICAgIERhdGFWZWN0b3IgbV9kYXRhOwotICAgIEF0b21pY1N0cmluZyBtX2RhdGFBc05hbWVB
dG9tOwogCiAgICAgLy8gRm9yIERPQ1RZUEUKICAgICBPd25QdHI8RG9jdHlwZURhdGE+IG1fZG9j
dHlwZURhdGE7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTDVUcmVlQnVpbGRlci5jcHAg
Yi9XZWJDb3JlL2h0bWwvSFRNTDVUcmVlQnVpbGRlci5jcHAKaW5kZXggN2M3Zjg3NzEwZDlhNzhi
ZjNkODNkZGIyMDE5OTI5OTc1Y2I2NDFhOS4uNmY5NTI4ZDNmMGY4YWI2YjljOWRmNmViYWIwNGNi
ZTNjOTE0Y2FmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUw1VHJlZUJ1aWxkZXIuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MNVRyZWVCdWlsZGVyLmNwcApAQCAtNzIsNyArNzIsNyBA
QCBzdGF0aWMgdm9pZCBjb252ZXJ0VG9PbGRTdHlsZShIVE1MNVRva2VuJiB0b2tlbiwgVG9rZW4m
IG9sZFN0eWxlVG9rZW4pCiAgICAgY2FzZSBIVE1MNVRva2VuOjpFbmRUYWc6IHsKICAgICAgICAg
b2xkU3R5bGVUb2tlbi5iZWdpblRhZyA9ICh0b2tlbi50eXBlKCkgPT0gSFRNTDVUb2tlbjo6U3Rh
cnRUYWcpOwogICAgICAgICBvbGRTdHlsZVRva2VuLnNlbGZDbG9zaW5nVGFnID0gdG9rZW4uc2Vs
ZkNsb3NpbmcoKTsKLSAgICAgICAgb2xkU3R5bGVUb2tlbi50YWdOYW1lID0gdG9rZW4ubmFtZSgp
OworICAgICAgICBvbGRTdHlsZVRva2VuLnRhZ05hbWUgPSBBdG9taWNTdHJpbmcodG9rZW4ubmFt
ZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSk7CiAgICAgICAgIEhUTUw1VG9rZW46OkF0
dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCk7CiAgICAgICAgIGZv
ciAoSFRNTDVUb2tlbjo6QXR0cmlidXRlTGlzdDo6aXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMu
YmVnaW4oKTsKICAgICAgICAgICAgICBpdGVyICE9IGF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikg
ewpAQCAtODksMTEgKzg5LDExIEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRUb09sZFN0eWxlKEhUTUw1
VG9rZW4mIHRva2VuLCBUb2tlbiYgb2xkU3R5bGVUb2tlbikKICAgICB9CiAgICAgY2FzZSBIVE1M
NVRva2VuOjpDb21tZW50OgogICAgICAgICBvbGRTdHlsZVRva2VuLnRhZ05hbWUgPSBjb21tZW50
QXRvbTsKLSAgICAgICAgb2xkU3R5bGVUb2tlbi50ZXh0ID0gdG9rZW4udGFrZUNvbW1lbnQoKS5p
bXBsKCk7CisgICAgICAgIG9sZFN0eWxlVG9rZW4udGV4dCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN0
cmlwcGluZ051bGxDaGFyYWN0ZXJzKHRva2VuLmNvbW1lbnQoKS5kYXRhKCksIHRva2VuLmNvbW1l
bnQoKS5zaXplKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEhUTUw1VG9rZW46OkNoYXJh
Y3RlcjoKICAgICAgICAgb2xkU3R5bGVUb2tlbi50YWdOYW1lID0gdGV4dEF0b207Ci0gICAgICAg
IG9sZFN0eWxlVG9rZW4udGV4dCA9IHRva2VuLnRha2VDaGFyYWN0ZXJzKCkuaW1wbCgpOworICAg
ICAgICBvbGRTdHlsZVRva2VuLnRleHQgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxs
Q2hhcmFjdGVycyh0b2tlbi5jaGFyYWN0ZXJzKCkuZGF0YSgpLCB0b2tlbi5jaGFyYWN0ZXJzKCku
c2l6ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMTM1LDcgKzEzNSw3IEBAIFBh
c3NSZWZQdHI8Tm9kZT4gSFRNTDVUcmVlQnVpbGRlcjo6cGFzc1Rva2VuVG9MZWdhY3lQYXJzZXIo
SFRNTDVUb2tlbiYgdG9rZW4pCiB7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MNVRva2Vu
OjpET0NUWVBFKSB7CiAgICAgICAgIERvY3R5cGVUb2tlbiBkb2N0eXBlVG9rZW47Ci0gICAgICAg
IGRvY3R5cGVUb2tlbi5tX25hbWUuYXBwZW5kKHRva2VuLm5hbWUoKS5jaGFyYWN0ZXJzKCksIHRv
a2VuLm5hbWUoKS5sZW5ndGgoKSk7CisgICAgICAgIGRvY3R5cGVUb2tlbi5tX25hbWUuYXBwZW5k
KHRva2VuLm5hbWUoKS5kYXRhKCksIHRva2VuLm5hbWUoKS5zaXplKCkpOwogICAgICAgICBkb2N0
eXBlVG9rZW4ubV9wdWJsaWNJRCA9IHRva2VuLnB1YmxpY0lkZW50aWZpZXIoKTsKICAgICAgICAg
ZG9jdHlwZVRva2VuLm1fc3lzdGVtSUQgPSB0b2tlbi5zeXN0ZW1JZGVudGlmaWVyKCk7CiAKQEAg
LTE1MSwyMyArMTUxLDIzIEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTDVUcmVlQnVpbGRlcjo6cGFz
c1Rva2VuVG9MZWdhY3lQYXJzZXIoSFRNTDVUb2tlbiYgdG9rZW4pCiAgICAgaWYgKHRva2VuLnR5
cGUoKSA9PSBIVE1MNVRva2VuOjpTdGFydFRhZykgewogICAgICAgICAvLyBUaGlzIHdvcmsgaXMg
c3VwcG9zZWQgdG8gYmUgZG9uZSBieSB0aGUgcGFyc2VyLCBidXQKICAgICAgICAgLy8gd2hlbiB1
c2luZyB0aGUgb2xkIHBhcnNlciBmb3Igd2UgaGF2ZSB0byBkbyB0aGlzIG1hbnVhbGx5LgotICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZykgeworICAgICAgICBpZiAob2xkU3R5
bGVUb2tlbi50YWdOYW1lID09IHNjcmlwdFRhZykgewogICAgICAgICAgICAgaGFuZGxlU2NyaXB0
U3RhcnRUYWcoKTsKICAgICAgICAgICAgIG1fbGFzdFNjcmlwdEVsZW1lbnQgPSBzdGF0aWNfcG9p
bnRlcl9jYXN0PEVsZW1lbnQ+KHJlc3VsdCk7CiAgICAgICAgICAgICBtX2xhc3RTY3JpcHRFbGVt
ZW50U3RhcnRMaW5lID0gbV9sZXhlci0+bGluZU51bWJlcigpOwotICAgICAgICB9IGVsc2UgaWYg
KHRva2VuLm5hbWUoKSA9PSB0ZXh0YXJlYVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdGl0bGVUYWcp
CisgICAgICAgIH0gZWxzZSBpZiAob2xkU3R5bGVUb2tlbi50YWdOYW1lID09IHRleHRhcmVhVGFn
IHx8IG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSB0aXRsZVRhZykKICAgICAgICAgICAgIG1fbGV4
ZXItPnNldFN0YXRlKEhUTUw1TGV4ZXI6OlJDREFUQVN0YXRlKTsKLSAgICAgICAgZWxzZSBpZiAo
dG9rZW4ubmFtZSgpID09IHN0eWxlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBpZnJhbWVUYWcKLSAg
ICAgICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHhtcFRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gbm9lbWJlZFRhZykgeworICAgICAgICBlbHNlIGlmIChvbGRTdHlsZVRva2VuLnRhZ05hbWUg
PT0gc3R5bGVUYWcgfHwgb2xkU3R5bGVUb2tlbi50YWdOYW1lID09IGlmcmFtZVRhZworICAgICAg
ICAgICAgICAgICB8fCBvbGRTdHlsZVRva2VuLnRhZ05hbWUgPT0geG1wVGFnIHx8IG9sZFN0eWxl
VG9rZW4udGFnTmFtZSA9PSBub2VtYmVkVGFnKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbm9z
Y3JpcHQgYW5kIG5vZnJhbWVzIG1heSBjb25kaXRpb25hbGx5IGVudGVyIHRoaXMgc3RhdGUgYXMg
d2VsbC4KICAgICAgICAgICAgIG1fbGV4ZXItPnNldFN0YXRlKEhUTUw1TGV4ZXI6OlJBV1RFWFRT
dGF0ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodG9rZW4ubmFtZSgpID09IHBsYWludGV4dFRhZykK
KyAgICAgICAgfSBlbHNlIGlmIChvbGRTdHlsZVRva2VuLnRhZ05hbWUgPT0gcGxhaW50ZXh0VGFn
KQogICAgICAgICAgICAgbV9sZXhlci0+c2V0U3RhdGUoSFRNTDVMZXhlcjo6UExBSU5URVhUU3Rh
dGUpOwotICAgICAgICBlbHNlIGlmICh0b2tlbi5uYW1lKCkgPT0gcHJlVGFnIHx8IHRva2VuLm5h
bWUoKSA9PSBsaXN0aW5nVGFnKQorICAgICAgICBlbHNlIGlmIChvbGRTdHlsZVRva2VuLnRhZ05h
bWUgPT0gcHJlVGFnIHx8IG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSBsaXN0aW5nVGFnKQogICAg
ICAgICAgICAgbV9sZXhlci0+c2tpcExlYWRpbmdOZXdMaW5lRm9yTGlzdGluZygpOwogICAgIH0K
ICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUw1VG9rZW46OkVuZFRhZykgewotICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZykgeworICAgICAgICBpZiAob2xkU3R5bGVUb2tl
bi50YWdOYW1lID09IHNjcmlwdFRhZykgewogICAgICAgICAgICAgaWYgKG1fbGFzdFNjcmlwdEVs
ZW1lbnQpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0
TGluZSAhPSB1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKTsKICAgICAgICAgICAgICAgICBo
YW5kbGVTY3JpcHRFbmRUYWcobV9sYXN0U2NyaXB0RWxlbWVudC5nZXQoKSwgbV9sYXN0U2NyaXB0
RWxlbWVudFN0YXJ0TGluZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57908</attachid>
            <date>2010-06-04 13:17:58 -0700</date>
            <delta_ts>2010-06-04 22:48:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40172-20100604131757.patch</filename>
            <type>text/plain</type>
            <size>11419</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAwOGQ1NTM1ZmVhYmFkODA3OGY0NzcyZTEyOTBkODgyMDQ3YWZkMjUzLi44
MTVhM2QyNzExOTYwNDhmNWMzNWRkNzNjZjJiNmMwYTJjNmY1Yzc5IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTAtMDYtMDQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIVE1MNSBw
YXJzZXIgc2hvdWxkIGJlIHdpdGhpbiAxJSBvZiBvbGQgcGFyc2VyIHBlcmZvcm1hbmNlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE3MgorCisgICAg
ICAgIEZpeCBjYXN0IGluIHRoaXMgb3BlcmF0b3I9IHRvIGFsbG93IGZvciBhc3NpZ25tZW50IGJl
dHdlZW4gdmVjdG9ycyB3aXRoCisgICAgICAgIGRpZmZlcmVudCBpbmxpbmUgY2FwYWNpdGllcyAo
YXMgY2xlYXJseSBpbnRlbmRlZCBieSBpdHMgYXV0aG9yKS4KKworICAgICAgICAqIHd0Zi9WZWN0
b3IuaDoKKyAgICAgICAgKFdURjo6OjpvcGVyYXRvcik6CisKIDIwMTAtMDYtMDIgIE1hcmsgUm93
ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNs
b3VnaC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaCBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi9WZWN0b3IuaAppbmRleCA0ZDllYTYxOTkxYmJkMTg3NmZhNmI5OGQwNDg2ZTcy
OTRhYjA4Y2Q3Li40YjM2ZWEyNmEzNjRkYjcyY2NmZTZlNTUzZTY1ZTViY2IxMDg4YzA2IDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
d3RmL1ZlY3Rvci5oCkBAIC03MDMsOSArNzAzLDkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVt
cGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHk+IAogICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46Om9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwg
b3RoZXJDYXBhY2l0eT4mIG90aGVyKQogICAgIHsKLSAgICAgICAgaWYgKCZvdGhlciA9PSB0aGlz
KQorICAgICAgICBpZiAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4oJm90aGVyKSA9PSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih0aGlzKSkKICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
LSAgICAgICAgCisKICAgICAgICAgaWYgKHNpemUoKSA+IG90aGVyLnNpemUoKSkKICAgICAgICAg
ICAgIHNocmluayhvdGhlci5zaXplKCkpOwogICAgICAgICBlbHNlIGlmIChvdGhlci5zaXplKCkg
PiBjYXBhY2l0eSgpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGM0MGY1ZTY2YTZmYWY1YTAwZjJmMjE4ZTJkZGY1ZjcyZWI1ODQzZWIu
Ljc5YTBmMWRmNmRkNTA0ZjViNjVmZDAyNzAwMzExZmExNzU2OTc3MjUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTAtMDYtMDQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIVE1MNSBwYXJzZXIgc2hvdWxk
IGJlIHdpdGhpbiAxJSBvZiBvbGQgcGFyc2VyIHBlcmZvcm1hbmNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE3MgorCisgICAgICAgIFN0b3AgdXNp
bmcgYWRvcHQoKS4gIEkgdGhpbmsgdGhpcyBmdW5jdGlvbiBpcyBjYXVzZSB1cyB0byBkbyBleHRy
YQorICAgICAgICBtYWxsb2NzIHRoYXQgYXJlIGh1cnRpbmcgcGVyZm9ybWFuY2UuICBJbnN0ZWFk
IG9mIGNhY2hpbmcgQXRvbWljU3RyaW5nCisgICAgICAgIG9uIEhUTUw1VG9rZW4sIGp1c3QgdXNl
IHRoZSBBdG9taWNTdHJpbmcgb24gdGhlIG9sZCB0b2tlbi4gIEFsc28sCisgICAgICAgIHJlc2Vy
dmUgaW5saW5lIGNhcGFjaXR5IGZvciAxMCBhdHRyaWJ1dGVzLgorCisgICAgICAgICogaHRtbC9I
VE1MNUxleGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUw1TGV4ZXI6OmlzQXBwcm9wcmlh
dGVFbmRUYWcpOgorICAgICAgICAqIGh0bWwvSFRNTDVMZXhlci5oOgorICAgICAgICAqIGh0bWwv
SFRNTDVUb2tlbi5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTDVUb2tlbjo6YmVnaW5TdGFydFRh
Zyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MNVRva2VuOjpiZWdpbkVuZFRhZyk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MNVRva2VuOjpiZWdpbkNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MNVRva2VuOjpiZWdpbkNvbW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTDVUb2tl
bjo6YmVnaW5ET0NUWVBFKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUw1VG9rZW46Om5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTDVUb2tlbjo6Y2hhcmFjdGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MNVRva2VuOjpjb21tZW50KToKKyAgICAgICAgKiBodG1sL0hUTUw1VHJlZUJ1aWxk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvT2xkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTDVUcmVlQnVpbGRlcjo6cGFzc1Rva2VuVG9MZWdhY3lQYXJzZXIpOgorCiAy
MDEwLTA2LTAzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTDVM
ZXhlci5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTDVMZXhlci5jcHAKaW5kZXggNWZiNDY3OGFlMmQ4
NWM3MDRhYmM4OGU3ZGUwNWE4NTVkMjAyOWY1ZC4uNzZlZjdmN2Y5ZDlhNjQ2Y2JhYjhjNTBiZDE4
OWFjMDZkYzZmYzg0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUw1TGV4ZXIuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9IVE1MNUxleGVyLmNwcApAQCAtMTU0NSw3ICsxNTQ1LDcgQEAgaW5s
aW5lIHZvaWQgSFRNTDVMZXhlcjo6YWRkVG9Qb3NzaWJsZUVuZFRhZyhVQ2hhciBjYykKIAogaW5s
aW5lIGJvb2wgSFRNTDVMZXhlcjo6aXNBcHByb3ByaWF0ZUVuZFRhZygpCiB7Ci0gICAgcmV0dXJu
IHZlY3RvckVxdWFsc1N0cmluZyhtX2J1ZmZlcmVkRW5kVGFnTmFtZSwgbV9hcHByb3ByaWF0ZUVu
ZFRhZ05hbWUpOworICAgIHJldHVybiBtX2J1ZmZlcmVkRW5kVGFnTmFtZSA9PSBtX2FwcHJvcHJp
YXRlRW5kVGFnTmFtZTsKIH0KIAogaW5saW5lIHZvaWQgSFRNTDVMZXhlcjo6ZW1pdENoYXJhY3Rl
cihVQ2hhciBjaGFyYWN0ZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTDVMZXhlci5o
IGIvV2ViQ29yZS9odG1sL0hUTUw1TGV4ZXIuaAppbmRleCBhMWRmYmVjZTZiY2JhMGI4NGRkOWQ2
ZmI3YWRkOThhZjVhN2QxNTdmLi43NDRhY2FhMThkOGUxY2QyYWY0MDA2YTI2NDBmMWEyMTdjMzE1
OGMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTDVMZXhlci5oCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MNUxleGVyLmgKQEAgLTE1Miw3ICsxNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgU3RhdGUgbV9zdGF0ZTsKIAotICAgICAgICBBdG9taWNTdHJpbmcgbV9hcHBy
b3ByaWF0ZUVuZFRhZ05hbWU7CisgICAgICAgIFZlY3RvcjxVQ2hhciwgMzI+IG1fYXBwcm9wcmlh
dGVFbmRUYWdOYW1lOwogCiAgICAgICAgIC8vIG1fdG9rZW4gYW5kIG1fc291cmNlIGFyZSBvd25l
ZCBieSB0aGUgY2FsbGVyLiBJZiBuZXh0VG9rZW4gaXMgbm90CiAgICAgICAgIC8vIG9uIHRoZSBz
dGFjaywgdGhlc2UgbWVtYmVycyBtaWdodCBiZSBwb2ludGluZyB0byB1bmFsbG9jYXRlZCBtZW1v
cnkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTDVUb2tlbi5oIGIvV2ViQ29yZS9odG1s
L0hUTUw1VG9rZW4uaAppbmRleCBiNDE4OGQzNzI0NGYzZWM0NTczZGFmODI1ZDJhN2Q3NTQyMDZk
YzU2Li4xYjVlZTlhOTk2YjRhMjU5YjM5MmJiOGNhZTYzY2QzYmUzNTc1OWFmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvSFRNTDVUb2tlbi5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MNVRva2Vu
LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgICAgICBXVEY6OlZlY3RvcjxVQ2hhciwg
MzI+IG1fdmFsdWU7CiAgICAgfTsKIAotICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8QXR0cmlidXRl
PiBBdHRyaWJ1dGVMaXN0OworICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8QXR0cmlidXRlLCAxMD4g
QXR0cmlidXRlTGlzdDsKICAgICB0eXBlZGVmIFdURjo6VmVjdG9yPFVDaGFyLCAxMDI0PiBEYXRh
VmVjdG9yOwogCiAgICAgSFRNTDVUb2tlbigpIHsgY2xlYXIoKTsgfQpAQCAtNjQsNyArNjQsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFVuaW5pdGlhbGl6ZWQp
OwogICAgICAgICBtX3R5cGUgPSBTdGFydFRhZzsKLSAgICAgICAgY2xlYXJEYXRhKCk7CisgICAg
ICAgIG1fZGF0YS5jbGVhcigpOwogICAgICAgICBtX3NlbGZDbG9zaW5nID0gZmFsc2U7CiAgICAg
ICAgIG1fY3VycmVudEF0dHJpYnV0ZSA9IDA7CiAgICAgICAgIG1fYXR0cmlidXRlcy5jbGVhcigp
OwpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBl
ID09IFVuaW5pdGlhbGl6ZWQpOwogICAgICAgICBtX3R5cGUgPSBFbmRUYWc7Ci0gICAgICAgIGNs
ZWFyRGF0YSgpOworICAgICAgICBtX2RhdGEuY2xlYXIoKTsKICAgICAgICAgbV9zZWxmQ2xvc2lu
ZyA9IGZhbHNlOwogICAgICAgICBtX2N1cnJlbnRBdHRyaWJ1dGUgPSAwOwogICAgICAgICBtX2F0
dHJpYnV0ZXMuY2xlYXIoKTsKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBVbmluaXRpYWxpemVkKTsKICAgICAgICAgbV90eXBlID0gQ2hh
cmFjdGVyOwotICAgICAgICBjbGVhckRhdGEoKTsKKyAgICAgICAgbV9kYXRhLmNsZWFyKCk7CiAg
ICAgICAgIG1fZGF0YS5hcHBlbmQoY2hhcmFjdGVyKTsKICAgICB9CiAKQEAgLTk3LDE0ICs5Nywx
NCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFVuaW5pdGlhbGl6
ZWQpOwogICAgICAgICBtX3R5cGUgPSBDb21tZW50OwotICAgICAgICBjbGVhckRhdGEoKTsKKyAg
ICAgICAgbV9kYXRhLmNsZWFyKCk7CiAgICAgfQogCiAgICAgdm9pZCBiZWdpbkRPQ1RZUEUoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmluaXRpYWxpemVkKTsKICAgICAgICAg
bV90eXBlID0gRE9DVFlQRTsKLSAgICAgICAgY2xlYXJEYXRhKCk7CisgICAgICAgIG1fZGF0YS5j
bGVhcigpOwogICAgICAgICBtX2RvY3R5cGVEYXRhLnNldChuZXcgRG9jdHlwZURhdGEoKSk7CiAg
ICAgfQogCkBAIC0xNjYsNDggKzE2NiwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2F0
dHJpYnV0ZXM7CiAgICAgfQogCi0gICAgQXRvbWljU3RyaW5nIG5hbWUoKQorICAgIGNvbnN0IERh
dGFWZWN0b3ImIG5hbWUoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBTdGFydFRh
ZyB8fCBtX3R5cGUgPT0gRW5kVGFnIHx8IG1fdHlwZSA9PSBET0NUWVBFKTsKLSAgICAgICAgaWYg
KCFtX2RhdGEuaXNFbXB0eSgpICYmIG1fZGF0YUFzTmFtZUF0b20uaXNFbXB0eSgpKQotICAgICAg
ICAgICAgbV9kYXRhQXNOYW1lQXRvbSA9IEF0b21pY1N0cmluZyhhZG9wdERhdGFBc1N0cmluZ0lt
cGwoKSk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFBc05hbWVBdG9tOwotICAgIH0KLQotICAgIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRvcHREYXRhQXNTdHJpbmdJbXBsKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVCghbV9kYXRhQXNOYW1lQXRvbSk7IC8vIEFuIGF0dGVtcHQgdG8gbWFrZSBzdXJl
IHRoaXMgaXNuJ3QgY2FsbGVkIHR3aWNlLgotICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6YWRv
cHQobV9kYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKICAgICB9CiAKICAgICBjb25zdCBE
YXRhVmVjdG9yJiBjaGFyYWN0ZXJzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0g
Q2hhcmFjdGVyKTsKLSAgICAgICAgQVNTRVJUKCFtX2RhdGFBc05hbWVBdG9tKTsKICAgICAgICAg
cmV0dXJuIG1fZGF0YTsKICAgICB9CiAKICAgICBjb25zdCBEYXRhVmVjdG9yJiBjb21tZW50KCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ29tbWVudCk7Ci0gICAgICAgIEFTU0VS
VCghbV9kYXRhQXNOYW1lQXRvbSk7CiAgICAgICAgIHJldHVybiBtX2RhdGE7CiAgICAgfQogCi0g
ICAgLy8gRklYTUU6IFNob3VsZCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3RvcCB1c2luZyB0aGUgb2xk
IHBhcnNlci4KLSAgICBTdHJpbmcgdGFrZUNoYXJhY3RlcnMoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBDaGFyYWN0ZXIpOwotICAgICAgICByZXR1cm4gU3RyaW5nKGFkb3B0RGF0
YUFzU3RyaW5nSW1wbCgpKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIGJlIHJlbW92
ZWQgb25jZSB3ZSBzdG9wIHVzaW5nIHRoZSBvbGQgcGFyc2VyLgotICAgIFN0cmluZyB0YWtlQ29t
bWVudCgpCi0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IENvbW1lbnQpOwotICAgICAg
ICByZXR1cm4gU3RyaW5nKGFkb3B0RGF0YUFzU3RyaW5nSW1wbCgpKTsKLSAgICB9Ci0KICAgICAv
LyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1pc3NpbmcgcHVibGljIGlkZW50aWZlciBh
bmQgYW4gZW1wdHkgb25lLgogICAgIGNvbnN0IFdURjo6VmVjdG9yPFVDaGFyPiYgcHVibGljSWRl
bnRpZmllcigpCiAgICAgewpAQCAtMjY3LDE5ICsyNDMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
V1RGOjpWZWN0b3I8VUNoYXI+IG1fc3lzdGVtSWRlbnRpZmllcjsKICAgICB9OwogCi0gICAgdm9p
ZCBjbGVhckRhdGEoKQotICAgIHsKLSAgICAgICAgbV9kYXRhLmNsZWFyKCk7Ci0gICAgICAgIG1f
ZGF0YUFzTmFtZUF0b20gPSBBdG9taWNTdHJpbmcoKTsKLSAgICB9Ci0KICAgICBUeXBlIG1fdHlw
ZTsKIAogICAgIC8vICJuYW1lIiBmb3IgRE9DVFlQRSwgU3RhcnRUYWcsIGFuZCBFbmRUYWcKICAg
ICAvLyAiY2hhcmFjdGVycyIgZm9yIENoYXJhY3RlcgogICAgIC8vICJkYXRhIiBmb3IgQ29tbWVu
dAogICAgIERhdGFWZWN0b3IgbV9kYXRhOwotICAgIEF0b21pY1N0cmluZyBtX2RhdGFBc05hbWVB
dG9tOwogCiAgICAgLy8gRm9yIERPQ1RZUEUKICAgICBPd25QdHI8RG9jdHlwZURhdGE+IG1fZG9j
dHlwZURhdGE7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTDVUcmVlQnVpbGRlci5jcHAg
Yi9XZWJDb3JlL2h0bWwvSFRNTDVUcmVlQnVpbGRlci5jcHAKaW5kZXggN2M3Zjg3NzEwZDlhNzhi
ZjNkODNkZGIyMDE5OTI5OTc1Y2I2NDFhOS4uNmY5NTI4ZDNmMGY4YWI2YjljOWRmNmViYWIwNGNi
ZTNjOTE0Y2FmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUw1VHJlZUJ1aWxkZXIuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MNVRyZWVCdWlsZGVyLmNwcApAQCAtNzIsNyArNzIsNyBA
QCBzdGF0aWMgdm9pZCBjb252ZXJ0VG9PbGRTdHlsZShIVE1MNVRva2VuJiB0b2tlbiwgVG9rZW4m
IG9sZFN0eWxlVG9rZW4pCiAgICAgY2FzZSBIVE1MNVRva2VuOjpFbmRUYWc6IHsKICAgICAgICAg
b2xkU3R5bGVUb2tlbi5iZWdpblRhZyA9ICh0b2tlbi50eXBlKCkgPT0gSFRNTDVUb2tlbjo6U3Rh
cnRUYWcpOwogICAgICAgICBvbGRTdHlsZVRva2VuLnNlbGZDbG9zaW5nVGFnID0gdG9rZW4uc2Vs
ZkNsb3NpbmcoKTsKLSAgICAgICAgb2xkU3R5bGVUb2tlbi50YWdOYW1lID0gdG9rZW4ubmFtZSgp
OworICAgICAgICBvbGRTdHlsZVRva2VuLnRhZ05hbWUgPSBBdG9taWNTdHJpbmcodG9rZW4ubmFt
ZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSk7CiAgICAgICAgIEhUTUw1VG9rZW46OkF0
dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCk7CiAgICAgICAgIGZv
ciAoSFRNTDVUb2tlbjo6QXR0cmlidXRlTGlzdDo6aXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMu
YmVnaW4oKTsKICAgICAgICAgICAgICBpdGVyICE9IGF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikg
ewpAQCAtODksMTEgKzg5LDExIEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRUb09sZFN0eWxlKEhUTUw1
VG9rZW4mIHRva2VuLCBUb2tlbiYgb2xkU3R5bGVUb2tlbikKICAgICB9CiAgICAgY2FzZSBIVE1M
NVRva2VuOjpDb21tZW50OgogICAgICAgICBvbGRTdHlsZVRva2VuLnRhZ05hbWUgPSBjb21tZW50
QXRvbTsKLSAgICAgICAgb2xkU3R5bGVUb2tlbi50ZXh0ID0gdG9rZW4udGFrZUNvbW1lbnQoKS5p
bXBsKCk7CisgICAgICAgIG9sZFN0eWxlVG9rZW4udGV4dCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN0
cmlwcGluZ051bGxDaGFyYWN0ZXJzKHRva2VuLmNvbW1lbnQoKS5kYXRhKCksIHRva2VuLmNvbW1l
bnQoKS5zaXplKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEhUTUw1VG9rZW46OkNoYXJh
Y3RlcjoKICAgICAgICAgb2xkU3R5bGVUb2tlbi50YWdOYW1lID0gdGV4dEF0b207Ci0gICAgICAg
IG9sZFN0eWxlVG9rZW4udGV4dCA9IHRva2VuLnRha2VDaGFyYWN0ZXJzKCkuaW1wbCgpOworICAg
ICAgICBvbGRTdHlsZVRva2VuLnRleHQgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxs
Q2hhcmFjdGVycyh0b2tlbi5jaGFyYWN0ZXJzKCkuZGF0YSgpLCB0b2tlbi5jaGFyYWN0ZXJzKCku
c2l6ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMTM1LDcgKzEzNSw3IEBAIFBh
c3NSZWZQdHI8Tm9kZT4gSFRNTDVUcmVlQnVpbGRlcjo6cGFzc1Rva2VuVG9MZWdhY3lQYXJzZXIo
SFRNTDVUb2tlbiYgdG9rZW4pCiB7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MNVRva2Vu
OjpET0NUWVBFKSB7CiAgICAgICAgIERvY3R5cGVUb2tlbiBkb2N0eXBlVG9rZW47Ci0gICAgICAg
IGRvY3R5cGVUb2tlbi5tX25hbWUuYXBwZW5kKHRva2VuLm5hbWUoKS5jaGFyYWN0ZXJzKCksIHRv
a2VuLm5hbWUoKS5sZW5ndGgoKSk7CisgICAgICAgIGRvY3R5cGVUb2tlbi5tX25hbWUuYXBwZW5k
KHRva2VuLm5hbWUoKS5kYXRhKCksIHRva2VuLm5hbWUoKS5zaXplKCkpOwogICAgICAgICBkb2N0
eXBlVG9rZW4ubV9wdWJsaWNJRCA9IHRva2VuLnB1YmxpY0lkZW50aWZpZXIoKTsKICAgICAgICAg
ZG9jdHlwZVRva2VuLm1fc3lzdGVtSUQgPSB0b2tlbi5zeXN0ZW1JZGVudGlmaWVyKCk7CiAKQEAg
LTE1MSwyMyArMTUxLDIzIEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTDVUcmVlQnVpbGRlcjo6cGFz
c1Rva2VuVG9MZWdhY3lQYXJzZXIoSFRNTDVUb2tlbiYgdG9rZW4pCiAgICAgaWYgKHRva2VuLnR5
cGUoKSA9PSBIVE1MNVRva2VuOjpTdGFydFRhZykgewogICAgICAgICAvLyBUaGlzIHdvcmsgaXMg
c3VwcG9zZWQgdG8gYmUgZG9uZSBieSB0aGUgcGFyc2VyLCBidXQKICAgICAgICAgLy8gd2hlbiB1
c2luZyB0aGUgb2xkIHBhcnNlciBmb3Igd2UgaGF2ZSB0byBkbyB0aGlzIG1hbnVhbGx5LgotICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZykgeworICAgICAgICBpZiAob2xkU3R5
bGVUb2tlbi50YWdOYW1lID09IHNjcmlwdFRhZykgewogICAgICAgICAgICAgaGFuZGxlU2NyaXB0
U3RhcnRUYWcoKTsKICAgICAgICAgICAgIG1fbGFzdFNjcmlwdEVsZW1lbnQgPSBzdGF0aWNfcG9p
bnRlcl9jYXN0PEVsZW1lbnQ+KHJlc3VsdCk7CiAgICAgICAgICAgICBtX2xhc3RTY3JpcHRFbGVt
ZW50U3RhcnRMaW5lID0gbV9sZXhlci0+bGluZU51bWJlcigpOwotICAgICAgICB9IGVsc2UgaWYg
KHRva2VuLm5hbWUoKSA9PSB0ZXh0YXJlYVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdGl0bGVUYWcp
CisgICAgICAgIH0gZWxzZSBpZiAob2xkU3R5bGVUb2tlbi50YWdOYW1lID09IHRleHRhcmVhVGFn
IHx8IG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSB0aXRsZVRhZykKICAgICAgICAgICAgIG1fbGV4
ZXItPnNldFN0YXRlKEhUTUw1TGV4ZXI6OlJDREFUQVN0YXRlKTsKLSAgICAgICAgZWxzZSBpZiAo
dG9rZW4ubmFtZSgpID09IHN0eWxlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBpZnJhbWVUYWcKLSAg
ICAgICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHhtcFRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gbm9lbWJlZFRhZykgeworICAgICAgICBlbHNlIGlmIChvbGRTdHlsZVRva2VuLnRhZ05hbWUg
PT0gc3R5bGVUYWcgfHwgb2xkU3R5bGVUb2tlbi50YWdOYW1lID09IGlmcmFtZVRhZworICAgICAg
ICAgICAgICAgICB8fCBvbGRTdHlsZVRva2VuLnRhZ05hbWUgPT0geG1wVGFnIHx8IG9sZFN0eWxl
VG9rZW4udGFnTmFtZSA9PSBub2VtYmVkVGFnKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbm9z
Y3JpcHQgYW5kIG5vZnJhbWVzIG1heSBjb25kaXRpb25hbGx5IGVudGVyIHRoaXMgc3RhdGUgYXMg
d2VsbC4KICAgICAgICAgICAgIG1fbGV4ZXItPnNldFN0YXRlKEhUTUw1TGV4ZXI6OlJBV1RFWFRT
dGF0ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodG9rZW4ubmFtZSgpID09IHBsYWludGV4dFRhZykK
KyAgICAgICAgfSBlbHNlIGlmIChvbGRTdHlsZVRva2VuLnRhZ05hbWUgPT0gcGxhaW50ZXh0VGFn
KQogICAgICAgICAgICAgbV9sZXhlci0+c2V0U3RhdGUoSFRNTDVMZXhlcjo6UExBSU5URVhUU3Rh
dGUpOwotICAgICAgICBlbHNlIGlmICh0b2tlbi5uYW1lKCkgPT0gcHJlVGFnIHx8IHRva2VuLm5h
bWUoKSA9PSBsaXN0aW5nVGFnKQorICAgICAgICBlbHNlIGlmIChvbGRTdHlsZVRva2VuLnRhZ05h
bWUgPT0gcHJlVGFnIHx8IG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSBsaXN0aW5nVGFnKQogICAg
ICAgICAgICAgbV9sZXhlci0+c2tpcExlYWRpbmdOZXdMaW5lRm9yTGlzdGluZygpOwogICAgIH0K
ICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUw1VG9rZW46OkVuZFRhZykgewotICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZykgeworICAgICAgICBpZiAob2xkU3R5bGVUb2tl
bi50YWdOYW1lID09IHNjcmlwdFRhZykgewogICAgICAgICAgICAgaWYgKG1fbGFzdFNjcmlwdEVs
ZW1lbnQpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0
TGluZSAhPSB1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKTsKICAgICAgICAgICAgICAgICBo
YW5kbGVTY3JpcHRFbmRUYWcobV9sYXN0U2NyaXB0RWxlbWVudC5nZXQoKSwgbV9sYXN0U2NyaXB0
RWxlbWVudFN0YXJ0TGluZSk7Cg==
</data>
<flag name="review"
          id="42617"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57962</attachid>
            <date>2010-06-04 22:48:12 -0700</date>
            <delta_ts>2010-06-04 22:50:30 -0700</delta_ts>
            <desc>patch with check converted to assert</desc>
            <filename>0002-fastify.patch</filename>
            <type>text/plain</type>
            <size>11954</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">RnJvbSBkODc0ODRjMDgwNTA2MDcyZDI0OGM2MGQ4ZWRlZTQyMTNhNDZiMWZkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGFtIEJhcnRoIDxhYmFydGhAd2Via2l0Lm9yZz4KRGF0ZTog
RnJpLCA0IEp1biAyMDEwIDE2OjEyOjMxIC0wNzAwClN1YmplY3Q6IFtQQVRDSCAyLzRdIGZhc3Rp
ZnkKCi0tLQogSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgIHwgICAxMyArKysrKysr
KysrCiBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmggICAgICAgfCAgIDEwICsrKysrLS0KIFdl
YkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICB8ICAgMjggKysrKysrKysrKysrKysrKysr
KysrKwogV2ViQ29yZS9odG1sL0hUTUw1TGV4ZXIuY3BwICAgICAgIHwgICAgMiArLQogV2ViQ29y
ZS9odG1sL0hUTUw1TGV4ZXIuaCAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9odG1sL0hUTUw1
VG9rZW4uaCAgICAgICAgIHwgICA0NyArKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIFdlYkNvcmUvaHRtbC9IVE1MNVRyZWVCdWlsZGVyLmNwcCB8ICAgMjIgKysrKysrKystLS0t
LS0tLQogNyBmaWxlcyBjaGFuZ2VkLCA2OSBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkK
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKaW5kZXggNDI2MGQ5Mi4uOWVhN2UwNCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDEwLTA2LTA0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSFRNTDUgcGFyc2VyIHNo
b3VsZCBiZSB3aXRoaW4gMSUgb2Ygb2xkIHBhcnNlciBwZXJmb3JtYW5jZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxNzIKKworICAgICAgICBGaXgg
Y2FzdCBpbiB0aGlzIG9wZXJhdG9yPSB0byBhbGxvdyBmb3IgYXNzaWdubWVudCBiZXR3ZWVuIHZl
Y3RvcnMgd2l0aAorICAgICAgICBkaWZmZXJlbnQgaW5saW5lIGNhcGFjaXRpZXMgKGFzIGNsZWFy
bHkgaW50ZW5kZWQgYnkgaXRzIGF1dGhvcikuCisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6Cisg
ICAgICAgIChXVEY6Ojo6b3BlcmF0b3IpOgorCiAyMDEwLTA2LTA0ICBNYXJrIFJvd2UgIDxtcm93
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgU2lsZW5jZSBzb21lIHdhcm5pbmdzIHNlZW4gb24gdGhl
IGJ1aWxkIGJvdC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaCBiL0ph
dmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAppbmRleCA0ZDllYTYxLi5iNjUzMDAxIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L1ZlY3Rvci5oCkBAIC02OTksMTMgKzY5OSwxNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgIH0KIAorICAgIGlubGluZSBib29sIHR5cGVsZXNzUG9pbnRlcnNB
cmVFcXVhbChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKSB7IHJldHVybiBhID09IGI7IH0K
KwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgICB0
ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eT4gCiAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5PiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6b3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxU
LCBvdGhlckNhcGFjaXR5PiYgb3RoZXIpCiAgICAgewotICAgICAgICBpZiAoJm90aGVyID09IHRo
aXMpCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIAorICAgICAgICAvLyBJZiB0
aGUgaW5saW5lIGNhcGFjaXRpZXMgbWF0Y2gsIHdlIHNob3VsZCBjYWxsIHRoZSBtb3JlIHNwZWNp
ZmljCisgICAgICAgIC8vIHRlbXBsYXRlLiAgSWYgdGhlIGlubGluZSBjYXBhY2l0aWVzIGRvbid0
IG1hdGNoLCB0aGUgdHdvIG9iamVjdHMKKyAgICAgICAgLy8gc2hvdWxkbid0IGJlIGFsbG9jYXRl
ZCB0aGUgc2FtZSBhZGRyZXNzLgorICAgICAgICBBU1NFUlQoIXR5cGVsZXNzUG9pbnRlcnNBcmVF
cXVhbCgmb3RoZXIsIHRoaXMpKTsKKwogICAgICAgICBpZiAoc2l6ZSgpID4gb3RoZXIuc2l6ZSgp
KQogICAgICAgICAgICAgc2hyaW5rKG90aGVyLnNpemUoKSk7CiAgICAgICAgIGVsc2UgaWYgKG90
aGVyLnNpemUoKSA+IGNhcGFjaXR5KCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjgzY2UxNC4uMjE1NjJiMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwzNCBA
QAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIEhUTUw1
IHBhcnNlciBzaG91bGQgYmUgd2l0aGluIDElIG9mIG9sZCBwYXJzZXIgcGVyZm9ybWFuY2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTcyCisKKyAg
ICAgICAgU3RvcCB1c2luZyBhZG9wdCgpLiAgSSB0aGluayB0aGlzIGZ1bmN0aW9uIGlzIGNhdXNl
IHVzIHRvIGRvIGV4dHJhCisgICAgICAgIG1hbGxvY3MgdGhhdCBhcmUgaHVydGluZyBwZXJmb3Jt
YW5jZS4gIEluc3RlYWQgb2YgY2FjaGluZyBBdG9taWNTdHJpbmcKKyAgICAgICAgb24gSFRNTDVU
b2tlbiwganVzdCB1c2UgdGhlIEF0b21pY1N0cmluZyBvbiB0aGUgb2xkIHRva2VuLiAgQWxzbywK
KyAgICAgICAgcmVzZXJ2ZSBpbmxpbmUgY2FwYWNpdHkgZm9yIDEwIGF0dHJpYnV0ZXMuCisKKyAg
ICAgICAgKiBodG1sL0hUTUw1TGV4ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTDVMZXhl
cjo6aXNBcHByb3ByaWF0ZUVuZFRhZyk6CisgICAgICAgICogaHRtbC9IVE1MNUxleGVyLmg6Cisg
ICAgICAgICogaHRtbC9IVE1MNVRva2VuLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MNVRva2Vu
OjpiZWdpblN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUw1VG9rZW46OmJlZ2luRW5k
VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUw1VG9rZW46OmJlZ2luQ2hhcmFjdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUw1VG9rZW46OmJlZ2luQ29tbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MNVRva2VuOjpiZWdpbkRPQ1RZUEUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTDVU
b2tlbjo6bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MNVRva2VuOjpjaGFyYWN0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUw1VG9rZW46OmNvbW1lbnQpOgorICAgICAgICAqIGh0bWwv
SFRNTDVUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9PbGRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MNVRyZWVCdWlsZGVyOjpwYXNzVG9rZW5Ub0xlZ2Fj
eVBhcnNlcik6CisKKzIwMTAtMDYtMDQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBNYWtlIEhU
TUw1TGV4ZXIgZ28gZmFzdAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDAwNDgKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUw1TGV4ZXIuY3Bw
IGIvV2ViQ29yZS9odG1sL0hUTUw1TGV4ZXIuY3BwCmluZGV4IDg2NGVhNDguLjdhODc0N2IgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MNUxleGVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
SFRNTDVMZXhlci5jcHAKQEAgLTE2MTQsNyArMTYxNCw3IEBAIGlubGluZSB2b2lkIEhUTUw1TGV4
ZXI6OmFkZFRvUG9zc2libGVFbmRUYWcoVUNoYXIgY2MpCiAKIGlubGluZSBib29sIEhUTUw1TGV4
ZXI6OmlzQXBwcm9wcmlhdGVFbmRUYWcoKQogewotICAgIHJldHVybiB2ZWN0b3JFcXVhbHNTdHJp
bmcobV9idWZmZXJlZEVuZFRhZ05hbWUsIG1fYXBwcm9wcmlhdGVFbmRUYWdOYW1lKTsKKyAgICBy
ZXR1cm4gbV9idWZmZXJlZEVuZFRhZ05hbWUgPT0gbV9hcHByb3ByaWF0ZUVuZFRhZ05hbWU7CiB9
CiAKIGlubGluZSB2b2lkIEhUTUw1TGV4ZXI6OmVtaXRDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVy
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUw1TGV4ZXIuaCBiL1dlYkNvcmUvaHRtbC9I
VE1MNUxleGVyLmgKaW5kZXggYjcwZjI5Zi4uYjk1Y2RmYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUw1TGV4ZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTDVMZXhlci5oCkBAIC0xNTAs
NyArMTUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFN0YXRlIG1fc3RhdGU7
CiAKLSAgICAgICAgQXRvbWljU3RyaW5nIG1fYXBwcm9wcmlhdGVFbmRUYWdOYW1lOworICAgICAg
ICBWZWN0b3I8VUNoYXIsIDMyPiBtX2FwcHJvcHJpYXRlRW5kVGFnTmFtZTsKIAogICAgICAgICAv
LyBtX3Rva2VuIGlzIG93bmVkIGJ5IHRoZSBjYWxsZXIuICBJZiBuZXh0VG9rZW4gaXMgbm90IG9u
IHRoZSBzdGFjaywKICAgICAgICAgLy8gdGhpcyBtZW1iZXIgbWlnaHQgYmUgcG9pbnRpbmcgdG8g
dW5hbGxvY2F0ZWQgbWVtb3J5LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUw1VG9rZW4u
aCBiL1dlYkNvcmUvaHRtbC9IVE1MNVRva2VuLmgKaW5kZXggYjQxODhkMy4uMWI1ZWU5YSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUw1VG9rZW4uaAorKysgYi9XZWJDb3JlL2h0bWwvSFRN
TDVUb2tlbi5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgV1RGOjpWZWN0b3I8
VUNoYXIsIDMyPiBtX3ZhbHVlOwogICAgIH07CiAKLSAgICB0eXBlZGVmIFdURjo6VmVjdG9yPEF0
dHJpYnV0ZT4gQXR0cmlidXRlTGlzdDsKKyAgICB0eXBlZGVmIFdURjo6VmVjdG9yPEF0dHJpYnV0
ZSwgMTA+IEF0dHJpYnV0ZUxpc3Q7CiAgICAgdHlwZWRlZiBXVEY6OlZlY3RvcjxVQ2hhciwgMTAy
ND4gRGF0YVZlY3RvcjsKIAogICAgIEhUTUw1VG9rZW4oKSB7IGNsZWFyKCk7IH0KQEAgLTY0LDcg
KzY0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmluaXRp
YWxpemVkKTsKICAgICAgICAgbV90eXBlID0gU3RhcnRUYWc7Ci0gICAgICAgIGNsZWFyRGF0YSgp
OworICAgICAgICBtX2RhdGEuY2xlYXIoKTsKICAgICAgICAgbV9zZWxmQ2xvc2luZyA9IGZhbHNl
OwogICAgICAgICBtX2N1cnJlbnRBdHRyaWJ1dGUgPSAwOwogICAgICAgICBtX2F0dHJpYnV0ZXMu
Y2xlYXIoKTsKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBVbmluaXRpYWxpemVkKTsKICAgICAgICAgbV90eXBlID0gRW5kVGFnOwotICAg
ICAgICBjbGVhckRhdGEoKTsKKyAgICAgICAgbV9kYXRhLmNsZWFyKCk7CiAgICAgICAgIG1fc2Vs
ZkNsb3NpbmcgPSBmYWxzZTsKICAgICAgICAgbV9jdXJyZW50QXR0cmlidXRlID0gMDsKICAgICAg
ICAgbV9hdHRyaWJ1dGVzLmNsZWFyKCk7CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVW5pbml0aWFsaXplZCk7CiAgICAgICAgIG1fdHlw
ZSA9IENoYXJhY3RlcjsKLSAgICAgICAgY2xlYXJEYXRhKCk7CisgICAgICAgIG1fZGF0YS5jbGVh
cigpOwogICAgICAgICBtX2RhdGEuYXBwZW5kKGNoYXJhY3Rlcik7CiAgICAgfQogCkBAIC05Nywx
NCArOTcsMTQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmlu
aXRpYWxpemVkKTsKICAgICAgICAgbV90eXBlID0gQ29tbWVudDsKLSAgICAgICAgY2xlYXJEYXRh
KCk7CisgICAgICAgIG1fZGF0YS5jbGVhcigpOwogICAgIH0KIAogICAgIHZvaWQgYmVnaW5ET0NU
WVBFKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVW5pbml0aWFsaXplZCk7CiAg
ICAgICAgIG1fdHlwZSA9IERPQ1RZUEU7Ci0gICAgICAgIGNsZWFyRGF0YSgpOworICAgICAgICBt
X2RhdGEuY2xlYXIoKTsKICAgICAgICAgbV9kb2N0eXBlRGF0YS5zZXQobmV3IERvY3R5cGVEYXRh
KCkpOwogICAgIH0KIApAQCAtMTY2LDQ4ICsxNjYsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9hdHRyaWJ1dGVzOwogICAgIH0KIAotICAgIEF0b21pY1N0cmluZyBuYW1lKCkKKyAgICBj
b25zdCBEYXRhVmVjdG9yJiBuYW1lKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0g
U3RhcnRUYWcgfHwgbV90eXBlID09IEVuZFRhZyB8fCBtX3R5cGUgPT0gRE9DVFlQRSk7Ci0gICAg
ICAgIGlmICghbV9kYXRhLmlzRW1wdHkoKSAmJiBtX2RhdGFBc05hbWVBdG9tLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIG1fZGF0YUFzTmFtZUF0b20gPSBBdG9taWNTdHJpbmcoYWRvcHREYXRhQXNT
dHJpbmdJbXBsKCkpOwotICAgICAgICByZXR1cm4gbV9kYXRhQXNOYW1lQXRvbTsKLSAgICB9Ci0K
LSAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkb3B0RGF0YUFzU3RyaW5nSW1wbCgpCi0gICAg
ewotICAgICAgICBBU1NFUlQoIW1fZGF0YUFzTmFtZUF0b20pOyAvLyBBbiBhdHRlbXB0IHRvIG1h
a2Ugc3VyZSB0aGlzIGlzbid0IGNhbGxlZCB0d2ljZS4KLSAgICAgICAgcmV0dXJuIFN0cmluZ0lt
cGw6OmFkb3B0KG1fZGF0YSk7CisgICAgICAgIHJldHVybiBtX2RhdGE7CiAgICAgfQogCiAgICAg
Y29uc3QgRGF0YVZlY3RvciYgY2hhcmFjdGVycygpCiAgICAgewogICAgICAgICBBU1NFUlQobV90
eXBlID09IENoYXJhY3Rlcik7Ci0gICAgICAgIEFTU0VSVCghbV9kYXRhQXNOYW1lQXRvbSk7CiAg
ICAgICAgIHJldHVybiBtX2RhdGE7CiAgICAgfQogCiAgICAgY29uc3QgRGF0YVZlY3RvciYgY29t
bWVudCgpCiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IENvbW1lbnQpOwotICAgICAg
ICBBU1NFUlQoIW1fZGF0YUFzTmFtZUF0b20pOwogICAgICAgICByZXR1cm4gbV9kYXRhOwogICAg
IH0KIAotICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgcmVtb3ZlZCBvbmNlIHdlIHN0b3AgdXNpbmcg
dGhlIG9sZCBwYXJzZXIuCi0gICAgU3RyaW5nIHRha2VDaGFyYWN0ZXJzKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gQ2hhcmFjdGVyKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZyhh
ZG9wdERhdGFBc1N0cmluZ0ltcGwoKSk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFNob3VsZCBi
ZSByZW1vdmVkIG9uY2Ugd2Ugc3RvcCB1c2luZyB0aGUgb2xkIHBhcnNlci4KLSAgICBTdHJpbmcg
dGFrZUNvbW1lbnQoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBDb21tZW50KTsK
LSAgICAgICAgcmV0dXJuIFN0cmluZyhhZG9wdERhdGFBc1N0cmluZ0ltcGwoKSk7Ci0gICAgfQot
CiAgICAgLy8gRklYTUU6IERpc3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5nIHB1YmxpYyBpZGVu
dGlmZXIgYW5kIGFuIGVtcHR5IG9uZS4KICAgICBjb25zdCBXVEY6OlZlY3RvcjxVQ2hhcj4mIHB1
YmxpY0lkZW50aWZpZXIoKQogICAgIHsKQEAgLTI2NywxOSArMjQzLDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgIFdURjo6VmVjdG9yPFVDaGFyPiBtX3N5c3RlbUlkZW50aWZpZXI7CiAgICAgfTsKIAot
ICAgIHZvaWQgY2xlYXJEYXRhKCkKLSAgICB7Ci0gICAgICAgIG1fZGF0YS5jbGVhcigpOwotICAg
ICAgICBtX2RhdGFBc05hbWVBdG9tID0gQXRvbWljU3RyaW5nKCk7Ci0gICAgfQotCiAgICAgVHlw
ZSBtX3R5cGU7CiAKICAgICAvLyAibmFtZSIgZm9yIERPQ1RZUEUsIFN0YXJ0VGFnLCBhbmQgRW5k
VGFnCiAgICAgLy8gImNoYXJhY3RlcnMiIGZvciBDaGFyYWN0ZXIKICAgICAvLyAiZGF0YSIgZm9y
IENvbW1lbnQKICAgICBEYXRhVmVjdG9yIG1fZGF0YTsKLSAgICBBdG9taWNTdHJpbmcgbV9kYXRh
QXNOYW1lQXRvbTsKIAogICAgIC8vIEZvciBET0NUWVBFCiAgICAgT3duUHRyPERvY3R5cGVEYXRh
PiBtX2RvY3R5cGVEYXRhOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUw1VHJlZUJ1aWxk
ZXIuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUw1VHJlZUJ1aWxkZXIuY3BwCmluZGV4IDdjN2Y4Nzcu
LmQ5OTc2NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MNVRyZWVCdWlsZGVyLmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvSFRNTDVUcmVlQnVpbGRlci5jcHAKQEAgLTcyLDcgKzcyLDcgQEAg
c3RhdGljIHZvaWQgY29udmVydFRvT2xkU3R5bGUoSFRNTDVUb2tlbiYgdG9rZW4sIFRva2VuJiBv
bGRTdHlsZVRva2VuKQogICAgIGNhc2UgSFRNTDVUb2tlbjo6RW5kVGFnOiB7CiAgICAgICAgIG9s
ZFN0eWxlVG9rZW4uYmVnaW5UYWcgPSAodG9rZW4udHlwZSgpID09IEhUTUw1VG9rZW46OlN0YXJ0
VGFnKTsKICAgICAgICAgb2xkU3R5bGVUb2tlbi5zZWxmQ2xvc2luZ1RhZyA9IHRva2VuLnNlbGZD
bG9zaW5nKCk7Ci0gICAgICAgIG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9IHRva2VuLm5hbWUoKTsK
KyAgICAgICAgb2xkU3R5bGVUb2tlbi50YWdOYW1lID0gQXRvbWljU3RyaW5nKHRva2VuLm5hbWUo
KS5kYXRhKCksIHRva2VuLm5hbWUoKS5zaXplKCkpOwogICAgICAgICBIVE1MNVRva2VuOjpBdHRy
aWJ1dGVMaXN0JiBhdHRyaWJ1dGVzID0gdG9rZW4uYXR0cmlidXRlcygpOwogICAgICAgICBmb3Ig
KEhUTUw1VG9rZW46OkF0dHJpYnV0ZUxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmJl
Z2luKCk7CiAgICAgICAgICAgICAgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsK
QEAgLTg5LDExICs4OSwxMSBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0VG9PbGRTdHlsZShIVE1MNVRv
a2VuJiB0b2tlbiwgVG9rZW4mIG9sZFN0eWxlVG9rZW4pCiAgICAgfQogICAgIGNhc2UgSFRNTDVU
b2tlbjo6Q29tbWVudDoKICAgICAgICAgb2xkU3R5bGVUb2tlbi50YWdOYW1lID0gY29tbWVudEF0
b207Ci0gICAgICAgIG9sZFN0eWxlVG9rZW4udGV4dCA9IHRva2VuLnRha2VDb21tZW50KCkuaW1w
bCgpOworICAgICAgICBvbGRTdHlsZVRva2VuLnRleHQgPSBTdHJpbmdJbXBsOjpjcmVhdGUodG9r
ZW4uY29tbWVudCgpLmRhdGEoKSwgdG9rZW4uY29tbWVudCgpLnNpemUoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSFRNTDVUb2tlbjo6Q2hhcmFjdGVyOgogICAgICAgICBvbGRTdHlsZVRv
a2VuLnRhZ05hbWUgPSB0ZXh0QXRvbTsKLSAgICAgICAgb2xkU3R5bGVUb2tlbi50ZXh0ID0gdG9r
ZW4udGFrZUNoYXJhY3RlcnMoKS5pbXBsKCk7CisgICAgICAgIG9sZFN0eWxlVG9rZW4udGV4dCA9
IFN0cmluZ0ltcGw6OmNyZWF0ZSh0b2tlbi5jaGFyYWN0ZXJzKCkuZGF0YSgpLCB0b2tlbi5jaGFy
YWN0ZXJzKCkuc2l6ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMTM1LDcgKzEz
NSw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTDVUcmVlQnVpbGRlcjo6cGFzc1Rva2VuVG9MZWdh
Y3lQYXJzZXIoSFRNTDVUb2tlbiYgdG9rZW4pCiB7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBI
VE1MNVRva2VuOjpET0NUWVBFKSB7CiAgICAgICAgIERvY3R5cGVUb2tlbiBkb2N0eXBlVG9rZW47
Ci0gICAgICAgIGRvY3R5cGVUb2tlbi5tX25hbWUuYXBwZW5kKHRva2VuLm5hbWUoKS5jaGFyYWN0
ZXJzKCksIHRva2VuLm5hbWUoKS5sZW5ndGgoKSk7CisgICAgICAgIGRvY3R5cGVUb2tlbi5tX25h
bWUuYXBwZW5kKHRva2VuLm5hbWUoKS5kYXRhKCksIHRva2VuLm5hbWUoKS5zaXplKCkpOwogICAg
ICAgICBkb2N0eXBlVG9rZW4ubV9wdWJsaWNJRCA9IHRva2VuLnB1YmxpY0lkZW50aWZpZXIoKTsK
ICAgICAgICAgZG9jdHlwZVRva2VuLm1fc3lzdGVtSUQgPSB0b2tlbi5zeXN0ZW1JZGVudGlmaWVy
KCk7CiAKQEAgLTE1MSwyMyArMTUxLDIzIEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTDVUcmVlQnVp
bGRlcjo6cGFzc1Rva2VuVG9MZWdhY3lQYXJzZXIoSFRNTDVUb2tlbiYgdG9rZW4pCiAgICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBIVE1MNVRva2VuOjpTdGFydFRhZykgewogICAgICAgICAvLyBUaGlz
IHdvcmsgaXMgc3VwcG9zZWQgdG8gYmUgZG9uZSBieSB0aGUgcGFyc2VyLCBidXQKICAgICAgICAg
Ly8gd2hlbiB1c2luZyB0aGUgb2xkIHBhcnNlciBmb3Igd2UgaGF2ZSB0byBkbyB0aGlzIG1hbnVh
bGx5LgotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZykgeworICAgICAgICBp
ZiAob2xkU3R5bGVUb2tlbi50YWdOYW1lID09IHNjcmlwdFRhZykgewogICAgICAgICAgICAgaGFu
ZGxlU2NyaXB0U3RhcnRUYWcoKTsKICAgICAgICAgICAgIG1fbGFzdFNjcmlwdEVsZW1lbnQgPSBz
dGF0aWNfcG9pbnRlcl9jYXN0PEVsZW1lbnQ+KHJlc3VsdCk7CiAgICAgICAgICAgICBtX2xhc3RT
Y3JpcHRFbGVtZW50U3RhcnRMaW5lID0gbV9sZXhlci0+bGluZU51bWJlcigpOwotICAgICAgICB9
IGVsc2UgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZXh0YXJlYVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0g
dGl0bGVUYWcpCisgICAgICAgIH0gZWxzZSBpZiAob2xkU3R5bGVUb2tlbi50YWdOYW1lID09IHRl
eHRhcmVhVGFnIHx8IG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSB0aXRsZVRhZykKICAgICAgICAg
ICAgIG1fbGV4ZXItPnNldFN0YXRlKEhUTUw1TGV4ZXI6OlJDREFUQVN0YXRlKTsKLSAgICAgICAg
ZWxzZSBpZiAodG9rZW4ubmFtZSgpID09IHN0eWxlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBpZnJh
bWVUYWcKLSAgICAgICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHhtcFRhZyB8fCB0b2tl
bi5uYW1lKCkgPT0gbm9lbWJlZFRhZykgeworICAgICAgICBlbHNlIGlmIChvbGRTdHlsZVRva2Vu
LnRhZ05hbWUgPT0gc3R5bGVUYWcgfHwgb2xkU3R5bGVUb2tlbi50YWdOYW1lID09IGlmcmFtZVRh
ZworICAgICAgICAgICAgICAgICB8fCBvbGRTdHlsZVRva2VuLnRhZ05hbWUgPT0geG1wVGFnIHx8
IG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSBub2VtYmVkVGFnKSB7CiAgICAgICAgICAgICAvLyBG
SVhNRTogbm9zY3JpcHQgYW5kIG5vZnJhbWVzIG1heSBjb25kaXRpb25hbGx5IGVudGVyIHRoaXMg
c3RhdGUgYXMgd2VsbC4KICAgICAgICAgICAgIG1fbGV4ZXItPnNldFN0YXRlKEhUTUw1TGV4ZXI6
OlJBV1RFWFRTdGF0ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodG9rZW4ubmFtZSgpID09IHBsYWlu
dGV4dFRhZykKKyAgICAgICAgfSBlbHNlIGlmIChvbGRTdHlsZVRva2VuLnRhZ05hbWUgPT0gcGxh
aW50ZXh0VGFnKQogICAgICAgICAgICAgbV9sZXhlci0+c2V0U3RhdGUoSFRNTDVMZXhlcjo6UExB
SU5URVhUU3RhdGUpOwotICAgICAgICBlbHNlIGlmICh0b2tlbi5uYW1lKCkgPT0gcHJlVGFnIHx8
IHRva2VuLm5hbWUoKSA9PSBsaXN0aW5nVGFnKQorICAgICAgICBlbHNlIGlmIChvbGRTdHlsZVRv
a2VuLnRhZ05hbWUgPT0gcHJlVGFnIHx8IG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSBsaXN0aW5n
VGFnKQogICAgICAgICAgICAgbV9sZXhlci0+c2tpcExlYWRpbmdOZXdMaW5lRm9yTGlzdGluZygp
OwogICAgIH0KICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUw1VG9rZW46OkVuZFRhZykgewot
ICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZykgeworICAgICAgICBpZiAob2xk
U3R5bGVUb2tlbi50YWdOYW1lID09IHNjcmlwdFRhZykgewogICAgICAgICAgICAgaWYgKG1fbGFz
dFNjcmlwdEVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9sYXN0U2NyaXB0RWxl
bWVudFN0YXJ0TGluZSAhPSB1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKTsKICAgICAgICAg
ICAgICAgICBoYW5kbGVTY3JpcHRFbmRUYWcobV9sYXN0U2NyaXB0RWxlbWVudC5nZXQoKSwgbV9s
YXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSk7Ci0tIAoxLjYuNS4xCgo=
</data>
<flag name="review"
          id="42730"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>