<?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>97245</bug_id>
          
          <creation_ts>2012-09-20 12:02:10 -0700</creation_ts>
          <short_desc>Reduce redundant code in SimpleFontData[platform]</short_desc>
          <delta_ts>2012-11-02 15:30:39 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>95866</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephen Chenney">schenney</reporter>
          <assigned_to name="Stephen Chenney">schenney</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>mitz</cc>
    
    <cc>noam</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>724736</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-20 12:02:10 -0700</bug_when>
    <thetext>There is a platform specific file for, e.g. SimpleFontData.h, but almost all of them have identical code. We can simplify this to reduce code duplication and the chance for errors. It will also make it much clearer exactly how platforms differ in font handling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724797</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-20 13:23:25 -0700</bug_when>
    <thetext>Yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757195</commentid>
    <comment_count>2</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-11-02 07:57:14 -0700</bug_when>
    <thetext>SimpleFontData::smallCapsFontData:
All platforms identical code with different ways of defining the constant for &quot;small&quot; and an extra comment for FreeType. All the constahnts are 0.7, but defined in different ways. There is absolutely no need for platform specific code here.

SimpleFontData::emphasisMarkFontData:
All platforms identical except for the way in which they define 0.5 for the constant.

SimpleFontData::boundsForGlyph
SimpleFontData::widthForGlyph
Already a common core with platform[] code.

SimpleFontData::determinePitch
Genuinely different methods

SimpleFontData::createScaledFontData
Genuinely different methods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757233</commentid>
    <comment_count>3</comment_count>
      <attachid>172073</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-11-02 08:58:14 -0700</bug_when>
    <thetext>Created attachment 172073
Patch

Easier than I thought.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757240</commentid>
    <comment_count>4</comment_count>
      <attachid>172073</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-02 09:03:35 -0700</bug_when>
    <thetext>Comment on attachment 172073
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757677</commentid>
    <comment_count>5</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-11-02 15:30:39 -0700</bug_when>
    <thetext>Committed r133362: &lt;http://trac.webkit.org/changeset/133362&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172073</attachid>
            <date>2012-11-02 08:58:14 -0700</date>
            <delta_ts>2012-11-02 09:03:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97245-20121102115633.patch</filename>
            <type>text/plain</type>
            <size>17153</size>
            <attacher name="Stephen Chenney">schenney</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzMwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDEyLTExLTAyICBTdGVwaGVu
IENoZW5uZXkgIDxzY2hlbm5leUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVkdWNlIHJlZHVu
ZGFudCBjb2RlIGluIFNpbXBsZUZvbnREYXRhW3BsYXRmb3JtXQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTcyNDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGR1cGxpY2F0ZWQgY29kZSBvdXQgb2Yg
cGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMgYW5kIGludG8gdGhlIGNvbW1vbiBmaWxlLgorICAgICAg
ICBUaGlzIHJlcHJlc2VudHMgYWxsIG9mIHRoZSBtZXRob2RzIGluIFNpbXBsZUZvbnREYXRhIHRo
YXQgZG8gbm90IGhhdmUgZ2VudWluZQorICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGNoYW5nZSBhdCBhbGwg
aW4gdGhlIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVGb250RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6IEltcGxlbWVudGF0aW9uIGZyb20gcGxh
dGZvcm0gZmlsZXMuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNN
YXJrRm9udERhdGEpOiBJbXBsZW1lbnRhdGlvbiBmcm9tIHBsYXRmb3JtIGZpbGVzLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6IFJlbW92ZWQgY29tbW9uIGNvZGUuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlKTogUmVtb3ZlZCBjb21tb24gY29kZS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlKTog
UmVtb3ZlZCBjb21tb24gY29kZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9T
aW1wbGVGb250RGF0YVBhbmdvLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOiBSZW1vdmVkIGNvbW1v
biBjb2RlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6IFJlbW92ZWQgY29tbW9uIGNvZGUuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3BwOgorICAgICAgICAo
V2ViQ29yZSk6IFJlbW92ZWQgY29tbW9uIGNvZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOiBSZW1vdmVk
IGNvbW1vbiBjb2RlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZv
bnREYXRhV2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZSk6IFJlbW92ZWQgY29tbW9uIGNvZGUu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlKTogUmVtb3ZlZCBjb21tb24gY29kZS4KKwogMjAxMi0xMS0wMiAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgT3B0aW1pemUgRGF0ZVRp
bWVGb3JtYXQ6OnF1b3RlQW5kQXBwZW5kTGl0ZXJhbCBvdXRwdXQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHJldmlz
aW9uIDEzMzMwMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOSBAQCB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NvbnN0IGZsb2F0IHNtYWxsQ2Fwc0Zv
bnRTaXplTXVsdGlwbGllciA9IDAuN2Y7Citjb25zdCBmbG9hdCBlbXBoYXNpc01hcmtGb250U2l6
ZU11bHRpcGxpZXIgPSAwLjVmOworCiBTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCwgYm9v
bCBpc0xvYWRpbmcsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykKICAgICA6IG1fbWF4
Q2hhcldpZHRoKC0xKQogICAgICwgbV9hdmdDaGFyV2lkdGgoLTEpCkBAIC0xOTMsNiArMTk2LDI2
IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4g
bV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbjsKIH0KIAorUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEpCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRh
OjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNt
YWxsQ2FwcykKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNj
YWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVy
KTsKKworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOworfQorCitQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAg
aWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJp
dmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRG
b250RGF0YS0+ZW1waGFzaXNNYXJrKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFz
aXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01h
cmtGb250U2l6ZU11bHRpcGxpZXIpOworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5l
bXBoYXNpc01hcms7Cit9CisKIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1X
aW4uY3BwCShyZXZpc2lvbiAxMzMzMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE5LDI2ICsxMTksNiBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0CiAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0
YShoZm9udCwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSksIGlzQ3Vz
dG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBs
ZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9u
dCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCi0gICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIC43KTsKLQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBz
OwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFz
aXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYg
KCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250
RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9u
LCAuNSk7Ci0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKLX0K
LQogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAogewogICAvLyBUaGlzIHVzZWQgdG8gYmUgaW1w
bGVtZW50ZWQgd2l0aCBJTUxhbmdGb250TGluazIsIGJ1dCBzaW5jZSB0aGF0IGNvZGUgaGFzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250
RGF0YUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTMz
MzAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxl
Rm9udERhdGFGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDI3ICs5OCw2IEBAIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc3lu
dGhldGljT2JsaXF1ZSgpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAotewotICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnRE
YXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwotICAgIC8vIEZJWE1FOiBJIHRoaW5rIHdlIHdh
bnQgdG8gYXNrIEZvbnRDb25maWcgZm9yIHRoZSByaWdodCBmb250IGFnYWluLgotICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEt
PnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjcpOwot
Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7Ci19Ci0KLVBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRG
b250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhLT5lbXBoYXNpc01hcmspCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01h
cmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC41KTsKLQotICAgIHJl
dHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwotfQotCiBib29sIFNpbXBsZUZv
bnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERh
dGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiAxMzMzMDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDggKzUyLDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAKLWNvbnN0IGZsb2F0IHNtYWxsQ2Fwc0ZvbnRTaXplTXVsdGlwbGllciA9
IDAuN2Y7Ci0KIHN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgY3RG
b250KQogewogICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxvb2sgbmVhdCBidXQgdGhpcyBpcyB3
aGF0IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5nLi4uCkBAIC0zNTIsMjYgKzM1MCw2
IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICByZXR1cm4g
MDsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxs
Q2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25z
dAotewotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnRE
YXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwotICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEt
PnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc21hbGxD
YXBzRm9udFNpemVNdWx0aXBsaWVyKTsKLQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+
c21hbGxDYXBzOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0
YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9k
ZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7
Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERl
c2NyaXB0aW9uLCAuNWYpOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNp
c01hcms7Ci19Ci0KIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKIHsKICAgICBOU1N0cmluZyAq
c3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0
X2Nhc3Q8dW5pY2hhcio+KGNoYXJhY3RlcnMpIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5P
XTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZv
bnREYXRhUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCShyZXZpc2lvbiAxMzMzMDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBh
bmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMjYgKzkyLDYgQEAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gU2ltcGxlRm9udERhdAogICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3Jl
YXRlKHBsYXRmb3JtRGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBs
ZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9u
dCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCi0gICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIC43KTsKLQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBz
OwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFz
aXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYg
KCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250
RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9u
LCAuNSk7Ci0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKLX0K
LQogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAogewogICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRh
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1NpbXBsZUZvbnREYXRhUXQuY3BwCShyZXZpc2lvbiAxMzMzMDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsOSArMzQsNiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgp
CiAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwogfQogCi1zdGF0aWMgY29uc3QgZmxv
YXQgc21hbGxDYXBzRnJhY3Rpb24gPSAwLjc7Ci1zdGF0aWMgY29uc3QgZmxvYXQgZW1waGFzaXNN
YXJrRnJhY3Rpb24gPSAwLjU7Ci0KIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFj
dGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKIHsKICAgICBR
UmF3Rm9udCByYXdGb250KG1fcGxhdGZvcm1EYXRhLnJhd0ZvbnQoKSk7CkBAIC02NywyNiArNjQs
NiBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgcmV0dXJu
IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSwg
c2NhbGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6
Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFs
bENhcHMpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2Fs
ZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZyYWN0aW9uKTsKLQotICAgIHJl
dHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwotfQotCi1QYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6
OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1w
aGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3Jl
YXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGcmFjdGlvbik7
Ci0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKLX0KLQogRmxv
YXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25z
dAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3Bw
CShyZXZpc2lvbiAxMzMzMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBTbWFsbGNhcHMgdmVyc2lvbnMgb2YgZm9u
dHMgYXJlIDcwJSB0aGUgc2l6ZSBvZiB0aGUgbm9ybWFsIGZvbnQuCi1zdGF0aWMgY29uc3QgZmxv
YXQgc21hbGxDYXBzRnJhY3Rpb24gPSAwLjdmOwotc3RhdGljIGNvbnN0IGZsb2F0IGVtcGhhc2lz
TWFya0ZyYWN0aW9uID0gLjU7CiAvLyBUaGlzIGlzIHRoZSBsYXJnZXN0IFZETVggdGFibGUgd2hp
Y2ggd2UnbGwgdHJ5IHRvIGxvYWQgYW5kIHBhcnNlLgogc3RhdGljIGNvbnN0IHNpemVfdCBtYXhW
RE1YVGFibGVTaXplID0gMTAyNCAqIDEwMjQ7IC8vIDEgTUIKIApAQCAtMTgzLDI2ICsxODAsNiBA
QCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgcmV0dXJuIFNp
bXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSwgc2Nh
bGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3Jl
YXRlKGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENh
cHMpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRG
b250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZyYWN0aW9uKTsKLQotICAgIHJldHVy
biBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRG
b250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNy
ZWF0ZShpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFz
aXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRl
U2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGcmFjdGlvbik7Ci0K
LSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKLX0KLQogYm9vbCBT
aW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKSBjb25zdAogewogICAgIFNrUGFpbnQgcGFpbnQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250
RGF0YVdpbi5jcHAJKHJldmlzaW9uIDEzMzMwMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
OCwyNiArMTQ4LDYgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAog
ICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQs
IHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURh
dGEuc3ludGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3JtRGF0YS51c2VHREkoKSksIGlzQ3VzdG9t
Rm9udCgpLCBmYWxzZSk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgp
KTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCi0gICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3Jp
cHRpb24sIGNTbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5zbWFsbENhcHM7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRh
KQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlz
Q3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsp
Ci0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRG
b250RGF0YShmb250RGVzY3JpcHRpb24sIC41KTsKLQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250
RGF0YS0+ZW1waGFzaXNNYXJrOwotfQotCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0No
YXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CiB7CiAg
ICAgLy8gRklYTUU6IFN1cHBvcnQgY3VzdG9tIGZvbnRzLgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5DRS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERh
dGFXaW5DRS5jcHAJKHJldmlzaW9uIDEzMzMwMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NSwyNiArNzUsNiBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0
CiAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoKnJlc3VsdCk7CiB9CiAKLVBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRG
b250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhLT5zbWFsbENhcHMpCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBj
cmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC43KTsKLQotICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0
ZShpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNN
YXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2Nh
bGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNSk7Ci0KLSAgICByZXR1cm4gbV9kZXJpdmVk
Rm9udERhdGEtPmVtcGhhc2lzTWFyazsKLX0KLQogRFdPUkQgZ2V0S25vd25Gb250Q29kZVBhZ2Vz
KGNvbnN0IHdjaGFyX3QqIGZhbWlseSk7CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5z
Q2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRhV3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1Np
bXBsZUZvbnREYXRhV3guY3BwCShyZXZpc2lvbiAxMzMzMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTgsMjYgKzk4LDYgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dAogICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYXRmb3JtRGF0YSwgaXNDdXN0
b21Gb250KCksIGZhbHNlKTsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxl
Rm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKSBjb25zdAotewotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCi0gICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250
KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAgbV9k
ZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNj
cmlwdGlvbiwgLjcpOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7
Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNp
c01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29u
c3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250
RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCi0gICAgICAgIG1fZGVyaXZlZEZvbnRE
YXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24s
IC41KTsKLQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwotfQot
CiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFdlIHdpbGwgbmVl
ZCB0byBpbXBsZW1lbnQgdGhpcyB0byBsb2FkIG5vbi1BU0NJSSBlbmNvZGluZyBzaXRlcwo=
</data>
<flag name="review"
          id="186245"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>