<?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>28362</bug_id>
          
          <creation_ts>2009-08-16 12:41:20 -0700</creation_ts>
          <short_desc>SVG Filter feComposite implementation is missing</short_desc>
          <delta_ts>2014-05-12 05:54:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>525.x (Safari 3.1)</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>
          
          <blocked>68469</blocked>
    
    <blocked>26389</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>jeffschiller</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>140589</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-16 12:41:20 -0700</bug_when>
    <thetext>SVG Filter feComposite implementation is missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140597</commentid>
    <comment_count>1</comment_count>
      <attachid>34934</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-16 13:40:27 -0700</bug_when>
    <thetext>Created attachment 34934
feComposite implementation

feComposite implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141152</commentid>
    <comment_count>2</comment_count>
      <attachid>34934</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-08-18 11:52:41 -0700</bug_when>
    <thetext>Comment on attachment 34934
feComposite implementation

r- for various issues:


&gt; +#if !PLATFORM(CG) &amp;&amp; !PLATFORM(SKIA)
&gt; +void inline operatorIn(const PassRefPtr&lt;CanvasPixelArray&gt;&amp; srcPixelArrayA, PassRefPtr&lt;CanvasPixelArray&gt;&amp; srcPixelArrayB)
s/void inline/inline void/
Pass CanvasPixelArray pointers here.

&gt;  {
&gt; +    for (unsigned pixelOffset = 0; pixelOffset &lt; srcPixelArrayA-&gt;length(); pixelOffset++) {
s/pixelOffset++/++pixelOffset/

&gt; +        unsigned pixelByteOffset = pixelOffset * 4;
&gt; +        unsigned char alphaA = srcPixelArrayA-&gt;get(pixelByteOffset + 3);
&gt; +        unsigned char alphaB = srcPixelArrayB-&gt;get(pixelByteOffset + 3);
&gt; +
&gt; +        unsigned char resultB = (alphaA * alphaB) / 255;
&gt; +        srcPixelArrayB-&gt;set(pixelByteOffset + 3, resultB);
&gt; +    }
&gt; +}
&gt; +#endif

It should be made more clear why CG/Skia support clipToImageBuffer, where the rest doesn&apos;t.

&gt; + void inline arithmetic(const PassRefPtr&lt;CanvasPixelArray&gt;&amp; srcPixelArrayA, PassRefPtr&lt;CanvasPixelArray&gt;&amp; srcPixelArrayB,
s/void inline/inline void/
Pass CanvasPixelArray pointers here.

&gt; +    for (unsigned pixelOffset = 0; pixelOffset &lt; srcPixelArrayA-&gt;length(); pixelOffset++) {
s/pixelOffset++/++pixelOffset/

&gt; +        unsigned pixelByteOffset = pixelOffset * 4;
&gt; +        for (unsigned channel = 0; channel &lt; 4; channel++) {
s/channel++/++channel/

&gt; +#if PLATFORM(CG) || PLATFORM(SKIA)
&gt; +                filterContext-&gt;save();
&gt; +                filterContext-&gt;clipToImageBuffer(calculateDrawingRect(m_in2-&gt;subRegion()), m_in2-&gt;resultImage());
&gt; +                filterContext-&gt;drawImage(m_in-&gt;resultImage()-&gt;image(), calculateDrawingRect(m_in-&gt;subRegion()));
&gt; +                filterContext-&gt;restore();
&gt; +#else
&gt; +                IntRect effectADrawingRect = calculateDrawingIntRect(m_in2-&gt;subRegion());
&gt; +                PassRefPtr&lt;CanvasPixelArray&gt; srcPixelArrayA(m_in2-&gt;resultImage()-&gt;getPremultipliedImageData(effectADrawingRect)-&gt;data());
&gt; +
&gt; +                IntRect effectBDrawingRect = calculateDrawingIntRect(m_in-&gt;subRegion());
&gt; +                PassRefPtr&lt;ImageData&gt; imageData(m_in-&gt;resultImage()-&gt;getPremultipliedImageData(effectBDrawingRect));
&gt; +                PassRefPtr&lt;CanvasPixelArray&gt; srcPixelArrayB(imageData-&gt;data());
&gt; +
&gt; +                operatorIn(srcPixelArrayA, srcPixelArrayB);
&gt; +                resultImage()-&gt;putPremultipliedImageData(imageData.get(), IntRect(IntPoint(), resultImage()-&gt;size()), IntPoint());
&gt; +#endif

This code should be encapsulated in a helper function, to avoid spreading CG/Skia defines.
Don&apos;t use &quot;PassRefPtr&lt;CanvasPixelArray&gt; = ...&quot;. As the name indicates, it should only be used when passing around RefPtrs, which is not the case here. Also imageData-&gt;data() returns a plain pointer, no need for you to ref/deref it.

There&apos;s also a style issue in the FECOMPOSITE_OPERATOR_ARITHMETIC case, you&apos;re indenting too much there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141466</commentid>
    <comment_count>3</comment_count>
      <attachid>35118</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-19 06:41:25 -0700</bug_when>
    <thetext>Created attachment 35118
feComposite implementation

I didn&apos;t use the platform switch this time. Gtk and Qt have to support clipToImageBuffer anyway to get support for SVG Masking and some CSS3 related stuff. There are already bug reports for clipToImageBuffer and patches for it (just need clean-up or more improvement). 
I fixed the sytle issues and the ref counting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142162</commentid>
    <comment_count>4</comment_count>
      <attachid>35118</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-08-22 18:53:06 -0700</bug_when>
    <thetext>Comment on attachment 35118
feComposite implementation

r+, some comments, before landing;

&gt; +                  2008 Dirk Schulze &lt;krit@webkit.org&gt;
2009.

&gt; +inline void arithmetic(const RefPtr&lt;CanvasPixelArray&gt;&amp; srcPixelArrayA, CanvasPixelArray*&amp; srcPixelArrayB,
&gt; +                       const float&amp; k1, const float&amp; k2, const float&amp; k3, const float&amp; k4)
s/const float&amp;/float/. We don&apos;t use this style in WebKit, even though it&apos;s correct, there&apos;s no gain.


&gt; +    FloatRect srcRect = FloatRect(0, 0, -1, -1);
Use (0.0f, 0.0f, -1.0f, -1.0f) to be consistent with other callsites.

&gt; +    switch (m_type) {
&gt; +        case FECOMPOSITE_OPERATOR_OVER:
&gt; +        case FECOMPOSITE_OPERATOR_IN:
&gt; +        case FECOMPOSITE_OPERATOR_OUT:
&gt; +        case FECOMPOSITE_OPERATOR_ATOP:
&gt; +        case FECOMPOSITE_OPERATOR_XOR:
&gt; +        case FECOMPOSITE_OPERATOR_ARITHMETIC: {
Indention, case &amp; switch should be aligned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145500</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-08 12:42:55 -0700</bug_when>
    <thetext>Ping?  It&apos;s been a couple weeks w/ no comments from Dirk.  I assume he&apos;s just busy...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145678</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-09-09 00:15:55 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Ping?  It&apos;s been a couple weeks w/ no comments from Dirk.  I assume he&apos;s just
&gt; busy...

Yes thats true. I&apos;m busy with exams :-( 
I hope that I can create the test results and upload the patch with the corrections at the end of this week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148921</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-21 18:02:12 -0700</bug_when>
    <thetext>The patch still applies cleanly. :)  But we&apos;re still waiting on Krit. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151026</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-09-29 13:40:30 -0700</bug_when>
    <thetext>You&apos;re impatient Eric ;-) But you&apos;re right. Landed in r48896. Sorry for the delay.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34934</attachid>
            <date>2009-08-16 13:40:27 -0700</date>
            <delta_ts>2009-08-19 06:41:25 -0700</delta_ts>
            <desc>feComposite implementation</desc>
            <filename>feComposite.patch</filename>
            <type>text/plain</type>
            <size>10994</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzM0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMDgtMTYgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkcg
RmlsdGVyIGZlQ29tcG9zaXRlIGltcGxlbWVudGF0aW9uIGlzIG1pc3NpbmcKKyAgICAgICAgW2h0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODM2Ml0KKworICAgICAgICBm
ZUNvbXBvc2l0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgU1ZHLgorCisgICAgICAgIFRlc3Q6IHN2Zy9m
aWx0ZXJzL2ZlQ29tcG9zaXRlLnN2ZworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvckluKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFyaXRobWV0aWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6OmFwcGx5KToKKwogMjAwOS0wOC0xNiAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bmlrb2xhcy56
aW1tZXJtYW5uQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9yZ2Ug
U3RhaWtvcy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gNDczMjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIs
NyBAQAogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDggRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI1LDEw
IEBACiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKIAorI2lu
Y2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC05Nyw4ICsxMDEsMTAyIEBAIHZvaWQgRkVDb21wb3NpdGU6OnNldEs0
KGZsb2F0IGs0KQogICAgIG1fazQgPSBrNDsKIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHko
RmlsdGVyKikKKyNpZiAhUExBVEZPUk0oQ0cpICYmICFQTEFURk9STShTS0lBKQordm9pZCBpbmxp
bmUgb3BlcmF0b3JJbihjb25zdCBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+JiBzcmNQaXhl
bEFycmF5QSwgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiYgc3JjUGl4ZWxBcnJheUIpCiB7
CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgc3JjUGl4
ZWxBcnJheUEtPmxlbmd0aCgpOyBwaXhlbE9mZnNldCsrKSB7CisgICAgICAgIHVuc2lnbmVkIHBp
eGVsQnl0ZU9mZnNldCA9IHBpeGVsT2Zmc2V0ICogNDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBh
bHBoYUEgPSBzcmNQaXhlbEFycmF5QS0+Z2V0KHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAg
ICB1bnNpZ25lZCBjaGFyIGFscGhhQiA9IHNyY1BpeGVsQXJyYXlCLT5nZXQocGl4ZWxCeXRlT2Zm
c2V0ICsgMyk7CisKKyAgICAgICAgdW5zaWduZWQgY2hhciByZXN1bHRCID0gKGFscGhhQSAqIGFs
cGhhQikgLyAyNTU7CisgICAgICAgIHNyY1BpeGVsQXJyYXlCLT5zZXQocGl4ZWxCeXRlT2Zmc2V0
ICsgMywgcmVzdWx0Qik7CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgaW5saW5lIGFyaXRobWV0
aWMoY29uc3QgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiYgc3JjUGl4ZWxBcnJheUEsIFBh
c3NSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4mIHNyY1BpeGVsQXJyYXlCLAorICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBmbG9hdCYgazEsIGNvbnN0IGZsb2F0JiBrMiwgY29uc3QgZmxvYXQm
IGszLCBjb25zdCBmbG9hdCYgazQpCit7CisgICAgZmxvYXQgc2NhbGVkSzEgPSBrMSAvIDI1NS5m
OworICAgIGZsb2F0IHNjYWxlZEs0ID0gazQgKiAyNTUuZjsKKyAgICBmb3IgKHVuc2lnbmVkIHBp
eGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCk7IHBp
eGVsT2Zmc2V0KyspIHsKKyAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gcGl4ZWxP
ZmZzZXQgKiA0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwg
NDsgY2hhbm5lbCsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gc3JjUGl4ZWxB
cnJheUEtPmdldChwaXhlbEJ5dGVPZmZzZXQgKyBjaGFubmVsKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgaTIgPSBzcmNQaXhlbEFycmF5Qi0+Z2V0KHBpeGVsQnl0ZU9mZnNldCArIGNoYW5u
ZWwpOworCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdCA9IHNjYWxlZEsxICogaTEg
KiBpMiArIGsyICogaTEgKyBrMyAqIGkyICsgc2NhbGVkSzQ7CisgICAgICAgICAgICBpZiAoY2hh
bm5lbCA9PSAzICYmIGkxID09IDAgJiYgaTIgPT0gMCkKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSAwOworICAgICAgICAgICAgc3JjUGl4ZWxBcnJheUItPnNldChwaXhlbEJ5dGVPZmZzZXQgKyBj
aGFubmVsLCByZXN1bHQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEZFQ29tcG9zaXRl
OjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBtX2luLT5hcHBseShmaWx0ZXIpOworICAg
IG1faW4yLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghbV9pbi0+cmVzdWx0SW1hZ2UoKSB8fCAh
bV9pbjItPnJlc3VsdEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29u
dGV4dCogZmlsdGVyQ29udGV4dCA9IGdldEVmZmVjdENvbnRleHQoKTsKKyAgICBpZiAoIWZpbHRl
ckNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCBzcmNSZWN0ID0gRmxv
YXRSZWN0KDAsIDAsIC0xLCAtMSk7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgorICAgICAgICAgICAgZmlsdGVyQ29udGV4dC0+
ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdS
ZWN0KG1faW4tPnN1YlJlZ2lvbigpKSk7CisgICAgICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3
SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0
KG1faW4yLT5zdWJSZWdpb24oKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKKyNpZiBQTEFURk9STShDRykgfHwgUExBVEZPUk0o
U0tJQSkKKyAgICAgICAgICAgICAgICBmaWx0ZXJDb250ZXh0LT5zYXZlKCk7CisgICAgICAgICAg
ICAgICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoY2FsY3VsYXRlRHJhd2luZ1Jl
Y3QobV9pbjItPnN1YlJlZ2lvbigpKSwgbV9pbjItPnJlc3VsdEltYWdlKCkpOworICAgICAgICAg
ICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFn
ZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJSZWdpb24oKSkpOworICAgICAgICAg
ICAgICAgIGZpbHRlckNvbnRleHQtPnJlc3RvcmUoKTsKKyNlbHNlCisgICAgICAgICAgICAgICAg
SW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2lu
Mi0+c3ViUmVnaW9uKCkpOworICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzUGl4ZWxB
cnJheT4gc3JjUGl4ZWxBcnJheUEobV9pbjItPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoZWZmZWN0QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKKworICAgICAgICAgICAg
ICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3Qo
bV9pbi0+c3ViUmVnaW9uKCkpOworICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBpbWFnZURhdGEobV9pbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShlZmZlY3RCRHJhd2luZ1JlY3QpKTsKKyAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPENhbnZh
c1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlCKGltYWdlRGF0YS0+ZGF0YSgpKTsKKworICAgICAg
ICAgICAgICAgIG9wZXJhdG9ySW4oc3JjUGl4ZWxBcnJheUEsIHNyY1BpeGVsQXJyYXlCKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGlt
YWdlRGF0YS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkp
LCBJbnRQb2ludCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAgICAgICAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1
bGF0ZURyYXdpbmdSZWN0KG1faW4tPnN1YlJlZ2lvbigpKSk7CisgICAgICAgICAgICBmaWx0ZXJD
b250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0
ZURyYXdpbmdSZWN0KG1faW4yLT5zdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZURlc3Rp
bmF0aW9uT3V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZFQ09NUE9TSVRF
X09QRVJBVE9SX0FUT1A6CisgICAgICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9p
bjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5z
dWJSZWdpb24oKSkpOworICAgICAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4t
PnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4tPnN1YlJl
Z2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6CisgICAgICAgICAgICBm
aWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNh
bGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zdWJSZWdpb24oKSkpOworICAgICAgICAgICAgZmls
dGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1
bGF0ZURyYXdpbmdSZWN0KG1faW4tPnN1YlJlZ2lvbigpKSwgc3JjUmVjdCwgQ29tcG9zaXRlWE9S
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0FSSVRITUVUSUM6IHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVj
dCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnN1YlJlZ2lvbigpKTsKKyAgICAgICAg
ICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlBKG1faW4t
PnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0QURyYXdpbmdS
ZWN0KS0+ZGF0YSgpKTsKKworICAgICAgICAgICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdS
ZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbjItPnN1YlJlZ2lvbigpKTsKKyAgICAg
ICAgICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhKG1faW4yLT5yZXN1bHRJ
bWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCkpOwor
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJh
eUIoaW1hZ2VEYXRhLT5kYXRhKCkpOworCisgICAgICAgICAgICAgICAgYXJpdGhtZXRpYyhzcmNQ
aXhlbEFycmF5QSwgc3JjUGl4ZWxBcnJheUIsIG1fazEsIG1fazIsIG1fazMsIG1fazQpOworICAg
ICAgICAgICAgICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1h
Z2VEYXRhLmdldCgpLCBJbnRSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSks
IEludFBvaW50KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgRkVDb21wb3Np
dGU6OmR1bXAoKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDczNDApCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMSBAQAorMjAwOS0wOC0xNiAgRGlyayBT
Y2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3QgZm9yIFNWRyBmaWx0ZXIgZWZmZWN0IGZlQ29tcG9zaXRl
LgorCisgICAgICAgICogc3ZnL2ZpbHRlcnMvZmVDb21wb3NpdGUuc3ZnOiBBZGRlZC4KKwogMjAw
OS0wOC0xNiAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bmlrb2xhcy56aW1tZXJtYW5uQHRvcmNobW9i
aWxlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuIEFkZCBtaXNzaW5nIFdNTCBzcGVjaWZp
YyBsYXlvdXQgdGVzdCByZXN1bHQuCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvZmlsdGVycy9mZUNv
bXBvc2l0ZS5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvZmVDb21w
b3NpdGUuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvZmVDb21w
b3NpdGUuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQg
U1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcx
MS5kdGQiPgorPHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgdmVyc2lvbj0iMS4xIiB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgorPGRlZnM+Cis8ZmlsdGVyIGlkPSJvdmVy
IiBmaWx0ZXJVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHByaW1pdGl2ZVVuaXRzPSJvYmplY3RC
b3VuZGluZ0JveCIgeD0iMCUiIHk9IjAlIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj4KKyAg
ICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0iI2YwMCIgZmxvb2Qtb3BhY2l0eT0iMC41IiByZXN1bHQ9
InJlczEiIHg9IjAlIiB5PSIwJSIgd2lkdGg9Ijc1JSIgaGVpZ2h0PSI3NSUiLz4KKyAgICA8ZmVG
bG9vZCBmbG9vZC1jb2xvcj0iIzAwZiIgZmxvb2Qtb3BhY2l0eT0iMC41IiByZXN1bHQ9InJlczIi
IHg9IjI1JSIgeT0iMjUlIiB3aWR0aD0iNzUlIiBoZWlnaHQ9Ijc1JSIvPgorICAgIDxmZUNvbXBv
c2l0ZSBpbjI9InJlczEiIGluPSJyZXMyIiBvcGVyYXRvcj0ib3ZlciIvPgorPC9maWx0ZXI+Cis8
ZmlsdGVyIGlkPSJpbiIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBwcmltaXRpdmVV
bml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHg9IjAlIiB5PSIwJSIgd2lkdGg9IjEwMCUiIGhlaWdo
dD0iMTAwJSI+CisgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiNmMDAiIGZsb29kLW9wYWNpdHk9
IjAuNSIgcmVzdWx0PSJyZXMxIiB4PSIwJSIgeT0iMCUiIHdpZHRoPSI3NSUiIGhlaWdodD0iNzUl
Ii8+CisgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiMwMGYiIGZsb29kLW9wYWNpdHk9IjAuNSIg
cmVzdWx0PSJyZXMyIiB4PSIyNSUiIHk9IjI1JSIgd2lkdGg9Ijc1JSIgaGVpZ2h0PSI3NSUiLz4K
KyAgICA8ZmVDb21wb3NpdGUgaW4yPSJyZXMxIiBpbj0icmVzMiIgb3BlcmF0b3I9ImluIi8+Cis8
L2ZpbHRlcj4KKzxmaWx0ZXIgaWQ9Im91dCIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94
IiBwcmltaXRpdmVVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHg9IjAlIiB5PSIwJSIgd2lkdGg9
IjEwMCUiIGhlaWdodD0iMTAwJSI+CisgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiNmMDAiIGZs
b29kLW9wYWNpdHk9IjAuNSIgcmVzdWx0PSJyZXMxIiB4PSIwJSIgeT0iMCUiIHdpZHRoPSI3NSUi
IGhlaWdodD0iNzUlIi8+CisgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiMwMGYiIGZsb29kLW9w
YWNpdHk9IjAuNSIgcmVzdWx0PSJyZXMyIiB4PSIyNSUiIHk9IjI1JSIgd2lkdGg9Ijc1JSIgaGVp
Z2h0PSI3NSUiLz4KKyAgICA8ZmVDb21wb3NpdGUgaW4yPSJyZXMxIiBpbj0icmVzMiIgb3BlcmF0
b3I9Im91dCIvPgorPC9maWx0ZXI+Cis8ZmlsdGVyIGlkPSJhdG9wIiBmaWx0ZXJVbml0cz0ib2Jq
ZWN0Qm91bmRpbmdCb3giIHByaW1pdGl2ZVVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeD0iMCUi
IHk9IjAlIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj4KKyAgICA8ZmVGbG9vZCBmbG9vZC1j
b2xvcj0iI2YwMCIgZmxvb2Qtb3BhY2l0eT0iMC41IiByZXN1bHQ9InJlczEiIHg9IjAlIiB5PSIw
JSIgd2lkdGg9Ijc1JSIgaGVpZ2h0PSI3NSUiLz4KKyAgICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0i
IzAwZiIgZmxvb2Qtb3BhY2l0eT0iMC41IiByZXN1bHQ9InJlczIiIHg9IjI1JSIgeT0iMjUlIiB3
aWR0aD0iNzUlIiBoZWlnaHQ9Ijc1JSIvPgorICAgIDxmZUNvbXBvc2l0ZSBpbjI9InJlczEiIGlu
PSJyZXMyIiBvcGVyYXRvcj0iYXRvcCIvPgorPC9maWx0ZXI+Cis8ZmlsdGVyIGlkPSJ4b3IiIGZp
bHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgcHJpbWl0aXZlVW5pdHM9Im9iamVjdEJvdW5k
aW5nQm94IiB4PSIwJSIgeT0iMCUiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiPgorICAgIDxm
ZUZsb29kIGZsb29kLWNvbG9yPSIjZjAwIiBmbG9vZC1vcGFjaXR5PSIwLjUiIHJlc3VsdD0icmVz
MSIgeD0iMCUiIHk9IjAlIiB3aWR0aD0iNzUlIiBoZWlnaHQ9Ijc1JSIvPgorICAgIDxmZUZsb29k
IGZsb29kLWNvbG9yPSIjMDBmIiBmbG9vZC1vcGFjaXR5PSIwLjUiIHJlc3VsdD0icmVzMiIgeD0i
MjUlIiB5PSIyNSUiIHdpZHRoPSI3NSUiIGhlaWdodD0iNzUlIi8+CisgICAgPGZlQ29tcG9zaXRl
IGluMj0icmVzMSIgaW49InJlczIiIG9wZXJhdG9yPSJ4b3IiLz4KKzwvZmlsdGVyPgorPGZpbHRl
ciBpZD0iYXJpdGhtZXRpYyIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBwcmltaXRp
dmVVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHg9IjAlIiB5PSIwJSIgd2lkdGg9IjEwMCUiIGhl
aWdodD0iMTAwJSI+CisgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiNmMDAiIGZsb29kLW9wYWNp
dHk9IjAuMiIgcmVzdWx0PSJyZXMxIiB4PSIwJSIgeT0iMCUiIHdpZHRoPSI3NSUiIGhlaWdodD0i
NzUlIi8+CisgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiMwMGYiIGZsb29kLW9wYWNpdHk9IjAu
NSIgcmVzdWx0PSJyZXMyIiB4PSIyNSUiIHk9IjI1JSIgd2lkdGg9Ijc1JSIgaGVpZ2h0PSI3NSUi
Lz4KKyAgICA8ZmVDb21wb3NpdGUgaW4yPSJyZXMxIiBpbj0icmVzMiIgb3BlcmF0b3I9ImFyaXRo
bWV0aWMiIGsxPSIuNSIgazI9Ii41IiBrMz0iLjUiIGs0PSIuNSIvPgorPC9maWx0ZXI+Cis8L2Rl
ZnM+Cis8cmVjdCB4PSIxMCIgeT0iMTAiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIgZmlsdGVyPSJ1
cmwoI292ZXIpIi8+Cis8dGV4dCB4PSIxMCIgeT0iOTAiPm92ZXI8L3RleHQ+Cis8cmVjdCB4PSI3
MCIgeT0iMTAiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIgZmlsdGVyPSJ1cmwoI2luKSIvPgorPHRl
eHQgeD0iNzAiIHk9IjkwIj5pbjwvdGV4dD4KKzxyZWN0IHg9IjEzMCIgeT0iMTAiIHdpZHRoPSI1
MCIgaGVpZ2h0PSI1MCIgZmlsdGVyPSJ1cmwoI291dCkiLz4KKzx0ZXh0IHg9IjEzMCIgeT0iOTAi
Pm91dDwvdGV4dD4KKzxyZWN0IHg9IjEwIiB5PSIxMTAiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIg
ZmlsdGVyPSJ1cmwoI2F0b3ApIi8+Cis8dGV4dCB4PSIxMCIgeT0iMTkwIj5hdG9wPC90ZXh0Pgor
PHJlY3QgeD0iNzAiIHk9IjExMCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiBmaWx0ZXI9InVybCgj
eG9yKSIvPgorPHRleHQgeD0iNzAiIHk9IjE5MCI+eG9yPC90ZXh0PgorPHJlY3QgeD0iMTMwIiB5
PSIxMTAiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIgZmlsdGVyPSJ1cmwoI2FyaXRobWV0aWMpIi8+
Cis8dGV4dCB4PSIxMzAiIHk9IjE5MCI+YXJpdGhtZXRpYzwvdGV4dD4KKzwvc3ZnPgo=
</data>
<flag name="review"
          id="19147"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35118</attachid>
            <date>2009-08-19 06:41:25 -0700</date>
            <delta_ts>2009-08-22 18:53:06 -0700</delta_ts>
            <desc>feComposite implementation</desc>
            <filename>feComposite.patch</filename>
            <type>text/plain</type>
            <size>9390</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzQ5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMDgtMTkgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkcg
RmlsdGVyIGZlQ29tcG9zaXRlIGltcGxlbWVudGF0aW9uIGlzIG1pc3NpbmcKKyAgICAgICAgW2h0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODM2Ml0KKworICAgICAgICBm
ZUNvbXBvc2l0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgU1ZHLgorCisgICAgICAgIFRlc3Q6IHN2Zy9m
aWx0ZXJzL2ZlQ29tcG9zaXRlLnN2ZworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseSk6CisKIDIwMDktMDgtMTggIE1hY2ll
aiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2
ZXIgSHVudC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gNDc0NTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIs
NyBAQAogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDggRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI1LDEw
IEBACiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKIAorI2lu
Y2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC05Nyw4ICsxMDEsNzQgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6c2V0SzQo
ZmxvYXQgazQpCiAgICAgbV9rNCA9IGs0OwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjphcHBseShG
aWx0ZXIqKQoraW5saW5lIHZvaWQgYXJpdGhtZXRpYyhjb25zdCBSZWZQdHI8Q2FudmFzUGl4ZWxB
cnJheT4mIHNyY1BpeGVsQXJyYXlBLCBDYW52YXNQaXhlbEFycmF5KiYgc3JjUGl4ZWxBcnJheUIs
CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0JiBrMSwgY29uc3QgZmxvYXQmIGsy
LCBjb25zdCBmbG9hdCYgazMsIGNvbnN0IGZsb2F0JiBrNCkKIHsKKyAgICBmbG9hdCBzY2FsZWRL
MSA9IGsxIC8gMjU1LmY7CisgICAgZmxvYXQgc2NhbGVkSzQgPSBrNCAqIDI1NS5mOworICAgIGZv
ciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHNyY1BpeGVsQXJyYXlB
LT5sZW5ndGgoKTsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
YW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyIGkxID0gc3JjUGl4ZWxBcnJheUEtPmdldChwaXhlbE9mZnNldCArIGNoYW5uZWwpOwor
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9IHNyY1BpeGVsQXJyYXlCLT5nZXQocGl4ZWxP
ZmZzZXQgKyBjaGFubmVsKTsKKworICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZXN1bHQgPSBz
Y2FsZWRLMSAqIGkxICogaTIgKyBrMiAqIGkxICsgazMgKiBpMiArIHNjYWxlZEs0OworICAgICAg
ICAgICAgaWYgKGNoYW5uZWwgPT0gMyAmJiBpMSA9PSAwICYmIGkyID09IDApCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIHNyY1BpeGVsQXJyYXlCLT5zZXQocGl4ZWxP
ZmZzZXQgKyBjaGFubmVsLCByZXN1bHQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEZF
Q29tcG9zaXRlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBtX2luLT5hcHBseShmaWx0
ZXIpOworICAgIG1faW4yLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghbV9pbi0+cmVzdWx0SW1h
Z2UoKSB8fCAhbV9pbjItPnJlc3VsdEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdy
YXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGdldEVmZmVjdENvbnRleHQoKTsKKyAgICBp
ZiAoIWZpbHRlckNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCBzcmNS
ZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSk7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAg
ICAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgorICAgICAgICAgICAgZmlsdGVy
Q29udGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0
ZURyYXdpbmdSZWN0KG1faW4tPnN1YlJlZ2lvbigpKSk7CisgICAgICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURy
YXdpbmdSZWN0KG1faW4yLT5zdWJSZWdpb24oKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46CisgICAgICAgICAgICBmaWx0ZXJDb250
ZXh0LT5zYXZlKCk7CisgICAgICAgICAgICBmaWx0ZXJDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZl
cihjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpLCBtX2luMi0+cmVzdWx0
SW1hZ2UoKSk7CisgICAgICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVz
dWx0SW1hZ2UoKS0+aW1hZ2UoKSwgY2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c3ViUmVnaW9u
KCkpKTsKKyAgICAgICAgICAgIGZpbHRlckNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09VVDoKKyAgICAgICAg
ICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgp
LCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJSZWdpb24oKSkpOworICAgICAgICAgICAg
ZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBj
YWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpLCBzcmNSZWN0LCBDb21wb3Np
dGVEZXN0aW5hdGlvbk91dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgICAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0lt
YWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdCht
X2luMi0+c3ViUmVnaW9uKCkpKTsKKyAgICAgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFn
ZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2lu
LT5zdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgorICAgICAg
ICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5pbWFn
ZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c3ViUmVnaW9uKCkpKTsKKyAgICAgICAg
ICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgp
LCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJSZWdpb24oKSksIHNyY1JlY3QsIENvbXBv
c2l0ZVhPUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BUklUSE1FVElDOiB7CisgICAgICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5n
UmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnN1YlJlZ2lvbigpKTsKKyAgICAg
ICAgICAgIFJlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShtX2luLT5yZXN1
bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEFEcmF3aW5nUmVjdCkt
PmRhdGEoKSk7CisKKyAgICAgICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gY2Fs
Y3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbjItPnN1YlJlZ2lvbigpKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YShtX2luMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShlZmZlY3RCRHJhd2luZ1JlY3QpKTsKKyAgICAgICAgICAgIENhbnZh
c1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXlCKGltYWdlRGF0YS0+ZGF0YSgpKTsKKworICAgICAg
ICAgICAgYXJpdGhtZXRpYyhzcmNQaXhlbEFycmF5QSwgc3JjUGl4ZWxBcnJheUIsIG1fazEsIG1f
azIsIG1fazMsIG1fazQpOworICAgICAgICAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVzdWx0
SW1hZ2UoKS0+c2l6ZSgpKSwgSW50UG9pbnQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KIH0K
IAogdm9pZCBGRUNvbXBvc2l0ZTo6ZHVtcCgpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NzQ1NSkKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExIEBACisy
MDA5LTA4LTE5ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBmb3IgU1ZHIGZpbHRlciBl
ZmZlY3QgZmVDb21wb3NpdGUuCisKKyAgICAgICAgKiBzdmcvZmlsdGVycy9mZUNvbXBvc2l0ZS5z
dmc6IEFkZGVkLgorCiAyMDA5LTA4LTE4ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgVXBkYXRlIFNub3dMZW9wYXJkLXNwZWNpZmljIGxheW91dCB0ZXN0IHJlc3VsdHMg
YWZ0ZXIgcjQ3NDQwLgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2ZpbHRlcnMvZmVDb21wb3NpdGUu
c3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9maWx0ZXJzL2ZlQ29tcG9zaXRlLnN2
ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9maWx0ZXJzL2ZlQ29tcG9zaXRlLnN2
ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFu
ZGFsb25lPSJubyI/PgorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEv
L0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4K
Kzxzdmcgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KKzxkZWZzPgorPGZpbHRlciBpZD0ib3ZlciIgZmlsdGVy
VW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBwcmltaXRpdmVVbml0cz0ib2JqZWN0Qm91bmRpbmdC
b3giIHg9IjAlIiB5PSIwJSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+CisgICAgPGZlRmxv
b2QgZmxvb2QtY29sb3I9IiNmMDAiIGZsb29kLW9wYWNpdHk9IjAuNSIgcmVzdWx0PSJyZXMxIiB4
PSIwJSIgeT0iMCUiIHdpZHRoPSI3NSUiIGhlaWdodD0iNzUlIi8+CisgICAgPGZlRmxvb2QgZmxv
b2QtY29sb3I9IiMwMGYiIGZsb29kLW9wYWNpdHk9IjAuNSIgcmVzdWx0PSJyZXMyIiB4PSIyNSUi
IHk9IjI1JSIgd2lkdGg9Ijc1JSIgaGVpZ2h0PSI3NSUiLz4KKyAgICA8ZmVDb21wb3NpdGUgaW4y
PSJyZXMxIiBpbj0icmVzMiIgb3BlcmF0b3I9Im92ZXIiLz4KKzwvZmlsdGVyPgorPGZpbHRlciBp
ZD0iaW4iIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgcHJpbWl0aXZlVW5pdHM9Im9i
amVjdEJvdW5kaW5nQm94IiB4PSIwJSIgeT0iMCUiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUi
PgorICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjZjAwIiBmbG9vZC1vcGFjaXR5PSIwLjUiIHJl
c3VsdD0icmVzMSIgeD0iMCUiIHk9IjAlIiB3aWR0aD0iNzUlIiBoZWlnaHQ9Ijc1JSIvPgorICAg
IDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDBmIiBmbG9vZC1vcGFjaXR5PSIwLjUiIHJlc3VsdD0i
cmVzMiIgeD0iMjUlIiB5PSIyNSUiIHdpZHRoPSI3NSUiIGhlaWdodD0iNzUlIi8+CisgICAgPGZl
Q29tcG9zaXRlIGluMj0icmVzMSIgaW49InJlczIiIG9wZXJhdG9yPSJpbiIvPgorPC9maWx0ZXI+
Cis8ZmlsdGVyIGlkPSJvdXQiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgcHJpbWl0
aXZlVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiB4PSIwJSIgeT0iMCUiIHdpZHRoPSIxMDAlIiBo
ZWlnaHQ9IjEwMCUiPgorICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjZjAwIiBmbG9vZC1vcGFj
aXR5PSIwLjUiIHJlc3VsdD0icmVzMSIgeD0iMCUiIHk9IjAlIiB3aWR0aD0iNzUlIiBoZWlnaHQ9
Ijc1JSIvPgorICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDBmIiBmbG9vZC1vcGFjaXR5PSIw
LjUiIHJlc3VsdD0icmVzMiIgeD0iMjUlIiB5PSIyNSUiIHdpZHRoPSI3NSUiIGhlaWdodD0iNzUl
Ii8+CisgICAgPGZlQ29tcG9zaXRlIGluMj0icmVzMSIgaW49InJlczIiIG9wZXJhdG9yPSJvdXQi
Lz4KKzwvZmlsdGVyPgorPGZpbHRlciBpZD0iYXRvcCIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5k
aW5nQm94IiBwcmltaXRpdmVVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHg9IjAlIiB5PSIwJSIg
d2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+CisgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiNm
MDAiIGZsb29kLW9wYWNpdHk9IjAuNSIgcmVzdWx0PSJyZXMxIiB4PSIwJSIgeT0iMCUiIHdpZHRo
PSI3NSUiIGhlaWdodD0iNzUlIi8+CisgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiMwMGYiIGZs
b29kLW9wYWNpdHk9IjAuNSIgcmVzdWx0PSJyZXMyIiB4PSIyNSUiIHk9IjI1JSIgd2lkdGg9Ijc1
JSIgaGVpZ2h0PSI3NSUiLz4KKyAgICA8ZmVDb21wb3NpdGUgaW4yPSJyZXMxIiBpbj0icmVzMiIg
b3BlcmF0b3I9ImF0b3AiLz4KKzwvZmlsdGVyPgorPGZpbHRlciBpZD0ieG9yIiBmaWx0ZXJVbml0
cz0ib2JqZWN0Qm91bmRpbmdCb3giIHByaW1pdGl2ZVVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIg
eD0iMCUiIHk9IjAlIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj4KKyAgICA8ZmVGbG9vZCBm
bG9vZC1jb2xvcj0iI2YwMCIgZmxvb2Qtb3BhY2l0eT0iMC41IiByZXN1bHQ9InJlczEiIHg9IjAl
IiB5PSIwJSIgd2lkdGg9Ijc1JSIgaGVpZ2h0PSI3NSUiLz4KKyAgICA8ZmVGbG9vZCBmbG9vZC1j
b2xvcj0iIzAwZiIgZmxvb2Qtb3BhY2l0eT0iMC41IiByZXN1bHQ9InJlczIiIHg9IjI1JSIgeT0i
MjUlIiB3aWR0aD0iNzUlIiBoZWlnaHQ9Ijc1JSIvPgorICAgIDxmZUNvbXBvc2l0ZSBpbjI9InJl
czEiIGluPSJyZXMyIiBvcGVyYXRvcj0ieG9yIi8+Cis8L2ZpbHRlcj4KKzxmaWx0ZXIgaWQ9ImFy
aXRobWV0aWMiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgcHJpbWl0aXZlVW5pdHM9
Im9iamVjdEJvdW5kaW5nQm94IiB4PSIwJSIgeT0iMCUiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEw
MCUiPgorICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjZjAwIiBmbG9vZC1vcGFjaXR5PSIwLjIi
IHJlc3VsdD0icmVzMSIgeD0iMCUiIHk9IjAlIiB3aWR0aD0iNzUlIiBoZWlnaHQ9Ijc1JSIvPgor
ICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDBmIiBmbG9vZC1vcGFjaXR5PSIwLjUiIHJlc3Vs
dD0icmVzMiIgeD0iMjUlIiB5PSIyNSUiIHdpZHRoPSI3NSUiIGhlaWdodD0iNzUlIi8+CisgICAg
PGZlQ29tcG9zaXRlIGluMj0icmVzMSIgaW49InJlczIiIG9wZXJhdG9yPSJhcml0aG1ldGljIiBr
MT0iLjUiIGsyPSIuNSIgazM9Ii41IiBrND0iLjUiLz4KKzwvZmlsdGVyPgorPC9kZWZzPgorPHJl
Y3QgeD0iMTAiIHk9IjEwIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbHRlcj0idXJsKCNvdmVy
KSIvPgorPHRleHQgeD0iMTAiIHk9IjkwIj5vdmVyPC90ZXh0PgorPHJlY3QgeD0iNzAiIHk9IjEw
IiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbHRlcj0idXJsKCNpbikiLz4KKzx0ZXh0IHg9Ijcw
IiB5PSI5MCI+aW48L3RleHQ+Cis8cmVjdCB4PSIxMzAiIHk9IjEwIiB3aWR0aD0iNTAiIGhlaWdo
dD0iNTAiIGZpbHRlcj0idXJsKCNvdXQpIi8+Cis8dGV4dCB4PSIxMzAiIHk9IjkwIj5vdXQ8L3Rl
eHQ+Cis8cmVjdCB4PSIxMCIgeT0iMTEwIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbHRlcj0i
dXJsKCNhdG9wKSIvPgorPHRleHQgeD0iMTAiIHk9IjE5MCI+YXRvcDwvdGV4dD4KKzxyZWN0IHg9
IjcwIiB5PSIxMTAiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIgZmlsdGVyPSJ1cmwoI3hvcikiLz4K
Kzx0ZXh0IHg9IjcwIiB5PSIxOTAiPnhvcjwvdGV4dD4KKzxyZWN0IHg9IjEzMCIgeT0iMTEwIiB3
aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbHRlcj0idXJsKCNhcml0aG1ldGljKSIvPgorPHRleHQg
eD0iMTMwIiB5PSIxOTAiPmFyaXRobWV0aWM8L3RleHQ+Cis8L3N2Zz4K
</data>
<flag name="review"
          id="19309"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
    <flag name="commit-queue"
          id="19454"
          type_id="3"
          status="-"
          setter="zimmermann"
    />
          </attachment>
      

    </bug>

</bugzilla>