<?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>215689</bug_id>
          
          <creation_ts>2020-08-19 22:35:59 -0700</creation_ts>
          <short_desc>[Cocoa] Unify implementation of custom font name aliases between all Cocoa platforms</short_desc>
          <delta_ts>2020-09-05 10:51:13 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1681642</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-19 22:35:59 -0700</bug_when>
    <thetext>[Cocoa] Unify implementation of custom font name aliases between all Cocoa platforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681643</commentid>
    <comment_count>1</comment_count>
      <attachid>406918</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-19 22:37:11 -0700</bug_when>
    <thetext>Created attachment 406918
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683285</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-26 22:36:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/67851826&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686074</commentid>
    <comment_count>3</comment_count>
      <attachid>406918</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-05 08:54:11 -0700</bug_when>
    <thetext>Comment on attachment 406918
Patch

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

Nice improvement.

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:1311
&gt; +        RetainPtr&lt;CFNumberRef&gt; numberSpacingNumber = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;numberSpacingType));

auto

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:1312
&gt; +        RetainPtr&lt;CFNumberRef&gt; monospacedNumbersNumber = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;monospacedNumbersSelector));

auto

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:1313
&gt; +        RetainPtr&lt;CTFontDescriptorRef&gt; systemFontDescriptor = adoptCF(CTFontDescriptorCreateForUIType(kCTFontUIFontSystem, size, nullptr));

auto

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:1314
&gt; +        RetainPtr&lt;CTFontDescriptorRef&gt; monospaceFontDescriptor = adoptCF(CTFontDescriptorCreateCopyWithFeature(systemFontDescriptor.get(), numberSpacingNumber.get(), monospacedNumbersNumber.get()));

auto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686089</commentid>
    <comment_count>4</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-05 10:51:13 -0700</bug_when>
    <thetext>Committed r266663: &lt;https://trac.webkit.org/changeset/266663&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406918</attachid>
            <date>2020-08-19 22:37:11 -0700</date>
            <delta_ts>2020-09-05 08:54:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215689-20200819223711.patch</filename>
            <type>text/plain</type>
            <size>23920</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1ODkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjMwYmRlNzlmZTU5ODk4
M2M3MjczM2VmYjQ0OGQyZDc4NGMwNmUxYi4uMzIxMWExMGE3MjkzNzk3YjljYzJhNWM0ZmFlN2Rj
YjE2M2EwNmIzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIwLTA4LTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBV
bmlmeSBpbXBsZW1lbnRhdGlvbiBvZiBjdXN0b20gZm9udCBuYW1lIGFsaWFzZXMgYmV0d2VlbiBh
bGwgQ29jb2EgcGxhdGZvcm1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTU2ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGUgZXhpc3RpbmcgY29kZSBpcyBkdXBsaWNhdGVkIGFsbW9zdCB2ZXJiYXRp
bS4gVGhlcmUncyBubyBwb2ludCBpbiBoYXZpbmcgdHdvIGNvcGllcyBvZiB0aGUgc2FtZSB0aGlu
Zy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBj
aGFuZ2UuCisKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpmb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZvbnRXaXRoRmFtaWx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnREZXNjcmlwdGlvbkNvY29hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUF0IGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6YmFzZVN5c3RlbUZvbnREZXNjcmlwdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnN5c3RlbUZvbnRNb2RpZmljYXRpb25BdHRyaWJ1dGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnN5c3RlbUZvbnREZXNjcmlwdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnBsYXRmb3JtRm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZSk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbTogUmVtb3ZlZC4K
KwogMjAyMC0wOC0xOSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbaU9TXSBSZXN0b3JlIGEgMTBfMTVfKiB1c2VyLWFnZW50IHN0cmluZyB3aGVuIHJl
cXVlc3RpbmcgZGVza3RvcCBzaXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDNmMzU2
YWUzY2IxYTNlN2Q5Mjc0MjkxMzgzOGYwMjM1ZWVmZDgxMDkuLmJiMjE3YmIzZDQ2ZTljMGZlNTY5
MDMzMzk4ZjVkNDE0MmM0Njc2MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0zMzQs
NyArMzM0LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hYy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9h
dFNpemVNYWMubW0KLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvSWNvbk1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYjE3MTE0Y2Jj
MjFmZTI5MzkxMDJhMzFkNmZmMDJiOWMzMTJjOTg4Zi4uZGNhYzMwM2RkYmQyMGIyNGU5ZTNhZDky
ZGVjNzZjOTY5ZjFjOGU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MDIsNyArNDAy
LDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFjLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9GbG9hdFNpemVNYWMubW0KLXBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMu
bW0KIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9JY29uTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggMTFhMTAxMjNmZTQ1ODgzYzM3ZmNjMzJmYjY3NzZmNDAwMDg0MThm
ZS4uOTBiYmQ1Y2Q1NTdjNGQ1MzhlZDRlNDEwMmE4MmI1ZTVhYzJhZTc2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMwNjQs
NyArMTMwNjQsNiBAQAogCQlCMkExRjJBNzBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHTWlzc2luZ0ds
eXBoRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZH
TWlzc2luZ0dseXBoRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
QTFGMkE4MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdNaXNzaW5nR2x5cGhFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkE5MENFRjBBQkYwMDQ0MkY2QSAvKiBT
VkdNaXNzaW5nR2x5cGhFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHTWlz
c2luZ0dseXBoRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQUZG
Qzc0MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q2FjaGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhY2hlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkFGRkM3NTBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQUZG
Qzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQUZGQzc4MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250
Q2FzY2FkZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEZvbnRDYXNjYWRlQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTY3
OSw3ICsyNTY3OCw2IEBACiAJCQkJMkRFNzAwMjIxOTJGRTgyQTAwQjA5NzVDIC8qIERpc3BsYXlS
ZWZyZXNoTW9uaXRvck1hYy5oICovLAogCQkJCUIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFBvaW50TWFjLm1tICovLAogCQkJCUIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9h
dFNpemVNYWMubW0gKi8sCi0JCQkJQjJBRkZDNzQwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNo
ZU1hYy5tbSAqLywKIAkJCQlCMkFGRkM3NTBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHAgKi8sCiAJCQkJQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaCAqLywKIAkJCQlCMkFGRkM3QjBEMDBBNUMxMDAzMDA3NEQgLyog
R2x5cGhQYWdlTWFjLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRleCAzNjQwYmYz
MTZiN2RjMTlmYWYyMjc3N2FlZTViY2QwZDE0NGE3NWYwLi5iOGJiMzc1NGFlZjY2Zjk4MTNjYWJi
MGE5ZGQ0OTI4ZDhlNTQwNDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCkBAIC0xMjU3LDYg
KzEyNTcsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRm9udENhY2hlKCkKIAogc3RhdGljIFJl
dGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxv
YXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
CiB7CisgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246
OmVmZmVjdGl2ZUZhbWlseUF0KCkgaW4gRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgT3B0
aW9uYWw8U3lzdGVtRm9udEtpbmQ+IHN5c3RlbURlc2lnbjsKIAogI2lmIEhBVkUoREVTSUdOX1NZ
U1RFTV9VSV9GT05UUykKQEAgLTEyNjgsNyArMTI2OSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RG
b250UmVmPiBmb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eSwKICAgICAgICAgc3lzdGVtRGVzaWduID0gU3lzdGVtRm9udEtpbmQ6OlVJUm91bmRlZDsKICNl
bmRpZgogCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgInVp
LXNhbnMtc2VyaWYiKSkgeworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShm
YW1pbHksICItd2Via2l0LXN5c3RlbS1mb250IikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZmFtaWx5LCAiLWFwcGxlLXN5c3RlbSIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGZhbWlseSwgIi1hcHBsZS1zeXN0ZW0tZm9udCIpIHx8IGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGZhbWlseSwgInN5c3RlbS11aSIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGZhbWlseSwgInVpLXNhbnMtc2VyaWYiKSkgewogICAgICAgICBBU1NFUlQoIXN5
c3RlbURlc2lnbik7CiAgICAgICAgIHN5c3RlbURlc2lnbiA9IFN5c3RlbUZvbnRLaW5kOjpTeXN0
ZW1VSTsKICAgICB9CkBAIC0xMjk5LDYgKzEzMDAsMjEgQEAgc3RhdGljIFJldGFpblB0cjxDVEZv
bnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
LAogICAgICAgICByZXR1cm4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKHJlc3VsdC5nZXQo
KSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogICAgIH0KIAorICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsYXN0cmVzb3J0IikpIHsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IENURm9udERlc2NyaXB0b3JSZWYgbGFzdFJlc29ydCA9IENURm9udERlc2NyaXB0
b3JDcmVhdGVMYXN0UmVzb3J0KCk7CisgICAgICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0
ZVdpdGhGb250RGVzY3JpcHRvcihsYXN0UmVzb3J0LCBzaXplLCBudWxscHRyKSk7CisgICAgfQor
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIi1hcHBsZS1z
eXN0ZW0tbW9ub3NwYWNlZC1udW1iZXJzIikpIHsKKyAgICAgICAgaW50IG51bWJlclNwYWNpbmdU
eXBlID0ga051bWJlclNwYWNpbmdUeXBlOworICAgICAgICBpbnQgbW9ub3NwYWNlZE51bWJlcnNT
ZWxlY3RvciA9IGtNb25vc3BhY2VkTnVtYmVyc1NlbGVjdG9yOworICAgICAgICBSZXRhaW5QdHI8
Q0ZOdW1iZXJSZWY+IG51bWJlclNwYWNpbmdOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZudW1iZXJTcGFjaW5nVHlw
ZSkpOworICAgICAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IG1vbm9zcGFjZWROdW1iZXJzTnVt
YmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmbW9ub3NwYWNlZE51bWJlcnNTZWxlY3RvcikpOworICAgICAgICBSZXRhaW5Q
dHI8Q1RGb250RGVzY3JpcHRvclJlZj4gc3lzdGVtRm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENU
Rm9udERlc2NyaXB0b3JDcmVhdGVGb3JVSVR5cGUoa0NURm9udFVJRm9udFN5c3RlbSwgc2l6ZSwg
bnVsbHB0cikpOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gbW9ub3Nw
YWNlRm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0
aEZlYXR1cmUoc3lzdGVtRm9udERlc2NyaXB0b3IuZ2V0KCksIG51bWJlclNwYWNpbmdOdW1iZXIu
Z2V0KCksIG1vbm9zcGFjZWROdW1iZXJzTnVtYmVyLmdldCgpKSk7CisgICAgICAgIHJldHVybiBj
cmVhdGVGb250Rm9ySW5zdGFsbGVkRm9udHMobW9ub3NwYWNlRm9udERlc2NyaXB0b3IuZ2V0KCks
IHNpemUsIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKKyAgICB9CisKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIApAQCAtMTMwOCwxMiArMTMyNCw5IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250
UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRE
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgRm9udExvb2t1cCBmb250TG9va3VwOwot
ICAgIGZvbnRMb29rdXAucmVzdWx0ID0gcGxhdGZvcm1Gb250V2l0aEZhbWlseVNwZWNpYWxDYXNl
KGZhbWlseSwgZm9udERlc2NyaXB0aW9uLCBzaXplLCBmb250RGVzY3JpcHRpb24uc2hvdWxkQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMoKSk7Ci0gICAgaWYgKCFmb250TG9va3VwLnJlc3VsdCkgewot
ICAgICAgICBmb250TG9va3VwLnJlc3VsdCA9IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoZmFt
aWx5LCBmb250RGVzY3JpcHRpb24sIHNpemUsIGZvbnREZXNjcmlwdGlvbi5zaG91bGRBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cygpKTsKLSAgICAgICAgaWYgKCFmb250TG9va3VwLnJlc3VsdCkKLSAg
ICAgICAgICAgIGZvbnRMb29rdXAgPSBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGZhbWls
eSwgZm9udERlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCksIHNpemUsIGZvbnREZXNj
cmlwdGlvbi5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpKTsKLSAgICB9CisgICAgZm9u
dExvb2t1cC5yZXN1bHQgPSBmb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGZhbWlseSwgZm9udERl
c2NyaXB0aW9uLCBzaXplLCBmb250RGVzY3JpcHRpb24uc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMoKSk7CisgICAgaWYgKCFmb250TG9va3VwLnJlc3VsdCkKKyAgICAgICAgZm9udExvb2t1
cCA9IHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoZmFtaWx5LCBmb250RGVzY3JpcHRpb24u
Zm9udFNlbGVjdGlvblJlcXVlc3QoKSwgc2l6ZSwgZm9udERlc2NyaXB0aW9uLnNob3VsZEFsbG93
VXNlckluc3RhbGxlZEZvbnRzKCkpOwogICAgIHJldHVybiBwcmVwYXJlUGxhdGZvcm1Gb250KGZv
bnRMb29rdXAucmVzdWx0LmdldCgpLCBmb250RGVzY3JpcHRpb24sIGZvbnRGYWNlRmVhdHVyZXMs
IGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCAhZm9udExvb2t1cC5jcmVhdGVkRnJvbVBvc3RTY3JpcHRO
YW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhY2hlQ29yZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgKaW5kZXggOTRjMzI3MzViMDU4YzJkOGI3ZTZk
ZWEwOTQ5NzE2OGFmZTVjYjRlNC4uMmM3YWZiOTRmODM4M2RkMGZkN2I4NjI2ZjVhYzk5MDNjZjE5
MGM3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENhY2hlQ29yZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCkBAIC01Miw3ICs1Miw2IEBAIHN0cnVjdCBTeW50
aGVzaXNQYWlyIHsKIAogUmV0YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBsYXRmb3JtRm9udChD
VEZvbnRSZWYsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMg
Zm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgYXBwbHlXZWlnaHRXaWR0aFNsb3BlVmFyaWF0aW9u
cyA9IHRydWUpOwogU3ludGhlc2lzUGFpciBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKENURm9u
dFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBpc1BsYXRmb3JtRm9udCA9IGZhbHNl
KTsKLVJldGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHlTcGVjaWFsQ2Fz
ZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKIFJldGFpblB0cjxDVEZvbnRSZWY+IHBs
YXRmb3JtRm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0
aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNpemUpOwogYm9vbCByZXF1aXJl
c0N1c3RvbUZhbGxiYWNrRm9udChVQ2hhcjMyIGNoYXJhY3Rlcik7CiBGb250U2VsZWN0aW9uQ2Fw
YWJpbGl0aWVzIGNhcGFiaWxpdGllc0ZvckZvbnREZXNjcmlwdG9yKENURm9udERlc2NyaXB0b3JS
ZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udERlc2NyaXB0aW9uQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCmluZGV4IGViNTliODM1ZjA1N2FlNWJm
M2Y2NTY4ODJmYmZiZWE0ZWI0OWZkNDAuLjU2YWM5NGU1MmQ2ZTkwM2ZhMDhjODU4NmJiZDNlNmIy
NjMzYTJkMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250RGVzY3JpcHRpb25Db2NvYS5jcHAKQEAgLTk1LDcgKzk1LDcg
QEAgc3RhdGljIGlubGluZSBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+PiBz
eXN0ZW1Gb250Q2FzY2FkZUxpc3QoY29uc3QKIAogdW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6ZWZmZWN0aXZlRmFtaWx5Q291bnQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBNb3Zl
IGFsbCB0aGUgb3RoZXIgc3lzdGVtIGZvbnQga2V5d29yZHMgZnJvbSBwbGF0Zm9ybUZvbnRXaXRo
RmFtaWx5U3BlY2lhbENhc2UoKSB0byBoZXJlLgorICAgIC8vIEZJWE1FOiBNb3ZlIGFsbCB0aGUg
b3RoZXIgc3lzdGVtIGZvbnQga2V5d29yZHMgZnJvbSBmb250V2l0aEZhbWlseVNwZWNpYWxDYXNl
KCkgdG8gaGVyZS4KICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmYW1pbHlDb3VudCgpOyArK2kpIHsKICAgICAgICAgY29uc3QgYXV0byYgY3Nz
RmFtaWx5ID0gZmFtaWx5QXQoaSk7CkBAIC0xMDksNyArMTA5LDcgQEAgdW5zaWduZWQgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5Q291bnQoKSBjb25zdAogCiBGb250RmFt
aWx5U3BlY2lmaWNhdGlvbiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlB
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICAvLyBUaGUgc3BlY2lhbCBjYXNlcyBpbiB0
aGlzIGZ1bmN0aW9uIG5lZWQgdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIGluIEZvbnRDYWNoZUlPUy5t
bSBhbmQgRm9udENhY2hlTWFjLm1tLiBPbiBzeXN0ZW1zCisgICAgLy8gVGhlIHNwZWNpYWwgY2Fz
ZXMgaW4gdGhpcyBmdW5jdGlvbiBuZWVkIHRvIG1hdGNoIHRoZSBiZWhhdmlvciBpbiBGb250Q2Fj
aGVDb3JlVGV4dC5jcHAuIE9uIHN5c3RlbXMKICAgICAvLyB3aGVyZSBVU0UoUExBVEZPUk1fU1lT
VEVNX0ZBTExCQUNLX0xJU1QpIGlzIHNldCB0byB0cnVlLCB0aGlzIGNvZGUgaXMgdXNlZCBmb3Ig
cmVndWxhciAoZWxlbWVudCBzdHlsZSkgbG9va3VwcywKICAgICAvLyBhbmQgdGhlIGNvZGUgaW4g
Rm9udERlc2NyaXB0aW9uQ29jb2EuY3BwIGlzIHVzZWQgd2hlbiBzcmM6bG9jYWwoc3BlY2lhbC1j
YXNlZC1uYW1lKSBpcyBzcGVjaWZpZWQgaW5zaWRlIGFuCiAgICAgLy8gQGZvbnQtZmFjZSBibG9j
ay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250
Q2FjaGVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENh
Y2hlSU9TLm1tCmluZGV4IGQxNTQxZmU3NzQ2MDkwZGY2ODI2NjdhNjliNDM5MjgwYjQwOTFjMjQu
LmU2MTQwZDgxY2JjOWY0ZDk0YWE0MjJmYmEyNTBlMjUyM2Q2NDQ3YjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQpAQCAt
NzQsOTMgKzc0LDYgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDdXN0b21GYWxs
YmFja0ZvbnQoY29uc3QgVUludDMyIGMsIGNvbnN0IEZvbnREZXMKICAgICByZXR1cm4gZ2V0Q2Fj
aGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgKmZhbWlseSk7CiB9CiAKLXN0YXRpYyBS
ZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gYmFzZVN5c3RlbUZvbnREZXNjcmlwdG9yKEZv
bnRTZWxlY3Rpb25WYWx1ZSB3ZWlnaHQsIGJvb2wgYm9sZCwgZmxvYXQgc2l6ZSkKLXsKLSAgICBD
VEZvbnRVSUZvbnRUeXBlIGZvbnRUeXBlID0ga0NURm9udFVJRm9udFN5c3RlbTsKLSAgICBpZiAo
d2VpZ2h0ID49IEZvbnRTZWxlY3Rpb25WYWx1ZSgzNTApKSB7Ci0gICAgICAgIGlmIChib2xkKQot
ICAgICAgICAgICAgZm9udFR5cGUgPSBrQ1RGb250VUlGb250RW1waGFzaXplZFN5c3RlbTsKLSAg
ICB9IGVsc2UgaWYgKHdlaWdodCA+PSBGb250U2VsZWN0aW9uVmFsdWUoMjUwKSkKLSAgICAgICAg
Zm9udFR5cGUgPSBzdGF0aWNfY2FzdDxDVEZvbnRVSUZvbnRUeXBlPihrQ1RGb250VUlGb250U3lz
dGVtTGlnaHQpOwotICAgIGVsc2UgaWYgKHdlaWdodCA+PSBGb250U2VsZWN0aW9uVmFsdWUoMTUw
KSkKLSAgICAgICAgZm9udFR5cGUgPSBzdGF0aWNfY2FzdDxDVEZvbnRVSUZvbnRUeXBlPihrQ1RG
b250VUlGb250U3lzdGVtVGhpbik7Ci0gICAgZWxzZQotICAgICAgICBmb250VHlwZSA9IHN0YXRp
Y19jYXN0PENURm9udFVJRm9udFR5cGU+KGtDVEZvbnRVSUZvbnRTeXN0ZW1VbHRyYUxpZ2h0KTsK
LSAgICByZXR1cm4gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlRm9yVUlUeXBlKGZvbnRU
eXBlLCBzaXplLCBudWxscHRyKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5
PiBzeXN0ZW1Gb250TW9kaWZpY2F0aW9uQXR0cmlidXRlcyhGb250U2VsZWN0aW9uVmFsdWUgd2Vp
Z2h0LCBib29sIGl0YWxpYykKLXsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4g
dHJhaXRzRGljdGlvbmFyeSA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBp
bml0XSk7Ci0KLSAgICBmbG9hdCBjdFdlaWdodCA9IGtDVEZvbnRXZWlnaHRSZWd1bGFyOwotICAg
IGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9uVmFsdWUoMTUwKSkKLSAgICAgICAgY3RXZWlnaHQg
PSBrQ1RGb250V2VpZ2h0VWx0cmFMaWdodDsKLSAgICBlbHNlIGlmICh3ZWlnaHQgPCBGb250U2Vs
ZWN0aW9uVmFsdWUoMjUwKSkKLSAgICAgICAgY3RXZWlnaHQgPSBrQ1RGb250V2VpZ2h0VGhpbjsK
LSAgICBlbHNlIGlmICh3ZWlnaHQgPCBGb250U2VsZWN0aW9uVmFsdWUoMzUwKSkKLSAgICAgICAg
Y3RXZWlnaHQgPSBrQ1RGb250V2VpZ2h0TGlnaHQ7Ci0gICAgZWxzZSBpZiAod2VpZ2h0IDwgRm9u
dFNlbGVjdGlvblZhbHVlKDQ1MCkpCi0gICAgICAgIGN0V2VpZ2h0ID0ga0NURm9udFdlaWdodFJl
Z3VsYXI7Ci0gICAgZWxzZSBpZiAod2VpZ2h0IDwgRm9udFNlbGVjdGlvblZhbHVlKDU1MCkpCi0g
ICAgICAgIGN0V2VpZ2h0ID0ga0NURm9udFdlaWdodE1lZGl1bTsKLSAgICBlbHNlIGlmICh3ZWln
aHQgPCBGb250U2VsZWN0aW9uVmFsdWUoNjUwKSkKLSAgICAgICAgY3RXZWlnaHQgPSBrQ1RGb250
V2VpZ2h0U2VtaWJvbGQ7Ci0gICAgZWxzZSBpZiAod2VpZ2h0IDwgRm9udFNlbGVjdGlvblZhbHVl
KDc1MCkpCi0gICAgICAgIGN0V2VpZ2h0ID0ga0NURm9udFdlaWdodEJvbGQ7Ci0gICAgZWxzZSBp
ZiAod2VpZ2h0IDwgRm9udFNlbGVjdGlvblZhbHVlKDg1MCkpCi0gICAgICAgIGN0V2VpZ2h0ID0g
a0NURm9udFdlaWdodEhlYXZ5OwotICAgIGVsc2UKLSAgICAgICAgY3RXZWlnaHQgPSBrQ1RGb250
V2VpZ2h0QmxhY2s7Ci0gICAgW3RyYWl0c0RpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBu
dW1iZXJXaXRoRmxvYXQ6Y3RXZWlnaHRdIGZvcktleTpzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihr
Q1RGb250V2VpZ2h0VHJhaXQpXTsKLQotICAgIFt0cmFpdHNEaWN0aW9uYXJ5IHNldE9iamVjdDpA
WUVTIGZvcktleTpzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihrQ1RGb250VUlGb250RGVzaWduVHJh
aXQpXTsKLQotICAgIGlmIChpdGFsaWMpCi0gICAgICAgIFt0cmFpdHNEaWN0aW9uYXJ5IHNldE9i
amVjdDpAKGtDVEZvbnRJdGFsaWNUcmFpdCkgZm9yS2V5OnN0YXRpY19jYXN0PE5TU3RyaW5nICo+
KGtDVEZvbnRTeW1ib2xpY1RyYWl0KV07Ci0KLSAgICByZXR1cm4gQHsgc3RhdGljX2Nhc3Q8TlNT
dHJpbmcgKj4oa0NURm9udFRyYWl0c0F0dHJpYnV0ZSkgOiB0cmFpdHNEaWN0aW9uYXJ5LmdldCgp
IH07Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gc3lzdGVtRm9u
dERlc2NyaXB0b3IoRm9udFNlbGVjdGlvblZhbHVlIHdlaWdodCwgYm9vbCBib2xkLCBib29sIGl0
YWxpYywgZmxvYXQgc2l6ZSkKLXsKLSAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4g
Zm9udERlc2NyaXB0b3IgPSBiYXNlU3lzdGVtRm9udERlc2NyaXB0b3Iod2VpZ2h0LCBib2xkLCBz
aXplKTsKLSAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gc3lzdGVtRm9u
dE1vZGlmaWNhdGlvbkF0dHJpYnV0ZXMod2VpZ2h0LCBpdGFsaWMpOwotICAgIHJldHVybiBhZG9w
dENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMoZm9udERlc2NyaXB0
b3IuZ2V0KCksIHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oYXR0cmlidXRlcy5nZXQoKSkp
KTsKLX0KLQotUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseVNwZWNp
YWxDYXNlKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93
VXNlckluc3RhbGxlZEZvbnRzKQotewotICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlBdCgpIGluIEZvbnREZXNjcmlwdGlv
bkNvY29hLmNwcAotICAgIGNvbnN0IGF1dG8mIHJlcXVlc3QgPSBmb250RGVzY3JpcHRpb24uZm9u
dFNlbGVjdGlvblJlcXVlc3QoKTsKLQotICAgIC8vIEZJWE1FOiBNaWdyYXRlIHRoaXMgdG8gdXNl
IFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0IGxpa2UgdGhlIGRlc2lnbiBzeXN0ZW0tdWkgYmxv
Y2sgYmVsb3cuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwg
Ii13ZWJraXQtc3lzdGVtLWZvbnQiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShm
YW1pbHksICItYXBwbGUtc3lzdGVtIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZmFtaWx5LCAiLWFwcGxlLXN5c3RlbS1mb250IikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZmFtaWx5LCAic3lzdGVtLXVpIikpIHsKLSAgICAgICAgYXV0byBmb250RGVzY3JpcHRv
ciA9IHN5c3RlbUZvbnREZXNjcmlwdG9yKHJlcXVlc3Qud2VpZ2h0LCBpc0ZvbnRXZWlnaHRCb2xk
KHJlcXVlc3Qud2VpZ2h0KSwgaXNJdGFsaWMocmVxdWVzdC5zbG9wZSksIHNpemUpOwotICAgICAg
ICByZXR1cm4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKGZvbnREZXNjcmlwdG9yLmdldCgp
LCBzaXplLCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7Ci0gICAgfQotCi0gICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIi1hcHBsZS1zeXN0ZW0tbW9ub3NwYWNl
ZC1udW1iZXJzIikpIHsKLSAgICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IHN5
c3RlbUZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlRm9yVUlU
eXBlKGtDVEZvbnRVSUZvbnRTeXN0ZW0sIHNpemUsIG51bGxwdHIpKTsKLSAgICAgICAgUmV0YWlu
UHRyPENURm9udERlc2NyaXB0b3JSZWY+IG1vbm9zcGFjZUZvbnREZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhGZWF0dXJlKHN5c3RlbUZvbnREZXNjcmlw
dG9yLmdldCgpLCAoQ0ZOdW1iZXJSZWYpQChrTnVtYmVyU3BhY2luZ1R5cGUpLCAoQ0ZOdW1iZXJS
ZWYpQChrTW9ub3NwYWNlZE51bWJlcnNTZWxlY3RvcikpKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0
ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhtb25vc3BhY2VGb250RGVzY3JpcHRvci5nZXQoKSwgc2l6
ZSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwotICAgIH0KLQotICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsYXN0cmVzb3J0IikpIHsKLS8vIEZJWE1FOiBM
aWtlbHkgd2UgY2FuIHJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZSBmb3Igd2F0Y2hPUyBhbmQgdHZP
Uy4KLSNpZiAhUExBVEZPUk0oV0FUQ0hPUykgJiYgIVBMQVRGT1JNKEFQUExFVFYpCi0gICAgICAg
IHN0YXRpYyBjb25zdCBDVEZvbnREZXNjcmlwdG9yUmVmIGxhc3RSZXNvcnQgPSBDVEZvbnREZXNj
cmlwdG9yQ3JlYXRlTGFzdFJlc29ydCgpOwotICAgICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRD
cmVhdGVXaXRoRm9udERlc2NyaXB0b3IobGFzdFJlc29ydCwgc2l6ZSwgbnVsbHB0cikpOwotI2Vs
c2UKLSAgICAgICAgLy8gTGFzdFJlc29ydCBpcyBzcGVjaWFsLCBzbyBpdCdzIGltcG9ydGFudCB0
byBsb29rIHRoaXMgZXhhY3Qgc3RyaW5nIHVwLCBhbmQgbm90IHNvbWUgY2FzZS1mb2xkZWQgdmVy
c2lvbi4KLSAgICAgICAgLy8gV2UgaGFuZGxlIHRoaXMgaGVyZSBzbyBhbnkgY2FjaGluZyBhbmQg
Y2FzZSBmb2xkaW5nIHdlIGRvIGluIG91ciBnZW5lcmFsIHRleHQgY29kZXBhdGggaXMgYnlwYXNz
ZWQuCi0gICAgICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZVdpdGhOYW1lKENGU1RSKCJM
YXN0UmVzb3J0IiksIHNpemUsIG51bGxwdHIpKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHJldHVy
biBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBQTEFU
Rk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Gb250Q2FjaGVNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAz
YjdiZjM4MGQ2YTg3NTk5YzVhMDAxNDFmY2FmNTliOTdlNjNhYjQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFu
a3MgPHdlYmtpdEBuaWNrc2hhbmtzLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRm9udENhY2hl
LmgiCi0KLSNpbXBvcnQgIkZvbnQuaCIKLSNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCi0jaW1wb3J0
ICJGb250UGxhdGZvcm1EYXRhLmgiCi0jaW1wb3J0ICJTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4
dC5oIgotI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbXBvcnQgPHBh
bC9zcGkvY29jb2EvQ29yZVRleHRTUEkuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbXBvcnQg
PEFwcEtpdC9BcHBLaXQuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TRm9udFNQSS5oPgotI2lt
cG9ydCA8d3RmL01haW5UaHJlYWQuaD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2ltcG9ydCA8d3RmL1RocmVhZGluZy5oPgot
I2ltcG9ydCA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KLSNlbmRpZgotCi0jaW1wb3J0IDx3
dGYvU29mdExpbmtpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgUExBVEZPUk0o
TUFDKQotCi1zdGF0aWMgQ0dGbG9hdCB0b05TRm9udFdlaWdodChGb250U2VsZWN0aW9uVmFsdWUg
Zm9udFdlaWdodCkKLXsKLSAgICBpZiAoZm9udFdlaWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSgx
NTApKQotICAgICAgICByZXR1cm4gTlNGb250V2VpZ2h0VWx0cmFMaWdodDsKLSAgICBpZiAoZm9u
dFdlaWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSgyNTApKQotICAgICAgICByZXR1cm4gTlNGb250
V2VpZ2h0VGhpbjsKLSAgICBpZiAoZm9udFdlaWdodCA8IEZvbnRTZWxlY3Rpb25WYWx1ZSgzNTAp
KQotICAgICAgICByZXR1cm4gTlNGb250V2VpZ2h0TGlnaHQ7Ci0gICAgaWYgKGZvbnRXZWlnaHQg
PCBGb250U2VsZWN0aW9uVmFsdWUoNDUwKSkKLSAgICAgICAgcmV0dXJuIE5TRm9udFdlaWdodFJl
Z3VsYXI7Ci0gICAgaWYgKGZvbnRXZWlnaHQgPCBGb250U2VsZWN0aW9uVmFsdWUoNTUwKSkKLSAg
ICAgICAgcmV0dXJuIE5TRm9udFdlaWdodE1lZGl1bTsKLSAgICBpZiAoZm9udFdlaWdodCA8IEZv
bnRTZWxlY3Rpb25WYWx1ZSg2NTApKQotICAgICAgICByZXR1cm4gTlNGb250V2VpZ2h0U2VtaWJv
bGQ7Ci0gICAgaWYgKGZvbnRXZWlnaHQgPCBGb250U2VsZWN0aW9uVmFsdWUoNzUwKSkKLSAgICAg
ICAgcmV0dXJuIE5TRm9udFdlaWdodEJvbGQ7Ci0gICAgaWYgKGZvbnRXZWlnaHQgPCBGb250U2Vs
ZWN0aW9uVmFsdWUoODUwKSkKLSAgICAgICAgcmV0dXJuIE5TRm9udFdlaWdodEhlYXZ5OwotICAg
IHJldHVybiBOU0ZvbnRXZWlnaHRCbGFjazsKLX0KLQotUmV0YWluUHRyPENURm9udFJlZj4gcGxh
dGZvcm1Gb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUsIEFsbG93
VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQotewotICAgIC8vIEZJ
WE1FOiBTZWUgY29tbWVudCBpbiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1p
bHlBdCgpIGluIEZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAotICAgIGNvbnN0IGF1dG8mIHJlcXVl
c3QgPSBmb250RGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKTsKLQotICAgIC8vIEZJ
WE1FOiBNaWdyYXRlIHRoaXMgdG8gdXNlIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0IGxpa2Ug
dGhlIGRlc2lnbiBzeXN0ZW0tdWkgYmxvY2sgYmVsb3cuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIi13ZWJraXQtc3lzdGVtLWZvbnQiKSB8fCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICItYXBwbGUtc3lzdGVtIikgfHwgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAiLWFwcGxlLXN5c3RlbS1mb250IikgfHwg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAic3lzdGVtLXVpIikpIHsKLSAg
ICAgICAgUmV0YWluUHRyPENURm9udFJlZj4gcmVzdWx0ID0gdG9DVEZvbnQoW05TRm9udCBzeXN0
ZW1Gb250T2ZTaXplOnNpemUgd2VpZ2h0OnRvTlNGb250V2VpZ2h0KHJlcXVlc3Qud2VpZ2h0KV0p
OwotICAgICAgICBpZiAoaXNJdGFsaWMocmVxdWVzdC5zbG9wZSkpIHsKLSAgICAgICAgICAgIENU
Rm9udFN5bWJvbGljVHJhaXRzIGRlc2lyZWRUcmFpdHMgPSBrQ1RGb250SXRhbGljVHJhaXQ7Ci0g
ICAgICAgICAgICBpZiAoaXNGb250V2VpZ2h0Qm9sZChyZXF1ZXN0LndlaWdodCkpCi0gICAgICAg
ICAgICAgICAgZGVzaXJlZFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OwotICAgICAgICAgICAg
aWYgKGF1dG8gaXRhbGljaXplZEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoU3lt
Ym9saWNUcmFpdHMocmVzdWx0LmdldCgpLCBzaXplLCBudWxscHRyLCBkZXNpcmVkVHJhaXRzLCBk
ZXNpcmVkVHJhaXRzKSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRhbGljaXplZEZvbnQ7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhy
ZXN1bHQuZ2V0KCksIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKLSAgICB9Ci0KLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAiLWFwcGxlLXN5c3RlbS1tb25v
c3BhY2VkLW51bWJlcnMiKSkgewotICAgICAgICBpbnQgbnVtYmVyU3BhY2luZ1R5cGUgPSBrTnVt
YmVyU3BhY2luZ1R5cGU7Ci0gICAgICAgIGludCBtb25vc3BhY2VkTnVtYmVyc1NlbGVjdG9yID0g
a01vbm9zcGFjZWROdW1iZXJzU2VsZWN0b3I7Ci0gICAgICAgIFJldGFpblB0cjxDRk51bWJlclJl
Zj4gbnVtYmVyU3BhY2luZ051bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJm51bWJlclNwYWNpbmdUeXBlKSk7Ci0gICAg
ICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gbW9ub3NwYWNlZE51bWJlcnNOdW1iZXIgPSBhZG9w
dENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUs
ICZtb25vc3BhY2VkTnVtYmVyc1NlbGVjdG9yKSk7Ci0gICAgICAgIENGVHlwZVJlZiBmZWF0dXJl
S2V5c1tdID0geyBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBrQ1RGb250RmVhdHVy
ZVNlbGVjdG9ySWRlbnRpZmllcktleSB9OwotICAgICAgICBDRlR5cGVSZWYgZmVhdHVyZVZhbHVl
c1tdID0geyBudW1iZXJTcGFjaW5nTnVtYmVyLmdldCgpLCBtb25vc3BhY2VkTnVtYmVyc051bWJl
ci5nZXQoKSB9OwotICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBmZWF0dXJlSWRl
bnRpZmllciA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGZlYXR1cmVLZXlzLCBmZWF0dXJlVmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGZlYXR1cmVLZXlz
KSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcykpOwotICAgICAgICBDRlR5cGVSZWYgZmVhdHVyZUlkZW50aWZpZXJzW10gPSB7
IGZlYXR1cmVJZGVudGlmaWVyLmdldCgpIH07Ci0gICAgICAgIFJldGFpblB0cjxDRkFycmF5UmVm
PiBmZWF0dXJlQXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgZmVhdHVyZUlkZW50aWZpZXJzLCAxLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAg
ICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgIENGRGljdGlvbmFyeUFk
ZFZhbHVlKGF0dHJpYnV0ZXMuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUs
IGZlYXR1cmVBcnJheS5nZXQoKSk7Ci0gICAgICAgIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRG
b250cyhhdHRyaWJ1dGVzLmdldCgpLCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7Ci0gICAgICAg
IFJldGFpblB0cjxDVEZvbnRSZWY+IHJlc3VsdCA9IHRvQ1RGb250KFtOU0ZvbnQgc3lzdGVtRm9u
dE9mU2l6ZTpzaXplXSk7Ci0gICAgICAgIGF1dG8gbW9kaWZpY2F0aW9uID0gYWRvcHRDRihDVEZv
bnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOwotICAg
ICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMocmVzdWx0
LmdldCgpLCBzaXplLCBudWxscHRyLCBtb2RpZmljYXRpb24uZ2V0KCkpKTsKLSAgICB9Ci0KLSAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibGFzdHJlc29ydCIp
KSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBDVEZvbnREZXNjcmlwdG9yUmVmIGxhc3RSZXNvcnQg
PSBDVEZvbnREZXNjcmlwdG9yQ3JlYXRlTGFzdFJlc29ydCgpOwotICAgICAgICByZXR1cm4gYWRv
cHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IobGFzdFJlc29ydCwgc2l6ZSwgbnVs
bHB0cikpOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi0jZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="423451"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>