<?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>23547</bug_id>
          
          <creation_ts>2009-01-26 11:08:12 -0800</creation_ts>
          <short_desc>REGRESSION: SVG gradient transformation/BoundingBox can cause ugly stroke thickness</short_desc>
          <delta_ts>2009-02-10 03:12:18 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>107042</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-01-26 11:08:12 -0800</bug_when>
    <thetext>If we are in boundingBoxmode, the context is transformed to match the gradient to the shape that is filled with it.
We do the same for stroking. To get the gradient match the shape, we have to translate and scale it. Like mentioned above, we do it with transforming the context. The path is not effected by that.
But on stroking, the strokeThickness is scaled too. And this can cause different strokethikness from top to bottom or left to right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107043</commentid>
    <comment_count>1</comment_count>
      <attachid>27040</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-01-26 11:12:10 -0800</bug_when>
    <thetext>Created attachment 27040
stroke a rect with a gradient in boundingBoxMode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107062</commentid>
    <comment_count>2</comment_count>
      <attachid>27043</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-01-26 12:28:06 -0800</bug_when>
    <thetext>Created attachment 27043
real boudingBox mode example

the example above was the example with a gradientTransform attribute. This one is with the boundingBox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107065</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-01-26 12:30:34 -0800</bug_when>
    <thetext>*** Bug 22956 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107070</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-01-26 13:00:46 -0800</bug_when>
    <thetext>There was some confusion about this bug.

To the examples: The stroke thickness of each side should be identical.

Complain the example:
We have a gradient in boundinBoxMode. This means the gradient has a dimension of 1 to 1 (width to height).
And we have a rect with the dimension of 300 to 100.
Now we want to stroke the rect with the gradient. That means the gradient size must match the size of the rect with stroke width.
To do that we have to scale the gradient by 300 for width and 100 for height.
The current code just transforms the context, by scaling the context. The path (our rect) is not affected by this scaling.
After that we stroke the path with the gradient.

But the scaling of the context affects the stroke thickness. Once the scaling of width and height have differnet dimensions, the stroke thikness differs on the top to bottom and left to right.

This wrong behavior was integrated in r38952.

The important difference between the old and the new code is the handling of paths. The old code calls clipToStrokePath(contextRef, path) right before the transformation of the context. This creates a new path, the stroke path. After the transformation, the path is filled and not stroked. Thats why the old code works unlike the new one. The stroke path isn&apos;t affected by the transformation.

How to fix it:
There are two ways to fix this issue. 

1. only transform the gradient instead of the whole context. This way the context isn&apos;t touched and we have no problems with stroke thickness. We need to implement a new method on Gradient.cpp applyTransformation. This would apply the transformation during creating the gradient or afterwards. This will work for Qt, Cairo, Skia. Not sure about CG

2. Use the old variant and create a new stroke path. This works CG,Qt but won&apos;t work for cairo. cairo_stroke_to_path wasn&apos;t implemented yet.

Maybe we can use both variants, depending on the platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107777</commentid>
    <comment_count>5</comment_count>
      <attachid>27195</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-01-30 14:31:58 -0800</bug_when>
    <thetext>Created attachment 27195
transform the gradient instead of the context

This patch works for Cairo, Qt, Skia but I couldn&apos;t get gradients transformed in CG. Tried to transform the context, creating the CGShadingRef (gradient) and restore the context before filling the path, without success. I haven&apos;t found a way to transform the CGShadingRef with a TransformationMatrix directly.

This patch fails on one pixeltest, that we _nearly_ pass with the incorrect patch, but don&apos;t in last Safari. 
This bug fix passes all other tests now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109026</commentid>
    <comment_count>6</comment_count>
      <attachid>27492</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-02-09 13:59:33 -0800</bug_when>
    <thetext>Created attachment 27492
ransform the gradient instead of the context with CG-fix

same patch as above, but with CG fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109028</commentid>
    <comment_count>7</comment_count>
      <attachid>27492</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-09 14:02:03 -0800</bug_when>
    <thetext>Comment on attachment 27492
ransform the gradient instead of the context with CG-fix

Looks good.  r=me assuming it passes the pixel tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109107</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-02-10 03:12:18 -0800</bug_when>
    <thetext>landed in r40795.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>27040</attachid>
            <date>2009-01-26 11:12:10 -0800</date>
            <delta_ts>2009-01-26 11:12:10 -0800</delta_ts>
            <desc>stroke a rect with a gradient in boundingBoxMode</desc>
            <filename>test4.svg</filename>
            <type>image/svg+xml</type>
            <size>706</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iIAoiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3Mv
U1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KCjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIg
dmVyc2lvbj0iMS4xIgp4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZGVmcz4K
Cgk8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50IiAgZ3JhZGllbnRVbml0cz0idXNl
clNwYWNlT25Vc2UiIHgxPSIwIiB5MT0iMCIgeDI9IjMwMCIgeTI9IjMwMCIgZ3JhZGllbnRUcmFu
c2Zvcm09Im1hdHJpeCg0LDAsMCwxLDAsMCkiPgoJCTxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOmdv
bGQiIG9mZnNldD0iMCIvPgoJCTxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOm9yYW5nZSIgb2Zmc2V0
PSIuNSIvPgoJCTxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOmNyaW1zb24iIG9mZnNldD0iMSIvPgoJ
PC9saW5lYXJHcmFkaWVudD4KCjwvZGVmcz4KPGcgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiPgo8
cmVjdCB4PSIxMDAiIHk9IjIwMCIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIxMDAiCnN0eWxlPSJmaWxs
OnJnYigyNTUsMjU1LDI1NSk7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQpO3N0cm9rZS13aWR0
aDozOyIvPgo8L2c+Cjwvc3ZnPgoKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>27043</attachid>
            <date>2009-01-26 12:28:06 -0800</date>
            <delta_ts>2009-01-26 12:28:06 -0800</delta_ts>
            <desc>real boudingBox mode example</desc>
            <filename>test3.svg</filename>
            <type>image/svg+xml</type>
            <size>602</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iIAoiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3Mv
U1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KCjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIg
dmVyc2lvbj0iMS4xIgp4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZGVmcz4K
Cgk8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Ij4KCQk8c3RvcCBzdHlsZT0ic3Rv
cC1jb2xvcjpnb2xkIiBvZmZzZXQ9IjAiLz4KCQk8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjpvcmFu
Z2UiIG9mZnNldD0iLjUiLz4KCQk8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjpjcmltc29uIiBvZmZz
ZXQ9IjEiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgo8L2RlZnM+CjxnIHdpZHRoPSIzMDAiIGhlaWdo
dD0iMzAwIj4KPHJlY3QgeD0iMTAwIiB5PSIyMDAiIHdpZHRoPSIzMDAiIGhlaWdodD0iMTAwIgpz
dHlsZT0iZmlsbDpyZ2IoMjU1LDI1NSwyNTUpO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50KTtz
dHJva2Utd2lkdGg6MzsiLz4KPC9nPgo8L3N2Zz4KCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27195</attachid>
            <date>2009-01-30 14:31:58 -0800</date>
            <delta_ts>2009-02-09 13:59:33 -0800</delta_ts>
            <desc>transform the gradient instead of the context</desc>
            <filename>svg-gradients-fix.patch</filename>
            <type>text/plain</type>
            <size>8207</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDQwMzc4KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCkBAIC04OSw2ICs5MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICB2b2lkIHNldFNwcmVhZE1ldGhvZChHcmFkaWVudFNwcmVhZE1ldGhvZCk7CiAgICAgICAg
IEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIHsgcmV0dXJuIG1fc3ByZWFkTWV0
aG9kOyB9CisgICAgICAgIHZvaWQgc2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKSB7IG1fZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybWF0aW9uID0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOyB9Cisg
ICAgICAgIC8vIFF0IHRyYW5zZm9ybXMgdGhlIGdyYWRpZW50IGF0IGRyYXcgdGltZQorICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkgeyByZXR1cm4g
bV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKIApAQCAtMTEwLDYgKzEx
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbXV0YWJsZSBib29sIG1fc3RvcHNT
b3J0ZWQ7CiAgICAgICAgIG11dGFibGUgaW50IG1fbGFzdFN0b3A7CiAgICAgICAgIEdyYWRpZW50
U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9kOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKIAogICAgICAgICBQbGF0Zm9ybUdyYWRp
ZW50IG1fZ3JhZGllbnQ7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gNDAzNzgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw2ICs2OSwxMCBAQCBjYWlyb19wYXR0ZXJuX3QqIEdyYWRpZW50OjpwbGF0Zm9y
bUdyYWRpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhaXJvX21hdHJpeF90IG1hdHJp
eCA9IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOworICAgIGNhaXJvX21hdHJpeF9pbnZl
cnQoJm1hdHJpeCk7CisgICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KG1fZ3JhZGllbnQsICZt
YXRyaXgpOworCiAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZpc2lv
biA0MDM3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzcsOCArNTM3LDkgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR3JhZGll
bnRDb2xvclNwYWNlOgotICAgICAgICBRR3JhZGllbnQqIGdyYWRpZW50ID0gbV9jb21tb24tPnN0
YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpOwotICAgICAgICBwLT5maWxsUGF0
aChwYXRoLCBRQnJ1c2goKmdyYWRpZW50KSk7CisgICAgICAgIFFCcnVzaCBicnVzaCgqbV9jb21t
b24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1
c2guc2V0TWF0cml4KG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIGJydXNoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIG1fZGF0YS0+Y3VycmVudFBhdGggPSBRUGFpbnRlclBhdGgoKTsK
QEAgLTU2Niw4ICs1NjcsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZTogewotICAg
ICAgICBRR3JhZGllbnQqIGdyYWRpZW50ID0gbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50
LT5wbGF0Zm9ybUdyYWRpZW50KCk7Ci0gICAgICAgIHBlbi5zZXRCcnVzaChRQnJ1c2goKmdyYWRp
ZW50KSk7CisgICAgICAgIFFCcnVzaCBicnVzaCgqbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRp
ZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicnVzaC5zZXRNYXRyaXgobV9jb21t
b24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAg
ICAgICBwZW4uc2V0QnJ1c2goYnJ1c2gpOwogICAgICAgICBwLT5zZXRQZW4ocGVuKTsKICAgICAg
ICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOwogICAgICAgICBicmVhazsKQEAgLTU5NCw3ICs1
OTYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKLSAgICAgICAgcC0+
ZmlsbFJlY3QocmVjdCwgUUJydXNoKCoobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQo
KS0+cGxhdGZvcm1HcmFkaWVudCgpKSkpOworICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fY29tbW9u
LT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGJydXNo
LnNldE1hdHJpeChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJh
bnNmb3JtKCkpOworICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBicnVzaCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gUVBhaW50ZXJQYXRoKCk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNw
cAkocmV2aXNpb24gNDAzNzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
ZGllbnRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDYgKzE2NSw5IEBAIFNrU2hhZGVy
KiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQ+KGNvdW50VXNlZCksIHRpbGUpOwogICAgIH0KIAorICAgIFNrTWF0cml4IG1hdHJpeCA9IG1f
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOworICAgIG1fZ3JhZGllbnQtPnNldExvY2FsTWF0
cml4KG1hdHJpeCk7CisKICAgICByZXR1cm4gbV9ncmFkaWVudDsKIH0KIApJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHJldmlzaW9u
IDQwMzc4KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0MCw2IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVy
U3VwcG9ydC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAotI2lmIFBMQVRG
T1JNKENHKQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTc4LDcgKzczLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbQogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudChj
b25zdCBTVkdHcmFkaWVudEVsZW1lbnQqIG93bmVyKQogICAgIDogbV9ib3VuZGluZ0JveE1vZGUo
dHJ1ZSkKICAgICAsIG1fb3duZXJFbGVtZW50KG93bmVyKQotCiAjaWYgUExBVEZPUk0oQ0cpCiAg
ICAgLCBtX3NhdmVkQ29udGV4dCgwKQogICAgICwgbV9pbWFnZUJ1ZmZlcigwKQpAQCAtMTIyLDgg
KzExNiw2IEBAIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnQKIH0KIAog
I2lmIFBMQVRGT1JNKENHKQotLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh0IHBhaW50aW5nIGlu
IENHCi0vLyBUaGlzIENnIHNwZWNpZmljIGNvZGUgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250
ZXh0IGFuZCBGb250KiBpbiBhIG5leHQgc3RlcC4KIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVy
T2JqZWN0KiBmaW5kVGV4dFJvb3RPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBzdGFydCkKIHsK
ICAgICB3aGlsZSAoc3RhcnQgJiYgIXN0YXJ0LT5pc1NWR1RleHQoKSkKQEAgLTE2Myw3ICsxNTUs
NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY3JlYXRlTWFza0FuZFN3YXBDb250CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGlwVG9UZXh0TWFzayhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNsaXBU
b1RleHRNYXNrKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKICAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+JiBpbWFnZUJ1ZmZlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsCiAgICAgY29uc3Qg
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCogZ3JhZGllbnRTZXJ2ZXIpCiB7CkBAIC0xODIsMTEgKzE3
NCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xpcFRvVGV4dE1hc2soR3JhcGhpCiAgICAgY29u
dGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIodGV4dEJvdW5kYXJ5LCBpbWFnZUJ1ZmZlci5nZXQoKSk7
CiAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CiAKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtYXRyaXg7CiAgICAgaWYgKGdyYWRpZW50U2VydmVyLT5ib3VuZGluZ0JveE1vZGUo
KSkgewotICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUobWFza0JCb3gueCgpLCBtYXNrQkJveC55
KCkpOwotICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUobWFza0JCb3gud2lkdGgoKSwg
bWFza0JCb3guaGVpZ2h0KCkpKTsKKyAgICAgICAgbWF0cml4LnRyYW5zbGF0ZShtYXNrQkJveC54
KCksIG1hc2tCQm94LnkoKSk7CisgICAgICAgIG1hdHJpeC5zY2FsZShtYXNrQkJveC53aWR0aCgp
LCBtYXNrQkJveC5oZWlnaHQoKSk7CiAgICAgfQotICAgIGNvbnRleHQtPmNvbmNhdENUTShncmFk
aWVudFNlcnZlci0+Z3JhZGllbnRUcmFuc2Zvcm0oKSk7CisgICAgbWF0cml4Lm11bHRpcGx5KGdy
YWRpZW50U2VydmVyLT5ncmFkaWVudFRyYW5zZm9ybSgpKTsKKyAgICByZXR1cm4gbWF0cml4Owog
fQogI2VuZGlmCiAKQEAgLTIyMyw2ICsyMTcsNyBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGll
bnQ6OnNldHVwKEdyYXBoCiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4
dCwgb2JqZWN0LT5zdHlsZSgpLCBvYmplY3QpOwogICAgIH0KIAorICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1hdHJpeDsKICAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkgJiYgIWlzUGFpbnRpbmdU
ZXh0KSB7CiAgICAgICAgIEZsb2F0UmVjdCBiYm94ID0gb2JqZWN0LT5yZWxhdGl2ZUJCb3goZmFs
c2UpOwogICAgICAgICAvLyBEb24ndCB1c2UgZ3JhZGllbnRlcyBmb3IgMWQgb2JqZWN0cyBsaWtl
IGhvcml6b250YWwvdmVydGljYWwgCkBAIC0yMzIsMTUgKzIyNywxMSBAQCBib29sIFNWR1BhaW50
U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJv
a2VDb2xvcihjb2xvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAg
ICAgICBjb250ZXh0LT50cmFuc2xhdGUoYmJveC54KCksIGJib3gueSgpKTsKLSAgICAgICAgY29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKGJib3gud2lkdGgoKSwgYmJveC5oZWlnaHQoKSkpOwotCi0g
ICAgICAgIC8vIFdpdGggc2NhbGluZyB0aGUgY29udGV4dCwgdGhlIHN0cm9rZVRoaWNrbmVzcyBp
cyBzY2FsZWQgdG9vLiBXZSBoYXZlIHRvCi0gICAgICAgIC8vIHVuZG8gdGhpcy4KLSAgICAgICAg
ZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gc3RkOjptYXgoKGNvbnRleHQtPnN0cm9rZVRoaWNrbmVz
cygpIC8gKChiYm94LndpZHRoKCkgKyBiYm94LmhlaWdodCgpKSAvIDIpIC0gMC4wMDFmKSwgMC5m
KTsKLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcyk7
CisgICAgICAgIG1hdHJpeC50cmFuc2xhdGUoYmJveC54KCksIGJib3gueSgpKTsKKyAgICAgICAg
bWF0cml4LnNjYWxlKGJib3gud2lkdGgoKSwgYmJveC5oZWlnaHQoKSk7CiAgICAgfQotICAgIGNv
bnRleHQtPmNvbmNhdENUTShncmFkaWVudFRyYW5zZm9ybSgpKTsKKyAgICBtYXRyaXgubXVsdGlw
bHkoZ3JhZGllbnRUcmFuc2Zvcm0oKSk7CisgICAgbV9ncmFkaWVudC0+c2V0R3JhZGllbnRTcGFj
ZVRyYW5zZm9ybShtYXRyaXgpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yNTAsMTUgKzI0
MSwxOSBAQCB2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKEdyCiAjaWYgUExB
VEZPUk0oQ0cpCiAgICAgLy8gcmVuZGVyUGF0aCgpIGlzIG5vdCB1c2VkIHdoZW4gcGFpbnRpbmcg
dGV4dCwgc28gd2UgcGFpbnQgdGhlIGdyYWRpZW50IGR1cmluZyB0ZWFyZG93bigpCiAgICAgaWYg
KGlzUGFpbnRpbmdUZXh0ICYmIG1fc2F2ZWRDb250ZXh0KSB7CisKICAgICAgICAgLy8gUmVzdG9y
ZSBvbi1zY3JlZW4gZHJhd2luZyBjb250ZXh0CiAgICAgICAgIGNvbnRleHQgPSBtX3NhdmVkQ29u
dGV4dDsKICAgICAgICAgbV9zYXZlZENvbnRleHQgPSAwOwogCi0gICAgICAgIGNsaXBUb1RleHRN
YXNrKGNvbnRleHQsIG1faW1hZ2VCdWZmZXIsIG9iamVjdCwgdGhpcyk7CisgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IGNsaXBUb1RleHRNYXNrKGNvbnRleHQsIG1faW1hZ2VC
dWZmZXIsIG9iamVjdCwgdGhpcyk7CisgICAgICAgIG1fZ3JhZGllbnQtPnNldEdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0obWF0cml4KTsKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbEdyYWRpZW50KG1f
Z3JhZGllbnQpOworCisgICAgICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVu
ZGVyT2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFs
c2UpOworCisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KG1hc2tCQm94KTsKIAotICAgICAgICAv
LyBmaW5hbGx5IGZpbGwgdGhlIHRleHQgY2xpcCB3aXRoIHRoZSBzaGFkaW5nCi0gICAgICAgIENH
Q29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBtX2dyYWRpZW50
LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwotIAogICAgICAgICBtX2ltYWdlQnVmZmVyLmNsZWFyKCk7
IC8vIHdlJ3JlIGRvbmUgd2l0aCBvdXIgdGV4dCBtYXNrIGJ1ZmZlcgogICAgIH0KICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27492</attachid>
            <date>2009-02-09 13:59:33 -0800</date>
            <delta_ts>2009-02-09 14:02:03 -0800</delta_ts>
            <desc>ransform the gradient instead of the context with CG-fix</desc>
            <filename>svg-gradients-fix.patch</filename>
            <type>text/plain</type>
            <size>11406</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDc5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDktMDItMDkgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUcmFu
c2Zvcm0gdGhlIGdyYWRpZW50IGluc3RlYWQgb2YgdGhlIGNvbnRleHQgZm9yIG1vc3QgcGxhdGZv
cm1zIGFuZAorICAgICAgICB0cmFuc2Zvcm0gdGhlIGNvbnRleHQgYWZ0ZXIgQ0dDb250ZXh0UmVw
bGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGggZm9yIENHLgorCisgICAgICAgIFJFR1JFU1NJT046IFNW
RyBncmFkaWVudCB0cmFuc2Zvcm1hdGlvbi9Cb3VuZGluZ0JveCBjYW4gY2F1c2UgdWdseSBzdHJv
a2UgdGhpY2tuZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzU0NworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpncmFkaWVudFNwYWNlVHJhbnNmb3JtKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYWRpZW50U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dDo6cGxhdGZvcm1HcmFkaWVudCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2Vy
dmVyR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dDo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpjbGlwVG9UZXh0
TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50Ojp0ZWFyZG93bik6CisK
IDIwMDktMDItMDkgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5oCShyZXZpc2lvbiA0MDc3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKICNpbmNsdWRlICJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgi
CisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtODksNiArOTAsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRT
cHJlYWRNZXRob2QpOwogICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2Qo
KSB7IHJldHVybiBtX3NwcmVhZE1ldGhvZDsgfQorICAgICAgICB2b2lkIHNldEdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdyYWRpZW50U3BhY2VUcmFu
c2Zvcm1hdGlvbikgeyBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiA9IGdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbjsgfQorICAgICAgICAvLyBRdCBhbmQgQ0cgdHJhbnNmb3JtIHRoZSBn
cmFkaWVudCBhdCBkcmF3IHRpbWUKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybSgpIHsgcmV0dXJuIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9u
OyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0Jik7CiAKQEAgLTExMCw2ICsxMTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29ydGVkOwogICAgICAgICBtdXRhYmxlIGludCBt
X2xhc3RTdG9wOwogICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsK
KyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRp
b247CiAKICAgICAgICAgUGxhdGZvcm1HcmFkaWVudCBtX2dyYWRpZW50OwogICAgIH07CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHAJKHJldmlzaW9uIDQwNzczKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFkaWVudENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksMTAgQEAgY2Fpcm9f
cGF0dGVybl90KiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaQogICAgICAgICBicmVhazsKICAgICB9
CiAKKyAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXggPSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1h
dGlvbjsKKyAgICBjYWlyb19tYXRyaXhfaW52ZXJ0KCZtYXRyaXgpOworICAgIGNhaXJvX3BhdHRl
cm5fc2V0X21hdHJpeChtX2dyYWRpZW50LCAmbWF0cml4KTsKKwogICAgIHJldHVybiBtX2dyYWRp
ZW50OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gNDA3NzMpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0
LDYgKzUwNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgICAgICAg
ICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIENH
Q29udGV4dENsaXAoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0
LCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkp
OwogICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtX2NvbW1vbi0+c3RhdGUu
ZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwogICAgICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBicmVhazsKQEAgLTUyOSw2ICs1MzAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7CiAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQ
YXRoKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOworICAgICAgICBD
R0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50
LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwogICAgICAgICBDR0NvbnRleHREcmF3U2hhZGlu
Zyhjb250ZXh0LCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGll
bnQoKSk7CiAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAg
IGJyZWFrOwpAQCAtNTUyLDYgKzU1NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dChjb25zdCBGbG8KICAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKICAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250
ZXh0LCByZWN0KTsKKyAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fY29tbW9u
LT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgICAg
IENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGll
bnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUo
Y29udGV4dCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHJldmlzaW9uIDQwNzczKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUzNyw4ICs1MzcsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgoKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6
Ci0gICAgICAgIFFHcmFkaWVudCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRp
ZW50LT5wbGF0Zm9ybUdyYWRpZW50KCk7Ci0gICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIFFCcnVz
aCgqZ3JhZGllbnQpKTsKKyAgICAgICAgUUJydXNoIGJydXNoKCptX2NvbW1vbi0+c3RhdGUuZmls
bEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicnVzaC5zZXRNYXRyaXgo
bV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsK
KyAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwgYnJ1c2gpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgbV9kYXRhLT5jdXJyZW50UGF0aCA9IFFQYWludGVyUGF0aCgpOwpAQCAtNTY2LDggKzU2
Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOiB7Ci0gICAgICAgIFFHcmFkaWVu
dCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3Jh
ZGllbnQoKTsKLSAgICAgICAgcGVuLnNldEJydXNoKFFCcnVzaCgqZ3JhZGllbnQpKTsKKyAgICAg
ICAgUUJydXNoIGJydXNoKCptX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3Jt
R3JhZGllbnQoKSk7CisgICAgICAgIGJydXNoLnNldE1hdHJpeChtX2NvbW1vbi0+c3RhdGUuc3Ry
b2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIHBlbi5zZXRC
cnVzaChicnVzaCk7CiAgICAgICAgIHAtPnNldFBlbihwZW4pOwogICAgICAgICBwLT5zdHJva2VQ
YXRoKHBhdGgsIHBlbik7CiAgICAgICAgIGJyZWFrOwpAQCAtNTk0LDcgKzU5Niw5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgotICAgICAgICBwLT5maWxsUmVjdChyZWN0
LCBRQnJ1c2goKihtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdy
YWRpZW50KCkpKSk7CisgICAgICAgIFFCcnVzaCBicnVzaCgqbV9jb21tb24tPnN0YXRlLmZpbGxH
cmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1c2guc2V0TWF0cml4KG1f
Y29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Cisg
ICAgICAgIHAtPmZpbGxSZWN0KHJlY3QsIGJydXNoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIG1fZGF0YS0+Y3VycmVudFBhdGggPSBRUGFpbnRlclBhdGgoKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNraWEuY3BwCShyZXZpc2lvbiA0
MDc3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNraWEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDkgQEAgU2tTaGFkZXIqIEdyYWRpZW50Ojpw
bGF0Zm9ybUdyYWRpZW50KCkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oY291bnRVc2Vk
KSwgdGlsZSk7CiAgICAgfQogCisgICAgU2tNYXRyaXggbWF0cml4ID0gbV9ncmFkaWVudFNwYWNl
VHJhbnNmb3JtYXRpb247CisgICAgbV9ncmFkaWVudC0+c2V0TG9jYWxNYXRyaXgobWF0cml4KTsK
KwogICAgIHJldHVybiBtX2dyYWRpZW50OwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkocmV2aXNpb24gNDA3NzMpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsMTEgKzQwLDYgQEAKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAj
aW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCi0jaWYgUExBVEZPUk0oQ0cpCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jZW5k
aWYKLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzgs
NyArNzMsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtCiBTVkdQ
YWludFNlcnZlckdyYWRpZW50OjpTVkdQYWludFNlcnZlckdyYWRpZW50KGNvbnN0IFNWR0dyYWRp
ZW50RWxlbWVudCogb3duZXIpCiAgICAgOiBtX2JvdW5kaW5nQm94TW9kZSh0cnVlKQogICAgICwg
bV9vd25lckVsZW1lbnQob3duZXIpCi0KICNpZiBQTEFURk9STShDRykKICAgICAsIG1fc2F2ZWRD
b250ZXh0KDApCiAgICAgLCBtX2ltYWdlQnVmZmVyKDApCkBAIC0xMjIsOCArMTE2LDYgQEAgdm9p
ZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudAogfQogCiAjaWYgUExBVEZPUk0o
Q0cpCi0vLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHQgcGFpbnRpbmcgaW4gQ0cKLS8vIFRoaXMg
Q2cgc3BlY2lmaWMgY29kZSBzaG91bGQgbW92ZSB0byBHcmFwaGljc0NvbnRleHQgYW5kIEZvbnQq
IGluIGEgbmV4dCBzdGVwLgogc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJPYmplY3QqIGZpbmRU
ZXh0Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KQogewogICAgIHdoaWxlIChz
dGFydCAmJiAhc3RhcnQtPmlzU1ZHVGV4dCgpKQpAQCAtMTYzLDcgKzE1NSw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBjcmVhdGVNYXNrQW5kU3dhcENvbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIGlubGluZSB2b2lkIGNsaXBUb1RleHRNYXNrKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwKK3N0YXRpYyBpbmxpbmUgVHJhbnNmb3JtYXRpb25NYXRyaXggY2xpcFRvVGV4dE1hc2soR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVm
ZmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwKICAgICBjb25zdCBTVkdQYWludFNlcnZl
ckdyYWRpZW50KiBncmFkaWVudFNlcnZlcikKIHsKQEAgLTE4MiwxMSArMTc0LDEzIEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBjbGlwVG9UZXh0TWFzayhHcmFwaGkKICAgICBjb250ZXh0LT5jbGlwVG9J
bWFnZUJ1ZmZlcih0ZXh0Qm91bmRhcnksIGltYWdlQnVmZmVyLmdldCgpKTsKICAgICBjb250ZXh0
LT5jb25jYXRDVE0odHJhbnNmb3JtKTsKIAorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eDsKICAgICBpZiAoZ3JhZGllbnRTZXJ2ZXItPmJvdW5kaW5nQm94TW9kZSgpKSB7Ci0gICAgICAg
IGNvbnRleHQtPnRyYW5zbGF0ZShtYXNrQkJveC54KCksIG1hc2tCQm94LnkoKSk7Ci0gICAgICAg
IGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtYXNrQkJveC53aWR0aCgpLCBtYXNrQkJveC5oZWln
aHQoKSkpOworICAgICAgICBtYXRyaXgudHJhbnNsYXRlKG1hc2tCQm94LngoKSwgbWFza0JCb3gu
eSgpKTsKKyAgICAgICAgbWF0cml4LnNjYWxlTm9uVW5pZm9ybShtYXNrQkJveC53aWR0aCgpLCBt
YXNrQkJveC5oZWlnaHQoKSk7CiAgICAgfQotICAgIGNvbnRleHQtPmNvbmNhdENUTShncmFkaWVu
dFNlcnZlci0+Z3JhZGllbnRUcmFuc2Zvcm0oKSk7CisgICAgbWF0cml4Lm11bHRpcGx5KGdyYWRp
ZW50U2VydmVyLT5ncmFkaWVudFRyYW5zZm9ybSgpKTsKKyAgICByZXR1cm4gbWF0cml4OwogfQog
I2VuZGlmCiAKQEAgLTIyMyw2ICsyMTcsNyBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6
OnNldHVwKEdyYXBoCiAgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwg
b2JqZWN0LT5zdHlsZSgpLCBvYmplY3QpOwogICAgIH0KIAorICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeDsKICAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkgJiYgIWlzUGFpbnRpbmdUZXh0
KSB7CiAgICAgICAgIEZsb2F0UmVjdCBiYm94ID0gb2JqZWN0LT5yZWxhdGl2ZUJCb3goZmFsc2Up
OwogICAgICAgICAvLyBEb24ndCB1c2UgZ3JhZGllbnRlcyBmb3IgMWQgb2JqZWN0cyBsaWtlIGhv
cml6b250YWwvdmVydGljYWwgCkBAIC0yMzIsMTUgKzIyNywxMSBAQCBib29sIFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihjb2xvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoYmJveC54KCksIGJib3gueSgpKTsKLSAgICAgICAgY29udGV4
dC0+c2NhbGUoRmxvYXRTaXplKGJib3gud2lkdGgoKSwgYmJveC5oZWlnaHQoKSkpOwotCi0gICAg
ICAgIC8vIFdpdGggc2NhbGluZyB0aGUgY29udGV4dCwgdGhlIHN0cm9rZVRoaWNrbmVzcyBpcyBz
Y2FsZWQgdG9vLiBXZSBoYXZlIHRvCi0gICAgICAgIC8vIHVuZG8gdGhpcy4KLSAgICAgICAgZmxv
YXQgc3Ryb2tlVGhpY2tuZXNzID0gc3RkOjptYXgoKGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygp
IC8gKChiYm94LndpZHRoKCkgKyBiYm94LmhlaWdodCgpKSAvIDIpIC0gMC4wMDFmKSwgMC5mKTsK
LSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcyk7Cisg
ICAgICAgIG1hdHJpeC50cmFuc2xhdGUoYmJveC54KCksIGJib3gueSgpKTsKKyAgICAgICAgbWF0
cml4LnNjYWxlTm9uVW5pZm9ybShiYm94LndpZHRoKCksIGJib3guaGVpZ2h0KCkpOwogICAgIH0K
LSAgICBjb250ZXh0LT5jb25jYXRDVE0oZ3JhZGllbnRUcmFuc2Zvcm0oKSk7CisgICAgbWF0cml4
Lm11bHRpcGx5KGdyYWRpZW50VHJhbnNmb3JtKCkpOworICAgIG1fZ3JhZGllbnQtPnNldEdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0obWF0cml4KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjUw
LDE1ICsyNDEsMTkgQEAgdm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50Ojp0ZWFyZG93bihHcgog
I2lmIFBMQVRGT1JNKENHKQogICAgIC8vIHJlbmRlclBhdGgoKSBpcyBub3QgdXNlZCB3aGVuIHBh
aW50aW5nIHRleHQsIHNvIHdlIHBhaW50IHRoZSBncmFkaWVudCBkdXJpbmcgdGVhcmRvd24oKQog
ICAgIGlmIChpc1BhaW50aW5nVGV4dCAmJiBtX3NhdmVkQ29udGV4dCkgeworCiAgICAgICAgIC8v
IFJlc3RvcmUgb24tc2NyZWVuIGRyYXdpbmcgY29udGV4dAogICAgICAgICBjb250ZXh0ID0gbV9z
YXZlZENvbnRleHQ7CiAgICAgICAgIG1fc2F2ZWRDb250ZXh0ID0gMDsKIAotICAgICAgICBjbGlw
VG9UZXh0TWFzayhjb250ZXh0LCBtX2ltYWdlQnVmZmVyLCBvYmplY3QsIHRoaXMpOworICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBjbGlwVG9UZXh0TWFzayhjb250ZXh0LCBt
X2ltYWdlQnVmZmVyLCBvYmplY3QsIHRoaXMpOworICAgICAgICBtX2dyYWRpZW50LT5zZXRHcmFk
aWVudFNwYWNlVHJhbnNmb3JtKG1hdHJpeCk7CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFk
aWVudChtX2dyYWRpZW50KTsKKworICAgICAgICBGbG9hdFJlY3QgbWFza0JCb3ggPSBjb25zdF9j
YXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9iamVjdChvYmplY3QpKS0+cmVsYXRpdmVC
Qm94KGZhbHNlKTsKKworICAgICAgICBjb250ZXh0LT5maWxsUmVjdChtYXNrQkJveCk7CiAKLSAg
ICAgICAgLy8gZmluYWxseSBmaWxsIHRoZSB0ZXh0IGNsaXAgd2l0aCB0aGUgc2hhZGluZwotICAg
ICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9n
cmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKLSAKICAgICAgICAgbV9pbWFnZUJ1ZmZlci5j
bGVhcigpOyAvLyB3ZSdyZSBkb25lIHdpdGggb3VyIHRleHQgbWFzayBidWZmZXIKICAgICB9CiAj
ZW5kaWYK
</data>
<flag name="review"
          id="13300"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>