<?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>111382</bug_id>
          
          <creation_ts>2013-03-04 16:42:54 -0800</creation_ts>
          <short_desc>[V8] Use implicit references instead of object groups to keep registered MutationObservers alive</short_desc>
          <delta_ts>2013-03-06 15:58:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Adam Klein">adamk</assigned_to>
          <cc>abarth</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>esprehn</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rafaelw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>847015</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2013-03-04 16:42:54 -0800</bug_when>
    <thetext>[V8] Use implicit references instead of object groups to keep registered MutationObservers alive</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847049</commentid>
    <comment_count>1</comment_count>
      <attachid>191357</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2013-03-04 17:01:12 -0800</bug_when>
    <thetext>Created attachment 191357
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847065</commentid>
    <comment_count>2</comment_count>
      <attachid>191357</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-04 17:13:53 -0800</bug_when>
    <thetext>Comment on attachment 191357
Patch

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

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:168
&gt; +        observerWrappers.append(v8::Persistent&lt;v8::Value&gt;((*iter)-&gt;wrapper()));

I don&apos;t think this will work correctly for MutationObservers created by content scripts.  They&apos;ll have their wrappers stored in the DOMDataStore hashmap, not inline in the object.

&gt; Source/WebCore/dom/Node.cpp:2310
&gt; +            observers.add(registry-&gt;at(i)-&gt;observer());

Do you need the de-duping of the HashSet?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847913</commentid>
    <comment_count>3</comment_count>
      <attachid>191534</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2013-03-05 12:30:06 -0800</bug_when>
    <thetext>Created attachment 191534
WIP: two-phase approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848002</commentid>
    <comment_count>4</comment_count>
      <attachid>191534</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-05 13:26:38 -0800</bug_when>
    <thetext>Comment on attachment 191534
WIP: two-phase approach

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

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:105
&gt; +        HashMap&lt;void*, OwnPtr&lt;HashSet&lt;void*&gt; &gt; &gt;::AddResult result = m_implicitReferences.add(parent, nullptr);

So many hash maps and sets....

If you look on line 113 of this file (pre-patch), you&apos;ll see that we use std::sort to do the object grouping instead of using a hashset.  We found by benchmarking the GC time that std::sort was significantly faster (presumably because the mallocs are expensive).  I wonder if we should use a sorting based algorithm for the implicit references too.

The benchmarks I used were the gc-* tests in http://trac.webkit.org/browser/trunk/PerformanceTests/Bindings/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848201</commentid>
    <comment_count>5</comment_count>
      <attachid>191534</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2013-03-05 16:09:52 -0800</bug_when>
    <thetext>Comment on attachment 191534
WIP: two-phase approach

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

&gt;&gt; Source/WebCore/bindings/v8/V8GCController.cpp:105
&gt;&gt; +        HashMap&lt;void*, OwnPtr&lt;HashSet&lt;void*&gt; &gt; &gt;::AddResult result = m_implicitReferences.add(parent, nullptr);
&gt; 
&gt; So many hash maps and sets....
&gt; 
&gt; If you look on line 113 of this file (pre-patch), you&apos;ll see that we use std::sort to do the object grouping instead of using a hashset.  We found by benchmarking the GC time that std::sort was significantly faster (presumably because the mallocs are expensive).  I wonder if we should use a sorting based algorithm for the implicit references too.
&gt; 
&gt; The benchmarks I used were the gc-* tests in http://trac.webkit.org/browser/trunk/PerformanceTests/Bindings/.

I&apos;ll have to make some gc-* tests that actually touch this code to do a proper comparison, but I will note that using a Vector of pairs and sorting in place of a HashMap&lt;void, HashSet&lt;void&gt; &gt; was slow enough that it timed out one of the tests in fast/dom/MutationObserver/ in debug mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848222</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-05 16:21:51 -0800</bug_when>
    <thetext>OK.  :)

For the object group case, I think we had a large number of groups with only one entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848279</commentid>
    <comment_count>7</comment_count>
      <attachid>191609</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2013-03-05 17:12:49 -0800</bug_when>
    <thetext>Created attachment 191609
WIP: two-phase with vector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848286</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2013-03-05 17:14:51 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; OK.  :)
&gt; 
&gt; For the object group case, I think we had a large number of groups with only one entry.

Turns out I had an infinite loop in my vector version. So that&apos;s definitely the timeout :)

Uploaded for contrast, will work on perf tests in the meanwhile. I think I&apos;d expect a similar profile to that of the groupings, i.e., lots of places where each node only has one MutationObserver associated with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848348</commentid>
    <comment_count>9</comment_count>
      <attachid>191633</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2013-03-05 18:32:35 -0800</bug_when>
    <thetext>Created attachment 191633
WIP: two-phase vector approach, mark 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849162</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2013-03-06 12:02:44 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=191633) [details]
&gt; WIP: two-phase vector approach, mark 2

I&apos;m not able to discern any performance difference between these approaches, at least not for &quot;reasonable&quot; cases:

- one observer, one observed node
- one observer, many observed nodes
- many observers, one observed node
- many observers, many observed nodes

So I&apos;m happy to go with whichever you&apos;d prefer. Note that the vector solution could perform quite a bit worse if a single observer somehow manages to have wrappers in different worlds, but that seems quite unlikely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849323</commentid>
    <comment_count>11</comment_count>
      <attachid>191633</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-06 14:47:15 -0800</bug_when>
    <thetext>Comment on attachment 191633
WIP: two-phase vector approach, mark 2

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

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:149
&gt; +            {

Why have these { } ?

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:173
&gt; +            v8::V8::AddImplicitReferences(v8::Persistent&lt;v8::Object&gt;::Cast(parentWrapper), children.data(), children.size());

Should we ASSERT that parentWrapper is really an object before casting it?  (Maybe the cast does that assert for us?

It&apos;s a bit odd to have this cast here.  I guess AddImplicitReferences needs an object as the first argument but AddObjectGroup can deal with values?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849324</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-06 14:48:46 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Created an attachment (id=191633) [details] [details]
&gt; &gt; WIP: two-phase vector approach, mark 2
&gt; 
&gt; I&apos;m not able to discern any performance difference between these approaches, at least not for &quot;reasonable&quot; cases:
&gt; 
&gt; - one observer, one observed node
&gt; - one observer, many observed nodes
&gt; - many observers, one observed node
&gt; - many observers, many observed nodes
&gt; 
&gt; So I&apos;m happy to go with whichever you&apos;d prefer.

Thanks for looking at the performance.  I&apos;m not sure it makes a big difference either way.

&gt; Note that the vector solution could perform quite a bit worse if a single observer somehow manages to have wrappers in different worlds, but that seems quite unlikely.

Yes, although that&apos;s something we should keep in mind if we start using this mechanism for more kinds of objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849361</commentid>
    <comment_count>13</comment_count>
      <attachid>191847</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2013-03-06 15:17:42 -0800</bug_when>
    <thetext>Created attachment 191847
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849362</commentid>
    <comment_count>14</comment_count>
      <attachid>191633</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2013-03-06 15:18:02 -0800</bug_when>
    <thetext>Comment on attachment 191633
WIP: two-phase vector approach, mark 2

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

&gt;&gt; Source/WebCore/bindings/v8/V8GCController.cpp:149
&gt;&gt; +            {
&gt; 
&gt; Why have these { } ?

Just to scope the &quot;iter&quot; name, but not needed for now. I&apos;ll remove the {}

&gt;&gt; Source/WebCore/bindings/v8/V8GCController.cpp:173
&gt;&gt; +            v8::V8::AddImplicitReferences(v8::Persistent&lt;v8::Object&gt;::Cast(parentWrapper), children.data(), children.size());
&gt; 
&gt; Should we ASSERT that parentWrapper is really an object before casting it?  (Maybe the cast does that assert for us?
&gt; 
&gt; It&apos;s a bit odd to have this cast here.  I guess AddImplicitReferences needs an object as the first argument but AddObjectGroup can deal with values?

I believe the Cast will ASSERT for us.

Sadly this is just weirdness in the V8 API. I tried changing most of V8GCController.cpp to deal with Object handles, but AddObjectGroup needs Values.

I&apos;ve managed to rewrite this with no Casts, though (besides the pre-existing Cast in VisitPersistentHandle).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849396</commentid>
    <comment_count>15</comment_count>
      <attachid>191847</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-06 15:58:30 -0800</bug_when>
    <thetext>Comment on attachment 191847
Patch for landing

Clearing flags on attachment: 191847

Committed r144994: &lt;http://trac.webkit.org/changeset/144994&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849397</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-06 15:58:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191357</attachid>
            <date>2013-03-04 17:01:12 -0800</date>
            <delta_ts>2013-03-05 12:30:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111382-20130304165720.patch</filename>
            <type>text/plain</type>
            <size>11878</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTc5YzU5N2FmMDRiNjkz
MjAzZDUwNjFiNzI4NmRlNTQyMWM1MmFlMy4uY2M5NzYwYTRjOGM3YTcxMTMxNWYxM2Y3YTdlMzNh
NDNjMzlhNjhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEzLTAzLTA0ICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtWOF0gVXNlIGltcGxpY2l0
IHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBvYmplY3QgZ3JvdXBzIHRvIGtlZXAgcmVnaXN0ZXJlZCBN
dXRhdGlvbk9ic2VydmVycyBhbGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTExMzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW4gdGhlIGNhc2UgZGVtb25zdHJhdGVkIGJ5IHRoZSBpbmNsdWRlZCBN
YW51YWxUZXN0LCB0aGUgb2xkIGNvZGUKKyAgICAgICAgKHdoaWNoIHVzZWQgb2JqZWN0IGdyb3Vw
cyB0byBwdXQgTXV0YXRpb25PYnNlcnZlcnMgaW4gdGhlIHNhbWUgZ3JvdXBzCisgICAgICAgIGFz
IHRoZSBub2RlcyB0aGV5IG9ic2VydmUpIGxlZCB0byB0aGUgcG9zc2libGl0eSBvZiBrZWVwaW5n
IG5vZGVzCisgICAgICAgIGFsaXZlIGxvbmdlciB0aGFuIG5lY2Vzc2FyeS4gT25jZSBhbiBOb2Rl
IGlzIG5vIGxvbmdlciByZWFjaGFibGUgZnJvbQorICAgICAgICBKYXZhU2NyaXB0LCBpdCBjYW4g
YmUgcmVjbGFpbWVkOyB0aGVyZSdzIG5vIG5lZWQgZm9yIHRoZSBvYnNlcnZlcgorICAgICAgICB0
byBrZWVwIGl0IGFsaXZlLCBzaW5jZSBpdCBjYW5ub3QgcG9zc2libHkgYmUgbXV0YXRlZC4KKwor
ICAgICAgICBUZXN0OiBNYW51YWxUZXN0cy9tdXRhdGlvbi1vYnNlcnZlci1sZWFrcy1ub2Rlcy5o
dG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphZGRJbXBsaWNpdFJlZmVyZW5jZXNGb3JOb2RlV2l0aE11dGF0aW9uT2JzZXJ2
ZXJzKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZlci5jcHA6IFJlbW92ZSBnZXRPYnNl
cnZlZE5vZGVzIG1ldGhvZCwgYXMgaXQncyBubyBsb25nZXIgdXNlZC4KKyAgICAgICAgKiBkb20v
TXV0YXRpb25PYnNlcnZlci5oOiBNYWRlIE11dGF0aW9uT2JzZXJ2ZXIgYSBTY3JpcHRXcmFwcGFi
bGUsIGJvdGggZm9yIGNvbnZlbmllbmNlIGFuZCBiZWNhdXNlIGl0J3MgYWx3YXlzIHdyYXBwZWQu
CisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwOiBSZW1vdmUg
bm93LXVudXNlZCBhZGRPYnNlcnZlZE5vZGVzVG9TZXQgbWV0aG9kCisgICAgICAgICogZG9tL011
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnMpOiBF
eHBvc2UgdGhlIE11dGF0aW9uT2JzZXJ2ZXJzIG9uIGEgTm9kZSBmb3IgdXNlIGJ5IFY4R0NDb250
cm9sbGVyCisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omhh
c011dGF0aW9uT2JzZXJ2ZXJzKTogSW5saW5lZCBtZXRob2QgdG8gYWxsb3cgVjhHQ0NvbnRyb2xs
ZXIgdG8gc2hvcnQtY2lyY3VpdAorCiAyMDEzLTAzLTAxICBWaWN0b3IgQ2FyYnVuZSAgPHZjYXJi
dW5lQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTdXBwb3J0IHBhZGRpbmcsIG1hcmdpbiBhbmQg
Ym9yZGVyIGZvciBpbnRlcm5hbCBVQSBjdWUgc3R5bGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDdlNmM0YmIxMTg1MThlNjcyZDNhMDJm
ZGFhYjFmMjhjMjg4MDc4ZjguLmRjMWEyN2QwYjUyZmIzY2Q5ZTVhYzYwMGQwNjY5MjE5NDY4ZmY5
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAK
QEAgLTE1Niw2ICsxNTYsMTkgQEAgc3RhdGljIHZvaWQgYWRkSW1wbGljaXRSZWZlcmVuY2VzRm9y
Tm9kZVdpdGhFdmVudExpc3RlbmVycyhOb2RlKiBub2RlLCB2ODo6UGVyc2kKICAgICB2ODo6Vjg6
OkFkZEltcGxpY2l0UmVmZXJlbmNlcyh3cmFwcGVyLCBsaXN0ZW5lcnMuZGF0YSgpLCBsaXN0ZW5l
cnMuc2l6ZSgpKTsKIH0KIAorc3RhdGljIHZvaWQgYWRkSW1wbGljaXRSZWZlcmVuY2VzRm9yTm9k
ZVdpdGhNdXRhdGlvbk9ic2VydmVycyhOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiB3cmFwcGVyKQoreworICAgIEFTU0VSVChub2RlLT5oYXNNdXRhdGlvbk9ic2VydmVycygp
KTsKKyAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXIqPiBvYnNlcnZlcnM7CisgICAgbm9kZS0+
Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzKG9ic2VydmVycyk7CisgICAgQVNTRVJUKCFv
YnNlcnZlcnMuaXNFbXB0eSgpKTsKKyAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiA+IG9ic2VydmVyV3JhcHBlcnM7CisgICAgb2JzZXJ2ZXJXcmFwcGVycy5yZXNlcnZlQ2FwYWNp
dHkob2JzZXJ2ZXJzLnNpemUoKSk7CisgICAgZm9yIChIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXIq
Pjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVycy5l
bmQoKTsgKytpdGVyKQorICAgICAgICBvYnNlcnZlcldyYXBwZXJzLmFwcGVuZCh2ODo6UGVyc2lz
dGVudDx2ODo6VmFsdWU+KCgqaXRlciktPndyYXBwZXIoKSkpOworICAgIHY4OjpWODo6QWRkSW1w
bGljaXRSZWZlcmVuY2VzKHdyYXBwZXIsIG9ic2VydmVyV3JhcHBlcnMuZGF0YSgpLCBvYnNlcnZl
cldyYXBwZXJzLnNpemUoKSk7Cit9CisKIE5vZGUqIFY4R0NDb250cm9sbGVyOjpvcGFxdWVSb290
Rm9yR0MoTm9kZSogbm9kZSwgdjg6Oklzb2xhdGUqKQogewogICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhlIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGltYWdlIGVsZW1lbnRzLgpAQCAtMzExLDEyICszMjQs
NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCA9IHN0YXRpY19jYXN0
PE1lc3NhZ2VQb3J0Kj4ob2JqZWN0KTsKICAgICAgICAgICAgIGlmIChwb3J0LT5pc0VudGFuZ2xl
ZCgpIHx8IHBvcnQtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQogICAgICAgICAgICAgICAgIG1fZ3Jv
dXBlci5rZWVwQWxpdmUod3JhcHBlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoVjhNdXRhdGlvbk9i
c2VydmVyOjppbmZvLmVxdWFscyh0eXBlKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEFsbG93
IG9wYXF1ZVJvb3RGb3JHQyB0byBvcGVyYXRlIG9uIG11bHRpcGxlIHJvb3RzIGFuZCBtb3ZlIHRo
aXMgbG9naWMgaW50byBWOE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uCi0gICAgICAgICAgICBNdXRh
dGlvbk9ic2VydmVyKiBvYnNlcnZlciA9IHN0YXRpY19jYXN0PE11dGF0aW9uT2JzZXJ2ZXIqPihv
YmplY3QpOwotICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gb2JzZXJ2ZWROb2RlcyA9IG9ic2Vy
dmVyLT5nZXRPYnNlcnZlZE5vZGVzKCk7Ci0gICAgICAgICAgICBmb3IgKEhhc2hTZXQ8Tm9kZSo+
OjppdGVyYXRvciBpdCA9IG9ic2VydmVkTm9kZXMuYmVnaW4oKTsgaXQgIT0gb2JzZXJ2ZWROb2Rl
cy5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgICAgICBtX2dyb3VwZXIuYWRkT2JqZWN0V3JhcHBl
clRvR3JvdXAoVjhHQ0NvbnRyb2xsZXI6Om9wYXF1ZVJvb3RGb3JHQygqaXQsIG1faXNvbGF0ZSks
IHdyYXBwZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQWN0aXZlRE9NT2JqZWN0
KiBhY3RpdmVET01PYmplY3QgPSB0eXBlLT50b0FjdGl2ZURPTU9iamVjdCh3cmFwcGVyKTsKICAg
ICAgICAgICAgIGlmIChhY3RpdmVET01PYmplY3QgJiYgYWN0aXZlRE9NT2JqZWN0LT5oYXNQZW5k
aW5nQWN0aXZpdHkoKSkKQEAgLTMzMyw2ICszNDAsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBp
ZiAobm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoKSkKICAgICAgICAgICAgICAgICBhZGRJbXBsaWNp
dFJlZmVyZW5jZXNGb3JOb2RlV2l0aEV2ZW50TGlzdGVuZXJzKG5vZGUsIHdyYXBwZXIpOwogCisg
ICAgICAgICAgICBpZiAobm9kZS0+aGFzTXV0YXRpb25PYnNlcnZlcnMoKSkKKyAgICAgICAgICAg
ICAgICBhZGRJbXBsaWNpdFJlZmVyZW5jZXNGb3JOb2RlV2l0aE11dGF0aW9uT2JzZXJ2ZXJzKG5v
ZGUsIHdyYXBwZXIpOworCiAgICAgICAgICAgICBtX2dyb3VwZXIuYWRkTm9kZVdyYXBwZXJUb0dy
b3VwKFY4R0NDb250cm9sbGVyOjpvcGFxdWVSb290Rm9yR0Mobm9kZSwgbV9pc29sYXRlKSwgd3Jh
cHBlcik7CiAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NJZCA9PSB2OERPTU9iamVjdENsYXNzSWQp
IHsKICAgICAgICAgICAgIG1fZ3JvdXBlci5hZGRPYmplY3RXcmFwcGVyVG9Hcm91cCh0eXBlLT5v
cGFxdWVSb290Rm9yR0Mob2JqZWN0LCB3cmFwcGVyLCBtX2lzb2xhdGUpLCB3cmFwcGVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCA1NGU3ODE1NDhiZDc1ZDY0
OWJlMWVlOTk3ZWNlMGIxOTkyNmQxODdlLi4zYTU5NTUxOGM2NTM5YThlYzBjMjZmNTE2NTI5NWYw
Yzc1MzRiMDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCkBAIC0x
NzEsMTQgKzE3MSw2IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6c2V0SGFzVHJhbnNpZW50UmVn
aXN0cmF0aW9uKCkKICAgICBhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZCh0aGlzKTsKIH0K
IAotSGFzaFNldDxOb2RlKj4gTXV0YXRpb25PYnNlcnZlcjo6Z2V0T2JzZXJ2ZWROb2RlcygpIGNv
bnN0Ci17Ci0gICAgSGFzaFNldDxOb2RlKj4gb2JzZXJ2ZWROb2RlczsKLSAgICBmb3IgKEhhc2hT
ZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
bV9yZWdpc3RyYXRpb25zLmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpc3RyYXRpb25zLmVuZCgpOyAr
K2l0ZXIpCi0gICAgICAgICgqaXRlciktPmFkZFJlZ2lzdHJhdGlvbk5vZGVzVG9TZXQob2JzZXJ2
ZWROb2Rlcyk7Ci0gICAgcmV0dXJuIG9ic2VydmVkTm9kZXM7Ci19Ci0KIGJvb2wgTXV0YXRpb25P
YnNlcnZlcjo6Y2FuRGVsaXZlcigpCiB7CiAgICAgcmV0dXJuICFtX2NhbGxiYWNrLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5oCmluZGV4IDZkMzEyNzdiYzMzYWYwMTNlM2E2Mjdl
YzM4MGZlMjc4MTMyNGJmNGQuLjMwMzAxZDZlOTllYzRjYTI0MzRhZDkwMGJkZjlkZmZhYzhkYTU2
NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuaApAQCAtMzEsNiArMzEsNyBA
QAogI2lmbmRlZiBNdXRhdGlvbk9ic2VydmVyX2gKICNkZWZpbmUgTXV0YXRpb25PYnNlcnZlcl9o
CiAKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
QEAgLTUyLDcgKzUzLDcgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIHR5cGVkZWYgdW5z
aWduZWQgY2hhciBNdXRhdGlvbk9ic2VydmVyT3B0aW9uczsKIHR5cGVkZWYgdW5zaWduZWQgY2hh
ciBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9uczsKIAotY2xhc3MgTXV0YXRpb25PYnNlcnZl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPE11dGF0aW9uT2JzZXJ2ZXI+IHsKK2NsYXNzIE11dGF0aW9u
T2JzZXJ2ZXIgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxNdXRh
dGlvbk9ic2VydmVyPiB7CiBwdWJsaWM6CiAgICAgZW51bSBNdXRhdGlvblR5cGUgewogICAgICAg
ICBDaGlsZExpc3QgPSAxIDw8IDAsCkBAIC04Niw4ICs4Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEhhc1RyYW5zaWVudFJlZ2lzdHJhdGlvbigpOwogICAgIGJvb2wgY2FuRGVsaXZlcigpOwog
Ci0gICAgSGFzaFNldDxOb2RlKj4gZ2V0T2JzZXJ2ZWROb2RlcygpIGNvbnN0OwotCiBwcml2YXRl
OgogICAgIHN0cnVjdCBPYnNlcnZlckxlc3NUaGFuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAKaW5kZXggNGIxOGYxZjZhN2Ey
MDU0YjEwZWE1M2RhODZiMDFiYjYyMzNiYzk5My4uNWNkNGYxZjdhZGIxNWE3NjQ0YzJhZDMwMTVl
NWEyMjExOGE0NDBkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uLmNwcApAQCAtMTIyLDEzICsxMjIsNCBAQCBib29sIE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb246OnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSogbm9k
ZSwgTXV0YXRpbwogICAgIHJldHVybiBtX2F0dHJpYnV0ZUZpbHRlci5jb250YWlucyhhdHRyaWJ1
dGVOYW1lLT5sb2NhbE5hbWUoKSk7CiB9CiAKLXZvaWQgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbjo6YWRkUmVnaXN0cmF0aW9uTm9kZXNUb1NldChIYXNoU2V0PE5vZGUqPiYgbm9kZXMpIGNv
bnN0Ci17Ci0gICAgbm9kZXMuYWRkKG1fcmVnaXN0cmF0aW9uTm9kZSk7Ci0gICAgaWYgKCFtX3Ry
YW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChOb2Rl
SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9k
ZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy0+ZW5kKCk7
ICsraXRlcikKLSAgICAgICAgbm9kZXMuYWRkKGl0ZXItPmdldCgpKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uLmgKaW5kZXggNDg2NDAwYjg1MDYzNGEyYzQxYThhNDQ4MjE0YTM3MTZlZTky
MTQ1Zi4uOTcwODdiODBlYzZlYjEzNjJmZmZkOTkzY2QwOWFjOWRjYjliYWMwMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oCkBAIC01
OCw4ICs1OCw2IEBAIHB1YmxpYzoKICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyBk
ZWxpdmVyeU9wdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnMgJiAoTXV0YXRpb25PYnNl
cnZlcjo6QXR0cmlidXRlT2xkVmFsdWUgfCBNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRh
T2xkVmFsdWUpOyB9CiAgICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgbXV0YXRpb25UeXBlcygp
IGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucyAmIE11dGF0aW9uT2JzZXJ2ZXI6OkFsbE11dGF0aW9u
VHlwZXM7IH0KIAotICAgIHZvaWQgYWRkUmVnaXN0cmF0aW9uTm9kZXNUb1NldChIYXNoU2V0PE5v
ZGUqPiYpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b24oUGFzc1JlZlB0cjxNdXRhdGlvbk9ic2VydmVyPiwgTm9kZSosIE11dGF0aW9uT2JzZXJ2ZXJP
cHRpb25zLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGF0dHJpYnV0ZUZpbHRlcik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAppbmRleCBlN2M0NjUwMWQyMTlhMWQ0OGRiOGJiOWNjMGQzMGRjYTNkOTll
YzM0Li4yMWJlOGFmZTQ0YThhZjQzNjY0NzE4NGZmNWNiZWZlNDVhYmMxZTZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCkBAIC0yMzAzLDYgKzIzMDMsMTggQEAgdm9pZCBOb2RlOjpub3RpZnlNdXRhdGlvbk9i
c2VydmVyc05vZGVXaWxsRGV0YWNoKCkKICAgICB9CiB9CiAKK3ZvaWQgTm9kZTo6Z2V0UmVnaXN0
ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzKEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlcio+JiBvYnNlcnZl
cnMpCit7CisgICAgaWYgKFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
bj4gPiogcmVnaXN0cnkgPSBtdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSkgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdHJ5LT5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IG9ic2VydmVycy5hZGQocmVnaXN0cnktPmF0KGkpLT5vYnNlcnZlcigpKTsKKyAgICB9CisgICAg
aWYgKEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KiByZWdpc3RyeSA9IHRy
YW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7CisgICAgICAgIGZvciAoSGFzaFNl
dDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj46Oml0ZXJhdG9yIGl0ZXIgPSByZWdpc3Ry
eS0+YmVnaW4oKTsgaXRlciAhPSByZWdpc3RyeS0+ZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAg
IG9ic2VydmVycy5hZGQoKCppdGVyKS0+b2JzZXJ2ZXIoKSk7CisgICAgfQorfQorCiB2b2lkIE5v
ZGU6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoIWhhc0V2ZW50
VGFyZ2V0RGF0YSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggYTgzNmJmMDZjNzA2ZTA0YzM2MjMxNzFjYWE0
MWI2Y2M3ZDAxZGZkZC4uZTgxM2ZjYTUzNWJkNWFlZDdjMmQxNTQ4NDQ1ZmE5ZjJkMzdjODZlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCkBAIC02NzEsNiArNjcxLDggQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0
ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24q
KTsKICAgICB2b2lkIHVucmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24qKTsKICAgICB2b2lkIG5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJz
Tm9kZVdpbGxEZXRhY2goKTsKKyAgICBib29sIGhhc011dGF0aW9uT2JzZXJ2ZXJzKCk7CisgICAg
dm9pZCBnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnMoSGFzaFNldDxNdXRhdGlvbk9ic2Vy
dmVyKj4mKTsKIAogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxk
KCk7CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOwpA
QCAtODk0LDYgKzg5NiwyMSBAQCBpbmxpbmUgdm9pZCBOb2RlOjpsYXp5UmVhdHRhY2goU2hvdWxk
U2V0QXR0YWNoZWQgc2hvdWxkU2V0QXR0YWNoZWQpCiAgICAgbGF6eUF0dGFjaChzaG91bGRTZXRB
dHRhY2hlZCk7CiB9CiAKK2lubGluZSBib29sIE5vZGU6Omhhc011dGF0aW9uT2JzZXJ2ZXJzKCkK
K3sKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+KiByZWdpc3Ry
eSA9IG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7CisgICAgICAgIGlmICghcmVnaXN0cnkt
PmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoSGFz
aFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIHJlZ2lzdHJ5ID0gdHJhbnNpZW50
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkpIHsKKyAgICAgICAgaWYgKCFyZWdpc3RyeS0+aXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKwogfSAvL25hbWVzcGFjZQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvQ2hh
bmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDkwMDRkMDY5OGQwODc0N2ZmZjdmNTM0ZDJkNzJiYzZh
YWJlYjQ5NjAuLjIwN2QwNTdjODgwOWFkYTIwM2VjZjAwNTExM2U1N2IyNmNiZGUxMjggMTAwNjQ0
Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0w
My0wNCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIFVz
ZSBpbXBsaWNpdCByZWZlcmVuY2VzIGluc3RlYWQgb2Ygb2JqZWN0IGdyb3VwcyB0byBrZWVwIHJl
Z2lzdGVyZWQgTXV0YXRpb25PYnNlcnZlcnMgYWxpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTM4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWFudWFsVGVzdHMvbXV0YXRpb24tb2JzZXJ2ZXIt
bGVha3Mtbm9kZXMuaHRtbDogQWRkZWQuCisKIDIwMTMtMDItMjcgIFphbiBEb2JlcnNlayAgPHpk
b2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIERpc2FibGUgTWF0aE1MIHN1cHBv
cnQgaW4gcmVsZWFzZSBidWlsZHMKZGlmZiAtLWdpdCBhL01hbnVhbFRlc3RzL211dGF0aW9uLW9i
c2VydmVyLWxlYWtzLW5vZGVzLmh0bWwgYi9NYW51YWxUZXN0cy9tdXRhdGlvbi1vYnNlcnZlci1s
ZWFrcy1ub2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlZmM2ZTg0ZTAxZDhhNTk3OTAxYzlhNmU4ZGU0
OGQ4OTE2YzE4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9NYW51YWxUZXN0cy9tdXRhdGlvbi1vYnNl
cnZlci1sZWFrcy1ub2Rlcy5odG1sCkBAIC0wLDAgKzEsMTQgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGJvZHk+Cis8c2NyaXB0PgordGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit2YXIgY291bnQgPSAx
MDA7Cit2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpe30pOwor
Zm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgdmFyIHNwYW4gPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgb2JzZXJ2ZXIub2JzZXJ2ZShzcGFuLCB7YXR0
cmlidXRlczp0cnVlfSk7Cit9OworR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKzwvc2NyaXB0Pgor
PHA+TnVtYmVyIG9mIGxlYWtlZCBub2RlcyByZXBvcnRlZCBieSBEUlQgc2hvdWxkIGJlIGxlc3Mg
dGhhbiAxMDA8L3A+Cis8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191534</attachid>
            <date>2013-03-05 12:30:06 -0800</date>
            <delta_ts>2013-03-05 17:12:46 -0800</delta_ts>
            <desc>WIP: two-phase approach</desc>
            <filename>bug-111382-20130305122612.patch</filename>
            <type>text/plain</type>
            <size>5950</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0Njk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMThmMjk1Yjc3NGMyN2Vm
ZWFiMmZjMDk1YWRiMWE1ZWU1MzJkZWUzOS4uNDQ0YTNiMmYyMGM0MTBjNWQ2MjE4NTk4ZWZmNjZm
M2Q1MzU0YzcwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEzLTAzLTA1ICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtWOF0gVXNlIGltcGxpY2l0
IHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBvYmplY3QgZ3JvdXBzIHRvIGtlZXAgcmVnaXN0ZXJlZCBN
dXRhdGlvbk9ic2VydmVycyBhbGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTExMzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVHdvLXBoYXNlIGFwcHJvYWNoIHRvIGltcGxpY2l0IHJlZmVyZW5jZXM6
IGFmdGVyIGdyb3VwaW5nIG9iamVjdHMKKyAgICAgICAgdG9nZXRoZXIsIGFkZCBhbiBpbXBsaWNp
dCByZWZlcmVuY2UgYmV0d2VlbiBlYWNoIHJlZ2lzdGVyZWQgbm9kZSdzCisgICAgICAgIGdyb3Vw
IGFuZCB0aGUgTXV0YXRpb25PYnNlcnZlcidzIGdyb3VwICh3aGljaCBpbmNsdWRlcyB3cmFwcGVy
cyBmcm9tCisgICAgICAgIGFsbCB3b3JsZHMpLgorCisgICAgICAgIFRlc3Q6IE1hbnVhbFRlc3Rz
L211dGF0aW9uLW9ic2VydmVyLWxlYWtzLW5vZGVzLmh0bWwKKworICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZXJHcm91cGVy
OjphZGRJbXBsaWNpdFJlZmVyZW5jZSk6CisgICAgICAgIChXcmFwcGVyR3JvdXBlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXcmFwcGVyR3JvdXBlcjo6YXBwbHkpOgorCiAyMDEzLTAzLTA0ICBSdXNs
YW4gQWJkaWtlZXYgIDxhcnVzbGFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8bGluayByZWw9
ImFwcGxlLXRvdWNoLWljb24iPiB0YWcgaXMgbm90IGhvbm9yZWQgb24gQ05OLmNvbSwgd29ya2Zs
b3d5LmNvbSBldGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0ND
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVy
LmNwcAppbmRleCBmZDAxYTllMjFiYWFmNzEwZjMzOTQzNDI0NTc4YmJhNTNiNDJjNDIzLi5kZTJh
ZDIwMzBiZWQzNjRjNTY0ZjA1ZmRmODE0MDJlMDM2MjE0OGY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCkBAIC0xMDAsNiArMTAwLDE3IEBAIHB1
YmxpYzoKICAgICAgICAgbV9jb25uZWN0aW9ucy5hcHBlbmQoSW1wbGljaXRDb25uZWN0aW9uKHJv
b3QsIHdyYXBwZXIpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZEltcGxpY2l0UmVmZXJlbmNlKHZv
aWQqIHBhcmVudCwgdm9pZCogY2hpbGQpCisgICAgeworICAgICAgICBIYXNoTWFwPHZvaWQqLCBP
d25QdHI8SGFzaFNldDx2b2lkKj4gPiA+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsaWNpdFJl
ZmVyZW5jZXMuYWRkKHBhcmVudCwgbnVsbHB0cik7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkgeworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5l
dyBIYXNoU2V0PHZvaWQqPik7CisgICAgICAgICAgICBtX2ltcGxpY2l0UmVmZXJlbmNlRGF0YS5h
ZGQocGFyZW50LCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+KCkpOworICAgICAgICB9CisgICAg
ICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGQoY2hpbGQpLmlzTmV3RW50cnkpCisg
ICAgICAgICAgICBtX2ltcGxpY2l0UmVmZXJlbmNlRGF0YS5hZGQoY2hpbGQsIHY4OjpQZXJzaXN0
ZW50PHY4OjpWYWx1ZT4oKSk7CisgICAgfQorCiAgICAgdm9pZCBrZWVwQWxpdmUodjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgbV9saXZlT2JqZWN0cy5h
cHBlbmQod3JhcHBlcik7CkBAIC0xMjQsMTMgKzEzNSwzNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKICAgICAgICAgICAgICAgICB2ODo6Vjg6OkFkZE9iamVj
dEdyb3VwKGdyb3VwLmRhdGEoKSwgZ3JvdXAuc2l6ZSgpLCByZXRhaW5lZE9iamVjdEluZm8ubGVh
a1B0cigpKTsKIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEhhc2hNYXA8dm9pZCos
IHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPjo6aXRlcmF0b3IgaXRlciA9IG1faW1wbGljaXRS
ZWZlcmVuY2VEYXRhLmZpbmQocm9vdCk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0gbV9p
bXBsaWNpdFJlZmVyZW5jZURhdGEuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZh
bHVlID0gZ3JvdXAuZmlyc3QoKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZ3JvdXAu
c2hyaW5rKDApOwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChIYXNoTWFwPHZvaWQqLCBPd25Q
dHI8SGFzaFNldDx2b2lkKj4gPiA+OjppdGVyYXRvciBpdGVyID0gbV9pbXBsaWNpdFJlZmVyZW5j
ZXMuYmVnaW4oKTsgaXRlciAhPSBtX2ltcGxpY2l0UmVmZXJlbmNlcy5lbmQoKTsgKytpdGVyKSB7
CisgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHBhcmVudCA9IG1faW1wbGlj
aXRSZWZlcmVuY2VEYXRhLmdldChpdGVyLT5rZXkpOworICAgICAgICAgICAgaWYgKHBhcmVudC5J
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb25zdCBI
YXNoU2V0PHZvaWQqPiYgY2hpbGRyZW4gPSAqaXRlci0+dmFsdWU7CisgICAgICAgICAgICBWZWN0
b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGNoaWxkV3JhcHBlcnM7CisgICAgICAgICAg
ICBjaGlsZFdyYXBwZXJzLnJlc2VydmVDYXBhY2l0eShjaGlsZHJlbi5zaXplKCkpOworICAgICAg
ICAgICAgZm9yIChIYXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgY2hpbGRJdGVyID0gY2hp
bGRyZW4uYmVnaW4oKTsgY2hpbGRJdGVyICE9IGNoaWxkcmVuLmVuZCgpOyArK2NoaWxkSXRlcikg
eworICAgICAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gY2hpbGQgPSBtX2lt
cGxpY2l0UmVmZXJlbmNlRGF0YS5nZXQoKmNoaWxkSXRlcik7CisgICAgICAgICAgICAgICAgQVNT
RVJUKCFjaGlsZC5Jc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIGNoaWxkV3JhcHBlcnMuYXBw
ZW5kKGNoaWxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCghY2hpbGRyZW4u
aXNFbXB0eSgpKTsKKyAgICAgICAgICAgIHY4OjpWODo6QWRkSW1wbGljaXRSZWZlcmVuY2VzKHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpDYXN0KHBhcmVudCksIGNoaWxkV3JhcHBlcnMuZGF0
YSgpLCBjaGlsZFdyYXBwZXJzLnNpemUoKSk7CisgICAgICAgIH0KICAgICB9CiAKIHByaXZhdGU6
CiAgICAgVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBtX2xpdmVPYmplY3RzOwog
ICAgIFZlY3RvcjxJbXBsaWNpdENvbm5lY3Rpb24+IG1fY29ubmVjdGlvbnM7CisgICAgSGFzaE1h
cDx2b2lkKiwgT3duUHRyPEhhc2hTZXQ8dm9pZCo+ID4gPiBtX2ltcGxpY2l0UmVmZXJlbmNlczsK
KyAgICBIYXNoTWFwPHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gbV9pbXBsaWNp
dFJlZmVyZW5jZURhdGE7CiB9OwogCiAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIG9wYXF1ZSBH
QyByb290cy4KQEAgLTMxNiw3ICszNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBNdXRhdGlv
bk9ic2VydmVyKiBvYnNlcnZlciA9IHN0YXRpY19jYXN0PE11dGF0aW9uT2JzZXJ2ZXIqPihvYmpl
Y3QpOwogICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gb2JzZXJ2ZWROb2RlcyA9IG9ic2VydmVy
LT5nZXRPYnNlcnZlZE5vZGVzKCk7CiAgICAgICAgICAgICBmb3IgKEhhc2hTZXQ8Tm9kZSo+Ojpp
dGVyYXRvciBpdCA9IG9ic2VydmVkTm9kZXMuYmVnaW4oKTsgaXQgIT0gb2JzZXJ2ZWROb2Rlcy5l
bmQoKTsgKytpdCkKLSAgICAgICAgICAgICAgICBtX2dyb3VwZXIuYWRkT2JqZWN0V3JhcHBlclRv
R3JvdXAoVjhHQ0NvbnRyb2xsZXI6Om9wYXF1ZVJvb3RGb3JHQygqaXQsIG1faXNvbGF0ZSksIHdy
YXBwZXIpOworICAgICAgICAgICAgICAgIG1fZ3JvdXBlci5hZGRJbXBsaWNpdFJlZmVyZW5jZShW
OEdDQ29udHJvbGxlcjo6b3BhcXVlUm9vdEZvckdDKCppdCwgbV9pc29sYXRlKSwgb2JzZXJ2ZXIp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQWN0aXZlRE9NT2JqZWN0KiBhY3RpdmVE
T01PYmplY3QgPSB0eXBlLT50b0FjdGl2ZURPTU9iamVjdCh3cmFwcGVyKTsKICAgICAgICAgICAg
IGlmIChhY3RpdmVET01PYmplY3QgJiYgYWN0aXZlRE9NT2JqZWN0LT5oYXNQZW5kaW5nQWN0aXZp
dHkoKSkKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmOTliOGQxODZm
ZjE0NjNjMjU0NjNlYTkzYzIwYTQxOTU3MTdjZWU4Li5iN2FmN2FhZWMxM2E4MTk4ZTBlOTA2Mjcy
MDhhYTk5ZTk0Njc3Yjc0IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMTMtMDMtMDUgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW1Y4XSBVc2UgaW1wbGljaXQgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIG9i
amVjdCBncm91cHMgdG8ga2VlcCByZWdpc3RlcmVkIE11dGF0aW9uT2JzZXJ2ZXJzIGFsaXZlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTEzODIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1hbnVhbFRl
c3RzL211dGF0aW9uLW9ic2VydmVyLWxlYWtzLW5vZGVzLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAz
LTA0ICBSdXNsYW4gQWJkaWtlZXYgIDxhcnVzbGFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8
bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iPiB0YWcgaXMgbm90IGhvbm9yZWQgb24gQ05OLmNv
bSwgd29ya2Zsb3d5LmNvbSBldGMKZGlmZiAtLWdpdCBhL01hbnVhbFRlc3RzL211dGF0aW9uLW9i
c2VydmVyLWxlYWtzLW5vZGVzLmh0bWwgYi9NYW51YWxUZXN0cy9tdXRhdGlvbi1vYnNlcnZlci1s
ZWFrcy1ub2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlZmM2ZTg0ZTAxZDhhNTk3OTAxYzlhNmU4ZGU0
OGQ4OTE2YzE4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9NYW51YWxUZXN0cy9tdXRhdGlvbi1vYnNl
cnZlci1sZWFrcy1ub2Rlcy5odG1sCkBAIC0wLDAgKzEsMTQgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGJvZHk+Cis8c2NyaXB0PgordGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit2YXIgY291bnQgPSAx
MDA7Cit2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpe30pOwor
Zm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgdmFyIHNwYW4gPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgb2JzZXJ2ZXIub2JzZXJ2ZShzcGFuLCB7YXR0
cmlidXRlczp0cnVlfSk7Cit9OworR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKzwvc2NyaXB0Pgor
PHA+TnVtYmVyIG9mIGxlYWtlZCBub2RlcyByZXBvcnRlZCBieSBEUlQgc2hvdWxkIGJlIGxlc3Mg
dGhhbiAxMDA8L3A+Cis8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191609</attachid>
            <date>2013-03-05 17:12:49 -0800</date>
            <delta_ts>2013-03-05 18:32:32 -0800</delta_ts>
            <desc>WIP: two-phase with vector</desc>
            <filename>bug-111382-20130305170855.patch</filename>
            <type>text/plain</type>
            <size>6110</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0Njk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMThmMjk1Yjc3NGMyN2Vm
ZWFiMmZjMDk1YWRiMWE1ZWU1MzJkZWUzOS4uNDQ0YTNiMmYyMGM0MTBjNWQ2MjE4NTk4ZWZmNjZm
M2Q1MzU0YzcwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEzLTAzLTA1ICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtWOF0gVXNlIGltcGxpY2l0
IHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBvYmplY3QgZ3JvdXBzIHRvIGtlZXAgcmVnaXN0ZXJlZCBN
dXRhdGlvbk9ic2VydmVycyBhbGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTExMzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVHdvLXBoYXNlIGFwcHJvYWNoIHRvIGltcGxpY2l0IHJlZmVyZW5jZXM6
IGFmdGVyIGdyb3VwaW5nIG9iamVjdHMKKyAgICAgICAgdG9nZXRoZXIsIGFkZCBhbiBpbXBsaWNp
dCByZWZlcmVuY2UgYmV0d2VlbiBlYWNoIHJlZ2lzdGVyZWQgbm9kZSdzCisgICAgICAgIGdyb3Vw
IGFuZCB0aGUgTXV0YXRpb25PYnNlcnZlcidzIGdyb3VwICh3aGljaCBpbmNsdWRlcyB3cmFwcGVy
cyBmcm9tCisgICAgICAgIGFsbCB3b3JsZHMpLgorCisgICAgICAgIFRlc3Q6IE1hbnVhbFRlc3Rz
L211dGF0aW9uLW9ic2VydmVyLWxlYWtzLW5vZGVzLmh0bWwKKworICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZXJHcm91cGVy
OjphZGRJbXBsaWNpdFJlZmVyZW5jZSk6CisgICAgICAgIChXcmFwcGVyR3JvdXBlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXcmFwcGVyR3JvdXBlcjo6YXBwbHkpOgorCiAyMDEzLTAzLTA0ICBSdXNs
YW4gQWJkaWtlZXYgIDxhcnVzbGFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8bGluayByZWw9
ImFwcGxlLXRvdWNoLWljb24iPiB0YWcgaXMgbm90IGhvbm9yZWQgb24gQ05OLmNvbSwgd29ya2Zs
b3d5LmNvbSBldGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0ND
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVy
LmNwcAppbmRleCBmZDAxYTllMjFiYWFmNzEwZjMzOTQzNDI0NTc4YmJhNTNiNDJjNDIzLi45NGJi
N2FhNTUyMWRlOThhNzZmZGFjNzEyZTQyY2U3OGQ4YzM0NTY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCkBAIC04Myw2ICs4MywyMiBAQCBib29s
IG9wZXJhdG9yPChjb25zdCBJbXBsaWNpdENvbm5lY3Rpb24mIGxlZnQsIGNvbnN0IEltcGxpY2l0
Q29ubmVjdGlvbiYgcmlnaHQpCiAgICAgcmV0dXJuIGxlZnQucm9vdCgpIDwgcmlnaHQucm9vdCgp
OwogfQogCitzdHJ1Y3QgSW1wbGljaXRSZWZlcmVuY2UgeworICAgIEltcGxpY2l0UmVmZXJlbmNl
KHZvaWQqIHBhcmVudCwgdm9pZCogY2hpbGQpCisgICAgICAgIDogcGFyZW50KHBhcmVudCkKKyAg
ICAgICAgLCBjaGlsZChjaGlsZCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCogcGFyZW50Owor
ICAgIHZvaWQqIGNoaWxkOworfTsKKworYm9vbCBvcGVyYXRvcjwoY29uc3QgSW1wbGljaXRSZWZl
cmVuY2UmIGxlZnQsIGNvbnN0IEltcGxpY2l0UmVmZXJlbmNlJiByaWdodCkKK3sKKyAgICByZXR1
cm4gbGVmdC5wYXJlbnQgPCByaWdodC5wYXJlbnQ7Cit9CisKIGNsYXNzIFdyYXBwZXJHcm91cGVy
IHsKIHB1YmxpYzoKICAgICBXcmFwcGVyR3JvdXBlcigpCkBAIC0xMDAsNiArMTE2LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgbV9jb25uZWN0aW9ucy5hcHBlbmQoSW1wbGljaXRDb25uZWN0aW9uKHJv
b3QsIHdyYXBwZXIpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZEltcGxpY2l0UmVmZXJlbmNlKHZv
aWQqIHBhcmVudCwgdm9pZCogY2hpbGQpCisgICAgeworICAgICAgICBtX3JlZmVyZW5jZXMuYXBw
ZW5kKEltcGxpY2l0UmVmZXJlbmNlKHBhcmVudCwgY2hpbGQpKTsKKyAgICAgICAgbV9pbXBsaWNp
dFJlZmVyZW5jZURhdGEuYWRkKHBhcmVudCwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPigpKTsK
KyAgICAgICAgbV9pbXBsaWNpdFJlZmVyZW5jZURhdGEuYWRkKGNoaWxkLCB2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+KCkpOworICAgIH0KKwogICAgIHZvaWQga2VlcEFsaXZlKHY4OjpQZXJzaXN0
ZW50PHY4OjpWYWx1ZT4gd3JhcHBlcikKICAgICB7CiAgICAgICAgIG1fbGl2ZU9iamVjdHMuYXBw
ZW5kKHdyYXBwZXIpOwpAQCAtMTI0LDEzICsxNDcsNDEgQEAgcHVibGljOgogICAgICAgICAgICAg
aWYgKGdyb3VwLnNpemUoKSA+IDEpCiAgICAgICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmplY3RH
cm91cChncm91cC5kYXRhKCksIGdyb3VwLnNpemUoKSwgcmV0YWluZWRPYmplY3RJbmZvLmxlYWtQ
dHIoKSk7CiAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwPHZvaWQqLCB2
ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2ltcGxpY2l0UmVm
ZXJlbmNlRGF0YS5maW5kKHJvb3QpOworICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IG1faW1w
bGljaXRSZWZlcmVuY2VEYXRhLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICBpdGVyLT52YWx1
ZSA9IGdyb3VwLmZpcnN0KCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdyb3VwLnNo
cmluaygwKTsKICAgICAgICAgfQorCisgICAgICAgIHN0ZDo6c29ydChtX3JlZmVyZW5jZXMuYmVn
aW4oKSwgbV9yZWZlcmVuY2VzLmVuZCgpKTsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIHdoaWxl
IChpIDwgbV9yZWZlcmVuY2VzLnNpemUoKSkgeworICAgICAgICAgICAgdm9pZCogcGFyZW50ID0g
bV9yZWZlcmVuY2VzW2ldLnBhcmVudDsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpW
YWx1ZT4gcGFyZW50V3JhcHBlciA9IG1faW1wbGljaXRSZWZlcmVuY2VEYXRhLmdldChwYXJlbnQp
OworICAgICAgICAgICAgaWYgKHBhcmVudFdyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgKytpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGNoaWxkV3JhcHBl
cnM7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6
OlZhbHVlPiBjaGlsZCA9IG1faW1wbGljaXRSZWZlcmVuY2VEYXRhLmdldChtX3JlZmVyZW5jZXNb
aSsrXS5jaGlsZCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFjaGlsZC5Jc0VtcHR5KCkpOwor
ICAgICAgICAgICAgICAgIGNoaWxkV3JhcHBlcnMuYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgICAg
IH0gd2hpbGUgKGkgPCBtX3JlZmVyZW5jZXMuc2l6ZSgpICYmIHBhcmVudCA9PSBtX3JlZmVyZW5j
ZXNbaV0ucGFyZW50KTsKKworICAgICAgICAgICAgdjg6OlY4OjpBZGRJbXBsaWNpdFJlZmVyZW5j
ZXModjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46OkNhc3QocGFyZW50V3JhcHBlciksIGNoaWxk
V3JhcHBlcnMuZGF0YSgpLCBjaGlsZFdyYXBwZXJzLnNpemUoKSk7CisgICAgICAgIH0KICAgICB9
CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBtX2xp
dmVPYmplY3RzOwogICAgIFZlY3RvcjxJbXBsaWNpdENvbm5lY3Rpb24+IG1fY29ubmVjdGlvbnM7
CisgICAgVmVjdG9yPEltcGxpY2l0UmVmZXJlbmNlPiBtX3JlZmVyZW5jZXM7CisgICAgSGFzaE1h
cDx2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IG1faW1wbGljaXRSZWZlcmVuY2VE
YXRhOwogfTsKIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBvcGFxdWUgR0Mgcm9vdHMuCkBA
IC0zMTYsNyArMzY3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgTXV0YXRpb25PYnNlcnZlciog
b2JzZXJ2ZXIgPSBzdGF0aWNfY2FzdDxNdXRhdGlvbk9ic2VydmVyKj4ob2JqZWN0KTsKICAgICAg
ICAgICAgIEhhc2hTZXQ8Tm9kZSo+IG9ic2VydmVkTm9kZXMgPSBvYnNlcnZlci0+Z2V0T2JzZXJ2
ZWROb2RlcygpOwogICAgICAgICAgICAgZm9yIChIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXQg
PSBvYnNlcnZlZE5vZGVzLmJlZ2luKCk7IGl0ICE9IG9ic2VydmVkTm9kZXMuZW5kKCk7ICsraXQp
Ci0gICAgICAgICAgICAgICAgbV9ncm91cGVyLmFkZE9iamVjdFdyYXBwZXJUb0dyb3VwKFY4R0ND
b250cm9sbGVyOjpvcGFxdWVSb290Rm9yR0MoKml0LCBtX2lzb2xhdGUpLCB3cmFwcGVyKTsKKyAg
ICAgICAgICAgICAgICBtX2dyb3VwZXIuYWRkSW1wbGljaXRSZWZlcmVuY2UoVjhHQ0NvbnRyb2xs
ZXI6Om9wYXF1ZVJvb3RGb3JHQygqaXQsIG1faXNvbGF0ZSksIG9ic2VydmVyKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIEFjdGl2ZURPTU9iamVjdCogYWN0aXZlRE9NT2JqZWN0ID0g
dHlwZS0+dG9BY3RpdmVET01PYmplY3Qod3JhcHBlcik7CiAgICAgICAgICAgICBpZiAoYWN0aXZl
RE9NT2JqZWN0ICYmIGFjdGl2ZURPTU9iamVjdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCmRpZmYg
LS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggZjk5YjhkMTg2ZmYxNDYzYzI1NDYz
ZWE5M2MyMGE0MTk1NzE3Y2VlOC4uYjdhZjdhYWVjMTNhODE5OGUwZTkwNjI3MjA4YWE5OWU5NDY3
N2I3NCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
IEBACisyMDEzLTAzLTA1ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtWOF0gVXNlIGltcGxpY2l0IHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBvYmplY3QgZ3JvdXBz
IHRvIGtlZXAgcmVnaXN0ZXJlZCBNdXRhdGlvbk9ic2VydmVycyBhbGl2ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExMzgyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0cy9tdXRhdGlv
bi1vYnNlcnZlci1sZWFrcy1ub2Rlcy5odG1sOiBBZGRlZC4KKwogMjAxMy0wMy0wNCAgUnVzbGFu
IEFiZGlrZWV2ICA8YXJ1c2xhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgPGxpbmsgcmVsPSJh
cHBsZS10b3VjaC1pY29uIj4gdGFnIGlzIG5vdCBob25vcmVkIG9uIENOTi5jb20sIHdvcmtmbG93
eS5jb20gZXRjCmRpZmYgLS1naXQgYS9NYW51YWxUZXN0cy9tdXRhdGlvbi1vYnNlcnZlci1sZWFr
cy1ub2Rlcy5odG1sIGIvTWFudWFsVGVzdHMvbXV0YXRpb24tb2JzZXJ2ZXItbGVha3Mtbm9kZXMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wZWZjNmU4NGUwMWQ4YTU5NzkwMWM5YTZlOGRlNDhkODkxNmMxODMx
Ci0tLSAvZGV2L251bGwKKysrIGIvTWFudWFsVGVzdHMvbXV0YXRpb24tb2JzZXJ2ZXItbGVha3Mt
bm9kZXMuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxib2R5PgorPHNj
cmlwdD4KK3Rlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwordmFyIGNvdW50ID0gMTAwOwordmFyIG9i
c2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXt9KTsKK2ZvciAodmFyIGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnc3BhbicpOworICAgIG9ic2VydmVyLm9ic2VydmUoc3Bhbiwge2F0dHJpYnV0ZXM6dHJ1
ZX0pOworfTsKK0dDQ29udHJvbGxlci5jb2xsZWN0KCk7Cis8L3NjcmlwdD4KKzxwPk51bWJlciBv
ZiBsZWFrZWQgbm9kZXMgcmVwb3J0ZWQgYnkgRFJUIHNob3VsZCBiZSBsZXNzIHRoYW4gMTAwPC9w
PgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191633</attachid>
            <date>2013-03-05 18:32:35 -0800</date>
            <delta_ts>2013-03-06 15:18:02 -0800</delta_ts>
            <desc>WIP: two-phase vector approach, mark 2</desc>
            <filename>bug-111382-20130305182841.patch</filename>
            <type>text/plain</type>
            <size>5900</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0Njk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMThmMjk1Yjc3NGMyN2Vm
ZWFiMmZjMDk1YWRiMWE1ZWU1MzJkZWUzOS4uNDQ0YTNiMmYyMGM0MTBjNWQ2MjE4NTk4ZWZmNjZm
M2Q1MzU0YzcwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEzLTAzLTA1ICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtWOF0gVXNlIGltcGxpY2l0
IHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBvYmplY3QgZ3JvdXBzIHRvIGtlZXAgcmVnaXN0ZXJlZCBN
dXRhdGlvbk9ic2VydmVycyBhbGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTExMzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVHdvLXBoYXNlIGFwcHJvYWNoIHRvIGltcGxpY2l0IHJlZmVyZW5jZXM6
IGFmdGVyIGdyb3VwaW5nIG9iamVjdHMKKyAgICAgICAgdG9nZXRoZXIsIGFkZCBhbiBpbXBsaWNp
dCByZWZlcmVuY2UgYmV0d2VlbiBlYWNoIHJlZ2lzdGVyZWQgbm9kZSdzCisgICAgICAgIGdyb3Vw
IGFuZCB0aGUgTXV0YXRpb25PYnNlcnZlcidzIGdyb3VwICh3aGljaCBpbmNsdWRlcyB3cmFwcGVy
cyBmcm9tCisgICAgICAgIGFsbCB3b3JsZHMpLgorCisgICAgICAgIFRlc3Q6IE1hbnVhbFRlc3Rz
L211dGF0aW9uLW9ic2VydmVyLWxlYWtzLW5vZGVzLmh0bWwKKworICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZXJHcm91cGVy
OjphZGRJbXBsaWNpdFJlZmVyZW5jZSk6CisgICAgICAgIChXcmFwcGVyR3JvdXBlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXcmFwcGVyR3JvdXBlcjo6YXBwbHkpOgorCiAyMDEzLTAzLTA0ICBSdXNs
YW4gQWJkaWtlZXYgIDxhcnVzbGFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICA8bGluayByZWw9
ImFwcGxlLXRvdWNoLWljb24iPiB0YWcgaXMgbm90IGhvbm9yZWQgb24gQ05OLmNvbSwgd29ya2Zs
b3d5LmNvbSBldGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0ND
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVy
LmNwcAppbmRleCBmZDAxYTllMjFiYWFmNzEwZjMzOTQzNDI0NTc4YmJhNTNiNDJjNDIzLi41OTI4
ZmUyMGVlNDA0ZDI3NDRiNTNhNWU2MmM0NTI1YjQ5NjAzNmViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCkBAIC04Myw2ICs4MywyMiBAQCBib29s
IG9wZXJhdG9yPChjb25zdCBJbXBsaWNpdENvbm5lY3Rpb24mIGxlZnQsIGNvbnN0IEltcGxpY2l0
Q29ubmVjdGlvbiYgcmlnaHQpCiAgICAgcmV0dXJuIGxlZnQucm9vdCgpIDwgcmlnaHQucm9vdCgp
OwogfQogCitzdHJ1Y3QgSW1wbGljaXRSZWZlcmVuY2UgeworICAgIEltcGxpY2l0UmVmZXJlbmNl
KHZvaWQqIHBhcmVudCwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBjaGlsZCkKKyAgICAgICAg
OiBwYXJlbnQocGFyZW50KQorICAgICAgICAsIGNoaWxkKGNoaWxkKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkKiBwYXJlbnQ7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBjaGlsZDsK
K307CisKK2Jvb2wgb3BlcmF0b3I8KGNvbnN0IEltcGxpY2l0UmVmZXJlbmNlJiBsZWZ0LCBjb25z
dCBJbXBsaWNpdFJlZmVyZW5jZSYgcmlnaHQpCit7CisgICAgcmV0dXJuIGxlZnQucGFyZW50IDwg
cmlnaHQucGFyZW50OworfQorCiBjbGFzcyBXcmFwcGVyR3JvdXBlciB7CiBwdWJsaWM6CiAgICAg
V3JhcHBlckdyb3VwZXIoKQpAQCAtMTAwLDYgKzExNiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1f
Y29ubmVjdGlvbnMuYXBwZW5kKEltcGxpY2l0Q29ubmVjdGlvbihyb290LCB3cmFwcGVyKSk7CiAg
ICAgfQogCisgICAgdm9pZCBhZGRJbXBsaWNpdFJlZmVyZW5jZSh2b2lkKiBwYXJlbnQsIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpWYWx1ZT4gY2hpbGQpCisgICAgeworICAgICAgICBtX3JlZmVyZW5jZXMu
YXBwZW5kKEltcGxpY2l0UmVmZXJlbmNlKHBhcmVudCwgY2hpbGQpKTsKKyAgICAgICAgbV9yb290
R3JvdXBNYXAuYWRkKHBhcmVudCwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPigpKTsKKyAgICB9
CisKICAgICB2b2lkIGtlZXBBbGl2ZSh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIp
CiAgICAgewogICAgICAgICBtX2xpdmVPYmplY3RzLmFwcGVuZCh3cmFwcGVyKTsKQEAgLTEyNCwx
MyArMTQ2LDM5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChncm91cC5zaXplKCkgPiAxKQog
ICAgICAgICAgICAgICAgIHY4OjpWODo6QWRkT2JqZWN0R3JvdXAoZ3JvdXAuZGF0YSgpLCBncm91
cC5zaXplKCksIHJldGFpbmVkT2JqZWN0SW5mby5sZWFrUHRyKCkpOwogCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgSGFzaE1hcDx2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiA+OjppdGVyYXRvciBpdGVyID0gbV9yb290R3JvdXBNYXAuZmluZChyb290KTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXRlciAhPSBtX3Jvb3RHcm91cE1hcC5lbmQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaXRlci0+dmFsdWUgPSBncm91cC5maXJzdCgpOworICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBncm91cC5zaHJpbmsoMCk7CiAgICAgICAgIH0KKworICAgICAgICBzdGQ6OnNvcnQo
bV9yZWZlcmVuY2VzLmJlZ2luKCksIG1fcmVmZXJlbmNlcy5lbmQoKSk7CisgICAgICAgIGkgPSAw
OworICAgICAgICB3aGlsZSAoaSA8IG1fcmVmZXJlbmNlcy5zaXplKCkpIHsKKyAgICAgICAgICAg
IHZvaWQqIHBhcmVudCA9IG1fcmVmZXJlbmNlc1tpXS5wYXJlbnQ7CisgICAgICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+IHBhcmVudFdyYXBwZXIgPSBtX3Jvb3RHcm91cE1hcC5nZXQo
cGFyZW50KTsKKyAgICAgICAgICAgIGlmIChwYXJlbnRXcmFwcGVyLklzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBjaGls
ZHJlbjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQo
bV9yZWZlcmVuY2VzW2krK10uY2hpbGQpOworICAgICAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmVm
ZXJlbmNlcy5zaXplKCkgJiYgcGFyZW50ID09IG1fcmVmZXJlbmNlc1tpXS5wYXJlbnQpOworCisg
ICAgICAgICAgICB2ODo6Vjg6OkFkZEltcGxpY2l0UmVmZXJlbmNlcyh2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0Pjo6Q2FzdChwYXJlbnRXcmFwcGVyKSwgY2hpbGRyZW4uZGF0YSgpLCBjaGlsZHJl
bi5zaXplKCkpOworICAgICAgICB9CiAgICAgfQogCiBwcml2YXRlOgogICAgIFZlY3Rvcjx2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gbV9saXZlT2JqZWN0czsKICAgICBWZWN0b3I8SW1wbGlj
aXRDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb25zOworICAgIFZlY3RvcjxJbXBsaWNpdFJlZmVyZW5j
ZT4gbV9yZWZlcmVuY2VzOworICAgIEhhc2hNYXA8dm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpW
YWx1ZT4gPiBtX3Jvb3RHcm91cE1hcDsKIH07CiAKIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ug
b3BhcXVlIEdDIHJvb3RzLgpAQCAtMzE2LDcgKzM2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gc3RhdGljX2Nhc3Q8TXV0YXRpb25PYnNlcnZl
cio+KG9iamVjdCk7CiAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBvYnNlcnZlZE5vZGVzID0g
b2JzZXJ2ZXItPmdldE9ic2VydmVkTm9kZXMoKTsKICAgICAgICAgICAgIGZvciAoSGFzaFNldDxO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gb2JzZXJ2ZWROb2Rlcy5iZWdpbigpOyBpdCAhPSBvYnNlcnZl
ZE5vZGVzLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgICAgIG1fZ3JvdXBlci5hZGRPYmplY3RX
cmFwcGVyVG9Hcm91cChWOEdDQ29udHJvbGxlcjo6b3BhcXVlUm9vdEZvckdDKCppdCwgbV9pc29s
YXRlKSwgd3JhcHBlcik7CisgICAgICAgICAgICAgICAgbV9ncm91cGVyLmFkZEltcGxpY2l0UmVm
ZXJlbmNlKFY4R0NDb250cm9sbGVyOjpvcGFxdWVSb290Rm9yR0MoKml0LCBtX2lzb2xhdGUpLCB3
cmFwcGVyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFjdGl2ZURPTU9iamVjdCog
YWN0aXZlRE9NT2JqZWN0ID0gdHlwZS0+dG9BY3RpdmVET01PYmplY3Qod3JhcHBlcik7CiAgICAg
ICAgICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0ICYmIGFjdGl2ZURPTU9iamVjdC0+aGFzUGVuZGlu
Z0FjdGl2aXR5KCkpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggZjk5
YjhkMTg2ZmYxNDYzYzI1NDYzZWE5M2MyMGE0MTk1NzE3Y2VlOC4uYjdhZjdhYWVjMTNhODE5OGUw
ZTkwNjI3MjA4YWE5OWU5NDY3N2I3NCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTAzLTA1ICBBZGFtIEtsZWluICA8YWRhbWtAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtWOF0gVXNlIGltcGxpY2l0IHJlZmVyZW5jZXMgaW5zdGVh
ZCBvZiBvYmplY3QgZ3JvdXBzIHRvIGtlZXAgcmVnaXN0ZXJlZCBNdXRhdGlvbk9ic2VydmVycyBh
bGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEx
MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBN
YW51YWxUZXN0cy9tdXRhdGlvbi1vYnNlcnZlci1sZWFrcy1ub2Rlcy5odG1sOiBBZGRlZC4KKwog
MjAxMy0wMy0wNCAgUnVzbGFuIEFiZGlrZWV2ICA8YXJ1c2xhbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIj4gdGFnIGlzIG5vdCBob25vcmVkIG9u
IENOTi5jb20sIHdvcmtmbG93eS5jb20gZXRjCmRpZmYgLS1naXQgYS9NYW51YWxUZXN0cy9tdXRh
dGlvbi1vYnNlcnZlci1sZWFrcy1ub2Rlcy5odG1sIGIvTWFudWFsVGVzdHMvbXV0YXRpb24tb2Jz
ZXJ2ZXItbGVha3Mtbm9kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWZjNmU4NGUwMWQ4YTU5NzkwMWM5
YTZlOGRlNDhkODkxNmMxODMxCi0tLSAvZGV2L251bGwKKysrIGIvTWFudWFsVGVzdHMvbXV0YXRp
b24tb2JzZXJ2ZXItbGVha3Mtbm9kZXMuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxib2R5PgorPHNjcmlwdD4KK3Rlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwordmFyIGNv
dW50ID0gMTAwOwordmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24o
KXt9KTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgIHZhciBzcGFuID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgIG9ic2VydmVyLm9ic2VydmUoc3Bh
biwge2F0dHJpYnV0ZXM6dHJ1ZX0pOworfTsKK0dDQ29udHJvbGxlci5jb2xsZWN0KCk7Cis8L3Nj
cmlwdD4KKzxwPk51bWJlciBvZiBsZWFrZWQgbm9kZXMgcmVwb3J0ZWQgYnkgRFJUIHNob3VsZCBi
ZSBsZXNzIHRoYW4gMTAwPC9wPgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191847</attachid>
            <date>2013-03-06 15:17:42 -0800</date>
            <delta_ts>2013-03-06 15:58:30 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-111382-20130306151347.patch</filename>
            <type>text/plain</type>
            <size>8359</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0Njk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMThmMjk1Yjc3NGMyN2Vm
ZWFiMmZjMDk1YWRiMWE1ZWU1MzJkZWUzOS4uYjA4YTVmNGZkZDEyYzg1OWJjNTRjNGVjYmVjOTgw
ZWJiN2IxODg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEzLTAzLTA2ICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtWOF0gVXNlIGltcGxpY2l0
IHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBvYmplY3QgZ3JvdXBzIHRvIGtlZXAgcmVnaXN0ZXJlZCBN
dXRhdGlvbk9ic2VydmVycyBhbGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTExMzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4K
KworICAgICAgICBUd28tcGhhc2UgYXBwcm9hY2ggdG8gaW1wbGljaXQgcmVmZXJlbmNlczogYWZ0
ZXIgZ3JvdXBpbmcgb2JqZWN0cworICAgICAgICB0b2dldGhlciwgYWRkIGFuIGltcGxpY2l0IHJl
ZmVyZW5jZSBiZXR3ZWVuIGVhY2ggcmVnaXN0ZXJlZCBub2RlJ3MKKyAgICAgICAgZ3JvdXAgYW5k
IHRoZSBNdXRhdGlvbk9ic2VydmVyJ3MgZ3JvdXAgKHdoaWNoIGluY2x1ZGVzIHdyYXBwZXJzIGZy
b20KKyAgICAgICAgYWxsIHdvcmxkcykuCisKKyAgICAgICAgQWxzbyBjaGFuZ2VkIG1hbnkgdXNl
cyBvZiB2ODo6VmFsdWUgdG8gdjg6Ok9iamVjdCB3aGVyZSB3ZSBrbm93IHdlJ3JlCisgICAgICAg
IGRlYWxpbmcgd2l0aCBPYmplY3QgYW5kIHRoZSBWOCBBUEkgZXhwZWN0cyB0aGVtLgorCisgICAg
ICAgIFRlc3Q6IE1hbnVhbFRlc3RzL211dGF0aW9uLW9ic2VydmVyLWxlYWtzLW5vZGVzLmh0bWwK
KworICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltcGxpY2l0Q29ubmVjdGlvbjo6SW1wbGljaXRDb25uZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkltcGxpY2l0Q29ubmVjdGlvbjo6d3JhcHBlcik6CisgICAgICAgIChJbXBsaWNp
dENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRSZWZlcmVuY2U6OkltcGxp
Y2l0UmVmZXJlbmNlKTogV3JhcHBlciBjbGFzcyBob2xkaW5nIGEgcGFyZW50IHdobyBzaG91bGQg
aGF2ZSBhbiBpbXBsaWNpdCByZWZlcmVuY2UgdG8gYSBjaGlsZC4KKyAgICAgICAgKEltcGxpY2l0
UmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPCk6IE5lZWRlZCBmb3Igc3Rk
Ojpzb3J0KCkgY2FsbCB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgYSBIYXNoTWFwCisg
ICAgICAgIChXZWJDb3JlOjpXcmFwcGVyR3JvdXBlcjo6YWRkT2JqZWN0V3JhcHBlclRvR3JvdXAp
OgorICAgICAgICAoV2ViQ29yZTo6V3JhcHBlckdyb3VwZXI6OmFkZE5vZGVXcmFwcGVyVG9Hcm91
cCk6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVyR3JvdXBlcjo6YWRkSW1wbGljaXRSZWZlcmVu
Y2UpOgorICAgICAgICAoV3JhcHBlckdyb3VwZXIpOgorICAgICAgICAoV2ViQ29yZTo6V3JhcHBl
ckdyb3VwZXI6OmFwcGx5KToKKwogMjAxMy0wMy0wNCAgUnVzbGFuIEFiZGlrZWV2ICA8YXJ1c2xh
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIj4g
dGFnIGlzIG5vdCBob25vcmVkIG9uIENOTi5jb20sIHdvcmtmbG93eS5jb20gZXRjCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKaW5kZXggZmQwMWE5ZTIx
YmFhZjcxMGYzMzk0MzQyNDU3OGJiYTUzYjQyYzQyMy4uZjM4Nzc1MjE1MzMyYTRkMGFjNzY1NjNi
NzdlMDI0NGJhNWZjZTY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhHQ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0ND
b250cm9sbGVyLmNwcApAQCAtNDksMTMgKzQ5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSW1wbGljaXRDb25uZWN0aW9uIHsKIHB1YmxpYzoKLSAgICBJbXBsaWNpdENvbm5lY3Rp
b24odm9pZCogcm9vdCwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyKQorICAgIElt
cGxpY2l0Q29ubmVjdGlvbih2b2lkKiByb290LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3
cmFwcGVyKQogICAgICAgICA6IG1fcm9vdChyb290KQogICAgICAgICAsIG1fd3JhcHBlcih3cmFw
cGVyKQogICAgICAgICAsIG1fcm9vdE5vZGUoMCkKICAgICB7CiAgICAgfQotICAgIEltcGxpY2l0
Q29ubmVjdGlvbihOb2RlKiByb290LCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIp
CisgICAgSW1wbGljaXRDb25uZWN0aW9uKE5vZGUqIHJvb3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdyYXBwZXIpCiAgICAgICAgIDogbV9yb290KHJvb3QpCiAgICAgICAgICwgbV93cmFw
cGVyKHdyYXBwZXIpCiAgICAgICAgICwgbV9yb290Tm9kZShyb290KQpAQCAtNjMsNyArNjMsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCogcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dDsgfQotICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3JhcHBlcigpIGNvbnN0IHsgcmV0
dXJuIG1fd3JhcHBlcjsgfQorICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIo
KSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXI7IH0KIAogICAgIFBhc3NPd25QdHI8UmV0YWluZWRP
YmplY3RJbmZvPiByZXRhaW5lZE9iamVjdEluZm8oKQogICAgIHsKQEAgLTc0LDcgKzc0LDcgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQqIG1fcm9vdDsKLSAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+IG1fd3JhcHBlcjsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBt
X3dyYXBwZXI7CiAgICAgTm9kZSogbV9yb290Tm9kZTsKIH07CiAKQEAgLTgzLDYgKzgzLDIyIEBA
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IEltcGxpY2l0Q29ubmVjdGlvbiYgbGVmdCwgY29uc3QgSW1w
bGljaXRDb25uZWN0aW9uJiByaWdodCkKICAgICByZXR1cm4gbGVmdC5yb290KCkgPCByaWdodC5y
b290KCk7CiB9CiAKK3N0cnVjdCBJbXBsaWNpdFJlZmVyZW5jZSB7CisgICAgSW1wbGljaXRSZWZl
cmVuY2Uodm9pZCogcGFyZW50LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBjaGlsZCkKKyAg
ICAgICAgOiBwYXJlbnQocGFyZW50KQorICAgICAgICAsIGNoaWxkKGNoaWxkKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkKiBwYXJlbnQ7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
Y2hpbGQ7Cit9OworCitib29sIG9wZXJhdG9yPChjb25zdCBJbXBsaWNpdFJlZmVyZW5jZSYgbGVm
dCwgY29uc3QgSW1wbGljaXRSZWZlcmVuY2UmIHJpZ2h0KQoreworICAgIHJldHVybiBsZWZ0LnBh
cmVudCA8IHJpZ2h0LnBhcmVudDsKK30KKwogY2xhc3MgV3JhcHBlckdyb3VwZXIgewogcHVibGlj
OgogICAgIFdyYXBwZXJHcm91cGVyKCkKQEAgLTkwLDE2ICsxMDYsMjIgQEAgcHVibGljOgogICAg
ICAgICBtX2xpdmVPYmplY3RzLmFwcGVuZChWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCktPmVu
c3VyZUxpdmVSb290KCkpOwogICAgIH0KIAotICAgIHZvaWQgYWRkT2JqZWN0V3JhcHBlclRvR3Jv
dXAodm9pZCogcm9vdCwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyKQorICAgIHZv
aWQgYWRkT2JqZWN0V3JhcHBlclRvR3JvdXAodm9pZCogcm9vdCwgdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD4gd3JhcHBlcikKICAgICB7CiAgICAgICAgIG1fY29ubmVjdGlvbnMuYXBwZW5kKElt
cGxpY2l0Q29ubmVjdGlvbihyb290LCB3cmFwcGVyKSk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRO
b2RlV3JhcHBlclRvR3JvdXAoTm9kZSogcm9vdCwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3
cmFwcGVyKQorICAgIHZvaWQgYWRkTm9kZVdyYXBwZXJUb0dyb3VwKE5vZGUqIHJvb3QsIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiAgICAgewogICAgICAgICBtX2Nvbm5lY3Rp
b25zLmFwcGVuZChJbXBsaWNpdENvbm5lY3Rpb24ocm9vdCwgd3JhcHBlcikpOwogICAgIH0KIAor
ICAgIHZvaWQgYWRkSW1wbGljaXRSZWZlcmVuY2Uodm9pZCogcGFyZW50LCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiBjaGlsZCkKKyAgICB7CisgICAgICAgIG1fcmVmZXJlbmNlcy5hcHBlbmQo
SW1wbGljaXRSZWZlcmVuY2UocGFyZW50LCBjaGlsZCkpOworICAgICAgICBtX3Jvb3RHcm91cE1h
cC5hZGQocGFyZW50LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PigpKTsKKyAgICB9CisKICAg
ICB2b2lkIGtlZXBBbGl2ZSh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIpCiAgICAg
ewogICAgICAgICBtX2xpdmVPYmplY3RzLmFwcGVuZCh3cmFwcGVyKTsKQEAgLTExNSw2ICsxMzcs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBpID0gMDsKICAgICAgICAgd2hpbGUgKGkgPCBt
X2Nvbm5lY3Rpb25zLnNpemUoKSkgewogICAgICAgICAgICAgdm9pZCogcm9vdCA9IG1fY29ubmVj
dGlvbnNbaV0ucm9vdCgpOworICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
Z3JvdXBSZXByZXNlbnRhdGl2ZVdyYXBwZXIgPSBtX2Nvbm5lY3Rpb25zW2ldLndyYXBwZXIoKTsK
ICAgICAgICAgICAgIE93blB0cjxSZXRhaW5lZE9iamVjdEluZm8+IHJldGFpbmVkT2JqZWN0SW5m
byA9IG1fY29ubmVjdGlvbnNbaV0ucmV0YWluZWRPYmplY3RJbmZvKCk7CiAKICAgICAgICAgICAg
IGRvIHsKQEAgLTEyNCwxMyArMTQ3LDM3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChncm91
cC5zaXplKCkgPiAxKQogICAgICAgICAgICAgICAgIHY4OjpWODo6QWRkT2JqZWN0R3JvdXAoZ3Jv
dXAuZGF0YSgpLCBncm91cC5zaXplKCksIHJldGFpbmVkT2JqZWN0SW5mby5sZWFrUHRyKCkpOwog
CisgICAgICAgICAgICBIYXNoTWFwPHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiA+
OjppdGVyYXRvciBpdGVyID0gbV9yb290R3JvdXBNYXAuZmluZChyb290KTsKKyAgICAgICAgICAg
IGlmIChpdGVyICE9IG1fcm9vdEdyb3VwTWFwLmVuZCgpKQorICAgICAgICAgICAgICAgIGl0ZXIt
PnZhbHVlID0gZ3JvdXBSZXByZXNlbnRhdGl2ZVdyYXBwZXI7CisKICAgICAgICAgICAgIGdyb3Vw
LnNocmluaygwKTsKICAgICAgICAgfQorCisgICAgICAgIHN0ZDo6c29ydChtX3JlZmVyZW5jZXMu
YmVnaW4oKSwgbV9yZWZlcmVuY2VzLmVuZCgpKTsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIHdo
aWxlIChpIDwgbV9yZWZlcmVuY2VzLnNpemUoKSkgeworICAgICAgICAgICAgdm9pZCogcGFyZW50
ID0gbV9yZWZlcmVuY2VzW2ldLnBhcmVudDsKKyAgICAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHBhcmVudFdyYXBwZXIgPSBtX3Jvb3RHcm91cE1hcC5nZXQocGFyZW50KTsKKyAg
ICAgICAgICAgIGlmIChwYXJlbnRXcmFwcGVyLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
ICsraTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBjaGlsZHJlbjsKKyAgICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQobV9yZWZlcmVuY2Vz
W2krK10uY2hpbGQpOworICAgICAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmVmZXJlbmNlcy5zaXpl
KCkgJiYgcGFyZW50ID09IG1fcmVmZXJlbmNlc1tpXS5wYXJlbnQpOworCisgICAgICAgICAgICB2
ODo6Vjg6OkFkZEltcGxpY2l0UmVmZXJlbmNlcyhwYXJlbnRXcmFwcGVyLCBjaGlsZHJlbi5kYXRh
KCksIGNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgIH0KICAgICB9CiAKIHByaXZhdGU6CiAgICAg
VmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBtX2xpdmVPYmplY3RzOwogICAgIFZl
Y3RvcjxJbXBsaWNpdENvbm5lY3Rpb24+IG1fY29ubmVjdGlvbnM7CisgICAgVmVjdG9yPEltcGxp
Y2l0UmVmZXJlbmNlPiBtX3JlZmVyZW5jZXM7CisgICAgSGFzaE1hcDx2b2lkKiwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gPiBtX3Jvb3RHcm91cE1hcDsKIH07CiAKIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2Ugb3BhcXVlIEdDIHJvb3RzLgpAQCAtMzE2LDcgKzM2Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gc3RhdGljX2Nhc3Q8TXV0
YXRpb25PYnNlcnZlcio+KG9iamVjdCk7CiAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBvYnNl
cnZlZE5vZGVzID0gb2JzZXJ2ZXItPmdldE9ic2VydmVkTm9kZXMoKTsKICAgICAgICAgICAgIGZv
ciAoSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ID0gb2JzZXJ2ZWROb2Rlcy5iZWdpbigpOyBp
dCAhPSBvYnNlcnZlZE5vZGVzLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgICAgIG1fZ3JvdXBl
ci5hZGRPYmplY3RXcmFwcGVyVG9Hcm91cChWOEdDQ29udHJvbGxlcjo6b3BhcXVlUm9vdEZvckdD
KCppdCwgbV9pc29sYXRlKSwgd3JhcHBlcik7CisgICAgICAgICAgICAgICAgbV9ncm91cGVyLmFk
ZEltcGxpY2l0UmVmZXJlbmNlKFY4R0NDb250cm9sbGVyOjpvcGFxdWVSb290Rm9yR0MoKml0LCBt
X2lzb2xhdGUpLCB3cmFwcGVyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFjdGl2
ZURPTU9iamVjdCogYWN0aXZlRE9NT2JqZWN0ID0gdHlwZS0+dG9BY3RpdmVET01PYmplY3Qod3Jh
cHBlcik7CiAgICAgICAgICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0ICYmIGFjdGl2ZURPTU9iamVj
dC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VM
b2cKaW5kZXggZjk5YjhkMTg2ZmYxNDYzYzI1NDYzZWE5M2MyMGE0MTk1NzE3Y2VlOC4uY2I1MDY5
YWEwOTM3MjVhYzNjMmZjOGYzYmU4MjYxZDJlM2Q5MzgxZCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9n
CisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTAzLTA2ICBBZGFtIEtsZWlu
ICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtWOF0gVXNlIGltcGxpY2l0IHJlZmVy
ZW5jZXMgaW5zdGVhZCBvZiBvYmplY3QgZ3JvdXBzIHRvIGtlZXAgcmVnaXN0ZXJlZCBNdXRhdGlv
bk9ic2VydmVycyBhbGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTExMzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAg
ICAgICAqIE1hbnVhbFRlc3RzL211dGF0aW9uLW9ic2VydmVyLWxlYWtzLW5vZGVzLmh0bWw6IEFk
ZGVkLgorCiAyMDEzLTAzLTA0ICBSdXNsYW4gQWJkaWtlZXYgIDxhcnVzbGFuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iPiB0YWcgaXMgbm90IGhv
bm9yZWQgb24gQ05OLmNvbSwgd29ya2Zsb3d5LmNvbSBldGMKZGlmZiAtLWdpdCBhL01hbnVhbFRl
c3RzL211dGF0aW9uLW9ic2VydmVyLWxlYWtzLW5vZGVzLmh0bWwgYi9NYW51YWxUZXN0cy9tdXRh
dGlvbi1vYnNlcnZlci1sZWFrcy1ub2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlZmM2ZTg0ZTAxZDhh
NTk3OTAxYzlhNmU4ZGU0OGQ4OTE2YzE4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9NYW51YWxUZXN0
cy9tdXRhdGlvbi1vYnNlcnZlci1sZWFrcy1ub2Rlcy5odG1sCkBAIC0wLDAgKzEsMTQgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGJvZHk+Cis8c2NyaXB0PgordGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
Cit2YXIgY291bnQgPSAxMDA7Cit2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihm
dW5jdGlvbigpe30pOworZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgdmFy
IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgb2JzZXJ2ZXIub2Jz
ZXJ2ZShzcGFuLCB7YXR0cmlidXRlczp0cnVlfSk7Cit9OworR0NDb250cm9sbGVyLmNvbGxlY3Qo
KTsKKzwvc2NyaXB0PgorPHA+TnVtYmVyIG9mIGxlYWtlZCBub2RlcyByZXBvcnRlZCBieSBEUlQg
c2hvdWxkIGJlIGxlc3MgdGhhbiAxMDA8L3A+Cis8L2JvZHk+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>