<?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>191701</bug_id>
          
          <creation_ts>2018-11-15 12:25:23 -0800</creation_ts>
          <short_desc>[Win] Reduce the use of WKSI library calls: Font Handling</short_desc>
          <delta_ts>2018-11-15 19:10:26 -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>WebCore Misc.</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>177948</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1479025</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-15 12:25:23 -0800</bug_when>
    <thetext>Move some ancient font handling code out of WKSI and into Open Source as a first step in moving away from the GDI font implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479046</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-15 12:53:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/46104809&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479049</commentid>
    <comment_count>2</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-15 12:57:11 -0800</bug_when>
    <thetext>This is step one in a migration away from WKSI in general, and for CG Font handling. Future patches will convert to new font handling routines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479054</commentid>
    <comment_count>3</comment_count>
      <attachid>354976</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-15 13:02:36 -0800</bug_when>
    <thetext>Created attachment 354976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479059</commentid>
    <comment_count>4</comment_count>
      <attachid>354976</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-11-15 13:14:15 -0800</bug_when>
    <thetext>Comment on attachment 354976
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=354976&amp;action=review

r=me assuming the big green block is just copied/pasted from WKSI

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:1141
&gt; +        flush();

This seems unrelated...

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:1164
&gt; +    flush();

Ditto.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:1194
&gt; +    flush();

Ditto.

&gt; Source/WebCore/platform/graphics/win/SimpleFontDataCGWin.cpp:151
&gt; -    wkGetGlyphAdvances(font, m, m_platformData.isSystemFont(), isPrinterFont, glyph, advance);
&gt; +    FontCascade::getGlyphAdvances(font, m, m_platformData.isSystemFont(), isPrinterFont, glyph, advance);

We have similarly named functions; I&apos;d prefer putting the word &quot;platform&quot; inside the name of this function somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479088</commentid>
    <comment_count>5</comment_count>
      <attachid>354976</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-15 13:55:26 -0800</bug_when>
    <thetext>Comment on attachment 354976
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=354976&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:1141
&gt;&gt; +        flush();
&gt; 
&gt; This seems unrelated...

Oh, yeah. I was fixing some canvas tests. I&apos;ll back that part of the patch out.

&gt;&gt; Source/WebCore/platform/graphics/win/SimpleFontDataCGWin.cpp:151
&gt;&gt; +    FontCascade::getGlyphAdvances(font, m, m_platformData.isSystemFont(), isPrinterFont, glyph, advance);
&gt; 
&gt; We have similarly named functions; I&apos;d prefer putting the word &quot;platform&quot; inside the name of this function somewhere.

I&apos;ll change it to FontCascade::getPlatformGlyphAdvances(...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479132</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-15 14:38:40 -0800</bug_when>
    <thetext>Committed r238253: &lt;https://trac.webkit.org/changeset/238253&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479148</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-15 15:20:47 -0800</bug_when>
    <thetext>Build fix: https://trac.webkit.org/changeset/238256/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479230</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-11-15 19:10:26 -0800</bug_when>
    <thetext>Follow-up build fix:
https://trac.webkit.org/changeset/238265/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354976</attachid>
            <date>2018-11-15 13:02:36 -0800</date>
            <delta_ts>2018-11-15 13:14:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191701-20181115130231.patch</filename>
            <type>text/plain</type>
            <size>23242</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzODA5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE4LTExLTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIFJlZHVjZSB0aGUg
dXNlIG9mIFdLU0kgbGlicmFyeSBjYWxsczogRm9udCBIYW5kbGluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNzAxCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS80NjEwNDgwOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNb3ZlIHRoZSBvbGQgV2luZG93cyBmb250IGhhbmRsaW5nIGNvZGUgb3V0IG9m
IFdLU0kgdG8gb3VyIHJlZ3VsYXIKKyAgICAgICAgcmVwb3NpdG9yeS4gV2Ugbm93IGhhbmRsZSBT
UEkgZGlmZmVyZW50bHksIGFuZCBkb24ndCBuZWVkIHRvIGtlZXAKKyAgICAgICAgdGhlc2UgaW1w
bGVtZW50YXRpb25zIGluIGEgc2VwYXJhdGUgbGlicmFyeS4gVGhpcyBzaG91bGQgYWxzbyBoZWxw
CisgICAgICAgIGF2b2lkIHRoZSBzb21ld2hhdCBmcmVxdWVudCBidWlsZCBmYWlsdXJlcyBjYXVz
ZWQgd2hlbiBXS1NJIGlzIG5vdAorICAgICAgICB1cGRhdGVkIGluIHN5bmMgd2l0aCBXZWJLaXQu
CisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIFdpbmRvd3MgdGVzdCBjYXNlcy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6c2V0Rm9u
dFNtb290aGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHRm9udFNtb290aGluZ1N0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdDb250
cmFzdCk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhclR5cGVDb250cmFzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FzY2FkZTo6c3lzdGVtRm9udFNtb290aGluZ0NoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnNldENHQ29udGV4dEZvbnRSZW5kZXJpbmdTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJpbmdTdHlsZUZvckZvbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoQWR2YW5jZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2lt
cGxlRm9udERhdGFDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybVdp
ZHRoRm9yR2x5cGggY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRy
b2xzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhQ29udHJvbHM6OmFkanVzdE1l
ZGlhU2xpZGVyVGh1bWJTaXplKToKKwogMjAxOC0xMS0xMiAgQW50b2luZSBRdWludCAgPGdyYW91
dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9uc10gVHVybiBXZWIgQW5pbWF0
aW9ucyBleHBlcmltZW50YWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuaAkocmV2aXNpb24gMjM4MDk2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcg
KzE4OSwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmltYXJ5Rm9udElzU3lzdGVtRm9udCgpIGNv
bnN0OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4gZGlz
cGxheUxpc3RGb3JUZXh0UnVuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCB1bnNp
Z25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSB7IH0sIEN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiA9IEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbjo6RG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5KSBjb25zdDsKLSAgICAKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENH
KQorICAgIHN0YXRpYyB2b2lkIHNldEZvbnRTbW9vdGhpbmdMZXZlbChpbnQpOworICAgIHN0YXRp
YyB1aW50MzJfdCBzZXRGb250U21vb3RoaW5nU3R5bGUoQ0dDb250ZXh0UmVmLCBib29sIGZvbnRB
bGxvd3NTbW9vdGhpbmcpOworICAgIHN0YXRpYyB2b2lkIHNldEZvbnRTbW9vdGhpbmdDb250cmFz
dChDR0Zsb2F0KTsKKyAgICBzdGF0aWMgdm9pZCBzeXN0ZW1Gb250U21vb3RoaW5nQ2hhbmdlZCgp
OworICAgIHN0YXRpYyB2b2lkIHNldENHQ29udGV4dEZvbnRSZW5kZXJpbmdTdHlsZShDR0NvbnRl
eHRSZWYsIGJvb2wgaXNTeXN0ZW1Gb250LCBib29sIGlzUHJpbnRlckZvbnQsIGJvb2wgdXNlUGxh
dGZvcm1OYXRpdmVHbHlwaHMpOworICAgIHN0YXRpYyB2b2lkIGdldEdseXBoQWR2YW5jZXMoQ0dG
b250UmVmLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSYsIGJvb2wgaXNTeXN0ZW1Gb250LCBib29s
IGlzUHJpbnRlckZvbnQsIENHR2x5cGgsIENHU2l6ZSYgYWR2YW5jZSk7CisjZW5kaWYKIHByaXZh
dGU6CiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywg
Rm9yVGV4dEVtcGhhc2lzIH07CiAKQEAgLTI5OCw2ICszMDYsMTUgQEAgcHJpdmF0ZToKIAogICAg
IHN0YXRpYyBpbnQgc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgeyByZXR1cm4gMTQ7IH0KIAorI2lm
IFBMQVRGT1JNKFdJTikgJiYgVVNFKENHKQorICAgIHN0YXRpYyBkb3VibGUgc19mb250U21vb3Ro
aW5nQ29udHJhc3Q7CisgICAgc3RhdGljIHVpbnQzMl90IHNfZm9udFNtb290aGluZ1R5cGU7Cisg
ICAgc3RhdGljIGludCBzX2ZvbnRTbW9vdGhpbmdMZXZlbDsKKyAgICBzdGF0aWMgdWludDMyX3Qg
c19zeXN0ZW1Gb250U21vb3RoaW5nVHlwZTsKKyAgICBzdGF0aWMgYm9vbCBzX3N5c3RlbUZvbnRT
bW9vdGhpbmdTZXQ7CisgICAgc3RhdGljIGJvb2wgc19zeXN0ZW1Gb250U21vb3RoaW5nRW5hYmxl
ZDsKKyNlbmRpZgorCiAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlv
bjsKICAgICBtdXRhYmxlIFJlZlB0cjxGb250Q2FzY2FkZUZvbnRzPiBtX2ZvbnRzOwogICAgIGZs
b2F0IG1fbGV0dGVyU3BhY2luZyB7IDAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCShyZXZpc2lvbiAyMzgwOTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCiAjaW5jbHVkZSA8V2ViS2l0
U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2luY2x1ZGUgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTU2LDcgKzE1Nyw3IEBAIHZvaWQgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb24KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQogCi0gICAgdWludDMyX3Qgb2xkRm9udFNtb290aGluZ1N0eWxlID0gd2tTZXRGb250U21v
b3RoaW5nU3R5bGUoY2dDb250ZXh0LCBzaG91bGRVc2VGb250U21vb3RoaW5nKTsKKyAgICB1aW50
MzJfdCBvbGRGb250U21vb3RoaW5nU3R5bGUgPSBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGlu
Z1N0eWxlKGNnQ29udGV4dCwgc2hvdWxkVXNlRm9udFNtb290aGluZyk7CiAKICAgICBjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOwogCkBA
IC0xNzUsNyArMTc2LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0Nv
bgogICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY2dDb250ZXh0LCBtYXRyaXgpOwogCiAgICAg
Q0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKLSAg
ICB3a1NldENHQ29udGV4dEZvbnRSZW5kZXJpbmdTdHlsZShjZ0NvbnRleHQsIGZvbnQucGxhdGZv
cm1EYXRhKCkuaXNTeXN0ZW1Gb250KCksIGZhbHNlLCBmb250LnBsYXRmb3JtRGF0YSgpLnVzZUdE
SSgpKTsKKyAgICBGb250Q2FzY2FkZTo6c2V0Q0dDb250ZXh0Rm9udFJlbmRlcmluZ1N0eWxlKGNn
Q29udGV4dCwgZm9udC5wbGF0Zm9ybURhdGEoKS5pc1N5c3RlbUZvbnQoKSwgZmFsc2UsIGZvbnQu
cGxhdGZvcm1EYXRhKCkudXNlR0RJKCkpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsK
ICAgICBmbG9hdCBzaGFkb3dCbHVyOwpAQCAtMjExLDEwICsyMTIsMjUxIEBAIHZvaWQgRm9udENh
c2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb24KICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQog
ICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1
ciwgc2hhZG93Q29sb3IpOwogCi0gICAgd2tSZXN0b3JlRm9udFNtb290aGluZ1N0eWxlKGNnQ29u
dGV4dCwgb2xkRm9udFNtb290aGluZ1N0eWxlKTsKKyAgICBGb250Q2FzY2FkZTo6c2V0Rm9udFNt
b290aGluZ1N0eWxlKGNnQ29udGV4dCwgb2xkRm9udFNtb290aGluZ1N0eWxlKTsKICAgICBDR0Nv
bnRleHRTZXRUZXh0TWF0cml4KGNnQ29udGV4dCwgc2F2ZWRNYXRyaXgpOwogfQogCitjb25zdGV4
cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlTWluaW11bSA9ICgxIDw8IDQpOworY29u
c3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUxpZ2h0ID0gKDIgPDwgNCk7Citj
b25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlTWVkaXVtID0gKDMgPDwgNCk7
Citjb25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlSGVhdnkgPSAoNCA8PCA0
KTsKKworY29uc3RleHByIGludCBmb250U21vb3RoaW5nTGV2ZWxNZWRpdW0gPSAyOworY29uc3Rl
eHByIENHRmxvYXQgYW50aWFsaWFzaW5nR2FtbWEgPSAyLjM7CisKK2RvdWJsZSBGb250Q2FzY2Fk
ZTo6c19mb250U21vb3RoaW5nQ29udHJhc3QgPSAyOwordWludDMyX3QgRm9udENhc2NhZGU6OnNf
Zm9udFNtb290aGluZ1R5cGUgPSBrQ0dGb250U21vb3RoaW5nU3R5bGVNZWRpdW07CitpbnQgRm9u
dENhc2NhZGU6OnNfZm9udFNtb290aGluZ0xldmVsID0gZm9udFNtb290aGluZ0xldmVsTWVkaXVt
OworYm9vbCBGb250Q2FzY2FkZTo6c19zeXN0ZW1Gb250U21vb3RoaW5nRW5hYmxlZDsKK3VpbnQz
Ml90IEZvbnRDYXNjYWRlOjpzX3N5c3RlbUZvbnRTbW9vdGhpbmdUeXBlOworYm9vbCBGb250Q2Fz
Y2FkZTo6c19zeXN0ZW1Gb250U21vb3RoaW5nU2V0OworCit2b2lkIEZvbnRDYXNjYWRlOjpzZXRG
b250U21vb3RoaW5nTGV2ZWwoaW50IGxldmVsKQoreworICAgIGNvbnN0IHVpbnQzMl90IHNtb290
aGluZ1R5cGVbXSA9IHsgCisgICAgICAgIDAsIC8vIEZvbnRTbW9vdGhpbmdUeXBlU3RhbmRhcmQK
KyAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxlTGlnaHQsIC8vIEZvbnRTbW9vdGhpbmdUeXBl
TGlnaHQKKyAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxlTWVkaXVtLCAvLyBGb250U21vb3Ro
aW5nVHlwZU1lZGl1bQorICAgICAgICBrQ0dGb250U21vb3RoaW5nU3R5bGVIZWF2eSwgLy8gRm9u
dFNtb290aGluZ1R5cGVTdHJvbmcKKyAgICB9OworCisgICAgaWYgKGxldmVsIDwgMCB8fCBzdGF0
aWNfY2FzdDxzaXplX3Q+KGxldmVsKSA+IEFSUkFZU0laRShzbW9vdGhpbmdUeXBlKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc19mb250U21vb3RoaW5nVHlwZSA9IHNtb290aGluZ1R5cGVbbGV2
ZWxdOworICAgIHNfZm9udFNtb290aGluZ0xldmVsID0gbGV2ZWw7Cit9CisKK3N0YXRpYyB2b2lk
IHNldENHRm9udFNtb290aGluZ1N0eWxlKENHQ29udGV4dFJlZiBjZ0NvbnRleHQsIHVpbnQzMl90
IHNtb290aGluZ1R5cGUsIGJvb2wgZm9udEFsbG93c1Ntb290aGluZyA9IHRydWUpCit7CisgICAg
aWYgKHNtb290aGluZ1R5cGUpIHsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9u
dHMoY2dDb250ZXh0LCBmb250QWxsb3dzU21vb3RoaW5nKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0
Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwgc21vb3RoaW5nVHlwZSk7CisgICAgfSBlbHNl
CisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgZmFsc2Up
OworfQorCit1aW50MzJfdCBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ1N0eWxlKENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQsIGJvb2wgZm9udEFsbG93c1Ntb290aGluZykKK3sKKyAgICB1aW50
MzJfdCBvbGRGb250U21vb3RoaW5nU3R5bGUgPSAwOworICAgIGlmIChDR0NvbnRleHRHZXRTaG91
bGRTbW9vdGhGb250cyhjZ0NvbnRleHQpKQorICAgICAgICBvbGRGb250U21vb3RoaW5nU3R5bGUg
PSBDR0NvbnRleHRHZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0KTsKKyAgICBzZXRDR0Zv
bnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIHNfZm9udFNtb290aGluZ1R5cGUsIGZvbnRBbGxv
d3NTbW9vdGhpbmcpOworCisgICAgcmV0dXJuIG9sZEZvbnRTbW9vdGhpbmdTdHlsZTsKK30KKwor
dm9pZCBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ0NvbnRyYXN0KENHRmxvYXQgY29udHJh
c3QpCit7CisgICAgc19mb250U21vb3RoaW5nQ29udHJhc3QgPSBjb250cmFzdDsKK30KKworc3Rh
dGljIGZsb2F0IGNsZWFyVHlwZUNvbnRyYXN0KCkKK3sKKyAgICBjb25zdCBXQ0hBUiByZWZlcmVu
Y2VDaGFyYWN0ZXIgPSAnXFwnOworICAgIHN0YXRpYyBVSU5UIGxhc3RDb250cmFzdCA9IDIwMDA7
CisgICAgc3RhdGljIGZsb2F0IGdhbW1hID0gMjsKKyAgICBVSU5UIGNvbnRyYXN0OworCisgICAg
aWYgKCFTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VURk9OVFNNT09USElOR0NPTlRSQVNULCAw
LCAmY29udHJhc3QsIDApIHx8IGNvbnRyYXN0ID09IGxhc3RDb250cmFzdCkKKyAgICAgICAgcmV0
dXJuIGdhbW1hOworCisgICAgbGFzdENvbnRyYXN0ID0gY29udHJhc3Q7CisKKyAgICBhdXRvIGRj
ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOworCisgICAgSEdESU9C
SiBvbGRIRk9OVCA9IDo6U2VsZWN0T2JqZWN0KGRjLmdldCgpLCBHZXRTdG9ja09iamVjdChERUZB
VUxUX0dVSV9GT05UKSk7CisgICAgR0xZUEhNRVRSSUNTIGdseXBoTWV0cmljczsKKworICAgIHN0
YXRpYyBjb25zdCBNQVQyIGlkZW50aXR5ID0geyAwLCAxLCAgMCwgMCwgIDAsIDAsICAwLCAxIH07
CisgICAgaWYgKDo6R2V0R2x5cGhPdXRsaW5lKGRjLmdldCgpLCByZWZlcmVuY2VDaGFyYWN0ZXIs
IEdHT19NRVRSSUNTLCAmZ2x5cGhNZXRyaWNzLCAwLCAwLCAmaWRlbnRpdHkpID09IEdESV9FUlJP
UikKKyAgICAgICAgcmV0dXJuIGNvbnRyYXN0IC8gMTAwMC4wZjsKKworICAgIEJJVE1BUElORk8g
Yml0bWFwSW5mbzsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemUgPSBzaXplb2YoQklU
TUFQSU5GT0hFQURFUik7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOwor
ICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ29tcHJlc3Npb24gPSBCSV9SR0I7CisgICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgPSAwOworICAgIGJpdG1hcEluZm8uYm1pSGVh
ZGVyLmJpWFBlbHNQZXJNZXRlciA9IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlZUGVs
c1Blck1ldGVyID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsckltcG9ydGFudCA9
IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlXaWR0aCA9IGdseXBoTWV0cmljcy5nbUJs
YWNrQm94WDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCA9IC1zdGF0aWNfY2Fz
dDxpbnQ+KGdseXBoTWV0cmljcy5nbUJsYWNrQm94WSk7CisgICAgYml0bWFwSW5mby5ibWlIZWFk
ZXIuYmlCaXRDb3VudCA9IDMyOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xyVXNlZCA9
IDA7CisKKyAgICB1aW50OF90KiBwaXhlbHMgPSBudWxscHRyOworICAgIGF1dG8gYml0bWFwID0g
YWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAsICZiaXRtYXBJbmZvLCBESUJfUkdC
X0NPTE9SUywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZwaXhlbHMpLCAwLCAwKSk7CisgICAg
aWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiBjb250cmFzdCAvIDEwMDAuMGY7CisKKyAgICBI
R0RJT0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGRjLmdldCgpLCBiaXRtYXAuZ2V0KCkp
OworCisgICAgQklUTUFQIGJtcEluZm87CisgICAgOjpHZXRPYmplY3QoYml0bWFwLmdldCgpLCBz
aXplb2YoYm1wSW5mbyksICZibXBJbmZvKTsKKyAgICBtZW1zZXQocGl4ZWxzLCAwLCBnbHlwaE1l
dHJpY3MuZ21CbGFja0JveFkgKiBibXBJbmZvLmJtV2lkdGhCeXRlcyk7CisKKyAgICA6OlNldEJr
TW9kZShkYy5nZXQoKSwgT1BBUVVFKTsKKyAgICA6OlNldFRleHRBbGlnbihkYy5nZXQoKSwgVEFf
TEVGVCB8IFRBX1RPUCk7CisKKyAgICA6OlNldFRleHRDb2xvcihkYy5nZXQoKSwgUkdCKDI1NSwg
MjU1LCAyNTUpKTsKKyAgICA6OlNldEJrQ29sb3IoZGMuZ2V0KCksIFJHQigwLCAwLCAwKSk7Cisg
ICAgOjpFeHRUZXh0T3V0VyhkYy5nZXQoKSwgMCwgMCwgMCwgMCwgJnJlZmVyZW5jZUNoYXJhY3Rl
ciwgMSwgMCk7CisKKyAgICB1aW50OF90KiByZWZlcmVuY2VQaXhlbCA9IG51bGxwdHI7CisgICAg
dWludDhfdCB3aGl0ZVJlZmVyZW5jZVZhbHVlID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGdseXBoTWV0cmljcy5nbUJsYWNrQm94WSAmJiAhcmVmZXJlbmNlUGl4ZWw7ICsraSkgewor
ICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQgKiBnbHlwaE1ldHJpY3MuZ21CbGFja0Jv
eFg7ICsraikgeworICAgICAgICAgICAgd2hpdGVSZWZlcmVuY2VWYWx1ZSA9IHBpeGVsc1tpICog
Ym1wSW5mby5ibVdpZHRoQnl0ZXMgKyBqXTsKKyAgICAgICAgICAgIC8vIExvb2sgZm9yIGEgcGl4
ZWwgdmFsdWUgaW4gdGhlIHJhbmdlIHRoYXQgYWxsb3dzIHVzIHRvIGVzdGltYXRlCisgICAgICAg
ICAgICAvLyBnYW1tYSB3aXRoaW4gMC4xIHdpdGhvdXQgYW4gZXJyb3IuCisgICAgICAgICAgICBp
ZiAod2hpdGVSZWZlcmVuY2VWYWx1ZSA+IDMyICYmIHdoaXRlUmVmZXJlbmNlVmFsdWUgPCAyNDAp
IHsKKyAgICAgICAgICAgICAgICByZWZlcmVuY2VQaXhlbCA9IHBpeGVscyArIGkgKiBibXBJbmZv
LmJtV2lkdGhCeXRlcyArIGo7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmVmZXJlbmNlUGl4ZWwpIHsKKyAgICAgICAg
OjpTZXRUZXh0Q29sb3IoZGMuZ2V0KCksIFJHQigwLCAwLCAwKSk7CisgICAgICAgIDo6U2V0QmtD
b2xvcihkYy5nZXQoKSwgUkdCKDI1NSwgMjU1LCAyNTUpKTsKKyAgICAgICAgOjpFeHRUZXh0T3V0
VyhkYy5nZXQoKSwgMCwgMCwgMCwgMCwgJnJlZmVyZW5jZUNoYXJhY3RlciwgMSwgMCk7CisgICAg
ICAgIHVpbnQ4X3QgYmxhY2tSZWZlcmVuY2VWYWx1ZSA9ICpyZWZlcmVuY2VQaXhlbDsKKworICAg
ICAgICBmbG9hdCBtaW5EZWx0YSA9IDE7CisgICAgICAgIGZvciAoZmxvYXQgZyA9IDE7IGcgPCAy
LjNmOyBnICs9IDAuMWYpIHsKKyAgICAgICAgICAgIGZsb2F0IGRlbHRhID0gZmFicyhwb3dmKCh3
aGl0ZVJlZmVyZW5jZVZhbHVlIC8gMjU1LjBmKSwgZykgKyBwb3dmKChibGFja1JlZmVyZW5jZVZh
bHVlIC8gMjU1LjBmKSwgZykgLSAxKTsKKyAgICAgICAgICAgIGlmIChkZWx0YSA8IG1pbkRlbHRh
KSB7CisgICAgICAgICAgICAgICAgbWluRGVsdGEgPSBkZWx0YTsKKyAgICAgICAgICAgICAgICBn
YW1tYSA9IGc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAg
Z2FtbWEgPSBjb250cmFzdCAvIDEwMDAuMGY7CisKKyAgICA6OlNlbGVjdE9iamVjdChkYy5nZXQo
KSwgb2xkQml0bWFwKTsKKyAgICA6OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgb2xkSEZPTlQpOwor
CisgICAgcmV0dXJuIGdhbW1hOworfQorCit2b2lkIEZvbnRDYXNjYWRlOjpzeXN0ZW1Gb250U21v
b3RoaW5nQ2hhbmdlZCgpCit7CisgICAgOjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VURk9O
VFNNT09USElORywgMCwgJnNfc3lzdGVtRm9udFNtb290aGluZ0VuYWJsZWQsIDApOworICAgIDo6
U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkdUWVBFLCAwLCAmc19zeXN0
ZW1Gb250U21vb3RoaW5nVHlwZSwgMCk7CisgICAgc19mb250U21vb3RoaW5nQ29udHJhc3QgPSBj
bGVhclR5cGVDb250cmFzdCgpOworICAgIHNfc3lzdGVtRm9udFNtb290aGluZ1NldCA9IHRydWU7
Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OnNldENHQ29udGV4dEZvbnRSZW5kZXJpbmdTdHlsZShD
R0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29sIGlzU3lzdGVtRm9udCwgYm9vbCAvKmlzUHJpbnRl
ckZvbnQqLywgYm9vbCB1c2VQbGF0Zm9ybU5hdGl2ZUdseXBocykKK3sKKyAgICBib29sIHNob3Vs
ZEFudGlhbGlhcyA9IHRydWU7CisgICAgYm9vbCBtYXlTdWJwaXhlbFBvc2l0aW9uID0gdHJ1ZTsK
KyAgICBDR0Zsb2F0IGNvbnRyYXN0ID0gMjsKKyAgICBpZiAodXNlUGxhdGZvcm1OYXRpdmVHbHlw
aHMpIHsKKyAgICAgICAgLy8gPHJkYXI6Ly82NTY0NTAxPiBHREkgY2FuJ3Qgc3VicGl4ZWwtcG9z
aXRpb24sIHNvIGRvbid0IGJvdGhlciBhc2tpbmcuCisgICAgICAgIG1heVN1YnBpeGVsUG9zaXRp
b24gPSBmYWxzZTsKKyAgICAgICAgaWYgKCFzX3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQpCisgICAg
ICAgICAgICBzeXN0ZW1Gb250U21vb3RoaW5nQ2hhbmdlZCgpOworICAgICAgICBjb250cmFzdCA9
IHNfZm9udFNtb290aGluZ0NvbnRyYXN0OworICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBzX3N5
c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkOworICAgICAgICBpZiAoc19zeXN0ZW1Gb250U21vb3Ro
aW5nVHlwZSA9PSBGRV9GT05UU01PT1RISU5HU1RBTkRBUkQpIHsKKyAgICAgICAgICAgIENHQ29u
dGV4dFNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIGtDR0ZvbnRTbW9vdGhpbmdTdHls
ZU1pbmltdW0pOworICAgICAgICAgICAgY29udHJhc3QgPSBhbnRpYWxpYXNpbmdHYW1tYTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBDR0NvbnRleHRTZXRGb250U21vb3RoaW5nQ29udHJhc3QoY2dD
b250ZXh0LCBjb250cmFzdCk7CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkVXNlUGxhdGZvcm1OYXRp
dmVHbHlwaHMoY2dDb250ZXh0LCB1c2VQbGF0Zm9ybU5hdGl2ZUdseXBocyk7CisgICAgQ0dDb250
ZXh0U2V0U2hvdWxkQW50aWFsaWFzRm9udHMoY2dDb250ZXh0LCBzaG91bGRBbnRpYWxpYXMpOwor
ICAgIENHQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRUcmFuc2Zvcm0gPSBDR0NvbnRleHRHZXRDVE0o
Y2dDb250ZXh0KTsKKyAgICBib29sIGlzUHVyZVRyYW5zbGF0aW9uID0gY29udGV4dFRyYW5zZm9y
bS5hID09IDEgJiYgKGNvbnRleHRUcmFuc2Zvcm0uZCA9PSAxIHx8IGNvbnRleHRUcmFuc2Zvcm0u
ZCA9PSAtMSkgJiYgIWNvbnRleHRUcmFuc2Zvcm0uYiAmJiAhY29udGV4dFRyYW5zZm9ybS5jOwor
ICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUG9zaXRpb25Gb250cyhjZ0NvbnRleHQsIG1h
eVN1YnBpeGVsUG9zaXRpb24gJiYgKGlzU3lzdGVtRm9udCB8fCAhaXNQdXJlVHJhbnNsYXRpb24p
KTsKKyAgICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoY2dDb250ZXh0
LCBpc1B1cmVUcmFuc2xhdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0dGb250UmVuZGVyaW5n
U3R5bGUgcmVuZGVyaW5nU3R5bGVGb3JGb250KGJvb2wgaXNTeXN0ZW1Gb250LCBib29sIGlzUHJp
bnRlckZvbnQpCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gc3VwcG9ydCBhIG1pbmltdW0gYW50
aWFsaWFzZWQgZm9udCBzaXplLgorCisgICAgaWYgKGlzU3lzdGVtRm9udCB8fCBpc1ByaW50ZXJG
b250KQorICAgICAgICByZXR1cm4ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwg
a0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJp
bmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOworCisgICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJp
bmdTdHlsZUFudGlhbGlhc2luZzsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhBZHZh
bmNlcyhDR0ZvbnRSZWYgZm9udCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIG0sIGJvb2wgaXNT
eXN0ZW1Gb250LCBib29sIGlzUHJpbnRlckZvbnQsIENHR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2
YW5jZSkKK3sKKyAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHlsZSA9IHJlbmRlcmluZ1N0eWxl
Rm9yRm9udChpc1N5c3RlbUZvbnQsIGlzUHJpbnRlckZvbnQpOworICAgIENHRm9udEdldEdseXBo
QWR2YW5jZXNGb3JTdHlsZShmb250LCAmbSwgc3R5bGUsICZnbHlwaCwgMSwgJmFkdmFuY2UpOwor
CisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzc3NjExNjU+IFRoZSBHREkgYmFjayBlbmQgaW4gQ29y
ZSBHcmFwaGljcyBzb21ldGltZXMgcmV0dXJucyBhZHZhbmNlcyB0aGF0CisgICAgLy8gZGlmZmVy
IGZyb20gd2hhdCB0aGUgZm9udCdzIGhtdHggdGFibGUgc3BlY2lmaWVzLiBUaGUgZm9sbG93aW5n
IGNvZGUgY29ycmVjdHMgdGhhdC4KKyAgICBDRkRhdGFSZWYgaG10eFRhYmxlID0gQ0dGb250Q29w
eVRhYmxlRm9yVGFnKGZvbnQsICdobXR4Jyk7CisgICAgaWYgKCFobXR4VGFibGUpCisgICAgICAg
IHJldHVybjsKKyAgICBDRkRhdGFSZWYgaGhlYVRhYmxlID0gQ0dGb250Q29weVRhYmxlRm9yVGFn
KGZvbnQsICdoaGVhJyk7CisgICAgaWYgKCFoaGVhVGFibGUpIHsKKyAgICAgICAgQ0ZSZWxlYXNl
KGhtdHhUYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBDRkluZGV4
IGhoZWFUYWJsZVNpemUgPSAzNjsKKyAgICBjb25zdCBwdHJkaWZmX3QgaGhlYVRhYmxlTnVtYmVy
T2ZITWV0cmljc09mZnNldCA9IDM0OworICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoaGhlYVRhYmxl
KSA8IGhoZWFUYWJsZVNpemUpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7CisgICAg
ICAgIENGUmVsZWFzZShoaGVhVGFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
dW5zaWduZWQgc2hvcnQgbnVtYmVyT2ZITWV0cmljcyA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIHNob3J0Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihoaGVhVGFibGUpICsgaGhlYVRhYmxl
TnVtYmVyT2ZITWV0cmljc09mZnNldCk7CisgICAgbnVtYmVyT2ZITWV0cmljcyA9ICgobnVtYmVy
T2ZITWV0cmljcyAmIDB4RkYpIDw8IDgpIHwgKG51bWJlck9mSE1ldHJpY3MgPj4gOCk7CisgICAg
aWYgKCFudW1iZXJPZkhNZXRyaWNzKSB7CisgICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOwor
ICAgICAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChnbHlwaCA+PSBudW1iZXJPZkhNZXRyaWNzKQorICAgICAgICBnbHlwaCA9IG51bWJl
ck9mSE1ldHJpY3MgLSAxOworCisgICAgaWYgKENGRGF0YUdldExlbmd0aChobXR4VGFibGUpIDwg
NCAqIChnbHlwaCArIDEpKSB7CisgICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOworICAgICAg
ICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVu
c2lnbmVkIHNob3J0IGFkdmFuY2VJbkRlc2lnblVuaXRzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihDRkRhdGFHZXRCeXRlUHRyKGhtdHhUYWJsZSkgKyA0ICogZ2x5
cGgpOworICAgIGFkdmFuY2VJbkRlc2lnblVuaXRzID0gKChhZHZhbmNlSW5EZXNpZ25Vbml0cyAm
IDB4RkYpIDw8IDgpIHwgKGFkdmFuY2VJbkRlc2lnblVuaXRzID4+IDgpOworICAgIENHU2l6ZSBo
b3Jpem9udGFsQWR2YW5jZSA9IENHU2l6ZU1ha2Uoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oYWR2YW5j
ZUluRGVzaWduVW5pdHMpIC8gQ0dGb250R2V0VW5pdHNQZXJFbShmb250KSwgMCk7CisgICAgaG9y
aXpvbnRhbEFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShob3Jpem9udGFsQWR2
YW5jZSwgbSk7CisgICAgYWR2YW5jZS53aWR0aCA9IGhvcml6b250YWxBZHZhbmNlLndpZHRoOwor
ICAgIGlmICghKHN0eWxlICYga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmlu
ZykpCisgICAgICAgIGFkdmFuY2Uud2lkdGggPSByb3VuZGYoYWR2YW5jZS53aWR0aCk7CisKKyAg
ICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKK30KKwog
fQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
bHlwaFBhZ2VUcmVlTm9kZUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJKHJldmlzaW9u
IDIzODA5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBh
Z2VUcmVlTm9kZUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBib29s
IEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpCiAgICAgY29uc3QgRm9udCYgZm9u
dCA9IHRoaXMtPmZvbnQoKTsKICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKICAgICBDR0ds
eXBoIGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpzaXplXTsKLSAgICB3a0dldEdseXBocyhm
b250LnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZmZXIsIGxvY2FsR2x5cGhCdWZmZXIsIGJ1
ZmZlckxlbmd0aCk7CisgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoZm9udC5wbGF0Zm9y
bURhdGEoKS5jZ0ZvbnQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4oYnVmZmVy
KSwgbG9jYWxHbHlwaEJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKICAgICAgICAgR2x5cGggZ2x5cGggPSBs
b2NhbEdseXBoQnVmZmVyW2ldOwogICAgICAgICBpZiAoIWdseXBoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0Q0dXaW4uY3BwCShyZXZpc2lvbiAyMzgwOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjAsNyArMTYwLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5n
KGNvbnMKICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0QWRk
UGF0aChjb250ZXh0LCBmb2N1c1JpbmdQYXRoKTsKIAotICAgIHdrRHJhd0ZvY3VzUmluZyhjb250
ZXh0LCBjb2xvclJlZiwgcmFkaXVzKTsKKyAgICAvLyBGSVhNRTogV2UgY2xlYXIgdGhlIGZpbGwg
Y29sb3IgaGVyZSB0byBhdm9pZCBnZXR0aW5nIGEgYmxhY2sgZmlsbCB3aGVuIGRyYXdpbmcgdGhl
IGZvY3VzIHJpbmcuCisgICAgLy8gRmluZCBvdXQgZnJvbSBDRyBpZiB0aGlzIGlzIHRoZWlyIGJ1
Zy4KKyAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMCwgMCwgMCwgMCk7CisK
KyAgICBDR0NvbnRleHRTZXRGb2N1c1JpbmdXaXRoQ29sb3IoY29udGV4dCwgcmFkaXVzLCBjb2xv
clJlZiwgMCwgKENGRGljdGlvbmFyeVJlZikwKTsKKyAgICBDR0NvbnRleHRGaWxsUGF0aChjb250
ZXh0KTsKIAogICAgIENHUGF0aFJlbGVhc2UoZm9jdXNSaW5nUGF0aCk7CiAKQEAgLTIxNiw3ICsy
MjEsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbgogICAgIGNv
bnN0IENvbG9yJiBwYXR0ZXJuQ29sb3IgPSBzdHlsZS5tb2RlID09IERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlOjpNb2RlOjpHcmFtbWFyID8gZ3JhbW1hclBhdHRlcm5Db2xvcigpIDogc3BlbGxpbmdQ
YXR0ZXJuQ29sb3IoKTsKICAgICBzZXRDR1N0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xv
cik7CiAKLSAgICB3a1NldFBhdHRlcm5QaGFzZUluVXNlclNwYWNlKGNvbnRleHQsIHBvaW50KTsK
KyAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlID0gZ2V0VXNlclRvQmFzZUNUTShjb250
ZXh0KTsKKyAgICBDR1BvaW50IHBoYXNlID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKHBv
aW50LCB1c2VyVG9CYXNlKTsKKworICAgIENHQ29udGV4dFNldFBhdHRlcm5QaGFzZShjb250ZXh0
LCBDR1NpemVNYWtlKHBoYXNlLngsIHBoYXNlLnkpKTsKICAgICBDR0NvbnRleHRTZXRCbGVuZE1v
ZGUoY29udGV4dCwga0NHQmxlbmRNb2RlTm9ybWFsKTsKICAgICAKICAgICAvLyAzIHJvd3MsIGVh
Y2ggb2Zmc2V0IGJ5IGhhbGYgYSBwaXhlbCBmb3IgYmxlbmRpbmcgcHVycG9zZXMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjM4MDk2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEzNyw2ICsxMTM3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgICAgICAgICAgZHJhd1dpdGhTaGFkb3cocmVjdCwg
ZHJhd0Z1bmN0aW9uKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZHJhd1dpdGhvdXRTaGFk
b3cocmVjdCwgZHJhd0Z1bmN0aW9uKTsKKworICAgICAgICBmbHVzaCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xMTU4LDYgKzExNjAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgICAgIGF1dG8gYnJ1c2ggPSBtX3N0YXRlLmZpbGxQYXR0
ZXJuID8gcGF0dGVybkZpbGxCcnVzaCgpIDogc29saWRGaWxsQnJ1c2goKTsKICAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBicnVzaCk7CiAgICAgfSk7CisKKyAg
ICBmbHVzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0xMTg2LDYgKzExOTAsOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgICAgIGNvbnN0IEQy
RDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0
YW5nbGUoJmQyZFJlY3QsIGJydXNoV2l0aENvbG9yKGNvbG9yKSk7CiAgICAgfSk7CisKKyAgICBm
bHVzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAkocmV2aXNpb24gMjM4MDk2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgogI2luY2x1ZGUgIkhX
bmREQy5oIgpAQCAtMTQ3LDcgKzE0OCw3IEBAIGZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JH
bHlwaChHbHlwaAogICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5zZm9ybU1h
a2VTY2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7CiAgCiAgICAgYm9vbCBpc1ByaW50ZXJGb250
ID0gZmFsc2U7Ci0gICAgd2tHZXRHbHlwaEFkdmFuY2VzKGZvbnQsIG0sIG1fcGxhdGZvcm1EYXRh
LmlzU3lzdGVtRm9udCgpLCBpc1ByaW50ZXJGb250LCBnbHlwaCwgYWR2YW5jZSk7CisgICAgRm9u
dENhc2NhZGU6OmdldEdseXBoQWR2YW5jZXMoZm9udCwgbSwgbV9wbGF0Zm9ybURhdGEuaXNTeXN0
ZW1Gb250KCksIGlzUHJpbnRlckZvbnQsIGdseXBoLCBhZHZhbmNlKTsKIAogICAgIHJldHVybiBh
ZHZhbmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAkocmV2aXNpb24g
MjM4MDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyNyArNDAsNyBAQCBzdGF0aWMgY29uc3QgaW50IG1l
ZGlhU2xpZGVyVGh1bWJIZWlnaHQKIAogdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RN
ZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpCiB7Ci0gICAgaW50IHBhcnQ7
Ci0gICAgc3dpdGNoIChzdHlsZS5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIE1lZGlhU2xpZGVy
VGh1bWJQYXJ0OgotICAgICAgICBwYXJ0ID0gTWVkaWFTbGlkZXJUaHVtYjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydDoKLSAgICAgICAgcGFydCA9
IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWVkaWFG
dWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWJQYXJ0OgotICAgICAgICBwYXJ0ID0gTWVkaWFGdWxs
U2NyZWVuVm9sdW1lU2xpZGVyVGh1bWI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDR1NpemUgc2l6ZTsKLSAgICBXS01lYXN1cmVN
ZWRpYVVJUGFydChwYXJ0LCAwLCAmc2l6ZSk7Ci0KLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBzdHls
ZS5lZmZlY3RpdmVab29tKCk7Ci0gICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0
PGludD4oc2l6ZS53aWR0aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgc3R5bGUuc2V0SGVp
Z2h0KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0ICogem9vbUxldmVsKSwgRml4
ZWQpKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMjM4MjQyKQorKysgU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTgtMTEt
MTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0g
UmVkdWNlIHRoZSB1c2Ugb2YgV0tTSSBsaWJyYXJ5IGNhbGxzOiBGb250IEhhbmRsaW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE3MDEKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzQ2MTA0ODA5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0byB1c2UgdGhlIG9sZCBmb250IGhhbmRsaW5n
IHJvdXRpbmVzIG1vdmVkIGZyb20gV0tTSSB0byBGb250Q2FzY2FkZS4KKworICAgICAgICAqIFdl
YlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjpzZXRGb250U21vb3Ro
aW5nKToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjpzZXRGb250U21vb3RoaW5nQ29udHJhc3Qp
OgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoc3lzdGVtUGFyYW1ldGVyQ2hhbmdl
ZCk6CisKIDIwMTgtMTEtMTQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgog
CiAgICAgICAgIERlZmF1bHQgdGhlIHZpZXcgYmFja2dyb3VuZCBjb2xvciBhbmQgdGV4dCBjb2xv
ciB0byBkaWZmZXJlbnQgdmFsdWVzIHdoZW4gaW4gZGFyayBtb2RlLgpJbmRleDogU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMjM4MDk2KQorKysg
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjcxLDcgKzEyNzEsNyBAQCBIUkVTVUxUIFdlYlByZWZlcmVuY2VzOjpzZXRGb250U21v
b3RoaW5nCiAgICAgaWYgKHNtb290aGluZ1R5cGUgPT0gRm9udFNtb290aGluZ1R5cGVXaW5kb3dz
KQogICAgICAgICBzbW9vdGhpbmdUeXBlID0gRm9udFNtb290aGluZ1R5cGVNZWRpdW07CiAjaWYg
VVNFKENHKQotICAgIHdrU2V0Rm9udFNtb290aGluZ0xldmVsKChpbnQpc21vb3RoaW5nVHlwZSk7
CisgICAgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdMZXZlbCgoaW50KXNtb290aGluZ1R5
cGUpOwogI2VuZGlmCiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0xMjg4LDcgKzEyODgsNyBAQCBI
UkVTVUxUIFdlYlByZWZlcmVuY2VzOjpzZXRGb250U21vb3RoaW5nCiB7CiAgICAgc2V0RmxvYXRW
YWx1ZShXZWJLaXRGb250U21vb3RoaW5nQ29udHJhc3RQcmVmZXJlbmNlS2V5LCBjb250cmFzdCk7
CiAjaWYgVVNFKENHKQotICAgIHdrU2V0Rm9udFNtb290aGluZ0NvbnRyYXN0KGNvbnRyYXN0KTsK
KyAgICBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ0NvbnRyYXN0KGNvbnRyYXN0KTsKICNl
bmRpZgogICAgIHJldHVybiBTX09LOwogfQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAJKHJldmlzaW9uIDIzODA5NikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzE5LDcgKzM3MTksNyBAQCBzdGF0aWMgdm9pZCBz
eXN0ZW1QYXJhbWV0ZXJDaGFuZ2VkKFdQQVJBCiB7CiAjaWYgVVNFKENHKQogICAgIGlmIChwYXJh
bWV0ZXIgPT0gU1BJX1NFVEZPTlRTTU9PVEhJTkcgfHwgcGFyYW1ldGVyID09IFNQSV9TRVRGT05U
U01PT1RISU5HVFlQRSB8fCBwYXJhbWV0ZXIgPT0gU1BJX1NFVEZPTlRTTU9PVEhJTkdDT05UUkFT
VCB8fCBwYXJhbWV0ZXIgPT0gU1BJX1NFVEZPTlRTTU9PVEhJTkdPUklFTlRBVElPTikKLSAgICAg
ICAgd2tTeXN0ZW1Gb250U21vb3RoaW5nQ2hhbmdlZCgpOworICAgICAgICBGb250Q2FzY2FkZTo6
c3lzdGVtRm9udFNtb290aGluZ0NoYW5nZWQoKTsKICNlbmRpZgogfQogCg==
</data>
<flag name="review"
          id="372132"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>