<?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>24468</bug_id>
          
          <creation_ts>2009-03-09 13:25:17 -0700</creation_ts>
          <short_desc>[Qt] Big performance improvement to FontQt.cpp and hence all text drawing and layouting in QtWebKit</short_desc>
          <delta_ts>2011-03-27 06:37:14 -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>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Performance, Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Treat">manyoso</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gzjjgod</cc>
    
    <cc>hausmann</cc>
    
    <cc>jesus</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>robert</cc>
    
    <cc>staikos</cc>
    
    <cc>vestbo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>112885</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-03-09 13:25:17 -0700</bug_when>
    <thetext>Hi,

Currently the QtWebKit class FontQt.cpp is using a very expensive method to effectively inform Qt&apos;s text engine that it should substitute glyphs for particular unicode characters with another unicode character.  Right now FontQt.cpp is reconstructing a QString based on a TextRun and then detaching and memcpy&apos;ing  whenever it encounters a character that should be treated differently by Qt&apos;s text engine according to WebCore::Font::treatAsSpace and WebCore::Font::treatAsZeroWidthSpace.

Profiling shows that this is one of the top ten most expensive methods in all of QtWebKit right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112889</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-03-09 13:27:54 -0700</bug_when>
    <thetext>...
The patches attached improve this situation by *never* detaching or recreating a new QString for these operations on a TextRun.

The first patch is a patch to Qt itself that exposes two new methods in the QFont class which allow an application to pass a substitution map to Qt&apos;s underlying text engine.  I&apos;ve only implemented the patch for the Freetype engine in Qt, but other engines could/should be made to honor these substitutions.

The second patch is a patch to FontQt.cpp in WebCore that utilizes the new API in Qfont.

Together these two patches effectively eliminate the cost of the current method of doing things in FontQt.cpp.

Cheers,
Adam</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112891</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-03-09 13:30:15 -0700</bug_when>
    <thetext>*** Bug 24469 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112892</commentid>
    <comment_count>3</comment_count>
      <attachid>28419</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-03-09 13:31:10 -0700</bug_when>
    <thetext>Created attachment 28419
Patch for Qt that adds API to QFont</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112893</commentid>
    <comment_count>4</comment_count>
      <attachid>28420</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-03-09 13:32:50 -0700</bug_when>
    <thetext>Created attachment 28420
Patch to QtWebKit that takes advantage of new API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113007</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-03-10 09:41:47 -0700</bug_when>
    <thetext>Note: for the QtWebKit patch to apply cleanly, you&apos;re webkit branch will need to have applied the change here first:

http://trac.webkit.org/changeset/41527</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113141</commentid>
    <comment_count>6</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-03-11 02:15:55 -0700</bug_when>
    <thetext>Cool. Is that somehow possible to share the table with Font.cpp without runtime costs? In RenderThemeQt we have a style painter which is setting and clearing the QStyle. Could something like this be used for the substitution hints. 

Something like this http://doc.trolltech.com/4.4/qmutexlocker.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115531</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-03-27 06:25:07 -0700</bug_when>
    <thetext>Instead of the API I think it would be cleaner to make Qt behave the way WebKit expects it to, without the need to modify the string at all. If necessary we could make this configurable through QTextOption or the text flags in the Qt namespace (like TextJustificationForced). I think it should be possible to implement this in a platform independent manner in qtextengine.cpp, see for example QTextEngine::itemize().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122019</commentid>
    <comment_count>8</comment_count>
      <attachid>28420</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-05-19 20:17:40 -0700</bug_when>
    <thetext>Comment on attachment 28420
Patch to QtWebKit that takes advantage of new API

The patch looks fine to me, but apparently Qt Software wants this done differently.  I guess it could be reworked to only apply on older Qt versions up until the one that addresses the issue internally.  Also a changelog is missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125470</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-06-12 07:46:08 -0700</bug_when>
    <thetext>Does this have a clear path forward in Qt now?  Any updates?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152159</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-04 07:34:58 -0700</bug_when>
    <thetext>What is up with this Simon?

Is there an internal Qt bug report for tracking this? or who is responsible for the Font code in Qt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203453</commentid>
    <comment_count>11</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-03-24 09:53:48 -0700</bug_when>
    <thetext>Is this patch still relevant?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225406</commentid>
    <comment_count>12</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-05-13 11:34:25 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Is this patch still relevant?

Another Triage and question remains... is this still relevant?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313840</commentid>
    <comment_count>13</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2010-11-25 12:05:13 -0800</bug_when>
    <thetext>Added to QtWebKit QFont API wishlist at http://bugreports.qt.nokia.com/browse/QTBUG-15627</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374114</commentid>
    <comment_count>14</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-03-27 06:37:14 -0700</bug_when>
    <thetext>We&apos;ll be taking another route with the FontFastPath in QtWebKit. See bug 51106 for those developments.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28419</attachid>
            <date>2009-03-09 13:31:10 -0700</date>
            <delta_ts>2010-06-11 12:22:14 -0700</delta_ts>
            <desc>Patch for Qt that adds API to QFont</desc>
            <filename>qfont_new_api.patch</filename>
            <type>text/plain</type>
            <size>5237</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9ndWkvdGV4dC9xZm9udC5jcHAgYi9zcmMvZ3VpL3RleHQvcWZvbnQu
Y3BwCmluZGV4IGZmOGMzOGIuLjkzYjZlODYgMTAwNjQ0Ci0tLSBhL3NyYy9ndWkvdGV4dC9xZm9u
dC5jcHAKKysrIGIvc3JjL2d1aS90ZXh0L3Fmb250LmNwcApAQCAtMTU4Miw2ICsxNTgyLDIwIEBA
IGJvb2wgUUZvbnQ6OmV4YWN0TWF0Y2goKSBjb25zdAogICAgICAgICAgICAgOiBkLT5yZXF1ZXN0
LmV4YWN0TWF0Y2goZW5naW5lLT5mb250RGVmKSk7CiB9CiAKK3ZvaWQgUUZvbnQ6OnN1YnN0aXR1
dGVHbHlwaHMoY29uc3QgUUhhc2g8dXNob3J0LCB1c2hvcnQ+ICZnbHlwaFN1YnN0aXR1dGlvbnMp
Cit7CisgICAgUUZvbnRFbmdpbmUgKmVuZ2luZSA9IGQtPmVuZ2luZUZvclNjcmlwdChRVW5pY29k
ZVRhYmxlczo6Q29tbW9uKTsKKyAgICBRX0FTU0VSVChlbmdpbmUgIT0gMCk7CisgICAgZW5naW5l
LT5zdWJzdGl0dXRlR2x5cGhzKGdseXBoU3Vic3RpdHV0aW9ucyk7Cit9CisKK3ZvaWQgUUZvbnQ6
OmNsZWFyU3Vic3RpdHV0ZUdseXBocygpCit7CisgICAgUUZvbnRFbmdpbmUgKmVuZ2luZSA9IGQt
PmVuZ2luZUZvclNjcmlwdChRVW5pY29kZVRhYmxlczo6Q29tbW9uKTsKKyAgICBRX0FTU0VSVChl
bmdpbmUgIT0gMCk7CisgICAgZW5naW5lLT5jbGVhclN1YnN0aXR1dGVHbHlwaHMoKTsKK30KKwog
LyohCiAgICAgUmV0dXJucyB0cnVlIGlmIHRoaXMgZm9udCBpcyBlcXVhbCB0byBcYSBmOyBvdGhl
cndpc2UgcmV0dXJucwogICAgIGZhbHNlLgpkaWZmIC0tZ2l0IGEvc3JjL2d1aS90ZXh0L3Fmb250
LmggYi9zcmMvZ3VpL3RleHQvcWZvbnQuaAppbmRleCAzM2RhZGE2Li5jNjExODdhIDEwMDY0NAot
LS0gYS9zcmMvZ3VpL3RleHQvcWZvbnQuaAorKysgYi9zcmMvZ3VpL3RleHQvcWZvbnQuaApAQCAt
MjEwLDYgKzIxMCw5IEBAIHB1YmxpYzoKICAgICAvLyBkdXBpY2F0ZWQgZnJvbSBRRm9udEluZm8K
ICAgICBib29sIGV4YWN0TWF0Y2goKSBjb25zdDsKIAorICAgIHZvaWQgc3Vic3RpdHV0ZUdseXBo
cyhjb25zdCBRSGFzaDx1c2hvcnQsIHVzaG9ydD4gJmdseXBoU3Vic3RpdHV0aW9ucyk7CisgICAg
dm9pZCBjbGVhclN1YnN0aXR1dGVHbHlwaHMoKTsKKwogICAgIFFGb250ICZvcGVyYXRvcj0oY29u
c3QgUUZvbnQgJik7CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFFGb250ICYpIGNvbnN0Owog
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBRRm9udCAmKSBjb25zdDsKZGlmZiAtLWdpdCBhL3Ny
Yy9ndWkvdGV4dC9xZm9udGVuZ2luZS5jcHAgYi9zcmMvZ3VpL3RleHQvcWZvbnRlbmdpbmUuY3Bw
CmluZGV4IDUwMWI4OTAuLmRlMThiMjQgMTAwNjQ0Ci0tLSBhL3NyYy9ndWkvdGV4dC9xZm9udGVu
Z2luZS5jcHAKKysrIGIvc3JjL2d1aS90ZXh0L3Fmb250ZW5naW5lLmNwcApAQCAtMTA2Niw2ICsx
MDY2LDE2IEBAIHF1aW50MzIgUUZvbnRFbmdpbmU6OmdldFRydWVUeXBlR2x5cGhJbmRleChjb25z
dCB1Y2hhciAqY21hcCwgdWludCB1bmljb2RlKQogICAgIHJldHVybiAwOwogfQogCit2b2lkIFFG
b250RW5naW5lOjpzdWJzdGl0dXRlR2x5cGhzKGNvbnN0IFFIYXNoPHVzaG9ydCwgdXNob3J0PiAm
Z2x5cGhTdWJzdGl0dXRpb25zKQoreworICAgIHN1YnN0aXR1dGVkR2x5cGhzID0gZ2x5cGhTdWJz
dGl0dXRpb25zOworfQorCit2b2lkIFFGb250RW5naW5lOjpjbGVhclN1YnN0aXR1dGVHbHlwaHMo
KQoreworICAgIHN1YnN0aXR1dGVkR2x5cGhzLmNsZWFyKCk7Cit9CisKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ly8gVGhlIGJveCBmb250IGVuZ2luZQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjA4LDYgKzE2MTgsMjQg
QEAgUUZvbnRFbmdpbmUgKlFGb250RW5naW5lTXVsdGk6OmVuZ2luZShpbnQgYXQpIGNvbnN0CiAg
ICAgcmV0dXJuIGVuZ2luZXMuYXQoYXQpOwogfQogCit2b2lkIFFGb250RW5naW5lTXVsdGk6OnN1
YnN0aXR1dGVHbHlwaHMoY29uc3QgUUhhc2g8dXNob3J0LCB1c2hvcnQ+ICZnbHlwaFN1YnN0aXR1
dGlvbnMpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmdpbmVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIFFGb250RW5naW5lICpmb250RW5naW5lID0gZW5naW5lcy5hdChpKTsKKyAgICAg
ICAgaWYgKGZvbnRFbmdpbmUpCisgICAgICAgICAgICBmb250RW5naW5lLT5zdWJzdGl0dXRlR2x5
cGhzKGdseXBoU3Vic3RpdHV0aW9ucyk7CisgICAgfQorfQorCit2b2lkIFFGb250RW5naW5lTXVs
dGk6OmNsZWFyU3Vic3RpdHV0ZUdseXBocygpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBl
bmdpbmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFFGb250RW5naW5lICpmb250RW5naW5lID0g
ZW5naW5lcy5hdChpKTsKKyAgICAgICAgaWYgKGZvbnRFbmdpbmUpCisgICAgICAgICAgICBmb250
RW5naW5lLT5jbGVhclN1YnN0aXR1dGVHbHlwaHMoKTsKKyAgICB9Cit9CisKIFFJbWFnZSBRRm9u
dEVuZ2luZU11bHRpOjphbHBoYU1hcEZvckdseXBoKGdseXBoX3QpCiB7CiAgICAgUV9BU1NFUlQo
ZmFsc2UpOwpkaWZmIC0tZ2l0IGEvc3JjL2d1aS90ZXh0L3Fmb250ZW5naW5lX2Z0LmNwcCBiL3Ny
Yy9ndWkvdGV4dC9xZm9udGVuZ2luZV9mdC5jcHAKaW5kZXggMTVhMmVjNi4uYWVlNGYyZCAxMDA2
NDQKLS0tIGEvc3JjL2d1aS90ZXh0L3Fmb250ZW5naW5lX2Z0LmNwcAorKysgYi9zcmMvZ3VpL3Rl
eHQvcWZvbnRlbmdpbmVfZnQuY3BwCkBAIC0xNTAwLDEyICsxNTAwLDE2IEBAIGJvb2wgUUZvbnRF
bmdpbmVGVDo6c3RyaW5nVG9DTWFwKGNvbnN0IFFDaGFyICpzdHIsIGludCBsZW4sIFFHbHlwaExh
eW91dCAqZ2x5cGhzCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBib29sIGhh
c1N1YnN0aXR1dGVHbHlwaHMgPSAhc3Vic3RpdHV0ZWRHbHlwaHMuaXNFbXB0eSgpOwogICAgIGJv
b2wgbWlycm9yZWQgPSBmbGFncyAmIFFUZXh0RW5naW5lOjpSaWdodFRvTGVmdDsKICAgICBpbnQg
Z2x5cGhfcG9zID0gMDsKICAgICBpZiAoZnJlZXR5cGUtPnN5bWJvbF9tYXApIHsKICAgICAgICAg
RlRfRmFjZSBmYWNlID0gZnJlZXR5cGUtPmZhY2U7CiAgICAgICAgIGZvciAoIGludCBpID0gMDsg
aSA8IGxlbjsgKytpICkgewogICAgICAgICAgICAgdW5zaWduZWQgaW50IHVjID0gZ2V0Q2hhcihz
dHIsIGksIGxlbik7CisgICAgICAgICAgICBpZiAoaGFzU3Vic3RpdHV0ZUdseXBocyAmJiBzdWJz
dGl0dXRlZEdseXBocy5jb250YWlucyh1YykpCisgICAgICAgICAgICAgICAgdWMgPSBzdWJzdGl0
dXRlZEdseXBocy52YWx1ZSh1Yyk7CisKICAgICAgICAgICAgIGlmIChtaXJyb3JlZCkKICAgICAg
ICAgICAgICAgICB1YyA9IFFDaGFyOjptaXJyb3JlZENoYXIodWMpOwogICAgICAgICAgICAgZ2x5
cGhzLT5nbHlwaHNbZ2x5cGhfcG9zXSA9IHVjIDwgUUZyZWV0eXBlRmFjZTo6Y21hcENhY2hlU2l6
ZSA/IGZyZWV0eXBlLT5jbWFwQ2FjaGVbdWNdIDogMDsKQEAgLTE1MzcsNiArMTU0MSw5IEBAIGJv
b2wgUUZvbnRFbmdpbmVGVDo6c3RyaW5nVG9DTWFwKGNvbnN0IFFDaGFyICpzdHIsIGludCBsZW4s
IFFHbHlwaExheW91dCAqZ2x5cGhzCiAgICAgICAgIEZUX0ZhY2UgZmFjZSA9IGZyZWV0eXBlLT5m
YWNlOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgdWMgPSBnZXRDaGFyKHN0ciwgaSwgbGVuKTsKKyAgICAgICAgICAgIGlm
IChoYXNTdWJzdGl0dXRlR2x5cGhzICYmIHN1YnN0aXR1dGVkR2x5cGhzLmNvbnRhaW5zKHVjKSkK
KyAgICAgICAgICAgICAgICB1YyA9IHN1YnN0aXR1dGVkR2x5cGhzLnZhbHVlKHVjKTsKKwogICAg
ICAgICAgICAgaWYgKG1pcnJvcmVkKQogICAgICAgICAgICAgICAgIHVjID0gUUNoYXI6Om1pcnJv
cmVkQ2hhcih1Yyk7CiAgICAgICAgICAgICBnbHlwaHMtPmdseXBoc1tnbHlwaF9wb3NdID0gdWMg
PCBRRnJlZXR5cGVGYWNlOjpjbWFwQ2FjaGVTaXplID8gZnJlZXR5cGUtPmNtYXBDYWNoZVt1Y10g
OiAwOwpkaWZmIC0tZ2l0IGEvc3JjL2d1aS90ZXh0L3Fmb250ZW5naW5lX3AuaCBiL3NyYy9ndWkv
dGV4dC9xZm9udGVuZ2luZV9wLmgKaW5kZXggNGIwNWYxYi4uOGU2YTQwZiAxMDA2NDQKLS0tIGEv
c3JjL2d1aS90ZXh0L3Fmb250ZW5naW5lX3AuaAorKysgYi9zcmMvZ3VpL3RleHQvcWZvbnRlbmdp
bmVfcC5oCkBAIC0yMTgsNiArMjE4LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1Y2hh
ciAqZ2V0Q01hcChjb25zdCB1Y2hhciAqdGFibGUsIHVpbnQgdGFibGVTaXplLCBib29sICppc1N5
bWJvbEZvbnQsIGludCAqY21hcFNpemUpOwogICAgIHN0YXRpYyBxdWludDMyIGdldFRydWVUeXBl
R2x5cGhJbmRleChjb25zdCB1Y2hhciAqY21hcCwgdWludCB1bmljb2RlKTsKIAorICAgIHZpcnR1
YWwgdm9pZCBzdWJzdGl0dXRlR2x5cGhzKGNvbnN0IFFIYXNoPHVzaG9ydCwgdXNob3J0PiAmZ2x5
cGhTdWJzdGl0dXRpb25zKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdWJzdGl0dXRlR2x5cGhz
KCk7CisKICAgICBRQXRvbWljSW50IHJlZjsKICAgICBRRm9udERlZiBmb250RGVmOwogICAgIHVp
bnQgY2FjaGVfY29zdDsgLy8gYW1vdW50IG9mIG1lbSB1c2VkIGluIGtiIGJ5IHRoZSBmb250CkBA
IC0yNDEsNiArMjQ0LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBpbnQgZ2x5cGhGb3JtYXQ7
CisgICAgUUhhc2g8dXNob3J0LCB1c2hvcnQ+IHN1YnN0aXR1dGVkR2x5cGhzOwogCiBwcml2YXRl
OgogICAgIC8vLyByZW1vdmUgb2xkIGVudHJpZXMgZnJvbSB0aGUgZ2x5cGggY2FjaGUuIEhlbHBl
ciBtZXRob2QgZm9yIHRoZSBzZXRHbHlwaENhY2hlIG9uZXMuCkBAIC0zODYsNiArMzkwLDkgQEAg
cHVibGljOgogCiAgICAgUUZvbnRFbmdpbmUgKmVuZ2luZShpbnQgYXQpIGNvbnN0OwogCisgICAg
dmlydHVhbCB2b2lkIHN1YnN0aXR1dGVHbHlwaHMoY29uc3QgUUhhc2g8dXNob3J0LCB1c2hvcnQ+
ICZnbHlwaFN1YnN0aXR1dGlvbnMpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhclN1YnN0aXR1dGVH
bHlwaHMoKTsKKwogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBRUFNQcmludEVuZ2luZVBy
aXZhdGU7CiAgICAgZnJpZW5kIGNsYXNzIFFQU1ByaW50RW5naW5lRm9udE11bHRpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28420</attachid>
            <date>2009-03-09 13:32:50 -0700</date>
            <delta_ts>2009-05-19 20:17:40 -0700</delta_ts>
            <desc>Patch to QtWebKit that takes advantage of new API</desc>
            <filename>fontqt.patch</filename>
            <type>text/plain</type>
            <size>9485</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcAppbmRleCAyZGI3ZTZiLi4yOWQ0
MjA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCkBAIC00MywyNyAr
NDMsMTIwIEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKICNpZiBRVF9WRVJTSU9OID49IDB4MDQw
NDAwCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIFFIYXNoPHVzaG9ydCwgdXNob3J0
PiAqcXRHbHlwaFN1YnN0aXR1dGlvbnMgPSAwOworCiBzdGF0aWMgY29uc3QgUVN0cmluZyBxc3Ry
aW5nKGNvbnN0IFRleHRSdW4mIHJ1bikKIHsKICAgICAvL1dlIGRvbid0IGRldGFjaAogICAgIHJl
dHVybiBRU3RyaW5nOjpmcm9tUmF3RGF0YSgoY29uc3QgUUNoYXIgKilydW4uY2hhcmFjdGVycygp
LCBydW4ubGVuZ3RoKCkpOwogfQogCi1zdGF0aWMgY29uc3QgUVN0cmluZyBmaXhTcGFjaW5nKGNv
bnN0IFFTdHJpbmcgJnN0cmluZykKK3N0YXRpYyB2b2lkIG1ha2VTdWJzdGl0dXRpb25zKFFGb250
ICpmb250KQogewotICAgIC8vT25seSBkZXRhY2ggaWYgd2UncmUgYWN0dWFsbHkgY2hhbmdpbmcg
c29tZXRoaW5nCi0gICAgUVN0cmluZyBwb3NzaWJseURldGFjaGVkID0gc3RyaW5nOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgY29uc3Qg
UUNoYXIgYyA9IHN0cmluZy5hdChpKTsKLSAgICAgICAgaWYgKGMudW5pY29kZSgpICE9IDB4MjAg
JiYgRm9udDo6dHJlYXRBc1NwYWNlKGMudW5pY29kZSgpKSkgewotICAgICAgICAgICAgcG9zc2li
bHlEZXRhY2hlZFtpXSA9IDB4MjA7IC8vZGV0YWNoCi0gICAgICAgIH0gZWxzZSBpZiAoYy51bmlj
b2RlKCkgIT0gMHgyMDBjICYmIEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjLnVuaWNvZGUo
KSkpIHsKLSAgICAgICAgICAgIHBvc3NpYmx5RGV0YWNoZWRbaV0gPSAweDIwMGM7IC8vZGV0YWNo
Ci0gICAgICAgIH0KKyAgICAvL0xldCB0aGUgUVRleHRFbmdpbmUga25vdyBhYm91dCBvdXIgZ2x5
cGggc3Vic3RpdHV0aW9ucworICAgIGlmIChxdEdseXBoU3Vic3RpdHV0aW9ucykgeworICAgICAg
ICBmb250LT5zdWJzdGl0dXRlR2x5cGhzKCpxdEdseXBoU3Vic3RpdHV0aW9ucyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMgPSBuZXcgUUhhc2g8dXNob3J0LCB1
c2hvcnQ+KCk7CisKKyAgICAgICAgLy9JbnNlcnQgdGhlIHN1YnRpdHV0aW9ucyBmb3VuZCBpbiBX
ZWJDb3JlOjpGb250Ojp0cmVhdEFzU3BhY2UKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMt
Pmluc2VydChRTGF0aW4xQ2hhcignICcpLnVuaWNvZGUoKSwgMHgyMCk7CisgICAgICAgIHF0R2x5
cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoUUxhdGluMUNoYXIoJ1x0JykudW5pY29kZSgpLCAweDIw
KTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydChRTGF0aW4xQ2hhcignXG4n
KS51bmljb2RlKCksIDB4MjApOworICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0
KDB4MDBBMCwgMHgyMCk7CisKKyAgICAgICAgLy9JbnNlcnQgdGhlIHN1YnRpdHV0aW9ucyBmb3Vu
ZCBpbiBXZWJDb3JlOjpGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UKKyAgICAgICAgLy9jIDwg
MHgyMAorICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDAwMCwgMHgyMDBj
KTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAwMDEsIDB4MjAwYyk7
CisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgwMDAyLCAweDIwMGMpOwor
ICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDAwMywgMHgyMDBjKTsKKyAg
ICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAwMDQsIDB4MjAwYyk7CisgICAg
ICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgwMDA1LCAweDIwMGMpOworICAgICAg
ICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDAwNiwgMHgyMDBjKTsKKyAgICAgICAg
cXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAwMDcsIDB4MjAwYyk7CisgICAgICAgIHF0
R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgwMDA4LCAweDIwMGMpOworICAgICAgICBxdEds
eXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDAwOSwgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlw
aFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAwMTAsIDB4MjAwYyk7CisgICAgICAgIHF0R2x5cGhT
dWJzdGl0dXRpb25zLT5pbnNlcnQoMHgwMDExLCAweDIwMGMpOworICAgICAgICBxdEdseXBoU3Vi
c3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDAxMiwgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlwaFN1YnN0
aXR1dGlvbnMtPmluc2VydCgweDAwMTMsIDB4MjAwYyk7CisgICAgICAgIHF0R2x5cGhTdWJzdGl0
dXRpb25zLT5pbnNlcnQoMHgwMDE0LCAweDIwMGMpOworICAgICAgICBxdEdseXBoU3Vic3RpdHV0
aW9ucy0+aW5zZXJ0KDB4MDAxNSwgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlv
bnMtPmluc2VydCgweDAwMTYsIDB4MjAwYyk7CisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRpb25z
LT5pbnNlcnQoMHgwMDE3LCAweDIwMGMpOworICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+
aW5zZXJ0KDB4MDAxOCwgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmlu
c2VydCgweDAwMTksIDB4MjAwYyk7CisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNl
cnQoMHgwMDFBLCAweDIwMGMpOworICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0
KDB4MDAxQiwgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgw
eDAwMUMsIDB4MjAwYyk7CisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgw
MDFELCAweDIwMGMpOworICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDAx
RSwgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAwMUYs
IDB4MjAwYyk7CisKKyAgICAgICAgLy9jID49IDB4N0YgJiYgYyA8IDB4QTAKKyAgICAgICAgcXRH
bHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAwN0YsIDB4MjAwYyk7CisgICAgICAgIHF0R2x5
cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgwMDgwLCAweDIwMGMpOworICAgICAgICBxdEdseXBo
U3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDA4MSwgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlwaFN1
YnN0aXR1dGlvbnMtPmluc2VydCgweDAwODIsIDB4MjAwYyk7CisgICAgICAgIHF0R2x5cGhTdWJz
dGl0dXRpb25zLT5pbnNlcnQoMHgwMDgzLCAweDIwMGMpOworICAgICAgICBxdEdseXBoU3Vic3Rp
dHV0aW9ucy0+aW5zZXJ0KDB4MDA4NCwgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1
dGlvbnMtPmluc2VydCgweDAwODUsIDB4MjAwYyk7CisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRp
b25zLT5pbnNlcnQoMHgwMDg2LCAweDIwMGMpOworICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9u
cy0+aW5zZXJ0KDB4MDA4NywgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMt
Pmluc2VydCgweDAwODgsIDB4MjAwYyk7CisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5p
bnNlcnQoMHgwMDg5LCAweDIwMGMpOworICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5z
ZXJ0KDB4MDA4QSwgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2Vy
dCgweDAwOEIsIDB4MjAwYyk7CisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQo
MHgwMDhDLCAweDIwMGMpOworICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4
MDA4RCwgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAw
OEUsIDB4MjAwYyk7CisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgwMDhG
LCAweDIwMGMpOworICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDA5MCwg
MHgyMDBjKTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAwOTEsIDB4
MjAwYyk7CisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgwMDkyLCAweDIw
MGMpOworICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDA5MywgMHgyMDBj
KTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAwOTQsIDB4MjAwYyk7
CisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgwMDk1LCAweDIwMGMpOwor
ICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDA5NiwgMHgyMDBjKTsKKyAg
ICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAwOTcsIDB4MjAwYyk7CisgICAg
ICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgwMDk4LCAweDIwMGMpOworICAgICAg
ICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDA5OSwgMHgyMDBjKTsKKyAgICAgICAg
cXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAwOUEsIDB4MjAwYyk7CisgICAgICAgIHF0
R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgwMDlCLCAweDIwMGMpOworICAgICAgICBxdEds
eXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDA5QywgMHgyMDBjKTsKKyAgICAgICAgcXRHbHlw
aFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDAwOUQsIDB4MjAwYyk7CisgICAgICAgIHF0R2x5cGhT
dWJzdGl0dXRpb25zLT5pbnNlcnQoMHgwMDlFLCAweDIwMGMpOworICAgICAgICBxdEdseXBoU3Vi
c3RpdHV0aW9ucy0+aW5zZXJ0KDB4MDA5RiwgMHgyMDBjKTsKKworICAgICAgICAvL2MgPT0gMHgy
MDBlCisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgyMDBlLCAweDIwMGMp
OworCisgICAgICAgIC8vYyA9PSAweDIwMGYKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMt
Pmluc2VydCgweDIwMGYsIDB4MjAwYyk7CisKKyAgICAgICAgLy9jID49IDB4MjAyYSAmJiBjIDw9
IDB4MjAyZQorICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MjAyYSwgMHgy
MDBjKTsKKyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDIwMmIsIDB4MjAw
Yyk7CisgICAgICAgIHF0R2x5cGhTdWJzdGl0dXRpb25zLT5pbnNlcnQoMHgyMDJjLCAweDIwMGMp
OworICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5zZXJ0KDB4MjAyZCwgMHgyMDBjKTsK
KyAgICAgICAgcXRHbHlwaFN1YnN0aXR1dGlvbnMtPmluc2VydCgweDIwMmUsIDB4MjAwYyk7CisK
KyAgICAgICAgLy9jID09IDB4RkZGQworICAgICAgICBxdEdseXBoU3Vic3RpdHV0aW9ucy0+aW5z
ZXJ0KDB4RkZGQywgMHgyMDBjKTsKKworICAgICAgICAvL2FjdHVhbGx5IGluc2VydCB0aGVtCisg
ICAgICAgIGZvbnQtPnN1YnN0aXR1dGVHbHlwaHMoKnF0R2x5cGhTdWJzdGl0dXRpb25zKTsKICAg
ICB9Ci0gICAgcmV0dXJuIHBvc3NpYmx5RGV0YWNoZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFy
U3Vic3RpdHV0aW9ucyhRRm9udCAqZm9udCkKK3sKKyAgICAvL0NsZWFyIHRoZSBRVGV4dEVuZ2lu
ZSBvZiBhbGwga25vd2xlZGdlIG9mIG91ciBnbHlwaCBzdWJzdGl0dXRpb25zCisgICAgZm9udC0+
Y2xlYXJTdWJzdGl0dXRlR2x5cGhzKCk7CiB9CiAKIHN0YXRpYyBRVGV4dExpbmUgc2V0dXBMYXlv
dXQoUVRleHRMYXlvdXQqIGxheW91dCwgY29uc3QgVGV4dFJ1biYgc3R5bGUpCkBAIC0xMTIsNyAr
MjA1LDkgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICAgICAgICAgIHAtPnNldFBlbihR
Q29sb3IoY3R4LT5zdHJva2VDb2xvcigpKSk7CiAgICAgfQogCi0gICAgY29uc3QgUVN0cmluZyBz
dHJpbmcgPSBmaXhTcGFjaW5nKHFzdHJpbmcocnVuKSk7CisgICAgY29uc3QgUVN0cmluZyBzdHJp
bmcgPSBxc3RyaW5nKHJ1bik7CisgICAgUUZvbnQgZiA9IGZvbnQoKTsKKyAgICBtYWtlU3Vic3Rp
dHV0aW9ucygmZik7CiAKICAgICAvLyB0ZXh0IHNoYWRvdwogICAgIEludFNpemUgc2hhZG93U2l6
ZTsKQEAgLTEyMSwxNCArMjE2LDE0IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0CiAgICAgYm9v
bCBoYXNTaGFkb3cgPSBjdHgtPnRleHREcmF3aW5nTW9kZSgpID09IGNUZXh0RmlsbCAmJiBjdHgt
PmdldFNoYWRvdyhzaGFkb3dTaXplLCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CiAKICAgICBp
ZiAoZnJvbSA+IDAgfHwgdG8gPCBydW4ubGVuZ3RoKCkpIHsKLSAgICAgICAgUVRleHRMYXlvdXQg
bGF5b3V0KHN0cmluZywgZm9udCgpKTsKKyAgICAgICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmlu
ZywgZik7CiAgICAgICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQoJmxheW91dCwgcnVu
KTsKICAgICAgICAgZmxvYXQgeDEgPSBsaW5lLmN1cnNvclRvWChmcm9tKTsKICAgICAgICAgZmxv
YXQgeDIgPSBsaW5lLmN1cnNvclRvWCh0byk7CiAgICAgICAgIGlmICh4MiA8IHgxKQogICAgICAg
ICAgICAgcVN3YXAoeDEsIHgyKTsKIAotICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udCgpKTsK
KyAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGYpOwogICAgICAgICBpbnQgYXNjZW50ID0gZm0uYXNj
ZW50KCk7CiAgICAgICAgIFFSZWN0RiBjbGlwKHBvaW50LngoKSArIHgxLCBwb2ludC55KCkgLSBh
c2NlbnQsIHgyIC0geDEsIGZtLmhlaWdodCgpKTsKIApAQCAtMTU5LDEwICsyNTQsMTEgQEAgdm9p
ZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICAgICAgfQogICAgICAgICBsaW5lLmRyYXcocCwgcHQp
OwogICAgICAgICBwLT5yZXN0b3JlKCk7CisgICAgICAgIGNsZWFyU3Vic3RpdHV0aW9ucygmZik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwLT5zZXRGb250KGZvbnQoKSk7CisgICAg
cC0+c2V0Rm9udChmKTsKIAogICAgIFFQb2ludEYgcHQocG9pbnQueCgpLCBwb2ludC55KCkpOwog
ICAgIGludCBmbGFncyA9IHJ1bi5ydGwoKSA/IFF0OjpUZXh0Rm9yY2VSaWdodFRvTGVmdCA6IFF0
OjpUZXh0Rm9yY2VMZWZ0VG9SaWdodDsKQEAgLTE3NSwzNSArMjcxLDQ1IEBAIHZvaWQgRm9udDo6
ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEZsb2F0CiAgICAgICAgIHAtPnJlc3RvcmUoKTsKICAgICB9CiAgICAgcC0+ZHJhd1Rl
eHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5wYWRkaW5nKCkpOworICAgIGNsZWFyU3Vic3RpdHV0
aW9ucygmZik7CiB9CiAKIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4pIGNvbnN0CiB7CiAgICAgaWYgKCFydW4ubGVuZ3RoKCkpCiAgICAgICAg
IHJldHVybiAwOwotICAgIGNvbnN0IFFTdHJpbmcgc3RyaW5nID0gZml4U3BhY2luZyhxc3RyaW5n
KHJ1bikpOwotICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcsIGZvbnQoKSk7CisgICAgY29u
c3QgUVN0cmluZyBzdHJpbmcgPSBxc3RyaW5nKHJ1bik7CisgICAgUUZvbnQgZiA9IGZvbnQoKTsK
KyAgICBtYWtlU3Vic3RpdHV0aW9ucygmZik7CisgICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmlu
ZywgZik7CiAgICAgUVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91dCgmbGF5b3V0LCBydW4pOwog
ICAgIGludCB3ID0gaW50KGxpbmUubmF0dXJhbFRleHRXaWR0aCgpKTsKICAgICAvLyBXZWJLaXQg
ZXhwZWN0cyB1cyB0byBpZ25vcmUgd29yZCBzcGFjaW5nIG9uIHRoZSBmaXJzdCBjaGFyYWN0ZXIg
KGFzIG9wcG9zZWQgdG8gd2hhdCBRdCBkb2VzKQogICAgIGlmICh0cmVhdEFzU3BhY2UocnVuWzBd
KSkKICAgICAgICAgdyAtPSBtX3dvcmRTcGFjaW5nOwogCisgICAgY2xlYXJTdWJzdGl0dXRpb25z
KCZmKTsKICAgICByZXR1cm4gdyArIHJ1bi5wYWRkaW5nKCk7CiB9CiAKIGludCBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IHBvc2l0
aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogewotICAgIGNvbnN0IFFTdHJp
bmcgc3RyaW5nID0gZml4U3BhY2luZyhxc3RyaW5nKHJ1bikpOwotICAgIFFUZXh0TGF5b3V0IGxh
eW91dChzdHJpbmcsIGZvbnQoKSk7CisgICAgY29uc3QgUVN0cmluZyBzdHJpbmcgPSBxc3RyaW5n
KHJ1bik7CisgICAgUUZvbnQgZiA9IGZvbnQoKTsKKyAgICBtYWtlU3Vic3RpdHV0aW9ucygmZik7
CisgICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZywgZik7CiAgICAgUVRleHRMaW5lIGxpbmUg
PSBzZXR1cExheW91dCgmbGF5b3V0LCBydW4pOwotICAgIHJldHVybiBsaW5lLnhUb0N1cnNvcihw
b3NpdGlvbik7CisgICAgaW50IHIgPSBsaW5lLnhUb0N1cnNvcihwb3NpdGlvbik7CisgICAgY2xl
YXJTdWJzdGl0dXRpb25zKCZmKTsKKyAgICByZXR1cm4gcjsKIH0KIAogRmxvYXRSZWN0IEZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IElu
dFBvaW50JiBwdCwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7Ci0gICAgY29uc3Qg
UVN0cmluZyBzdHJpbmcgPSBmaXhTcGFjaW5nKHFzdHJpbmcocnVuKSk7Ci0gICAgUVRleHRMYXlv
dXQgbGF5b3V0KHN0cmluZywgZm9udCgpKTsKKyAgICBjb25zdCBRU3RyaW5nIHN0cmluZyA9IHFz
dHJpbmcocnVuKTsKKyAgICBRRm9udCBmID0gZm9udCgpOworICAgIG1ha2VTdWJzdGl0dXRpb25z
KCZmKTsKKyAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nLCBmKTsKICAgICBRVGV4dExpbmUg
bGluZSA9IHNldHVwTGF5b3V0KCZsYXlvdXQsIHJ1bik7CiAKICAgICBmbG9hdCB4MSA9IGxpbmUu
Y3Vyc29yVG9YKGZyb20pOwpAQCAtMjExLDYgKzMxNyw3IEBAIEZsb2F0UmVjdCBGb250OjpzZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2lu
dCYKICAgICBpZiAoeDIgPCB4MSkKICAgICAgICAgcVN3YXAoeDEsIHgyKTsKIAorICAgIGNsZWFy
U3Vic3RpdHV0aW9ucygmZik7CiAgICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCkgKyB4MSwgcHQu
eSgpLCB4MiAtIHgxLCBoKTsKIH0KIAo=
</data>
<flag name="review"
          id="13928"
          type_id="1"
          status="-"
          setter="staikos"
    />
          </attachment>
      

    </bug>

</bugzilla>