<?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>233986</bug_id>
          
          <creation_ts>2021-12-07 23:03:12 -0800</creation_ts>
          <short_desc>Move FontDatabases to FontCache</short_desc>
          <delta_ts>2022-07-20 18:40:25 -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>Layout and Rendering</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>233488</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron McCormack (:heycam)">heycam</reporter>
          <assigned_to name="Cameron McCormack (:heycam)">heycam</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mattwoodrow</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1821421</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-07 23:03:12 -0800</bug_when>
    <thetext>Move FontDatabases to FontCache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821425</commentid>
    <comment_count>1</comment_count>
      <attachid>446313</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-07 23:08:25 -0800</bug_when>
    <thetext>Created attachment 446313
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823008</commentid>
    <comment_count>2</comment_count>
      <attachid>446313</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-10 14:55:08 -0800</bug_when>
    <thetext>Comment on attachment 446313
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        This patch moves the FontDatabase instances to live on the FontCache,
&gt; +        of which we already have one per thread.

Yes I think this is the right thing to do.

&gt; Source/WebCore/ChangeLog:17
&gt; +        We also move the FontDatabase definition to a separate file, to reduce

&quot;We&quot;?

&gt; Source/WebCore/platform/graphics/FontCache.h:186
&gt; +#if PLATFORM(COCOA)

I think we generally don&apos;t guard declarations (as opposed to definitions) if they&apos;re not called.

&gt; Source/WebCore/platform/graphics/FontCache.h:213
&gt; +    FontDatabase m_databaseAllowingUserInstalledFonts { AllowUserInstalledFonts::Yes };
&gt; +    FontDatabase m_databaseDisallowingUserInstalledFonts { AllowUserInstalledFonts::No };

🆒

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:1054
&gt; +    auto&amp; fontDatabase = database(allowUserInstalledFonts);

thanks

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:1145
&gt;          FontCache::invalidateAllFontCaches();

The implementation of this will execute the above two lines?

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:1253
&gt; +    auto&amp; fontDatabase = database(fontDescription.shouldAllowUserInstalledFonts());

I kind of think the name of this function is too generic. Web browsers have lots of databases inside them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824262</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-14 23:04:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/86507617&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1885307</commentid>
    <comment_count>4</comment_count>
      <attachid>461036</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-07-19 22:13:42 -0700</bug_when>
    <thetext>Created attachment 461036
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1885448</commentid>
    <comment_count>5</comment_count>
      <attachid>461054</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-07-20 14:39:00 -0700</bug_when>
    <thetext>Created attachment 461054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1885525</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-07-20 18:40:21 -0700</bug_when>
    <thetext>Committed 252671@main (7c81d79e7253): &lt;https://commits.webkit.org/252671@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 461054.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446313</attachid>
            <date>2021-12-07 23:08:25 -0800</date>
            <delta_ts>2021-12-10 14:55:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233986-20211208180824.patch</filename>
            <type>text/plain</type>
            <size>33454</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDRiM2FiZTVmZjFmNzZm
YjEyNjc1NmMwMTY3OTBiMDMxZTc5NTgxNS4uMmRhMjAzYTVkZDQxMGYyYmI2ZTI3NGQ5NWI3YjZi
NTE4YjkzNzY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIxLTEyLTAyICBDYW1l
cm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBGb250RGF0
YWJhc2VzIHRvIEZvbnRDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMzOTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2UgY3VycmVudGx5IGhhdmUgdHdvIEZvbnREYXRhYmFzZSBvYmplY3RzIHdl
IGNyZWF0ZSwgaW4KKyAgICAgICAgRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJ
bnN0YWxsZWRGb250cyBhbmQKKyAgICAgICAgRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxv
d2luZ1VzZXJJbnN0YWxsZWRGb250cy4gVGhlc2UgY2FuIGJlCisgICAgICAgIGFjY2Vzc2VkIGZy
b20gd29ya2VyIHRocmVhZHMgdXNpbmcgT2Zmc2NyZWVuQ2FudmFzLCBhbmQgc28gbXVzdAorICAg
ICAgICBiZSBtYWRlIHRocmVhZCBzYWZlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgdGhl
IEZvbnREYXRhYmFzZSBpbnN0YW5jZXMgdG8gbGl2ZSBvbiB0aGUgRm9udENhY2hlLAorICAgICAg
ICBvZiB3aGljaCB3ZSBhbHJlYWR5IGhhdmUgb25lIHBlciB0aHJlYWQuCisKKyAgICAgICAgV2Ug
YWxzbyBtb3ZlIHRoZSBGb250RGF0YWJhc2UgZGVmaW5pdGlvbiB0byBhIHNlcGFyYXRlIGZpbGUs
IHRvIHJlZHVjZQorICAgICAgICBzaW1wbGlmeSBGb250Q2FzY2FkZS57aCxjcHB9IGZ1cnRoZXIu
CisKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2Eu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OmRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9u
dFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRm
b3JtRm9udExvb2t1cFdpdGhGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6aW52YWxpZGF0ZUZv
bnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2l0aEZhbWlseSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybVB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERh
dGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlcklu
c3RhbGxlZEZvbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6
SW5zdGFsbGVkRm9udDo6SW5zdGFsbGVkRm9udCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnRGYW1pbHk6Okluc3RhbGxlZEZvbnRGYW1pbHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250
RmFtaWx5OjpleHBhbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNl
OjpJbnN0YWxsZWRGb250RmFtaWx5Ojppc0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udEZhbWlseTo6c2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YWJhc2U6OmNvbGxlY3Rpb25Gb3JG
YW1pbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpmb250Rm9y
UG9zdFNjcmlwdE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNl
OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YWJhc2U6OkZvbnRE
YXRhYmFzZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dERhdGFiYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YWJhc2U6Oklu
c3RhbGxlZEZvbnQ6Okluc3RhbGxlZEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFi
YXNlOjpJbnN0YWxsZWRGb250RmFtaWx5OjpJbnN0YWxsZWRGb250RmFtaWx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udEZhbWlseTo6ZXhwYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6Y29sbGVjdGlvbkZvckZhbWlseSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250RGF0YWJhc2U6OmZvbnRGb3JQb3N0U2NyaXB0TmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250RGF0YWJhc2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnREYXRhYmFzZTo6Rm9udERhdGFiYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250RGF0YWJhc2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YWJh
c2U6Okluc3RhbGxlZEZvbnRGYW1pbHk6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5OjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6YWxsb3dVc2VySW5zdGFsbGVkRm9udHMgY29uc3Qp
OgorCiAyMDIxLTEyLTAyICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFrZSBGb250Q2FjaGUgYWxsb3dsaXN0IHRocmVhZCBzYWZlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCmluZGV4IDc4MTdkN2ZiMDVlNzM1NzM5Mjg4YmNjYmU4NWQwZTQ4MjUxYzg0
Y2QuLmIwMGJiNjE3Y2RlOThiNzQ2YWI3Y2I4MGNiMWEzNWY0OTliYTFhZDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCkBAIC0zMTUsNiArMzE1LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udERhdGFiYXNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnREZXNjcmlwdGlvbkNvY29hLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRG
YW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC02NTEsNiArNjUyLDcgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Db2xvckNvY29hLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERhdGFiYXNl
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNv
cmVUZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTENv
Y29hLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCA1Y2NhMGFjMjZmOTgzZjMxZjhhYjJjYzlm
NzE2ODlkZTVlM2FmM2U1Li5hZTNiNDE2NDExNzQ0Mzk3YmY0ZTc2OTQwZmZiYTkwNDY5YjQzZDhl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM3MSw2ICszNzEsNyBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9GbG9hdFJlY3RDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENhY2hlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2Fk
ZUNvY29hLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udERhdGFiYXNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2QzNjg4MmU2NDI3NDVkOTAzN2IyYjIxYmIy
ZmRkNGExNmQzMmNmNS4uMzg0NDVkMjY4OWM2NThjODIwNjAxMjVlOWVjYTU5ZDU0OWQ3NTM4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTAxMyw2ICsxMDEzLDcgQEAKIAkJMzFGQjFBNjYxMjBBNUQzRjAwREMwMkEwIC8qIEpT
RGV2aWNlTW90aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxRkIxQTY0MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50
LmggKi87IH07CiAJCTMxRkU2REZBMTUwMDRDMkEwMDA0RUJDNCAvKiBOb3RpZmljYXRpb25QZXJt
aXNzaW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxRUMxREFDMTRGRjI2RUEwMEM5NDY2MiAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9u
Q2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkzMjExMkUwRjI3NEI0N0NGMDA3MDQ3QTggLyogU3lzdGVtRmFsbGJhY2tDYWNoZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzI4OTlGQjkyNzRC
NDEwQzAwODU1QTlEIC8qIFN5c3RlbUZhbGxiYWNrQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzMjU5MDVEQzI3NERFMUQ4MDA3QjdCNjUg
LyogRm9udERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMjU5MDVEQTI3NERFMUQ3MDA3QjdCNjUgLyogRm9udERhdGFiYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzJFQUZCOEQyNzRD
NUVBNjAwNjUwNTU3IC8qIEZvbnRDYXNjYWRlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMyRUFGQjhCMjc0QzVFQTUwMDY1MDU1NyAvKiBGb250
Q2FzY2FkZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMzM1MDNDOUExMDE3OUE3NDAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbkNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM1MDNDOTkx
MDE3OUE3NDAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbkNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMzNTAzQ0E0MTAxNzlBRDcwMDNCNDdF
MSAvKiBKU05vdGlmaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzM1MDNDQTAxMDE3OUFENzAwM0I0N0UxIC8qIEpTTm90aWZpY2F0aW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgzNzUs
NiArODM3Niw4IEBACiAJCTMxRkIxQTU2MTIwQTVEMDYwMERDMDJBMCAvKiBEZXZpY2VNb3Rpb25F
dmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRGV2aWNlTW90aW9uRXZlbnQuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUZCMUE2MzEyMEE1RDNGMDBEQzAyQTAgLyog
SlNEZXZpY2VNb3Rpb25FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RldmljZU1vdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzFGQjFBNjQxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9uRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEZXZpY2VNb3Rpb25FdmVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMjU5MDVEQTI3NERFMUQ3MDA3QjdCNjUgLyogRm9u
dERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnREYXRhYmFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMjU5MDVERDI3NERFMUUzMDA3QjdC
NjUgLyogRm9udERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnREYXRhYmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMyODk5RkI3Mjc0QjQxMEMwMDg1NUE5
RCAvKiBTeXN0ZW1GYWxsYmFja0NhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbUZh
bGxiYWNrQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMjg5OUZCOTI3
NEI0MTBDMDA4NTVBOUQgLyogU3lzdGVtRmFsbGJhY2tDYWNoZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
eXN0ZW1GYWxsYmFja0NhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMyRDMx
MDRFMjc0QzY4N0IwMDMzQUIyRiAvKiBGb250Q2FzY2FkZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZvbnRDYXNjYWRlQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjg5NzIsNiArMjg5NzUsOCBAQAogCQkJCUMyNDU4RTYxMUZFODk3OUUwMDU5NDc1OSAvKiBG
b250Q2FjaGVDb3JlVGV4dC5oICovLAogCQkJCUIyQUZGQzc4MEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250Q2FzY2FkZUNvY29hLmNwcCAqLywKIAkJCQkxQzZGRDhCMDI1MEEzNUYxMDBENkU5MjAgLyog
Rm9udENvY29hLmNwcCAqLywKKwkJCQkzMjU5MDVERDI3NERFMUUzMDA3QjdCNjUgLyogRm9udERh
dGFiYXNlLmNwcCAqLywKKwkJCQkzMjU5MDVEQTI3NERFMUQ3MDA3QjdCNjUgLyogRm9udERhdGFi
YXNlLmggKi8sCiAJCQkJMUMxMkFDMkMxRUU3Nzk5NTAwNzlFMEEwIC8qIEZvbnREZXNjcmlwdGlv
bkNvY29hLmNwcCAqLywKIAkJCQkxQzEyQUMyODFFRTc3OEFFMDA3OUUwQTAgLyogRm9udEZhbWls
eVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAgKi8sCiAJCQkJMUMxMkFDMjkxRUU3NzhBRTAwNzlF
MEEwIC8qIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuaCAqLywKQEAgLTM0Mjc5LDYg
KzM0Mjg0LDcgQEAKIAkJCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGVG
b250cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMyNjY3MUIyNkZBOTMyRjAwMTE3MDczIC8qIEZv
bnRDcmVhdGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQUZGQzdFMEQwMEE1QzEw
MDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkz
MjU5MDVEQzI3NERFMUQ4MDA3QjdCNjUgLyogRm9udERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMkMzREE2NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQzY2MjYxMTFDNkU3Q0E2MDBBQjUyN0MgLyogRm9udEZhY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFDMjRFRUE1MUM3MjlDRTQwMDgwRjhGQyAvKiBGb250RmFjZVNldC5o
IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCmluZGV4IDNhZDczYzc2YzhjODY0ODY4OWZlM2RkOGFjOTU2MjQ5OWQ1OGIzZGYuLjE1
ODIzNTAzZTMxMGUyY2Y0ZjVlNzIzYTEyYTVmMTgyYTIzMzA4ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC01NSw2ICs1NSw3IEBACiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJGb250Q2FjaGVDb3JlVGV4dC5oIgorI2luY2x1
ZGUgIkZvbnREYXRhYmFzZS5oIgogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpA
QCAtMTgyLDYgKzE4MywxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkQXV0b0FjdGl2YXRl
Rm9udElmTmVlZGVkKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSk7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgIEZvbnREYXRhYmFzZSYgZGF0YWJhc2UoQWxsb3dVc2VySW5zdGFs
bGVkRm9udHMpOworI2VuZGlmCisKICAgICBUaW1lciBtX3B1cmdlVGltZXI7CiAgICAgCiAgICAg
Ym9vbCBtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9
OwpAQCAtMjA0LDYgKzIwOSw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIEZvbnREYXRhYmFzZSBtX2RhdGFiYXNlQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9u
dHMgeyBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzIH07CisgICAgRm9udERhdGFiYXNlIG1f
ZGF0YWJhc2VEaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cyB7IEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzOjpObyB9OworCiAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBtX3NlZW5GYW1pbGllc0Zv
clByZXdhcm1pbmc7CiAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBtX2ZvbnROYW1lc1JlcXVpcmlu
Z1N5c3RlbUZhbGxiYWNrRm9yUHJld2FybWluZzsKICAgICBSZWZQdHI8V29ya1F1ZXVlPiBtX3By
ZXdhcm1RdWV1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRleCAzMDVhMmJkZjE0NDQxYjFm
MjBiODA5NmU0YTQ0NzU4OWI0MDFkMGRmLi5hYTIyZmViOWEwZWExMTgxZDJiYWVhZmVjYzZiYjIw
Mzg5N2RiZGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCIKICNp
bmNsdWRlICJGb250Q3JlYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiRm9udERhdGFiYXNlLmgi
CiAjaW5jbHVkZSAiRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5oIgogI2luY2x1ZGUg
IkZvbnRQYWxldHRlVmFsdWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVDb2NvYS5oIgpAQCAt
ODc3LDE1MCArODc4LDYgQEAgdm9pZCBGb250Q2FjaGU6OnNldEZvbnRBbGxvd2xpc3QoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGlucHV0QWxsb3dsaXN0KQogICAgIEFsbG93bGlzdDo6c2luZ2xldG9u
KCkuc2V0KGlucHV0QWxsb3dsaXN0KTsKIH0KIAotY2xhc3MgRm9udERhdGFiYXNlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgRm9udERhdGFiYXNlJiBzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxs
ZWRGb250cygpCi0gICAgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERhdGFi
YXNlPiBkYXRhYmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzKTsKLSAgICAgICAgcmV0
dXJuIGRhdGFiYXNlOwotICAgIH0KLQotICAgIHN0YXRpYyBGb250RGF0YWJhc2UmIHNpbmdsZXRv
bkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxGb250RGF0YWJhc2U+IGRhdGFiYXNlKEFsbG93VXNlckluc3RhbGxlZEZv
bnRzOjpObyk7Ci0gICAgICAgIHJldHVybiBkYXRhYmFzZTsKLSAgICB9Ci0KLSAgICBGb250RGF0
YWJhc2UoY29uc3QgRm9udERhdGFiYXNlJikgPSBkZWxldGU7Ci0gICAgRm9udERhdGFiYXNlJiBv
cGVyYXRvcj0oY29uc3QgRm9udERhdGFiYXNlJikgPSBkZWxldGU7Ci0KLSAgICBzdHJ1Y3QgSW5z
dGFsbGVkRm9udCB7Ci0gICAgICAgIEluc3RhbGxlZEZvbnQoKSA9IGRlZmF1bHQ7Ci0KLSAgICAg
ICAgSW5zdGFsbGVkRm9udChDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yLCBBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKLSAgICAgICAgICAg
IDogZm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IpCi0gICAgICAgICAgICAsIGNhcGFiaWxp
dGllcyhjYXBhYmlsaXRpZXNGb3JGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvcikpCi0gICAg
ICAgIHsKLSNpZiBIQVZFKENURk9OVENSRUFURUZPUkNIQVJBQ1RFUlNXSVRITEFOR1VBR0VBTkRP
UFRJT04pCi0gICAgICAgICAgICBVTlVTRURfUEFSQU0oYWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
OwotI2Vsc2UKLSAgICAgICAgICAgIGlmIChhbGxvd1VzZXJJbnN0YWxsZWRGb250cyAhPSBBbGxv
d1VzZXJJbnN0YWxsZWRGb250czo6Tm8pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgYXV0byBhdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgICAgIGFkZEF0dHJp
YnV0ZXNGb3JJbnN0YWxsZWRGb250cyhhdHRyaWJ1dGVzLmdldCgpLCBhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyk7Ci0gICAgICAgICAgICB0aGlzLT5mb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RG
b250RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250RGVzY3JpcHRvciwgYXR0
cmlidXRlcy5nZXQoKSkpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBSZXRhaW5QdHI8
Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3I7Ci0gICAgICAgIEZvbnRTZWxlY3Rp
b25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgSW5zdGFs
bGVkRm9udEZhbWlseSB7Ci0gICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsK
LQotICAgICAgICBJbnN0YWxsZWRGb250RmFtaWx5KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIGV4
cGxpY2l0IEluc3RhbGxlZEZvbnRGYW1pbHkoVmVjdG9yPEluc3RhbGxlZEZvbnQ+JiYgaW5zdGFs
bGVkRm9udHMpCi0gICAgICAgICAgICA6IGluc3RhbGxlZEZvbnRzKFdURk1vdmUoaW5zdGFsbGVk
Rm9udHMpKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiB0aGlzLT5p
bnN0YWxsZWRGb250cykKLSAgICAgICAgICAgICAgICBleHBhbmQoZm9udCk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGV4cGFuZChjb25zdCBJbnN0YWxsZWRGb250JiBpbnN0YWxsZWRGb250
KQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXBhYmlsaXRpZXMuZXhwYW5kKGluc3RhbGxlZEZv
bnQuY2FwYWJpbGl0aWVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRGb250cy5pc0VtcHR5
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRGb250cy5zaXplKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBWZWN0b3I8SW5zdGFsbGVkRm9udD4gaW5zdGFsbGVkRm9udHM7Ci0gICAgICAgIEZv
bnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwotICAgIH07Ci0KLSAgICBjb25z
dCBJbnN0YWxsZWRGb250RmFtaWx5JiBjb2xsZWN0aW9uRm9yRmFtaWx5KGNvbnN0IFN0cmluZyYg
ZmFtaWx5TmFtZSkKLSAgICB7Ci0gICAgICAgIGF1dG8gZm9sZGVkID0gRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICAgICAgewotICAgICAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzTG9jayB9
OwotICAgICAgICAgICAgYXV0byBpdCA9IG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmZp
bmQoZm9sZGVkKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBtX2ZhbWlseU5hbWVUb0ZvbnREZXNj
cmlwdG9ycy5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKml0LT52YWx1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGF1dG8gaW5zdGFsbGVkRm9udEZhbWlseSA9IFsmXSB7Ci0gICAgICAg
ICAgICBhdXRvIGZhbWlseU5hbWVTdHJpbmcgPSBmb2xkZWQuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAg
ICAgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0
YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgICAgICBDRkRp
Y3Rpb25hcnlBZGRWYWx1ZShhdHRyaWJ1dGVzLmdldCgpLCBrQ1RGb250RmFtaWx5TmFtZUF0dHJp
YnV0ZSwgZmFtaWx5TmFtZVN0cmluZy5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRBdHRyaWJ1dGVz
Rm9ySW5zdGFsbGVkRm9udHMoYXR0cmlidXRlcy5nZXQoKSwgbV9hbGxvd1VzZXJJbnN0YWxsZWRG
b250cyk7Ci0gICAgICAgICAgICBhdXRvIGZvbnREZXNjcmlwdG9yVG9NYXRjaCA9IGFkb3B0Q0Yo
Q1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0KCkpKTsK
LSAgICAgICAgICAgIGF1dG8gbWFuZGF0b3J5QXR0cmlidXRlcyA9IGluc3RhbGxlZEZvbnRNYW5k
YXRvcnlBdHRyaWJ1dGVzKG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwotICAgICAgICAgICAg
aWYgKGF1dG8gbWF0Y2hlcyA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZU1hdGNoaW5n
Rm9udERlc2NyaXB0b3JzKGZvbnREZXNjcmlwdG9yVG9NYXRjaC5nZXQoKSwgbWFuZGF0b3J5QXR0
cmlidXRlcy5nZXQoKSkpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb3VudCA9IENGQXJyYXlH
ZXRDb3VudChtYXRjaGVzLmdldCgpKTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8SW5zdGFsbGVk
Rm9udD4gcmVzdWx0OwotICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGNvdW50KTsKLSAgICAgICAgICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEluc3RhbGxlZEZvbnQgaW5zdGFsbGVkRm9u
dChzdGF0aWNfY2FzdDxDVEZvbnREZXNjcmlwdG9yUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4
KG1hdGNoZXMuZ2V0KCksIGkpKSwgbV9hbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShpbnN0YWxsZWRGb250
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVl
PEluc3RhbGxlZEZvbnRGYW1pbHk+KFdURk1vdmUocmVzdWx0KSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxJbnN0YWxsZWRGb250RmFtaWx5PigpOwotICAg
ICAgICB9KCk7Ci0KLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fZmFtaWx5TmFtZVRvRm9udERl
c2NyaXB0b3JzTG9jayB9OwotICAgICAgICByZXR1cm4gKm1fZmFtaWx5TmFtZVRvRm9udERlc2Ny
aXB0b3JzLmFkZChmb2xkZWQuaXNvbGF0ZWRDb3B5KCksIFdURk1vdmUoaW5zdGFsbGVkRm9udEZh
bWlseSkpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBJbnN0YWxsZWRGb250
JiBmb250Rm9yUG9zdFNjcmlwdE5hbWUoY29uc3QgQXRvbVN0cmluZyYgcG9zdFNjcmlwdE5hbWUp
Ci0gICAgewotICAgICAgICBjb25zdCBhdXRvJiBmb2xkZWQgPSBGb250Q2FzY2FkZURlc2NyaXB0
aW9uOjpmb2xkZWRGYW1pbHlOYW1lKHBvc3RTY3JpcHROYW1lKTsKLSAgICAgICAgcmV0dXJuIG1f
cG9zdFNjcmlwdE5hbWVUb0ZvbnREZXNjcmlwdG9ycy5lbnN1cmUoZm9sZGVkLCBbJl0gewotICAg
ICAgICAgICAgYXV0byBwb3N0U2NyaXB0TmFtZVN0cmluZyA9IGZvbGRlZC5jcmVhdGVDRlN0cmlu
ZygpOwotICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgbmFtZUF0dHJpYnV0ZSA9IGtDVEZvbnRQb3N0
U2NyaXB0TmFtZUF0dHJpYnV0ZTsKLSAgICAgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0
Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NG
VHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJh
Y2tzKSk7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShhdHRyaWJ1dGVzLmdldCgp
LCBrQ1RGb250RW5hYmxlZEF0dHJpYnV0ZSwga0NGQm9vbGVhblRydWUpOwotICAgICAgICAgICAg
Q0ZEaWN0aW9uYXJ5QWRkVmFsdWUoYXR0cmlidXRlcy5nZXQoKSwgbmFtZUF0dHJpYnV0ZSwgcG9z
dFNjcmlwdE5hbWVTdHJpbmcuZ2V0KCkpOwotICAgICAgICAgICAgYWRkQXR0cmlidXRlc0Zvcklu
c3RhbGxlZEZvbnRzKGF0dHJpYnV0ZXMuZ2V0KCksIG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
OwotICAgICAgICAgICAgYXV0byBmb250RGVzY3JpcHRvclRvTWF0Y2ggPSBhZG9wdENGKENURm9u
dERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7Ci0gICAg
ICAgICAgICBhdXRvIG1hbmRhdG9yeUF0dHJpYnV0ZXMgPSBpbnN0YWxsZWRGb250TWFuZGF0b3J5
QXR0cmlidXRlcyhtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKLSAgICAgICAgICAgIGF1dG8g
bWF0Y2ggPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGluZ0ZvbnREZXNjcmlw
dG9yKGZvbnREZXNjcmlwdG9yVG9NYXRjaC5nZXQoKSwgbWFuZGF0b3J5QXR0cmlidXRlcy5nZXQo
KSkpOwotICAgICAgICAgICAgcmV0dXJuIEluc3RhbGxlZEZvbnQobWF0Y2guZ2V0KCksIG1fYWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpOwotICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAg
fQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICB7Ci0gICAgICAgICAgICBMb2Nr
ZXIgbG9ja2VyIHsgbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnNMb2NrIH07Ci0gICAgICAg
ICAgICBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9ycy5jbGVhcigpOwotICAgICAgICB9Ci0g
ICAgICAgIG1fcG9zdFNjcmlwdE5hbWVUb0ZvbnREZXNjcmlwdG9ycy5jbGVhcigpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8Rm9udERhdGFiYXNl
PjsKLQotICAgIEZvbnREYXRhYmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJ
bnN0YWxsZWRGb250cykKLSAgICAgICAgOiBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzKGFsbG93
VXNlckluc3RhbGxlZEZvbnRzKQotICAgIHsKLSAgICB9Ci0KLSAgICBMb2NrIG1fZmFtaWx5TmFt
ZVRvRm9udERlc2NyaXB0b3JzTG9jazsKLSAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVf
cHRyPEluc3RhbGxlZEZvbnRGYW1pbHk+PiBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9ycyBX
VEZfR1VBUkRFRF9CWV9MT0NLKG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzTG9jayk7Ci0g
ICAgSGFzaE1hcDxTdHJpbmcsIEluc3RhbGxlZEZvbnQ+IG1fcG9zdFNjcmlwdE5hbWVUb0ZvbnRE
ZXNjcmlwdG9yczsKLSAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBtX2FsbG93VXNlckluc3Rh
bGxlZEZvbnRzOwotfTsKLQogLy8gQmVjYXVzZSB0aGlzIHN0cnVjdCBob2xkcyBpbnRlcm1lZGlh
dGUgdmFsdWVzIHdoaWNoIG1heSBiZSBpbiB0aGUgY29tcHJlc3NlZCAtMSAtIDEgR1ggcmFuZ2Us
IHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSByZWxhdGl2ZWx5IGxhcmdlCiAvLyBxdWFudGl6YXRp
b24gb2YgRm9udFNlbGVjdGlvblZhbHVlLiBJbnN0ZWFkLCBkbyB0aGlzIGxvZ2ljIHdpdGggZmxv
YXRzLgogc3RydWN0IE1pbk1heCB7CkBAIC0xMTg3LDkgKzEwNDQsMTQgQEAgc3RhdGljIGNvbnN0
IEZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udCogZmluZENsb3Nlc3RGb250KGNvbnN0IEZvbnRE
YXRhYmFzZTo6SW4KICAgICByZXR1cm4gJmZhbWlseUZvbnRzLmluc3RhbGxlZEZvbnRzW2luZGV4
XTsKIH0KIAorRm9udERhdGFiYXNlJiBGb250Q2FjaGU6OmRhdGFiYXNlKEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQoreworICAgIHJldHVybiBhbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzID8gbV9kYXRh
YmFzZUFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzIDogbV9kYXRhYmFzZURpc2FsbG93aW5nVXNl
ckluc3RhbGxlZEZvbnRzOworfQorCiBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4g
Rm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5z
dGFsbGVkRm9udHMpCiB7Ci0gICAgYXV0byYgZm9udERhdGFiYXNlID0gYWxsb3dVc2VySW5zdGFs
bGVkRm9udHMgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA/IEZvbnREYXRhYmFzZTo6
c2luZ2xldG9uQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKSA6IEZvbnREYXRhYmFzZTo6c2lu
Z2xldG9uRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKTsKKyAgICBhdXRvJiBmb250RGF0
YWJhc2UgPSBkYXRhYmFzZShhbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAgICAgY29uc3QgYXV0
byYgZm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHlOYW1lLnN0
cmluZygpKTsKICAgICBpZiAoZm9udHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwpA
QCAtMTIyNiw3ICsxMDg4LDcgQEAgc3RhdGljIGJvb2wgaXNBbGxvd2xpc3RlZEZhbWlseShjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHkpCiAgICAgcmV0dXJuIEFsbG93bGlzdDo6c2luZ2xldG9uKCku
YWxsb3dzKGZhbWlseSk7CiB9CiAKLXN0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1
cFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVz
dCByZXF1ZXN0LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJ
bnN0YWxsZWRGb250cykKK3N0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdpdGhG
YW1pbHkoRm9udERhdGFiYXNlJiBmb250RGF0YWJhc2UsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVxdWVzdCwgZmxvYXQgc2l6ZSkKIHsKICAgICBpZiAo
IWlzQWxsb3dsaXN0ZWRGYW1pbHkoZmFtaWx5KSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciB9
OwpAQCAtMTIzNiw3ICsxMDk4LDYgQEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250TG9v
a3VwV2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAgICAgICAg
cmV0dXJuIHsgbnVsbHB0ciB9OwogICAgIH0KIAotICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFs
bG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBG
b250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250
RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7CiAgICAg
Y29uc3QgYXV0byYgZmFtaWx5Rm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWls
eShmYW1pbHkuc3RyaW5nKCkpOwogICAgIGlmIChmYW1pbHlGb250cy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgLy8gVGhlIENTUyBzcGVjIHN0YXRlcyB0aGF0IGZvbnQtZmFtaWx5IG9ubHkgYWNjZXB0
cyBhIG5hbWUgb2YgYW4gYWN0dWFsIGZvbnQgZmFtaWx5LiBIb3dldmVyLCBpbiBXZWJLaXQsIHdl
IGNsYWltIHRvIGFsc28KQEAgLTEyODEsMTAgKzExNDIsNiBAQCBzdGF0aWMgdm9pZCBpbnZhbGlk
YXRlRm9udENhY2hlKCkKICAgICAgICAgLy8gRklYTUU6IFdvcmtlcnMgbmVlZCB0byBhY2Nlc3Mg
Rm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dENhY2hlLgogICAgICAgICBjbGVhckZvbnRG
YW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHRDYWNoZSgpOwogCi0gICAgICAgIC8vIEZJWE1FOiBX
b3JrZXJzIG5lZWQgdG8gYWNjZXNzIEZvbnREYXRhYmFzZS4KLSAgICAgICAgRm9udERhdGFiYXNl
OjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpLmNsZWFyKCk7Ci0gICAgICAg
IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKS5j
bGVhcigpOwotCiAgICAgICAgIEZvbnRDYWNoZTo6aW52YWxpZGF0ZUFsbEZvbnRDYWNoZXMoKTsK
ICAgICB9KTsKIH0KQEAgLTEzNTIsMTUgKzEyMDksMTcgQEAgc3RhdGljIFJldGFpblB0cjxDVEZv
bnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
LAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4g
Zm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgRm9udENyZWF0aW9uQ29udGV4dCYgZm9udENy
ZWF0aW9uQ29udGV4dCwgZmxvYXQgc2l6ZSkKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBm
b250V2l0aEZhbWlseShGb250RGF0YWJhc2UmIGZvbnREYXRhYmFzZSwgY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
Rm9udENyZWF0aW9uQ29udGV4dCYgZm9udENyZWF0aW9uQ29udGV4dCwgZmxvYXQgc2l6ZSkKIHsK
KyAgICBBU1NFUlQoZm9udERhdGFiYXNlLmFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgPT0gZm9u
dERlc2NyaXB0aW9uLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkpOworCiAgICAgaWYg
KGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgRm9udExv
b2t1cCBmb250TG9va3VwOwogICAgIGZvbnRMb29rdXAucmVzdWx0ID0gZm9udFdpdGhGYW1pbHlT
cGVjaWFsQ2FzZShmYW1pbHksIGZvbnREZXNjcmlwdGlvbiwgc2l6ZSwgZm9udERlc2NyaXB0aW9u
LnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkpOwogICAgIGlmICghZm9udExvb2t1cC5y
ZXN1bHQpCi0gICAgICAgIGZvbnRMb29rdXAgPSBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5
KGZhbWlseSwgZm9udERlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCksIHNpemUsIGZv
bnREZXNjcmlwdGlvbi5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpKTsKKyAgICAgICAg
Zm9udExvb2t1cCA9IHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoZm9udERhdGFiYXNlLCBm
YW1pbHksIGZvbnREZXNjcmlwdGlvbi5mb250U2VsZWN0aW9uUmVxdWVzdCgpLCBzaXplKTsKICAg
ICByZXR1cm4gcHJlcGFyZVBsYXRmb3JtRm9udChmb250TG9va3VwLnJlc3VsdC5nZXQoKSwgZm9u
dERlc2NyaXB0aW9uLCBmb250Q3JlYXRpb25Db250ZXh0LCAhZm9udExvb2t1cC5jcmVhdGVkRnJv
bVBvc3RTY3JpcHROYW1lKTsKIH0KIApAQCAtMTM5MSw3ICsxMjUwLDggQEAgc3RkOjp1bmlxdWVf
cHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGUKIHsKICAgICBmbG9hdCBzaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
UGl4ZWxTaXplKCk7CiAKLSAgICBhdXRvIGZvbnQgPSBmb250V2l0aEZhbWlseShmYW1pbHksIGZv
bnREZXNjcmlwdGlvbiwgZm9udENyZWF0aW9uQ29udGV4dCwgc2l6ZSk7CisgICAgYXV0byYgZm9u
dERhdGFiYXNlID0gZGF0YWJhc2UoZm9udERlc2NyaXB0aW9uLnNob3VsZEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKCkpOworICAgIGF1dG8gZm9udCA9IGZvbnRXaXRoRmFtaWx5KGZvbnREYXRhYmFz
ZSwgZmFtaWx5LCBmb250RGVzY3JpcHRpb24sIGZvbnRDcmVhdGlvbkNvbnRleHQsIHNpemUpOwog
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmICghZm9udCkgewpAQCAtMTQwMiw3ICsxMjYyLDcg
QEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKICAgICAgICAgLy8gSWdub3JlIHRoZSByZXN1bHQg
YmVjYXVzZSB3ZSB3YW50IHRvIHVzZSBvdXIgb3duIGFsZ29yaXRobSB0byBhY3R1YWxseSBmaW5k
IHRoZSBmb250LgogICAgICAgICBhdXRvQWN0aXZhdGVGb250KGZhbWlseS5zdHJpbmcoKSwgc2l6
ZSk7CiAKLSAgICAgICAgZm9udCA9IGZvbnRXaXRoRmFtaWx5KGZhbWlseSwgZm9udERlc2NyaXB0
aW9uLCBmb250Q3JlYXRpb25Db250ZXh0LCBzaXplKTsKKyAgICAgICAgZm9udCA9IGZvbnRXaXRo
RmFtaWx5KGZvbnREYXRhYmFzZSwgZmFtaWx5LCBmb250RGVzY3JpcHRpb24sIGZvbnRDcmVhdGlv
bkNvbnRleHQsIHNpemUpOwogICAgIH0KICNlbmRpZgogCkBAIC0xNDM0LDggKzEyOTQsOCBAQCB2
b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1QdXJnZUluYWN0aXZlRm9udERhdGEoKQogICAgIGZvciAo
YXV0byYgZm9udCA6IHRvUmVtb3ZlKQogICAgICAgICBmYWxsYmFja0RlZHVwU2V0KCkucmVtb3Zl
KGZvbnQpOwogCi0gICAgRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxs
ZWRGb250cygpLmNsZWFyKCk7Ci0gICAgRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2lu
Z1VzZXJJbnN0YWxsZWRGb250cygpLmNsZWFyKCk7CisgICAgbV9kYXRhYmFzZUFsbG93aW5nVXNl
ckluc3RhbGxlZEZvbnRzLmNsZWFyKCk7CisgICAgbV9kYXRhYmFzZURpc2FsbG93aW5nVXNlcklu
c3RhbGxlZEZvbnRzLmNsZWFyKCk7CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAt
MTY3NCw5ICsxNTM0LDcgQEAgdm9pZCBGb250Q2FjaGU6OnByZXdhcm0oY29uc3QgUHJld2FybUlu
Zm9ybWF0aW9uJiBwcmV3YXJtSW5mb3JtYXRpb24pCiAgICAgaWYgKCFtX3ByZXdhcm1RdWV1ZSkK
ICAgICAgICAgbV9wcmV3YXJtUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiV2ViS2l0IGZvbnQg
cHJld2FybSBxdWV1ZSIpOwogCi0gICAgYXV0byYgZGF0YWJhc2UgPSBGb250RGF0YWJhc2U6OnNp
bmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7Ci0KLSAgICBtX3ByZXdhcm1R
dWV1ZS0+ZGlzcGF0Y2goWyZkYXRhYmFzZSwgcHJld2FybUluZm9ybWF0aW9uID0gcHJld2FybUlu
Zm9ybWF0aW9uLmlzb2xhdGVkQ29weSgpXSB7CisgICAgbV9wcmV3YXJtUXVldWUtPmRpc3BhdGNo
KFsmZGF0YWJhc2UgPSBtX2RhdGFiYXNlRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMsIHBy
ZXdhcm1JbmZvcm1hdGlvbiA9IHByZXdhcm1JbmZvcm1hdGlvbi5pc29sYXRlZENvcHkoKV0gewog
ICAgICAgICBmb3IgKGF1dG8mIGZhbWlseSA6IHByZXdhcm1JbmZvcm1hdGlvbi5zZWVuRmFtaWxp
ZXMpCiAgICAgICAgICAgICBkYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRE
YXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
RGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3NWQwMjMxMzhkODc0NjZlZmY2NDliMzVmM2E3ZjRj
YTQzYmEwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250RGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udERhdGFiYXNlLmgiCisK
KyNpbmNsdWRlICJGb250Q2FjaGVDb3JlVGV4dC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24uaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250OjpJbnN0YWxsZWRG
b250KENURm9udERlc2NyaXB0b3JSZWYgZm9udERlc2NyaXB0b3IsIEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorICAgIDogZm9udERlc2NyaXB0b3IoZm9u
dERlc2NyaXB0b3IpCisgICAgLCBjYXBhYmlsaXRpZXMoY2FwYWJpbGl0aWVzRm9yRm9udERlc2Ny
aXB0b3IoZm9udERlc2NyaXB0b3IpKQoreworI2lmIEhBVkUoQ1RGT05UQ1JFQVRFRk9SQ0hBUkFD
VEVSU1dJVEhMQU5HVUFHRUFORE9QVElPTikKKyAgICBVTlVTRURfUEFSQU0oYWxsb3dVc2VySW5z
dGFsbGVkRm9udHMpOworI2Vsc2UKKyAgICBpZiAoYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgIT0g
QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBh
dHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9u
dHMoYXR0cmlidXRlcy5nZXQoKSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgIHRoaXMt
PmZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhB
dHRyaWJ1dGVzKGZvbnREZXNjcmlwdG9yLCBhdHRyaWJ1dGVzLmdldCgpKSk7CisjZW5kaWYKK30K
KworRm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5OjpJbnN0YWxsZWRGb250RmFtaWx5
KFZlY3RvcjxJbnN0YWxsZWRGb250PiYmIGluc3RhbGxlZEZvbnRzKQorICAgIDogaW5zdGFsbGVk
Rm9udHMoV1RGTW92ZShpbnN0YWxsZWRGb250cykpCit7CisgICAgZm9yIChhdXRvJiBmb250IDog
dGhpcy0+aW5zdGFsbGVkRm9udHMpCisgICAgICAgIGV4cGFuZChmb250KTsKK30KKwordm9pZCBG
b250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnRGYW1pbHk6OmV4cGFuZChjb25zdCBJbnN0YWxsZWRG
b250JiBpbnN0YWxsZWRGb250KQoreworICAgIGNhcGFiaWxpdGllcy5leHBhbmQoaW5zdGFsbGVk
Rm9udC5jYXBhYmlsaXRpZXMpOworfQorCitjb25zdCBGb250RGF0YWJhc2U6Okluc3RhbGxlZEZv
bnRGYW1pbHkmIEZvbnREYXRhYmFzZTo6Y29sbGVjdGlvbkZvckZhbWlseShjb25zdCBTdHJpbmcm
IGZhbWlseU5hbWUpCit7CisgICAgYXV0byBmb2xkZWQgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9u
Ojpmb2xkZWRGYW1pbHlOYW1lKGZhbWlseU5hbWUpOworICAgIHsKKyAgICAgICAgTG9ja2VyIGxv
Y2tlciB7IG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzTG9jayB9OworICAgICAgICBhdXRv
IGl0ID0gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnMuZmluZChmb2xkZWQpOworICAgICAg
ICBpZiAoaXQgIT0gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnMuZW5kKCkpCisgICAgICAg
ICAgICByZXR1cm4gKml0LT52YWx1ZTsKKyAgICB9CisKKyAgICBhdXRvIGluc3RhbGxlZEZvbnRG
YW1pbHkgPSBbJl0geworICAgICAgICBhdXRvIGZhbWlseU5hbWVTdHJpbmcgPSBmb2xkZWQuY3Jl
YXRlQ0ZTdHJpbmcoKTsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlv
bmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAg
ICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoYXR0cmlidXRlcy5nZXQoKSwga0NURm9udEZhbWls
eU5hbWVBdHRyaWJ1dGUsIGZhbWlseU5hbWVTdHJpbmcuZ2V0KCkpOworICAgICAgICBhZGRBdHRy
aWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoYXR0cmlidXRlcy5nZXQoKSwgbV9hbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7CisgICAgICAgIGF1dG8gZm9udERlc2NyaXB0b3JUb01hdGNoID0gYWRvcHRD
RihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkp
OworICAgICAgICBhdXRvIG1hbmRhdG9yeUF0dHJpYnV0ZXMgPSBpbnN0YWxsZWRGb250TWFuZGF0
b3J5QXR0cmlidXRlcyhtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKKyAgICAgICAgaWYgKGF1
dG8gbWF0Y2hlcyA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZU1hdGNoaW5nRm9udERl
c2NyaXB0b3JzKGZvbnREZXNjcmlwdG9yVG9NYXRjaC5nZXQoKSwgbWFuZGF0b3J5QXR0cmlidXRl
cy5nZXQoKSkpKSB7CisgICAgICAgICAgICBhdXRvIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KG1h
dGNoZXMuZ2V0KCkpOworICAgICAgICAgICAgVmVjdG9yPEluc3RhbGxlZEZvbnQ+IHJlc3VsdDsK
KyAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKKyAgICAg
ICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBJbnN0YWxsZWRGb250IGluc3RhbGxlZEZvbnQoc3RhdGljX2Nhc3Q8Q1RGb250RGVzY3Jp
cHRvclJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChtYXRjaGVzLmdldCgpLCBpKSksIG1fYWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShpbnN0YWxsZWRGb250KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxJbnN0YWxsZWRGb250RmFtaWx5PihXVEZNb3ZlKHJlc3VsdCkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEluc3RhbGxlZEZvbnRGYW1p
bHk+KCk7CisgICAgfSgpOworCisgICAgTG9ja2VyIGxvY2tlciB7IG1fZmFtaWx5TmFtZVRvRm9u
dERlc2NyaXB0b3JzTG9jayB9OworICAgIHJldHVybiAqbV9mYW1pbHlOYW1lVG9Gb250RGVzY3Jp
cHRvcnMuYWRkKGZvbGRlZC5pc29sYXRlZENvcHkoKSwgV1RGTW92ZShpbnN0YWxsZWRGb250RmFt
aWx5KSkuaXRlcmF0b3ItPnZhbHVlOworfQorCitjb25zdCBGb250RGF0YWJhc2U6Okluc3RhbGxl
ZEZvbnQmIEZvbnREYXRhYmFzZTo6Zm9udEZvclBvc3RTY3JpcHROYW1lKGNvbnN0IEF0b21TdHJp
bmcmIHBvc3RTY3JpcHROYW1lKQoreworICAgIGNvbnN0IGF1dG8mIGZvbGRlZCA9IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZvbGRlZEZhbWlseU5hbWUocG9zdFNjcmlwdE5hbWUpOworICAgIHJl
dHVybiBtX3Bvc3RTY3JpcHROYW1lVG9Gb250RGVzY3JpcHRvcnMuZW5zdXJlKGZvbGRlZCwgWyZd
IHsKKyAgICAgICAgYXV0byBwb3N0U2NyaXB0TmFtZVN0cmluZyA9IGZvbGRlZC5jcmVhdGVDRlN0
cmluZygpOworICAgICAgICBDRlN0cmluZ1JlZiBuYW1lQXR0cmlidXRlID0ga0NURm9udFBvc3RT
Y3JpcHROYW1lQXR0cmlidXRlOworICAgICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBhZG9wdENGKENG
RGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OworICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShhdHRyaWJ1dGVzLmdldCgpLCBrQ1RGb250
RW5hYmxlZEF0dHJpYnV0ZSwga0NGQm9vbGVhblRydWUpOworICAgICAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShhdHRyaWJ1dGVzLmdldCgpLCBuYW1lQXR0cmlidXRlLCBwb3N0U2NyaXB0TmFtZVN0
cmluZy5nZXQoKSk7CisgICAgICAgIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhhdHRy
aWJ1dGVzLmdldCgpLCBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKKyAgICAgICAgYXV0byBm
b250RGVzY3JpcHRvclRvTWF0Y2ggPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRo
QXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7CisgICAgICAgIGF1dG8gbWFuZGF0b3J5QXR0
cmlidXRlcyA9IGluc3RhbGxlZEZvbnRNYW5kYXRvcnlBdHRyaWJ1dGVzKG1fYWxsb3dVc2VySW5z
dGFsbGVkRm9udHMpOworICAgICAgICBhdXRvIG1hdGNoID0gYWRvcHRDRihDVEZvbnREZXNjcmlw
dG9yQ3JlYXRlTWF0Y2hpbmdGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvclRvTWF0Y2guZ2V0
KCksIG1hbmRhdG9yeUF0dHJpYnV0ZXMuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIEluc3RhbGxl
ZEZvbnQobWF0Y2guZ2V0KCksIG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgIH0pLml0
ZXJhdG9yLT52YWx1ZTsKK30KKwordm9pZCBGb250RGF0YWJhc2U6OmNsZWFyKCkKK3sKKyAgICB7
CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9yc0xv
Y2sgfTsKKyAgICAgICAgbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnMuY2xlYXIoKTsKKyAg
ICB9CisgICAgbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzLmNsZWFyKCk7Cit9CisK
K0ZvbnREYXRhYmFzZTo6Rm9udERhdGFiYXNlKEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93
VXNlckluc3RhbGxlZEZvbnRzKQorICAgIDogbV9hbGxvd1VzZXJJbnN0YWxsZWRGb250cyhhbGxv
d1VzZXJJbnN0YWxsZWRGb250cykKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERhdGFi
YXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RGF0YWJh
c2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44ZTAxOTI1YmU4NGMyMzQxZDhkYjhjNGUxODY1Y2JlM2I0YzYwOWEx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udERhdGFiYXNlLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJGb250U2VsZWN0aW9uQWxnb3JpdGhtLmgiCisjaW5jbHVk
ZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250RGF0YWJh
c2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnREYXRhYmFzZSk7CisKK3B1YmxpYzoK
KyAgICBGb250RGF0YWJhc2UoQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworCisgICAgc3RydWN0
IEluc3RhbGxlZEZvbnQgeworICAgICAgICBJbnN0YWxsZWRGb250KCkgPSBkZWZhdWx0OworICAg
ICAgICBJbnN0YWxsZWRGb250KENURm9udERlc2NyaXB0b3JSZWYsIEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzKTsKKworICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERl
c2NyaXB0b3I7CisgICAgICAgIEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVz
OworICAgIH07CisKKyAgICBzdHJ1Y3QgSW5zdGFsbGVkRm9udEZhbWlseSB7CisgICAgICAgIFdU
Rl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKworICAgICAgICBJbnN0YWxsZWRGb250RmFt
aWx5KCkgPSBkZWZhdWx0OworCisgICAgICAgIGV4cGxpY2l0IEluc3RhbGxlZEZvbnRGYW1pbHko
VmVjdG9yPEluc3RhbGxlZEZvbnQ+JiYgaW5zdGFsbGVkRm9udHMpOworCisgICAgICAgIHZvaWQg
ZXhwYW5kKGNvbnN0IEluc3RhbGxlZEZvbnQmKTsKKyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gaW5zdGFsbGVkRm9udHMuaXNFbXB0eSgpOyB9CisgICAgICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gaW5zdGFsbGVkRm9udHMuc2l6ZSgpOyB9CisKKyAgICAgICAg
VmVjdG9yPEluc3RhbGxlZEZvbnQ+IGluc3RhbGxlZEZvbnRzOworICAgICAgICBGb250U2VsZWN0
aW9uQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICB9OworCisgICAgQWxsb3dVc2VySW5z
dGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSBjb25zdCB7IHJldHVybiBtX2Fs
bG93VXNlckluc3RhbGxlZEZvbnRzOyB9CisgICAgY29uc3QgSW5zdGFsbGVkRm9udEZhbWlseSYg
Y29sbGVjdGlvbkZvckZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpOworICAgIGNvbnN0
IEluc3RhbGxlZEZvbnQmIGZvbnRGb3JQb3N0U2NyaXB0TmFtZShjb25zdCBBdG9tU3RyaW5nJiBw
b3N0U2NyaXB0TmFtZSk7CisgICAgdm9pZCBjbGVhcigpOworCitwcml2YXRlOgorICAgIExvY2sg
bV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnNMb2NrOworICAgIEhhc2hNYXA8U3RyaW5nLCBz
dGQ6OnVuaXF1ZV9wdHI8SW5zdGFsbGVkRm9udEZhbWlseT4+IG1fZmFtaWx5TmFtZVRvRm9udERl
c2NyaXB0b3JzIFdURl9HVUFSREVEX0JZX0xPQ0sobV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRv
cnNMb2NrKTsKKyAgICBIYXNoTWFwPFN0cmluZywgSW5zdGFsbGVkRm9udD4gbV9wb3N0U2NyaXB0
TmFtZVRvRm9udERlc2NyaXB0b3JzOworICAgIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIG1fYWxs
b3dVc2VySW5zdGFsbGVkRm9udHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="471677"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>461036</attachid>
            <date>2022-07-19 22:13:42 -0700</date>
            <delta_ts>2022-07-20 13:20:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233986-20220720171340.patch</filename>
            <type>text/plain</type>
            <size>33572</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">RnJvbSAxMzY0ZmNmZDVlMTk1YjQyMTNiMWQ1ZTQ2MGQxMDhhYzEwOTIxMGZmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYW1lcm9uIE1jQ29ybWFjayA8aGV5Y2FtQGFwcGxlLmNvbT4K
RGF0ZTogV2VkLCAyNCBOb3YgMjAyMSAxNTowNToxNiArMTEwMApTdWJqZWN0OiBbUEFUQ0hdIE1v
dmUgRm9udERhdGFiYXNlcyB0byBGb250Q2FjaGUKIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzM5ODYKClJldmlld2VkIGJ5IE15bGVzIEMuIE1heGZpZWxkLgoKV2Ug
Y3VycmVudGx5IGhhdmUgdHdvIEZvbnREYXRhYmFzZSBvYmplY3RzIHdlIGNyZWF0ZSwgaW4KRm9u
dERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cyBhbmQKRm9udERh
dGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cy4gVGhlc2UgY2Fu
IGJlCmFjY2Vzc2VkIGZyb20gd29ya2VyIHRocmVhZHMgdXNpbmcgT2Zmc2NyZWVuQ2FudmFzLCBh
bmQgc28gbXVzdApiZSBtYWRlIHRocmVhZCBzYWZlLgoKVGhpcyBwYXRjaCBtb3ZlcyB0aGUgRm9u
dERhdGFiYXNlIGluc3RhbmNlcyB0byBsaXZlIG9uIHRoZSBGb250Q2FjaGUsCm9mIHdoaWNoIHdl
IGFscmVhZHkgaGF2ZSBvbmUgcGVyIHRocmVhZC4KCldlIGFsc28gbW92ZSB0aGUgRm9udERhdGFi
YXNlIGRlZmluaXRpb24gdG8gYSBzZXBhcmF0ZSBmaWxlLCB0byByZWR1Y2UKc2ltcGxpZnkgRm9u
dENhc2NhZGUue2gsY3BwfSBmdXJ0aGVyLgoKKiBQbGF0Zm9ybU1hYy5jbWFrZToKKiBTb3VyY2Vz
Q29jb2EudHh0OgoqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5jcHA6CihXZWJDb3JlOjpGb250Q2FjaGU6OmRhdGFiYXNlKToKKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KToKKFdlYkNv
cmU6OnBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkpOgooV2ViQ29yZTo6aW52YWxpZGF0ZUZv
bnRDYWNoZSk6CihXZWJDb3JlOjpmb250V2l0aEZhbWlseSk6CihXZWJDb3JlOjpGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgooV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybVB1
cmdlSW5hY3RpdmVGb250RGF0YSk6CihXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgooV2Vi
Q29yZTo6Rm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cyk6
IERlbGV0ZWQuCihXZWJDb3JlOjpGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNl
ckluc3RhbGxlZEZvbnRzKTogRGVsZXRlZC4KKFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6SW5zdGFs
bGVkRm9udDo6SW5zdGFsbGVkRm9udCk6IERlbGV0ZWQuCihXZWJDb3JlOjpGb250RGF0YWJhc2U6
Okluc3RhbGxlZEZvbnRGYW1pbHk6Okluc3RhbGxlZEZvbnRGYW1pbHkpOiBEZWxldGVkLgooV2Vi
Q29yZTo6Rm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5OjpleHBhbmQpOiBEZWxldGVk
LgooV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5Ojppc0VtcHR5IGNv
bnN0KTogRGVsZXRlZC4KKFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udEZhbWls
eTo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCihXZWJDb3JlOjpGb250RGF0YWJhc2U6OmNvbGxlY3Rp
b25Gb3JGYW1pbHkpOiBEZWxldGVkLgooV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpmb250Rm9yUG9z
dFNjcmlwdE5hbWUpOiBEZWxldGVkLgooV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpjbGVhcik6IERl
bGV0ZWQuCihXZWJDb3JlOjpGb250RGF0YWJhc2U6OkZvbnREYXRhYmFzZSk6IERlbGV0ZWQuCiog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERhdGFiYXNlLmNwcDogQWRkZWQuCihXZWJDb3Jl
OjpGb250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQ6Okluc3RhbGxlZEZvbnQpOgooV2ViQ29yZTo6
Rm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5OjpJbnN0YWxsZWRGb250RmFtaWx5KToK
KFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udEZhbWlseTo6ZXhwYW5kKToKKFdl
YkNvcmU6OkZvbnREYXRhYmFzZTo6Y29sbGVjdGlvbkZvckZhbWlseSk6CihXZWJDb3JlOjpGb250
RGF0YWJhc2U6OmZvbnRGb3JQb3N0U2NyaXB0TmFtZSk6CihXZWJDb3JlOjpGb250RGF0YWJhc2U6
OmNsZWFyKToKKFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6Rm9udERhdGFiYXNlKToKKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250RGF0YWJhc2UuaDogQWRkZWQuCihXZWJDb3JlOjpGb250RGF0
YWJhc2U6Okluc3RhbGxlZEZvbnRGYW1pbHk6OmlzRW1wdHkgY29uc3QpOgooV2ViQ29yZTo6Rm9u
dERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5OjpzaXplIGNvbnN0KToKKFdlYkNvcmU6OkZv
bnREYXRhYmFzZTo6YWxsb3dVc2VySW5zdGFsbGVkRm9udHMgY29uc3QpOgotLS0KIFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlICAgICAgICAgICAgICB8ICAgMiArCiBTb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0ICAgICAgICAgICAgICAgfCAgIDEgKwogLi4uL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIHwgICA3ICsKIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oICB8ICAgOCArCiAuLi4vZ3JhcGhpY3MvY29j
b2EvRm9udENhY2hlQ29yZVRleHQuY3BwICAgICAgfCAxNzggKystLS0tLS0tLS0tLS0tLS0tCiAu
Li4vcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERhdGFiYXNlLmNwcCAgfCAxMjcgKysrKysr
KysrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREYXRhYmFzZS5oICAgIHwg
IDgwICsrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDI0MyBpbnNlcnRpb25zKCspLCAxNjAgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udERhdGFiYXNlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREYXRhYmFzZS5oCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQppbmRleCA1NWFmOThhNzRmYjAuLmM3OTMzMjhlMGQ4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKQEAgLTMxMyw2ICszMTMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250RGF0YWJhc2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTY2MSw2ICs2NjIsNyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Db2xvckNvY29hLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RGF0YWJhc2UuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
Q29jb2EudHh0CmluZGV4IDBjNzdkMzVjZTZmZS4uOWYwNTFkYzhkZWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNDb2NvYS50eHQKQEAgLTM5Nyw2ICszOTcsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q2FjaGVDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRl
eHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udERhdGFiYXNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERlc2NyaXB0
aW9uQ29jb2EuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNh
dGlvbkNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0
YUNvY29hLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggYTgwYTUwMmEzNjE1Li40MGFlZDkyMmI0NGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjIsNyAr
MTAyMiw5IEBACiAJCTMyQTcwRDUzMjgzNjEzNEIwMDgwMDYwQyAvKiBEZWNvbXBvc2VkR2x5cGhz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMkE3MEQ1
MjI4MzYxMzRBMDA4MDA2MEMgLyogRGVjb21wb3NlZEdseXBocy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMyQTcwRDU4MjgzNjEzOEUwMDgwMDYw
QyAvKiBQb3NpdGlvbmVkR2x5cGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMkE3MEQ1NjI4MzYxMzhEMDA4MDA2MEMgLyogUG9zaXRpb25lZEdseXBo
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMz
NDQwOEM0MzNGOENBNEMxMDA0NDIzNCAvKiBTVkdMYXllclRyYW5zZm9ybVVwZGF0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzNDQwNzc0MTJEOUJD
NEEwMDA0NDIzNCAvKiBTVkdMYXllclRyYW5zZm9ybVVwZGF0ZXIuaCAqLzsgfTsKKwkJMzIxMTJF
MEYyNzRCNDdDRjAwNzA0N0E4IC8qIFN5c3RlbUZhbGxiYWNrQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMyODk5RkI5Mjc0QjQxMEMwMDg1NUE5
RCAvKiBTeXN0ZW1GYWxsYmFja0NhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzIxMTJFMEYyNzRCNDdDRjAwNzA0N0E4IC8qIFN5c3RlbUZh
bGxiYWNrRm9udENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMjg5OUZCOTI3NEI0MTBDMDA4NTVBOUQgLyogU3lzdGVtRmFsbGJhY2tGb250Q2Fj
aGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkz
MjU5MDVEQzI3NERFMUQ4MDA3QjdCNjUgLyogRm9udERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMjU5MDVEQTI3NERFMUQ3MDA3QjdCNjUg
LyogRm9udERhdGFiYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMzJFQUZCOEQyNzRDNUVBNjAwNjUwNTU3IC8qIEZvbnRDYXNjYWRlQ2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMyRUFGQjhC
Mjc0QzVFQTUwMDY1MDU1NyAvKiBGb250Q2FzY2FkZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzM1MDNDOUExMDE3OUE3NDAwM0I0N0Ux
IC8qIE5vdGlmaWNhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzM1MDNDOTkxMDE3OUE3NDAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbkNs
aWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTMzNTAzQ0E0MTAxNzlBRDcwMDNCNDdFMSAvKiBKU05vdGlmaWNhdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM1MDNDQTAxMDE3OUFENzAwM0I0
N0UxIC8qIEpTTm90aWZpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTg1NzIsNiArODU3NCw4IEBACiAJCTMyQjE3NjE0Mjg1RkREQTEw
MEVENkRCOCAvKiBHcmFkaWVudENvbG9yU3RvcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFk
aWVudENvbG9yU3RvcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMyQjE3NjE1
Mjg1RkREQTEwMEVENkRCOCAvKiBHcmFkaWVudENvbG9yU3RvcHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhZGllbnRDb2xvclN0b3BzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzJFMjY4RkMyODVGQzhGNzAwNDY2MEJCIC8qIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xvckludGVycG9sYXRp
b25NZXRob2QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMjU5MDVEQTI3NERF
MUQ3MDA3QjdCNjUgLyogRm9udERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvbnREYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMjU5
MDVERDI3NERFMUUzMDA3QjdCNjUgLyogRm9udERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvbnREYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMyODk5
RkI3Mjc0QjQxMEMwMDg1NUE5RCAvKiBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMyODk5RkI5Mjc0QjQxMEMwMDg1NUE5RCAvKiBTeXN0ZW1GYWxsYmFj
a0ZvbnRDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMkQzMTA0RTI3NEM2ODdCMDAzM0FCMkYgLyog
Rm9udENhc2NhZGVDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FzY2FkZUNhY2hl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NzM3LDYgKzI5NzQxLDggQEAK
IAkJCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVDb2NvYS5jcHAgKi8s
CiAJCQkJMUM2RkQ4QjAyNTBBMzVGMTAwRDZFOTIwIC8qIEZvbnRDb2NvYS5jcHAgKi8sCiAJCQkJ
RjRBMDY0QzYyNzdFNDhDNjAwQjA2QTE3IC8qIEZvbnRDb2NvYS5oICovLAorCQkJCTMyNTkwNURE
Mjc0REUxRTMwMDdCN0I2NSAvKiBGb250RGF0YWJhc2UuY3BwICovLAorCQkJCTMyNTkwNURBMjc0
REUxRDcwMDdCN0I2NSAvKiBGb250RGF0YWJhc2UuaCAqLywKIAkJCQkxQzEyQUMyQzFFRTc3OTk1
MDA3OUUwQTAgLyogRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwICovLAogCQkJCTFDMTJBQzI4MUVF
Nzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcCAqLywK
IAkJCQkxQzEyQUMyOTFFRTc3OEFFMDA3OUUwQTAgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25D
b3JlVGV4dC5oICovLApAQCAtMzUxNjUsNiArMzUxNzEsNyBAQAogCQkJCUY0QTA2NEM4Mjc3RTQ4
QzkwMEIwNkExNyAvKiBGb250Q29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMjY2NzFCMjZG
QTkzMkYwMDExNzA3MyAvKiBGb250Q3JlYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkFGRkM3RTBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzI1OTA1REMyNzRERTFEODAwN0I3QjY1IC8qIEZvbnREYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNjYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRE
ZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM2NjI2MTExQzZFN0NBNjAwQUI1MjdD
IC8qIEZvbnRGYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzI0RUVBNTFDNzI5Q0U0MDA4MEY4
RkMgLyogRm9udEZhY2VTZXQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCAwNzE2ZDZhZjgyNDQuLjVkMzU1ODNmMmEw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAg
LTU2LDYgKzU2LDcgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIkZvbnRDYWNo
ZUNvcmVUZXh0LmgiCisjaW5jbHVkZSAiRm9udERhdGFiYXNlLmgiCiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCkBAIC0xOTYsNiArMTk3LDEwIEBAIHByaXZhdGU6CiAgICAgYm9v
bCBzaG91bGRBdXRvQWN0aXZhdGVGb250SWZOZWVkZWQoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
KTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgRm9udERhdGFiYXNlJiBkYXRh
YmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisjZW5kaWYKKwogICAgIFRpbWVyIG1fcHVy
Z2VUaW1lcjsKIAogICAgIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4gbV9jbGllbnRzOwpAQCAtMjE2
LDYgKzIyMSw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQorICAg
IEZvbnREYXRhYmFzZSBtX2RhdGFiYXNlQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMgeyBBbGxv
d1VzZXJJbnN0YWxsZWRGb250czo6WWVzIH07CisgICAgRm9udERhdGFiYXNlIG1fZGF0YWJhc2VE
aXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cyB7IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpO
byB9OworCiAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBtX3NlZW5GYW1pbGllc0ZvclByZXdhcm1p
bmc7CiAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBtX2ZvbnROYW1lc1JlcXVpcmluZ1N5c3RlbUZh
bGxiYWNrRm9yUHJld2FybWluZzsKICAgICBSZWZQdHI8V29ya1F1ZXVlPiBtX3ByZXdhcm1RdWV1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRleCA5MDgxMDEzMjg0ZmEuLjZkMWM2YTE1NWZj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhY2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAi
Rm9udENyZWF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkZvbnREYXRhYmFzZS5oIgogI2luY2x1
ZGUgIkZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuaCIKICNpbmNsdWRlICJGb250UGFs
ZXR0ZVZhbHVlcy5oIgogI2luY2x1ZGUgIlN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmgiCkBA
IC05NTIsMTUwICs5NTMsNiBAQCB2b2lkIEZvbnRDYWNoZTo6c2V0Rm9udEFsbG93bGlzdChjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW5wdXRBbGxvd2xpc3QpCiAgICAgQWxsb3dsaXN0OjpzaW5nbGV0
b24oKS5zZXQoaW5wdXRBbGxvd2xpc3QpOwogfQogCi1jbGFzcyBGb250RGF0YWJhc2UgewotcHVi
bGljOgotICAgIHN0YXRpYyBGb250RGF0YWJhc2UmIHNpbmdsZXRvbkFsbG93aW5nVXNlckluc3Rh
bGxlZEZvbnRzKCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGF0
YWJhc2U+IGRhdGFiYXNlKEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMpOwotICAgICAgICBy
ZXR1cm4gZGF0YWJhc2U7Ci0gICAgfQotCi0gICAgc3RhdGljIEZvbnREYXRhYmFzZSYgc2luZ2xl
dG9uRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKQotICAgIHsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZvbnREYXRhYmFzZT4gZGF0YWJhc2UoQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHM6Ok5vKTsKLSAgICAgICAgcmV0dXJuIGRhdGFiYXNlOwotICAgIH0KLQotICAgIEZvbnRE
YXRhYmFzZShjb25zdCBGb250RGF0YWJhc2UmKSA9IGRlbGV0ZTsKLSAgICBGb250RGF0YWJhc2Um
IG9wZXJhdG9yPShjb25zdCBGb250RGF0YWJhc2UmKSA9IGRlbGV0ZTsKLQotICAgIHN0cnVjdCBJ
bnN0YWxsZWRGb250IHsKLSAgICAgICAgSW5zdGFsbGVkRm9udCgpID0gZGVmYXVsdDsKLQotICAg
ICAgICBJbnN0YWxsZWRGb250KENURm9udERlc2NyaXB0b3JSZWYgZm9udERlc2NyaXB0b3IsIEFs
bG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQotICAgICAgICAg
ICAgOiBmb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvcikKLSAgICAgICAgICAgICwgY2FwYWJp
bGl0aWVzKGNhcGFiaWxpdGllc0ZvckZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yKSkKLSAg
ICAgICAgewotI2lmIEhBVkUoQ1RGT05UQ1JFQVRFRk9SQ0hBUkFDVEVSU1dJVEhMQU5HVUFHRUFO
RE9QVElPTikKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShhbGxvd1VzZXJJbnN0YWxsZWRGb250
cyk7Ci0jZWxzZQotICAgICAgICAgICAgaWYgKGFsbG93VXNlckluc3RhbGxlZEZvbnRzICE9IEFs
bG93VXNlckluc3RhbGxlZEZvbnRzOjpObykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFi
bGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgICAgICAgICAgYWRkQXR0
cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKGF0dHJpYnV0ZXMuZ2V0KCksIGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKTsKLSAgICAgICAgICAgIHRoaXMtPmZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihD
VEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnREZXNjcmlwdG9yLCBh
dHRyaWJ1dGVzLmdldCgpKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvcjsKLSAgICAgICAgRm9udFNlbGVj
dGlvbkNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBJbnN0
YWxsZWRGb250RmFtaWx5IHsKLSAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVE
OwotCi0gICAgICAgIEluc3RhbGxlZEZvbnRGYW1pbHkoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAg
ZXhwbGljaXQgSW5zdGFsbGVkRm9udEZhbWlseShWZWN0b3I8SW5zdGFsbGVkRm9udD4mJiBpbnN0
YWxsZWRGb250cykKLSAgICAgICAgICAgIDogaW5zdGFsbGVkRm9udHMoV1RGTW92ZShpbnN0YWxs
ZWRGb250cykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZm9udCA6IHRoaXMt
Pmluc3RhbGxlZEZvbnRzKQotICAgICAgICAgICAgICAgIGV4cGFuZChmb250KTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZXhwYW5kKGNvbnN0IEluc3RhbGxlZEZvbnQmIGluc3RhbGxlZEZv
bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhcGFiaWxpdGllcy5leHBhbmQoaW5zdGFsbGVk
Rm9udC5jYXBhYmlsaXRpZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZEZvbnRzLmlzRW1w
dHkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZEZvbnRzLnNpemUoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFZlY3RvcjxJbnN0YWxsZWRGb250PiBpbnN0YWxsZWRGb250czsKLSAgICAgICAg
Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7Ci0gICAgfTsKLQotICAgIGNv
bnN0IEluc3RhbGxlZEZvbnRGYW1pbHkmIGNvbGxlY3Rpb25Gb3JGYW1pbHkoY29uc3QgU3RyaW5n
JiBmYW1pbHlOYW1lKQotICAgIHsKLSAgICAgICAgYXV0byBmb2xkZWQgPSBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGZhbWlseU5hbWUpOwotICAgICAgICB7Ci0gICAg
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnNMb2Nr
IH07Ci0gICAgICAgICAgICBhdXRvIGl0ID0gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnMu
ZmluZChmb2xkZWQpOwotICAgICAgICAgICAgaWYgKGl0ICE9IG1fZmFtaWx5TmFtZVRvRm9udERl
c2NyaXB0b3JzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAqaXQtPnZhbHVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYXV0byBpbnN0YWxsZWRGb250RmFtaWx5ID0gWyZdIHsKLSAgICAg
ICAgICAgIGF1dG8gZmFtaWx5TmFtZVN0cmluZyA9IGZvbGRlZC5jcmVhdGVDRlN0cmluZygpOwot
ICAgICAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVN
dXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgICAgIENG
RGljdGlvbmFyeUFkZFZhbHVlKGF0dHJpYnV0ZXMuZ2V0KCksIGtDVEZvbnRGYW1pbHlOYW1lQXR0
cmlidXRlLCBmYW1pbHlOYW1lU3RyaW5nLmdldCgpKTsKLSAgICAgICAgICAgIGFkZEF0dHJpYnV0
ZXNGb3JJbnN0YWxsZWRGb250cyhhdHRyaWJ1dGVzLmdldCgpLCBtX2FsbG93VXNlckluc3RhbGxl
ZEZvbnRzKTsKLSAgICAgICAgICAgIGF1dG8gZm9udERlc2NyaXB0b3JUb01hdGNoID0gYWRvcHRD
RihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkp
OwotICAgICAgICAgICAgYXV0byBtYW5kYXRvcnlBdHRyaWJ1dGVzID0gaW5zdGFsbGVkRm9udE1h
bmRhdG9yeUF0dHJpYnV0ZXMobV9hbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7Ci0gICAgICAgICAg
ICBpZiAoYXV0byBtYXRjaGVzID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlTWF0Y2hp
bmdGb250RGVzY3JpcHRvcnMoZm9udERlc2NyaXB0b3JUb01hdGNoLmdldCgpLCBtYW5kYXRvcnlB
dHRyaWJ1dGVzLmdldCgpKSkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvdW50ID0gQ0ZBcnJh
eUdldENvdW50KG1hdGNoZXMuZ2V0KCkpOwotICAgICAgICAgICAgICAgIFZlY3RvcjxJbnN0YWxs
ZWRGb250PiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoY291bnQpOwotICAgICAgICAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgSW5zdGFsbGVkRm9udCBpbnN0YWxsZWRG
b250KHN0YXRpY19jYXN0PENURm9udERlc2NyaXB0b3JSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgobWF0Y2hlcy5nZXQoKSwgaSkpLCBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGluc3RhbGxlZEZv
bnQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8SW5zdGFsbGVkRm9udEZhbWlseT4oV1RGTW92ZShyZXN1bHQpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEluc3RhbGxlZEZvbnRGYW1pbHk+KCk7Ci0g
ICAgICAgIH0oKTsKLQotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9mYW1pbHlOYW1lVG9Gb250
RGVzY3JpcHRvcnNMb2NrIH07Ci0gICAgICAgIHJldHVybiAqbV9mYW1pbHlOYW1lVG9Gb250RGVz
Y3JpcHRvcnMuYWRkKFdURk1vdmUoZm9sZGVkKS5pc29sYXRlZENvcHkoKSwgV1RGTW92ZShpbnN0
YWxsZWRGb250RmFtaWx5KSkuaXRlcmF0b3ItPnZhbHVlOwotICAgIH0KLQotICAgIGNvbnN0IElu
c3RhbGxlZEZvbnQmIGZvbnRGb3JQb3N0U2NyaXB0TmFtZShjb25zdCBBdG9tU3RyaW5nJiBwb3N0
U2NyaXB0TmFtZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGZvbGRlZCA9IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZvbGRlZEZhbWlseU5hbWUocG9zdFNjcmlwdE5hbWUpOwotICAgICAg
ICByZXR1cm4gbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuc3VyZShmb2xkZWQs
IFsmXSB7Ci0gICAgICAgICAgICBhdXRvIHBvc3RTY3JpcHROYW1lU3RyaW5nID0gZm9sZGVkLmNy
ZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAgICAgICBDRlN0cmluZ1JlZiBuYW1lQXR0cmlidXRlID0g
a0NURm9udFBvc3RTY3JpcHROYW1lQXR0cmlidXRlOwotICAgICAgICAgICAgYXV0byBhdHRyaWJ1
dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGF0dHJp
YnV0ZXMuZ2V0KCksIGtDVEZvbnRFbmFibGVkQXR0cmlidXRlLCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0g
ICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShhdHRyaWJ1dGVzLmdldCgpLCBuYW1lQXR0
cmlidXRlLCBwb3N0U2NyaXB0TmFtZVN0cmluZy5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRBdHRy
aWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoYXR0cmlidXRlcy5nZXQoKSwgbV9hbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7Ci0gICAgICAgICAgICBhdXRvIGZvbnREZXNjcmlwdG9yVG9NYXRjaCA9IGFk
b3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0
KCkpKTsKLSAgICAgICAgICAgIGF1dG8gbWFuZGF0b3J5QXR0cmlidXRlcyA9IGluc3RhbGxlZEZv
bnRNYW5kYXRvcnlBdHRyaWJ1dGVzKG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwotICAgICAg
ICAgICAgYXV0byBtYXRjaCA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZU1hdGNoaW5n
Rm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3JUb01hdGNoLmdldCgpLCBtYW5kYXRvcnlBdHRy
aWJ1dGVzLmdldCgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gSW5zdGFsbGVkRm9udChtYXRjaC5n
ZXQoKSwgbV9hbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7Ci0gICAgICAgIH0pLml0ZXJhdG9yLT52
YWx1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9yc0xvY2sg
fTsKLSAgICAgICAgICAgIG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmNsZWFyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzLmNsZWFy
KCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxG
b250RGF0YWJhc2U+OwotCi0gICAgRm9udERhdGFiYXNlKEFsbG93VXNlckluc3RhbGxlZEZvbnRz
IGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQotICAgICAgICA6IG1fYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMoYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCi0gICAgewotICAgIH0KLQotICAgIExvY2sg
bV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnNMb2NrOwotICAgIE1lbW9yeUNvbXBhY3RSb2Jp
bkhvb2RIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEluc3RhbGxlZEZvbnRGYW1pbHk+
PiBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9ycyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fZmFt
aWx5TmFtZVRvRm9udERlc2NyaXB0b3JzTG9jayk7Ci0gICAgTWVtb3J5Q29tcGFjdFJvYmluSG9v
ZEhhc2hNYXA8U3RyaW5nLCBJbnN0YWxsZWRGb250PiBtX3Bvc3RTY3JpcHROYW1lVG9Gb250RGVz
Y3JpcHRvcnM7Ci0gICAgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgbV9hbGxvd1VzZXJJbnN0YWxs
ZWRGb250czsKLX07Ci0KIC8vIEJlY2F1c2UgdGhpcyBzdHJ1Y3QgaG9sZHMgaW50ZXJtZWRpYXRl
IHZhbHVlcyB3aGljaCBtYXkgYmUgaW4gdGhlIGNvbXByZXNzZWQgLTEgLSAxIEdYIHJhbmdlLCB3
ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgcmVsYXRpdmVseSBsYXJnZQogLy8gcXVhbnRpemF0aW9u
IG9mIEZvbnRTZWxlY3Rpb25WYWx1ZS4gSW5zdGVhZCwgZG8gdGhpcyBsb2dpYyB3aXRoIGZsb2F0
cy4KIHN0cnVjdCBNaW5NYXggewpAQCAtMTI2MSw5ICsxMTE4LDE0IEBAIHN0YXRpYyBjb25zdCBG
b250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChjb25zdCBGb250RGF0
YWJhc2U6OkluCiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRGb250c1tpbmRleF07
CiB9CiAKK0ZvbnREYXRhYmFzZSYgRm9udENhY2hlOjpkYXRhYmFzZShBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK3sKKyAgICByZXR1cm4gYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA/IG1fZGF0YWJh
c2VBbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cyA6IG1fZGF0YWJhc2VEaXNhbGxvd2luZ1VzZXJJ
bnN0YWxsZWRGb250czsKK30KKwogVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZv
bnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKQogewotICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxl
ZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNp
bmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmds
ZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7CisgICAgYXV0byYgZm9udERhdGFi
YXNlID0gZGF0YWJhc2UoYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogICAgIGNvbnN0IGF1dG8m
IGZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5TmFtZS5zdHJp
bmcoKSk7CiAgICAgcmV0dXJuIGZvbnRzLmluc3RhbGxlZEZvbnRzLm1hcChbXShhdXRvJiBmb250
KSB7CiAgICAgICAgIHJldHVybiBmb250LmNhcGFiaWxpdGllczsKQEAgLTEyOTUsNyArMTE1Nyw3
IEBAIHN0YXRpYyBib29sIGlzQWxsb3dsaXN0ZWRGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5KQogICAgIHJldHVybiBBbGxvd2xpc3Q6OnNpbmdsZXRvbigpLmFsbG93cyhmYW1pbHkpOwog
fQogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0
IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVxdWVzdCwgZmxvYXQg
c2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitz
dGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KEZvbnREYXRhYmFz
ZSYgZm9udERhdGFiYXNlLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWxlY3Rpb25S
ZXF1ZXN0IHJlcXVlc3QsIGZsb2F0IHNpemUpCiB7CiAgICAgaWYgKCFpc0FsbG93bGlzdGVkRmFt
aWx5KGZhbWlseSkpCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIgfTsKQEAgLTEzMDUsNyArMTE2
Nyw2IEBAIHN0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIg
fTsKICAgICB9CiAKLSAgICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRG
b250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5n
bGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0
b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpOwogICAgIGNvbnN0IGF1dG8mIGZhbWls
eUZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5LnN0cmluZygp
KTsKICAgICBpZiAoZmFtaWx5Rm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFRoZSBDU1Mg
c3BlYyBzdGF0ZXMgdGhhdCBmb250LWZhbWlseSBvbmx5IGFjY2VwdHMgYSBuYW1lIG9mIGFuIGFj
dHVhbCBmb250IGZhbWlseS4gSG93ZXZlciwgaW4gV2ViS2l0LCB3ZSBjbGFpbSB0byBhbHNvCkBA
IC0xMzQ4LDEwICsxMjA5LDYgQEAgdm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW52YWxpZGF0ZSgp
CiAgICAgLy8gRklYTUU6IFdvcmtlcnMgbmVlZCB0byBhY2Nlc3MgRm9udEZhbWlseVNwZWNpZmlj
YXRpb25Db3JlVGV4dENhY2hlLgogICAgIGNsZWFyRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3Jl
VGV4dENhY2hlKCk7CiAKLSAgICAvLyBGSVhNRTogV29ya2VycyBuZWVkIHRvIGFjY2VzcyBGb250
RGF0YWJhc2UuCi0gICAgRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxs
ZWRGb250cygpLmNsZWFyKCk7Ci0gICAgRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2lu
Z1VzZXJJbnN0YWxsZWRGb250cygpLmNsZWFyKCk7Ci0KICAgICBwbGF0Zm9ybVNob3VsZEVuaGFu
Y2VUZXh0TGVnaWJpbGl0eSgpID0gX0FYU0VuaGFuY2VUZXh0TGVnaWJpbGl0eUVuYWJsZWQoKTsK
IH0KIApAQCAtMTQxOCwxNSArMTI3NSwxNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4g
Zm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0
aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBGb250Q3JlYXRpb25Db250ZXh0JiBmb250Q3JlYXRpb25D
b250ZXh0LCBmbG9hdCBzaXplKQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRo
RmFtaWx5KEZvbnREYXRhYmFzZSYgZm9udERhdGFiYXNlLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBGb250Q3Jl
YXRpb25Db250ZXh0JiBmb250Q3JlYXRpb25Db250ZXh0LCBmbG9hdCBzaXplKQogeworICAgIEFT
U0VSVChmb250RGF0YWJhc2UuYWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA9PSBmb250RGVzY3Jp
cHRpb24uc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSk7CisKICAgICBpZiAoZmFtaWx5
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBGb250TG9va3VwIGZv
bnRMb29rdXA7CiAgICAgZm9udExvb2t1cC5yZXN1bHQgPSBmb250V2l0aEZhbWlseVNwZWNpYWxD
YXNlKGZhbWlseSwgZm9udERlc2NyaXB0aW9uLCBzaXplLCBmb250RGVzY3JpcHRpb24uc2hvdWxk
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSk7CiAgICAgaWYgKCFmb250TG9va3VwLnJlc3VsdCkK
LSAgICAgICAgZm9udExvb2t1cCA9IHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoZmFtaWx5
LCBmb250RGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKSwgc2l6ZSwgZm9udERlc2Ny
aXB0aW9uLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkpOworICAgICAgICBmb250TG9v
a3VwID0gcGxhdGZvcm1Gb250TG9va3VwV2l0aEZhbWlseShmb250RGF0YWJhc2UsIGZhbWlseSwg
Zm9udERlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCksIHNpemUpOwogICAgIHJldHVy
biBwcmVwYXJlUGxhdGZvcm1Gb250KGZvbnRMb29rdXAucmVzdWx0LmdldCgpLCBmb250RGVzY3Jp
cHRpb24sIGZvbnRDcmVhdGlvbkNvbnRleHQsICFmb250TG9va3VwLmNyZWF0ZWRGcm9tUG9zdFNj
cmlwdE5hbWUpOwogfQogCkBAIC0xNDU3LDcgKzEzMTYsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9u
dFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZQogewogICAgIGZsb2F0IHNpemUgPSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNp
emUoKTsKIAotICAgIGF1dG8gZm9udCA9IGZvbnRXaXRoRmFtaWx5KGZhbWlseSwgZm9udERlc2Ny
aXB0aW9uLCBmb250Q3JlYXRpb25Db250ZXh0LCBzaXplKTsKKyAgICBhdXRvJiBmb250RGF0YWJh
c2UgPSBkYXRhYmFzZShmb250RGVzY3JpcHRpb24uc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMoKSk7CisgICAgYXV0byBmb250ID0gZm9udFdpdGhGYW1pbHkoZm9udERhdGFiYXNlLCBmYW1p
bHksIGZvbnREZXNjcmlwdGlvbiwgZm9udENyZWF0aW9uQ29udGV4dCwgc2l6ZSk7CiAKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgaWYgKCFmb250KSB7CkBAIC0xNDY4LDcgKzEzMjgsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZQogICAgICAgICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBiZWNhdXNl
IHdlIHdhbnQgdG8gdXNlIG91ciBvd24gYWxnb3JpdGhtIHRvIGFjdHVhbGx5IGZpbmQgdGhlIGZv
bnQuCiAgICAgICAgIGF1dG9BY3RpdmF0ZUZvbnQoZmFtaWx5LnN0cmluZygpLCBzaXplKTsKIAot
ICAgICAgICBmb250ID0gZm9udFdpdGhGYW1pbHkoZmFtaWx5LCBmb250RGVzY3JpcHRpb24sIGZv
bnRDcmVhdGlvbkNvbnRleHQsIHNpemUpOworICAgICAgICBmb250ID0gZm9udFdpdGhGYW1pbHko
Zm9udERhdGFiYXNlLCBmYW1pbHksIGZvbnREZXNjcmlwdGlvbiwgZm9udENyZWF0aW9uQ29udGV4
dCwgc2l6ZSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTE1MDAsOCArMTM2MCw4IEBAIHZvaWQgRm9u
dENhY2hlOjpwbGF0Zm9ybVB1cmdlSW5hY3RpdmVGb250RGF0YSgpCiAgICAgZm9yIChhdXRvJiBm
b250IDogdG9SZW1vdmUpCiAgICAgICAgIGZhbGxiYWNrRGVkdXBTZXQoKS5yZW1vdmUoZm9udCk7
CiAKLSAgICBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRz
KCkuY2xlYXIoKTsKLSAgICBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlcklu
c3RhbGxlZEZvbnRzKCkuY2xlYXIoKTsKKyAgICBtX2RhdGFiYXNlQWxsb3dpbmdVc2VySW5zdGFs
bGVkRm9udHMuY2xlYXIoKTsKKyAgICBtX2RhdGFiYXNlRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVk
Rm9udHMuY2xlYXIoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xNzQzLDkg
KzE2MDMsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHJld2FybShQcmV3YXJtSW5mb3JtYXRpb24mJiBw
cmV3YXJtSW5mb3JtYXRpb24pCiAgICAgaWYgKCFtX3ByZXdhcm1RdWV1ZSkKICAgICAgICAgbV9w
cmV3YXJtUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiV2ViS2l0IGZvbnQgcHJld2FybSBxdWV1
ZSIpOwogCi0gICAgYXV0byYgZGF0YWJhc2UgPSBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2Fs
bG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7Ci0KLSAgICBtX3ByZXdhcm1RdWV1ZS0+ZGlzcGF0
Y2goWyZkYXRhYmFzZSwgcHJld2FybUluZm9ybWF0aW9uID0gV1RGTW92ZShwcmV3YXJtSW5mb3Jt
YXRpb24pLmlzb2xhdGVkQ29weSgpXSB7CisgICAgbV9wcmV3YXJtUXVldWUtPmRpc3BhdGNoKFsm
ZGF0YWJhc2UgPSBtX2RhdGFiYXNlRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMsIHByZXdh
cm1JbmZvcm1hdGlvbiA9IFdURk1vdmUocHJld2FybUluZm9ybWF0aW9uKS5pc29sYXRlZENvcHko
KV0gewogICAgICAgICBmb3IgKGF1dG8mIGZhbWlseSA6IHByZXdhcm1JbmZvcm1hdGlvbi5zZWVu
RmFtaWxpZXMpCiAgICAgICAgICAgICBkYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWls
eSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnREYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250RGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uOTc1ZDAyMzEzOGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udERhdGFiYXNlLmNwcApAQCAtMCwwICsxLDEyNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnREYXRhYmFz
ZS5oIgorCisjaW5jbHVkZSAiRm9udENhY2hlQ29yZVRleHQuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udDo6SW5z
dGFsbGVkRm9udChDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yLCBBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKKyAgICA6IGZvbnREZXNjcmlw
dG9yKGZvbnREZXNjcmlwdG9yKQorICAgICwgY2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllc0ZvckZv
bnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yKSkKK3sKKyNpZiBIQVZFKENURk9OVENSRUFURUZP
UkNIQVJBQ1RFUlNXSVRITEFOR1VBR0VBTkRPUFRJT04pCisgICAgVU5VU0VEX1BBUkFNKGFsbG93
VXNlckluc3RhbGxlZEZvbnRzKTsKKyNlbHNlCisgICAgaWYgKGFsbG93VXNlckluc3RhbGxlZEZv
bnRzICE9IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObykKKyAgICAgICAgcmV0dXJuOworICAg
IGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgYWRkQXR0cmlidXRlc0Zvckluc3Rh
bGxlZEZvbnRzKGF0dHJpYnV0ZXMuZ2V0KCksIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKKyAg
ICB0aGlzLT5mb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNv
cHlXaXRoQXR0cmlidXRlcyhmb250RGVzY3JpcHRvciwgYXR0cmlidXRlcy5nZXQoKSkpOworI2Vu
ZGlmCit9CisKK0ZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udEZhbWlseTo6SW5zdGFsbGVkRm9u
dEZhbWlseShWZWN0b3I8SW5zdGFsbGVkRm9udD4mJiBpbnN0YWxsZWRGb250cykKKyAgICA6IGlu
c3RhbGxlZEZvbnRzKFdURk1vdmUoaW5zdGFsbGVkRm9udHMpKQoreworICAgIGZvciAoYXV0byYg
Zm9udCA6IHRoaXMtPmluc3RhbGxlZEZvbnRzKQorICAgICAgICBleHBhbmQoZm9udCk7Cit9CisK
K3ZvaWQgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5OjpleHBhbmQoY29uc3QgSW5z
dGFsbGVkRm9udCYgaW5zdGFsbGVkRm9udCkKK3sKKyAgICBjYXBhYmlsaXRpZXMuZXhwYW5kKGlu
c3RhbGxlZEZvbnQuY2FwYWJpbGl0aWVzKTsKK30KKworY29uc3QgRm9udERhdGFiYXNlOjpJbnN0
YWxsZWRGb250RmFtaWx5JiBGb250RGF0YWJhc2U6OmNvbGxlY3Rpb25Gb3JGYW1pbHkoY29uc3Qg
U3RyaW5nJiBmYW1pbHlOYW1lKQoreworICAgIGF1dG8gZm9sZGVkID0gRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKKyAgICB7CisgICAgICAgIExv
Y2tlciBsb2NrZXIgeyBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9yc0xvY2sgfTsKKyAgICAg
ICAgYXV0byBpdCA9IG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmZpbmQoZm9sZGVkKTsK
KyAgICAgICAgaWYgKGl0ICE9IG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuICppdC0+dmFsdWU7CisgICAgfQorCisgICAgYXV0byBpbnN0YWxs
ZWRGb250RmFtaWx5ID0gWyZdIHsKKyAgICAgICAgYXV0byBmYW1pbHlOYW1lU3RyaW5nID0gZm9s
ZGVkLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0Yo
Q0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlw
ZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tz
KSk7CisgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGF0dHJpYnV0ZXMuZ2V0KCksIGtDVEZv
bnRGYW1pbHlOYW1lQXR0cmlidXRlLCBmYW1pbHlOYW1lU3RyaW5nLmdldCgpKTsKKyAgICAgICAg
YWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKGF0dHJpYnV0ZXMuZ2V0KCksIG1fYWxsb3dV
c2VySW5zdGFsbGVkRm9udHMpOworICAgICAgICBhdXRvIGZvbnREZXNjcmlwdG9yVG9NYXRjaCA9
IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMu
Z2V0KCkpKTsKKyAgICAgICAgYXV0byBtYW5kYXRvcnlBdHRyaWJ1dGVzID0gaW5zdGFsbGVkRm9u
dE1hbmRhdG9yeUF0dHJpYnV0ZXMobV9hbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisgICAgICAg
IGlmIChhdXRvIG1hdGNoZXMgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGlu
Z0ZvbnREZXNjcmlwdG9ycyhmb250RGVzY3JpcHRvclRvTWF0Y2guZ2V0KCksIG1hbmRhdG9yeUF0
dHJpYnV0ZXMuZ2V0KCkpKSkgeworICAgICAgICAgICAgYXV0byBjb3VudCA9IENGQXJyYXlHZXRD
b3VudChtYXRjaGVzLmdldCgpKTsKKyAgICAgICAgICAgIFZlY3RvcjxJbnN0YWxsZWRGb250PiBy
ZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7
CisgICAgICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgSW5zdGFsbGVkRm9udCBpbnN0YWxsZWRGb250KHN0YXRpY19jYXN0PENURm9u
dERlc2NyaXB0b3JSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgobWF0Y2hlcy5nZXQoKSwgaSkp
LCBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKKyAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKFdURk1vdmUoaW5zdGFsbGVkRm9udCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8SW5zdGFsbGVkRm9udEZhbWlseT4oV1RGTW92ZShy
ZXN1bHQpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxJbnN0YWxsZWRG
b250RmFtaWx5PigpOworICAgIH0oKTsKKworICAgIExvY2tlciBsb2NrZXIgeyBtX2ZhbWlseU5h
bWVUb0ZvbnREZXNjcmlwdG9yc0xvY2sgfTsKKyAgICByZXR1cm4gKm1fZmFtaWx5TmFtZVRvRm9u
dERlc2NyaXB0b3JzLmFkZChmb2xkZWQuaXNvbGF0ZWRDb3B5KCksIFdURk1vdmUoaW5zdGFsbGVk
Rm9udEZhbWlseSkpLml0ZXJhdG9yLT52YWx1ZTsKK30KKworY29uc3QgRm9udERhdGFiYXNlOjpJ
bnN0YWxsZWRGb250JiBGb250RGF0YWJhc2U6OmZvbnRGb3JQb3N0U2NyaXB0TmFtZShjb25zdCBB
dG9tU3RyaW5nJiBwb3N0U2NyaXB0TmFtZSkKK3sKKyAgICBjb25zdCBhdXRvJiBmb2xkZWQgPSBG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKHBvc3RTY3JpcHROYW1lKTsK
KyAgICByZXR1cm4gbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuc3VyZShmb2xk
ZWQsIFsmXSB7CisgICAgICAgIGF1dG8gcG9zdFNjcmlwdE5hbWVTdHJpbmcgPSBmb2xkZWQuY3Jl
YXRlQ0ZTdHJpbmcoKTsKKyAgICAgICAgQ0ZTdHJpbmdSZWYgbmFtZUF0dHJpYnV0ZSA9IGtDVEZv
bnRQb3N0U2NyaXB0TmFtZUF0dHJpYnV0ZTsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gYWRv
cHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZr
Q0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxs
QmFja3MpKTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoYXR0cmlidXRlcy5nZXQoKSwg
a0NURm9udEVuYWJsZWRBdHRyaWJ1dGUsIGtDRkJvb2xlYW5UcnVlKTsKKyAgICAgICAgQ0ZEaWN0
aW9uYXJ5QWRkVmFsdWUoYXR0cmlidXRlcy5nZXQoKSwgbmFtZUF0dHJpYnV0ZSwgcG9zdFNjcmlw
dE5hbWVTdHJpbmcuZ2V0KCkpOworICAgICAgICBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9u
dHMoYXR0cmlidXRlcy5nZXQoKSwgbV9hbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisgICAgICAg
IGF1dG8gZm9udERlc2NyaXB0b3JUb01hdGNoID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3Jl
YXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOworICAgICAgICBhdXRvIG1hbmRh
dG9yeUF0dHJpYnV0ZXMgPSBpbnN0YWxsZWRGb250TWFuZGF0b3J5QXR0cmlidXRlcyhtX2FsbG93
VXNlckluc3RhbGxlZEZvbnRzKTsKKyAgICAgICAgYXV0byBtYXRjaCA9IGFkb3B0Q0YoQ1RGb250
RGVzY3JpcHRvckNyZWF0ZU1hdGNoaW5nRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3JUb01h
dGNoLmdldCgpLCBtYW5kYXRvcnlBdHRyaWJ1dGVzLmdldCgpKSk7CisgICAgICAgIHJldHVybiBJ
bnN0YWxsZWRGb250KG1hdGNoLmdldCgpLCBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKKyAg
ICB9KS5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgRm9udERhdGFiYXNlOjpjbGVhcigpCit7
CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9mYW1pbHlOYW1lVG9Gb250RGVzY3Jp
cHRvcnNMb2NrIH07CisgICAgICAgIG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmNsZWFy
KCk7CisgICAgfQorICAgIG1fcG9zdFNjcmlwdE5hbWVUb0ZvbnREZXNjcmlwdG9ycy5jbGVhcigp
OworfQorCitGb250RGF0YWJhc2U6OkZvbnREYXRhYmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKKyAgICA6IG1fYWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMoYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnREYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dERhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mN2Q1
NDMwYWMwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250RGF0YWJhc2UuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCIK
KyNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZvbnREYXRhYmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udERhdGFi
YXNlKTsKKworcHVibGljOgorICAgIEZvbnREYXRhYmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyk7CisKKyAgICBzdHJ1Y3QgSW5zdGFsbGVkRm9udCB7CisgICAgICAgIEluc3RhbGxlZEZvbnQo
KSA9IGRlZmF1bHQ7CisgICAgICAgIEluc3RhbGxlZEZvbnQoQ1RGb250RGVzY3JpcHRvclJlZiwg
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworCisgICAgICAgIFJldGFpblB0cjxDVEZvbnREZXNj
cmlwdG9yUmVmPiBmb250RGVzY3JpcHRvcjsKKyAgICAgICAgRm9udFNlbGVjdGlvbkNhcGFiaWxp
dGllcyBjYXBhYmlsaXRpZXM7CisgICAgfTsKKworICAgIHN0cnVjdCBJbnN0YWxsZWRGb250RmFt
aWx5IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAg
IEluc3RhbGxlZEZvbnRGYW1pbHkoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgZXhwbGljaXQgSW5z
dGFsbGVkRm9udEZhbWlseShWZWN0b3I8SW5zdGFsbGVkRm9udD4mJiBpbnN0YWxsZWRGb250cyk7
CisKKyAgICAgICAgdm9pZCBleHBhbmQoY29uc3QgSW5zdGFsbGVkRm9udCYpOworICAgICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBpbnN0YWxsZWRGb250cy5pc0VtcHR5KCk7IH0K
KyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBpbnN0YWxsZWRGb250cy5zaXpl
KCk7IH0KKworICAgICAgICBWZWN0b3I8SW5zdGFsbGVkRm9udD4gaW5zdGFsbGVkRm9udHM7Cisg
ICAgICAgIEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOworICAgIH07CisK
KyAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cygpIGNv
bnN0IHsgcmV0dXJuIG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHM7IH0KKyAgICBjb25zdCBJbnN0
YWxsZWRGb250RmFtaWx5JiBjb2xsZWN0aW9uRm9yRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZSk7CisgICAgY29uc3QgSW5zdGFsbGVkRm9udCYgZm9udEZvclBvc3RTY3JpcHROYW1lKGNv
bnN0IEF0b21TdHJpbmcmIHBvc3RTY3JpcHROYW1lKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKK3By
aXZhdGU6CisgICAgTG9jayBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9yc0xvY2s7CisgICAg
TWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SW5z
dGFsbGVkRm9udEZhbWlseT4+IG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzIFdURl9HVUFS
REVEX0JZX0xPQ0sobV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnNMb2NrKTsKKyAgICBNZW1v
cnlDb21wYWN0Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIEluc3RhbGxlZEZvbnQ+IG1fcG9zdFNj
cmlwdE5hbWVUb0ZvbnREZXNjcmlwdG9yczsKKyAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBt
X2FsbG93VXNlckluc3RhbGxlZEZvbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="commit-queue"
          id="490013"
          type_id="3"
          status="+"
          setter="mattwoodrow"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>461054</attachid>
            <date>2022-07-20 14:39:00 -0700</date>
            <delta_ts>2022-07-20 18:40:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233986-20220721093859.patch</filename>
            <type>text/plain</type>
            <size>33572</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">RnJvbSAzNjM5YmNiZTA1NjA1NzAwOGVmNjA5MGYwZDE5NTQ0ZWYyODBlNTE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYW1lcm9uIE1jQ29ybWFjayA8aGV5Y2FtQGFwcGxlLmNvbT4K
RGF0ZTogV2VkLCAyNCBOb3YgMjAyMSAxNTowNToxNiArMTEwMApTdWJqZWN0OiBbUEFUQ0hdIE1v
dmUgRm9udERhdGFiYXNlcyB0byBGb250Q2FjaGUKIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzM5ODYKClJldmlld2VkIGJ5IE15bGVzIEMuIE1heGZpZWxkLgoKV2Ug
Y3VycmVudGx5IGhhdmUgdHdvIEZvbnREYXRhYmFzZSBvYmplY3RzIHdlIGNyZWF0ZSwgaW4KRm9u
dERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cyBhbmQKRm9udERh
dGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cy4gVGhlc2UgY2Fu
IGJlCmFjY2Vzc2VkIGZyb20gd29ya2VyIHRocmVhZHMgdXNpbmcgT2Zmc2NyZWVuQ2FudmFzLCBh
bmQgc28gbXVzdApiZSBtYWRlIHRocmVhZCBzYWZlLgoKVGhpcyBwYXRjaCBtb3ZlcyB0aGUgRm9u
dERhdGFiYXNlIGluc3RhbmNlcyB0byBsaXZlIG9uIHRoZSBGb250Q2FjaGUsCm9mIHdoaWNoIHdl
IGFscmVhZHkgaGF2ZSBvbmUgcGVyIHRocmVhZC4KCldlIGFsc28gbW92ZSB0aGUgRm9udERhdGFi
YXNlIGRlZmluaXRpb24gdG8gYSBzZXBhcmF0ZSBmaWxlLCB0byByZWR1Y2UKc2ltcGxpZnkgRm9u
dENhc2NhZGUue2gsY3BwfSBmdXJ0aGVyLgoKKiBQbGF0Zm9ybU1hYy5jbWFrZToKKiBTb3VyY2Vz
Q29jb2EudHh0OgoqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5jcHA6CihXZWJDb3JlOjpGb250Q2FjaGU6OmRhdGFiYXNlKToKKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KToKKFdlYkNv
cmU6OnBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkpOgooV2ViQ29yZTo6aW52YWxpZGF0ZUZv
bnRDYWNoZSk6CihXZWJDb3JlOjpmb250V2l0aEZhbWlseSk6CihXZWJDb3JlOjpGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgooV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybVB1
cmdlSW5hY3RpdmVGb250RGF0YSk6CihXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgooV2Vi
Q29yZTo6Rm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cyk6
IERlbGV0ZWQuCihXZWJDb3JlOjpGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNl
ckluc3RhbGxlZEZvbnRzKTogRGVsZXRlZC4KKFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6SW5zdGFs
bGVkRm9udDo6SW5zdGFsbGVkRm9udCk6IERlbGV0ZWQuCihXZWJDb3JlOjpGb250RGF0YWJhc2U6
Okluc3RhbGxlZEZvbnRGYW1pbHk6Okluc3RhbGxlZEZvbnRGYW1pbHkpOiBEZWxldGVkLgooV2Vi
Q29yZTo6Rm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5OjpleHBhbmQpOiBEZWxldGVk
LgooV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5Ojppc0VtcHR5IGNv
bnN0KTogRGVsZXRlZC4KKFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udEZhbWls
eTo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCihXZWJDb3JlOjpGb250RGF0YWJhc2U6OmNvbGxlY3Rp
b25Gb3JGYW1pbHkpOiBEZWxldGVkLgooV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpmb250Rm9yUG9z
dFNjcmlwdE5hbWUpOiBEZWxldGVkLgooV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpjbGVhcik6IERl
bGV0ZWQuCihXZWJDb3JlOjpGb250RGF0YWJhc2U6OkZvbnREYXRhYmFzZSk6IERlbGV0ZWQuCiog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERhdGFiYXNlLmNwcDogQWRkZWQuCihXZWJDb3Jl
OjpGb250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQ6Okluc3RhbGxlZEZvbnQpOgooV2ViQ29yZTo6
Rm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5OjpJbnN0YWxsZWRGb250RmFtaWx5KToK
KFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udEZhbWlseTo6ZXhwYW5kKToKKFdl
YkNvcmU6OkZvbnREYXRhYmFzZTo6Y29sbGVjdGlvbkZvckZhbWlseSk6CihXZWJDb3JlOjpGb250
RGF0YWJhc2U6OmZvbnRGb3JQb3N0U2NyaXB0TmFtZSk6CihXZWJDb3JlOjpGb250RGF0YWJhc2U6
OmNsZWFyKToKKFdlYkNvcmU6OkZvbnREYXRhYmFzZTo6Rm9udERhdGFiYXNlKToKKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250RGF0YWJhc2UuaDogQWRkZWQuCihXZWJDb3JlOjpGb250RGF0
YWJhc2U6Okluc3RhbGxlZEZvbnRGYW1pbHk6OmlzRW1wdHkgY29uc3QpOgooV2ViQ29yZTo6Rm9u
dERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5OjpzaXplIGNvbnN0KToKKFdlYkNvcmU6OkZv
bnREYXRhYmFzZTo6YWxsb3dVc2VySW5zdGFsbGVkRm9udHMgY29uc3QpOgotLS0KIFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlICAgICAgICAgICAgICB8ICAgMiArCiBTb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0ICAgICAgICAgICAgICAgfCAgIDEgKwogLi4uL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIHwgICA3ICsKIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oICB8ICAgOCArCiAuLi4vZ3JhcGhpY3MvY29j
b2EvRm9udENhY2hlQ29yZVRleHQuY3BwICAgICAgfCAxNzggKystLS0tLS0tLS0tLS0tLS0tCiAu
Li4vcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERhdGFiYXNlLmNwcCAgfCAxMjcgKysrKysr
KysrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREYXRhYmFzZS5oICAgIHwg
IDgwICsrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDI0MyBpbnNlcnRpb25zKCspLCAxNjAgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udERhdGFiYXNlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREYXRhYmFzZS5oCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQppbmRleCA1NWFmOThhNzRmYjAuLmM3OTMzMjhlMGQ4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKQEAgLTMxMyw2ICszMTMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250RGF0YWJhc2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTY2MSw2ICs2NjIsNyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Db2xvckNvY29hLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RGF0YWJhc2UuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMQ29jb2EuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
Q29jb2EudHh0CmluZGV4IDBjNzdkMzVjZTZmZS4uOWYwNTFkYzhkZWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNDb2NvYS50eHQKQEAgLTM5Nyw2ICszOTcsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q2FjaGVDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRl
eHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udERhdGFiYXNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERlc2NyaXB0
aW9uQ29jb2EuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNh
dGlvbkNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0
YUNvY29hLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggYTgwYTUwMmEzNjE1Li40MGFlZDkyMmI0NGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjIsNyAr
MTAyMiw5IEBACiAJCTMyQTcwRDUzMjgzNjEzNEIwMDgwMDYwQyAvKiBEZWNvbXBvc2VkR2x5cGhz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMkE3MEQ1
MjI4MzYxMzRBMDA4MDA2MEMgLyogRGVjb21wb3NlZEdseXBocy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMyQTcwRDU4MjgzNjEzOEUwMDgwMDYw
QyAvKiBQb3NpdGlvbmVkR2x5cGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMkE3MEQ1NjI4MzYxMzhEMDA4MDA2MEMgLyogUG9zaXRpb25lZEdseXBo
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMz
NDQwOEM0MzNGOENBNEMxMDA0NDIzNCAvKiBTVkdMYXllclRyYW5zZm9ybVVwZGF0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzNDQwNzc0MTJEOUJD
NEEwMDA0NDIzNCAvKiBTVkdMYXllclRyYW5zZm9ybVVwZGF0ZXIuaCAqLzsgfTsKKwkJMzIxMTJF
MEYyNzRCNDdDRjAwNzA0N0E4IC8qIFN5c3RlbUZhbGxiYWNrQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMyODk5RkI5Mjc0QjQxMEMwMDg1NUE5
RCAvKiBTeXN0ZW1GYWxsYmFja0NhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzIxMTJFMEYyNzRCNDdDRjAwNzA0N0E4IC8qIFN5c3RlbUZh
bGxiYWNrRm9udENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMjg5OUZCOTI3NEI0MTBDMDA4NTVBOUQgLyogU3lzdGVtRmFsbGJhY2tGb250Q2Fj
aGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkz
MjU5MDVEQzI3NERFMUQ4MDA3QjdCNjUgLyogRm9udERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMjU5MDVEQTI3NERFMUQ3MDA3QjdCNjUg
LyogRm9udERhdGFiYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMzJFQUZCOEQyNzRDNUVBNjAwNjUwNTU3IC8qIEZvbnRDYXNjYWRlQ2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMyRUFGQjhC
Mjc0QzVFQTUwMDY1MDU1NyAvKiBGb250Q2FzY2FkZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzM1MDNDOUExMDE3OUE3NDAwM0I0N0Ux
IC8qIE5vdGlmaWNhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzM1MDNDOTkxMDE3OUE3NDAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbkNs
aWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTMzNTAzQ0E0MTAxNzlBRDcwMDNCNDdFMSAvKiBKU05vdGlmaWNhdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM1MDNDQTAxMDE3OUFENzAwM0I0
N0UxIC8qIEpTTm90aWZpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTg1NzIsNiArODU3NCw4IEBACiAJCTMyQjE3NjE0Mjg1RkREQTEw
MEVENkRCOCAvKiBHcmFkaWVudENvbG9yU3RvcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFk
aWVudENvbG9yU3RvcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMyQjE3NjE1
Mjg1RkREQTEwMEVENkRCOCAvKiBHcmFkaWVudENvbG9yU3RvcHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhZGllbnRDb2xvclN0b3BzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzJFMjY4RkMyODVGQzhGNzAwNDY2MEJCIC8qIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xvckludGVycG9sYXRp
b25NZXRob2QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMjU5MDVEQTI3NERF
MUQ3MDA3QjdCNjUgLyogRm9udERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvbnREYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMjU5
MDVERDI3NERFMUUzMDA3QjdCNjUgLyogRm9udERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvbnREYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMyODk5
RkI3Mjc0QjQxMEMwMDg1NUE5RCAvKiBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMyODk5RkI5Mjc0QjQxMEMwMDg1NUE5RCAvKiBTeXN0ZW1GYWxsYmFj
a0ZvbnRDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1GYWxsYmFja0ZvbnRDYWNoZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMkQzMTA0RTI3NEM2ODdCMDAzM0FCMkYgLyog
Rm9udENhc2NhZGVDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FzY2FkZUNhY2hl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NzM3LDYgKzI5NzQxLDggQEAK
IAkJCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVDb2NvYS5jcHAgKi8s
CiAJCQkJMUM2RkQ4QjAyNTBBMzVGMTAwRDZFOTIwIC8qIEZvbnRDb2NvYS5jcHAgKi8sCiAJCQkJ
RjRBMDY0QzYyNzdFNDhDNjAwQjA2QTE3IC8qIEZvbnRDb2NvYS5oICovLAorCQkJCTMyNTkwNURE
Mjc0REUxRTMwMDdCN0I2NSAvKiBGb250RGF0YWJhc2UuY3BwICovLAorCQkJCTMyNTkwNURBMjc0
REUxRDcwMDdCN0I2NSAvKiBGb250RGF0YWJhc2UuaCAqLywKIAkJCQkxQzEyQUMyQzFFRTc3OTk1
MDA3OUUwQTAgLyogRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwICovLAogCQkJCTFDMTJBQzI4MUVF
Nzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcCAqLywK
IAkJCQkxQzEyQUMyOTFFRTc3OEFFMDA3OUUwQTAgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25D
b3JlVGV4dC5oICovLApAQCAtMzUxNjUsNiArMzUxNzEsNyBAQAogCQkJCUY0QTA2NEM4Mjc3RTQ4
QzkwMEIwNkExNyAvKiBGb250Q29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMjY2NzFCMjZG
QTkzMkYwMDExNzA3MyAvKiBGb250Q3JlYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkFGRkM3RTBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzI1OTA1REMyNzRERTFEODAwN0I3QjY1IC8qIEZvbnREYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNjYwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRE
ZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM2NjI2MTExQzZFN0NBNjAwQUI1MjdD
IC8qIEZvbnRGYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzI0RUVBNTFDNzI5Q0U0MDA4MEY4
RkMgLyogRm9udEZhY2VTZXQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCAwNzE2ZDZhZjgyNDQuLjVkMzU1ODNmMmEw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAg
LTU2LDYgKzU2LDcgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIkZvbnRDYWNo
ZUNvcmVUZXh0LmgiCisjaW5jbHVkZSAiRm9udERhdGFiYXNlLmgiCiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCkBAIC0xOTYsNiArMTk3LDEwIEBAIHByaXZhdGU6CiAgICAgYm9v
bCBzaG91bGRBdXRvQWN0aXZhdGVGb250SWZOZWVkZWQoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
KTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgRm9udERhdGFiYXNlJiBkYXRh
YmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisjZW5kaWYKKwogICAgIFRpbWVyIG1fcHVy
Z2VUaW1lcjsKIAogICAgIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4gbV9jbGllbnRzOwpAQCAtMjE2
LDYgKzIyMSw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQorICAg
IEZvbnREYXRhYmFzZSBtX2RhdGFiYXNlQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMgeyBBbGxv
d1VzZXJJbnN0YWxsZWRGb250czo6WWVzIH07CisgICAgRm9udERhdGFiYXNlIG1fZGF0YWJhc2VE
aXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cyB7IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpO
byB9OworCiAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBtX3NlZW5GYW1pbGllc0ZvclByZXdhcm1p
bmc7CiAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBtX2ZvbnROYW1lc1JlcXVpcmluZ1N5c3RlbUZh
bGxiYWNrRm9yUHJld2FybWluZzsKICAgICBSZWZQdHI8V29ya1F1ZXVlPiBtX3ByZXdhcm1RdWV1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRleCBkZmMxYzE3ODg2YWQuLjliYjhiMmZhMTc2
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhY2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAi
Rm9udENyZWF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkZvbnREYXRhYmFzZS5oIgogI2luY2x1
ZGUgIkZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuaCIKICNpbmNsdWRlICJGb250UGFs
ZXR0ZVZhbHVlcy5oIgogI2luY2x1ZGUgIlN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmgiCkBA
IC05NTIsMTUwICs5NTMsNiBAQCB2b2lkIEZvbnRDYWNoZTo6c2V0Rm9udEFsbG93bGlzdChjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW5wdXRBbGxvd2xpc3QpCiAgICAgQWxsb3dsaXN0OjpzaW5nbGV0
b24oKS5zZXQoaW5wdXRBbGxvd2xpc3QpOwogfQogCi1jbGFzcyBGb250RGF0YWJhc2UgewotcHVi
bGljOgotICAgIHN0YXRpYyBGb250RGF0YWJhc2UmIHNpbmdsZXRvbkFsbG93aW5nVXNlckluc3Rh
bGxlZEZvbnRzKCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGF0
YWJhc2U+IGRhdGFiYXNlKEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMpOwotICAgICAgICBy
ZXR1cm4gZGF0YWJhc2U7Ci0gICAgfQotCi0gICAgc3RhdGljIEZvbnREYXRhYmFzZSYgc2luZ2xl
dG9uRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKQotICAgIHsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZvbnREYXRhYmFzZT4gZGF0YWJhc2UoQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHM6Ok5vKTsKLSAgICAgICAgcmV0dXJuIGRhdGFiYXNlOwotICAgIH0KLQotICAgIEZvbnRE
YXRhYmFzZShjb25zdCBGb250RGF0YWJhc2UmKSA9IGRlbGV0ZTsKLSAgICBGb250RGF0YWJhc2Um
IG9wZXJhdG9yPShjb25zdCBGb250RGF0YWJhc2UmKSA9IGRlbGV0ZTsKLQotICAgIHN0cnVjdCBJ
bnN0YWxsZWRGb250IHsKLSAgICAgICAgSW5zdGFsbGVkRm9udCgpID0gZGVmYXVsdDsKLQotICAg
ICAgICBJbnN0YWxsZWRGb250KENURm9udERlc2NyaXB0b3JSZWYgZm9udERlc2NyaXB0b3IsIEFs
bG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQotICAgICAgICAg
ICAgOiBmb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvcikKLSAgICAgICAgICAgICwgY2FwYWJp
bGl0aWVzKGNhcGFiaWxpdGllc0ZvckZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yKSkKLSAg
ICAgICAgewotI2lmIEhBVkUoQ1RGT05UQ1JFQVRFRk9SQ0hBUkFDVEVSU1dJVEhMQU5HVUFHRUFO
RE9QVElPTikKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShhbGxvd1VzZXJJbnN0YWxsZWRGb250
cyk7Ci0jZWxzZQotICAgICAgICAgICAgaWYgKGFsbG93VXNlckluc3RhbGxlZEZvbnRzICE9IEFs
bG93VXNlckluc3RhbGxlZEZvbnRzOjpObykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFi
bGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgICAgICAgICAgYWRkQXR0
cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKGF0dHJpYnV0ZXMuZ2V0KCksIGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKTsKLSAgICAgICAgICAgIHRoaXMtPmZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihD
VEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnREZXNjcmlwdG9yLCBh
dHRyaWJ1dGVzLmdldCgpKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvcjsKLSAgICAgICAgRm9udFNlbGVj
dGlvbkNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBJbnN0
YWxsZWRGb250RmFtaWx5IHsKLSAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVE
OwotCi0gICAgICAgIEluc3RhbGxlZEZvbnRGYW1pbHkoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAg
ZXhwbGljaXQgSW5zdGFsbGVkRm9udEZhbWlseShWZWN0b3I8SW5zdGFsbGVkRm9udD4mJiBpbnN0
YWxsZWRGb250cykKLSAgICAgICAgICAgIDogaW5zdGFsbGVkRm9udHMoV1RGTW92ZShpbnN0YWxs
ZWRGb250cykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZm9udCA6IHRoaXMt
Pmluc3RhbGxlZEZvbnRzKQotICAgICAgICAgICAgICAgIGV4cGFuZChmb250KTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZXhwYW5kKGNvbnN0IEluc3RhbGxlZEZvbnQmIGluc3RhbGxlZEZv
bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhcGFiaWxpdGllcy5leHBhbmQoaW5zdGFsbGVk
Rm9udC5jYXBhYmlsaXRpZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZEZvbnRzLmlzRW1w
dHkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZEZvbnRzLnNpemUoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFZlY3RvcjxJbnN0YWxsZWRGb250PiBpbnN0YWxsZWRGb250czsKLSAgICAgICAg
Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7Ci0gICAgfTsKLQotICAgIGNv
bnN0IEluc3RhbGxlZEZvbnRGYW1pbHkmIGNvbGxlY3Rpb25Gb3JGYW1pbHkoY29uc3QgU3RyaW5n
JiBmYW1pbHlOYW1lKQotICAgIHsKLSAgICAgICAgYXV0byBmb2xkZWQgPSBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGZhbWlseU5hbWUpOwotICAgICAgICB7Ci0gICAg
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnNMb2Nr
IH07Ci0gICAgICAgICAgICBhdXRvIGl0ID0gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnMu
ZmluZChmb2xkZWQpOwotICAgICAgICAgICAgaWYgKGl0ICE9IG1fZmFtaWx5TmFtZVRvRm9udERl
c2NyaXB0b3JzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAqaXQtPnZhbHVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYXV0byBpbnN0YWxsZWRGb250RmFtaWx5ID0gWyZdIHsKLSAgICAg
ICAgICAgIGF1dG8gZmFtaWx5TmFtZVN0cmluZyA9IGZvbGRlZC5jcmVhdGVDRlN0cmluZygpOwot
ICAgICAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVN
dXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgICAgIENG
RGljdGlvbmFyeUFkZFZhbHVlKGF0dHJpYnV0ZXMuZ2V0KCksIGtDVEZvbnRGYW1pbHlOYW1lQXR0
cmlidXRlLCBmYW1pbHlOYW1lU3RyaW5nLmdldCgpKTsKLSAgICAgICAgICAgIGFkZEF0dHJpYnV0
ZXNGb3JJbnN0YWxsZWRGb250cyhhdHRyaWJ1dGVzLmdldCgpLCBtX2FsbG93VXNlckluc3RhbGxl
ZEZvbnRzKTsKLSAgICAgICAgICAgIGF1dG8gZm9udERlc2NyaXB0b3JUb01hdGNoID0gYWRvcHRD
RihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkp
OwotICAgICAgICAgICAgYXV0byBtYW5kYXRvcnlBdHRyaWJ1dGVzID0gaW5zdGFsbGVkRm9udE1h
bmRhdG9yeUF0dHJpYnV0ZXMobV9hbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7Ci0gICAgICAgICAg
ICBpZiAoYXV0byBtYXRjaGVzID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlTWF0Y2hp
bmdGb250RGVzY3JpcHRvcnMoZm9udERlc2NyaXB0b3JUb01hdGNoLmdldCgpLCBtYW5kYXRvcnlB
dHRyaWJ1dGVzLmdldCgpKSkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvdW50ID0gQ0ZBcnJh
eUdldENvdW50KG1hdGNoZXMuZ2V0KCkpOwotICAgICAgICAgICAgICAgIFZlY3RvcjxJbnN0YWxs
ZWRGb250PiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoY291bnQpOwotICAgICAgICAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgSW5zdGFsbGVkRm9udCBpbnN0YWxsZWRG
b250KHN0YXRpY19jYXN0PENURm9udERlc2NyaXB0b3JSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgobWF0Y2hlcy5nZXQoKSwgaSkpLCBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGluc3RhbGxlZEZv
bnQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8SW5zdGFsbGVkRm9udEZhbWlseT4oV1RGTW92ZShyZXN1bHQpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEluc3RhbGxlZEZvbnRGYW1pbHk+KCk7Ci0g
ICAgICAgIH0oKTsKLQotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9mYW1pbHlOYW1lVG9Gb250
RGVzY3JpcHRvcnNMb2NrIH07Ci0gICAgICAgIHJldHVybiAqbV9mYW1pbHlOYW1lVG9Gb250RGVz
Y3JpcHRvcnMuYWRkKFdURk1vdmUoZm9sZGVkKS5pc29sYXRlZENvcHkoKSwgV1RGTW92ZShpbnN0
YWxsZWRGb250RmFtaWx5KSkuaXRlcmF0b3ItPnZhbHVlOwotICAgIH0KLQotICAgIGNvbnN0IElu
c3RhbGxlZEZvbnQmIGZvbnRGb3JQb3N0U2NyaXB0TmFtZShjb25zdCBBdG9tU3RyaW5nJiBwb3N0
U2NyaXB0TmFtZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGZvbGRlZCA9IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZvbGRlZEZhbWlseU5hbWUocG9zdFNjcmlwdE5hbWUpOwotICAgICAg
ICByZXR1cm4gbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuc3VyZShmb2xkZWQs
IFsmXSB7Ci0gICAgICAgICAgICBhdXRvIHBvc3RTY3JpcHROYW1lU3RyaW5nID0gZm9sZGVkLmNy
ZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAgICAgICBDRlN0cmluZ1JlZiBuYW1lQXR0cmlidXRlID0g
a0NURm9udFBvc3RTY3JpcHROYW1lQXR0cmlidXRlOwotICAgICAgICAgICAgYXV0byBhdHRyaWJ1
dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGF0dHJp
YnV0ZXMuZ2V0KCksIGtDVEZvbnRFbmFibGVkQXR0cmlidXRlLCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0g
ICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShhdHRyaWJ1dGVzLmdldCgpLCBuYW1lQXR0
cmlidXRlLCBwb3N0U2NyaXB0TmFtZVN0cmluZy5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRBdHRy
aWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoYXR0cmlidXRlcy5nZXQoKSwgbV9hbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7Ci0gICAgICAgICAgICBhdXRvIGZvbnREZXNjcmlwdG9yVG9NYXRjaCA9IGFk
b3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0
KCkpKTsKLSAgICAgICAgICAgIGF1dG8gbWFuZGF0b3J5QXR0cmlidXRlcyA9IGluc3RhbGxlZEZv
bnRNYW5kYXRvcnlBdHRyaWJ1dGVzKG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwotICAgICAg
ICAgICAgYXV0byBtYXRjaCA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZU1hdGNoaW5n
Rm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3JUb01hdGNoLmdldCgpLCBtYW5kYXRvcnlBdHRy
aWJ1dGVzLmdldCgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gSW5zdGFsbGVkRm9udChtYXRjaC5n
ZXQoKSwgbV9hbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7Ci0gICAgICAgIH0pLml0ZXJhdG9yLT52
YWx1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9yc0xvY2sg
fTsKLSAgICAgICAgICAgIG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmNsZWFyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzLmNsZWFy
KCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxG
b250RGF0YWJhc2U+OwotCi0gICAgRm9udERhdGFiYXNlKEFsbG93VXNlckluc3RhbGxlZEZvbnRz
IGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQotICAgICAgICA6IG1fYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMoYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCi0gICAgewotICAgIH0KLQotICAgIExvY2sg
bV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnNMb2NrOwotICAgIE1lbW9yeUNvbXBhY3RSb2Jp
bkhvb2RIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEluc3RhbGxlZEZvbnRGYW1pbHk+
PiBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9ycyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fZmFt
aWx5TmFtZVRvRm9udERlc2NyaXB0b3JzTG9jayk7Ci0gICAgTWVtb3J5Q29tcGFjdFJvYmluSG9v
ZEhhc2hNYXA8U3RyaW5nLCBJbnN0YWxsZWRGb250PiBtX3Bvc3RTY3JpcHROYW1lVG9Gb250RGVz
Y3JpcHRvcnM7Ci0gICAgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgbV9hbGxvd1VzZXJJbnN0YWxs
ZWRGb250czsKLX07Ci0KIC8vIEJlY2F1c2UgdGhpcyBzdHJ1Y3QgaG9sZHMgaW50ZXJtZWRpYXRl
IHZhbHVlcyB3aGljaCBtYXkgYmUgaW4gdGhlIGNvbXByZXNzZWQgLTEgLSAxIEdYIHJhbmdlLCB3
ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgcmVsYXRpdmVseSBsYXJnZQogLy8gcXVhbnRpemF0aW9u
IG9mIEZvbnRTZWxlY3Rpb25WYWx1ZS4gSW5zdGVhZCwgZG8gdGhpcyBsb2dpYyB3aXRoIGZsb2F0
cy4KIHN0cnVjdCBNaW5NYXggewpAQCAtMTI2MSw5ICsxMTE4LDE0IEBAIHN0YXRpYyBjb25zdCBG
b250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChjb25zdCBGb250RGF0
YWJhc2U6OkluCiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRGb250c1tpbmRleF07
CiB9CiAKK0ZvbnREYXRhYmFzZSYgRm9udENhY2hlOjpkYXRhYmFzZShBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK3sKKyAgICByZXR1cm4gYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA/IG1fZGF0YWJh
c2VBbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cyA6IG1fZGF0YWJhc2VEaXNhbGxvd2luZ1VzZXJJ
bnN0YWxsZWRGb250czsKK30KKwogVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZv
bnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKQogewotICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxl
ZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNp
bmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmds
ZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7CisgICAgYXV0byYgZm9udERhdGFi
YXNlID0gZGF0YWJhc2UoYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogICAgIGNvbnN0IGF1dG8m
IGZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5TmFtZS5zdHJp
bmcoKSk7CiAgICAgcmV0dXJuIGZvbnRzLmluc3RhbGxlZEZvbnRzLm1hcChbXShhdXRvJiBmb250
KSB7CiAgICAgICAgIHJldHVybiBmb250LmNhcGFiaWxpdGllczsKQEAgLTEyOTUsNyArMTE1Nyw3
IEBAIHN0YXRpYyBib29sIGlzQWxsb3dsaXN0ZWRGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5KQogICAgIHJldHVybiBBbGxvd2xpc3Q6OnNpbmdsZXRvbigpLmFsbG93cyhmYW1pbHkpOwog
fQogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0
IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVxdWVzdCwgZmxvYXQg
c2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitz
dGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KEZvbnREYXRhYmFz
ZSYgZm9udERhdGFiYXNlLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWxlY3Rpb25S
ZXF1ZXN0IHJlcXVlc3QsIGZsb2F0IHNpemUpCiB7CiAgICAgaWYgKCFpc0FsbG93bGlzdGVkRmFt
aWx5KGZhbWlseSkpCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIgfTsKQEAgLTEzMDUsNyArMTE2
Nyw2IEBAIHN0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIg
fTsKICAgICB9CiAKLSAgICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRG
b250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5n
bGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0
b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpOwogICAgIGNvbnN0IGF1dG8mIGZhbWls
eUZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5LnN0cmluZygp
KTsKICAgICBpZiAoZmFtaWx5Rm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFRoZSBDU1Mg
c3BlYyBzdGF0ZXMgdGhhdCBmb250LWZhbWlseSBvbmx5IGFjY2VwdHMgYSBuYW1lIG9mIGFuIGFj
dHVhbCBmb250IGZhbWlseS4gSG93ZXZlciwgaW4gV2ViS2l0LCB3ZSBjbGFpbSB0byBhbHNvCkBA
IC0xMzQ4LDEwICsxMjA5LDYgQEAgdm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW52YWxpZGF0ZSgp
CiAgICAgLy8gRklYTUU6IFdvcmtlcnMgbmVlZCB0byBhY2Nlc3MgRm9udEZhbWlseVNwZWNpZmlj
YXRpb25Db3JlVGV4dENhY2hlLgogICAgIGNsZWFyRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3Jl
VGV4dENhY2hlKCk7CiAKLSAgICAvLyBGSVhNRTogV29ya2VycyBuZWVkIHRvIGFjY2VzcyBGb250
RGF0YWJhc2UuCi0gICAgRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxs
ZWRGb250cygpLmNsZWFyKCk7Ci0gICAgRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2lu
Z1VzZXJJbnN0YWxsZWRGb250cygpLmNsZWFyKCk7Ci0KICAgICBwbGF0Zm9ybVNob3VsZEVuaGFu
Y2VUZXh0TGVnaWJpbGl0eSgpID0gX0FYU0VuaGFuY2VUZXh0TGVnaWJpbGl0eUVuYWJsZWQoKTsK
IH0KIApAQCAtMTQxOCwxNSArMTI3NSwxNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4g
Zm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0
aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBGb250Q3JlYXRpb25Db250ZXh0JiBmb250Q3JlYXRpb25D
b250ZXh0LCBmbG9hdCBzaXplKQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRo
RmFtaWx5KEZvbnREYXRhYmFzZSYgZm9udERhdGFiYXNlLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBGb250Q3Jl
YXRpb25Db250ZXh0JiBmb250Q3JlYXRpb25Db250ZXh0LCBmbG9hdCBzaXplKQogeworICAgIEFT
U0VSVChmb250RGF0YWJhc2UuYWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA9PSBmb250RGVzY3Jp
cHRpb24uc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSk7CisKICAgICBpZiAoZmFtaWx5
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBGb250TG9va3VwIGZv
bnRMb29rdXA7CiAgICAgZm9udExvb2t1cC5yZXN1bHQgPSBmb250V2l0aEZhbWlseVNwZWNpYWxD
YXNlKGZhbWlseSwgZm9udERlc2NyaXB0aW9uLCBzaXplLCBmb250RGVzY3JpcHRpb24uc2hvdWxk
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSk7CiAgICAgaWYgKCFmb250TG9va3VwLnJlc3VsdCkK
LSAgICAgICAgZm9udExvb2t1cCA9IHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoZmFtaWx5
LCBmb250RGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKSwgc2l6ZSwgZm9udERlc2Ny
aXB0aW9uLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkpOworICAgICAgICBmb250TG9v
a3VwID0gcGxhdGZvcm1Gb250TG9va3VwV2l0aEZhbWlseShmb250RGF0YWJhc2UsIGZhbWlseSwg
Zm9udERlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCksIHNpemUpOwogICAgIHJldHVy
biBwcmVwYXJlUGxhdGZvcm1Gb250KGZvbnRMb29rdXAucmVzdWx0LmdldCgpLCBmb250RGVzY3Jp
cHRpb24sIGZvbnRDcmVhdGlvbkNvbnRleHQsICFmb250TG9va3VwLmNyZWF0ZWRGcm9tUG9zdFNj
cmlwdE5hbWUpOwogfQogCkBAIC0xNDU3LDcgKzEzMTYsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9u
dFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZQogewogICAgIGZsb2F0IHNpemUgPSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNp
emUoKTsKIAotICAgIGF1dG8gZm9udCA9IGZvbnRXaXRoRmFtaWx5KGZhbWlseSwgZm9udERlc2Ny
aXB0aW9uLCBmb250Q3JlYXRpb25Db250ZXh0LCBzaXplKTsKKyAgICBhdXRvJiBmb250RGF0YWJh
c2UgPSBkYXRhYmFzZShmb250RGVzY3JpcHRpb24uc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMoKSk7CisgICAgYXV0byBmb250ID0gZm9udFdpdGhGYW1pbHkoZm9udERhdGFiYXNlLCBmYW1p
bHksIGZvbnREZXNjcmlwdGlvbiwgZm9udENyZWF0aW9uQ29udGV4dCwgc2l6ZSk7CiAKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgaWYgKCFmb250KSB7CkBAIC0xNDY4LDcgKzEzMjgsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZQogICAgICAgICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBiZWNhdXNl
IHdlIHdhbnQgdG8gdXNlIG91ciBvd24gYWxnb3JpdGhtIHRvIGFjdHVhbGx5IGZpbmQgdGhlIGZv
bnQuCiAgICAgICAgIGF1dG9BY3RpdmF0ZUZvbnQoZmFtaWx5LnN0cmluZygpLCBzaXplKTsKIAot
ICAgICAgICBmb250ID0gZm9udFdpdGhGYW1pbHkoZmFtaWx5LCBmb250RGVzY3JpcHRpb24sIGZv
bnRDcmVhdGlvbkNvbnRleHQsIHNpemUpOworICAgICAgICBmb250ID0gZm9udFdpdGhGYW1pbHko
Zm9udERhdGFiYXNlLCBmYW1pbHksIGZvbnREZXNjcmlwdGlvbiwgZm9udENyZWF0aW9uQ29udGV4
dCwgc2l6ZSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTE1MDAsOCArMTM2MCw4IEBAIHZvaWQgRm9u
dENhY2hlOjpwbGF0Zm9ybVB1cmdlSW5hY3RpdmVGb250RGF0YSgpCiAgICAgZm9yIChhdXRvJiBm
b250IDogdG9SZW1vdmUpCiAgICAgICAgIGZhbGxiYWNrRGVkdXBTZXQoKS5yZW1vdmUoZm9udCk7
CiAKLSAgICBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRz
KCkuY2xlYXIoKTsKLSAgICBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlcklu
c3RhbGxlZEZvbnRzKCkuY2xlYXIoKTsKKyAgICBtX2RhdGFiYXNlQWxsb3dpbmdVc2VySW5zdGFs
bGVkRm9udHMuY2xlYXIoKTsKKyAgICBtX2RhdGFiYXNlRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVk
Rm9udHMuY2xlYXIoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xNzQzLDkg
KzE2MDMsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHJld2FybShQcmV3YXJtSW5mb3JtYXRpb24mJiBw
cmV3YXJtSW5mb3JtYXRpb24pCiAgICAgaWYgKCFtX3ByZXdhcm1RdWV1ZSkKICAgICAgICAgbV9w
cmV3YXJtUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiV2ViS2l0IGZvbnQgcHJld2FybSBxdWV1
ZSIpOwogCi0gICAgYXV0byYgZGF0YWJhc2UgPSBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2Fs
bG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7Ci0KLSAgICBtX3ByZXdhcm1RdWV1ZS0+ZGlzcGF0
Y2goWyZkYXRhYmFzZSwgcHJld2FybUluZm9ybWF0aW9uID0gV1RGTW92ZShwcmV3YXJtSW5mb3Jt
YXRpb24pLmlzb2xhdGVkQ29weSgpXSB7CisgICAgbV9wcmV3YXJtUXVldWUtPmRpc3BhdGNoKFsm
ZGF0YWJhc2UgPSBtX2RhdGFiYXNlRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMsIHByZXdh
cm1JbmZvcm1hdGlvbiA9IFdURk1vdmUocHJld2FybUluZm9ybWF0aW9uKS5pc29sYXRlZENvcHko
KV0gewogICAgICAgICBmb3IgKGF1dG8mIGZhbWlseSA6IHByZXdhcm1JbmZvcm1hdGlvbi5zZWVu
RmFtaWxpZXMpCiAgICAgICAgICAgICBkYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWls
eSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnREYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250RGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uOTc1ZDAyMzEzOGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udERhdGFiYXNlLmNwcApAQCAtMCwwICsxLDEyNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnREYXRhYmFz
ZS5oIgorCisjaW5jbHVkZSAiRm9udENhY2hlQ29yZVRleHQuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udDo6SW5z
dGFsbGVkRm9udChDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yLCBBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKKyAgICA6IGZvbnREZXNjcmlw
dG9yKGZvbnREZXNjcmlwdG9yKQorICAgICwgY2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllc0ZvckZv
bnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yKSkKK3sKKyNpZiBIQVZFKENURk9OVENSRUFURUZP
UkNIQVJBQ1RFUlNXSVRITEFOR1VBR0VBTkRPUFRJT04pCisgICAgVU5VU0VEX1BBUkFNKGFsbG93
VXNlckluc3RhbGxlZEZvbnRzKTsKKyNlbHNlCisgICAgaWYgKGFsbG93VXNlckluc3RhbGxlZEZv
bnRzICE9IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObykKKyAgICAgICAgcmV0dXJuOworICAg
IGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgYWRkQXR0cmlidXRlc0Zvckluc3Rh
bGxlZEZvbnRzKGF0dHJpYnV0ZXMuZ2V0KCksIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKKyAg
ICB0aGlzLT5mb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNv
cHlXaXRoQXR0cmlidXRlcyhmb250RGVzY3JpcHRvciwgYXR0cmlidXRlcy5nZXQoKSkpOworI2Vu
ZGlmCit9CisKK0ZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udEZhbWlseTo6SW5zdGFsbGVkRm9u
dEZhbWlseShWZWN0b3I8SW5zdGFsbGVkRm9udD4mJiBpbnN0YWxsZWRGb250cykKKyAgICA6IGlu
c3RhbGxlZEZvbnRzKFdURk1vdmUoaW5zdGFsbGVkRm9udHMpKQoreworICAgIGZvciAoYXV0byYg
Zm9udCA6IHRoaXMtPmluc3RhbGxlZEZvbnRzKQorICAgICAgICBleHBhbmQoZm9udCk7Cit9CisK
K3ZvaWQgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5OjpleHBhbmQoY29uc3QgSW5z
dGFsbGVkRm9udCYgaW5zdGFsbGVkRm9udCkKK3sKKyAgICBjYXBhYmlsaXRpZXMuZXhwYW5kKGlu
c3RhbGxlZEZvbnQuY2FwYWJpbGl0aWVzKTsKK30KKworY29uc3QgRm9udERhdGFiYXNlOjpJbnN0
YWxsZWRGb250RmFtaWx5JiBGb250RGF0YWJhc2U6OmNvbGxlY3Rpb25Gb3JGYW1pbHkoY29uc3Qg
U3RyaW5nJiBmYW1pbHlOYW1lKQoreworICAgIGF1dG8gZm9sZGVkID0gRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKKyAgICB7CisgICAgICAgIExv
Y2tlciBsb2NrZXIgeyBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9yc0xvY2sgfTsKKyAgICAg
ICAgYXV0byBpdCA9IG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmZpbmQoZm9sZGVkKTsK
KyAgICAgICAgaWYgKGl0ICE9IG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuICppdC0+dmFsdWU7CisgICAgfQorCisgICAgYXV0byBpbnN0YWxs
ZWRGb250RmFtaWx5ID0gWyZdIHsKKyAgICAgICAgYXV0byBmYW1pbHlOYW1lU3RyaW5nID0gZm9s
ZGVkLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0Yo
Q0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlw
ZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tz
KSk7CisgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGF0dHJpYnV0ZXMuZ2V0KCksIGtDVEZv
bnRGYW1pbHlOYW1lQXR0cmlidXRlLCBmYW1pbHlOYW1lU3RyaW5nLmdldCgpKTsKKyAgICAgICAg
YWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKGF0dHJpYnV0ZXMuZ2V0KCksIG1fYWxsb3dV
c2VySW5zdGFsbGVkRm9udHMpOworICAgICAgICBhdXRvIGZvbnREZXNjcmlwdG9yVG9NYXRjaCA9
IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMu
Z2V0KCkpKTsKKyAgICAgICAgYXV0byBtYW5kYXRvcnlBdHRyaWJ1dGVzID0gaW5zdGFsbGVkRm9u
dE1hbmRhdG9yeUF0dHJpYnV0ZXMobV9hbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisgICAgICAg
IGlmIChhdXRvIG1hdGNoZXMgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGlu
Z0ZvbnREZXNjcmlwdG9ycyhmb250RGVzY3JpcHRvclRvTWF0Y2guZ2V0KCksIG1hbmRhdG9yeUF0
dHJpYnV0ZXMuZ2V0KCkpKSkgeworICAgICAgICAgICAgYXV0byBjb3VudCA9IENGQXJyYXlHZXRD
b3VudChtYXRjaGVzLmdldCgpKTsKKyAgICAgICAgICAgIFZlY3RvcjxJbnN0YWxsZWRGb250PiBy
ZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7
CisgICAgICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgSW5zdGFsbGVkRm9udCBpbnN0YWxsZWRGb250KHN0YXRpY19jYXN0PENURm9u
dERlc2NyaXB0b3JSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgobWF0Y2hlcy5nZXQoKSwgaSkp
LCBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKKyAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKFdURk1vdmUoaW5zdGFsbGVkRm9udCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8SW5zdGFsbGVkRm9udEZhbWlseT4oV1RGTW92ZShy
ZXN1bHQpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxJbnN0YWxsZWRG
b250RmFtaWx5PigpOworICAgIH0oKTsKKworICAgIExvY2tlciBsb2NrZXIgeyBtX2ZhbWlseU5h
bWVUb0ZvbnREZXNjcmlwdG9yc0xvY2sgfTsKKyAgICByZXR1cm4gKm1fZmFtaWx5TmFtZVRvRm9u
dERlc2NyaXB0b3JzLmFkZChmb2xkZWQuaXNvbGF0ZWRDb3B5KCksIFdURk1vdmUoaW5zdGFsbGVk
Rm9udEZhbWlseSkpLml0ZXJhdG9yLT52YWx1ZTsKK30KKworY29uc3QgRm9udERhdGFiYXNlOjpJ
bnN0YWxsZWRGb250JiBGb250RGF0YWJhc2U6OmZvbnRGb3JQb3N0U2NyaXB0TmFtZShjb25zdCBB
dG9tU3RyaW5nJiBwb3N0U2NyaXB0TmFtZSkKK3sKKyAgICBjb25zdCBhdXRvJiBmb2xkZWQgPSBG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKHBvc3RTY3JpcHROYW1lKTsK
KyAgICByZXR1cm4gbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuc3VyZShmb2xk
ZWQsIFsmXSB7CisgICAgICAgIGF1dG8gcG9zdFNjcmlwdE5hbWVTdHJpbmcgPSBmb2xkZWQuY3Jl
YXRlQ0ZTdHJpbmcoKTsKKyAgICAgICAgQ0ZTdHJpbmdSZWYgbmFtZUF0dHJpYnV0ZSA9IGtDVEZv
bnRQb3N0U2NyaXB0TmFtZUF0dHJpYnV0ZTsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gYWRv
cHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZr
Q0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxs
QmFja3MpKTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoYXR0cmlidXRlcy5nZXQoKSwg
a0NURm9udEVuYWJsZWRBdHRyaWJ1dGUsIGtDRkJvb2xlYW5UcnVlKTsKKyAgICAgICAgQ0ZEaWN0
aW9uYXJ5QWRkVmFsdWUoYXR0cmlidXRlcy5nZXQoKSwgbmFtZUF0dHJpYnV0ZSwgcG9zdFNjcmlw
dE5hbWVTdHJpbmcuZ2V0KCkpOworICAgICAgICBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9u
dHMoYXR0cmlidXRlcy5nZXQoKSwgbV9hbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisgICAgICAg
IGF1dG8gZm9udERlc2NyaXB0b3JUb01hdGNoID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3Jl
YXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOworICAgICAgICBhdXRvIG1hbmRh
dG9yeUF0dHJpYnV0ZXMgPSBpbnN0YWxsZWRGb250TWFuZGF0b3J5QXR0cmlidXRlcyhtX2FsbG93
VXNlckluc3RhbGxlZEZvbnRzKTsKKyAgICAgICAgYXV0byBtYXRjaCA9IGFkb3B0Q0YoQ1RGb250
RGVzY3JpcHRvckNyZWF0ZU1hdGNoaW5nRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3JUb01h
dGNoLmdldCgpLCBtYW5kYXRvcnlBdHRyaWJ1dGVzLmdldCgpKSk7CisgICAgICAgIHJldHVybiBJ
bnN0YWxsZWRGb250KG1hdGNoLmdldCgpLCBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKKyAg
ICB9KS5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgRm9udERhdGFiYXNlOjpjbGVhcigpCit7
CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9mYW1pbHlOYW1lVG9Gb250RGVzY3Jp
cHRvcnNMb2NrIH07CisgICAgICAgIG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmNsZWFy
KCk7CisgICAgfQorICAgIG1fcG9zdFNjcmlwdE5hbWVUb0ZvbnREZXNjcmlwdG9ycy5jbGVhcigp
OworfQorCitGb250RGF0YWJhc2U6OkZvbnREYXRhYmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKKyAgICA6IG1fYWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMoYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnREYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dERhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mN2Q1
NDMwYWMwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250RGF0YWJhc2UuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCIK
KyNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZvbnREYXRhYmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udERhdGFi
YXNlKTsKKworcHVibGljOgorICAgIEZvbnREYXRhYmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyk7CisKKyAgICBzdHJ1Y3QgSW5zdGFsbGVkRm9udCB7CisgICAgICAgIEluc3RhbGxlZEZvbnQo
KSA9IGRlZmF1bHQ7CisgICAgICAgIEluc3RhbGxlZEZvbnQoQ1RGb250RGVzY3JpcHRvclJlZiwg
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworCisgICAgICAgIFJldGFpblB0cjxDVEZvbnREZXNj
cmlwdG9yUmVmPiBmb250RGVzY3JpcHRvcjsKKyAgICAgICAgRm9udFNlbGVjdGlvbkNhcGFiaWxp
dGllcyBjYXBhYmlsaXRpZXM7CisgICAgfTsKKworICAgIHN0cnVjdCBJbnN0YWxsZWRGb250RmFt
aWx5IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAg
IEluc3RhbGxlZEZvbnRGYW1pbHkoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgZXhwbGljaXQgSW5z
dGFsbGVkRm9udEZhbWlseShWZWN0b3I8SW5zdGFsbGVkRm9udD4mJiBpbnN0YWxsZWRGb250cyk7
CisKKyAgICAgICAgdm9pZCBleHBhbmQoY29uc3QgSW5zdGFsbGVkRm9udCYpOworICAgICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBpbnN0YWxsZWRGb250cy5pc0VtcHR5KCk7IH0K
KyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBpbnN0YWxsZWRGb250cy5zaXpl
KCk7IH0KKworICAgICAgICBWZWN0b3I8SW5zdGFsbGVkRm9udD4gaW5zdGFsbGVkRm9udHM7Cisg
ICAgICAgIEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOworICAgIH07CisK
KyAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cygpIGNv
bnN0IHsgcmV0dXJuIG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHM7IH0KKyAgICBjb25zdCBJbnN0
YWxsZWRGb250RmFtaWx5JiBjb2xsZWN0aW9uRm9yRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZSk7CisgICAgY29uc3QgSW5zdGFsbGVkRm9udCYgZm9udEZvclBvc3RTY3JpcHROYW1lKGNv
bnN0IEF0b21TdHJpbmcmIHBvc3RTY3JpcHROYW1lKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKK3By
aXZhdGU6CisgICAgTG9jayBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9yc0xvY2s7CisgICAg
TWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SW5z
dGFsbGVkRm9udEZhbWlseT4+IG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzIFdURl9HVUFS
REVEX0JZX0xPQ0sobV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnNMb2NrKTsKKyAgICBNZW1v
cnlDb21wYWN0Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIEluc3RhbGxlZEZvbnQ+IG1fcG9zdFNj
cmlwdE5hbWVUb0ZvbnREZXNjcmlwdG9yczsKKyAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBt
X2FsbG93VXNlckluc3RhbGxlZEZvbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>