<?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>26102</bug_id>
          
          <creation_ts>2009-05-30 19:56:59 -0700</creation_ts>
          <short_desc>[CAIRO] CSS3 -webkit-box-shadow support</short_desc>
          <delta_ts>2009-11-17 17:17:06 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          <dependson>30960</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="adel">netdur</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>krit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123716</commentid>
    <comment_count>0</comment_count>
    <who name="adel">netdur</who>
    <bug_when>2009-05-30 19:56:59 -0700</bug_when>
    <thetext>webkit gtk+ doesn&apos;t support CSS3 -webkit-box-shadow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154636</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-10-14 12:54:43 -0700</bug_when>
    <thetext>This bug is also present in the WinCairo build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155805</commentid>
    <comment_count>2</comment_count>
      <attachid>41436</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-10-19 11:47:44 -0700</bug_when>
    <thetext>Created attachment 41436
first test for shadow support in Canvas

This is the first patch for shadows on fill() anf fillRect() in Canvas. This is just for testing and not for review. It still needs some impovement as well as clean-up. stroke() and CSS shadows will follow too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157440</commentid>
    <comment_count>3</comment_count>
      <attachid>41779</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-10-24 02:36:03 -0700</bug_when>
    <thetext>Created attachment 41779
Canvas shadow with fill and stroke support

This patch is more efficient and supports shadows for Canvas fill and stroke operations. It is also possible to use shadows for paths filled/stroked with gradients or patterns now. I deactivated CSS shadow support, since it needs more work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157445</commentid>
    <comment_count>4</comment_count>
      <attachid>41780</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-10-24 04:36:07 -0700</bug_when>
    <thetext>Created attachment 41780
Canvas shadow support for fill, stroke, drawImage

also added support for drawImage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157662</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-10-25 20:04:42 -0700</bug_when>
    <thetext>These changes work very nicely -- great work!  Any hope of some box-shadow support?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159411</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-10-30 12:58:31 -0700</bug_when>
    <thetext>I broke the Canvas/SVG shadow code up to bug 30960</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163604</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-11-13 17:17:58 -0800</bug_when>
    <thetext>See http://webkit.org/blog/86/box-shadow/ for an example of what this should look like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163824</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-11-15 17:57:43 -0800</bug_when>
    <thetext>The reason the earlier box-shadow logic did not work is that the calculation of the clip-out rectangles was incorrect.  Note the use of cairo_rectangle; the Y dimension had been improperly coded as x2, which caused the clip region to be wrong, and therefore the areas of the path that were meant to be masked out were left, while areas we wanted drawn were clipped out.

===================================================================
--- GraphicsContextCairo.cpp    (revision 50998)
+++ GraphicsContextCairo.cpp    (working copy)
@@ -1113,7 +1155,7 @@
     cairo_t* cr = m_data-&gt;cr;
     double x1, y1, x2, y2;
     cairo_clip_extents(cr, &amp;x1, &amp;y1, &amp;x2, &amp;y2);
-    cairo_rectangle(cr, x1, x2, x2 - x1, y2 - y1);
+    cairo_rectangle(cr, x1, y1, x2 - x1, y2 - y1);
     cairo_rectangle(cr, r.x(), r.y(), r.width(), r.height());
     cairo_fill_rule_t savedFillRule = cairo_get_fill_rule(cr);
     cairo_set_fill_rule(cr, CAIRO_FILL_RULE_EVEN_ODD);

Ful patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163843</commentid>
    <comment_count>9</comment_count>
      <attachid>43262</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-11-15 21:59:05 -0800</bug_when>
    <thetext>Created attachment 43262
Patch enabling webkit-box-shadow support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163859</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-11-15 23:51:36 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=43262) [details]
&gt; Patch enabling webkit-box-shadow support.

Realy good catch with the clipping area. Just a sytling issue: You have an unused variable &apos;cr&apos; at L588. This causes a warning adn you added a extra free line at L213. Can be fixed on landing. I would say r=me, but I&apos;m not a reviewer :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163879</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-11-16 00:43:38 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Realy good catch with the clipping area. Just a sytling issue: You have an
&gt; unused variable &apos;cr&apos; at L588. This causes a warning adn you added a extra free
&gt; line at L213. Can be fixed on landing. I would say r=me, but I&apos;m not a reviewer
&gt; :-(

Hm. After reading the patch again, I found a minor problem. If the kernelSize is zero, you have to draw the shadow manualy with a rect and a solid color. kernelSizes with a value of zero, stop the rendering process on feGaussianBlur, according to the Spec of SVG. I handle this case on on createPlatformShadow(). Also it&apos;s a good idea to limit the kernelSize (see createPlatformShadow() again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163942</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-11-16 04:27:27 -0800</bug_when>
    <thetext>(In reply to comment #11)
Sorry for comment 9. It&apos;s still a great patch. But there are more issues. You can&apos;t use source-&gt;setIsAlphaImage(true); in your code, because it won&apos;t blur the color&apos;s, just the alpha channel. That means you only get the right blurred image, on using black as shadow color. You either blur every channel  (very slow), or use masking with the shadow color, like we do on createPlatformShadow. The last solutions is faster, and drawPathShadow is doing it. You just need to replace the call

+    RefPtr&lt;FilterEffect&gt; blur = createShadowFilterEffect (shadowBuffer.release(), shadowBufferSize, kernelSize);
+
+    //draw the filter result to the context
+    context-&gt;drawImage(blur-&gt;resultImage()-&gt;image(), shadowRect);

with

    context-&gt;createPlatformShadow(shadowBuffer.release(), shadowColor, shadowRect, kernelSize);

It&apos;s also neccessary to give drawBorderlessRectShadow the current color of fillRect. This is needed to calculate the correct transparency of the shadow. And don&apos;t forget to multiply the alpha channel of the current color with the one of shadow color and set it as the new transparency level of shadow color.

It&apos;s not necessary to move the Filter creation out of createPlatformShadow().

The use of createPlatformShadow() in drawBorderlessRectShadow() will solve the issues of my previous comment. I hope i did not forget something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164036</commentid>
    <comment_count>13</comment_count>
      <attachid>43316</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-11-16 11:20:31 -0800</bug_when>
    <thetext>Created attachment 43316
Updated webkit-box-shadow support

Patch, revised per Dirk&apos;s suggestions.  Patch now properly handles rectangular shadow areas in the &quot;border-radius-big.html&quot; test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164048</commentid>
    <comment_count>14</comment_count>
      <attachid>43317</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-11-16 12:11:32 -0800</bug_when>
    <thetext>Created attachment 43317
Minor revision, now all shadow effects work.

Revised patch that now correctly supports rounded rects/ellipse shadow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164052</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-11-16 12:31:18 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=43317) [details]
&gt; Minor revision, now all shadow effects work.
&gt; 
&gt; Revised patch that now correctly supports rounded rects/ellipse shadow.

Looks great now. Please delete cairo_t* cr = context-&gt;platformContext(); before landing. Still need some one who reviews the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164054</commentid>
    <comment_count>16</comment_count>
      <attachid>43317</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-16 12:44:21 -0800</bug_when>
    <thetext>Comment on attachment 43317
Minor revision, now all shadow effects work.

&gt; +static inline void drawBorderlessRectShadow(GraphicsContext* context, const FloatRect&amp; rect, const Color&amp; rectColor)

Seems surprising that this large function gets inlined.

&gt; +    //calculate filter values

This is not how we write comments - there should be a space after &quot;//&quot;, and the comment should be a full sentence starting with a capital letter, and ending with a period.

&gt; +    float kernelSize (0.0);

float kernelSize = 0;

&gt; -    cairo_rectangle(cr, x1, x2, x2 - x1, y2 - y1);
&gt; +    cairo_rectangle(cr, x1, y1, x2 - x1, y2 - y1);

Seems worth its own ChangeLog explanation. Does this only affect shadows? If not, do we need a new test for a bug fixed here?

r=me, please consider these comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164057</commentid>
    <comment_count>17</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-11-16 13:04:38 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 43317 [details])
&gt; &gt; +static inline void drawBorderlessRectShadow(GraphicsContext* context, const FloatRect&amp; rect, const Color&amp; rectColor)
&gt; 
&gt; Seems surprising that this large function gets inlined.

Fixed
 
&gt; &gt; +    //calculate filter values
&gt; 
&gt; This is not how we write comments - there should be a space after &quot;//&quot;, and the
&gt; comment should be a full sentence starting with a capital letter, and ending
&gt; with a period.

Sorry - I committed after olliej&apos;s review and missed this.  I&apos;ll try to correct it during a future change.
 
&gt; &gt; +    float kernelSize (0.0);
&gt; 
&gt; float kernelSize = 0;

Fixed

&gt; &gt; -    cairo_rectangle(cr, x1, x2, x2 - x1, y2 - y1);
&gt; &gt; +    cairo_rectangle(cr, x1, y1, x2 - x1, y2 - y1);
&gt; 
&gt; Seems worth its own ChangeLog explanation. Does this only affect shadows? If
&gt; not, do we need a new test for a bug fixed here?

See Comment #8 for details.  This was a bug fix, which was identified due to the new drawing produced by the shadow effects.

&gt; r=me, please consider these comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164058</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-11-16 13:05:31 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/51046.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164105</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-16 15:07:51 -0800</bug_when>
    <thetext>&gt; &gt; float kernelSize = 0;
&gt;
&gt; Fixed

In committed code, it&apos;s &quot;float kernelSize = 0.0&quot;, which is actually different from what I suggested. Zero is magic in C++, as its can be casted to any type. On the other hand, 0.0 is double, which gets converted to a float here. Some compilers may warn about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164404</commentid>
    <comment_count>20</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-11-17 17:17:06 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; &gt; float kernelSize = 0;
&gt; &gt;
&gt; &gt; Fixed
&gt; 
&gt; In committed code, it&apos;s &quot;float kernelSize = 0.0&quot;, which is actually different
&gt; from what I suggested. Zero is magic in C++, as its can be casted to any type.
&gt; On the other hand, 0.0 is double, which gets converted to a float here. Some
&gt; compilers may warn about this.

Fixed.  I found another place where this same mistake was made and corrected it, too.

Also corrected the comments in the routines where these assignments were being made.

Landed in http://trac.webkit.org/changeset/51098.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41436</attachid>
            <date>2009-10-19 11:47:44 -0700</date>
            <delta_ts>2009-10-24 02:36:03 -0700</delta_ts>
            <desc>first test for shadow support in Canvas</desc>
            <filename>shadow4.patch</filename>
            <type>text/plain</type>
            <size>10000</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gNDk3OTMpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjA0LDYgKzI2MDQsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0dyYXBoaWNzQ29udGV4dEZpbHRlci5jcHAgXAorCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9HcmFwaGljc0NvbnRleHRGaWx0ZXIuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBcCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAkocmV2aXNpb24gNDk3OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRv
a2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPHZiczg1QGdteC5k
ZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtMzIsMTQgKzMyLDE3IEBACiAjaWYgUExBVEZPUk0oQ0FJUk8pCiAKICNpbmNsdWRlICJD
YWlyb1BhdGguaCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRGaWx0
ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQ
YXR0ZXJuLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJTb3VyY2VH
cmFwaGljLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUg
PGNhaXJvLmg+CkBAIC0zODEsNiArMzg0LDU1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29udmV4UG9seWdvbigKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAorc3RhdGljIGlubGlu
ZSB2b2lkIGRyYXdCb3JkZXJsZXNzUGF0aFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
Cit7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgSW50U2l6ZSBzaGFkb3dTaXplOworICAgIGlu
dCBzaGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIGlmIChjb250ZXh0LT5n
ZXRTaGFkb3coc2hhZG93U2l6ZSwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpKSB7CisgICAgICAg
IC8vY2FsY3VsYXRlIGZpbHRlciB2YWx1ZXMKKyAgICAgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgY2Fpcm9fcGF0aF90KiBwYXRoID0gY2Fpcm9f
Y29weV9wYXRoKGNyKTsKKyAgICAgICAgZG91YmxlIHgwLCB4MSwgeTAsIHkxOworI2lmIENBSVJP
X1ZFUlNJT04gPj0gQ0FJUk9fVkVSU0lPTl9FTkNPREUoMSwgNiwgMCkKKyAgICAgICAgY2Fpcm9f
cGF0aF9leHRlbnRzKGNyLCAmeDAsICZ5MCwgJngxLCAmeTEpOworI2Vsc2UKKyAgICAgICAgY2Fp
cm9fc3Ryb2tlX2V4dGVudHMoY3IsICZ4MCwgJnkwLCAmeDEsICZ5MSk7CisjZW5kaWYKKyAgICAg
ICAgRmxvYXRSZWN0IHJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKKyAgICAgICAgaW50
IGtlcm5lbFNpemUgPSBjZWlsKHNoYWRvd0JsdXIgLyAyKTsKKyAgICAgICAgSW50U2l6ZSBzaGFk
b3dCdWZmZXJTaXplKHJlY3Qud2lkdGgoKSArIHNoYWRvd0JsdXIsIHJlY3QuaGVpZ2h0KCkgKyBz
aGFkb3dCbHVyKTsKKworICAgICAgICAvL2RyYXcgc2hhZG93IGludG8gYSBuZXcgSW1hZ2VCdWZm
ZXIKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzaGFkb3dCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNoYWRvd0J1ZmZlclNpemUpOworICAgICAgICBjYWlyb190KiBzaGFkb3dDb250
ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAg
ICBjYWlyb190cmFuc2xhdGUoc2hhZG93Q29udGV4dCwgLXJlY3QueCgpLCAtcmVjdC55KCkpOwor
ICAgICAgICBjYWlyb19uZXdfcGF0aChjcik7CisgICAgICAgIGNhaXJvX2FwcGVuZF9wYXRoKHNo
YWRvd0NvbnRleHQsIHBhdGgpOworICAgICAgICBzZXRDb2xvcihzaGFkb3dDb250ZXh0LCBzaGFk
b3dDb2xvcik7CisgICAgICAgIGNhaXJvX2ZpbGwoc2hhZG93Q29udGV4dCk7CisKKyAgICAgICAg
Ly9jcmVhdGUgZmlsdGVyCisgICAgICAgIFJlZlB0cjxGaWx0ZXI+IGZpbHRlciA9IEdyYXBoaWNz
Q29udGV4dEZpbHRlcjo6Y3JlYXRlKCk7CisgICAgICAgIGZpbHRlci0+c2V0U291cmNlSW1hZ2Uo
c2hhZG93QnVmZmVyLnJlbGVhc2UoKSk7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNv
dXJjZSA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgICAgICBzb3VyY2UtPnNldFN1YlJl
Z2lvbihGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaGFkb3dCdWZmZXJTaXplKSk7CisgICAgICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJsdXIgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHNvdXJj
ZS5nZXQoKSwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSk7CisgICAgICAgIGJsdXItPnNldFN1YlJl
Z2lvbihGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaGFkb3dCdWZmZXJTaXplKSk7CisgICAgICAg
IGJsdXItPmFwcGx5KGZpbHRlci5nZXQoKSk7CisKKyAgICAgICAgLy9kcmF3IHRoZSBmaWx0ZXIg
cmVzdWx0IHRvIHRoZSBjb250ZXh0CisgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0ID0gRmxv
YXRSZWN0KHJlY3QubG9jYXRpb24oKSwgc2hhZG93QnVmZmVyU2l6ZSk7CisgICAgICAgIHNoYWRv
d1JlY3QubW92ZShzaGFkb3dTaXplLndpZHRoKCksIC1zaGFkb3dTaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgc2hhZG93UmVjdC5tb3ZlKC1rZXJuZWxTaXplLCAta2VybmVsU2l6ZSk7CisgICAgICAg
IGNhaXJvX25ld19wYXRoKGNyKTsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGJsdXItPnJl
c3VsdEltYWdlKCktPmltYWdlKCksIHNoYWRvd1JlY3QpOworICAgICAgICBjYWlyb19hcHBlbmRf
cGF0aChjciwgcGF0aCk7CisgICAgfQorI2VuZGlmCit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTM5MCw2ICs0
NDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogICAgIGNhaXJvX3NhdmUo
Y3IpOwogCiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgZmlsbFJ1bGUoKSA9PSBSVUxFX0VW
RU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElO
Ryk7CisgICAgZHJhd0JvcmRlcmxlc3NQYXRoU2hhZG93KHRoaXMpOwogICAgIHN3aXRjaCAobV9j
b21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlKSB7CiAgICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6
CiAgICAgICAgIHNldENvbG9yKGNyLCBmaWxsQ29sb3IoKSk7CkBAIC00NjAsMTIgKzUxMyw0NyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoKQogICAgIHN0cm9rZVBhdGgoKTsKIH0K
IAorc3RhdGljIGlubGluZSB2b2lkIGRyYXdCb3JkZXJsZXNzUmVjdFNoYWRvdyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNhaXJvX3QqIGNyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisj
aWYgRU5BQkxFKEZJTFRFUlMpCisgICAgSW50U2l6ZSBzaGFkb3dTaXplOworICAgIGludCBzaGFk
b3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIGlmIChjb250ZXh0LT5nZXRTaGFk
b3coc2hhZG93U2l6ZSwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpKSB7CisgICAgICAgIC8vY2Fs
Y3VsYXRlIGZpbHRlciB2YWx1ZXMKKyAgICAgICAgaW50IGtlcm5lbFNpemUgPSBjZWlsKHNoYWRv
d0JsdXIgLyAyKTsKKyAgICAgICAgSW50U2l6ZSBzaGFkb3dCdWZmZXJTaXplKHJlY3Qud2lkdGgo
KSArIHNoYWRvd0JsdXIsIHJlY3QuaGVpZ2h0KCkgKyBzaGFkb3dCbHVyKTsKKworICAgICAgICAv
L2RyYXcgc2hhZG93IGludG8gYSBuZXcgSW1hZ2VCdWZmZXIKKyAgICAgICAgT3duUHRyPEltYWdl
QnVmZmVyPiBzaGFkb3dCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNoYWRvd0J1ZmZlclNp
emUpOworICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3dCdWZm
ZXItPmNvbnRleHQoKTsKKyAgICAgICAgc2hhZG93Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0
KEZsb2F0UG9pbnQoa2VybmVsU2l6ZSwga2VybmVsU2l6ZSksIHJlY3Quc2l6ZSgpKSwgc2hhZG93
Q29sb3IpOworCisgICAgICAgIC8vY3JlYXRlIGZpbHRlcgorICAgICAgICBSZWZQdHI8RmlsdGVy
PiBmaWx0ZXIgPSBHcmFwaGljc0NvbnRleHRGaWx0ZXI6OmNyZWF0ZSgpOworICAgICAgICBmaWx0
ZXItPnNldFNvdXJjZUltYWdlKHNoYWRvd0J1ZmZlci5yZWxlYXNlKCkpOworICAgICAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBzb3VyY2UgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsKKyAgICAg
ICAgc291cmNlLT5zZXRTdWJSZWdpb24oRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93QnVm
ZmVyU2l6ZSkpOworICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBibHVyID0gRkVHYXVzc2lh
bkJsdXI6OmNyZWF0ZShzb3VyY2UuZ2V0KCksIGtlcm5lbFNpemUsIGtlcm5lbFNpemUpOworICAg
ICAgICBibHVyLT5zZXRTdWJSZWdpb24oRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93QnVm
ZmVyU2l6ZSkpOworICAgICAgICBibHVyLT5hcHBseShmaWx0ZXIuZ2V0KCkpOworCisgICAgICAg
IC8vZHJhdyB0aGUgZmlsdGVyIHJlc3VsdCB0byB0aGUgY29udGV4dAorICAgICAgICBGbG9hdFJl
Y3Qgc2hhZG93UmVjdCA9IEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCksIHNoYWRvd0J1ZmZlclNp
emUpOworICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc2hhZG93U2l6ZS53aWR0aCgpLCAtc2hhZG93
U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHNoYWRvd1JlY3QubW92ZSgta2VybmVsU2l6ZSwgLWtl
cm5lbFNpemUpOworICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoYmx1ci0+cmVzdWx0SW1hZ2Uo
KS0+aW1hZ2UoKSwgc2hhZG93UmVjdCk7CisgICAgfQorI2VuZGlmCit9CisKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fpcm9fdCogY3IgPSBt
X2RhdGEtPmNyOworICAgIC8vZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KHRoaXMsIGNyLCByZWN0
KTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICBmaWxsUGF0aCgpOwogfQpAQCAtNDc1LDYgKzU2Myw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBjYWlyb190KiBjciA9IG1f
ZGF0YS0+Y3I7CisgICAgZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KHRoaXMsIGNyLCByZWN0KTsK
ICAgICBpZiAoY29sb3IuYWxwaGEoKSkKICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKG1fZGF0
YS0+Y3IsIHJlY3QsIGNvbG9yKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9HcmFwaGljc0NvbnRleHRGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9HcmFwaGljc0NvbnRleHRGaWx0ZXIuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0dyYXBoaWNzQ29u
dGV4dEZpbHRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoKKyAqICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhaW50IHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRGaWx0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGlj
c0NvbnRleHRGaWx0ZXI6OkdyYXBoaWNzQ29udGV4dEZpbHRlcigpCisgICAgOiBGaWx0ZXIoKQor
eworfQorCitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dEZpbHRlcj4gR3JhcGhpY3NDb250ZXh0
RmlsdGVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250
ZXh0RmlsdGVyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9H
cmFwaGljc0NvbnRleHRGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvR3JhcGhpY3NDb250ZXh0RmlsdGVyLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvR3JhcGhpY3NDb250ZXh0RmlsdGVyLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdyYXBo
aWNzQ29udGV4dEZpbHRlcl9oCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dEZpbHRlcl9oCisKKyNp
ZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dEZp
bHRlciA6IHB1YmxpYyBGaWx0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0RmlsdGVyPiBjcmVhdGUoKTsKKworICAgICAgICBib29sIGVm
ZmVjdEJvdW5kaW5nQm94TW9kZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZvaWQgY2Fs
Y3VsYXRlRWZmZWN0U3ViUmVnaW9uKEZpbHRlckVmZmVjdCopIHsgfQorICAgICAgICBGbG9hdFJl
Y3QgZmlsdGVyUmVnaW9uKCkgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICAgICAgRmxvYXRS
ZWN0IHNvdXJjZUltYWdlUmVjdCgpIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBHcmFwaGljc0NvbnRleHRGaWx0ZXIoKTsKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8v
IEdyYXBoaWNzQ29udGV4dEZpbHRlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41779</attachid>
            <date>2009-10-24 02:36:03 -0700</date>
            <delta_ts>2009-10-24 04:36:07 -0700</delta_ts>
            <desc>Canvas shadow with fill and stroke support</desc>
            <filename>shadow8.patch</filename>
            <type>text/plain</type>
            <size>11485</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gNTAwMjUpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjA0LDYgKzI2MDQsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0dyYXBoaWNzQ29udGV4dEZpbHRlci5jcHAgXAorCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9HcmFwaGljc0NvbnRleHRGaWx0ZXIuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBcCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAkocmV2aXNpb24gNTAwMjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRv
a2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPHZiczg1QGdteC5k
ZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtMzIsMTQgKzMyLDE3IEBACiAjaWYgUExBVEZPUk0oQ0FJUk8pCiAKICNpbmNsdWRlICJD
YWlyb1BhdGguaCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRGaWx0
ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQ
YXR0ZXJuLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJTb3VyY2VH
cmFwaGljLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUg
PGNhaXJvLmg+CkBAIC03OCw2ICs4MSwxMDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0
U291cmNlT3ZlcihjYQogICAgIGNhaXJvX2ZpbGwoY3IpOwogfQogCitzdGF0aWMgaW5saW5lIHZv
aWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0NyLCBjYWlyb190KiBkc3RDcikK
K3sKKyAgICBjYWlyb19zZXRfYW50aWFsaWFzKGRzdENyLCBjYWlyb19nZXRfYW50aWFsaWFzKHNy
Y0NyKSk7CisgICAgZG91YmxlIGRhc2hlcywgb2Zmc2V0OworICAgIGNhaXJvX2dldF9kYXNoKHNy
Y0NyLCAmZGFzaGVzLCAmb2Zmc2V0KTsKKyAgICBjYWlyb19zZXRfZGFzaChkc3RDciwgJmRhc2hl
cywgY2Fpcm9fZ2V0X2Rhc2hfY291bnQoc3JjQ3IpLCBvZmZzZXQpOworICAgIGNhaXJvX3NldF9s
aW5lX2NhcChkc3RDciwgY2Fpcm9fZ2V0X2xpbmVfY2FwKHNyY0NyKSk7CisgICAgY2Fpcm9fc2V0
X2xpbmVfam9pbihkc3RDciwgY2Fpcm9fZ2V0X2xpbmVfam9pbihzcmNDcikpOworICAgIGNhaXJv
X3NldF9saW5lX3dpZHRoKGRzdENyLCBjYWlyb19nZXRfbGluZV93aWR0aChzcmNDcikpOworICAg
IGNhaXJvX3NldF9taXRlcl9saW1pdChkc3RDciwgY2Fpcm9fZ2V0X21pdGVyX2xpbWl0KHNyY0Ny
KSk7CisgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShkc3RDciwgY2Fpcm9fZ2V0X2ZpbGxfcnVsZShz
cmNDcikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlU2hhZG93KGNhaXJvX3QqIGNy
LCBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIsIENvbG9yIHNoYWRvd0NvbG9yLCBGbG9h
dFJlY3Qgc2hhZG93UmVjdCwgaW50IGtlcm5lbFNpemUpCit7CisjaWYgRU5BQkxFKEZJTFRFUlMp
CisgICAgLy8gY3JlYXRlIGZpbHRlcgorICAgIFJlZlB0cjxGaWx0ZXI+IGZpbHRlciA9IEdyYXBo
aWNzQ29udGV4dEZpbHRlcjo6Y3JlYXRlKCk7CisgICAgZmlsdGVyLT5zZXRTb3VyY2VJbWFnZShi
dWZmZXIucmVsZWFzZSgpKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2UgPSBTb3Vy
Y2VHcmFwaGljOjpjcmVhdGUoKTsKKyAgICBzb3VyY2UtPnNldFN1YlJlZ2lvbihGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBzaGFkb3dSZWN0LnNpemUoKSkpOworICAgIHNvdXJjZS0+c2V0SXNBbHBo
YUltYWdlKHRydWUpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJsdXIgPSBGRUdhdXNzaWFu
Qmx1cjo6Y3JlYXRlKHNvdXJjZS5nZXQoKSwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSk7CisgICAg
Ymx1ci0+c2V0U3ViUmVnaW9uKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNoYWRvd1JlY3Quc2l6
ZSgpKSk7CisgICAgYmx1ci0+YXBwbHkoZmlsdGVyLmdldCgpKTsKKworICAgIC8vIE1hc2sgdGhl
IGZpbHRlciB3aXRoIHRoZSBzaGFkb3cgY29sb3IgYW5kIGRyYXcgaXQgdG8gdGhlIGNvbnRleHQu
CisgICAgLy8gTWFza2luZyBtYWtlcyBpdCBwb3NzaWJsZSB0byBqdXN0IGJsdXIgdGhlIGFscGhh
IGNoYW5uZWwuCisgICAgc2V0Q29sb3IoY3IsIHNoYWRvd0NvbG9yKTsKKyAgICBjYWlyb19tYXNr
X3N1cmZhY2UoY3IsIGJsdXItPnJlc3VsdEltYWdlKCktPmltYWdlKCktPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCksIHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CisjZW5kaWYK
K30KKworc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwLCBib29sIGZpbGxTaGFkb3cpCit7
CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgSW50U2l6ZSBzaGFkb3dTaXplOworICAgIGludCBz
aGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIGlmIChjb250ZXh0LT5nZXRT
aGFkb3coc2hhZG93U2l6ZSwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpKSB7CisgICAgICAgIC8v
Y2FsY3VsYXRlIGZpbHRlciB2YWx1ZXMKKyAgICAgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgY2Fpcm9fcGF0aF90KiBwYXRoID0gY2Fpcm9fY29w
eV9wYXRoKGNyKTsKKyAgICAgICAgZG91YmxlIHgwLCB4MSwgeTAsIHkxOworICAgICAgICBjYWly
b19zdHJva2VfZXh0ZW50cyhjciwgJngwLCAmeTAsICZ4MSwgJnkxKTsKKyAgICAgICAgRmxvYXRS
ZWN0IHJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKKworICAgICAgICBpbnQga2VybmVs
U2l6ZSA9IGNlaWwoc2hhZG93Qmx1ciAvIDIpOworICAgICAgICBJbnRTaXplIHNoYWRvd0J1ZmZl
clNpemUocmVjdC53aWR0aCgpICsgc2hhZG93Qmx1ciwgcmVjdC5oZWlnaHQoKSArIHNoYWRvd0Js
dXIpOworICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdCA9IEZsb2F0UmVjdChyZWN0LmxvY2F0
aW9uKCksIHNoYWRvd0J1ZmZlclNpemUpOworICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc2hhZG93
U2l6ZS53aWR0aCgpIC0ga2VybmVsU2l6ZSwgc2hhZG93U2l6ZS5oZWlnaHQoKSAtIGtlcm5lbFNp
emUpOworICAgICAgICBzaGFkb3dDb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoc2hhZG93
Q29sb3IucmdiKCksIChzaGFkb3dDb2xvci5hbHBoYSgpICogIGdjcC0+c3RhdGUuZ2xvYmFsQWxw
aGEpIC8gMjU1LmYpOworCisgICAgICAgIC8vZHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1
ZmZlcgorICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2hhZG93QnVmZmVyU2l6ZSk7CisgICAgICAgIGNhaXJvX3QqIHNoYWRvd0Nv
bnRleHQgPSBzaGFkb3dCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAg
ICAgIGNvcHlDb250ZXh0UHJvcGVydGllcyhjciwgc2hhZG93Q29udGV4dCk7CisgICAgICAgIGNh
aXJvX3RyYW5zbGF0ZShzaGFkb3dDb250ZXh0LCAtcmVjdC54KCksIC1yZWN0LnkoKSk7CisgICAg
ICAgIGNhaXJvX25ld19wYXRoKHNoYWRvd0NvbnRleHQpOworICAgICAgICBjYWlyb19hcHBlbmRf
cGF0aChzaGFkb3dDb250ZXh0LCBwYXRoKTsKKworICAgICAgICBpZiAoZmlsbFNoYWRvdykgewor
ICAgICAgICAgICAgc3dpdGNoIChnY3AtPnN0YXRlLmZpbGxDb2xvclNwYWNlKSB7CisgICAgICAg
ICAgICBjYXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICAgICAgICAgICAgICBzaGFkb3dDb2xvciA9
IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoc2hhZG93Q29sb3IucmdiKCksIChzaGFkb3dDb2xvci5h
bHBoYSgpICogIGNvbnRleHQtPmZpbGxDb2xvcigpLmFscGhhKCkpIC8gNjUwMjUuZik7CisgICAg
ICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCAwLjAsIDAuMCwgMC4wLCAxLjAp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQYXR0ZXJuQ29sb3JT
cGFjZTogeworICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFmZmluZTsKKyAg
ICAgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlKHNoYWRvd0NvbnRleHQsIGdjcC0+c3RhdGUu
ZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR3JhZGllbnRDb2xv
clNwYWNlOgorICAgICAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Uoc2hhZG93Q29udGV4dCwg
Z2NwLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWlyb19maWxsKHNoYWRv
d0NvbnRleHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3dpdGNoIChnY3AtPnN0
YXRlLnN0cm9rZUNvbG9yU3BhY2UpIHsKKyAgICAgICAgICAgIGNhc2UgU29saWRDb2xvclNwYWNl
OiB7CisgICAgICAgICAgICAgICAgc2hhZG93Q29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhh
KHNoYWRvd0NvbG9yLnJnYigpLCAoc2hhZG93Q29sb3IuYWxwaGEoKSAqICBjb250ZXh0LT5zdHJv
a2VDb2xvcigpLmFscGhhKCkpIC8gNjUwMjUuZik7CisgICAgICAgICAgICAgICAgY2Fpcm9fc2V0
X3NvdXJjZV9yZ2JhKGNyLCAwLjAsIDAuMCwgMC4wLCAxLjApOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFjZTog
eworICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFmZmluZTsKKyAgICAgICAg
ICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBnY3AtPnN0YXRlLnN0cm9rZVBhdHRlcm4tPmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgorICAgICAg
ICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIGdjcC0+c3RhdGUuc3Ryb2tlR3JhZGllbnQt
PnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYWlyb19zdHJva2Uoc2hhZG93Q29udGV4dCk7CisgICAgICAgIH0K
KworICAgICAgICBjcmVhdGVTaGFkb3coY3IsIHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRv
d0NvbG9yLCBzaGFkb3dSZWN0LCBrZXJuZWxTaXplKTsKKyAgICAgICAgY2Fpcm9fbmV3X3BhdGgo
Y3IpOworICAgICAgICBjYWlyb19hcHBlbmRfcGF0aChjciwgcGF0aCk7CisgICAgfQorI2VuZGlm
Cit9CisKIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBjcikKICAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUo
KSkKICAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQpAQCAt
MzkwLDYgKzQ5Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgY2Fp
cm9fc2F2ZShjcik7CiAKICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBmaWxsUnVsZSgpID09
IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVM
RV9XSU5ESU5HKTsKKyAgICBkcmF3UGF0aFNoYWRvdyh0aGlzLCBtX2NvbW1vbiwgdHJ1ZSk7CiAg
ICAgc3dpdGNoIChtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2UpIHsKICAgICBjYXNlIFNv
bGlkQ29sb3JTcGFjZToKICAgICAgICAgc2V0Q29sb3IoY3IsIGZpbGxDb2xvcigpKTsKQEAgLTQy
MCw2ICs1MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAKICAgICBj
YWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CiAgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgZHJhd1Bh
dGhTaGFkb3codGhpcywgbV9jb21tb24sIGZhbHNlKTsKICAgICBzd2l0Y2ggKG1fY29tbW9uLT5z
dGF0ZS5zdHJva2VDb2xvclNwYWNlKSB7CiAgICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6CiAgICAg
ICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwpAQCAtNzI2LDkgKzgzNCwxNiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KEludFNp
emUgY29uc3QmLCBpbnQsIENvbG9yIGNvbnN0JikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNoYWRvdyhJbnRTaXplIGNvbnN0JiBzaXplLCBpbnQsIENvbG9yIGNvbnN0JikKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIENhaXJvIGRvZXNuJ3Qgc3VwcG9ydCBzaGFk
b3dzIG5hdGl2ZWx5LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyoKKyAgICAv
LyBmdW5jdGlvbnMKKworICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMpIHsKKyAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBp
cyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgIC8vIFdl
IGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUg
WSBheGlzCisgICAgICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dTaXplID0gSW50U2l6ZShzaXpl
LndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKKyAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9HcmFwaGljc0NvbnRleHRGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9HcmFwaGljc0NvbnRleHRGaWx0ZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0dyYXBoaWNz
Q29udGV4dEZpbHRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoKKyAq
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhaW50IHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRGaWx0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFw
aGljc0NvbnRleHRGaWx0ZXI6OkdyYXBoaWNzQ29udGV4dEZpbHRlcigpCisgICAgOiBGaWx0ZXIo
KQoreworfQorCitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dEZpbHRlcj4gR3JhcGhpY3NDb250
ZXh0RmlsdGVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgR3JhcGhpY3ND
b250ZXh0RmlsdGVyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9HcmFwaGljc0NvbnRleHRGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvR3JhcGhpY3NDb250ZXh0RmlsdGVyLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvR3JhcGhpY3NDb250ZXh0RmlsdGVy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICoKKyAqICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdy
YXBoaWNzQ29udGV4dEZpbHRlcl9oCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dEZpbHRlcl9oCisK
KyNpZiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4
dEZpbHRlciA6IHB1YmxpYyBGaWx0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0RmlsdGVyPiBjcmVhdGUoKTsKKworICAgICAgICBib29s
IGVmZmVjdEJvdW5kaW5nQm94TW9kZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZvaWQg
Y2FsY3VsYXRlRWZmZWN0U3ViUmVnaW9uKEZpbHRlckVmZmVjdCopIHsgfQorICAgICAgICBGbG9h
dFJlY3QgZmlsdGVyUmVnaW9uKCkgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICAgICAgRmxv
YXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBHcmFwaGljc0NvbnRleHRGaWx0ZXIoKTsKKyAgICB9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKKworI2VuZGlm
IC8vIEdyYXBoaWNzQ29udGV4dEZpbHRlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41780</attachid>
            <date>2009-10-24 04:36:07 -0700</date>
            <delta_ts>2009-11-15 21:59:05 -0800</delta_ts>
            <desc>Canvas shadow support for fill, stroke, drawImage</desc>
            <filename>shadow9.patch</filename>
            <type>text/plain</type>
            <size>13917</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gNTAwMjUpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjA0LDYgKzI2MDQsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0dyYXBoaWNzQ29udGV4dEZpbHRlci5jcHAgXAorCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9HcmFwaGljc0NvbnRleHRGaWx0ZXIuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBcCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDUwMDI1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjg5LDYgKzI4OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9p
ZCBzZXRBbHBoYShmbG9hdCk7CiAjaWYgUExBVEZPUk0oQ0FJUk8pCiAgICAgICAgIGZsb2F0IGdl
dEFscGhhKCk7CisgICAgICAgIHZvaWQgY3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJ
bWFnZUJ1ZmZlcj4gYnVmZmVyLCBDb2xvciBzaGFkb3dDb2xvciwgRmxvYXRSZWN0IHNoYWRvd1Jl
Y3QsIGludCBrZXJuZWxTaXplKTsKICNlbmRpZgogCiAgICAgICAgIHZvaWQgc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZp
c2lvbiA1MDAyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDA4IERpcmsgU2NodWx6ZSA8dmJzODVAZ214LmRlPgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMiwxNCAr
MzIsMTcgQEAKICNpZiBQTEFURk9STShDQUlSTykKIAogI2luY2x1ZGUgIkNhaXJvUGF0aC5oIgor
I2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEZpbHRlci5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKICNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KQEAg
LTc4LDYgKzgxLDg5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFNvdXJjZU92ZXIoY2EK
ICAgICBjYWlyb19maWxsKGNyKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNvcHlDb250ZXh0
UHJvcGVydGllcyhjYWlyb190KiBzcmNDciwgY2Fpcm9fdCogZHN0Q3IpCit7CisgICAgY2Fpcm9f
c2V0X2FudGlhbGlhcyhkc3RDciwgY2Fpcm9fZ2V0X2FudGlhbGlhcyhzcmNDcikpOworICAgIGRv
dWJsZSBkYXNoZXMsIG9mZnNldDsKKyAgICBjYWlyb19nZXRfZGFzaChzcmNDciwgJmRhc2hlcywg
Jm9mZnNldCk7CisgICAgY2Fpcm9fc2V0X2Rhc2goZHN0Q3IsICZkYXNoZXMsIGNhaXJvX2dldF9k
YXNoX2NvdW50KHNyY0NyKSwgb2Zmc2V0KTsKKyAgICBjYWlyb19zZXRfbGluZV9jYXAoZHN0Q3Is
IGNhaXJvX2dldF9saW5lX2NhcChzcmNDcikpOworICAgIGNhaXJvX3NldF9saW5lX2pvaW4oZHN0
Q3IsIGNhaXJvX2dldF9saW5lX2pvaW4oc3JjQ3IpKTsKKyAgICBjYWlyb19zZXRfbGluZV93aWR0
aChkc3RDciwgY2Fpcm9fZ2V0X2xpbmVfd2lkdGgoc3JjQ3IpKTsKKyAgICBjYWlyb19zZXRfbWl0
ZXJfbGltaXQoZHN0Q3IsIGNhaXJvX2dldF9taXRlcl9saW1pdChzcmNDcikpOworICAgIGNhaXJv
X3NldF9maWxsX3J1bGUoZHN0Q3IsIGNhaXJvX2dldF9maWxsX3J1bGUoc3JjQ3IpKTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogZ2NwLCBib29sIGZpbGxTaGFkb3cpCit7CisjaWYg
RU5BQkxFKEZJTFRFUlMpCisgICAgSW50U2l6ZSBzaGFkb3dTaXplOworICAgIGludCBzaGFkb3dC
bHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIGlmIChjb250ZXh0LT5nZXRTaGFkb3co
c2hhZG93U2l6ZSwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpKSB7CisgICAgICAgIC8vY2FsY3Vs
YXRlIGZpbHRlciB2YWx1ZXMKKyAgICAgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICAgICAgY2Fpcm9fcGF0aF90KiBwYXRoID0gY2Fpcm9fY29weV9wYXRo
KGNyKTsKKyAgICAgICAgZG91YmxlIHgwLCB4MSwgeTAsIHkxOworICAgICAgICBjYWlyb19zdHJv
a2VfZXh0ZW50cyhjciwgJngwLCAmeTAsICZ4MSwgJnkxKTsKKyAgICAgICAgRmxvYXRSZWN0IHJl
Y3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKKworICAgICAgICBpbnQga2VybmVsU2l6ZSA9
IGNlaWwoc2hhZG93Qmx1ciAvIDIpOworICAgICAgICBJbnRTaXplIHNoYWRvd0J1ZmZlclNpemUo
cmVjdC53aWR0aCgpICsgc2hhZG93Qmx1ciwgcmVjdC5oZWlnaHQoKSArIHNoYWRvd0JsdXIpOwor
ICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdCA9IEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCks
IHNoYWRvd0J1ZmZlclNpemUpOworICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc2hhZG93U2l6ZS53
aWR0aCgpIC0ga2VybmVsU2l6ZSwgc2hhZG93U2l6ZS5oZWlnaHQoKSAtIGtlcm5lbFNpemUpOwor
ICAgICAgICBzaGFkb3dDb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoc2hhZG93Q29sb3Iu
cmdiKCksIChzaGFkb3dDb2xvci5hbHBoYSgpICogIGdjcC0+c3RhdGUuZ2xvYmFsQWxwaGEpIC8g
MjU1LmYpOworCisgICAgICAgIC8vZHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlcgor
ICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoc2hhZG93QnVmZmVyU2l6ZSk7CisgICAgICAgIGNhaXJvX3QqIHNoYWRvd0NvbnRleHQg
PSBzaGFkb3dCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAgIGNv
cHlDb250ZXh0UHJvcGVydGllcyhjciwgc2hhZG93Q29udGV4dCk7CisgICAgICAgIGNhaXJvX3Ry
YW5zbGF0ZShzaGFkb3dDb250ZXh0LCAtcmVjdC54KCksIC1yZWN0LnkoKSk7CisgICAgICAgIGNh
aXJvX25ld19wYXRoKHNoYWRvd0NvbnRleHQpOworICAgICAgICBjYWlyb19hcHBlbmRfcGF0aChz
aGFkb3dDb250ZXh0LCBwYXRoKTsKKworICAgICAgICBpZiAoZmlsbFNoYWRvdykgeworICAgICAg
ICAgICAgc3dpdGNoIChnY3AtPnN0YXRlLmZpbGxDb2xvclNwYWNlKSB7CisgICAgICAgICAgICBj
YXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICAgICAgICAgICAgICBzaGFkb3dDb2xvciA9IGNvbG9y
V2l0aE92ZXJyaWRlQWxwaGEoc2hhZG93Q29sb3IucmdiKCksIChzaGFkb3dDb2xvci5hbHBoYSgp
ICogIGNvbnRleHQtPmZpbGxDb2xvcigpLmFscGhhKCkpIC8gNjUwMjUuZik7CisgICAgICAgICAg
ICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCAwLjAsIDAuMCwgMC4wLCAxLjApOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFjZTog
eworICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFmZmluZTsKKyAgICAgICAg
ICAgICAgICBjYWlyb19zZXRfc291cmNlKHNoYWRvd0NvbnRleHQsIGdjcC0+c3RhdGUuZmlsbFBh
dHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNl
OgorICAgICAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Uoc2hhZG93Q29udGV4dCwgZ2NwLT5z
dGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWlyb19maWxsKHNoYWRvd0NvbnRl
eHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3dpdGNoIChnY3AtPnN0YXRlLnN0
cm9rZUNvbG9yU3BhY2UpIHsKKyAgICAgICAgICAgIGNhc2UgU29saWRDb2xvclNwYWNlOiB7Cisg
ICAgICAgICAgICAgICAgc2hhZG93Q29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKHNoYWRv
d0NvbG9yLnJnYigpLCAoc2hhZG93Q29sb3IuYWxwaGEoKSAqICBjb250ZXh0LT5zdHJva2VDb2xv
cigpLmFscGhhKCkpIC8gNjUwMjUuZik7CisgICAgICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9yZ2JhKGNyLCAwLjAsIDAuMCwgMC4wLCAxLjApOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFjZTogeworICAg
ICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFmZmluZTsKKyAgICAgICAgICAgICAg
ICBjYWlyb19zZXRfc291cmNlKGNyLCBnY3AtPnN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBs
YXRmb3JtUGF0dGVybihhZmZpbmUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgorICAgICAgICAgICAg
ICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIGdjcC0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRm
b3JtR3JhZGllbnQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYWlyb19zdHJva2Uoc2hhZG93Q29udGV4dCk7CisgICAgICAgIH0KKworICAg
ICAgICBjb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVNoYWRvdyhzaGFkb3dCdWZmZXIucmVsZWFzZSgp
LCBzaGFkb3dDb2xvciwgc2hhZG93UmVjdCwga2VybmVsU2l6ZSk7CisgICAgICAgIGNhaXJvX25l
d19wYXRoKGNyKTsKKyAgICAgICAgY2Fpcm9fYXBwZW5kX3BhdGgoY3IsIHBhdGgpOworICAgIH0K
KyNlbmRpZgorfQorCiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCogY3IpCiAgICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQ
cml2YXRlKCkpCiAgICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSkKQEAgLTM5MCw2ICs0NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQog
ICAgIGNhaXJvX3NhdmUoY3IpOwogCiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgZmlsbFJ1
bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19G
SUxMX1JVTEVfV0lORElORyk7CisgICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21tb24sIHRy
dWUpOwogICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlKSB7CiAgICAg
Y2FzZSBTb2xpZENvbG9yU3BhY2U6CiAgICAgICAgIHNldENvbG9yKGNyLCBmaWxsQ29sb3IoKSk7
CkBAIC00MjAsNiArNTA3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQog
CiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwogICAgIGNhaXJvX3NhdmUoY3IpOworICAg
IGRyYXdQYXRoU2hhZG93KHRoaXMsIG1fY29tbW9uLCBmYWxzZSk7CiAgICAgc3dpdGNoIChtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkgewogICAgIGNhc2UgU29saWRDb2xvclNwYWNl
OgogICAgICAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKQEAgLTcyNiw5ICs4MTQs
MzggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKAogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRv
dyhJbnRTaXplIGNvbnN0JiwgaW50LCBDb2xvciBjb25zdCYpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TaGFkb3coSW50U2l6ZSBjb25zdCYgc2l6ZSwgaW50LCBDb2xvciBjb25z
dCYpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBDYWlybyBkb2Vzbid0IHN1cHBv
cnQgc2hhZG93cyBuYXRpdmVseSwgdGhleSBhcmUgZHJhd24gbWFudWFsbHkgaW4gdGhlIGRyYXcq
CisgICAgLy8gZnVuY3Rpb25zCisKKyAgICBpZiAobV9jb21tb24tPnN0YXRlLnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKSB7CisgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNv
bnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAorICAgICAg
ICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9w
cG9zaXRlIFkgYXhpcworICAgICAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93U2l6ZSA9IEludFNp
emUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7CisgICAgfQorfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkb3coUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4g
YnVmZmVyLCBDb2xvciBzaGFkb3dDb2xvciwgRmxvYXRSZWN0IHNoYWRvd1JlY3QsIGludCBrZXJu
ZWxTaXplKQoreworI2lmIEVOQUJMRShGSUxURVJTKQorICAgIGNhaXJvX3QqIGNyID0gbV9kYXRh
LT5jcjsKKworICAgIC8vIGNyZWF0ZSBmaWx0ZXIKKyAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXIg
PSBHcmFwaGljc0NvbnRleHRGaWx0ZXI6OmNyZWF0ZSgpOworICAgIGZpbHRlci0+c2V0U291cmNl
SW1hZ2UoYnVmZmVyLnJlbGVhc2UoKSk7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNl
ID0gU291cmNlR3JhcGhpYzo6Y3JlYXRlKCk7CisgICAgc291cmNlLT5zZXRTdWJSZWdpb24oRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93UmVjdC5zaXplKCkpKTsKKyAgICBzb3VyY2UtPnNl
dElzQWxwaGFJbWFnZSh0cnVlKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBibHVyID0gRkVH
YXVzc2lhbkJsdXI6OmNyZWF0ZShzb3VyY2UuZ2V0KCksIGtlcm5lbFNpemUsIGtlcm5lbFNpemUp
OworICAgIGJsdXItPnNldFN1YlJlZ2lvbihGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaGFkb3dS
ZWN0LnNpemUoKSkpOworICAgIGJsdXItPmFwcGx5KGZpbHRlci5nZXQoKSk7CisKKyAgICAvLyBN
YXNrIHRoZSBmaWx0ZXIgd2l0aCB0aGUgc2hhZG93IGNvbG9yIGFuZCBkcmF3IGl0IHRvIHRoZSBj
b250ZXh0LgorICAgIC8vIE1hc2tpbmcgbWFrZXMgaXQgcG9zc2libGUgdG8ganVzdCBibHVyIHRo
ZSBhbHBoYSBjaGFubmVsLgorICAgIHNldENvbG9yKGNyLCBzaGFkb3dDb2xvcik7CisgICAgY2Fp
cm9fbWFza19zdXJmYWNlKGNyLCBibHVyLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpLCBzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOwor
I2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNw
cAkocmV2aXNpb24gNTAwMjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDMxIEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBjYWlyb19tYXRyaXhfdCBtYXRy
aXggPSB7IHNjYWxlWCwgMCwgMCwgc2NhbGVZLCBzcmNSZWN0LngoKSwgc3JjUmVjdC55KCkgfTsK
ICAgICBjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVybiwgJm1hdHJpeCk7CiAKKyAgICAv
LyBEcmF3IHRoZSBzaGFkb3cKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBJbnRTaXplIHNoYWRv
d1NpemU7CisgICAgaW50IHNoYWRvd0JsdXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAg
aWYgKGNvbnRleHQtPmdldFNoYWRvdyhzaGFkb3dTaXplLCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xv
cikpIHsKKyAgICAgICAgaW50IGtlcm5lbFNpemUgPSBjZWlsKHNoYWRvd0JsdXIgLyAyKTsKKyAg
ICAgICAgSW50U2l6ZSBzaGFkb3dCdWZmZXJTaXplKGRzdFJlY3Qud2lkdGgoKSArIHNoYWRvd0Js
dXIsIGRzdFJlY3QuaGVpZ2h0KCkgKyBzaGFkb3dCbHVyKTsKKyAgICAgICAgRmxvYXRSZWN0IHNo
YWRvd1JlY3QgPSBGbG9hdFJlY3QoZHN0UmVjdC5sb2NhdGlvbigpLCBzaGFkb3dCdWZmZXJTaXpl
KTsKKyAgICAgICAgc2hhZG93UmVjdC5tb3ZlKHNoYWRvd1NpemUud2lkdGgoKSAtIGtlcm5lbFNp
emUsIHNoYWRvd1NpemUuaGVpZ2h0KCkgLSBrZXJuZWxTaXplKTsKKyAgICAgICAgc2hhZG93Q29s
b3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKHNoYWRvd0NvbG9yLnJnYigpLCAoc2hhZG93Q29s
b3IuYWxwaGEoKSAqICBjb250ZXh0LT5nZXRBbHBoYSgpKSAvIDI1NS5mKTsKKworICAgICAgICAv
L2RyYXcgc2hhZG93IGludG8gYSBuZXcgSW1hZ2VCdWZmZXIKKyAgICAgICAgT3duUHRyPEltYWdl
QnVmZmVyPiBzaGFkb3dCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNoYWRvd0J1ZmZlclNp
emUpOworICAgICAgICBjYWlyb190KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250
ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBjYWlyb19zZXRfc291cmNlKHNoYWRv
d0NvbnRleHQsIHBhdHRlcm4pOworICAgICAgICBjYWlyb190cmFuc2xhdGUoc2hhZG93Q29udGV4
dCwgLWRzdFJlY3QueCgpLCAtZHN0UmVjdC55KCkpOworICAgICAgICBjYWlyb19yZWN0YW5nbGUo
c2hhZG93Q29udGV4dCwgMCwgMCwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsK
KyAgICAgICAgY2Fpcm9fZmlsbChzaGFkb3dDb250ZXh0KTsKKworICAgICAgICAvLyBGSVhNRTog
TWFrZSBzdXJlLCB0aGF0IGNvbXBvc2l0ZU9wZXJhdG9yIGRvZXNuJ3QgaW5mbHVlbmNlIHRoZSBz
aGFkb3cKKyAgICAgICAgY29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVy
LnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIGtlcm5lbFNpemUpOworICAgIH0K
KyNlbmRpZgorCiAgICAgLy8gRHJhdyB0aGUgaW1hZ2UuCiAgICAgY2Fpcm9fdHJhbnNsYXRlKGNy
LCBkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwogICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBh
dHRlcm4pOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0dyYXBoaWNz
Q29udGV4dEZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0dyYXBoaWNzQ29udGV4dEZpbHRlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvR3JhcGhpY3NDb250ZXh0RmlsdGVyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKgorICogICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEZp
bHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzQ29udGV4dEZpbHRlcjo6
R3JhcGhpY3NDb250ZXh0RmlsdGVyKCkKKyAgICA6IEZpbHRlcigpCit7Cit9CisKK1Bhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0RmlsdGVyPiBHcmFwaGljc0NvbnRleHRGaWx0ZXI6OmNyZWF0ZSgp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHRGaWx0ZXIoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0dyYXBoaWNzQ29udGV4dEZp
bHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9H
cmFwaGljc0NvbnRleHRGaWx0ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9HcmFwaGljc0NvbnRleHRGaWx0ZXIuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR3JhcGhpY3NDb250ZXh0RmlsdGVy
X2gKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0RmlsdGVyX2gKKworI2lmIEVOQUJMRShGSUxURVJT
KQorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0RmlsdGVyIDogcHVibGljIEZp
bHRlciB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHRGaWx0ZXI+IGNyZWF0ZSgpOworCisgICAgICAgIGJvb2wgZWZmZWN0Qm91bmRpbmdCb3hN
b2RlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdm9pZCBjYWxjdWxhdGVFZmZlY3RTdWJS
ZWdpb24oRmlsdGVyRWZmZWN0KikgeyB9CisgICAgICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24o
KSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorICAgICAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VS
ZWN0KCkgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dEZpbHRlcigpOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKQorCisjZW5kaWYgLy8gR3JhcGhpY3NDb250ZXh0
RmlsdGVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43262</attachid>
            <date>2009-11-15 21:59:05 -0800</date>
            <delta_ts>2009-11-16 11:20:31 -0800</delta_ts>
            <desc>Patch enabling webkit-box-shadow support.</desc>
            <filename>shadow15.patch</filename>
            <type>text/plain</type>
            <size>4978</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTAwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMTEtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEVuYWJsZSBzdXBwb3J0IGZvciB3ZWJraXQtYm94LXNoYWRvdyBpbiBDYWlybyBidWlsZHMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjEwMi4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGZhc3QvYm94LXNoYWRvdyB0ZXN0cy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDog
IEFkZAorICAgICAgICAgIHN1cHBvcnQgZm9yIGZpbGxSZWN0IHNoYWRvd3MuICBSZWZhY3RvciBj
cmVhdGlvbiBvZiBmaWx0ZXIKKyAgICAgICAgICBmb3Igc2hhZG93IGJsdXIgaW50byBuZXcgbWV0
aG9kIHRvIHNoYXJlIGltcGxlbWVudGF0aW9uCisgICAgICAgICAgYW1vbmcgdmFyaW91cyBzaGFk
b3cgcm91dGluZXMuCisKIDIwMDktMTEtMTQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCShyZXZpc2lvbiA1MDk5OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNiAr
MjEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaQogI2VuZGlm
CiB9CiAKKwogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqIGNyKQogICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSgpKQogICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCkBA
IC01NTUsNiArNTU2LDU0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpCiAgICAg
Y2Fpcm9fbmV3X3BhdGgoY3IpOwogfQogCisjaWYgRU5BQkxFKEZJTFRFUlMpCitzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTaGFkb3dGaWx0ZXJFZmZlY3QgKFBh
c3NPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2hhZG93
QnVmZmVyU2l6ZSwgZmxvYXQga2VybmVsU2l6ZSkKK3sKKyAgICBSZWZQdHI8RmlsdGVyPiBmaWx0
ZXIgPSBJbWFnZUJ1ZmZlckZpbHRlcjo6Y3JlYXRlKCk7CisgICAgZmlsdGVyLT5zZXRTb3VyY2VJ
bWFnZShzaGFkb3dCdWZmZXIucmVsZWFzZSgpKTsKKworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IHNvdXJjZSA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgIHNvdXJjZS0+c2V0U3ViUmVn
aW9uKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNoYWRvd0J1ZmZlclNpemUpKTsKKyAgICBzb3Vy
Y2UtPnNldElzQWxwaGFJbWFnZSh0cnVlKTsKKworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJs
dXIgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHNvdXJjZS5nZXQoKSwga2VybmVsU2l6ZSwga2Vy
bmVsU2l6ZSk7CisgICAgYmx1ci0+c2V0U3ViUmVnaW9uKEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IHNoYWRvd0J1ZmZlclNpemUpKTsKKyAgICBibHVyLT5hcHBseShmaWx0ZXIuZ2V0KCkpOworCisg
ICAgcmV0dXJuIGJsdXI7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGRyYXdCb3Jk
ZXJsZXNzUmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3sKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBJbnRTaXplIHNoYWRvd1NpemU7
CisgICAgaW50IHNoYWRvd0JsdXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisKKyAgICBpZiAo
IWNvbnRleHQtPmdldFNoYWRvdyhzaGFkb3dTaXplLCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcikp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vY2FsY3VsYXRlIGZpbHRlciB2YWx1ZXMKKyAgICBj
YWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgSW50U2l6ZSBz
aGFkb3dCdWZmZXJTaXplOworICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0OworICAgIGZsb2F0IGtl
cm5lbFNpemUgKDAuMCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjYWxjdWxhdGVTaGFkb3dCdWZm
ZXJEaW1lbnNpb25zKHNoYWRvd0J1ZmZlclNpemUsIHNoYWRvd1JlY3QsIGtlcm5lbFNpemUsIHJl
Y3QsIHNoYWRvd1NpemUsIHNoYWRvd0JsdXIpOworCisgICAgLy9kcmF3IHNoYWRvdyBpbnRvIGEg
bmV3IEltYWdlQnVmZmVyCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzaGFkb3dCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNoYWRvd0J1ZmZlclNpemUpOworICAgIEdyYXBoaWNzQ29udGV4
dCogc2hhZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpOworICAgIHNoYWRvd0Nv
bnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KGtlcm5lbFNpemUsIGtlcm5lbFNp
emUpLCByZWN0LnNpemUoKSksIHNoYWRvd0NvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJsdXIgPSBjcmVhdGVTaGFkb3dGaWx0ZXJFZmZlY3QgKHNo
YWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0J1ZmZlclNpemUsIGtlcm5lbFNpemUpOworCisg
ICAgLy9kcmF3IHRoZSBmaWx0ZXIgcmVzdWx0IHRvIHRoZSBjb250ZXh0CisgICAgY29udGV4dC0+
ZHJhd0ltYWdlKGJsdXItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIHNoYWRvd1JlY3QpOworI2Vu
ZGlmCit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTU3MCw2ICs2MTksNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgZHJhd0JvcmRlcmxlc3NSZWN0
U2hhZG93KHRoaXMsIHJlY3QpOwogICAgIGlmIChjb2xvci5hbHBoYSgpKQogICAgICAgICBmaWxs
UmVjdFNvdXJjZU92ZXIobV9kYXRhLT5jciwgcmVjdCwgY29sb3IpOwogfQpAQCAtODQ4LDE1ICs4
OTgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUGxhdGZvcm1TaGFkCiAgICAgLy8g
bGltaXQga2VybmVsIHNpemUgdG8gMTAwMCwgdGhpcyBpcyB3aGF0IENHIGlzIGRvaW5nLgogICAg
IGtlcm5lbFNpemUgPSBzdGQ6Om1pbigxMDAwLmYsIGtlcm5lbFNpemUpOwogCi0gICAgLy8gY3Jl
YXRlIGZpbHRlcgotICAgIFJlZlB0cjxGaWx0ZXI+IGZpbHRlciA9IEltYWdlQnVmZmVyRmlsdGVy
OjpjcmVhdGUoKTsKLSAgICBmaWx0ZXItPnNldFNvdXJjZUltYWdlKGJ1ZmZlci5yZWxlYXNlKCkp
OwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZSA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0
ZSgpOwotICAgIHNvdXJjZS0+c2V0U3ViUmVnaW9uKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNo
YWRvd1JlY3Quc2l6ZSgpKSk7Ci0gICAgc291cmNlLT5zZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYmx1ciA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc291
cmNlLmdldCgpLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplKTsKLSAgICBibHVyLT5zZXRTdWJSZWdp
b24oRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2hhZG93UmVjdC5zaXplKCkpKTsKLSAgICBibHVy
LT5hcHBseShmaWx0ZXIuZ2V0KCkpOworICAgIEludFNpemUgc2hhZG93QnVmZmVyU2l6ZShzaGFk
b3dSZWN0LnNpemUoKS53aWR0aCgpLCBzaGFkb3dSZWN0LnNpemUoKS5oZWlnaHQoKSk7CisgICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYmx1ciA9IGNyZWF0ZVNoYWRvd0ZpbHRlckVmZmVjdCAoYnVm
ZmVyLnJlbGVhc2UoKSwgc2hhZG93QnVmZmVyU2l6ZSwga2VybmVsU2l6ZSk7CiAKICAgICAvLyBN
YXNrIHRoZSBmaWx0ZXIgd2l0aCB0aGUgc2hhZG93IGNvbG9yIGFuZCBkcmF3IGl0IHRvIHRoZSBj
b250ZXh0LgogICAgIC8vIE1hc2tpbmcgbWFrZXMgaXQgcG9zc2libGUgdG8ganVzdCBibHVyIHRo
ZSBhbHBoYSBjaGFubmVsLgpAQCAtMTExMyw3ICsxMTU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXQoY29uc3QgSW50UgogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKICAg
ICBkb3VibGUgeDEsIHkxLCB4MiwgeTI7CiAgICAgY2Fpcm9fY2xpcF9leHRlbnRzKGNyLCAmeDEs
ICZ5MSwgJngyLCAmeTIpOwotICAgIGNhaXJvX3JlY3RhbmdsZShjciwgeDEsIHgyLCB4MiAtIHgx
LCB5MiAtIHkxKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHgxLCB5MSwgeDIgLSB4MSwgeTIg
LSB5MSk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByLngoKSwgci55KCksIHIud2lkdGgoKSwg
ci5oZWlnaHQoKSk7CiAgICAgY2Fpcm9fZmlsbF9ydWxlX3Qgc2F2ZWRGaWxsUnVsZSA9IGNhaXJv
X2dldF9maWxsX3J1bGUoY3IpOwogICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIENBSVJPX0ZJ
TExfUlVMRV9FVkVOX09ERCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43316</attachid>
            <date>2009-11-16 11:20:31 -0800</date>
            <delta_ts>2009-11-16 12:11:32 -0800</delta_ts>
            <desc>Updated webkit-box-shadow support</desc>
            <filename>shadow16.patch</filename>
            <type>text/plain</type>
            <size>2773</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTAzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMTEtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEVuYWJsZSBzdXBwb3J0IGZvciB3ZWJraXQtYm94LXNoYWRvdyBpbiBDYWlybyBidWlsZHMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjEwMi4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGZhc3QvYm94LXNoYWRvdyB0ZXN0cy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDog
IEFkZAorICAgICAgICAgIHN1cHBvcnQgZm9yIGZpbGxSZWN0IHNoYWRvd3MuCisKKwogMjAwOS0x
MS0xNCAgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9u
IDUxMDM5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NSwxMSArNTY1LDM5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBmaWxsUGF0aCgpOwogfQogCitz
dGF0aWMgaW5saW5lIHZvaWQgZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgcmVjdENvbG9y
KQoreworI2lmIEVOQUJMRShGSUxURVJTKQorICAgIEludFNpemUgc2hhZG93U2l6ZTsKKyAgICBp
bnQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKworICAgIGlmICghY29udGV4
dC0+Z2V0U2hhZG93KHNoYWRvd1NpemUsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy9jYWxjdWxhdGUgZmlsdGVyIHZhbHVlcworICAgIGNhaXJvX3Qq
IGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBJbnRTaXplIHNoYWRvd0J1
ZmZlclNpemU7CisgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3Q7CisgICAgZmxvYXQga2VybmVsU2l6
ZSAoMC4wKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNhbGN1bGF0ZVNoYWRvd0J1ZmZlckRpbWVu
c2lvbnMoc2hhZG93QnVmZmVyU2l6ZSwgc2hhZG93UmVjdCwga2VybmVsU2l6ZSwgcmVjdCwgc2hh
ZG93U2l6ZSwgc2hhZG93Qmx1cik7CisKKyAgICAvL2RyYXcgc2hhZG93IGludG8gYSBuZXcgSW1h
Z2VCdWZmZXIKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2hhZG93QnVmZmVyU2l6ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFk
b3dDb250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCk7CisgICAgc2hhZG93Q29udGV4dC0+
ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoa2VybmVsU2l6ZSwga2VybmVsU2l6ZSksIHJl
Y3Quc2l6ZSgpKSwgcmVjdENvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgIGNvbnRleHQt
PmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9y
LCBzaGFkb3dSZWN0LCBrZXJuZWxTaXplKTsKKyNlbmRpZgorfQorCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBkcmF3Qm9yZGVybGVzc1JlY3RTaGFkb3codGhpcywgcmVj
dCwgY29sb3IpOwogICAgIGlmIChjb2xvci5hbHBoYSgpKQogICAgICAgICBmaWxsUmVjdFNvdXJj
ZU92ZXIobV9kYXRhLT5jciwgcmVjdCwgY29sb3IpOwogfQpAQCAtMTExMyw3ICsxMTQxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UgogICAgIGNhaXJvX3QqIGNy
ID0gbV9kYXRhLT5jcjsKICAgICBkb3VibGUgeDEsIHkxLCB4MiwgeTI7CiAgICAgY2Fpcm9fY2xp
cF9leHRlbnRzKGNyLCAmeDEsICZ5MSwgJngyLCAmeTIpOwotICAgIGNhaXJvX3JlY3RhbmdsZShj
ciwgeDEsIHgyLCB4MiAtIHgxLCB5MiAtIHkxKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHgx
LCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByLngoKSwg
ci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiAgICAgY2Fpcm9fZmlsbF9ydWxlX3Qgc2F2
ZWRGaWxsUnVsZSA9IGNhaXJvX2dldF9maWxsX3J1bGUoY3IpOwogICAgIGNhaXJvX3NldF9maWxs
X3J1bGUoY3IsIENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43317</attachid>
            <date>2009-11-16 12:11:32 -0800</date>
            <delta_ts>2009-11-16 12:44:21 -0800</delta_ts>
            <desc>Minor revision, now all shadow effects work.</desc>
            <filename>shadow17.patch</filename>
            <type>text/plain</type>
            <size>3069</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTAzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMTEtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEVuYWJsZSBzdXBwb3J0IGZvciB3ZWJraXQtYm94LXNoYWRvdyBpbiBDYWlybyBidWlsZHMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjEwMi4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGZhc3QvYm94LXNoYWRvdyB0ZXN0cy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDog
IEFkZAorICAgICAgICAgIHN1cHBvcnQgZm9yIGZpbGxSZWN0IHNoYWRvd3MuCisKKwogMjAwOS0x
MS0xNCAgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9u
IDUxMDM5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NSwxMSArNTY1LDM5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBmaWxsUGF0aCgpOwogfQogCitz
dGF0aWMgaW5saW5lIHZvaWQgZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgcmVjdENvbG9y
KQoreworI2lmIEVOQUJMRShGSUxURVJTKQorICAgIEludFNpemUgc2hhZG93U2l6ZTsKKyAgICBp
bnQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKworICAgIGlmICghY29udGV4
dC0+Z2V0U2hhZG93KHNoYWRvd1NpemUsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy9jYWxjdWxhdGUgZmlsdGVyIHZhbHVlcworICAgIGNhaXJvX3Qq
IGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBJbnRTaXplIHNoYWRvd0J1
ZmZlclNpemU7CisgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3Q7CisgICAgZmxvYXQga2VybmVsU2l6
ZSAoMC4wKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNhbGN1bGF0ZVNoYWRvd0J1ZmZlckRpbWVu
c2lvbnMoc2hhZG93QnVmZmVyU2l6ZSwgc2hhZG93UmVjdCwga2VybmVsU2l6ZSwgcmVjdCwgc2hh
ZG93U2l6ZSwgc2hhZG93Qmx1cik7CisKKyAgICAvL2RyYXcgc2hhZG93IGludG8gYSBuZXcgSW1h
Z2VCdWZmZXIKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNoYWRvd0J1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2hhZG93QnVmZmVyU2l6ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFk
b3dDb250ZXh0ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCk7CisgICAgc2hhZG93Q29udGV4dC0+
ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoa2VybmVsU2l6ZSwga2VybmVsU2l6ZSksIHJl
Y3Quc2l6ZSgpKSwgcmVjdENvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgIGNvbnRleHQt
PmNyZWF0ZVBsYXRmb3JtU2hhZG93KHNoYWRvd0J1ZmZlci5yZWxlYXNlKCksIHNoYWRvd0NvbG9y
LCBzaGFkb3dSZWN0LCBrZXJuZWxTaXplKTsKKyNlbmRpZgorfQorCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBkcmF3Qm9yZGVybGVzc1JlY3RTaGFkb3codGhpcywgcmVj
dCwgY29sb3IpOwogICAgIGlmIChjb2xvci5hbHBoYSgpKQogICAgICAgICBmaWxsUmVjdFNvdXJj
ZU92ZXIobV9kYXRhLT5jciwgcmVjdCwgY29sb3IpOwogfQpAQCAtMTExMyw3ICsxMTQxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UgogICAgIGNhaXJvX3QqIGNy
ID0gbV9kYXRhLT5jcjsKICAgICBkb3VibGUgeDEsIHkxLCB4MiwgeTI7CiAgICAgY2Fpcm9fY2xp
cF9leHRlbnRzKGNyLCAmeDEsICZ5MSwgJngyLCAmeTIpOwotICAgIGNhaXJvX3JlY3RhbmdsZShj
ciwgeDEsIHgyLCB4MiAtIHgxLCB5MiAtIHkxKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHgx
LCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByLngoKSwg
ci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiAgICAgY2Fpcm9fZmlsbF9ydWxlX3Qgc2F2
ZWRGaWxsUnVsZSA9IGNhaXJvX2dldF9maWxsX3J1bGUoY3IpOwogICAgIGNhaXJvX3NldF9maWxs
X3J1bGUoY3IsIENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCk7CkBAIC0xMTQxLDYgKzExNjksNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvCiAgICAgYmVnaW5QYXRo
KCk7CiAgICAgYWRkUGF0aChQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHIsIHRvcExlZnQs
IHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwogICAgIHNldENvbG9yKGNyLCBj
b2xvcik7CisgICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21tb24sIHRydWUsIGZhbHNlKTsK
ICAgICBjYWlyb19maWxsKGNyKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0K
</data>
<flag name="review"
          id="25018"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>