<?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>36190</bug_id>
          
          <creation_ts>2010-03-16 13:57:55 -0700</creation_ts>
          <short_desc>Lessen Include Path Build Fragility (FontPlatformData.h)</short_desc>
          <delta_ts>2010-03-18 14:21:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</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>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>aroben</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>200413</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2010-03-16 13:57:55 -0700</bug_when>
    <thetext>The use of the common file name &quot;FontPlatformData.h&quot; across multiple platforms means that the ordering of include paths determines which version of this file is used during a build.

A recent source change (http://trac.webkit.org/changeset/55510) broke the WinCairo build because it moved the Gtk-specific version of FontPlatformData.h into the platform/graphics/cairo directory, which is now used preferentially to the historical version in platform/graphics/win.

After discussing the issue with Adam Roben, we decided that the best long-term solution is to rename this header file &apos;FontPlatformDataWin.h&apos;, to disambiguate the file intended for the build.

The attached patch makes this proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200426</commentid>
    <comment_count>1</comment_count>
      <attachid>50837</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2010-03-16 14:11:27 -0700</bug_when>
    <thetext>Created attachment 50837
Patch to disambiguate FontPlatformData.h includes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200458</commentid>
    <comment_count>2</comment_count>
      <attachid>50837</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-03-16 15:05:46 -0700</bug_when>
    <thetext>Comment on attachment 50837
Patch to disambiguate FontPlatformData.h includes.

My biggest complaint with this approach is that the next time someone adds #include &quot;FontPlatformData.h&quot; to a file, they will break Apple&apos;s Windows build. We need to find some way to avoid that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201051</commentid>
    <comment_count>3</comment_count>
      <attachid>50975</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2010-03-17 17:04:20 -0700</bug_when>
    <thetext>Created attachment 50975
Address FontPlatformData.h include confusion by moving WinCairo declarations into platform/graphics/cairo version of file.

Move WinCairo implementation to platform/graphics/cairo; move cg-specific FontPlatformData.h.  Remove cairo-specific stuff from the cg/FontPlatformData.h file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201056</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-17 17:08:59 -0700</bug_when>
    <thetext>Attachment 50975 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/win/FontPlatformDataCairoWin.cpp:135:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/platform/graphics/win/FontPlatformDataCairoWin.cpp:136:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/platform/graphics/win/FontPlatformDataCairoWin.cpp:137:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/platform/graphics/win/FontPlatformDataCairoWin.cpp:138:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/platform/graphics/win/FontPlatformDataCairoWin.cpp:139:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/win/FontPlatformData.h&quot;
WebCore/platform/graphics/cairo/FontPlatformData.h:41:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/win/RefCountedHFONT.h:23:  #ifndef header guard has wrong style, please use: RefCountedHFONT_h  [build/header_guard] [5]
WebCore/platform/graphics/win/RefCountedHFONT.h:36:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/platform/graphics/cg/FontPlatformData.h:24:  #ifndef header guard has wrong style, please use: FontPlatformData_h  [build/header_guard] [5]
WebCore/platform/graphics/cg/FontPlatformData.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/cg/FontPlatformData.h:76:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/platform/graphics/cg/FontPlatformData.h:77:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/platform/graphics/cg/FontPlatformData.h:78:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/platform/graphics/cg/FontPlatformData.h:79:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 14 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201375</commentid>
    <comment_count>5</comment_count>
      <attachid>51044</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2010-03-18 10:36:22 -0700</bug_when>
    <thetext>Created attachment 51044
Same as last revision, but with check-webkit-style fixes.

Minor whitespace changes to conform to check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201377</commentid>
    <comment_count>6</comment_count>
      <attachid>51045</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2010-03-18 10:38:52 -0700</bug_when>
    <thetext>Created attachment 51045
Uploaded wrong version of diff.  This is the correct file.  (I.e., attachment 50975 with check-webkit-style fixes.)

Corrects check-webkit-style warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201379</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-18 10:43:53 -0700</bug_when>
    <thetext>Attachment 51045 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WARNING: Could not read file. Skipping: &quot;WebCore/platform/graphics/win/FontPlatformData.h&quot;
WebCore/platform/graphics/cairo/FontPlatformData.h:41:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201427</commentid>
    <comment_count>8</comment_count>
      <attachid>51045</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-03-18 11:29:22 -0700</bug_when>
    <thetext>Comment on attachment 51045
Uploaded wrong version of diff.  This is the correct file.  (I.e., attachment 50975 with check-webkit-style fixes.)

&gt; -    bool isHashTableDeletedValue() const {
&gt; +    bool isHashTableDeletedValue() const
&gt; +    {
&gt;  #if defined(USE_FREETYPE)
&gt;          return m_pattern == hashTableDeletedFontValue();
&gt;  #elif defined(USE_PANGO)
&gt;          return m_font == hashTableDeletedFontValue();
&gt; +#elif PLATFORM(WIN)
&gt; +        return m_font.isHashTableDeletedValue();
&gt;  #endif
&gt;      };
&gt;  
&gt; +
&gt;  #ifndef NDEBUG
&gt;      String description() const;
&gt;  #endif

Too much whitespace in there. (And the semicolon after the closing brace isn&apos;t needed.)

&gt; @@ -122,6 +161,13 @@ public:
&gt;  
&gt;      PangoContext* m_context;
&gt;      PangoFont* m_font;
&gt; +#elif PLATFORM(WIN)
&gt; +private:
&gt; +    void platformDataInit(HFONT font, float size, HDC hdc, WCHAR* faceName);

You could remove the &quot;font&quot; and &quot;hdc&quot; parameter names here.

&gt; Index: WebCore/platform/graphics/cg/FontPlatformData.h

Having this Windows-specific file in the cg/ directory seems a little confusing. Mac uses CG, too (and many files in the platform/graphics/cg directory), for example. But I guess it&apos;s OK for now.

&gt; +++ WebCore/platform/graphics/win/RefCountedHFONT.h	(revision 0)
&gt; @@ -0,0 +1,59 @@
&gt; +/*
&gt; + * This file is part of the internal font implementation.  It should not be included by anyone other than
&gt; + * FontCairo.cpp, FontMac.cpp, FontWin.cpp and Font.cpp.

I don&apos;t think this comment is needed anymore.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201558</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2010-03-18 14:21:05 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/56192.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50837</attachid>
            <date>2010-03-16 14:11:27 -0700</date>
            <delta_ts>2010-03-17 17:04:20 -0700</delta_ts>
            <desc>Patch to disambiguate FontPlatformData.h includes.</desc>
            <filename>path_adjustments.patch</filename>
            <type>text/plain</type>
            <size>16669</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU2MDgzKQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDI4IEBADQorMjAxMC0wMy0xNiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFt
QHdlYmtpdC5vcmc+DQorDQorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4NCisN
CisgICAgICAgIExlc3NlbiBpbmNsdWRlIHBhdGggYnVpbGQgZnJhZ2lsaXR5IChGb250UGxhdGZv
cm1EYXRhLmgpDQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzYxOTAuDQorDQorICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkNCisNCisgICAgICAg
IFJldmlzZSB0aGUgdXNlIG9mICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiIHRvIHNwZWNp
ZmljYWxseQ0KKyAgICAgICAgaW5jbHVkZSB0aGUgJ0ZvbnRQbGF0Zm9ybURhdGFXaW4uaCcgZmls
ZSB3aGVuIGJ1aWxkaW5nIHRoZSBBcHBsZQ0KKyAgICAgICAgV2luZG93cyBvciBXaW5DYWlybyBw
b3J0cyBvZiBXZWJLaXQgKGNvbW1lbnQgYXBwbGllcyB0byBhbGwgdGhlDQorICAgICAgICBmb2xs
b3dpbmcgZmlsZXMuKQ0KKw0KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkRm9udC5jcHA6IA0KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOg0KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOg0KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6DQorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOg0KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oOiBSZW1vdmVkLg0KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcDoN
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dp
bi5jcHA6DQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRh
V2luLmNwcDoNCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFXaW4uaDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YS5oLg0KKw0KIDIwMTAtMDMtMTYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNv
bT4NCiANCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4NCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNTYwNzIpDQorKysgV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQ0KQEAgLTIyOTk1
LDEwICsyMjk5Niw2IEBADQogCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJCTwvRmls
ZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1x3aW5cRm9udFBsYXRmb3JtRGF0YS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwvRmlsZT4NCi0JCQkJ
CTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cRm9u
dFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcCINCiAJCQkJCQk+DQogCQkJCQkJPEZpbGVDb25maWd1
cmF0aW9uDQpAQCAtMjMwNTksNiArMjMwNTYsMTAgQEANCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+
DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
d2luXEZvbnRQbGF0Zm9ybURhdGFXaW4uaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJ
CQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXEZv
bnRXaW4uY3BwIg0KIAkJCQkJCT4NCiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZEZvbnQuY3BwCShyZXZpc2lvbiA1NjA3MikNCisrKyBXZWJDb3JlL2xvYWRlci9D
YWNoZWRGb250LmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTM1LDcgKzM1LDExIEBADQogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiDQogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyLmgiDQogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiDQorI2lmIFBMQVRG
T1JNKFdJTikNCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YVdpbi5oIg0KKyNlbHNlDQogI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCINCisjZW5kaWYNCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiDQogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCINCiAjaW5jbHVkZSAibG9h
ZGVyLmgiDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCShy
ZXZpc2lvbiA1NjA3MikNCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkNCkBAIC0zMiw3ICszMiwxMSBAQA0KIA0KICNpbmNsdWRlICJGb250
LmgiDQogI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCINCisjaWYgUExBVEZPUk0oV0lOKQ0K
KyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhV2luLmgiDQorI2Vsc2UNCiAjaW5jbHVkZSAiRm9u
dFBsYXRmb3JtRGF0YS5oIg0KKyNlbmRpZg0KICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCINCiAj
aW5jbHVkZSAiU3RyaW5nSGFzaC5oIg0KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPg0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2aXNpb24g
NTYwNzIpDQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3
b3JraW5nIGNvcHkpDQpAQCAtMjUsNyArMjUsMTEgQEANCiAjZGVmaW5lIFNpbXBsZUZvbnREYXRh
X2gNCiANCiAjaW5jbHVkZSAiRm9udERhdGEuaCINCisjaWYgUExBVEZPUk0oV0lOKQ0KKyNpbmNs
dWRlICJGb250UGxhdGZvcm1EYXRhV2luLmgiDQorI2Vsc2UNCiAjaW5jbHVkZSAiRm9udFBsYXRm
b3JtRGF0YS5oIg0KKyNlbmRpZg0KICNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIg0KICNp
bmNsdWRlICJHbHlwaFdpZHRoTWFwLmgiDQogI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMu
aCINCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiA1NjA3MikNCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQ0KQEAgLTIyLDcgKzIyLDcgQEANCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5oIg0KIA0KICNpbmNsdWRlICJCYXNlNjQuaCINCi0jaW5jbHVkZSAiRm9udFBsYXRmb3Jt
RGF0YS5oIg0KKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhV2luLmgiDQogI2luY2x1ZGUgIk9w
ZW5UeXBlVXRpbGl0aWVzLmgiDQogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIg0KICNpbmNsdWRl
ICJTb2Z0TGlua2luZy5oIg0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCShyZXZp
c2lvbiA1NjA3MikNCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjIsNyArMjIsNyBAQA0K
ICNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uaCINCiANCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiDQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCINCisjaW5jbHVk
ZSAiRm9udFBsYXRmb3JtRGF0YVdpbi5oIg0KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+DQog
DQogbmFtZXNwYWNlIFdlYkNvcmUgew0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRQbGF0Zm9ybURhdGEuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gNTYwNzIpDQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNv
cHkpDQpAQCAtMSwxNTUgKzAsMCBAQA0KLS8qDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVk
IGJ5IGFueW9uZSBvdGhlciB0aGFuDQotICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBG
b250LmNwcC4NCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuDQotICoNCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yDQotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMNCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQotICoNCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwNCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZg0KLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQotICoNCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
DQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8NCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLA0KLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLg0KLSAqDQotICovDQotDQotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX0gNCi0j
ZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFfSA0KLQ0KLSNpbmNsdWRlICJTdHJpbmdJbXBsLmgiDQot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+DQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4N
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4NCi0NCi0jaWYgUExBVEZPUk0oQ0FJUk8pDQot
I2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+DQotI2VuZGlmDQotDQotdHlwZWRlZiBzdHJ1Y3QgSEZP
TlRfXyogSEZPTlQ7DQotdHlwZWRlZiBzdHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7DQotDQotbmFt
ZXNwYWNlIFdlYkNvcmUgew0KLQ0KLWNsYXNzIEZvbnREZXNjcmlwdGlvbjsNCi1jbGFzcyBTdHJp
bmc7DQotDQotY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7DQotcHVibGljOg0KLSAgICBGb250UGxh
dGZvcm1EYXRhKCkNCi0jaWYgUExBVEZPUk0oQ0FJUk8pDQotICAgICAgICA6IG1fZm9udEZhY2Uo
MCkNCi0gICAgICAgICwgbV9zY2FsZWRGb250KDApDQotICAgICAgICAsDQotI2Vsc2UNCi0gICAg
ICAgIDoNCi0jZW5kaWYNCi0gICAgICAgICAgbV9zaXplKDApDQotICAgICAgICAsIG1fc3ludGhl
dGljQm9sZChmYWxzZSkNCi0gICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQ0KLSAg
ICAgICAgLCBtX3VzZUdESShmYWxzZSkNCi0gICAgew0KLSAgICB9DQotDQotICAgIEZvbnRQbGF0
Zm9ybURhdGEoSEZPTlQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29s
IHVzZUdESSk7DQotICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIG9ibGlxdWUpOw0KLQ0KLSNpZiBQTEFURk9STShDRykNCi0gICAgRm9udFBsYXRmb3JtRGF0
YShIRk9OVCwgQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwg
Ym9vbCB1c2VHREkpOw0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQ0KLSAgICBGb250UGxhdGZvcm1E
YXRhKGNhaXJvX2ZvbnRfZmFjZV90KiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlx
dWUpOw0KLSAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsNCi0N
Ci0gICAgRm9udFBsYXRmb3JtRGF0YSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
KTsNCi0jZW5kaWYNCi0gICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsNCi0NCi0gICAgRm9udFBsYXRm
b3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9mb250KFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0NCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9DQot
DQotICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250LT5oZm9udCgpOyB9DQot
I2lmIFBMQVRGT1JNKENHKQ0KLSAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4g
bV9jZ0ZvbnQuZ2V0KCk7IH0NCi0jZWxpZiBQTEFURk9STShDQUlSTykNCi0gICAgY2Fpcm9fZm9u
dF9mYWNlX3QqIGZvbnRGYWNlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RmFjZTsgfQ0KLSAgICBj
YWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRG
b250OyB9DQotI2VuZGlmDQotDQotICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0NCi0gICAgdm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQ0K
LSAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7
IH0NCi0gICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0
aWNPYmxpcXVlOyB9DQotICAgIGJvb2wgdXNlR0RJKCkgY29uc3QgeyByZXR1cm4gbV91c2VHREk7
IH0NCi0NCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVy
biBtX2ZvbnQtPmhhc2goKTsNCi0gICAgfQ0KLQ0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0DQotICAgIHsgDQotICAgICAgICByZXR1cm4g
bV9mb250ID09IG90aGVyLm1fZm9udCAmJg0KLSNpZiBQTEFURk9STShDRykNCi0gICAgICAgICAg
ICAgICBtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udCAmJg0KLSNlbGlmIFBMQVRGT1JNKENBSVJP
KQ0KLSAgICAgICAgICAgICAgIG1fZm9udEZhY2UgPT0gb3RoZXIubV9mb250RmFjZSAmJg0KLSAg
ICAgICAgICAgICAgIG1fc2NhbGVkRm9udCA9PSBvdGhlci5tX3NjYWxlZEZvbnQgJiYNCi0jZW5k
aWYNCi0gICAgICAgICAgICAgICBtX3NpemUgPT0gb3RoZXIubV9zaXplICYmDQotICAgICAgICAg
ICAgICAgbV9zeW50aGV0aWNCb2xkID09IG90aGVyLm1fc3ludGhldGljQm9sZCAmJiBtX3N5bnRo
ZXRpY09ibGlxdWUgPT0gb3RoZXIubV9zeW50aGV0aWNPYmxpcXVlICYmDQotICAgICAgICAgICAg
ICAgbV91c2VHREkgPT0gb3RoZXIubV91c2VHREk7DQotICAgIH0NCi0NCi0jaWZuZGVmIE5ERUJV
Rw0KLSAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsNCi0jZW5kaWYNCi0NCi1wcml2YXRl
Og0KLSAgICBjbGFzcyBSZWZDb3VudGVkSEZPTlQgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWZDb3Vu
dGVkSEZPTlQ+IHsNCi0gICAgcHVibGljOg0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVm
Q291bnRlZEhGT05UPiBjcmVhdGUoSEZPTlQgaGZvbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBS
ZWZDb3VudGVkSEZPTlQoaGZvbnQpKTsgfQ0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVm
Q291bnRlZEhGT05UPiBjcmVhdGVEZWxldGVkKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJlZkNv
dW50ZWRIRk9OVChyZWludGVycHJldF9jYXN0PEhGT05UPigtMSkpKTsgfQ0KLQ0KLSAgICAgICAg
ICAgIH5SZWZDb3VudGVkSEZPTlQoKSB7IGlmIChtX2hmb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8
SEZPTlQ+KC0xKSkgRGVsZXRlT2JqZWN0KG1faGZvbnQpOyB9DQotDQotICAgICAgICBIRk9OVCBo
Zm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faGZvbnQ7IH0NCi0gICAgICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21w
dXRlSGFzaChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oJm1faGZvbnQpLCBzaXplb2Yo
SEZPTlQpIC8gc2l6ZW9mKFVDaGFyKSk7DQotICAgICAgICB9DQotDQotICAgIHByaXZhdGU6DQot
ICAgICAgICBSZWZDb3VudGVkSEZPTlQoSEZPTlQgaGZvbnQpDQotICAgICAgICAgICAgOiBtX2hm
b250KGhmb250KQ0KLSAgICAgICAgew0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgSEZPTlQgbV9o
Zm9udDsNCi0gICAgfTsNCi0NCi0gICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQs
IGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSk7DQotDQotICAgIFJlZlB0cjxS
ZWZDb3VudGVkSEZPTlQ+IG1fZm9udDsNCi0jaWYgUExBVEZPUk0oQ0cpDQotICAgIFJldGFpblB0
cjxDR0ZvbnRSZWY+IG1fY2dGb250Ow0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQ0KLSAgICBjYWly
b19mb250X2ZhY2VfdCogbV9mb250RmFjZTsNCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9z
Y2FsZWRGb250Ow0KLSNlbmRpZg0KLQ0KLSAgICBmbG9hdCBtX3NpemU7DQotICAgIGJvb2wgbV9z
eW50aGV0aWNCb2xkOw0KLSAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsNCi0gICAgYm9vbCBt
X3VzZUdESTsNCi19Ow0KLQ0KLX0NCi0NCi0jZW5kaWYNCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAko
cmV2aXNpb24gNTYwNzIpDQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YUNHV2luLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTIyLDcgKzIyLDcgQEANCiAg
Ki8NCiANCiAjaW5jbHVkZSAiY29uZmlnLmgiDQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCINCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YVdpbi5oIg0KIA0KICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIg0KICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiDQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFD
YWlyb1dpbi5jcHAJKHJldmlzaW9uIDU2MDcyKQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0y
NCw3ICsyNCw3IEBADQogICovDQogDQogI2luY2x1ZGUgImNvbmZpZy5oIg0KLSNpbmNsdWRlICJG
b250UGxhdGZvcm1EYXRhLmgiDQorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFXaW4uaCINCiAN
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCINCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIg0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4u
Y3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YVdpbi5jcHAJKHJldmlzaW9uIDU2MDcyKQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAt
MjMsNyArMjMsNyBAQA0KICAqLw0KIA0KICNpbmNsdWRlICJjb25maWcuaCINCi0jaW5jbHVkZSAi
Rm9udFBsYXRmb3JtRGF0YS5oIg0KKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhV2luLmgiDQog
DQogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiDQogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIN
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2lu
LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxh
dGZvcm1EYXRhV2luLmgJKHJldmlzaW9uIDU2MDcyKQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmg6NTYwNzIpDQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5oCSh3b3JraW5nIGNvcHkpDQpAQCAt
MCwwICsxLDE1NSBAQA0KKy8qDQorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFs
IGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFueW9u
ZSBvdGhlciB0aGFuDQorICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4N
CisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuDQorICoN
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yDQorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwN
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8NCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLA0KKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
Lg0KKyAqDQorICovDQorDQorI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX0gNCisjZGVmaW5lIEZv
bnRQbGF0Zm9ybURhdGFfSA0KKw0KKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiDQorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+DQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4NCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4NCisNCisjaWYgUExBVEZPUk0oQ0FJUk8pDQorI2luY2x1ZGUg
PGNhaXJvLXdpbjMyLmg+DQorI2VuZGlmDQorDQordHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZP
TlQ7DQordHlwZWRlZiBzdHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7DQorDQorbmFtZXNwYWNlIFdl
YkNvcmUgew0KKw0KK2NsYXNzIEZvbnREZXNjcmlwdGlvbjsNCitjbGFzcyBTdHJpbmc7DQorDQor
Y2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7DQorcHVibGljOg0KKyAgICBGb250UGxhdGZvcm1EYXRh
KCkNCisjaWYgUExBVEZPUk0oQ0FJUk8pDQorICAgICAgICA6IG1fZm9udEZhY2UoMCkNCisgICAg
ICAgICwgbV9zY2FsZWRGb250KDApDQorICAgICAgICAsDQorI2Vsc2UNCisgICAgICAgIDoNCisj
ZW5kaWYNCisgICAgICAgICAgbV9zaXplKDApDQorICAgICAgICAsIG1fc3ludGhldGljQm9sZChm
YWxzZSkNCisgICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQ0KKyAgICAgICAgLCBt
X3VzZUdESShmYWxzZSkNCisgICAgew0KKyAgICB9DQorDQorICAgIEZvbnRQbGF0Zm9ybURhdGEo
SEZPTlQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSk7
DQorICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlx
dWUpOw0KKw0KKyNpZiBQTEFURk9STShDRykNCisgICAgRm9udFBsYXRmb3JtRGF0YShIRk9OVCwg
Q0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VH
REkpOw0KKyNlbGlmIFBMQVRGT1JNKENBSVJPKQ0KKyAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJv
X2ZvbnRfZmFjZV90KiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOw0KKyAg
ICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsNCisNCisgICAgRm9u
dFBsYXRmb3JtRGF0YSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsNCisjZW5k
aWYNCisgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsNCisNCisgICAgRm9udFBsYXRmb3JtRGF0YShX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9mb250KFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKSB7IH0NCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9DQorDQorICAgIEhG
T05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250LT5oZm9udCgpOyB9DQorI2lmIFBMQVRG
T1JNKENHKQ0KKyAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4gbV9jZ0ZvbnQu
Z2V0KCk7IH0NCisjZWxpZiBQTEFURk9STShDQUlSTykNCisgICAgY2Fpcm9fZm9udF9mYWNlX3Qq
IGZvbnRGYWNlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RmFjZTsgfQ0KKyAgICBjYWlyb19zY2Fs
ZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRGb250OyB9DQor
I2VuZGlmDQorDQorICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0NCisg
ICAgdm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQ0KKyAgICBib29s
IHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0NCisgICAg
Ym9vbCBzeW50aGV0aWNPYmxpcXVlKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNPYmxpcXVl
OyB9DQorICAgIGJvb2wgdXNlR0RJKCkgY29uc3QgeyByZXR1cm4gbV91c2VHREk7IH0NCisNCisg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0DQorICAgIHsNCisgICAgICAgIHJldHVybiBtX2ZvbnQt
Pmhhc2goKTsNCisgICAgfQ0KKw0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgb3RoZXIpIGNvbnN0DQorICAgIHsgDQorICAgICAgICByZXR1cm4gbV9mb250ID09
IG90aGVyLm1fZm9udCAmJg0KKyNpZiBQTEFURk9STShDRykNCisgICAgICAgICAgICAgICBtX2Nn
Rm9udCA9PSBvdGhlci5tX2NnRm9udCAmJg0KKyNlbGlmIFBMQVRGT1JNKENBSVJPKQ0KKyAgICAg
ICAgICAgICAgIG1fZm9udEZhY2UgPT0gb3RoZXIubV9mb250RmFjZSAmJg0KKyAgICAgICAgICAg
ICAgIG1fc2NhbGVkRm9udCA9PSBvdGhlci5tX3NjYWxlZEZvbnQgJiYNCisjZW5kaWYNCisgICAg
ICAgICAgICAgICBtX3NpemUgPT0gb3RoZXIubV9zaXplICYmDQorICAgICAgICAgICAgICAgbV9z
eW50aGV0aWNCb2xkID09IG90aGVyLm1fc3ludGhldGljQm9sZCAmJiBtX3N5bnRoZXRpY09ibGlx
dWUgPT0gb3RoZXIubV9zeW50aGV0aWNPYmxpcXVlICYmDQorICAgICAgICAgICAgICAgbV91c2VH
REkgPT0gb3RoZXIubV91c2VHREk7DQorICAgIH0NCisNCisjaWZuZGVmIE5ERUJVRw0KKyAgICBT
dHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsNCisjZW5kaWYNCisNCitwcml2YXRlOg0KKyAgICBj
bGFzcyBSZWZDb3VudGVkSEZPTlQgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWZDb3VudGVkSEZPTlQ+
IHsNCisgICAgcHVibGljOg0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVmQ291bnRlZEhG
T05UPiBjcmVhdGUoSEZPTlQgaGZvbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWZDb3VudGVk
SEZPTlQoaGZvbnQpKTsgfQ0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVmQ291bnRlZEhG
T05UPiBjcmVhdGVEZWxldGVkKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRIRk9O
VChyZWludGVycHJldF9jYXN0PEhGT05UPigtMSkpKTsgfQ0KKw0KKyAgICAgICAgICAgIH5SZWZD
b3VudGVkSEZPTlQoKSB7IGlmIChtX2hmb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8SEZPTlQ+KC0x
KSkgRGVsZXRlT2JqZWN0KG1faGZvbnQpOyB9DQorDQorICAgICAgICBIRk9OVCBoZm9udCgpIGNv
bnN0IHsgcmV0dXJuIG1faGZvbnQ7IH0NCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdA0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oJm1faGZvbnQpLCBzaXplb2YoSEZPTlQpIC8g
c2l6ZW9mKFVDaGFyKSk7DQorICAgICAgICB9DQorDQorICAgIHByaXZhdGU6DQorICAgICAgICBS
ZWZDb3VudGVkSEZPTlQoSEZPTlQgaGZvbnQpDQorICAgICAgICAgICAgOiBtX2hmb250KGhmb250
KQ0KKyAgICAgICAgew0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgSEZPTlQgbV9oZm9udDsNCisg
ICAgfTsNCisNCisgICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNp
emUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSk7DQorDQorICAgIFJlZlB0cjxSZWZDb3VudGVk
SEZPTlQ+IG1fZm9udDsNCisjaWYgUExBVEZPUk0oQ0cpDQorICAgIFJldGFpblB0cjxDR0ZvbnRS
ZWY+IG1fY2dGb250Ow0KKyNlbGlmIFBMQVRGT1JNKENBSVJPKQ0KKyAgICBjYWlyb19mb250X2Zh
Y2VfdCogbV9mb250RmFjZTsNCisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250
Ow0KKyNlbmRpZg0KKw0KKyAgICBmbG9hdCBtX3NpemU7DQorICAgIGJvb2wgbV9zeW50aGV0aWNC
b2xkOw0KKyAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsNCisgICAgYm9vbCBtX3VzZUdESTsN
Cit9Ow0KKw0KK30NCisNCisjZW5kaWYNCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50975</attachid>
            <date>2010-03-17 17:04:20 -0700</date>
            <delta_ts>2010-03-18 10:36:22 -0700</delta_ts>
            <desc>Address FontPlatformData.h include confusion by moving WinCairo declarations into platform/graphics/cairo version of file.</desc>
            <filename>cairo_font.patch</filename>
            <type>text/plain</type>
            <size>26740</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjEzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMDMtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEhlbHAgcmVkdWNlIGJ1aWxkIHByb2JsZW1zIGR1ZSB0byBmb250IGRlY2xhcmF0aW9ucy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MTkwCisKKyAg
ICAgICAgRnVuY3Rpb25zIHVuY2hhbmdlZCwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZCBuZXcgZmlsZSwgYW5kIHNob3cKKyAgICAg
ICAgICBtb3ZlbWVudCBvZiBGb250UGxhdGZvcm1EYXRhLmggdG8gY2cvIGRpcmVjdG9yeS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhLmg6IE1lcmdl
IGluCisgICAgICAgICAgV2luQ2Fpcm8tc3BlY2lmaWMgZGVjbGFyYXRpb25zLiAgQ29ycmVjdCBj
b25zdHJ1Y3RvcgorICAgICAgICAgIGRlY2xhcmF0aW9uIHRvIHVzZSB0eXBlIGZsb2F0IGZvciBm
b250IHNpemUuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhmb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnVzZUdESSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpmb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQ
bGF0Zm9ybURhdGFDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKTogQ29ycmVjdAorICAgICAgICAgIGNvbnN0cnVjdG9yIHRvIGFj
Y2VwdCB0eXBlIGZsb2F0IGZvciBmb250IHNpemUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvRm9udFBsYXRmb3JtRGF0YS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmguCisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6Omhmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmNn
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fp
cm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9
PSk6IE1vdmUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICBoZXJlIChwcmV2aW91c2x5IGluIGhl
YWRlcikgdG8gbWF0Y2ggb3RoZXIgY2Fpcm8tYmFzZWQgcG9ydHMuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1JlZkNvdW50ZWRIRk9OVC5oOiBBZGRlZC4gIFRoaXMKKyAgICAgICAg
ICB3YXMgZXh0cmFjdGVkIGZyb20gd2luL0ZvbnRQbGF0Zm9ybURhdGEuaCwgYW5kIGlzIG5vdyBz
aGFyZWQKKyAgICAgICAgICBieSB0aGUgY2cvRm9udFBsYXRmb3JtRGF0YS5oIGFuZCBjYWlyby9G
b250UGxhdGZvcm1EYXRhLmgKKyAgICAgICAgKFdlYkNvcmU6OlJlZkNvdW50ZWRIRk9OVDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZkNvdW50ZWRIRk9OVDo6Y3JlYXRlRGVsZXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWZDb3VudGVkSEZPTlQ6On5SZWZDb3VudGVkSEZPTlQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVmQ291bnRlZEhGT05UOjpoZm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWZDb3VudGVkSEZPTlQ6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6UmVmQ291bnRl
ZEhGT05UOjpSZWZDb3VudGVkSEZPTlQpOgorCiAyMDEwLTAzLTE3ICBEbWl0cnkgVGl0b3YgIDxk
aW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtv
di4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNTYw
NzIpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjk5NSwxMCArMjI5OTYsNiBAQAogCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
CiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1x3aW5cRm9udFBsYXRmb3JtRGF0YS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwv
RmlsZT4NCi0JCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1x3aW5cRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcCINCiAJCQkJCQk+DQogCQkJCQkJ
PEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMjMzNTksNiArMjMzNTYsMTAgQEAKIAkJCQkJCT4NCiAJ
CQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1x3aW5cUmVmQ291bnRlZEhGT05ULmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxl
Pg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XHdpblxTaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcCINCiAJCQkJCQk+DQogCQkJCQkJPEZpbGVD
b25maWd1cmF0aW9uDQpAQCAtMjM1MzksNiArMjM1NDAsMjYgQEAKIAkJCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcRm9udFBsYXRmb3JtRGF0YS5oIg0KKwkJCQkJCT4N
CisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2lu
MzIiDQorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJ
CTxUb29sDQorCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkJCQkJLz4NCisJ
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJ
CQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSINCisJCQkJCQkJPg0KKwkJCQkJCQk8VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDdXN0
b21CdWlsZFRvb2wiDQorCQkJCQkJCS8+DQorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJ
CQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xjZ1xHcmFkaWVudENHLmNwcCINCiAJCQkJCQk+DQogCQkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uDQpAQCAtMjM5MzUsNiArMjM5NTYsNDIgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fpcm9cRm9udFBsYXRmb3JtRGF0YS5oIg0KKwkJCQkJCT4N
CisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQor
CQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJCTxUb29s
DQorCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkJCQkJLz4NCisJCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCQlO
YW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJ
CQkJCQkJPg0KKwkJCQkJCQk8VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wi
DQorCQkJCQkJCS8+DQorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCisJCQkJCQkJTmFtZT0iRGVidWdfSW50ZXJuYWx8V2luMzIiDQorCQkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJCTxUb29sDQorCQkJ
CQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkJCQkJLz4NCisJCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPg0KKwkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCQlOYW1lPSJE
ZWJ1Z19BbGx8V2luMzIiDQorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJ
CQk+DQorCQkJCQkJCTxUb29sDQorCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJ
CQkJCQkJLz4NCisJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPC9GaWxlPg0KKwkJ
CQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhaXJv
XEdyYWRpZW50Q2Fpcm8uY3BwIg0KIAkJCQkJCT4NCiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0
Zm9ybURhdGEuaAkocmV2aXNpb24gNTYxMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAK
ICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9u
LiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgogICogRm9u
dE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KICAqCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIg
VVNBLCBJbmMuCkBAIC0zNiwxMCArMzYsMTcgQEAKICNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJl
ZXR5cGUuaD4KICNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQogI2luY2x1ZGUgPHBhbmdvL3Bhbmdv
Y2Fpcm8uaD4KKyNlbGlmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgor
I2luY2x1ZGUgIlJlZkNvdW50ZWRIRk9OVC5oIgorI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKICNl
bHNlCiAjZXJyb3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oV0lOKQordHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7CisjZW5kaWYKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU3RyaW5nOwpAQCAtNTMsOSArNjAsMTYgQEAgcHVi
bGljOgogI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCiAgICAgICAgIDogbV9jb250ZXh0KDApCiAg
ICAgICAgICwgbV9mb250KGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkKKyNlbGlmIFBMQVRG
T1JNKFdJTikKKyAgICAgICAgOiBtX2ZvbnRGYWNlKDApCisgICAgICAgICwgbV91c2VHREkoZmFs
c2UpCisgICAgICAgICwgbV9mb250KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQogI2Vsc2UK
ICNlcnJvciAiTXVzdCBkZWZpbmVkIGEgZm9udCBiYWNrZW5kIgogI2VuZGlmCisgICAgICAgICwg
bV9zaXplKDApCisgICAgICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQorICAgICAgICAsIG1f
c3ludGhldGljT2JsaXF1ZShmYWxzZSkKICAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKICAgICAg
ICAgeyB9CiAKQEAgLTY2LDI0ICs4MCw0MSBAQCBwdWJsaWM6CiAjZWxpZiBkZWZpbmVkKFVTRV9Q
QU5HTykKICAgICAgICAgOiBtX2NvbnRleHQoMCkKICAgICAgICAgLCBtX2ZvbnQoMCkKKyNlbGlm
IFBMQVRGT1JNKFdJTikKKyAgICAgICAgOiBtX2ZvbnRGYWNlKDApCisgICAgICAgICwgbV91c2VH
REkoZmFsc2UpCiAjZWxzZQogI2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCiAj
ZW5kaWYKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFs
c2UpCisgICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQogICAgICAgICAsIG1fc2Nh
bGVkRm9udCgwKQogICAgICAgICB7IH0KIAorI2lmIFBMQVRGT1JNKFdJTikKKyAgICBGb250UGxh
dGZvcm1EYXRhKEhGT05ULCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9v
bCB1c2VHREkpOworI2Vsc2UKICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKKyNlbmRpZgogCisgICAgRm9udFBs
YXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wg
Ym9sZCwgYm9vbCBpdGFsaWMpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIGl0YWxpYyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2Zh
Y2VfdCogZm9udEZhY2UsIGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsKICAgICBG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKIAogICAgIH5Gb250UGxh
dGZvcm1EYXRhKCk7CiAKKyNpZiAhUExBVEZPUk0oV0lOKQogICAgIHN0YXRpYyBib29sIGluaXQo
KTsKKyNlbHNlCisgICAgSEZPTlQgaGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQtPmhmb250
KCk7IH0KKyAgICBib29sIHVzZUdESSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlR0RJOyB9CisgICAg
Y2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RmFjZTsg
fQorI2VuZGlmCiAKICAgICBib29sIGlzRml4ZWRQaXRjaCgpOwogICAgIGZsb2F0IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICB2b2lkIHNldFNpemUoZmxvYXQgc2l6ZSkgeyBt
X3NpemUgPSBzaXplOyB9CiAgICAgYm9vbCBzeW50aGV0aWNCb2xkKCkgY29uc3QgeyByZXR1cm4g
bV9zeW50aGV0aWNCb2xkOyB9CiAgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zeW50aGV0aWNPYmxpcXVlOyB9CiAKQEAgLTkxLDEyICsxMjIsMTYgQEAgcHVibGlj
OgogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgeworI2lmIFBMQVRGT1JNKFdJTikK
KyAgICAgICAgcmV0dXJuIG1fZm9udC0+aGFzaCgpOworI2Vsc2UKICNpZiBkZWZpbmVkKFVTRV9G
UkVFVFlQRSkKICAgICAgICAgaWYgKG1fcGF0dGVybikKICAgICAgICAgICAgIHJldHVybiBGY1Bh
dHRlcm5IYXNoKG1fcGF0dGVybik7CiAjZW5kaWYKICAgICAgICAgdWludHB0cl90IGhhc2hDb2Rl
c1sxXSA9IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKICAg
ICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNo
YXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOworI2Vu
ZGlmCiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
KSBjb25zdDsKQEAgLTEwNiw5ICsxNDEsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9w
YXR0ZXJuID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsKICNlbGlmIGRlZmluZWQoVVNF
X1BBTkdPKQogICAgICAgICByZXR1cm4gbV9mb250ID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFs
dWUoKTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICAgICAgcmV0dXJuIG1fZm9udC5pc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOwogI2VuZGlmCiAgICAgfTsKIAorCiAjaWZuZGVmIE5ERUJVRwog
ICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogI2VuZGlmCkBAIC0xMjIsNiArMTYwLDEz
IEBAIHB1YmxpYzoKIAogICAgIFBhbmdvQ29udGV4dCogbV9jb250ZXh0OwogICAgIFBhbmdvRm9u
dCogbV9mb250OworI2VsaWYgUExBVEZPUk0oV0lOKQorcHJpdmF0ZToKKyAgICB2b2lkIHBsYXRm
b3JtRGF0YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VO
YW1lKTsKKworICAgIFJlZlB0cjxSZWZDb3VudGVkSEZPTlQ+IG1fZm9udDsKKyAgICBjYWlyb19m
b250X2ZhY2VfdCogbV9mb250RmFjZTsKKyAgICBib29sIG1fdXNlR0RJOwogI2Vsc2UKICNlcnJv
ciAiTXVzdCBkZWZpbmVkIGEgZm9udCBiYWNrZW5kIgogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhQ2Fp
cm8uY3BwCShyZXZpc2lvbiA1NjA3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udFBsYXRmb3JtRGF0YUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEz
NCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQKIHsKIH0KIAot
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9u
dEZhY2UsIGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQorRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNp
emUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCiAgICAgOiBtX3BhdHRlcm4oMCkKICAgICAsIG1f
ZmFsbGJhY2tzKDApCiAgICAgLCBtX3NpemUoc2l6ZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiA1NjA3MikJKGZy
b20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oOjU2MDcy
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Gb250UGxhdGZvcm1EYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5j
bHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBh
bmQgRm9udC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YV9ICisjZGVmaW5lIEZvbnRQbGF0Zm9y
bURhdGFfSAorCisjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisKKyNpZiBQTEFURk9STShDQUlSTykKKyNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgor
I2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05UOwordHlwZWRlZiBzdHJ1Y3Qg
Q0dGb250KiBDR0ZvbnRSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udERl
c2NyaXB0aW9uOworY2xhc3MgU3RyaW5nOworCitjbGFzcyBGb250UGxhdGZvcm1EYXRhIHsKK3B1
YmxpYzoKKyAgICBGb250UGxhdGZvcm1EYXRhKCkKKyNpZiBQTEFURk9STShDQUlSTykKKyAgICAg
ICAgOiBtX2ZvbnRGYWNlKDApCisgICAgICAgICwgbV9zY2FsZWRGb250KDApCisgICAgICAgICwK
KyNlbHNlCisgICAgICAgIDoKKyNlbmRpZgorICAgICAgICAgIG1fc2l6ZSgwKQorICAgICAgICAs
IG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFs
c2UpCisgICAgICAgICwgbV91c2VHREkoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIEZvbnRQ
bGF0Zm9ybURhdGEoSEZPTlQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBi
b29sIHVzZUdESSk7CisgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgb2JsaXF1ZSk7CisKKyNpZiBQTEFURk9STShDRykKKyAgICBGb250UGxhdGZvcm1EYXRh
KEhGT05ULCBDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBi
b29sIHVzZUdESSk7CisjZWxpZiBQTEFURk9STShDQUlSTykKKyAgICBGb250UGxhdGZvcm1EYXRh
KGNhaXJvX2ZvbnRfZmFjZV90KiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUp
OworICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOworCisgICAg
Rm9udFBsYXRmb3JtRGF0YSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyNl
bmRpZgorICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX2ZvbnQoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWUpIHsgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnQuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQorCisgICAgSEZPTlQg
aGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQtPmhmb250KCk7IH0KKyNpZiBQTEFURk9STShD
RykKKyAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4gbV9jZ0ZvbnQuZ2V0KCk7
IH0KKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udEZhY2U7IH0KKyAgICBjYWlyb19zY2FsZWRfZm9udF90
KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRGb250OyB9CisjZW5kaWYKKwor
ICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICB2b2lkIHNldFNp
emUoZmxvYXQgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisgICAgYm9vbCBzeW50aGV0aWNCb2xk
KCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkOyB9CisgICAgYm9vbCBzeW50aGV0aWNP
YmxpcXVlKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNPYmxpcXVlOyB9CisgICAgYm9vbCB1
c2VHREkoKSBjb25zdCB7IHJldHVybiBtX3VzZUdESTsgfQorCisgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9mb250LT5oYXNoKCk7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAor
ICAgIHsgCisgICAgICAgIHJldHVybiBtX2ZvbnQgPT0gb3RoZXIubV9mb250ICYmCisjaWYgUExB
VEZPUk0oQ0cpCisgICAgICAgICAgICAgICBtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udCAmJgor
I2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgICAgICAgICBtX2ZvbnRGYWNlID09IG90aGVy
Lm1fZm9udEZhY2UgJiYKKyAgICAgICAgICAgICAgIG1fc2NhbGVkRm9udCA9PSBvdGhlci5tX3Nj
YWxlZEZvbnQgJiYKKyNlbmRpZgorICAgICAgICAgICAgICAgbV9zaXplID09IG90aGVyLm1fc2l6
ZSAmJgorICAgICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xkID09IG90aGVyLm1fc3ludGhldGlj
Qm9sZCAmJiBtX3N5bnRoZXRpY09ibGlxdWUgPT0gb3RoZXIubV9zeW50aGV0aWNPYmxpcXVlICYm
CisgICAgICAgICAgICAgICBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESTsKKyAgICB9CisKKyNp
Zm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICBjbGFzcyBSZWZDb3VudGVkSEZPTlQgOiBwdWJsaWMgUmVmQ291bnRlZDxS
ZWZDb3VudGVkSEZPTlQ+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFJlZkNvdW50ZWRIRk9OVD4gY3JlYXRlKEhGT05UIGhmb250KSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgUmVmQ291bnRlZEhGT05UKGhmb250KSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVmQ291bnRlZEhGT05UPiBjcmVhdGVEZWxldGVkKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJl
ZkNvdW50ZWRIRk9OVChyZWludGVycHJldF9jYXN0PEhGT05UPigtMSkpKTsgfQorCisgICAgICAg
ICAgICB+UmVmQ291bnRlZEhGT05UKCkgeyBpZiAobV9oZm9udCAhPSByZWludGVycHJldF9jYXN0
PEhGT05UPigtMSkpIERlbGV0ZU9iamVjdChtX2hmb250KTsgfQorCisgICAgICAgIEhGT05UIGhm
b250KCkgY29uc3QgeyByZXR1cm4gbV9oZm9udDsgfQorICAgICAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVI
YXNoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPigmbV9oZm9udCksIHNpemVvZihIRk9O
VCkgLyBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
UmVmQ291bnRlZEhGT05UKEhGT05UIGhmb250KQorICAgICAgICAgICAgOiBtX2hmb250KGhmb250
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBIRk9OVCBtX2hmb250OworICAgIH07
CisKKyAgICB2b2lkIHBsYXRmb3JtRGF0YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERD
IGhkYywgV0NIQVIqIGZhY2VOYW1lKTsKKworICAgIFJlZlB0cjxSZWZDb3VudGVkSEZPTlQ+IG1f
Zm9udDsKKyNpZiBQTEFURk9STShDRykKKyAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBtX2NnRm9u
dDsKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBtX2ZvbnRG
YWNlOworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKKyNlbmRpZgorCisg
ICAgZmxvYXQgbV9zaXplOworICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkOworICAgIGJvb2wgbV9z
eW50aGV0aWNPYmxpcXVlOworICAgIGJvb2wgbV91c2VHREk7Cit9OworCit9CisKKyNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Gb250UGxhdGZvcm1EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Gb250UGxhdGZvcm1EYXRh
LmgJKHJldmlzaW9uIDU2MDcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Gb250
UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE1ICsyNCwxMiBAQAogI2lmbmRl
ZiBGb250UGxhdGZvcm1EYXRhX0gKICNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9ICiAKKyNpbmNs
dWRlICJSZWZDb3VudGVkSEZPTlQuaCIKICNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAotI2lmIFBMQVRGT1JNKENBSVJPKQotI2luY2x1ZGUgPGNh
aXJvLXdpbjMyLmg+Ci0jZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7CiB0
eXBlZGVmIHN0cnVjdCBDR0ZvbnQqIENHRm9udFJlZjsKIApAQCAtNDQsMTQgKzQxLDcgQEAgY2xh
c3MgU3RyaW5nOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CiBwdWJsaWM6CiAgICAgRm9udFBs
YXRmb3JtRGF0YSgpCi0jaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIDogbV9mb250RmFjZSgw
KQotICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQotICAgICAgICAsCi0jZWxzZQotICAgICAgICA6
Ci0jZW5kaWYKLSAgICAgICAgICBtX3NpemUoMCkKKyAgICAgICAgOiBtX3NpemUoMCkKICAgICAg
ICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCiAgICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVl
KGZhbHNlKQogICAgICAgICAsIG1fdXNlR0RJKGZhbHNlKQpAQCAtNjEsMjYgKzUxLDE0IEBAIHB1
YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhKEhGT05ULCBmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQg
c2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwogCi0jaWYgUExBVEZPUk0oQ0cpCiAgICAg
Rm9udFBsYXRmb3JtRGF0YShIRk9OVCwgQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAg
Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCosIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBvYmxpcXVlKTsKLSAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmKTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxh
dGZvcm1EYXRhJik7Ci0jZW5kaWYKICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwogCiAgICAgRm9u
dFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9mb250KFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7
IH0KIAogICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250LT5oZm9udCgpOyB9
Ci0jaWYgUExBVEZPUk0oQ0cpCiAgICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2dGb250LmdldCgpOyB9Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWlyb19mb250
X2ZhY2VfdCogZm9udEZhY2UoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlOyB9Ci0gICAgY2Fp
cm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9u
dDsgfQotI2VuZGlmCiAKICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CiAgICAgdm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQpAQCAtOTYs
MTIgKzc0LDcgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBvdGhlcikgY29uc3QKICAgICB7IAogICAgICAgICByZXR1cm4gbV9mb250ID09IG90
aGVyLm1fZm9udCAmJgotI2lmIFBMQVRGT1JNKENHKQogICAgICAgICAgICAgICAgbV9jZ0ZvbnQg
PT0gb3RoZXIubV9jZ0ZvbnQgJiYKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAg
ICAgbV9mb250RmFjZSA9PSBvdGhlci5tX2ZvbnRGYWNlICYmCi0gICAgICAgICAgICAgICBtX3Nj
YWxlZEZvbnQgPT0gb3RoZXIubV9zY2FsZWRGb250ICYmCi0jZW5kaWYKICAgICAgICAgICAgICAg
IG1fc2l6ZSA9PSBvdGhlci5tX3NpemUgJiYKICAgICAgICAgICAgICAgIG1fc3ludGhldGljQm9s
ZCA9PSBvdGhlci5tX3N5bnRoZXRpY0JvbGQgJiYgbV9zeW50aGV0aWNPYmxpcXVlID09IG90aGVy
Lm1fc3ludGhldGljT2JsaXF1ZSAmJgogICAgICAgICAgICAgICAgbV91c2VHREkgPT0gb3RoZXIu
bV91c2VHREk7CkBAIC0xMTIsMzcgKzg1LDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRl
OgotICAgIGNsYXNzIFJlZkNvdW50ZWRIRk9OVCA6IHB1YmxpYyBSZWZDb3VudGVkPFJlZkNvdW50
ZWRIRk9OVD4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVmQ291
bnRlZEhGT05UPiBjcmVhdGUoSEZPTlQgaGZvbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWZD
b3VudGVkSEZPTlQoaGZvbnQpKTsgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWZDb3Vu
dGVkSEZPTlQ+IGNyZWF0ZURlbGV0ZWQoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUmVmQ291bnRl
ZEhGT05UKHJlaW50ZXJwcmV0X2Nhc3Q8SEZPTlQ+KC0xKSkpOyB9Ci0KLSAgICAgICAgICAgIH5S
ZWZDb3VudGVkSEZPTlQoKSB7IGlmIChtX2hmb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8SEZPTlQ+
KC0xKSkgRGVsZXRlT2JqZWN0KG1faGZvbnQpOyB9Ci0KLSAgICAgICAgSEZPTlQgaGZvbnQoKSBj
b25zdCB7IHJldHVybiBtX2hmb250OyB9Ci0gICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KCZtX2hmb250KSwgc2l6ZW9mKEhGT05UKSAvIHNp
emVvZihVQ2hhcikpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWZDb3Vu
dGVkSEZPTlQoSEZPTlQgaGZvbnQpCi0gICAgICAgICAgICA6IG1faGZvbnQoaGZvbnQpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIEhGT05UIG1faGZvbnQ7Ci0gICAgfTsKLQogICAg
IHZvaWQgcGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBIREMgaGRjLCBX
Q0hBUiogZmFjZU5hbWUpOwogCiAgICAgUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4gbV9mb250Owot
I2lmIFBMQVRGT1JNKENHKQogICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IG1fY2dGb250OwotI2Vs
aWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgY2Fpcm9fZm9udF9mYWNlX3QqIG1fZm9udEZhY2U7Ci0g
ICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250OwotI2VuZGlmCiAKICAgICBmbG9h
dCBtX3NpemU7CiAgICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQ7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiA1NjA3
MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBp
bmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgotICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3Bw
IGFuZCBGb250LmNwcC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqCi0gKi8KLQotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX0gKLSNkZWZpbmUgRm9udFBsYXRm
b3JtRGF0YV9ICi0KLSNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLQotI2lmIFBMQVRGT1JNKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+
Ci0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7Ci10eXBlZGVmIHN0cnVj
dCBDR0ZvbnQqIENHRm9udFJlZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250
RGVzY3JpcHRpb247Ci1jbGFzcyBTdHJpbmc7Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgewot
cHVibGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGEoKQotI2lmIFBMQVRGT1JNKENBSVJPKQotICAg
ICAgICA6IG1fZm9udEZhY2UoMCkKLSAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKLSAgICAgICAg
LAotI2Vsc2UKLSAgICAgICAgOgotI2VuZGlmCi0gICAgICAgICAgbV9zaXplKDApCi0gICAgICAg
ICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQotICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShm
YWxzZSkKLSAgICAgICAgLCBtX3VzZUdESShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRm9u
dFBsYXRmb3JtRGF0YShIRk9OVCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUs
IGJvb2wgdXNlR0RJKTsKLSAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBvYmxpcXVlKTsKLQotI2lmIFBMQVRGT1JNKENHKQotICAgIEZvbnRQbGF0Zm9ybURh
dGEoSEZPTlQsIENHRm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUs
IGJvb2wgdXNlR0RJKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgIEZvbnRQbGF0Zm9ybURh
dGEoY2Fpcm9fZm9udF9mYWNlX3QqLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1
ZSk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0KLSAg
ICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwot
I2VuZGlmCi0gICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fZm9udChXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSkgeyB9Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9Ci0KLSAgICBIRk9O
VCBoZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC0+aGZvbnQoKTsgfQotI2lmIFBMQVRGT1JN
KENHKQotICAgIENHRm9udFJlZiBjZ0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NnRm9udC5nZXQo
KTsgfQotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRG
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RmFjZTsgfQotICAgIGNhaXJvX3NjYWxlZF9mb250
X3QqIHNjYWxlZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZEZvbnQ7IH0KLSNlbmRpZgot
Ci0gICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZvaWQgc2V0
U2l6ZShmbG9hdCBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KLSAgICBib29sIHN5bnRoZXRpY0Jv
bGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0KLSAgICBib29sIHN5bnRoZXRp
Y09ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KLSAgICBib29s
IHVzZUdESSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlR0RJOyB9Ci0KLSAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ZvbnQtPmhhc2goKTsKLSAgICB9Ci0K
LSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0
Ci0gICAgeyAKLSAgICAgICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQgJiYKLSNpZiBQ
TEFURk9STShDRykKLSAgICAgICAgICAgICAgIG1fY2dGb250ID09IG90aGVyLm1fY2dGb250ICYm
Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgICAgICAgIG1fZm9udEZhY2UgPT0gb3Ro
ZXIubV9mb250RmFjZSAmJgotICAgICAgICAgICAgICAgbV9zY2FsZWRGb250ID09IG90aGVyLm1f
c2NhbGVkRm9udCAmJgotI2VuZGlmCi0gICAgICAgICAgICAgICBtX3NpemUgPT0gb3RoZXIubV9z
aXplICYmCi0gICAgICAgICAgICAgICBtX3N5bnRoZXRpY0JvbGQgPT0gb3RoZXIubV9zeW50aGV0
aWNCb2xkICYmIG1fc3ludGhldGljT2JsaXF1ZSA9PSBvdGhlci5tX3N5bnRoZXRpY09ibGlxdWUg
JiYKLSAgICAgICAgICAgICAgIG1fdXNlR0RJID09IG90aGVyLm1fdXNlR0RJOwotICAgIH0KLQot
I2lmbmRlZiBOREVCVUcKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSNlbmRpZgot
Ci1wcml2YXRlOgotICAgIGNsYXNzIFJlZkNvdW50ZWRIRk9OVCA6IHB1YmxpYyBSZWZDb3VudGVk
PFJlZkNvdW50ZWRIRk9OVD4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UmVmQ291bnRlZEhGT05UPiBjcmVhdGUoSEZPTlQgaGZvbnQpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBSZWZDb3VudGVkSEZPTlQoaGZvbnQpKTsgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxSZWZDb3VudGVkSEZPTlQ+IGNyZWF0ZURlbGV0ZWQoKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
UmVmQ291bnRlZEhGT05UKHJlaW50ZXJwcmV0X2Nhc3Q8SEZPTlQ+KC0xKSkpOyB9Ci0KLSAgICAg
ICAgICAgIH5SZWZDb3VudGVkSEZPTlQoKSB7IGlmIChtX2hmb250ICE9IHJlaW50ZXJwcmV0X2Nh
c3Q8SEZPTlQ+KC0xKSkgRGVsZXRlT2JqZWN0KG1faGZvbnQpOyB9Ci0KLSAgICAgICAgSEZPTlQg
aGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2hmb250OyB9Ci0gICAgICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0
ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KCZtX2hmb250KSwgc2l6ZW9mKEhG
T05UKSAvIHNpemVvZihVQ2hhcikpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBSZWZDb3VudGVkSEZPTlQoSEZPTlQgaGZvbnQpCi0gICAgICAgICAgICA6IG1faGZvbnQoaGZv
bnQpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIEhGT05UIG1faGZvbnQ7Ci0gICAg
fTsKLQotICAgIHZvaWQgcGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBI
REMgaGRjLCBXQ0hBUiogZmFjZU5hbWUpOwotCi0gICAgUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4g
bV9mb250OwotI2lmIFBMQVRGT1JNKENHKQotICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IG1fY2dG
b250OwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgY2Fpcm9fZm9udF9mYWNlX3QqIG1fZm9u
dEZhY2U7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250OwotI2VuZGlmCi0K
LSAgICBmbG9hdCBtX3NpemU7Ci0gICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQ7Ci0gICAgYm9vbCBt
X3N5bnRoZXRpY09ibGlxdWU7Ci0gICAgYm9vbCBtX3VzZUdESTsKLX07Ci0KLX0KLQotI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fp
cm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDU2MDcyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlcgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IEJyZW50IEZ1bGdoYW0KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAx
MCBCcmVudCBGdWxnaGFtCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEzMCw0ICsxMzAsMTQgQEAg
Rm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcgogICAgIHJldHVybiAqdGhp
czsKIH0KIAorYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIG90aGVyKSBjb25zdAoreyAKKyAgICByZXR1cm4gbV9mb250ID09IG90aGVyLm1f
Zm9udCAmJgorICAgICAgICAgICBtX2ZvbnRGYWNlID09IG90aGVyLm1fZm9udEZhY2UgJiYKKyAg
ICAgICAgICAgbV9zY2FsZWRGb250ID09IG90aGVyLm1fc2NhbGVkRm9udCAmJgorICAgICAgICAg
ICBtX3NpemUgPT0gb3RoZXIubV9zaXplICYmCisgICAgICAgICAgIG1fc3ludGhldGljQm9sZCA9
PSBvdGhlci5tX3N5bnRoZXRpY0JvbGQgJiYgbV9zeW50aGV0aWNPYmxpcXVlID09IG90aGVyLm1f
c3ludGhldGljT2JsaXF1ZSAmJgorICAgICAgICAgICBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdE
STsKK30KKwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUmVmQ291bnRl
ZEhGT05ULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUmVm
Q291bnRlZEhGT05ULmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9SZWZDb3VudGVkSEZPTlQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9u
LiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgorICogRm9u
dENhaXJvLmNwcCwgRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KKyAqCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5k
ZWYgUmVmQ291bnRlZEhGT05UX0gKKyNkZWZpbmUgUmVmQ291bnRlZEhGT05UX0gKKworI2luY2x1
ZGUgIlN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlZkNvdW50ZWRIRk9OVCA6IHB1YmxpYyBSZWZDb3VudGVk
PFJlZkNvdW50ZWRIRk9OVD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZkNv
dW50ZWRIRk9OVD4gY3JlYXRlKEhGT05UIGhmb250KSB7IHJldHVybiBhZG9wdFJlZihuZXcgUmVm
Q291bnRlZEhGT05UKGhmb250KSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWZDb3VudGVk
SEZPTlQ+IGNyZWF0ZURlbGV0ZWQoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUmVmQ291bnRlZEhG
T05UKHJlaW50ZXJwcmV0X2Nhc3Q8SEZPTlQ+KC0xKSkpOyB9CisKKyAgICB+UmVmQ291bnRlZEhG
T05UKCkgeyBpZiAobV9oZm9udCAhPSByZWludGVycHJldF9jYXN0PEhGT05UPigtMSkpIERlbGV0
ZU9iamVjdChtX2hmb250KTsgfQorCisgICAgSEZPTlQgaGZvbnQoKSBjb25zdCB7IHJldHVybiBt
X2hmb250OyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+
KCZtX2hmb250KSwgc2l6ZW9mKEhGT05UKSAvIHNpemVvZihVQ2hhcikpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBSZWZDb3VudGVkSEZPTlQoSEZPTlQgaGZvbnQpCisgICAgICAgIDogbV9oZm9u
dChoZm9udCkKKyAgICB7CisgICAgfQorCisgICAgSEZPTlQgbV9oZm9udDsKK307CisKK30KKwor
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51044</attachid>
            <date>2010-03-18 10:36:22 -0700</date>
            <delta_ts>2010-03-18 10:38:52 -0700</delta_ts>
            <desc>Same as last revision, but with check-webkit-style fixes.</desc>
            <filename>cairo_font.patch</filename>
            <type>text/plain</type>
            <size>28351</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjEzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMDMtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEhlbHAgcmVkdWNlIGJ1aWxkIHByb2JsZW1zIGR1ZSB0byBmb250IGRlY2xhcmF0aW9ucy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MTkwCisKKyAg
ICAgICAgRnVuY3Rpb25zIHVuY2hhbmdlZCwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZCBuZXcgZmlsZSwgYW5kIHNob3cKKyAgICAg
ICAgICBtb3ZlbWVudCBvZiBGb250UGxhdGZvcm1EYXRhLmggdG8gY2cvIGRpcmVjdG9yeS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhLmg6IE1lcmdl
IGluCisgICAgICAgICAgV2luQ2Fpcm8tc3BlY2lmaWMgZGVjbGFyYXRpb25zLiAgQ29ycmVjdCBj
b25zdHJ1Y3RvcgorICAgICAgICAgIGRlY2xhcmF0aW9uIHRvIHVzZSB0eXBlIGZsb2F0IGZvciBm
b250IHNpemUuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhmb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnVzZUdESSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpmb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQ
bGF0Zm9ybURhdGFDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKTogQ29ycmVjdAorICAgICAgICAgIGNvbnN0cnVjdG9yIHRvIGFj
Y2VwdCB0eXBlIGZsb2F0IGZvciBmb250IHNpemUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvRm9udFBsYXRmb3JtRGF0YS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmguCisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6Omhmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmNn
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fp
cm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9
PSk6IE1vdmUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICBoZXJlIChwcmV2aW91c2x5IGluIGhl
YWRlcikgdG8gbWF0Y2ggb3RoZXIgY2Fpcm8tYmFzZWQgcG9ydHMuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1JlZkNvdW50ZWRIRk9OVC5oOiBBZGRlZC4gIFRoaXMKKyAgICAgICAg
ICB3YXMgZXh0cmFjdGVkIGZyb20gd2luL0ZvbnRQbGF0Zm9ybURhdGEuaCwgYW5kIGlzIG5vdyBz
aGFyZWQKKyAgICAgICAgICBieSB0aGUgY2cvRm9udFBsYXRmb3JtRGF0YS5oIGFuZCBjYWlyby9G
b250UGxhdGZvcm1EYXRhLmgKKyAgICAgICAgKFdlYkNvcmU6OlJlZkNvdW50ZWRIRk9OVDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZkNvdW50ZWRIRk9OVDo6Y3JlYXRlRGVsZXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWZDb3VudGVkSEZPTlQ6On5SZWZDb3VudGVkSEZPTlQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVmQ291bnRlZEhGT05UOjpoZm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWZDb3VudGVkSEZPTlQ6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6UmVmQ291bnRl
ZEhGT05UOjpSZWZDb3VudGVkSEZPTlQpOgorCiAyMDEwLTAzLTE3ICBEbWl0cnkgVGl0b3YgIDxk
aW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtv
di4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNTYw
NzIpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDExICsxLDEyIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5k
b3dzLTEyNTEiPz4NCiA8VmlzdWFsU3R1ZGlvUHJvamVjdA0KIAlQcm9qZWN0VHlwZT0iVmlzdWFs
IEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCisJVmVyc2lvbj0iOS4wMCINCiAJTmFtZT0iV2ViQ29y
ZSINCiAJUHJvamVjdEdVSUQ9InsxQzE2MzM3Qi1BQ0YzLTREMDMtQUE5MC04NTFDNUI1RUFEQTZ9
Ig0KIAlSb290TmFtZXNwYWNlPSJXZWJDb3JlIg0KIAlLZXl3b3JkPSJXaW4zMlByb2oiDQorCVRh
cmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCiAJPg0KIAk8UGxhdGZvcm1zPg0KIAkJPFBs
YXRmb3JtDQpAQCAtMjI5OTUsMTAgKzIyOTk2LDYgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3Ncd2luXEZvbnRQbGF0Zm9ybURhdGEuaCINCi0JCQkJCQk+DQotCQkJ
CQk8L0ZpbGU+DQotCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3Ncd2luXEZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAiDQogCQkJCQkJPg0KIAkJ
CQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KQEAgLTIzMzU5LDYgKzIzMzU2LDEwIEBACiAJCQkJCQk+
DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3Ncd2luXFJlZkNvdW50ZWRIRk9OVC5oIg0KKwkJCQkJCT4NCisJCQkJCTwv
RmlsZT4NCisJCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1x3aW5cU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAiDQogCQkJCQkJPg0KIAkJCQkJCTxG
aWxlQ29uZmlndXJhdGlvbg0KQEAgLTIzNTM5LDYgKzIzNTQwLDI2IEBACiAJCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEZvbnRQbGF0Zm9ybURhdGEuaCINCisJCQkJ
CQk+DQorCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJCU5hbWU9IkRlYnVnX0NhaXJv
fFdpbjMyIg0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCQkJPg0KKwkJ
CQkJCQk8VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJCQkJCS8+
DQorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CisJCQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb3xXaW4zMiINCisJCQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiDQorCQkJCQkJCT4NCisJCQkJCQkJPFRvb2wNCisJCQkJCQkJCU5hbWU9IlZD
Q3VzdG9tQnVpbGRUb29sIg0KKwkJCQkJCQkvPg0KKwkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcY2dcR3JhZGllbnRDRy5jcHAiDQogCQkJCQkJPg0KIAkJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbg0KQEAgLTIzOTM1LDYgKzIzOTU2LDQyIEBACiAJCQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhaXJvXEZvbnRQbGF0Zm9ybURhdGEuaCINCisJCQkJ
CQk+DQorCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMy
Ig0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCQkJPg0KKwkJCQkJCQk8
VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJCQkJCS8+DQorCQkJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJ
CQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
DQorCQkJCQkJCT4NCisJCQkJCQkJPFRvb2wNCisJCQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRU
b29sIg0KKwkJCQkJCQkvPg0KKwkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQkJPEZp
bGVDb25maWd1cmF0aW9uDQorCQkJCQkJCU5hbWU9IkRlYnVnX0ludGVybmFsfFdpbjMyIg0KKwkJ
CQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCQkJPg0KKwkJCQkJCQk8VG9vbA0K
KwkJCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJCQkJCS8+DQorCQkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQkJTmFt
ZT0iRGVidWdfQWxsfFdpbjMyIg0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJ
CQkJCQkJPg0KKwkJCQkJCQk8VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wi
DQorCQkJCQkJCS8+DQorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTwvRmlsZT4N
CisJCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xj
YWlyb1xHcmFkaWVudENhaXJvLmNwcCINCiAJCQkJCQk+DQogCQkJCQkJPEZpbGVDb25maWd1cmF0
aW9uDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250
UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDU2MTI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3
IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRh
dGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KICAq
IEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCiAgKgotICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwg
bWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlcgogICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2Vu
dGVyIFVTQSwgSW5jLgpAQCAtMjgsMTggKzI4LDI1IEBACiAjaWZuZGVmIEZvbnRQbGF0Zm9ybURh
dGFfaAogI2RlZmluZSBGb250UGxhdGZvcm1EYXRhX2gKIAotI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKICNpbmNsdWRlIDxjYWlyby5oPgogI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQogI2luY2x1
ZGUgPGNhaXJvLWZ0Lmg+CiAjaW5jbHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+CiAjZWxp
ZiBkZWZpbmVkKFVTRV9QQU5HTykKICNpbmNsdWRlIDxwYW5nby9wYW5nb2NhaXJvLmg+CisjZWxp
ZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KKyNpbmNsdWRlICJSZWZD
b3VudGVkSEZPTlQuaCIKKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCiAjZWxzZQogI2Vycm9yICJN
dXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikK
K3R5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05UOworI2VuZGlmCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFN0cmluZzsKQEAgLTUzLDkgKzYwLDE2IEBAIHB1YmxpYzoKICNlbGlmIGRl
ZmluZWQoVVNFX1BBTkdPKQogICAgICAgICA6IG1fY29udGV4dCgwKQogICAgICAgICAsIG1fZm9u
dChoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkpCisjZWxpZiBQTEFURk9STShXSU4pCisgICAg
ICAgIDogbV9mb250RmFjZSgwKQorICAgICAgICAsIG1fdXNlR0RJKGZhbHNlKQorICAgICAgICAs
IG1fZm9udChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKICNlbHNlCiAjZXJyb3IgIk11c3Qg
ZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKICNlbmRpZgorICAgICAgICAsIG1fc2l6ZSgwKQorICAg
ICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAgICAgLCBtX3N5bnRoZXRpY09ibGlx
dWUoZmFsc2UpCiAgICAgICAgICwgbV9zY2FsZWRGb250KDApCiAgICAgICAgIHsgfQogCkBAIC02
NiwyNCArODAsNDEgQEAgcHVibGljOgogI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCiAgICAgICAg
IDogbV9jb250ZXh0KDApCiAgICAgICAgICwgbV9mb250KDApCisjZWxpZiBQTEFURk9STShXSU4p
CisgICAgICAgIDogbV9mb250RmFjZSgwKQorICAgICAgICAsIG1fdXNlR0RJKGZhbHNlKQogI2Vs
c2UKICNlcnJvciAiTXVzdCBkZWZpbmVkIGEgZm9udCBiYWNrZW5kIgogI2VuZGlmCisgICAgICAg
ICwgbV9zaXplKDApCisgICAgICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQorICAgICAgICAs
IG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKICAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKICAg
ICAgICAgeyB9CiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgRm9udFBsYXRmb3JtRGF0YShIRk9O
VCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKTsKKyNl
bHNlCiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSk7CisjZW5kaWYKIAorICAgIEZvbnRQbGF0Zm9ybURhdGEoY2Fp
cm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRh
bGljKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBp
dGFsaWMpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNl
LCBpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CiAgICAgRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwog
CisjaWYgIVBMQVRGT1JNKFdJTikKICAgICBzdGF0aWMgYm9vbCBpbml0KCk7CisjZWxzZQorICAg
IEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250LT5oZm9udCgpOyB9CisgICAgYm9v
bCB1c2VHREkoKSBjb25zdCB7IHJldHVybiBtX3VzZUdESTsgfQorICAgIGNhaXJvX2ZvbnRfZmFj
ZV90KiBmb250RmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udEZhY2U7IH0KKyNlbmRpZgogCiAg
ICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CisgICAgdm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsg
fQogICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9s
ZDsgfQogICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhl
dGljT2JsaXF1ZTsgfQogCkBAIC05MSwyNCArMTIyLDMyIEBAIHB1YmxpYzoKIAogICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdAogICAgIHsKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAgIHJldHVy
biBtX2ZvbnQtPmhhc2goKTsKKyNlbHNlCiAjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCiAgICAg
ICAgIGlmIChtX3BhdHRlcm4pCiAgICAgICAgICAgICByZXR1cm4gRmNQYXR0ZXJuSGFzaChtX3Bh
dHRlcm4pOwogI2VuZGlmCiAgICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0gPSB7IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3NjYWxlZEZvbnQpIH07CiAgICAgICAgIHJldHVybiBT
dHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVz
KSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKKyNlbmRpZgogICAgIH0KIAog
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7CiAgICAg
Rm9udFBsYXRmb3JtRGF0YSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeworICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKICNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQ
RSkKICAgICAgICAgcmV0dXJuIG1fcGF0dGVybiA9PSBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVl
KCk7CiAjZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKICAgICAgICAgcmV0dXJuIG1fZm9udCA9PSBo
YXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCk7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgICAg
IHJldHVybiBtX2ZvbnQuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKICNlbmRpZgogICAgIH07
CiAKKwogI2lmbmRlZiBOREVCVUcKICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKICNl
bmRpZgpAQCAtMTIyLDYgKzE2MSwxMyBAQCBwdWJsaWM6CiAKICAgICBQYW5nb0NvbnRleHQqIG1f
Y29udGV4dDsKICAgICBQYW5nb0ZvbnQqIG1fZm9udDsKKyNlbGlmIFBMQVRGT1JNKFdJTikKK3By
aXZhdGU6CisgICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUs
IEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSk7CisKKyAgICBSZWZQdHI8UmVmQ291bnRlZEhGT05U
PiBtX2ZvbnQ7CisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIG1fZm9udEZhY2U7CisgICAgYm9vbCBt
X3VzZUdESTsKICNlbHNlCiAjZXJyb3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKICNl
bmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1E
YXRhQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udFBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gNTYwNzIpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGZsb2F0CiB7CiB9CiAKLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
Y2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlLCBpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0
YWxpYykKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNl
X3QqIGZvbnRGYWNlLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQogICAgIDog
bV9wYXR0ZXJuKDApCiAgICAgLCBtX2ZhbGxiYWNrcygwKQogICAgICwgbV9zaXplKHNpemUpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ZvbnRQbGF0Zm9ybURhdGEu
aAkocmV2aXNpb24gNTYwNzIpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGEuaDo1NjA3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Rm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24u
ICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250
TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFf
SAorI2RlZmluZSBGb250UGxhdGZvcm1EYXRhX0gKKworI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYgUExBVEZPUk0oQ0FJUk8pCisjaW5j
bHVkZSA8Y2Fpcm8td2luMzIuaD4KKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBIRk9OVF9fKiBI
Rk9OVDsKK3R5cGVkZWYgc3RydWN0IENHRm9udCogQ0dGb250UmVmOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZvbnREZXNjcmlwdGlvbjsKK2NsYXNzIFN0cmluZzsKKworY2xhc3Mg
Rm9udFBsYXRmb3JtRGF0YSB7CitwdWJsaWM6CisgICAgRm9udFBsYXRmb3JtRGF0YSgpCisjaWYg
UExBVEZPUk0oQ0FJUk8pCisgICAgICAgIDogbV9mb250RmFjZSgwKQorICAgICAgICAsIG1fc2Nh
bGVkRm9udCgwKQorICAgICAgICAsCisjZWxzZQorICAgICAgICA6CisjZW5kaWYKKyAgICAgICAg
ICBtX3NpemUoMCkKKyAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgICAgICwg
bV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQorICAgICAgICAsIG1fdXNlR0RJKGZhbHNlKQorICAg
IHsKKyAgICB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhKEhGT05ULCBmbG9hdCBzaXplLCBib29s
IGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOworICAgIEZvbnRQbGF0Zm9ybURhdGEo
ZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOworCisjaWYgUExBVEZPUk0oQ0cp
CisgICAgRm9udFBsYXRmb3JtRGF0YShIRk9OVCwgQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29s
IGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOworI2VsaWYgUExBVEZPUk0oQ0FJUk8p
CisgICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCosIGZsb2F0IHNpemUsIGJv
b2wgYm9sZCwgYm9vbCBvYmxpcXVlKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBG
b250UGxhdGZvcm1EYXRhJik7CisjZW5kaWYKKyAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisg
ICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9m
b250KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KKyAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCk7IH0KKworICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250LT5oZm9u
dCgpOyB9CisjaWYgUExBVEZPUk0oQ0cpCisgICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2dGb250LmdldCgpOyB9CisjZWxpZiBQTEFURk9STShDQUlSTykKKyAgICBjYWly
b19mb250X2ZhY2VfdCogZm9udEZhY2UoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlOyB9Cisg
ICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nh
bGVkRm9udDsgfQorI2VuZGlmCisKKyAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CisgICAgdm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQor
ICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsg
fQorICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGlj
T2JsaXF1ZTsgfQorICAgIGJvb2wgdXNlR0RJKCkgY29uc3QgeyByZXR1cm4gbV91c2VHREk7IH0K
KworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZm9u
dC0+aGFzaCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBvdGhlcikgY29uc3QKKyAgICB7IAorICAgICAgICByZXR1cm4gbV9mb250ID09IG90
aGVyLm1fZm9udCAmJgorI2lmIFBMQVRGT1JNKENHKQorICAgICAgICAgICAgICAgbV9jZ0ZvbnQg
PT0gb3RoZXIubV9jZ0ZvbnQgJiYKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorICAgICAgICAgICAg
ICAgbV9mb250RmFjZSA9PSBvdGhlci5tX2ZvbnRGYWNlICYmCisgICAgICAgICAgICAgICBtX3Nj
YWxlZEZvbnQgPT0gb3RoZXIubV9zY2FsZWRGb250ICYmCisjZW5kaWYKKyAgICAgICAgICAgICAg
IG1fc2l6ZSA9PSBvdGhlci5tX3NpemUgJiYKKyAgICAgICAgICAgICAgIG1fc3ludGhldGljQm9s
ZCA9PSBvdGhlci5tX3N5bnRoZXRpY0JvbGQgJiYgbV9zeW50aGV0aWNPYmxpcXVlID09IG90aGVy
Lm1fc3ludGhldGljT2JsaXF1ZSAmJgorICAgICAgICAgICAgICAgbV91c2VHREkgPT0gb3RoZXIu
bV91c2VHREk7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyBkZXNjcmlwdGlv
bigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgY2xhc3MgUmVmQ291bnRlZEhGT05U
IDogcHVibGljIFJlZkNvdW50ZWQ8UmVmQ291bnRlZEhGT05UPiB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWZDb3VudGVkSEZPTlQ+IGNyZWF0ZShIRk9OVCBoZm9u
dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRIRk9OVChoZm9udCkpOyB9CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4gY3JlYXRlRGVsZXRlZCgpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZWZDb3VudGVkSEZPTlQocmVpbnRlcnByZXRfY2FzdDxIRk9O
VD4oLTEpKSk7IH0KKworICAgICAgICAgICAgflJlZkNvdW50ZWRIRk9OVCgpIHsgaWYgKG1faGZv
bnQgIT0gcmVpbnRlcnByZXRfY2FzdDxIRk9OVD4oLTEpKSBEZWxldGVPYmplY3QobV9oZm9udCk7
IH0KKworICAgICAgICBIRk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faGZvbnQ7IH0KKyAg
ICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4o
Jm1faGZvbnQpLCBzaXplb2YoSEZPTlQpIC8gc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIFJlZkNvdW50ZWRIRk9OVChIRk9OVCBoZm9udCkKKyAgICAg
ICAgICAgIDogbV9oZm9udChoZm9udCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
SEZPTlQgbV9oZm9udDsKKyAgICB9OworCisgICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KEhGT05U
IGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSk7CisKKyAgICBSZWZQ
dHI8UmVmQ291bnRlZEhGT05UPiBtX2ZvbnQ7CisjaWYgUExBVEZPUk0oQ0cpCisgICAgUmV0YWlu
UHRyPENHRm9udFJlZj4gbV9jZ0ZvbnQ7CisjZWxpZiBQTEFURk9STShDQUlSTykKKyAgICBjYWly
b19mb250X2ZhY2VfdCogbV9mb250RmFjZTsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3Nj
YWxlZEZvbnQ7CisjZW5kaWYKKworICAgIGZsb2F0IG1fc2l6ZTsKKyAgICBib29sIG1fc3ludGhl
dGljQm9sZDsKKyAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsKKyAgICBib29sIG1fdXNlR0RJ
OworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Rm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiA1NjA3MikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwxNyArMjEsMTQgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX0gKLSNk
ZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9ICisjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFfaAorI2Rl
ZmluZSBGb250UGxhdGZvcm1EYXRhX2gKIAorI2luY2x1ZGUgIlJlZkNvdW50ZWRIRk9OVC5oIgog
I2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0j
aWYgUExBVEZPUk0oQ0FJUk8pCi0jaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KLSNlbmRpZgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7
CiB0eXBlZGVmIHN0cnVjdCBDR0ZvbnQqIENHRm9udFJlZjsKQEAgLTQ0LDE0ICs0MSw3IEBAIGNs
YXNzIFN0cmluZzsKIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgewogcHVibGljOgogICAgIEZvbnRQ
bGF0Zm9ybURhdGEoKQotI2lmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICA6IG1fZm9udEZhY2Uo
MCkKLSAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKLSAgICAgICAgLAotI2Vsc2UKLSAgICAgICAg
OgotI2VuZGlmCi0gICAgICAgICAgbV9zaXplKDApCisgICAgICAgIDogbV9zaXplKDApCiAgICAg
ICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQogICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1
ZShmYWxzZSkKICAgICAgICAgLCBtX3VzZUdESShmYWxzZSkKQEAgLTYxLDI2ICs1MSwxNCBAQCBw
dWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0YShIRk9OVCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xk
LCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0
IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKTsKIAotI2lmIFBMQVRGT1JNKENHKQogICAg
IEZvbnRQbGF0Zm9ybURhdGEoSEZPTlQsIENHRm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xk
LCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAg
IEZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqLCBmbG9hdCBzaXplLCBib29sIGJv
bGQsIGJvb2wgb2JsaXF1ZSk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYpOwotI2VuZGlmCiAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKIAogICAgIEZv
bnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fZm9udChX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
OyB9CiAKICAgICBIRk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC0+aGZvbnQoKTsg
fQotI2lmIFBMQVRGT1JNKENHKQogICAgIENHRm9udFJlZiBjZ0ZvbnQoKSBjb25zdCB7IHJldHVy
biBtX2NnRm9udC5nZXQoKTsgfQotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgY2Fpcm9fZm9u
dF9mYWNlX3QqIGZvbnRGYWNlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RmFjZTsgfQotICAgIGNh
aXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZEZv
bnQ7IH0KLSNlbmRpZgogCiAgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQogICAgIHZvaWQgc2V0U2l6ZShmbG9hdCBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KQEAgLTk1
LDE2ICs3MywxMiBAQCBwdWJsaWM6CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiAgICAgeyAKLSAgICAgICAgcmV0dXJuIG1fZm9udCA9
PSBvdGhlci5tX2ZvbnQgJiYKLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgICAgIG1fY2dG
b250ID09IG90aGVyLm1fY2dGb250ICYmCi0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAg
ICAgICAgIG1fZm9udEZhY2UgPT0gb3RoZXIubV9mb250RmFjZSAmJgotICAgICAgICAgICAgICAg
bV9zY2FsZWRGb250ID09IG90aGVyLm1fc2NhbGVkRm9udCAmJgotI2VuZGlmCi0gICAgICAgICAg
ICAgICBtX3NpemUgPT0gb3RoZXIubV9zaXplICYmCi0gICAgICAgICAgICAgICBtX3N5bnRoZXRp
Y0JvbGQgPT0gb3RoZXIubV9zeW50aGV0aWNCb2xkICYmIG1fc3ludGhldGljT2JsaXF1ZSA9PSBv
dGhlci5tX3N5bnRoZXRpY09ibGlxdWUgJiYKLSAgICAgICAgICAgICAgIG1fdXNlR0RJID09IG90
aGVyLm1fdXNlR0RJOworICAgICAgICByZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udAorICAg
ICAgICAgICAgJiYgbV9jZ0ZvbnQgPT0gb3RoZXIubV9jZ0ZvbnQKKyAgICAgICAgICAgICYmIG1f
c2l6ZSA9PSBvdGhlci5tX3NpemUKKyAgICAgICAgICAgICYmIG1fc3ludGhldGljQm9sZCA9PSBv
dGhlci5tX3N5bnRoZXRpY0JvbGQKKyAgICAgICAgICAgICYmIG1fc3ludGhldGljT2JsaXF1ZSA9
PSBvdGhlci5tX3N5bnRoZXRpY09ibGlxdWUKKyAgICAgICAgICAgICYmIG1fdXNlR0RJID09IG90
aGVyLm1fdXNlR0RJOwogICAgIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTExMiwzNyArODYsMTAg
QEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgY2xhc3MgUmVmQ291bnRlZEhGT05U
IDogcHVibGljIFJlZkNvdW50ZWQ8UmVmQ291bnRlZEhGT05UPiB7Ci0gICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWZDb3VudGVkSEZPTlQ+IGNyZWF0ZShIRk9OVCBoZm9u
dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRIRk9OVChoZm9udCkpOyB9Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4gY3JlYXRlRGVsZXRlZCgpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZWZDb3VudGVkSEZPTlQocmVpbnRlcnByZXRfY2FzdDxIRk9O
VD4oLTEpKSk7IH0KLQotICAgICAgICAgICAgflJlZkNvdW50ZWRIRk9OVCgpIHsgaWYgKG1faGZv
bnQgIT0gcmVpbnRlcnByZXRfY2FzdDxIRk9OVD4oLTEpKSBEZWxldGVPYmplY3QobV9oZm9udCk7
IH0KLQotICAgICAgICBIRk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faGZvbnQ7IH0KLSAg
ICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4o
Jm1faGZvbnQpLCBzaXplb2YoSEZPTlQpIC8gc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgIH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZkNvdW50ZWRIRk9OVChIRk9OVCBoZm9udCkKLSAgICAg
ICAgICAgIDogbV9oZm9udChoZm9udCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
SEZPTlQgbV9oZm9udDsKLSAgICB9OwotCiAgICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KEhGT05U
IGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSk7CiAKICAgICBSZWZQ
dHI8UmVmQ291bnRlZEhGT05UPiBtX2ZvbnQ7Ci0jaWYgUExBVEZPUk0oQ0cpCiAgICAgUmV0YWlu
UHRyPENHRm9udFJlZj4gbV9jZ0ZvbnQ7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWly
b19mb250X2ZhY2VfdCogbV9mb250RmFjZTsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3Nj
YWxlZEZvbnQ7Ci0jZW5kaWYKIAogICAgIGZsb2F0IG1fc2l6ZTsKICAgICBib29sIG1fc3ludGhl
dGljQm9sZDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDU2MDcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NSArMCww
IEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVt
ZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFu
Ci0gKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3BwLgotICoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIEZvbnRQbGF0
Zm9ybURhdGFfSAotI2RlZmluZSBGb250UGxhdGZvcm1EYXRhX0gKLQotI2luY2x1ZGUgIlN0cmlu
Z0ltcGwuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0jaWYgUExBVEZPUk0oQ0FJ
Uk8pCi0jaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCBI
Rk9OVF9fKiBIRk9OVDsKLXR5cGVkZWYgc3RydWN0IENHRm9udCogQ0dGb250UmVmOwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNzIFN0cmluZzsK
LQotY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7Ci1wdWJsaWM6Ci0gICAgRm9udFBsYXRmb3JtRGF0
YSgpCi0jaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIDogbV9mb250RmFjZSgwKQotICAgICAg
ICAsIG1fc2NhbGVkRm9udCgwKQotICAgICAgICAsCi0jZWxzZQotICAgICAgICA6Ci0jZW5kaWYK
LSAgICAgICAgICBtX3NpemUoMCkKLSAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCi0g
ICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQotICAgICAgICAsIG1fdXNlR0RJKGZh
bHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhKEhGT05ULCBmbG9hdCBz
aXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOwotICAgIEZvbnRQbGF0
Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwotCi0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgRm9udFBsYXRmb3JtRGF0YShIRk9OVCwgQ0dGb250UmVmLCBmbG9hdCBz
aXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOwotI2VsaWYgUExBVEZP
Uk0oQ0FJUk8pCi0gICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCosIGZsb2F0
IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKTsKLSAgICBGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9y
PShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0jZW5kaWYKLSAgICB+Rm9udFBsYXRmb3JtRGF0
YSgpOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpIDogbV9mb250KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KLSAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCk7IH0KLQotICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9m
b250LT5oZm9udCgpOyB9Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgQ0dGb250UmVmIGNnRm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2dGb250LmdldCgpOyB9Ci0jZWxpZiBQTEFURk9STShDQUlSTykK
LSAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRG
YWNlOyB9Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2NhbGVkRm9udDsgfQotI2VuZGlmCi0KLSAgICBmbG9hdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9Ci0gICAgdm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0g
c2l6ZTsgfQotICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhl
dGljQm9sZDsgfQotICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3ludGhldGljT2JsaXF1ZTsgfQotICAgIGJvb2wgdXNlR0RJKCkgY29uc3QgeyByZXR1cm4gbV91
c2VHREk7IH0KLQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fZm9udC0+aGFzaCgpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKLSAgICB7IAotICAgICAgICByZXR1cm4gbV9m
b250ID09IG90aGVyLm1fZm9udCAmJgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgICAg
bV9jZ0ZvbnQgPT0gb3RoZXIubV9jZ0ZvbnQgJiYKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAg
ICAgICAgICAgICAgbV9mb250RmFjZSA9PSBvdGhlci5tX2ZvbnRGYWNlICYmCi0gICAgICAgICAg
ICAgICBtX3NjYWxlZEZvbnQgPT0gb3RoZXIubV9zY2FsZWRGb250ICYmCi0jZW5kaWYKLSAgICAg
ICAgICAgICAgIG1fc2l6ZSA9PSBvdGhlci5tX3NpemUgJiYKLSAgICAgICAgICAgICAgIG1fc3lu
dGhldGljQm9sZCA9PSBvdGhlci5tX3N5bnRoZXRpY0JvbGQgJiYgbV9zeW50aGV0aWNPYmxpcXVl
ID09IG90aGVyLm1fc3ludGhldGljT2JsaXF1ZSAmJgotICAgICAgICAgICAgICAgbV91c2VHREkg
PT0gb3RoZXIubV91c2VHREk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBk
ZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgY2xhc3MgUmVmQ291
bnRlZEhGT05UIDogcHVibGljIFJlZkNvdW50ZWQ8UmVmQ291bnRlZEhGT05UPiB7Ci0gICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWZDb3VudGVkSEZPTlQ+IGNyZWF0ZShI
Rk9OVCBoZm9udCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRIRk9OVChoZm9udCkp
OyB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4gY3JlYXRlRGVs
ZXRlZCgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWZDb3VudGVkSEZPTlQocmVpbnRlcnByZXRf
Y2FzdDxIRk9OVD4oLTEpKSk7IH0KLQotICAgICAgICAgICAgflJlZkNvdW50ZWRIRk9OVCgpIHsg
aWYgKG1faGZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxIRk9OVD4oLTEpKSBEZWxldGVPYmplY3Qo
bV9oZm9udCk7IH0KLQotICAgICAgICBIRk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faGZv
bnQ7IH0KLSAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PGNvbnN0
IFVDaGFyKj4oJm1faGZvbnQpLCBzaXplb2YoSEZPTlQpIC8gc2l6ZW9mKFVDaGFyKSk7Ci0gICAg
ICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZkNvdW50ZWRIRk9OVChIRk9OVCBoZm9u
dCkKLSAgICAgICAgICAgIDogbV9oZm9udChoZm9udCkKLSAgICAgICAgewotICAgICAgICB9Ci0K
LSAgICAgICAgSEZPTlQgbV9oZm9udDsKLSAgICB9OwotCi0gICAgdm9pZCBwbGF0Zm9ybURhdGFJ
bml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSk7Ci0K
LSAgICBSZWZQdHI8UmVmQ291bnRlZEhGT05UPiBtX2ZvbnQ7Ci0jaWYgUExBVEZPUk0oQ0cpCi0g
ICAgUmV0YWluUHRyPENHRm9udFJlZj4gbV9jZ0ZvbnQ7Ci0jZWxpZiBQTEFURk9STShDQUlSTykK
LSAgICBjYWlyb19mb250X2ZhY2VfdCogbV9mb250RmFjZTsKLSAgICBjYWlyb19zY2FsZWRfZm9u
dF90KiBtX3NjYWxlZEZvbnQ7Ci0jZW5kaWYKLQotICAgIGZsb2F0IG1fc2l6ZTsKLSAgICBib29s
IG1fc3ludGhldGljQm9sZDsKLSAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsKLSAgICBib29s
IG1fdXNlR0RJOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAko
cmV2aXNpb24gNTYwNzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxh
dGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQAogICoK
ICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxwIFRva2VyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQnJlbnQgRnVsZ2hh
bQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEJyZW50IEZ1bGdoYW0KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KIAot
dXNpbmcgc3RkOjptaW47Cit1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQ3LDggKzQ3LDcgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURh
dGFJbml0KAogICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxlKCZzaXplTWF0cml4LCBzaXplLCBz
aXplKTsKIAogICAgIHN0YXRpYyBjYWlyb19mb250X29wdGlvbnNfdCogZm9udE9wdGlvbnMgPSAw
OwotICAgIGlmICghZm9udE9wdGlvbnMpCi0gICAgeworICAgIGlmICghZm9udE9wdGlvbnMpIHsK
ICAgICAgICBmb250T3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKICAgICAg
ICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhmb250T3B0aW9ucywgQ0FJUk9fQU5U
SUFMSUFTX1NVQlBJWEVMKTsKICAgICB9CkBAIC0xMzAsNCArMTI5LDE1IEBAIEZvbnRQbGF0Zm9y
bURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXIKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKK2Jv
b2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBv
dGhlcikgY29uc3QKK3sgCisgICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQKKyAgICAg
ICAgJiYgbV9mb250RmFjZSA9PSBvdGhlci5tX2ZvbnRGYWNlCisgICAgICAgICYmIG1fc2NhbGVk
Rm9udCA9PSBvdGhlci5tX3NjYWxlZEZvbnQKKyAgICAgICAgJiYgbV9zaXplID09IG90aGVyLm1f
c2l6ZQorICAgICAgICAmJiBtX3N5bnRoZXRpY0JvbGQgPT0gb3RoZXIubV9zeW50aGV0aWNCb2xk
CisgICAgICAgICYmIG1fc3ludGhldGljT2JsaXF1ZSA9PSBvdGhlci5tX3N5bnRoZXRpY09ibGlx
dWUKKyAgICAgICAgJiYgbV91c2VHREkgPT0gb3RoZXIubV91c2VHREk7Cit9CisKIH0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1JlZkNvdW50ZWRIRk9OVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1JlZkNvdW50ZWRIRk9OVC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUmVmQ291bnRlZEhG
T05ULmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3Qg
YmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRDYWlyby5jcHAsIEZvbnRN
YWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFJlZkNvdW50ZWRIRk9O
VF9oCisjZGVmaW5lIFJlZkNvdW50ZWRIRk9OVF9oCisKKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBSZWZDb3VudGVkSEZPTlQgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWZDb3VudGVkSEZPTlQ+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWZDb3VudGVkSEZPTlQ+IGNyZWF0
ZShIRk9OVCBoZm9udCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRIRk9OVChoZm9u
dCkpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVmQ291bnRlZEhGT05UPiBjcmVhdGVEZWxl
dGVkKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRIRk9OVChyZWludGVycHJldF9j
YXN0PEhGT05UPigtMSkpKTsgfQorCisgICAgflJlZkNvdW50ZWRIRk9OVCgpCisgICAgeworICAg
ICAgICBpZiAobV9oZm9udCAhPSByZWludGVycHJldF9jYXN0PEhGT05UPigtMSkpCisgICAgICAg
ICAgICBEZWxldGVPYmplY3QobV9oZm9udCk7CisgICAgfQorCisgICAgSEZPTlQgaGZvbnQoKSBj
b25zdCB7IHJldHVybiBtX2hmb250OyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVQ2hhcio+KCZtX2hmb250KSwgc2l6ZW9mKEhGT05UKSAvIHNpemVvZihVQ2hhcikp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZDb3VudGVkSEZPTlQoSEZPTlQgaGZvbnQpCisg
ICAgICAgIDogbV9oZm9udChoZm9udCkKKyAgICB7CisgICAgfQorCisgICAgSEZPTlQgbV9oZm9u
dDsKK307CisKK30KKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51045</attachid>
            <date>2010-03-18 10:38:52 -0700</date>
            <delta_ts>2010-03-18 11:29:22 -0700</delta_ts>
            <desc>Uploaded wrong version of diff.  This is the correct file.  (I.e., attachment 50975 with check-webkit-style fixes.)</desc>
            <filename>cairo_font.patch</filename>
            <type>text/plain</type>
            <size>28005</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjEzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMDMtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEhlbHAgcmVkdWNlIGJ1aWxkIHByb2JsZW1zIGR1ZSB0byBmb250IGRlY2xhcmF0aW9ucy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MTkwCisKKyAg
ICAgICAgRnVuY3Rpb25zIHVuY2hhbmdlZCwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZCBuZXcgZmlsZSwgYW5kIHNob3cKKyAgICAg
ICAgICBtb3ZlbWVudCBvZiBGb250UGxhdGZvcm1EYXRhLmggdG8gY2cvIGRpcmVjdG9yeS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250UGxhdGZvcm1EYXRhLmg6IE1lcmdl
IGluCisgICAgICAgICAgV2luQ2Fpcm8tc3BlY2lmaWMgZGVjbGFyYXRpb25zLiAgQ29ycmVjdCBj
b25zdHJ1Y3RvcgorICAgICAgICAgIGRlY2xhcmF0aW9uIHRvIHVzZSB0eXBlIGZsb2F0IGZvciBm
b250IHNpemUuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhmb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnVzZUdESSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpmb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQ
bGF0Zm9ybURhdGFDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKTogQ29ycmVjdAorICAgICAgICAgIGNvbnN0cnVjdG9yIHRvIGFj
Y2VwdCB0eXBlIGZsb2F0IGZvciBmb250IHNpemUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvRm9udFBsYXRmb3JtRGF0YS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmguCisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6Omhmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmNn
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fp
cm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9
PSk6IE1vdmUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICBoZXJlIChwcmV2aW91c2x5IGluIGhl
YWRlcikgdG8gbWF0Y2ggb3RoZXIgY2Fpcm8tYmFzZWQgcG9ydHMuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1JlZkNvdW50ZWRIRk9OVC5oOiBBZGRlZC4gIFRoaXMKKyAgICAgICAg
ICB3YXMgZXh0cmFjdGVkIGZyb20gd2luL0ZvbnRQbGF0Zm9ybURhdGEuaCwgYW5kIGlzIG5vdyBz
aGFyZWQKKyAgICAgICAgICBieSB0aGUgY2cvRm9udFBsYXRmb3JtRGF0YS5oIGFuZCBjYWlyby9G
b250UGxhdGZvcm1EYXRhLmgKKyAgICAgICAgKFdlYkNvcmU6OlJlZkNvdW50ZWRIRk9OVDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZkNvdW50ZWRIRk9OVDo6Y3JlYXRlRGVsZXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWZDb3VudGVkSEZPTlQ6On5SZWZDb3VudGVkSEZPTlQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVmQ291bnRlZEhGT05UOjpoZm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWZDb3VudGVkSEZPTlQ6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6UmVmQ291bnRl
ZEhGT05UOjpSZWZDb3VudGVkSEZPTlQpOgorCiAyMDEwLTAzLTE3ICBEbWl0cnkgVGl0b3YgIDxk
aW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtv
di4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNTYw
NzIpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjk5NSwxMCArMjI5OTYsNiBAQAogCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
CiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1x3aW5cRm9udFBsYXRmb3JtRGF0YS5oIg0KLQkJCQkJCT4NCi0JCQkJCTwv
RmlsZT4NCi0JCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1x3aW5cRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcCINCiAJCQkJCQk+DQogCQkJCQkJ
PEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMjMzNTksNiArMjMzNTYsMTAgQEAKIAkJCQkJCT4NCiAJ
CQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1x3aW5cUmVmQ291bnRlZEhGT05ULmgiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxl
Pg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XHdpblxTaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcCINCiAJCQkJCQk+DQogCQkJCQkJPEZpbGVD
b25maWd1cmF0aW9uDQpAQCAtMjM1MzksNiArMjM1NDAsMjYgQEAKIAkJCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcRm9udFBsYXRmb3JtRGF0YS5oIg0KKwkJCQkJCT4N
CisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2lu
MzIiDQorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJ
CTxUb29sDQorCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkJCQkJLz4NCisJ
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJ
CQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSINCisJCQkJCQkJPg0KKwkJCQkJCQk8VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDdXN0
b21CdWlsZFRvb2wiDQorCQkJCQkJCS8+DQorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJ
CQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xjZ1xHcmFkaWVudENHLmNwcCINCiAJCQkJCQk+DQogCQkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uDQpAQCAtMjM5MzUsNiArMjM5NTYsNDIgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fpcm9cRm9udFBsYXRmb3JtRGF0YS5oIg0KKwkJCQkJCT4N
CisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQor
CQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJCTxUb29s
DQorCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkJCQkJLz4NCisJCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCQlO
YW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJ
CQkJCQkJPg0KKwkJCQkJCQk8VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wi
DQorCQkJCQkJCS8+DQorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCisJCQkJCQkJTmFtZT0iRGVidWdfSW50ZXJuYWx8V2luMzIiDQorCQkJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJCTxUb29sDQorCQkJ
CQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkJCQkJLz4NCisJCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPg0KKwkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCQlOYW1lPSJE
ZWJ1Z19BbGx8V2luMzIiDQorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJ
CQk+DQorCQkJCQkJCTxUb29sDQorCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJ
CQkJCQkJLz4NCisJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPC9GaWxlPg0KKwkJ
CQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhaXJv
XEdyYWRpZW50Q2Fpcm8uY3BwIg0KIAkJCQkJCT4NCiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0
Zm9ybURhdGEuaAkocmV2aXNpb24gNTYxMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAK
ICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9u
LiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgogICogRm9u
dE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KICAqCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIg
VVNBLCBJbmMuCkBAIC0yOCwxOCArMjgsMjUgQEAKICNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YV9o
CiAjZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFfaAogCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIK
ICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgPGNhaXJvLmg+CiAjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCiAjaW5jbHVkZSA8
Y2Fpcm8tZnQuaD4KICNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KICNlbGlmIGRl
ZmluZWQoVVNFX1BBTkdPKQogI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KKyNlbGlmIFBM
QVRGT1JNKFdJTikKKyNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgorI2luY2x1ZGUgIlJlZkNvdW50
ZWRIRk9OVC5oIgorI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKICNlbHNlCiAjZXJyb3IgIk11c3Qg
ZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQordHlw
ZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7CisjZW5kaWYKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgU3RyaW5nOwpAQCAtNTMsOSArNjAsMTYgQEAgcHVibGljOgogI2VsaWYgZGVmaW5l
ZChVU0VfUEFOR08pCiAgICAgICAgIDogbV9jb250ZXh0KDApCiAgICAgICAgICwgbV9mb250KGhh
c2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICAgICAg
OiBtX2ZvbnRGYWNlKDApCisgICAgICAgICwgbV91c2VHREkoZmFsc2UpCisgICAgICAgICwgbV9m
b250KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQogI2Vsc2UKICNlcnJvciAiTXVzdCBkZWZp
bmVkIGEgZm9udCBiYWNrZW5kIgogI2VuZGlmCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAg
ICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQorICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShm
YWxzZSkKICAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKICAgICAgICAgeyB9CiAKQEAgLTY2LDI0
ICs4MCw0MSBAQCBwdWJsaWM6CiAjZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKICAgICAgICAgOiBt
X2NvbnRleHQoMCkKICAgICAgICAgLCBtX2ZvbnQoMCkKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAg
ICAgICAgOiBtX2ZvbnRGYWNlKDApCisgICAgICAgICwgbV91c2VHREkoZmFsc2UpCiAjZWxzZQog
I2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCiAjZW5kaWYKKyAgICAgICAgLCBt
X3NpemUoMCkKKyAgICAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgICAgICwgbV9z
eW50aGV0aWNPYmxpcXVlKGZhbHNlKQogICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQogICAgICAg
ICB7IH0KIAorI2lmIFBMQVRGT1JNKFdJTikKKyAgICBGb250UGxhdGZvcm1EYXRhKEhGT05ULCBm
bG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOworI2Vsc2UK
ICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5KTsKKyNlbmRpZgogCisgICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19m
b250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMp
OwogICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxp
Yyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGlu
dCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKIAogICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CiAKKyNp
ZiAhUExBVEZPUk0oV0lOKQogICAgIHN0YXRpYyBib29sIGluaXQoKTsKKyNlbHNlCisgICAgSEZP
TlQgaGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQtPmhmb250KCk7IH0KKyAgICBib29sIHVz
ZUdESSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlR0RJOyB9CisgICAgY2Fpcm9fZm9udF9mYWNlX3Qq
IGZvbnRGYWNlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RmFjZTsgfQorI2VuZGlmCiAKICAgICBi
b29sIGlzRml4ZWRQaXRjaCgpOwogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KKyAgICB2b2lkIHNldFNpemUoZmxvYXQgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CiAg
ICAgYm9vbCBzeW50aGV0aWNCb2xkKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkOyB9
CiAgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNP
YmxpcXVlOyB9CiAKQEAgLTkxLDI0ICsxMjIsMzIgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CiAgICAgeworI2lmIFBMQVRGT1JNKFdJTikKKyAgICAgICAgcmV0dXJuIG1f
Zm9udC0+aGFzaCgpOworI2Vsc2UKICNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKICAgICAgICAg
aWYgKG1fcGF0dGVybikKICAgICAgICAgICAgIHJldHVybiBGY1BhdHRlcm5IYXNoKG1fcGF0dGVy
bik7CiAjZW5kaWYKICAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKICAgICAgICAgcmV0dXJuIFN0cmlu
Z0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCBz
aXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOworI2VuZGlmCiAgICAgfQogCiAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKICAgICBGb250
UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7CisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgewogI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQog
ICAgICAgICByZXR1cm4gbV9wYXR0ZXJuID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsK
ICNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQogICAgICAgICByZXR1cm4gbV9mb250ID09IGhhc2hU
YWJsZURlbGV0ZWRGb250VmFsdWUoKTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICAgICAgcmV0
dXJuIG1fZm9udC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwogI2VuZGlmCiAgICAgfTsKIAor
CiAjaWZuZGVmIE5ERUJVRwogICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogI2VuZGlm
CkBAIC0xMjIsNiArMTYxLDEzIEBAIHB1YmxpYzoKIAogICAgIFBhbmdvQ29udGV4dCogbV9jb250
ZXh0OwogICAgIFBhbmdvRm9udCogbV9mb250OworI2VsaWYgUExBVEZPUk0oV0lOKQorcHJpdmF0
ZToKKyAgICB2b2lkIHBsYXRmb3JtRGF0YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERD
IGhkYywgV0NIQVIqIGZhY2VOYW1lKTsKKworICAgIFJlZlB0cjxSZWZDb3VudGVkSEZPTlQ+IG1f
Zm9udDsKKyAgICBjYWlyb19mb250X2ZhY2VfdCogbV9mb250RmFjZTsKKyAgICBib29sIG1fdXNl
R0RJOwogI2Vsc2UKICNlcnJvciAiTXVzdCBkZWZpbmVkIGEgZm9udCBiYWNrZW5kIgogI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGFD
YWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250UGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCShyZXZpc2lvbiA1NjA3MikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YUNhaXJvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoZmxvYXQKIHsKIH0KIAotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjYWly
b19mb250X2ZhY2VfdCogZm9udEZhY2UsIGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGlj
KQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCog
Zm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCiAgICAgOiBtX3Bh
dHRlcm4oMCkKICAgICAsIG1fZmFsbGJhY2tzKDApCiAgICAgLCBtX3NpemUoc2l6ZSkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRm9udFBsYXRmb3JtRGF0YS5oCShy
ZXZpc2lvbiA1NjA3MikJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YS5oOjU2MDcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Gb250
UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0
IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMu
Y3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YV9ICisj
ZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFfSAorCisjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKKyNpZiBQTEFURk9STShDQUlSTykKKyNpbmNsdWRl
IDxjYWlyby13aW4zMi5oPgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05U
OwordHlwZWRlZiBzdHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRm9udERlc2NyaXB0aW9uOworY2xhc3MgU3RyaW5nOworCitjbGFzcyBGb250
UGxhdGZvcm1EYXRhIHsKK3B1YmxpYzoKKyAgICBGb250UGxhdGZvcm1EYXRhKCkKKyNpZiBQTEFU
Rk9STShDQUlSTykKKyAgICAgICAgOiBtX2ZvbnRGYWNlKDApCisgICAgICAgICwgbV9zY2FsZWRG
b250KDApCisgICAgICAgICwKKyNlbHNlCisgICAgICAgIDoKKyNlbmRpZgorICAgICAgICAgIG1f
c2l6ZSgwKQorICAgICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAgICAgLCBtX3N5
bnRoZXRpY09ibGlxdWUoZmFsc2UpCisgICAgICAgICwgbV91c2VHREkoZmFsc2UpCisgICAgewor
ICAgIH0KKworICAgIEZvbnRQbGF0Zm9ybURhdGEoSEZPTlQsIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSk7CisgICAgRm9udFBsYXRmb3JtRGF0YShmbG9h
dCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7CisKKyNpZiBQTEFURk9STShDRykKKyAg
ICBGb250UGxhdGZvcm1EYXRhKEhGT05ULCBDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSk7CisjZWxpZiBQTEFURk9STShDQUlSTykKKyAg
ICBGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiwgZmxvYXQgc2l6ZSwgYm9vbCBi
b2xkLCBib29sIG9ibGlxdWUpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYpOworCisgICAgRm9udFBsYXRmb3JtRGF0YSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmKTsKKyNlbmRpZgorICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAgICBG
b250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX2ZvbnQo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KTsgfQorCisgICAgSEZPTlQgaGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQtPmhmb250KCk7
IH0KKyNpZiBQTEFURk9STShDRykKKyAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1
cm4gbV9jZ0ZvbnQuZ2V0KCk7IH0KKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorICAgIGNhaXJvX2Zv
bnRfZmFjZV90KiBmb250RmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udEZhY2U7IH0KKyAgICBj
YWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRG
b250OyB9CisjZW5kaWYKKworICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKyAgICB2b2lkIHNldFNpemUoZmxvYXQgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisgICAg
Ym9vbCBzeW50aGV0aWNCb2xkKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkOyB9Cisg
ICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNPYmxp
cXVlOyB9CisgICAgYm9vbCB1c2VHREkoKSBjb25zdCB7IHJldHVybiBtX3VzZUdESTsgfQorCisg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9mb250LT5o
YXNoKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIG90aGVyKSBjb25zdAorICAgIHsgCisgICAgICAgIHJldHVybiBtX2ZvbnQgPT0gb3RoZXIu
bV9mb250ICYmCisjaWYgUExBVEZPUk0oQ0cpCisgICAgICAgICAgICAgICBtX2NnRm9udCA9PSBv
dGhlci5tX2NnRm9udCAmJgorI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgICAgICAgICBt
X2ZvbnRGYWNlID09IG90aGVyLm1fZm9udEZhY2UgJiYKKyAgICAgICAgICAgICAgIG1fc2NhbGVk
Rm9udCA9PSBvdGhlci5tX3NjYWxlZEZvbnQgJiYKKyNlbmRpZgorICAgICAgICAgICAgICAgbV9z
aXplID09IG90aGVyLm1fc2l6ZSAmJgorICAgICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xkID09
IG90aGVyLm1fc3ludGhldGljQm9sZCAmJiBtX3N5bnRoZXRpY09ibGlxdWUgPT0gb3RoZXIubV9z
eW50aGV0aWNPYmxpcXVlICYmCisgICAgICAgICAgICAgICBtX3VzZUdESSA9PSBvdGhlci5tX3Vz
ZUdESTsKKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkg
Y29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBjbGFzcyBSZWZDb3VudGVkSEZPTlQgOiBw
dWJsaWMgUmVmQ291bnRlZDxSZWZDb3VudGVkSEZPTlQ+IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4gY3JlYXRlKEhGT05UIGhmb250KSB7
IHJldHVybiBhZG9wdFJlZihuZXcgUmVmQ291bnRlZEhGT05UKGhmb250KSk7IH0KKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UmVmQ291bnRlZEhGT05UPiBjcmVhdGVEZWxldGVkKCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRIRk9OVChyZWludGVycHJldF9jYXN0PEhGT05UPigt
MSkpKTsgfQorCisgICAgICAgICAgICB+UmVmQ291bnRlZEhGT05UKCkgeyBpZiAobV9oZm9udCAh
PSByZWludGVycHJldF9jYXN0PEhGT05UPigtMSkpIERlbGV0ZU9iamVjdChtX2hmb250KTsgfQor
CisgICAgICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9oZm9udDsgfQorICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPigmbV9o
Zm9udCksIHNpemVvZihIRk9OVCkgLyBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgUmVmQ291bnRlZEhGT05UKEhGT05UIGhmb250KQorICAgICAgICAg
ICAgOiBtX2hmb250KGhmb250KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBIRk9O
VCBtX2hmb250OworICAgIH07CisKKyAgICB2b2lkIHBsYXRmb3JtRGF0YUluaXQoSEZPTlQgZm9u
dCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VOYW1lKTsKKworICAgIFJlZlB0cjxS
ZWZDb3VudGVkSEZPTlQ+IG1fZm9udDsKKyNpZiBQTEFURk9STShDRykKKyAgICBSZXRhaW5QdHI8
Q0dGb250UmVmPiBtX2NnRm9udDsKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorICAgIGNhaXJvX2Zv
bnRfZmFjZV90KiBtX2ZvbnRGYWNlOworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVk
Rm9udDsKKyNlbmRpZgorCisgICAgZmxvYXQgbV9zaXplOworICAgIGJvb2wgbV9zeW50aGV0aWNC
b2xkOworICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlOworICAgIGJvb2wgbV91c2VHREk7Cit9
OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Gb250
UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDU2MDcyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE3
ICsyMSwxNCBAQAogICoKICAqLwogCi0jaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFfSAotI2RlZmlu
ZSBGb250UGxhdGZvcm1EYXRhX0gKKyNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YV9oCisjZGVmaW5l
IEZvbnRQbGF0Zm9ybURhdGFfaAogCisjaW5jbHVkZSAiUmVmQ291bnRlZEhGT05ULmgiCiAjaW5j
bHVkZSAiU3RyaW5nSW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNpZiBQ
TEFURk9STShDQUlSTykKLSNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgotI2VuZGlmCisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogCiB0eXBlZGVmIHN0cnVjdCBIRk9OVF9fKiBIRk9OVDsKIHR5
cGVkZWYgc3RydWN0IENHRm9udCogQ0dGb250UmVmOwpAQCAtNDQsMTQgKzQxLDcgQEAgY2xhc3Mg
U3RyaW5nOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CiBwdWJsaWM6CiAgICAgRm9udFBsYXRm
b3JtRGF0YSgpCi0jaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIDogbV9mb250RmFjZSgwKQot
ICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQotICAgICAgICAsCi0jZWxzZQotICAgICAgICA6Ci0j
ZW5kaWYKLSAgICAgICAgICBtX3NpemUoMCkKKyAgICAgICAgOiBtX3NpemUoMCkKICAgICAgICAg
LCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCiAgICAgICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZh
bHNlKQogICAgICAgICAsIG1fdXNlR0RJKGZhbHNlKQpAQCAtNjEsMjYgKzUxLDE0IEBAIHB1Ymxp
YzoKICAgICBGb250UGxhdGZvcm1EYXRhKEhGT05ULCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJv
b2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6
ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwogCi0jaWYgUExBVEZPUk0oQ0cpCiAgICAgRm9u
dFBsYXRmb3JtRGF0YShIRk9OVCwgQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJv
b2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgRm9u
dFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCosIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwg
Ym9vbCBvYmxpcXVlKTsKLSAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmKTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7Ci0jZW5kaWYKICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwogCiAgICAgRm9udFBs
YXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9mb250KFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0K
IAogICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250LT5oZm9udCgpOyB9Ci0j
aWYgUExBVEZPUk0oQ0cpCiAgICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2dGb250LmdldCgpOyB9Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWlyb19mb250X2Zh
Y2VfdCogZm9udEZhY2UoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlOyB9Ci0gICAgY2Fpcm9f
c2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsg
fQotI2VuZGlmCiAKICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAg
ICAgdm9pZCBzZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQpAQCAtOTUsMTYg
KzczLDEyIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBvdGhlcikgY29uc3QKICAgICB7IAotICAgICAgICByZXR1cm4gbV9mb250ID09IG90
aGVyLm1fZm9udCAmJgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgICAgbV9jZ0ZvbnQg
PT0gb3RoZXIubV9jZ0ZvbnQgJiYKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAg
ICAgbV9mb250RmFjZSA9PSBvdGhlci5tX2ZvbnRGYWNlICYmCi0gICAgICAgICAgICAgICBtX3Nj
YWxlZEZvbnQgPT0gb3RoZXIubV9zY2FsZWRGb250ICYmCi0jZW5kaWYKLSAgICAgICAgICAgICAg
IG1fc2l6ZSA9PSBvdGhlci5tX3NpemUgJiYKLSAgICAgICAgICAgICAgIG1fc3ludGhldGljQm9s
ZCA9PSBvdGhlci5tX3N5bnRoZXRpY0JvbGQgJiYgbV9zeW50aGV0aWNPYmxpcXVlID09IG90aGVy
Lm1fc3ludGhldGljT2JsaXF1ZSAmJgotICAgICAgICAgICAgICAgbV91c2VHREkgPT0gb3RoZXIu
bV91c2VHREk7CisgICAgICAgIHJldHVybiBtX2ZvbnQgPT0gb3RoZXIubV9mb250CisgICAgICAg
ICAgICAmJiBtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udAorICAgICAgICAgICAgJiYgbV9zaXpl
ID09IG90aGVyLm1fc2l6ZQorICAgICAgICAgICAgJiYgbV9zeW50aGV0aWNCb2xkID09IG90aGVy
Lm1fc3ludGhldGljQm9sZAorICAgICAgICAgICAgJiYgbV9zeW50aGV0aWNPYmxpcXVlID09IG90
aGVyLm1fc3ludGhldGljT2JsaXF1ZQorICAgICAgICAgICAgJiYgbV91c2VHREkgPT0gb3RoZXIu
bV91c2VHREk7CiAgICAgfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMTEyLDM3ICs4NiwxMCBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBjbGFzcyBSZWZDb3VudGVkSEZPTlQgOiBw
dWJsaWMgUmVmQ291bnRlZDxSZWZDb3VudGVkSEZPTlQ+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4gY3JlYXRlKEhGT05UIGhmb250KSB7
IHJldHVybiBhZG9wdFJlZihuZXcgUmVmQ291bnRlZEhGT05UKGhmb250KSk7IH0KLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UmVmQ291bnRlZEhGT05UPiBjcmVhdGVEZWxldGVkKCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRIRk9OVChyZWludGVycHJldF9jYXN0PEhGT05UPigt
MSkpKTsgfQotCi0gICAgICAgICAgICB+UmVmQ291bnRlZEhGT05UKCkgeyBpZiAobV9oZm9udCAh
PSByZWludGVycHJldF9jYXN0PEhGT05UPigtMSkpIERlbGV0ZU9iamVjdChtX2hmb250KTsgfQot
Ci0gICAgICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9oZm9udDsgfQotICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPigmbV9o
Zm9udCksIHNpemVvZihIRk9OVCkgLyBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgUmVmQ291bnRlZEhGT05UKEhGT05UIGhmb250KQotICAgICAgICAg
ICAgOiBtX2hmb250KGhmb250KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBIRk9O
VCBtX2hmb250OwotICAgIH07Ci0KICAgICB2b2lkIHBsYXRmb3JtRGF0YUluaXQoSEZPTlQgZm9u
dCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VOYW1lKTsKIAogICAgIFJlZlB0cjxS
ZWZDb3VudGVkSEZPTlQ+IG1fZm9udDsKLSNpZiBQTEFURk9STShDRykKICAgICBSZXRhaW5QdHI8
Q0dGb250UmVmPiBtX2NnRm9udDsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX2Zv
bnRfZmFjZV90KiBtX2ZvbnRGYWNlOwotICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVk
Rm9udDsKLSNlbmRpZgogCiAgICAgZmxvYXQgbV9zaXplOwogICAgIGJvb2wgbV9zeW50aGV0aWNC
b2xkOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0
Zm9ybURhdGEuaAkocmV2aXNpb24gNTYwNzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU1ICswLDAgQEAK
LS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRh
dGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KLSAq
IEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCi0gKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udFBsYXRmb3Jt
RGF0YV9ICi0jZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFfSAotCi0jaW5jbHVkZSAiU3RyaW5nSW1w
bC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNpZiBQTEFURk9STShDQUlSTykK
LSNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IEhGT05U
X18qIEhGT05UOwotdHlwZWRlZiBzdHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udERlc2NyaXB0aW9uOwotY2xhc3MgU3RyaW5nOwotCi1j
bGFzcyBGb250UGxhdGZvcm1EYXRhIHsKLXB1YmxpYzoKLSAgICBGb250UGxhdGZvcm1EYXRhKCkK
LSNpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgOiBtX2ZvbnRGYWNlKDApCi0gICAgICAgICwg
bV9zY2FsZWRGb250KDApCi0gICAgICAgICwKLSNlbHNlCi0gICAgICAgIDoKLSNlbmRpZgotICAg
ICAgICAgIG1fc2l6ZSgwKQotICAgICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKLSAgICAg
ICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCi0gICAgICAgICwgbV91c2VHREkoZmFsc2Up
Ci0gICAgewotICAgIH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGEoSEZPTlQsIGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSk7Ci0gICAgRm9udFBsYXRmb3Jt
RGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7Ci0KLSNpZiBQTEFURk9S
TShDRykKLSAgICBGb250UGxhdGZvcm1EYXRhKEhGT05ULCBDR0ZvbnRSZWYsIGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSk7Ci0jZWxpZiBQTEFURk9STShD
QUlSTykKLSAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiwgZmxvYXQgc2l6
ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYpOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSYgb3BlcmF0b3I9KGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSNlbmRpZgotICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7
Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkg
OiBtX2ZvbnQoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQotICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKTsgfQotCi0gICAgSEZPTlQgaGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQt
Pmhmb250KCk7IH0KLSNpZiBQTEFURk9STShDRykKLSAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29u
c3QgeyByZXR1cm4gbV9jZ0ZvbnQuZ2V0KCk7IH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAg
IGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udEZhY2U7
IH0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4g
bV9zY2FsZWRGb250OyB9Ci0jZW5kaWYKLQotICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KLSAgICB2b2lkIHNldFNpemUoZmxvYXQgc2l6ZSkgeyBtX3NpemUgPSBzaXpl
OyB9Ci0gICAgYm9vbCBzeW50aGV0aWNCb2xkKCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNC
b2xkOyB9Ci0gICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlKCkgY29uc3QgeyByZXR1cm4gbV9zeW50
aGV0aWNPYmxpcXVlOyB9Ci0gICAgYm9vbCB1c2VHREkoKSBjb25zdCB7IHJldHVybiBtX3VzZUdE
STsgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9mb250LT5oYXNoKCk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAotICAgIHsgCi0gICAgICAgIHJldHVybiBtX2ZvbnQg
PT0gb3RoZXIubV9mb250ICYmCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICAgICBtX2Nn
Rm9udCA9PSBvdGhlci5tX2NnRm9udCAmJgotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAg
ICAgICAgICBtX2ZvbnRGYWNlID09IG90aGVyLm1fZm9udEZhY2UgJiYKLSAgICAgICAgICAgICAg
IG1fc2NhbGVkRm9udCA9PSBvdGhlci5tX3NjYWxlZEZvbnQgJiYKLSNlbmRpZgotICAgICAgICAg
ICAgICAgbV9zaXplID09IG90aGVyLm1fc2l6ZSAmJgotICAgICAgICAgICAgICAgbV9zeW50aGV0
aWNCb2xkID09IG90aGVyLm1fc3ludGhldGljQm9sZCAmJiBtX3N5bnRoZXRpY09ibGlxdWUgPT0g
b3RoZXIubV9zeW50aGV0aWNPYmxpcXVlICYmCi0gICAgICAgICAgICAgICBtX3VzZUdESSA9PSBv
dGhlci5tX3VzZUdESTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRlc2Ny
aXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBjbGFzcyBSZWZDb3VudGVk
SEZPTlQgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWZDb3VudGVkSEZPTlQ+IHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4gY3JlYXRlKEhGT05U
IGhmb250KSB7IHJldHVybiBhZG9wdFJlZihuZXcgUmVmQ291bnRlZEhGT05UKGhmb250KSk7IH0K
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVmQ291bnRlZEhGT05UPiBjcmVhdGVEZWxldGVk
KCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRIRk9OVChyZWludGVycHJldF9jYXN0
PEhGT05UPigtMSkpKTsgfQotCi0gICAgICAgICAgICB+UmVmQ291bnRlZEhGT05UKCkgeyBpZiAo
bV9oZm9udCAhPSByZWludGVycHJldF9jYXN0PEhGT05UPigtMSkpIERlbGV0ZU9iamVjdChtX2hm
b250KTsgfQotCi0gICAgICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9oZm9udDsg
fQotICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNo
YXIqPigmbV9oZm9udCksIHNpemVvZihIRk9OVCkgLyBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAg
fQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmQ291bnRlZEhGT05UKEhGT05UIGhmb250KQot
ICAgICAgICAgICAgOiBtX2hmb250KGhmb250KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICBIRk9OVCBtX2hmb250OwotICAgIH07Ci0KLSAgICB2b2lkIHBsYXRmb3JtRGF0YUluaXQo
SEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VOYW1lKTsKLQotICAg
IFJlZlB0cjxSZWZDb3VudGVkSEZPTlQ+IG1fZm9udDsKLSNpZiBQTEFURk9STShDRykKLSAgICBS
ZXRhaW5QdHI8Q0dGb250UmVmPiBtX2NnRm9udDsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAg
IGNhaXJvX2ZvbnRfZmFjZV90KiBtX2ZvbnRGYWNlOwotICAgIGNhaXJvX3NjYWxlZF9mb250X3Qq
IG1fc2NhbGVkRm9udDsKLSNlbmRpZgotCi0gICAgZmxvYXQgbV9zaXplOwotICAgIGJvb2wgbV9z
eW50aGV0aWNCb2xkOwotICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlOwotICAgIGJvb2wgbV91
c2VHREk7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCShyZXZp
c2lvbiA1NjA3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGFDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBACiAgKgogICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KICAqIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBCcmVudCBGdWxnaGFtCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQnJlbnQgRnVsZ2hhbQogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgogCi11c2lu
ZyBzdGQ6Om1pbjsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDcsOCArNDcsNyBAQCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUlu
aXQoCiAgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJnNpemVNYXRyaXgsIHNpemUsIHNpemUp
OwogCiAgICAgc3RhdGljIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBmb250T3B0aW9ucyA9IDA7Ci0g
ICAgaWYgKCFmb250T3B0aW9ucykKLSAgICB7CisgICAgaWYgKCFmb250T3B0aW9ucykgewogICAg
ICAgIGZvbnRPcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgpOwogICAgICAgIGNh
aXJvX2ZvbnRfb3B0aW9uc19zZXRfYW50aWFsaWFzKGZvbnRPcHRpb25zLCBDQUlST19BTlRJQUxJ
QVNfU1VCUElYRUwpOwogICAgIH0KQEAgLTEzMCw0ICsxMjksMTUgQEAgRm9udFBsYXRmb3JtRGF0
YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcgogICAgIHJldHVybiAqdGhpczsKIH0KIAorYm9vbCBG
b250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVy
KSBjb25zdAoreyAKKyAgICByZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udAorICAgICAgICAm
JiBtX2ZvbnRGYWNlID09IG90aGVyLm1fZm9udEZhY2UKKyAgICAgICAgJiYgbV9zY2FsZWRGb250
ID09IG90aGVyLm1fc2NhbGVkRm9udAorICAgICAgICAmJiBtX3NpemUgPT0gb3RoZXIubV9zaXpl
CisgICAgICAgICYmIG1fc3ludGhldGljQm9sZCA9PSBvdGhlci5tX3N5bnRoZXRpY0JvbGQKKyAg
ICAgICAgJiYgbV9zeW50aGV0aWNPYmxpcXVlID09IG90aGVyLm1fc3ludGhldGljT2JsaXF1ZQor
ICAgICAgICAmJiBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESTsKK30KKwogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUmVmQ291bnRlZEhGT05ULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUmVmQ291bnRlZEhGT05ULmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9SZWZDb3VudGVkSEZPTlQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBp
bmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgorICogRm9udENhaXJvLmNwcCwgRm9udE1hYy5j
cHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUmVmQ291bnRlZEhGT05UX2gK
KyNkZWZpbmUgUmVmQ291bnRlZEhGT05UX2gKKworI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFJlZkNvdW50ZWRIRk9OVCA6IHB1YmxpYyBSZWZDb3VudGVkPFJlZkNvdW50ZWRIRk9OVD4gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4gY3JlYXRlKEhG
T05UIGhmb250KSB7IHJldHVybiBhZG9wdFJlZihuZXcgUmVmQ291bnRlZEhGT05UKGhmb250KSk7
IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWZDb3VudGVkSEZPTlQ+IGNyZWF0ZURlbGV0ZWQo
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgUmVmQ291bnRlZEhGT05UKHJlaW50ZXJwcmV0X2Nhc3Q8
SEZPTlQ+KC0xKSkpOyB9CisKKyAgICB+UmVmQ291bnRlZEhGT05UKCkKKyAgICB7CisgICAgICAg
IGlmIChtX2hmb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8SEZPTlQ+KC0xKSkKKyAgICAgICAgICAg
IERlbGV0ZU9iamVjdChtX2hmb250KTsKKyAgICB9CisKKyAgICBIRk9OVCBoZm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1faGZvbnQ7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PGNv
bnN0IFVDaGFyKj4oJm1faGZvbnQpLCBzaXplb2YoSEZPTlQpIC8gc2l6ZW9mKFVDaGFyKSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFJlZkNvdW50ZWRIRk9OVChIRk9OVCBoZm9udCkKKyAgICAg
ICAgOiBtX2hmb250KGhmb250KQorICAgIHsKKyAgICB9CisKKyAgICBIRk9OVCBtX2hmb250Owor
fTsKKworfQorCisjZW5kaWYK
</data>
<flag name="review"
          id="34244"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>