<?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>23630</bug_id>
          
          <creation_ts>2009-01-29 15:40:44 -0800</creation_ts>
          <short_desc>Codereview: Skia complex font rendering</short_desc>
          <delta_ts>2009-02-10 00:34:42 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sverrir Á. Berg">sverrir</reporter>
          <assigned_to name="Sverrir Á. Berg">sverrir</assigned_to>
          <cc>brettw</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>107606</commentid>
    <comment_count>0</comment_count>
    <who name="Sverrir Á. Berg">sverrir</who>
    <bug_when>2009-01-29 15:40:44 -0800</bug_when>
    <thetext>Add complex font rendering using Skia instead of Windows ScriptTextOut.  This adds support for enhanced webkit styles when drawing complex glyphs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107607</commentid>
    <comment_count>1</comment_count>
      <attachid>27168</attachid>
    <who name="Sverrir Á. Berg">sverrir</who>
    <bug_when>2009-01-29 15:42:51 -0800</bug_when>
    <thetext>Created attachment 27168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107611</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-29 16:06:58 -0800</bug_when>
    <thetext>I&apos;d like to see Brett&apos;s comments on this before any of us WebKit dev&apos;s r+ this.  (maybe brett has already reviewed this in chromium&apos;s repo?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107642</commentid>
    <comment_count>3</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-01-29 22:13:32 -0800</bug_when>
    <thetext>I already reviewed this. I don&apos;t think it&apos;s a complete solution for complex scripts and effects, but is better than what we have now and should cover 90% of the cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108464</commentid>
    <comment_count>4</comment_count>
    <who name="Sverrir Á. Berg">sverrir</who>
    <bug_when>2009-02-05 11:34:38 -0800</bug_when>
    <thetext>ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108465</commentid>
    <comment_count>5</comment_count>
      <attachid>27168</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 11:39:04 -0800</bug_when>
    <thetext>Comment on attachment 27168
Patch

Brett likes it.  It&apos;s fine with me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108668</commentid>
    <comment_count>6</comment_count>
    <who name="Sverrir Á. Berg">sverrir</who>
    <bug_when>2009-02-06 11:36:51 -0800</bug_when>
    <thetext>Eric: Could you please land/commit this for me?

Thanks,
Sverrir</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109099</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-02-10 00:34:42 -0800</bug_when>
    <thetext>Landed here:
http://trac.webkit.org/changeset/40812</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27168</attachid>
            <date>2009-01-29 15:42:51 -0800</date>
            <delta_ts>2009-02-05 11:39:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>skia.patch</filename>
            <type>text/plain</type>
            <size>21903</size>
            <attacher name="Sverrir Á. Berg">sverrir</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDM3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMDktMDEtMjkgIFN2ZXJyaXIgw4EuIEJlcmcgIDxzdmVycmlyQGNo
cm9taXVtLm9yZz4KKworCUFkZCBjb21wbGV4IGZvbnQgcmVuZGVyaW5nIHVzaW5nIFNraWEgaW5z
dGVhZCBvZiBXaW5kb3dzIFNjcmlwdFRleHRPdXQuICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgZW5o
YW5jZWQgd2Via2l0IHN0eWxlcyB3aGVuIGRyYXdpbmcgY29tcGxleCBnbHlwaHMuCisgCisJUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb250YWluc01pc3NpbmdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6VW5pc2NyaWJlSGVscGVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZUhl
bHBlcjo6c2hhcGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNj
cmliZUhlbHBlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OnNraWFEcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpwYWlu
dFNraWFUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2lu
Lmg6CisKIDIwMDktMDEtMjkgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1vdmUgdGhlIGxpbmUgYm94IGxpc3QgbWVtYmVyIG91dCBvZiBSZW5kZXJGbG93IGFuZCBk
b3duIGludG8gUmVuZGVyQmxvY2sgYW5kIFJlbmRlcklubGluZS4gIEVsaW1pbmF0ZSBSZW5kZXJG
bG93IGZyb20gdGhlIHRyZWUuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA0MDM2OCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZvbnQuaCIKIAotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCiAj
aW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKQEAgLTQ5LDEyMiArNDgsNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIG5vbi10cmFuc2xhdGlv
biB0cmFuc2Zvcm1zLiBTb21ldGltZXMgem9vbXMgd2lsbCBsb29rIGJldHRlciBpbgotICAgIC8v
IFNraWEsIGFuZCBzb21ldGltZXMgYmV0dGVyIGluIFdpbmRvd3MuIFRoZSBtYWluIHByb2JsZW0g
aXMgdGhhdCB6b29taW5nCi0gICAgLy8gaW4gdXNpbmcgU2tpYSB3aWxsIHNob3cgeW91IHRoZSBo
aW50ZWQgb3V0bGluZXMgZm9yIHRoZSBzbWFsbGVyIHNpemUsCi0gICAgLy8gd2hpY2ggbG9vayB3
ZWlyZC4gQWxsIGVsc2UgYmVpbmcgZXF1YWwsIGl0J3MgYmV0dGVyIHRvIHVzZSBXaW5kb3dzJyB0
ZXh0Ci0gICAgLy8gZHJhd2luZywgc28gd2UgZG9uJ3QgY2hlY2sgZm9yIHpvb21zLgotICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXggPSBjb250ZXh0LT5nZXRDVE0oKTsKLSAg
ICBpZiAobWF0cml4LmIoKSAhPSAwIHx8IG1hdHJpeC5jKCkgIT0gMCkgIC8vIENoZWNrIGZvciBz
a2V3LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDaGVjayBmb3Igc3Ryb2tlIGVm
ZmVjdHMuCi0gICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUZXh0RHJhd2lu
Z01vZGUoKSAhPSBjVGV4dEZpbGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENo
ZWNrIGZvciBzaGFkb3cgZWZmZWN0cy4KLSAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmdldERyYXdMb29wZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLS8vIFNraWEgZXF1aXZhbGVudHMgdG8gV2luZG93cyB0ZXh0IGRyYXdpbmcg
ZnVuY3Rpb25zLiBUaGV5Ci0vLyB3aWxsIGdldCB0aGUgb3V0bGluZXMgZnJvbSBXaW5kb3dzIGFu
ZCBkcmF3IHRoZW4gdXNpbmcgU2tpYSB1c2luZyB0aGUgZ2l2ZW4KLS8vIHBhcmFtZXRlcnMgaW4g
dGhlIHBhaW50IGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MgbW9yZSBjb21wbGV4IGVmZmVjdHMgYW5k
Ci0vLyB0cmFuc2Zvcm1zIHRvIGJlIGRyYXduIHRoYW4gV2luZG93cyBhbGxvd3MuCi0vLwotLy8g
VGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBzbG93ZXIgdGhhbiBXaW5kb3dz
IEdESSwgYW5kIHRoZSB0ZXh0Ci0vLyB3aWxsIGxvb2sgZGlmZmVyZW50IChubyBDbGVhclR5cGUp
LCBzbyB1c2Ugb25seSB3aGVuIG5lY2Vzc2FyeS4KLS8vCi0vLyBXaGVuIHlvdSBjYWxsIGEgU2tp
YSogdGV4dCBkcmF3aW5nIGZ1bmN0aW9uLCB2YXJpb3VzIGdseXBoIG91dGxpbmVzIHdpbGwgYmUK
LS8vIGNhY2hlZC4gQXMgYSByZXN1bHQsIHlvdSBzaG91bGQgY2FsbCBTa2lhV2luT3V0bGluZUNh
Y2hlOjpyZW1vdmVQYXRoc0ZvckZvbnQgCi0vLyB3aGVuIHRoZSBmb250IGlzIGRlc3Ryb3llZCBz
byB0aGF0IHRoZSBjYWNoZSBkb2VzIG5vdCBvdXRsaXZlIHRoZSBmb250IChzaW5jZQotLy8gdGhl
IEhGT05UcyBhcmUgcmVjeWNsZWQpLgotCi0vLyBBbmFsb2cgb2YgdGhlIFdpbmRvd3MgR0RJIGZ1
bmN0aW9uIERyYXdUZXh0LCBleGNlcHQgdXNpbmcgdGhlIGdpdmVuIFNrUGFpbnQKLS8vIGF0dHJp
YnV0ZXMgZm9yIHRoZSB0ZXh0LiBTZWUgYWJvdmUgZm9yIG1vcmUuCi0vLwotLy8gUmV0dXJucyB0
cnVlIG9mIHRoZSB0ZXh0IHdhcyBkcmF3biBzdWNjZXNzZnVsbHkuIEZhbHNlIGluZGljYXRlcyBh
biBlcnJvcgotLy8gZnJvbSBXaW5kb3dzLgotc3RhdGljIGJvb2wgc2tpYURyYXdUZXh0KEhGT05U
IGhmb250LAotICAgICAgICAgICAgICAgICAgU2tDYW52YXMqIGNhbnZhcywKLSAgICAgICAgICAg
ICAgICAgIGNvbnN0IFNrUG9pbnQmIHBvaW50LAotICAgICAgICAgICAgICAgICAgU2tQYWludCog
cGFpbnQsCi0gICAgICAgICAgICAgICAgICBjb25zdCBXT1JEKiBnbHlwaHMsCi0gICAgICAgICAg
ICAgICAgICBjb25zdCBpbnQqIGFkdmFuY2VzLAotICAgICAgICAgICAgICAgICAgaW50IG51bUds
eXBocykKLXsKLSAgICBIREMgZGMgPSBHZXREQygwKTsKLSAgICBIR0RJT0JKIG9sZEZvbnQgPSBT
ZWxlY3RPYmplY3QoZGMsIGhmb250KTsKLQotICAgIGNhbnZhcy0+c2F2ZSgpOwotICAgIGNhbnZh
cy0+dHJhbnNsYXRlKHBvaW50LmZYLCBwb2ludC5mWSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bUdseXBoczsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFNrUGF0aCogcGF0aCA9IFNraWFX
aW5PdXRsaW5lQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlUGF0aEZvckdseXBoKGRjLCBoZm9udCwgZ2x5
cGhzW2ldKTsKLSAgICAgICAgaWYgKCFwYXRoKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjYW52YXMtPmRyYXdQYXRoKCpwYXRoLCAqcGFpbnQpOwotICAgICAgICBjYW52YXMt
PnRyYW5zbGF0ZShhZHZhbmNlc1tpXSwgMCk7Ci0gICAgfQotCi0gICAgY2FudmFzLT5yZXN0b3Jl
KCk7Ci0KLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEZvbnQpOwotICAgIFJlbGVhc2VEQygwLCBk
Yyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHBhaW50U2tpYVRleHQoUGxh
dGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBIRk9OVCBoZm9udCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bUdseXBo
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09SRCogZ2x5cGhzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQqIGFkdmFuY2VzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTa1BvaW50JiBvcmlnaW4pCi17Ci0gICAgaW50IHRleHRNb2RlID0g
cGxhdGZvcm1Db250ZXh0LT5nZXRUZXh0RHJhd2luZ01vZGUoKTsKLQotICAgIC8vIEZpbGxpbmcg
KGlmIG5lY2Vzc2FyeSkuIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlLgotICAgIFNrUGFpbnQgcGFp
bnQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0LT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwot
ICAgIHBhaW50LnNldEZsYWdzKFNrUGFpbnQ6OmtBbnRpQWxpYXNfRmxhZyk7Ci0gICAgYm9vbCBk
aWRGaWxsID0gZmFsc2U7Ci0gICAgaWYgKCh0ZXh0TW9kZSAmIGNUZXh0RmlsbCkgJiYgU2tDb2xv
ckdldEEocGFpbnQuZ2V0Q29sb3IoKSkpIHsKLSAgICAgICAgaWYgKCFza2lhRHJhd1RleHQoaGZv
bnQsIHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCksIG9yaWdpbiwgJnBhaW50LCAmZ2x5cGhzWzBd
LCAmYWR2YW5jZXNbMF0sIG51bUdseXBocykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGRpZEZpbGwgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFN0cm9raW5nIG9uIHRvcCAo
aWYgbmVjZXNzYXJ5KS4KLSAgICBpZiAoKHRleHRNb2RlICYgV2ViQ29yZTo6Y1RleHRTdHJva2Up
Ci0gICAgICAgICYmIHBsYXRmb3JtQ29udGV4dC0+Z2V0U3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9r
ZQotICAgICAgICAmJiBwbGF0Zm9ybUNvbnRleHQtPmdldFN0cm9rZVRoaWNrbmVzcygpID4gMCkg
ewotCi0gICAgICAgIHBhaW50LnJlc2V0KCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dC0+c2V0
dXBQYWludEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7Ci0gICAgICAgIHBhaW50LnNldEZsYWdz
KFNrUGFpbnQ6OmtBbnRpQWxpYXNfRmxhZyk7Ci0gICAgICAgIGlmIChkaWRGaWxsKSB7Ci0gICAg
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHNoYWRvdyBhbmQgd2UgZmlsbGVkIGFib3ZlLCB0aGVy
ZSB3aWxsIGFscmVhZHkgYmUKLSAgICAgICAgICAgIC8vIGEgc2hhZG93LiBXZSBkb24ndCB3YW50
IHRvIGRyYXcgaXQgYWdhaW4gb3IgaXQgd2lsbCBiZSB0b28gZGFyawotICAgICAgICAgICAgLy8g
YW5kIGl0IHdpbGwgZ28gb24gdG9wIG9mIHRoZSBmaWxsLgotICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzbid0IHN0cmljdGx5IGNvcnJlY3QsIHNpbmNlIHRo
ZSBzdHJva2UgY291bGQgYmUKLSAgICAgICAgICAgIC8vIHZlcnkgdGhpY2sgYW5kIHRoZSBzaGFk
b3cgd291bGRuJ3QgYWNjb3VudCBmb3IgdGhpcy4gVGhlICJyaWdodCIKLSAgICAgICAgICAgIC8v
IHRoaW5nIHdvdWxkIGJlIHRvIGRyYXcgdG8gYSBuZXcgbGF5ZXIgYW5kIHRoZW4gZHJhdyB0aGF0
IGxheWVyCi0gICAgICAgICAgICAvLyB3aXRoIGEgc2hhZG93LiBCdXQgdGhpcyBpcyBhIGxvdCBv
ZiBleHRyYSB3b3JrIGZvciBzb21ldGhpbmcKLSAgICAgICAgICAgIC8vIHRoYXQgaXNuJ3Qgbm9y
bWFsbHkgYW4gaXNzdWUuCi0gICAgICAgICAgICBwYWludC5zZXRMb29wZXIoMCktPnNhZmVVbnJl
ZigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFza2lhRHJhd1RleHQoaGZvbnQsIHBsYXRm
b3JtQ29udGV4dC0+Y2FudmFzKCksIG9yaWdpbiwgJnBhaW50LCAmZ2x5cGhzWzBdLCAmYWR2YW5j
ZXNbMF0sIG51bUdseXBocykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCiB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLApAQCAtMjMwLDEyICsxMTMsMTYgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogZwogICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAg
Zm9yIChpbnQgZXhlY3V0aW9ucyA9IDA7IGV4ZWN1dGlvbnMgPCAyOyArK2V4ZWN1dGlvbnMpIHsK
ICAgICAgICAgICAgIGlmIChjYW5Vc2VHREkpCi0gICAgICAgICAgICAgICAgc3VjY2VzcyA9ICEh
RXh0VGV4dE91dChoZGMsIHgsIGxpbmVUb3AsIEVUT19HTFlQSF9JTkRFWCwgMCwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB3Y2hhcl90Kj4oJmdseXBoc1swXSksIGN1ckxlbiwgJmFkdmFuY2VzWzBd
KTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gISFFeHRUZXh0T3V0KGhkYywgeCwgbGluZVRv
cCwgRVRPX0dMWVBIX0lOREVYLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB3Y2hhcl90Kj4oJmdseXBoc1swXSksCisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJMZW4sICZhZHZhbmNlc1swXSk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAvLyBTa2lhJ3MgdGV4dCBkcmFpbmcgb3JpZ2luIGlzIHRoZSBiYXNlbGluZSwgbGlr
ZSBXZWJLaXQsIG5vdAorICAgICAgICAgICAgICAgIC8vIFNraWEncyB0ZXh0IGRyYXdpbmcgb3Jp
Z2luIGlzIHRoZSBiYXNlbGluZSwgbGlrZSBXZWJLaXQsIG5vdAogICAgICAgICAgICAgICAgIC8v
IHRoZSB0b3AsIGxpa2UgV2luZG93cy4KICAgICAgICAgICAgICAgICBTa1BvaW50IG9yaWdpbiA9
IHsgeCwgcG9pbnQueSgpIH07Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHBhaW50U2tpYVRl
eHQoY29udGV4dCwgZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSwgbnVtR2x5cGhzLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFdPUkQqPigmZ2x5cGhzWzBdKSwgJmFkdmFuY2VzWzBdLCBvcmln
aW4pOworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBwYWludFNraWFUZXh0KGNvbnRleHQsIGZv
bnQtPnBsYXRmb3JtRGF0YSgpLmhmb250KCksCisgICAgICAgICAgICAgICAgICAgICAgICBudW1H
bHlwaHMsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgV09SRCo+KCZnbHlwaHNbMF0pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJmFkdmFuY2VzWzBdLCAwLCAmb3JpZ2luKTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIGV4ZWN1dGlvbnMgPT0gMCkgewpAQCAt
Mjk5LDcgKzE4Niw5IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUK
IAogICAgIC8vIFVuaXNjcmliZSBjb3VudHMgdGhlIGNvb3JkaW5hdGVzIGZyb20gdGhlIHVwcGVy
IGxlZnQsIHdoaWxlIFdlYktpdCB1c2VzCiAgICAgLy8gdGhlIGJhc2VsaW5lLCBzbyB3ZSBoYXZl
IHRvIHN1YnRyYWN0IG9mZiB0aGUgYXNjZW50LgotICAgIHN0YXRlLmRyYXcoaGRjLCBzdGF0aWNf
Y2FzdDxpbnQ+KHBvaW50LngoKSksIHN0YXRpY19jYXN0PGludD4ocG9pbnQueSgpIC0gYXNjZW50
KCkpLCBmcm9tLCB0byk7CisgICAgc3RhdGUuZHJhdyhncmFwaGljc0NvbnRleHQsIGhkYywgc3Rh
dGljX2Nhc3Q8aW50Pihwb2ludC54KCkpLAorICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
Pihwb2ludC55KCkgLSBhc2NlbnQoKSksIGZyb20sIHRvKTsKKwogICAgIGNvbnRleHQtPmNhbnZh
cygpLT5lbmRQbGF0Zm9ybVBhaW50KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAJKHJldmlzaW9u
IDQwMzY4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVI
ZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw5IEBACiAjaW5jbHVkZSA8d2lu
ZG93cy5oPgogCiAjaW5jbHVkZSAiRm9udFV0aWxzQ2hyb21pdW1XaW4uaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKKyNpbmNsdWRl
ICJTa1BvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNTgsNyArNjEsNyBAQCBzdGF0aWMgYm9vbCBjb250YWluc01pc3NpbmdHbHlw
aHMoV09SRCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSSVBUX0ZPTlRQ
Uk9QRVJUSUVTKiBwcm9wZXJ0aWVzKQogewogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKGdseXBoc1tpXSA9PSBwcm9wZXJ0aWVzLT53Z0RlZmF1bHQg
CisgICAgICAgIGlmIChnbHlwaHNbaV0gPT0gcHJvcGVydGllcy0+d2dEZWZhdWx0CiAgICAgICAg
ICAgICB8fCAoZ2x5cGhzW2ldID09IHByb3BlcnRpZXMtPndnSW52YWxpZAogICAgICAgICAgICAg
JiYgZ2x5cGhzW2ldICE9IHByb3BlcnRpZXMtPndnQmxhbmspKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0yODUsMTEgKzI4OCwxNCBAQCBpbnQgVW5pc2NyaWJlSGVscGVyOjp4VG9DaGFy
YWN0ZXIoaW50IHgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgVW5pc2NyaWJlSGVscGVyOjpk
cmF3KEhEQyBkYywgaW50IHgsIGludCB5LCBpbnQgZnJvbSwgaW50IHRvKQordm9pZCBVbmlzY3Jp
YmVIZWxwZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBIREMgZGMsIGludCB4LCBpbnQgeSwgaW50IGZyb20sIGludCB0
bykKIHsKICAgICBIR0RJT0JKIG9sZEZvbnQgPSAwOwogICAgIGludCBjdXJYID0geDsKICAgICBi
b29sIGZpcnN0UnVuID0gdHJ1ZTsKKyAgICBib29sIHVzZVdpbmRvd3NEcmF3aW5nID0gd2luZG93
c0NhbkhhbmRsZVRleHREcmF3aW5nKGdyYXBoaWNzQ29udGV4dCk7CisgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OwogCiAgICAgZm9yIChzaXplX3Qgc2NyZWVuSW5kZXggPSAwOyBzY3JlZW5JbmRleCA8IG1fcnVu
cy5zaXplKCk7IHNjcmVlbkluZGV4KyspIHsKICAgICAgICAgaW50IGl0ZW1JbmRleCA9IG1fc2Ny
ZWVuT3JkZXJbc2NyZWVuSW5kZXhdOwpAQCAtMzYwLDcgKzM2Niw3IEBAIHZvaWQgVW5pc2NyaWJl
SGVscGVyOjpkcmF3KEhEQyBkYywgaW50IHgKICAgICAgICAgLy8gQWN0dWFsbHkgZHJhdyB0aGUg
Z2x5cGhzIHdlIGZvdW5kLgogICAgICAgICBpbnQgZ2x5cGhDb3VudCA9IGFmdGVyR2x5cGggLSBm
cm9tR2x5cGg7CiAgICAgICAgIGlmIChmcm9tR2x5cGggPj0gMCAmJiBnbHlwaENvdW50ID4gMCkg
ewotICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgdGhlIHByZWNlZWRpbmcgc3BhY2Ugd2UgbmVl
ZCB0byBhZGQgdG8gdGhpcyBydW4uIFdlCisgICAgICAgICAgICAvLyBBY2NvdW50IGZvciB0aGUg
cHJlY2VkaW5nIHNwYWNlIHdlIG5lZWQgdG8gYWRkIHRvIHRoaXMgcnVuLiBXZQogICAgICAgICAg
ICAgLy8gZG9uJ3QgbmVlZCB0byBjb3VudCBmb3IgdGhlIGZvbGxvd2luZyBzcGFjZSBiZWNhdXNl
IHRoYXQgd2lsbCBiZQogICAgICAgICAgICAgLy8gY291bnRlZCBpbiBhZHZhbmNlRm9ySXRlbSBi
ZWxvdyB3aGVuIHdlIG1vdmUgdG8gdGhlIG5leHQgcnVuLgogICAgICAgICAgICAgaW5uZXJPZmZz
ZXQgKz0gc2hhcGluZy5tX3ByZVBhZGRpbmc7CkBAIC0zNzcsMzAgKzM4Myw0NCBAQCB2b2lkIFVu
aXNjcmliZUhlbHBlcjo6ZHJhdyhIREMgZGMsIGludCB4CiAgICAgICAgICAgICAvLyBGb250cyB3
aXRoIGRpZmZlcmVudCBhc2NlbnRzIGNhbiBiZSB1c2VkIHRvIHJlbmRlciBkaWZmZXJlbnQKICAg
ICAgICAgICAgIC8vIHJ1bnMuICAnQWNyb3NzLXJ1bnMnIHktY29vcmRpbmF0ZSBjb3JyZWN0aW9u
IG5lZWRzIHRvIGJlCiAgICAgICAgICAgICAvLyBhZGp1c3RlZCBmb3IgZWFjaCBmb250LgotICAg
ICAgICAgICAgSFJFU1VMVCBociA9IFNfRkFMU0U7CisgICAgICAgICAgICBib29sIHRleHRPdXRP
ayA9IGZhbHNlOwogICAgICAgICAgICAgZm9yIChpbnQgZXhlY3V0aW9ucyA9IDA7IGV4ZWN1dGlv
bnMgPCAyOyArK2V4ZWN1dGlvbnMpIHsKLSAgICAgICAgICAgICAgICBociA9IFNjcmlwdFRleHRP
dXQoZGMsIHNoYXBpbmcubV9zY3JpcHRDYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3VyWCArIGlubmVyT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB5IC0gc2hhcGluZy5tX2FzY2VudE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgJml0ZW0uYSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnNoYXBpbmcubV9nbHlwaHNbZnJvbUdseXBoXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhDb3VudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnNoYXBpbmcubV9hZHZhbmNlW2Zyb21HbHlwaF0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZzaGFwaW5nLm1fb2Zmc2V0c1tmcm9tR2x5cGhdKTsKLSAgICAgICAgICAg
ICAgICBpZiAoU19PSyAhPSBociAmJiAwID09IGV4ZWN1dGlvbnMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhpcyBTY3JpcHRUZXh0T3V0IGlzIGNhbGxlZCBmcm9tIHRoZSByZW5kZXJl
ciBpdAotICAgICAgICAgICAgICAgICAgICAvLyBtaWdodCBmYWlsIGJlY2F1c2UgdGhlIHNhbmRi
b3ggaXMgcHJldmVudGluZyBpdCBmcm9tCi0gICAgICAgICAgICAgICAgICAgIC8vIG9wZW5pbmcg
dGhlIGZvbnQgZmlsZXMuICBJZiB3ZSBhcmUgcnVubmluZyBpbiB0aGUKLSAgICAgICAgICAgICAg
ICAgICAgLy8gcmVuZGVyZXIsIFRyeVRvUHJlbG9hZEZvbnQgaXMgb3ZlcnJpZGRlbiB0byBhc2sg
dGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIGJyb3dzZXIgdG8gcHJlbG9hZCB0aGUgZm9udCBm
b3IgdXMgc28gd2UgY2FuIGFjY2VzcyBpdC4KKyAgICAgICAgICAgICAgICBpZiAodXNlV2luZG93
c0RyYXdpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCBociA9IFNjcmlwdFRleHRP
dXQoZGMsIHNoYXBpbmcubV9zY3JpcHRDYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3VyWCArIGlubmVyT2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IC0gc2hhcGluZy5tX2FzY2VudE9mZnNl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwg
Jml0ZW0uYSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnNoYXBpbmcubV9nbHlwaHNbZnJvbUdseXBoXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhDb3VudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXBpbmcubV9hZHZhbmNlW2Zyb21HbHlw
aF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3Rp
ZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFw
aW5nLm1fb2Zmc2V0c1tmcm9tR2x5cGhdKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFNf
T0sgPT0gaHIpOworICAgICAgICAgICAgICAgICAgICB0ZXh0T3V0T2sgPSAoaHIgPT0gU19PSyk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU2tQb2ludCBv
cmlnaW47CisgICAgICAgICAgICAgICAgICAgIG9yaWdpbi5mWCA9IGN1clggKyArIGlubmVyT2Zm
c2V0OworICAgICAgICAgICAgICAgICAgICBvcmlnaW4uZlkgPSB5ICsgbV9hc2NlbnQgLSBzaGFw
aW5nLm1fYXNjZW50T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICB0ZXh0T3V0T2sgPSBwYWlu
dFNraWFUZXh0KGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2hhcGluZy5tX2hmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdseXBoQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJnNoYXBpbmcubV9nbHlwaHNbZnJvbUdseXBoXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2FkdmFuY2Vb
ZnJvbUdseXBoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmc2hhcGluZy5tX29mZnNldHNbZnJvbUdseXBoXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmb3JpZ2luKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAoIXRleHRPdXRPayAmJiAwID09IGV4ZWN1dGlvbnMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgVGV4dE91dCBpcyBjYWxsZWQgZnJvbSB0aGUgcmVuZGVyZXIg
aXQgbWlnaHQgZmFpbAorICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBzYW5kYm94
IGlzIHByZXZlbnRpbmcgaXQgZnJvbSBvcGVuaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAv
LyBmb250IGZpbGVzLiAgSWYgd2UgYXJlIHJ1bm5pbmcgaW4gdGhlIHJlbmRlcmVyLAorICAgICAg
ICAgICAgICAgICAgICAvLyBUcnlUb1ByZWxvYWRGb250IGlzIG92ZXJyaWRkZW4gdG8gYXNrIHRo
ZSBicm93c2VyIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIHByZWxvYWQgdGhlIGZvbnQgZm9y
IHVzIHNvIHdlIGNhbiBhY2Nlc3MgaXQuCiAgICAgICAgICAgICAgICAgICAgIHRyeVRvUHJlbG9h
ZEZvbnQoc2hhcGluZy5tX2hmb250KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBBU1NFUlQoU19PSyA9PSBocik7CiAgICAgICAgIH0KIAogICAgICAgICBj
dXJYICs9IGFkdmFuY2VGb3JJdGVtKGl0ZW1JbmRleCk7CkBAIC01NTcsNyArNTc3LDcgQEAgYm9v
bCBVbmlzY3JpYmVIZWxwZXI6OnNoYXBlKGNvbnN0IFVDaGFyKgogICAgICAgICAvLyAgICAgUHVy
aWZ5TWFya0FzSW5pdGlhbGl6ZWQoCiAgICAgICAgIC8vICAgICAgICAgJnNoYXBpbmcubV9nbHlw
aHNbMF0sCiAgICAgICAgIC8vICAgICAgICAgc2l6ZW9mKHNoYXBpbmcubV9nbHlwaHNbMF0gKiBn
ZW5lcmF0ZWRHbHlwaHMpOwotICAgICAgICAKKwogICAgICAgICBaZXJvTWVtb3J5KCZzaGFwaW5n
Lm1fZ2x5cGhzWzBdLAogICAgICAgICAgICAgICAgICAgIHNpemVvZihzaGFwaW5nLm1fZ2x5cGhz
WzBdKSAqIHNoYXBpbmcubV9nbHlwaHMuc2l6ZSgpKTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5oCShy
ZXZpc2lvbiA0MDM2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5p
c2NyaWJlSGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgY2xhc3MgVW5p
c2NyaWJlVGVzdF9Ub29CaWdfVGVzdDsgIC8vIEEgZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKwogI2RlZmluZSBVTklTQ1JJQkVfSEVMUEVSX1NUQUNL
X1JVTlMgOAogI2RlZmluZSBVTklTQ1JJQkVfSEVMUEVSX1NUQUNLX0NIQVJTIDMyCiAKQEAgLTE3
Nyw3ICsxNzksOCBAQCBwdWJsaWM6CiAgICAgLy8gYmUgcHJlLXNldC4KICAgICAvLwogICAgIC8v
IFRoZSB5IHBvc2l0aW9uIGlzIHRoZSB1cHBlciBsZWZ0IGNvcm5lciwgTk9UIHRoZSBiYXNlbGlu
ZS4KLSAgICB2b2lkIGRyYXcoSERDLCBpbnQgeCwgaW50IHksIGludCBmcm9tLCBpbnQgdG8pOwor
ICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgSERDIGRjLCBp
bnQgeCwgaW50IHksIGludCBmcm9tLAorICAgICAgICAgICAgICBpbnQgdG8pOwogCiAgICAgLy8g
UmV0dXJucyB0aGUgZmlyc3QgZ2x5cGggYXNzaWduZWQgdG8gdGhlIGNoYXJhY3RlciBhdCB0aGUg
Z2l2ZW4gb2Zmc2V0LgogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZSBn
bHlwaCBpbmZvcm1hdGlvbiB3aGVuIFVuaXNjcmliZSBpcwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCShyZXZpc2lvbiA0MDM2OCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDggKzMxLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U2tpYUZvbnRXaW4uaCIKIAorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNs
dWRlICJTa0NhbnZhcy5oIgogI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMjE1LDQgKzIxNywxMjIgQEAgdm9pZCBTa2lhV2luT3V0bGlu
ZUNhY2hlOjpyZW1vdmVQYXRoc0ZvcgogICAgICAgICBkZWxldGVPdXRsaW5lKG91dGxpbmVDYWNo
ZS5maW5kKCppKSk7CiB9CiAKK2Jvb2wgd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICAvLyBDaGVjayBmb3Igbm9uLXRyYW5zbGF0aW9u
IHRyYW5zZm9ybXMuIFNvbWV0aW1lcyB6b29tcyB3aWxsIGxvb2sgYmV0dGVyIGluCisgICAgLy8g
U2tpYSwgYW5kIHNvbWV0aW1lcyBiZXR0ZXIgaW4gV2luZG93cy4gVGhlIG1haW4gcHJvYmxlbSBp
cyB0aGF0IHpvb21pbmcKKyAgICAvLyBpbiB1c2luZyBTa2lhIHdpbGwgc2hvdyB5b3UgdGhlIGhp
bnRlZCBvdXRsaW5lcyBmb3IgdGhlIHNtYWxsZXIgc2l6ZSwKKyAgICAvLyB3aGljaCBsb29rIHdl
aXJkLiBBbGwgZWxzZSBiZWluZyBlcXVhbCwgaXQncyBiZXR0ZXIgdG8gdXNlIFdpbmRvd3MnIHRl
eHQKKyAgICAvLyBkcmF3aW5nLCBzbyB3ZSBkb24ndCBjaGVjayBmb3Igem9vbXMuCisgICAgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCA9IGNvbnRleHQtPmdldENUTSgpOworICAg
IGlmIChtYXRyaXguYigpICE9IDAgfHwgbWF0cml4LmMoKSAhPSAwKSAgLy8gQ2hlY2sgZm9yIHNr
ZXcuCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrIGZvciBzdHJva2UgZWZm
ZWN0cy4KKyAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdldFRleHREcmF3aW5n
TW9kZSgpICE9IGNUZXh0RmlsbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hl
Y2sgZm9yIHNoYWRvdyBlZmZlY3RzLgorICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Z2V0RHJhd0xvb3BlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworc3RhdGljIGJvb2wgc2tpYURyYXdUZXh0KEhGT05UIGhmb250LAorICAgICAg
ICAgICAgICAgICAgICAgICAgIEhEQyBkYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTa0Nh
bnZhcyogY2FudmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQmIHBv
aW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIFNrUGFpbnQqIHBhaW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdPUkQqIGdseXBocywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBpbnQqIGFkdmFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdPRkZTRVQqIG9mZnNldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bUdseXBo
cykKK3sKKyAgICBjYW52YXMtPnNhdmUoKTsKKyAgICBjYW52YXMtPnRyYW5zbGF0ZShwb2ludC5m
WCwgcG9pbnQuZlkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykg
eworICAgICAgICBjb25zdCBTa1BhdGgqIHBhdGggPSBTa2lhV2luT3V0bGluZUNhY2hlOjpsb29r
dXBPckNyZWF0ZVBhdGhGb3JHbHlwaChkYywgaGZvbnQsIGdseXBoc1tpXSk7CisgICAgICAgIGlm
ICghcGF0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBib29sIG9mZnNl
dCA9IGZhbHNlOworICAgICAgICBpZiAob2Zmc2V0cyAmJiAob2Zmc2V0c1tpXS5kdSAhPSAwIHx8
IG9mZnNldHNbaV0uZHYgIT0gMCkpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IHRydWU7CisgICAg
ICAgICAgICBjYW52YXMtPnRyYW5zbGF0ZShvZmZzZXRzW2ldLmR1LCBvZmZzZXRzW2ldLmR2KTsK
KyAgICAgICAgfQorCisgICAgICAgIGNhbnZhcy0+ZHJhd1BhdGgoKnBhdGgsICpwYWludCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAob2Zmc2V0KSB7CisgICAgICAgICAgICBjYW52YXMtPnRyYW5z
bGF0ZShhZHZhbmNlc1tpXSAtIG9mZnNldHNbaV0uZHUsIC1vZmZzZXRzW2ldLmR2KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNhbnZhcy0+dHJhbnNsYXRlKGFkdmFuY2VzW2ldLCAw
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNhbnZhcy0+cmVzdG9yZSgpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgcGFpbnRTa2lhVGV4dChQbGF0Zm9ybUNvbnRleHRTa2lhKiBw
bGF0Zm9ybUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgSEZPTlQgaGZvbnQsCisgICAgICAg
ICAgICAgICAgICAgaW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBXT1JE
KiBnbHlwaHMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgaW50KiBhZHZhbmNlcywKKyAgICAg
ICAgICAgICAgICAgICBjb25zdCBHT0ZGU0VUKiBvZmZzZXRzLAorICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNrUG9pbnQqIG9yaWdpbikKK3sKKyAgICBIREMgZGMgPSBHZXREQygwKTsKKyAgICBI
R0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZGMsIGhmb250KTsKKworICAgIGludCB0ZXh0
TW9kZSA9IHBsYXRmb3JtQ29udGV4dC0+Z2V0VGV4dERyYXdpbmdNb2RlKCk7CisKKyAgICAvLyBG
aWxsaW5nIChpZiBuZWNlc3NhcnkpLiBUaGlzIGlzIHRoZSBjb21tb24gY2FzZS4KKyAgICBTa1Bh
aW50IHBhaW50OworICAgIHBsYXRmb3JtQ29udGV4dC0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBh
aW50KTsKKyAgICBwYWludC5zZXRGbGFncyhTa1BhaW50OjprQW50aUFsaWFzX0ZsYWcpOworICAg
IGJvb2wgZGlkRmlsbCA9IGZhbHNlOworCisgICAgaWYgKCh0ZXh0TW9kZSAmIGNUZXh0RmlsbCkg
JiYgU2tDb2xvckdldEEocGFpbnQuZ2V0Q29sb3IoKSkpIHsKKyAgICAgICAgaWYgKCFza2lhRHJh
d1RleHQoaGZvbnQsIGRjLCBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpLCAqb3JpZ2luLCAmcGFp
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaHNbMF0sICZhZHZhbmNlc1swXSwg
Jm9mZnNldHNbMF0sIG51bUdseXBocykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGRpZEZpbGwgPSB0cnVlOworICAgIH0KKworICAgIC8vIFN0cm9raW5nIG9uIHRvcCAoaWYg
bmVjZXNzYXJ5KS4KKyAgICBpZiAoKHRleHRNb2RlICYgV2ViQ29yZTo6Y1RleHRTdHJva2UpCisg
ICAgICAgICYmIHBsYXRmb3JtQ29udGV4dC0+Z2V0U3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZQor
ICAgICAgICAmJiBwbGF0Zm9ybUNvbnRleHQtPmdldFN0cm9rZVRoaWNrbmVzcygpID4gMCkgewor
CisgICAgICAgIHBhaW50LnJlc2V0KCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+c2V0dXBQ
YWludEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7CisgICAgICAgIHBhaW50LnNldEZsYWdzKFNr
UGFpbnQ6OmtBbnRpQWxpYXNfRmxhZyk7CisgICAgICAgIGlmIChkaWRGaWxsKSB7CisgICAgICAg
ICAgICAvLyBJZiB0aGVyZSBpcyBhIHNoYWRvdyBhbmQgd2UgZmlsbGVkIGFib3ZlLCB0aGVyZSB3
aWxsIGFscmVhZHkgYmUKKyAgICAgICAgICAgIC8vIGEgc2hhZG93LiBXZSBkb24ndCB3YW50IHRv
IGRyYXcgaXQgYWdhaW4gb3IgaXQgd2lsbCBiZSB0b28gZGFyaworICAgICAgICAgICAgLy8gYW5k
IGl0IHdpbGwgZ28gb24gdG9wIG9mIHRoZSBmaWxsLgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzbid0IHN0cmljdGx5IGNvcnJlY3QsIHNpbmNlIHRoZSBz
dHJva2UgY291bGQgYmUKKyAgICAgICAgICAgIC8vIHZlcnkgdGhpY2sgYW5kIHRoZSBzaGFkb3cg
d291bGRuJ3QgYWNjb3VudCBmb3IgdGhpcy4gVGhlICJyaWdodCIKKyAgICAgICAgICAgIC8vIHRo
aW5nIHdvdWxkIGJlIHRvIGRyYXcgdG8gYSBuZXcgbGF5ZXIgYW5kIHRoZW4gZHJhdyB0aGF0IGxh
eWVyCisgICAgICAgICAgICAvLyB3aXRoIGEgc2hhZG93LiBCdXQgdGhpcyBpcyBhIGxvdCBvZiBl
eHRyYSB3b3JrIGZvciBzb21ldGhpbmcKKyAgICAgICAgICAgIC8vIHRoYXQgaXNuJ3Qgbm9ybWFs
bHkgYW4gaXNzdWUuCisgICAgICAgICAgICBwYWludC5zZXRMb29wZXIoMCktPnNhZmVVbnJlZigp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFza2lhRHJhd1RleHQoaGZvbnQsIGRjLCBwbGF0
Zm9ybUNvbnRleHQtPmNhbnZhcygpLCAqb3JpZ2luLCAmcGFpbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICZnbHlwaHNbMF0sICZhZHZhbmNlc1swXSwgJm9mZnNldHNbMF0sIG51bUdseXBo
cykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU2VsZWN0T2JqZWN0
KGRjLCBvbGRGb250KTsKKyAgICBSZWxlYXNlREMoMCwgZGMpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uaAkocmV2aXNpb24gNDAzNjgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsOCArMzIsMTIgQEAKICNkZWZpbmUgU2tpYVdpbk91dGxpbmVDYWNoZV9oCiAKICNpbmNsdWRl
IDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8dXNwMTAuaD4KIAorY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogY2xhc3MgU2tQYXRoOworY2xhc3MgU2tQb2ludDsKK2NsYXNzIFBsYXRmb3JtQ29udGV4dFNr
aWE7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDksNiArNTMsMzcgQEAgcHJpdmF0ZToK
ICAgICBTa2lhV2luT3V0bGluZUNhY2hlKCk7CiB9OwogCisvLyBUaGUgZnVuY3Rpb25zIGJlbG93
IGFyZSB1c2VkIGZvciBtb3JlIGNvbXBsZXggZm9udCBkcmF3aW5nIChlZmZlY3RzIHN1Y2ggYXMK
Ky8vIHN0cm9raW5nIGFuZCBtb3JlIGNvbXBsZXggdHJhbnNmb3JtcykgdGhhbiBXaW5kb3dzIHN1
cHBvcnRzIGRpcmVjdGx5LiAgU2luY2UgCisvLyBXaW5kb3dzIGRyYXdpbmcgaXMgZmFzdGVyIHlv
dSBzaG91bGQgdXNlIHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZyBmaXJzdCB0byAKKy8vIGNo
ZWNrIGlmIHVzaW5nIFNraWEgaXMgcmVxdWlyZWQgYXQgYWxsLgorLy8gTm90ZSB0aGF0IHRoZSB0
ZXh0IHdpbGwgbG9vayBkaWZmZXJlbnQgKG5vIENsZWFyVHlwZSkgc28gdGhpcyBzaG91bGQgb25s
eSBiZQorLy8gdXNlZCB3aGVuIG5lY2Vzc2FyeS4KKy8vCisvLyBXaGVuIHlvdSBjYWxsIGEgU2tp
YSogdGV4dCBkcmF3aW5nIGZ1bmN0aW9uLCB2YXJpb3VzIGdseXBoIG91dGxpbmVzIHdpbGwgYmUK
Ky8vIGNhY2hlZC4gQXMgYSByZXN1bHQsIHlvdSBzaG91bGQgY2FsbCBTa2lhV2luT3V0bGluZUNh
Y2hlOjpyZW1vdmVQYXRoc0ZvckZvbnQKKy8vIHdoZW4gdGhlIGZvbnQgaXMgZGVzdHJveWVkIHNv
IHRoYXQgdGhlIGNhY2hlIGRvZXMgbm90IG91dGxpdmUgdGhlIGZvbnQgKHNpbmNlCisvLyB0aGUg
SEZPTlRzIGFyZSByZWN5Y2xlZCkuCisvLworLy8gUmVtZW1iZXIgdGhhdCBTa2lhJ3MgdGV4dCBk
cmF3aW5nIG9yaWdpbiBpcyB0aGUgYmFzZWxpbmUsIGxpa2UgV2ViS2l0LCBub3QKKy8vIHRoZSB0
b3AsIGxpa2UgV2luZG93cy4KKworLy8gUmV0dXJucyB0cnVlIGlmIGFkdmFuY2VkIGZvbnQgcmVu
ZGVyaW5nIGlzIHJlY29tbWVuZGVkLgorYm9vbCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmco
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KTsKKworLy8gTm90ZSB0aGF0IHRoZSBvZmZzZXRzIHBh
cmFtZXRlciBpcyBvcHRpb25hbC4gIElmIG5vdCBOVUxMIGl0IHJlcHJlc2VudHMgYQorLy8gcGVy
IGdseXBoIG9mZnNldCAoc3VjaCBhcyByZXR1cm5lZCBieSBTY3JpcHRQbGFjZSBXaW5kb3dzIEFQ
SSBmdW5jdGlvbikuCisvLworLy8gUmV0dXJucyB0cnVlIG9mIHRoZSB0ZXh0IHdhcyBkcmF3biBz
dWNjZXNzZnVsbHkuIEZhbHNlIGluZGljYXRlcyBhbiBlcnJvcgorLy8gZnJvbSBXaW5kb3dzLgor
Ym9vbCBwYWludFNraWFUZXh0KFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICBIRk9OVCBoZm9udCwKKyAgICAgICAgICAgICAgICAgICBpbnQg
bnVtR2x5cGhzLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPUkQqIGdseXBocywKKyAgICAg
ICAgICAgICAgICAgICBjb25zdCBpbnQqIGFkdmFuY2VzLAorICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdPRkZTRVQqIG9mZnNldHMsCisgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQb2ludCog
b3JpZ2luKTsKKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmICAvLyBTa2lhV2lu
T3V0bGluZUNhY2hlX2gK
</data>
<flag name="review"
          id="13067"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>