<?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>139721</bug_id>
          
          <creation_ts>2014-12-16 20:05:56 -0800</creation_ts>
          <short_desc>Unify the Mac and iOS implementations of FontPlatformData a bit</short_desc>
          <delta_ts>2014-12-18 14:36:21 -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>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mmaxfield</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1056251</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-16 20:05:56 -0800</bug_when>
    <thetext>Unify the Mac and iOS implementations of FontPlatformData a bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056254</commentid>
    <comment_count>1</comment_count>
      <attachid>243425</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-16 20:12:22 -0800</bug_when>
    <thetext>Created attachment 243425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056279</commentid>
    <comment_count>2</comment_count>
      <attachid>243425</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-12-16 23:20:31 -0800</bug_when>
    <thetext>Comment on attachment 243425
Patch

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

&gt; Source/WebCore/platform/graphics/FontPlatformData.cpp:50
&gt; +    , m_ctFont(nullptr)

Smart pointer, so doesn’t need explicit initialization.

&gt; Source/WebCore/platform/graphics/FontPlatformData.cpp:53
&gt; +    , m_cgFont(nullptr)

Smart pointer, so doesn’t need explicit initialization.

&gt; Source/WebCore/platform/graphics/FontPlatformData.cpp:78
&gt; +    , m_font(nullptr)

I suggest we use the newfangled syntax in the header:

    CTFontRef m_font { nullptr };

Then avoid lines of code like the one above.

&gt; Source/WebCore/platform/graphics/FontPlatformData.cpp:79
&gt; +    , m_ctFont(nullptr)

Smart pointer, so doesn’t need explicit initialization.

&gt; Source/WebCore/platform/graphics/FontPlatformData.cpp:82
&gt; +    , m_cgFont(nullptr)

Smart pointer, so doesn’t need explicit initialization.

&gt; Source/WebCore/platform/graphics/FontPlatformData.cpp:107
&gt; +    , m_font(nullptr)

I suggest we use the newfangled syntax in the header:

    CTFontRef m_font { nullptr };

Then avoid lines of code like the one above.

&gt; Source/WebCore/platform/graphics/FontPlatformData.cpp:108
&gt; +    , m_ctFont(nullptr)

Smart pointer, so doesn’t need explicit initialization.

&gt; Source/WebCore/platform/graphics/FontPlatformData.cpp:111
&gt; +    , m_cgFont(nullptr)

Smart pointer, so doesn’t need explicit initialization.

&gt; Source/WebCore/platform/graphics/FontPlatformData.cpp:113
&gt; +    , m_scaledFont(nullptr)

I suggest we use the newfangled syntax in the header:

    cairo_scaled_font_t* m_scaledFont { nullptr };

Then avoid lines of code like the one above.

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:46
&gt;  #if PLATFORM(IOS)

I like it better if we don’t nest #if like this.

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:49
&gt; +#if PLATFORM(MAC)

I like it better if we don’t nest #if like this.

Can we use USE(APPKIT) for this?

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:75
&gt;  

Extra blank line here, I think.

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:92
&gt; +#if PLATFORM(MAC)

Why did you switch from USE(APPKIT) to PLATFORM(MAC)?

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:120
&gt; +#if PLATFORM(MAC)

USE(APPKIT)?

&gt; Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm:49
&gt; +#if PLATFORM(IOS)
&gt;      , m_isEmoji(false)
&gt; +#endif

Could use in-class initialization for this:

    bool m_isEmoji { false };

Unless there is a good reason not to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056545</commentid>
    <comment_count>3</comment_count>
      <attachid>243458</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-17 14:03:11 -0800</bug_when>
    <thetext>Created attachment 243458
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056793</commentid>
    <comment_count>4</comment_count>
      <attachid>243458</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-12-18 09:37:38 -0800</bug_when>
    <thetext>Comment on attachment 243458
Patch

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

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:118
&gt; +    // 

Oops, probably want to go and remove this or add the comment that was intended to be here.

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:139
&gt; +#if PLATFORM(COCOA)
&gt;  #endif

I suggest removing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056901</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-18 14:36:21 -0800</bug_when>
    <thetext>Landed in r177527.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243425</attachid>
            <date>2014-12-16 20:12:22 -0800</date>
            <delta_ts>2014-12-17 14:03:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139721-20141216201312.patch</filename>
            <type>text/plain</type>
            <size>36680</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE0LTEyLTE2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5pZnkgdGhlIE1hYyBhbmQgaU9TIGlt
cGxlbWVudGF0aW9ucyBvZiBGb250UGxhdGZvcm1EYXRhIGEgYml0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk3MjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGEgZmlyc3QgcGFzcyBvZiB1
bmlmeWluZyB0aGUgTWFjIGFuZCBpT1MgaW1wbGVtZW50YXRpb25zIG9mIEZvbnRQbGF0Zm9ybURh
dGEuCisgICAgICAgIE5vdGFibGUgY2hhbmdlczoKKyAgICAgICAgLSBDaGFuZ2UgdGhlIHN0b3Jh
Z2Ugb2YgdGhlIHBsYXRmb3JtIGZvbnQgdG8gYmUgQ1RGb250UmVmIGFjcm9zcyB0aGUgYm9hcmQu
IEFkZHMgTlNGb250CisgICAgICAgICAgc2V0dGVyL2dldHRlci9jb25zdHJ1Y3RvciBhcyBhIHRl
bXBvcmFyeSBtZWFzdXJlcyBkdXJpbmcgdGhlIHRyYW5zaXRpb24gYXdheSBmcm9tIE5TRm9udC4K
KyAgICAgICAgLSBSZW1vdmVzIGR1cGxpY2F0ZSBjb2RlIHRoYXQgb25seSBkaWZmZXJlZCBieSB3
aGV0aGVyIHRoZSB0eXBlIHdhcyBOU0ZvbnQgb3IgQ1RGb250UmVmLgorICAgICAgICAtIFJlZHVj
ZXMgdGhlIG51bWJlciBvZiAjaWZkZWZzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlw
ZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpuc0ZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2V0TlNGb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0NU
Rm9udFJlZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpm
b250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnJvdW5k
c0dseXBoQWR2YW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6Y2dGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Omhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUFzc2lnbik6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpzZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OnJvdW5kc0dseXBoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6YWxsb3dzTGlnYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmN0Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlw
ZVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmxvYWRGb250KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3Rl
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmdldENvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUZvbnREYXRhOjpyZW5kZXJpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udCk6CisKIDIwMTQtMTItMTYgIEd5
dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBNb3ZlIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMgdG8gc3RkOjp1bmlxdWVfcHRyCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmNwcAkocmV2aXNpb24gMTc3MzIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDExICs0
NSwxMiBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKFdURjo6CiAgICAgLCBt
X3dpZHRoVmFyaWFudChSZWd1bGFyV2lkdGgpCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICwgbV9m
b250KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQotI2VsaWYgT1MoREFSV0lOKQorI2VsaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX2ZvbnQoaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgp
KQorICAgICwgbV9jdEZvbnQobnVsbHB0cikKICNlbmRpZgogI2lmIFVTRShDRykgJiYgUExBVEZP
Uk0oV0lOKQotICAgICwgbV9jZ0ZvbnQoMCkKKyAgICAsIG1fY2dGb250KG51bGxwdHIpCiAjZWxp
ZiBVU0UoQ0FJUk8pCiAgICAgLCBtX3NjYWxlZEZvbnQoaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1
ZSgpKQogI2VuZGlmCkBAIC03MywxMSArNzQsMTIgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YSgpCiAjZW5kaWYKICAgICAsIG1fc2l6ZSgwKQogICAgICwgbV93aWR0aFZhcmlh
bnQoUmVndWxhcldpZHRoKQotI2lmIE9TKERBUldJTikKLSAgICAsIG1fZm9udCgwKQorI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgICwgbV9mb250KG51bGxwdHIpCisgICAgLCBtX2N0Rm9udChudWxs
cHRyKQogI2VuZGlmCiAjaWYgVVNFKENHKSAmJiBQTEFURk9STShXSU4pCi0gICAgLCBtX2NnRm9u
dCgwKQorICAgICwgbV9jZ0ZvbnQobnVsbHB0cikKICNlbGlmIFVTRShDQUlSTykKICAgICAsIG1f
c2NhbGVkRm9udCgwKQogI2VuZGlmCkBAIC0xMDEsMTMgKzEwMywxNCBAQCBGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0CiAjZW5kaWYKICAgICAsIG1fc2l6ZShzaXplKQog
ICAgICwgbV93aWR0aFZhcmlhbnQod2lkdGhWYXJpYW50KQotI2lmIE9TKERBUldJTikKLSAgICAs
IG1fZm9udCgwKQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICwgbV9mb250KG51bGxwdHIpCisg
ICAgLCBtX2N0Rm9udChudWxscHRyKQogI2VuZGlmCiAjaWYgVVNFKENHKSAmJiBQTEFURk9STShX
SU4pCi0gICAgLCBtX2NnRm9udCgwKQorICAgICwgbV9jZ0ZvbnQobnVsbHB0cikKICNlbGlmIFVT
RShDQUlSTykKLSAgICAsIG1fc2NhbGVkRm9udCgwKQorICAgICwgbV9zY2FsZWRGb250KG51bGxw
dHIpCiAjZW5kaWYKICAgICAsIG1faXNDb2xvckJpdG1hcEZvbnQoZmFsc2UpCiAgICAgLCBtX2lz
Q29tcG9zaXRlRm9udFJlZmVyZW5jZShmYWxzZSkKQEAgLTEzMCw3ICsxMzMsOCBAQCBGb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9uCiAjZW5kaWYKICAgICAsIG1fc2l6ZShz
aXplKQogICAgICwgbV93aWR0aFZhcmlhbnQod2lkdGhWYXJpYW50KQotICAgICwgbV9mb250KDAp
CisgICAgLCBtX2ZvbnQobnVsbHB0cikKKyAgICAsIG1fY3RGb250KG51bGxwdHIpCiAgICAgLCBt
X2NnRm9udChjZ0ZvbnQpCiAgICAgLCBtX2lzQ29sb3JCaXRtYXBGb250KGZhbHNlKQogICAgICwg
bV9pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UoZmFsc2UpCkBAIC0xNjcsMjEgKzE3MSwxMSBAQCBj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhCiAgICAgbV93aWR0aFZhcmlh
bnQgPSBvdGhlci5tX3dpZHRoVmFyaWFudDsKICAgICBtX2lzQ29sb3JCaXRtYXBGb250ID0gb3Ro
ZXIubV9pc0NvbG9yQml0bWFwRm9udDsKICAgICBtX2lzQ29tcG9zaXRlRm9udFJlZmVyZW5jZSA9
IG90aGVyLm1faXNDb21wb3NpdGVGb250UmVmZXJlbmNlOwotI2lmIE9TKERBUldJTikKKyNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBtX2lzUHJpbnRlckZvbnQgPSBvdGhlci5tX2lzUHJpbnRlckZv
bnQ7CiAjZW5kaWYKIAogICAgIHJldHVybiBwbGF0Zm9ybURhdGFBc3NpZ24ob3RoZXIpOwogfQog
Ci0jaWYgT1MoREFSV0lOKSAmJiBVU0UoQ0cpCi1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9u
dFBsYXRmb3JtRGF0YTo6b3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKLXsKLSAg
ICBpZiAoUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0dGb250Q29weVRhYmxl
Rm9yVGFnKGNnRm9udCgpLCB0YWJsZSkpKQotICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3
cmFwQ0ZEYXRhKGRhdGEuZ2V0KCkpOwotICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQotI2Vu
ZGlmCi0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0
Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDE3NzMyMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsMTUgKzQyLDIzIEBACiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNlbmRpZgogCi0jaWYgT1MoREFS
V0lOKQotT0JKQ19DTEFTUyBOU0ZvbnQ7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKICNpZiBQTEFU
Rk9STShJT1MpCiAjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjZW5kaWYK
KyNpZiBQTEFURk9STShNQUMpCitPQkpDX0NMQVNTIE5TRm9udDsKKyNlbmRpZgogCi10eXBlZGVm
IHN0cnVjdCBDR0ZvbnQqIENHRm9udFJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RGb250
KiBDVEZvbnRSZWY7Cit0eXBlZGVmIFVJbnQzMiBGTUZvbnQ7Cit0eXBlZGVmIEZNRm9udCBBVFNV
Rm9udElEOwordHlwZWRlZiBVSW50MzIgQVRTRm9udFJlZjsKKworI2VuZGlmCisKKyNpZiBVU0Uo
Q0cpCit0eXBlZGVmIHN0cnVjdCBDR0ZvbnQqIENHRm9udFJlZjsKICNlbmRpZgogCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTY0LDI1ICs3MiwxMiBAQCB0eXBlZGVmIGNvbnN0IHN0cnVj
dCBfX0NURm9udCogQ1RGb250UmVmCiB0eXBlZGVmIHN0cnVjdCBIRk9OVF9fKiBIRk9OVDsKICNl
bmRpZgogCi0jaWYgVVNFKENHKQotdHlwZWRlZiBzdHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7Ci0j
aWYgT1MoREFSV0lOKQotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVEZvbnQqIENURm9udFJlZjsK
LXR5cGVkZWYgVUludDMyIEZNRm9udDsKLXR5cGVkZWYgRk1Gb250IEFUU1VGb250SUQ7Ci10eXBl
ZGVmIFVJbnQzMiBBVFNGb250UmVmOwotI2VuZGlmCi0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKLSNp
ZiBPUyhEQVJXSU4pICYmIFVTRShBUFBLSVQpCi1pbmxpbmUgQ1RGb250UmVmIHRvQ1RGb250UmVm
KE5TRm9udCAqbnNGb250KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENURm9udFJlZj4obnNG
b250KTsgfQotI2VuZGlmCi0KIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtOTIsMjEgKzg3LDIxIEBAIHB1YmxpYzoKICAg
ICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KTsKICAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgc3lu
dGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24gPSBIb3Jp
em9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoKTsKIAotI2lmIE9TKERBUldJ
TikKLSNpZiBVU0UoQVBQS0lUKQotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRQbGF0Zm9ybURhdGEo
TlNGb250KiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb250ID0gZmFsc2UsIGJvb2wgc3lu
dGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwKLSAgICAg
ICAgICAgICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZh
cmlhbnQgPSBSZWd1bGFyV2lkdGgpOwotI2Vsc2UKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250UGxh
dGZvcm1EYXRhKENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb250ID0gZmFs
c2UsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBm
YWxzZSwKLSAgICAgICAgICAgICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWws
IEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRQbGF0Zm9ybURhdGEoQ1RGb250UmVmLCBmbG9hdCBzaXpl
LCBib29sIGlzUHJpbnRlckZvbnQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNCb2xkID0gZmFsc2Us
IGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IGZhbHNlLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9u
dGFsLCBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoKTsKKyNpZiBQTEFURk9STShNQUMp
CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gYWxsIE5TRm9udCB1c2FnZSBpcyByZW1v
dmVkLgorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRQbGF0Zm9ybURhdGEoTlNGb250ICosIGZsb2F0
IHNpemUsIGJvb2wgaXNQcmludGVyRm9udCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY0JvbGQgPSBm
YWxzZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsIEZvbnRPcmllbnRhdGlvbiA9IEhv
cml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworI2VuZGlmCiAjZW5k
aWYKIAogI2lmIFVTRShDRykKICAgICBGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiwgZmxvYXQg
c2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmll
bnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCk7CiAjZW5kaWYKLSNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiwgZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJ
KTsKKwogI2lmIFVTRShDRykKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4s
IENHRm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICNlbGlmIFVTRShDQUlSTykKQEAgLTExNCwzOCArMTA5
LDMwIEBAIHB1YmxpYzoKICNlbmRpZgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAg
Rm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9s
ZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwgRm9udE9yaWVudGF0aW9u
ID0gSG9yaXpvbnRhbCwgRm9udFdpZHRoVmFyaWFudCA9IFJlZ3VsYXJXaWR0aCk7Ci0jZW5kaWYK
LQogICAgIFdFQkNPUkVfRVhQT1JUIH5Gb250UGxhdGZvcm1EYXRhKCk7CiAKICNpZiBQTEFURk9S
TShXSU4pCiAgICAgSEZPTlQgaGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQt
PmdldCgpIDogMDsgfQogICAgIGJvb2wgdXNlR0RJKCkgY29uc3QgeyByZXR1cm4gbV91c2VHREk7
IH0KLSNlbGlmIFBMQVRGT1JNKElPUykKKyNlbGlmIFBMQVRGT1JNKENPQ09BKQogICAgIENURm9u
dFJlZiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CiAgICAgdm9pZCBzZXRGb250KENU
Rm9udFJlZik7Ci0jZWxpZiBPUyhEQVJXSU4pCi0gICAgTlNGb250KiBmb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250OyB9Ci0gICAgdm9pZCBzZXRGb250KE5TRm9udCopOworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiBhbGwgTlNGb250IHVzYWdlIGlz
IHJlbW92ZWQuCisgICAgTlNGb250ICpuc0ZvbnQoKSBjb25zdCB7IHJldHVybiAoTlNGb250ICop
bV9mb250OyB9CisgICAgdm9pZCBzZXROU0ZvbnQoTlNGb250ICpmb250KSB7IHNldEZvbnQoKENU
Rm9udFJlZilmb250KTsgfQorI2VuZGlmCiAjZW5kaWYKIAogI2lmIFVTRShDRykKLSNpZiBPUyhE
QVJXSU4pCiAgICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fY2dGb250Lmdl
dCgpOyB9Ci0gICAgQ1RGb250UmVmIGN0Rm9udCgpIGNvbnN0OworI2VuZGlmCiAKLSNpZiAhUExB
VEZPUk0oSU9TKQotICAgIGJvb2wgcm91bmRzR2x5cGhBZHZhbmNlcygpIGNvbnN0OwotI2Vsc2UK
LSAgICBib29sIHJvdW5kc0dseXBoQWR2YW5jZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
I2VuZGlmIC8vICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgQ1RGb250
UmVmIGN0Rm9udCgpIGNvbnN0OwogCiAgICAgYm9vbCBhbGxvd3NMaWdhdHVyZXMoKSBjb25zdDsK
LSNlbHNlCi0gICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fY2dGb250Lmdl
dCgpOyB9Ci0jZW5kaWYKKyAgICBib29sIHJvdW5kc0dseXBoQWR2YW5jZXMoKSBjb25zdDsKICNl
bmRpZgogCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKQEAgLTE3MiwxMCArMTU5LDgg
QEAgcHVibGljOgogI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShDQUlSTykKICAgICAgICAgcmV0
dXJuIG1fZm9udCA/IG1fZm9udC0+aGFzaCgpIDogMDsKICNlbGlmIE9TKERBUldJTikKLSNpZiAh
UExBVEZPUk0oSU9TKQotI2lmIFVTRShDRykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIEFT
U0VSVChtX2ZvbnQgfHwgIW1fY2dGb250KTsKLSNlbmRpZgogICAgICAgICB1aW50cHRyX3QgaGFz
aENvZGVzWzNdID0geyAodWludHB0cl90KW1fZm9udCwgbV93aWR0aFZhcmlhbnQsIHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4obV9pc1ByaW50ZXJGb250IDw8IDMgfCBtX29yaWVudGF0aW9uIDw8IDIg
fCBtX3N5bnRoZXRpY0JvbGQgPDwgMSB8IG1fc3ludGhldGljT2JsaXF1ZSkgfTsKICNlbHNlCiAg
ICAgICAgIEFTU0VSVChtX2ZvbnQgfHwgIW1fY2dGb250IHx8IG1faXNFbW9qaSk7CkBAIC0xOTcs
NyArMTgyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgJiYgbV9zeW50aGV0aWNPYmxpcXVlID09
IG90aGVyLm1fc3ludGhldGljT2JsaXF1ZQogICAgICAgICAgICAgJiYgbV9pc0NvbG9yQml0bWFw
Rm9udCA9PSBvdGhlci5tX2lzQ29sb3JCaXRtYXBGb250CiAgICAgICAgICAgICAmJiBtX2lzQ29t
cG9zaXRlRm9udFJlZmVyZW5jZSA9PSBvdGhlci5tX2lzQ29tcG9zaXRlRm9udFJlZmVyZW5jZQot
I2lmIE9TKERBUldJTikKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgICAgICYmIG1faXNQ
cmludGVyRm9udCA9PSBvdGhlci5tX2lzUHJpbnRlckZvbnQKICNlbmRpZgogICAgICAgICAgICAg
JiYgbV9vcmllbnRhdGlvbiA9PSBvdGhlci5tX29yaWVudGF0aW9uCkBAIC0yMDgsMTQgKzE5Mywx
NCBAQCBwdWJsaWM6CiAgICAgewogI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShDQUlSTykKICAg
ICAgICAgcmV0dXJuIG1fZm9udC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwotI2VsaWYgT1Mo
REFSV0lOKQorI2VsaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIHJldHVybiBtX2ZvbnQgPT0g
aGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOwogI2VsaWYgVVNFKENBSVJPKQogICAgICAgICBy
ZXR1cm4gbV9zY2FsZWRGb250ID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsKICNlbmRp
ZgogICAgIH0KIAotI2lmIChPUyhEQVJXSU4pICYmIFVTRShDRykpIHx8IChQTEFURk9STShXSU4p
ICYmIChVU0UoQ0cpIHx8IFVTRShDQUlSTykpKQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFU
Rk9STShXSU4pCiAgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IG9wZW5UeXBlVGFibGUodWlu
dDMyX3QgdGFibGUpIGNvbnN0OwogI2VuZGlmCiAKQEAgLTIyNywxNiArMjEyLDEyIEBAIHByaXZh
dGU6CiAgICAgYm9vbCBwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNv
bnN0OwogICAgIHZvaWQgcGxhdGZvcm1EYXRhSW5pdChjb25zdCBGb250UGxhdGZvcm1EYXRhJik7
CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhQXNzaWduKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKTsKLSNpZiBQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgc3RhdGljIENURm9udFJlZiBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKTsgfQotI2VsaWYgT1MoREFSV0lOKQot
ICAgIC8vIExvYWQgdmFyaW91cyBkYXRhIGFib3V0IHRoZSBmb250IHNwZWNpZmllZCBieSB8bnNG
b250fCB3aXRoIHRoZSBzaXplIGZvbnRTaXplIGludG8gdGhlIGZvbGxvd2luZyBvdXRwdXQgcGFy
YW10ZXJzOgotICAgIHZvaWQgbG9hZEZvbnQoTlNGb250KiwgZmxvYXQgZm9udFNpemUsIE5TRm9u
dComIG91dE5TRm9udCwgQ0dGb250UmVmJik7Ci0gICAgc3RhdGljIE5TRm9udCogaGFzaFRhYmxl
RGVsZXRlZEZvbnRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0x
KTsgfQotI2VsaWYgUExBVEZPUk0oV0lOKQorI2VuZGlmCisjaWYgUExBVEZPUk0oV0lOKQogICAg
IHZvaWQgcGxhdGZvcm1EYXRhSW5pdChIRk9OVCwgZmxvYXQgc2l6ZSwgSERDLCBXQ0hBUiogZmFj
ZU5hbWUpOwogI2VuZGlmCi0KICNpZiBVU0UoQ0FJUk8pCiAgICAgc3RhdGljIGNhaXJvX3NjYWxl
ZF9mb250X3QqIGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PGNhaXJvX3NjYWxlZF9mb250X3QqPigtMSk7IH0KICNlbmRpZgpAQCAtMjUyLDMwICsy
MzMsMjMgQEAgcHVibGljOgogICAgIEZvbnRXaWR0aFZhcmlhbnQgbV93aWR0aFZhcmlhbnQ7CiAK
IHByaXZhdGU6Ci0jaWYgUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIENU
Rm9udFJlZiBtX2ZvbnQ7Ci0jZWxpZiBPUyhEQVJXSU4pCi0gICAgTlNGb250KiBtX2ZvbnQ7Cisg
ICAgbXV0YWJsZSBSZXRhaW5QdHI8Q1RGb250UmVmPiBtX2N0Rm9udDsKICNlbGlmIFBMQVRGT1JN
KFdJTikKICAgICBSZWZQdHI8U2hhcmVkR0RJT2JqZWN0PEhGT05UPj4gbV9mb250OwogI2VuZGlm
CiAKICNpZiBVU0UoQ0cpCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIFJldGFpblB0cjxDR0ZvbnRS
ZWY+IG1fY2dGb250OwotI2Vsc2UKICAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBtX2NnRm9udDsK
LSAgICBtdXRhYmxlIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fQ1RGb250OwotI2VuZGlmCiAjZW5k
aWYKLQogI2lmIFVTRShDQUlSTykKICAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZv
bnQ7CiAjZW5kaWYKIAogICAgIGJvb2wgbV9pc0NvbG9yQml0bWFwRm9udDsKICAgICBib29sIG1f
aXNDb21wb3NpdGVGb250UmVmZXJlbmNlOwotI2lmIE9TKERBUldJTikKKyNpZiBQTEFURk9STShD
T0NPQSkKICAgICBib29sIG1faXNQcmludGVyRm9udDsKICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJKHJldmlz
aW9uIDE3NzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCBwdWJsaWM6CiAKICNp
ZiBVU0UoQVBQS0lUKQogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBnZXRDb21wb3NpdGVGb250
UmVmZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNvbnN0OwotICAgIE5TRm9udCogZ2V0TlNG
b250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CisgICAgTlNGb250
KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsgfQog
I2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNv
Y29hLm1tCShyZXZpc2lvbiAxNzczMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9udFBsYXRmb3JtRGF0
YS5oIgogCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaCIKICNpZiAhUExBVEZPUk0oSU9TKQogI2ltcG9ydCA8QXBwS2l0L05TRm9udC5o
PgpAQCAtMzksODQgKzQwLDQ4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFRoZXNlIENvcmVU
ZXh0IFRleHQgU3BhY2luZyBmZWF0dXJlIHNlbGVjdG9ycyBhcmUgbm90IGRlZmluZWQgaW4gQ29y
ZVRleHQuCiBlbnVtIFRleHRTcGFjaW5nQ1RGZWF0dXJlU2VsZWN0b3IgeyBUZXh0U3BhY2luZ1By
b3BvcnRpb25hbCwgVGV4dFNwYWNpbmdGdWxsV2lkdGgsIFRleHRTcGFjaW5nSGFsZldpZHRoLCBU
ZXh0U3BhY2luZ1RoaXJkV2lkdGgsIFRleHRTcGFjaW5nUXVhcnRlcldpZHRoIH07CiAKLSNpZiBQ
TEFURk9STShNQUMpCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OmxvYWRGb250KE5TRm9udCogbnNG
b250LCBmbG9hdCwgTlNGb250KiYgb3V0TlNGb250LCBDR0ZvbnRSZWYmIGNnRm9udCkKLXsKLSAg
ICBvdXROU0ZvbnQgPSBuc0ZvbnQ7Ci0gICAgY2dGb250ID0gQ1RGb250Q29weUdyYXBoaWNzRm9u
dCh0b0NURm9udFJlZihuc0ZvbnQpLCAwKTsKLX0KLSNlbmRpZiAgLy8gUExBVEZPUk0oTUFDKQot
Ci0jaWYgIVBMQVRGT1JNKElPUykKLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
TlNGb250ICpuc0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVyRm9udCwgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpCi0gICAgOiBtX3N5bnRoZXRpY0Jv
bGQoc3ludGhldGljQm9sZCkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxp
cXVlKQotICAgICwgbV9vcmllbnRhdGlvbihvcmllbnRhdGlvbikKLSAgICAsIG1fc2l6ZShzaXpl
KQotICAgICwgbV93aWR0aFZhcmlhbnQod2lkdGhWYXJpYW50KQotICAgICwgbV9mb250KG5zRm9u
dCkKLSAgICAsIG1faXNDb2xvckJpdG1hcEZvbnQoZmFsc2UpCi0jZWxzZQotRm9udFBsYXRmb3Jt
RGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYgY3RGb250LCBmbG9hdCBzaXplLCBib29s
IGlzUHJpbnRlckZvbnQsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVl
LCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJp
YW50KQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYgZm9udCwg
ZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb250LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lkdGhW
YXJpYW50IHdpZHRoVmFyaWFudCkKICAgICA6IG1fc3ludGhldGljQm9sZChzeW50aGV0aWNCb2xk
KQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKHN5bnRoZXRpY09ibGlxdWUpCiAgICAgLCBtX29y
aWVudGF0aW9uKG9yaWVudGF0aW9uKQorI2lmIFBMQVRGT1JNKElPUykKICAgICAsIG1faXNFbW9q
aShmYWxzZSkKKyNlbmRpZgogICAgICwgbV9zaXplKHNpemUpCiAgICAgLCBtX3dpZHRoVmFyaWFu
dCh3aWR0aFZhcmlhbnQpCi0gICAgLCBtX2ZvbnQoY3RGb250KQotICAgICwgbV9jZ0ZvbnQoYWRv
cHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KGN0Rm9udCwgTlVMTCkpKQotICAgICwgbV9pc0Nv
bG9yQml0bWFwRm9udChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9udFRy
YWl0Q29sb3JHbHlwaHMpCi0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKLSAgICAsIG1faXNDb21w
b3NpdGVGb250UmVmZXJlbmNlKGZhbHNlKQorICAgICwgbV9mb250KGZvbnQpCisgICAgLCBtX2Nn
Rm9udChhZG9wdENGKENURm9udENvcHlHcmFwaGljc0ZvbnQoZm9udCwgTlVMTCkpKQorICAgICwg
bV9pc0NvbG9yQml0bWFwRm9udChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSAmIGtDVEZv
bnRUcmFpdENvbG9yR2x5cGhzKQorICAgICwgbV9pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UoQ1RG
b250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgJiBrQ1RGb250Q29tcG9zaXRlVHJhaXQpCiAgICAg
LCBtX2lzUHJpbnRlckZvbnQoaXNQcmludGVyRm9udCkKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQot
ICAgIEFTU0VSVF9BUkcobnNGb250LCBuc0ZvbnQpOwotCi0gICAgQ0dGb250UmVmIGNnRm9udCA9
IDA7Ci0gICAgbG9hZEZvbnQobnNGb250LCBzaXplLCBtX2ZvbnQsIGNnRm9udCk7Ci0gICAgewot
ICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1Ry
YWl0cyh0b0NURm9udFJlZihtX2ZvbnQpKTsKLSAgICAgICAgbV9pc0NvbG9yQml0bWFwRm9udCA9
IHRyYWl0cyAmIGtDVEZvbnRDb2xvckdseXBoc1RyYWl0OwotICAgICAgICBtX2lzQ29tcG9zaXRl
Rm9udFJlZmVyZW5jZSA9IHRyYWl0cyAmIGtDVEZvbnRDb21wb3NpdGVUcmFpdDsKLSAgICB9Ci0K
LSAgICBpZiAobV9mb250KQotICAgICAgICBDRlJldGFpbihtX2ZvbnQpOwotCi0gICAgbV9jZ0Zv
bnQgPSBhZG9wdENGKGNnRm9udCk7Ci0jZWxzZQotICAgIEFTU0VSVF9BUkcoY3RGb250LCBjdEZv
bnQpOworICAgIEFTU0VSVF9BUkcoZm9udCwgZm9udCk7CisgICAgQ0ZSZXRhaW4obV9mb250KTsK
K30KIAotICAgIENGUmV0YWluKGN0Rm9udCk7Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKyNp
ZiBQTEFURk9STShNQUMpCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiBhbGwgTlNGb250IHVz
YWdlIGlzIHJlbW92ZWQuCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKE5TRm9u
dCAqZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb250LCBib29sIHN5bnRoZXRpY0Jv
bGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBG
b250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkKKyAgICA6IEZvbnRQbGF0Zm9ybURhdGEoKENU
Rm9udFJlZilmb250LCBzaXplLCBpc1ByaW50ZXJGb250LCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50KQorewogfQorI2VuZGlmCiAKIEZv
bnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKIHsKLSNpZiAhUExBVEZPUk0oSU9T
KQotICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+
KC0xKSkKLSAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7Ci0jZWxzZQogICAgIGlmIChtX2ZvbnQg
JiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVmPigtMSkpCiAgICAgICAgIENG
UmVsZWFzZShtX2ZvbnQpOwotI2VuZGlmCiB9CiAKIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxh
dGZvcm1EYXRhSW5pdChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQogewotI2lmICFQTEFURk9S
TShJT1MpCi0gICAgbV9mb250ID0gZi5tX2ZvbnQgJiYgZi5tX2ZvbnQgIT0gcmVpbnRlcnByZXRf
Y2FzdDxOU0ZvbnQgKj4oLTEpID8gY29uc3RfY2FzdDxOU0ZvbnQgKj4oc3RhdGljX2Nhc3Q8Y29u
c3QgTlNGb250ICo+KENGUmV0YWluKGYubV9mb250KSkpIDogZi5tX2ZvbnQ7Ci0jZWxzZQogICAg
IG1fZm9udCA9IGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250
UmVmPigtMSkgPyBzdGF0aWNfY2FzdDxDVEZvbnRSZWY+KGNvbnN0X2Nhc3Q8dm9pZCAqPihDRlJl
dGFpbihmLm1fZm9udCkpKSA6IGYubV9mb250OwotI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgbV9pc0Vtb2ppID0gZi5tX2lzRW1vamk7CiAjZW5kaWYKICAgICBtX2NnRm9udCA9IGYu
bV9jZ0ZvbnQ7Ci0gICAgbV9DVEZvbnQgPSBmLm1fQ1RGb250OworICAgIG1fY3RGb250ID0gZi5t
X2N0Rm9udDsKIH0KIAogY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6
cGxhdGZvcm1EYXRhQXNzaWduKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYpCkBAIC0xMjUsMjMg
KzkwLDE0IEBAIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGEKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgbV9pc0Vtb2ppID0gZi5tX2lzRW1vamk7CiAjZW5kaWYKLSNpZiAh
UExBVEZPUk0oSU9TKQotICAgIGlmIChtX2ZvbnQgPT0gZi5tX2ZvbnQpCi0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICBpZiAoZi5tX2ZvbnQgJiYgZi5tX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2Fz
dDxOU0ZvbnQgKj4oLTEpKQotICAgICAgICBDRlJldGFpbihmLm1fZm9udCk7Ci0gICAgaWYgKG1f
Zm9udCAmJiBtX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxOU0ZvbnQgKj4oLTEpKQotICAgICAg
ICBDRlJlbGVhc2UobV9mb250KTsKLSNlbHNlCiAgICAgaWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0g
cmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSAmJiBmLm1fZm9udCAmJiBmLm1fZm9udCAh
PSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpICYmIENGRXF1YWwobV9mb250LCBmLm1f
Zm9udCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICBpZiAoZi5tX2ZvbnQgJiYgZi5tX2Zv
bnQgIT0gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KC0xKSkKICAgICAgICAgQ0ZSZXRhaW4o
Zi5tX2ZvbnQpOwogICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8
Q1RGb250UmVmPigtMSkpCiAgICAgICAgIENGUmVsZWFzZShtX2ZvbnQpOwotI2VuZGlmCiAgICAg
bV9mb250ID0gZi5tX2ZvbnQ7Ci0gICAgbV9DVEZvbnQgPSBmLm1fQ1RGb250OworICAgIG1fY3RG
b250ID0gZi5tX2N0Rm9udDsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE2OSwzNCArMTI1
LDYgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoYwogICAgIHJldHVy
biBtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udDsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCi12
b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEZvbnQoTlNGb250ICpmb250KQotewotICAgIEFTU0VS
VF9BUkcoZm9udCwgZm9udCk7Ci0gICAgQVNTRVJUKG1fZm9udCAhPSByZWludGVycHJldF9jYXN0
PE5TRm9udCAqPigtMSkpOwotCi0gICAgaWYgKG1fZm9udCA9PSBmb250KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDRlJldGFpbihmb250KTsKLSAgICBpZiAobV9mb250KQotICAgICAgICBDRlJl
bGVhc2UobV9mb250KTsKLSAgICBtX2ZvbnQgPSBmb250OwotICAgIG1fc2l6ZSA9IFtmb250IHBv
aW50U2l6ZV07Ci0gICAgCi0gICAgQ0dGb250UmVmIGNnRm9udCA9IDA7Ci0gICAgTlNGb250KiBs
b2FkZWRGb250ID0gMDsKLSAgICBsb2FkRm9udChtX2ZvbnQsIG1fc2l6ZSwgbG9hZGVkRm9udCwg
Y2dGb250KTsKLQotICAgIG1fY2dGb250ID0gYWRvcHRDRihjZ0ZvbnQpOwotICAgIHsKLSAgICAg
ICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
dG9DVEZvbnRSZWYobV9mb250KSk7Ci0gICAgICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSB0cmFp
dHMgJiBrQ1RGb250Q29sb3JHbHlwaHNUcmFpdDsKLSAgICAgICAgbV9pc0NvbXBvc2l0ZUZvbnRS
ZWZlcmVuY2UgPSB0cmFpdHMgJiBrQ1RGb250Q29tcG9zaXRlVHJhaXQ7Ci0gICAgfQotICAgIG1f
Q1RGb250ID0gMDsKLX0KLSNlbHNlCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEZvbnQoQ1RG
b250UmVmIGZvbnQpCiB7CiAgICAgQVNTRVJUX0FSRyhmb250LCBmb250KTsKQEAgLTIxMSwyMSAr
MTM5LDI4IEBAIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0Rm9udChDVEZvbnRSZWYKICAgICBt
X2ZvbnQgPSBmb250OwogICAgIG1fc2l6ZSA9IENURm9udEdldFNpemUoZm9udCk7CiAgICAgbV9j
Z0ZvbnQgPSBhZG9wdENGKENURm9udENvcHlHcmFwaGljc0ZvbnQoZm9udCwgbnVsbHB0cikpOwot
ICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSAm
IGtDVEZvbnRUcmFpdENvbG9yR2x5cGhzOworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJh
aXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9mb250KTsKKyAgICBtX2lzQ29sb3JCaXRt
YXBGb250ID0gdHJhaXRzICYga0NURm9udFRyYWl0Q29sb3JHbHlwaHM7CisgICAgbV9pc0NvbXBv
c2l0ZUZvbnRSZWZlcmVuY2UgPSB0cmFpdHMgJiBrQ1RGb250Q29tcG9zaXRlVHJhaXQ7CisgICAg
CisgICAgbV9jdEZvbnQgPSBudWxscHRyOwogfQotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9T
KQogYm9vbCBGb250UGxhdGZvcm1EYXRhOjpyb3VuZHNHbHlwaEFkdmFuY2VzKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gW21fZm9udCByZW5kZXJpbmdNb2RlXSA9PSBOU0ZvbnRBbnRpYWxpYXNlZElu
dGVnZXJBZHZhbmNlbWVudHNSZW5kZXJpbmdNb2RlOwotfQorI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICByZXR1cm4gWyhOU0ZvbnQgKiltX2ZvbnQgcmVuZGVyaW5nTW9kZV0gPT0gTlNGb250QW50aWFs
aWFzZWRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZTsKKyNlbHNlCisgICAgcmV0dXJu
IGZhbHNlOwogI2VuZGlmCit9CisKIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjphbGxvd3NMaWdh
dHVyZXMoKSBjb25zdAogewotI2lmICFQTEFURk9STShJT1MpCi0gICAgcmV0dXJuICFbW21fZm9u
dCBjb3ZlcmVkQ2hhcmFjdGVyU2V0XSBjaGFyYWN0ZXJJc01lbWJlcjonYSddOworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICByZXR1cm4gIVtbKE5TRm9udCAqKW1fZm9udCBjb3ZlcmVkQ2hhcmFjdGVy
U2V0XSBjaGFyYWN0ZXJJc01lbWJlcjonYSddOwogI2Vsc2UKICAgICBpZiAoIW1fZm9udCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzA5LDIzICsyNDQsMjMgQEAgc3RhdGljIENURm9udERl
c2NyaXB0b3JSZWYgY2FzY2FkZVRvTGFzdAogCiBDVEZvbnRSZWYgRm9udFBsYXRmb3JtRGF0YTo6
Y3RGb250KCkgY29uc3QKIHsKLSAgICBpZiAobV9DVEZvbnQpCi0gICAgICAgIHJldHVybiBtX0NU
Rm9udC5nZXQoKTsKKyAgICBpZiAobV9jdEZvbnQpCisgICAgICAgIHJldHVybiBtX2N0Rm9udC5n
ZXQoKTsKIAogICAgIEFTU0VSVChtX2NnRm9udC5nZXQoKSk7CiAjaWYgIVBMQVRGT1JNKElPUykK
LSAgICBtX0NURm9udCA9IHRvQ1RGb250UmVmKG1fZm9udCk7Ci0gICAgaWYgKG1fQ1RGb250KSB7
CisgICAgbV9jdEZvbnQgPSBtX2ZvbnQ7CisgICAgaWYgKG1fY3RGb250KSB7CiAgICAgICAgIENU
Rm9udERlc2NyaXB0b3JSZWYgZm9udERlc2NyaXB0b3I7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gcG9zdFNjcmlwdE5hbWUgPSBhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFt
ZShtX0NURm9udC5nZXQoKSkpOworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBvc3RT
Y3JpcHROYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUobV9jdEZvbnQuZ2V0
KCkpKTsKICAgICAgICAgLy8gSG9lZmxlciBUZXh0IEl0YWxpYyBoYXMgbGluZS1pbml0aWFsIGFu
ZCAtZmluYWwgc3dhc2hlcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIGRpc2FibGUgdGhlbS4KICAg
ICAgICAgaWYgKENGRXF1YWwocG9zdFNjcmlwdE5hbWUuZ2V0KCksIENGU1RSKCJIb2VmbGVyVGV4
dC1JdGFsaWMiKSkgfHwgQ0ZFcXVhbChwb3N0U2NyaXB0TmFtZS5nZXQoKSwgQ0ZTVFIoIkhvZWZs
ZXJUZXh0LUJsYWNrSXRhbGljIikpKQogICAgICAgICAgICAgZm9udERlc2NyaXB0b3IgPSBjYXNj
YWRlVG9MYXN0UmVzb3J0QW5kRGlzYWJsZVN3YXNoZXNGb250RGVzY3JpcHRvcigpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBmb250RGVzY3JpcHRvciA9IGNhc2NhZGVUb0xhc3RSZXNvcnRG
b250RGVzY3JpcHRvcigpOwotICAgICAgICBtX0NURm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRl
Q29weVdpdGhBdHRyaWJ1dGVzKG1fQ1RGb250LmdldCgpLCBtX3NpemUsIDAsIGZvbnREZXNjcmlw
dG9yKSk7CisgICAgICAgIG1fY3RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0
dHJpYnV0ZXMobV9jdEZvbnQuZ2V0KCksIG1fc2l6ZSwgMCwgZm9udERlc2NyaXB0b3IpKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbV9DVEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFw
aGljc0ZvbnQobV9jZ0ZvbnQuZ2V0KCksIG1fc2l6ZSwgMCwgY2FzY2FkZVRvTGFzdFJlc29ydEZv
bnREZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgbV9jdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0
ZVdpdGhHcmFwaGljc0ZvbnQobV9jZ0ZvbnQuZ2V0KCksIG1fc2l6ZSwgMCwgY2FzY2FkZVRvTGFz
dFJlc29ydEZvbnREZXNjcmlwdG9yKCkpKTsKICNlbHNlCiAgICAgLy8gQXBwbGUgQ29sb3IgRW1v
amkgc2l6ZSBpcyBhZGp1c3RlZCAoYW5kIHRoZW4gcmUtYWRqdXN0ZWQgYnkgQ29yZSBUZXh0KSBh
bmQgY2FwcGVkLgogICAgIENHRmxvYXQgc2l6ZSA9ICFtX2lzRW1vamkgPyBtX3NpemUgOiBtX3Np
emUgPD0gMTUgPyA0ICogKG1fc2l6ZSArIDIpIC8gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oNSkgOiAx
NjsKQEAgLTMzNSwyMyArMjcwLDMxIEBAIENURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZv
bnQoKSBjb24KICAgICAgICAgZm9udERlc2NyaXB0b3IgPSBjYXNjYWRlVG9MYXN0UmVzb3J0QW5k
RGlzYWJsZVN3YXNoZXNGb250RGVzY3JpcHRvcigpOwogICAgIGVsc2UKICAgICAgICAgZm9udERl
c2NyaXB0b3IgPSBjYXNjYWRlVG9MYXN0UmVzb3J0Rm9udERlc2NyaXB0b3IoKTsKLSAgICBtX0NU
Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBoaWNzRm9udChtX2NnRm9udC5nZXQo
KSwgc2l6ZSwgMCwgZm9udERlc2NyaXB0b3IpKTsKKyAgICBtX2N0Rm9udCA9IGFkb3B0Q0YoQ1RG
b250Q3JlYXRlV2l0aEdyYXBoaWNzRm9udChtX2NnRm9udC5nZXQoKSwgc2l6ZSwgMCwgZm9udERl
c2NyaXB0b3IpKTsKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAgaWYgKG1fd2lkdGhW
YXJpYW50ICE9IFJlZ3VsYXJXaWR0aCkgewogICAgICAgICBpbnQgZmVhdHVyZVR5cGVWYWx1ZSA9
IGtUZXh0U3BhY2luZ1R5cGU7CiAgICAgICAgIGludCBmZWF0dXJlU2VsZWN0b3JWYWx1ZSA9IG1h
cEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVyZVNlbGVjdG9yKG1fd2lkdGhWYXJpYW50KTsKLSAg
ICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IHNvdXJjZURlc2NyaXB0b3IgPSBh
ZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihtX0NURm9udC5nZXQoKSkpOworICAgICAg
ICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gc291cmNlRGVzY3JpcHRvciA9IGFkb3B0
Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fY3RGb250LmdldCgpKSk7CiAgICAgICAgIFJl
dGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVR5cGUgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZmZWF0dXJlVHlwZVZhbHVl
KSk7CiAgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVNlbGVjdG9yID0gYWRv
cHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmZmVhdHVyZVNlbGVjdG9yVmFsdWUpKTsKICAgICAgICAgUmV0YWluUHRyPENURm9udERlc2Ny
aXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVD
b3B5V2l0aEZlYXR1cmUoc291cmNlRGVzY3JpcHRvci5nZXQoKSwgZmVhdHVyZVR5cGUuZ2V0KCks
IGZlYXR1cmVTZWxlY3Rvci5nZXQoKSkpOwogICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBu
ZXdGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IobmV3RGVzY3Jp
cHRvci5nZXQoKSwgbV9zaXplLCAwKSk7CiAKICAgICAgICAgaWYgKG5ld0ZvbnQpCi0gICAgICAg
ICAgICBtX0NURm9udCA9IG5ld0ZvbnQ7CisgICAgICAgICAgICBtX2N0Rm9udCA9IG5ld0ZvbnQ7
CiAgICAgfQogCi0gICAgcmV0dXJuIG1fQ1RGb250LmdldCgpOworICAgIHJldHVybiBtX2N0Rm9u
dC5nZXQoKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEZvbnRQbGF0Zm9ybURhdGE6
Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0Cit7CisgICAgaWYgKFJldGFpblB0
cjxDRkRhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENHRm9udENvcHlUYWJsZUZvclRhZyhjZ0ZvbnQo
KSwgdGFibGUpKSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShkYXRh
LmdldCgpKTsKKyAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogI2lmbmRlZiBOREVCVUcK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDYWNoZU1hYy5tbQkocmV2aXNpb24gMTc3MzIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQyLDcg
KzM0Miw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3kKICAgICBV
Q2hhcjMyIGNoYXJhY3RlcjsKICAgICBVMTZfR0VUKGNoYXJhY3RlcnMsIDAsIDAsIGxlbmd0aCwg
Y2hhcmFjdGVyKTsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBv
cmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKTsKLSAgICBOU0ZvbnQgKm5zRm9udCA9IHBs
YXRmb3JtRGF0YS5mb250KCk7CisgICAgTlNGb250ICpuc0ZvbnQgPSBwbGF0Zm9ybURhdGEubnNG
b250KCk7CiAKICAgICBOU1N0cmluZyAqc3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdp
dGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8VUNoYXIqPihjaGFyYWN0ZXJzKSBsZW5ndGg6
bGVuZ3RoIGZyZWVXaGVuRG9uZTpOT107CiAgICAgTlNGb250ICpzdWJzdGl0dXRlRm9udCA9IFtO
U0ZvbnQgZmluZEZvbnRMaWtlOm5zRm9udCBmb3JTdHJpbmc6c3RyaW5nIHdpdGhSYW5nZTpOU01h
a2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIGluTGFuZ3VhZ2U6bmlsXTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCShyZXZpc2lv
biAxNzczMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDE2ICsyNDgsMTggQEAgdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogYwogI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNGb250
KiBkcmF3Rm9udDsKICAgICBpZiAoIWlzUHJpbnRlckZvbnQoKSkgewotICAgICAgICBkcmF3Rm9u
dCA9IFtwbGF0Zm9ybURhdGEuZm9udCgpIHNjcmVlbkZvbnRdOwotICAgICAgICBpZiAoZHJhd0Zv
bnQgIT0gcGxhdGZvcm1EYXRhLmZvbnQoKSkKKyAgICAgICAgZHJhd0ZvbnQgPSBbcGxhdGZvcm1E
YXRhLm5zRm9udCgpIHNjcmVlbkZvbnRdOworICAgICAgICBpZiAoZHJhd0ZvbnQgIT0gcGxhdGZv
cm1EYXRhLm5zRm9udCgpKSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUgZ2V0dGluZyB0aGlzIGlu
IHRvbyBtYW55IHBsYWNlcyAoMzQwNjQxMSk7IHVzZSBFUlJPUiBzbyBpdCBvbmx5IHByaW50cyBv
biBkZWJ1ZyB2ZXJzaW9ucyBmb3Igbm93LiAoV2Ugc2hvdWxkIGRlYnVnIHRoaXMgYWxzbywgZXZl
bnR1YWxseSkuCiAgICAgICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHRpbmcgdG8gc2V0IG5vbi1z
Y3JlZW4gZm9udCAoJUApIHdoZW4gZHJhd2luZyB0byBzY3JlZW4uICBVc2luZyBzY3JlZW4gZm9u
dCBhbnl3YXksIG1heSByZXN1bHQgaW4gaW5jb3JyZWN0IG1ldHJpY3MuIiwKLSAgICAgICAgICAg
ICAgICBbW1twbGF0Zm9ybURhdGEuZm9udCgpIGZvbnREZXNjcmlwdG9yXSBmb250QXR0cmlidXRl
c10gb2JqZWN0Rm9yS2V5Ok5TRm9udE5hbWVBdHRyaWJ1dGVdKTsKKyAgICAgICAgICAgICAgICBb
W1twbGF0Zm9ybURhdGEubnNGb250KCkgZm9udERlc2NyaXB0b3JdIGZvbnRBdHRyaWJ1dGVzXSBv
YmplY3RGb3JLZXk6TlNGb250TmFtZUF0dHJpYnV0ZV0pOworICAgICAgICB9CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZHJhd0ZvbnQgPSBbcGxhdGZvcm1EYXRhLmZvbnQoKSBwcmludGVyRm9udF07
Ci0gICAgICAgIGlmIChkcmF3Rm9udCAhPSBwbGF0Zm9ybURhdGEuZm9udCgpKQorICAgICAgICBk
cmF3Rm9udCA9IFtwbGF0Zm9ybURhdGEubnNGb250KCkgcHJpbnRlckZvbnRdOworICAgICAgICBp
ZiAoZHJhd0ZvbnQgIT0gcGxhdGZvcm1EYXRhLm5zRm9udCgpKSB7CiAgICAgICAgICAgICBOU0xv
ZyhAIkF0dGVtcHRpbmcgdG8gc2V0IG5vbi1wcmludGVyIGZvbnQgKCVAKSB3aGVuIHByaW50aW5n
LiAgVXNpbmcgcHJpbnRlciBmb250IGFueXdheSwgbWF5IHJlc3VsdCBpbiBpbmNvcnJlY3QgbWV0
cmljcy4iLAotICAgICAgICAgICAgICAgIFtbW3BsYXRmb3JtRGF0YS5mb250KCkgZm9udERlc2Ny
aXB0b3JdIGZvbnRBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6TlNGb250TmFtZUF0dHJpYnV0ZV0p
OworICAgICAgICAgICAgICAgIFtbW3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmb250RGVzY3JpcHRv
cl0gZm9udEF0dHJpYnV0ZXNdIG9iamVjdEZvcktleTpOU0ZvbnROYW1lQXR0cmlidXRlXSk7Cisg
ICAgICAgIH0KICAgICB9CiAjZW5kaWYKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJl
dmlzaW9uIDE3NzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6Z2UKICAgICAgICAgICAgIGJvb2wg
aXNVc2luZ1ByaW50ZXJGb250ID0gcGxhdGZvcm1EYXRhKCkuaXNQcmludGVyRm9udCgpOwogICAg
ICAgICAgICAgTlNGb250ICpzdWJzdGl0dXRlRm9udCA9IGlzVXNpbmdQcmludGVyRm9udCA/IFtr
ZXkgcHJpbnRlckZvbnRdIDogW2tleSBzY3JlZW5Gb250XTsKIAotICAgICAgICAgICAgQ1RGb250
U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHModG9DVEZvbnRS
ZWYoc3Vic3RpdHV0ZUZvbnQpKTsKKyAgICAgICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHRy
YWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKChDVEZvbnRSZWYpc3Vic3RpdHV0ZUZvbnQp
OwogICAgICAgICAgICAgYm9vbCBzeW50aGV0aWNCb2xkID0gcGxhdGZvcm1EYXRhKCkuc3ludGhl
dGljQm9sZCgpICYmICEodHJhaXRzICYga0NURm9udEJvbGRUcmFpdCk7CiAgICAgICAgICAgICBi
b29sIHN5bnRoZXRpY09ibGlxdWUgPSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkg
JiYgISh0cmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQpOwogCkBAIC0xMzAsNyArMTMwLDcgQEAg
dm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICAgICAgLy8gSXQgb3ZlcnJp
ZGVzIHRoZSBub3JtYWwgIlRpbWVzIiBmYW1pbHkgZm9udC4KICAgICAgICAgLy8gSXQgYWxzbyBh
cHBlYXJzIHRvIGhhdmUgYSBjb3JydXB0IHJlZ3VsYXIgdmFyaWFudC4KICAgICAgICAgTlNTdHJp
bmcgKmZhbGxiYWNrRm9udEZhbWlseTsKLSAgICAgICAgaWYgKFtbbV9wbGF0Zm9ybURhdGEuZm9u
dCgpIGZhbWlseU5hbWVdIGlzRXF1YWw6QCJUaW1lcyJdKQorICAgICAgICBpZiAoW1ttX3BsYXRm
b3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXSBpc0VxdWFsOkAiVGltZXMiXSkKICAgICAgICAg
ICAgIGZhbGxiYWNrRm9udEZhbWlseSA9IEAiVGltZXMgTmV3IFJvbWFuIjsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgZmFsbGJhY2tGb250RmFtaWx5ID0gd2ViRmFsbGJhY2tGb250RmFtaWx5
KCk7CkBAIC0xMzgsMTcgKzEzOCwxNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUlu
aXQoKQogICAgICAgICAvLyBUcnkgc2V0dGluZyB1cCB0aGUgYWx0ZXJuYXRlIGZvbnQuCiAgICAg
ICAgIC8vIFRoaXMgaXMgYSBsYXN0IGRpdGNoIGVmZm9ydCB0byB1c2UgYSBzdWJzdGl0dXRlIGZv
bnQgd2hlbiBzb21ldGhpbmcgaGFzIGdvbmUgd3JvbmcuCiAjaWYgIUVSUk9SX0RJU0FCTEVECi0g
ICAgICAgIFJldGFpblB0cjxOU0ZvbnQ+IGluaXRpYWxGb250ID0gbV9wbGF0Zm9ybURhdGEuZm9u
dCgpOworICAgICAgICBSZXRhaW5QdHI8TlNGb250PiBpbml0aWFsRm9udCA9IG1fcGxhdGZvcm1E
YXRhLm5zRm9udCgpOwogI2VuZGlmCiAgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5mb250KCkp
Ci0gICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXRGb250KFtbTlNGb250TWFuYWdlciBzaGFy
ZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEuZm9udCgpIHRvRmFtaWx5
OmZhbGxiYWNrRm9udEZhbWlseV0pOworICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNG
b250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0
Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6ZmFsbGJhY2tGb250RmFtaWx5XSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldEZvbnQoW05TRm9udCBmb250V2l0
aE5hbWU6ZmFsbGJhY2tGb250RmFtaWx5IHNpemU6bV9wbGF0Zm9ybURhdGEuc2l6ZSgpXSk7Cisg
ICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW05TRm9udCBmb250V2l0aE5hbWU6
ZmFsbGJhY2tGb250RmFtaWx5IHNpemU6bV9wbGF0Zm9ybURhdGEuc2l6ZSgpXSk7CiAgICAgICAg
IGlmICghaW5pdEZvbnREYXRhKHRoaXMpKSB7CiAgICAgICAgICAgICBpZiAoW2ZhbGxiYWNrRm9u
dEZhbWlseSBpc0VxdWFsOkAiVGltZXMgTmV3IFJvbWFuIl0pIHsKICAgICAgICAgICAgICAgICAv
LyBPSywgY291bGRuJ3Qgc2V0dXAgVGltZXMgTmV3IFJvbWFuIGFzIGFuIGFsdGVybmF0ZSB0byBU
aW1lcywgZmFsbGJhY2sKICAgICAgICAgICAgICAgICAvLyBvbiB0aGUgc3lzdGVtIGZvbnQuICBJ
ZiB0aGlzIGZhaWxzIHdlIGhhdmUgbm8gYWx0ZXJuYXRpdmUgbGVmdC4KLSAgICAgICAgICAgICAg
ICBtX3BsYXRmb3JtRGF0YS5zZXRGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdl
cl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEuZm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNr
Rm9udEZhbWlseSgpXSk7CisgICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250
KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9y
bURhdGEubnNGb250KCkgdG9GYW1pbHk6d2ViRmFsbGJhY2tGb250RmFtaWx5KCldKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBXZSB0cmllZCwgVGltZXMsIFRpbWVzIE5ldyBSb21hbiwgYW5kIHRoZSBzeXN0ZW0gZm9u
dC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCiAgICAgICAgICAgICAgICAgICAgIExPR19F
UlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0
KCkpOwpAQCAtMTYzLDEzICsxNjMsMTMgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1J
bml0KCkKIAogICAgICAgICAvLyBSZXBvcnQgdGhlIHByb2JsZW0uCiAgICAgICAgIExPR19FUlJP
UigiQ29ycnVwdCBmb250IGRldGVjdGVkLCB1c2luZyAlQCBpbiBwbGFjZSBvZiAlQC4iLAotICAg
ICAgICAgICAgW21fcGxhdGZvcm1EYXRhLmZvbnQoKSBmYW1pbHlOYW1lXSwgW2luaXRpYWxGb250
LmdldCgpIGZhbWlseU5hbWVdKTsKKyAgICAgICAgICAgIFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQo
KSBmYW1pbHlOYW1lXSwgW2luaXRpYWxGb250LmdldCgpIGZhbWlseU5hbWVdKTsKICAgICB9CiAK
ICAgICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdHJ5IHRvIHNldCB1cCB1c2luZyB0aGUgc3lzdGVt
IGZvbnQuCiAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIFRpbWVzIGFuZCBUaW1lcyBO
ZXcgUm9tYW4gYXJlIGJvdGggdW5hdmFpbGFibGUuCiAgICAgaWYgKGZhaWxlZFNldHVwKSB7Ci0g
ICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldEZvbnQoW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltt
X3BsYXRmb3JtRGF0YS5mb250KCkgcG9pbnRTaXplXV0pOworICAgICAgICBtX3BsYXRmb3JtRGF0
YS5zZXROU0ZvbnQoW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOlttX3BsYXRmb3JtRGF0YS5uc0Zv
bnQoKSBwb2ludFNpemVdXSk7CiAgICAgICAgIExPR19FUlJPUigiZmFpbGVkIHRvIHNldCB1cCBm
b250LCB1c2luZyBzeXN0ZW0gZm9udCAlcyIsIG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CiAgICAg
ICAgIGluaXRGb250RGF0YSh0aGlzKTsKICAgICB9CkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICAvLyB3ZWIgc3RhbmRhcmQuIFRoZSBB
cHBLaXQgYWRqdXN0bWVudCBvZiAyMCUgaXMgdG9vIGJpZyBhbmQgaXMKICAgICAvLyBpbmNvcnJl
Y3RseSBhZGRlZCB0byBsaW5lIHNwYWNpbmcsIHNvIHdlIHVzZSBhIDE1JSBhZGp1c3RtZW50IGlu
c3RlYWQKICAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBhc2NlbnQuCi0gICAgTlNTdHJpbmcgKmZh
bWlseU5hbWUgPSBbbV9wbGF0Zm9ybURhdGEuZm9udCgpIGZhbWlseU5hbWVdOworICAgIE5TU3Ry
aW5nICpmYW1pbHlOYW1lID0gW21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIGZhbWlseU5hbWVdOwog
ICAgIGlmIChbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJUaW1lcyJdIHx8IFtmYW1pbHlO
YW1lIGlzRXF1YWxUb1N0cmluZzpAIkhlbHZldGljYSJdIHx8IFtmYW1pbHlOYW1lIGlzRXF1YWxU
b1N0cmluZzpAIkNvdXJpZXIiXSkKICAgICAgICAgYXNjZW50ICs9IGZsb29yZigoKGFzY2VudCAr
IGRlc2NlbnQpICogMC4xNWYpICsgMC41Zik7CiAKQEAgLTI5NCwyMiArMjk0LDIyIEBAIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKIAogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKICAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICog
c2NhbGVGYWN0b3I7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShbW05TRm9u
dE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZvcm1EYXRhLmZv
bnQoKSB0b1NpemU6c2l6ZV0sIHNpemUsIG1fcGxhdGZvcm1EYXRhLmlzUHJpbnRlckZvbnQoKSwg
ZmFsc2UsIGZhbHNlLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKTsKKyAgICBGb250UGxh
dGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdl
cl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9TaXplOnNpemVdLCBzaXpl
LCBtX3BsYXRmb3JtRGF0YS5pc1ByaW50ZXJGb250KCksIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9y
bURhdGEub3JpZW50YXRpb24oKSk7CiAKICAgICAvLyBBcHBLaXQgcmVzZXRzIHRoZSB0eXBlIGlu
Zm9ybWF0aW9uIChzY3JlZW4vcHJpbnRlcikgd2hlbiB5b3UgY29udmVydCBhIGZvbnQgdG8gYSBk
aWZmZXJlbnQgc2l6ZS4KICAgICAvLyBXZSBoYXZlIHRvIGZpeCB1cCB0aGUgZm9udCB0aGF0IHdl
J3JlIGhhbmRlZCBiYWNrLgotICAgIHNjYWxlZEZvbnREYXRhLnNldEZvbnQoZm9udERlc2NyaXB0
aW9uLnVzZVByaW50ZXJGb250KCkgPyBbc2NhbGVkRm9udERhdGEuZm9udCgpIHByaW50ZXJGb250
XSA6IFtzY2FsZWRGb250RGF0YS5mb250KCkgc2NyZWVuRm9udF0pOworICAgIHNjYWxlZEZvbnRE
YXRhLnNldE5TRm9udChmb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQoKSA/IFtzY2FsZWRG
b250RGF0YS5uc0ZvbnQoKSBwcmludGVyRm9udF0gOiBbc2NhbGVkRm9udERhdGEubnNGb250KCkg
c2NyZWVuRm9udF0pOwogCiAgICAgaWYgKHNjYWxlZEZvbnREYXRhLmZvbnQoKSkgewogICAgICAg
ICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRN
YW5hZ2VyXTsKLSAgICAgICAgTlNGb250VHJhaXRNYXNrIGZvbnRUcmFpdHMgPSBbZm9udE1hbmFn
ZXIgdHJhaXRzT2ZGb250Om1fcGxhdGZvcm1EYXRhLmZvbnQoKV07CisgICAgICAgIE5TRm9udFRy
YWl0TWFzayBmb250VHJhaXRzID0gW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDptX3BsYXRmb3Jt
RGF0YS5uc0ZvbnQoKV07CiAKICAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGlj
Qm9sZCkKICAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0gTlNCb2xkRm9udE1hc2s7CiAgICAgICAg
IGlmIChtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY09ibGlxdWUpCiAgICAgICAgICAgICBmb250
VHJhaXRzIHw9IE5TSXRhbGljRm9udE1hc2s7CiAKLSAgICAgICAgTlNGb250VHJhaXRNYXNrIHNj
YWxlZEZvbnRUcmFpdHMgPSBbZm9udE1hbmFnZXIgdHJhaXRzT2ZGb250OnNjYWxlZEZvbnREYXRh
LmZvbnQoKV07CisgICAgICAgIE5TRm9udFRyYWl0TWFzayBzY2FsZWRGb250VHJhaXRzID0gW2Zv
bnRNYW5hZ2VyIHRyYWl0c09mRm9udDpzY2FsZWRGb250RGF0YS5uc0ZvbnQoKV07CiAgICAgICAg
IHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYgTlNCb2xkRm9u
dE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKTsKICAgICAgICAg
c2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBOU0l0YWxp
Y0ZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKTsKIApA
QCAtMzI2LDcgKzMyNiw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXQKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKIHsKICAgICBOU1N0cmluZyAqc3RyaW5nID0g
W1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8dW5p
Y2hhcio+KGNoYXJhY3RlcnMpIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5PXTsKLSAgICBO
U0NoYXJhY3RlclNldCAqc2V0ID0gW1ttX3BsYXRmb3JtRGF0YS5mb250KCkgY292ZXJlZENoYXJh
Y3RlclNldF0gaW52ZXJ0ZWRTZXRdOworICAgIE5TQ2hhcmFjdGVyU2V0ICpzZXQgPSBbW21fcGxh
dGZvcm1EYXRhLm5zRm9udCgpIGNvdmVyZWRDaGFyYWN0ZXJTZXRdIGludmVydGVkU2V0XTsKICAg
ICBib29sIHJlc3VsdCA9IHNldCAmJiBbc3RyaW5nIHJhbmdlT2ZDaGFyYWN0ZXJGcm9tU2V0OnNl
dF0ubG9jYXRpb24gPT0gTlNOb3RGb3VuZDsKICAgICBbc3RyaW5nIHJlbGVhc2VdOwogICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0zMzQsNyArMzM0LDcgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6Y29u
dGFpbnNDaGFyYWN0ZXJzKAogCiB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgp
CiB7Ci0gICAgTlNGb250KiBmID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOworICAgIE5TRm9udCog
ZiA9IG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOwogICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1N
b25vLgogICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNo
b3VsZCB0cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgogICAgIC8vIE5vdGUgdGhhdCB0
aGUgQXBwS2l0IGRvZXMgbm90IHJlcG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgpAQCAt
MzcwLDcgKzM3MCw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHMK
IGlubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBTaW1wbGVGb250RGF0YTo6cmVuZGVyaW5nU3R5
bGUoKSBjb25zdAogewogICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9udFJl
bmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQ
b3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOwot
ICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLmZvbnQoKTsKKyAgICBOU0ZvbnQgKmZv
bnQgPSBwbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsKICAgICBpZiAoZm9udCkgewogICAgICAgICBz
d2l0Y2ggKFtmb250IHJlbmRlcmluZ01vZGVdKSB7CiAgICAgICAgIGNhc2UgTlNGb250SW50ZWdl
ckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6CkBAIC0zODgsNyArMzg4LDcgQEAgaW5saW5lIENH
Rm9udFJlbmRlcmluZ1N0eWxlIFNpbXBsZUZvbnREYQogCiBpbmxpbmUgYm9vbCBTaW1wbGVGb250
RGF0YTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZh
bmNlKSBjb25zdAogewotICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLmZvbnQoKTsK
KyAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsKICAgICBpZiAoIWZv
bnQgfHwgIXBsYXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBGb250KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBhZHZhbmNlID0gTlNTaXplVG9DR1NpemUoW2ZvbnQgYWR2YW5jZW1lbnRG
b3JHbHlwaDpnbHlwaF0pOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTc3NDM0KQor
KysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTQtMTItMTYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBVbmlmeSB0aGUgTWFjIGFuZCBpT1MgaW1wbGVtZW50YXRpb25zIG9mIEZvbnRQbGF0Zm9ybURh
dGEgYSBiaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzOTcyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKGZvbnROYW1lRm9yRGVzY3JpcHRp
b24pOgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBmdW5jdGlvbiBuYW1lLgorCiAyMDE0LTEyLTE2
ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBJ
bXBsZW1lbnQgYW5kIGFkb3B0IHR3byBuZXcgVGV4dEluZGljYXRvciBwcmVzZW50YXRpb24gYW5p
bWF0aW9ucwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShy
ZXZpc2lvbiAxNzczMjIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00ODgwLDcgKzQ4ODAsNyBAQCBzdGF0aWMgTlNTdHJpbmcg
KmZvbnROYW1lRm9yRGVzY3JpcHRpb24oCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmll
ZFNpemUocG9pbnRTaXplKTsKICAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBwdXJnZVByZXZl
bnRlcjsKICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRhID0gZm9udENh
Y2hlKCkuZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmYWxz
ZSwgV2ViQ29yZTo6Rm9udENhY2hlOjpEb05vdFJldGFpbik7Ci0gICAgcmV0dXJuIFtzaW1wbGVG
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkuZm9udCgpIGZvbnROYW1lXTsKKyAgICByZXR1cm4gW3Np
bXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFtZV07CiB9CiAKIC0g
KHZvaWQpX2FkZFRvU3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSBmb250QToo
TlNGb250ICopYSBmb250QjooTlNGb250ICopYgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243458</attachid>
            <date>2014-12-17 14:03:11 -0800</date>
            <delta_ts>2014-12-17 16:41:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139721-20141217140401.patch</filename>
            <type>text/plain</type>
            <size>39385</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE0LTEyLTE2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5pZnkgdGhlIE1hYyBhbmQgaU9TIGlt
cGxlbWVudGF0aW9ucyBvZiBGb250UGxhdGZvcm1EYXRhIGEgYml0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk3MjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGEgZmlyc3QgcGFzcyBvZiB1
bmlmeWluZyB0aGUgTWFjIGFuZCBpT1MgaW1wbGVtZW50YXRpb25zIG9mIEZvbnRQbGF0Zm9ybURh
dGEuCisgICAgICAgIE5vdGFibGUgY2hhbmdlczoKKyAgICAgICAgLSBDaGFuZ2UgdGhlIHN0b3Jh
Z2Ugb2YgdGhlIHBsYXRmb3JtIGZvbnQgdG8gYmUgQ1RGb250UmVmIGFjcm9zcyB0aGUgYm9hcmQu
IEFkZHMgTlNGb250CisgICAgICAgICAgc2V0dGVyL2dldHRlci9jb25zdHJ1Y3RvciBhcyBhIHRl
bXBvcmFyeSBtZWFzdXJlcyBkdXJpbmcgdGhlIHRyYW5zaXRpb24gYXdheSBmcm9tIE5TRm9udC4K
KyAgICAgICAgLSBSZW1vdmVzIGR1cGxpY2F0ZSBjb2RlIHRoYXQgb25seSBkaWZmZXJlZCBieSB3
aGV0aGVyIHRoZSB0eXBlIHdhcyBOU0ZvbnQgb3IgQ1RGb250UmVmLgorICAgICAgICAtIFJlZHVj
ZXMgdGhlIG51bWJlciBvZiAjaWZkZWZzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlw
ZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpuc0ZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2V0TlNGb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0NU
Rm9udFJlZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpm
b250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnJvdW5k
c0dseXBoQWR2YW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6Y2dGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Omhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUFzc2lnbik6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpzZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OnJvdW5kc0dseXBoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6YWxsb3dzTGlnYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmN0Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlw
ZVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmxvYWRGb250KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3Rl
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmdldENvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUZvbnREYXRhOjpyZW5kZXJpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udCk6CisKIDIwMTQtMTItMTYgIE15
bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGRyZXNz
aW5nIG1vcmUgcG9zdC1yZXZpZXcgY29tbWVudHMgaW4gcjE3NzAzNQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAJ
KHJldmlzaW9uIDE3NzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRQbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2MCArMzUsMTggQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgOiBtX3N5bnRoZXRpY0JvbGQoZmFs
c2UpCi0gICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCi0gICAgLCBtX29yaWVudGF0aW9u
KEhvcml6b250YWwpCi0jaWYgUExBVEZPUk0oSU9TKQotICAgICwgbV9pc0Vtb2ppKGZhbHNlKQot
I2VuZGlmCi0gICAgLCBtX3NpemUoMCkKLSAgICAsIG1fd2lkdGhWYXJpYW50KFJlZ3VsYXJXaWR0
aCkKICNpZiBQTEFURk9STShXSU4pCi0gICAgLCBtX2ZvbnQoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWUpCi0jZWxpZiBPUyhEQVJXSU4pCi0gICAgLCBtX2ZvbnQoaGFzaFRhYmxlRGVsZXRlZEZv
bnRWYWx1ZSgpKQotI2VuZGlmCi0jaWYgVVNFKENHKSAmJiBQTEFURk9STShXSU4pCi0gICAgLCBt
X2NnRm9udCgwKQotI2VsaWYgVVNFKENBSVJPKQotICAgICwgbV9zY2FsZWRGb250KGhhc2hUYWJs
ZURlbGV0ZWRGb250VmFsdWUoKSkKLSNlbmRpZgotICAgICwgbV9pc0NvbG9yQml0bWFwRm9udChm
YWxzZSkKLSAgICAsIG1faXNDb21wb3NpdGVGb250UmVmZXJlbmNlKGZhbHNlKQotI2lmIE9TKERB
UldJTikKLSAgICAsIG1faXNQcmludGVyRm9udChmYWxzZSkKLSNlbmRpZgotI2lmIFBMQVRGT1JN
KFdJTikKLSAgICAsIG1fdXNlR0RJKGZhbHNlKQorICAgIDogbV9mb250KFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlKQorI2VsaWYgUExBVEZPUk0oQ09DT0EpCisgICAgOiBtX2ZvbnQoaGFzaFRh
YmxlRGVsZXRlZEZvbnRWYWx1ZSgpKQogI2VuZGlmCiB7CisjaWYgVVNFKENBSVJPKQorICAgIG1f
c2NhbGVkRm9udCA9IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsKKyNlbmRpZgogfQogCiBG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKCkKLSAgICA6IG1fc3ludGhldGljQm9s
ZChmYWxzZSkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAsIG1fb3JpZW50
YXRpb24oSG9yaXpvbnRhbCkKLSNpZiBQTEFURk9STShJT1MpCi0gICAgLCBtX2lzRW1vamkoZmFs
c2UpCi0jZW5kaWYKLSAgICAsIG1fc2l6ZSgwKQotICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxh
cldpZHRoKQotI2lmIE9TKERBUldJTikKLSAgICAsIG1fZm9udCgwKQotI2VuZGlmCi0jaWYgVVNF
KENHKSAmJiBQTEFURk9STShXSU4pCi0gICAgLCBtX2NnRm9udCgwKQotI2VsaWYgVVNFKENBSVJP
KQotICAgICwgbV9zY2FsZWRGb250KDApCi0jZW5kaWYKLSAgICAsIG1faXNDb2xvckJpdG1hcEZv
bnQoZmFsc2UpCi0gICAgLCBtX2lzQ29tcG9zaXRlRm9udFJlZmVyZW5jZShmYWxzZSkKLSNpZiBP
UyhEQVJXSU4pCi0gICAgLCBtX2lzUHJpbnRlckZvbnQoZmFsc2UpCi0jZW5kaWYKLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgLCBtX3VzZUdESShmYWxzZSkKLSNlbmRpZgogewogfQogCkBAIC05Niw0
NSArNTQsMTkgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdAogICAg
IDogbV9zeW50aGV0aWNCb2xkKHN5bnRoZXRpY0JvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlx
dWUoc3ludGhldGljT2JsaXF1ZSkKICAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCi0j
aWYgUExBVEZPUk0oSU9TKQotICAgICwgbV9pc0Vtb2ppKGZhbHNlKQotI2VuZGlmCiAgICAgLCBt
X3NpemUoc2l6ZSkKICAgICAsIG1fd2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCkKLSNpZiBPUyhE
QVJXSU4pCi0gICAgLCBtX2ZvbnQoMCkKLSNlbmRpZgotI2lmIFVTRShDRykgJiYgUExBVEZPUk0o
V0lOKQotICAgICwgbV9jZ0ZvbnQoMCkKLSNlbGlmIFVTRShDQUlSTykKLSAgICAsIG1fc2NhbGVk
Rm9udCgwKQotI2VuZGlmCi0gICAgLCBtX2lzQ29sb3JCaXRtYXBGb250KGZhbHNlKQotICAgICwg
bV9pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UoZmFsc2UpCi0jaWYgT1MoREFSV0lOKQotICAgICwg
bV9pc1ByaW50ZXJGb250KGZhbHNlKQotI2VuZGlmCi0jaWYgUExBVEZPUk0oV0lOKQotICAgICwg
bV91c2VHREkoZmFsc2UpCi0jZW5kaWYKIHsKIH0KIAotI2lmIE9TKERBUldJTikgJiYgVVNFKENH
KQorI2lmIFVTRShDRykKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ0dGb250
UmVmIGNnRm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3
aWR0aFZhcmlhbnQpCiAgICAgOiBtX3N5bnRoZXRpY0JvbGQoc3ludGhldGljQm9sZCkKICAgICAs
IG1fc3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxpcXVlKQogICAgICwgbV9vcmllbnRhdGlv
bihvcmllbnRhdGlvbikKLSNpZiBQTEFURk9STShJT1MpCi0gICAgLCBtX2lzRW1vamkoZmFsc2Up
Ci0jZW5kaWYKICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV93aWR0aFZhcmlhbnQod2lkdGhW
YXJpYW50KQotICAgICwgbV9mb250KDApCiAgICAgLCBtX2NnRm9udChjZ0ZvbnQpCi0gICAgLCBt
X2lzQ29sb3JCaXRtYXBGb250KGZhbHNlKQotICAgICwgbV9pc0NvbXBvc2l0ZUZvbnRSZWZlcmVu
Y2UoZmFsc2UpCi0gICAgLCBtX2lzUHJpbnRlckZvbnQoZmFsc2UpCiB7CiB9CiAjZW5kaWYKQEAg
LTE0Nyw5ICs3OSw2IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QK
ICAgICAsIG1fd2lkdGhWYXJpYW50KHNvdXJjZS5tX3dpZHRoVmFyaWFudCkKICAgICAsIG1faXND
b2xvckJpdG1hcEZvbnQoc291cmNlLm1faXNDb2xvckJpdG1hcEZvbnQpCiAgICAgLCBtX2lzQ29t
cG9zaXRlRm9udFJlZmVyZW5jZShzb3VyY2UubV9pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UpCi0j
aWYgT1MoREFSV0lOKQotICAgICwgbV9pc1ByaW50ZXJGb250KHNvdXJjZS5tX2lzUHJpbnRlckZv
bnQpCi0jZW5kaWYKIHsKICAgICBwbGF0Zm9ybURhdGFJbml0KHNvdXJjZSk7CiB9CkBAIC0xNjcs
MjEgKzk2LDggQEAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YQogICAg
IG1fd2lkdGhWYXJpYW50ID0gb3RoZXIubV93aWR0aFZhcmlhbnQ7CiAgICAgbV9pc0NvbG9yQml0
bWFwRm9udCA9IG90aGVyLm1faXNDb2xvckJpdG1hcEZvbnQ7CiAgICAgbV9pc0NvbXBvc2l0ZUZv
bnRSZWZlcmVuY2UgPSBvdGhlci5tX2lzQ29tcG9zaXRlRm9udFJlZmVyZW5jZTsKLSNpZiBPUyhE
QVJXSU4pCi0gICAgbV9pc1ByaW50ZXJGb250ID0gb3RoZXIubV9pc1ByaW50ZXJGb250OwotI2Vu
ZGlmCiAKICAgICByZXR1cm4gcGxhdGZvcm1EYXRhQXNzaWduKG90aGVyKTsKIH0KIAotI2lmIE9T
KERBUldJTikgJiYgVVNFKENHKQotUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEZvbnRQbGF0Zm9y
bURhdGE6Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0Ci17Ci0gICAgaWYgKFJl
dGFpblB0cjxDRkRhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENHRm9udENvcHlUYWJsZUZvclRhZyhj
Z0ZvbnQoKSwgdGFibGUpKSkKLSAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0
YShkYXRhLmdldCgpKTsKLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLSNlbmRpZgotCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBs
YXRmb3JtRGF0YS5oCShyZXZpc2lvbiAxNzc0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE1ICs0
MiwyMyBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAotI2lmIE9TKERBUldJTikKLU9C
SkNfQ0xBU1MgTlNGb250OwotCisjaWYgUExBVEZPUk0oQ09DT0EpCiAjaWYgUExBVEZPUk0oSU9T
KQogI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2VuZGlmCisjaWYgVVNF
KEFQUEtJVCkKK09CSkNfQ0xBU1MgTlNGb250OworI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IENH
Rm9udCogQ0dGb250UmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVEZvbnQqIENURm9udFJl
ZjsKK3R5cGVkZWYgVUludDMyIEZNRm9udDsKK3R5cGVkZWYgRk1Gb250IEFUU1VGb250SUQ7Cit0
eXBlZGVmIFVJbnQzMiBBVFNGb250UmVmOworCisjZW5kaWYKKworI2lmIFVTRShDRykKK3R5cGVk
ZWYgc3RydWN0IENHRm9udCogQ0dGb250UmVmOwogI2VuZGlmCiAKICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgpAQCAtNjQsMjUgKzcyLDEyIEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RGb250
KiBDVEZvbnRSZWYKIHR5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05UOwogI2VuZGlmCiAKLSNp
ZiBVU0UoQ0cpCi10eXBlZGVmIHN0cnVjdCBDR0ZvbnQqIENHRm9udFJlZjsKLSNpZiBPUyhEQVJX
SU4pCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NURm9udCogQ1RGb250UmVmOwotdHlwZWRlZiBV
SW50MzIgRk1Gb250OwotdHlwZWRlZiBGTUZvbnQgQVRTVUZvbnRJRDsKLXR5cGVkZWYgVUludDMy
IEFUU0ZvbnRSZWY7Ci0jZW5kaWYKLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotI2lmIE9TKERBUldJ
TikgJiYgVVNFKEFQUEtJVCkKLWlubGluZSBDVEZvbnRSZWYgdG9DVEZvbnRSZWYoTlNGb250ICpu
c0ZvbnQpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q1RGb250UmVmPihuc0ZvbnQpOyB9Ci0j
ZW5kaWYKLQogY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CkBAIC05MiwyMSArODcsMjEgQEAgcHVibGljOgogICAgIEZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHkpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xk
LCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZv
bnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOwogCi0jaWYgT1MoREFSV0lOKQorI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRQbGF0Zm9ybURhdGEoQ1RGb250
UmVmLCBmbG9hdCBzaXplLCBib29sIGlzUHJpbnRlckZvbnQgPSBmYWxzZSwgYm9vbCBzeW50aGV0
aWNCb2xkID0gZmFsc2UsIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IGZhbHNlLCBGb250T3JpZW50
YXRpb24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoKTsKICNp
ZiBVU0UoQVBQS0lUKQotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRQbGF0Zm9ybURhdGEoTlNGb250
KiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb250ID0gZmFsc2UsIGJvb2wgc3ludGhldGlj
Qm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwKLSAgICAgICAgICAg
ICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQg
PSBSZWd1bGFyV2lkdGgpOwotI2Vsc2UKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250UGxhdGZvcm1E
YXRhKENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJGb250ID0gZmFsc2UsIGJv
b2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwK
LSAgICAgICAgICAgICAgICAgICAgIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRX
aWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgpOworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3
aGVuIGFsbCBOU0ZvbnQgdXNhZ2UgaXMgcmVtb3ZlZC4KKyAgICBXRUJDT1JFX0VYUE9SVCBGb250
UGxhdGZvcm1EYXRhKE5TRm9udCAqLCBmbG9hdCBzaXplLCBib29sIGlzUHJpbnRlckZvbnQgPSBm
YWxzZSwgYm9vbCBzeW50aGV0aWNCb2xkID0gZmFsc2UsIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9
IGZhbHNlLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0g
UmVndWxhcldpZHRoKTsKKyNlbmRpZgogI2VuZGlmCiAKICNpZiBVU0UoQ0cpCiAgICAgRm9udFBs
YXRmb3JtRGF0YShDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQpOwog
I2VuZGlmCi0jZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICBGb250UGxhdGZvcm1EYXRh
KEdESU9iamVjdDxIRk9OVD4sIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBz
eW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CisKICNpZiBVU0UoQ0cpCiAgICAgRm9udFBs
YXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+LCBDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wg
c3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZWxp
ZiBVU0UoQ0FJUk8pCkBAIC0xMTQsMzggKzEwOSwzMyBAQCBwdWJsaWM6CiAjZW5kaWYKICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIEZvbnRQbGF0Zm9ybURhdGEoQ1RGb250UmVmLCBm
bG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNPYmxp
cXVlID0gZmFsc2UsIEZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlh
bnQgPSBSZWd1bGFyV2lkdGgpOwotI2VuZGlmCi0KICAgICBXRUJDT1JFX0VYUE9SVCB+Rm9udFBs
YXRmb3JtRGF0YSgpOwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEhGT05UIGhmb250KCkgY29u
c3QgeyByZXR1cm4gbV9mb250ID8gbV9mb250LT5nZXQoKSA6IDA7IH0KICAgICBib29sIHVzZUdE
SSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlR0RJOyB9Ci0jZWxpZiBQTEFURk9STShJT1MpCisjZWxp
ZiBQTEFURk9STShDT0NPQSkKKyAgICAvLyAKICAgICBDVEZvbnRSZWYgZm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udDsgfQogICAgIHZvaWQgc2V0Rm9udChDVEZvbnRSZWYpOwotI2VsaWYgT1Mo
REFSV0lOKQotICAgIE5TRm9udCogZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQotICAg
IHZvaWQgc2V0Rm9udChOU0ZvbnQqKTsKLSNlbmRpZgogCi0jaWYgVVNFKENHKQotI2lmIE9TKERB
UldJTikKLSAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4gbV9jZ0ZvbnQuZ2V0
KCk7IH0KICAgICBDVEZvbnRSZWYgY3RGb250KCkgY29uc3Q7CiAKLSNpZiAhUExBVEZPUk0oSU9T
KQorICAgIGJvb2wgYWxsb3dzTGlnYXR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByb3VuZHNHbHlw
aEFkdmFuY2VzKCkgY29uc3Q7Ci0jZWxzZQotICAgIGJvb2wgcm91bmRzR2x5cGhBZHZhbmNlcygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotICAg
IGJvb2wgYWxsb3dzTGlnYXR1cmVzKCkgY29uc3Q7Ci0jZWxzZQorI2lmIFVTRShBUFBLSVQpCisg
ICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gYWxsIE5TRm9udCB1c2FnZSBpcyByZW1vdmVk
LgorICAgIE5TRm9udCAqbnNGb250KCkgY29uc3QgeyByZXR1cm4gKE5TRm9udCAqKW1fZm9udDsg
fQorICAgIHZvaWQgc2V0TlNGb250KE5TRm9udCAqZm9udCkgeyBzZXRGb250KChDVEZvbnRSZWYp
Zm9udCk7IH0KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBVU0UoQ0cpCiAgICAgQ0dGb250UmVmIGNn
Rm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fY2dGb250LmdldCgpOyB9CiAjZW5kaWYKKworI2lmIFBM
QVRGT1JNKENPQ09BKQogI2VuZGlmCiAKICAgICBib29sIGlzRml4ZWRQaXRjaCgpIGNvbnN0OwpA
QCAtMTU1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICBib29sIHN5bnRoZXRpY09ibGlxdWUoKSBj
b25zdCB7IHJldHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KICAgICBib29sIGlzQ29sb3JCaXRt
YXBGb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbG9yQml0bWFwRm9udDsgfQogICAgIGJvb2wg
aXNDb21wb3NpdGVGb250UmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBvc2l0ZUZv
bnRSZWZlcmVuY2U7IH0KLSNpZiBPUyhEQVJXSU4pCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
Ym9vbCBpc1ByaW50ZXJGb250KCkgY29uc3QgeyByZXR1cm4gbV9pc1ByaW50ZXJGb250OyB9CiAj
ZW5kaWYKICAgICBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBt
X29yaWVudGF0aW9uOyB9CkBAIC0xNzIsMTAgKzE2Miw4IEBAIHB1YmxpYzoKICNpZiBQTEFURk9S
TShXSU4pICYmICFVU0UoQ0FJUk8pCiAgICAgICAgIHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQtPmhh
c2goKSA6IDA7CiAjZWxpZiBPUyhEQVJXSU4pCi0jaWYgIVBMQVRGT1JNKElPUykKLSNpZiBVU0Uo
Q0cpCisjaWYgVVNFKEFQUEtJVCkKICAgICAgICAgQVNTRVJUKG1fZm9udCB8fCAhbV9jZ0ZvbnQp
OwotI2VuZGlmCiAgICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbM10gPSB7ICh1aW50cHRyX3Qp
bV9mb250LCBtX3dpZHRoVmFyaWFudCwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihtX2lzUHJpbnRl
ckZvbnQgPDwgMyB8IG1fb3JpZW50YXRpb24gPDwgMiB8IG1fc3ludGhldGljQm9sZCA8PCAxIHwg
bV9zeW50aGV0aWNPYmxpcXVlKSB9OwogI2Vsc2UKICAgICAgICAgQVNTRVJUKG1fZm9udCB8fCAh
bV9jZ0ZvbnQgfHwgbV9pc0Vtb2ppKTsKQEAgLTE5Nyw3ICsxODUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAmJiBtX3N5bnRoZXRpY09ibGlxdWUgPT0gb3RoZXIubV9zeW50aGV0aWNPYmxpcXVl
CiAgICAgICAgICAgICAmJiBtX2lzQ29sb3JCaXRtYXBGb250ID09IG90aGVyLm1faXNDb2xvckJp
dG1hcEZvbnQKICAgICAgICAgICAgICYmIG1faXNDb21wb3NpdGVGb250UmVmZXJlbmNlID09IG90
aGVyLm1faXNDb21wb3NpdGVGb250UmVmZXJlbmNlCi0jaWYgT1MoREFSV0lOKQorI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgICAgICAgICAgJiYgbV9pc1ByaW50ZXJGb250ID09IG90aGVyLm1faXNQ
cmludGVyRm9udAogI2VuZGlmCiAgICAgICAgICAgICAmJiBtX29yaWVudGF0aW9uID09IG90aGVy
Lm1fb3JpZW50YXRpb24KQEAgLTIwOCwxNCArMTk2LDE0IEBAIHB1YmxpYzoKICAgICB7CiAjaWYg
UExBVEZPUk0oV0lOKSAmJiAhVVNFKENBSVJPKQogICAgICAgICByZXR1cm4gbV9mb250LmlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCk7Ci0jZWxpZiBPUyhEQVJXSU4pCisjZWxpZiBQTEFURk9STShD
T0NPQSkKICAgICAgICAgcmV0dXJuIG1fZm9udCA9PSBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVl
KCk7CiAjZWxpZiBVU0UoQ0FJUk8pCiAgICAgICAgIHJldHVybiBtX3NjYWxlZEZvbnQgPT0gaGFz
aFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOwogI2VuZGlmCiAgICAgfQogCi0jaWYgKE9TKERBUldJ
TikgJiYgVVNFKENHKSkgfHwgKFBMQVRGT1JNKFdJTikgJiYgKFVTRShDRykgfHwgVVNFKENBSVJP
KSkpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKFdJTikKICAgICBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gb3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3Q7CiAjZW5k
aWYKIApAQCAtMjI3LDYwICsyMTUsNDkgQEAgcHJpdmF0ZToKICAgICBib29sIHBsYXRmb3JtSXNF
cXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7CiAgICAgdm9pZCBwbGF0Zm9ybURh
dGFJbml0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKICAgICBjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBwbGF0Zm9ybURhdGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotI2lmIFBM
QVRGT1JNKElPUykKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBzdGF0aWMgQ1RGb250UmVmIGhh
c2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENURm9u
dFJlZj4oLTEpOyB9Ci0jZWxpZiBPUyhEQVJXSU4pCi0gICAgLy8gTG9hZCB2YXJpb3VzIGRhdGEg
YWJvdXQgdGhlIGZvbnQgc3BlY2lmaWVkIGJ5IHxuc0ZvbnR8IHdpdGggdGhlIHNpemUgZm9udFNp
emUgaW50byB0aGUgZm9sbG93aW5nIG91dHB1dCBwYXJhbXRlcnM6Ci0gICAgdm9pZCBsb2FkRm9u
dChOU0ZvbnQqLCBmbG9hdCBmb250U2l6ZSwgTlNGb250KiYgb3V0TlNGb250LCBDR0ZvbnRSZWYm
KTsKLSAgICBzdGF0aWMgTlNGb250KiBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxOU0ZvbnQgKj4oLTEpOyB9Ci0jZWxpZiBQTEFURk9STShXSU4p
CisjZW5kaWYKKyNpZiBQTEFURk9STShXSU4pCiAgICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KEhG
T05ULCBmbG9hdCBzaXplLCBIREMsIFdDSEFSKiBmYWNlTmFtZSk7CiAjZW5kaWYKLQogI2lmIFVT
RShDQUlSTykKICAgICBzdGF0aWMgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogaGFzaFRhYmxlRGVsZXRl
ZEZvbnRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fc2NhbGVkX2ZvbnRf
dCo+KC0xKTsgfQogI2VuZGlmCiAKIHB1YmxpYzoKLSAgICBib29sIG1fc3ludGhldGljQm9sZDsK
LSAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsKLSAgICBGb250T3JpZW50YXRpb24gbV9vcmll
bnRhdGlvbjsKKyAgICBib29sIG1fc3ludGhldGljQm9sZCB7IGZhbHNlIH07CisgICAgYm9vbCBt
X3N5bnRoZXRpY09ibGlxdWUgeyBmYWxzZSB9OworICAgIEZvbnRPcmllbnRhdGlvbiBtX29yaWVu
dGF0aW9uIHsgSG9yaXpvbnRhbCB9OwogI2lmIFBMQVRGT1JNKElPUykKLSAgICBib29sIG1faXNF
bW9qaTsKKyAgICBib29sIG1faXNFbW9qaSB7IGZhbHNlIH07CiAjZW5kaWYKLSAgICBmbG9hdCBt
X3NpemU7Ci0gICAgRm9udFdpZHRoVmFyaWFudCBtX3dpZHRoVmFyaWFudDsKKyAgICBmbG9hdCBt
X3NpemUgeyAwIH07CisgICAgRm9udFdpZHRoVmFyaWFudCBtX3dpZHRoVmFyaWFudCB7IFJlZ3Vs
YXJXaWR0aCB9OwogCiBwcml2YXRlOgotI2lmIFBMQVRGT1JNKElPUykKLSAgICBDVEZvbnRSZWYg
bV9mb250OwotI2VsaWYgT1MoREFSV0lOKQotICAgIE5TRm9udCogbV9mb250OworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIENURm9udFJlZiBtX2ZvbnQgeyBudWxscHRyIH07CisgICAgbXV0YWJs
ZSBSZXRhaW5QdHI8Q1RGb250UmVmPiBtX2N0Rm9udDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAg
ICBSZWZQdHI8U2hhcmVkR0RJT2JqZWN0PEhGT05UPj4gbV9mb250OwogI2VuZGlmCiAKICNpZiBV
U0UoQ0cpCi0jaWYgUExBVEZPUk0oV0lOKQogICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IG1fY2dG
b250OwotI2Vsc2UKLSAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBtX2NnRm9udDsKLSAgICBtdXRh
YmxlIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fQ1RGb250OwogI2VuZGlmCi0jZW5kaWYKLQogI2lm
IFVTRShDQUlSTykKLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7CisgICAg
Y2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250IHsgbnVsbHB0ciB9OwogI2VuZGlmCiAK
LSAgICBib29sIG1faXNDb2xvckJpdG1hcEZvbnQ7Ci0gICAgYm9vbCBtX2lzQ29tcG9zaXRlRm9u
dFJlZmVyZW5jZTsKLSNpZiBPUyhEQVJXSU4pCi0gICAgYm9vbCBtX2lzUHJpbnRlckZvbnQ7Cisg
ICAgYm9vbCBtX2lzQ29sb3JCaXRtYXBGb250IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNDb21w
b3NpdGVGb250UmVmZXJlbmNlIHsgZmFsc2UgfTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBi
b29sIG1faXNQcmludGVyRm9udCB7IGZhbHNlIH07CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJ
TikKLSAgICBib29sIG1fdXNlR0RJOworICAgIGJvb2wgbV91c2VHREkgeyBmYWxzZSB9OwogI2Vu
ZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUZvbnREYXRhLmgJKHJldmlzaW9uIDE3NzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3
ICsxODksNyBAQCBwdWJsaWM6CiAKICNpZiBVU0UoQVBQS0lUKQogICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBnZXRDb21wb3NpdGVGb250UmVmZXJlbmNlRm9udERhdGEoTlNGb250ICprZXkpIGNv
bnN0OwotICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURh
dGEuZm9udCgpOyB9CisgICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3Bs
YXRmb3JtRGF0YS5uc0ZvbnQoKTsgfQogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRh
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCShyZXZpc2lvbiAxNzc0NDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDEwIEBACiAjaW1wb3J0ICJjb25maWcuaCIK
ICNpbXBvcnQgIkZvbnRQbGF0Zm9ybURhdGEuaCIKIAorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgi
CiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKwogI2lmICFQTEFURk9STShJT1MpCiAjaW1wb3J0IDxBcHBLaXQvTlNGb250
Lmg+CiAjZWxzZQpAQCAtMzIsOTEgKzM1LDUxIEBACiAjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4
dC5oPgogI2VuZGlmCiAKLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIC8vIFRoZXNlIENvcmVUZXh0IFRleHQgU3BhY2luZyBmZWF0dXJlIHNl
bGVjdG9ycyBhcmUgbm90IGRlZmluZWQgaW4gQ29yZVRleHQuCiBlbnVtIFRleHRTcGFjaW5nQ1RG
ZWF0dXJlU2VsZWN0b3IgeyBUZXh0U3BhY2luZ1Byb3BvcnRpb25hbCwgVGV4dFNwYWNpbmdGdWxs
V2lkdGgsIFRleHRTcGFjaW5nSGFsZldpZHRoLCBUZXh0U3BhY2luZ1RoaXJkV2lkdGgsIFRleHRT
cGFjaW5nUXVhcnRlcldpZHRoIH07CiAKLSNpZiBQTEFURk9STShNQUMpCi12b2lkIEZvbnRQbGF0
Zm9ybURhdGE6OmxvYWRGb250KE5TRm9udCogbnNGb250LCBmbG9hdCwgTlNGb250KiYgb3V0TlNG
b250LCBDR0ZvbnRSZWYmIGNnRm9udCkKLXsKLSAgICBvdXROU0ZvbnQgPSBuc0ZvbnQ7Ci0gICAg
Y2dGb250ID0gQ1RGb250Q29weUdyYXBoaWNzRm9udCh0b0NURm9udFJlZihuc0ZvbnQpLCAwKTsK
LX0KLSNlbmRpZiAgLy8gUExBVEZPUk0oTUFDKQotCi0jaWYgIVBMQVRGT1JNKElPUykKLUZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoTlNGb250ICpuc0ZvbnQsIGZsb2F0IHNpemUs
IGJvb2wgaXNQcmludGVyRm9udCwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09i
bGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0
aFZhcmlhbnQpCi0gICAgOiBtX3N5bnRoZXRpY0JvbGQoc3ludGhldGljQm9sZCkKLSAgICAsIG1f
c3ludGhldGljT2JsaXF1ZShzeW50aGV0aWNPYmxpcXVlKQotICAgICwgbV9vcmllbnRhdGlvbihv
cmllbnRhdGlvbikKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV93aWR0aFZhcmlhbnQod2lk
dGhWYXJpYW50KQotICAgICwgbV9mb250KG5zRm9udCkKLSAgICAsIG1faXNDb2xvckJpdG1hcEZv
bnQoZmFsc2UpCi0jZWxzZQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDVEZv
bnRSZWYgY3RGb250LCBmbG9hdCBzaXplLCBib29sIGlzUHJpbnRlckZvbnQsIGJvb2wgc3ludGhl
dGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRp
b24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KQorRm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YShDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBpc1ByaW50ZXJG
b250LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkKICAgICA6
IG1fc3ludGhldGljQm9sZChzeW50aGV0aWNCb2xkKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVl
KHN5bnRoZXRpY09ibGlxdWUpCiAgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQotICAg
ICwgbV9pc0Vtb2ppKGZhbHNlKQogICAgICwgbV9zaXplKHNpemUpCiAgICAgLCBtX3dpZHRoVmFy
aWFudCh3aWR0aFZhcmlhbnQpCi0gICAgLCBtX2ZvbnQoY3RGb250KQotICAgICwgbV9jZ0ZvbnQo
YWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KGN0Rm9udCwgTlVMTCkpKQotICAgICwgbV9p
c0NvbG9yQml0bWFwRm9udChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9u
dFRyYWl0Q29sb3JHbHlwaHMpCi0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKLSAgICAsIG1faXND
b21wb3NpdGVGb250UmVmZXJlbmNlKGZhbHNlKQorICAgICwgbV9mb250KGZvbnQpCisgICAgLCBt
X2NnRm9udChhZG9wdENGKENURm9udENvcHlHcmFwaGljc0ZvbnQoZm9udCwgTlVMTCkpKQorICAg
ICwgbV9pc0NvbG9yQml0bWFwRm9udChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSAmIGtD
VEZvbnRUcmFpdENvbG9yR2x5cGhzKQorICAgICwgbV9pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2Uo
Q1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgJiBrQ1RGb250Q29tcG9zaXRlVHJhaXQpCiAg
ICAgLCBtX2lzUHJpbnRlckZvbnQoaXNQcmludGVyRm9udCkKIHsKLSNpZiAhUExBVEZPUk0oSU9T
KQotICAgIEFTU0VSVF9BUkcobnNGb250LCBuc0ZvbnQpOwotCi0gICAgQ0dGb250UmVmIGNnRm9u
dCA9IDA7Ci0gICAgbG9hZEZvbnQobnNGb250LCBzaXplLCBtX2ZvbnQsIGNnRm9udCk7Ci0gICAg
ewotICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xp
Y1RyYWl0cyh0b0NURm9udFJlZihtX2ZvbnQpKTsKLSAgICAgICAgbV9pc0NvbG9yQml0bWFwRm9u
dCA9IHRyYWl0cyAmIGtDVEZvbnRDb2xvckdseXBoc1RyYWl0OwotICAgICAgICBtX2lzQ29tcG9z
aXRlRm9udFJlZmVyZW5jZSA9IHRyYWl0cyAmIGtDVEZvbnRDb21wb3NpdGVUcmFpdDsKLSAgICB9
Ci0KLSAgICBpZiAobV9mb250KQotICAgICAgICBDRlJldGFpbihtX2ZvbnQpOwotCi0gICAgbV9j
Z0ZvbnQgPSBhZG9wdENGKGNnRm9udCk7Ci0jZWxzZQotICAgIEFTU0VSVF9BUkcoY3RGb250LCBj
dEZvbnQpOworICAgIEFTU0VSVF9BUkcoZm9udCwgZm9udCk7CisgICAgQ0ZSZXRhaW4obV9mb250
KTsKK30KIAotICAgIENGUmV0YWluKGN0Rm9udCk7Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykK
KyNpZiBVU0UoQVBQS0lUKQorLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gYWxsIE5TRm9udCB1
c2FnZSBpcyByZW1vdmVkLgorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShOU0Zv
bnQgKmZvbnQsIGZsb2F0IHNpemUsIGJvb2wgaXNQcmludGVyRm9udCwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
Rm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpCisgICAgOiBGb250UGxhdGZvcm1EYXRhKChD
VEZvbnRSZWYpZm9udCwgc2l6ZSwgaXNQcmludGVyRm9udCwgc3ludGhldGljQm9sZCwgc3ludGhl
dGljT2JsaXF1ZSwgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCkKK3sKIH0KKyNlbmRpZgogCiBG
b250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCiB7Ci0jaWYgIVBMQVRGT1JNKElP
UykKLSAgICBpZiAobV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PE5TRm9udCAq
PigtMSkpCi0gICAgICAgIENGUmVsZWFzZShtX2ZvbnQpOwotI2Vsc2UKICAgICBpZiAobV9mb250
ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEpKQogICAgICAgICBD
RlJlbGVhc2UobV9mb250KTsKLSNlbmRpZgogfQogCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBs
YXRmb3JtRGF0YUluaXQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZikKIHsKLSNpZiAhUExBVEZP
Uk0oSU9TKQotICAgIG1fZm9udCA9IGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0
X2Nhc3Q8TlNGb250ICo+KC0xKSA/IGNvbnN0X2Nhc3Q8TlNGb250ICo+KHN0YXRpY19jYXN0PGNv
bnN0IE5TRm9udCAqPihDRlJldGFpbihmLm1fZm9udCkpKSA6IGYubV9mb250OwotI2Vsc2UKICAg
ICBtX2ZvbnQgPSBmLm1fZm9udCAmJiBmLm1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9u
dFJlZj4oLTEpID8gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihjb25zdF9jYXN0PHZvaWQgKj4oQ0ZS
ZXRhaW4oZi5tX2ZvbnQpKSkgOiBmLm1fZm9udDsKLSNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9T
KQogICAgIG1faXNFbW9qaSA9IGYubV9pc0Vtb2ppOwogI2VuZGlmCiAgICAgbV9jZ0ZvbnQgPSBm
Lm1fY2dGb250OwotICAgIG1fQ1RGb250ID0gZi5tX0NURm9udDsKKyAgICBtX2N0Rm9udCA9IGYu
bV9jdEZvbnQ7CisgICAgbV9pc1ByaW50ZXJGb250ID0gZi5tX2lzUHJpbnRlckZvbnQ7CiB9CiAK
IGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUFz
c2lnbihjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQpAQCAtMTI1LDIzICs4OCwxNiBAQCBjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhCiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgIG1faXNFbW9qaSA9IGYubV9pc0Vtb2ppOwogI2VuZGlmCi0jaWYgIVBMQVRGT1JNKElPUykK
LSAgICBpZiAobV9mb250ID09IGYubV9mb250KQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAg
aWYgKGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0x
KSkKLSAgICAgICAgQ0ZSZXRhaW4oZi5tX2ZvbnQpOwotICAgIGlmIChtX2ZvbnQgJiYgbV9mb250
ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSkKLSAgICAgICAgQ0ZSZWxlYXNlKG1f
Zm9udCk7Ci0jZWxzZQogICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8Q1RGb250UmVmPigtMSkgJiYgZi5tX2ZvbnQgJiYgZi5tX2ZvbnQgIT0gcmVpbnRlcnByZXRf
Y2FzdDxDVEZvbnRSZWY+KC0xKSAmJiBDRkVxdWFsKG1fZm9udCwgZi5tX2ZvbnQpKQogICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgaWYgKGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJw
cmV0X2Nhc3Q8Q1RGb250UmVmPigtMSkpCiAgICAgICAgIENGUmV0YWluKGYubV9mb250KTsKICAg
ICBpZiAobV9mb250ICYmIG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PENURm9udFJlZj4oLTEp
KQogICAgICAgICBDRlJlbGVhc2UobV9mb250KTsKLSNlbmRpZgogICAgIG1fZm9udCA9IGYubV9m
b250OwotICAgIG1fQ1RGb250ID0gZi5tX0NURm9udDsKKyAgICBtX2N0Rm9udCA9IGYubV9jdEZv
bnQ7CisgICAgbV9pc1ByaW50ZXJGb250ID0gZi5tX2lzUHJpbnRlckZvbnQ7CisKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTE2OSwzNCArMTI1LDYgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRh
OjpwbGF0Zm9ybUlzRXF1YWwoYwogICAgIHJldHVybiBtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9u
dDsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEZv
bnQoTlNGb250ICpmb250KQotewotICAgIEFTU0VSVF9BUkcoZm9udCwgZm9udCk7Ci0gICAgQVNT
RVJUKG1fZm9udCAhPSByZWludGVycHJldF9jYXN0PE5TRm9udCAqPigtMSkpOwotCi0gICAgaWYg
KG1fZm9udCA9PSBmb250KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDRlJldGFpbihmb250KTsK
LSAgICBpZiAobV9mb250KQotICAgICAgICBDRlJlbGVhc2UobV9mb250KTsKLSAgICBtX2ZvbnQg
PSBmb250OwotICAgIG1fc2l6ZSA9IFtmb250IHBvaW50U2l6ZV07Ci0gICAgCi0gICAgQ0dGb250
UmVmIGNnRm9udCA9IDA7Ci0gICAgTlNGb250KiBsb2FkZWRGb250ID0gMDsKLSAgICBsb2FkRm9u
dChtX2ZvbnQsIG1fc2l6ZSwgbG9hZGVkRm9udCwgY2dGb250KTsKLQotICAgIG1fY2dGb250ID0g
YWRvcHRDRihjZ0ZvbnQpOwotICAgIHsKLSAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJh
aXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHModG9DVEZvbnRSZWYobV9mb250KSk7Ci0gICAg
ICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSB0cmFpdHMgJiBrQ1RGb250Q29sb3JHbHlwaHNUcmFp
dDsKLSAgICAgICAgbV9pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UgPSB0cmFpdHMgJiBrQ1RGb250
Q29tcG9zaXRlVHJhaXQ7Ci0gICAgfQotICAgIG1fQ1RGb250ID0gMDsKLX0KLSNlbHNlCiB2b2lk
IEZvbnRQbGF0Zm9ybURhdGE6OnNldEZvbnQoQ1RGb250UmVmIGZvbnQpCiB7CiAgICAgQVNTRVJU
X0FSRyhmb250LCBmb250KTsKQEAgLTIxMSwyMSArMTM5LDI4IEBAIHZvaWQgRm9udFBsYXRmb3Jt
RGF0YTo6c2V0Rm9udChDVEZvbnRSZWYKICAgICBtX2ZvbnQgPSBmb250OwogICAgIG1fc2l6ZSA9
IENURm9udEdldFNpemUoZm9udCk7CiAgICAgbV9jZ0ZvbnQgPSBhZG9wdENGKENURm9udENvcHlH
cmFwaGljc0ZvbnQoZm9udCwgbnVsbHB0cikpOwotICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSBD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSAmIGtDVEZvbnRUcmFpdENvbG9yR2x5cGhzOwor
CisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFp
dHMobV9mb250KTsKKyAgICBtX2lzQ29sb3JCaXRtYXBGb250ID0gdHJhaXRzICYga0NURm9udFRy
YWl0Q29sb3JHbHlwaHM7CisgICAgbV9pc0NvbXBvc2l0ZUZvbnRSZWZlcmVuY2UgPSB0cmFpdHMg
JiBrQ1RGb250Q29tcG9zaXRlVHJhaXQ7CisgICAgCisgICAgbV9jdEZvbnQgPSBudWxscHRyOwog
fQotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9TKQogYm9vbCBGb250UGxhdGZvcm1EYXRhOjpy
b3VuZHNHbHlwaEFkdmFuY2VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gW21fZm9udCByZW5kZXJp
bmdNb2RlXSA9PSBOU0ZvbnRBbnRpYWxpYXNlZEludGVnZXJBZHZhbmNlbWVudHNSZW5kZXJpbmdN
b2RlOwotfQorI2lmIFVTRShBUFBLSVQpCisgICAgcmV0dXJuIFsoTlNGb250ICopbV9mb250IHJl
bmRlcmluZ01vZGVdID09IE5TRm9udEFudGlhbGlhc2VkSW50ZWdlckFkdmFuY2VtZW50c1JlbmRl
cmluZ01vZGU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgorfQorCiAKIGJvb2wg
Rm9udFBsYXRmb3JtRGF0YTo6YWxsb3dzTGlnYXR1cmVzKCkgY29uc3QKIHsKLSNpZiAhUExBVEZP
Uk0oSU9TKQotICAgIHJldHVybiAhW1ttX2ZvbnQgY292ZXJlZENoYXJhY3RlclNldF0gY2hhcmFj
dGVySXNNZW1iZXI6J2EnXTsKKyNpZiBVU0UoQVBQS0lUKQorICAgIHJldHVybiAhW1soTlNGb250
ICopbV9mb250IGNvdmVyZWRDaGFyYWN0ZXJTZXRdIGNoYXJhY3RlcklzTWVtYmVyOidhJ107CiAj
ZWxzZQogICAgIGlmICghbV9mb250KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMDksMjMg
KzI0NCwyMyBAQCBzdGF0aWMgQ1RGb250RGVzY3JpcHRvclJlZiBjYXNjYWRlVG9MYXN0CiAKIENU
Rm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAogewotICAgIGlmIChtX0NU
Rm9udCkKLSAgICAgICAgcmV0dXJuIG1fQ1RGb250LmdldCgpOworICAgIGlmIChtX2N0Rm9udCkK
KyAgICAgICAgcmV0dXJuIG1fY3RGb250LmdldCgpOwogCiAgICAgQVNTRVJUKG1fY2dGb250Lmdl
dCgpKTsKICNpZiAhUExBVEZPUk0oSU9TKQotICAgIG1fQ1RGb250ID0gdG9DVEZvbnRSZWYobV9m
b250KTsKLSAgICBpZiAobV9DVEZvbnQpIHsKKyAgICBtX2N0Rm9udCA9IG1fZm9udDsKKyAgICBp
ZiAobV9jdEZvbnQpIHsKICAgICAgICAgQ1RGb250RGVzY3JpcHRvclJlZiBmb250RGVzY3JpcHRv
cjsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwb3N0U2NyaXB0TmFtZSA9IGFkb3B0
Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKG1fQ1RGb250LmdldCgpKSk7CisgICAgICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gcG9zdFNjcmlwdE5hbWUgPSBhZG9wdENGKENURm9udENvcHlQ
b3N0U2NyaXB0TmFtZShtX2N0Rm9udC5nZXQoKSkpOwogICAgICAgICAvLyBIb2VmbGVyIFRleHQg
SXRhbGljIGhhcyBsaW5lLWluaXRpYWwgYW5kIC1maW5hbCBzd2FzaGVzIGVuYWJsZWQgYnkgZGVm
YXVsdCwgc28gZGlzYWJsZSB0aGVtLgogICAgICAgICBpZiAoQ0ZFcXVhbChwb3N0U2NyaXB0TmFt
ZS5nZXQoKSwgQ0ZTVFIoIkhvZWZsZXJUZXh0LUl0YWxpYyIpKSB8fCBDRkVxdWFsKHBvc3RTY3Jp
cHROYW1lLmdldCgpLCBDRlNUUigiSG9lZmxlclRleHQtQmxhY2tJdGFsaWMiKSkpCiAgICAgICAg
ICAgICBmb250RGVzY3JpcHRvciA9IGNhc2NhZGVUb0xhc3RSZXNvcnRBbmREaXNhYmxlU3dhc2hl
c0ZvbnREZXNjcmlwdG9yKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvbnREZXNjcmlw
dG9yID0gY2FzY2FkZVRvTGFzdFJlc29ydEZvbnREZXNjcmlwdG9yKCk7Ci0gICAgICAgIG1fQ1RG
b250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMobV9DVEZvbnQuZ2V0
KCksIG1fc2l6ZSwgMCwgZm9udERlc2NyaXB0b3IpKTsKKyAgICAgICAgbV9jdEZvbnQgPSBhZG9w
dENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhtX2N0Rm9udC5nZXQoKSwgbV9zaXpl
LCAwLCBmb250RGVzY3JpcHRvcikpOwogICAgIH0gZWxzZQotICAgICAgICBtX0NURm9udCA9IGFk
b3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBoaWNzRm9udChtX2NnRm9udC5nZXQoKSwgbV9zaXpl
LCAwLCBjYXNjYWRlVG9MYXN0UmVzb3J0Rm9udERlc2NyaXB0b3IoKSkpOworICAgICAgICBtX2N0
Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBoaWNzRm9udChtX2NnRm9udC5nZXQo
KSwgbV9zaXplLCAwLCBjYXNjYWRlVG9MYXN0UmVzb3J0Rm9udERlc2NyaXB0b3IoKSkpOwogI2Vs
c2UKICAgICAvLyBBcHBsZSBDb2xvciBFbW9qaSBzaXplIGlzIGFkanVzdGVkIChhbmQgdGhlbiBy
ZS1hZGp1c3RlZCBieSBDb3JlIFRleHQpIGFuZCBjYXBwZWQuCiAgICAgQ0dGbG9hdCBzaXplID0g
IW1faXNFbW9qaSA/IG1fc2l6ZSA6IG1fc2l6ZSA8PSAxNSA/IDQgKiAobV9zaXplICsgMikgLyBz
dGF0aWNfY2FzdDxDR0Zsb2F0Pig1KSA6IDE2OwpAQCAtMzM1LDIzICsyNzAsMzEgQEAgQ1RGb250
UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbgogICAgICAgICBmb250RGVzY3JpcHRv
ciA9IGNhc2NhZGVUb0xhc3RSZXNvcnRBbmREaXNhYmxlU3dhc2hlc0ZvbnREZXNjcmlwdG9yKCk7
CiAgICAgZWxzZQogICAgICAgICBmb250RGVzY3JpcHRvciA9IGNhc2NhZGVUb0xhc3RSZXNvcnRG
b250RGVzY3JpcHRvcigpOwotICAgIG1fQ1RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRo
R3JhcGhpY3NGb250KG1fY2dGb250LmdldCgpLCBzaXplLCAwLCBmb250RGVzY3JpcHRvcikpOwor
ICAgIG1fY3RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KG1fY2dG
b250LmdldCgpLCBzaXplLCAwLCBmb250RGVzY3JpcHRvcikpOwogI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCiAKICAgICBpZiAobV93aWR0aFZhcmlhbnQgIT0gUmVndWxhcldpZHRoKSB7CiAgICAg
ICAgIGludCBmZWF0dXJlVHlwZVZhbHVlID0ga1RleHRTcGFjaW5nVHlwZTsKICAgICAgICAgaW50
IGZlYXR1cmVTZWxlY3RvclZhbHVlID0gbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2Vs
ZWN0b3IobV93aWR0aFZhcmlhbnQpOwotICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRv
clJlZj4gc291cmNlRGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9y
KG1fQ1RGb250LmdldCgpKSk7CisgICAgICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVm
PiBzb3VyY2VEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IobV9j
dEZvbnQuZ2V0KCkpKTsKICAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBmZWF0dXJlVHlw
ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVy
SW50VHlwZSwgJmZlYXR1cmVUeXBlVmFsdWUpKTsKICAgICAgICAgUmV0YWluUHRyPENGTnVtYmVy
UmVmPiBmZWF0dXJlU2VsZWN0b3IgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZmZWF0dXJlU2VsZWN0b3JWYWx1ZSkpOwogICAg
ICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gbmV3RGVzY3JpcHRvciA9IGFkb3B0
Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoRmVhdHVyZShzb3VyY2VEZXNjcmlwdG9y
LmdldCgpLCBmZWF0dXJlVHlwZS5nZXQoKSwgZmVhdHVyZVNlbGVjdG9yLmdldCgpKSk7CiAgICAg
ICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IG5ld0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdp
dGhGb250RGVzY3JpcHRvcihuZXdEZXNjcmlwdG9yLmdldCgpLCBtX3NpemUsIDApKTsKIAogICAg
ICAgICBpZiAobmV3Rm9udCkKLSAgICAgICAgICAgIG1fQ1RGb250ID0gbmV3Rm9udDsKKyAgICAg
ICAgICAgIG1fY3RGb250ID0gbmV3Rm9udDsKICAgICB9CiAKLSAgICByZXR1cm4gbV9DVEZvbnQu
Z2V0KCk7CisgICAgcmV0dXJuIG1fY3RGb250LmdldCgpOworfQorCitQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gRm9udFBsYXRmb3JtRGF0YTo6b3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkg
Y29uc3QKK3sKKyAgICBpZiAoUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0dG
b250Q29weVRhYmxlRm9yVGFnKGNnRm9udCgpLCB0YWJsZSkpKQorICAgICAgICByZXR1cm4gU2hh
cmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKGRhdGEuZ2V0KCkpOworICAgIAorICAgIHJldHVybiBudWxs
cHRyOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCShyZXZpc2lvbiAxNzc0NDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNyArMzQyLDcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpzeQogICAgIFVDaGFyMzIgY2hhcmFjdGVyOwogICAgIFUxNl9HRVQo
Y2hhcmFjdGVycywgMCwgMCwgbGVuZ3RoLCBjaGFyYWN0ZXIpOwogICAgIGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IG9yaWdpbmFsRm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
OwotICAgIE5TRm9udCAqbnNGb250ID0gcGxhdGZvcm1EYXRhLmZvbnQoKTsKKyAgICBOU0ZvbnQg
Km5zRm9udCA9IHBsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKIAogICAgIE5TU3RyaW5nICpzdHJpbmcg
PSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0NvcHk6Y29uc3RfY2FzdDxV
Q2hhcio+KGNoYXJhY3RlcnMpIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5PXTsKICAgICBO
U0ZvbnQgKnN1YnN0aXR1dGVGb250ID0gW05TRm9udCBmaW5kRm9udExpa2U6bnNGb250IGZvclN0
cmluZzpzdHJpbmcgd2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSkgaW5M
YW5ndWFnZTpuaWxdOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRNYWMubW0JKHJldmlzaW9uIDE3NzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsMTYg
KzI0OCwxOCBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjCiAjaWYg
IVBMQVRGT1JNKElPUykKICAgICBOU0ZvbnQqIGRyYXdGb250OwogICAgIGlmICghaXNQcmludGVy
Rm9udCgpKSB7Ci0gICAgICAgIGRyYXdGb250ID0gW3BsYXRmb3JtRGF0YS5mb250KCkgc2NyZWVu
Rm9udF07Ci0gICAgICAgIGlmIChkcmF3Rm9udCAhPSBwbGF0Zm9ybURhdGEuZm9udCgpKQorICAg
ICAgICBkcmF3Rm9udCA9IFtwbGF0Zm9ybURhdGEubnNGb250KCkgc2NyZWVuRm9udF07CisgICAg
ICAgIGlmIChkcmF3Rm9udCAhPSBwbGF0Zm9ybURhdGEubnNGb250KCkpIHsKICAgICAgICAgICAg
IC8vIFdlIGFyZSBnZXR0aW5nIHRoaXMgaW4gdG9vIG1hbnkgcGxhY2VzICgzNDA2NDExKTsgdXNl
IEVSUk9SIHNvIGl0IG9ubHkgcHJpbnRzIG9uIGRlYnVnIHZlcnNpb25zIGZvciBub3cuIChXZSBz
aG91bGQgZGVidWcgdGhpcyBhbHNvLCBldmVudHVhbGx5KS4KICAgICAgICAgICAgIExPR19FUlJP
UigiQXR0ZW1wdGluZyB0byBzZXQgbm9uLXNjcmVlbiBmb250ICglQCkgd2hlbiBkcmF3aW5nIHRv
IHNjcmVlbi4gIFVzaW5nIHNjcmVlbiBmb250IGFueXdheSwgbWF5IHJlc3VsdCBpbiBpbmNvcnJl
Y3QgbWV0cmljcy4iLAotICAgICAgICAgICAgICAgIFtbW3BsYXRmb3JtRGF0YS5mb250KCkgZm9u
dERlc2NyaXB0b3JdIGZvbnRBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6TlNGb250TmFtZUF0dHJp
YnV0ZV0pOworICAgICAgICAgICAgICAgIFtbW3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmb250RGVz
Y3JpcHRvcl0gZm9udEF0dHJpYnV0ZXNdIG9iamVjdEZvcktleTpOU0ZvbnROYW1lQXR0cmlidXRl
XSk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBkcmF3Rm9udCA9IFtwbGF0Zm9y
bURhdGEuZm9udCgpIHByaW50ZXJGb250XTsKLSAgICAgICAgaWYgKGRyYXdGb250ICE9IHBsYXRm
b3JtRGF0YS5mb250KCkpCisgICAgICAgIGRyYXdGb250ID0gW3BsYXRmb3JtRGF0YS5uc0ZvbnQo
KSBwcmludGVyRm9udF07CisgICAgICAgIGlmIChkcmF3Rm9udCAhPSBwbGF0Zm9ybURhdGEubnNG
b250KCkpIHsKICAgICAgICAgICAgIE5TTG9nKEAiQXR0ZW1wdGluZyB0byBzZXQgbm9uLXByaW50
ZXIgZm9udCAoJUApIHdoZW4gcHJpbnRpbmcuICBVc2luZyBwcmludGVyIGZvbnQgYW55d2F5LCBt
YXkgcmVzdWx0IGluIGluY29ycmVjdCBtZXRyaWNzLiIsCi0gICAgICAgICAgICAgICAgW1tbcGxh
dGZvcm1EYXRhLmZvbnQoKSBmb250RGVzY3JpcHRvcl0gZm9udEF0dHJpYnV0ZXNdIG9iamVjdEZv
cktleTpOU0ZvbnROYW1lQXR0cmlidXRlXSk7CisgICAgICAgICAgICAgICAgW1tbcGxhdGZvcm1E
YXRhLm5zRm9udCgpIGZvbnREZXNjcmlwdG9yXSBmb250QXR0cmlidXRlc10gb2JqZWN0Rm9yS2V5
Ok5TRm9udE5hbWVBdHRyaWJ1dGVdKTsKKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRh
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNpb24gMTc3NDQ3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnRE
YXRhOjpnZQogICAgICAgICAgICAgYm9vbCBpc1VzaW5nUHJpbnRlckZvbnQgPSBwbGF0Zm9ybURh
dGEoKS5pc1ByaW50ZXJGb250KCk7CiAgICAgICAgICAgICBOU0ZvbnQgKnN1YnN0aXR1dGVGb250
ID0gaXNVc2luZ1ByaW50ZXJGb250ID8gW2tleSBwcmludGVyRm9udF0gOiBba2V5IHNjcmVlbkZv
bnRdOwogCi0gICAgICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSBDVEZvbnRH
ZXRTeW1ib2xpY1RyYWl0cyh0b0NURm9udFJlZihzdWJzdGl0dXRlRm9udCkpOworICAgICAgICAg
ICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
KENURm9udFJlZilzdWJzdGl0dXRlRm9udCk7CiAgICAgICAgICAgICBib29sIHN5bnRoZXRpY0Jv
bGQgPSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNCb2xkKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250
Qm9sZFRyYWl0KTsKICAgICAgICAgICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IHBsYXRmb3Jt
RGF0YSgpLnN5bnRoZXRpY09ibGlxdWUoKSAmJiAhKHRyYWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFp
dCk7CiAKQEAgLTEzMCw3ICsxMzAsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUlu
aXQoKQogICAgICAgICAvLyBJdCBvdmVycmlkZXMgdGhlIG5vcm1hbCAiVGltZXMiIGZhbWlseSBm
b250LgogICAgICAgICAvLyBJdCBhbHNvIGFwcGVhcnMgdG8gaGF2ZSBhIGNvcnJ1cHQgcmVndWxh
ciB2YXJpYW50LgogICAgICAgICBOU1N0cmluZyAqZmFsbGJhY2tGb250RmFtaWx5OwotICAgICAg
ICBpZiAoW1ttX3BsYXRmb3JtRGF0YS5mb250KCkgZmFtaWx5TmFtZV0gaXNFcXVhbDpAIlRpbWVz
Il0pCisgICAgICAgIGlmIChbW21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIGZhbWlseU5hbWVdIGlz
RXF1YWw6QCJUaW1lcyJdKQogICAgICAgICAgICAgZmFsbGJhY2tGb250RmFtaWx5ID0gQCJUaW1l
cyBOZXcgUm9tYW4iOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmYWxsYmFja0ZvbnRGYW1p
bHkgPSB3ZWJGYWxsYmFja0ZvbnRGYW1pbHkoKTsKQEAgLTEzOCwxNyArMTM4LDE3IEBAIHZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCiAgICAgICAgIC8vIFRyeSBzZXR0aW5nIHVw
IHRoZSBhbHRlcm5hdGUgZm9udC4KICAgICAgICAgLy8gVGhpcyBpcyBhIGxhc3QgZGl0Y2ggZWZm
b3J0IHRvIHVzZSBhIHN1YnN0aXR1dGUgZm9udCB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9u
Zy4KICNpZiAhRVJST1JfRElTQUJMRUQKLSAgICAgICAgUmV0YWluUHRyPE5TRm9udD4gaW5pdGlh
bEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7CisgICAgICAgIFJldGFpblB0cjxOU0ZvbnQ+
IGluaXRpYWxGb250ID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7CiAjZW5kaWYKICAgICAgICAg
aWYgKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKLSAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNl
dEZvbnQoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3Bs
YXRmb3JtRGF0YS5mb250KCkgdG9GYW1pbHk6ZmFsbGJhY2tGb250RmFtaWx5XSk7CisgICAgICAg
ICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRN
YW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0b0ZhbWlseTpmYWxs
YmFja0ZvbnRGYW1pbHldKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wbGF0Zm9ybURh
dGEuc2V0Rm9udChbTlNGb250IGZvbnRXaXRoTmFtZTpmYWxsYmFja0ZvbnRGYW1pbHkgc2l6ZTpt
X3BsYXRmb3JtRGF0YS5zaXplKCldKTsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5T
Rm9udChbTlNGb250IGZvbnRXaXRoTmFtZTpmYWxsYmFja0ZvbnRGYW1pbHkgc2l6ZTptX3BsYXRm
b3JtRGF0YS5zaXplKCldKTsKICAgICAgICAgaWYgKCFpbml0Rm9udERhdGEodGhpcykpIHsKICAg
ICAgICAgICAgIGlmIChbZmFsbGJhY2tGb250RmFtaWx5IGlzRXF1YWw6QCJUaW1lcyBOZXcgUm9t
YW4iXSkgewogICAgICAgICAgICAgICAgIC8vIE9LLCBjb3VsZG4ndCBzZXR1cCBUaW1lcyBOZXcg
Um9tYW4gYXMgYW4gYWx0ZXJuYXRlIHRvIFRpbWVzLCBmYWxsYmFjawogICAgICAgICAgICAgICAg
IC8vIG9uIHRoZSBzeXN0ZW0gZm9udC4gIElmIHRoaXMgZmFpbHMgd2UgaGF2ZSBubyBhbHRlcm5h
dGl2ZSBsZWZ0LgotICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldEZvbnQoW1tOU0Zv
bnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5m
b250KCkgdG9GYW1pbHk6d2ViRmFsbGJhY2tGb250RmFtaWx5KCldKTsKKyAgICAgICAgICAgICAg
ICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5h
Z2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0b0ZhbWlseTp3ZWJGYWxs
YmFja0ZvbnRGYW1pbHkoKV0pOwogICAgICAgICAgICAgICAgIGlmICghaW5pdEZvbnREYXRhKHRo
aXMpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHRyaWVkLCBUaW1lcywgVGltZXMgTmV3
IFJvbWFuLCBhbmQgdGhlIHN5c3RlbSBmb250LiBObyBqb3kuIFdlIGhhdmUgdG8gZ2l2ZSB1cC4K
ICAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRo
IGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQoKSk7CkBAIC0xNjMsMTMgKzE2MywxMyBAQCB2b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogCiAgICAgICAgIC8vIFJlcG9ydCB0aGUg
cHJvYmxlbS4KICAgICAgICAgTE9HX0VSUk9SKCJDb3JydXB0IGZvbnQgZGV0ZWN0ZWQsIHVzaW5n
ICVAIGluIHBsYWNlIG9mICVALiIsCi0gICAgICAgICAgICBbbV9wbGF0Zm9ybURhdGEuZm9udCgp
IGZhbWlseU5hbWVdLCBbaW5pdGlhbEZvbnQuZ2V0KCkgZmFtaWx5TmFtZV0pOworICAgICAgICAg
ICAgW21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIGZhbWlseU5hbWVdLCBbaW5pdGlhbEZvbnQuZ2V0
KCkgZmFtaWx5TmFtZV0pOwogICAgIH0KIAogICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkg
dG8gc2V0IHVwIHVzaW5nIHRoZSBzeXN0ZW0gZm9udC4KICAgICAvLyBUaGlzIGlzIHByb2JhYmx5
IGJlY2F1c2UgVGltZXMgYW5kIFRpbWVzIE5ldyBSb21hbiBhcmUgYm90aCB1bmF2YWlsYWJsZS4K
ICAgICBpZiAoZmFpbGVkU2V0dXApIHsKLSAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0Rm9udChb
TlNGb250IHN5c3RlbUZvbnRPZlNpemU6W21fcGxhdGZvcm1EYXRhLmZvbnQoKSBwb2ludFNpemVd
XSk7CisgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChbTlNGb250IHN5c3RlbUZvbnRP
ZlNpemU6W21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHBvaW50U2l6ZV1dKTsKICAgICAgICAgTE9H
X0VSUk9SKCJmYWlsZWQgdG8gc2V0IHVwIGZvbnQsIHVzaW5nIHN5c3RlbSBmb250ICVzIiwgbV9w
bGF0Zm9ybURhdGEuZm9udCgpKTsKICAgICAgICAgaW5pdEZvbnREYXRhKHRoaXMpOwogICAgIH0K
QEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQog
ICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBhZGp1c3RtZW50IG9mIDIwJSBpcyB0b28g
YmlnIGFuZCBpcwogICAgIC8vIGluY29ycmVjdGx5IGFkZGVkIHRvIGxpbmUgc3BhY2luZywgc28g
d2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5zdGVhZAogICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhl
IGFzY2VudC4KLSAgICBOU1N0cmluZyAqZmFtaWx5TmFtZSA9IFttX3BsYXRmb3JtRGF0YS5mb250
KCkgZmFtaWx5TmFtZV07CisgICAgTlNTdHJpbmcgKmZhbWlseU5hbWUgPSBbbV9wbGF0Zm9ybURh
dGEubnNGb250KCkgZmFtaWx5TmFtZV07CiAgICAgaWYgKFtmYW1pbHlOYW1lIGlzRXF1YWxUb1N0
cmluZzpAIlRpbWVzIl0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiSGVsdmV0aWNh
Il0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQ291cmllciJdKQogICAgICAgICBh
c2NlbnQgKz0gZmxvb3JmKCgoYXNjZW50ICsgZGVzY2VudCkgKiAwLjE1ZikgKyAwLjVmKTsKIApA
QCAtMjk0LDIyICsyOTQsMjIgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdAogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIGZsb2F0IHNpemUg
PSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKLSAgICBGb250UGxhdGZvcm1E
YXRhIHNjYWxlZEZvbnREYXRhKFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29u
dmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEuZm9udCgpIHRvU2l6ZTpzaXplXSwgc2l6ZSwgbV9wbGF0
Zm9ybURhdGEuaXNQcmludGVyRm9udCgpLCBmYWxzZSwgZmFsc2UsIG1fcGxhdGZvcm1EYXRhLm9y
aWVudGF0aW9uKCkpOworICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoW1tOU0Zv
bnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5u
c0ZvbnQoKSB0b1NpemU6c2l6ZV0sIHNpemUsIG1fcGxhdGZvcm1EYXRhLmlzUHJpbnRlckZvbnQo
KSwgZmFsc2UsIGZhbHNlLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKTsKIAogICAgIC8v
IEFwcEtpdCByZXNldHMgdGhlIHR5cGUgaW5mb3JtYXRpb24gKHNjcmVlbi9wcmludGVyKSB3aGVu
IHlvdSBjb252ZXJ0IGEgZm9udCB0byBhIGRpZmZlcmVudCBzaXplLgogICAgIC8vIFdlIGhhdmUg
dG8gZml4IHVwIHRoZSBmb250IHRoYXQgd2UncmUgaGFuZGVkIGJhY2suCi0gICAgc2NhbGVkRm9u
dERhdGEuc2V0Rm9udChmb250RGVzY3JpcHRpb24udXNlUHJpbnRlckZvbnQoKSA/IFtzY2FsZWRG
b250RGF0YS5mb250KCkgcHJpbnRlckZvbnRdIDogW3NjYWxlZEZvbnREYXRhLmZvbnQoKSBzY3Jl
ZW5Gb250XSk7CisgICAgc2NhbGVkRm9udERhdGEuc2V0TlNGb250KGZvbnREZXNjcmlwdGlvbi51
c2VQcmludGVyRm9udCgpID8gW3NjYWxlZEZvbnREYXRhLm5zRm9udCgpIHByaW50ZXJGb250XSA6
IFtzY2FsZWRGb250RGF0YS5uc0ZvbnQoKSBzY3JlZW5Gb250XSk7CiAKICAgICBpZiAoc2NhbGVk
Rm9udERhdGEuZm9udCgpKSB7CiAgICAgICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0g
W05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotICAgICAgICBOU0ZvbnRUcmFpdE1h
c2sgZm9udFRyYWl0cyA9IFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6bV9wbGF0Zm9ybURhdGEu
Zm9udCgpXTsKKyAgICAgICAgTlNGb250VHJhaXRNYXNrIGZvbnRUcmFpdHMgPSBbZm9udE1hbmFn
ZXIgdHJhaXRzT2ZGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpXTsKIAogICAgICAgICBpZiAo
bV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkKQogICAgICAgICAgICAgZm9udFRyYWl0cyB8
PSBOU0JvbGRGb250TWFzazsKICAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGlj
T2JsaXF1ZSkKICAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0gTlNJdGFsaWNGb250TWFzazsKIAot
ICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgc2NhbGVkRm9udFRyYWl0cyA9IFtmb250TWFuYWdlciB0
cmFpdHNPZkZvbnQ6c2NhbGVkRm9udERhdGEuZm9udCgpXTsKKyAgICAgICAgTlNGb250VHJhaXRN
YXNrIHNjYWxlZEZvbnRUcmFpdHMgPSBbZm9udE1hbmFnZXIgdHJhaXRzT2ZGb250OnNjYWxlZEZv
bnREYXRhLm5zRm9udCgpXTsKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNCb2xk
ID0gKGZvbnRUcmFpdHMgJiBOU0JvbGRGb250TWFzaykgJiYgIShzY2FsZWRGb250VHJhaXRzICYg
TlNCb2xkRm9udE1hc2spOwogICAgICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY09ibGlx
dWUgPSAoZm9udFRyYWl0cyAmIE5TSXRhbGljRm9udE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0
cyAmIE5TSXRhbGljRm9udE1hc2spOwogCkBAIC0zMjYsNyArMzI2LDcgQEAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFp
bnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAog
ewogICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJh
Y3RlcnNOb0NvcHk6Y29uc3RfY2FzdDx1bmljaGFyKj4oY2hhcmFjdGVycykgbGVuZ3RoOmxlbmd0
aCBmcmVlV2hlbkRvbmU6Tk9dOwotICAgIE5TQ2hhcmFjdGVyU2V0ICpzZXQgPSBbW21fcGxhdGZv
cm1EYXRhLmZvbnQoKSBjb3ZlcmVkQ2hhcmFjdGVyU2V0XSBpbnZlcnRlZFNldF07CisgICAgTlND
aGFyYWN0ZXJTZXQgKnNldCA9IFtbbV9wbGF0Zm9ybURhdGEubnNGb250KCkgY292ZXJlZENoYXJh
Y3RlclNldF0gaW52ZXJ0ZWRTZXRdOwogICAgIGJvb2wgcmVzdWx0ID0gc2V0ICYmIFtzdHJpbmcg
cmFuZ2VPZkNoYXJhY3RlckZyb21TZXQ6c2V0XS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kOwogICAg
IFtzdHJpbmcgcmVsZWFzZV07CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTMzNCw3ICszMzQsNyBA
QCBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoCiAKIHZvaWQgU2ltcGxl
Rm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKIHsKLSAgICBOU0ZvbnQqIGYgPSBtX3BsYXRmb3Jt
RGF0YS5mb250KCk7CisgICAgTlNGb250KiBmID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7CiAg
ICAgLy8gU3BlY2lhbCBjYXNlIE9zYWthLU1vbm8uCiAgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFy
Oi8vcHJvYmxlbS8zOTk5NDY3Piwgd2Ugc2hvdWxkIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQg
cGl0Y2guCiAgICAgLy8gTm90ZSB0aGF0IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWth
LU1vbm8gYXMgZml4ZWQgcGl0Y2guCkBAIC0zNzAsNyArMzcwLDcgQEAgRmxvYXRSZWN0IFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kcwogaW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIFNp
bXBsZUZvbnREYXRhOjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CiB7CiAgICAgQ0dGb250UmVuZGVy
aW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dG
b250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0
eWxlU3VicGl4ZWxRdWFudGl6YXRpb247Ci0gICAgTlNGb250ICpmb250ID0gcGxhdGZvcm1EYXRh
KCkuZm9udCgpOworICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOwog
ICAgIGlmIChmb250KSB7CiAgICAgICAgIHN3aXRjaCAoW2ZvbnQgcmVuZGVyaW5nTW9kZV0pIHsK
ICAgICAgICAgY2FzZSBOU0ZvbnRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZToKQEAg
LTM4OCw3ICszODgsNyBAQCBpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgU2ltcGxlRm9udERh
CiAKIGlubGluZSBib29sIFNpbXBsZUZvbnREYXRhOjphZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250
KEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UpIGNvbnN0CiB7Ci0gICAgTlNGb250ICpmb250
ID0gcGxhdGZvcm1EYXRhKCkuZm9udCgpOworICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0
YSgpLm5zRm9udCgpOwogICAgIGlmICghZm9udCB8fCAhcGxhdGZvcm1EYXRhKCkuaXNDb2xvckJp
dG1hcEZvbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGFkdmFuY2UgPSBOU1NpemVU
b0NHU2l6ZShbZm9udCBhZHZhbmNlbWVudEZvckdseXBoOmdseXBoXSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzc0NDcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNC0xMi0xNiAgU2FtIFdlaW5pZyAg
PHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFVuaWZ5IHRoZSBNYWMgYW5kIGlPUyBpbXBsZW1l
bnRhdGlvbnMgb2YgRm9udFBsYXRmb3JtRGF0YSBhIGJpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NzIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAg
ICAgICAoZm9udE5hbWVGb3JEZXNjcmlwdGlvbik6CisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IGZ1
bmN0aW9uIG5hbWUuCisKIDIwMTQtMTItMTYgIFRpbW90aHkgSG9ydG9uICA8dGltb3RoeV9ob3J0
b25AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBhbmQgYWRvcHQgdHdvIG5ldyBUZXh0
SW5kaWNhdG9yIHByZXNlbnRhdGlvbiBhbmltYXRpb25zCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDE3NzQ0NykKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4ODAsNyAr
NDg4MCw3IEBAIHN0YXRpYyBOU1N0cmluZyAqZm9udE5hbWVGb3JEZXNjcmlwdGlvbigKICAgICBm
b250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShwb2ludFNpemUpOwogICAgIEZvbnRDYWNo
ZVB1cmdlUHJldmVudGVyIHB1cmdlUHJldmVudGVyOwogICAgIFJlZlB0cjxTaW1wbGVGb250RGF0
YT4gc2ltcGxlRm9udERhdGEgPSBmb250Q2FjaGUoKS5nZXRDYWNoZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIGZhbWlseU5hbWUsIGZhbHNlLCBXZWJDb3JlOjpGb250Q2FjaGU6OkRvTm90UmV0
YWluKTsKLSAgICByZXR1cm4gW3NpbXBsZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5mb250KCkg
Zm9udE5hbWVdOworICAgIHJldHVybiBbc2ltcGxlRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm5z
Rm9udCgpIGZvbnROYW1lXTsKIH0KIAogLSAodm9pZClfYWRkVG9TdHlsZTooRE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiAqKXN0eWxlIGZvbnRBOihOU0ZvbnQgKilhIGZvbnRCOihOU0ZvbnQgKiliCg==
</data>
<flag name="review"
          id="268341"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>