<?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>82997</bug_id>
          
          <creation_ts>2012-04-02 20:16:09 -0700</creation_ts>
          <short_desc>[chromium] Fix layer sorting perspective w if w becomes negative</short_desc>
          <delta_ts>2012-04-09 12:32:24 -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>Layout and Rendering</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="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>594164</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-02 20:16:09 -0700</bug_when>
    <thetext>A follow-up to https://bugs.webkit.org/show_bug.cgi?id=80806

There are still some minor flashing/sorting artifacts that occur that are most likely to to this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597623</commentid>
    <comment_count>1</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-06 13:44:12 -0700</bug_when>
    <thetext>So here&apos;s the situation:

I was able to whip up a quick fix for this, and it did fix the flashing sorting artifacts that we were seeing:
   - css space cube demo
   - mozilla cardboard box + paper sheep demo

However, the fix as I&apos;ve hacked it currently, uses only a sub-portion of the clipped geometry to do layer sorting.  (so that I can still use FloatQuad instead of the clipped polygon).

Of course, this causes other potential layer sorting bugs, for example, it regresses acko.net to have flaky sorting again.


There are two options I can think of to fix this:

(1) make layer sorter work with general clipped polygons of up to 8 vertices.  We can create a quick data structure, ClippedQuad, that internally holds up to 8 vertices without using the allocator.

(2) make layer sorter support multiple quads per layer and accumulate all topological dependencies for all quads.

Any preferences?   At the moment it seems like #2 will be easier to implement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597722</commentid>
    <comment_count>2</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-06 15:22:07 -0700</bug_when>
    <thetext>(In reply to comment #1)

&gt; Of course, this causes other potential layer sorting bugs, for example, it regresses acko.net to have flaky sorting again.
&gt; 

Actually, those acko.net sorting bugs already existed, even before the previous perspective clipping patch.  So my fix should be OK without forcing more complexity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597813</commentid>
    <comment_count>3</comment_count>
      <attachid>136096</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-06 16:48:15 -0700</bug_when>
    <thetext>Created attachment 136096
Working fix, without unit test yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598138</commentid>
    <comment_count>4</comment_count>
      <attachid>136184</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-08 22:14:20 -0700</bug_when>
    <thetext>Created attachment 136184
Patch with unit test

Shuffled around some CCMathUtil code at the same time, for cleanliness</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598378</commentid>
    <comment_count>5</comment_count>
      <attachid>136184</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-09 10:12:47 -0700</bug_when>
    <thetext>Comment on attachment 136184
Patch with unit test

R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598401</commentid>
    <comment_count>6</comment_count>
      <attachid>136184</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-04-09 10:28:48 -0700</bug_when>
    <thetext>Comment on attachment 136184
Patch with unit test


Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598525</commentid>
    <comment_count>7</comment_count>
      <attachid>136184</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-09 12:32:19 -0700</bug_when>
    <thetext>Comment on attachment 136184
Patch with unit test

Clearing flags on attachment: 136184

Committed r113606: &lt;http://trac.webkit.org/changeset/113606&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598526</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-09 12:32:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136096</attachid>
            <date>2012-04-06 16:48:15 -0700</date>
            <delta_ts>2012-04-08 22:14:17 -0700</delta_ts>
            <desc>Working fix, without unit test yet</desc>
            <filename>bug-82997-20120406164814.patch</filename>
            <type>text/plain</type>
            <size>9803</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNDU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCmlu
ZGV4IDMxZDRlNjAzOGE5MzZhZjkzNjkwOWY2ZWU5NWFkM2FlNDk2MWFlZjAuLmU2MGYwYjMwZWE2
YTkzZTM0NTBjNmY4YjY3ODZlMDNkN2I4YjVkMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIu
Y3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogCiAj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ01hdGhVdGls
LmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+
CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC0xNTgsOCArMTU5LDMwIEBAIENDTGF5ZXJTb3J0
ZXI6OkxheWVyU2hhcGU6OkxheWVyU2hhcGUoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgY29u
c3QgVHJhbnNmb3JtCiAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KC13aWR0aCAq
IDAuNSwgLWhlaWdodCAqIDAuNSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgcHJvamVjdGlvbiBv
ZiB0aGUgbGF5ZXIgcXVhZCBvbnRvIHRoZSB6ID0gMCBwbGFuZS4KLSAgICBwcm9qZWN0ZWRRdWFk
ID0gZHJhd1RyYW5zZm9ybS5tYXBRdWFkKGxheWVyUXVhZCk7Ci0gICAgcHJvamVjdGVkQm91bmRz
ID0gcHJvamVjdGVkUXVhZC5ib3VuZGluZ0JveCgpOworCisgICAgRmxvYXRQb2ludCBjbGlwcGVk
UXVhZFs4XTsKKyAgICBpbnQgbnVtVmVydGljZXNJbkNsaXBwZWRRdWFkOworICAgIENDTWF0aFV0
aWw6Om1hcENsaXBwZWRRdWFkKGRyYXdUcmFuc2Zvcm0sIGxheWVyUXVhZCwgY2xpcHBlZFF1YWQs
IG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisKKyAgICBpZiAobnVtVmVydGljZXNJbkNsaXBw
ZWRRdWFkIDwgMykgeworICAgICAgICBwcm9qZWN0ZWRCb3VuZHMgPSBGbG9hdFJlY3QoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByb2plY3RlZEJvdW5kcyA9IENDTWF0aFV0aWw6
OmNvbXB1dGVFbmNsb3NpbmdSZWN0T2ZWZXJ0aWNlcyhjbGlwcGVkUXVhZCwgbnVtVmVydGljZXNJ
bkNsaXBwZWRRdWFkKTsKKworICAgIC8vIE5PVEU6IGl0IHdpbGwgcmVxdWlyZSB2ZXJ5IHNpZ25p
ZmljYW50IHJlZmFjdG9yaW5nIGFuZCBvdmVyaGVhZCB0byBkZWFsIHdpdGgKKyAgICAvLyBnZW5l
cmFsaXplZCBwb2x5Z29ucyBvciBtdWx0aXBsZSBxdWFkcyBwZXIgbGF5ZXIgaGVyZS4gRm9yIHRo
ZSBzYWtlIG9mIGxheWVyCisgICAgLy8gc29ydGluZyBpdCBpcyBlcXVhbGx5IGNvcnJlY3QgdG8g
dGFrZSBhIHN1YnNlY3Rpb24gb2YgdGhlIHBvbHlnb24gdGhhdCBjYW4gYmUgbWFkZQorICAgIC8v
IGludG8gYSBxdWFkLiBUaGlzIHdpbGwgb25seSBiZSBpbmNvcnJlY3QgaW4gdGhlIGNhc2Ugb2Yg
aW50ZXJzZWN0aW5nIGxheWVycywgd2hpY2gKKyAgICAvLyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQg
YW55d2F5LgorICAgIHByb2plY3RlZFF1YWQuc2V0UDEoY2xpcHBlZFF1YWRbMF0pOworICAgIHBy
b2plY3RlZFF1YWQuc2V0UDIoY2xpcHBlZFF1YWRbMV0pOworICAgIHByb2plY3RlZFF1YWQuc2V0
UDMoY2xpcHBlZFF1YWRbMl0pOworICAgIGlmIChudW1WZXJ0aWNlc0luQ2xpcHBlZFF1YWQgPj0g
NCkKKyAgICAgICAgcHJvamVjdGVkUXVhZC5zZXRQNChjbGlwcGVkUXVhZFszXSk7CisgICAgZWxz
ZQorICAgICAgICBwcm9qZWN0ZWRRdWFkLnNldFA0KGNsaXBwZWRRdWFkWzJdKTsgLy8gdGhpcyB3
aWxsIGJlIGEgZGVnZW5lcmF0ZSBxdWFkIHRoYXQgaXMgYWN0dWFsbHkgYSB0cmlhbmdsZS4KIAog
ICAgIC8vIENvbXB1dGUgdGhlIG5vcm1hbCBvZiB0aGUgbGF5ZXIncyBwbGFuZS4KICAgICBGbG9h
dFBvaW50M0QgYzEgPSBkcmF3VHJhbnNmb3JtLm1hcFBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAw
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ01hdGhVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTWF0aFV0aWwuY3BwCmluZGV4IGYyNmU3YzMyODI4YmY1NDY4NzQ5ZmYwNGRm
YjBlNzY1OGNhMGNiZmYuLjhiMDNiZmVlMGI4ZmNiMTk2ZDg0MTliZjQ3ZTk1NzM2YTY5OTNkN2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTWF0aFV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTWF0aFV0aWwuY3BwCkBAIC0xMzEsMTIgKzEzMSwyMyBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgZXhwYW5kQm91bmRzVG9JbmNsdWRlUG9pbnQoZmxvYXQmIHhtaW4sIGZsb2F0JiB4
bWF4LCBmbG9hdCYgeQogICAgIHltYXggPSBzdGQ6Om1heChwLnkoKSwgeW1heCk7CiB9CiAKLXN0
YXRpYyBGbG9hdFJlY3QgY29tcHV0ZUVuY2xvc2luZ1JlY3RPZkNsaXBwZWRRdWFkKGNvbnN0IEhv
bW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDEsIGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDIs
IGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDMsIGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRp
bmF0ZSYgaDQpCitzdGF0aWMgRmxvYXRSZWN0IGNvbXB1dGVFbmNsb3NpbmdSZWN0KGNvbnN0IEhv
bW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDEsIGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDIs
IGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDMsIGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRp
bmF0ZSYgaDQpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBjbGlwcGluZyBhcyBu
ZWNlc3NhcnkgYW5kIGNvbXB1dGVzIHRoZSBlbmNsb3NpbmcgMmQKICAgICAvLyBGbG9hdFJlY3Qg
b2YgdGhlIHZlcnRpY2VzLiBEb2luZyB0aGVzZSB0d28gc3RlcHMgc2ltdWx0YW5lb3VzbHkgYWxs
b3dzIHVzIHRvIGF2b2lkCiAgICAgLy8gdGhlIG92ZXJoZWFkIG9mIHN0b3JpbmcgYW4gdW5rbm93
biBudW1iZXIgb2YgY2xpcHBlZCB2ZXJ0aWNlcy4KIAorICAgIC8vIElmIG5vIHZlcnRpY2VzIG9u
IHRoZSBxdWFkIGFyZSBjbGlwcGVkLCB0aGVuIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBlbmNs
b3NpbmcgcmVjdCBkaXJlY3RseS4KKyAgICBib29sIHNvbWV0aGluZ0NsaXBwZWQgPSBoMS5zaG91
bGRCZUNsaXBwZWQoKSB8fCBoMi5zaG91bGRCZUNsaXBwZWQoKSB8fCBoMy5zaG91bGRCZUNsaXBw
ZWQoKSB8fCBoNC5zaG91bGRCZUNsaXBwZWQoKTsKKyAgICBpZiAoIXNvbWV0aGluZ0NsaXBwZWQp
IHsKKyAgICAgICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQgPSBGbG9hdFF1YWQoaDEuY2FydGVzaWFu
UG9pbnQyZCgpLCBoMi5jYXJ0ZXNpYW5Qb2ludDJkKCksIGgzLmNhcnRlc2lhblBvaW50MmQoKSwg
aDQuY2FydGVzaWFuUG9pbnQyZCgpKTsKKyAgICAgICAgcmV0dXJuIG1hcHBlZFF1YWQuYm91bmRp
bmdCb3goKTsKKyAgICB9CisKKyAgICBib29sIGV2ZXJ5dGhpbmdDbGlwcGVkID0gaDEuc2hvdWxk
QmVDbGlwcGVkKCkgJiYgaDIuc2hvdWxkQmVDbGlwcGVkKCkgJiYgaDMuc2hvdWxkQmVDbGlwcGVk
KCkgJiYgaDQuc2hvdWxkQmVDbGlwcGVkKCk7CisgICAgaWYgKGV2ZXJ5dGhpbmdDbGlwcGVkKQor
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKICAgICBmbG9hdCB4bWluID0gc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46Om1heCgpOwogICAgIGZsb2F0IHhtYXggPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6bWluKCk7CiAgICAgZmxvYXQgeW1pbiA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjptYXgoKTsKQEAgLTE2OSwxNiArMTgwLDEwIEBAIHN0YXRpYyBGbG9hdFJlY3Qg
Y29tcHV0ZUVuY2xvc2luZ1JlY3RPZkNsaXBwZWRRdWFkKGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRp
bmF0ZSYKICAgICByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQoeG1pbiwgeW1pbiksIEZsb2F0
U2l6ZSh4bWF4IC0geG1pbiwgeW1heCAtIHltaW4pKTsKIH0KIAotc3RhdGljIEZsb2F0UmVjdCBj
b21wdXRlRW5jbG9zaW5nUmVjdChjb25zdCBIb21vZ2VuZW91c0Nvb3JkaW5hdGUmIGgxLCBjb25z
dCBIb21vZ2VuZW91c0Nvb3JkaW5hdGUmIGgyLCBjb25zdCBIb21vZ2VuZW91c0Nvb3JkaW5hdGUm
IGgzLCBjb25zdCBIb21vZ2VuZW91c0Nvb3JkaW5hdGUmIGg0KQorc3RhdGljIGlubGluZSB2b2lk
IGFkZFZlcnRleFRvQ2xpcHBlZFF1YWQoY29uc3QgRmxvYXRQb2ludCYgbmV3VmVydGV4LCBGbG9h
dFBvaW50IGNsaXBwZWRRdWFkWzhdLCBpbnQmIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCkKIHsK
LSAgICAvLyBJZiBubyB2ZXJ0aWNlcyBvbiB0aGUgcXVhZCBhcmUgY2xpcHBlZCwgdGhlbiB3ZSBj
YW4gc2ltcGx5IHJldHVybiB0aGUgZW5jbG9zaW5nIHJlY3QgZGlyZWN0bHkuCi0gICAgYm9vbCBj
bGlwcGVkID0gaDEuc2hvdWxkQmVDbGlwcGVkKCkgfHwgaDIuc2hvdWxkQmVDbGlwcGVkKCkgfHwg
aDMuc2hvdWxkQmVDbGlwcGVkKCkgfHwgaDQuc2hvdWxkQmVDbGlwcGVkKCk7Ci0gICAgaWYgKCFj
bGlwcGVkKSB7Ci0gICAgICAgIEZsb2F0UXVhZCBtYXBwZWRRdWFkID0gRmxvYXRRdWFkKGgxLmNh
cnRlc2lhblBvaW50MmQoKSwgaDIuY2FydGVzaWFuUG9pbnQyZCgpLCBoMy5jYXJ0ZXNpYW5Qb2lu
dDJkKCksIGg0LmNhcnRlc2lhblBvaW50MmQoKSk7Ci0gICAgICAgIHJldHVybiBtYXBwZWRRdWFk
LmJvdW5kaW5nQm94KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbXB1dGVFbmNsb3NpbmdSZWN0
T2ZDbGlwcGVkUXVhZChoMSwgaDIsIGgzLCBoNCk7CisgICAgY2xpcHBlZFF1YWRbbnVtVmVydGlj
ZXNJbkNsaXBwZWRRdWFkXSA9IG5ld1ZlcnRleDsKKyAgICBudW1WZXJ0aWNlc0luQ2xpcHBlZFF1
YWQrKzsKIH0KIAogSW50UmVjdCBDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdChjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQpAQCAt
MjE2LDYgKzIyMSw2MCBAQCBGbG9hdFJlY3QgQ0NNYXRoVXRpbDo6cHJvamVjdENsaXBwZWRSZWN0
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sCiAgICAgcmV0dXJuIGNvbXB1
dGVFbmNsb3NpbmdSZWN0KGgxLCBoMiwgaDMsIGg0KTsKIH0KIAordm9pZCBDQ01hdGhVdGlsOjpt
YXBDbGlwcGVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25z
dCBGbG9hdFF1YWQmIHNyY1F1YWQsIEZsb2F0UG9pbnQgY2xpcHBlZFF1YWRbOF0sIGludCYgbnVt
VmVydGljZXNJbkNsaXBwZWRRdWFkKQoreworICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMSA9
IG1hcFBvaW50KHRyYW5zZm9ybSwgc3JjUXVhZC5wMSgpKTsKKyAgICBIb21vZ2VuZW91c0Nvb3Jk
aW5hdGUgaDIgPSBtYXBQb2ludCh0cmFuc2Zvcm0sIHNyY1F1YWQucDIoKSk7CisgICAgSG9tb2dl
bmVvdXNDb29yZGluYXRlIGgzID0gbWFwUG9pbnQodHJhbnNmb3JtLCBzcmNRdWFkLnAzKCkpOwor
ICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoNCA9IG1hcFBvaW50KHRyYW5zZm9ybSwgc3JjUXVh
ZC5wNCgpKTsKKworICAgIC8vIFRoZSBvcmRlciBvZiBhZGRpbmcgdGhlIHZlcnRpY2VzIHRvIHRo
ZSBhcnJheSBpcyBjaG9zZW4gc28gdGhhdCBjbG9ja3dpc2UgLyBjb3VudGVyLWNsb2Nrd2lzZSBv
cmllbnRhdGlvbiBpcyByZXRhaW5lZC4KKworICAgIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCA9
IDA7CisKKyAgICBpZiAoIWgxLnNob3VsZEJlQ2xpcHBlZCgpKQorICAgICAgICBhZGRWZXJ0ZXhU
b0NsaXBwZWRRdWFkKGgxLmNhcnRlc2lhblBvaW50MmQoKSwgY2xpcHBlZFF1YWQsIG51bVZlcnRp
Y2VzSW5DbGlwcGVkUXVhZCk7CisKKyAgICBpZiAoaDEuc2hvdWxkQmVDbGlwcGVkKCkgXiBoMi5z
aG91bGRCZUNsaXBwZWQoKSkKKyAgICAgICAgYWRkVmVydGV4VG9DbGlwcGVkUXVhZChjb21wdXRl
Q2xpcHBlZFBvaW50Rm9yRWRnZShoMSwgaDIpLmNhcnRlc2lhblBvaW50MmQoKSwgY2xpcHBlZFF1
YWQsIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisKKyAgICBpZiAoIWgyLnNob3VsZEJlQ2xp
cHBlZCgpKQorICAgICAgICBhZGRWZXJ0ZXhUb0NsaXBwZWRRdWFkKGgyLmNhcnRlc2lhblBvaW50
MmQoKSwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisKKyAgICBpZiAo
aDIuc2hvdWxkQmVDbGlwcGVkKCkgXiBoMy5zaG91bGRCZUNsaXBwZWQoKSkKKyAgICAgICAgYWRk
VmVydGV4VG9DbGlwcGVkUXVhZChjb21wdXRlQ2xpcHBlZFBvaW50Rm9yRWRnZShoMiwgaDMpLmNh
cnRlc2lhblBvaW50MmQoKSwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7
CisKKyAgICBpZiAoIWgzLnNob3VsZEJlQ2xpcHBlZCgpKQorICAgICAgICBhZGRWZXJ0ZXhUb0Ns
aXBwZWRRdWFkKGgzLmNhcnRlc2lhblBvaW50MmQoKSwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2Vz
SW5DbGlwcGVkUXVhZCk7CisKKyAgICBpZiAoaDMuc2hvdWxkQmVDbGlwcGVkKCkgXiBoNC5zaG91
bGRCZUNsaXBwZWQoKSkKKyAgICAgICAgYWRkVmVydGV4VG9DbGlwcGVkUXVhZChjb21wdXRlQ2xp
cHBlZFBvaW50Rm9yRWRnZShoMywgaDQpLmNhcnRlc2lhblBvaW50MmQoKSwgY2xpcHBlZFF1YWQs
IG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisKKyAgICBpZiAoIWg0LnNob3VsZEJlQ2xpcHBl
ZCgpKQorICAgICAgICBhZGRWZXJ0ZXhUb0NsaXBwZWRRdWFkKGg0LmNhcnRlc2lhblBvaW50MmQo
KSwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisKKyAgICBpZiAoaDQu
c2hvdWxkQmVDbGlwcGVkKCkgXiBoMS5zaG91bGRCZUNsaXBwZWQoKSkKKyAgICAgICAgYWRkVmVy
dGV4VG9DbGlwcGVkUXVhZChjb21wdXRlQ2xpcHBlZFBvaW50Rm9yRWRnZShoNCwgaDEpLmNhcnRl
c2lhblBvaW50MmQoKSwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisK
KyAgICBBU1NFUlQobnVtVmVydGljZXNJbkNsaXBwZWRRdWFkIDw9IDgpOworfQorCitGbG9hdFJl
Y3QgQ0NNYXRoVXRpbDo6Y29tcHV0ZUVuY2xvc2luZ1JlY3RPZlZlcnRpY2VzKEZsb2F0UG9pbnQg
dmVydGljZXNbXSwgaW50IG51bVZlcnRpY2VzKQoreworICAgIGlmIChudW1WZXJ0aWNlcyA8IDIp
CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIGZsb2F0IHhtaW4gPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7CisgICAgZmxvYXQgeG1heCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjptaW4oKTsKKyAgICBmbG9hdCB5bWluID0gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46Om1heCgpOworICAgIGZsb2F0IHltYXggPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6bWluKCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVZlcnRpY2VzOyAr
K2kpCisgICAgICAgIGV4cGFuZEJvdW5kc1RvSW5jbHVkZVBvaW50KHhtaW4sIHhtYXgsIHltaW4s
IHltYXgsIHZlcnRpY2VzW2ldKTsKKworICAgIHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludCh4
bWluLCB5bWluKSwgRmxvYXRTaXplKHhtYXggLSB4bWluLCB5bWF4IC0geW1pbikpOworfQorCiBG
bG9hdFF1YWQgQ0NNYXRoVXRpbDo6bWFwUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtLCBjb25zdCBGbG9hdFF1YWQmIHEsIGJvb2wmIGNsaXBwZWQpCiB7CiAgICAgaWYg
KHRyYW5zZm9ybS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01hdGhVdGlsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01hdGhVdGlsLmgK
aW5kZXggZDlkMDM5ZTg2MDY3Nzc3N2JlMjc2MTFjYzRlZjNjM2U4OTc3MzYyZS4uMzk4NjA0ZDlh
NzQ1ZjAzNzgwNWQyNWFhMDQwY2M1OWMxZjI3MDk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYXRoVXRpbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0aWwuaApAQCAt
MjgsNiArMjgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnRSZWN0OworY2xh
c3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0UXVhZDsKIGNsYXNz
IFRyYW5zZm9ybWF0aW9uTWF0cml4OwpAQCAtNDksOCArNTAsMTUgQEAgcHVibGljOgogICAgIHN0
YXRpYyBGbG9hdFJlY3QgbWFwQ2xpcHBlZFJlY3QoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
LCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICBzdGF0aWMgRmxvYXRSZWN0IHByb2plY3RDbGlwcGVk
UmVjdChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwogCi0g
ICAgLy8gTk9URTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBkbyBjb3JyZWN0IGNsaXBwaW5nIGFn
YWluc3QgdyA9IDAgcGxhbmUsIGJ1dCBpdAotICAgIC8vIGNvcnJlY3RseSBkZXRlY3RzIHRoZSBj
bGlwcGVkIGNvbmRpdGlvbiB2aWEgdGhlIGJvb2xlYW4gY2xpcHBlZC4KKyAgICAvLyBSZXR1cm5z
IGFuIGFycmF5IG9mIHZlcnRpY2VzIHRoYXQgcmVwcmVzZW50IHRoZSBjbGlwcGVkIHBvbHlnb24u
IEFmdGVyIHJldHVybmluZywgaW5kZXhlcyBmcm9tCisgICAgLy8gMCB0byBudW1WZXJ0aWNlc0lu
Q2xpcHBlZFF1YWQgYXJlIHZhbGlkIGluIHRoZSBjbGlwcGVkUXVhZCBhcnJheS4gTm90ZSB0aGF0
CisgICAgLy8gbnVtVmVydGljZXNJbkNsaXBwZWRRdWFkIG1heSBiZSB6ZXJvLCB3aGljaCBtZWFu
cyB0aGUgZW50aXJlIHF1YWQgd2FzIGNsaXBwZWQsIGFuZAorICAgIC8vIG5vbmUgb2YgdGhlIHZl
cnRpY2VzIGluIHRoZSBhcnJheSBhcmUgdmFsaWQuCisgICAgc3RhdGljIHZvaWQgbWFwQ2xpcHBl
ZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFF1YWQmIHNyY1F1
YWQsIEZsb2F0UG9pbnQgY2xpcHBlZFF1YWRbOF0sIGludCYgbnVtVmVydGljZXNJbkNsaXBwZWRR
dWFkKTsKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNvbXB1dGVFbmNsb3NpbmdSZWN0T2ZWZXJ0aWNl
cyhGbG9hdFBvaW50IHZlcnRpY2VzW10sIGludCBudW1WZXJ0aWNlcyk7CisKKyAgICAvLyBOT1RF
OiBUaGVzZSBmdW5jdGlvbnMgZG8gbm90IGRvIGNvcnJlY3QgY2xpcHBpbmcgYWdhaW5zdCB3ID0g
MCBwbGFuZSwgYnV0IHRoZXkKKyAgICAvLyBjb3JyZWN0bHkgZGV0ZWN0IHRoZSBjbGlwcGVkIGNv
bmRpdGlvbiB2aWEgdGhlIGJvb2xlYW4gY2xpcHBlZC4KICAgICBzdGF0aWMgRmxvYXRRdWFkIG1h
cFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFF1YWQmLCBib29s
JiBjbGlwcGVkKTsKICAgICBzdGF0aWMgRmxvYXRRdWFkIHByb2plY3RRdWFkKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRRdWFkJiwgYm9vbCYgY2xpcHBlZCk7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136184</attachid>
            <date>2012-04-08 22:14:20 -0700</date>
            <delta_ts>2012-04-09 12:32:19 -0700</delta_ts>
            <desc>Patch with unit test</desc>
            <filename>bug-82997-20120408221419.patch</filename>
            <type>text/plain</type>
            <size>14502</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQ1NTdjNzhjOGVlZDU3
MjljNjU4Nzg3ZjBlOTgzMjRkMDUwYzUwMC4uZWMwZWJiNjRlNTU0ZjYyNjExOGMzNzYyMzhiOTcz
MjdiOGNlZWRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTA0LTA4ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Rml4IGxheWVyIHNvcnRpbmcgcGVyc3BlY3RpdmUgdyBpZiB3IGJlY29tZXMgbmVnYXRpdmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyOTk3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5pdCB0ZXN0IGFk
ZGVkIHRvIENDTGF5ZXJTb3J0ZXJUZXN0LmNwcC4KKworICAgICAgICBUaGlzIGlzIGEgZm9sbG93
LXVwIHBhdGNoIGFmdGVyIHIxMTMzNjQuIFRoYXQgb3RoZXIgcGF0Y2gKKyAgICAgICAgaW1wbGVt
ZW50ZWQgcHJvcGVyIGNsaXBwaW5nIHNvIHRoYXQgcGVyc3BlY3RpdmUgdHJhbnNmb3JtcyBkbyBu
b3QKKyAgICAgICAgYWNjaWRlbnRhbGx5IG1ha2UgZ2VvbWV0cnkgZGlzYXBwZWFyLiBUaGlzIHBh
dGNoIGZpeGVzIGEgc2ltaWxhcgorICAgICAgICBwcm9ibGVtIGluIHRoZSBsYXllciBzb3J0ZXIg
Y29kZSBzbyB0aGF0IGxheWVycyBkbyBub3QKKyAgICAgICAgYWNjaWRlbnRhbGx5IGdldCBzb3J0
ZWQgaW5jb3JyZWN0bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyU29ydGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJTb3J0ZXI6Okxh
eWVyU2hhcGU6OkxheWVyU2hhcGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTWF0aFV0aWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUVuY2xvc2lu
Z1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRkVmVydGV4VG9DbGlwcGVkUXVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ01hdGhVdGlsOjptYXBDbGlwcGVkUXVhZCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTWF0aFV0aWw6OmNvbXB1dGVFbmNsb3NpbmdSZWN0
T2ZWZXJ0aWNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NN
YXRoVXRpbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ01hdGhVdGlsKToKKwog
MjAxMi0wNC0wOCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBCdWlsZCBmaXggZm9yICFFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEFTU0VSVF9ESVNBQkxF
RCBhZnRlciByMTA5OTUzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5Y2E2M2RhZDky
YzFiNDc5YjFmODY3ZTM5NWRhOGEwYzE0OGZmOWI5Li40N2MwYTY5NjU4OGYzMjIyM2U3NmQ0MGRi
MjQ0NDA4OGY0ZTU5NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEyLTA0LTA4ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtjaHJvbWl1bV0gRml4IGxheWVyIHNvcnRpbmcgcGVyc3BlY3RpdmUgdyBpZiB3
IGJlY29tZXMgbmVnYXRpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTgyOTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyU29ydGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpURVNUKToKKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTA0LTA2ICBBbWkgRmlzY2htYW4g
IDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUm9sbCBDaHJvbWl1bSBERVBTCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyU29ydGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCmluZGV4IDMxZDRlNjAzOGE5MzZhZjkzNjkwOWY2ZWU5
NWFkM2FlNDk2MWFlZjAuLmU2MGYwYjMwZWE2YTkzZTM0NTBjNmY4YjY3ODZlMDNkN2I4YjVkMDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJTb3J0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiY2MvQ0NMYXllclNvcnRlci5oIgogCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKKyNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJm
YWNlLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC0x
NTgsOCArMTU5LDMwIEBAIENDTGF5ZXJTb3J0ZXI6OkxheWVyU2hhcGU6OkxheWVyU2hhcGUoZmxv
YXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgY29uc3QgVHJhbnNmb3JtCiAgICAgICAgICAgICAgICAg
ICAgICAgICBGbG9hdFBvaW50KC13aWR0aCAqIDAuNSwgLWhlaWdodCAqIDAuNSkpOwogCiAgICAg
Ly8gQ29tcHV0ZSB0aGUgcHJvamVjdGlvbiBvZiB0aGUgbGF5ZXIgcXVhZCBvbnRvIHRoZSB6ID0g
MCBwbGFuZS4KLSAgICBwcm9qZWN0ZWRRdWFkID0gZHJhd1RyYW5zZm9ybS5tYXBRdWFkKGxheWVy
UXVhZCk7Ci0gICAgcHJvamVjdGVkQm91bmRzID0gcHJvamVjdGVkUXVhZC5ib3VuZGluZ0JveCgp
OworCisgICAgRmxvYXRQb2ludCBjbGlwcGVkUXVhZFs4XTsKKyAgICBpbnQgbnVtVmVydGljZXNJ
bkNsaXBwZWRRdWFkOworICAgIENDTWF0aFV0aWw6Om1hcENsaXBwZWRRdWFkKGRyYXdUcmFuc2Zv
cm0sIGxheWVyUXVhZCwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisK
KyAgICBpZiAobnVtVmVydGljZXNJbkNsaXBwZWRRdWFkIDwgMykgeworICAgICAgICBwcm9qZWN0
ZWRCb3VuZHMgPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBy
b2plY3RlZEJvdW5kcyA9IENDTWF0aFV0aWw6OmNvbXB1dGVFbmNsb3NpbmdSZWN0T2ZWZXJ0aWNl
cyhjbGlwcGVkUXVhZCwgbnVtVmVydGljZXNJbkNsaXBwZWRRdWFkKTsKKworICAgIC8vIE5PVEU6
IGl0IHdpbGwgcmVxdWlyZSB2ZXJ5IHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIGFuZCBvdmVyaGVh
ZCB0byBkZWFsIHdpdGgKKyAgICAvLyBnZW5lcmFsaXplZCBwb2x5Z29ucyBvciBtdWx0aXBsZSBx
dWFkcyBwZXIgbGF5ZXIgaGVyZS4gRm9yIHRoZSBzYWtlIG9mIGxheWVyCisgICAgLy8gc29ydGlu
ZyBpdCBpcyBlcXVhbGx5IGNvcnJlY3QgdG8gdGFrZSBhIHN1YnNlY3Rpb24gb2YgdGhlIHBvbHln
b24gdGhhdCBjYW4gYmUgbWFkZQorICAgIC8vIGludG8gYSBxdWFkLiBUaGlzIHdpbGwgb25seSBi
ZSBpbmNvcnJlY3QgaW4gdGhlIGNhc2Ugb2YgaW50ZXJzZWN0aW5nIGxheWVycywgd2hpY2gKKyAg
ICAvLyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQgYW55d2F5LgorICAgIHByb2plY3RlZFF1YWQuc2V0
UDEoY2xpcHBlZFF1YWRbMF0pOworICAgIHByb2plY3RlZFF1YWQuc2V0UDIoY2xpcHBlZFF1YWRb
MV0pOworICAgIHByb2plY3RlZFF1YWQuc2V0UDMoY2xpcHBlZFF1YWRbMl0pOworICAgIGlmIChu
dW1WZXJ0aWNlc0luQ2xpcHBlZFF1YWQgPj0gNCkKKyAgICAgICAgcHJvamVjdGVkUXVhZC5zZXRQ
NChjbGlwcGVkUXVhZFszXSk7CisgICAgZWxzZQorICAgICAgICBwcm9qZWN0ZWRRdWFkLnNldFA0
KGNsaXBwZWRRdWFkWzJdKTsgLy8gdGhpcyB3aWxsIGJlIGEgZGVnZW5lcmF0ZSBxdWFkIHRoYXQg
aXMgYWN0dWFsbHkgYSB0cmlhbmdsZS4KIAogICAgIC8vIENvbXB1dGUgdGhlIG5vcm1hbCBvZiB0
aGUgbGF5ZXIncyBwbGFuZS4KICAgICBGbG9hdFBvaW50M0QgYzEgPSBkcmF3VHJhbnNmb3JtLm1h
cFBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01hdGhVdGlsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0aWwuY3BwCmluZGV4
IGYyNmU3YzMyODI4YmY1NDY4NzQ5ZmYwNGRmYjBlNzY1OGNhMGNiZmYuLjhiMDNiZmVlMGI4ZmNi
MTk2ZDg0MTliZjQ3ZTk1NzM2YTY5OTNkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0aWwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0aWwuY3BwCkBAIC0x
MzEsMTIgKzEzMSwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXhwYW5kQm91bmRzVG9JbmNsdWRl
UG9pbnQoZmxvYXQmIHhtaW4sIGZsb2F0JiB4bWF4LCBmbG9hdCYgeQogICAgIHltYXggPSBzdGQ6
Om1heChwLnkoKSwgeW1heCk7CiB9CiAKLXN0YXRpYyBGbG9hdFJlY3QgY29tcHV0ZUVuY2xvc2lu
Z1JlY3RPZkNsaXBwZWRRdWFkKGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDEsIGNvbnN0
IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDIsIGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYg
aDMsIGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDQpCitzdGF0aWMgRmxvYXRSZWN0IGNv
bXB1dGVFbmNsb3NpbmdSZWN0KGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDEsIGNvbnN0
IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDIsIGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYg
aDMsIGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYgaDQpCiB7CiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBwZXJmb3JtcyBjbGlwcGluZyBhcyBuZWNlc3NhcnkgYW5kIGNvbXB1dGVzIHRoZSBlbmNs
b3NpbmcgMmQKICAgICAvLyBGbG9hdFJlY3Qgb2YgdGhlIHZlcnRpY2VzLiBEb2luZyB0aGVzZSB0
d28gc3RlcHMgc2ltdWx0YW5lb3VzbHkgYWxsb3dzIHVzIHRvIGF2b2lkCiAgICAgLy8gdGhlIG92
ZXJoZWFkIG9mIHN0b3JpbmcgYW4gdW5rbm93biBudW1iZXIgb2YgY2xpcHBlZCB2ZXJ0aWNlcy4K
IAorICAgIC8vIElmIG5vIHZlcnRpY2VzIG9uIHRoZSBxdWFkIGFyZSBjbGlwcGVkLCB0aGVuIHdl
IGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBlbmNsb3NpbmcgcmVjdCBkaXJlY3RseS4KKyAgICBib29s
IHNvbWV0aGluZ0NsaXBwZWQgPSBoMS5zaG91bGRCZUNsaXBwZWQoKSB8fCBoMi5zaG91bGRCZUNs
aXBwZWQoKSB8fCBoMy5zaG91bGRCZUNsaXBwZWQoKSB8fCBoNC5zaG91bGRCZUNsaXBwZWQoKTsK
KyAgICBpZiAoIXNvbWV0aGluZ0NsaXBwZWQpIHsKKyAgICAgICAgRmxvYXRRdWFkIG1hcHBlZFF1
YWQgPSBGbG9hdFF1YWQoaDEuY2FydGVzaWFuUG9pbnQyZCgpLCBoMi5jYXJ0ZXNpYW5Qb2ludDJk
KCksIGgzLmNhcnRlc2lhblBvaW50MmQoKSwgaDQuY2FydGVzaWFuUG9pbnQyZCgpKTsKKyAgICAg
ICAgcmV0dXJuIG1hcHBlZFF1YWQuYm91bmRpbmdCb3goKTsKKyAgICB9CisKKyAgICBib29sIGV2
ZXJ5dGhpbmdDbGlwcGVkID0gaDEuc2hvdWxkQmVDbGlwcGVkKCkgJiYgaDIuc2hvdWxkQmVDbGlw
cGVkKCkgJiYgaDMuc2hvdWxkQmVDbGlwcGVkKCkgJiYgaDQuc2hvdWxkQmVDbGlwcGVkKCk7Cisg
ICAgaWYgKGV2ZXJ5dGhpbmdDbGlwcGVkKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisK
ICAgICBmbG9hdCB4bWluID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOwogICAg
IGZsb2F0IHhtYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWluKCk7CiAgICAgZmxv
YXQgeW1pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKQEAgLTE2OSwxNiAr
MTgwLDEwIEBAIHN0YXRpYyBGbG9hdFJlY3QgY29tcHV0ZUVuY2xvc2luZ1JlY3RPZkNsaXBwZWRR
dWFkKGNvbnN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSYKICAgICByZXR1cm4gRmxvYXRSZWN0KEZs
b2F0UG9pbnQoeG1pbiwgeW1pbiksIEZsb2F0U2l6ZSh4bWF4IC0geG1pbiwgeW1heCAtIHltaW4p
KTsKIH0KIAotc3RhdGljIEZsb2F0UmVjdCBjb21wdXRlRW5jbG9zaW5nUmVjdChjb25zdCBIb21v
Z2VuZW91c0Nvb3JkaW5hdGUmIGgxLCBjb25zdCBIb21vZ2VuZW91c0Nvb3JkaW5hdGUmIGgyLCBj
b25zdCBIb21vZ2VuZW91c0Nvb3JkaW5hdGUmIGgzLCBjb25zdCBIb21vZ2VuZW91c0Nvb3JkaW5h
dGUmIGg0KQorc3RhdGljIGlubGluZSB2b2lkIGFkZFZlcnRleFRvQ2xpcHBlZFF1YWQoY29uc3Qg
RmxvYXRQb2ludCYgbmV3VmVydGV4LCBGbG9hdFBvaW50IGNsaXBwZWRRdWFkWzhdLCBpbnQmIG51
bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCkKIHsKLSAgICAvLyBJZiBubyB2ZXJ0aWNlcyBvbiB0aGUg
cXVhZCBhcmUgY2xpcHBlZCwgdGhlbiB3ZSBjYW4gc2ltcGx5IHJldHVybiB0aGUgZW5jbG9zaW5n
IHJlY3QgZGlyZWN0bHkuCi0gICAgYm9vbCBjbGlwcGVkID0gaDEuc2hvdWxkQmVDbGlwcGVkKCkg
fHwgaDIuc2hvdWxkQmVDbGlwcGVkKCkgfHwgaDMuc2hvdWxkQmVDbGlwcGVkKCkgfHwgaDQuc2hv
dWxkQmVDbGlwcGVkKCk7Ci0gICAgaWYgKCFjbGlwcGVkKSB7Ci0gICAgICAgIEZsb2F0UXVhZCBt
YXBwZWRRdWFkID0gRmxvYXRRdWFkKGgxLmNhcnRlc2lhblBvaW50MmQoKSwgaDIuY2FydGVzaWFu
UG9pbnQyZCgpLCBoMy5jYXJ0ZXNpYW5Qb2ludDJkKCksIGg0LmNhcnRlc2lhblBvaW50MmQoKSk7
Ci0gICAgICAgIHJldHVybiBtYXBwZWRRdWFkLmJvdW5kaW5nQm94KCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGNvbXB1dGVFbmNsb3NpbmdSZWN0T2ZDbGlwcGVkUXVhZChoMSwgaDIsIGgzLCBoNCk7
CisgICAgY2xpcHBlZFF1YWRbbnVtVmVydGljZXNJbkNsaXBwZWRRdWFkXSA9IG5ld1ZlcnRleDsK
KyAgICBudW1WZXJ0aWNlc0luQ2xpcHBlZFF1YWQrKzsKIH0KIAogSW50UmVjdCBDQ01hdGhVdGls
OjptYXBDbGlwcGVkUmVjdChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KQpAQCAtMjE2LDYgKzIyMSw2MCBAQCBGbG9hdFJlY3QgQ0NN
YXRoVXRpbDo6cHJvamVjdENsaXBwZWRSZWN0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sCiAgICAgcmV0dXJuIGNvbXB1dGVFbmNsb3NpbmdSZWN0KGgxLCBoMiwgaDMsIGg0
KTsKIH0KIAordm9pZCBDQ01hdGhVdGlsOjptYXBDbGlwcGVkUXVhZChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFF1YWQmIHNyY1F1YWQsIEZsb2F0UG9p
bnQgY2xpcHBlZFF1YWRbOF0sIGludCYgbnVtVmVydGljZXNJbkNsaXBwZWRRdWFkKQoreworICAg
IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMSA9IG1hcFBvaW50KHRyYW5zZm9ybSwgc3JjUXVhZC5w
MSgpKTsKKyAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDIgPSBtYXBQb2ludCh0cmFuc2Zvcm0s
IHNyY1F1YWQucDIoKSk7CisgICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGgzID0gbWFwUG9pbnQo
dHJhbnNmb3JtLCBzcmNRdWFkLnAzKCkpOworICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoNCA9
IG1hcFBvaW50KHRyYW5zZm9ybSwgc3JjUXVhZC5wNCgpKTsKKworICAgIC8vIFRoZSBvcmRlciBv
ZiBhZGRpbmcgdGhlIHZlcnRpY2VzIHRvIHRoZSBhcnJheSBpcyBjaG9zZW4gc28gdGhhdCBjbG9j
a3dpc2UgLyBjb3VudGVyLWNsb2Nrd2lzZSBvcmllbnRhdGlvbiBpcyByZXRhaW5lZC4KKworICAg
IG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCA9IDA7CisKKyAgICBpZiAoIWgxLnNob3VsZEJlQ2xp
cHBlZCgpKQorICAgICAgICBhZGRWZXJ0ZXhUb0NsaXBwZWRRdWFkKGgxLmNhcnRlc2lhblBvaW50
MmQoKSwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisKKyAgICBpZiAo
aDEuc2hvdWxkQmVDbGlwcGVkKCkgXiBoMi5zaG91bGRCZUNsaXBwZWQoKSkKKyAgICAgICAgYWRk
VmVydGV4VG9DbGlwcGVkUXVhZChjb21wdXRlQ2xpcHBlZFBvaW50Rm9yRWRnZShoMSwgaDIpLmNh
cnRlc2lhblBvaW50MmQoKSwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7
CisKKyAgICBpZiAoIWgyLnNob3VsZEJlQ2xpcHBlZCgpKQorICAgICAgICBhZGRWZXJ0ZXhUb0Ns
aXBwZWRRdWFkKGgyLmNhcnRlc2lhblBvaW50MmQoKSwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2Vz
SW5DbGlwcGVkUXVhZCk7CisKKyAgICBpZiAoaDIuc2hvdWxkQmVDbGlwcGVkKCkgXiBoMy5zaG91
bGRCZUNsaXBwZWQoKSkKKyAgICAgICAgYWRkVmVydGV4VG9DbGlwcGVkUXVhZChjb21wdXRlQ2xp
cHBlZFBvaW50Rm9yRWRnZShoMiwgaDMpLmNhcnRlc2lhblBvaW50MmQoKSwgY2xpcHBlZFF1YWQs
IG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisKKyAgICBpZiAoIWgzLnNob3VsZEJlQ2xpcHBl
ZCgpKQorICAgICAgICBhZGRWZXJ0ZXhUb0NsaXBwZWRRdWFkKGgzLmNhcnRlc2lhblBvaW50MmQo
KSwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisKKyAgICBpZiAoaDMu
c2hvdWxkQmVDbGlwcGVkKCkgXiBoNC5zaG91bGRCZUNsaXBwZWQoKSkKKyAgICAgICAgYWRkVmVy
dGV4VG9DbGlwcGVkUXVhZChjb21wdXRlQ2xpcHBlZFBvaW50Rm9yRWRnZShoMywgaDQpLmNhcnRl
c2lhblBvaW50MmQoKSwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisK
KyAgICBpZiAoIWg0LnNob3VsZEJlQ2xpcHBlZCgpKQorICAgICAgICBhZGRWZXJ0ZXhUb0NsaXBw
ZWRRdWFkKGg0LmNhcnRlc2lhblBvaW50MmQoKSwgY2xpcHBlZFF1YWQsIG51bVZlcnRpY2VzSW5D
bGlwcGVkUXVhZCk7CisKKyAgICBpZiAoaDQuc2hvdWxkQmVDbGlwcGVkKCkgXiBoMS5zaG91bGRC
ZUNsaXBwZWQoKSkKKyAgICAgICAgYWRkVmVydGV4VG9DbGlwcGVkUXVhZChjb21wdXRlQ2xpcHBl
ZFBvaW50Rm9yRWRnZShoNCwgaDEpLmNhcnRlc2lhblBvaW50MmQoKSwgY2xpcHBlZFF1YWQsIG51
bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCk7CisKKyAgICBBU1NFUlQobnVtVmVydGljZXNJbkNsaXBw
ZWRRdWFkIDw9IDgpOworfQorCitGbG9hdFJlY3QgQ0NNYXRoVXRpbDo6Y29tcHV0ZUVuY2xvc2lu
Z1JlY3RPZlZlcnRpY2VzKEZsb2F0UG9pbnQgdmVydGljZXNbXSwgaW50IG51bVZlcnRpY2VzKQor
eworICAgIGlmIChudW1WZXJ0aWNlcyA8IDIpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
KworICAgIGZsb2F0IHhtaW4gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7Cisg
ICAgZmxvYXQgeG1heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKTsKKyAgICBm
bG9hdCB5bWluID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOworICAgIGZsb2F0
IHltYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWluKCk7CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bVZlcnRpY2VzOyArK2kpCisgICAgICAgIGV4cGFuZEJvdW5kc1RvSW5j
bHVkZVBvaW50KHhtaW4sIHhtYXgsIHltaW4sIHltYXgsIHZlcnRpY2VzW2ldKTsKKworICAgIHJl
dHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludCh4bWluLCB5bWluKSwgRmxvYXRTaXplKHhtYXggLSB4
bWluLCB5bWF4IC0geW1pbikpOworfQorCiBGbG9hdFF1YWQgQ0NNYXRoVXRpbDo6bWFwUXVhZChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFF1YWQmIHEs
IGJvb2wmIGNsaXBwZWQpCiB7CiAgICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5T3JUcmFuc2xh
dGlvbigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ01hdGhVdGlsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ01hdGhVdGlsLmgKaW5kZXggZDlkMDM5ZTg2MDY3Nzc3N2JlMjc2MTFj
YzRlZjNjM2U4OTc3MzYyZS4uMzk4NjA0ZDlhNzQ1ZjAzNzgwNWQyNWFhMDQwY2M1OWMxZjI3MDk2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NNYXRoVXRpbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTWF0aFV0aWwuaApAQCAtMjgsNiArMjgsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBJbnRSZWN0OworY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UmVj
dDsKIGNsYXNzIEZsb2F0UXVhZDsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwpAQCAtNDks
OCArNTAsMTUgQEAgcHVibGljOgogICAgIHN0YXRpYyBGbG9hdFJlY3QgbWFwQ2xpcHBlZFJlY3Qo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICBzdGF0
aWMgRmxvYXRSZWN0IHByb2plY3RDbGlwcGVkUmVjdChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGNvbnN0IEZsb2F0UmVjdCYpOwogCi0gICAgLy8gTk9URTogVGhpcyBmdW5jdGlvbiBkb2Vz
IG5vdCBkbyBjb3JyZWN0IGNsaXBwaW5nIGFnYWluc3QgdyA9IDAgcGxhbmUsIGJ1dCBpdAotICAg
IC8vIGNvcnJlY3RseSBkZXRlY3RzIHRoZSBjbGlwcGVkIGNvbmRpdGlvbiB2aWEgdGhlIGJvb2xl
YW4gY2xpcHBlZC4KKyAgICAvLyBSZXR1cm5zIGFuIGFycmF5IG9mIHZlcnRpY2VzIHRoYXQgcmVw
cmVzZW50IHRoZSBjbGlwcGVkIHBvbHlnb24uIEFmdGVyIHJldHVybmluZywgaW5kZXhlcyBmcm9t
CisgICAgLy8gMCB0byBudW1WZXJ0aWNlc0luQ2xpcHBlZFF1YWQgYXJlIHZhbGlkIGluIHRoZSBj
bGlwcGVkUXVhZCBhcnJheS4gTm90ZSB0aGF0CisgICAgLy8gbnVtVmVydGljZXNJbkNsaXBwZWRR
dWFkIG1heSBiZSB6ZXJvLCB3aGljaCBtZWFucyB0aGUgZW50aXJlIHF1YWQgd2FzIGNsaXBwZWQs
IGFuZAorICAgIC8vIG5vbmUgb2YgdGhlIHZlcnRpY2VzIGluIHRoZSBhcnJheSBhcmUgdmFsaWQu
CisgICAgc3RhdGljIHZvaWQgbWFwQ2xpcHBlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBjb25zdCBGbG9hdFF1YWQmIHNyY1F1YWQsIEZsb2F0UG9pbnQgY2xpcHBlZFF1YWRbOF0s
IGludCYgbnVtVmVydGljZXNJbkNsaXBwZWRRdWFkKTsKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNv
bXB1dGVFbmNsb3NpbmdSZWN0T2ZWZXJ0aWNlcyhGbG9hdFBvaW50IHZlcnRpY2VzW10sIGludCBu
dW1WZXJ0aWNlcyk7CisKKyAgICAvLyBOT1RFOiBUaGVzZSBmdW5jdGlvbnMgZG8gbm90IGRvIGNv
cnJlY3QgY2xpcHBpbmcgYWdhaW5zdCB3ID0gMCBwbGFuZSwgYnV0IHRoZXkKKyAgICAvLyBjb3Jy
ZWN0bHkgZGV0ZWN0IHRoZSBjbGlwcGVkIGNvbmRpdGlvbiB2aWEgdGhlIGJvb2xlYW4gY2xpcHBl
ZC4KICAgICBzdGF0aWMgRmxvYXRRdWFkIG1hcFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBjb25zdCBGbG9hdFF1YWQmLCBib29sJiBjbGlwcGVkKTsKICAgICBzdGF0aWMgRmxvYXRR
dWFkIHByb2plY3RRdWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRR
dWFkJiwgYm9vbCYgY2xpcHBlZCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyU29ydGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJTb3J0ZXJUZXN0LmNwcAppbmRleCAwNTNhMzkzYjY0YjRlMTc1OTAzYjlm
YzkzN2RlMjY1ODk1NWMzYzQwLi42NWRiNTQ5YmFmODE0ZjBjZmYzNGUwNjg4YjM5YThjYTJkYTEy
ZDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJTb3J0
ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJTb3J0
ZXJUZXN0LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIu
aCIKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NNYXRoVXRp
bC5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgogCkBAIC0xNTUsNiArMTU2LDQ0IEBAIFRFU1QoQ0NMYXllclNvcnRlclRlc3Qs
IExheWVyc0F0QW5nbGVPdmVybGFwKQogICAgIEVYUEVDVF9FUShDQ0xheWVyU29ydGVyOjpOb25l
LCBvdmVybGFwUmVzdWx0KTsKIH0KIAorVEVTVChDQ0xheWVyU29ydGVyVGVzdCwgTGF5ZXJzVW5k
ZXJQYXRob2xvZ2ljYWxQZXJzcGVjdGl2ZVRyYW5zZm9ybSkKK3sKKyAgICBDQ0xheWVyU29ydGVy
OjpBQkNvbXBhcmVSZXN1bHQgb3ZlcmxhcFJlc3VsdDsKKyAgICBjb25zdCBmbG9hdCB6VGhyZXNo
b2xkID0gMC4xZjsKKyAgICBmbG9hdCB3ZWlnaHQgPSAwOworCisgICAgLy8gT24gcGVyc3BlY3Rp
dmUgcHJvamVjdGlvbiwgaWYgdyBiZWNvbWVzIG5lZ2F0aXZlLCB0aGUgcmUtcHJvamVjdGVkIHBv
aW50IHdpbGwgYmUKKyAgICAvLyBpbnZhbGlkIGFuZCB1bi11c2FibGUuIENvcnJlY3QgY29kZSBu
ZWVkcyB0byBjbGlwIGF3YXkgcG9ydGlvbnMgb2YgdGhlIGdlb21ldHJ5CisgICAgLy8gd2hlcmUg
dyA8IDAuIElmIHRoZSBjb2RlIHVzZXMgdGhlIGludmFsaWQgdmFsdWUsIGl0IHdpbGwgdGhpbmsg
dGhhdCBhIGxheWVyIGhhcworICAgIC8vIGRpZmZlcmVudCBib3VuZHMgdGhhbiBpdCByZWFsbHkg
ZG9lcywgd2hpY2ggY2FuIGNhdXNlIHRoaW5ncyB0byBzb3J0IGluY29ycmVjdGx5LgorCisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggcGVyc3BlY3RpdmVNYXRyaXg7CisgICAgcGVyc3BlY3RpdmVN
YXRyaXguYXBwbHlQZXJzcGVjdGl2ZSgxKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zZm9ybUE7CisgICAgdHJhbnNmb3JtQS50cmFuc2xhdGUzZCgtMTUsIDAsIC0yKTsKKyAgICBD
Q0xheWVyU29ydGVyOjpMYXllclNoYXBlIGxheWVyQSgxMCwgMTAsIHBlcnNwZWN0aXZlTWF0cml4
ICogdHJhbnNmb3JtQSk7CisKKyAgICAvLyBXaXRoIHRoaXMgc2VxdWVuY2Ugb2YgdHJhbnNmb3Jt
cywgd2hlbiBsYXllciBCIGlzIGNvcnJlY3RseSBjbGlwcGVkLCBpdCB3aWxsIGJlCisgICAgLy8g
dmlzaWJsZSBvbiB0aGUgbGVmdCBoYWxmIG9mIHRoZSBwcm9qZWN0aW9uIHBsYW5lLCBpbiBmcm9u
dCBvZiBsYXllckEuIFdoZW4gaXQgaXMKKyAgICAvLyBub3QgY2xpcHBlZCwgaXRzIGJvdW5kcyB3
aWxsIGFjdHVhbGx5IGluY29ycmVjdGx5IGFwcGVhciBtdWNoIHNtYWxsZXIgYW5kIHRoZQorICAg
IC8vIGNvcnJlY3Qgc29ydGluZyBkZXBlbmRlbmN5IHdpbGwgbm90IGJlIGZvdW5kLgorICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybUI7CisgICAgdHJhbnNmb3JtQi50cmFuc2xhdGUz
ZCgwLCAwLCAwLjcpOworICAgIHRyYW5zZm9ybUIucm90YXRlM2QoMCwgNDUsIDApOworICAgIEND
TGF5ZXJTb3J0ZXI6OkxheWVyU2hhcGUgbGF5ZXJCKDEwLCAxMCwgcGVyc3BlY3RpdmVNYXRyaXgg
KiB0cmFuc2Zvcm1CKTsKKworICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHRoZSB0ZXN0IGNhc2Ug
YWN0dWFsbHkgY292ZXJzIHRoZSBpbnRlbmRlZCBzY2VuYXJpbywgd2hlcmUgcGFydAorICAgIC8v
IG9mIGxheWVyIEIgZ28gYmVoaW5kIHRoZSB3ID0gMCBwbGFuZS4KKyAgICBGbG9hdFF1YWQgdGVz
dFF1YWQgPSBGbG9hdFF1YWQoRmxvYXRSZWN0KEZsb2F0UG9pbnQoLTAuNSwgLTAuNSksIEZsb2F0
U2l6ZSgxLCAxKSkpOworICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOworICAgIENDTWF0aFV0aWw6
Om1hcFF1YWQocGVyc3BlY3RpdmVNYXRyaXggKiB0cmFuc2Zvcm1CLCB0ZXN0UXVhZCwgY2xpcHBl
ZCk7CisgICAgQVNTRVJUX1RSVUUoY2xpcHBlZCk7CisKKyAgICBvdmVybGFwUmVzdWx0ID0gQ0NM
YXllclNvcnRlcjo6Y2hlY2tPdmVybGFwKCZsYXllckEsICZsYXllckIsIHpUaHJlc2hvbGQsIHdl
aWdodCk7CisgICAgRVhQRUNUX0VRKENDTGF5ZXJTb3J0ZXI6OkFCZWZvcmVCLCBvdmVybGFwUmVz
dWx0KTsKK30KKwogVEVTVChDQ0xheWVyU29ydGVyVGVzdCwgdmVyaWZ5RXhpc3RpbmdPcmRlcmlu
Z1ByZXNlcnZlZFdoZW5Ob1pEaWZmKQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0
aGlzU2NvcGVJc09uSW1wbFRocmVhZDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>