<?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>81057</bug_id>
          
          <creation_ts>2012-03-13 16:41:20 -0700</creation_ts>
          <short_desc>Fix rounding and usage of LayoutUnits in RenderBoxModelObject</short_desc>
          <delta_ts>2012-03-16 14:30:32 -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>
          
          <blocked>60318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>leviw</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>577987</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-03-13 16:41:20 -0700</bug_when>
    <thetext>LayoutUnits and ints are currently used interchangeably in RenderBoxModelObject, specifically in background and border image calculations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577995</commentid>
    <comment_count>1</comment_count>
      <attachid>131750</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-03-13 16:50:13 -0700</bug_when>
    <thetext>Created attachment 131750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578805</commentid>
    <comment_count>2</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-03-14 14:55:10 -0700</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579073</commentid>
    <comment_count>3</comment_count>
      <attachid>131750</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-14 20:30:23 -0700</bug_when>
    <thetext>Comment on attachment 131750
Patch

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

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1084
&gt; +    IntRect alignedRect = pixelSnappedIntRect(paintRect);

It should be named alignedPaintRect. Maybe even better: snappedPaintRect?

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1127
&gt; +            positioningAreaSize = IntSize(alignedRect.width() - left - right, alignedRect.height() - top - bottom);

Is it possible that we would want to snap after doing the subtractions as all the directions are LayoutUnits? Or is it better to be coherent with the width / height snapping above?

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1142
&gt; +        geometry.setPhaseX(geometry.tileSize().width() ? layoutMod(geometry.tileSize().width() - (xPosition + left), geometry.tileSize().width()) : zeroLayoutUnit);

BackgroundImageGeometry::setPhaseX takes an |int| not a LayoutUnit. AFAICT we want to keep the integer there as we are manipulating a replaced element. Is this really what we want to do here?

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1148
&gt; +        geometry.setPhaseY(geometry.tileSize().height() ? layoutMod(geometry.tileSize().height() - (yPosition + top), geometry.tileSize().height()) : zeroLayoutUnit);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579770</commentid>
    <comment_count>4</comment_count>
      <attachid>132126</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-03-15 14:57:50 -0700</bug_when>
    <thetext>Created attachment 132126
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579777</commentid>
    <comment_count>5</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-03-15 15:00:58 -0700</bug_when>
    <thetext>Thanks for your thorough review Julien!

(In reply to comment #3)
&gt; (From update of attachment 131750 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131750&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1084
&gt; &gt; +    IntRect alignedRect = pixelSnappedIntRect(paintRect);
&gt; 
&gt; It should be named alignedPaintRect. Maybe even better: snappedPaintRect?

Renamed to snappedPaintRect

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1127
&gt; &gt; +            positioningAreaSize = IntSize(alignedRect.width() - left - right, alignedRect.height() - top - bottom);
&gt; 
&gt; Is it possible that we would want to snap after doing the subtractions as all the directions are LayoutUnits? Or is it better to be coherent with the width / height snapping above?

Good idea, the padding values could have subpixel precision and would be floored otherwise. Changed to snap after subtracting the padding/border.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1142
&gt; &gt; +        geometry.setPhaseX(geometry.tileSize().width() ? layoutMod(geometry.tileSize().width() - (xPosition + left), geometry.tileSize().width()) : zeroLayoutUnit);
&gt; 
&gt; BackgroundImageGeometry::setPhaseX takes an |int| not a LayoutUnit. AFAICT we want to keep the integer there as we are manipulating a replaced element. Is this really what we want to do here?

Changed this to use integers throughout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579846</commentid>
    <comment_count>6</comment_count>
      <attachid>132126</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-15 16:06:06 -0700</bug_when>
    <thetext>Comment on attachment 132126
Patch

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

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1144
&gt; -        geometry.setPhaseX(geometry.tileSize().width() ? layoutMod(geometry.tileSize().width() - (xPosition + left), geometry.tileSize().width()) : LayoutUnit(0));
&gt; +        geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - (xPosition + left) % geometry.tileSize().width() : 0);

Those 2 lines are not equivalent due to % being of higher priority that -. It&apos;s sad that our tests are not catching that. Extra points if you can find a test to catch that regression.

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1150
&gt; +        geometry.setPhaseY(geometry.tileSize().height() ? geometry.tileSize().height() - (yPosition + top) % geometry.tileSize().height() : 0);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579916</commentid>
    <comment_count>7</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-03-15 17:03:07 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 132126 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132126&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1144
&gt; &gt; -        geometry.setPhaseX(geometry.tileSize().width() ? layoutMod(geometry.tileSize().width() - (xPosition + left), geometry.tileSize().width()) : LayoutUnit(0));
&gt; &gt; +        geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - (xPosition + left) % geometry.tileSize().width() : 0);
&gt; 
&gt; Those 2 lines are not equivalent due to % being of higher priority that -. It&apos;s sad that our tests are not catching that. Extra points if you can find a test to catch that regression.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1150
&gt; &gt; +        geometry.setPhaseY(geometry.tileSize().height() ? geometry.tileSize().height() - (yPosition + top) % geometry.tileSize().height() : 0);
&gt; 
&gt; Ditto.

Good catch but this actually restores the code to the exact same state as it was before we changed it to use LayoutUnits. Which means that this been broken for the last seven months (!).

http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp?rev=92529#L932</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579919</commentid>
    <comment_count>8</comment_count>
      <attachid>132126</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-15 17:04:27 -0700</bug_when>
    <thetext>Comment on attachment 132126
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1144
&gt;&gt;&gt; +        geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - (xPosition + left) % geometry.tileSize().width() : 0);
&gt;&gt; 
&gt;&gt; Those 2 lines are not equivalent due to % being of higher priority that -. It&apos;s sad that our tests are not catching that. Extra points if you can find a test to catch that regression.
&gt; 
&gt; Good catch but this actually restores the code to the exact same state as it was before we changed it to use LayoutUnits. Which means that this been broken for the last seven months (!).
&gt; 
&gt; http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp?rev=92529#L932

This seems difficult to believe...!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580159</commentid>
    <comment_count>9</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-03-15 22:52:04 -0700</bug_when>
    <thetext>Having looked into this in detail it turns out to be quite interesting, the way this is computed means that the two calculations will produce different numbers in cases where the background offset is larger than the size of the image. This isn&apos;t very common in the wild but is certainly valid.

However it turns out that this doesn&apos;t effect the visual representation at all as it will be off by the full width (or height) of the image, resulting in the same offset and thus the same rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580818</commentid>
    <comment_count>10</comment_count>
      <attachid>132126</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-16 12:47:20 -0700</bug_when>
    <thetext>Comment on attachment 132126
Patch

&gt; However it turns out that this doesn&apos;t effect the visual representation at all as it will be off by the full width (or height) of the image, resulting in the same offset and thus the same rendering.

OK... Could you file about a bug about this craziness / the fact that calculateBackgroundImageGeometry code should definitely be made less error-prone?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580891</commentid>
    <comment_count>11</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-03-16 13:35:11 -0700</bug_when>
    <thetext>Filed bug 81396 to track the calculateBackgroundImageGeometry crazies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580960</commentid>
    <comment_count>12</comment_count>
      <attachid>132126</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 14:30:26 -0700</bug_when>
    <thetext>Comment on attachment 132126
Patch

Clearing flags on attachment: 132126

Committed r111066: &lt;http://trac.webkit.org/changeset/111066&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580961</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 14:30:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131750</attachid>
            <date>2012-03-13 16:50:13 -0700</date>
            <delta_ts>2012-03-15 14:57:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81057-20120313165011.patch</filename>
            <type>text/plain</type>
            <size>10402</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDYzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTEzICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBGaXggcm91bmRpbmcgYW5kIHVz
YWdlIG9mIExheW91dFVuaXRzIGluIFJlbmRlckJveE1vZGVsT2JqZWN0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTA1NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBpeGVsU25hcHBlZE9mZnNldEhlaWdo
dCk6CisgICAgICAgIEZpeCBpbXBsZW1lbnRhdGlvbiBvZiBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0
aC9IZWlnaHQuIFRoZSBsb2NhdGlvbgorICAgICAgICBwYXJhbWV0ZXIgd2lsbCBiZSBpZ25vcmVk
IHVudGlsIHdlIGVuYWJsZSBzdWJwaXhlbCBzdXBwb3J0LgorICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAg
ICAgICAgVXNlIGludHMgZm9yIGJvcmRlciB3aWR0aHMuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6cmVzb2x2ZVdpZHRoRm9yUmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZUhl
aWdodEZvclJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVBZ2FpbnN0SW50cmluc2lj
V2lkdGhPckhlaWdodEFuZFJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVBZ2FpbnN0
SW50cmluc2ljUmF0aW8pOgorICAgICAgICBDaGFuZ2UgcmVzb2x2ZSpSYXRpbyBtZXRob2RzIHRv
IG9wZXJhdGUgb24gSW50U2l6ZXMgYXMgbm9uZSBvZiB0aGUKKyAgICAgICAgY2FsbGVycyBuZWVk
IHN1YnBpeGVsIHByZWNpc2lvbi4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnkpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWNlSW1hZ2UpOgor
CiAyMDEyLTAzLTEzICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gd3JvbmcgdHJhbnNmb3JtIGNhdXNpbmcgaW5jb3JyZWN0IGN1bGxp
bmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAkocmV2aXNpb24gMTEwNjEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQyLDEyICs1NDIs
MTIgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6b2Zmc2V0VAogCiBpbnQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gb2Zmc2V0V2lkdGgoKTsKKyAgICByZXR1cm4gc25hcFNpemVUb1BpeGVsKG9mZnNl
dFdpZHRoKCksIG9mZnNldExlZnQoKSk7CiB9CiAKIGludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gb2Zmc2V0SGVp
Z2h0KCk7CisgICAgcmV0dXJuIHNuYXBTaXplVG9QaXhlbChvZmZzZXRIZWlnaHQoKSwgb2Zmc2V0
VG9wKCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nVG9w
KFBhZGRpbmdPcHRpb25zKSBjb25zdApAQCAtNzMxLDggKzczMSw4IEBAIHZvaWQgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKICAgICAgICAgY29udGV4dC0+YWRkUm91bmRlZFJl
Y3RDbGlwKGJvcmRlcik7CiAgICAgfQogICAgIAotICAgIExheW91dFVuaXQgYkxlZnQgPSBpbmNs
dWRlTGVmdEVkZ2UgPyBib3JkZXJMZWZ0KCkgOiB6ZXJvTGF5b3V0VW5pdDsKLSAgICBMYXlvdXRV
bml0IGJSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBib3JkZXJSaWdodCgpIDogemVyb0xheW91
dFVuaXQ7CisgICAgaW50IGJMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gYm9yZGVyTGVmdCgpIDog
MDsKKyAgICBpbnQgYlJpZ2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/IGJvcmRlclJpZ2h0KCkgOiAw
OwogICAgIExheW91dFVuaXQgcExlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBwYWRkaW5nTGVmdCgp
IDogemVyb0xheW91dFVuaXQ7CiAgICAgTGF5b3V0VW5pdCBwUmlnaHQgPSBpbmNsdWRlUmlnaHRF
ZGdlID8gcGFkZGluZ1JpZ2h0KCkgOiB6ZXJvTGF5b3V0VW5pdDsKIApAQCAtODc5LDU1ICs4Nzks
NTMgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAgIH0KIH0K
IAotc3RhdGljIGlubGluZSBMYXlvdXRVbml0IHJlc29sdmVXaWR0aEZvclJhdGlvKExheW91dFVu
aXQgaGVpZ2h0LCBjb25zdCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKQorc3RhdGljIGlubGlu
ZSBpbnQgcmVzb2x2ZVdpZHRoRm9yUmF0aW8oaW50IGhlaWdodCwgY29uc3QgRmxvYXRTaXplJiBp
bnRyaW5zaWNSYXRpbykKIHsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHVubmVjZXNzYXJ5IHJvdW5k
aW5nIHdoZW4gbGF5b3V0IGlzIG9mZiBpbnRzOiB3ZWJraXQub3JnL2IvNjM2NTYKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2VpbGYoaGVpZ2h0ICogaW50cmluc2ljUmF0aW8u
d2lkdGgoKSAvIGludHJpbnNpY1JhdGlvLmhlaWdodCgpKSk7CisgICAgcmV0dXJuIGNlaWxmKGhl
aWdodCAqIGludHJpbnNpY1JhdGlvLndpZHRoKCkgLyBpbnRyaW5zaWNSYXRpby5oZWlnaHQoKSk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCByZXNvbHZlSGVpZ2h0Rm9yUmF0aW8oTGF5
b3V0VW5pdCB3aWR0aCwgY29uc3QgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbykKK3N0YXRpYyBp
bmxpbmUgaW50IHJlc29sdmVIZWlnaHRGb3JSYXRpbyhpbnQgd2lkdGgsIGNvbnN0IEZsb2F0U2l6
ZSYgaW50cmluc2ljUmF0aW8pCiB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB1bm5lY2Vzc2FyeSBy
b3VuZGluZyB3aGVuIGxheW91dCBpcyBvZmYgaW50czogd2Via2l0Lm9yZy9iLzYzNjU2Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGNlaWxmKHdpZHRoICogaW50cmluc2ljUmF0
aW8uaGVpZ2h0KCkgLyBpbnRyaW5zaWNSYXRpby53aWR0aCgpKSk7CisgICAgcmV0dXJuIGNlaWxm
KHdpZHRoICogaW50cmluc2ljUmF0aW8uaGVpZ2h0KCkgLyBpbnRyaW5zaWNSYXRpby53aWR0aCgp
KTsKIH0KIAotc3RhdGljIGlubGluZSBMYXlvdXRTaXplIHJlc29sdmVBZ2FpbnN0SW50cmluc2lj
V2lkdGhPckhlaWdodEFuZFJhdGlvKGNvbnN0IExheW91dFNpemUmIHNpemUsIGNvbnN0IEZsb2F0
U2l6ZSYgaW50cmluc2ljUmF0aW8sIExheW91dFVuaXQgdXNlV2lkdGgsIExheW91dFVuaXQgdXNl
SGVpZ2h0KQorc3RhdGljIGlubGluZSBJbnRTaXplIHJlc29sdmVBZ2FpbnN0SW50cmluc2ljV2lk
dGhPckhlaWdodEFuZFJhdGlvKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEZsb2F0U2l6ZSYg
aW50cmluc2ljUmF0aW8sIGludCB1c2VXaWR0aCwgaW50IHVzZUhlaWdodCkKIHsKICAgICBpZiAo
aW50cmluc2ljUmF0aW8uaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICh1c2VXaWR0aCkKLSAgICAg
ICAgICAgIHJldHVybiBMYXlvdXRTaXplKHVzZVdpZHRoLCBzaXplLmhlaWdodCgpKTsKLSAgICAg
ICAgcmV0dXJuIExheW91dFNpemUoc2l6ZS53aWR0aCgpLCB1c2VIZWlnaHQpOworICAgICAgICAg
ICAgcmV0dXJuIEludFNpemUodXNlV2lkdGgsIHNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1
cm4gSW50U2l6ZShzaXplLndpZHRoKCksIHVzZUhlaWdodCk7CiAgICAgfQogCiAgICAgaWYgKHVz
ZVdpZHRoKQotICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZSh1c2VXaWR0aCwgcmVzb2x2ZUhlaWdo
dEZvclJhdGlvKHVzZVdpZHRoLCBpbnRyaW5zaWNSYXRpbykpOwotICAgIHJldHVybiBMYXlvdXRT
aXplKHJlc29sdmVXaWR0aEZvclJhdGlvKHVzZUhlaWdodCwgaW50cmluc2ljUmF0aW8pLCB1c2VI
ZWlnaHQpOworICAgICAgICByZXR1cm4gSW50U2l6ZSh1c2VXaWR0aCwgcmVzb2x2ZUhlaWdodEZv
clJhdGlvKHVzZVdpZHRoLCBpbnRyaW5zaWNSYXRpbykpOworICAgIHJldHVybiBJbnRTaXplKHJl
c29sdmVXaWR0aEZvclJhdGlvKHVzZUhlaWdodCwgaW50cmluc2ljUmF0aW8pLCB1c2VIZWlnaHQp
OwogfQogCi1zdGF0aWMgaW5saW5lIExheW91dFNpemUgcmVzb2x2ZUFnYWluc3RJbnRyaW5zaWNS
YXRpbyhjb25zdCBMYXlvdXRTaXplJiBzaXplLCBjb25zdCBGbG9hdFNpemUmIGludHJpbnNpY1Jh
dGlvKQorc3RhdGljIGlubGluZSBJbnRTaXplIHJlc29sdmVBZ2FpbnN0SW50cmluc2ljUmF0aW8o
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbykKIHsK
ICAgICAvLyBUd28gcG9zc2libGUgc29sdXRpb25zOiAoc2l6ZS53aWR0aCgpLCBzb2x1dGlvbkhl
aWdodCkgb3IgKHNvbHV0aW9uV2lkdGgsIHNpemUuaGVpZ2h0KCkpCiAgICAgLy8gIi4uLiBtdXN0
IGJlIGFzc3VtZWQgdG8gYmUgdGhlIGxhcmdlc3QgZGltZW5zaW9ucy4uLiIgPSBlYXNpZXN0IGFu
c3dlcjogdGhlIHJlY3Qgd2l0aCB0aGUgbGFyZ2VzdCBzdXJmYWNlIGFyZWEuCiAKLSAgICBMYXlv
dXRVbml0IHNvbHV0aW9uV2lkdGggPSByZXNvbHZlV2lkdGhGb3JSYXRpbyhzaXplLmhlaWdodCgp
LCBpbnRyaW5zaWNSYXRpbyk7Ci0gICAgTGF5b3V0VW5pdCBzb2x1dGlvbkhlaWdodCA9IHJlc29s
dmVIZWlnaHRGb3JSYXRpbyhzaXplLndpZHRoKCksIGludHJpbnNpY1JhdGlvKTsKKyAgICBpbnQg
c29sdXRpb25XaWR0aCA9IHJlc29sdmVXaWR0aEZvclJhdGlvKHNpemUuaGVpZ2h0KCksIGludHJp
bnNpY1JhdGlvKTsKKyAgICBpbnQgc29sdXRpb25IZWlnaHQgPSByZXNvbHZlSGVpZ2h0Rm9yUmF0
aW8oc2l6ZS53aWR0aCgpLCBpbnRyaW5zaWNSYXRpbyk7CiAgICAgaWYgKHNvbHV0aW9uV2lkdGgg
PD0gc2l6ZS53aWR0aCgpKSB7CiAgICAgICAgIGlmIChzb2x1dGlvbkhlaWdodCA8PSBzaXplLmhl
aWdodCgpKSB7CiAgICAgICAgICAgICAvLyBJZiBib3RoIHNvbHV0aW9ucyBmaXQsIGNob29zZSB0
aGUgb25lIGNvdmVyaW5nIHRoZSBsYXJnZXIgYXJlYS4KLSAgICAgICAgICAgIExheW91dFVuaXQg
YXJlYU9uZSA9IHNvbHV0aW9uV2lkdGggKiBzaXplLmhlaWdodCgpOwotICAgICAgICAgICAgTGF5
b3V0VW5pdCBhcmVhVHdvID0gc2l6ZS53aWR0aCgpICogc29sdXRpb25IZWlnaHQ7CisgICAgICAg
ICAgICBpbnQgYXJlYU9uZSA9IHNvbHV0aW9uV2lkdGggKiBzaXplLmhlaWdodCgpOworICAgICAg
ICAgICAgaW50IGFyZWFUd28gPSBzaXplLndpZHRoKCkgKiBzb2x1dGlvbkhlaWdodDsKICAgICAg
ICAgICAgIGlmIChhcmVhT25lIDwgYXJlYVR3bykKLSAgICAgICAgICAgICAgICByZXR1cm4gTGF5
b3V0U2l6ZShzaXplLndpZHRoKCksIHNvbHV0aW9uSGVpZ2h0KTsKLSAgICAgICAgICAgIHJldHVy
biBMYXlvdXRTaXplKHNvbHV0aW9uV2lkdGgsIHNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBJbnRTaXplKHNpemUud2lkdGgoKSwgc29sdXRpb25IZWlnaHQpOworICAgICAg
ICAgICAgcmV0dXJuIEludFNpemUoc29sdXRpb25XaWR0aCwgc2l6ZS5oZWlnaHQoKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBPbmx5IHRoZSBmaXJzdCBzb2x1dGlvbiBmaXRzLgotICAgICAg
ICByZXR1cm4gTGF5b3V0U2l6ZShzb2x1dGlvbldpZHRoLCBzaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoc29sdXRpb25XaWR0aCwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgfQog
CiAgICAgLy8gT25seSB0aGUgc2Vjb25kIHNvbHV0aW9uIGZpdHMsIGFzc2VydCB0aGF0LgogICAg
IEFTU0VSVChzb2x1dGlvbkhlaWdodCA8PSBzaXplLmhlaWdodCgpKTsKLSAgICByZXR1cm4gTGF5
b3V0U2l6ZShzaXplLndpZHRoKCksIHNvbHV0aW9uSGVpZ2h0KTsKKyAgICByZXR1cm4gSW50U2l6
ZShzaXplLndpZHRoKCksIHNvbHV0aW9uSGVpZ2h0KTsKIH0KIAogSW50U2l6ZSBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6Y2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKFN0eWxlSW1hZ2Uq
IGltYWdlLCBjb25zdCBJbnRTaXplJiBwb3NpdGlvbmluZ0FyZWFTaXplKSBjb25zdApAQCAtMTA4
Myw2ICsxMDgxLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFjawog
ICAgIExheW91dFVuaXQgbGVmdCA9IDA7CiAgICAgTGF5b3V0VW5pdCB0b3AgPSAwOwogICAgIElu
dFNpemUgcG9zaXRpb25pbmdBcmVhU2l6ZTsKKyAgICBJbnRSZWN0IGFsaWduZWRSZWN0ID0gcGl4
ZWxTbmFwcGVkSW50UmVjdChwYWludFJlY3QpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBiYWNr
Z3JvdW5kIHBvc2l0aW9uaW5nIGFyZWEgYW5kIHNldCBkZXN0UmVjdCB0byB0aGUgYmFja2dyb3Vu
ZCBwYWludGluZyBhcmVhLgogICAgIC8vIGRlc3RSZWN0IHdpbGwgYmUgYWRqdXN0ZWQgbGF0ZXIg
aWYgdGhlIGJhY2tncm91bmQgaXMgbm9uLXJlcGVhdGluZy4KQEAgLTEwOTksNyArMTA5OCw3IEBA
IHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUJhY2sKICNlbmRpZgogCiAgICAg
aWYgKCFmaXhlZEF0dGFjaG1lbnQpIHsKLSAgICAgICAgZ2VvbWV0cnkuc2V0RGVzdFJlY3QocGFp
bnRSZWN0KTsKKyAgICAgICAgZ2VvbWV0cnkuc2V0RGVzdFJlY3QoYWxpZ25lZFJlY3QpOwogCiAg
ICAgICAgIExheW91dFVuaXQgcmlnaHQgPSAwOwogICAgICAgICBMYXlvdXRVbml0IGJvdHRvbSA9
IDA7CkBAIC0xMTIxLDExICsxMTIwLDExIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNh
bGN1bGF0ZUJhY2sKICAgICAgICAgLy8gaXRzIG1hcmdpbnMuIFNpbmNlIHRob3NlIHdlcmUgYWRk
ZWQgaW4gYWxyZWFkeSwgd2UgaGF2ZSB0byBmYWN0b3IgdGhlbSBvdXQgd2hlbiBjb21wdXRpbmcK
ICAgICAgICAgLy8gdGhlIGJhY2tncm91bmQgcG9zaXRpb25pbmcgYXJlYS4KICAgICAgICAgaWYg
KGlzUm9vdCgpKSB7Ci0gICAgICAgICAgICBwb3NpdGlvbmluZ0FyZWFTaXplID0gTGF5b3V0U2l6
ZSh0b1JlbmRlckJveCh0aGlzKS0+d2lkdGgoKSAtIGxlZnQgLSByaWdodCwgdG9SZW5kZXJCb3go
dGhpcyktPmhlaWdodCgpIC0gdG9wIC0gYm90dG9tKTsKKyAgICAgICAgICAgIHBvc2l0aW9uaW5n
QXJlYVNpemUgPSBJbnRTaXplKHRvUmVuZGVyQm94KHRoaXMpLT5waXhlbFNuYXBwZWRXaWR0aCgp
IC0gbGVmdCAtIHJpZ2h0LCB0b1JlbmRlckJveCh0aGlzKS0+cGl4ZWxTbmFwcGVkSGVpZ2h0KCkg
LSB0b3AgLSBib3R0b20pOwogICAgICAgICAgICAgbGVmdCArPSBtYXJnaW5MZWZ0KCk7CiAgICAg
ICAgICAgICB0b3AgKz0gbWFyZ2luVG9wKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
cG9zaXRpb25pbmdBcmVhU2l6ZSA9IExheW91dFNpemUocGFpbnRSZWN0LndpZHRoKCkgLSBsZWZ0
IC0gcmlnaHQsIHBhaW50UmVjdC5oZWlnaHQoKSAtIHRvcCAtIGJvdHRvbSk7CisgICAgICAgICAg
ICBwb3NpdGlvbmluZ0FyZWFTaXplID0gSW50U2l6ZShhbGlnbmVkUmVjdC53aWR0aCgpIC0gbGVm
dCAtIHJpZ2h0LCBhbGlnbmVkUmVjdC5oZWlnaHQoKSAtIHRvcCAtIGJvdHRvbSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgZ2VvbWV0cnkuc2V0RGVzdFJlY3QocGl4ZWxTbmFwcGVkSW50UmVjdCh2
aWV3UmVjdCgpKSk7CiAgICAgICAgIHBvc2l0aW9uaW5nQXJlYVNpemUgPSBnZW9tZXRyeS5kZXN0
UmVjdCgpLnNpemUoKTsKQEAgLTExNDAsMjAgKzExMzksMjAgQEAgdm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6Y2FsY3VsYXRlQmFjawogCiAgICAgTGF5b3V0VW5pdCB4UG9zaXRpb24gPSBmaWxs
TGF5ZXItPnhQb3NpdGlvbigpLmNhbGNNaW5WYWx1ZShwb3NpdGlvbmluZ0FyZWFTaXplLndpZHRo
KCkgLSBnZW9tZXRyeS50aWxlU2l6ZSgpLndpZHRoKCksIHRydWUpOwogICAgIGlmIChiYWNrZ3Jv
dW5kUmVwZWF0WCA9PSBSZXBlYXRGaWxsKQotICAgICAgICBnZW9tZXRyeS5zZXRQaGFzZVgoZ2Vv
bWV0cnkudGlsZVNpemUoKS53aWR0aCgpID8gbGF5b3V0TW9kKGdlb21ldHJ5LnRpbGVTaXplKCku
d2lkdGgoKSAtICh4UG9zaXRpb24gKyBsZWZ0KSwgZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgp
KSA6IExheW91dFVuaXQoMCkpOworICAgICAgICBnZW9tZXRyeS5zZXRQaGFzZVgoZ2VvbWV0cnku
dGlsZVNpemUoKS53aWR0aCgpID8gbGF5b3V0TW9kKGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgo
KSAtICh4UG9zaXRpb24gKyBsZWZ0KSwgZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpKSA6IHpl
cm9MYXlvdXRVbml0KTsKICAgICBlbHNlCiAgICAgICAgIGdlb21ldHJ5LnNldE5vUmVwZWF0WCh4
UG9zaXRpb24gKyBsZWZ0KTsKIAogICAgIExheW91dFVuaXQgeVBvc2l0aW9uID0gZmlsbExheWVy
LT55UG9zaXRpb24oKS5jYWxjTWluVmFsdWUocG9zaXRpb25pbmdBcmVhU2l6ZS5oZWlnaHQoKSAt
IGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCksIHRydWUpOwogICAgIGlmIChiYWNrZ3JvdW5k
UmVwZWF0WSA9PSBSZXBlYXRGaWxsKQotICAgICAgICBnZW9tZXRyeS5zZXRQaGFzZVkoZ2VvbWV0
cnkudGlsZVNpemUoKS5oZWlnaHQoKSA/IGxheW91dE1vZChnZW9tZXRyeS50aWxlU2l6ZSgpLmhl
aWdodCgpIC0gKHlQb3NpdGlvbiArIHRvcCksIGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCkp
IDogTGF5b3V0VW5pdCgwKSk7CisgICAgICAgIGdlb21ldHJ5LnNldFBoYXNlWShnZW9tZXRyeS50
aWxlU2l6ZSgpLmhlaWdodCgpID8gbGF5b3V0TW9kKGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0
KCkgLSAoeVBvc2l0aW9uICsgdG9wKSwgZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSkgOiB6
ZXJvTGF5b3V0VW5pdCk7CiAgICAgZWxzZSAKICAgICAgICAgZ2VvbWV0cnkuc2V0Tm9SZXBlYXRZ
KHlQb3NpdGlvbiArIHRvcCk7CiAKICAgICBpZiAoZml4ZWRBdHRhY2htZW50KQotICAgICAgICBn
ZW9tZXRyeS51c2VGaXhlZEF0dGFjaG1lbnQocGFpbnRSZWN0LmxvY2F0aW9uKCkpOworICAgICAg
ICBnZW9tZXRyeS51c2VGaXhlZEF0dGFjaG1lbnQoYWxpZ25lZFJlY3QubG9jYXRpb24oKSk7CiAK
LSAgICBnZW9tZXRyeS5jbGlwKHBhaW50UmVjdCk7CisgICAgZ2VvbWV0cnkuY2xpcChhbGlnbmVk
UmVjdCk7CiAgICAgZ2VvbWV0cnkuc2V0RGVzdE9yaWdpbihnZW9tZXRyeS5kZXN0UmVjdCgpLmxv
Y2F0aW9uKCkpOwogfQogCkBAIC0xMTkxLDcgKzExOTAsNyBAQCBib29sIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludE5pbmVQaWVjCiAgICAgTGF5b3V0VW5pdCBib3R0b21XaXRoT3V0c2V0ID0g
cmVjdC5tYXhZKCkgKyBib3R0b21PdXRzZXQ7CiAgICAgTGF5b3V0VW5pdCBsZWZ0V2l0aE91dHNl
dCA9IHJlY3QueCgpIC0gbGVmdE91dHNldDsKICAgICBMYXlvdXRVbml0IHJpZ2h0V2l0aE91dHNl
dCA9IHJlY3QubWF4WCgpICsgcmlnaHRPdXRzZXQ7Ci0gICAgTGF5b3V0UmVjdCBib3JkZXJJbWFn
ZVJlY3QgPSBMYXlvdXRSZWN0KGxlZnRXaXRoT3V0c2V0LCB0b3BXaXRoT3V0c2V0LCByaWdodFdp
dGhPdXRzZXQgLSBsZWZ0V2l0aE91dHNldCwgYm90dG9tV2l0aE91dHNldCAtIHRvcFdpdGhPdXRz
ZXQpOworICAgIEludFJlY3QgYm9yZGVySW1hZ2VSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChs
ZWZ0V2l0aE91dHNldCwgdG9wV2l0aE91dHNldCwgcmlnaHRXaXRoT3V0c2V0IC0gbGVmdFdpdGhP
dXRzZXQsIGJvdHRvbVdpdGhPdXRzZXQgLSB0b3BXaXRoT3V0c2V0KTsKIAogICAgIEludFNpemUg
aW1hZ2VTaXplID0gY2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKHN0eWxlSW1hZ2Us
IGJvcmRlckltYWdlUmVjdC5zaXplKCkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132126</attachid>
            <date>2012-03-15 14:57:50 -0700</date>
            <delta_ts>2012-03-16 14:30:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81057-20120315145749.patch</filename>
            <type>text/plain</type>
            <size>10663</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDg4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAzLTE1ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBGaXggcm91bmRpbmcgYW5kIHVz
YWdlIG9mIExheW91dFVuaXRzIGluIFJlbmRlckJveE1vZGVsT2JqZWN0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTA1NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwaXhlbFNuYXBwZWRP
ZmZzZXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGl4
ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KToKKyAgICAgICAgRml4IGltcGxlbWVudGF0aW9uIG9mIHBp
eGVsU25hcHBlZE9mZnNldFdpZHRoL0hlaWdodC4gVGhlIGxvY2F0aW9uCisgICAgICAgIHBhcmFt
ZXRlciB3aWxsIGJlIGlnbm9yZWQgdW50aWwgd2UgZW5hYmxlIHN1YnBpeGVsIHN1cHBvcnQuCisK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4
dGVuZGVkKToKKyAgICAgICAgVXNlIGludHMgZm9yIGJvcmRlciB3aWR0aHMuCisgICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVdpZHRoRm9yUmF0aW8pOgorICAgICAgICAoV2ViQ29y
ZTo6cmVzb2x2ZUhlaWdodEZvclJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVBZ2Fp
bnN0SW50cmluc2ljV2lkdGhPckhlaWdodEFuZFJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
c29sdmVBZ2FpbnN0SW50cmluc2ljUmF0aW8pOgorICAgICAgICBDaGFuZ2UgcmVzb2x2ZSpSYXRp
byBtZXRob2RzIHRvIG9wZXJhdGUgb24gSW50U2l6ZXMgYXMgbm9uZSBvZiB0aGUKKyAgICAgICAg
Y2FsbGVycyBuZWVkIHN1YnBpeGVsIHByZWNpc2lvbi4KKworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjZUltYWdl
KToKKyAgICAgICAgUGl4ZWwgc25hcCBwYWludFJlY3Qgd2hlbiBjb21wdXRpbmcgaW1hZ2UgZ2Vv
bWV0cnkuCisKIDIwMTItMDMtMTUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgog
CiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTAzNjkwMD4gYW5kIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTA3OQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMTA4NzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NDIsMTIgKzU0MiwxMiBAQCBMYXlvdXRVbml0IFJlbmRlckJveE1vZGVs
T2JqZWN0OjpvZmZzZXRUCiAKIGludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGl4ZWxTbmFwcGVk
T2Zmc2V0V2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBvZmZzZXRXaWR0aCgpOworICAgIHJl
dHVybiBzbmFwU2l6ZVRvUGl4ZWwob2Zmc2V0V2lkdGgoKSwgb2Zmc2V0TGVmdCgpKTsKIH0KIAog
aW50IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwaXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSBjb25z
dAogewotICAgIHJldHVybiBvZmZzZXRIZWlnaHQoKTsKKyAgICByZXR1cm4gc25hcFNpemVUb1Bp
eGVsKG9mZnNldEhlaWdodCgpLCBvZmZzZXRUb3AoKSk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhZGRpbmdUb3AoUGFkZGluZ09wdGlvbnMpIGNvbnN0CkBAIC03MzEs
OCArNzMxLDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAg
ICAgICBjb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyKTsKICAgICB9CiAgICAgCi0g
ICAgTGF5b3V0VW5pdCBiTGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IGJvcmRlckxlZnQoKSA6IHpl
cm9MYXlvdXRVbml0OwotICAgIExheW91dFVuaXQgYlJpZ2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/
IGJvcmRlclJpZ2h0KCkgOiB6ZXJvTGF5b3V0VW5pdDsKKyAgICBpbnQgYkxlZnQgPSBpbmNsdWRl
TGVmdEVkZ2UgPyBib3JkZXJMZWZ0KCkgOiAwOworICAgIGludCBiUmlnaHQgPSBpbmNsdWRlUmln
aHRFZGdlID8gYm9yZGVyUmlnaHQoKSA6IDA7CiAgICAgTGF5b3V0VW5pdCBwTGVmdCA9IGluY2x1
ZGVMZWZ0RWRnZSA/IHBhZGRpbmdMZWZ0KCkgOiB6ZXJvTGF5b3V0VW5pdDsKICAgICBMYXlvdXRV
bml0IHBSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBwYWRkaW5nUmlnaHQoKSA6IHplcm9MYXlv
dXRVbml0OwogCkBAIC04NzksNTUgKzg3OSw1MyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEZpbGxMYXllCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIExheW91dFVuaXQgcmVz
b2x2ZVdpZHRoRm9yUmF0aW8oTGF5b3V0VW5pdCBoZWlnaHQsIGNvbnN0IEZsb2F0U2l6ZSYgaW50
cmluc2ljUmF0aW8pCitzdGF0aWMgaW5saW5lIGludCByZXNvbHZlV2lkdGhGb3JSYXRpbyhpbnQg
aGVpZ2h0LCBjb25zdCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKQogewotICAgIC8vIEZJWE1F
OiBSZW1vdmUgdW5uZWNlc3Nhcnkgcm91bmRpbmcgd2hlbiBsYXlvdXQgaXMgb2ZmIGludHM6IHdl
YmtpdC5vcmcvYi82MzY1NgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihjZWls
ZihoZWlnaHQgKiBpbnRyaW5zaWNSYXRpby53aWR0aCgpIC8gaW50cmluc2ljUmF0aW8uaGVpZ2h0
KCkpKTsKKyAgICByZXR1cm4gY2VpbGYoaGVpZ2h0ICogaW50cmluc2ljUmF0aW8ud2lkdGgoKSAv
IGludHJpbnNpY1JhdGlvLmhlaWdodCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBMYXlvdXRVbml0
IHJlc29sdmVIZWlnaHRGb3JSYXRpbyhMYXlvdXRVbml0IHdpZHRoLCBjb25zdCBGbG9hdFNpemUm
IGludHJpbnNpY1JhdGlvKQorc3RhdGljIGlubGluZSBpbnQgcmVzb2x2ZUhlaWdodEZvclJhdGlv
KGludCB3aWR0aCwgY29uc3QgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbykKIHsKLSAgICAvLyBG
SVhNRTogUmVtb3ZlIHVubmVjZXNzYXJ5IHJvdW5kaW5nIHdoZW4gbGF5b3V0IGlzIG9mZiBpbnRz
OiB3ZWJraXQub3JnL2IvNjM2NTYKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4o
Y2VpbGYod2lkdGggKiBpbnRyaW5zaWNSYXRpby5oZWlnaHQoKSAvIGludHJpbnNpY1JhdGlvLndp
ZHRoKCkpKTsKKyAgICByZXR1cm4gY2VpbGYod2lkdGggKiBpbnRyaW5zaWNSYXRpby5oZWlnaHQo
KSAvIGludHJpbnNpY1JhdGlvLndpZHRoKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIExheW91dFNp
emUgcmVzb2x2ZUFnYWluc3RJbnRyaW5zaWNXaWR0aE9ySGVpZ2h0QW5kUmF0aW8oY29uc3QgTGF5
b3V0U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbywgTGF5b3V0VW5p
dCB1c2VXaWR0aCwgTGF5b3V0VW5pdCB1c2VIZWlnaHQpCitzdGF0aWMgaW5saW5lIEludFNpemUg
cmVzb2x2ZUFnYWluc3RJbnRyaW5zaWNXaWR0aE9ySGVpZ2h0QW5kUmF0aW8oY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uc3QgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbywgaW50IHVzZVdpZHRoLCBp
bnQgdXNlSGVpZ2h0KQogewogICAgIGlmIChpbnRyaW5zaWNSYXRpby5pc0VtcHR5KCkpIHsKICAg
ICAgICAgaWYgKHVzZVdpZHRoKQotICAgICAgICAgICAgcmV0dXJuIExheW91dFNpemUodXNlV2lk
dGgsIHNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZShzaXplLndpZHRo
KCksIHVzZUhlaWdodCk7CisgICAgICAgICAgICByZXR1cm4gSW50U2l6ZSh1c2VXaWR0aCwgc2l6
ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBJbnRTaXplKHNpemUud2lkdGgoKSwgdXNlSGVp
Z2h0KTsKICAgICB9CiAKICAgICBpZiAodXNlV2lkdGgpCi0gICAgICAgIHJldHVybiBMYXlvdXRT
aXplKHVzZVdpZHRoLCByZXNvbHZlSGVpZ2h0Rm9yUmF0aW8odXNlV2lkdGgsIGludHJpbnNpY1Jh
dGlvKSk7Ci0gICAgcmV0dXJuIExheW91dFNpemUocmVzb2x2ZVdpZHRoRm9yUmF0aW8odXNlSGVp
Z2h0LCBpbnRyaW5zaWNSYXRpbyksIHVzZUhlaWdodCk7CisgICAgICAgIHJldHVybiBJbnRTaXpl
KHVzZVdpZHRoLCByZXNvbHZlSGVpZ2h0Rm9yUmF0aW8odXNlV2lkdGgsIGludHJpbnNpY1JhdGlv
KSk7CisgICAgcmV0dXJuIEludFNpemUocmVzb2x2ZVdpZHRoRm9yUmF0aW8odXNlSGVpZ2h0LCBp
bnRyaW5zaWNSYXRpbyksIHVzZUhlaWdodCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0U2l6
ZSByZXNvbHZlQWdhaW5zdEludHJpbnNpY1JhdGlvKGNvbnN0IExheW91dFNpemUmIHNpemUsIGNv
bnN0IEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pCitzdGF0aWMgaW5saW5lIEludFNpemUgcmVz
b2x2ZUFnYWluc3RJbnRyaW5zaWNSYXRpbyhjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBGbG9h
dFNpemUmIGludHJpbnNpY1JhdGlvKQogewogICAgIC8vIFR3byBwb3NzaWJsZSBzb2x1dGlvbnM6
IChzaXplLndpZHRoKCksIHNvbHV0aW9uSGVpZ2h0KSBvciAoc29sdXRpb25XaWR0aCwgc2l6ZS5o
ZWlnaHQoKSkKICAgICAvLyAiLi4uIG11c3QgYmUgYXNzdW1lZCB0byBiZSB0aGUgbGFyZ2VzdCBk
aW1lbnNpb25zLi4uIiA9IGVhc2llc3QgYW5zd2VyOiB0aGUgcmVjdCB3aXRoIHRoZSBsYXJnZXN0
IHN1cmZhY2UgYXJlYS4KIAotICAgIExheW91dFVuaXQgc29sdXRpb25XaWR0aCA9IHJlc29sdmVX
aWR0aEZvclJhdGlvKHNpemUuaGVpZ2h0KCksIGludHJpbnNpY1JhdGlvKTsKLSAgICBMYXlvdXRV
bml0IHNvbHV0aW9uSGVpZ2h0ID0gcmVzb2x2ZUhlaWdodEZvclJhdGlvKHNpemUud2lkdGgoKSwg
aW50cmluc2ljUmF0aW8pOworICAgIGludCBzb2x1dGlvbldpZHRoID0gcmVzb2x2ZVdpZHRoRm9y
UmF0aW8oc2l6ZS5oZWlnaHQoKSwgaW50cmluc2ljUmF0aW8pOworICAgIGludCBzb2x1dGlvbkhl
aWdodCA9IHJlc29sdmVIZWlnaHRGb3JSYXRpbyhzaXplLndpZHRoKCksIGludHJpbnNpY1JhdGlv
KTsKICAgICBpZiAoc29sdXRpb25XaWR0aCA8PSBzaXplLndpZHRoKCkpIHsKICAgICAgICAgaWYg
KHNvbHV0aW9uSGVpZ2h0IDw9IHNpemUuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIC8vIElmIGJv
dGggc29sdXRpb25zIGZpdCwgY2hvb3NlIHRoZSBvbmUgY292ZXJpbmcgdGhlIGxhcmdlciBhcmVh
LgotICAgICAgICAgICAgTGF5b3V0VW5pdCBhcmVhT25lID0gc29sdXRpb25XaWR0aCAqIHNpemUu
aGVpZ2h0KCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGFyZWFUd28gPSBzaXplLndpZHRoKCkg
KiBzb2x1dGlvbkhlaWdodDsKKyAgICAgICAgICAgIGludCBhcmVhT25lID0gc29sdXRpb25XaWR0
aCAqIHNpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICBpbnQgYXJlYVR3byA9IHNpemUud2lkdGgo
KSAqIHNvbHV0aW9uSGVpZ2h0OwogICAgICAgICAgICAgaWYgKGFyZWFPbmUgPCBhcmVhVHdvKQot
ICAgICAgICAgICAgICAgIHJldHVybiBMYXlvdXRTaXplKHNpemUud2lkdGgoKSwgc29sdXRpb25I
ZWlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIExheW91dFNpemUoc29sdXRpb25XaWR0aCwgc2l6
ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEludFNpemUoc2l6ZS53aWR0aCgp
LCBzb2x1dGlvbkhlaWdodCk7CisgICAgICAgICAgICByZXR1cm4gSW50U2l6ZShzb2x1dGlvbldp
ZHRoLCBzaXplLmhlaWdodCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIE9ubHkgdGhlIGZp
cnN0IHNvbHV0aW9uIGZpdHMuCi0gICAgICAgIHJldHVybiBMYXlvdXRTaXplKHNvbHV0aW9uV2lk
dGgsIHNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gSW50U2l6ZShzb2x1dGlvbldpZHRo
LCBzaXplLmhlaWdodCgpKTsKICAgICB9CiAKICAgICAvLyBPbmx5IHRoZSBzZWNvbmQgc29sdXRp
b24gZml0cywgYXNzZXJ0IHRoYXQuCiAgICAgQVNTRVJUKHNvbHV0aW9uSGVpZ2h0IDw9IHNpemUu
aGVpZ2h0KCkpOwotICAgIHJldHVybiBMYXlvdXRTaXplKHNpemUud2lkdGgoKSwgc29sdXRpb25I
ZWlnaHQpOworICAgIHJldHVybiBJbnRTaXplKHNpemUud2lkdGgoKSwgc29sdXRpb25IZWlnaHQp
OwogfQogCiBJbnRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVJbWFnZUludHJp
bnNpY0RpbWVuc2lvbnMoU3R5bGVJbWFnZSogaW1hZ2UsIGNvbnN0IEludFNpemUmIHBvc2l0aW9u
aW5nQXJlYVNpemUpIGNvbnN0CkBAIC0xMDgzLDYgKzEwODEsNyBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrCiAgICAgTGF5b3V0VW5pdCBsZWZ0ID0gMDsKICAgICBM
YXlvdXRVbml0IHRvcCA9IDA7CiAgICAgSW50U2l6ZSBwb3NpdGlvbmluZ0FyZWFTaXplOworICAg
IEludFJlY3Qgc25hcHBlZFBhaW50UmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QocGFpbnRSZWN0
KTsKIAogICAgIC8vIERldGVybWluZSB0aGUgYmFja2dyb3VuZCBwb3NpdGlvbmluZyBhcmVhIGFu
ZCBzZXQgZGVzdFJlY3QgdG8gdGhlIGJhY2tncm91bmQgcGFpbnRpbmcgYXJlYS4KICAgICAvLyBk
ZXN0UmVjdCB3aWxsIGJlIGFkanVzdGVkIGxhdGVyIGlmIHRoZSBiYWNrZ3JvdW5kIGlzIG5vbi1y
ZXBlYXRpbmcuCkBAIC0xMDk5LDcgKzEwOTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpjYWxjdWxhdGVCYWNrCiAjZW5kaWYKIAogICAgIGlmICghZml4ZWRBdHRhY2htZW50KSB7Ci0g
ICAgICAgIGdlb21ldHJ5LnNldERlc3RSZWN0KHBhaW50UmVjdCk7CisgICAgICAgIGdlb21ldHJ5
LnNldERlc3RSZWN0KHNuYXBwZWRQYWludFJlY3QpOwogCiAgICAgICAgIExheW91dFVuaXQgcmln
aHQgPSAwOwogICAgICAgICBMYXlvdXRVbml0IGJvdHRvbSA9IDA7CkBAIC0xMTIxLDExICsxMTIw
LDEzIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUJhY2sKICAgICAgICAg
Ly8gaXRzIG1hcmdpbnMuIFNpbmNlIHRob3NlIHdlcmUgYWRkZWQgaW4gYWxyZWFkeSwgd2UgaGF2
ZSB0byBmYWN0b3IgdGhlbSBvdXQgd2hlbiBjb21wdXRpbmcKICAgICAgICAgLy8gdGhlIGJhY2tn
cm91bmQgcG9zaXRpb25pbmcgYXJlYS4KICAgICAgICAgaWYgKGlzUm9vdCgpKSB7Ci0gICAgICAg
ICAgICBwb3NpdGlvbmluZ0FyZWFTaXplID0gTGF5b3V0U2l6ZSh0b1JlbmRlckJveCh0aGlzKS0+
d2lkdGgoKSAtIGxlZnQgLSByaWdodCwgdG9SZW5kZXJCb3godGhpcyktPmhlaWdodCgpIC0gdG9w
IC0gYm90dG9tKTsKKyAgICAgICAgICAgIHBvc2l0aW9uaW5nQXJlYVNpemUgPSBJbnRTaXplKHNu
YXBTaXplVG9QaXhlbCh0b1JlbmRlckJveCh0aGlzKS0+d2lkdGgoKSAtIGxlZnQgLSByaWdodCwg
dG9SZW5kZXJCb3godGhpcyktPngoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzbmFwU2l6ZVRvUGl4ZWwodG9SZW5kZXJCb3godGhpcyktPmhlaWdodCgpIC0g
dG9wIC0gYm90dG9tLCB0b1JlbmRlckJveCh0aGlzKS0+eSgpKSk7CiAgICAgICAgICAgICBsZWZ0
ICs9IG1hcmdpbkxlZnQoKTsKICAgICAgICAgICAgIHRvcCArPSBtYXJnaW5Ub3AoKTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBwb3NpdGlvbmluZ0FyZWFTaXplID0gTGF5b3V0U2l6ZShw
YWludFJlY3Qud2lkdGgoKSAtIGxlZnQgLSByaWdodCwgcGFpbnRSZWN0LmhlaWdodCgpIC0gdG9w
IC0gYm90dG9tKTsKKyAgICAgICAgICAgIHBvc2l0aW9uaW5nQXJlYVNpemUgPSBJbnRTaXplKHNu
YXBTaXplVG9QaXhlbChwYWludFJlY3Qud2lkdGgoKSAtIGxlZnQgLSByaWdodCwgcGFpbnRSZWN0
LngoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwU2l6
ZVRvUGl4ZWwocGFpbnRSZWN0LmhlaWdodCgpIC0gdG9wIC0gYm90dG9tLCBwYWludFJlY3QueSgp
KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZ2VvbWV0cnkuc2V0RGVzdFJlY3QocGl4ZWxTbmFw
cGVkSW50UmVjdCh2aWV3UmVjdCgpKSk7CiAgICAgICAgIHBvc2l0aW9uaW5nQXJlYVNpemUgPSBn
ZW9tZXRyeS5kZXN0UmVjdCgpLnNpemUoKTsKQEAgLTExNDAsMjAgKzExNDEsMjAgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFjawogCiAgICAgTGF5b3V0VW5pdCB4UG9z
aXRpb24gPSBmaWxsTGF5ZXItPnhQb3NpdGlvbigpLmNhbGNNaW5WYWx1ZShwb3NpdGlvbmluZ0Fy
ZWFTaXplLndpZHRoKCkgLSBnZW9tZXRyeS50aWxlU2l6ZSgpLndpZHRoKCksIHRydWUpOwogICAg
IGlmIChiYWNrZ3JvdW5kUmVwZWF0WCA9PSBSZXBlYXRGaWxsKQotICAgICAgICBnZW9tZXRyeS5z
ZXRQaGFzZVgoZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpID8gbGF5b3V0TW9kKGdlb21ldHJ5
LnRpbGVTaXplKCkud2lkdGgoKSAtICh4UG9zaXRpb24gKyBsZWZ0KSwgZ2VvbWV0cnkudGlsZVNp
emUoKS53aWR0aCgpKSA6IExheW91dFVuaXQoMCkpOworICAgICAgICBnZW9tZXRyeS5zZXRQaGFz
ZVgoZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpID8gZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0
aCgpIC0gKHhQb3NpdGlvbiArIGxlZnQpICUgZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpIDog
MCk7CiAgICAgZWxzZQogICAgICAgICBnZW9tZXRyeS5zZXROb1JlcGVhdFgoeFBvc2l0aW9uICsg
bGVmdCk7CiAKICAgICBMYXlvdXRVbml0IHlQb3NpdGlvbiA9IGZpbGxMYXllci0+eVBvc2l0aW9u
KCkuY2FsY01pblZhbHVlKHBvc2l0aW9uaW5nQXJlYVNpemUuaGVpZ2h0KCkgLSBnZW9tZXRyeS50
aWxlU2l6ZSgpLmhlaWdodCgpLCB0cnVlKTsKICAgICBpZiAoYmFja2dyb3VuZFJlcGVhdFkgPT0g
UmVwZWF0RmlsbCkKLSAgICAgICAgZ2VvbWV0cnkuc2V0UGhhc2VZKGdlb21ldHJ5LnRpbGVTaXpl
KCkuaGVpZ2h0KCkgPyBsYXlvdXRNb2QoZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSAtICh5
UG9zaXRpb24gKyB0b3ApLCBnZW9tZXRyeS50aWxlU2l6ZSgpLmhlaWdodCgpKSA6IExheW91dFVu
aXQoMCkpOworICAgICAgICBnZW9tZXRyeS5zZXRQaGFzZVkoZ2VvbWV0cnkudGlsZVNpemUoKS5o
ZWlnaHQoKSA/IGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCkgLSAoeVBvc2l0aW9uICsgdG9w
KSAlIGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCkgOiAwKTsKICAgICBlbHNlIAogICAgICAg
ICBnZW9tZXRyeS5zZXROb1JlcGVhdFkoeVBvc2l0aW9uICsgdG9wKTsKIAogICAgIGlmIChmaXhl
ZEF0dGFjaG1lbnQpCi0gICAgICAgIGdlb21ldHJ5LnVzZUZpeGVkQXR0YWNobWVudChwYWludFJl
Y3QubG9jYXRpb24oKSk7CisgICAgICAgIGdlb21ldHJ5LnVzZUZpeGVkQXR0YWNobWVudChzbmFw
cGVkUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwogCi0gICAgZ2VvbWV0cnkuY2xpcChwYWludFJlY3Qp
OworICAgIGdlb21ldHJ5LmNsaXAoc25hcHBlZFBhaW50UmVjdCk7CiAgICAgZ2VvbWV0cnkuc2V0
RGVzdE9yaWdpbihnZW9tZXRyeS5kZXN0UmVjdCgpLmxvY2F0aW9uKCkpOwogfQogCkBAIC0xMTkx
LDcgKzExOTIsNyBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjCiAg
ICAgTGF5b3V0VW5pdCBib3R0b21XaXRoT3V0c2V0ID0gcmVjdC5tYXhZKCkgKyBib3R0b21PdXRz
ZXQ7CiAgICAgTGF5b3V0VW5pdCBsZWZ0V2l0aE91dHNldCA9IHJlY3QueCgpIC0gbGVmdE91dHNl
dDsKICAgICBMYXlvdXRVbml0IHJpZ2h0V2l0aE91dHNldCA9IHJlY3QubWF4WCgpICsgcmlnaHRP
dXRzZXQ7Ci0gICAgTGF5b3V0UmVjdCBib3JkZXJJbWFnZVJlY3QgPSBMYXlvdXRSZWN0KGxlZnRX
aXRoT3V0c2V0LCB0b3BXaXRoT3V0c2V0LCByaWdodFdpdGhPdXRzZXQgLSBsZWZ0V2l0aE91dHNl
dCwgYm90dG9tV2l0aE91dHNldCAtIHRvcFdpdGhPdXRzZXQpOworICAgIEludFJlY3QgYm9yZGVy
SW1hZ2VSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChsZWZ0V2l0aE91dHNldCwgdG9wV2l0aE91
dHNldCwgcmlnaHRXaXRoT3V0c2V0IC0gbGVmdFdpdGhPdXRzZXQsIGJvdHRvbVdpdGhPdXRzZXQg
LSB0b3BXaXRoT3V0c2V0KTsKIAogICAgIEludFNpemUgaW1hZ2VTaXplID0gY2FsY3VsYXRlSW1h
Z2VJbnRyaW5zaWNEaW1lbnNpb25zKHN0eWxlSW1hZ2UsIGJvcmRlckltYWdlUmVjdC5zaXplKCkp
OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>