<?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>141101</bug_id>
          
          <creation_ts>2015-01-30 15:44:43 -0800</creation_ts>
          <short_desc>Merge SimpleFontDataIOS.mm and SimpleFontDataMac.mm into FontCocoa.mm</short_desc>
          <delta_ts>2015-01-31 12:42:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mmaxfield</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1065681</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-01-30 15:44:43 -0800</bug_when>
    <thetext>Merge SimpleFontDataIOS.mm and SimpleFontDataMac.mm into FontCocoa.mm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065683</commentid>
    <comment_count>1</comment_count>
      <attachid>245750</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-01-30 15:53:16 -0800</bug_when>
    <thetext>Created attachment 245750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065686</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-30 15:56:05 -0800</bug_when>
    <thetext>Attachment 245750 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:136:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:296:  Missing spaces around /  [whitespace/operators] [3]
ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:396:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:397:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:397:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:398:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:398:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:399:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 8 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065700</commentid>
    <comment_count>3</comment_count>
      <attachid>245753</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-01-30 16:20:38 -0800</bug_when>
    <thetext>Created attachment 245753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065719</commentid>
    <comment_count>4</comment_count>
      <attachid>245758</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-01-30 16:44:45 -0800</bug_when>
    <thetext>Created attachment 245758
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065721</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-30 16:46:16 -0800</bug_when>
    <thetext>Attachment 245758 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:128:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:287:  Missing spaces around /  [whitespace/operators] [3]
Total errors found: 2 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065727</commentid>
    <comment_count>6</comment_count>
      <attachid>245762</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-01-30 16:57:49 -0800</bug_when>
    <thetext>Created attachment 245762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065731</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-30 17:00:22 -0800</bug_when>
    <thetext>Attachment 245762 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:128:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:287:  Missing spaces around /  [whitespace/operators] [3]
Total errors found: 2 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065854</commentid>
    <comment_count>8</comment_count>
      <attachid>245762</attachid>
    <who name="">mitz</who>
    <bug_when>2015-01-31 12:41:57 -0800</bug_when>
    <thetext>Comment on attachment 245762
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065855</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-01-31 12:42:52 -0800</bug_when>
    <thetext>Committed r179445: &lt;http://trac.webkit.org/changeset/179445&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245750</attachid>
            <date>2015-01-30 15:53:16 -0800</date>
            <delta_ts>2015-01-30 16:20:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141101-20150130155322.patch</filename>
            <type>text/plain</type>
            <size>76633</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3OTQxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE1LTAxLTMwICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWVyZ2UgU2ltcGxlRm9udERhdGFJT1Mu
bW0gYW5kIFNpbXBsZUZvbnREYXRhTWFjLm1tIGludG8gRm9udENvY29hLm1tCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDExMDEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlIFNpbXBsZUZvbnREYXRhSU9TLm1tIGFu
ZCBTaW1wbGVGb250RGF0YU1hYy5tbS4gQWRkIEZvbnRDb2NvYS5tbS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgUmVtb3ZlIGEgZmV3IENHIG9ubHkgZnVu
Y3Rpb25zIGZyb20gdGhlIGhlYWRlciB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBzdGF0aWMg
ZnVuY3Rpb25zCisgICAgICAgIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxlLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0uCisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxh
dGZvcm1DcmVhdGVTY2FsZWRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRldGVybWlu
ZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmluZ1N0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6aGFz
Q3VzdG9tVHJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuVXNlRmFzdEdseXBoQWR2YW5j
ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29weUZvbnRUYWJsZUZvclRhZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250OjpyZW5kZXJpbmdTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIE1lcmdl
IGluIHRoZSBpT1Mgc3BlY2lmaWMgcGFydHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOiBSZW1vdmVkLgorCiAyMDE1LTAxLTMw
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgV2hlbiBubyBiYWNr
Z3JvdW5kLXNpemUgaXMgc3BlY2lmaWVkIG9uIHRoZSAybmQgYmFja2dyb3VuZCBsYXllciwgaXQg
dGFrZXMgdGhlIGZpcnN0IGluc3RlYWQgb2YgdGhlIGluaXRpYWwgdmFsdWUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE3OTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM5Niw3ICsxMzk2LDYgQEAKIAkJMzdERENEQTcx
Mzg0NTAxQzAwMDhCNzkzIC8qIE1IVE1MUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0REQ0RBMzEzODQ1MDFDMDAwOEI3OTMgLyogTUhUTUxQ
YXJzZXIuaCAqLzsgfTsKIAkJMzdFMzUyNEIxMjQ1MEM1MjAwQkFGNUQ5IC8qIElucHV0VHlwZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0UzNTI0
QTEyNDUwQzUyMDBCQUY1RDkgLyogSW5wdXRUeXBlLmNwcCAqLzsgfTsKIAkJMzdFMzUyNEQxMjQ1
MEM2NjAwQkFGNUQ5IC8qIElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzdFMzUyNEMxMjQ1MEM2NjAwQkFGNUQ5IC8qIElucHV0VHlwZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTM3RTY1
OTUwMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3
NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLzsgfTsKIAkJMzdGNTY3Q0UxNjUzNThGNDAwRERF
OTJCIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzNzcyQjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVu
aW5nT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkzN0Y1N0FCOTFBNTA3MjY5MDA4NzZGOTggLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlk
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5ODFD
QTlEMTMxODIyRUMwMEQxMkYyQSAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwICovOyB9Owog
CQkzN0Y1N0FCQTFBNTA3MjZGMDA4NzZGOTggLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTgxQ0E5
RTEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAgKi87IH07
CkBAIC0yNDc1LDYgKzI0NzQsNyBAQAogCQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyogV2Vi
S2l0TmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDNDhBNkNFMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3BwICov
OyB9OwogCQk3QzQ4QTZEMTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ4QTZDRjE5MUM5
RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggKi87IH07CiAJCTdDNDkwMkEyMThCODI1
RjgwMDdEOTI5OCAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwuaCBpbiBDb3B5IEdlbmVyYXRlZCBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1OTg5RENBMEFDQzhC
QkQwMEEwQkM1MSAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwuaCAqLzsgfTsKKwkJN0M0RURENzQx
QTdCNjA3ODAwMTk4QzREIC8qIEZvbnRDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNEVERDczMUE3QjYwNzgwMDE5OEM0RCAvKiBGb250Q29j
b2EubW0gKi87IH07CiAJCTdDNTIyRDRCMTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVy
bGF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
NTIyRDQ5MTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmNwcCAqLzsgfTsKIAkJ
N0M1MzQzRkMxN0I3NEI2MzAwNDIzMkYwIC8qIEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzUzNDNGQTE3
Qjc0QjYzMDA0MjMyRjAgLyogSlNNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCAqLzsgfTsKIAkJ
N0M1MzQzRkQxN0I3NEI2MzAwNDIzMkYwIC8qIEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1MzQzRkIxN0I3
NEI2MzAwNDIzMkYwIC8qIEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oICovOyB9OwpAQCAtODQ2
NSw3ICs4NDY1LDYgQEAKIAkJMzdERENEQTMxMzg0NTAxQzAwMDhCNzkzIC8qIE1IVE1MUGFyc2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1IVE1MUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RTM1MjRBMTI0NTBDNTIwMEJBRjVEOSAvKiBJbnB1
dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXRUeXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdFMzUyNEMxMjQ1MEM2NjAwQkFG
NUQ5IC8qIElucHV0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnB1
dFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzdFNjU5NEYxNjNCMTBDMjAw
RUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gU2ltcGxlRm9udERhdGFJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAv
KiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTM3RkM5NkRBMTEwNEVENzEwMDNFMUZBRCAvKiBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVC
b3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhaWxpbmdGbG9hdHNSb290
SW5saW5lQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjU5LDYgKzk2NTgs
NyBAQAogCQk3QzQ4QTZDRTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE5hbWVzcGFjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNDhBNkNGMTkxQzlENjUwMDAyNjY3NCAv
KiBXZWJLaXROYW1lc3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
S2l0TmFtZXNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNDhBNkQyMTkx
QzlEOEUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYktpdE5hbWVzcGFj
ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNEVERDczMUE3QjYwNzgwMDE5
OEM0RCAvKiBGb250Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBGb250Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNTIyRDQ5
MTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rvck92ZXJsYXkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzUyMkQ0QTE1QjQ3OEIyMDA5QjdDOTUgLyogSW5zcGVjdG9yT3Zl
cmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JPdmVybGF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNTM0M0ZBMTdCNzRCNjMwMDQyMzJG
MCAvKiBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NzM0LDcgKzE1NzM0LDYgQEAKIAkJCQlDNTgzNjFBODE3NDQ1
MjNGMDAxNzM1MTEgLyogRm9udFNlcnZpY2VzSU9TLm1tICovLAogCQkJCTMxQUI0RkZGMTIyODc4
QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHQzRElPUy5oICovLAogCQkJCUZFRDEzRDNGMENF
QTkzOTQwMEQ4OTQ2NiAvKiBJY29uSU9TLm1tICovLAotCQkJCTM3RTY1OTRGMTYzQjEwQzIwMEVC
NDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5tbSAqLywKIAkJCQlDRUVDNjAzNDE4N0REOTYyMDAz
RTQzQkIgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MuaCAqLywKIAkJCQlDRENBODI5NDE2
NzkxMDBGMDA4NzU3MTQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JT1MubW0gKi8sCiAJCQkp
OwpAQCAtMjA3OTksNiArMjA3OTgsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKIAkJCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVDb2NvYS5t
bSAqLywKKwkJCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1tICovLAog
CQkJCUI1MzIwRDZBMTIyQTI0RTkwMDJEMTQ0MCAvKiBGb250UGxhdGZvcm1EYXRhQ29jb2EubW0g
Ki8sCiAJCQkJMkQwQjRBQTkxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oICovLAogCQkJ
CTJEMEI0QUFBMThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UubW0gKi8sCkBAIC0yOTU0NSw3
ICsyOTU0NSw2IEBACiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVy
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTYzRTg4RjcxMThBMzlEMjAwRUQ5MjMxIC8qIFNp
bXBsZUZvbnREYXRhQ29yZVRleHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzdFNjU5NTAxNjNC
MTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjJBRkZDN0YwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRhTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTQ4OTQ0QTIxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRFOUIxMUIxODE0NTY5MjAwM0FDQ0RGIC8qIFNpbXBs
ZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTYzMCw2ICsyOTYy
OSw3IEBACiAJCQkJRTQ3MTI3Q0ExNjM0MzhBMTAwRUQ2RjVBIC8qIFN0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI3MjkwRTgxREU4MTAwQjI1OTY1
IC8qIFN0eWxlTWFycXVlZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNTAyNzExMDJC
QTk2QTAwNjZGMzlBIC8qIFN0eWxlTWVkaWEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0M0RURE
NzQxQTdCNjA3ODAwMTk4QzREIC8qIEZvbnRDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJD
NUVCNzREMEU4MUUwNjcwMEIyNTk2NSAvKiBTdHlsZU11bHRpQ29sRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBODBFNkRGQjBBMTk5MDY3MDA3RkI4QzUgLyogU3R5bGVQcm9wZXJ0aWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUUxQjI1MTA2MTUyQTBCQUYwMDY5Qjc3OSAvKiBTdHlsZVBy
b3BlcnR5U2hvcnRoYW5kLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gMTc5NDE1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsMTIgKzIz
Niw2IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlwaCkgY29uc3Q7
CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICBib29sIGNhblVzZUZhc3RHbHlwaEFkdmFuY2VH
ZXR0ZXIoR2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkgY29u
c3Q7Ci0gICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5nU3R5bGUoKSBjb25zdDsKLSAg
ICBib29sIGFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGgsIENHU2l6ZSYgcmVzdWx0KSBj
b25zdDsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb250IGlzIGEgY29sb3IgYml0bWFwIGZvbnQK
LSNlbmRpZgotCiAgICAgRm9udE1ldHJpY3MgbV9mb250TWV0cmljczsKICAgICBmbG9hdCBtX21h
eENoYXJXaWR0aDsKICAgICBmbG9hdCBtX2F2Z0NoYXJXaWR0aDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0JKHJldmlz
aW9uIDE3OTM4NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhTWFjLm1tOjE3OTM4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3Nr
dXJ5YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkZvbnQuaCIK
KworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJDb2xvci5oIgorI2ltcG9y
dCAiQ29yZUdyYXBoaWNzU1BJLmgiCisjaW1wb3J0ICJDb3JlVGV4dFNQSS5oIgorI2ltcG9ydCAi
RmxvYXRSZWN0LmgiCisjaW1wb3J0ICJGb250Q2FjaGUuaCIKKyNpbXBvcnQgIkZvbnRDYXNjYWRl
LmgiCisjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5o
IgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2lmIFVTRShBUFBLSVQpCisj
aW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CisjaW1wb3J0IDxBcHBsaWNhdGlvblNlcnZpY2VzL0Fw
cGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5o
PgorI2VuZGlmCisjaW1wb3J0IDxmbG9hdC5oPgorI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgor
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmICFQTEFURk9STShJT1MpCitAaW50ZXJm
YWNlIE5TRm9udCAoV2ViQXBwS2l0U2VjcmV0QVBJKQorLSAoQk9PTClfaXNGYWtlRml4ZWRQaXRj
aDsKK0BlbmQKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQVBQS0lU
KQorc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udFJlZiBjdEZvbnQpCit7
CisgICAgLy8gVGhlIGNoZWNrIGRvZXNuJ3QgbG9vayBuZWF0IGJ1dCB0aGlzIGlzIHdoYXQgQXBw
S2l0IGRvZXMgZm9yIHZlcnRpY2FsIHdyaXRpbmcuLi4KKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJl
Zj4gdGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwg
a0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7CisgICAgQ0ZJbmRleCBudW1UYWJsZXMgPSBD
RkFycmF5R2V0Q291bnQodGFibGVUYWdzLmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaW5kZXgg
PSAwOyBpbmRleCA8IG51bVRhYmxlczsgKytpbmRleCkgeworICAgICAgICBDVEZvbnRUYWJsZVRh
ZyB0YWcgPSAoQ1RGb250VGFibGVUYWcpKHVpbnRwdHJfdClDRkFycmF5R2V0VmFsdWVBdEluZGV4
KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpOworICAgICAgICBpZiAodGFnID09IGtDVEZvbnRUYWJs
ZVZoZWEgfHwgdGFnID09IGtDVEZvbnRUYWJsZVZPUkcpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBpbml0Rm9udERh
dGEoRm9udCogZm9udERhdGEpCit7CisgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCku
Y2dGb250KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZhbWlseSh2b2lkKQoreworICAgIHN0
YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5ID0gW1tbTlNGb250IHN5c3RlbUZv
bnRPZlNpemU6MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07CisgICAgcmV0dXJuIHdlYkZhbGxi
YWNrRm9udEZhbWlseTsKK30KKworY29uc3QgRm9udCogRm9udDo6Y29tcG9zaXRlRm9udFJlZmVy
ZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0Cit7CisgICAgaWYgKCFrZXkgfHwgQ0ZFcXVhbChh
ZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShDVEZvbnRSZWYoa2V5KSkpLmdldCgpLCBD
RlNUUigiTGFzdFJlc29ydCIpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFr
ZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisKKyAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fZGVyaXZlZEZvbnREYXRhLT5jb21wb3NpdGVGb250UmVmZXJlbmNlcy5hZGQo
a2V5LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAg
TlNGb250ICpzdWJzdGl0dXRlRm9udCA9IFtrZXkgcHJpbnRlckZvbnRdOworCisgICAgICAgIENU
Rm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKChDVEZv
bnRSZWYpc3Vic3RpdHV0ZUZvbnQpOworICAgICAgICBib29sIHN5bnRoZXRpY0JvbGQgPSBwbGF0
Zm9ybURhdGEoKS5zeW50aGV0aWNCb2xkKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0
KTsKKyAgICAgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gcGxhdGZvcm1EYXRhKCkuc3ludGhl
dGljT2JsaXF1ZSgpICYmICEodHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KTsKKworICAgICAg
ICBGb250UGxhdGZvcm1EYXRhIHN1YnN0aXR1dGVQbGF0Zm9ybShzdWJzdGl0dXRlRm9udCwgcGxh
dGZvcm1EYXRhKCkuc2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQoKSk7
CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGb250OjpjcmVhdGUoc3Vic3Rp
dHV0ZVBsYXRmb3JtLCBpc0N1c3RvbUZvbnQoKSk7CisgICAgfQorICAgIHJldHVybiBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgp
Cit7CisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0
aWNCb2xkID8gMS4wZiA6IDAuZjsKKworICAgIGJvb2wgZmFpbGVkU2V0dXAgPSBmYWxzZTsKKyAg
ICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkgeworICAgICAgICAvLyBBY2shIFNvbWV0aGluZyB2
ZXJ5IGJhZCBoYXBwZW5lZCwgbGlrZSBhIGNvcnJ1cHQgZm9udC4KKyAgICAgICAgLy8gVHJ5IGxv
b2tpbmcgZm9yIGFuIGFsdGVybmF0ZSAnYmFzZScgZm9udCBmb3IgdGhpcyByZW5kZXJlci4KKwor
ICAgICAgICAvLyBTcGVjaWFsIGNhc2UgaGFjayB0byB1c2UgIlRpbWVzIE5ldyBSb21hbiIgaW4g
cGxhY2Ugb2YgIlRpbWVzIi4KKyAgICAgICAgLy8gIlRpbWVzIFJPIiBpcyBhIGNvbW1vbiBmb250
IHdob3NlIGZhbWlseSBuYW1lIGlzICJUaW1lcyIuCisgICAgICAgIC8vIEl0IG92ZXJyaWRlcyB0
aGUgbm9ybWFsICJUaW1lcyIgZmFtaWx5IGZvbnQuCisgICAgICAgIC8vIEl0IGFsc28gYXBwZWFy
cyB0byBoYXZlIGEgY29ycnVwdCByZWd1bGFyIHZhcmlhbnQuCisgICAgICAgIE5TU3RyaW5nICpm
YWxsYmFja0ZvbnRGYW1pbHk7CisgICAgICAgIGlmIChbW21fcGxhdGZvcm1EYXRhLm5zRm9udCgp
IGZhbWlseU5hbWVdIGlzRXF1YWw6QCJUaW1lcyJdKQorICAgICAgICAgICAgZmFsbGJhY2tGb250
RmFtaWx5ID0gQCJUaW1lcyBOZXcgUm9tYW4iOworICAgICAgICBlbHNlCisgICAgICAgICAgICBm
YWxsYmFja0ZvbnRGYW1pbHkgPSB3ZWJGYWxsYmFja0ZvbnRGYW1pbHkoKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRyeSBzZXR0aW5nIHVwIHRoZSBhbHRlcm5hdGUgZm9udC4KKyAgICAgICAgLy8g
VGhpcyBpcyBhIGxhc3QgZGl0Y2ggZWZmb3J0IHRvIHVzZSBhIHN1YnN0aXR1dGUgZm9udCB3aGVu
IHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZy4KKyNpZiAhRVJST1JfRElTQUJMRUQKKyAgICAgICAg
UmV0YWluUHRyPE5TRm9udD4gaW5pdGlhbEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsK
KyNlbmRpZgorICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEuZm9udCgpKQorICAgICAgICAgICAg
bV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdl
cl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6ZmFsbGJhY2tG
b250RmFtaWx5XSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNl
dE5TRm9udChbTlNGb250IGZvbnRXaXRoTmFtZTpmYWxsYmFja0ZvbnRGYW1pbHkgc2l6ZTptX3Bs
YXRmb3JtRGF0YS5zaXplKCldKTsKKyAgICAgICAgaWYgKCFpbml0Rm9udERhdGEodGhpcykpIHsK
KyAgICAgICAgICAgIGlmIChbZmFsbGJhY2tGb250RmFtaWx5IGlzRXF1YWw6QCJUaW1lcyBOZXcg
Um9tYW4iXSkgeworICAgICAgICAgICAgICAgIC8vIE9LLCBjb3VsZG4ndCBzZXR1cCBUaW1lcyBO
ZXcgUm9tYW4gYXMgYW4gYWx0ZXJuYXRlIHRvIFRpbWVzLCBmYWxsYmFjaworICAgICAgICAgICAg
ICAgIC8vIG9uIHRoZSBzeXN0ZW0gZm9udC4gIElmIHRoaXMgZmFpbHMgd2UgaGF2ZSBubyBhbHRl
cm5hdGl2ZSBsZWZ0LgorICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChb
W05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZvcm1E
YXRhLm5zRm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNrRm9udEZhbWlseSgpXSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFpbml0Rm9udERhdGEodGhpcykpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgdHJpZWQsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIGFuZCB0aGUgc3lzdGVtIGZvbnQu
IE5vIGpveS4gV2UgaGF2ZSB0byBnaXZlIHVwLgorICAgICAgICAgICAgICAgICAgICBMT0dfRVJS
T1IoInVuYWJsZSB0byBpbml0aWFsaXplIHdpdGggZm9udCAlQCIsIGluaXRpYWxGb250LmdldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV2UgdHJpZWQg
dGhlIHJlcXVlc3RlZCBmb250IGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0
byBnaXZlIHVwLgorICAgICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxp
emUgd2l0aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGZh
aWxlZFNldHVwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IFJlcG9ydCB0aGUgcHJvYmxlbS4KKyAgICAgICAgTE9HX0VSUk9SKCJDb3JydXB0IGZvbnQgZGV0
ZWN0ZWQsIHVzaW5nICVAIGluIHBsYWNlIG9mICVALiIsCisgICAgICAgICAgICBbbV9wbGF0Zm9y
bURhdGEubnNGb250KCkgZmFtaWx5TmFtZV0sIFtpbml0aWFsRm9udC5nZXQoKSBmYW1pbHlOYW1l
XSk7CisgICAgfQorCisgICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHRyeSB0byBzZXQgdXAgdXNp
bmcgdGhlIHN5c3RlbSBmb250LgorICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSBUaW1l
cyBhbmQgVGltZXMgTmV3IFJvbWFuIGFyZSBib3RoIHVuYXZhaWxhYmxlLgorICAgIGlmIChmYWls
ZWRTZXR1cCkgeworICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW05TRm9udCBzeXN0
ZW1Gb250T2ZTaXplOlttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBwb2ludFNpemVdXSk7CisgICAg
ICAgIExPR19FUlJPUigiZmFpbGVkIHRvIHNldCB1cCBmb250LCB1c2luZyBzeXN0ZW0gZm9udCAl
cyIsIG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgICAgIGluaXRGb250RGF0YSh0aGlzKTsK
KyAgICB9CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gV29yayBhcm91bmQgPHJkYXI6Ly9w
cm9ibGVtLzE5NDMzNDkwPgorICAgIENHR2x5cGggZHVtbXlHbHlwaHNbXSA9IHswLCAwfTsKKyAg
ICBDR1NpemUgZHVtbXlTaXplW10gPSB7Q0dTaXplTWFrZSgwLCAwKSwgQ0dTaXplTWFrZSgwLCAw
KX07CisgICAgQ1RGb250VHJhbnNmb3JtR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBk
dW1teUdseXBocywgZHVtbXlTaXplLCAyLCBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmlu
ZyB8IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcpOworI2VuZGlmCisgICAgCisgICAgaW50
IGlBc2NlbnQ7CisgICAgaW50IGlEZXNjZW50OworICAgIGludCBpQ2FwSGVpZ2h0OworICAgIGlu
dCBpTGluZUdhcDsKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtOworICAgIGlBc2NlbnQgPSBDR0Zv
bnRHZXRBc2NlbnQobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpOworICAgIC8vIFNvbWUgZm9udHMg
ZXJyb25lb3VzbHkgc3BlY2lmeSBhIHBvc2l0aXZlIGRlc2NlbmRlciB2YWx1ZS4gV2UgZm9sbG93
IENvcmUgVGV4dCBpbiBhc3N1bWluZyB0aGF0CisgICAgLy8gc3VjaCBmb250cyBtZWFudCB0aGUg
c2FtZSBkaXN0YW5jZSwgYnV0IGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbi4KKyAgICBpRGVzY2Vu
dCA9IC1hYnMoQ0dGb250R2V0RGVzY2VudChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSkpOworICAg
IGlDYXBIZWlnaHQgPSBDR0ZvbnRHZXRDYXBIZWlnaHQobV9wbGF0Zm9ybURhdGEuY2dGb250KCkp
OworICAgIGlMaW5lR2FwID0gQ0dGb250R2V0TGVhZGluZyhtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQo
KSk7CisgICAgdW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0obV9wbGF0Zm9ybURhdGEu
Y2dGb250KCkpOworCisgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEubV9zaXpl
OworICAgIGZsb2F0IGFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2NlbnQsIHVuaXRzUGVyRW0p
ICogcG9pbnRTaXplOworICAgIGZsb2F0IGRlc2NlbnQgPSAtc2NhbGVFbVRvVW5pdHMoaURlc2Nl
bnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgIGZsb2F0IGNhcEhlaWdodCA9IHNjYWxl
RW1Ub1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgIAorICAg
IGZsb2F0IGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwgdW5pdHNQZXJFbSkgKiBw
b2ludFNpemU7CisKKyAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCBUaW1lcywgSGVsdmV0aWNhLCBh
bmQgQ291cmllciB0byBjbG9zZWx5IG1hdGNoIHRoZQorICAgIC8vIHZlcnRpY2FsIG1ldHJpY3Mg
b2YgdGhlaXIgTWljcm9zb2Z0IGNvdW50ZXJwYXJ0cyB0aGF0IGFyZSB0aGUgZGUgZmFjdG8KKyAg
ICAvLyB3ZWIgc3RhbmRhcmQuIFRoZSBBcHBLaXQgYWRqdXN0bWVudCBvZiAyMCUgaXMgdG9vIGJp
ZyBhbmQgaXMKKyAgICAvLyBpbmNvcnJlY3RseSBhZGRlZCB0byBsaW5lIHNwYWNpbmcsIHNvIHdl
IHVzZSBhIDE1JSBhZGp1c3RtZW50IGluc3RlYWQKKyAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBh
c2NlbnQuCisgICAgTlNTdHJpbmcgKmZhbWlseU5hbWUgPSBbbV9wbGF0Zm9ybURhdGEubnNGb250
KCkgZmFtaWx5TmFtZV07CisgICAgaWYgKFtmYW1pbHlOYW1lIGlzRXF1YWxUb1N0cmluZzpAIlRp
bWVzIl0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiSGVsdmV0aWNhIl0gfHwgW2Zh
bWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQ291cmllciJdKQorICAgICAgICBhc2NlbnQgKz0g
Zmxvb3JmKCgoYXNjZW50ICsgZGVzY2VudCkgKiAwLjE1ZikgKyAwLjVmKTsKKworICAgIC8vIENv
bXB1dGUgYW5kIHN0b3JlIGxpbmUgc3BhY2luZywgYmVmb3JlIHRoZSBsaW5lIG1ldHJpY3MgaGFj
a3MgYXJlIGFwcGxpZWQuCisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRm
KGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKSk7CisKKyAgICAv
LyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxvdyByb29tIGZvciBtYXJrZWQgdGV4
dCB1bmRlcmxpbmVzLgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81Mzg2MTgzPgorICAgIGlmIChk
ZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgW2ZhbWlseU5hbWUgaGFzUHJlZml4OkAiSGly
YWdpbm8iXSkgeworICAgICAgICBsaW5lR2FwIC09IDMgLSBkZXNjZW50OworICAgICAgICBkZXNj
ZW50ID0gMzsKKyAgICB9CisgICAgCisgICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9u
KCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAg
bV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhtX3BsYXRmb3JtRGF0
YS5jdEZvbnQoKSk7CisKKyAgICBmbG9hdCB4SGVpZ2h0OworCisgICAgaWYgKHBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgeworICAgICAgICAvLyBNZWFzdXJlIHRo
ZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXh0
ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCisgICAgICAgIC8vIHJlcG9y
dGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUgZ2x5cGggdGhh
dCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCisgICAgICAgIE5TR2x5cGggeEdseXBoID0gZ2x5cGhG
b3JDaGFyYWN0ZXIoJ3gnKTsKKyAgICAgICAgaWYgKHhHbHlwaCkKKyAgICAgICAgICAgIHhIZWln
aHQgPSAtQ0dSZWN0R2V0TWluWShwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKHhHbHlwaCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0
WEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSksIHVuaXRzUGVyRW0pICogcG9pbnRTaXpl
OworICAgIH0gZWxzZQorICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxSaWdodE9yaWVudGF0aW9u
Rm9udCgpLT5mb250TWV0cmljcygpLnhIZWlnaHQoKTsKKworICAgIG1fZm9udE1ldHJpY3Muc2V0
VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2Nl
bnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRN
ZXRyaWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGlu
ZUdhcChsaW5lR2FwKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7Cit9
CisKK3N0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEsIEZvdXJDaGFyQ29kZSB0YWJsZU5hbWUpCit7CisgICAgcmV0dXJuIENH
Rm9udENvcHlUYWJsZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCksIHRhYmxlTmFtZSk7Cit9
CisKK3ZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3sKKyAgICBtX2F2Z0NoYXJX
aWR0aCA9IDA7CisgICAgbV9tYXhDaGFyV2lkdGggPSAwOworICAgIAorICAgIFJldGFpblB0cjxD
RkRhdGFSZWY+IG9zMlRhYmxlID0gYWRvcHRDRihjb3B5Rm9udFRhYmxlRm9yVGFnKG1fcGxhdGZv
cm1EYXRhLCAnT1MvMicpKTsKKyAgICBpZiAob3MyVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKG9z
MlRhYmxlLmdldCgpKSA+PSA0KSB7CisgICAgICAgIGNvbnN0IFVJbnQ4KiBvczIgPSBDRkRhdGFH
ZXRCeXRlUHRyKG9zMlRhYmxlLmdldCgpKTsKKyAgICAgICAgU0ludDE2IG9zMkF2Z0NoYXJXaWR0
aCA9IG9zMlsyXSAqIDI1NiArIG9zMlszXTsKKyAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBzY2Fs
ZUVtVG9Vbml0cyhvczJBdmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpKSAq
IG1fcGxhdGZvcm1EYXRhLm1fc2l6ZTsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBoZWFkVGFibGUgPSBhZG9wdENGKGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEs
ICdoZWFkJykpOworICAgIGlmIChoZWFkVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKGhlYWRUYWJs
ZS5nZXQoKSkgPj0gNDIpIHsKKyAgICAgICAgY29uc3QgVUludDgqIGhlYWQgPSBDRkRhdGFHZXRC
eXRlUHRyKGhlYWRUYWJsZS5nZXQoKSk7CisgICAgICAgIHVzaG9ydCB1eE1pbiA9IGhlYWRbMzZd
ICogMjU2ICsgaGVhZFszN107CisgICAgICAgIHVzaG9ydCB1eE1heCA9IGhlYWRbNDBdICogMjU2
ICsgaGVhZFs0MV07CisgICAgICAgIFNJbnQxNiB4TWluID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1
eE1pbik7CisgICAgICAgIFNJbnQxNiB4TWF4ID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1heCk7
CisgICAgICAgIGZsb2F0IGRpZmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeE1heCAtIHhNaW4pOwor
ICAgICAgICBtX21heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKGRpZmYsIG1fZm9udE1ldHJp
Y3MudW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLm1fc2l6ZTsKKyAgICB9CisKKyAgICAv
LyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGltYXRlLCB3aGljaCB3aWxsIHBvcHVs
YXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9zaXRpdmUuCisgICAgaW5pdENoYXJX
aWR0aHMoKTsKK30KKyNlbmRpZiAvLyBVU0UoQVBQS0lUKQorCit2b2lkIEZvbnQ6OnBsYXRmb3Jt
RGVzdHJveSgpCit7Cit9CisKKyNpZiAhUExBVEZPUk0oSU9TKQorUGFzc1JlZlB0cjxGb250PiBG
b250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CisgICAg
ICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEpOworICAg
ICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2Fs
ZUZhY3RvcjsKKyAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShzY2FsZWRGb250RGF0YSwgdHJ1
ZSwgZmFsc2UpOworICAgIH0KKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAg
ICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7CisgICAg
Rm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9u
dE1hbmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHRvU2l6ZTpzaXpl
XSwgc2l6ZSwgZmFsc2UsIGZhbHNlLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKTsKKwor
ICAgIC8vIEFwcEtpdCByZXNldHMgdGhlIHR5cGUgaW5mb3JtYXRpb24gKHNjcmVlbi9wcmludGVy
KSB3aGVuIHlvdSBjb252ZXJ0IGEgZm9udCB0byBhIGRpZmZlcmVudCBzaXplLgorICAgIC8vIFdl
IGhhdmUgdG8gZml4IHVwIHRoZSBmb250IHRoYXQgd2UncmUgaGFuZGVkIGJhY2suCisgICAgc2Nh
bGVkRm9udERhdGEuc2V0TlNGb250KFtzY2FsZWRGb250RGF0YS5uc0ZvbnQoKSBwcmludGVyRm9u
dF0pOworCisgICAgaWYgKHNjYWxlZEZvbnREYXRhLmZvbnQoKSkgeworICAgICAgICBOU0ZvbnRN
YW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsK
KyAgICAgICAgTlNGb250VHJhaXRNYXNrIGZvbnRUcmFpdHMgPSBbZm9udE1hbmFnZXIgdHJhaXRz
T2ZGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpXTsKKworICAgICAgICBpZiAobV9wbGF0Zm9y
bURhdGEubV9zeW50aGV0aWNCb2xkKQorICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBOU0JvbGRG
b250TWFzazsKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljT2JsaXF1ZSkK
KyAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0gTlNJdGFsaWNGb250TWFzazsKKworICAgICAgICBO
U0ZvbnRUcmFpdE1hc2sgc2NhbGVkRm9udFRyYWl0cyA9IFtmb250TWFuYWdlciB0cmFpdHNPZkZv
bnQ6c2NhbGVkRm9udERhdGEubnNGb250KCldOworICAgICAgICBzY2FsZWRGb250RGF0YS5tX3N5
bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKSAmJiAhKHNjYWxlZEZv
bnRUcmFpdHMgJiBOU0JvbGRGb250TWFzayk7CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3lu
dGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzaykgJiYgIShzY2Fs
ZWRGb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzayk7CisKKyAgICAgICAgcmV0dXJuIGZvbnRD
YWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEoc2NhbGVkRm9udERhdGEpOworICAgIH0KKyAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRm9u
dDo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIE5TRm9udCogZiA9IG1fcGxhdGZvcm1EYXRhLm5z
Rm9udCgpOworICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLgorICAgIC8vIEFjY29yZGlu
ZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNob3VsZCB0cmVhdCBPc2FrYS1Nb25v
IGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5vdGUgdGhhdCB0aGUgQXBwS2l0IGRvZXMgbm90IHJl
cG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgorCisgICAgLy8gU3BlY2lhbCBjYXNlIE1T
LVBHb3RoaWMuCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS80MDMyOTM4Piwg
d2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5v
dGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KKwor
ICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlwZUNvcnNpdmEKKyAgICAvLyBBY2NvcmRpbmcgdG8g
PHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1vbm90eXBlQ29y
c2l2YSBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0
IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KKworICAgIE5TU3RyaW5nICpuYW1lID0g
W2YgZm9udE5hbWVdOworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoW2YgaXNGaXhlZFBpdGNo
XSB8fCBbZiBfaXNGYWtlRml4ZWRQaXRjaF0gfHwKKyAgICAgICAgICAgW25hbWUgY2FzZUluc2Vu
c2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9PSBOU09yZGVyZWRTYW1lKSAmJgorICAgICAg
ICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMtUEdvdGhpYyJdICE9IE5TT3Jk
ZXJlZFNhbWUgJiYKKyAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1v
bm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKKworRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5
cGgpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OworICAgIGJvdW5kaW5nQm94
ID0gQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQo
KSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0
aWNhbE9yaWVudGF0aW9uIDoga0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAw
LCAxKTsKKyAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0JveC5tYXhZKCkpOworICAgIGlm
IChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCisgICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJv
dW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOworCisgICAgcmV0dXJu
IGJvdW5kaW5nQm94OworfQorCisjaWYgUExBVEZPUk0oTUFDKQoraW5saW5lIENHRm9udFJlbmRl
cmluZ1N0eWxlIEZvbnQ6OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKK3sKKyAgICBDR0ZvbnRSZW5k
ZXJpbmdTdHlsZSBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtD
R0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5n
U3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbjsKKyAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURh
dGEoKS5uc0ZvbnQoKTsKKyAgICBpZiAoZm9udCkgeworICAgICAgICBzd2l0Y2ggKFtmb250IHJl
bmRlcmluZ01vZGVdKSB7CisgICAgICAgIGNhc2UgTlNGb250SW50ZWdlckFkdmFuY2VtZW50c1Jl
bmRlcmluZ01vZGU6CisgICAgICAgICAgICBzdHlsZSA9IDA7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBOU0ZvbnRBbnRpYWxpYXNlZEludGVnZXJBZHZhbmNlbWVudHNSZW5kZXJp
bmdNb2RlOgorICAgICAgICAgICAgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxp
YXNpbmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdHlsZTsKK30KKworaW5saW5l
IGJvb2wgRm9udDo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCBnbHlwaCwgQ0dTaXpl
JiBhZHZhbmNlKSBjb25zdAoreworICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5z
Rm9udCgpOworICAgIGlmICghZm9udCB8fCAhcGxhdGZvcm1EYXRhKCkuaXNDb2xvckJpdG1hcEZv
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGFkdmFuY2UgPSBOU1NpemVUb0NHU2l6
ZShbZm9udCBhZHZhbmNlbWVudEZvckdseXBoOmdseXBoXSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisjZW5kaWYKKworc3RhdGljIGJvb2wgaGFzQ3VzdG9tVHJhY2tpbmcoQ1RGb250UmVmIGZvbnQp
Cit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
IDwgMTA5MAorICAgIFVOVVNFRF9QQVJBTShmb250KTsKKyAgICByZXR1cm4gZmFsc2U7CisjZWxz
ZQorICAgIHJldHVybiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZv
bnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCkpLmdldCgpKTsKKyNlbmRpZgorfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNFbW9qaShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEp
Cit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHJldHVybiBwbGF0Zm9ybURhdGEubV9pc0Vtb2pp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocGxhdGZvcm1EYXRhKTsKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgRm9udDo6Y2FuVXNlRmFzdEdseXBoQWR2YW5j
ZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZh
bmNlKSBjb25zdAoreworICAgIC8vIEZhc3QgZ2V0dGVyIGRvZXNuJ3QgdGFrZSBjdXN0b20gdHJh
Y2tpbmcgaW50byBhY2NvdW50CisgICAgaWYgKGhhc0N1c3RvbVRyYWNraW5nKHBsYXRmb3JtRGF0
YSgpLmN0Rm9udCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZhc3QgZ2V0dGVy
IGRvZXNuJ3Qgd29yayBmb3IgZW1vamkKKyAgICBpZiAoaXNFbW9qaShwbGF0Zm9ybURhdGEoKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyAuLi4gb3IgZm9yIGFueSBiaXRtYXAgZm9u
dHMgaW4gZ2VuZXJhbAorICAgIGlmIChhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KGdseXBoLCBh
ZHZhbmNlKSkgeworICAgICAgICBwb3B1bGF0ZWRBZHZhbmNlID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZmxvYXQgRm9udDo6cGxh
dGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIENHU2l6ZSBhZHZh
bmNlID0gQ0dTaXplWmVybzsKKyAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWw7CisgICAgYm9vbCBwb3B1bGF0ZWRBZHZhbmNlID0g
ZmFsc2U7CisgICAgaWYgKChob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFj
aykgJiYgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihnbHlwaCwgYWR2YW5jZSwgcG9wdWxh
dGVkQWR2YW5jZSkpIHsKKyAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gcGxhdGZvcm1EYXRhKCku
bV9zaXplOworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1N
YWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOworICAgICAgICBpZiAoIUNHRm9udEdldEds
eXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgJm0sIHJlbmRlcmlu
Z1N0eWxlKCksICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDR0ZvbnRDb3B5RnVsbE5hbWUocGxhdGZv
cm1EYXRhKCkuY2dGb250KCkpKTsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNh
Y2hlIGdseXBoIHdpZHRocyBmb3IgJUAgJWYiLCBmdWxsTmFtZS5nZXQoKSwgcG9pbnRTaXplKTsK
KyAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOworICAgICAgICB9CisgICAgfSBlbHNlIGlm
ICghcG9wdWxhdGVkQWR2YW5jZSkKKyAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMo
bV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGhvcml6b250YWwgPyBrQ1RGb250SG9yaXpvbnRhbE9y
aWVudGF0aW9uIDoga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24sICZnbHlwaCwgJmFkdmFuY2Us
IDEpOworCisgICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7
Cit9CisKK3N0cnVjdCBQcm92aWRlckluZm8geworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
OworICAgIHNpemVfdCBsZW5ndGg7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXM7Cit9
OworCitzdGF0aWMgY29uc3QgVW5pQ2hhciogcHJvdmlkZVN0cmluZ0FuZEF0dHJpYnV0ZXMoQ0ZJ
bmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmli
dXRlcywgdm9pZCogY29udGV4dCkKK3sKKyAgICBQcm92aWRlckluZm8qIGluZm8gPSBzdGF0aWNf
Y2FzdDxzdHJ1Y3QgUHJvdmlkZXJJbmZvKj4oY29udGV4dCk7CisgICAgaWYgKHN0cmluZ0luZGV4
IDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0cmluZ0luZGV4KSA+PSBpbmZvLT5sZW5ndGgp
CisgICAgICAgIHJldHVybiAwOworCisgICAgKmNvdW50ID0gaW5mby0+bGVuZ3RoIC0gc3RyaW5n
SW5kZXg7CisgICAgKmF0dHJpYnV0ZXMgPSBpbmZvLT5hdHRyaWJ1dGVzOworICAgIHJldHVybiBp
bmZvLT5jaGFyYWN0ZXJzICsgc3RyaW5nSW5kZXg7Cit9CisKK2Jvb2wgRm9udDo6Y2FuUmVuZGVy
Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlm
ICghbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQpCisgICAgICAgIG1fY29tYmlu
aW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0ID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoTWFwPFN0
cmluZywgYm9vbD4+KCk7CisKKyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBib29sPjo6QWRkUmVz
dWx0IGFkZFJlc3VsdCA9IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0LT5hZGQo
U3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCksIGZhbHNlKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5p
c05ld0VudHJ5KQorICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKwor
ICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGZvbnRFcXVhbGl0eU9iamVjdCA9IHBsYXRmb3JtRGF0
YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKKworICAgIFByb3ZpZGVySW5mbyBpbmZvID0g
eyBjaGFyYWN0ZXJzLCBsZW5ndGgsIGdldENGU3RyaW5nQXR0cmlidXRlcygwLCBwbGF0Zm9ybURh
dGEoKS5vcmllbnRhdGlvbigpKSB9OworICAgIFJldGFpblB0cjxDVExpbmVSZWY+IGxpbmUgPSBh
ZG9wdENGKENUTGluZUNyZWF0ZVdpdGhVbmlDaGFyUHJvdmlkZXIoJnByb3ZpZGVTdHJpbmdBbmRB
dHRyaWJ1dGVzLCAwLCAmaW5mbykpOworCisgICAgQ0ZBcnJheVJlZiBydW5BcnJheSA9IENUTGlu
ZUdldEdseXBoUnVucyhsaW5lLmdldCgpKTsKKyAgICBDRkluZGV4IHJ1bkNvdW50ID0gQ0ZBcnJh
eUdldENvdW50KHJ1bkFycmF5KTsKKworICAgIGZvciAoQ0ZJbmRleCByID0gMDsgciA8IHJ1bkNv
dW50OyByKyspIHsKKyAgICAgICAgQ1RSdW5SZWYgY3RSdW4gPSBzdGF0aWNfY2FzdDxDVFJ1blJl
Zj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChydW5BcnJheSwgcikpOworICAgICAgICBBU1NFUlQo
Q0ZHZXRUeXBlSUQoY3RSdW4pID09IENUUnVuR2V0VHlwZUlEKCkpOworICAgICAgICBDRkRpY3Rp
b25hcnlSZWYgcnVuQXR0cmlidXRlcyA9IENUUnVuR2V0QXR0cmlidXRlcyhjdFJ1bik7CisgICAg
ICAgIENURm9udFJlZiBydW5Gb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250QXR0cmlidXRlTmFtZSkpOworICAgICAg
ICBpZiAoIUNGRXF1YWwoZm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBGb250UGxhdGZvcm1EYXRh
OjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkZvbnQpLmdldCgpKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gdHJ1
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2Nv
YS5tbQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxOSArMzcsMjEgQEAKICNp
bXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1w
b3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxmbG9hdC5oPgorI2ltcG9y
dCA8dW5pY29kZS91Y2hhci5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKwogI2lmIFVT
RShBUFBLSVQpCiAjaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CiAjaW1wb3J0IDxBcHBsaWNhdGlv
blNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNlbHNlCisjaW1wb3J0ICJGb250U2Vy
dmljZXNJT1MuaCIKICNpbXBvcnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CiAjZW5kaWYKLSNpbXBv
cnQgPGZsb2F0Lmg+Ci0jaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+Ci0jaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBVU0UoQVBQS0lUKQogQGludGVy
ZmFjZSBOU0ZvbnQgKFdlYkFwcEtpdFNlY3JldEFQSSkKIC0gKEJPT0wpX2lzRmFrZUZpeGVkUGl0
Y2g7CiBAZW5kCkBAIC01Nyw3ICs1OSw2IEBAIC0gKEJPT0wpX2lzRmFrZUZpeGVkUGl0Y2g7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShBUFBLSVQpCiBzdGF0aWMgYm9vbCBmb250
SGFzVmVydGljYWxHbHlwaHMoQ1RGb250UmVmIGN0Rm9udCkKIHsKICAgICAvLyBUaGUgY2hlY2sg
ZG9lc24ndCBsb29rIG5lYXQgYnV0IHRoaXMgaXMgd2hhdCBBcHBLaXQgZG9lcyBmb3IgdmVydGlj
YWwgd3JpdGluZy4uLgpAQCAtNzEsNiArNzIsNyBAQCBzdGF0aWMgYm9vbCBmb250SGFzVmVydGlj
YWxHbHlwaHMoQ1RGb250CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgVVNFKEFQUEtJVCkK
IHN0YXRpYyBib29sIGluaXRGb250RGF0YShGb250KiBmb250RGF0YSkKIHsKICAgICBpZiAoIWZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkKQEAgLTg0LDMxICs4NiwyNCBAQCBzdGF0
aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZhbWlseSh2CiAgICAgc3RhdGljIE5TU3RyaW5n
ICp3ZWJGYWxsYmFja0ZvbnRGYW1pbHkgPSBbW1tOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxNi4w
Zl0gZmFtaWx5TmFtZV0gcmV0YWluXTsKICAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250RmFtaWx5
OwogfQotCi1jb25zdCBGb250KiBGb250Ojpjb21wb3NpdGVGb250UmVmZXJlbmNlRm9udChOU0Zv
bnQgKmtleSkgY29uc3QKKyNlbHNlCitzdGF0aWMgYm9vbCBmb250RmFtaWx5U2hvdWxkTm90QmVV
c2VkRm9yQXJhYmljKENGU3RyaW5nUmVmIGZvbnRGYW1pbHlOYW1lKQogewotICAgIGlmICgha2V5
IHx8IENGRXF1YWwoYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoQ1RGb250UmVmKGtl
eSkpKS5nZXQoKSwgQ0ZTVFIoIkxhc3RSZXNvcnQiKSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERh
dGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwot
Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2Rlcml2ZWRGb250RGF0YS0+Y29tcG9zaXRlRm9udFJl
ZmVyZW5jZXMuYWRkKGtleSwgbnVsbHB0cik7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5
KSB7Ci0gICAgICAgIE5TRm9udCAqc3Vic3RpdHV0ZUZvbnQgPSBba2V5IHByaW50ZXJGb250XTsK
LQotICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xp
Y1RyYWl0cygoQ1RGb250UmVmKXN1YnN0aXR1dGVGb250KTsKLSAgICAgICAgYm9vbCBzeW50aGV0
aWNCb2xkID0gcGxhdGZvcm1EYXRhKCkuc3ludGhldGljQm9sZCgpICYmICEodHJhaXRzICYga0NU
Rm9udEJvbGRUcmFpdCk7Ci0gICAgICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IHBsYXRmb3Jt
RGF0YSgpLnN5bnRoZXRpY09ibGlxdWUoKSAmJiAhKHRyYWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFp
dCk7CisgICAgaWYgKCFmb250RmFtaWx5TmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc3Vic3RpdHV0ZVBsYXRmb3JtKHN1YnN0aXR1dGVGb250
LCBwbGF0Zm9ybURhdGEoKS5zaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWUs
IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCksIHBsYXRmb3JtRGF0YSgpLndpZHRoVmFyaWFu
dCgpKTsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IEZvbnQ6OmNyZWF0ZShz
dWJzdGl0dXRlUGxhdGZvcm0sIGlzQ3VzdG9tRm9udCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgLy8gVGltZXMgTmV3IFJvbWFuIGNv
bnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBz
aGFwZSB0aGVtLiA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4KKyAgICAvLyBGSVhNRSA8cmRhcjov
L3Byb2JsZW0vMTIwOTY4MzU+IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgdGhlIGFib3ZlIGJ1
ZyBpcyBmaXhlZC4KKyAgICAvLyBBcmlhbCBhbmQgVGFob21hIGFyZSBoYXZlIHBlcmZvcm1hbmNl
IGlzc3VlcyBzbyBkb24ndCB1c2UgdGhlbSBhcyB3ZWxsLgorICAgIHJldHVybiAoQ0ZTdHJpbmdD
b21wYXJlKENGU1RSKCJUaW1lcyBOZXcgUm9tYW4iKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtD
RkNvbXBhcmVFcXVhbFRvKQorICAgICAgICB8fCAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJBcmlh
bCIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCisgICAgICAgIHx8
IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRhaG9tYSIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0g
a0NGQ29tcGFyZUVxdWFsVG8pOwogfQorI2VuZGlmCiAKIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0
KCkKIHsKKyNpZiBVU0UoQVBQS0lUKQogICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxh
dGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IDEuMGYgOiAwLmY7CiAKICAgICBib29sIGZhaWxl
ZFNldHVwID0gZmFsc2U7CkBAIC0xNjUsMTIgKzE2MCwxMCBAQCB2b2lkIEZvbnQ6OnBsYXRmb3Jt
SW5pdCgpCiAgICAgICAgIGluaXRGb250RGF0YSh0aGlzKTsKICAgICB9CiAKLSNpZiBQTEFURk9S
TShNQUMpCiAgICAgLy8gV29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzE5NDMzNDkwPgogICAg
IENHR2x5cGggZHVtbXlHbHlwaHNbXSA9IHswLCAwfTsKLSAgICBDR1NpemUgZHVtbXlTaXplW10g
PSB7Q0dTaXplTWFrZSgwLCAwKSwgQ0dTaXplTWFrZSgwLCAwKX07CisgICAgQ0dTaXplIGR1bW15
U2l6ZVtdID0geyBDR1NpemVNYWtlKDAsIDApLCBDR1NpemVNYWtlKDAsIDApIH07CiAgICAgQ1RG
b250VHJhbnNmb3JtR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBkdW1teUdseXBocywg
ZHVtbXlTaXplLCAyLCBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyB8IGtDVEZvbnRU
cmFuc2Zvcm1BcHBseVNoYXBpbmcpOwotI2VuZGlmCiAgICAgCiAgICAgaW50IGlBc2NlbnQ7CiAg
ICAgaW50IGlEZXNjZW50OwpAQCAtMjMzLDExICsyMjYsNjUgQEAgdm9pZCBGb250OjpwbGF0Zm9y
bUluaXQoKQogICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7CiAgICAg
bV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwogICAgIG1fZm9udE1ldHJpY3Muc2V0
WEhlaWdodCh4SGVpZ2h0KTsKLX0KKyNlbHNlCisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0g
bV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkID8gY2VpbGYobV9wbGF0Zm9ybURhdGEuc2l6
ZSgpICAvIDI0LjBmKSA6IDAuZjsKKyAgICBtX3NwYWNlR2x5cGggPSAwOworICAgIG1fc3BhY2VX
aWR0aCA9IDA7CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbTsKKyAgICBmbG9hdCBhc2NlbnQ7Cisg
ICAgZmxvYXQgZGVzY2VudDsKKyAgICBmbG9hdCBjYXBIZWlnaHQ7CisgICAgZmxvYXQgbGluZUdh
cDsKKyAgICBmbG9hdCBsaW5lU3BhY2luZzsKKyAgICBmbG9hdCB4SGVpZ2h0OworICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZTsKKyAgICBpZiAoQ1RGb250UmVmIGN0Rm9udCA9
IG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgeworICAgICAgICBGb250U2VydmljZXNJT1MgZm9udFNl
cnZpY2UoY3RGb250KTsKKyAgICAgICAgYXNjZW50ID0gY2VpbGYoZm9udFNlcnZpY2UuYXNjZW50
KCkpOworICAgICAgICBkZXNjZW50ID0gY2VpbGYoZm9udFNlcnZpY2UuZGVzY2VudCgpKTsKKyAg
ICAgICAgbGluZVNwYWNpbmcgPSBmb250U2VydmljZS5saW5lU3BhY2luZygpOworICAgICAgICBs
aW5lR2FwID0gZm9udFNlcnZpY2UubGluZUdhcCgpOworICAgICAgICB4SGVpZ2h0ID0gZm9udFNl
cnZpY2UueEhlaWdodCgpOworICAgICAgICBjYXBIZWlnaHQgPSBmb250U2VydmljZS5jYXBIZWln
aHQoKTsKKyAgICAgICAgdW5pdHNQZXJFbSA9IGZvbnRTZXJ2aWNlLnVuaXRzUGVyRW0oKTsKKyAg
ICAgICAgZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ0dGb250UmVmIGNnRm9udCA9IG1fcGxhdGZvcm1EYXRh
LmNnRm9udCgpOworCisgICAgICAgIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0c1BlckVtKGNn
Rm9udCk7CisKKyAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgp
OworICAgICAgICBhc2NlbnQgPSBscm91bmRmKHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldEFzY2Vu
dChjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIGRlc2NlbnQgPSBs
cm91bmRmKC1zY2FsZUVtVG9Vbml0cygtYWJzKENHRm9udEdldERlc2NlbnQoY2dGb250KSksIHVu
aXRzUGVyRW0pICogcG9pbnRTaXplKTsKKyAgICAgICAgbGluZUdhcCA9IGxyb3VuZGYoc2NhbGVF
bVRvVW5pdHMoQ0dGb250R2V0TGVhZGluZyhjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZSk7CisgICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KGNn
Rm9udCksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgICAgICBjYXBIZWlnaHQgPSBzY2Fs
ZUVtVG9Vbml0cyhDR0ZvbnRHZXRDYXBIZWlnaHQoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2lu
dFNpemU7CiAKLXN0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb250UGxhdGZv
cm1EYXRhJiBwbGF0Zm9ybURhdGEsIEZvdXJDaGFyQ29kZSB0YWJsZU5hbWUpCi17Ci0gICAgcmV0
dXJuIENHRm9udENvcHlUYWJsZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCksIHRhYmxlTmFt
ZSk7CisgICAgICAgIGxpbmVTcGFjaW5nID0gYXNjZW50ICsgZGVzY2VudCArIGxpbmVHYXA7Cisg
ICAgICAgIGZhbWlseU5hbWUgPSBhZG9wdENGKENHRm9udENvcHlGYW1pbHlOYW1lKGNnRm9udCkp
OworICAgIH0KKworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsK
KyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Mu
c2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdh
cCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7CisgICAg
bV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0
Q2FwSGVpZ2h0KGNhcEhlaWdodCk7CisgICAgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMgPSBm
b250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0KCkpOworCisg
ICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4
dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IGZv
bnRIYXNWZXJ0aWNhbEdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSk7CisKKyAgICBpZiAo
IW1fcGxhdGZvcm1EYXRhLm1faXNFbW9qaSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHRo
aXJkT2ZTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpIC8gMzsKKyAgICBtX2ZvbnRNZXRyaWNz
LnNldEFzY2VudCh0aGlyZE9mU2l6ZSk7CisgICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KHRo
aXJkT2ZTaXplKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAodGhpcmRPZlNpemUpOwor
ICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcoMCk7CisjZW5kaWYKIH0KIAogdm9pZCBG
b250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQpAQCAtMjQ1LDE0ICsyOTIsMTUgQEAgdm9pZCBG
b250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKICAg
ICBtX21heENoYXJXaWR0aCA9IDA7CiAgICAgCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gb3My
VGFibGUgPSBhZG9wdENGKGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdPUy8y
JykpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBvczJUYWJs
ZSA9IGFkb3B0Q0YoQ0dGb250Q29weVRhYmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgp
LCAnT1MvMicpKTsKICAgICBpZiAob3MyVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKG9zMlRhYmxl
LmdldCgpKSA+PSA0KSB7CiAgICAgICAgIGNvbnN0IFVJbnQ4KiBvczIgPSBDRkRhdGFHZXRCeXRl
UHRyKG9zMlRhYmxlLmdldCgpKTsKICAgICAgICAgU0ludDE2IG9zMkF2Z0NoYXJXaWR0aCA9IG9z
MlsyXSAqIDI1NiArIG9zMlszXTsKICAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBzY2FsZUVtVG9V
bml0cyhvczJBdmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpKSAqIG1fcGxh
dGZvcm1EYXRhLm1fc2l6ZTsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBoZWFk
VGFibGUgPSBhZG9wdENGKGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdoZWFk
JykpOworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGhlYWRUYWJsZSA9IGFkb3B0Q0YoQ0dGb250
Q29weVRhYmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAnaGVhZCcpKTsKICAgICBp
ZiAoaGVhZFRhYmxlICYmIENGRGF0YUdldExlbmd0aChoZWFkVGFibGUuZ2V0KCkpID49IDQyKSB7
CiAgICAgICAgIGNvbnN0IFVJbnQ4KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0ZVB0cihoZWFkVGFibGUu
Z2V0KCkpOwogICAgICAgICB1c2hvcnQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1NiArIGhlYWRbMzdd
OwpAQCAtMjYyLDE3ICszMTAsMTYgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQo
KQogICAgICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsK
ICAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRy
aWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CiAgICAgfQorI2VuZGlm
CiAKICAgICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGltYXRlLCB3aGljaCB3
aWxsIHBvcHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9zaXRpdmUuCiAgICAg
aW5pdENoYXJXaWR0aHMoKTsKIH0KLSNlbmRpZiAvLyBVU0UoQVBQS0lUKQogCiB2b2lkIEZvbnQ6
OnBsYXRmb3JtRGVzdHJveSgpCiB7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQogUGFzc1JlZlB0
cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgp
KSB7CkBAIC0yODEsMTMgKzMyOCwxMiBAQCBQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3Jt
Q3JlYXRlU2NhCiAgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRy
dWUsIGZhbHNlKTsKICAgICB9CiAKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAg
ICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwotICAg
IEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZv
bnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0b1NpemU6c2l6
ZV0sIHNpemUsIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSk7CiAK
LSAgICAvLyBBcHBLaXQgcmVzZXRzIHRoZSB0eXBlIGluZm9ybWF0aW9uIChzY3JlZW4vcHJpbnRl
cikgd2hlbiB5b3UgY29udmVydCBhIGZvbnQgdG8gYSBkaWZmZXJlbnQgc2l6ZS4KLSAgICAvLyBX
ZSBoYXZlIHRvIGZpeCB1cCB0aGUgZm9udCB0aGF0IHdlJ3JlIGhhbmRlZCBiYWNrLgotICAgIHNj
YWxlZEZvbnREYXRhLnNldE5TRm9udChbc2NhbGVkRm9udERhdGEubnNGb250KCkgcHJpbnRlckZv
bnRdKTsKKyNpZiBVU0UoQVBQS0lUKQorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KworICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoW1tOU0ZvbnRNYW5hZ2VyIHNo
YXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0b1Np
emU6c2l6ZV0sIHNpemUsIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24o
KSk7CiAKICAgICBpZiAoc2NhbGVkRm9udERhdGEuZm9udCgpKSB7CiAgICAgICAgIE5TRm9udE1h
bmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwpA
QCAtMzA3LDEwICszNTMsMzIgQEAgUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0
ZVNjYQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICByZXR1cm4gMDsKKyNl
bHNlCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cyA9IENURm9udEdldFN5bWJv
bGljVHJhaXRzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgUmV0YWluUHRyPENURm9udERl
c2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2Ny
aXB0b3IobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisgICAgUmV0YWluUHRyPENURm9udFJlZj4g
c2NhbGVkRm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnRE
ZXNjcmlwdG9yLmdldCgpLCBzaXplLCBudWxscHRyKSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBz
Y2FsZWRGb250RGF0YShzY2FsZWRGb250LmdldCgpLCBzaXplLCBmYWxzZSwgZmFsc2UsIG1fcGxh
dGZvcm1EYXRhLm9yaWVudGF0aW9uKCkpOworCisgICAgaWYgKHNjYWxlZEZvbnREYXRhLmZvbnQo
KSkgeworICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkKQorICAgICAg
ICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OworICAgICAgICBpZiAobV9wbGF0
Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlKQorICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBr
Q1RGb250SXRhbGljVHJhaXQ7CisKKyAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVk
Rm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKHNjYWxlZEZvbnREYXRhLmZvbnQo
KSk7CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRz
ICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0
Qm9sZCk7CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250
VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RG
b250VHJhaXRJdGFsaWMpOworCisgICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yUGxh
dGZvcm1EYXRhKHNjYWxlZEZvbnREYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
KyNlbmRpZgogfQogCiB2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKIHsKKyNpZiBVU0UoQVBQ
S0lUKQogICAgIE5TRm9udCogZiA9IG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOwogICAgIC8vIFNw
ZWNpYWwgY2FzZSBPc2FrYS1Nb25vLgogICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2Js
ZW0vMzk5OTQ2Nz4sIHdlIHNob3VsZCB0cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgpA
QCAtMzI5LDggKzM5NywyMiBAQCB2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKICAgICAgICAg
ICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9PSBOU09yZGVy
ZWRTYW1lKSAmJgogICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMt
UEdvdGhpYyJdICE9IE5TT3JkZXJlZFNhbWUgJiYKICAgICAgICAgICAgW25hbWUgY2FzZUluc2Vu
c2l0aXZlQ29tcGFyZTpAIk1vbm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7CisjZWxz
ZQorICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7CisgICAgbV90
cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOworICAgIGlmICghY3RGb250KQorICAgICAgICByZXR1
cm47IC8vIENURm9udCBpcyBudWxsIGluIHRoZSBjYXNlIG9mIFNWRyBmb250cyBmb3IgZXhhbXBs
ZS4KKworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENURm9u
dENvcHlGdWxsTmFtZShjdEZvbnQpKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWls
eU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkpOworCisgICAgbV90
cmVhdEFzRml4ZWRQaXRjaCA9IENHRm9udElzRml4ZWRQaXRjaChtX3BsYXRmb3JtRGF0YS5jZ0Zv
bnQoKSkgfHwgKGZ1bGxOYW1lICYmIChDRlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENG
U1RSKCJPc2FrYS1Nb25vIiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBh
cmVFcXVhbFRvIHx8IENGU3RyaW5nQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBH
b3RoaWMiKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG8p
KTsKKyAgICBpZiAoZmFtaWx5TmFtZSAmJiBDRlN0cmluZ0NvbXBhcmUoZmFtaWx5TmFtZS5nZXQo
KSwgQ0ZTVFIoIkNvdXJpZXIgTmV3IiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtD
RkNvbXBhcmVFcXVhbFRvKSB7CisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5ldyB0
byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNlIG9m
IGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBmb3IgaVBob25lIChz
ZWUgcmRhcjovLzYyNjk3ODMpLgorICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7
CisgICAgfQorI2VuZGlmCiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogRmxvYXRSZWN0
IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CkBAIC0z
NDMsMTEgKzQyNSwxMSBAQCBGbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChH
CiAgICAgcmV0dXJuIGJvdW5kaW5nQm94OwogfQogCi0jaWYgUExBVEZPUk0oTUFDKQotaW5saW5l
IENHRm9udFJlbmRlcmluZ1N0eWxlIEZvbnQ6OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKK3N0YXRp
YyBpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5nU3R5bGUoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogeworI2lmIFVTRShBUFBLSVQpCiAgICAgQ0dGb250
UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcg
fCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRl
cmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb247Ci0gICAgTlNGb250ICpmb250ID0gcGxhdGZv
cm1EYXRhKCkubnNGb250KCk7CisgICAgTlNGb250ICpmb250ID0gcGxhdGZvcm1EYXRhLm5zRm9u
dCgpOwogICAgIGlmIChmb250KSB7CiAgICAgICAgIHN3aXRjaCAoW2ZvbnQgcmVuZGVyaW5nTW9k
ZV0pIHsKICAgICAgICAgY2FzZSBOU0ZvbnRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9k
ZToKQEAgLTM2MSwyNiArNDQzLDMxIEBAIGlubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBGb250
OjpyZW5kZXIKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gc3R5bGU7CisKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHBsYXRmb3JtRGF0YSk7CisgICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJp
bmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRp
b25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8IGtDR0Zv
bnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7CisjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wg
Rm9udDo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZh
bmNlKSBjb25zdAorc3RhdGljIGlubGluZSBib29sIGFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBHbHlwaCBnbHlwaCwgQ0dTaXpl
JiBhZHZhbmNlKQogewotICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgp
OwotICAgIGlmICghZm9udCB8fCAhcGxhdGZvcm1EYXRhKCkuaXNDb2xvckJpdG1hcEZvbnQoKSkK
KyNpZiBQTEFURk9STShNQUMpCisgICAgTlNGb250ICpmb250ID0gcGxhdGZvcm1EYXRhLm5zRm9u
dCgpOworICAgIGlmICghZm9udCB8fCAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhZHZhbmNlID0gTlNTaXplVG9DR1NpemUoW2Zv
bnQgYWR2YW5jZW1lbnRGb3JHbHlwaDpnbHlwaF0pOwogICAgIHJldHVybiB0cnVlOwotfQorI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oZ2x5cGgpOworICAgIFVOVVNFRF9QQVJBTShhZHZhbmNlKTsK
KyAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKK30KIAogc3RhdGljIGJvb2wgaGFzQ3VzdG9tVHJh
Y2tpbmcoQ1RGb250UmVmIGZvbnQpCiB7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTA5MAotICAgIFVOVVNFRF9QQVJBTShmb250KTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZWxzZQogICAgIHJldHVybiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0
ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCkpLmdldCgpKTsK
LSNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNFbW9qaShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBwbGF0Zm9ybURhdGEpCkBAIC0zOTMsMTYgKzQ4MCwxNiBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgaXNFbW9qaShjb25zdCBGb250UGxhCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgRm9u
dDo6Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZh
bmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdAorc3RhdGljIGlubGluZSBib29sIGNh
blVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhLCBHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZh
bmNlKQogewogICAgIC8vIEZhc3QgZ2V0dGVyIGRvZXNuJ3QgdGFrZSBjdXN0b20gdHJhY2tpbmcg
aW50byBhY2NvdW50Ci0gICAgaWYgKGhhc0N1c3RvbVRyYWNraW5nKHBsYXRmb3JtRGF0YSgpLmN0
Rm9udCgpKSkKKyAgICBpZiAoaGFzQ3VzdG9tVHJhY2tpbmcocGxhdGZvcm1EYXRhLmN0Rm9udCgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIEZhc3QgZ2V0dGVyIGRvZXNuJ3Qgd29y
ayBmb3IgZW1vamkKLSAgICBpZiAoaXNFbW9qaShwbGF0Zm9ybURhdGEoKSkpCisgICAgaWYgKGlz
RW1vamkocGxhdGZvcm1EYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIC4uLiBv
ciBmb3IgYW55IGJpdG1hcCBmb250cyBpbiBnZW5lcmFsCi0gICAgaWYgKGFkdmFuY2VGb3JDb2xv
ckJpdG1hcEZvbnQoZ2x5cGgsIGFkdmFuY2UpKSB7CisgICAgaWYgKGFkdmFuY2VGb3JDb2xvckJp
dG1hcEZvbnQocGxhdGZvcm1EYXRhLCBnbHlwaCwgYWR2YW5jZSkpIHsKICAgICAgICAgcG9wdWxh
dGVkQWR2YW5jZSA9IHRydWU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC00MTQs
MTAgKzUwMSwxMCBAQCBmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggCiAg
ICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOwogICAgIGJvb2wgaG9yaXpvbnRhbCA9IHBs
YXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbDsKICAgICBib29sIHBvcHVs
YXRlZEFkdmFuY2UgPSBmYWxzZTsKLSAgICBpZiAoKGhvcml6b250YWwgfHwgbV9pc0Jyb2tlbklk
ZW9ncmFwaEZhbGxiYWNrKSAmJiBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKGdseXBoLCBh
ZHZhbmNlLCBwb3B1bGF0ZWRBZHZhbmNlKSkgeworICAgIGlmICgoaG9yaXpvbnRhbCB8fCBtX2lz
QnJva2VuSWRlb2dyYXBoRmFsbGJhY2spICYmIGNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIo
cGxhdGZvcm1EYXRhKCksIGdseXBoLCBhZHZhbmNlLCBwb3B1bGF0ZWRBZHZhbmNlKSkgewogICAg
ICAgICBmbG9hdCBwb2ludFNpemUgPSBwbGF0Zm9ybURhdGEoKS5tX3NpemU7CiAgICAgICAgIENH
QWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShwb2ludFNpemUs
IHBvaW50U2l6ZSk7Ci0gICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxl
KHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmbSwgcmVuZGVyaW5nU3R5bGUoKSwgJmdseXBoLCAx
LCAmYWR2YW5jZSkpIHsKKyAgICAgICAgaWYgKCFDR0ZvbnRHZXRHbHlwaEFkdmFuY2VzRm9yU3R5
bGUocGxhdGZvcm1EYXRhKCkuY2dGb250KCksICZtLCByZW5kZXJpbmdTdHlsZShwbGF0Zm9ybURh
dGEoKSksICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDR0ZvbnRDb3B5RnVsbE5hbWUocGxhdGZvcm1E
YXRhKCkuY2dGb250KCkpKTsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNhY2hl
IGdseXBoIHdpZHRocyBmb3IgJUAgJWYiLCBmdWxsTmFtZS5nZXQoKSwgcG9pbnRTaXplKTsKICAg
ICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwpAQCAtNDc3LDQgKzU2NCwyOCBAQCBib29sIEZv
bnQ6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
KyNpZiBVU0UoQVBQS0lUKQorY29uc3QgRm9udCogRm9udDo6Y29tcG9zaXRlRm9udFJlZmVyZW5j
ZUZvbnQoTlNGb250ICprZXkpIGNvbnN0Cit7CisgICAgaWYgKCFrZXkgfHwgQ0ZFcXVhbChhZG9w
dENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShDVEZvbnRSZWYoa2V5KSkpLmdldCgpLCBDRlNU
UigiTGFzdFJlc29ydCIpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CisKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fZGVyaXZlZEZvbnREYXRhLT5jb21wb3NpdGVGb250UmVmZXJlbmNlcy5hZGQoa2V5
LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgTlNG
b250ICpzdWJzdGl0dXRlRm9udCA9IFtrZXkgcHJpbnRlckZvbnRdOworCisgICAgICAgIENURm9u
dFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKChDVEZvbnRS
ZWYpc3Vic3RpdHV0ZUZvbnQpOworICAgICAgICBib29sIHN5bnRoZXRpY0JvbGQgPSBwbGF0Zm9y
bURhdGEoKS5zeW50aGV0aWNCb2xkKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0KTsK
KyAgICAgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gcGxhdGZvcm1EYXRhKCkuc3ludGhldGlj
T2JsaXF1ZSgpICYmICEodHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KTsKKworICAgICAgICBG
b250UGxhdGZvcm1EYXRhIHN1YnN0aXR1dGVQbGF0Zm9ybShzdWJzdGl0dXRlRm9udCwgcGxhdGZv
cm1EYXRhKCkuc2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQoKSk7Cisg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGb250OjpjcmVhdGUoc3Vic3RpdHV0
ZVBsYXRmb3JtLCBpc0N1c3RvbUZvbnQoKSk7CisgICAgfQorICAgIHJldHVybiBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250
RGF0YUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0JKHJldmlzaW9uIDE3OTQxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIkZvbnQuaCIKLQotI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0j
aW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNpbXBvcnQgIkZvbnRDYWNoZS5oIgotI2ltcG9y
dCAiRm9udENhc2NhZGUuaCIKLSNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgotI2ltcG9ydCAi
Rm9udFNlcnZpY2VzSU9TLmgiCi0jaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2ltcG9y
dCA8ZmxvYXQuaD4KLSNpbXBvcnQgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGJvb2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhD
RlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKLXsKLSAgICBpZiAoIWZvbnRGYW1pbHlOYW1lKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaW1lcyBOZXcgUm9tYW4gY29udGFpbnMg
QXJhYmljIGdseXBocywgYnV0IENvcmUgVGV4dCBkb2Vzbid0IGtub3cgaG93IHRvIHNoYXBlIHRo
ZW0uIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1PgotICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxl
bS8xMjA5NjgzNT4gcmVtb3ZlIHRoaXMgZnVuY3Rpb24gb25jZSB0aGUgYWJvdmUgYnVnIGlzIGZp
eGVkLgotICAgIC8vIEFyaWFsIGFuZCBUYWhvbWEgYXJlIGhhdmUgcGVyZm9ybWFuY2UgaXNzdWVz
IHNvIGRvbid0IHVzZSB0aGVtIGFzIHdlbGwuCi0gICAgcmV0dXJuIChDRlN0cmluZ0NvbXBhcmUo
Q0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFy
ZUVxdWFsVG8pCi0gICAgICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFyaWFsIiks
IGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAgICAgICAgICAgfHwg
KENGU3RyaW5nQ29tcGFyZShDRlNUUigiVGFob21hIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBr
Q0ZDb21wYXJlRXF1YWxUbyk7Ci19Ci0KLXN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBo
cyhDVEZvbnRSZWYgY3RGb250KQotewotICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxvb2sgbmVh
dCBidXQgdGhpcyBpcyB3aGF0IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5nLi4uCi0g
ICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250Q29weUF2
YWlsYWJsZVRhYmxlcyhjdEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOwotICAg
IENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7Ci0g
ICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsK
LSAgICAgICAgQ1RGb250VGFibGVUYWcgdGFnID0gKENURm9udFRhYmxlVGFnKSh1aW50cHRyX3Qp
Q0ZBcnJheUdldFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KTsKLSAgICAgICAg
aWYgKHRhZyA9PSBrQ1RGb250VGFibGVWaGVhIHx8IHRhZyA9PSBrQ1RGb250VGFibGVWT1JHKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQotewotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9
IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IGNlaWxmKG1fcGxhdGZvcm1EYXRhLnNp
emUoKSAgLyAyNC4wZikgOiAwLmY7Ci0gICAgbV9zcGFjZUdseXBoID0gMDsKLSAgICBtX3NwYWNl
V2lkdGggPSAwOwotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW07Ci0gICAgZmxvYXQgYXNjZW50Owot
ICAgIGZsb2F0IGRlc2NlbnQ7Ci0gICAgZmxvYXQgY2FwSGVpZ2h0OwotICAgIGZsb2F0IGxpbmVH
YXA7Ci0gICAgZmxvYXQgbGluZVNwYWNpbmc7Ci0gICAgZmxvYXQgeEhlaWdodDsKLSAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWU7Ci0gICAgaWYgKENURm9udFJlZiBjdEZvbnQg
PSBtX3BsYXRmb3JtRGF0YS5mb250KCkpIHsKLSAgICAgICAgRm9udFNlcnZpY2VzSU9TIGZvbnRT
ZXJ2aWNlKGN0Rm9udCk7Ci0gICAgICAgIGFzY2VudCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmFzY2Vu
dCgpKTsKLSAgICAgICAgZGVzY2VudCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmRlc2NlbnQoKSk7Ci0g
ICAgICAgIGxpbmVTcGFjaW5nID0gZm9udFNlcnZpY2UubGluZVNwYWNpbmcoKTsKLSAgICAgICAg
bGluZUdhcCA9IGZvbnRTZXJ2aWNlLmxpbmVHYXAoKTsKLSAgICAgICAgeEhlaWdodCA9IGZvbnRT
ZXJ2aWNlLnhIZWlnaHQoKTsKLSAgICAgICAgY2FwSGVpZ2h0ID0gZm9udFNlcnZpY2UuY2FwSGVp
Z2h0KCk7Ci0gICAgICAgIHVuaXRzUGVyRW0gPSBmb250U2VydmljZS51bml0c1BlckVtKCk7Ci0g
ICAgICAgIGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIENHRm9udFJlZiBjZ0ZvbnQgPSBtX3BsYXRmb3JtRGF0
YS5jZ0ZvbnQoKTsKLQotICAgICAgICB1bml0c1BlckVtID0gQ0dGb250R2V0VW5pdHNQZXJFbShj
Z0ZvbnQpOwotCi0gICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUo
KTsKLSAgICAgICAgYXNjZW50ID0gbHJvdW5kZihzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRBc2Nl
bnQoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOwotICAgICAgICBkZXNjZW50ID0g
bHJvdW5kZigtc2NhbGVFbVRvVW5pdHMoLWFicyhDR0ZvbnRHZXREZXNjZW50KGNnRm9udCkpLCB1
bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0gICAgICAgIGxpbmVHYXAgPSBscm91bmRmKHNjYWxl
RW1Ub1VuaXRzKENHRm9udEdldExlYWRpbmcoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNp
emUpOwotICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0WEhlaWdodChj
Z0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICAgICAgY2FwSGVpZ2h0ID0gc2Nh
bGVFbVRvVW5pdHMoQ0dGb250R2V0Q2FwSGVpZ2h0KGNnRm9udCksIHVuaXRzUGVyRW0pICogcG9p
bnRTaXplOwotCi0gICAgICAgIGxpbmVTcGFjaW5nID0gYXNjZW50ICsgZGVzY2VudCArIGxpbmVH
YXA7Ci0gICAgICAgIGZhbWlseU5hbWUgPSBhZG9wdENGKENHRm9udENvcHlGYW1pbHlOYW1lKGNn
Rm9udCkpOwotICAgIH0KLQotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1Bl
ckVtKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwotICAgIG1fZm9udE1l
dHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAo
bGluZUdhcCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7
Ci0gICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwotICAgIG1fZm9udE1ldHJp
Y3Muc2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7Ci0gICAgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFi
aWMgPSBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0KCkp
OwotCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYg
IWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKLSAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBo
cyA9IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSk7Ci0KLSAg
ICBpZiAoIW1fcGxhdGZvcm1EYXRhLm1faXNFbW9qaSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aW50IHRoaXJkT2ZTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpIC8gMzsKLSAgICBtX2ZvbnRN
ZXRyaWNzLnNldEFzY2VudCh0aGlyZE9mU2l6ZSk7Ci0gICAgbV9mb250TWV0cmljcy5zZXREZXNj
ZW50KHRoaXJkT2ZTaXplKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAodGhpcmRPZlNp
emUpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcoMCk7Ci19Ci0KLXZvaWQgRm9u
dDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKLXsKLSAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7Ci0g
ICAgbV9tYXhDaGFyV2lkdGggPSAwOwotCi0gICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0
Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBh
cmUgbm9uLXBvc2l0aXZlLgotICAgIGluaXRDaGFyV2lkdGhzKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChpc0N1c3RvbUZvbnQoKSkg
ewotICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKG1fcGxhdGZvcm1EYXRh
KTsKLSAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVkRm9udERhdGEubV9zaXpl
ICogc2NhbGVGYWN0b3I7Ci0gICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERh
dGEsIHRydWUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURh
dGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7Ci0gICAgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRy
YWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0g
ICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7Ci0gICAg
UmV0YWluUHRyPENURm9udFJlZj4gc2NhbGVkRm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0
aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzaXplLCBudWxscHRyKSk7Ci0g
ICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShzY2FsZWRGb250LmdldCgpLCBzaXpl
LCBmYWxzZSwgZmFsc2UsIG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkpOwotCi0gICAgaWYg
KHNjYWxlZEZvbnREYXRhLmZvbnQoKSkgewotICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9z
eW50aGV0aWNCb2xkKQotICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0
OwotICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlKQotICAgICAg
ICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250SXRhbGljVHJhaXQ7Ci0KLSAgICAgICAgQ1RGb250
U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRz
KHNjYWxlZEZvbnREYXRhLmZvbnQoKSk7Ci0gICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhl
dGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250
VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7Ci0gICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3lu
dGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNj
YWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwotCi0gICAgICAgIHJldHVybiBm
b250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHNjYWxlZEZvbnREYXRhKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCi17
Ci0gICAgQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsKLSAgICBtX3Ry
ZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7Ci0gICAgaWYgKCFjdEZvbnQpCi0gICAgICAgIHJldHVy
bjsgLy8gQ1RGb250IGlzIG51bGwgaW4gdGhlIGNhc2Ugb2YgU1ZHIGZvbnRzIGZvciBleGFtcGxl
LgotCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFtZSA9IGFkb3B0Q0YoQ1RGb250
Q29weUZ1bGxOYW1lKGN0Rm9udCkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5
TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7Ci0KLSAgICBtX3Ry
ZWF0QXNGaXhlZFBpdGNoID0gQ0dGb250SXNGaXhlZFBpdGNoKG1fcGxhdGZvcm1EYXRhLmNnRm9u
dCgpKSB8fCAoZnVsbE5hbWUgJiYgKENGU3RyaW5nQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZT
VFIoIk9zYWthLU1vbm8iKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFy
ZUVxdWFsVG8gfHwgQ0ZTdHJpbmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTVMtUEdv
dGhpYyIpLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykp
OwotICAgIGlmIChmYW1pbHlOYW1lICYmIENGU3RyaW5nQ29tcGFyZShmYW1pbHlOYW1lLmdldCgp
LCBDRlNUUigiQ291cmllciBOZXciKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NG
Q29tcGFyZUVxdWFsVG8pIHsKLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3IHRv
IG5vdCBiZSB0cmVhdGVkIGFzIGZpeGVkIHBpdGNoLCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ugb2Yg
YSBoYWNrZWQgc3BhY2Ugd2lkdGggd2hpY2ggaXMgdW5kZXNpcmVhYmxlIGZvciBpUGhvbmUgKHNl
ZSByZGFyOi8vNjI2OTc4MykuCi0gICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsK
LSAgICB9Ci19Ci0KLUNHRm9udFJlbmRlcmluZ1N0eWxlIEZvbnQ6OnJlbmRlcmluZ1N0eWxlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwg
a0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJp
bmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5m
aWx0ZXJlZDsKLX0KLQotYm9vbCBGb250OjphZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KEdseXBo
LCBDR1NpemUmKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNpb24gMTc5NDE1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRm9udC5oIgotCi0jaW1wb3J0ICJCbG9ja0V4Y2VwdGlv
bnMuaCIKLSNpbXBvcnQgIkNvbG9yLmgiCi0jaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKLSNp
bXBvcnQgIkNvcmVUZXh0U1BJLmgiCi0jaW1wb3J0ICJGbG9hdFJlY3QuaCIKLSNpbXBvcnQgIkZv
bnRDYWNoZS5oIgotI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKLSNpbXBvcnQgIkZvbnREZXNjcmlw
dGlvbi5oIgotI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCi0jaW1wb3J0ICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCi0jaWYgVVNFKEFQUEtJVCkKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4K
LSNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2Vs
c2UKLSNpbXBvcnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0jZW5kaWYKLSNpbXBvcnQgPGZsb2F0
Lmg+Ci0jaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgotCi0jaWYgIVBMQVRGT1JNKElPUykKLUBpbnRlcmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNy
ZXRBUEkpCi0tIChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOwotQGVuZAotI2VuZGlmCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShBUFBLSVQpCi1zdGF0aWMgYm9vbCBmb250SGFzVmVy
dGljYWxHbHlwaHMoQ1RGb250UmVmIGN0Rm9udCkKLXsKLSAgICAvLyBUaGUgY2hlY2sgZG9lc24n
dCBsb29rIG5lYXQgYnV0IHRoaXMgaXMgd2hhdCBBcHBLaXQgZG9lcyBmb3IgdmVydGljYWwgd3Jp
dGluZy4uLgotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB0YWJsZVRhZ3MgPSBhZG9wdENGKENU
Rm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlv
bnMpKTsKLSAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3Mu
Z2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyAr
K2luZGV4KSB7Ci0gICAgICAgIENURm9udFRhYmxlVGFnIHRhZyA9IChDVEZvbnRUYWJsZVRhZyko
dWludHB0cl90KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCk7
Ci0gICAgICAgIGlmICh0YWcgPT0ga0NURm9udFRhYmxlVmhlYSB8fCB0YWcgPT0ga0NURm9udFRh
YmxlVk9SRykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXN0YXRpYyBib29sIGluaXRGb250RGF0YShGb250KiBmb250RGF0YSkKLXsKLSAg
ICBpZiAoIWZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBOU1N0cmluZyAqd2ViRmFs
bGJhY2tGb250RmFtaWx5KHZvaWQpCi17Ci0gICAgc3RhdGljIE5TU3RyaW5nICp3ZWJGYWxsYmFj
a0ZvbnRGYW1pbHkgPSBbW1tOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxNi4wZl0gZmFtaWx5TmFt
ZV0gcmV0YWluXTsKLSAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250RmFtaWx5OwotfQotCi1jb25z
dCBGb250KiBGb250Ojpjb21wb3NpdGVGb250UmVmZXJlbmNlRm9udChOU0ZvbnQgKmtleSkgY29u
c3QKLXsKLSAgICBpZiAoIWtleSB8fCBDRkVxdWFsKGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3Jp
cHROYW1lKENURm9udFJlZihrZXkpKSkuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCi0gICAg
ICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+
KGlzQ3VzdG9tRm9udCgpKTsKLQotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXJpdmVkRm9udERh
dGEtPmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VzLmFkZChrZXksIG51bGxwdHIpOwotICAgIGlmIChh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBOU0ZvbnQgKnN1YnN0aXR1dGVGb250ID0g
W2tleSBwcmludGVyRm9udF07Ci0KLSAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRz
ID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoKENURm9udFJlZilzdWJzdGl0dXRlRm9udCk7Ci0g
ICAgICAgIGJvb2wgc3ludGhldGljQm9sZCA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY0JvbGQo
KSAmJiAhKHRyYWl0cyAmIGtDVEZvbnRCb2xkVHJhaXQpOwotICAgICAgICBib29sIHN5bnRoZXRp
Y09ibGlxdWUgPSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0cmFpdHMg
JiBrQ1RGb250SXRhbGljVHJhaXQpOwotCi0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc3Vic3Rp
dHV0ZVBsYXRmb3JtKHN1YnN0aXR1dGVGb250LCBwbGF0Zm9ybURhdGEoKS5zaXplKCksIHN5bnRo
ZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWUsIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCks
IHBsYXRmb3JtRGF0YSgpLndpZHRoVmFyaWFudCgpKTsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IEZvbnQ6OmNyZWF0ZShzdWJzdGl0dXRlUGxhdGZvcm0sIGlzQ3VzdG9tRm9u
dCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7
Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBtX3N5bnRoZXRpY0JvbGRP
ZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyAxLjBmIDogMC5mOwotCi0g
ICAgYm9vbCBmYWlsZWRTZXR1cCA9IGZhbHNlOwotICAgIGlmICghaW5pdEZvbnREYXRhKHRoaXMp
KSB7Ci0gICAgICAgIC8vIEFjayEgU29tZXRoaW5nIHZlcnkgYmFkIGhhcHBlbmVkLCBsaWtlIGEg
Y29ycnVwdCBmb250LgotICAgICAgICAvLyBUcnkgbG9va2luZyBmb3IgYW4gYWx0ZXJuYXRlICdi
YXNlJyBmb250IGZvciB0aGlzIHJlbmRlcmVyLgotCi0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBo
YWNrIHRvIHVzZSAiVGltZXMgTmV3IFJvbWFuIiBpbiBwbGFjZSBvZiAiVGltZXMiLgotICAgICAg
ICAvLyAiVGltZXMgUk8iIGlzIGEgY29tbW9uIGZvbnQgd2hvc2UgZmFtaWx5IG5hbWUgaXMgIlRp
bWVzIi4KLSAgICAgICAgLy8gSXQgb3ZlcnJpZGVzIHRoZSBub3JtYWwgIlRpbWVzIiBmYW1pbHkg
Zm9udC4KLSAgICAgICAgLy8gSXQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYSBjb3JydXB0IHJlZ3Vs
YXIgdmFyaWFudC4KLSAgICAgICAgTlNTdHJpbmcgKmZhbGxiYWNrRm9udEZhbWlseTsKLSAgICAg
ICAgaWYgKFtbbV9wbGF0Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV0gaXNFcXVhbDpAIlRp
bWVzIl0pCi0gICAgICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSBAIlRpbWVzIE5ldyBSb21h
biI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9IHdlYkZh
bGxiYWNrRm9udEZhbWlseSgpOwotICAgICAgICAKLSAgICAgICAgLy8gVHJ5IHNldHRpbmcgdXAg
dGhlIGFsdGVybmF0ZSBmb250LgotICAgICAgICAvLyBUaGlzIGlzIGEgbGFzdCBkaXRjaCBlZmZv
cnQgdG8gdXNlIGEgc3Vic3RpdHV0ZSBmb250IHdoZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25n
LgotI2lmICFFUlJPUl9ESVNBQkxFRAotICAgICAgICBSZXRhaW5QdHI8TlNGb250PiBpbml0aWFs
Rm9udCA9IG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOwotI2VuZGlmCi0gICAgICAgIGlmIChtX3Bs
YXRmb3JtRGF0YS5mb250KCkpCi0gICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQo
W1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3Jt
RGF0YS5uc0ZvbnQoKSB0b0ZhbWlseTpmYWxsYmFja0ZvbnRGYW1pbHldKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtOU0ZvbnQgZm9udFdpdGhO
YW1lOmZhbGxiYWNrRm9udEZhbWlseSBzaXplOm1fcGxhdGZvcm1EYXRhLnNpemUoKV0pOwotICAg
ICAgICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkgewotICAgICAgICAgICAgaWYgKFtmYWxsYmFj
a0ZvbnRGYW1pbHkgaXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gT0ssIGNvdWxkbid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGUg
dG8gVGltZXMsIGZhbGxiYWNrCi0gICAgICAgICAgICAgICAgLy8gb24gdGhlIHN5c3RlbSBmb250
LiAgSWYgdGhpcyBmYWlscyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxlZnQuCi0gICAgICAgICAg
ICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250
TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6d2Vi
RmFsbGJhY2tGb250RmFtaWx5KCldKTsKLSAgICAgICAgICAgICAgICBpZiAoIWluaXRGb250RGF0
YSh0aGlzKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCwgVGltZXMsIFRpbWVz
IE5ldyBSb21hbiwgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUg
dXAuCi0gICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUg
d2l0aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBm
YWlsZWRTZXR1cCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRo
ZSBzeXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCi0gICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFs
Rm9udC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVwb3J0IHRoZSBwcm9ibGVtLgotICAg
ICAgICBMT0dfRVJST1IoIkNvcnJ1cHQgZm9udCBkZXRlY3RlZCwgdXNpbmcgJUAgaW4gcGxhY2Ug
b2YgJUAuIiwKLSAgICAgICAgICAgIFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1l
XSwgW2luaXRpYWxGb250LmdldCgpIGZhbWlseU5hbWVdKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBh
bGwgZWxzZSBmYWlscywgdHJ5IHRvIHNldCB1cCB1c2luZyB0aGUgc3lzdGVtIGZvbnQuCi0gICAg
Ly8gVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9tYW4gYXJl
IGJvdGggdW5hdmFpbGFibGUuCi0gICAgaWYgKGZhaWxlZFNldHVwKSB7Ci0gICAgICAgIG1fcGxh
dGZvcm1EYXRhLnNldE5TRm9udChbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W21fcGxhdGZvcm1E
YXRhLm5zRm9udCgpIHBvaW50U2l6ZV1dKTsKLSAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8g
c2V0IHVwIGZvbnQsIHVzaW5nIHN5c3RlbSBmb250ICVzIiwgbV9wbGF0Zm9ybURhdGEuZm9udCgp
KTsKLSAgICAgICAgaW5pdEZvbnREYXRhKHRoaXMpOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICAvLyBXb3JrIGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vMTk0MzM0OTA+Ci0gICAgQ0dH
bHlwaCBkdW1teUdseXBoc1tdID0gezAsIDB9OwotICAgIENHU2l6ZSBkdW1teVNpemVbXSA9IHtD
R1NpemVNYWtlKDAsIDApLCBDR1NpemVNYWtlKDAsIDApfTsKLSAgICBDVEZvbnRUcmFuc2Zvcm1H
bHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGR1bW15R2x5cGhzLCBkdW1teVNpemUsIDIs
IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIHwga0NURm9udFRyYW5zZm9ybUFwcGx5
U2hhcGluZyk7Ci0jZW5kaWYKLSAgICAKLSAgICBpbnQgaUFzY2VudDsKLSAgICBpbnQgaURlc2Nl
bnQ7Ci0gICAgaW50IGlDYXBIZWlnaHQ7Ci0gICAgaW50IGlMaW5lR2FwOwotICAgIHVuc2lnbmVk
IHVuaXRzUGVyRW07Ci0gICAgaUFzY2VudCA9IENHRm9udEdldEFzY2VudChtX3BsYXRmb3JtRGF0
YS5jZ0ZvbnQoKSk7Ci0gICAgLy8gU29tZSBmb250cyBlcnJvbmVvdXNseSBzcGVjaWZ5IGEgcG9z
aXRpdmUgZGVzY2VuZGVyIHZhbHVlLiBXZSBmb2xsb3cgQ29yZSBUZXh0IGluIGFzc3VtaW5nIHRo
YXQKLSAgICAvLyBzdWNoIGZvbnRzIG1lYW50IHRoZSBzYW1lIGRpc3RhbmNlLCBidXQgaW4gdGhl
IHJldmVyc2UgZGlyZWN0aW9uLgotICAgIGlEZXNjZW50ID0gLWFicyhDR0ZvbnRHZXREZXNjZW50
KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSk7Ci0gICAgaUNhcEhlaWdodCA9IENHRm9udEdldENh
cEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7Ci0gICAgaUxpbmVHYXAgPSBDR0ZvbnRH
ZXRMZWFkaW5nKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKTsKLSAgICB1bml0c1BlckVtID0gQ0dG
b250R2V0VW5pdHNQZXJFbShtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7Ci0KLSAgICBmbG9hdCBw
b2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5tX3NpemU7Ci0gICAgZmxvYXQgYXNjZW50ID0gc2Nh
bGVFbVRvVW5pdHMoaUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgZmxvYXQg
ZGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNp
emU7Ci0gICAgZmxvYXQgY2FwSGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoaUNhcEhlaWdodCwgdW5p
dHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgCi0gICAgZmxvYXQgbGluZUdhcCA9IHNjYWxlRW1U
b1VuaXRzKGlMaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLQotICAgIC8vIFdlIG5l
ZWQgdG8gYWRqdXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0
Y2ggdGhlCi0gICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRl
cnBhcnRzIHRoYXQgYXJlIHRoZSBkZSBmYWN0bwotICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFw
cEtpdCBhZGp1c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcwotICAgIC8vIGluY29ycmVj
dGx5IGFkZGVkIHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5z
dGVhZAotICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KLSAgICBOU1N0cmluZyAqZmFt
aWx5TmFtZSA9IFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXTsKLSAgICBpZiAo
W2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiVGltZXMiXSB8fCBbZmFtaWx5TmFtZSBpc0Vx
dWFsVG9TdHJpbmc6QCJIZWx2ZXRpY2EiXSB8fCBbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6
QCJDb3VyaWVyIl0pCi0gICAgICAgIGFzY2VudCArPSBmbG9vcmYoKChhc2NlbnQgKyBkZXNjZW50
KSAqIDAuMTVmKSArIDAuNWYpOwotCi0gICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgbGluZSBzcGFj
aW5nLCBiZWZvcmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBhcmUgYXBwbGllZC4KLSAgICBtX2Zv
bnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYoZGVzY2Vu
dCkgKyBscm91bmRmKGxpbmVHYXApKTsKLQotICAgIC8vIEhhY2sgSGlyYWdpbm8gbGluZSBtZXRy
aWNzIHRvIGFsbG93IHJvb20gZm9yIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMuCi0gICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzUzODYxODM+Ci0gICAgaWYgKGRlc2NlbnQgPCAzICYmIGxpbmVHYXAgPj0g
MyAmJiBbZmFtaWx5TmFtZSBoYXNQcmVmaXg6QCJIaXJhZ2lubyJdKSB7Ci0gICAgICAgIGxpbmVH
YXAgLT0gMyAtIGRlc2NlbnQ7Ci0gICAgICAgIGRlc2NlbnQgPSAzOwotICAgIH0KLSAgICAKLSAg
ICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaygpKQotICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9u
dEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKLQotICAgIGZsb2F0
IHhIZWlnaHQ7Ci0KLSAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jp
em9udGFsKSB7Ci0gICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBz
aW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJhc2VsaW5lLCBh
bmQgd2UgbmVlZCB0aGUKLSAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8gb25seSBpbmNs
dWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBiYXNlbGluZS4K
LSAgICAgICAgTlNHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNoYXJhY3RlcigneCcpOwotICAgICAg
ICBpZiAoeEdseXBoKQotICAgICAgICAgICAgeEhlaWdodCA9IC1DR1JlY3RHZXRNaW5ZKHBsYXRm
b3JtQm91bmRzRm9yR2x5cGgoeEdseXBoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHhI
ZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmNn
Rm9udCgpKSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgfSBlbHNlCi0gICAgICAgIHhI
ZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCktPmZvbnRNZXRyaWNzKCkueEhl
aWdodCgpOwotCi0gICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOwot
ICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5z
ZXREZXNjZW50KGRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGNhcEhl
aWdodCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwotICAgIG1fZm9u
dE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKLX0KLQotc3RhdGljIENGRGF0YVJlZiBjb3B5
Rm9udFRhYmxlRm9yVGFnKEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgRm91ckNoYXJD
b2RlIHRhYmxlTmFtZSkKLXsKLSAgICByZXR1cm4gQ0dGb250Q29weVRhYmxlRm9yVGFnKHBsYXRm
b3JtRGF0YS5jZ0ZvbnQoKSwgdGFibGVOYW1lKTsKLX0KLQotdm9pZCBGb250OjpwbGF0Zm9ybUNo
YXJXaWR0aEluaXQoKQotewotICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKLSAgICBtX21heENoYXJX
aWR0aCA9IDA7Ci0gICAgCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gb3MyVGFibGUgPSBhZG9w
dENGKGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdPUy8yJykpOwotICAgIGlm
IChvczJUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgob3MyVGFibGUuZ2V0KCkpID49IDQpIHsKLSAg
ICAgICAgY29uc3QgVUludDgqIG9zMiA9IENGRGF0YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkp
OwotICAgICAgICBTSW50MTYgb3MyQXZnQ2hhcldpZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNd
OwotICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0
aCwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEubV9zaXplOwot
ICAgIH0KLQotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGhlYWRUYWJsZSA9IGFkb3B0Q0YoY29w
eUZvbnRUYWJsZUZvclRhZyhtX3BsYXRmb3JtRGF0YSwgJ2hlYWQnKSk7Ci0gICAgaWYgKGhlYWRU
YWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+PSA0MikgewotICAgICAg
ICBjb25zdCBVSW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgpKTsK
LSAgICAgICAgdXNob3J0IHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKLSAgICAg
ICAgdXNob3J0IHV4TWF4ID0gaGVhZFs0MF0gKiAyNTYgKyBoZWFkWzQxXTsKLSAgICAgICAgU0lu
dDE2IHhNaW4gPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKLSAgICAgICAgU0ludDE2IHhN
YXggPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKLSAgICAgICAgZmxvYXQgZGlmZiA9IHN0
YXRpY19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7Ci0gICAgICAgIG1fbWF4Q2hhcldpZHRoID0g
c2NhbGVFbVRvVW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0
Zm9ybURhdGEubV9zaXplOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxh
dGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkg
YXJlIG5vbi1wb3NpdGl2ZS4KLSAgICBpbml0Q2hhcldpZHRocygpOwotfQotI2VuZGlmIC8vIFVT
RShBUFBLSVQpCi0KLXZvaWQgRm9udDo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLX0KLQotI2lmICFQ
TEFURk9STShJT1MpCi1QYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVk
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKLXsK
LSAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2Fs
ZWRGb250RGF0YShtX3BsYXRmb3JtRGF0YSk7Ci0gICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6
ZSA9IHNjYWxlZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOwotICAgICAgICByZXR1cm4g
Rm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3Jt
RGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKLSAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZv
bnREYXRhKFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9w
bGF0Zm9ybURhdGEubnNGb250KCkgdG9TaXplOnNpemVdLCBzaXplLCBmYWxzZSwgZmFsc2UsIG1f
cGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkpOwotCi0gICAgLy8gQXBwS2l0IHJlc2V0cyB0aGUg
dHlwZSBpbmZvcm1hdGlvbiAoc2NyZWVuL3ByaW50ZXIpIHdoZW4geW91IGNvbnZlcnQgYSBmb250
IHRvIGEgZGlmZmVyZW50IHNpemUuCi0gICAgLy8gV2UgaGF2ZSB0byBmaXggdXAgdGhlIGZvbnQg
dGhhdCB3ZSdyZSBoYW5kZWQgYmFjay4KLSAgICBzY2FsZWRGb250RGF0YS5zZXROU0ZvbnQoW3Nj
YWxlZEZvbnREYXRhLm5zRm9udCgpIHByaW50ZXJGb250XSk7Ci0KLSAgICBpZiAoc2NhbGVkRm9u
dERhdGEuZm9udCgpKSB7Ci0gICAgICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05T
Rm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotICAgICAgICBOU0ZvbnRUcmFpdE1hc2sg
Zm9udFRyYWl0cyA9IFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6bV9wbGF0Zm9ybURhdGEubnNG
b250KCldOwotCi0gICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQpCi0g
ICAgICAgICAgICBmb250VHJhaXRzIHw9IE5TQm9sZEZvbnRNYXNrOwotICAgICAgICBpZiAobV9w
bGF0Zm9ybURhdGEubV9zeW50aGV0aWNPYmxpcXVlKQotICAgICAgICAgICAgZm9udFRyYWl0cyB8
PSBOU0l0YWxpY0ZvbnRNYXNrOwotCi0gICAgICAgIE5TRm9udFRyYWl0TWFzayBzY2FsZWRGb250
VHJhaXRzID0gW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpzY2FsZWRGb250RGF0YS5uc0ZvbnQo
KV07Ci0gICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRz
ICYgTlNCb2xkRm9udE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNr
KTsKLSAgICAgICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFp
dHMgJiBOU0l0YWxpY0ZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBOU0l0YWxpY0Zv
bnRNYXNrKTsKLQotICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0
YShzY2FsZWRGb250RGF0YSk7Ci0gICAgfQotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCi17Ci0g
ICAgTlNGb250KiBmID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7Ci0gICAgLy8gU3BlY2lhbCBj
YXNlIE9zYWthLU1vbm8uCi0gICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8zOTk5
NDY3Piwgd2Ugc2hvdWxkIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCi0gICAgLy8g
Tm90ZSB0aGF0IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4ZWQg
cGl0Y2guCi0KLSAgICAvLyBTcGVjaWFsIGNhc2UgTVMtUEdvdGhpYy4KLSAgICAvLyBBY2NvcmRp
bmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzQwMzI5Mzg+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1TLVBH
b3RoaWMgYXMgZml4ZWQgcGl0Y2guCi0gICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9y
dCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNoLgotCi0gICAgLy8gU3BlY2lhbCBjYXNlIE1vbm90
eXBlQ29yc2l2YQotICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcwND4s
IHdlIHNob3VsZCBub3QgdHJlYXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgotICAg
IC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVk
IHBpdGNoLgotCi0gICAgTlNTdHJpbmcgKm5hbWUgPSBbZiBmb250TmFtZV07Ci0gICAgbV90cmVh
dEFzRml4ZWRQaXRjaCA9IChbZiBpc0ZpeGVkUGl0Y2hdIHx8IFtmIF9pc0Zha2VGaXhlZFBpdGNo
XSB8fAotICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiT3Nha2EtTW9u
byJdID09IE5TT3JkZXJlZFNhbWUpICYmCi0gICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2
ZUNvbXBhcmU6QCJNUy1QR290aGljIl0gIT0gTlNPcmRlcmVkU2FtZSAmJgotICAgICAgICAgICBb
bmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTW9ub3R5cGVDb3JzaXZhIl0gIT0gTlNPcmRl
cmVkU2FtZTsKLX0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQotCi1GbG9hdFJlY3QgRm9udDo6
cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBGbG9hdFJl
Y3QgYm91bmRpbmdCb3g7Ci0gICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3Rz
Rm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRh
dGlvbigpID09IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24gOiBrQ1RGb250
SG9yaXpvbnRhbE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOwotICAgIGJvdW5kaW5nQm94LnNl
dFkoLWJvdW5kaW5nQm94Lm1heFkoKSk7Ci0gICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkK
LSAgICAgICAgYm91bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3lu
dGhldGljQm9sZE9mZnNldCk7Ci0KLSAgICByZXR1cm4gYm91bmRpbmdCb3g7Ci19Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi1pbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyaW5n
U3R5bGUoKSBjb25zdAotewotICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9u
dFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4
ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9u
OwotICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOwotICAgIGlmIChm
b250KSB7Ci0gICAgICAgIHN3aXRjaCAoW2ZvbnQgcmVuZGVyaW5nTW9kZV0pIHsKLSAgICAgICAg
Y2FzZSBOU0ZvbnRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZToKLSAgICAgICAgICAg
IHN0eWxlID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5TRm9udEFudGlh
bGlhc2VkSW50ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6Ci0gICAgICAgICAgICBzdHls
ZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIHN0eWxlOwotfQotCi1pbmxpbmUgYm9vbCBGb250OjphZHZhbmNlRm9yQ29s
b3JCaXRtYXBGb250KEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UpIGNvbnN0Ci17Ci0gICAg
TlNGb250ICpmb250ID0gcGxhdGZvcm1EYXRhKCkubnNGb250KCk7Ci0gICAgaWYgKCFmb250IHx8
ICFwbGF0Zm9ybURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgYWR2YW5jZSA9IE5TU2l6ZVRvQ0dTaXplKFtmb250IGFkdmFuY2VtZW50Rm9yR2x5
cGg6Z2x5cGhdKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgYm9vbCBo
YXNDdXN0b21UcmFja2luZyhDVEZvbnRSZWYgZm9udCkKLXsKLSNpZiBQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCi0gICAgVU5VU0VEX1BBUkFN
KGZvbnQpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCi0gICAgcmV0dXJuIENURm9udERlc2Ny
aXB0b3JJc1N5c3RlbVVJRm9udChhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihmb250
KSkuZ2V0KCkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0Vtb2ppKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKLXsKLSNpZiBQTEFURk9STShJT1MpCi0g
ICAgcmV0dXJuIHBsYXRmb3JtRGF0YS5tX2lzRW1vamk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShwbGF0Zm9ybURhdGEpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1pbmxpbmUg
Ym9vbCBGb250OjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1Np
emUmIGFkdmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0Ci17Ci0gICAgLy8gRmFz
dCBnZXR0ZXIgZG9lc24ndCB0YWtlIGN1c3RvbSB0cmFja2luZyBpbnRvIGFjY291bnQKLSAgICBp
ZiAoaGFzQ3VzdG9tVHJhY2tpbmcocGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgLy8gRmFzdCBnZXR0ZXIgZG9lc24ndCB3b3JrIGZvciBlbW9qaQot
ICAgIGlmIChpc0Vtb2ppKHBsYXRmb3JtRGF0YSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIC8vIC4uLiBvciBmb3IgYW55IGJpdG1hcCBmb250cyBpbiBnZW5lcmFsCi0gICAgaWYgKGFk
dmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoZ2x5cGgsIGFkdmFuY2UpKSB7Ci0gICAgICAgIHBvcHVs
YXRlZEFkdmFuY2UgPSB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1mbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0Ci17Ci0gICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOwotICAgIGJv
b2wgaG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRh
bDsKLSAgICBib29sIHBvcHVsYXRlZEFkdmFuY2UgPSBmYWxzZTsKLSAgICBpZiAoKGhvcml6b250
YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKSAmJiBjYW5Vc2VGYXN0R2x5cGhBZHZh
bmNlR2V0dGVyKGdseXBoLCBhZHZhbmNlLCBwb3B1bGF0ZWRBZHZhbmNlKSkgewotICAgICAgICBm
bG9hdCBwb2ludFNpemUgPSBwbGF0Zm9ybURhdGEoKS5tX3NpemU7Ci0gICAgICAgIENHQWZmaW5l
VHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShwb2ludFNpemUsIHBvaW50
U2l6ZSk7Ci0gICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRm
b3JtRGF0YSgpLmNnRm9udCgpLCAmbSwgcmVuZGVyaW5nU3R5bGUoKSwgJmdseXBoLCAxLCAmYWR2
YW5jZSkpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBh
ZG9wdENGKENHRm9udENvcHlGdWxsTmFtZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkpOwotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUgZ2x5cGggd2lkdGhzIGZvciAlQCAl
ZiIsIGZ1bGxOYW1lLmdldCgpLCBwb2ludFNpemUpOwotICAgICAgICAgICAgYWR2YW5jZS53aWR0
aCA9IDA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFwb3B1bGF0ZWRBZHZhbmNlKQotICAg
ICAgICBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
aG9yaXpvbnRhbCA/IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24gOiBrQ1RGb250VmVydGlj
YWxPcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5jZSwgMSk7Ci0KLSAgICByZXR1cm4gYWR2YW5j
ZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLX0KLQotc3RydWN0IFByb3ZpZGVySW5m
byB7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnM7Ci0gICAgc2l6ZV90IGxlbmd0aDsKLSAg
ICBDRkRpY3Rpb25hcnlSZWYgYXR0cmlidXRlczsKLX07Ci0KLXN0YXRpYyBjb25zdCBVbmlDaGFy
KiBwcm92aWRlU3RyaW5nQW5kQXR0cmlidXRlcyhDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4
KiBjb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiBjb250ZXh0KQotewot
ICAgIFByb3ZpZGVySW5mbyogaW5mbyA9IHN0YXRpY19jYXN0PHN0cnVjdCBQcm92aWRlckluZm8q
Pihjb250ZXh0KTsKLSAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8IHN0YXRpY19jYXN0PHNpemVf
dD4oc3RyaW5nSW5kZXgpID49IGluZm8tPmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICAqY291bnQgPSBpbmZvLT5sZW5ndGggLSBzdHJpbmdJbmRleDsKLSAgICAqYXR0cmlidXRlcyA9
IGluZm8tPmF0dHJpYnV0ZXM7Ci0gICAgcmV0dXJuIGluZm8tPmNoYXJhY3RlcnMgKyBzdHJpbmdJ
bmRleDsKLX0KLQotYm9vbCBGb250OjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKLXsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFtX2NvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlU3VwcG9ydCkKLSAgICAgICAgbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBv
cnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hNYXA8U3RyaW5nLCBib29sPj4oKTsKLQotICAgIFdU
Rjo6SGFzaE1hcDxTdHJpbmcsIGJvb2w+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb21iaW5p
bmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQtPmFkZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3Ro
KSwgZmFsc2UpOwotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVy
biBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgUmV0YWluUHRyPENGVHlwZVJlZj4g
Zm9udEVxdWFsaXR5T2JqZWN0ID0gcGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVj
aygpOwotCi0gICAgUHJvdmlkZXJJbmZvIGluZm8gPSB7IGNoYXJhY3RlcnMsIGxlbmd0aCwgZ2V0
Q0ZTdHJpbmdBdHRyaWJ1dGVzKDAsIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkpIH07Ci0g
ICAgUmV0YWluUHRyPENUTGluZVJlZj4gbGluZSA9IGFkb3B0Q0YoQ1RMaW5lQ3JlYXRlV2l0aFVu
aUNoYXJQcm92aWRlcigmcHJvdmlkZVN0cmluZ0FuZEF0dHJpYnV0ZXMsIDAsICZpbmZvKSk7Ci0K
LSAgICBDRkFycmF5UmVmIHJ1bkFycmF5ID0gQ1RMaW5lR2V0R2x5cGhSdW5zKGxpbmUuZ2V0KCkp
OwotICAgIENGSW5kZXggcnVuQ291bnQgPSBDRkFycmF5R2V0Q291bnQocnVuQXJyYXkpOwotCi0g
ICAgZm9yIChDRkluZGV4IHIgPSAwOyByIDwgcnVuQ291bnQ7IHIrKykgewotICAgICAgICBDVFJ1
blJlZiBjdFJ1biA9IHN0YXRpY19jYXN0PENUUnVuUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4
KHJ1bkFycmF5LCByKSk7Ci0gICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChjdFJ1bikgPT0gQ1RS
dW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBydW5BdHRyaWJ1dGVzID0g
Q1RSdW5HZXRBdHRyaWJ1dGVzKGN0UnVuKTsKLSAgICAgICAgQ1RGb250UmVmIHJ1bkZvbnQgPSBz
dGF0aWNfY2FzdDxDVEZvbnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJpYnV0ZXMs
IGtDVEZvbnRBdHRyaWJ1dGVOYW1lKSk7Ci0gICAgICAgIGlmICghQ0ZFcXVhbChmb250RXF1YWxp
dHlPYmplY3QuZ2V0KCksIEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2so
cnVuRm9udCkuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245753</attachid>
            <date>2015-01-30 16:20:38 -0800</date>
            <delta_ts>2015-01-30 16:22:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141101-20150130162045.patch</filename>
            <type>text/plain</type>
            <size>81227</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3OTQyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE1LTAxLTMwICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWVyZ2UgU2ltcGxlRm9udERhdGFJT1Mu
bW0gYW5kIFNpbXBsZUZvbnREYXRhTWFjLm1tIGludG8gRm9udENvY29hLm1tCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDExMDEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlIFNpbXBsZUZvbnREYXRhSU9TLm1tIGFu
ZCBTaW1wbGVGb250RGF0YU1hYy5tbS4gQWRkIEZvbnRDb2NvYS5tbS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgUmVtb3ZlIGEgZmV3IENHIG9ubHkgZnVu
Y3Rpb25zIGZyb20gdGhlIGhlYWRlciB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBzdGF0aWMg
ZnVuY3Rpb25zCisgICAgICAgIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxlLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0uCisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxh
dGZvcm1DcmVhdGVTY2FsZWRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRldGVybWlu
ZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmluZ1N0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6aGFz
Q3VzdG9tVHJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuVXNlRmFzdEdseXBoQWR2YW5j
ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29weUZvbnRUYWJsZUZvclRhZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250OjpyZW5kZXJpbmdTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIE1lcmdl
IGluIHRoZSBpT1Mgc3BlY2lmaWMgcGFydHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOiBSZW1vdmVkLgorCiAyMDE1LTAxLTMw
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIE1lbW9y
eUNhY2hlIGNvZGUgdG8gdXNlIG1vcmUgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzk0MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzOTYsNyArMTM5Niw2IEBACiAJ
CTM3RERDREE3MTM4NDUwMUMwMDA4Qjc5MyAvKiBNSFRNTFBhcnNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdERENEQTMxMzg0NTAxQzAwMDhCNzkz
IC8qIE1IVE1MUGFyc2VyLmggKi87IH07CiAJCTM3RTM1MjRCMTI0NTBDNTIwMEJBRjVEOSAvKiBJ
bnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzdFMzUyNEExMjQ1MEM1MjAwQkFGNUQ5IC8qIElucHV0VHlwZS5jcHAgKi87IH07CiAJCTM3
RTM1MjREMTI0NTBDNjYwMEJBRjVEOSAvKiBJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RTM1MjRDMTI0NTBDNjYwMEJBRjVEOSAvKiBJ
bnB1dFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkzN0U2NTk1MDE2M0IxMEMyMDBFQjQ1NzQgLyogU2ltcGxlRm9udERhdGFJT1MubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0U2NTk0RjE2M0Ix
MEMyMDBFQjQ1NzQgLyogU2ltcGxlRm9udERhdGFJT1MubW0gKi87IH07CiAJCTM3RjU2N0NFMTY1
MzU4RjQwMERERTkyQiAvKiBQb3B1cE9wZW5pbmdPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8q
IFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMzdGNTdBQjkxQTUwNzI2OTAwODc2Rjk4IC8qIEFjY2Vzc2liaWxp
dHlBUklBR3JpZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyOTgxQ0E5RDEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNw
cCAqLzsgfTsKIAkJMzdGNTdBQkExQTUwNzI2RjAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlBUklB
R3JpZENlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjk4MUNBOUUxMzE4MjJFQzAwRDEyRjJBIC8qIEFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwu
Y3BwICovOyB9OwpAQCAtMjQ3NSw2ICsyNDc0LDcgQEAKIAkJN0M0OEE2RDAxOTFDOUQ2NTAwMDI2
Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzQ4QTZDRTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNw
YWNlLmNwcCAqLzsgfTsKIAkJN0M0OEE2RDExOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVz
cGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0
OEE2Q0YxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5oICovOyB9OwogCQk3QzQ5
MDJBMjE4QjgyNUY4MDA3RDkyOTggLyogRE9NV2hlZWxFdmVudEludGVybmFsLmggaW4gQ29weSBH
ZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTk4
OURDQTBBQ0M4QkJEMDBBMEJDNTEgLyogRE9NV2hlZWxFdmVudEludGVybmFsLmggKi87IH07CisJ
CTdDNEVERDc0MUE3QjYwNzgwMDE5OEM0RCAvKiBGb250Q29jb2EubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQg
LyogRm9udENvY29hLm1tICovOyB9OwogCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5z
cGVjdG9yT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5jcHAg
Ki87IH07CiAJCTdDNTM0M0ZDMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0M1MzQzRkExN0I3NEI2MzAwNDIzMkYwIC8qIEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAg
Ki87IH07CiAJCTdDNTM0M0ZEMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
NTM0M0ZCMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCAqLzsg
fTsKQEAgLTQ2ODcsNyArNDY4Nyw2IEBACiAJCUIyQUZGQzdDMEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250Q2FjaGVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkFGRkM3NDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhY2hlTWFjLm1tICovOyB9Owog
CQlCMkFGRkM3RDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM3NTBE
MDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi87IH07CiAJCUIy
QUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM3NjBEMDBBNUMx
MDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oICovOyB9OwotCQlCMkFGRkM3RjBE
MDBBNUMxMDAzMDA3NEQgLyogU2ltcGxlRm9udERhdGFNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM3NzBEMDBBNUMxMDAzMDA3NEQgLyog
U2ltcGxlRm9udERhdGFNYWMubW0gKi87IH07CiAJCUIyQUZGQzgwMEQwMEE1QzEwMDMwMDc0RCAv
KiBGb250Q2FzY2FkZUNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29jb2Eu
bW0gKi87IH07CiAJCUIyQUZGQzgzMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VNYWMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBRkZDN0Iw
RDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi87IH07CiAJCUIyQUZGQzk3MEQw
MEE1REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQUZGQzhDMEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0
Qm91bmRhcmllcy5tbSAqLzsgfTsKQEAgLTg0NjUsNyArODQ2NCw2IEBACiAJCTM3RERDREEzMTM4
NDUwMUMwMDA4Qjc5MyAvKiBNSFRNTFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNSFRNTFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0Uz
NTI0QTEyNDUwQzUyMDBCQUY1RDkgLyogSW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3RTM1MjRDMTI0NTBDNjYwMEJBRjVEOSAvKiBJbnB1dFR5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRh
SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0Y4MThGQjBENjU3NjA2MDA1
RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFGQUQg
LyogVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTY1OSw2ICs5NjU3LDcgQEAKIAkJN0M0OEE2Q0UxOTFDOUQ2NTAwMDI2
Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJLaXROYW1lc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzQ4QTZDRjE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdE5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzQ4QTZEMjE5MUM5RDhFMDAwMjY2NzQgLyogV2ViS2l0TmFtZXNw
YWNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBXZWJLaXROYW1lc3BhY2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENvY29hLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9y
T3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0
b3JPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M1MjJENEExNUI0
NzhCMjAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzUzNDNGQTE3Qjc0QjYzMDA0MjMyRjAgLyogSlNNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjA5MCw3ICsx
MjA4OSw2IEBACiAJCUIyQUZGQzc0MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q2FjaGVNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhY2hlTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkFGRkM3NTBEMDBBNUMxMDAzMDA3NEQg
LyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQUZGQzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQUZGQzc3MEQwMEE1
QzEwMDMwMDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBTaW1wbGVGb250RGF0YU1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2Nh
ZGVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDN0IwRDAwQTVD
MTAwMzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR2x5cGhQYWdlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJBRkZDODUwRDAwQTVERjAwMzAwNzREIC8qIGNoYXJhY3Rlci1zZXRzLnR4dCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gImNoYXJhY3Rlci1zZXRzLnR4dCI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNTczNCw3ICsxNTczMiw2IEBACiAJCQkJQzU4MzYxQTgxNzQ0NTIzRjAw
MTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSAqLywKIAkJCQkzMUFCNEZGRjEyMjg3OEEyMDAx
QTdEQjAgLyogR3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLywKIAkJCQlGRUQxM0QzRjBDRUE5Mzk0
MDBEODk0NjYgLyogSWNvbklPUy5tbSAqLywKLQkJCQkzN0U2NTk0RjE2M0IxMEMyMDBFQjQ1NzQg
LyogU2ltcGxlRm9udERhdGFJT1MubW0gKi8sCiAJCQkJQ0VFQzYwMzQxODdERDk2MjAwM0U0M0JC
IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLmggKi8sCiAJCQkJQ0RDQTgyOTQxNjc5MTAw
RjAwODc1NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tICovLAogCQkJKTsKQEAg
LTIwNDY2LDcgKzIwNDYzLDYgQEAKIAkJCQlDRDYwQzBDNDE5M0U4N0M3MDAzQzY1NkIgLyogTWVk
aWFUaW1lUVRLaXQubW0gKi8sCiAJCQkJMkQ2RTQ2ODIxN0Q2NjBGNTAwRUNGOEJCIC8qIFBERkRv
Y3VtZW50SW1hZ2VNYWMubW0gKi8sCiAJCQkJMTYzRTg4RjUxMThBMzlEMjAwRUQ5MjMxIC8qIFNp
bXBsZUZvbnREYXRhQ29yZVRleHQuY3BwICovLAotCQkJCUIyQUZGQzc3MEQwMEE1QzEwMDMwMDc0
RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSAqLywKIAkJCQk0OUZGQkYzRDExQzkzRUUzMDA2QTcx
MTggLyogV2ViR0xMYXllci5oICovLAogCQkJCTQ5RkZCRjNFMTFDOTNFRTMwMDZBNzExOCAvKiBX
ZWJHTExheWVyLm1tICovLAogCQkJCTBGQ0YzMzJCMEYyQjlBMjUwMDRCNjc5NSAvKiBXZWJMYXll
ci5oICovLApAQCAtMjA3OTksNiArMjA3OTUsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVD
b2NvYS5tbSAqLywKKwkJCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1t
ICovLAogCQkJCUI1MzIwRDZBMTIyQTI0RTkwMDJEMTQ0MCAvKiBGb250UGxhdGZvcm1EYXRhQ29j
b2EubW0gKi8sCiAJCQkJMkQwQjRBQTkxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oICov
LAogCQkJCTJEMEI0QUFBMThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UubW0gKi8sCkBAIC0y
OTU0NSw4ICsyOTU0Miw2IEBACiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJl
ZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTYzRTg4RjcxMThBMzlEMjAwRUQ5MjMx
IC8qIFNpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzdFNjU5
NTAxNjNCMTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQjJBRkZDN0YwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRhTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTQ4OTQ0QTIxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVM
YXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRFOUIxMUIxODE0NTY5MjAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzVBMUVB
N0MxNTJCQ0YwNDAwNEQwMEI2IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI5NjMwLDYgKzI5NjI1LDcgQEAKIAkJCQlFNDcxMjdDQTE2MzQzOEExMDBFRDZG
NUEgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzVFQjcyOTBFODFERTgxMDBCMjU5NjUgLyogU3R5bGVNYXJxdWVlRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY1MDI3MTEwMkJBOTZBMDA2NkYzOUEgLyogU3R5bGVNZWRpYS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk3QzRFREQ3NDFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI3NEQwRTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVs
dGlDb2xEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2REZCMEExOTkwNjcwMDdGQjhD
NSAvKiBTdHlsZVByb3BlcnRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCMjUxMDYxNTJB
MEJBRjAwNjlCNzc5IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAx
Nzk0MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNiwxMiArMjM2LDYgQEAgcHJpdmF0ZToKICAgICBmbG9hdCB3aWR0aEZv
ckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRpZgogCi0jaWYgVVNFKENHKQotICAgIGJvb2wg
Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29s
JiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKLSAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5k
ZXJpbmdTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChH
bHlwaCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQg
aXMgYSBjb2xvciBiaXRtYXAgZm9udAotI2VuZGlmCi0KICAgICBGb250TWV0cmljcyBtX2ZvbnRN
ZXRyaWNzOwogICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOwogICAgIGZsb2F0IG1fYXZnQ2hhcldp
ZHRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDb2NvYS5tbQkocmV2aXNpb24gMTc5Mzg1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06MTc5Mzg1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiRm9udC5oIgorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNp
bXBvcnQgIkNvbG9yLmgiCisjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCisjaW1wb3J0ICJGbG9hdFJlY3QuaCIKKyNpbXBvcnQgIkZvbnRDYWNoZS5o
IgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKKyNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgor
I2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCisjaWYgVVNFKEFQUEtJVCkKKyNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KKyNpbXBvcnQg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbXBv
cnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKKyNpbXBvcnQgPGZsb2F0Lmg+CisjaW1w
b3J0IDx1bmljb2RlL3VjaGFyLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9y
dCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisjaWYg
IVBMQVRGT1JNKElPUykKK0BpbnRlcmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNyZXRBUEkpCist
IChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOworQGVuZAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmIFVTRShBUFBLSVQpCitzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlw
aHMoQ1RGb250UmVmIGN0Rm9udCkKK3sKKyAgICAvLyBUaGUgY2hlY2sgZG9lc24ndCBsb29rIG5l
YXQgYnV0IHRoaXMgaXMgd2hhdCBBcHBLaXQgZG9lcyBmb3IgdmVydGljYWwgd3JpdGluZy4uLgor
ICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlB
dmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAg
ICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOwor
ICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7
CisgICAgICAgIENURm9udFRhYmxlVGFnIHRhZyA9IChDVEZvbnRUYWJsZVRhZykodWludHB0cl90
KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCk7CisgICAgICAg
IGlmICh0YWcgPT0ga0NURm9udFRhYmxlVmhlYSB8fCB0YWcgPT0ga0NURm9udFRhYmxlVk9SRykK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3N0YXRpYyBib29sIGluaXRGb250RGF0YShGb250KiBmb250RGF0YSkKK3sKKyAgICBpZiAoIWZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250
RmFtaWx5KHZvaWQpCit7CisgICAgc3RhdGljIE5TU3RyaW5nICp3ZWJGYWxsYmFja0ZvbnRGYW1p
bHkgPSBbW1tOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxNi4wZl0gZmFtaWx5TmFtZV0gcmV0YWlu
XTsKKyAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250RmFtaWx5OworfQorCitjb25zdCBGb250KiBG
b250Ojpjb21wb3NpdGVGb250UmVmZXJlbmNlRm9udChOU0ZvbnQgKmtleSkgY29uc3QKK3sKKyAg
ICBpZiAoIWtleSB8fCBDRkVxdWFsKGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKENU
Rm9udFJlZihrZXkpKSkuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9t
Rm9udCgpKTsKKworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXJpdmVkRm9udERhdGEtPmNvbXBv
c2l0ZUZvbnRSZWZlcmVuY2VzLmFkZChrZXksIG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkgeworICAgICAgICBOU0ZvbnQgKnN1YnN0aXR1dGVGb250ID0gW2tleSBwcmlu
dGVyRm9udF07CisKKyAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gQ1RGb250
R2V0U3ltYm9saWNUcmFpdHMoKENURm9udFJlZilzdWJzdGl0dXRlRm9udCk7CisgICAgICAgIGJv
b2wgc3ludGhldGljQm9sZCA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY0JvbGQoKSAmJiAhKHRy
YWl0cyAmIGtDVEZvbnRCb2xkVHJhaXQpOworICAgICAgICBib29sIHN5bnRoZXRpY09ibGlxdWUg
PSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250
SXRhbGljVHJhaXQpOworCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc3Vic3RpdHV0ZVBsYXRm
b3JtKHN1YnN0aXR1dGVGb250LCBwbGF0Zm9ybURhdGEoKS5zaXplKCksIHN5bnRoZXRpY0JvbGQs
IHN5bnRoZXRpY09ibGlxdWUsIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCksIHBsYXRmb3Jt
RGF0YSgpLndpZHRoVmFyaWFudCgpKTsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IEZvbnQ6OmNyZWF0ZShzdWJzdGl0dXRlUGxhdGZvcm0sIGlzQ3VzdG9tRm9udCgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cit9CisKK3Zv
aWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBt
X3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyAxLjBmIDogMC5mOworCisgICAgYm9vbCBm
YWlsZWRTZXR1cCA9IGZhbHNlOworICAgIGlmICghaW5pdEZvbnREYXRhKHRoaXMpKSB7CisgICAg
ICAgIC8vIEFjayEgU29tZXRoaW5nIHZlcnkgYmFkIGhhcHBlbmVkLCBsaWtlIGEgY29ycnVwdCBm
b250LgorICAgICAgICAvLyBUcnkgbG9va2luZyBmb3IgYW4gYWx0ZXJuYXRlICdiYXNlJyBmb250
IGZvciB0aGlzIHJlbmRlcmVyLgorCisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBoYWNrIHRvIHVz
ZSAiVGltZXMgTmV3IFJvbWFuIiBpbiBwbGFjZSBvZiAiVGltZXMiLgorICAgICAgICAvLyAiVGlt
ZXMgUk8iIGlzIGEgY29tbW9uIGZvbnQgd2hvc2UgZmFtaWx5IG5hbWUgaXMgIlRpbWVzIi4KKyAg
ICAgICAgLy8gSXQgb3ZlcnJpZGVzIHRoZSBub3JtYWwgIlRpbWVzIiBmYW1pbHkgZm9udC4KKyAg
ICAgICAgLy8gSXQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYSBjb3JydXB0IHJlZ3VsYXIgdmFyaWFu
dC4KKyAgICAgICAgTlNTdHJpbmcgKmZhbGxiYWNrRm9udEZhbWlseTsKKyAgICAgICAgaWYgKFtb
bV9wbGF0Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV0gaXNFcXVhbDpAIlRpbWVzIl0pCisg
ICAgICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSBAIlRpbWVzIE5ldyBSb21hbiI7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9IHdlYkZhbGxiYWNrRm9u
dEZhbWlseSgpOworICAgICAgICAKKyAgICAgICAgLy8gVHJ5IHNldHRpbmcgdXAgdGhlIGFsdGVy
bmF0ZSBmb250LgorICAgICAgICAvLyBUaGlzIGlzIGEgbGFzdCBkaXRjaCBlZmZvcnQgdG8gdXNl
IGEgc3Vic3RpdHV0ZSBmb250IHdoZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25nLgorI2lmICFF
UlJPUl9ESVNBQkxFRAorICAgICAgICBSZXRhaW5QdHI8TlNGb250PiBpbml0aWFsRm9udCA9IG1f
cGxhdGZvcm1EYXRhLm5zRm9udCgpOworI2VuZGlmCisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0
YS5mb250KCkpCisgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW1tOU0ZvbnRN
YW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0Zv
bnQoKSB0b0ZhbWlseTpmYWxsYmFja0ZvbnRGYW1pbHldKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtOU0ZvbnQgZm9udFdpdGhOYW1lOmZhbGxi
YWNrRm9udEZhbWlseSBzaXplOm1fcGxhdGZvcm1EYXRhLnNpemUoKV0pOworICAgICAgICBpZiAo
IWluaXRGb250RGF0YSh0aGlzKSkgeworICAgICAgICAgICAgaWYgKFtmYWxsYmFja0ZvbnRGYW1p
bHkgaXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7CisgICAgICAgICAgICAgICAgLy8gT0ss
IGNvdWxkbid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGUgdG8gVGltZXMs
IGZhbGxiYWNrCisgICAgICAgICAgICAgICAgLy8gb24gdGhlIHN5c3RlbSBmb250LiAgSWYgdGhp
cyBmYWlscyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxlZnQuCisgICAgICAgICAgICAgICAgbV9w
bGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0g
Y29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6d2ViRmFsbGJhY2tG
b250RmFtaWx5KCldKTsKKyAgICAgICAgICAgICAgICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCwgVGltZXMsIFRpbWVzIE5ldyBSb21h
biwgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCisgICAg
ICAgICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250
ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBmYWlsZWRTZXR1
cCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRoZSBzeXN0ZW0g
Zm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCisgICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQo
KSk7CisgICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gUmVwb3J0IHRoZSBwcm9ibGVtLgorICAgICAgICBMT0df
RVJST1IoIkNvcnJ1cHQgZm9udCBkZXRlY3RlZCwgdXNpbmcgJUAgaW4gcGxhY2Ugb2YgJUAuIiwK
KyAgICAgICAgICAgIFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXSwgW2luaXRp
YWxGb250LmdldCgpIGZhbWlseU5hbWVdKTsKKyAgICB9CisKKyAgICAvLyBJZiBhbGwgZWxzZSBm
YWlscywgdHJ5IHRvIHNldCB1cCB1c2luZyB0aGUgc3lzdGVtIGZvbnQuCisgICAgLy8gVGhpcyBp
cyBwcm9iYWJseSBiZWNhdXNlIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9tYW4gYXJlIGJvdGggdW5h
dmFpbGFibGUuCisgICAgaWYgKGZhaWxlZFNldHVwKSB7CisgICAgICAgIG1fcGxhdGZvcm1EYXRh
LnNldE5TRm9udChbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W21fcGxhdGZvcm1EYXRhLm5zRm9u
dCgpIHBvaW50U2l6ZV1dKTsKKyAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHVwIGZv
bnQsIHVzaW5nIHN5c3RlbSBmb250ICVzIiwgbV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICAg
ICAgaW5pdEZvbnREYXRhKHRoaXMpOworICAgIH0KKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAv
LyBXb3JrIGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vMTk0MzM0OTA+CisgICAgQ0dHbHlwaCBkdW1t
eUdseXBoc1tdID0gezAsIDB9OworICAgIENHU2l6ZSBkdW1teVNpemVbXSA9IHtDR1NpemVNYWtl
KDAsIDApLCBDR1NpemVNYWtlKDAsIDApfTsKKyAgICBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9w
bGF0Zm9ybURhdGEuY3RGb250KCksIGR1bW15R2x5cGhzLCBkdW1teVNpemUsIDIsIGtDVEZvbnRU
cmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyk7
CisjZW5kaWYKKyAgICAKKyAgICBpbnQgaUFzY2VudDsKKyAgICBpbnQgaURlc2NlbnQ7CisgICAg
aW50IGlDYXBIZWlnaHQ7CisgICAgaW50IGlMaW5lR2FwOworICAgIHVuc2lnbmVkIHVuaXRzUGVy
RW07CisgICAgaUFzY2VudCA9IENHRm9udEdldEFzY2VudChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQo
KSk7CisgICAgLy8gU29tZSBmb250cyBlcnJvbmVvdXNseSBzcGVjaWZ5IGEgcG9zaXRpdmUgZGVz
Y2VuZGVyIHZhbHVlLiBXZSBmb2xsb3cgQ29yZSBUZXh0IGluIGFzc3VtaW5nIHRoYXQKKyAgICAv
LyBzdWNoIGZvbnRzIG1lYW50IHRoZSBzYW1lIGRpc3RhbmNlLCBidXQgaW4gdGhlIHJldmVyc2Ug
ZGlyZWN0aW9uLgorICAgIGlEZXNjZW50ID0gLWFicyhDR0ZvbnRHZXREZXNjZW50KG1fcGxhdGZv
cm1EYXRhLmNnRm9udCgpKSk7CisgICAgaUNhcEhlaWdodCA9IENHRm9udEdldENhcEhlaWdodCht
X3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisgICAgaUxpbmVHYXAgPSBDR0ZvbnRHZXRMZWFkaW5n
KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKTsKKyAgICB1bml0c1BlckVtID0gQ0dGb250R2V0VW5p
dHNQZXJFbShtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisKKyAgICBmbG9hdCBwb2ludFNpemUg
PSBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CisgICAgZmxvYXQgYXNjZW50ID0gc2NhbGVFbVRvVW5p
dHMoaUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxvYXQgZGVzY2VudCA9
IC1zY2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAg
ZmxvYXQgY2FwSGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoaUNhcEhlaWdodCwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemU7CisgICAgCisgICAgZmxvYXQgbGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKGlM
aW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKworICAgIC8vIFdlIG5lZWQgdG8gYWRq
dXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhlCisg
ICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRlcnBhcnRzIHRo
YXQgYXJlIHRoZSBkZSBmYWN0bworICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBhZGp1
c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcworICAgIC8vIGluY29ycmVjdGx5IGFkZGVk
IHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5zdGVhZAorICAg
IC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KKyAgICBOU1N0cmluZyAqZmFtaWx5TmFtZSA9
IFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXTsKKyAgICBpZiAoW2ZhbWlseU5h
bWUgaXNFcXVhbFRvU3RyaW5nOkAiVGltZXMiXSB8fCBbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJp
bmc6QCJIZWx2ZXRpY2EiXSB8fCBbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJDb3VyaWVy
Il0pCisgICAgICAgIGFzY2VudCArPSBmbG9vcmYoKChhc2NlbnQgKyBkZXNjZW50KSAqIDAuMTVm
KSArIDAuNWYpOworCisgICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgbGluZSBzcGFjaW5nLCBiZWZv
cmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBhcmUgYXBwbGllZC4KKyAgICBtX2ZvbnRNZXRyaWNz
LnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYoZGVzY2VudCkgKyBscm91
bmRmKGxpbmVHYXApKTsKKworICAgIC8vIEhhY2sgSGlyYWdpbm8gbGluZSBtZXRyaWNzIHRvIGFs
bG93IHJvb20gZm9yIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMuCisgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzUzODYxODM+CisgICAgaWYgKGRlc2NlbnQgPCAzICYmIGxpbmVHYXAgPj0gMyAmJiBbZmFt
aWx5TmFtZSBoYXNQcmVmaXg6QCJIaXJhZ2lubyJdKSB7CisgICAgICAgIGxpbmVHYXAgLT0gMyAt
IGRlc2NlbnQ7CisgICAgICAgIGRlc2NlbnQgPSAzOworICAgIH0KKyAgICAKKyAgICBpZiAocGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaygpKQorICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRp
Y2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKKworICAgIGZsb2F0IHhIZWlnaHQ7
CisKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsKSB7
CisgICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdz
IHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVl
ZCB0aGUKKyAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8gb25seSBpbmNsdWRlIHRoZSBw
b3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBiYXNlbGluZS4KKyAgICAgICAg
TlNHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNoYXJhY3RlcigneCcpOworICAgICAgICBpZiAoeEds
eXBoKQorICAgICAgICAgICAgeEhlaWdodCA9IC1DR1JlY3RHZXRNaW5ZKHBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgoeEdseXBoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHhIZWlnaHQgPSBz
Y2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSwg
dW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgfSBlbHNlCisgICAgICAgIHhIZWlnaHQgPSB2
ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCktPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOwor
CisgICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOworICAgIG1fZm9u
dE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50
KGRlc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7Cisg
ICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOworICAgIG1fZm9udE1ldHJpY3Mu
c2V0WEhlaWdodCh4SGVpZ2h0KTsKK30KKworc3RhdGljIENGRGF0YVJlZiBjb3B5Rm9udFRhYmxl
Rm9yVGFnKEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgRm91ckNoYXJDb2RlIHRhYmxl
TmFtZSkKK3sKKyAgICByZXR1cm4gQ0dGb250Q29weVRhYmxlRm9yVGFnKHBsYXRmb3JtRGF0YS5j
Z0ZvbnQoKSwgdGFibGVOYW1lKTsKK30KKwordm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aElu
aXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKKyAgICBtX21heENoYXJXaWR0aCA9IDA7
CisgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gb3MyVGFibGUgPSBhZG9wdENGKGNvcHlG
b250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdPUy8yJykpOworICAgIGlmIChvczJUYWJs
ZSAmJiBDRkRhdGFHZXRMZW5ndGgob3MyVGFibGUuZ2V0KCkpID49IDQpIHsKKyAgICAgICAgY29u
c3QgVUludDgqIG9zMiA9IENGRGF0YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkpOworICAgICAg
ICBTSW50MTYgb3MyQXZnQ2hhcldpZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNdOworICAgICAg
ICBtX2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwgbV9mb250
TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEubV9zaXplOworICAgIH0KKwor
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGhlYWRUYWJsZSA9IGFkb3B0Q0YoY29weUZvbnRUYWJs
ZUZvclRhZyhtX3BsYXRmb3JtRGF0YSwgJ2hlYWQnKSk7CisgICAgaWYgKGhlYWRUYWJsZSAmJiBD
RkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+PSA0MikgeworICAgICAgICBjb25zdCBV
SW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgpKTsKKyAgICAgICAg
dXNob3J0IHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKKyAgICAgICAgdXNob3J0
IHV4TWF4ID0gaGVhZFs0MF0gKiAyNTYgKyBoZWFkWzQxXTsKKyAgICAgICAgU0ludDE2IHhNaW4g
PSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKKyAgICAgICAgU0ludDE2IHhNYXggPSBzdGF0
aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKKyAgICAgICAgZmxvYXQgZGlmZiA9IHN0YXRpY19jYXN0
PGZsb2F0Pih4TWF4IC0geE1pbik7CisgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc2NhbGVFbVRv
VW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEu
bV9zaXplOworICAgIH0KKworICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0
aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1w
b3NpdGl2ZS4KKyAgICBpbml0Q2hhcldpZHRocygpOworfQorI2VuZGlmIC8vIFVTRShBUFBLSVQp
CisKK3ZvaWQgRm9udDo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKworI2lmICFQTEFURk9STShJ
T1MpCitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK3sKKyAgICBpZiAo
aXNDdXN0b21Gb250KCkpIHsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0
YShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxl
ZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOworICAgICAgICByZXR1cm4gRm9udDo6Y3Jl
YXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXpl
KCkgKiBzY2FsZUZhY3RvcjsKKyAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKFtb
TlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURh
dGEubnNGb250KCkgdG9TaXplOnNpemVdLCBzaXplLCBmYWxzZSwgZmFsc2UsIG1fcGxhdGZvcm1E
YXRhLm9yaWVudGF0aW9uKCkpOworCisgICAgLy8gQXBwS2l0IHJlc2V0cyB0aGUgdHlwZSBpbmZv
cm1hdGlvbiAoc2NyZWVuL3ByaW50ZXIpIHdoZW4geW91IGNvbnZlcnQgYSBmb250IHRvIGEgZGlm
ZmVyZW50IHNpemUuCisgICAgLy8gV2UgaGF2ZSB0byBmaXggdXAgdGhlIGZvbnQgdGhhdCB3ZSdy
ZSBoYW5kZWQgYmFjay4KKyAgICBzY2FsZWRGb250RGF0YS5zZXROU0ZvbnQoW3NjYWxlZEZvbnRE
YXRhLm5zRm9udCgpIHByaW50ZXJGb250XSk7CisKKyAgICBpZiAoc2NhbGVkRm9udERhdGEuZm9u
dCgpKSB7CisgICAgICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFn
ZXIgc2hhcmVkRm9udE1hbmFnZXJdOworICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgZm9udFRyYWl0
cyA9IFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCldOwor
CisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQpCisgICAgICAgICAg
ICBmb250VHJhaXRzIHw9IE5TQm9sZEZvbnRNYXNrOworICAgICAgICBpZiAobV9wbGF0Zm9ybURh
dGEubV9zeW50aGV0aWNPYmxpcXVlKQorICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBOU0l0YWxp
Y0ZvbnRNYXNrOworCisgICAgICAgIE5TRm9udFRyYWl0TWFzayBzY2FsZWRGb250VHJhaXRzID0g
W2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpzY2FsZWRGb250RGF0YS5uc0ZvbnQoKV07CisgICAg
ICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYgTlNCb2xk
Rm9udE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKTsKKyAgICAg
ICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBOU0l0
YWxpY0ZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKTsK
KworICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShzY2FsZWRG
b250RGF0YSk7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgTlNGb250
KiBmID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7CisgICAgLy8gU3BlY2lhbCBjYXNlIE9zYWth
LU1vbm8uCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8zOTk5NDY3Piwgd2Ug
c2hvdWxkIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0aGF0
IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCisK
KyAgICAvLyBTcGVjaWFsIGNhc2UgTVMtUEdvdGhpYy4KKyAgICAvLyBBY2NvcmRpbmcgdG8gPHJk
YXI6Ly9wcm9ibGVtLzQwMzI5Mzg+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1TLVBHb3RoaWMgYXMg
Zml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNUy1QR290
aGljIGFzIGZpeGVkIHBpdGNoLgorCisgICAgLy8gU3BlY2lhbCBjYXNlIE1vbm90eXBlQ29yc2l2
YQorICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcwND4sIHdlIHNob3Vs
ZCBub3QgdHJlYXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5vdGUg
dGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgor
CisgICAgTlNTdHJpbmcgKm5hbWUgPSBbZiBmb250TmFtZV07CisgICAgbV90cmVhdEFzRml4ZWRQ
aXRjaCA9IChbZiBpc0ZpeGVkUGl0Y2hdIHx8IFtmIF9pc0Zha2VGaXhlZFBpdGNoXSB8fAorICAg
ICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiT3Nha2EtTW9ubyJdID09IE5T
T3JkZXJlZFNhbWUpICYmCisgICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6
QCJNUy1QR290aGljIl0gIT0gTlNPcmRlcmVkU2FtZSAmJgorICAgICAgICAgICBbbmFtZSBjYXNl
SW5zZW5zaXRpdmVDb21wYXJlOkAiTW9ub3R5cGVDb3JzaXZhIl0gIT0gTlNPcmRlcmVkU2FtZTsK
K30KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCitGbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1C
b3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3g7CisgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhz
KG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24gOiBrQ1RGb250SG9yaXpvbnRh
bE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOworICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5k
aW5nQm94Lm1heFkoKSk7CisgICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAg
Ym91bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9s
ZE9mZnNldCk7CisKKyAgICByZXR1cm4gYm91bmRpbmdCb3g7Cit9CisKKyNpZiBQTEFURk9STShN
QUMpCitpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyaW5nU3R5bGUoKSBj
b25zdAoreworICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmlu
Z1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlv
bmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOworICAgIE5T
Rm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOworICAgIGlmIChmb250KSB7Cisg
ICAgICAgIHN3aXRjaCAoW2ZvbnQgcmVuZGVyaW5nTW9kZV0pIHsKKyAgICAgICAgY2FzZSBOU0Zv
bnRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZToKKyAgICAgICAgICAgIHN0eWxlID0g
MDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5TRm9udEFudGlhbGlhc2VkSW50
ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6CisgICAgICAgICAgICBzdHlsZSA9IGtDR0Zv
bnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHN0eWxlOworfQorCitpbmxpbmUgYm9vbCBGb250OjphZHZhbmNlRm9yQ29sb3JCaXRtYXBG
b250KEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UpIGNvbnN0Cit7CisgICAgTlNGb250ICpm
b250ID0gcGxhdGZvcm1EYXRhKCkubnNGb250KCk7CisgICAgaWYgKCFmb250IHx8ICFwbGF0Zm9y
bURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YWR2YW5jZSA9IE5TU2l6ZVRvQ0dTaXplKFtmb250IGFkdmFuY2VtZW50Rm9yR2x5cGg6Z2x5cGhd
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitzdGF0aWMgYm9vbCBoYXNDdXN0b21U
cmFja2luZyhDVEZvbnRSZWYgZm9udCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCisgICAgVU5VU0VEX1BBUkFNKGZvbnQpOwor
ICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIENURm9udERlc2NyaXB0b3JJc1N5
c3RlbVVJRm9udChhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihmb250KSkuZ2V0KCkp
OworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Vtb2ppKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IHBsYXRmb3JtRGF0YS5tX2lzRW1vamk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwbGF0Zm9y
bURhdGEpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBGb250
OjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFu
Y2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0Cit7CisgICAgLy8gRmFzdCBnZXR0ZXIg
ZG9lc24ndCB0YWtlIGN1c3RvbSB0cmFja2luZyBpbnRvIGFjY291bnQKKyAgICBpZiAoaGFzQ3Vz
dG9tVHJhY2tpbmcocGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgLy8gRmFzdCBnZXR0ZXIgZG9lc24ndCB3b3JrIGZvciBlbW9qaQorICAgIGlmIChp
c0Vtb2ppKHBsYXRmb3JtRGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIC4u
LiBvciBmb3IgYW55IGJpdG1hcCBmb250cyBpbiBnZW5lcmFsCisgICAgaWYgKGFkdmFuY2VGb3JD
b2xvckJpdG1hcEZvbnQoZ2x5cGgsIGFkdmFuY2UpKSB7CisgICAgICAgIHBvcHVsYXRlZEFkdmFu
Y2UgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworICAgIGJvb2wgaG9yaXpv
bnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbDsKKyAgICBi
b29sIHBvcHVsYXRlZEFkdmFuY2UgPSBmYWxzZTsKKyAgICBpZiAoKGhvcml6b250YWwgfHwgbV9p
c0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKSAmJiBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVy
KGdseXBoLCBhZHZhbmNlLCBwb3B1bGF0ZWRBZHZhbmNlKSkgeworICAgICAgICBmbG9hdCBwb2lu
dFNpemUgPSBwbGF0Zm9ybURhdGEoKS5tX3NpemU7CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3Jt
IG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7Cisg
ICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgp
LmNnRm9udCgpLCAmbSwgcmVuZGVyaW5nU3R5bGUoKSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsK
KyAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENH
Rm9udENvcHlGdWxsTmFtZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkpOworICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUgZ2x5cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1bGxO
YW1lLmdldCgpLCBwb2ludFNpemUpOworICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFwb3B1bGF0ZWRBZHZhbmNlKQorICAgICAgICBDVEZv
bnRHZXRBZHZhbmNlc0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgaG9yaXpvbnRh
bCA/IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24gOiBrQ1RGb250VmVydGljYWxPcmllbnRh
dGlvbiwgJmdseXBoLCAmYWR2YW5jZSwgMSk7CisKKyAgICByZXR1cm4gYWR2YW5jZS53aWR0aCAr
IG1fc3ludGhldGljQm9sZE9mZnNldDsKK30KKworc3RydWN0IFByb3ZpZGVySW5mbyB7CisgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnM7CisgICAgc2l6ZV90IGxlbmd0aDsKKyAgICBDRkRpY3Rp
b25hcnlSZWYgYXR0cmlidXRlczsKK307CisKK3N0YXRpYyBjb25zdCBVbmlDaGFyKiBwcm92aWRl
U3RyaW5nQW5kQXR0cmlidXRlcyhDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjb3VudCwg
Q0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiBjb250ZXh0KQoreworICAgIFByb3Zp
ZGVySW5mbyogaW5mbyA9IHN0YXRpY19jYXN0PHN0cnVjdCBQcm92aWRlckluZm8qPihjb250ZXh0
KTsKKyAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oc3RyaW5n
SW5kZXgpID49IGluZm8tPmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAqY291bnQg
PSBpbmZvLT5sZW5ndGggLSBzdHJpbmdJbmRleDsKKyAgICAqYXR0cmlidXRlcyA9IGluZm8tPmF0
dHJpYnV0ZXM7CisgICAgcmV0dXJuIGluZm8tPmNoYXJhY3RlcnMgKyBzdHJpbmdJbmRleDsKK30K
KworYm9vbCBGb250OjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3Vw
cG9ydCkKKyAgICAgICAgbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQgPSBzdGQ6
Om1ha2VfdW5pcXVlPEhhc2hNYXA8U3RyaW5nLCBib29sPj4oKTsKKworICAgIFdURjo6SGFzaE1h
cDxTdHJpbmcsIGJvb2w+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb21iaW5pbmdDaGFyYWN0
ZXJTZXF1ZW5jZVN1cHBvcnQtPmFkZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSwgZmFsc2Up
OworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOworCisgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gZm9udEVxdWFs
aXR5T2JqZWN0ID0gcGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpOworCisg
ICAgUHJvdmlkZXJJbmZvIGluZm8gPSB7IGNoYXJhY3RlcnMsIGxlbmd0aCwgZ2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzKDAsIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkpIH07CisgICAgUmV0YWlu
UHRyPENUTGluZVJlZj4gbGluZSA9IGFkb3B0Q0YoQ1RMaW5lQ3JlYXRlV2l0aFVuaUNoYXJQcm92
aWRlcigmcHJvdmlkZVN0cmluZ0FuZEF0dHJpYnV0ZXMsIDAsICZpbmZvKSk7CisKKyAgICBDRkFy
cmF5UmVmIHJ1bkFycmF5ID0gQ1RMaW5lR2V0R2x5cGhSdW5zKGxpbmUuZ2V0KCkpOworICAgIENG
SW5kZXggcnVuQ291bnQgPSBDRkFycmF5R2V0Q291bnQocnVuQXJyYXkpOworCisgICAgZm9yIChD
RkluZGV4IHIgPSAwOyByIDwgcnVuQ291bnQ7IHIrKykgeworICAgICAgICBDVFJ1blJlZiBjdFJ1
biA9IHN0YXRpY19jYXN0PENUUnVuUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHJ1bkFycmF5
LCByKSk7CisgICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChjdFJ1bikgPT0gQ1RSdW5HZXRUeXBl
SUQoKSk7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBydW5BdHRyaWJ1dGVzID0gQ1RSdW5HZXRB
dHRyaWJ1dGVzKGN0UnVuKTsKKyAgICAgICAgQ1RGb250UmVmIHJ1bkZvbnQgPSBzdGF0aWNfY2Fz
dDxDVEZvbnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJpYnV0ZXMsIGtDVEZvbnRB
dHRyaWJ1dGVOYW1lKSk7CisgICAgICAgIGlmICghQ0ZFcXVhbChmb250RXF1YWxpdHlPYmplY3Qu
Z2V0KCksIEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuRm9udCku
Z2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM3LDE5ICszNywyMSBAQAogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW1wb3J0
ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNp
bXBvcnQgPGZsb2F0Lmg+CisjaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+CisjaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCiAjaWYgVVNFKEFQUEtJVCkKICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQu
aD4KICNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgog
I2Vsc2UKKyNpbXBvcnQgIkZvbnRTZXJ2aWNlc0lPUy5oIgogI2ltcG9ydCA8Q29yZVRleHQvQ29y
ZVRleHQuaD4KICNlbmRpZgotI2ltcG9ydCA8ZmxvYXQuaD4KLSNpbXBvcnQgPHVuaWNvZGUvdWNo
YXIuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvU3RkTGliRXh0
cmFzLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKLSNpZiAhUExBVEZPUk0oSU9TKQor
I2lmIFVTRShBUFBLSVQpCiBAaW50ZXJmYWNlIE5TRm9udCAoV2ViQXBwS2l0U2VjcmV0QVBJKQog
LSAoQk9PTClfaXNGYWtlRml4ZWRQaXRjaDsKIEBlbmQKQEAgLTU3LDcgKzU5LDYgQEAgLSAoQk9P
TClfaXNGYWtlRml4ZWRQaXRjaDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgVVNFKEFQ
UEtJVCkKIHN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgY3RGb250
KQogewogICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxvb2sgbmVhdCBidXQgdGhpcyBpcyB3aGF0
IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5nLi4uCkBAIC03MSw0OCArNzIsNDAgQEAg
c3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIGJvb2wgaW5pdEZvbnREYXRhKEZvbnQqIGZvbnREYXRhKQotewotICAg
IGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQorI2lmIFVTRShBUFBLSVQpCiBzdGF0aWMg
TlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZhbWlseSh2b2lkKQogewogICAgIHN0YXRpYyBOU1N0
cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5ID0gW1tbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6
MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07CiAgICAgcmV0dXJuIHdlYkZhbGxiYWNrRm9udEZh
bWlseTsKIH0KLQotY29uc3QgRm9udCogRm9udDo6Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQo
TlNGb250ICprZXkpIGNvbnN0CisjZWxzZQorc3RhdGljIGJvb2wgZm9udEZhbWlseVNob3VsZE5v
dEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKIHsKLSAgICBpZiAo
IWtleSB8fCBDRkVxdWFsKGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKENURm9udFJl
ZihrZXkpKSkuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZv
bnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgp
KTsKLQotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXJpdmVkRm9udERhdGEtPmNvbXBvc2l0ZUZv
bnRSZWZlcmVuY2VzLmFkZChrZXksIG51bGxwdHIpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdF
bnRyeSkgewotICAgICAgICBOU0ZvbnQgKnN1YnN0aXR1dGVGb250ID0gW2tleSBwcmludGVyRm9u
dF07CisgICAgaWYgKCFmb250RmFtaWx5TmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJh
aXRzKChDVEZvbnRSZWYpc3Vic3RpdHV0ZUZvbnQpOwotICAgICAgICBib29sIHN5bnRoZXRpY0Jv
bGQgPSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNCb2xkKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250
Qm9sZFRyYWl0KTsKLSAgICAgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gcGxhdGZvcm1EYXRh
KCkuc3ludGhldGljT2JsaXF1ZSgpICYmICEodHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KTsK
KyAgICAvLyBUaW1lcyBOZXcgUm9tYW4gY29udGFpbnMgQXJhYmljIGdseXBocywgYnV0IENvcmUg
VGV4dCBkb2Vzbid0IGtub3cgaG93IHRvIHNoYXBlIHRoZW0uIDxyZGFyOi8vcHJvYmxlbS85ODIz
OTc1PgorICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMjA5NjgzNT4gcmVtb3ZlIHRoaXMg
ZnVuY3Rpb24gb25jZSB0aGUgYWJvdmUgYnVnIGlzIGZpeGVkLgorICAgIC8vIEFyaWFsIGFuZCBU
YWhvbWEgYXJlIGhhdmUgcGVyZm9ybWFuY2UgaXNzdWVzIHNvIGRvbid0IHVzZSB0aGVtIGFzIHdl
bGwuCisgICAgcmV0dXJuIChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIp
LCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCisgICAgICAgIHx8IChD
RlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFyaWFsIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZD
b21wYXJlRXF1YWxUbykKKyAgICAgICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigiVGFob21h
IiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7Cit9CisjZW5kaWYK
IAotICAgICAgICBGb250UGxhdGZvcm1EYXRhIHN1YnN0aXR1dGVQbGF0Zm9ybShzdWJzdGl0dXRl
Rm9udCwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxp
cXVlLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0Zm9ybURhdGEoKS53aWR0aFZh
cmlhbnQoKSk7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGb250OjpjcmVh
dGUoc3Vic3RpdHV0ZVBsYXRmb3JtLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJldHVy
biBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworc3RhdGljIGJvb2wgaW5pdEZvbnRE
YXRhKEZvbnQqIGZvbnREYXRhKQoreworICAgIHJldHVybiBmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkuY2dGb250KCk7CiB9CiAKKwogdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogeworI2lmIFVT
RShBUFBLSVQpCiAgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEubV9z
eW50aGV0aWNCb2xkID8gMS4wZiA6IDAuZjsKIAogICAgIGJvb2wgZmFpbGVkU2V0dXAgPSBmYWxz
ZTsKLSAgICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkgeworICAgIGlmICghcGxhdGZvcm1EYXRh
KCkuY2dGb250KCkpIHsKICAgICAgICAgLy8gQWNrISBTb21ldGhpbmcgdmVyeSBiYWQgaGFwcGVu
ZWQsIGxpa2UgYSBjb3JydXB0IGZvbnQuCiAgICAgICAgIC8vIFRyeSBsb29raW5nIGZvciBhbiBh
bHRlcm5hdGUgJ2Jhc2UnIGZvbnQgZm9yIHRoaXMgcmVuZGVyZXIuCiAKQEAgLTEzNSwxMiArMTI4
LDEyIEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKICAgICAgICAgICAgIG1fcGxhdGZvcm1E
YXRhLnNldE5TRm9udChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRG
b250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OmZhbGxiYWNrRm9udEZhbWlseV0p
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW05T
Rm9udCBmb250V2l0aE5hbWU6ZmFsbGJhY2tGb250RmFtaWx5IHNpemU6bV9wbGF0Zm9ybURhdGEu
c2l6ZSgpXSk7Ci0gICAgICAgIGlmICghaW5pdEZvbnREYXRhKHRoaXMpKSB7CisgICAgICAgIGlm
ICghcGxhdGZvcm1EYXRhKCkuY2dGb250KCkpIHsKICAgICAgICAgICAgIGlmIChbZmFsbGJhY2tG
b250RmFtaWx5IGlzRXF1YWw6QCJUaW1lcyBOZXcgUm9tYW4iXSkgewogICAgICAgICAgICAgICAg
IC8vIE9LLCBjb3VsZG4ndCBzZXR1cCBUaW1lcyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJuYXRlIHRv
IFRpbWVzLCBmYWxsYmFjawogICAgICAgICAgICAgICAgIC8vIG9uIHRoZSBzeXN0ZW0gZm9udC4g
IElmIHRoaXMgZmFpbHMgd2UgaGF2ZSBubyBhbHRlcm5hdGl2ZSBsZWZ0LgogICAgICAgICAgICAg
ICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1h
bmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OndlYkZh
bGxiYWNrRm9udEZhbWlseSgpXSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpbml0Rm9udERhdGEo
dGhpcykpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBsYXRmb3JtRGF0YSgpLmNnRm9udCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHRyaWVkLCBUaW1lcywgVGltZXMgTmV3IFJvbWFu
LCBhbmQgdGhlIHN5c3RlbSBmb250LiBObyBqb3kuIFdlIGhhdmUgdG8gZ2l2ZSB1cC4KICAgICAg
ICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQg
JUAiLCBpbml0aWFsRm9udC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGZhaWxlZFNldHVw
ID0gdHJ1ZTsKQEAgLTE2MiwxNSArMTU1LDEyIEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkK
ICAgICBpZiAoZmFpbGVkU2V0dXApIHsKICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250
KFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbbV9wbGF0Zm9ybURhdGEubnNGb250KCkgcG9pbnRT
aXplXV0pOwogICAgICAgICBMT0dfRVJST1IoImZhaWxlZCB0byBzZXQgdXAgZm9udCwgdXNpbmcg
c3lzdGVtIGZvbnQgJXMiLCBtX3BsYXRmb3JtRGF0YS5mb250KCkpOwotICAgICAgICBpbml0Rm9u
dERhdGEodGhpcyk7CiAgICAgfQogCi0jaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIFdvcmsgYXJv
dW5kIDxyZGFyOi8vcHJvYmxlbS8xOTQzMzQ5MD4KICAgICBDR0dseXBoIGR1bW15R2x5cGhzW10g
PSB7MCwgMH07Ci0gICAgQ0dTaXplIGR1bW15U2l6ZVtdID0ge0NHU2l6ZU1ha2UoMCwgMCksIENH
U2l6ZU1ha2UoMCwgMCl9OworICAgIENHU2l6ZSBkdW1teVNpemVbXSA9IHsgQ0dTaXplTWFrZSgw
LCAwKSwgQ0dTaXplTWFrZSgwLCAwKSB9OwogICAgIENURm9udFRyYW5zZm9ybUdseXBocyhtX3Bs
YXRmb3JtRGF0YS5jdEZvbnQoKSwgZHVtbXlHbHlwaHMsIGR1bW15U2l6ZSwgMiwga0NURm9udFRy
YW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgfCBrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5nKTsK
LSNlbmRpZgogICAgIAogICAgIGludCBpQXNjZW50OwogICAgIGludCBpRGVzY2VudDsKQEAgLTIz
MywxMSArMjIzLDY1IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKICAgICBtX2ZvbnRNZXRy
aWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOwogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdh
cChsaW5lR2FwKTsKICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7Ci19Cisj
ZWxzZQorICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhl
dGljQm9sZCA/IGNlaWxmKG1fcGxhdGZvcm1EYXRhLnNpemUoKSAgLyAyNC4wZikgOiAwLmY7Cisg
ICAgbV9zcGFjZUdseXBoID0gMDsKKyAgICBtX3NwYWNlV2lkdGggPSAwOworICAgIHVuc2lnbmVk
IHVuaXRzUGVyRW07CisgICAgZmxvYXQgYXNjZW50OworICAgIGZsb2F0IGRlc2NlbnQ7CisgICAg
ZmxvYXQgY2FwSGVpZ2h0OworICAgIGZsb2F0IGxpbmVHYXA7CisgICAgZmxvYXQgbGluZVNwYWNp
bmc7CisgICAgZmxvYXQgeEhlaWdodDsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWls
eU5hbWU7CisgICAgaWYgKENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCkp
IHsKKyAgICAgICAgRm9udFNlcnZpY2VzSU9TIGZvbnRTZXJ2aWNlKGN0Rm9udCk7CisgICAgICAg
IGFzY2VudCA9IGNlaWxmKGZvbnRTZXJ2aWNlLmFzY2VudCgpKTsKKyAgICAgICAgZGVzY2VudCA9
IGNlaWxmKGZvbnRTZXJ2aWNlLmRlc2NlbnQoKSk7CisgICAgICAgIGxpbmVTcGFjaW5nID0gZm9u
dFNlcnZpY2UubGluZVNwYWNpbmcoKTsKKyAgICAgICAgbGluZUdhcCA9IGZvbnRTZXJ2aWNlLmxp
bmVHYXAoKTsKKyAgICAgICAgeEhlaWdodCA9IGZvbnRTZXJ2aWNlLnhIZWlnaHQoKTsKKyAgICAg
ICAgY2FwSGVpZ2h0ID0gZm9udFNlcnZpY2UuY2FwSGVpZ2h0KCk7CisgICAgICAgIHVuaXRzUGVy
RW0gPSBmb250U2VydmljZS51bml0c1BlckVtKCk7CisgICAgICAgIGZhbWlseU5hbWUgPSBhZG9w
dENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkpOworICAgIH0gZWxzZSB7CisgICAgICAg
IENHRm9udFJlZiBjZ0ZvbnQgPSBtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKTsKKworICAgICAgICB1
bml0c1BlckVtID0gQ0dGb250R2V0VW5pdHNQZXJFbShjZ0ZvbnQpOworCisgICAgICAgIGZsb2F0
IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICAgICAgYXNjZW50ID0gbHJv
dW5kZihzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRBc2NlbnQoY2dGb250KSwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemUpOworICAgICAgICBkZXNjZW50ID0gbHJvdW5kZigtc2NhbGVFbVRvVW5pdHMo
LWFicyhDR0ZvbnRHZXREZXNjZW50KGNnRm9udCkpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7
CisgICAgICAgIGxpbmVHYXAgPSBscm91bmRmKHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldExlYWRp
bmcoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOworICAgICAgICB4SGVpZ2h0ID0g
c2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0WEhlaWdodChjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBv
aW50U2l6ZTsKKyAgICAgICAgY2FwSGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0Q2Fw
SGVpZ2h0KGNnRm9udCksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwogCi1zdGF0aWMgQ0ZEYXRh
UmVmIGNvcHlGb250VGFibGVGb3JUYWcoRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBG
b3VyQ2hhckNvZGUgdGFibGVOYW1lKQotewotICAgIHJldHVybiBDR0ZvbnRDb3B5VGFibGVGb3JU
YWcocGxhdGZvcm1EYXRhLmNnRm9udCgpLCB0YWJsZU5hbWUpOworICAgICAgICBsaW5lU3BhY2lu
ZyA9IGFzY2VudCArIGRlc2NlbnQgKyBsaW5lR2FwOworICAgICAgICBmYW1pbHlOYW1lID0gYWRv
cHRDRihDR0ZvbnRDb3B5RmFtaWx5TmFtZShjZ0ZvbnQpKTsKKyAgICB9CisKKyAgICBtX2ZvbnRN
ZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7CisgICAgbV9mb250TWV0cmljcy5zZXRB
c2NlbnQoYXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7Cisg
ICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOworICAgIG1fZm9udE1ldHJpY3Mu
c2V0TGluZVNwYWNpbmcobGluZVNwYWNpbmcpOworICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdo
dCh4SGVpZ2h0KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOwor
ICAgIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWlseVNob3VsZE5vdEJlVXNl
ZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKKworICAgIGlmIChwbGF0Zm9ybURhdGEoKS5v
cmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkp
CisgICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVydGljYWxHbHlwaHMobV9w
bGF0Zm9ybURhdGEuY3RGb250KCkpOworCisgICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5tX2lzRW1v
amkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB0aGlyZE9mU2l6ZSA9IG1fcGxhdGZvcm1E
YXRhLnNpemUoKSAvIDM7CisgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQodGhpcmRPZlNpemUp
OworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudCh0aGlyZE9mU2l6ZSk7CisgICAgbV9mb250
TWV0cmljcy5zZXRMaW5lR2FwKHRoaXJkT2ZTaXplKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExp
bmVTcGFjaW5nKDApOworI2VuZGlmCiB9CiAKIHZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJ
bml0KCkKQEAgLTI0NSwxNCArMjg5LDE1IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJ
bml0KCkKICAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7CiAgICAgbV9tYXhDaGFyV2lkdGggPSAwOwog
ICAgIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG9zMlRhYmxlID0gYWRvcHRDRihjb3B5Rm9u
dFRhYmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLCAnT1MvMicpKTsKKyNpZiBQTEFURk9STShNQUMp
CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gb3MyVGFibGUgPSBhZG9wdENGKENHRm9udENvcHlU
YWJsZUZvclRhZyhtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSwgJ09TLzInKSk7CiAgICAgaWYgKG9z
MlRhYmxlICYmIENGRGF0YUdldExlbmd0aChvczJUYWJsZS5nZXQoKSkgPj0gNCkgewogICAgICAg
ICBjb25zdCBVSW50OCogb3MyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihvczJUYWJsZS5nZXQoKSk7CiAg
ICAgICAgIFNJbnQxNiBvczJBdmdDaGFyV2lkdGggPSBvczJbMl0gKiAyNTYgKyBvczJbM107CiAg
ICAgICAgIG1fYXZnQ2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMob3MyQXZnQ2hhcldpZHRoLCBt
X2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CiAgICAg
fQogCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gaGVhZFRhYmxlID0gYWRvcHRDRihjb3B5Rm9u
dFRhYmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLCAnaGVhZCcpKTsKKyAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBoZWFkVGFibGUgPSBhZG9wdENGKENHRm9udENvcHlUYWJsZUZvclRhZyhtX3BsYXRm
b3JtRGF0YS5jZ0ZvbnQoKSwgJ2hlYWQnKSk7CiAgICAgaWYgKGhlYWRUYWJsZSAmJiBDRkRhdGFH
ZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+PSA0MikgewogICAgICAgICBjb25zdCBVSW50OCog
aGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgpKTsKICAgICAgICAgdXNob3J0
IHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKQEAgLTI2MiwxNyArMzA3LDE2IEBA
IHZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKICAgICAgICAgZmxvYXQgZGlmZiA9
IHN0YXRpY19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7CiAgICAgICAgIG1fbWF4Q2hhcldpZHRo
ID0gc2NhbGVFbVRvVW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9w
bGF0Zm9ybURhdGEubV9zaXplOwogICAgIH0KKyNlbmRpZgogCiAgICAgLy8gRmFsbGJhY2sgdG8g
YSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1
ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0aXZlLgogICAgIGluaXRDaGFyV2lkdGhzKCk7CiB9Ci0j
ZW5kaWYgLy8gVVNFKEFQUEtJVCkKIAogdm9pZCBGb250OjpwbGF0Zm9ybURlc3Ryb3koKQogewog
fQogCi0jaWYgIVBMQVRGT1JNKElPUykKIFBhc3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAogewogICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewpAQCAtMjgxLDEzICszMjUsMTIg
QEAgUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYQogICAgICAgICByZXR1
cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCi0g
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIGZsb2F0IHNpemUgPSBtX3BsYXRm
b3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKLSAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxl
ZEZvbnREYXRhKFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6
bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9TaXplOnNpemVdLCBzaXplLCBmYWxzZSwgZmFsc2Us
IG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkpOwogCi0gICAgLy8gQXBwS2l0IHJlc2V0cyB0
aGUgdHlwZSBpbmZvcm1hdGlvbiAoc2NyZWVuL3ByaW50ZXIpIHdoZW4geW91IGNvbnZlcnQgYSBm
b250IHRvIGEgZGlmZmVyZW50IHNpemUuCi0gICAgLy8gV2UgaGF2ZSB0byBmaXggdXAgdGhlIGZv
bnQgdGhhdCB3ZSdyZSBoYW5kZWQgYmFjay4KLSAgICBzY2FsZWRGb250RGF0YS5zZXROU0ZvbnQo
W3NjYWxlZEZvbnREYXRhLm5zRm9udCgpIHByaW50ZXJGb250XSk7CisjaWYgVVNFKEFQUEtJVCkK
KyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBGb250UGxhdGZvcm1EYXRh
IHNjYWxlZEZvbnREYXRhKFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVy
dEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9TaXplOnNpemVdLCBzaXplLCBmYWxzZSwg
ZmFsc2UsIG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkpOwogCiAgICAgaWYgKHNjYWxlZEZv
bnREYXRhLmZvbnQoKSkgewogICAgICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtO
U0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKQEAgLTMwNywxMCArMzUwLDMyIEBAIFBh
c3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2EKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogCiAgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIENURm9udFN5bWJvbGlj
VHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRmb3JtRGF0
YS5mb250KCkpOworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3Jp
cHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fcGxhdGZvcm1EYXRhLmZv
bnQoKSkpOworICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHNjYWxlZEZvbnQgPSBhZG9wdENGKENU
Rm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwg
bnVsbHB0cikpOworICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoc2NhbGVkRm9u
dC5nZXQoKSwgc2l6ZSwgZmFsc2UsIGZhbHNlLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigp
KTsKKworICAgIGlmIChzY2FsZWRGb250RGF0YS5mb250KCkpIHsKKyAgICAgICAgaWYgKG1fcGxh
dGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCkKKyAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NU
Rm9udEJvbGRUcmFpdDsKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljT2Js
aXF1ZSkKKyAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEl0YWxpY1RyYWl0OworCisg
ICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHNjYWxlZEZvbnRUcmFpdHMgPSBDVEZvbnRHZXRT
eW1ib2xpY1RyYWl0cyhzY2FsZWRGb250RGF0YS5mb250KCkpOworICAgICAgICBzY2FsZWRGb250
RGF0YS5tX3N5bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAmIGtDVEZvbnRCb2xkVHJhaXQpICYm
ICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpOworICAgICAgICBzY2FsZWRG
b250RGF0YS5tX3N5bnRoZXRpY09ibGlxdWUgPSAoZm9udFRyYWl0cyAmIGtDVEZvbnRJdGFsaWNU
cmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0SXRhbGljKTsKKworICAg
ICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShzY2FsZWRGb250RGF0
YSk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKIH0KIAogdm9pZCBGb250
OjpkZXRlcm1pbmVQaXRjaCgpCiB7CisjaWYgVVNFKEFQUEtJVCkKICAgICBOU0ZvbnQqIGYgPSBt
X3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKICAgICAvLyBTcGVjaWFsIGNhc2UgT3Nha2EtTW9uby4K
ICAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzM5OTk0Njc+LCB3ZSBzaG91bGQg
dHJlYXQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KQEAgLTMyOSw4ICszOTQsMjIgQEAgdm9p
ZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2
ZUNvbXBhcmU6QCJPc2FrYS1Nb25vIl0gPT0gTlNPcmRlcmVkU2FtZSkgJiYKICAgICAgICAgICAg
W25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1TLVBHb3RoaWMiXSAhPSBOU09yZGVyZWRT
YW1lICYmCiAgICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNb25vdHlw
ZUNvcnNpdmEiXSAhPSBOU09yZGVyZWRTYW1lOworI2Vsc2UKKyAgICBDVEZvbnRSZWYgY3RGb250
ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxz
ZTsKKyAgICBpZiAoIWN0Rm9udCkKKyAgICAgICAgcmV0dXJuOyAvLyBDVEZvbnQgaXMgbnVsbCBp
biB0aGUgY2FzZSBvZiBTVkcgZm9udHMgZm9yIGV4YW1wbGUuCisKKyAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5hbWUoY3RGb250KSk7
CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRD
b3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKKworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBDR0Zv
bnRJc0ZpeGVkUGl0Y2gobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpIHx8IChmdWxsTmFtZSAmJiAo
Q0ZTdHJpbmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpLCBrQ0ZD
b21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyB8fCBDRlN0cmluZ0Nv
bXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIiksIGtDRkNvbXBhcmVDYXNl
SW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSk7CisgICAgaWYgKGZhbWlseU5hbWUg
JiYgQ0ZTdHJpbmdDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJDb3VyaWVyIE5ldyIp
LCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAg
ICAgICAvLyBTcGVjaWFsIGNhc2UgQ291cmllciBOZXcgdG8gbm90IGJlIHRyZWF0ZWQgYXMgZml4
ZWQgcGl0Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhhY2tlZCBzcGFjZSB3aWR0aCB3
aGljaCBpcyB1bmRlc2lyZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJkYXI6Ly82MjY5NzgzKS4KKyAg
ICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgogfQotI2Vu
ZGlmIC8vICFQTEFURk9STShJT1MpCiAKIEZsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0Zv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewpAQCAtMzQzLDExICs0MjIsMTEgQEAgRmxvYXRS
ZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoRwogICAgIHJldHVybiBib3VuZGluZ0Jv
eDsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLWlubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBG
b250OjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CitzdGF0aWMgaW5saW5lIENHRm9udFJlbmRlcmlu
Z1N0eWxlIHJlbmRlcmluZ1N0eWxlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0
YSkKIHsKKyNpZiBVU0UoQVBQS0lUKQogICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0g
a0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxl
U3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRp
emF0aW9uOwotICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOworICAg
IE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKICAgICBpZiAoZm9udCkgewog
ICAgICAgICBzd2l0Y2ggKFtmb250IHJlbmRlcmluZ01vZGVdKSB7CiAgICAgICAgIGNhc2UgTlNG
b250SW50ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6CkBAIC0zNjEsMjYgKzQ0MCwzMSBA
QCBpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyCiAgICAgICAgIH0KICAg
ICB9CiAgICAgcmV0dXJuIHN0eWxlOworCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwbGF0Zm9y
bURhdGEpOworICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBr
Q0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmlu
Z1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFzaW5nU3R5bGVVbmZp
bHRlcmVkOworI2VuZGlmCiB9CiAKLWlubGluZSBib29sIEZvbnQ6OmFkdmFuY2VGb3JDb2xvckJp
dG1hcEZvbnQoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkgY29uc3QKK3N0YXRpYyBpbmxp
bmUgYm9vbCBhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHBsYXRmb3JtRGF0YSwgR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkKIHsKLSAgICBOU0Zv
bnQgKmZvbnQgPSBwbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsKLSAgICBpZiAoIWZvbnQgfHwgIXBs
YXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBGb250KCkpCisjaWYgUExBVEZPUk0oTUFDKQorICAg
IE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKKyAgICBpZiAoIWZvbnQgfHwg
IXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgYWR2YW5jZSA9IE5TU2l6ZVRvQ0dTaXplKFtmb250IGFkdmFuY2VtZW50Rm9yR2x5cGg6
Z2x5cGhdKTsKICAgICByZXR1cm4gdHJ1ZTsKLX0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGds
eXBoKTsKKyAgICBVTlVTRURfUEFSQU0oYWR2YW5jZSk7CisgICAgcmV0dXJuIGZhbHNlOwogI2Vu
ZGlmCit9CiAKIHN0YXRpYyBib29sIGhhc0N1c3RvbVRyYWNraW5nKENURm9udFJlZiBmb250KQog
ewotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8
IDEwOTAKLSAgICBVTlVTRURfUEFSQU0oZm9udCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UK
ICAgICByZXR1cm4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0Q0YoQ1RGb250
Q29weUZvbnREZXNjcmlwdG9yKGZvbnQpKS5nZXQoKSk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGlu
bGluZSBib29sIGlzRW1vamkoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQpA
QCAtMzkzLDE2ICs0NzcsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGlzRW1vamkoY29uc3QgRm9u
dFBsYQogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIEZvbnQ6OmNhblVzZUZhc3RHbHlwaEFkdmFu
Y2VHZXR0ZXIoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2
YW5jZSkgY29uc3QKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0
dGVyKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgR2x5cGggZ2x5cGgsIENH
U2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkKIHsKICAgICAvLyBGYXN0IGdl
dHRlciBkb2Vzbid0IHRha2UgY3VzdG9tIHRyYWNraW5nIGludG8gYWNjb3VudAotICAgIGlmICho
YXNDdXN0b21UcmFja2luZyhwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpCisgICAgaWYgKGhhc0N1
c3RvbVRyYWNraW5nKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAvLyBGYXN0IGdldHRlciBkb2Vzbid0IHdvcmsgZm9yIGVtb2ppCi0gICAgaWYgKGlz
RW1vamkocGxhdGZvcm1EYXRhKCkpKQorICAgIGlmIChpc0Vtb2ppKHBsYXRmb3JtRGF0YSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyAuLi4gb3IgZm9yIGFueSBiaXRtYXAgZm9udHMg
aW4gZ2VuZXJhbAotICAgIGlmIChhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KGdseXBoLCBhZHZh
bmNlKSkgeworICAgIGlmIChhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KHBsYXRmb3JtRGF0YSwg
Z2x5cGgsIGFkdmFuY2UpKSB7CiAgICAgICAgIHBvcHVsYXRlZEFkdmFuY2UgPSB0cnVlOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNDE0LDEwICs0OTgsMTAgQEAgZmxvYXQgRm9u
dDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIAogICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dT
aXplWmVybzsKICAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlv
bigpID09IEhvcml6b250YWw7CiAgICAgYm9vbCBwb3B1bGF0ZWRBZHZhbmNlID0gZmFsc2U7Ci0g
ICAgaWYgKChob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjaykgJiYgY2Fu
VXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihnbHlwaCwgYWR2YW5jZSwgcG9wdWxhdGVkQWR2YW5j
ZSkpIHsKKyAgICBpZiAoKGhvcml6b250YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNr
KSAmJiBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKHBsYXRmb3JtRGF0YSgpLCBnbHlwaCwg
YWR2YW5jZSwgcG9wdWxhdGVkQWR2YW5jZSkpIHsKICAgICAgICAgZmxvYXQgcG9pbnRTaXplID0g
cGxhdGZvcm1EYXRhKCkubV9zaXplOwogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dB
ZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwotICAgICAgICBp
ZiAoIUNHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQo
KSwgJm0sIHJlbmRlcmluZ1N0eWxlKCksICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7CisgICAgICAg
IGlmICghQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgpLmNnRm9u
dCgpLCAmbSwgcmVuZGVyaW5nU3R5bGUocGxhdGZvcm1EYXRhKCkpLCAmZ2x5cGgsIDEsICZhZHZh
bmNlKSkgewogICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFtZSA9IGFk
b3B0Q0YoQ0dGb250Q29weUZ1bGxOYW1lKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpKSk7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjYWNoZSBnbHlwaCB3aWR0aHMgZm9yICVAICVm
IiwgZnVsbE5hbWUuZ2V0KCksIHBvaW50U2l6ZSk7CiAgICAgICAgICAgICBhZHZhbmNlLndpZHRo
ID0gMDsKQEAgLTQ3Nyw0ICs1NjEsMjggQEAgYm9vbCBGb250OjpjYW5SZW5kZXJDb21iaW5pbmdD
aGFyYWN0ZXJTZQogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgVVNFKEFQUEtJVCkKK2NvbnN0
IEZvbnQqIEZvbnQ6OmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250KE5TRm9udCAqa2V5KSBjb25z
dAoreworICAgIGlmICgha2V5IHx8IENGRXF1YWwoYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlw
dE5hbWUoQ1RGb250UmVmKGtleSkpKS5nZXQoKSwgQ0ZTVFIoIkxhc3RSZXNvcnQiKSkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAg
ICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4o
aXNDdXN0b21Gb250KCkpOworCisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Rlcml2ZWRGb250RGF0
YS0+Y29tcG9zaXRlRm9udFJlZmVyZW5jZXMuYWRkKGtleSwgbnVsbHB0cik7CisgICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIE5TRm9udCAqc3Vic3RpdHV0ZUZvbnQgPSBb
a2V5IHByaW50ZXJGb250XTsKKworICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMg
PSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cygoQ1RGb250UmVmKXN1YnN0aXR1dGVGb250KTsKKyAg
ICAgICAgYm9vbCBzeW50aGV0aWNCb2xkID0gcGxhdGZvcm1EYXRhKCkuc3ludGhldGljQm9sZCgp
ICYmICEodHJhaXRzICYga0NURm9udEJvbGRUcmFpdCk7CisgICAgICAgIGJvb2wgc3ludGhldGlj
T2JsaXF1ZSA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUoKSAmJiAhKHRyYWl0cyAm
IGtDVEZvbnRJdGFsaWNUcmFpdCk7CisKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzdWJzdGl0
dXRlUGxhdGZvcm0oc3Vic3RpdHV0ZUZvbnQsIHBsYXRmb3JtRGF0YSgpLnNpemUoKSwgc3ludGhl
dGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSwg
cGxhdGZvcm1EYXRhKCkud2lkdGhWYXJpYW50KCkpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gRm9udDo6Y3JlYXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXNDdXN0b21Gb250
KCkpOworICAgIH0KKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsK
K30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9T
Lm1tCShyZXZpc2lvbiAxNzk0MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMTk3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9z
a3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJGb250Lmgi
Ci0KLSNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJ
LmgiCi0jaW1wb3J0ICJGb250Q2FjaGUuaCIKLSNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCi0jaW1w
b3J0ICJGb250RGVzY3JpcHRpb24uaCIKLSNpbXBvcnQgIkZvbnRTZXJ2aWNlc0lPUy5oIgotI2lt
cG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbXBvcnQgPGZsb2F0Lmg+Ci0jaW1wb3J0IDx1
bmljb2RlL3VjaGFyLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGZv
bnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoQ0ZTdHJpbmdSZWYgZm9udEZhbWlseU5h
bWUpCi17Ci0gICAgaWYgKCFmb250RmFtaWx5TmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3Jl
IFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiA8cmRhcjovL3Byb2JsZW0vOTgy
Mzk3NT4KLSAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+IHJlbW92ZSB0aGlz
IGZ1bmN0aW9uIG9uY2UgdGhlIGFib3ZlIGJ1ZyBpcyBmaXhlZC4KLSAgICAvLyBBcmlhbCBhbmQg
VGFob21hIGFyZSBoYXZlIHBlcmZvcm1hbmNlIGlzc3VlcyBzbyBkb24ndCB1c2UgdGhlbSBhcyB3
ZWxsLgotICAgIHJldHVybiAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJUaW1lcyBOZXcgUm9tYW4i
KSwgZm9udEZhbWlseU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQotICAgICAgICAgICB8
fCAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJBcmlhbCIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0g
a0NGQ29tcGFyZUVxdWFsVG8pCi0gICAgICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIo
IlRhaG9tYSIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pOwotfQot
Ci1zdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlwaHMoQ1RGb250UmVmIGN0Rm9udCkKLXsK
LSAgICAvLyBUaGUgY2hlY2sgZG9lc24ndCBsb29rIG5lYXQgYnV0IHRoaXMgaXMgd2hhdCBBcHBL
aXQgZG9lcyBmb3IgdmVydGljYWwgd3JpdGluZy4uLgotICAgIFJldGFpblB0cjxDRkFycmF5UmVm
PiB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBr
Q1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBDRkluZGV4IG51bVRhYmxlcyA9IENG
QXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9
IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7Ci0gICAgICAgIENURm9udFRhYmxlVGFn
IHRhZyA9IChDVEZvbnRUYWJsZVRhZykodWludHB0cl90KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgo
dGFibGVUYWdzLmdldCgpLCBpbmRleCk7Ci0gICAgICAgIGlmICh0YWcgPT0ga0NURm9udFRhYmxl
VmhlYSB8fCB0YWcgPT0ga0NURm9udFRhYmxlVk9SRykKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1Jbml0
KCkKLXsKLSAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRo
ZXRpY0JvbGQgPyBjZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkgIC8gMjQuMGYpIDogMC5mOwot
ICAgIG1fc3BhY2VHbHlwaCA9IDA7Ci0gICAgbV9zcGFjZVdpZHRoID0gMDsKLSAgICB1bnNpZ25l
ZCB1bml0c1BlckVtOwotICAgIGZsb2F0IGFzY2VudDsKLSAgICBmbG9hdCBkZXNjZW50OwotICAg
IGZsb2F0IGNhcEhlaWdodDsKLSAgICBmbG9hdCBsaW5lR2FwOwotICAgIGZsb2F0IGxpbmVTcGFj
aW5nOwotICAgIGZsb2F0IHhIZWlnaHQ7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1p
bHlOYW1lOwotICAgIGlmIChDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgp
KSB7Ci0gICAgICAgIEZvbnRTZXJ2aWNlc0lPUyBmb250U2VydmljZShjdEZvbnQpOwotICAgICAg
ICBhc2NlbnQgPSBjZWlsZihmb250U2VydmljZS5hc2NlbnQoKSk7Ci0gICAgICAgIGRlc2NlbnQg
PSBjZWlsZihmb250U2VydmljZS5kZXNjZW50KCkpOwotICAgICAgICBsaW5lU3BhY2luZyA9IGZv
bnRTZXJ2aWNlLmxpbmVTcGFjaW5nKCk7Ci0gICAgICAgIGxpbmVHYXAgPSBmb250U2VydmljZS5s
aW5lR2FwKCk7Ci0gICAgICAgIHhIZWlnaHQgPSBmb250U2VydmljZS54SGVpZ2h0KCk7Ci0gICAg
ICAgIGNhcEhlaWdodCA9IGZvbnRTZXJ2aWNlLmNhcEhlaWdodCgpOwotICAgICAgICB1bml0c1Bl
ckVtID0gZm9udFNlcnZpY2UudW5pdHNQZXJFbSgpOwotICAgICAgICBmYW1pbHlOYW1lID0gYWRv
cHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBDR0ZvbnRSZWYgY2dGb250ID0gbV9wbGF0Zm9ybURhdGEuY2dGb250KCk7Ci0KLSAgICAgICAg
dW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0oY2dGb250KTsKLQotICAgICAgICBmbG9h
dCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgICAgIGFzY2VudCA9IGxy
b3VuZGYoc2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0QXNjZW50KGNnRm9udCksIHVuaXRzUGVyRW0p
ICogcG9pbnRTaXplKTsKLSAgICAgICAgZGVzY2VudCA9IGxyb3VuZGYoLXNjYWxlRW1Ub1VuaXRz
KC1hYnMoQ0dGb250R2V0RGVzY2VudChjZ0ZvbnQpKSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUp
OwotICAgICAgICBsaW5lR2FwID0gbHJvdW5kZihzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRMZWFk
aW5nKGNnRm9udCksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICAgICAgeEhlaWdodCA9
IHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldFhIZWlnaHQoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBw
b2ludFNpemU7Ci0gICAgICAgIGNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldENh
cEhlaWdodChjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLQotICAgICAgICBsaW5l
U3BhY2luZyA9IGFzY2VudCArIGRlc2NlbnQgKyBsaW5lR2FwOwotICAgICAgICBmYW1pbHlOYW1l
ID0gYWRvcHRDRihDR0ZvbnRDb3B5RmFtaWx5TmFtZShjZ0ZvbnQpKTsKLSAgICB9Ci0KLSAgICBt
X2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Ci0gICAgbV9mb250TWV0cmlj
cy5zZXRBc2NlbnQoYXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2Vu
dCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwotICAgIG1fZm9udE1l
dHJpY3Muc2V0TGluZVNwYWNpbmcobGluZVNwYWNpbmcpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0
WEhlaWdodCh4SGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChjYXBIZWln
aHQpOwotICAgIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWlseVNob3VsZE5v
dEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKLQotICAgIGlmIChwbGF0Zm9ybURh
dGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrKCkpCi0gICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVydGljYWxHbHlw
aHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCkpOwotCi0gICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5t
X2lzRW1vamkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCB0aGlyZE9mU2l6ZSA9IG1fcGxh
dGZvcm1EYXRhLnNpemUoKSAvIDM7Ci0gICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQodGhpcmRP
ZlNpemUpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudCh0aGlyZE9mU2l6ZSk7Ci0gICAg
bV9mb250TWV0cmljcy5zZXRMaW5lR2FwKHRoaXJkT2ZTaXplKTsKLSAgICBtX2ZvbnRNZXRyaWNz
LnNldExpbmVTcGFjaW5nKDApOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5p
dCgpCi17Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAwOwotICAgIG1fbWF4Q2hhcldpZHRoID0gMDsK
LQotICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdp
bGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2ZS4KLSAgICBp
bml0Q2hhcldpZHRocygpOwotfQotCi1QYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3Jl
YXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3Rvcikg
Y29uc3QKLXsKLSAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKLSAgICAgICAgRm9udFBsYXRmb3Jt
RGF0YSBzY2FsZWRGb250RGF0YShtX3BsYXRmb3JtRGF0YSk7Ci0gICAgICAgIHNjYWxlZEZvbnRE
YXRhLm1fc2l6ZSA9IHNjYWxlZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOwotICAgICAg
ICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7Ci0gICAg
fQotCi0gICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9y
OwotICAgIENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xp
Y1RyYWl0cyhtX3BsYXRmb3JtRGF0YS5mb250KCkpOwotICAgIFJldGFpblB0cjxDVEZvbnREZXNj
cmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlw
dG9yKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOwotICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHNj
YWxlZEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVz
Y3JpcHRvci5nZXQoKSwgc2l6ZSwgbnVsbHB0cikpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEgc2Nh
bGVkRm9udERhdGEoc2NhbGVkRm9udC5nZXQoKSwgc2l6ZSwgZmFsc2UsIGZhbHNlLCBtX3BsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpKTsKLQotICAgIGlmIChzY2FsZWRGb250RGF0YS5mb250KCkp
IHsKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCkKLSAgICAgICAg
ICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEJvbGRUcmFpdDsKLSAgICAgICAgaWYgKG1fcGxhdGZv
cm1EYXRhLm1fc3ludGhldGljT2JsaXF1ZSkKLSAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NU
Rm9udEl0YWxpY1RyYWl0OwotCi0gICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHNjYWxlZEZv
bnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhzY2FsZWRGb250RGF0YS5mb250KCkp
OwotICAgICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAm
IGtDVEZvbnRCb2xkVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJv
bGQpOwotICAgICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY09ibGlxdWUgPSAoZm9udFRy
YWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9u
dFRyYWl0SXRhbGljKTsKLQotICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvclBsYXRm
b3JtRGF0YShzY2FsZWRGb250RGF0YSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLXZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQotewotICAgIENURm9udFJlZiBjdEZvbnQg
PSBtX3BsYXRmb3JtRGF0YS5mb250KCk7Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNl
OwotICAgIGlmICghY3RGb250KQotICAgICAgICByZXR1cm47IC8vIENURm9udCBpcyBudWxsIGlu
IHRoZSBjYXNlIG9mIFNWRyBmb250cyBmb3IgZXhhbXBsZS4KLQotICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENURm9udENvcHlGdWxsTmFtZShjdEZvbnQpKTsK
LSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENv
cHlGYW1pbHlOYW1lKGN0Rm9udCkpOwotCi0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IENHRm9u
dElzRml4ZWRQaXRjaChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSkgfHwgKGZ1bGxOYW1lICYmIChD
RlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIiksIGtDRkNv
bXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvIHx8IENGU3RyaW5nQ29t
cGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSwga0NGQ29tcGFyZUNhc2VJ
bnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pKTsKLSAgICBpZiAoZmFtaWx5TmFtZSAm
JiBDRlN0cmluZ0NvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkNvdXJpZXIgTmV3Iiks
IGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7Ci0gICAg
ICAgIC8vIFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5ldyB0byBub3QgYmUgdHJlYXRlZCBhcyBmaXhl
ZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNlIG9mIGEgaGFja2VkIHNwYWNlIHdpZHRoIHdo
aWNoIGlzIHVuZGVzaXJlYWJsZSBmb3IgaVBob25lIChzZWUgcmRhcjovLzYyNjk3ODMpLgotICAg
ICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7Ci0gICAgfQotfQotCi1DR0ZvbnRSZW5k
ZXJpbmdTdHlsZSBGb250OjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGtD
R0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1
YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXph
dGlvbiB8IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7Ci19Ci0KLWJvb2wgRm9u
dDo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCwgQ0dTaXplJikgY29uc3QKLXsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9u
dERhdGFNYWMubW0JKHJldmlzaW9uIDE3OTQyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw0
ODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IkZvbnQuaCIKLQotI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0ICJDb2xvci5o
IgotI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJDb3JlVGV4dFNQSS5oIgot
I2ltcG9ydCAiRmxvYXRSZWN0LmgiCi0jaW1wb3J0ICJGb250Q2FjaGUuaCIKLSNpbXBvcnQgIkZv
bnRDYXNjYWRlLmgiCi0jaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKLSNpbXBvcnQgIlNoYXJl
ZEJ1ZmZlci5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2lmIFVTRShB
UFBLSVQpCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0jaW1wb3J0IDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbHNlCi0jaW1wb3J0IDxDb3JlVGV4dC9D
b3JlVGV4dC5oPgotI2VuZGlmCi0jaW1wb3J0IDxmbG9hdC5oPgotI2ltcG9ydCA8dW5pY29kZS91
Y2hhci5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmICFQTEFURk9STShJT1Mp
Ci1AaW50ZXJmYWNlIE5TRm9udCAoV2ViQXBwS2l0U2VjcmV0QVBJKQotLSAoQk9PTClfaXNGYWtl
Rml4ZWRQaXRjaDsKLUBlbmQKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBV
U0UoQVBQS0lUKQotc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udFJlZiBj
dEZvbnQpCi17Ci0gICAgLy8gVGhlIGNoZWNrIGRvZXNuJ3QgbG9vayBuZWF0IGJ1dCB0aGlzIGlz
IHdoYXQgQXBwS2l0IGRvZXMgZm9yIHZlcnRpY2FsIHdyaXRpbmcuLi4KLSAgICBSZXRhaW5QdHI8
Q0ZBcnJheVJlZj4gdGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVz
KGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgQ0ZJbmRleCBudW1U
YWJsZXMgPSBDRkFycmF5R2V0Q291bnQodGFibGVUYWdzLmdldCgpKTsKLSAgICBmb3IgKENGSW5k
ZXggaW5kZXggPSAwOyBpbmRleCA8IG51bVRhYmxlczsgKytpbmRleCkgewotICAgICAgICBDVEZv
bnRUYWJsZVRhZyB0YWcgPSAoQ1RGb250VGFibGVUYWcpKHVpbnRwdHJfdClDRkFycmF5R2V0VmFs
dWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpOwotICAgICAgICBpZiAodGFnID09IGtD
VEZvbnRUYWJsZVZoZWEgfHwgdGFnID09IGtDVEZvbnRUYWJsZVZPUkcpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBp
bml0Rm9udERhdGEoRm9udCogZm9udERhdGEpCi17Ci0gICAgaWYgKCFmb250RGF0YS0+cGxhdGZv
cm1EYXRhKCkuY2dGb250KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZhbWlseSh2b2lkKQot
ewotICAgIHN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5ID0gW1tbTlNGb250
IHN5c3RlbUZvbnRPZlNpemU6MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07Ci0gICAgcmV0dXJu
IHdlYkZhbGxiYWNrRm9udEZhbWlseTsKLX0KLQotY29uc3QgRm9udCogRm9udDo6Y29tcG9zaXRl
Rm9udFJlZmVyZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0Ci17Ci0gICAgaWYgKCFrZXkgfHwg
Q0ZFcXVhbChhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShDVEZvbnRSZWYoa2V5KSkp
LmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0KLSAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVyaXZlZEZvbnREYXRhLT5jb21wb3NpdGVGb250UmVmZXJl
bmNlcy5hZGQoa2V5LCBudWxscHRyKTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsK
LSAgICAgICAgTlNGb250ICpzdWJzdGl0dXRlRm9udCA9IFtrZXkgcHJpbnRlckZvbnRdOwotCi0g
ICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJh
aXRzKChDVEZvbnRSZWYpc3Vic3RpdHV0ZUZvbnQpOwotICAgICAgICBib29sIHN5bnRoZXRpY0Jv
bGQgPSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNCb2xkKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250
Qm9sZFRyYWl0KTsKLSAgICAgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gcGxhdGZvcm1EYXRh
KCkuc3ludGhldGljT2JsaXF1ZSgpICYmICEodHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KTsK
LQotICAgICAgICBGb250UGxhdGZvcm1EYXRhIHN1YnN0aXR1dGVQbGF0Zm9ybShzdWJzdGl0dXRl
Rm9udCwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxp
cXVlLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0Zm9ybURhdGEoKS53aWR0aFZh
cmlhbnQoKSk7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGb250OjpjcmVh
dGUoc3Vic3RpdHV0ZVBsYXRmb3JtLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJldHVy
biBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotfQotCi12b2lkIEZvbnQ6OnBsYXRm
b3JtSW5pdCgpCi17Ci0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEu
bV9zeW50aGV0aWNCb2xkID8gMS4wZiA6IDAuZjsKLQotICAgIGJvb2wgZmFpbGVkU2V0dXAgPSBm
YWxzZTsKLSAgICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkgewotICAgICAgICAvLyBBY2shIFNv
bWV0aGluZyB2ZXJ5IGJhZCBoYXBwZW5lZCwgbGlrZSBhIGNvcnJ1cHQgZm9udC4KLSAgICAgICAg
Ly8gVHJ5IGxvb2tpbmcgZm9yIGFuIGFsdGVybmF0ZSAnYmFzZScgZm9udCBmb3IgdGhpcyByZW5k
ZXJlci4KLQotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgaGFjayB0byB1c2UgIlRpbWVzIE5ldyBS
b21hbiIgaW4gcGxhY2Ugb2YgIlRpbWVzIi4KLSAgICAgICAgLy8gIlRpbWVzIFJPIiBpcyBhIGNv
bW1vbiBmb250IHdob3NlIGZhbWlseSBuYW1lIGlzICJUaW1lcyIuCi0gICAgICAgIC8vIEl0IG92
ZXJyaWRlcyB0aGUgbm9ybWFsICJUaW1lcyIgZmFtaWx5IGZvbnQuCi0gICAgICAgIC8vIEl0IGFs
c28gYXBwZWFycyB0byBoYXZlIGEgY29ycnVwdCByZWd1bGFyIHZhcmlhbnQuCi0gICAgICAgIE5T
U3RyaW5nICpmYWxsYmFja0ZvbnRGYW1pbHk7Ci0gICAgICAgIGlmIChbW21fcGxhdGZvcm1EYXRh
Lm5zRm9udCgpIGZhbWlseU5hbWVdIGlzRXF1YWw6QCJUaW1lcyJdKQotICAgICAgICAgICAgZmFs
bGJhY2tGb250RmFtaWx5ID0gQCJUaW1lcyBOZXcgUm9tYW4iOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSB3ZWJGYWxsYmFja0ZvbnRGYW1pbHkoKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIFRyeSBzZXR0aW5nIHVwIHRoZSBhbHRlcm5hdGUgZm9udC4KLSAg
ICAgICAgLy8gVGhpcyBpcyBhIGxhc3QgZGl0Y2ggZWZmb3J0IHRvIHVzZSBhIHN1YnN0aXR1dGUg
Zm9udCB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZy4KLSNpZiAhRVJST1JfRElTQUJMRUQK
LSAgICAgICAgUmV0YWluUHRyPE5TRm9udD4gaW5pdGlhbEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5u
c0ZvbnQoKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEuZm9udCgpKQotICAg
ICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRG
b250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6
ZmFsbGJhY2tGb250RmFtaWx5XSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcGxhdGZv
cm1EYXRhLnNldE5TRm9udChbTlNGb250IGZvbnRXaXRoTmFtZTpmYWxsYmFja0ZvbnRGYW1pbHkg
c2l6ZTptX3BsYXRmb3JtRGF0YS5zaXplKCldKTsKLSAgICAgICAgaWYgKCFpbml0Rm9udERhdGEo
dGhpcykpIHsKLSAgICAgICAgICAgIGlmIChbZmFsbGJhY2tGb250RmFtaWx5IGlzRXF1YWw6QCJU
aW1lcyBOZXcgUm9tYW4iXSkgewotICAgICAgICAgICAgICAgIC8vIE9LLCBjb3VsZG4ndCBzZXR1
cCBUaW1lcyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJuYXRlIHRvIFRpbWVzLCBmYWxsYmFjawotICAg
ICAgICAgICAgICAgIC8vIG9uIHRoZSBzeXN0ZW0gZm9udC4gIElmIHRoaXMgZmFpbHMgd2UgaGF2
ZSBubyBhbHRlcm5hdGl2ZSBsZWZ0LgotICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNl
dE5TRm9udChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om1f
cGxhdGZvcm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNrRm9udEZhbWlseSgpXSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFpbml0Rm9udERhdGEodGhpcykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgdHJpZWQsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIGFuZCB0aGUgc3lz
dGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0byBnaXZlIHVwLgotICAgICAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoInVuYWJsZSB0byBpbml0aWFsaXplIHdpdGggZm9udCAlQCIsIGluaXRpYWxG
b250LmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8g
V2UgdHJpZWQgdGhlIHJlcXVlc3RlZCBmb250IGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4g
V2UgaGF2ZSB0byBnaXZlIHVwLgotICAgICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxlIHRv
IGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOwotICAgICAgICAg
ICAgICAgIGZhaWxlZFNldHVwID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFJlcG9ydCB0aGUgcHJvYmxlbS4KLSAgICAgICAgTE9HX0VSUk9SKCJDb3JydXB0
IGZvbnQgZGV0ZWN0ZWQsIHVzaW5nICVAIGluIHBsYWNlIG9mICVALiIsCi0gICAgICAgICAgICBb
bV9wbGF0Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV0sIFtpbml0aWFsRm9udC5nZXQoKSBm
YW1pbHlOYW1lXSk7Ci0gICAgfQotCi0gICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHRyeSB0byBz
ZXQgdXAgdXNpbmcgdGhlIHN5c3RlbSBmb250LgotICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmVj
YXVzZSBUaW1lcyBhbmQgVGltZXMgTmV3IFJvbWFuIGFyZSBib3RoIHVuYXZhaWxhYmxlLgotICAg
IGlmIChmYWlsZWRTZXR1cCkgewotICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW05T
Rm9udCBzeXN0ZW1Gb250T2ZTaXplOlttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBwb2ludFNpemVd
XSk7Ci0gICAgICAgIExPR19FUlJPUigiZmFpbGVkIHRvIHNldCB1cCBmb250LCB1c2luZyBzeXN0
ZW0gZm9udCAlcyIsIG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgICAgIGluaXRGb250RGF0
YSh0aGlzKTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gV29yayBhcm91bmQg
PHJkYXI6Ly9wcm9ibGVtLzE5NDMzNDkwPgotICAgIENHR2x5cGggZHVtbXlHbHlwaHNbXSA9IHsw
LCAwfTsKLSAgICBDR1NpemUgZHVtbXlTaXplW10gPSB7Q0dTaXplTWFrZSgwLCAwKSwgQ0dTaXpl
TWFrZSgwLCAwKX07Ci0gICAgQ1RGb250VHJhbnNmb3JtR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0
Rm9udCgpLCBkdW1teUdseXBocywgZHVtbXlTaXplLCAyLCBrQ1RGb250VHJhbnNmb3JtQXBwbHlQ
b3NpdGlvbmluZyB8IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcpOwotI2VuZGlmCi0gICAg
Ci0gICAgaW50IGlBc2NlbnQ7Ci0gICAgaW50IGlEZXNjZW50OwotICAgIGludCBpQ2FwSGVpZ2h0
OwotICAgIGludCBpTGluZUdhcDsKLSAgICB1bnNpZ25lZCB1bml0c1BlckVtOwotICAgIGlBc2Nl
bnQgPSBDR0ZvbnRHZXRBc2NlbnQobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpOwotICAgIC8vIFNv
bWUgZm9udHMgZXJyb25lb3VzbHkgc3BlY2lmeSBhIHBvc2l0aXZlIGRlc2NlbmRlciB2YWx1ZS4g
V2UgZm9sbG93IENvcmUgVGV4dCBpbiBhc3N1bWluZyB0aGF0Ci0gICAgLy8gc3VjaCBmb250cyBt
ZWFudCB0aGUgc2FtZSBkaXN0YW5jZSwgYnV0IGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbi4KLSAg
ICBpRGVzY2VudCA9IC1hYnMoQ0dGb250R2V0RGVzY2VudChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQo
KSkpOwotICAgIGlDYXBIZWlnaHQgPSBDR0ZvbnRHZXRDYXBIZWlnaHQobV9wbGF0Zm9ybURhdGEu
Y2dGb250KCkpOwotICAgIGlMaW5lR2FwID0gQ0dGb250R2V0TGVhZGluZyhtX3BsYXRmb3JtRGF0
YS5jZ0ZvbnQoKSk7Ci0gICAgdW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0obV9wbGF0
Zm9ybURhdGEuY2dGb250KCkpOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURh
dGEubV9zaXplOwotICAgIGZsb2F0IGFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2NlbnQsIHVu
aXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGRlc2NlbnQgPSAtc2NhbGVFbVRvVW5p
dHMoaURlc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGNhcEhlaWdo
dCA9IHNjYWxlRW1Ub1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwot
ICAgIAotICAgIGZsb2F0IGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwgdW5pdHNQ
ZXJFbSkgKiBwb2ludFNpemU7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCBUaW1lcywgSGVs
dmV0aWNhLCBhbmQgQ291cmllciB0byBjbG9zZWx5IG1hdGNoIHRoZQotICAgIC8vIHZlcnRpY2Fs
IG1ldHJpY3Mgb2YgdGhlaXIgTWljcm9zb2Z0IGNvdW50ZXJwYXJ0cyB0aGF0IGFyZSB0aGUgZGUg
ZmFjdG8KLSAgICAvLyB3ZWIgc3RhbmRhcmQuIFRoZSBBcHBLaXQgYWRqdXN0bWVudCBvZiAyMCUg
aXMgdG9vIGJpZyBhbmQgaXMKLSAgICAvLyBpbmNvcnJlY3RseSBhZGRlZCB0byBsaW5lIHNwYWNp
bmcsIHNvIHdlIHVzZSBhIDE1JSBhZGp1c3RtZW50IGluc3RlYWQKLSAgICAvLyBhbmQgYWRkIGl0
IHRvIHRoZSBhc2NlbnQuCi0gICAgTlNTdHJpbmcgKmZhbWlseU5hbWUgPSBbbV9wbGF0Zm9ybURh
dGEubnNGb250KCkgZmFtaWx5TmFtZV07Ci0gICAgaWYgKFtmYW1pbHlOYW1lIGlzRXF1YWxUb1N0
cmluZzpAIlRpbWVzIl0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiSGVsdmV0aWNh
Il0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQ291cmllciJdKQotICAgICAgICBh
c2NlbnQgKz0gZmxvb3JmKCgoYXNjZW50ICsgZGVzY2VudCkgKiAwLjE1ZikgKyAwLjVmKTsKLQot
ICAgIC8vIENvbXB1dGUgYW5kIHN0b3JlIGxpbmUgc3BhY2luZywgYmVmb3JlIHRoZSBsaW5lIG1l
dHJpY3MgaGFja3MgYXJlIGFwcGxpZWQuCi0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2lu
Zyhscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKSk7
Ci0KLSAgICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxvdyByb29tIGZvciBt
YXJrZWQgdGV4dCB1bmRlcmxpbmVzLgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81Mzg2MTgzPgot
ICAgIGlmIChkZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgW2ZhbWlseU5hbWUgaGFzUHJl
Zml4OkAiSGlyYWdpbm8iXSkgewotICAgICAgICBsaW5lR2FwIC09IDMgLSBkZXNjZW50OwotICAg
ICAgICBkZXNjZW50ID0gMzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkK
LSAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhtX3Bs
YXRmb3JtRGF0YS5jdEZvbnQoKSk7Ci0KLSAgICBmbG9hdCB4SGVpZ2h0OwotCi0gICAgaWYgKHBs
YXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewotICAgICAgICAvLyBN
ZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3Ig
aXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCi0gICAgICAg
IC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUg
Z2x5cGggdGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCi0gICAgICAgIE5TR2x5cGggeEdseXBo
ID0gZ2x5cGhGb3JDaGFyYWN0ZXIoJ3gnKTsKLSAgICAgICAgaWYgKHhHbHlwaCkKLSAgICAgICAg
ICAgIHhIZWlnaHQgPSAtQ0dSZWN0R2V0TWluWShwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKHhHbHlw
aCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMo
Q0dGb250R2V0WEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSksIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplOwotICAgIH0gZWxzZQotICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxSaWdodE9y
aWVudGF0aW9uRm9udCgpLT5mb250TWV0cmljcygpLnhIZWlnaHQoKTsKLQotICAgIG1fZm9udE1l
dHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFz
Y2VudChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKLSAg
ICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOwotICAgIG1fZm9udE1ldHJp
Y3Muc2V0TGluZUdhcChsaW5lR2FwKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhl
aWdodCk7Ci19Ci0KLXN0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIEZvdXJDaGFyQ29kZSB0YWJsZU5hbWUpCi17Ci0gICAg
cmV0dXJuIENHRm9udENvcHlUYWJsZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCksIHRhYmxl
TmFtZSk7Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKLXsKLSAgICBt
X2F2Z0NoYXJXaWR0aCA9IDA7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwOwotICAgIAotICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IG9zMlRhYmxlID0gYWRvcHRDRihjb3B5Rm9udFRhYmxlRm9yVGFn
KG1fcGxhdGZvcm1EYXRhLCAnT1MvMicpKTsKLSAgICBpZiAob3MyVGFibGUgJiYgQ0ZEYXRhR2V0
TGVuZ3RoKG9zMlRhYmxlLmdldCgpKSA+PSA0KSB7Ci0gICAgICAgIGNvbnN0IFVJbnQ4KiBvczIg
PSBDRkRhdGFHZXRCeXRlUHRyKG9zMlRhYmxlLmdldCgpKTsKLSAgICAgICAgU0ludDE2IG9zMkF2
Z0NoYXJXaWR0aCA9IG9zMlsyXSAqIDI1NiArIG9zMlszXTsKLSAgICAgICAgbV9hdmdDaGFyV2lk
dGggPSBzY2FsZUVtVG9Vbml0cyhvczJBdmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MudW5pdHNQ
ZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLm1fc2l6ZTsKLSAgICB9Ci0KLSAgICBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBoZWFkVGFibGUgPSBhZG9wdENGKGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0
Zm9ybURhdGEsICdoZWFkJykpOwotICAgIGlmIChoZWFkVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3Ro
KGhlYWRUYWJsZS5nZXQoKSkgPj0gNDIpIHsKLSAgICAgICAgY29uc3QgVUludDgqIGhlYWQgPSBD
RkRhdGFHZXRCeXRlUHRyKGhlYWRUYWJsZS5nZXQoKSk7Ci0gICAgICAgIHVzaG9ydCB1eE1pbiA9
IGhlYWRbMzZdICogMjU2ICsgaGVhZFszN107Ci0gICAgICAgIHVzaG9ydCB1eE1heCA9IGhlYWRb
NDBdICogMjU2ICsgaGVhZFs0MV07Ci0gICAgICAgIFNJbnQxNiB4TWluID0gc3RhdGljX2Nhc3Q8
U0ludDE2Pih1eE1pbik7Ci0gICAgICAgIFNJbnQxNiB4TWF4ID0gc3RhdGljX2Nhc3Q8U0ludDE2
Pih1eE1heCk7Ci0gICAgICAgIGZsb2F0IGRpZmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeE1heCAt
IHhNaW4pOwotICAgICAgICBtX21heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKGRpZmYsIG1f
Zm9udE1ldHJpY3MudW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLm1fc2l6ZTsKLSAgICB9
Ci0KLSAgICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGltYXRlLCB3aGljaCB3
aWxsIHBvcHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9zaXRpdmUuCi0gICAg
aW5pdENoYXJXaWR0aHMoKTsKLX0KLSNlbmRpZiAvLyBVU0UoQVBQS0lUKQotCi12b2lkIEZvbnQ6
OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TKQotUGFzc1JlZlB0
cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgaWYgKGlzQ3VzdG9tRm9udCgp
KSB7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURh
dGEpOwotICAgICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3Np
emUgKiBzY2FsZUZhY3RvcjsKLSAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShzY2FsZWRGb250
RGF0YSwgdHJ1ZSwgZmFsc2UpOwotICAgIH0KLQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLSAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICogc2NhbGVGYWN0
b3I7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShbW05TRm9udE1hbmFnZXIg
c2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHRv
U2l6ZTpzaXplXSwgc2l6ZSwgZmFsc2UsIGZhbHNlLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlv
bigpKTsKLQotICAgIC8vIEFwcEtpdCByZXNldHMgdGhlIHR5cGUgaW5mb3JtYXRpb24gKHNjcmVl
bi9wcmludGVyKSB3aGVuIHlvdSBjb252ZXJ0IGEgZm9udCB0byBhIGRpZmZlcmVudCBzaXplLgot
ICAgIC8vIFdlIGhhdmUgdG8gZml4IHVwIHRoZSBmb250IHRoYXQgd2UncmUgaGFuZGVkIGJhY2su
Ci0gICAgc2NhbGVkRm9udERhdGEuc2V0TlNGb250KFtzY2FsZWRGb250RGF0YS5uc0ZvbnQoKSBw
cmludGVyRm9udF0pOwotCi0gICAgaWYgKHNjYWxlZEZvbnREYXRhLmZvbnQoKSkgewotICAgICAg
ICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRN
YW5hZ2VyXTsKLSAgICAgICAgTlNGb250VHJhaXRNYXNrIGZvbnRUcmFpdHMgPSBbZm9udE1hbmFn
ZXIgdHJhaXRzT2ZGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpXTsKLQotICAgICAgICBpZiAo
bV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkKQotICAgICAgICAgICAgZm9udFRyYWl0cyB8
PSBOU0JvbGRGb250TWFzazsKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGlj
T2JsaXF1ZSkKLSAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0gTlNJdGFsaWNGb250TWFzazsKLQot
ICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgc2NhbGVkRm9udFRyYWl0cyA9IFtmb250TWFuYWdlciB0
cmFpdHNPZkZvbnQ6c2NhbGVkRm9udERhdGEubnNGb250KCldOwotICAgICAgICBzY2FsZWRGb250
RGF0YS5tX3N5bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKSAmJiAh
KHNjYWxlZEZvbnRUcmFpdHMgJiBOU0JvbGRGb250TWFzayk7Ci0gICAgICAgIHNjYWxlZEZvbnRE
YXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzaykg
JiYgIShzY2FsZWRGb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzayk7Ci0KLSAgICAgICAgcmV0
dXJuIGZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEoc2NhbGVkRm9udERhdGEpOwotICAg
IH0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQotewotICAgIE5TRm9udCogZiA9IG1fcGxhdGZv
cm1EYXRhLm5zRm9udCgpOwotICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLgotICAgIC8v
IEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNob3VsZCB0cmVhdCBP
c2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCB0aGUgQXBwS2l0IGRv
ZXMgbm90IHJlcG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgotCi0gICAgLy8gU3BlY2lh
bCBjYXNlIE1TLVBHb3RoaWMuCi0gICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS80
MDMyOTM4Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNoLgot
ICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhpYyBhcyBmaXhlZCBw
aXRjaC4KLQotICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlwZUNvcnNpdmEKLSAgICAvLyBBY2Nv
cmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1v
bm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLSAgICAvLyBOb3RlIHRoYXQgQXBwS2l0IGRv
ZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLQotICAgIE5TU3RyaW5n
ICpuYW1lID0gW2YgZm9udE5hbWVdOwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoW2YgaXNG
aXhlZFBpdGNoXSB8fCBbZiBfaXNGYWtlRml4ZWRQaXRjaF0gfHwKLSAgICAgICAgICAgW25hbWUg
Y2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9PSBOU09yZGVyZWRTYW1lKSAm
JgotICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMtUEdvdGhpYyJd
ICE9IE5TT3JkZXJlZFNhbWUgJiYKLSAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29t
cGFyZTpAIk1vbm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7Ci19Ci0jZW5kaWYgLy8g
IVBMQVRGT1JNKElPUykKLQotRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OwotICAgIGJv
dW5kaW5nQm94ID0gQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0
YS5jdEZvbnQoKSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IGtD
VEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uIDoga0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwg
JmdseXBoLCAwLCAxKTsKLSAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0JveC5tYXhZKCkp
OwotICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIGJvdW5kaW5nQm94LnNl
dFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOwotCi0g
ICAgcmV0dXJuIGJvdW5kaW5nQm94OwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotaW5saW5lIENH
Rm9udFJlbmRlcmluZ1N0eWxlIEZvbnQ6OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKLXsKLSAgICBD
R0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlh
c2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250
UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbjsKLSAgICBOU0ZvbnQgKmZvbnQgPSBw
bGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsKLSAgICBpZiAoZm9udCkgewotICAgICAgICBzd2l0Y2gg
KFtmb250IHJlbmRlcmluZ01vZGVdKSB7Ci0gICAgICAgIGNhc2UgTlNGb250SW50ZWdlckFkdmFu
Y2VtZW50c1JlbmRlcmluZ01vZGU6Ci0gICAgICAgICAgICBzdHlsZSA9IDA7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBOU0ZvbnRBbnRpYWxpYXNlZEludGVnZXJBZHZhbmNlbWVu
dHNSZW5kZXJpbmdNb2RlOgotICAgICAgICAgICAgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5
bGVBbnRpYWxpYXNpbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdHlsZTsKLX0K
LQotaW5saW5lIGJvb2wgRm9udDo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCBnbHlw
aCwgQ0dTaXplJiBhZHZhbmNlKSBjb25zdAotewotICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3Jt
RGF0YSgpLm5zRm9udCgpOwotICAgIGlmICghZm9udCB8fCAhcGxhdGZvcm1EYXRhKCkuaXNDb2xv
ckJpdG1hcEZvbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGFkdmFuY2UgPSBOU1Np
emVUb0NHU2l6ZShbZm9udCBhZHZhbmNlbWVudEZvckdseXBoOmdseXBoXSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGJvb2wgaGFzQ3VzdG9tVHJhY2tpbmcoQ1RGb250
UmVmIGZvbnQpCi17Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEIDwgMTA5MAotICAgIFVOVVNFRF9QQVJBTShmb250KTsKLSAgICByZXR1cm4gZmFs
c2U7Ci0jZWxzZQotICAgIHJldHVybiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRv
cHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCkpLmdldCgpKTsKLSNlbmRpZgotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNFbW9qaShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0
Zm9ybURhdGEpCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHJldHVybiBwbGF0Zm9ybURhdGEu
bV9pc0Vtb2ppOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocGxhdGZvcm1EYXRhKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotaW5saW5lIGJvb2wgRm9udDo6Y2FuVXNlRmFzdEds
eXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1
bGF0ZWRBZHZhbmNlKSBjb25zdAotewotICAgIC8vIEZhc3QgZ2V0dGVyIGRvZXNuJ3QgdGFrZSBj
dXN0b20gdHJhY2tpbmcgaW50byBhY2NvdW50Ci0gICAgaWYgKGhhc0N1c3RvbVRyYWNraW5nKHBs
YXRmb3JtRGF0YSgpLmN0Rm9udCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIEZh
c3QgZ2V0dGVyIGRvZXNuJ3Qgd29yayBmb3IgZW1vamkKLSAgICBpZiAoaXNFbW9qaShwbGF0Zm9y
bURhdGEoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyAuLi4gb3IgZm9yIGFueSBi
aXRtYXAgZm9udHMgaW4gZ2VuZXJhbAotICAgIGlmIChhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250
KGdseXBoLCBhZHZhbmNlKSkgewotICAgICAgICBwb3B1bGF0ZWRBZHZhbmNlID0gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZmxvYXQg
Rm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIENH
U2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKLSAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWw7Ci0gICAgYm9vbCBwb3B1bGF0ZWRB
ZHZhbmNlID0gZmFsc2U7Ci0gICAgaWYgKChob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3Jh
cGhGYWxsYmFjaykgJiYgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihnbHlwaCwgYWR2YW5j
ZSwgcG9wdWxhdGVkQWR2YW5jZSkpIHsKLSAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gcGxhdGZv
cm1EYXRhKCkubV9zaXplOwotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwotICAgICAgICBpZiAoIUNH
Rm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgJm0s
IHJlbmRlcmluZ1N0eWxlKCksICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7Ci0gICAgICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDR0ZvbnRDb3B5RnVsbE5h
bWUocGxhdGZvcm1EYXRhKCkuY2dGb250KCkpKTsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIGNhY2hlIGdseXBoIHdpZHRocyBmb3IgJUAgJWYiLCBmdWxsTmFtZS5nZXQoKSwgcG9p
bnRTaXplKTsKLSAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIGlmICghcG9wdWxhdGVkQWR2YW5jZSkKLSAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNG
b3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGhvcml6b250YWwgPyBrQ1RGb250SG9y
aXpvbnRhbE9yaWVudGF0aW9uIDoga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24sICZnbHlwaCwg
JmFkdmFuY2UsIDEpOwotCi0gICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0Jv
bGRPZmZzZXQ7Ci19Ci0KLXN0cnVjdCBQcm92aWRlckluZm8gewotICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzOwotICAgIHNpemVfdCBsZW5ndGg7Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVmIGF0dHJp
YnV0ZXM7Ci19OwotCi1zdGF0aWMgY29uc3QgVW5pQ2hhciogcHJvdmlkZVN0cmluZ0FuZEF0dHJp
YnV0ZXMoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY291bnQsIENGRGljdGlvbmFyeVJl
ZiogYXR0cmlidXRlcywgdm9pZCogY29udGV4dCkKLXsKLSAgICBQcm92aWRlckluZm8qIGluZm8g
PSBzdGF0aWNfY2FzdDxzdHJ1Y3QgUHJvdmlkZXJJbmZvKj4oY29udGV4dCk7Ci0gICAgaWYgKHN0
cmluZ0luZGV4IDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0cmluZ0luZGV4KSA+PSBpbmZv
LT5sZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgKmNvdW50ID0gaW5mby0+bGVuZ3Ro
IC0gc3RyaW5nSW5kZXg7Ci0gICAgKmF0dHJpYnV0ZXMgPSBpbmZvLT5hdHRyaWJ1dGVzOwotICAg
IHJldHVybiBpbmZvLT5jaGFyYWN0ZXJzICsgc3RyaW5nSW5kZXg7Ci19Ci0KLWJvb2wgRm9udDo6
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LQotICAgIGlmICghbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQpCi0gICAgICAg
IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0ID0gc3RkOjptYWtlX3VuaXF1ZTxI
YXNoTWFwPFN0cmluZywgYm9vbD4+KCk7Ci0KLSAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBib29s
Pjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBw
b3J0LT5hZGQoU3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCksIGZhbHNlKTsKLSAgICBpZiAoIWFk
ZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKLQotICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGZvbnRFcXVhbGl0eU9iamVjdCA9IHBs
YXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKLQotICAgIFByb3ZpZGVySW5m
byBpbmZvID0geyBjaGFyYWN0ZXJzLCBsZW5ndGgsIGdldENGU3RyaW5nQXR0cmlidXRlcygwLCBw
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKSB9OwotICAgIFJldGFpblB0cjxDVExpbmVSZWY+
IGxpbmUgPSBhZG9wdENGKENUTGluZUNyZWF0ZVdpdGhVbmlDaGFyUHJvdmlkZXIoJnByb3ZpZGVT
dHJpbmdBbmRBdHRyaWJ1dGVzLCAwLCAmaW5mbykpOwotCi0gICAgQ0ZBcnJheVJlZiBydW5BcnJh
eSA9IENUTGluZUdldEdseXBoUnVucyhsaW5lLmdldCgpKTsKLSAgICBDRkluZGV4IHJ1bkNvdW50
ID0gQ0ZBcnJheUdldENvdW50KHJ1bkFycmF5KTsKLQotICAgIGZvciAoQ0ZJbmRleCByID0gMDsg
ciA8IHJ1bkNvdW50OyByKyspIHsKLSAgICAgICAgQ1RSdW5SZWYgY3RSdW4gPSBzdGF0aWNfY2Fz
dDxDVFJ1blJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChydW5BcnJheSwgcikpOwotICAgICAg
ICBBU1NFUlQoQ0ZHZXRUeXBlSUQoY3RSdW4pID09IENUUnVuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBDRkRpY3Rpb25hcnlSZWYgcnVuQXR0cmlidXRlcyA9IENUUnVuR2V0QXR0cmlidXRlcyhjdFJ1
bik7Ci0gICAgICAgIENURm9udFJlZiBydW5Gb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihD
RkRpY3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250QXR0cmlidXRlTmFtZSkp
OwotICAgICAgICBpZiAoIUNGRXF1YWwoZm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBGb250UGxh
dGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkZvbnQpLmdldCgpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245758</attachid>
            <date>2015-01-30 16:44:45 -0800</date>
            <delta_ts>2015-01-30 16:57:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141101-20150130164452.patch</filename>
            <type>text/plain</type>
            <size>81581</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3OTQyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE1LTAxLTMwICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWVyZ2UgU2ltcGxlRm9udERhdGFJT1Mu
bW0gYW5kIFNpbXBsZUZvbnREYXRhTWFjLm1tIGludG8gRm9udENvY29hLm1tCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDExMDEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlIFNpbXBsZUZvbnREYXRhSU9TLm1tIGFu
ZCBTaW1wbGVGb250RGF0YU1hYy5tbS4gQWRkIEZvbnRDb2NvYS5tbS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgUmVtb3ZlIGEgZmV3IENHIG9ubHkgZnVu
Y3Rpb25zIGZyb20gdGhlIGhlYWRlciB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBzdGF0aWMg
ZnVuY3Rpb25zCisgICAgICAgIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxlLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0uCisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxh
dGZvcm1DcmVhdGVTY2FsZWRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRldGVybWlu
ZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmluZ1N0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6aGFz
Q3VzdG9tVHJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuVXNlRmFzdEdseXBoQWR2YW5j
ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29weUZvbnRUYWJsZUZvclRhZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250OjpyZW5kZXJpbmdTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIE1lcmdl
IGluIHRoZSBpT1Mgc3BlY2lmaWMgcGFydHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOiBSZW1vdmVkLgorCiAyMDE1LTAxLTMw
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIE1lbW9y
eUNhY2hlIGNvZGUgdG8gdXNlIG1vcmUgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzk0MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzOTYsNyArMTM5Niw2IEBACiAJ
CTM3RERDREE3MTM4NDUwMUMwMDA4Qjc5MyAvKiBNSFRNTFBhcnNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdERENEQTMxMzg0NTAxQzAwMDhCNzkz
IC8qIE1IVE1MUGFyc2VyLmggKi87IH07CiAJCTM3RTM1MjRCMTI0NTBDNTIwMEJBRjVEOSAvKiBJ
bnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzdFMzUyNEExMjQ1MEM1MjAwQkFGNUQ5IC8qIElucHV0VHlwZS5jcHAgKi87IH07CiAJCTM3
RTM1MjREMTI0NTBDNjYwMEJBRjVEOSAvKiBJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RTM1MjRDMTI0NTBDNjYwMEJBRjVEOSAvKiBJ
bnB1dFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkzN0U2NTk1MDE2M0IxMEMyMDBFQjQ1NzQgLyogU2ltcGxlRm9udERhdGFJT1MubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0U2NTk0RjE2M0Ix
MEMyMDBFQjQ1NzQgLyogU2ltcGxlRm9udERhdGFJT1MubW0gKi87IH07CiAJCTM3RjU2N0NFMTY1
MzU4RjQwMERERTkyQiAvKiBQb3B1cE9wZW5pbmdPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8q
IFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMzdGNTdBQjkxQTUwNzI2OTAwODc2Rjk4IC8qIEFjY2Vzc2liaWxp
dHlBUklBR3JpZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyOTgxQ0E5RDEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNw
cCAqLzsgfTsKIAkJMzdGNTdBQkExQTUwNzI2RjAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlBUklB
R3JpZENlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjk4MUNBOUUxMzE4MjJFQzAwRDEyRjJBIC8qIEFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwu
Y3BwICovOyB9OwpAQCAtMjQ3NSw2ICsyNDc0LDcgQEAKIAkJN0M0OEE2RDAxOTFDOUQ2NTAwMDI2
Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzQ4QTZDRTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNw
YWNlLmNwcCAqLzsgfTsKIAkJN0M0OEE2RDExOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVz
cGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0
OEE2Q0YxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5oICovOyB9OwogCQk3QzQ5
MDJBMjE4QjgyNUY4MDA3RDkyOTggLyogRE9NV2hlZWxFdmVudEludGVybmFsLmggaW4gQ29weSBH
ZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTk4
OURDQTBBQ0M4QkJEMDBBMEJDNTEgLyogRE9NV2hlZWxFdmVudEludGVybmFsLmggKi87IH07CisJ
CTdDNEVERDc0MUE3QjYwNzgwMDE5OEM0RCAvKiBGb250Q29jb2EubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQg
LyogRm9udENvY29hLm1tICovOyB9OwogCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5z
cGVjdG9yT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5jcHAg
Ki87IH07CiAJCTdDNTM0M0ZDMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0M1MzQzRkExN0I3NEI2MzAwNDIzMkYwIC8qIEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAg
Ki87IH07CiAJCTdDNTM0M0ZEMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
NTM0M0ZCMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCAqLzsg
fTsKQEAgLTQ2ODcsNyArNDY4Nyw2IEBACiAJCUIyQUZGQzdDMEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250Q2FjaGVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkFGRkM3NDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhY2hlTWFjLm1tICovOyB9Owog
CQlCMkFGRkM3RDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM3NTBE
MDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi87IH07CiAJCUIy
QUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM3NjBEMDBBNUMx
MDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oICovOyB9OwotCQlCMkFGRkM3RjBE
MDBBNUMxMDAzMDA3NEQgLyogU2ltcGxlRm9udERhdGFNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM3NzBEMDBBNUMxMDAzMDA3NEQgLyog
U2ltcGxlRm9udERhdGFNYWMubW0gKi87IH07CiAJCUIyQUZGQzgwMEQwMEE1QzEwMDMwMDc0RCAv
KiBGb250Q2FzY2FkZUNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29jb2Eu
bW0gKi87IH07CiAJCUIyQUZGQzgzMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VNYWMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBRkZDN0Iw
RDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi87IH07CiAJCUIyQUZGQzk3MEQw
MEE1REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQUZGQzhDMEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0
Qm91bmRhcmllcy5tbSAqLzsgfTsKQEAgLTg0NjUsNyArODQ2NCw2IEBACiAJCTM3RERDREEzMTM4
NDUwMUMwMDA4Qjc5MyAvKiBNSFRNTFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNSFRNTFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0Uz
NTI0QTEyNDUwQzUyMDBCQUY1RDkgLyogSW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3RTM1MjRDMTI0NTBDNjYwMEJBRjVEOSAvKiBJbnB1dFR5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRh
SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0Y4MThGQjBENjU3NjA2MDA1
RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFGQUQg
LyogVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTY1OSw2ICs5NjU3LDcgQEAKIAkJN0M0OEE2Q0UxOTFDOUQ2NTAwMDI2
Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJLaXROYW1lc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzQ4QTZDRjE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdE5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzQ4QTZEMjE5MUM5RDhFMDAwMjY2NzQgLyogV2ViS2l0TmFtZXNw
YWNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBXZWJLaXROYW1lc3BhY2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENvY29hLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9y
T3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0
b3JPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M1MjJENEExNUI0
NzhCMjAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzUzNDNGQTE3Qjc0QjYzMDA0MjMyRjAgLyogSlNNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjA5MCw3ICsx
MjA4OSw2IEBACiAJCUIyQUZGQzc0MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q2FjaGVNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhY2hlTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkFGRkM3NTBEMDBBNUMxMDAzMDA3NEQg
LyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQUZGQzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQUZGQzc3MEQwMEE1
QzEwMDMwMDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBTaW1wbGVGb250RGF0YU1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2Nh
ZGVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDN0IwRDAwQTVD
MTAwMzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR2x5cGhQYWdlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJBRkZDODUwRDAwQTVERjAwMzAwNzREIC8qIGNoYXJhY3Rlci1zZXRzLnR4dCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gImNoYXJhY3Rlci1zZXRzLnR4dCI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNTczNCw3ICsxNTczMiw2IEBACiAJCQkJQzU4MzYxQTgxNzQ0NTIzRjAw
MTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSAqLywKIAkJCQkzMUFCNEZGRjEyMjg3OEEyMDAx
QTdEQjAgLyogR3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLywKIAkJCQlGRUQxM0QzRjBDRUE5Mzk0
MDBEODk0NjYgLyogSWNvbklPUy5tbSAqLywKLQkJCQkzN0U2NTk0RjE2M0IxMEMyMDBFQjQ1NzQg
LyogU2ltcGxlRm9udERhdGFJT1MubW0gKi8sCiAJCQkJQ0VFQzYwMzQxODdERDk2MjAwM0U0M0JC
IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLmggKi8sCiAJCQkJQ0RDQTgyOTQxNjc5MTAw
RjAwODc1NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tICovLAogCQkJKTsKQEAg
LTIwNDY2LDcgKzIwNDYzLDYgQEAKIAkJCQlDRDYwQzBDNDE5M0U4N0M3MDAzQzY1NkIgLyogTWVk
aWFUaW1lUVRLaXQubW0gKi8sCiAJCQkJMkQ2RTQ2ODIxN0Q2NjBGNTAwRUNGOEJCIC8qIFBERkRv
Y3VtZW50SW1hZ2VNYWMubW0gKi8sCiAJCQkJMTYzRTg4RjUxMThBMzlEMjAwRUQ5MjMxIC8qIFNp
bXBsZUZvbnREYXRhQ29yZVRleHQuY3BwICovLAotCQkJCUIyQUZGQzc3MEQwMEE1QzEwMDMwMDc0
RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSAqLywKIAkJCQk0OUZGQkYzRDExQzkzRUUzMDA2QTcx
MTggLyogV2ViR0xMYXllci5oICovLAogCQkJCTQ5RkZCRjNFMTFDOTNFRTMwMDZBNzExOCAvKiBX
ZWJHTExheWVyLm1tICovLAogCQkJCTBGQ0YzMzJCMEYyQjlBMjUwMDRCNjc5NSAvKiBXZWJMYXll
ci5oICovLApAQCAtMjA3OTksNiArMjA3OTUsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVD
b2NvYS5tbSAqLywKKwkJCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1t
ICovLAogCQkJCUI1MzIwRDZBMTIyQTI0RTkwMDJEMTQ0MCAvKiBGb250UGxhdGZvcm1EYXRhQ29j
b2EubW0gKi8sCiAJCQkJMkQwQjRBQTkxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oICov
LAogCQkJCTJEMEI0QUFBMThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UubW0gKi8sCkBAIC0y
OTU0NSw4ICsyOTU0Miw2IEBACiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJl
ZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTYzRTg4RjcxMThBMzlEMjAwRUQ5MjMx
IC8qIFNpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzdFNjU5
NTAxNjNCMTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQjJBRkZDN0YwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRhTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTQ4OTQ0QTIxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVM
YXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRFOUIxMUIxODE0NTY5MjAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzVBMUVB
N0MxNTJCQ0YwNDAwNEQwMEI2IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI5NjMwLDYgKzI5NjI1LDcgQEAKIAkJCQlFNDcxMjdDQTE2MzQzOEExMDBFRDZG
NUEgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzVFQjcyOTBFODFERTgxMDBCMjU5NjUgLyogU3R5bGVNYXJxdWVlRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY1MDI3MTEwMkJBOTZBMDA2NkYzOUEgLyogU3R5bGVNZWRpYS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk3QzRFREQ3NDFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI3NEQwRTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVs
dGlDb2xEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2REZCMEExOTkwNjcwMDdGQjhD
NSAvKiBTdHlsZVByb3BlcnRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCMjUxMDYxNTJB
MEJBRjAwNjlCNzc5IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAx
Nzk0MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNiwxMiArMjM2LDYgQEAgcHJpdmF0ZToKICAgICBmbG9hdCB3aWR0aEZv
ckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRpZgogCi0jaWYgVVNFKENHKQotICAgIGJvb2wg
Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29s
JiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKLSAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5k
ZXJpbmdTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChH
bHlwaCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQg
aXMgYSBjb2xvciBiaXRtYXAgZm9udAotI2VuZGlmCi0KICAgICBGb250TWV0cmljcyBtX2ZvbnRN
ZXRyaWNzOwogICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOwogICAgIGZsb2F0IG1fYXZnQ2hhcldp
ZHRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDb2NvYS5tbQkocmV2aXNpb24gMTc5Mzg1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06MTc5Mzg1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiRm9udC5oIgorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNp
bXBvcnQgIkNvbG9yLmgiCisjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCisjaW1wb3J0ICJGbG9hdFJlY3QuaCIKKyNpbXBvcnQgIkZvbnRDYWNoZS5o
IgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKKyNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgor
I2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCisjaWYgVVNFKEFQUEtJVCkKKyNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KKyNpbXBvcnQg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbXBv
cnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKKyNpbXBvcnQgPGZsb2F0Lmg+CisjaW1w
b3J0IDx1bmljb2RlL3VjaGFyLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9y
dCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisjaWYg
IVBMQVRGT1JNKElPUykKK0BpbnRlcmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNyZXRBUEkpCist
IChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOworQGVuZAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmIFVTRShBUFBLSVQpCitzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlw
aHMoQ1RGb250UmVmIGN0Rm9udCkKK3sKKyAgICAvLyBUaGUgY2hlY2sgZG9lc24ndCBsb29rIG5l
YXQgYnV0IHRoaXMgaXMgd2hhdCBBcHBLaXQgZG9lcyBmb3IgdmVydGljYWwgd3JpdGluZy4uLgor
ICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlB
dmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAg
ICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOwor
ICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7
CisgICAgICAgIENURm9udFRhYmxlVGFnIHRhZyA9IChDVEZvbnRUYWJsZVRhZykodWludHB0cl90
KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCk7CisgICAgICAg
IGlmICh0YWcgPT0ga0NURm9udFRhYmxlVmhlYSB8fCB0YWcgPT0ga0NURm9udFRhYmxlVk9SRykK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3N0YXRpYyBib29sIGluaXRGb250RGF0YShGb250KiBmb250RGF0YSkKK3sKKyAgICBpZiAoIWZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250
RmFtaWx5KHZvaWQpCit7CisgICAgc3RhdGljIE5TU3RyaW5nICp3ZWJGYWxsYmFja0ZvbnRGYW1p
bHkgPSBbW1tOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxNi4wZl0gZmFtaWx5TmFtZV0gcmV0YWlu
XTsKKyAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250RmFtaWx5OworfQorCitjb25zdCBGb250KiBG
b250Ojpjb21wb3NpdGVGb250UmVmZXJlbmNlRm9udChOU0ZvbnQgKmtleSkgY29uc3QKK3sKKyAg
ICBpZiAoIWtleSB8fCBDRkVxdWFsKGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKENU
Rm9udFJlZihrZXkpKSkuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9t
Rm9udCgpKTsKKworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXJpdmVkRm9udERhdGEtPmNvbXBv
c2l0ZUZvbnRSZWZlcmVuY2VzLmFkZChrZXksIG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkgeworICAgICAgICBOU0ZvbnQgKnN1YnN0aXR1dGVGb250ID0gW2tleSBwcmlu
dGVyRm9udF07CisKKyAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gQ1RGb250
R2V0U3ltYm9saWNUcmFpdHMoKENURm9udFJlZilzdWJzdGl0dXRlRm9udCk7CisgICAgICAgIGJv
b2wgc3ludGhldGljQm9sZCA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY0JvbGQoKSAmJiAhKHRy
YWl0cyAmIGtDVEZvbnRCb2xkVHJhaXQpOworICAgICAgICBib29sIHN5bnRoZXRpY09ibGlxdWUg
PSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250
SXRhbGljVHJhaXQpOworCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc3Vic3RpdHV0ZVBsYXRm
b3JtKHN1YnN0aXR1dGVGb250LCBwbGF0Zm9ybURhdGEoKS5zaXplKCksIHN5bnRoZXRpY0JvbGQs
IHN5bnRoZXRpY09ibGlxdWUsIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCksIHBsYXRmb3Jt
RGF0YSgpLndpZHRoVmFyaWFudCgpKTsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IEZvbnQ6OmNyZWF0ZShzdWJzdGl0dXRlUGxhdGZvcm0sIGlzQ3VzdG9tRm9udCgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cit9CisKK3Zv
aWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBt
X3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyAxLjBmIDogMC5mOworCisgICAgYm9vbCBm
YWlsZWRTZXR1cCA9IGZhbHNlOworICAgIGlmICghaW5pdEZvbnREYXRhKHRoaXMpKSB7CisgICAg
ICAgIC8vIEFjayEgU29tZXRoaW5nIHZlcnkgYmFkIGhhcHBlbmVkLCBsaWtlIGEgY29ycnVwdCBm
b250LgorICAgICAgICAvLyBUcnkgbG9va2luZyBmb3IgYW4gYWx0ZXJuYXRlICdiYXNlJyBmb250
IGZvciB0aGlzIHJlbmRlcmVyLgorCisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBoYWNrIHRvIHVz
ZSAiVGltZXMgTmV3IFJvbWFuIiBpbiBwbGFjZSBvZiAiVGltZXMiLgorICAgICAgICAvLyAiVGlt
ZXMgUk8iIGlzIGEgY29tbW9uIGZvbnQgd2hvc2UgZmFtaWx5IG5hbWUgaXMgIlRpbWVzIi4KKyAg
ICAgICAgLy8gSXQgb3ZlcnJpZGVzIHRoZSBub3JtYWwgIlRpbWVzIiBmYW1pbHkgZm9udC4KKyAg
ICAgICAgLy8gSXQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYSBjb3JydXB0IHJlZ3VsYXIgdmFyaWFu
dC4KKyAgICAgICAgTlNTdHJpbmcgKmZhbGxiYWNrRm9udEZhbWlseTsKKyAgICAgICAgaWYgKFtb
bV9wbGF0Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV0gaXNFcXVhbDpAIlRpbWVzIl0pCisg
ICAgICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSBAIlRpbWVzIE5ldyBSb21hbiI7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9IHdlYkZhbGxiYWNrRm9u
dEZhbWlseSgpOworICAgICAgICAKKyAgICAgICAgLy8gVHJ5IHNldHRpbmcgdXAgdGhlIGFsdGVy
bmF0ZSBmb250LgorICAgICAgICAvLyBUaGlzIGlzIGEgbGFzdCBkaXRjaCBlZmZvcnQgdG8gdXNl
IGEgc3Vic3RpdHV0ZSBmb250IHdoZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25nLgorI2lmICFF
UlJPUl9ESVNBQkxFRAorICAgICAgICBSZXRhaW5QdHI8TlNGb250PiBpbml0aWFsRm9udCA9IG1f
cGxhdGZvcm1EYXRhLm5zRm9udCgpOworI2VuZGlmCisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0
YS5mb250KCkpCisgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW1tOU0ZvbnRN
YW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0Zv
bnQoKSB0b0ZhbWlseTpmYWxsYmFja0ZvbnRGYW1pbHldKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtOU0ZvbnQgZm9udFdpdGhOYW1lOmZhbGxi
YWNrRm9udEZhbWlseSBzaXplOm1fcGxhdGZvcm1EYXRhLnNpemUoKV0pOworICAgICAgICBpZiAo
IWluaXRGb250RGF0YSh0aGlzKSkgeworICAgICAgICAgICAgaWYgKFtmYWxsYmFja0ZvbnRGYW1p
bHkgaXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7CisgICAgICAgICAgICAgICAgLy8gT0ss
IGNvdWxkbid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGUgdG8gVGltZXMs
IGZhbGxiYWNrCisgICAgICAgICAgICAgICAgLy8gb24gdGhlIHN5c3RlbSBmb250LiAgSWYgdGhp
cyBmYWlscyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxlZnQuCisgICAgICAgICAgICAgICAgbV9w
bGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0g
Y29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6d2ViRmFsbGJhY2tG
b250RmFtaWx5KCldKTsKKyAgICAgICAgICAgICAgICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCwgVGltZXMsIFRpbWVzIE5ldyBSb21h
biwgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCisgICAg
ICAgICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250
ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBmYWlsZWRTZXR1
cCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRoZSBzeXN0ZW0g
Zm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCisgICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQo
KSk7CisgICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gUmVwb3J0IHRoZSBwcm9ibGVtLgorICAgICAgICBMT0df
RVJST1IoIkNvcnJ1cHQgZm9udCBkZXRlY3RlZCwgdXNpbmcgJUAgaW4gcGxhY2Ugb2YgJUAuIiwK
KyAgICAgICAgICAgIFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXSwgW2luaXRp
YWxGb250LmdldCgpIGZhbWlseU5hbWVdKTsKKyAgICB9CisKKyAgICAvLyBJZiBhbGwgZWxzZSBm
YWlscywgdHJ5IHRvIHNldCB1cCB1c2luZyB0aGUgc3lzdGVtIGZvbnQuCisgICAgLy8gVGhpcyBp
cyBwcm9iYWJseSBiZWNhdXNlIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9tYW4gYXJlIGJvdGggdW5h
dmFpbGFibGUuCisgICAgaWYgKGZhaWxlZFNldHVwKSB7CisgICAgICAgIG1fcGxhdGZvcm1EYXRh
LnNldE5TRm9udChbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W21fcGxhdGZvcm1EYXRhLm5zRm9u
dCgpIHBvaW50U2l6ZV1dKTsKKyAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHVwIGZv
bnQsIHVzaW5nIHN5c3RlbSBmb250ICVzIiwgbV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICAg
ICAgaW5pdEZvbnREYXRhKHRoaXMpOworICAgIH0KKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAv
LyBXb3JrIGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vMTk0MzM0OTA+CisgICAgQ0dHbHlwaCBkdW1t
eUdseXBoc1tdID0gezAsIDB9OworICAgIENHU2l6ZSBkdW1teVNpemVbXSA9IHtDR1NpemVNYWtl
KDAsIDApLCBDR1NpemVNYWtlKDAsIDApfTsKKyAgICBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9w
bGF0Zm9ybURhdGEuY3RGb250KCksIGR1bW15R2x5cGhzLCBkdW1teVNpemUsIDIsIGtDVEZvbnRU
cmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyk7
CisjZW5kaWYKKyAgICAKKyAgICBpbnQgaUFzY2VudDsKKyAgICBpbnQgaURlc2NlbnQ7CisgICAg
aW50IGlDYXBIZWlnaHQ7CisgICAgaW50IGlMaW5lR2FwOworICAgIHVuc2lnbmVkIHVuaXRzUGVy
RW07CisgICAgaUFzY2VudCA9IENHRm9udEdldEFzY2VudChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQo
KSk7CisgICAgLy8gU29tZSBmb250cyBlcnJvbmVvdXNseSBzcGVjaWZ5IGEgcG9zaXRpdmUgZGVz
Y2VuZGVyIHZhbHVlLiBXZSBmb2xsb3cgQ29yZSBUZXh0IGluIGFzc3VtaW5nIHRoYXQKKyAgICAv
LyBzdWNoIGZvbnRzIG1lYW50IHRoZSBzYW1lIGRpc3RhbmNlLCBidXQgaW4gdGhlIHJldmVyc2Ug
ZGlyZWN0aW9uLgorICAgIGlEZXNjZW50ID0gLWFicyhDR0ZvbnRHZXREZXNjZW50KG1fcGxhdGZv
cm1EYXRhLmNnRm9udCgpKSk7CisgICAgaUNhcEhlaWdodCA9IENHRm9udEdldENhcEhlaWdodCht
X3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisgICAgaUxpbmVHYXAgPSBDR0ZvbnRHZXRMZWFkaW5n
KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKTsKKyAgICB1bml0c1BlckVtID0gQ0dGb250R2V0VW5p
dHNQZXJFbShtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisKKyAgICBmbG9hdCBwb2ludFNpemUg
PSBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CisgICAgZmxvYXQgYXNjZW50ID0gc2NhbGVFbVRvVW5p
dHMoaUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxvYXQgZGVzY2VudCA9
IC1zY2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAg
ZmxvYXQgY2FwSGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoaUNhcEhlaWdodCwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemU7CisgICAgCisgICAgZmxvYXQgbGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKGlM
aW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKworICAgIC8vIFdlIG5lZWQgdG8gYWRq
dXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhlCisg
ICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRlcnBhcnRzIHRo
YXQgYXJlIHRoZSBkZSBmYWN0bworICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBhZGp1
c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcworICAgIC8vIGluY29ycmVjdGx5IGFkZGVk
IHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5zdGVhZAorICAg
IC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KKyAgICBOU1N0cmluZyAqZmFtaWx5TmFtZSA9
IFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXTsKKyAgICBpZiAoW2ZhbWlseU5h
bWUgaXNFcXVhbFRvU3RyaW5nOkAiVGltZXMiXSB8fCBbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJp
bmc6QCJIZWx2ZXRpY2EiXSB8fCBbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJDb3VyaWVy
Il0pCisgICAgICAgIGFzY2VudCArPSBmbG9vcmYoKChhc2NlbnQgKyBkZXNjZW50KSAqIDAuMTVm
KSArIDAuNWYpOworCisgICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgbGluZSBzcGFjaW5nLCBiZWZv
cmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBhcmUgYXBwbGllZC4KKyAgICBtX2ZvbnRNZXRyaWNz
LnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYoZGVzY2VudCkgKyBscm91
bmRmKGxpbmVHYXApKTsKKworICAgIC8vIEhhY2sgSGlyYWdpbm8gbGluZSBtZXRyaWNzIHRvIGFs
bG93IHJvb20gZm9yIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMuCisgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzUzODYxODM+CisgICAgaWYgKGRlc2NlbnQgPCAzICYmIGxpbmVHYXAgPj0gMyAmJiBbZmFt
aWx5TmFtZSBoYXNQcmVmaXg6QCJIaXJhZ2lubyJdKSB7CisgICAgICAgIGxpbmVHYXAgLT0gMyAt
IGRlc2NlbnQ7CisgICAgICAgIGRlc2NlbnQgPSAzOworICAgIH0KKyAgICAKKyAgICBpZiAocGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaygpKQorICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRp
Y2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKKworICAgIGZsb2F0IHhIZWlnaHQ7
CisKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsKSB7
CisgICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdz
IHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVl
ZCB0aGUKKyAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8gb25seSBpbmNsdWRlIHRoZSBw
b3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBiYXNlbGluZS4KKyAgICAgICAg
TlNHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNoYXJhY3RlcigneCcpOworICAgICAgICBpZiAoeEds
eXBoKQorICAgICAgICAgICAgeEhlaWdodCA9IC1DR1JlY3RHZXRNaW5ZKHBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgoeEdseXBoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHhIZWlnaHQgPSBz
Y2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSwg
dW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgfSBlbHNlCisgICAgICAgIHhIZWlnaHQgPSB2
ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCktPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOwor
CisgICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOworICAgIG1fZm9u
dE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50
KGRlc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7Cisg
ICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOworICAgIG1fZm9udE1ldHJpY3Mu
c2V0WEhlaWdodCh4SGVpZ2h0KTsKK30KKworc3RhdGljIENGRGF0YVJlZiBjb3B5Rm9udFRhYmxl
Rm9yVGFnKEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgRm91ckNoYXJDb2RlIHRhYmxl
TmFtZSkKK3sKKyAgICByZXR1cm4gQ0dGb250Q29weVRhYmxlRm9yVGFnKHBsYXRmb3JtRGF0YS5j
Z0ZvbnQoKSwgdGFibGVOYW1lKTsKK30KKwordm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aElu
aXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKKyAgICBtX21heENoYXJXaWR0aCA9IDA7
CisgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gb3MyVGFibGUgPSBhZG9wdENGKGNvcHlG
b250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdPUy8yJykpOworICAgIGlmIChvczJUYWJs
ZSAmJiBDRkRhdGFHZXRMZW5ndGgob3MyVGFibGUuZ2V0KCkpID49IDQpIHsKKyAgICAgICAgY29u
c3QgVUludDgqIG9zMiA9IENGRGF0YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkpOworICAgICAg
ICBTSW50MTYgb3MyQXZnQ2hhcldpZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNdOworICAgICAg
ICBtX2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwgbV9mb250
TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEubV9zaXplOworICAgIH0KKwor
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGhlYWRUYWJsZSA9IGFkb3B0Q0YoY29weUZvbnRUYWJs
ZUZvclRhZyhtX3BsYXRmb3JtRGF0YSwgJ2hlYWQnKSk7CisgICAgaWYgKGhlYWRUYWJsZSAmJiBD
RkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+PSA0MikgeworICAgICAgICBjb25zdCBV
SW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgpKTsKKyAgICAgICAg
dXNob3J0IHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKKyAgICAgICAgdXNob3J0
IHV4TWF4ID0gaGVhZFs0MF0gKiAyNTYgKyBoZWFkWzQxXTsKKyAgICAgICAgU0ludDE2IHhNaW4g
PSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKKyAgICAgICAgU0ludDE2IHhNYXggPSBzdGF0
aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKKyAgICAgICAgZmxvYXQgZGlmZiA9IHN0YXRpY19jYXN0
PGZsb2F0Pih4TWF4IC0geE1pbik7CisgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc2NhbGVFbVRv
VW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEu
bV9zaXplOworICAgIH0KKworICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0
aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1w
b3NpdGl2ZS4KKyAgICBpbml0Q2hhcldpZHRocygpOworfQorI2VuZGlmIC8vIFVTRShBUFBLSVQp
CisKK3ZvaWQgRm9udDo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKworI2lmICFQTEFURk9STShJ
T1MpCitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK3sKKyAgICBpZiAo
aXNDdXN0b21Gb250KCkpIHsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0
YShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxl
ZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOworICAgICAgICByZXR1cm4gRm9udDo6Y3Jl
YXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXpl
KCkgKiBzY2FsZUZhY3RvcjsKKyAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKFtb
TlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURh
dGEubnNGb250KCkgdG9TaXplOnNpemVdLCBzaXplLCBmYWxzZSwgZmFsc2UsIG1fcGxhdGZvcm1E
YXRhLm9yaWVudGF0aW9uKCkpOworCisgICAgLy8gQXBwS2l0IHJlc2V0cyB0aGUgdHlwZSBpbmZv
cm1hdGlvbiAoc2NyZWVuL3ByaW50ZXIpIHdoZW4geW91IGNvbnZlcnQgYSBmb250IHRvIGEgZGlm
ZmVyZW50IHNpemUuCisgICAgLy8gV2UgaGF2ZSB0byBmaXggdXAgdGhlIGZvbnQgdGhhdCB3ZSdy
ZSBoYW5kZWQgYmFjay4KKyAgICBzY2FsZWRGb250RGF0YS5zZXROU0ZvbnQoW3NjYWxlZEZvbnRE
YXRhLm5zRm9udCgpIHByaW50ZXJGb250XSk7CisKKyAgICBpZiAoc2NhbGVkRm9udERhdGEuZm9u
dCgpKSB7CisgICAgICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFn
ZXIgc2hhcmVkRm9udE1hbmFnZXJdOworICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgZm9udFRyYWl0
cyA9IFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCldOwor
CisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQpCisgICAgICAgICAg
ICBmb250VHJhaXRzIHw9IE5TQm9sZEZvbnRNYXNrOworICAgICAgICBpZiAobV9wbGF0Zm9ybURh
dGEubV9zeW50aGV0aWNPYmxpcXVlKQorICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBOU0l0YWxp
Y0ZvbnRNYXNrOworCisgICAgICAgIE5TRm9udFRyYWl0TWFzayBzY2FsZWRGb250VHJhaXRzID0g
W2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpzY2FsZWRGb250RGF0YS5uc0ZvbnQoKV07CisgICAg
ICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYgTlNCb2xk
Rm9udE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKTsKKyAgICAg
ICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBOU0l0
YWxpY0ZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKTsK
KworICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShzY2FsZWRG
b250RGF0YSk7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgTlNGb250
KiBmID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7CisgICAgLy8gU3BlY2lhbCBjYXNlIE9zYWth
LU1vbm8uCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8zOTk5NDY3Piwgd2Ug
c2hvdWxkIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0aGF0
IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCisK
KyAgICAvLyBTcGVjaWFsIGNhc2UgTVMtUEdvdGhpYy4KKyAgICAvLyBBY2NvcmRpbmcgdG8gPHJk
YXI6Ly9wcm9ibGVtLzQwMzI5Mzg+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1TLVBHb3RoaWMgYXMg
Zml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNUy1QR290
aGljIGFzIGZpeGVkIHBpdGNoLgorCisgICAgLy8gU3BlY2lhbCBjYXNlIE1vbm90eXBlQ29yc2l2
YQorICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcwND4sIHdlIHNob3Vs
ZCBub3QgdHJlYXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5vdGUg
dGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgor
CisgICAgTlNTdHJpbmcgKm5hbWUgPSBbZiBmb250TmFtZV07CisgICAgbV90cmVhdEFzRml4ZWRQ
aXRjaCA9IChbZiBpc0ZpeGVkUGl0Y2hdIHx8IFtmIF9pc0Zha2VGaXhlZFBpdGNoXSB8fAorICAg
ICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiT3Nha2EtTW9ubyJdID09IE5T
T3JkZXJlZFNhbWUpICYmCisgICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6
QCJNUy1QR290aGljIl0gIT0gTlNPcmRlcmVkU2FtZSAmJgorICAgICAgICAgICBbbmFtZSBjYXNl
SW5zZW5zaXRpdmVDb21wYXJlOkAiTW9ub3R5cGVDb3JzaXZhIl0gIT0gTlNPcmRlcmVkU2FtZTsK
K30KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCitGbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1C
b3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3g7CisgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhz
KG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24gOiBrQ1RGb250SG9yaXpvbnRh
bE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOworICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5k
aW5nQm94Lm1heFkoKSk7CisgICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAg
Ym91bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9s
ZE9mZnNldCk7CisKKyAgICByZXR1cm4gYm91bmRpbmdCb3g7Cit9CisKKyNpZiBQTEFURk9STShN
QUMpCitpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyaW5nU3R5bGUoKSBj
b25zdAoreworICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmlu
Z1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlv
bmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOworICAgIE5T
Rm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOworICAgIGlmIChmb250KSB7Cisg
ICAgICAgIHN3aXRjaCAoW2ZvbnQgcmVuZGVyaW5nTW9kZV0pIHsKKyAgICAgICAgY2FzZSBOU0Zv
bnRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZToKKyAgICAgICAgICAgIHN0eWxlID0g
MDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5TRm9udEFudGlhbGlhc2VkSW50
ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6CisgICAgICAgICAgICBzdHlsZSA9IGtDR0Zv
bnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHN0eWxlOworfQorCitpbmxpbmUgYm9vbCBGb250OjphZHZhbmNlRm9yQ29sb3JCaXRtYXBG
b250KEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UpIGNvbnN0Cit7CisgICAgTlNGb250ICpm
b250ID0gcGxhdGZvcm1EYXRhKCkubnNGb250KCk7CisgICAgaWYgKCFmb250IHx8ICFwbGF0Zm9y
bURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YWR2YW5jZSA9IE5TU2l6ZVRvQ0dTaXplKFtmb250IGFkdmFuY2VtZW50Rm9yR2x5cGg6Z2x5cGhd
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitzdGF0aWMgYm9vbCBoYXNDdXN0b21U
cmFja2luZyhDVEZvbnRSZWYgZm9udCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCisgICAgVU5VU0VEX1BBUkFNKGZvbnQpOwor
ICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIENURm9udERlc2NyaXB0b3JJc1N5
c3RlbVVJRm9udChhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihmb250KSkuZ2V0KCkp
OworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Vtb2ppKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IHBsYXRmb3JtRGF0YS5tX2lzRW1vamk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwbGF0Zm9y
bURhdGEpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBGb250
OjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFu
Y2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0Cit7CisgICAgLy8gRmFzdCBnZXR0ZXIg
ZG9lc24ndCB0YWtlIGN1c3RvbSB0cmFja2luZyBpbnRvIGFjY291bnQKKyAgICBpZiAoaGFzQ3Vz
dG9tVHJhY2tpbmcocGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgLy8gRmFzdCBnZXR0ZXIgZG9lc24ndCB3b3JrIGZvciBlbW9qaQorICAgIGlmIChp
c0Vtb2ppKHBsYXRmb3JtRGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIC4u
LiBvciBmb3IgYW55IGJpdG1hcCBmb250cyBpbiBnZW5lcmFsCisgICAgaWYgKGFkdmFuY2VGb3JD
b2xvckJpdG1hcEZvbnQoZ2x5cGgsIGFkdmFuY2UpKSB7CisgICAgICAgIHBvcHVsYXRlZEFkdmFu
Y2UgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworICAgIGJvb2wgaG9yaXpv
bnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbDsKKyAgICBi
b29sIHBvcHVsYXRlZEFkdmFuY2UgPSBmYWxzZTsKKyAgICBpZiAoKGhvcml6b250YWwgfHwgbV9p
c0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKSAmJiBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVy
KGdseXBoLCBhZHZhbmNlLCBwb3B1bGF0ZWRBZHZhbmNlKSkgeworICAgICAgICBmbG9hdCBwb2lu
dFNpemUgPSBwbGF0Zm9ybURhdGEoKS5tX3NpemU7CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3Jt
IG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7Cisg
ICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgp
LmNnRm9udCgpLCAmbSwgcmVuZGVyaW5nU3R5bGUoKSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsK
KyAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENH
Rm9udENvcHlGdWxsTmFtZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkpOworICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUgZ2x5cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1bGxO
YW1lLmdldCgpLCBwb2ludFNpemUpOworICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFwb3B1bGF0ZWRBZHZhbmNlKQorICAgICAgICBDVEZv
bnRHZXRBZHZhbmNlc0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgaG9yaXpvbnRh
bCA/IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24gOiBrQ1RGb250VmVydGljYWxPcmllbnRh
dGlvbiwgJmdseXBoLCAmYWR2YW5jZSwgMSk7CisKKyAgICByZXR1cm4gYWR2YW5jZS53aWR0aCAr
IG1fc3ludGhldGljQm9sZE9mZnNldDsKK30KKworc3RydWN0IFByb3ZpZGVySW5mbyB7CisgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnM7CisgICAgc2l6ZV90IGxlbmd0aDsKKyAgICBDRkRpY3Rp
b25hcnlSZWYgYXR0cmlidXRlczsKK307CisKK3N0YXRpYyBjb25zdCBVbmlDaGFyKiBwcm92aWRl
U3RyaW5nQW5kQXR0cmlidXRlcyhDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjb3VudCwg
Q0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiBjb250ZXh0KQoreworICAgIFByb3Zp
ZGVySW5mbyogaW5mbyA9IHN0YXRpY19jYXN0PHN0cnVjdCBQcm92aWRlckluZm8qPihjb250ZXh0
KTsKKyAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oc3RyaW5n
SW5kZXgpID49IGluZm8tPmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAqY291bnQg
PSBpbmZvLT5sZW5ndGggLSBzdHJpbmdJbmRleDsKKyAgICAqYXR0cmlidXRlcyA9IGluZm8tPmF0
dHJpYnV0ZXM7CisgICAgcmV0dXJuIGluZm8tPmNoYXJhY3RlcnMgKyBzdHJpbmdJbmRleDsKK30K
KworYm9vbCBGb250OjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3Vw
cG9ydCkKKyAgICAgICAgbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQgPSBzdGQ6
Om1ha2VfdW5pcXVlPEhhc2hNYXA8U3RyaW5nLCBib29sPj4oKTsKKworICAgIFdURjo6SGFzaE1h
cDxTdHJpbmcsIGJvb2w+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb21iaW5pbmdDaGFyYWN0
ZXJTZXF1ZW5jZVN1cHBvcnQtPmFkZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSwgZmFsc2Up
OworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOworCisgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gZm9udEVxdWFs
aXR5T2JqZWN0ID0gcGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpOworCisg
ICAgUHJvdmlkZXJJbmZvIGluZm8gPSB7IGNoYXJhY3RlcnMsIGxlbmd0aCwgZ2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzKDAsIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkpIH07CisgICAgUmV0YWlu
UHRyPENUTGluZVJlZj4gbGluZSA9IGFkb3B0Q0YoQ1RMaW5lQ3JlYXRlV2l0aFVuaUNoYXJQcm92
aWRlcigmcHJvdmlkZVN0cmluZ0FuZEF0dHJpYnV0ZXMsIDAsICZpbmZvKSk7CisKKyAgICBDRkFy
cmF5UmVmIHJ1bkFycmF5ID0gQ1RMaW5lR2V0R2x5cGhSdW5zKGxpbmUuZ2V0KCkpOworICAgIENG
SW5kZXggcnVuQ291bnQgPSBDRkFycmF5R2V0Q291bnQocnVuQXJyYXkpOworCisgICAgZm9yIChD
RkluZGV4IHIgPSAwOyByIDwgcnVuQ291bnQ7IHIrKykgeworICAgICAgICBDVFJ1blJlZiBjdFJ1
biA9IHN0YXRpY19jYXN0PENUUnVuUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHJ1bkFycmF5
LCByKSk7CisgICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChjdFJ1bikgPT0gQ1RSdW5HZXRUeXBl
SUQoKSk7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBydW5BdHRyaWJ1dGVzID0gQ1RSdW5HZXRB
dHRyaWJ1dGVzKGN0UnVuKTsKKyAgICAgICAgQ1RGb250UmVmIHJ1bkZvbnQgPSBzdGF0aWNfY2Fz
dDxDVEZvbnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJpYnV0ZXMsIGtDVEZvbnRB
dHRyaWJ1dGVOYW1lKSk7CisgICAgICAgIGlmICghQ0ZFcXVhbChmb250RXF1YWxpdHlPYmplY3Qu
Z2V0KCksIEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuRm9udCku
Z2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM3LDE5ICszNywyMSBAQAogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW1wb3J0
ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNp
bXBvcnQgPGZsb2F0Lmg+CisjaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+CisjaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCiAjaWYgVVNFKEFQUEtJVCkKICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQu
aD4KICNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgog
I2Vsc2UKKyNpbXBvcnQgIkZvbnRTZXJ2aWNlc0lPUy5oIgogI2ltcG9ydCA8Q29yZVRleHQvQ29y
ZVRleHQuaD4KICNlbmRpZgotI2ltcG9ydCA8ZmxvYXQuaD4KLSNpbXBvcnQgPHVuaWNvZGUvdWNo
YXIuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvU3RkTGliRXh0
cmFzLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKLSNpZiAhUExBVEZPUk0oSU9TKQor
I2lmIFVTRShBUFBLSVQpCiBAaW50ZXJmYWNlIE5TRm9udCAoV2ViQXBwS2l0U2VjcmV0QVBJKQog
LSAoQk9PTClfaXNGYWtlRml4ZWRQaXRjaDsKIEBlbmQKQEAgLTU3LDcgKzU5LDYgQEAgLSAoQk9P
TClfaXNGYWtlRml4ZWRQaXRjaDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgVVNFKEFQ
UEtJVCkKIHN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgY3RGb250
KQogewogICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxvb2sgbmVhdCBidXQgdGhpcyBpcyB3aGF0
IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5nLi4uCkBAIC03MSw0OCArNzIsMzQgQEAg
c3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIGJvb2wgaW5pdEZvbnREYXRhKEZvbnQqIGZvbnREYXRhKQotewotICAg
IGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQorI2lmIFVTRShBUFBLSVQpCiBzdGF0aWMg
TlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZhbWlseSh2b2lkKQogewogICAgIHN0YXRpYyBOU1N0
cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5ID0gW1tbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6
MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07CiAgICAgcmV0dXJuIHdlYkZhbGxiYWNrRm9udEZh
bWlseTsKIH0KLQotY29uc3QgRm9udCogRm9udDo6Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQo
TlNGb250ICprZXkpIGNvbnN0CisjZWxzZQorc3RhdGljIGJvb2wgZm9udEZhbWlseVNob3VsZE5v
dEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKIHsKLSAgICBpZiAo
IWtleSB8fCBDRkVxdWFsKGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKENURm9udFJl
ZihrZXkpKSkuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZv
bnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgp
KTsKLQotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXJpdmVkRm9udERhdGEtPmNvbXBvc2l0ZUZv
bnRSZWZlcmVuY2VzLmFkZChrZXksIG51bGxwdHIpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdF
bnRyeSkgewotICAgICAgICBOU0ZvbnQgKnN1YnN0aXR1dGVGb250ID0gW2tleSBwcmludGVyRm9u
dF07Ci0KLSAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gQ1RGb250R2V0U3lt
Ym9saWNUcmFpdHMoKENURm9udFJlZilzdWJzdGl0dXRlRm9udCk7Ci0gICAgICAgIGJvb2wgc3lu
dGhldGljQm9sZCA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY0JvbGQoKSAmJiAhKHRyYWl0cyAm
IGtDVEZvbnRCb2xkVHJhaXQpOwotICAgICAgICBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBwbGF0
Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250SXRhbGlj
VHJhaXQpOworICAgIGlmICghZm9udEZhbWlseU5hbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBGb250UGxhdGZvcm1EYXRhIHN1YnN0aXR1dGVQbGF0Zm9ybShzdWJzdGl0dXRl
Rm9udCwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxp
cXVlLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0Zm9ybURhdGEoKS53aWR0aFZh
cmlhbnQoKSk7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGb250OjpjcmVh
dGUoc3Vic3RpdHV0ZVBsYXRmb3JtLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJldHVy
biBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgIC8vIFRpbWVzIE5ldyBSb21h
biBjb250YWlucyBBcmFiaWMgZ2x5cGhzLCBidXQgQ29yZSBUZXh0IGRvZXNuJ3Qga25vdyBob3cg
dG8gc2hhcGUgdGhlbS4gPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+CisgICAgLy8gRklYTUUgPHJk
YXI6Ly9wcm9ibGVtLzEyMDk2ODM1PiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIHRoZSBhYm92
ZSBidWcgaXMgZml4ZWQuCisgICAgLy8gQXJpYWwgYW5kIFRhaG9tYSBhcmUgaGF2ZSBwZXJmb3Jt
YW5jZSBpc3N1ZXMgc28gZG9uJ3QgdXNlIHRoZW0gYXMgd2VsbC4KKyAgICByZXR1cm4gKENGU3Ry
aW5nQ29tcGFyZShDRlNUUigiVGltZXMgTmV3IFJvbWFuIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9
PSBrQ0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigi
QXJpYWwiKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAg
ICB8fCAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJUYWhvbWEiKSwgZm9udEZhbWlseU5hbWUsIDAp
ID09IGtDRkNvbXBhcmVFcXVhbFRvKTsKIH0KKyNlbmRpZgogCiB2b2lkIEZvbnQ6OnBsYXRmb3Jt
SW5pdCgpCiB7CisjaWYgVVNFKEFQUEtJVCkKICAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBt
X3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyAxLjBmIDogMC5mOwogCiAgICAgYm9vbCBm
YWlsZWRTZXR1cCA9IGZhbHNlOwotICAgIGlmICghaW5pdEZvbnREYXRhKHRoaXMpKSB7CisgICAg
aWYgKCFwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkgewogICAgICAgICAvLyBBY2shIFNvbWV0aGlu
ZyB2ZXJ5IGJhZCBoYXBwZW5lZCwgbGlrZSBhIGNvcnJ1cHQgZm9udC4KICAgICAgICAgLy8gVHJ5
IGxvb2tpbmcgZm9yIGFuIGFsdGVybmF0ZSAnYmFzZScgZm9udCBmb3IgdGhpcyByZW5kZXJlci4K
IApAQCAtMTM1LDEyICsxMjIsMTIgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgICAg
ICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250
TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6ZmFs
bGJhY2tGb250RmFtaWx5XSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fcGxhdGZvcm1E
YXRhLnNldE5TRm9udChbTlNGb250IGZvbnRXaXRoTmFtZTpmYWxsYmFja0ZvbnRGYW1pbHkgc2l6
ZTptX3BsYXRmb3JtRGF0YS5zaXplKCldKTsKLSAgICAgICAgaWYgKCFpbml0Rm9udERhdGEodGhp
cykpIHsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkgewogICAgICAgICAg
ICAgaWYgKFtmYWxsYmFja0ZvbnRGYW1pbHkgaXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7
CiAgICAgICAgICAgICAgICAgLy8gT0ssIGNvdWxkbid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBh
cyBhbiBhbHRlcm5hdGUgdG8gVGltZXMsIGZhbGxiYWNrCiAgICAgICAgICAgICAgICAgLy8gb24g
dGhlIHN5c3RlbSBmb250LiAgSWYgdGhpcyBmYWlscyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxl
ZnQuCiAgICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFu
YWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250
KCkgdG9GYW1pbHk6d2ViRmFsbGJhY2tGb250RmFtaWx5KCldKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWluaXRGb250RGF0YSh0aGlzKSkgeworICAgICAgICAgICAgICAgIGlmICghcGxhdGZvcm1E
YXRhKCkuY2dGb250KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdHJpZWQsIFRpbWVz
LCBUaW1lcyBOZXcgUm9tYW4sIGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0
byBnaXZlIHVwLgogICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoInVuYWJsZSB0byBpbml0
aWFsaXplIHdpdGggZm9udCAlQCIsIGluaXRpYWxGb250LmdldCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOwpAQCAtMTYyLDE1ICsxNDksMTIgQEAgdm9pZCBGb250
OjpwbGF0Zm9ybUluaXQoKQogICAgIGlmIChmYWlsZWRTZXR1cCkgewogICAgICAgICBtX3BsYXRm
b3JtRGF0YS5zZXROU0ZvbnQoW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOlttX3BsYXRmb3JtRGF0
YS5uc0ZvbnQoKSBwb2ludFNpemVdXSk7CiAgICAgICAgIExPR19FUlJPUigiZmFpbGVkIHRvIHNl
dCB1cCBmb250LCB1c2luZyBzeXN0ZW0gZm9udCAlcyIsIG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7
Ci0gICAgICAgIGluaXRGb250RGF0YSh0aGlzKTsKICAgICB9CiAKLSNpZiBQTEFURk9STShNQUMp
CiAgICAgLy8gV29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzE5NDMzNDkwPgogICAgIENHR2x5
cGggZHVtbXlHbHlwaHNbXSA9IHswLCAwfTsKLSAgICBDR1NpemUgZHVtbXlTaXplW10gPSB7Q0dT
aXplTWFrZSgwLCAwKSwgQ0dTaXplTWFrZSgwLCAwKX07CisgICAgQ0dTaXplIGR1bW15U2l6ZVtd
ID0geyBDR1NpemVNYWtlKDAsIDApLCBDR1NpemVNYWtlKDAsIDApIH07CiAgICAgQ1RGb250VHJh
bnNmb3JtR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBkdW1teUdseXBocywgZHVtbXlT
aXplLCAyLCBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyB8IGtDVEZvbnRUcmFuc2Zv
cm1BcHBseVNoYXBpbmcpOwotI2VuZGlmCiAgICAgCiAgICAgaW50IGlBc2NlbnQ7CiAgICAgaW50
IGlEZXNjZW50OwpAQCAtMjMzLDExICsyMTcsNjUgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQo
KQogICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7CiAgICAgbV9mb250
TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwogICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdo
dCh4SGVpZ2h0KTsKLX0KKyNlbHNlCisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0
Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkID8gY2VpbGYobV9wbGF0Zm9ybURhdGEuc2l6ZSgpICAv
IDI0LjBmKSA6IDAuZjsKKyAgICBtX3NwYWNlR2x5cGggPSAwOworICAgIG1fc3BhY2VXaWR0aCA9
IDA7CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbTsKKyAgICBmbG9hdCBhc2NlbnQ7CisgICAgZmxv
YXQgZGVzY2VudDsKKyAgICBmbG9hdCBjYXBIZWlnaHQ7CisgICAgZmxvYXQgbGluZUdhcDsKKyAg
ICBmbG9hdCBsaW5lU3BhY2luZzsKKyAgICBmbG9hdCB4SGVpZ2h0OworICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gZmFtaWx5TmFtZTsKKyAgICBpZiAoQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxh
dGZvcm1EYXRhLmZvbnQoKSkgeworICAgICAgICBGb250U2VydmljZXNJT1MgZm9udFNlcnZpY2Uo
Y3RGb250KTsKKyAgICAgICAgYXNjZW50ID0gY2VpbGYoZm9udFNlcnZpY2UuYXNjZW50KCkpOwor
ICAgICAgICBkZXNjZW50ID0gY2VpbGYoZm9udFNlcnZpY2UuZGVzY2VudCgpKTsKKyAgICAgICAg
bGluZVNwYWNpbmcgPSBmb250U2VydmljZS5saW5lU3BhY2luZygpOworICAgICAgICBsaW5lR2Fw
ID0gZm9udFNlcnZpY2UubGluZUdhcCgpOworICAgICAgICB4SGVpZ2h0ID0gZm9udFNlcnZpY2Uu
eEhlaWdodCgpOworICAgICAgICBjYXBIZWlnaHQgPSBmb250U2VydmljZS5jYXBIZWlnaHQoKTsK
KyAgICAgICAgdW5pdHNQZXJFbSA9IGZvbnRTZXJ2aWNlLnVuaXRzUGVyRW0oKTsKKyAgICAgICAg
ZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQ0dGb250UmVmIGNnRm9udCA9IG1fcGxhdGZvcm1EYXRhLmNnRm9u
dCgpOworCisgICAgICAgIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0c1BlckVtKGNnRm9udCk7
CisKKyAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAg
ICAgICBhc2NlbnQgPSBscm91bmRmKHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldEFzY2VudChjZ0Zv
bnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIGRlc2NlbnQgPSBscm91bmRm
KC1zY2FsZUVtVG9Vbml0cygtYWJzKENHRm9udEdldERlc2NlbnQoY2dGb250KSksIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplKTsKKyAgICAgICAgbGluZUdhcCA9IGxyb3VuZGYoc2NhbGVFbVRvVW5p
dHMoQ0dGb250R2V0TGVhZGluZyhjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Cisg
ICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KGNnRm9udCks
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgICAgICBjYXBIZWlnaHQgPSBzY2FsZUVtVG9V
bml0cyhDR0ZvbnRHZXRDYXBIZWlnaHQoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7
CiAKLXN0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEsIEZvdXJDaGFyQ29kZSB0YWJsZU5hbWUpCi17Ci0gICAgcmV0dXJuIENH
Rm9udENvcHlUYWJsZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCksIHRhYmxlTmFtZSk7Cisg
ICAgICAgIGxpbmVTcGFjaW5nID0gYXNjZW50ICsgZGVzY2VudCArIGxpbmVHYXA7CisgICAgICAg
IGZhbWlseU5hbWUgPSBhZG9wdENGKENHRm9udENvcHlGYW1pbHlOYW1lKGNnRm9udCkpOworICAg
IH0KKworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBt
X2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVz
Y2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Cisg
ICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7CisgICAgbV9mb250
TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVp
Z2h0KGNhcEhlaWdodCk7CisgICAgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMgPSBmb250RmFt
aWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0KCkpOworCisgICAgaWYg
KHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVu
dGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNW
ZXJ0aWNhbEdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSk7CisKKyAgICBpZiAoIW1fcGxh
dGZvcm1EYXRhLm1faXNFbW9qaSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHRoaXJkT2ZT
aXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpIC8gMzsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFz
Y2VudCh0aGlyZE9mU2l6ZSk7CisgICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KHRoaXJkT2ZT
aXplKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAodGhpcmRPZlNpemUpOworICAgIG1f
Zm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcoMCk7CisjZW5kaWYKIH0KIAogdm9pZCBGb250Ojpw
bGF0Zm9ybUNoYXJXaWR0aEluaXQoKQpAQCAtMjQ1LDE0ICsyODMsMTUgQEAgdm9pZCBGb250Ojpw
bGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKICAgICBtX21h
eENoYXJXaWR0aCA9IDA7CiAgICAgCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gb3MyVGFibGUg
PSBhZG9wdENGKGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdPUy8yJykpOwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBvczJUYWJsZSA9IGFk
b3B0Q0YoQ0dGb250Q29weVRhYmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAnT1Mv
MicpKTsKICAgICBpZiAob3MyVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKG9zMlRhYmxlLmdldCgp
KSA+PSA0KSB7CiAgICAgICAgIGNvbnN0IFVJbnQ4KiBvczIgPSBDRkRhdGFHZXRCeXRlUHRyKG9z
MlRhYmxlLmdldCgpKTsKICAgICAgICAgU0ludDE2IG9zMkF2Z0NoYXJXaWR0aCA9IG9zMlsyXSAq
IDI1NiArIG9zMlszXTsKICAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhv
czJBdmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1E
YXRhLm1fc2l6ZTsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBoZWFkVGFibGUg
PSBhZG9wdENGKGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdoZWFkJykpOwor
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGhlYWRUYWJsZSA9IGFkb3B0Q0YoQ0dGb250Q29weVRh
YmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAnaGVhZCcpKTsKICAgICBpZiAoaGVh
ZFRhYmxlICYmIENGRGF0YUdldExlbmd0aChoZWFkVGFibGUuZ2V0KCkpID49IDQyKSB7CiAgICAg
ICAgIGNvbnN0IFVJbnQ4KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0ZVB0cihoZWFkVGFibGUuZ2V0KCkp
OwogICAgICAgICB1c2hvcnQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1NiArIGhlYWRbMzddOwpAQCAt
MjYyLDE3ICszMDEsMTYgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogICAg
ICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKICAgICAg
ICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVu
aXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CiAgICAgfQorI2VuZGlmCiAKICAg
ICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGltYXRlLCB3aGljaCB3aWxsIHBv
cHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9zaXRpdmUuCiAgICAgaW5pdENo
YXJXaWR0aHMoKTsKIH0KLSNlbmRpZiAvLyBVU0UoQVBQS0lUKQogCiB2b2lkIEZvbnQ6OnBsYXRm
b3JtRGVzdHJveSgpCiB7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQogUGFzc1JlZlB0cjxGb250
PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
ZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CkBA
IC0yODEsMTMgKzMxOSwxMiBAQCBQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRl
U2NhCiAgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRydWUsIGZh
bHNlKTsKICAgICB9CiAKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgZmxv
YXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwotICAgIEZvbnRQ
bGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5h
Z2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0b1NpemU6c2l6ZV0sIHNp
emUsIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSk7CiAKLSAgICAv
LyBBcHBLaXQgcmVzZXRzIHRoZSB0eXBlIGluZm9ybWF0aW9uIChzY3JlZW4vcHJpbnRlcikgd2hl
biB5b3UgY29udmVydCBhIGZvbnQgdG8gYSBkaWZmZXJlbnQgc2l6ZS4KLSAgICAvLyBXZSBoYXZl
IHRvIGZpeCB1cCB0aGUgZm9udCB0aGF0IHdlJ3JlIGhhbmRlZCBiYWNrLgotICAgIHNjYWxlZEZv
bnREYXRhLnNldE5TRm9udChbc2NhbGVkRm9udERhdGEubnNGb250KCkgcHJpbnRlckZvbnRdKTsK
KyNpZiBVU0UoQVBQS0lUKQorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAg
IEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZv
bnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0b1NpemU6c2l6
ZV0sIHNpemUsIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSk7CiAK
ICAgICBpZiAoc2NhbGVkRm9udERhdGEuZm9udCgpKSB7CiAgICAgICAgIE5TRm9udE1hbmFnZXIg
KmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwpAQCAtMzA3
LDEwICszNDQsMzIgQEAgUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYQog
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICByZXR1cm4gMDsKKyNlbHNlCisg
ICAgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJh
aXRzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Io
bV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisgICAgUmV0YWluUHRyPENURm9udFJlZj4gc2NhbGVk
Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlw
dG9yLmdldCgpLCBzaXplLCBudWxscHRyKSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRG
b250RGF0YShzY2FsZWRGb250LmdldCgpLCBzaXplLCBmYWxzZSwgZmFsc2UsIG1fcGxhdGZvcm1E
YXRhLm9yaWVudGF0aW9uKCkpOworCisgICAgaWYgKHNjYWxlZEZvbnREYXRhLmZvbnQoKSkgewor
ICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkKQorICAgICAgICAgICAg
Zm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OworICAgICAgICBpZiAobV9wbGF0Zm9ybURh
dGEubV9zeW50aGV0aWNPYmxpcXVlKQorICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250
SXRhbGljVHJhaXQ7CisKKyAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRy
YWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKHNjYWxlZEZvbnREYXRhLmZvbnQoKSk7Cisg
ICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYga0NU
Rm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7
CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRz
ICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJh
aXRJdGFsaWMpOworCisgICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1E
YXRhKHNjYWxlZEZvbnREYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRp
ZgogfQogCiB2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKIHsKKyNpZiBVU0UoQVBQS0lUKQog
ICAgIE5TRm9udCogZiA9IG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOwogICAgIC8vIFNwZWNpYWwg
Y2FzZSBPc2FrYS1Nb25vLgogICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5
OTQ2Nz4sIHdlIHNob3VsZCB0cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgpAQCAtMzI1
LDEyICszODQsMjMgQEAgdm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgLy8gTm90ZSB0
aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCiAK
ICAgICBOU1N0cmluZyAqbmFtZSA9IFtmIGZvbnROYW1lXTsKLSAgICBtX3RyZWF0QXNGaXhlZFBp
dGNoID0gKFtmIGlzRml4ZWRQaXRjaF0gfHwgW2YgX2lzRmFrZUZpeGVkUGl0Y2hdIHx8Ci0gICAg
ICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJPc2FrYS1Nb25vIl0gPT0gTlNP
cmRlcmVkU2FtZSkgJiYKLSAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpA
Ik1TLVBHb3RoaWMiXSAhPSBOU09yZGVyZWRTYW1lICYmCi0gICAgICAgICAgIFtuYW1lIGNhc2VJ
bnNlbnNpdGl2ZUNvbXBhcmU6QCJNb25vdHlwZUNvcnNpdmEiXSAhPSBOU09yZGVyZWRTYW1lOwor
ICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoW2YgaXNGaXhlZFBpdGNoXSAgfHwgW2YgX2lzRmFr
ZUZpeGVkUGl0Y2hdIHx8IFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJPc2FrYS1Nb25v
Il0gPT0gTlNPcmRlcmVkU2FtZSkgJiYgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1T
LVBHb3RoaWMiXSAhPSBOU09yZGVyZWRTYW1lICYmIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBh
cmU6QCJNb25vdHlwZUNvcnNpdmEiXSAhPSBOU09yZGVyZWRTYW1lOworI2Vsc2UKKyAgICBDVEZv
bnRSZWYgY3RGb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOworICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBmYWxzZTsKKyAgICBpZiAoIWN0Rm9udCkKKyAgICAgICAgcmV0dXJuOyAvLyBDVEZv
bnQgaXMgbnVsbCBpbiB0aGUgY2FzZSBvZiBTVkcgZm9udHMgZm9yIGV4YW1wbGUuCisKKyAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5h
bWUoY3RGb250KSk7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lID0gYWRv
cHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKKworICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBDR0ZvbnRJc0ZpeGVkUGl0Y2gobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpIHx8IChm
dWxsTmFtZSAmJiAoQ0ZTdHJpbmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2Et
TW9ubyIpLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyB8
fCBDRlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIiksIGtD
RkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSk7CisgICAgaWYg
KGZhbWlseU5hbWUgJiYgQ0ZTdHJpbmdDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJD
b3VyaWVyIE5ldyIpLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1
YWxUbykgeworICAgICAgICAvLyBTcGVjaWFsIGNhc2UgQ291cmllciBOZXcgdG8gbm90IGJlIHRy
ZWF0ZWQgYXMgZml4ZWQgcGl0Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhhY2tlZCBz
cGFjZSB3aWR0aCB3aGljaCBpcyB1bmRlc2lyZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJkYXI6Ly82
MjY5NzgzKS4KKyAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOworICAgIH0KKyNl
bmRpZgogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIEZsb2F0UmVjdCBGb250OjpwbGF0
Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewpAQCAtMzQzLDExICs0MTMs
MTEgQEAgRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoRwogICAgIHJldHVy
biBib3VuZGluZ0JveDsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLWlubGluZSBDR0ZvbnRSZW5k
ZXJpbmdTdHlsZSBGb250OjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CitzdGF0aWMgaW5saW5lIENH
Rm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHBsYXRmb3JtRGF0YSkKIHsKKyNpZiBVU0UoQVBQS0lUKQogICAgIENHRm9udFJlbmRlcmluZ1N0
eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJl
bmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1
YnBpeGVsUXVhbnRpemF0aW9uOwotICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5z
Rm9udCgpOworICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKICAgICBp
ZiAoZm9udCkgewogICAgICAgICBzd2l0Y2ggKFtmb250IHJlbmRlcmluZ01vZGVdKSB7CiAgICAg
ICAgIGNhc2UgTlNGb250SW50ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6CkBAIC0zNjEs
MjYgKzQzMSwzMSBAQCBpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyCiAg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHN0eWxlOworCisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShwbGF0Zm9ybURhdGEpOworICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRp
YWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NH
Rm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFz
aW5nU3R5bGVVbmZpbHRlcmVkOworI2VuZGlmCiB9CiAKLWlubGluZSBib29sIEZvbnQ6OmFkdmFu
Y2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkgY29uc3QK
K3N0YXRpYyBpbmxpbmUgYm9vbCBhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkK
IHsKLSAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsKLSAgICBpZiAo
IWZvbnQgfHwgIXBsYXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBGb250KCkpCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKKyAgICBp
ZiAoIWZvbnQgfHwgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgYWR2YW5jZSA9IE5TU2l6ZVRvQ0dTaXplKFtmb250IGFkdmFuY2Vt
ZW50Rm9yR2x5cGg6Z2x5cGhdKTsKICAgICByZXR1cm4gdHJ1ZTsKLX0KKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGdseXBoKTsKKyAgICBVTlVTRURfUEFSQU0oYWR2YW5jZSk7CisgICAgcmV0dXJu
IGZhbHNlOwogI2VuZGlmCit9CiAKIHN0YXRpYyBib29sIGhhc0N1c3RvbVRyYWNraW5nKENURm9u
dFJlZiBmb250KQogewotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA8IDEwOTAKLSAgICBVTlVTRURfUEFSQU0oZm9udCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotI2Vsc2UKICAgICByZXR1cm4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KGFk
b3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQpKS5nZXQoKSk7Ci0jZW5kaWYKIH0K
IAogc3RhdGljIGlubGluZSBib29sIGlzRW1vamkoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxh
dGZvcm1EYXRhKQpAQCAtMzkzLDE2ICs0NjgsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGlzRW1v
amkoY29uc3QgRm9udFBsYQogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIEZvbnQ6OmNhblVzZUZh
c3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYg
cG9wdWxhdGVkQWR2YW5jZSkgY29uc3QKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0R2x5
cGhBZHZhbmNlR2V0dGVyKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgR2x5
cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkKIHsKICAg
ICAvLyBGYXN0IGdldHRlciBkb2Vzbid0IHRha2UgY3VzdG9tIHRyYWNraW5nIGludG8gYWNjb3Vu
dAotICAgIGlmIChoYXNDdXN0b21UcmFja2luZyhwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpCisg
ICAgaWYgKGhhc0N1c3RvbVRyYWNraW5nKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAvLyBGYXN0IGdldHRlciBkb2Vzbid0IHdvcmsgZm9yIGVtb2pp
Ci0gICAgaWYgKGlzRW1vamkocGxhdGZvcm1EYXRhKCkpKQorICAgIGlmIChpc0Vtb2ppKHBsYXRm
b3JtRGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyAuLi4gb3IgZm9yIGFueSBi
aXRtYXAgZm9udHMgaW4gZ2VuZXJhbAotICAgIGlmIChhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250
KGdseXBoLCBhZHZhbmNlKSkgeworICAgIGlmIChhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KHBs
YXRmb3JtRGF0YSwgZ2x5cGgsIGFkdmFuY2UpKSB7CiAgICAgICAgIHBvcHVsYXRlZEFkdmFuY2Ug
PSB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNDE0LDEwICs0ODksMTAg
QEAgZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIAogICAgIENHU2l6ZSBh
ZHZhbmNlID0gQ0dTaXplWmVybzsKICAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWw7CiAgICAgYm9vbCBwb3B1bGF0ZWRBZHZhbmNl
ID0gZmFsc2U7Ci0gICAgaWYgKChob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxs
YmFjaykgJiYgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihnbHlwaCwgYWR2YW5jZSwgcG9w
dWxhdGVkQWR2YW5jZSkpIHsKKyAgICBpZiAoKGhvcml6b250YWwgfHwgbV9pc0Jyb2tlbklkZW9n
cmFwaEZhbGxiYWNrKSAmJiBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKHBsYXRmb3JtRGF0
YSgpLCBnbHlwaCwgYWR2YW5jZSwgcG9wdWxhdGVkQWR2YW5jZSkpIHsKICAgICAgICAgZmxvYXQg
cG9pbnRTaXplID0gcGxhdGZvcm1EYXRhKCkubV9zaXplOwogICAgICAgICBDR0FmZmluZVRyYW5z
Zm9ybSBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUp
OwotICAgICAgICBpZiAoIUNHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURh
dGEoKS5jZ0ZvbnQoKSwgJm0sIHJlbmRlcmluZ1N0eWxlKCksICZnbHlwaCwgMSwgJmFkdmFuY2Up
KSB7CisgICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3Jt
RGF0YSgpLmNnRm9udCgpLCAmbSwgcmVuZGVyaW5nU3R5bGUocGxhdGZvcm1EYXRhKCkpLCAmZ2x5
cGgsIDEsICZhZHZhbmNlKSkgewogICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBm
dWxsTmFtZSA9IGFkb3B0Q0YoQ0dGb250Q29weUZ1bGxOYW1lKHBsYXRmb3JtRGF0YSgpLmNnRm9u
dCgpKSk7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjYWNoZSBnbHlwaCB3aWR0
aHMgZm9yICVAICVmIiwgZnVsbE5hbWUuZ2V0KCksIHBvaW50U2l6ZSk7CiAgICAgICAgICAgICBh
ZHZhbmNlLndpZHRoID0gMDsKQEAgLTQ3Nyw0ICs1NTIsMjggQEAgYm9vbCBGb250OjpjYW5SZW5k
ZXJDb21iaW5pbmdDaGFyYWN0ZXJTZQogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgVVNFKEFQ
UEtJVCkKK2NvbnN0IEZvbnQqIEZvbnQ6OmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250KE5TRm9u
dCAqa2V5KSBjb25zdAoreworICAgIGlmICgha2V5IHx8IENGRXF1YWwoYWRvcHRDRihDVEZvbnRD
b3B5UG9zdFNjcmlwdE5hbWUoQ1RGb250UmVmKGtleSkpKS5nZXQoKSwgQ0ZTVFIoIkxhc3RSZXNv
cnQiKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2
ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOworCisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Rl
cml2ZWRGb250RGF0YS0+Y29tcG9zaXRlRm9udFJlZmVyZW5jZXMuYWRkKGtleSwgbnVsbHB0cik7
CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIE5TRm9udCAqc3Vic3Rp
dHV0ZUZvbnQgPSBba2V5IHByaW50ZXJGb250XTsKKworICAgICAgICBDVEZvbnRTeW1ib2xpY1Ry
YWl0cyB0cmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cygoQ1RGb250UmVmKXN1YnN0aXR1
dGVGb250KTsKKyAgICAgICAgYm9vbCBzeW50aGV0aWNCb2xkID0gcGxhdGZvcm1EYXRhKCkuc3lu
dGhldGljQm9sZCgpICYmICEodHJhaXRzICYga0NURm9udEJvbGRUcmFpdCk7CisgICAgICAgIGJv
b2wgc3ludGhldGljT2JsaXF1ZSA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUoKSAm
JiAhKHRyYWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFpdCk7CisKKyAgICAgICAgRm9udFBsYXRmb3Jt
RGF0YSBzdWJzdGl0dXRlUGxhdGZvcm0oc3Vic3RpdHV0ZUZvbnQsIHBsYXRmb3JtRGF0YSgpLnNp
emUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgcGxhdGZvcm1EYXRhKCkub3Jp
ZW50YXRpb24oKSwgcGxhdGZvcm1EYXRhKCkud2lkdGhWYXJpYW50KCkpOworICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRm9udDo6Y3JlYXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwg
aXNDdXN0b21Gb250KCkpOworICAgIH0KKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5nZXQoKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBs
ZUZvbnREYXRhSU9TLm1tCShyZXZpc2lvbiAxNzk0MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEsMTk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2
IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJGb250LmgiCi0KLSNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiQ29y
ZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJGb250Q2FjaGUuaCIKLSNpbXBvcnQgIkZvbnRDYXNj
YWRlLmgiCi0jaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKLSNpbXBvcnQgIkZvbnRTZXJ2aWNl
c0lPUy5oIgotI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbXBvcnQgPGZsb2F0Lmg+
Ci0jaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBib29sIGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoQ0ZTdHJpbmdSZWYg
Zm9udEZhbWlseU5hbWUpCi17Ci0gICAgaWYgKCFmb250RmFtaWx5TmFtZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gVGltZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlw
aHMsIGJ1dCBDb3JlIFRleHQgZG9lc24ndCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiA8cmRhcjov
L3Byb2JsZW0vOTgyMzk3NT4KLSAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+
IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgdGhlIGFib3ZlIGJ1ZyBpcyBmaXhlZC4KLSAgICAv
LyBBcmlhbCBhbmQgVGFob21hIGFyZSBoYXZlIHBlcmZvcm1hbmNlIGlzc3VlcyBzbyBkb24ndCB1
c2UgdGhlbSBhcyB3ZWxsLgotICAgIHJldHVybiAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJUaW1l
cyBOZXcgUm9tYW4iKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQot
ICAgICAgICAgICB8fCAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJBcmlhbCIpLCBmb250RmFtaWx5
TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCi0gICAgICAgICAgIHx8IChDRlN0cmluZ0Nv
bXBhcmUoQ0ZTVFIoIlRhaG9tYSIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVx
dWFsVG8pOwotfQotCi1zdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlwaHMoQ1RGb250UmVm
IGN0Rm9udCkKLXsKLSAgICAvLyBUaGUgY2hlY2sgZG9lc24ndCBsb29rIG5lYXQgYnV0IHRoaXMg
aXMgd2hhdCBBcHBLaXQgZG9lcyBmb3IgdmVydGljYWwgd3JpdGluZy4uLgotICAgIFJldGFpblB0
cjxDRkFycmF5UmVmPiB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJs
ZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBDRkluZGV4IG51
bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOwotICAgIGZvciAoQ0ZJ
bmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7Ci0gICAgICAgIENU
Rm9udFRhYmxlVGFnIHRhZyA9IChDVEZvbnRUYWJsZVRhZykodWludHB0cl90KUNGQXJyYXlHZXRW
YWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCk7Ci0gICAgICAgIGlmICh0YWcgPT0g
a0NURm9udFRhYmxlVmhlYSB8fCB0YWcgPT0ga0NURm9udFRhYmxlVk9SRykKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRm9udDo6
cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3Jt
RGF0YS5tX3N5bnRoZXRpY0JvbGQgPyBjZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkgIC8gMjQu
MGYpIDogMC5mOwotICAgIG1fc3BhY2VHbHlwaCA9IDA7Ci0gICAgbV9zcGFjZVdpZHRoID0gMDsK
LSAgICB1bnNpZ25lZCB1bml0c1BlckVtOwotICAgIGZsb2F0IGFzY2VudDsKLSAgICBmbG9hdCBk
ZXNjZW50OwotICAgIGZsb2F0IGNhcEhlaWdodDsKLSAgICBmbG9hdCBsaW5lR2FwOwotICAgIGZs
b2F0IGxpbmVTcGFjaW5nOwotICAgIGZsb2F0IHhIZWlnaHQ7Ci0gICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBmYW1pbHlOYW1lOwotICAgIGlmIChDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0Zm9y
bURhdGEuZm9udCgpKSB7Ci0gICAgICAgIEZvbnRTZXJ2aWNlc0lPUyBmb250U2VydmljZShjdEZv
bnQpOwotICAgICAgICBhc2NlbnQgPSBjZWlsZihmb250U2VydmljZS5hc2NlbnQoKSk7Ci0gICAg
ICAgIGRlc2NlbnQgPSBjZWlsZihmb250U2VydmljZS5kZXNjZW50KCkpOwotICAgICAgICBsaW5l
U3BhY2luZyA9IGZvbnRTZXJ2aWNlLmxpbmVTcGFjaW5nKCk7Ci0gICAgICAgIGxpbmVHYXAgPSBm
b250U2VydmljZS5saW5lR2FwKCk7Ci0gICAgICAgIHhIZWlnaHQgPSBmb250U2VydmljZS54SGVp
Z2h0KCk7Ci0gICAgICAgIGNhcEhlaWdodCA9IGZvbnRTZXJ2aWNlLmNhcEhlaWdodCgpOwotICAg
ICAgICB1bml0c1BlckVtID0gZm9udFNlcnZpY2UudW5pdHNQZXJFbSgpOwotICAgICAgICBmYW1p
bHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBDR0ZvbnRSZWYgY2dGb250ID0gbV9wbGF0Zm9ybURhdGEuY2dGb250KCk7
Ci0KLSAgICAgICAgdW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0oY2dGb250KTsKLQot
ICAgICAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgICAg
IGFzY2VudCA9IGxyb3VuZGYoc2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0QXNjZW50KGNnRm9udCks
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICAgICAgZGVzY2VudCA9IGxyb3VuZGYoLXNj
YWxlRW1Ub1VuaXRzKC1hYnMoQ0dGb250R2V0RGVzY2VudChjZ0ZvbnQpKSwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemUpOwotICAgICAgICBsaW5lR2FwID0gbHJvdW5kZihzY2FsZUVtVG9Vbml0cyhD
R0ZvbnRHZXRMZWFkaW5nKGNnRm9udCksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICAg
ICAgeEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldFhIZWlnaHQoY2dGb250KSwgdW5p
dHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgICAgIGNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRz
KENHRm9udEdldENhcEhlaWdodChjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLQot
ICAgICAgICBsaW5lU3BhY2luZyA9IGFzY2VudCArIGRlc2NlbnQgKyBsaW5lR2FwOwotICAgICAg
ICBmYW1pbHlOYW1lID0gYWRvcHRDRihDR0ZvbnRDb3B5RmFtaWx5TmFtZShjZ0ZvbnQpKTsKLSAg
ICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Ci0gICAg
bV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERl
c2NlbnQoZGVzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwot
ICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobGluZVNwYWNpbmcpOwotICAgIG1fZm9u
dE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhl
aWdodChjYXBIZWlnaHQpOwotICAgIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZh
bWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKLQotICAgIGlm
IChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmll
bnRhdGlvbkZhbGxiYWNrKCkpCi0gICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFz
VmVydGljYWxHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCkpOwotCi0gICAgaWYgKCFtX3Bs
YXRmb3JtRGF0YS5tX2lzRW1vamkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCB0aGlyZE9m
U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDM7Ci0gICAgbV9mb250TWV0cmljcy5zZXRB
c2NlbnQodGhpcmRPZlNpemUpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudCh0aGlyZE9m
U2l6ZSk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKHRoaXJkT2ZTaXplKTsKLSAgICBt
X2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKDApOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3Jt
Q2hhcldpZHRoSW5pdCgpCi17Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAwOwotICAgIG1fbWF4Q2hh
cldpZHRoID0gMDsKLQotICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1h
dGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3Np
dGl2ZS4KLSAgICBpbml0Q2hhcldpZHRocygpOwotfQotCi1QYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6
OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3QKLXsKLSAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKLSAgICAgICAg
Rm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShtX3BsYXRmb3JtRGF0YSk7Ci0gICAgICAg
IHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxlZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFj
dG9yOwotICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBm
YWxzZSk7Ci0gICAgfQotCi0gICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAq
IHNjYWxlRmFjdG9yOwotICAgIENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRmb3JtRGF0YS5mb250KCkpOwotICAgIFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29w
eUZvbnREZXNjcmlwdG9yKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOwotICAgIFJldGFpblB0cjxD
VEZvbnRSZWY+IHNjYWxlZEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3Jp
cHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgbnVsbHB0cikpOwotICAgIEZvbnRQbGF0
Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoc2NhbGVkRm9udC5nZXQoKSwgc2l6ZSwgZmFsc2UsIGZh
bHNlLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKTsKLQotICAgIGlmIChzY2FsZWRGb250
RGF0YS5mb250KCkpIHsKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9s
ZCkKLSAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEJvbGRUcmFpdDsKLSAgICAgICAg
aWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljT2JsaXF1ZSkKLSAgICAgICAgICAgIGZvbnRU
cmFpdHMgfD0ga0NURm9udEl0YWxpY1RyYWl0OwotCi0gICAgICAgIENURm9udFN5bWJvbGljVHJh
aXRzIHNjYWxlZEZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhzY2FsZWRGb250
RGF0YS5mb250KCkpOwotICAgICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY0JvbGQgPSAo
Zm9udFRyYWl0cyAmIGtDVEZvbnRCb2xkVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtD
VEZvbnRUcmFpdEJvbGQpOwotICAgICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY09ibGlx
dWUgPSAoZm9udFRyYWl0cyAmIGtDVEZvbnRJdGFsaWNUcmFpdCkgJiYgIShzY2FsZWRGb250VHJh
aXRzICYga0NURm9udFRyYWl0SXRhbGljKTsKLQotICAgICAgICByZXR1cm4gZm9udENhY2hlKCku
Zm9udEZvclBsYXRmb3JtRGF0YShzY2FsZWRGb250RGF0YSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLXZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQotewotICAgIENURm9u
dFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7Ci0gICAgbV90cmVhdEFzRml4ZWRQ
aXRjaCA9IGZhbHNlOwotICAgIGlmICghY3RGb250KQotICAgICAgICByZXR1cm47IC8vIENURm9u
dCBpcyBudWxsIGluIHRoZSBjYXNlIG9mIFNWRyBmb250cyBmb3IgZXhhbXBsZS4KLQotICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENURm9udENvcHlGdWxsTmFt
ZShjdEZvbnQpKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9w
dENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkpOwotCi0gICAgbV90cmVhdEFzRml4ZWRQ
aXRjaCA9IENHRm9udElzRml4ZWRQaXRjaChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSkgfHwgKGZ1
bGxOYW1lICYmIChDRlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJPc2FrYS1N
b25vIiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvIHx8
IENGU3RyaW5nQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSwga0NG
Q29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pKTsKLSAgICBpZiAo
ZmFtaWx5TmFtZSAmJiBDRlN0cmluZ0NvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkNv
dXJpZXIgTmV3IiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVh
bFRvKSB7Ci0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5ldyB0byBub3QgYmUgdHJl
YXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNlIG9mIGEgaGFja2VkIHNw
YWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBmb3IgaVBob25lIChzZWUgcmRhcjovLzYy
Njk3ODMpLgotICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7Ci0gICAgfQotfQot
Ci1DR0ZvbnRSZW5kZXJpbmdTdHlsZSBGb250OjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5k
ZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJw
aXhlbFF1YW50aXphdGlvbiB8IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7Ci19
Ci0KLWJvb2wgRm9udDo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCwgQ0dTaXplJikg
Y29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0
YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJldmlzaW9uIDE3OTQyMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSw0ODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIkZvbnQuaCIKLQotI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1w
b3J0ICJDb2xvci5oIgotI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJDb3Jl
VGV4dFNQSS5oIgotI2ltcG9ydCAiRmxvYXRSZWN0LmgiCi0jaW1wb3J0ICJGb250Q2FjaGUuaCIK
LSNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCi0jaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKLSNp
bXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgotI2lmIFVTRShBUFBLSVQpCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0jaW1wb3J0IDxB
cHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbHNlCi0jaW1wb3J0
IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2VuZGlmCi0jaW1wb3J0IDxmbG9hdC5oPgotI2ltcG9y
dCA8dW5pY29kZS91Y2hhci5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmICFQ
TEFURk9STShJT1MpCi1AaW50ZXJmYWNlIE5TRm9udCAoV2ViQXBwS2l0U2VjcmV0QVBJKQotLSAo
Qk9PTClfaXNGYWtlRml4ZWRQaXRjaDsKLUBlbmQKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLSNpZiBVU0UoQVBQS0lUKQotc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhz
KENURm9udFJlZiBjdEZvbnQpCi17Ci0gICAgLy8gVGhlIGNoZWNrIGRvZXNuJ3QgbG9vayBuZWF0
IGJ1dCB0aGlzIGlzIHdoYXQgQXBwS2l0IGRvZXMgZm9yIHZlcnRpY2FsIHdyaXRpbmcuLi4KLSAg
ICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gdGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZh
aWxhYmxlVGFibGVzKGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAg
Q0ZJbmRleCBudW1UYWJsZXMgPSBDRkFycmF5R2V0Q291bnQodGFibGVUYWdzLmdldCgpKTsKLSAg
ICBmb3IgKENGSW5kZXggaW5kZXggPSAwOyBpbmRleCA8IG51bVRhYmxlczsgKytpbmRleCkgewot
ICAgICAgICBDVEZvbnRUYWJsZVRhZyB0YWcgPSAoQ1RGb250VGFibGVUYWcpKHVpbnRwdHJfdClD
RkFycmF5R2V0VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpOwotICAgICAgICBp
ZiAodGFnID09IGtDVEZvbnRUYWJsZVZoZWEgfHwgdGFnID09IGtDVEZvbnRUYWJsZVZPUkcpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1z
dGF0aWMgYm9vbCBpbml0Rm9udERhdGEoRm9udCogZm9udERhdGEpCi17Ci0gICAgaWYgKCFmb250
RGF0YS0+cGxhdGZvcm1EYXRhKCkuY2dGb250KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZh
bWlseSh2b2lkKQotewotICAgIHN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5
ID0gW1tbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07
Ci0gICAgcmV0dXJuIHdlYkZhbGxiYWNrRm9udEZhbWlseTsKLX0KLQotY29uc3QgRm9udCogRm9u
dDo6Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQoTlNGb250ICprZXkpIGNvbnN0Ci17Ci0gICAg
aWYgKCFrZXkgfHwgQ0ZFcXVhbChhZG9wdENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShDVEZv
bnRSZWYoa2V5KSkpLmdldCgpLCBDRlNUUigiTGFzdFJlc29ydCIpKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZv
bnQoKSk7Ci0KLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVyaXZlZEZvbnREYXRhLT5jb21wb3Np
dGVGb250UmVmZXJlbmNlcy5hZGQoa2V5LCBudWxscHRyKTsKLSAgICBpZiAoYWRkUmVzdWx0Lmlz
TmV3RW50cnkpIHsKLSAgICAgICAgTlNGb250ICpzdWJzdGl0dXRlRm9udCA9IFtrZXkgcHJpbnRl
ckZvbnRdOwotCi0gICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IENURm9udEdl
dFN5bWJvbGljVHJhaXRzKChDVEZvbnRSZWYpc3Vic3RpdHV0ZUZvbnQpOwotICAgICAgICBib29s
IHN5bnRoZXRpY0JvbGQgPSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNCb2xkKCkgJiYgISh0cmFp
dHMgJiBrQ1RGb250Qm9sZFRyYWl0KTsKLSAgICAgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0g
cGxhdGZvcm1EYXRhKCkuc3ludGhldGljT2JsaXF1ZSgpICYmICEodHJhaXRzICYga0NURm9udEl0
YWxpY1RyYWl0KTsKLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhIHN1YnN0aXR1dGVQbGF0Zm9y
bShzdWJzdGl0dXRlRm9udCwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBz
eW50aGV0aWNPYmxpcXVlLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0Zm9ybURh
dGEoKS53aWR0aFZhcmlhbnQoKSk7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBGb250OjpjcmVhdGUoc3Vic3RpdHV0ZVBsYXRmb3JtLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAg
fQotICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotfQotCi12b2lk
IEZvbnQ6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9w
bGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkID8gMS4wZiA6IDAuZjsKLQotICAgIGJvb2wgZmFp
bGVkU2V0dXAgPSBmYWxzZTsKLSAgICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkgewotICAgICAg
ICAvLyBBY2shIFNvbWV0aGluZyB2ZXJ5IGJhZCBoYXBwZW5lZCwgbGlrZSBhIGNvcnJ1cHQgZm9u
dC4KLSAgICAgICAgLy8gVHJ5IGxvb2tpbmcgZm9yIGFuIGFsdGVybmF0ZSAnYmFzZScgZm9udCBm
b3IgdGhpcyByZW5kZXJlci4KLQotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgaGFjayB0byB1c2Ug
IlRpbWVzIE5ldyBSb21hbiIgaW4gcGxhY2Ugb2YgIlRpbWVzIi4KLSAgICAgICAgLy8gIlRpbWVz
IFJPIiBpcyBhIGNvbW1vbiBmb250IHdob3NlIGZhbWlseSBuYW1lIGlzICJUaW1lcyIuCi0gICAg
ICAgIC8vIEl0IG92ZXJyaWRlcyB0aGUgbm9ybWFsICJUaW1lcyIgZmFtaWx5IGZvbnQuCi0gICAg
ICAgIC8vIEl0IGFsc28gYXBwZWFycyB0byBoYXZlIGEgY29ycnVwdCByZWd1bGFyIHZhcmlhbnQu
Ci0gICAgICAgIE5TU3RyaW5nICpmYWxsYmFja0ZvbnRGYW1pbHk7Ci0gICAgICAgIGlmIChbW21f
cGxhdGZvcm1EYXRhLm5zRm9udCgpIGZhbWlseU5hbWVdIGlzRXF1YWw6QCJUaW1lcyJdKQotICAg
ICAgICAgICAgZmFsbGJhY2tGb250RmFtaWx5ID0gQCJUaW1lcyBOZXcgUm9tYW4iOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSB3ZWJGYWxsYmFja0ZvbnRG
YW1pbHkoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRyeSBzZXR0aW5nIHVwIHRoZSBhbHRlcm5h
dGUgZm9udC4KLSAgICAgICAgLy8gVGhpcyBpcyBhIGxhc3QgZGl0Y2ggZWZmb3J0IHRvIHVzZSBh
IHN1YnN0aXR1dGUgZm9udCB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZy4KLSNpZiAhRVJS
T1JfRElTQUJMRUQKLSAgICAgICAgUmV0YWluUHRyPE5TRm9udD4gaW5pdGlhbEZvbnQgPSBtX3Bs
YXRmb3JtRGF0YS5uc0ZvbnQoKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEu
Zm9udCgpKQotICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFu
YWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250
KCkgdG9GYW1pbHk6ZmFsbGJhY2tGb250RmFtaWx5XSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChbTlNGb250IGZvbnRXaXRoTmFtZTpmYWxsYmFj
a0ZvbnRGYW1pbHkgc2l6ZTptX3BsYXRmb3JtRGF0YS5zaXplKCldKTsKLSAgICAgICAgaWYgKCFp
bml0Rm9udERhdGEodGhpcykpIHsKLSAgICAgICAgICAgIGlmIChbZmFsbGJhY2tGb250RmFtaWx5
IGlzRXF1YWw6QCJUaW1lcyBOZXcgUm9tYW4iXSkgewotICAgICAgICAgICAgICAgIC8vIE9LLCBj
b3VsZG4ndCBzZXR1cCBUaW1lcyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJuYXRlIHRvIFRpbWVzLCBm
YWxsYmFjawotICAgICAgICAgICAgICAgIC8vIG9uIHRoZSBzeXN0ZW0gZm9udC4gIElmIHRoaXMg
ZmFpbHMgd2UgaGF2ZSBubyBhbHRlcm5hdGl2ZSBsZWZ0LgotICAgICAgICAgICAgICAgIG1fcGxh
dGZvcm1EYXRhLnNldE5TRm9udChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNv
bnZlcnRGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNrRm9u
dEZhbWlseSgpXSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpbml0Rm9udERhdGEodGhpcykpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gV2UgdHJpZWQsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4s
IGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0byBnaXZlIHVwLgotICAgICAg
ICAgICAgICAgICAgICBMT0dfRVJST1IoInVuYWJsZSB0byBpbml0aWFsaXplIHdpdGggZm9udCAl
QCIsIGluaXRpYWxGb250LmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAg
PSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gV2UgdHJpZWQgdGhlIHJlcXVlc3RlZCBmb250IGFuZCB0aGUgc3lzdGVtIGZv
bnQuIE5vIGpveS4gV2UgaGF2ZSB0byBnaXZlIHVwLgotICAgICAgICAgICAgICAgIExPR19FUlJP
UigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkp
OwotICAgICAgICAgICAgICAgIGZhaWxlZFNldHVwID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFJlcG9ydCB0aGUgcHJvYmxlbS4KLSAgICAgICAgTE9HX0VS
Uk9SKCJDb3JydXB0IGZvbnQgZGV0ZWN0ZWQsIHVzaW5nICVAIGluIHBsYWNlIG9mICVALiIsCi0g
ICAgICAgICAgICBbbV9wbGF0Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV0sIFtpbml0aWFs
Rm9udC5nZXQoKSBmYW1pbHlOYW1lXSk7Ci0gICAgfQotCi0gICAgLy8gSWYgYWxsIGVsc2UgZmFp
bHMsIHRyeSB0byBzZXQgdXAgdXNpbmcgdGhlIHN5c3RlbSBmb250LgotICAgIC8vIFRoaXMgaXMg
cHJvYmFibHkgYmVjYXVzZSBUaW1lcyBhbmQgVGltZXMgTmV3IFJvbWFuIGFyZSBib3RoIHVuYXZh
aWxhYmxlLgotICAgIGlmIChmYWlsZWRTZXR1cCkgewotICAgICAgICBtX3BsYXRmb3JtRGF0YS5z
ZXROU0ZvbnQoW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOlttX3BsYXRmb3JtRGF0YS5uc0ZvbnQo
KSBwb2ludFNpemVdXSk7Ci0gICAgICAgIExPR19FUlJPUigiZmFpbGVkIHRvIHNldCB1cCBmb250
LCB1c2luZyBzeXN0ZW0gZm9udCAlcyIsIG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgICAg
IGluaXRGb250RGF0YSh0aGlzKTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8g
V29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzE5NDMzNDkwPgotICAgIENHR2x5cGggZHVtbXlH
bHlwaHNbXSA9IHswLCAwfTsKLSAgICBDR1NpemUgZHVtbXlTaXplW10gPSB7Q0dTaXplTWFrZSgw
LCAwKSwgQ0dTaXplTWFrZSgwLCAwKX07Ci0gICAgQ1RGb250VHJhbnNmb3JtR2x5cGhzKG1fcGxh
dGZvcm1EYXRhLmN0Rm9udCgpLCBkdW1teUdseXBocywgZHVtbXlTaXplLCAyLCBrQ1RGb250VHJh
bnNmb3JtQXBwbHlQb3NpdGlvbmluZyB8IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcpOwot
I2VuZGlmCi0gICAgCi0gICAgaW50IGlBc2NlbnQ7Ci0gICAgaW50IGlEZXNjZW50OwotICAgIGlu
dCBpQ2FwSGVpZ2h0OwotICAgIGludCBpTGluZUdhcDsKLSAgICB1bnNpZ25lZCB1bml0c1BlckVt
OwotICAgIGlBc2NlbnQgPSBDR0ZvbnRHZXRBc2NlbnQobV9wbGF0Zm9ybURhdGEuY2dGb250KCkp
OwotICAgIC8vIFNvbWUgZm9udHMgZXJyb25lb3VzbHkgc3BlY2lmeSBhIHBvc2l0aXZlIGRlc2Nl
bmRlciB2YWx1ZS4gV2UgZm9sbG93IENvcmUgVGV4dCBpbiBhc3N1bWluZyB0aGF0Ci0gICAgLy8g
c3VjaCBmb250cyBtZWFudCB0aGUgc2FtZSBkaXN0YW5jZSwgYnV0IGluIHRoZSByZXZlcnNlIGRp
cmVjdGlvbi4KLSAgICBpRGVzY2VudCA9IC1hYnMoQ0dGb250R2V0RGVzY2VudChtX3BsYXRmb3Jt
RGF0YS5jZ0ZvbnQoKSkpOwotICAgIGlDYXBIZWlnaHQgPSBDR0ZvbnRHZXRDYXBIZWlnaHQobV9w
bGF0Zm9ybURhdGEuY2dGb250KCkpOwotICAgIGlMaW5lR2FwID0gQ0dGb250R2V0TGVhZGluZyht
X3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7Ci0gICAgdW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRz
UGVyRW0obV9wbGF0Zm9ybURhdGEuY2dGb250KCkpOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0g
bV9wbGF0Zm9ybURhdGEubV9zaXplOwotICAgIGZsb2F0IGFzY2VudCA9IHNjYWxlRW1Ub1VuaXRz
KGlBc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGRlc2NlbnQgPSAt
c2NhbGVFbVRvVW5pdHMoaURlc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZs
b2F0IGNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplOwotICAgIAotICAgIGZsb2F0IGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGlu
ZUdhcCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGFkanVz
dCBUaW1lcywgSGVsdmV0aWNhLCBhbmQgQ291cmllciB0byBjbG9zZWx5IG1hdGNoIHRoZQotICAg
IC8vIHZlcnRpY2FsIG1ldHJpY3Mgb2YgdGhlaXIgTWljcm9zb2Z0IGNvdW50ZXJwYXJ0cyB0aGF0
IGFyZSB0aGUgZGUgZmFjdG8KLSAgICAvLyB3ZWIgc3RhbmRhcmQuIFRoZSBBcHBLaXQgYWRqdXN0
bWVudCBvZiAyMCUgaXMgdG9vIGJpZyBhbmQgaXMKLSAgICAvLyBpbmNvcnJlY3RseSBhZGRlZCB0
byBsaW5lIHNwYWNpbmcsIHNvIHdlIHVzZSBhIDE1JSBhZGp1c3RtZW50IGluc3RlYWQKLSAgICAv
LyBhbmQgYWRkIGl0IHRvIHRoZSBhc2NlbnQuCi0gICAgTlNTdHJpbmcgKmZhbWlseU5hbWUgPSBb
bV9wbGF0Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV07Ci0gICAgaWYgKFtmYW1pbHlOYW1l
IGlzRXF1YWxUb1N0cmluZzpAIlRpbWVzIl0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5n
OkAiSGVsdmV0aWNhIl0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQ291cmllciJd
KQotICAgICAgICBhc2NlbnQgKz0gZmxvb3JmKCgoYXNjZW50ICsgZGVzY2VudCkgKiAwLjE1Zikg
KyAwLjVmKTsKLQotICAgIC8vIENvbXB1dGUgYW5kIHN0b3JlIGxpbmUgc3BhY2luZywgYmVmb3Jl
IHRoZSBsaW5lIG1ldHJpY3MgaGFja3MgYXJlIGFwcGxpZWQuCi0gICAgbV9mb250TWV0cmljcy5z
ZXRMaW5lU3BhY2luZyhscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5k
ZihsaW5lR2FwKSk7Ci0KLSAgICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxv
dyByb29tIGZvciBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzLgotICAgIC8vIDxyZGFyOi8vcHJvYmxl
bS81Mzg2MTgzPgotICAgIGlmIChkZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgW2ZhbWls
eU5hbWUgaGFzUHJlZml4OkAiSGlyYWdpbm8iXSkgewotICAgICAgICBsaW5lR2FwIC09IDMgLSBk
ZXNjZW50OwotICAgICAgICBkZXNjZW50ID0gMzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHBsYXRm
b3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9u
RmFsbGJhY2soKSkKLSAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNWZXJ0aWNh
bEdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSk7Ci0KLSAgICBmbG9hdCB4SGVpZ2h0Owot
Ci0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewot
ICAgICAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBw
b3NzaWJsZSBmb3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQg
dGhlCi0gICAgICAgIC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9y
dGlvbiBvZiB0aGUgZ2x5cGggdGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCi0gICAgICAgIE5T
R2x5cGggeEdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoJ3gnKTsKLSAgICAgICAgaWYgKHhHbHlw
aCkKLSAgICAgICAgICAgIHhIZWlnaHQgPSAtQ0dSZWN0R2V0TWluWShwbGF0Zm9ybUJvdW5kc0Zv
ckdseXBoKHhHbHlwaCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB4SGVpZ2h0ID0gc2Nh
bGVFbVRvVW5pdHMoQ0dGb250R2V0WEhlaWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSksIHVu
aXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIH0gZWxzZQotICAgICAgICB4SGVpZ2h0ID0gdmVy
dGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLT5mb250TWV0cmljcygpLnhIZWlnaHQoKTsKLQot
ICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKLSAgICBtX2ZvbnRN
ZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChk
ZXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOwotICAg
IG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dFhIZWlnaHQoeEhlaWdodCk7Ci19Ci0KLXN0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZv
clRhZyhGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIEZvdXJDaGFyQ29kZSB0YWJsZU5h
bWUpCi17Ci0gICAgcmV0dXJuIENHRm9udENvcHlUYWJsZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dG
b250KCksIHRhYmxlTmFtZSk7Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0
KCkKLXsKLSAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwOwot
ICAgIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG9zMlRhYmxlID0gYWRvcHRDRihjb3B5Rm9u
dFRhYmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLCAnT1MvMicpKTsKLSAgICBpZiAob3MyVGFibGUg
JiYgQ0ZEYXRhR2V0TGVuZ3RoKG9zMlRhYmxlLmdldCgpKSA+PSA0KSB7Ci0gICAgICAgIGNvbnN0
IFVJbnQ4KiBvczIgPSBDRkRhdGFHZXRCeXRlUHRyKG9zMlRhYmxlLmdldCgpKTsKLSAgICAgICAg
U0ludDE2IG9zMkF2Z0NoYXJXaWR0aCA9IG9zMlsyXSAqIDI1NiArIG9zMlszXTsKLSAgICAgICAg
bV9hdmdDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhvczJBdmdDaGFyV2lkdGgsIG1fZm9udE1l
dHJpY3MudW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLm1fc2l6ZTsKLSAgICB9Ci0KLSAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBoZWFkVGFibGUgPSBhZG9wdENGKGNvcHlGb250VGFibGVG
b3JUYWcobV9wbGF0Zm9ybURhdGEsICdoZWFkJykpOwotICAgIGlmIChoZWFkVGFibGUgJiYgQ0ZE
YXRhR2V0TGVuZ3RoKGhlYWRUYWJsZS5nZXQoKSkgPj0gNDIpIHsKLSAgICAgICAgY29uc3QgVUlu
dDgqIGhlYWQgPSBDRkRhdGFHZXRCeXRlUHRyKGhlYWRUYWJsZS5nZXQoKSk7Ci0gICAgICAgIHVz
aG9ydCB1eE1pbiA9IGhlYWRbMzZdICogMjU2ICsgaGVhZFszN107Ci0gICAgICAgIHVzaG9ydCB1
eE1heCA9IGhlYWRbNDBdICogMjU2ICsgaGVhZFs0MV07Ci0gICAgICAgIFNJbnQxNiB4TWluID0g
c3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1pbik7Ci0gICAgICAgIFNJbnQxNiB4TWF4ID0gc3RhdGlj
X2Nhc3Q8U0ludDE2Pih1eE1heCk7Ci0gICAgICAgIGZsb2F0IGRpZmYgPSBzdGF0aWNfY2FzdDxm
bG9hdD4oeE1heCAtIHhNaW4pOwotICAgICAgICBtX21heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1Vu
aXRzKGRpZmYsIG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLm1f
c2l6ZTsKLSAgICB9Ci0KLSAgICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGlt
YXRlLCB3aGljaCB3aWxsIHBvcHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9z
aXRpdmUuCi0gICAgaW5pdENoYXJXaWR0aHMoKTsKLX0KLSNlbmRpZiAvLyBVU0UoQVBQS0lUKQot
Ci12b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9T
KQotUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgaWYgKGlz
Q3VzdG9tRm9udCgpKSB7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEo
bV9wbGF0Zm9ybURhdGEpOwotICAgICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRG
b250RGF0YS5tX3NpemUgKiBzY2FsZUZhY3RvcjsKLSAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0
ZShzY2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2UpOwotICAgIH0KLQotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLSAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgp
ICogc2NhbGVGYWN0b3I7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShbW05T
Rm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZvcm1EYXRh
Lm5zRm9udCgpIHRvU2l6ZTpzaXplXSwgc2l6ZSwgZmFsc2UsIGZhbHNlLCBtX3BsYXRmb3JtRGF0
YS5vcmllbnRhdGlvbigpKTsKLQotICAgIC8vIEFwcEtpdCByZXNldHMgdGhlIHR5cGUgaW5mb3Jt
YXRpb24gKHNjcmVlbi9wcmludGVyKSB3aGVuIHlvdSBjb252ZXJ0IGEgZm9udCB0byBhIGRpZmZl
cmVudCBzaXplLgotICAgIC8vIFdlIGhhdmUgdG8gZml4IHVwIHRoZSBmb250IHRoYXQgd2UncmUg
aGFuZGVkIGJhY2suCi0gICAgc2NhbGVkRm9udERhdGEuc2V0TlNGb250KFtzY2FsZWRGb250RGF0
YS5uc0ZvbnQoKSBwcmludGVyRm9udF0pOwotCi0gICAgaWYgKHNjYWxlZEZvbnREYXRhLmZvbnQo
KSkgewotICAgICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2Vy
IHNoYXJlZEZvbnRNYW5hZ2VyXTsKLSAgICAgICAgTlNGb250VHJhaXRNYXNrIGZvbnRUcmFpdHMg
PSBbZm9udE1hbmFnZXIgdHJhaXRzT2ZGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpXTsKLQot
ICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkKQotICAgICAgICAgICAg
Zm9udFRyYWl0cyB8PSBOU0JvbGRGb250TWFzazsKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRh
Lm1fc3ludGhldGljT2JsaXF1ZSkKLSAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0gTlNJdGFsaWNG
b250TWFzazsKLQotICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgc2NhbGVkRm9udFRyYWl0cyA9IFtm
b250TWFuYWdlciB0cmFpdHNPZkZvbnQ6c2NhbGVkRm9udERhdGEubnNGb250KCldOwotICAgICAg
ICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAmIE5TQm9sZEZv
bnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBOU0JvbGRGb250TWFzayk7Ci0gICAgICAg
IHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYgTlNJdGFs
aWNGb250TWFzaykgJiYgIShzY2FsZWRGb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzayk7Ci0K
LSAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEoc2NhbGVkRm9u
dERhdGEpOwotICAgIH0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLXZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQotewotICAgIE5TRm9udCog
ZiA9IG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOwotICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1N
b25vLgotICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNo
b3VsZCB0cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCB0
aGUgQXBwS2l0IGRvZXMgbm90IHJlcG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgotCi0g
ICAgLy8gU3BlY2lhbCBjYXNlIE1TLVBHb3RoaWMuCi0gICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFy
Oi8vcHJvYmxlbS80MDMyOTM4Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290aGljIGFzIGZp
eGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhp
YyBhcyBmaXhlZCBwaXRjaC4KLQotICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlwZUNvcnNpdmEK
LSAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91bGQg
bm90IHRyZWF0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLSAgICAvLyBOb3RlIHRo
YXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLQot
ICAgIE5TU3RyaW5nICpuYW1lID0gW2YgZm9udE5hbWVdOwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0
Y2ggPSAoW2YgaXNGaXhlZFBpdGNoXSB8fCBbZiBfaXNGYWtlRml4ZWRQaXRjaF0gfHwKLSAgICAg
ICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9PSBOU09y
ZGVyZWRTYW1lKSAmJgotICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAi
TVMtUEdvdGhpYyJdICE9IE5TT3JkZXJlZFNhbWUgJiYKLSAgICAgICAgICAgW25hbWUgY2FzZUlu
c2Vuc2l0aXZlQ29tcGFyZTpAIk1vbm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7Ci19
Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKLQotRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91
bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5n
Qm94OwotICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyht
X3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uIDoga0NURm9udEhvcml6b250YWxP
cmllbnRhdGlvbiwgJmdseXBoLCAwLCAxKTsKLSAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGlu
Z0JveC5tYXhZKCkpOwotICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIGJv
dW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRP
ZmZzZXQpOwotCi0gICAgcmV0dXJuIGJvdW5kaW5nQm94OwotfQotCi0jaWYgUExBVEZPUk0oTUFD
KQotaW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIEZvbnQ6OnJlbmRlcmluZ1N0eWxlKCkgY29u
c3QKLXsKLSAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdT
dHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25p
bmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbjsKLSAgICBOU0Zv
bnQgKmZvbnQgPSBwbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsKLSAgICBpZiAoZm9udCkgewotICAg
ICAgICBzd2l0Y2ggKFtmb250IHJlbmRlcmluZ01vZGVdKSB7Ci0gICAgICAgIGNhc2UgTlNGb250
SW50ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6Ci0gICAgICAgICAgICBzdHlsZSA9IDA7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOU0ZvbnRBbnRpYWxpYXNlZEludGVn
ZXJBZHZhbmNlbWVudHNSZW5kZXJpbmdNb2RlOgotICAgICAgICAgICAgc3R5bGUgPSBrQ0dGb250
UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biBzdHlsZTsKLX0KLQotaW5saW5lIGJvb2wgRm9udDo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9u
dChHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlKSBjb25zdAotewotICAgIE5TRm9udCAqZm9u
dCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOwotICAgIGlmICghZm9udCB8fCAhcGxhdGZvcm1E
YXRhKCkuaXNDb2xvckJpdG1hcEZvbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGFk
dmFuY2UgPSBOU1NpemVUb0NHU2l6ZShbZm9udCBhZHZhbmNlbWVudEZvckdseXBoOmdseXBoXSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGJvb2wgaGFzQ3VzdG9tVHJh
Y2tpbmcoQ1RGb250UmVmIGZvbnQpCi17Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTA5MAotICAgIFVOVVNFRF9QQVJBTShmb250KTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0
ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCkpLmdldCgpKTsK
LSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNFbW9qaShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBwbGF0Zm9ybURhdGEpCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHJldHVybiBw
bGF0Zm9ybURhdGEubV9pc0Vtb2ppOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocGxhdGZvcm1E
YXRhKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotaW5saW5lIGJvb2wgRm9udDo6
Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNl
LCBib29sJiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdAotewotICAgIC8vIEZhc3QgZ2V0dGVyIGRv
ZXNuJ3QgdGFrZSBjdXN0b20gdHJhY2tpbmcgaW50byBhY2NvdW50Ci0gICAgaWYgKGhhc0N1c3Rv
bVRyYWNraW5nKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIC8vIEZhc3QgZ2V0dGVyIGRvZXNuJ3Qgd29yayBmb3IgZW1vamkKLSAgICBpZiAoaXNF
bW9qaShwbGF0Zm9ybURhdGEoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyAuLi4g
b3IgZm9yIGFueSBiaXRtYXAgZm9udHMgaW4gZ2VuZXJhbAotICAgIGlmIChhZHZhbmNlRm9yQ29s
b3JCaXRtYXBGb250KGdseXBoLCBhZHZhbmNlKSkgewotICAgICAgICBwb3B1bGF0ZWRBZHZhbmNl
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25z
dAotewotICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKLSAgICBib29sIGhvcml6b250
YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWw7Ci0gICAgYm9v
bCBwb3B1bGF0ZWRBZHZhbmNlID0gZmFsc2U7Ci0gICAgaWYgKChob3Jpem9udGFsIHx8IG1faXNC
cm9rZW5JZGVvZ3JhcGhGYWxsYmFjaykgJiYgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihn
bHlwaCwgYWR2YW5jZSwgcG9wdWxhdGVkQWR2YW5jZSkpIHsKLSAgICAgICAgZmxvYXQgcG9pbnRT
aXplID0gcGxhdGZvcm1EYXRhKCkubV9zaXplOwotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBt
ID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwotICAg
ICAgICBpZiAoIUNHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURhdGEoKS5j
Z0ZvbnQoKSwgJm0sIHJlbmRlcmluZ1N0eWxlKCksICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7Ci0g
ICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDR0Zv
bnRDb3B5RnVsbE5hbWUocGxhdGZvcm1EYXRhKCkuY2dGb250KCkpKTsKLSAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIGNhY2hlIGdseXBoIHdpZHRocyBmb3IgJUAgJWYiLCBmdWxsTmFt
ZS5nZXQoKSwgcG9pbnRTaXplKTsKLSAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmICghcG9wdWxhdGVkQWR2YW5jZSkKLSAgICAgICAgQ1RGb250
R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGhvcml6b250YWwg
PyBrQ1RGb250SG9yaXpvbnRhbE9yaWVudGF0aW9uIDoga0NURm9udFZlcnRpY2FsT3JpZW50YXRp
b24sICZnbHlwaCwgJmFkdmFuY2UsIDEpOwotCi0gICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBt
X3N5bnRoZXRpY0JvbGRPZmZzZXQ7Ci19Ci0KLXN0cnVjdCBQcm92aWRlckluZm8gewotICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzOwotICAgIHNpemVfdCBsZW5ndGg7Ci0gICAgQ0ZEaWN0aW9u
YXJ5UmVmIGF0dHJpYnV0ZXM7Ci19OwotCi1zdGF0aWMgY29uc3QgVW5pQ2hhciogcHJvdmlkZVN0
cmluZ0FuZEF0dHJpYnV0ZXMoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY291bnQsIENG
RGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCogY29udGV4dCkKLXsKLSAgICBQcm92aWRl
ckluZm8qIGluZm8gPSBzdGF0aWNfY2FzdDxzdHJ1Y3QgUHJvdmlkZXJJbmZvKj4oY29udGV4dCk7
Ci0gICAgaWYgKHN0cmluZ0luZGV4IDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0cmluZ0lu
ZGV4KSA+PSBpbmZvLT5sZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgKmNvdW50ID0g
aW5mby0+bGVuZ3RoIC0gc3RyaW5nSW5kZXg7Ci0gICAgKmF0dHJpYnV0ZXMgPSBpbmZvLT5hdHRy
aWJ1dGVzOwotICAgIHJldHVybiBpbmZvLT5jaGFyYWN0ZXJzICsgc3RyaW5nSW5kZXg7Ci19Ci0K
LWJvb2wgRm9udDo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLQotICAgIGlmICghbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBv
cnQpCi0gICAgICAgIG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0ID0gc3RkOjpt
YWtlX3VuaXF1ZTxIYXNoTWFwPFN0cmluZywgYm9vbD4+KCk7Ci0KLSAgICBXVEY6Okhhc2hNYXA8
U3RyaW5nLCBib29sPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fY29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2VTdXBwb3J0LT5hZGQoU3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCksIGZhbHNlKTsK
LSAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IGZvbnRFcXVhbGl0
eU9iamVjdCA9IHBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKLQotICAg
IFByb3ZpZGVySW5mbyBpbmZvID0geyBjaGFyYWN0ZXJzLCBsZW5ndGgsIGdldENGU3RyaW5nQXR0
cmlidXRlcygwLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpKSB9OwotICAgIFJldGFpblB0
cjxDVExpbmVSZWY+IGxpbmUgPSBhZG9wdENGKENUTGluZUNyZWF0ZVdpdGhVbmlDaGFyUHJvdmlk
ZXIoJnByb3ZpZGVTdHJpbmdBbmRBdHRyaWJ1dGVzLCAwLCAmaW5mbykpOwotCi0gICAgQ0ZBcnJh
eVJlZiBydW5BcnJheSA9IENUTGluZUdldEdseXBoUnVucyhsaW5lLmdldCgpKTsKLSAgICBDRklu
ZGV4IHJ1bkNvdW50ID0gQ0ZBcnJheUdldENvdW50KHJ1bkFycmF5KTsKLQotICAgIGZvciAoQ0ZJ
bmRleCByID0gMDsgciA8IHJ1bkNvdW50OyByKyspIHsKLSAgICAgICAgQ1RSdW5SZWYgY3RSdW4g
PSBzdGF0aWNfY2FzdDxDVFJ1blJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChydW5BcnJheSwg
cikpOwotICAgICAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoY3RSdW4pID09IENUUnVuR2V0VHlwZUlE
KCkpOwotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcnVuQXR0cmlidXRlcyA9IENUUnVuR2V0QXR0
cmlidXRlcyhjdFJ1bik7Ci0gICAgICAgIENURm9udFJlZiBydW5Gb250ID0gc3RhdGljX2Nhc3Q8
Q1RGb250UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250QXR0
cmlidXRlTmFtZSkpOwotICAgICAgICBpZiAoIUNGRXF1YWwoZm9udEVxdWFsaXR5T2JqZWN0Lmdl
dCgpLCBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkZvbnQpLmdl
dCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245762</attachid>
            <date>2015-01-30 16:57:49 -0800</date>
            <delta_ts>2015-01-31 12:41:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141101-20150130165756.patch</filename>
            <type>text/plain</type>
            <size>81614</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3OTQyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE1LTAxLTMwICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWVyZ2UgU2ltcGxlRm9udERhdGFJT1Mu
bW0gYW5kIFNpbXBsZUZvbnREYXRhTWFjLm1tIGludG8gRm9udENvY29hLm1tCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDExMDEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlIFNpbXBsZUZvbnREYXRhSU9TLm1tIGFu
ZCBTaW1wbGVGb250RGF0YU1hYy5tbS4gQWRkIEZvbnRDb2NvYS5tbS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgUmVtb3ZlIGEgZmV3IENHIG9ubHkgZnVu
Y3Rpb25zIGZyb20gdGhlIGhlYWRlciB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBzdGF0aWMg
ZnVuY3Rpb25zCisgICAgICAgIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxlLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0uCisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxh
dGZvcm1DcmVhdGVTY2FsZWRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRldGVybWlu
ZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmluZ1N0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6aGFz
Q3VzdG9tVHJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuVXNlRmFzdEdseXBoQWR2YW5j
ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29weUZvbnRUYWJsZUZvclRhZyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250OjpyZW5kZXJpbmdTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIE1lcmdl
IGluIHRoZSBpT1Mgc3BlY2lmaWMgcGFydHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOiBSZW1vdmVkLgorCiAyMDE1LTAxLTMw
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIE1lbW9y
eUNhY2hlIGNvZGUgdG8gdXNlIG1vcmUgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzk0MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzOTYsNyArMTM5Niw2IEBACiAJ
CTM3RERDREE3MTM4NDUwMUMwMDA4Qjc5MyAvKiBNSFRNTFBhcnNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdERENEQTMxMzg0NTAxQzAwMDhCNzkz
IC8qIE1IVE1MUGFyc2VyLmggKi87IH07CiAJCTM3RTM1MjRCMTI0NTBDNTIwMEJBRjVEOSAvKiBJ
bnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzdFMzUyNEExMjQ1MEM1MjAwQkFGNUQ5IC8qIElucHV0VHlwZS5jcHAgKi87IH07CiAJCTM3
RTM1MjREMTI0NTBDNjYwMEJBRjVEOSAvKiBJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RTM1MjRDMTI0NTBDNjYwMEJBRjVEOSAvKiBJ
bnB1dFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkzN0U2NTk1MDE2M0IxMEMyMDBFQjQ1NzQgLyogU2ltcGxlRm9udERhdGFJT1MubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0U2NTk0RjE2M0Ix
MEMyMDBFQjQ1NzQgLyogU2ltcGxlRm9udERhdGFJT1MubW0gKi87IH07CiAJCTM3RjU2N0NFMTY1
MzU4RjQwMERERTkyQiAvKiBQb3B1cE9wZW5pbmdPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8q
IFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMzdGNTdBQjkxQTUwNzI2OTAwODc2Rjk4IC8qIEFjY2Vzc2liaWxp
dHlBUklBR3JpZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyOTgxQ0E5RDEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNw
cCAqLzsgfTsKIAkJMzdGNTdBQkExQTUwNzI2RjAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlBUklB
R3JpZENlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjk4MUNBOUUxMzE4MjJFQzAwRDEyRjJBIC8qIEFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwu
Y3BwICovOyB9OwpAQCAtMjQ3NSw2ICsyNDc0LDcgQEAKIAkJN0M0OEE2RDAxOTFDOUQ2NTAwMDI2
Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzQ4QTZDRTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNw
YWNlLmNwcCAqLzsgfTsKIAkJN0M0OEE2RDExOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVz
cGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0
OEE2Q0YxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5oICovOyB9OwogCQk3QzQ5
MDJBMjE4QjgyNUY4MDA3RDkyOTggLyogRE9NV2hlZWxFdmVudEludGVybmFsLmggaW4gQ29weSBH
ZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTk4
OURDQTBBQ0M4QkJEMDBBMEJDNTEgLyogRE9NV2hlZWxFdmVudEludGVybmFsLmggKi87IH07CisJ
CTdDNEVERDc0MUE3QjYwNzgwMDE5OEM0RCAvKiBGb250Q29jb2EubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQg
LyogRm9udENvY29hLm1tICovOyB9OwogCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5z
cGVjdG9yT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5jcHAg
Ki87IH07CiAJCTdDNTM0M0ZDMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0M1MzQzRkExN0I3NEI2MzAwNDIzMkYwIC8qIEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAg
Ki87IH07CiAJCTdDNTM0M0ZEMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
NTM0M0ZCMTdCNzRCNjMwMDQyMzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCAqLzsg
fTsKQEAgLTQ2ODcsNyArNDY4Nyw2IEBACiAJCUIyQUZGQzdDMEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250Q2FjaGVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkFGRkM3NDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhY2hlTWFjLm1tICovOyB9Owog
CQlCMkFGRkM3RDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM3NTBE
MDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi87IH07CiAJCUIy
QUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM3NjBEMDBBNUMx
MDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oICovOyB9OwotCQlCMkFGRkM3RjBE
MDBBNUMxMDAzMDA3NEQgLyogU2ltcGxlRm9udERhdGFNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkFGRkM3NzBEMDBBNUMxMDAzMDA3NEQgLyog
U2ltcGxlRm9udERhdGFNYWMubW0gKi87IH07CiAJCUIyQUZGQzgwMEQwMEE1QzEwMDMwMDc0RCAv
KiBGb250Q2FzY2FkZUNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29jb2Eu
bW0gKi87IH07CiAJCUIyQUZGQzgzMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VNYWMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBRkZDN0Iw
RDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi87IH07CiAJCUIyQUZGQzk3MEQw
MEE1REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQUZGQzhDMEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0
Qm91bmRhcmllcy5tbSAqLzsgfTsKQEAgLTg0NjUsNyArODQ2NCw2IEBACiAJCTM3RERDREEzMTM4
NDUwMUMwMDA4Qjc5MyAvKiBNSFRNTFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNSFRNTFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0Uz
NTI0QTEyNDUwQzUyMDBCQUY1RDkgLyogSW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3RTM1MjRDMTI0NTBDNjYwMEJBRjVEOSAvKiBJbnB1dFR5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTM3RTY1OTRGMTYzQjEwQzIwMEVCNDU3NCAvKiBTaW1wbGVGb250RGF0YUlPUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNpbXBsZUZvbnREYXRh
SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0Y4MThGQjBENjU3NjA2MDA1
RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFGQUQg
LyogVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTY1OSw2ICs5NjU3LDcgQEAKIAkJN0M0OEE2Q0UxOTFDOUQ2NTAwMDI2
Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJLaXROYW1lc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzQ4QTZDRjE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdE5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzQ4QTZEMjE5MUM5RDhFMDAwMjY2NzQgLyogV2ViS2l0TmFtZXNw
YWNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBXZWJLaXROYW1lc3BhY2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENvY29hLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9y
T3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0
b3JPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M1MjJENEExNUI0
NzhCMjAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzUzNDNGQTE3Qjc0QjYzMDA0MjMyRjAgLyogSlNNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjA5MCw3ICsx
MjA4OSw2IEBACiAJCUIyQUZGQzc0MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q2FjaGVNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhY2hlTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkFGRkM3NTBEMDBBNUMxMDAzMDA3NEQg
LyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQUZGQzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQUZGQzc3MEQwMEE1
QzEwMDMwMDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBTaW1wbGVGb250RGF0YU1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2Nh
ZGVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDN0IwRDAwQTVD
MTAwMzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR2x5cGhQYWdlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJBRkZDODUwRDAwQTVERjAwMzAwNzREIC8qIGNoYXJhY3Rlci1zZXRzLnR4dCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gImNoYXJhY3Rlci1zZXRzLnR4dCI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNTczNCw3ICsxNTczMiw2IEBACiAJCQkJQzU4MzYxQTgxNzQ0NTIzRjAw
MTczNTExIC8qIEZvbnRTZXJ2aWNlc0lPUy5tbSAqLywKIAkJCQkzMUFCNEZGRjEyMjg3OEEyMDAx
QTdEQjAgLyogR3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLywKIAkJCQlGRUQxM0QzRjBDRUE5Mzk0
MDBEODk0NjYgLyogSWNvbklPUy5tbSAqLywKLQkJCQkzN0U2NTk0RjE2M0IxMEMyMDBFQjQ1NzQg
LyogU2ltcGxlRm9udERhdGFJT1MubW0gKi8sCiAJCQkJQ0VFQzYwMzQxODdERDk2MjAwM0U0M0JC
IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLmggKi8sCiAJCQkJQ0RDQTgyOTQxNjc5MTAw
RjAwODc1NzE0IC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uSU9TLm1tICovLAogCQkJKTsKQEAg
LTIwNDY2LDcgKzIwNDYzLDYgQEAKIAkJCQlDRDYwQzBDNDE5M0U4N0M3MDAzQzY1NkIgLyogTWVk
aWFUaW1lUVRLaXQubW0gKi8sCiAJCQkJMkQ2RTQ2ODIxN0Q2NjBGNTAwRUNGOEJCIC8qIFBERkRv
Y3VtZW50SW1hZ2VNYWMubW0gKi8sCiAJCQkJMTYzRTg4RjUxMThBMzlEMjAwRUQ5MjMxIC8qIFNp
bXBsZUZvbnREYXRhQ29yZVRleHQuY3BwICovLAotCQkJCUIyQUZGQzc3MEQwMEE1QzEwMDMwMDc0
RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSAqLywKIAkJCQk0OUZGQkYzRDExQzkzRUUzMDA2QTcx
MTggLyogV2ViR0xMYXllci5oICovLAogCQkJCTQ5RkZCRjNFMTFDOTNFRTMwMDZBNzExOCAvKiBX
ZWJHTExheWVyLm1tICovLAogCQkJCTBGQ0YzMzJCMEYyQjlBMjUwMDRCNjc5NSAvKiBXZWJMYXll
ci5oICovLApAQCAtMjA3OTksNiArMjA3OTUsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVD
b2NvYS5tbSAqLywKKwkJCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1t
ICovLAogCQkJCUI1MzIwRDZBMTIyQTI0RTkwMDJEMTQ0MCAvKiBGb250UGxhdGZvcm1EYXRhQ29j
b2EubW0gKi8sCiAJCQkJMkQwQjRBQTkxOERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oICov
LAogCQkJCTJEMEI0QUFBMThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UubW0gKi8sCkBAIC0y
OTU0NSw4ICsyOTU0Miw2IEBACiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJl
ZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTYzRTg4RjcxMThBMzlEMjAwRUQ5MjMx
IC8qIFNpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzdFNjU5
NTAxNjNCMTBDMjAwRUI0NTc0IC8qIFNpbXBsZUZvbnREYXRhSU9TLm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQjJBRkZDN0YwRDAwQTVDMTAwMzAwNzREIC8qIFNpbXBsZUZvbnREYXRhTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTQ4OTQ0QTIxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVM
YXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRFOUIxMUIxODE0NTY5MjAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzVBMUVB
N0MxNTJCQ0YwNDAwNEQwMEI2IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI5NjMwLDYgKzI5NjI1LDcgQEAKIAkJCQlFNDcxMjdDQTE2MzQzOEExMDBFRDZG
NUEgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzVFQjcyOTBFODFERTgxMDBCMjU5NjUgLyogU3R5bGVNYXJxdWVlRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY1MDI3MTEwMkJBOTZBMDA2NkYzOUEgLyogU3R5bGVNZWRpYS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk3QzRFREQ3NDFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI3NEQwRTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVs
dGlDb2xEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2REZCMEExOTkwNjcwMDdGQjhD
NSAvKiBTdHlsZVByb3BlcnRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCMjUxMDYxNTJB
MEJBRjAwNjlCNzc5IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAx
Nzk0MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNiwxMiArMjM2LDYgQEAgcHJpdmF0ZToKICAgICBmbG9hdCB3aWR0aEZv
ckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRpZgogCi0jaWYgVVNFKENHKQotICAgIGJvb2wg
Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihHbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29s
JiBwb3B1bGF0ZWRBZHZhbmNlKSBjb25zdDsKLSAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5k
ZXJpbmdTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgYWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChH
bHlwaCwgQ0dTaXplJiByZXN1bHQpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbnQg
aXMgYSBjb2xvciBiaXRtYXAgZm9udAotI2VuZGlmCi0KICAgICBGb250TWV0cmljcyBtX2ZvbnRN
ZXRyaWNzOwogICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoOwogICAgIGZsb2F0IG1fYXZnQ2hhcldp
ZHRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDb2NvYS5tbQkocmV2aXNpb24gMTc5Mzg1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06MTc5Mzg1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiRm9udC5oIgorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNp
bXBvcnQgIkNvbG9yLmgiCisjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbXBvcnQgIkNv
cmVUZXh0U1BJLmgiCisjaW1wb3J0ICJGbG9hdFJlY3QuaCIKKyNpbXBvcnQgIkZvbnRDYWNoZS5o
IgorI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKKyNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgor
I2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCisjaWYgVVNFKEFQUEtJVCkKKyNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KKyNpbXBvcnQg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbXBv
cnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKKyNpbXBvcnQgPGZsb2F0Lmg+CisjaW1w
b3J0IDx1bmljb2RlL3VjaGFyLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9y
dCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisjaWYg
IVBMQVRGT1JNKElPUykKK0BpbnRlcmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNyZXRBUEkpCist
IChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOworQGVuZAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmIFVTRShBUFBLSVQpCitzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlw
aHMoQ1RGb250UmVmIGN0Rm9udCkKK3sKKyAgICAvLyBUaGUgY2hlY2sgZG9lc24ndCBsb29rIG5l
YXQgYnV0IHRoaXMgaXMgd2hhdCBBcHBLaXQgZG9lcyBmb3IgdmVydGljYWwgd3JpdGluZy4uLgor
ICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlB
dmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAg
ICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOwor
ICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7
CisgICAgICAgIENURm9udFRhYmxlVGFnIHRhZyA9IChDVEZvbnRUYWJsZVRhZykodWludHB0cl90
KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCk7CisgICAgICAg
IGlmICh0YWcgPT0ga0NURm9udFRhYmxlVmhlYSB8fCB0YWcgPT0ga0NURm9udFRhYmxlVk9SRykK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3N0YXRpYyBib29sIGluaXRGb250RGF0YShGb250KiBmb250RGF0YSkKK3sKKyAgICBpZiAoIWZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250
RmFtaWx5KHZvaWQpCit7CisgICAgc3RhdGljIE5TU3RyaW5nICp3ZWJGYWxsYmFja0ZvbnRGYW1p
bHkgPSBbW1tOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxNi4wZl0gZmFtaWx5TmFtZV0gcmV0YWlu
XTsKKyAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250RmFtaWx5OworfQorCitjb25zdCBGb250KiBG
b250Ojpjb21wb3NpdGVGb250UmVmZXJlbmNlRm9udChOU0ZvbnQgKmtleSkgY29uc3QKK3sKKyAg
ICBpZiAoIWtleSB8fCBDRkVxdWFsKGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKENU
Rm9udFJlZihrZXkpKSkuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9t
Rm9udCgpKTsKKworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXJpdmVkRm9udERhdGEtPmNvbXBv
c2l0ZUZvbnRSZWZlcmVuY2VzLmFkZChrZXksIG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkgeworICAgICAgICBOU0ZvbnQgKnN1YnN0aXR1dGVGb250ID0gW2tleSBwcmlu
dGVyRm9udF07CisKKyAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gQ1RGb250
R2V0U3ltYm9saWNUcmFpdHMoKENURm9udFJlZilzdWJzdGl0dXRlRm9udCk7CisgICAgICAgIGJv
b2wgc3ludGhldGljQm9sZCA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY0JvbGQoKSAmJiAhKHRy
YWl0cyAmIGtDVEZvbnRCb2xkVHJhaXQpOworICAgICAgICBib29sIHN5bnRoZXRpY09ibGlxdWUg
PSBwbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250
SXRhbGljVHJhaXQpOworCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc3Vic3RpdHV0ZVBsYXRm
b3JtKHN1YnN0aXR1dGVGb250LCBwbGF0Zm9ybURhdGEoKS5zaXplKCksIHN5bnRoZXRpY0JvbGQs
IHN5bnRoZXRpY09ibGlxdWUsIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCksIHBsYXRmb3Jt
RGF0YSgpLndpZHRoVmFyaWFudCgpKTsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IEZvbnQ6OmNyZWF0ZShzdWJzdGl0dXRlUGxhdGZvcm0sIGlzQ3VzdG9tRm9udCgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cit9CisKK3Zv
aWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBt
X3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyAxLjBmIDogMC5mOworCisgICAgYm9vbCBm
YWlsZWRTZXR1cCA9IGZhbHNlOworICAgIGlmICghaW5pdEZvbnREYXRhKHRoaXMpKSB7CisgICAg
ICAgIC8vIEFjayEgU29tZXRoaW5nIHZlcnkgYmFkIGhhcHBlbmVkLCBsaWtlIGEgY29ycnVwdCBm
b250LgorICAgICAgICAvLyBUcnkgbG9va2luZyBmb3IgYW4gYWx0ZXJuYXRlICdiYXNlJyBmb250
IGZvciB0aGlzIHJlbmRlcmVyLgorCisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBoYWNrIHRvIHVz
ZSAiVGltZXMgTmV3IFJvbWFuIiBpbiBwbGFjZSBvZiAiVGltZXMiLgorICAgICAgICAvLyAiVGlt
ZXMgUk8iIGlzIGEgY29tbW9uIGZvbnQgd2hvc2UgZmFtaWx5IG5hbWUgaXMgIlRpbWVzIi4KKyAg
ICAgICAgLy8gSXQgb3ZlcnJpZGVzIHRoZSBub3JtYWwgIlRpbWVzIiBmYW1pbHkgZm9udC4KKyAg
ICAgICAgLy8gSXQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYSBjb3JydXB0IHJlZ3VsYXIgdmFyaWFu
dC4KKyAgICAgICAgTlNTdHJpbmcgKmZhbGxiYWNrRm9udEZhbWlseTsKKyAgICAgICAgaWYgKFtb
bV9wbGF0Zm9ybURhdGEubnNGb250KCkgZmFtaWx5TmFtZV0gaXNFcXVhbDpAIlRpbWVzIl0pCisg
ICAgICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSBAIlRpbWVzIE5ldyBSb21hbiI7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9IHdlYkZhbGxiYWNrRm9u
dEZhbWlseSgpOworICAgICAgICAKKyAgICAgICAgLy8gVHJ5IHNldHRpbmcgdXAgdGhlIGFsdGVy
bmF0ZSBmb250LgorICAgICAgICAvLyBUaGlzIGlzIGEgbGFzdCBkaXRjaCBlZmZvcnQgdG8gdXNl
IGEgc3Vic3RpdHV0ZSBmb250IHdoZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25nLgorI2lmICFF
UlJPUl9ESVNBQkxFRAorICAgICAgICBSZXRhaW5QdHI8TlNGb250PiBpbml0aWFsRm9udCA9IG1f
cGxhdGZvcm1EYXRhLm5zRm9udCgpOworI2VuZGlmCisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0
YS5mb250KCkpCisgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW1tOU0ZvbnRN
YW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0Zv
bnQoKSB0b0ZhbWlseTpmYWxsYmFja0ZvbnRGYW1pbHldKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtOU0ZvbnQgZm9udFdpdGhOYW1lOmZhbGxi
YWNrRm9udEZhbWlseSBzaXplOm1fcGxhdGZvcm1EYXRhLnNpemUoKV0pOworICAgICAgICBpZiAo
IWluaXRGb250RGF0YSh0aGlzKSkgeworICAgICAgICAgICAgaWYgKFtmYWxsYmFja0ZvbnRGYW1p
bHkgaXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7CisgICAgICAgICAgICAgICAgLy8gT0ss
IGNvdWxkbid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGUgdG8gVGltZXMs
IGZhbGxiYWNrCisgICAgICAgICAgICAgICAgLy8gb24gdGhlIHN5c3RlbSBmb250LiAgSWYgdGhp
cyBmYWlscyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxlZnQuCisgICAgICAgICAgICAgICAgbV9w
bGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0g
Y29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6d2ViRmFsbGJhY2tG
b250RmFtaWx5KCldKTsKKyAgICAgICAgICAgICAgICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCwgVGltZXMsIFRpbWVzIE5ldyBSb21h
biwgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCisgICAg
ICAgICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250
ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBmYWlsZWRTZXR1
cCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRoZSBzeXN0ZW0g
Zm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCisgICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQo
KSk7CisgICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gUmVwb3J0IHRoZSBwcm9ibGVtLgorICAgICAgICBMT0df
RVJST1IoIkNvcnJ1cHQgZm9udCBkZXRlY3RlZCwgdXNpbmcgJUAgaW4gcGxhY2Ugb2YgJUAuIiwK
KyAgICAgICAgICAgIFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXSwgW2luaXRp
YWxGb250LmdldCgpIGZhbWlseU5hbWVdKTsKKyAgICB9CisKKyAgICAvLyBJZiBhbGwgZWxzZSBm
YWlscywgdHJ5IHRvIHNldCB1cCB1c2luZyB0aGUgc3lzdGVtIGZvbnQuCisgICAgLy8gVGhpcyBp
cyBwcm9iYWJseSBiZWNhdXNlIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9tYW4gYXJlIGJvdGggdW5h
dmFpbGFibGUuCisgICAgaWYgKGZhaWxlZFNldHVwKSB7CisgICAgICAgIG1fcGxhdGZvcm1EYXRh
LnNldE5TRm9udChbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W21fcGxhdGZvcm1EYXRhLm5zRm9u
dCgpIHBvaW50U2l6ZV1dKTsKKyAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHVwIGZv
bnQsIHVzaW5nIHN5c3RlbSBmb250ICVzIiwgbV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICAg
ICAgaW5pdEZvbnREYXRhKHRoaXMpOworICAgIH0KKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAv
LyBXb3JrIGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vMTk0MzM0OTA+CisgICAgQ0dHbHlwaCBkdW1t
eUdseXBoc1tdID0gezAsIDB9OworICAgIENHU2l6ZSBkdW1teVNpemVbXSA9IHtDR1NpemVNYWtl
KDAsIDApLCBDR1NpemVNYWtlKDAsIDApfTsKKyAgICBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9w
bGF0Zm9ybURhdGEuY3RGb250KCksIGR1bW15R2x5cGhzLCBkdW1teVNpemUsIDIsIGtDVEZvbnRU
cmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyk7
CisjZW5kaWYKKyAgICAKKyAgICBpbnQgaUFzY2VudDsKKyAgICBpbnQgaURlc2NlbnQ7CisgICAg
aW50IGlDYXBIZWlnaHQ7CisgICAgaW50IGlMaW5lR2FwOworICAgIHVuc2lnbmVkIHVuaXRzUGVy
RW07CisgICAgaUFzY2VudCA9IENHRm9udEdldEFzY2VudChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQo
KSk7CisgICAgLy8gU29tZSBmb250cyBlcnJvbmVvdXNseSBzcGVjaWZ5IGEgcG9zaXRpdmUgZGVz
Y2VuZGVyIHZhbHVlLiBXZSBmb2xsb3cgQ29yZSBUZXh0IGluIGFzc3VtaW5nIHRoYXQKKyAgICAv
LyBzdWNoIGZvbnRzIG1lYW50IHRoZSBzYW1lIGRpc3RhbmNlLCBidXQgaW4gdGhlIHJldmVyc2Ug
ZGlyZWN0aW9uLgorICAgIGlEZXNjZW50ID0gLWFicyhDR0ZvbnRHZXREZXNjZW50KG1fcGxhdGZv
cm1EYXRhLmNnRm9udCgpKSk7CisgICAgaUNhcEhlaWdodCA9IENHRm9udEdldENhcEhlaWdodCht
X3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisgICAgaUxpbmVHYXAgPSBDR0ZvbnRHZXRMZWFkaW5n
KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKTsKKyAgICB1bml0c1BlckVtID0gQ0dGb250R2V0VW5p
dHNQZXJFbShtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7CisKKyAgICBmbG9hdCBwb2ludFNpemUg
PSBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CisgICAgZmxvYXQgYXNjZW50ID0gc2NhbGVFbVRvVW5p
dHMoaUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxvYXQgZGVzY2VudCA9
IC1zY2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAg
ZmxvYXQgY2FwSGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoaUNhcEhlaWdodCwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemU7CisgICAgCisgICAgZmxvYXQgbGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKGlM
aW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKworICAgIC8vIFdlIG5lZWQgdG8gYWRq
dXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhlCisg
ICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRlcnBhcnRzIHRo
YXQgYXJlIHRoZSBkZSBmYWN0bworICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBhZGp1
c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcworICAgIC8vIGluY29ycmVjdGx5IGFkZGVk
IHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5zdGVhZAorICAg
IC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KKyAgICBOU1N0cmluZyAqZmFtaWx5TmFtZSA9
IFttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXTsKKyAgICBpZiAoW2ZhbWlseU5h
bWUgaXNFcXVhbFRvU3RyaW5nOkAiVGltZXMiXSB8fCBbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJp
bmc6QCJIZWx2ZXRpY2EiXSB8fCBbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJDb3VyaWVy
Il0pCisgICAgICAgIGFzY2VudCArPSBmbG9vcmYoKChhc2NlbnQgKyBkZXNjZW50KSAqIDAuMTVm
KSArIDAuNWYpOworCisgICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgbGluZSBzcGFjaW5nLCBiZWZv
cmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBhcmUgYXBwbGllZC4KKyAgICBtX2ZvbnRNZXRyaWNz
LnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYoZGVzY2VudCkgKyBscm91
bmRmKGxpbmVHYXApKTsKKworICAgIC8vIEhhY2sgSGlyYWdpbm8gbGluZSBtZXRyaWNzIHRvIGFs
bG93IHJvb20gZm9yIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMuCisgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzUzODYxODM+CisgICAgaWYgKGRlc2NlbnQgPCAzICYmIGxpbmVHYXAgPj0gMyAmJiBbZmFt
aWx5TmFtZSBoYXNQcmVmaXg6QCJIaXJhZ2lubyJdKSB7CisgICAgICAgIGxpbmVHYXAgLT0gMyAt
IGRlc2NlbnQ7CisgICAgICAgIGRlc2NlbnQgPSAzOworICAgIH0KKyAgICAKKyAgICBpZiAocGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaygpKQorICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRp
Y2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKKworICAgIGZsb2F0IHhIZWlnaHQ7
CisKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsKSB7
CisgICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdz
IHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVl
ZCB0aGUKKyAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8gb25seSBpbmNsdWRlIHRoZSBw
b3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBiYXNlbGluZS4KKyAgICAgICAg
TlNHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNoYXJhY3RlcigneCcpOworICAgICAgICBpZiAoeEds
eXBoKQorICAgICAgICAgICAgeEhlaWdodCA9IC1DR1JlY3RHZXRNaW5ZKHBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgoeEdseXBoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHhIZWlnaHQgPSBz
Y2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpKSwg
dW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgfSBlbHNlCisgICAgICAgIHhIZWlnaHQgPSB2
ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCktPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOwor
CisgICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOworICAgIG1fZm9u
dE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50
KGRlc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7Cisg
ICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOworICAgIG1fZm9udE1ldHJpY3Mu
c2V0WEhlaWdodCh4SGVpZ2h0KTsKK30KKworc3RhdGljIENGRGF0YVJlZiBjb3B5Rm9udFRhYmxl
Rm9yVGFnKEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgRm91ckNoYXJDb2RlIHRhYmxl
TmFtZSkKK3sKKyAgICByZXR1cm4gQ0dGb250Q29weVRhYmxlRm9yVGFnKHBsYXRmb3JtRGF0YS5j
Z0ZvbnQoKSwgdGFibGVOYW1lKTsKK30KKwordm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aElu
aXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKKyAgICBtX21heENoYXJXaWR0aCA9IDA7
CisgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gb3MyVGFibGUgPSBhZG9wdENGKGNvcHlG
b250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdPUy8yJykpOworICAgIGlmIChvczJUYWJs
ZSAmJiBDRkRhdGFHZXRMZW5ndGgob3MyVGFibGUuZ2V0KCkpID49IDQpIHsKKyAgICAgICAgY29u
c3QgVUludDgqIG9zMiA9IENGRGF0YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkpOworICAgICAg
ICBTSW50MTYgb3MyQXZnQ2hhcldpZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNdOworICAgICAg
ICBtX2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwgbV9mb250
TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEubV9zaXplOworICAgIH0KKwor
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGhlYWRUYWJsZSA9IGFkb3B0Q0YoY29weUZvbnRUYWJs
ZUZvclRhZyhtX3BsYXRmb3JtRGF0YSwgJ2hlYWQnKSk7CisgICAgaWYgKGhlYWRUYWJsZSAmJiBD
RkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+PSA0MikgeworICAgICAgICBjb25zdCBV
SW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgpKTsKKyAgICAgICAg
dXNob3J0IHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKKyAgICAgICAgdXNob3J0
IHV4TWF4ID0gaGVhZFs0MF0gKiAyNTYgKyBoZWFkWzQxXTsKKyAgICAgICAgU0ludDE2IHhNaW4g
PSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKKyAgICAgICAgU0ludDE2IHhNYXggPSBzdGF0
aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKKyAgICAgICAgZmxvYXQgZGlmZiA9IHN0YXRpY19jYXN0
PGZsb2F0Pih4TWF4IC0geE1pbik7CisgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc2NhbGVFbVRv
VW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEu
bV9zaXplOworICAgIH0KKworICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0
aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1w
b3NpdGl2ZS4KKyAgICBpbml0Q2hhcldpZHRocygpOworfQorI2VuZGlmIC8vIFVTRShBUFBLSVQp
CisKK3ZvaWQgRm9udDo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKworI2lmICFQTEFURk9STShJ
T1MpCitQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK3sKKyAgICBpZiAo
aXNDdXN0b21Gb250KCkpIHsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0
YShtX3BsYXRmb3JtRGF0YSk7CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxl
ZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOworICAgICAgICByZXR1cm4gRm9udDo6Y3Jl
YXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXpl
KCkgKiBzY2FsZUZhY3RvcjsKKyAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKFtb
TlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURh
dGEubnNGb250KCkgdG9TaXplOnNpemVdLCBzaXplLCBmYWxzZSwgZmFsc2UsIG1fcGxhdGZvcm1E
YXRhLm9yaWVudGF0aW9uKCkpOworCisgICAgLy8gQXBwS2l0IHJlc2V0cyB0aGUgdHlwZSBpbmZv
cm1hdGlvbiAoc2NyZWVuL3ByaW50ZXIpIHdoZW4geW91IGNvbnZlcnQgYSBmb250IHRvIGEgZGlm
ZmVyZW50IHNpemUuCisgICAgLy8gV2UgaGF2ZSB0byBmaXggdXAgdGhlIGZvbnQgdGhhdCB3ZSdy
ZSBoYW5kZWQgYmFjay4KKyAgICBzY2FsZWRGb250RGF0YS5zZXROU0ZvbnQoW3NjYWxlZEZvbnRE
YXRhLm5zRm9udCgpIHByaW50ZXJGb250XSk7CisKKyAgICBpZiAoc2NhbGVkRm9udERhdGEuZm9u
dCgpKSB7CisgICAgICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFn
ZXIgc2hhcmVkRm9udE1hbmFnZXJdOworICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgZm9udFRyYWl0
cyA9IFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCldOwor
CisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQpCisgICAgICAgICAg
ICBmb250VHJhaXRzIHw9IE5TQm9sZEZvbnRNYXNrOworICAgICAgICBpZiAobV9wbGF0Zm9ybURh
dGEubV9zeW50aGV0aWNPYmxpcXVlKQorICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBOU0l0YWxp
Y0ZvbnRNYXNrOworCisgICAgICAgIE5TRm9udFRyYWl0TWFzayBzY2FsZWRGb250VHJhaXRzID0g
W2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpzY2FsZWRGb250RGF0YS5uc0ZvbnQoKV07CisgICAg
ICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYgTlNCb2xk
Rm9udE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKTsKKyAgICAg
ICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBOU0l0
YWxpY0ZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKTsK
KworICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShzY2FsZWRG
b250RGF0YSk7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgTlNGb250
KiBmID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7CisgICAgLy8gU3BlY2lhbCBjYXNlIE9zYWth
LU1vbm8uCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8zOTk5NDY3Piwgd2Ug
c2hvdWxkIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0aGF0
IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCisK
KyAgICAvLyBTcGVjaWFsIGNhc2UgTVMtUEdvdGhpYy4KKyAgICAvLyBBY2NvcmRpbmcgdG8gPHJk
YXI6Ly9wcm9ibGVtLzQwMzI5Mzg+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1TLVBHb3RoaWMgYXMg
Zml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNUy1QR290
aGljIGFzIGZpeGVkIHBpdGNoLgorCisgICAgLy8gU3BlY2lhbCBjYXNlIE1vbm90eXBlQ29yc2l2
YQorICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcwND4sIHdlIHNob3Vs
ZCBub3QgdHJlYXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5vdGUg
dGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgor
CisgICAgTlNTdHJpbmcgKm5hbWUgPSBbZiBmb250TmFtZV07CisgICAgbV90cmVhdEFzRml4ZWRQ
aXRjaCA9IChbZiBpc0ZpeGVkUGl0Y2hdIHx8IFtmIF9pc0Zha2VGaXhlZFBpdGNoXSB8fAorICAg
ICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiT3Nha2EtTW9ubyJdID09IE5T
T3JkZXJlZFNhbWUpICYmCisgICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6
QCJNUy1QR290aGljIl0gIT0gTlNPcmRlcmVkU2FtZSAmJgorICAgICAgICAgICBbbmFtZSBjYXNl
SW5zZW5zaXRpdmVDb21wYXJlOkAiTW9ub3R5cGVDb3JzaXZhIl0gIT0gTlNPcmRlcmVkU2FtZTsK
K30KKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCitGbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1C
b3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3g7CisgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhz
KG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24gOiBrQ1RGb250SG9yaXpvbnRh
bE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOworICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5k
aW5nQm94Lm1heFkoKSk7CisgICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAg
Ym91bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9s
ZE9mZnNldCk7CisKKyAgICByZXR1cm4gYm91bmRpbmdCb3g7Cit9CisKKyNpZiBQTEFURk9STShN
QUMpCitpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyaW5nU3R5bGUoKSBj
b25zdAoreworICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmlu
Z1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlv
bmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOworICAgIE5T
Rm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9udCgpOworICAgIGlmIChmb250KSB7Cisg
ICAgICAgIHN3aXRjaCAoW2ZvbnQgcmVuZGVyaW5nTW9kZV0pIHsKKyAgICAgICAgY2FzZSBOU0Zv
bnRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZToKKyAgICAgICAgICAgIHN0eWxlID0g
MDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5TRm9udEFudGlhbGlhc2VkSW50
ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6CisgICAgICAgICAgICBzdHlsZSA9IGtDR0Zv
bnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHN0eWxlOworfQorCitpbmxpbmUgYm9vbCBGb250OjphZHZhbmNlRm9yQ29sb3JCaXRtYXBG
b250KEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UpIGNvbnN0Cit7CisgICAgTlNGb250ICpm
b250ID0gcGxhdGZvcm1EYXRhKCkubnNGb250KCk7CisgICAgaWYgKCFmb250IHx8ICFwbGF0Zm9y
bURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YWR2YW5jZSA9IE5TU2l6ZVRvQ0dTaXplKFtmb250IGFkdmFuY2VtZW50Rm9yR2x5cGg6Z2x5cGhd
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitzdGF0aWMgYm9vbCBoYXNDdXN0b21U
cmFja2luZyhDVEZvbnRSZWYgZm9udCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCisgICAgVU5VU0VEX1BBUkFNKGZvbnQpOwor
ICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIENURm9udERlc2NyaXB0b3JJc1N5
c3RlbVVJRm9udChhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihmb250KSkuZ2V0KCkp
OworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Vtb2ppKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJu
IHBsYXRmb3JtRGF0YS5tX2lzRW1vamk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwbGF0Zm9y
bURhdGEpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBGb250
OjpjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKEdseXBoIGdseXBoLCBDR1NpemUmIGFkdmFu
Y2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpIGNvbnN0Cit7CisgICAgLy8gRmFzdCBnZXR0ZXIg
ZG9lc24ndCB0YWtlIGN1c3RvbSB0cmFja2luZyBpbnRvIGFjY291bnQKKyAgICBpZiAoaGFzQ3Vz
dG9tVHJhY2tpbmcocGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgLy8gRmFzdCBnZXR0ZXIgZG9lc24ndCB3b3JrIGZvciBlbW9qaQorICAgIGlmIChp
c0Vtb2ppKHBsYXRmb3JtRGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIC4u
LiBvciBmb3IgYW55IGJpdG1hcCBmb250cyBpbiBnZW5lcmFsCisgICAgaWYgKGFkdmFuY2VGb3JD
b2xvckJpdG1hcEZvbnQoZ2x5cGgsIGFkdmFuY2UpKSB7CisgICAgICAgIHBvcHVsYXRlZEFkdmFu
Y2UgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworICAgIGJvb2wgaG9yaXpv
bnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbDsKKyAgICBi
b29sIHBvcHVsYXRlZEFkdmFuY2UgPSBmYWxzZTsKKyAgICBpZiAoKGhvcml6b250YWwgfHwgbV9p
c0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKSAmJiBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVy
KGdseXBoLCBhZHZhbmNlLCBwb3B1bGF0ZWRBZHZhbmNlKSkgeworICAgICAgICBmbG9hdCBwb2lu
dFNpemUgPSBwbGF0Zm9ybURhdGEoKS5tX3NpemU7CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3Jt
IG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7Cisg
ICAgICAgIGlmICghQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgp
LmNnRm9udCgpLCAmbSwgcmVuZGVyaW5nU3R5bGUoKSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsK
KyAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENH
Rm9udENvcHlGdWxsTmFtZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkpOworICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUgZ2x5cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1bGxO
YW1lLmdldCgpLCBwb2ludFNpemUpOworICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFwb3B1bGF0ZWRBZHZhbmNlKQorICAgICAgICBDVEZv
bnRHZXRBZHZhbmNlc0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgaG9yaXpvbnRh
bCA/IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24gOiBrQ1RGb250VmVydGljYWxPcmllbnRh
dGlvbiwgJmdseXBoLCAmYWR2YW5jZSwgMSk7CisKKyAgICByZXR1cm4gYWR2YW5jZS53aWR0aCAr
IG1fc3ludGhldGljQm9sZE9mZnNldDsKK30KKworc3RydWN0IFByb3ZpZGVySW5mbyB7CisgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnM7CisgICAgc2l6ZV90IGxlbmd0aDsKKyAgICBDRkRpY3Rp
b25hcnlSZWYgYXR0cmlidXRlczsKK307CisKK3N0YXRpYyBjb25zdCBVbmlDaGFyKiBwcm92aWRl
U3RyaW5nQW5kQXR0cmlidXRlcyhDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjb3VudCwg
Q0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiBjb250ZXh0KQoreworICAgIFByb3Zp
ZGVySW5mbyogaW5mbyA9IHN0YXRpY19jYXN0PHN0cnVjdCBQcm92aWRlckluZm8qPihjb250ZXh0
KTsKKyAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oc3RyaW5n
SW5kZXgpID49IGluZm8tPmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAqY291bnQg
PSBpbmZvLT5sZW5ndGggLSBzdHJpbmdJbmRleDsKKyAgICAqYXR0cmlidXRlcyA9IGluZm8tPmF0
dHJpYnV0ZXM7CisgICAgcmV0dXJuIGluZm8tPmNoYXJhY3RlcnMgKyBzdHJpbmdJbmRleDsKK30K
KworYm9vbCBGb250OjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3Vw
cG9ydCkKKyAgICAgICAgbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQgPSBzdGQ6
Om1ha2VfdW5pcXVlPEhhc2hNYXA8U3RyaW5nLCBib29sPj4oKTsKKworICAgIFdURjo6SGFzaE1h
cDxTdHJpbmcsIGJvb2w+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9jb21iaW5pbmdDaGFyYWN0
ZXJTZXF1ZW5jZVN1cHBvcnQtPmFkZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSwgZmFsc2Up
OworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOworCisgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gZm9udEVxdWFs
aXR5T2JqZWN0ID0gcGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpOworCisg
ICAgUHJvdmlkZXJJbmZvIGluZm8gPSB7IGNoYXJhY3RlcnMsIGxlbmd0aCwgZ2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzKDAsIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkpIH07CisgICAgUmV0YWlu
UHRyPENUTGluZVJlZj4gbGluZSA9IGFkb3B0Q0YoQ1RMaW5lQ3JlYXRlV2l0aFVuaUNoYXJQcm92
aWRlcigmcHJvdmlkZVN0cmluZ0FuZEF0dHJpYnV0ZXMsIDAsICZpbmZvKSk7CisKKyAgICBDRkFy
cmF5UmVmIHJ1bkFycmF5ID0gQ1RMaW5lR2V0R2x5cGhSdW5zKGxpbmUuZ2V0KCkpOworICAgIENG
SW5kZXggcnVuQ291bnQgPSBDRkFycmF5R2V0Q291bnQocnVuQXJyYXkpOworCisgICAgZm9yIChD
RkluZGV4IHIgPSAwOyByIDwgcnVuQ291bnQ7IHIrKykgeworICAgICAgICBDVFJ1blJlZiBjdFJ1
biA9IHN0YXRpY19jYXN0PENUUnVuUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHJ1bkFycmF5
LCByKSk7CisgICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChjdFJ1bikgPT0gQ1RSdW5HZXRUeXBl
SUQoKSk7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBydW5BdHRyaWJ1dGVzID0gQ1RSdW5HZXRB
dHRyaWJ1dGVzKGN0UnVuKTsKKyAgICAgICAgQ1RGb250UmVmIHJ1bkZvbnQgPSBzdGF0aWNfY2Fz
dDxDVEZvbnRSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJ1bkF0dHJpYnV0ZXMsIGtDVEZvbnRB
dHRyaWJ1dGVOYW1lKSk7CisgICAgICAgIGlmICghQ0ZFcXVhbChmb250RXF1YWxpdHlPYmplY3Qu
Z2V0KCksIEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuRm9udCku
Z2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM3LDE5ICszNywyMSBAQAogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW1wb3J0
ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNp
bXBvcnQgPGZsb2F0Lmg+CisjaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+CisjaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCiAjaWYgVVNFKEFQUEtJVCkKICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQu
aD4KICNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgog
I2Vsc2UKKyNpbXBvcnQgIkZvbnRTZXJ2aWNlc0lPUy5oIgogI2ltcG9ydCA8Q29yZVRleHQvQ29y
ZVRleHQuaD4KICNlbmRpZgotI2ltcG9ydCA8ZmxvYXQuaD4KLSNpbXBvcnQgPHVuaWNvZGUvdWNo
YXIuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvU3RkTGliRXh0
cmFzLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKLSNpZiAhUExBVEZPUk0oSU9TKQor
I2lmIFVTRShBUFBLSVQpCiBAaW50ZXJmYWNlIE5TRm9udCAoV2ViQXBwS2l0U2VjcmV0QVBJKQog
LSAoQk9PTClfaXNGYWtlRml4ZWRQaXRjaDsKIEBlbmQKQEAgLTU3LDcgKzU5LDYgQEAgLSAoQk9P
TClfaXNGYWtlRml4ZWRQaXRjaDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgVVNFKEFQ
UEtJVCkKIHN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgY3RGb250
KQogewogICAgIC8vIFRoZSBjaGVjayBkb2Vzbid0IGxvb2sgbmVhdCBidXQgdGhpcyBpcyB3aGF0
IEFwcEtpdCBkb2VzIGZvciB2ZXJ0aWNhbCB3cml0aW5nLi4uCkBAIC03MSw0OCArNzIsMzQgQEAg
c3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIGJvb2wgaW5pdEZvbnREYXRhKEZvbnQqIGZvbnREYXRhKQotewotICAg
IGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQorI2lmIFVTRShBUFBLSVQpCiBzdGF0aWMg
TlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZhbWlseSh2b2lkKQogewogICAgIHN0YXRpYyBOU1N0
cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5ID0gW1tbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6
MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07CiAgICAgcmV0dXJuIHdlYkZhbGxiYWNrRm9udEZh
bWlseTsKIH0KLQotY29uc3QgRm9udCogRm9udDo6Y29tcG9zaXRlRm9udFJlZmVyZW5jZUZvbnQo
TlNGb250ICprZXkpIGNvbnN0CisjZWxzZQorc3RhdGljIGJvb2wgZm9udEZhbWlseVNob3VsZE5v
dEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKIHsKLSAgICBpZiAo
IWtleSB8fCBDRkVxdWFsKGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKENURm9udFJl
ZihrZXkpKSkuZ2V0KCksIENGU1RSKCJMYXN0UmVzb3J0IikpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZv
bnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9tRm9udCgp
KTsKLQotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXJpdmVkRm9udERhdGEtPmNvbXBvc2l0ZUZv
bnRSZWZlcmVuY2VzLmFkZChrZXksIG51bGxwdHIpOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdF
bnRyeSkgewotICAgICAgICBOU0ZvbnQgKnN1YnN0aXR1dGVGb250ID0gW2tleSBwcmludGVyRm9u
dF07Ci0KLSAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gQ1RGb250R2V0U3lt
Ym9saWNUcmFpdHMoKENURm9udFJlZilzdWJzdGl0dXRlRm9udCk7Ci0gICAgICAgIGJvb2wgc3lu
dGhldGljQm9sZCA9IHBsYXRmb3JtRGF0YSgpLnN5bnRoZXRpY0JvbGQoKSAmJiAhKHRyYWl0cyAm
IGtDVEZvbnRCb2xkVHJhaXQpOwotICAgICAgICBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBwbGF0
Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250SXRhbGlj
VHJhaXQpOworICAgIGlmICghZm9udEZhbWlseU5hbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBGb250UGxhdGZvcm1EYXRhIHN1YnN0aXR1dGVQbGF0Zm9ybShzdWJzdGl0dXRl
Rm9udCwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxp
cXVlLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0Zm9ybURhdGEoKS53aWR0aFZh
cmlhbnQoKSk7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGb250OjpjcmVh
dGUoc3Vic3RpdHV0ZVBsYXRmb3JtLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJldHVy
biBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgIC8vIFRpbWVzIE5ldyBSb21h
biBjb250YWlucyBBcmFiaWMgZ2x5cGhzLCBidXQgQ29yZSBUZXh0IGRvZXNuJ3Qga25vdyBob3cg
dG8gc2hhcGUgdGhlbS4gPHJkYXI6Ly9wcm9ibGVtLzk4MjM5NzU+CisgICAgLy8gRklYTUUgPHJk
YXI6Ly9wcm9ibGVtLzEyMDk2ODM1PiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIHRoZSBhYm92
ZSBidWcgaXMgZml4ZWQuCisgICAgLy8gQXJpYWwgYW5kIFRhaG9tYSBhcmUgaGF2ZSBwZXJmb3Jt
YW5jZSBpc3N1ZXMgc28gZG9uJ3QgdXNlIHRoZW0gYXMgd2VsbC4KKyAgICByZXR1cm4gKENGU3Ry
aW5nQ29tcGFyZShDRlNUUigiVGltZXMgTmV3IFJvbWFuIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9
PSBrQ0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigi
QXJpYWwiKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAg
ICB8fCAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJUYWhvbWEiKSwgZm9udEZhbWlseU5hbWUsIDAp
ID09IGtDRkNvbXBhcmVFcXVhbFRvKTsKIH0KKyNlbmRpZgogCiB2b2lkIEZvbnQ6OnBsYXRmb3Jt
SW5pdCgpCiB7CisjaWYgVVNFKEFQUEtJVCkKICAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBt
X3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyAxLjBmIDogMC5mOwogCiAgICAgYm9vbCBm
YWlsZWRTZXR1cCA9IGZhbHNlOwotICAgIGlmICghaW5pdEZvbnREYXRhKHRoaXMpKSB7CisgICAg
aWYgKCFwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkgewogICAgICAgICAvLyBBY2shIFNvbWV0aGlu
ZyB2ZXJ5IGJhZCBoYXBwZW5lZCwgbGlrZSBhIGNvcnJ1cHQgZm9udC4KICAgICAgICAgLy8gVHJ5
IGxvb2tpbmcgZm9yIGFuIGFsdGVybmF0ZSAnYmFzZScgZm9udCBmb3IgdGhpcyByZW5kZXJlci4K
IApAQCAtMTM1LDEyICsxMjIsMTIgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgICAg
ICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250
TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6ZmFs
bGJhY2tGb250RmFtaWx5XSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fcGxhdGZvcm1E
YXRhLnNldE5TRm9udChbTlNGb250IGZvbnRXaXRoTmFtZTpmYWxsYmFja0ZvbnRGYW1pbHkgc2l6
ZTptX3BsYXRmb3JtRGF0YS5zaXplKCldKTsKLSAgICAgICAgaWYgKCFpbml0Rm9udERhdGEodGhp
cykpIHsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkgewogICAgICAgICAg
ICAgaWYgKFtmYWxsYmFja0ZvbnRGYW1pbHkgaXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7
CiAgICAgICAgICAgICAgICAgLy8gT0ssIGNvdWxkbid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBh
cyBhbiBhbHRlcm5hdGUgdG8gVGltZXMsIGZhbGxiYWNrCiAgICAgICAgICAgICAgICAgLy8gb24g
dGhlIHN5c3RlbSBmb250LiAgSWYgdGhpcyBmYWlscyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxl
ZnQuCiAgICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFu
YWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250
KCkgdG9GYW1pbHk6d2ViRmFsbGJhY2tGb250RmFtaWx5KCldKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWluaXRGb250RGF0YSh0aGlzKSkgeworICAgICAgICAgICAgICAgIGlmICghcGxhdGZvcm1E
YXRhKCkuY2dGb250KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdHJpZWQsIFRpbWVz
LCBUaW1lcyBOZXcgUm9tYW4sIGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0
byBnaXZlIHVwLgogICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoInVuYWJsZSB0byBpbml0
aWFsaXplIHdpdGggZm9udCAlQCIsIGluaXRpYWxGb250LmdldCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOwpAQCAtMTYyLDE1ICsxNDksMTIgQEAgdm9pZCBGb250
OjpwbGF0Zm9ybUluaXQoKQogICAgIGlmIChmYWlsZWRTZXR1cCkgewogICAgICAgICBtX3BsYXRm
b3JtRGF0YS5zZXROU0ZvbnQoW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOlttX3BsYXRmb3JtRGF0
YS5uc0ZvbnQoKSBwb2ludFNpemVdXSk7CiAgICAgICAgIExPR19FUlJPUigiZmFpbGVkIHRvIHNl
dCB1cCBmb250LCB1c2luZyBzeXN0ZW0gZm9udCAlcyIsIG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7
Ci0gICAgICAgIGluaXRGb250RGF0YSh0aGlzKTsKICAgICB9CiAKLSNpZiBQTEFURk9STShNQUMp
CiAgICAgLy8gV29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzE5NDMzNDkwPgogICAgIENHR2x5
cGggZHVtbXlHbHlwaHNbXSA9IHswLCAwfTsKLSAgICBDR1NpemUgZHVtbXlTaXplW10gPSB7Q0dT
aXplTWFrZSgwLCAwKSwgQ0dTaXplTWFrZSgwLCAwKX07CisgICAgQ0dTaXplIGR1bW15U2l6ZVtd
ID0geyBDR1NpemVNYWtlKDAsIDApLCBDR1NpemVNYWtlKDAsIDApIH07CiAgICAgQ1RGb250VHJh
bnNmb3JtR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBkdW1teUdseXBocywgZHVtbXlT
aXplLCAyLCBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyB8IGtDVEZvbnRUcmFuc2Zv
cm1BcHBseVNoYXBpbmcpOwotI2VuZGlmCiAgICAgCiAgICAgaW50IGlBc2NlbnQ7CiAgICAgaW50
IGlEZXNjZW50OwpAQCAtMjMzLDExICsyMTcsNjUgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQo
KQogICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7CiAgICAgbV9mb250
TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwogICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdo
dCh4SGVpZ2h0KTsKLX0KKyNlbHNlCisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0
Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkID8gY2VpbGYobV9wbGF0Zm9ybURhdGEuc2l6ZSgpICAv
IDI0LjBmKSA6IDAuZjsKKyAgICBtX3NwYWNlR2x5cGggPSAwOworICAgIG1fc3BhY2VXaWR0aCA9
IDA7CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbTsKKyAgICBmbG9hdCBhc2NlbnQ7CisgICAgZmxv
YXQgZGVzY2VudDsKKyAgICBmbG9hdCBjYXBIZWlnaHQ7CisgICAgZmxvYXQgbGluZUdhcDsKKyAg
ICBmbG9hdCBsaW5lU3BhY2luZzsKKyAgICBmbG9hdCB4SGVpZ2h0OworICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gZmFtaWx5TmFtZTsKKyAgICBpZiAoQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxh
dGZvcm1EYXRhLmZvbnQoKSkgeworICAgICAgICBGb250U2VydmljZXNJT1MgZm9udFNlcnZpY2Uo
Y3RGb250KTsKKyAgICAgICAgYXNjZW50ID0gY2VpbGYoZm9udFNlcnZpY2UuYXNjZW50KCkpOwor
ICAgICAgICBkZXNjZW50ID0gY2VpbGYoZm9udFNlcnZpY2UuZGVzY2VudCgpKTsKKyAgICAgICAg
bGluZVNwYWNpbmcgPSBmb250U2VydmljZS5saW5lU3BhY2luZygpOworICAgICAgICBsaW5lR2Fw
ID0gZm9udFNlcnZpY2UubGluZUdhcCgpOworICAgICAgICB4SGVpZ2h0ID0gZm9udFNlcnZpY2Uu
eEhlaWdodCgpOworICAgICAgICBjYXBIZWlnaHQgPSBmb250U2VydmljZS5jYXBIZWlnaHQoKTsK
KyAgICAgICAgdW5pdHNQZXJFbSA9IGZvbnRTZXJ2aWNlLnVuaXRzUGVyRW0oKTsKKyAgICAgICAg
ZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQ0dGb250UmVmIGNnRm9udCA9IG1fcGxhdGZvcm1EYXRhLmNnRm9u
dCgpOworCisgICAgICAgIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0c1BlckVtKGNnRm9udCk7
CisKKyAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAg
ICAgICBhc2NlbnQgPSBscm91bmRmKHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldEFzY2VudChjZ0Zv
bnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgICAgIGRlc2NlbnQgPSBscm91bmRm
KC1zY2FsZUVtVG9Vbml0cygtYWJzKENHRm9udEdldERlc2NlbnQoY2dGb250KSksIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplKTsKKyAgICAgICAgbGluZUdhcCA9IGxyb3VuZGYoc2NhbGVFbVRvVW5p
dHMoQ0dGb250R2V0TGVhZGluZyhjZ0ZvbnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Cisg
ICAgICAgIHhIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRYSGVpZ2h0KGNnRm9udCks
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgICAgICBjYXBIZWlnaHQgPSBzY2FsZUVtVG9V
bml0cyhDR0ZvbnRHZXRDYXBIZWlnaHQoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7
CiAKLXN0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEsIEZvdXJDaGFyQ29kZSB0YWJsZU5hbWUpCi17Ci0gICAgcmV0dXJuIENH
Rm9udENvcHlUYWJsZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCksIHRhYmxlTmFtZSk7Cisg
ICAgICAgIGxpbmVTcGFjaW5nID0gYXNjZW50ICsgZGVzY2VudCArIGxpbmVHYXA7CisgICAgICAg
IGZhbWlseU5hbWUgPSBhZG9wdENGKENHRm9udENvcHlGYW1pbHlOYW1lKGNnRm9udCkpOworICAg
IH0KKworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBt
X2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVz
Y2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Cisg
ICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7CisgICAgbV9mb250
TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVp
Z2h0KGNhcEhlaWdodCk7CisgICAgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMgPSBmb250RmFt
aWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0KCkpOworCisgICAgaWYg
KHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVu
dGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNW
ZXJ0aWNhbEdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSk7CisKKyAgICBpZiAoIW1fcGxh
dGZvcm1EYXRhLm1faXNFbW9qaSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHRoaXJkT2ZT
aXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpIC8gMzsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFz
Y2VudCh0aGlyZE9mU2l6ZSk7CisgICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KHRoaXJkT2ZT
aXplKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAodGhpcmRPZlNpemUpOworICAgIG1f
Zm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcoMCk7CisjZW5kaWYKIH0KIAogdm9pZCBGb250Ojpw
bGF0Zm9ybUNoYXJXaWR0aEluaXQoKQpAQCAtMjQ1LDE0ICsyODMsMTUgQEAgdm9pZCBGb250Ojpw
bGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKICAgICBtX21h
eENoYXJXaWR0aCA9IDA7CiAgICAgCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gb3MyVGFibGUg
PSBhZG9wdENGKGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdPUy8yJykpOwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBvczJUYWJsZSA9IGFk
b3B0Q0YoQ0dGb250Q29weVRhYmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAnT1Mv
MicpKTsKICAgICBpZiAob3MyVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKG9zMlRhYmxlLmdldCgp
KSA+PSA0KSB7CiAgICAgICAgIGNvbnN0IFVJbnQ4KiBvczIgPSBDRkRhdGFHZXRCeXRlUHRyKG9z
MlRhYmxlLmdldCgpKTsKICAgICAgICAgU0ludDE2IG9zMkF2Z0NoYXJXaWR0aCA9IG9zMlsyXSAq
IDI1NiArIG9zMlszXTsKICAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhv
czJBdmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1E
YXRhLm1fc2l6ZTsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBoZWFkVGFibGUg
PSBhZG9wdENGKGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdoZWFkJykpOwor
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGhlYWRUYWJsZSA9IGFkb3B0Q0YoQ0dGb250Q29weVRh
YmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAnaGVhZCcpKTsKICAgICBpZiAoaGVh
ZFRhYmxlICYmIENGRGF0YUdldExlbmd0aChoZWFkVGFibGUuZ2V0KCkpID49IDQyKSB7CiAgICAg
ICAgIGNvbnN0IFVJbnQ4KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0ZVB0cihoZWFkVGFibGUuZ2V0KCkp
OwogICAgICAgICB1c2hvcnQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1NiArIGhlYWRbMzddOwpAQCAt
MjYyLDE3ICszMDEsMTYgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogICAg
ICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKICAgICAg
ICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVu
aXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CiAgICAgfQorI2VuZGlmCiAKICAg
ICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGltYXRlLCB3aGljaCB3aWxsIHBv
cHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9zaXRpdmUuCiAgICAgaW5pdENo
YXJXaWR0aHMoKTsKIH0KLSNlbmRpZiAvLyBVU0UoQVBQS0lUKQogCiB2b2lkIEZvbnQ6OnBsYXRm
b3JtRGVzdHJveSgpCiB7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQogUGFzc1JlZlB0cjxGb250
PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
ZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CkBA
IC0yODEsMTMgKzMxOSwxMiBAQCBQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRl
U2NhCiAgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRydWUsIGZh
bHNlKTsKICAgICB9CiAKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgZmxv
YXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwotICAgIEZvbnRQ
bGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5h
Z2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0b1NpemU6c2l6ZV0sIHNp
emUsIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSk7CiAKLSAgICAv
LyBBcHBLaXQgcmVzZXRzIHRoZSB0eXBlIGluZm9ybWF0aW9uIChzY3JlZW4vcHJpbnRlcikgd2hl
biB5b3UgY29udmVydCBhIGZvbnQgdG8gYSBkaWZmZXJlbnQgc2l6ZS4KLSAgICAvLyBXZSBoYXZl
IHRvIGZpeCB1cCB0aGUgZm9udCB0aGF0IHdlJ3JlIGhhbmRlZCBiYWNrLgotICAgIHNjYWxlZEZv
bnREYXRhLnNldE5TRm9udChbc2NhbGVkRm9udERhdGEubnNGb250KCkgcHJpbnRlckZvbnRdKTsK
KyNpZiBVU0UoQVBQS0lUKQorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAg
IEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZv
bnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDptX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSB0b1NpemU6c2l6
ZV0sIHNpemUsIGZhbHNlLCBmYWxzZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSk7CiAK
ICAgICBpZiAoc2NhbGVkRm9udERhdGEuZm9udCgpKSB7CiAgICAgICAgIE5TRm9udE1hbmFnZXIg
KmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwpAQCAtMzA3
LDEwICszNDQsMzIgQEAgUGFzc1JlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYQog
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICByZXR1cm4gMDsKKyNlbHNlCisg
ICAgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJh
aXRzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Io
bV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisgICAgUmV0YWluUHRyPENURm9udFJlZj4gc2NhbGVk
Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlw
dG9yLmdldCgpLCBzaXplLCBudWxscHRyKSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRG
b250RGF0YShzY2FsZWRGb250LmdldCgpLCBzaXplLCBmYWxzZSwgZmFsc2UsIG1fcGxhdGZvcm1E
YXRhLm9yaWVudGF0aW9uKCkpOworCisgICAgaWYgKHNjYWxlZEZvbnREYXRhLmZvbnQoKSkgewor
ICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNCb2xkKQorICAgICAgICAgICAg
Zm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OworICAgICAgICBpZiAobV9wbGF0Zm9ybURh
dGEubV9zeW50aGV0aWNPYmxpcXVlKQorICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250
SXRhbGljVHJhaXQ7CisKKyAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRy
YWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKHNjYWxlZEZvbnREYXRhLmZvbnQoKSk7Cisg
ICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYga0NU
Rm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7
CisgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRz
ICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJh
aXRJdGFsaWMpOworCisgICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1E
YXRhKHNjYWxlZEZvbnREYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRp
ZgogfQogCiB2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKIHsKKyNpZiBVU0UoQVBQS0lUKQog
ICAgIE5TRm9udCogZiA9IG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOwogICAgIC8vIFNwZWNpYWwg
Y2FzZSBPc2FrYS1Nb25vLgogICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5
OTQ2Nz4sIHdlIHNob3VsZCB0cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgpAQCAtMzI1
LDEyICszODQsMjMgQEAgdm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgLy8gTm90ZSB0
aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCiAK
ICAgICBOU1N0cmluZyAqbmFtZSA9IFtmIGZvbnROYW1lXTsKLSAgICBtX3RyZWF0QXNGaXhlZFBp
dGNoID0gKFtmIGlzRml4ZWRQaXRjaF0gfHwgW2YgX2lzRmFrZUZpeGVkUGl0Y2hdIHx8Ci0gICAg
ICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJPc2FrYS1Nb25vIl0gPT0gTlNP
cmRlcmVkU2FtZSkgJiYKLSAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpA
Ik1TLVBHb3RoaWMiXSAhPSBOU09yZGVyZWRTYW1lICYmCi0gICAgICAgICAgIFtuYW1lIGNhc2VJ
bnNlbnNpdGl2ZUNvbXBhcmU6QCJNb25vdHlwZUNvcnNpdmEiXSAhPSBOU09yZGVyZWRTYW1lOwor
ICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoW2YgaXNGaXhlZFBpdGNoXSAgfHwgW2YgX2lzRmFr
ZUZpeGVkUGl0Y2hdIHx8IFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJPc2FrYS1Nb25v
Il0gPT0gTlNPcmRlcmVkU2FtZSkgJiYgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1T
LVBHb3RoaWMiXSAhPSBOU09yZGVyZWRTYW1lICYmIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBh
cmU6QCJNb25vdHlwZUNvcnNpdmEiXSAhPSBOU09yZGVyZWRTYW1lOworI2Vsc2UKKyAgICBDVEZv
bnRSZWYgY3RGb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOworICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBmYWxzZTsKKyAgICBpZiAoIWN0Rm9udCkKKyAgICAgICAgcmV0dXJuOyAvLyBDVEZv
bnQgaXMgbnVsbCBpbiB0aGUgY2FzZSBvZiBTVkcgZm9udHMgZm9yIGV4YW1wbGUuCisKKyAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5h
bWUoY3RGb250KSk7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lID0gYWRv
cHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKKworICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBDR0ZvbnRJc0ZpeGVkUGl0Y2gobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpIHx8IChm
dWxsTmFtZSAmJiAoQ0ZTdHJpbmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2Et
TW9ubyIpLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyB8
fCBDRlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIiksIGtD
RkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSk7CisgICAgaWYg
KGZhbWlseU5hbWUgJiYgQ0ZTdHJpbmdDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJD
b3VyaWVyIE5ldyIpLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1
YWxUbykgeworICAgICAgICAvLyBTcGVjaWFsIGNhc2UgQ291cmllciBOZXcgdG8gbm90IGJlIHRy
ZWF0ZWQgYXMgZml4ZWQgcGl0Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhhY2tlZCBz
cGFjZSB3aWR0aCB3aGljaCBpcyB1bmRlc2lyZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJkYXI6Ly82
MjY5NzgzKS4KKyAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOworICAgIH0KKyNl
bmRpZgogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKIEZsb2F0UmVjdCBGb250OjpwbGF0
Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewpAQCAtMzQzLDExICs0MTMs
MTEgQEAgRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoRwogICAgIHJldHVy
biBib3VuZGluZ0JveDsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLWlubGluZSBDR0ZvbnRSZW5k
ZXJpbmdTdHlsZSBGb250OjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0CitzdGF0aWMgaW5saW5lIENH
Rm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHBsYXRmb3JtRGF0YSkKIHsKKyNpZiBVU0UoQVBQS0lUKQogICAgIENHRm9udFJlbmRlcmluZ1N0
eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJl
bmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1
YnBpeGVsUXVhbnRpemF0aW9uOwotICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5z
Rm9udCgpOworICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKICAgICBp
ZiAoZm9udCkgewogICAgICAgICBzd2l0Y2ggKFtmb250IHJlbmRlcmluZ01vZGVdKSB7CiAgICAg
ICAgIGNhc2UgTlNGb250SW50ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6CkBAIC0zNjEs
MjYgKzQzMSwzMiBAQCBpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgRm9udDo6cmVuZGVyCiAg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHN0eWxlOworCisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShwbGF0Zm9ybURhdGEpOworICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRp
YWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NH
Rm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFz
aW5nU3R5bGVVbmZpbHRlcmVkOworI2VuZGlmCiB9CiAKLWlubGluZSBib29sIEZvbnQ6OmFkdmFu
Y2VGb3JDb2xvckJpdG1hcEZvbnQoR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkgY29uc3QK
K3N0YXRpYyBpbmxpbmUgYm9vbCBhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkK
IHsKLSAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKTsKLSAgICBpZiAo
IWZvbnQgfHwgIXBsYXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBGb250KCkpCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKKyAgICBp
ZiAoIWZvbnQgfHwgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgYWR2YW5jZSA9IE5TU2l6ZVRvQ0dTaXplKFtmb250IGFkdmFuY2Vt
ZW50Rm9yR2x5cGg6Z2x5cGhdKTsKICAgICByZXR1cm4gdHJ1ZTsKLX0KKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHBsYXRmb3JtRGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKGdseXBoKTsKKyAgICBV
TlVTRURfUEFSQU0oYWR2YW5jZSk7CisgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCit9CiAKIHN0
YXRpYyBib29sIGhhc0N1c3RvbVRyYWNraW5nKENURm9udFJlZiBmb250KQogewotI2lmIFBMQVRG
T1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwOTAKLSAgICBV
TlVTRURfUEFSQU0oZm9udCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKICAgICByZXR1cm4g
Q1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNj
cmlwdG9yKGZvbnQpKS5nZXQoKSk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlz
RW1vamkoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQpAQCAtMzkzLDE2ICs0
NjksMTYgQEAgc3RhdGljIGlubGluZSBib29sIGlzRW1vamkoY29uc3QgRm9udFBsYQogI2VuZGlm
CiB9CiAKLWlubGluZSBib29sIEZvbnQ6OmNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoR2x5
cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkgY29uc3QK
K3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5j
ZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkKIHsKICAgICAvLyBGYXN0IGdldHRlciBkb2Vzbid0
IHRha2UgY3VzdG9tIHRyYWNraW5nIGludG8gYWNjb3VudAotICAgIGlmIChoYXNDdXN0b21UcmFj
a2luZyhwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpCisgICAgaWYgKGhhc0N1c3RvbVRyYWNraW5n
KHBsYXRmb3JtRGF0YS5jdEZvbnQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBG
YXN0IGdldHRlciBkb2Vzbid0IHdvcmsgZm9yIGVtb2ppCi0gICAgaWYgKGlzRW1vamkocGxhdGZv
cm1EYXRhKCkpKQorICAgIGlmIChpc0Vtb2ppKHBsYXRmb3JtRGF0YSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAvLyAuLi4gb3IgZm9yIGFueSBiaXRtYXAgZm9udHMgaW4gZ2VuZXJhbAot
ICAgIGlmIChhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KGdseXBoLCBhZHZhbmNlKSkgeworICAg
IGlmIChhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KHBsYXRmb3JtRGF0YSwgZ2x5cGgsIGFkdmFu
Y2UpKSB7CiAgICAgICAgIHBvcHVsYXRlZEFkdmFuY2UgPSB0cnVlOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpAQCAtNDE0LDEwICs0OTAsMTAgQEAgZmxvYXQgRm9udDo6cGxhdGZvcm1X
aWR0aEZvckdseXBoKEdseXBoIAogICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKICAg
ICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWw7CiAgICAgYm9vbCBwb3B1bGF0ZWRBZHZhbmNlID0gZmFsc2U7Ci0gICAgaWYgKChob3Jp
em9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjaykgJiYgY2FuVXNlRmFzdEdseXBo
QWR2YW5jZUdldHRlcihnbHlwaCwgYWR2YW5jZSwgcG9wdWxhdGVkQWR2YW5jZSkpIHsKKyAgICBp
ZiAoKGhvcml6b250YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKSAmJiBjYW5Vc2VG
YXN0R2x5cGhBZHZhbmNlR2V0dGVyKHBsYXRmb3JtRGF0YSgpLCBnbHlwaCwgYWR2YW5jZSwgcG9w
dWxhdGVkQWR2YW5jZSkpIHsKICAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gcGxhdGZvcm1EYXRh
KCkubV9zaXplOwogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dBZmZpbmVUcmFuc2Zv
cm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwotICAgICAgICBpZiAoIUNHRm9udEdl
dEdseXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgJm0sIHJlbmRl
cmluZ1N0eWxlKCksICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7CisgICAgICAgIGlmICghQ0dGb250
R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmbSwgcmVu
ZGVyaW5nU3R5bGUocGxhdGZvcm1EYXRhKCkpLCAmZ2x5cGgsIDEsICZhZHZhbmNlKSkgewogICAg
ICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFtZSA9IGFkb3B0Q0YoQ0dGb250
Q29weUZ1bGxOYW1lKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpKSk7CiAgICAgICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBjYWNoZSBnbHlwaCB3aWR0aHMgZm9yICVAICVmIiwgZnVsbE5hbWUu
Z2V0KCksIHBvaW50U2l6ZSk7CiAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gMDsKQEAgLTQ3
Nyw0ICs1NTMsMjggQEAgYm9vbCBGb250OjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZQog
ICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgVVNFKEFQUEtJVCkKK2NvbnN0IEZvbnQqIEZvbnQ6
OmNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VGb250KE5TRm9udCAqa2V5KSBjb25zdAoreworICAgIGlm
ICgha2V5IHx8IENGRXF1YWwoYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoQ1RGb250
UmVmKGtleSkpKS5nZXQoKSwgQ0ZTVFIoIkxhc3RSZXNvcnQiKSkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVk
Rm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250
KCkpOworCisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Rlcml2ZWRGb250RGF0YS0+Y29tcG9zaXRl
Rm9udFJlZmVyZW5jZXMuYWRkKGtleSwgbnVsbHB0cik7CisgICAgaWYgKGFkZFJlc3VsdC5pc05l
d0VudHJ5KSB7CisgICAgICAgIE5TRm9udCAqc3Vic3RpdHV0ZUZvbnQgPSBba2V5IHByaW50ZXJG
b250XTsKKworICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSBDVEZvbnRHZXRT
eW1ib2xpY1RyYWl0cygoQ1RGb250UmVmKXN1YnN0aXR1dGVGb250KTsKKyAgICAgICAgYm9vbCBz
eW50aGV0aWNCb2xkID0gcGxhdGZvcm1EYXRhKCkuc3ludGhldGljQm9sZCgpICYmICEodHJhaXRz
ICYga0NURm9udEJvbGRUcmFpdCk7CisgICAgICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IHBs
YXRmb3JtRGF0YSgpLnN5bnRoZXRpY09ibGlxdWUoKSAmJiAhKHRyYWl0cyAmIGtDVEZvbnRJdGFs
aWNUcmFpdCk7CisKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzdWJzdGl0dXRlUGxhdGZvcm0o
c3Vic3RpdHV0ZUZvbnQsIHBsYXRmb3JtRGF0YSgpLnNpemUoKSwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljT2JsaXF1ZSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSwgcGxhdGZvcm1EYXRh
KCkud2lkdGhWYXJpYW50KCkpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
Rm9udDo6Y3JlYXRlKHN1YnN0aXR1dGVQbGF0Zm9ybSwgaXNDdXN0b21Gb250KCkpOworICAgIH0K
KyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKyNlbmRpZgor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCShyZXZpc2lv
biAxNzk0MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxl
Rm9udERhdGFJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMTk3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJGb250LmgiCi0KLSNpbXBvcnQg
IkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0
ICJGb250Q2FjaGUuaCIKLSNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCi0jaW1wb3J0ICJGb250RGVz
Y3JpcHRpb24uaCIKLSNpbXBvcnQgIkZvbnRTZXJ2aWNlc0lPUy5oIgotI2ltcG9ydCA8Q29yZVRl
eHQvQ29yZVRleHQuaD4KLSNpbXBvcnQgPGZsb2F0Lmg+Ci0jaW1wb3J0IDx1bmljb2RlL3VjaGFy
Lmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJh
cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGZvbnRGYW1pbHlTaG91
bGROb3RCZVVzZWRGb3JBcmFiaWMoQ0ZTdHJpbmdSZWYgZm9udEZhbWlseU5hbWUpCi17Ci0gICAg
aWYgKCFmb250RmFtaWx5TmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGlt
ZXMgTmV3IFJvbWFuIGNvbnRhaW5zIEFyYWJpYyBnbHlwaHMsIGJ1dCBDb3JlIFRleHQgZG9lc24n
dCBrbm93IGhvdyB0byBzaGFwZSB0aGVtLiA8cmRhcjovL3Byb2JsZW0vOTgyMzk3NT4KLSAgICAv
LyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9u
Y2UgdGhlIGFib3ZlIGJ1ZyBpcyBmaXhlZC4KLSAgICAvLyBBcmlhbCBhbmQgVGFob21hIGFyZSBo
YXZlIHBlcmZvcm1hbmNlIGlzc3VlcyBzbyBkb24ndCB1c2UgdGhlbSBhcyB3ZWxsLgotICAgIHJl
dHVybiAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJUaW1lcyBOZXcgUm9tYW4iKSwgZm9udEZhbWls
eU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQotICAgICAgICAgICB8fCAoQ0ZTdHJpbmdD
b21wYXJlKENGU1RSKCJBcmlhbCIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVx
dWFsVG8pCi0gICAgICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRhaG9tYSIpLCBm
b250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pOwotfQotCi1zdGF0aWMgYm9v
bCBmb250SGFzVmVydGljYWxHbHlwaHMoQ1RGb250UmVmIGN0Rm9udCkKLXsKLSAgICAvLyBUaGUg
Y2hlY2sgZG9lc24ndCBsb29rIG5lYXQgYnV0IHRoaXMgaXMgd2hhdCBBcHBLaXQgZG9lcyBmb3Ig
dmVydGljYWwgd3JpdGluZy4uLgotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB0YWJsZVRhZ3Mg
PSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVP
cHRpb25Ob09wdGlvbnMpKTsKLSAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3Vu
dCh0YWJsZVRhZ3MuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwg
bnVtVGFibGVzOyArK2luZGV4KSB7Ci0gICAgICAgIENURm9udFRhYmxlVGFnIHRhZyA9IChDVEZv
bnRUYWJsZVRhZykodWludHB0cl90KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdl
dCgpLCBpbmRleCk7Ci0gICAgICAgIGlmICh0YWcgPT0ga0NURm9udFRhYmxlVmhlYSB8fCB0YWcg
PT0ga0NURm9udFRhYmxlVk9SRykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBt
X3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQgPyBj
ZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkgIC8gMjQuMGYpIDogMC5mOwotICAgIG1fc3BhY2VH
bHlwaCA9IDA7Ci0gICAgbV9zcGFjZVdpZHRoID0gMDsKLSAgICB1bnNpZ25lZCB1bml0c1BlckVt
OwotICAgIGZsb2F0IGFzY2VudDsKLSAgICBmbG9hdCBkZXNjZW50OwotICAgIGZsb2F0IGNhcEhl
aWdodDsKLSAgICBmbG9hdCBsaW5lR2FwOwotICAgIGZsb2F0IGxpbmVTcGFjaW5nOwotICAgIGZs
b2F0IHhIZWlnaHQ7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lOwotICAg
IGlmIChDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpKSB7Ci0gICAgICAg
IEZvbnRTZXJ2aWNlc0lPUyBmb250U2VydmljZShjdEZvbnQpOwotICAgICAgICBhc2NlbnQgPSBj
ZWlsZihmb250U2VydmljZS5hc2NlbnQoKSk7Ci0gICAgICAgIGRlc2NlbnQgPSBjZWlsZihmb250
U2VydmljZS5kZXNjZW50KCkpOwotICAgICAgICBsaW5lU3BhY2luZyA9IGZvbnRTZXJ2aWNlLmxp
bmVTcGFjaW5nKCk7Ci0gICAgICAgIGxpbmVHYXAgPSBmb250U2VydmljZS5saW5lR2FwKCk7Ci0g
ICAgICAgIHhIZWlnaHQgPSBmb250U2VydmljZS54SGVpZ2h0KCk7Ci0gICAgICAgIGNhcEhlaWdo
dCA9IGZvbnRTZXJ2aWNlLmNhcEhlaWdodCgpOwotICAgICAgICB1bml0c1BlckVtID0gZm9udFNl
cnZpY2UudW5pdHNQZXJFbSgpOwotICAgICAgICBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRD
b3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBDR0ZvbnRSZWYg
Y2dGb250ID0gbV9wbGF0Zm9ybURhdGEuY2dGb250KCk7Ci0KLSAgICAgICAgdW5pdHNQZXJFbSA9
IENHRm9udEdldFVuaXRzUGVyRW0oY2dGb250KTsKLQotICAgICAgICBmbG9hdCBwb2ludFNpemUg
PSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgICAgIGFzY2VudCA9IGxyb3VuZGYoc2NhbGVF
bVRvVW5pdHMoQ0dGb250R2V0QXNjZW50KGNnRm9udCksIHVuaXRzUGVyRW0pICogcG9pbnRTaXpl
KTsKLSAgICAgICAgZGVzY2VudCA9IGxyb3VuZGYoLXNjYWxlRW1Ub1VuaXRzKC1hYnMoQ0dGb250
R2V0RGVzY2VudChjZ0ZvbnQpKSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOwotICAgICAgICBs
aW5lR2FwID0gbHJvdW5kZihzY2FsZUVtVG9Vbml0cyhDR0ZvbnRHZXRMZWFkaW5nKGNnRm9udCks
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICAgICAgeEhlaWdodCA9IHNjYWxlRW1Ub1Vu
aXRzKENHRm9udEdldFhIZWlnaHQoY2dGb250KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0g
ICAgICAgIGNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldENhcEhlaWdodChjZ0Zv
bnQpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLQotICAgICAgICBsaW5lU3BhY2luZyA9IGFz
Y2VudCArIGRlc2NlbnQgKyBsaW5lR2FwOwotICAgICAgICBmYW1pbHlOYW1lID0gYWRvcHRDRihD
R0ZvbnRDb3B5RmFtaWx5TmFtZShjZ0ZvbnQpKTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNz
LnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQo
YXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7Ci0gICAgbV9m
b250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGlu
ZVNwYWNpbmcobGluZVNwYWNpbmcpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVp
Z2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOwotICAgIG1f
c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFy
YWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKLQotICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRh
dGlvbigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCi0gICAg
ICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVydGljYWxHbHlwaHMobV9wbGF0Zm9y
bURhdGEuY3RGb250KCkpOwotCi0gICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5tX2lzRW1vamkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGludCB0aGlyZE9mU2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNp
emUoKSAvIDM7Ci0gICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQodGhpcmRPZlNpemUpOwotICAg
IG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudCh0aGlyZE9mU2l6ZSk7Ci0gICAgbV9mb250TWV0cmlj
cy5zZXRMaW5lR2FwKHRoaXJkT2ZTaXplKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFj
aW5nKDApOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17Ci0gICAg
bV9hdmdDaGFyV2lkdGggPSAwOwotICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKLQotICAgIC8vIEZh
bGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUg
dGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2ZS4KLSAgICBpbml0Q2hhcldpZHRo
cygpOwotfQotCi1QYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKLXsKLSAg
ICBpZiAoaXNDdXN0b21Gb250KCkpIHsKLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRG
b250RGF0YShtX3BsYXRmb3JtRGF0YSk7Ci0gICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9
IHNjYWxlZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOwotICAgICAgICByZXR1cm4gRm9u
dDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgZmxv
YXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwotICAgIENURm9u
dFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3Bs
YXRmb3JtRGF0YS5mb250KCkpOwotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBm
b250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fcGxhdGZv
cm1EYXRhLmZvbnQoKSkpOwotICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHNjYWxlZEZvbnQgPSBh
ZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQo
KSwgc2l6ZSwgbnVsbHB0cikpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEo
c2NhbGVkRm9udC5nZXQoKSwgc2l6ZSwgZmFsc2UsIGZhbHNlLCBtX3BsYXRmb3JtRGF0YS5vcmll
bnRhdGlvbigpKTsKLQotICAgIGlmIChzY2FsZWRGb250RGF0YS5mb250KCkpIHsKLSAgICAgICAg
aWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCkKLSAgICAgICAgICAgIGZvbnRUcmFp
dHMgfD0ga0NURm9udEJvbGRUcmFpdDsKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fc3lu
dGhldGljT2JsaXF1ZSkKLSAgICAgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEl0YWxpY1Ry
YWl0OwotCi0gICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHNjYWxlZEZvbnRUcmFpdHMgPSBD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhzY2FsZWRGb250RGF0YS5mb250KCkpOwotICAgICAgICBz
Y2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAmIGtDVEZvbnRCb2xk
VHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpOwotICAgICAg
ICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY09ibGlxdWUgPSAoZm9udFRyYWl0cyAmIGtDVEZv
bnRJdGFsaWNUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0SXRhbGlj
KTsKLQotICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShzY2Fs
ZWRGb250RGF0YSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgRm9u
dDo6ZGV0ZXJtaW5lUGl0Y2goKQotewotICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3Jt
RGF0YS5mb250KCk7Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwotICAgIGlmICgh
Y3RGb250KQotICAgICAgICByZXR1cm47IC8vIENURm9udCBpcyBudWxsIGluIHRoZSBjYXNlIG9m
IFNWRyBmb250cyBmb3IgZXhhbXBsZS4KLQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVs
bE5hbWUgPSBhZG9wdENGKENURm9udENvcHlGdWxsTmFtZShjdEZvbnQpKTsKLSAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1l
KGN0Rm9udCkpOwotCi0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IENHRm9udElzRml4ZWRQaXRj
aChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSkgfHwgKGZ1bGxOYW1lICYmIChDRlN0cmluZ0NvbXBh
cmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIiksIGtDRkNvbXBhcmVDYXNlSW5z
ZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvIHx8IENGU3RyaW5nQ29tcGFyZShmdWxsTmFt
ZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkg
PT0ga0NGQ29tcGFyZUVxdWFsVG8pKTsKLSAgICBpZiAoZmFtaWx5TmFtZSAmJiBDRlN0cmluZ0Nv
bXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkNvdXJpZXIgTmV3IiksIGtDRkNvbXBhcmVD
YXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7Ci0gICAgICAgIC8vIFNwZWNp
YWwgY2FzZSBDb3VyaWVyIE5ldyB0byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMg
dGhpcyB3aWxsIG1ha2UgdXNlIG9mIGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVz
aXJlYWJsZSBmb3IgaVBob25lIChzZWUgcmRhcjovLzYyNjk3ODMpLgotICAgICAgICBtX3RyZWF0
QXNGaXhlZFBpdGNoID0gZmFsc2U7Ci0gICAgfQotfQotCi1DR0ZvbnRSZW5kZXJpbmdTdHlsZSBG
b250OjpyZW5kZXJpbmdTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJp
bmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRp
b25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8IGtDR0Zv
bnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7Ci19Ci0KLWJvb2wgRm9udDo6YWR2YW5jZUZv
ckNvbG9yQml0bWFwRm9udChHbHlwaCwgQ0dTaXplJikgY29uc3QKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0J
KHJldmlzaW9uIDE3OTQyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ODAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5
YWtvdgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkZvbnQuaCIKLQot
I2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0ICJDb2xvci5oIgotI2ltcG9ydCAi
Q29yZUdyYXBoaWNzU1BJLmgiCi0jaW1wb3J0ICJDb3JlVGV4dFNQSS5oIgotI2ltcG9ydCAiRmxv
YXRSZWN0LmgiCi0jaW1wb3J0ICJGb250Q2FjaGUuaCIKLSNpbXBvcnQgIkZvbnRDYXNjYWRlLmgi
Ci0jaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKLSNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgot
I2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2lmIFVTRShBUFBLSVQpCi0jaW1w
b3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0jaW1wb3J0IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KLSNlbHNlCi0jaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgot
I2VuZGlmCi0jaW1wb3J0IDxmbG9hdC5oPgotI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgotI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmICFQTEFURk9STShJT1MpCi1AaW50ZXJmYWNl
IE5TRm9udCAoV2ViQXBwS2l0U2VjcmV0QVBJKQotLSAoQk9PTClfaXNGYWtlRml4ZWRQaXRjaDsK
LUBlbmQKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoQVBQS0lUKQot
c3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udFJlZiBjdEZvbnQpCi17Ci0g
ICAgLy8gVGhlIGNoZWNrIGRvZXNuJ3QgbG9vayBuZWF0IGJ1dCB0aGlzIGlzIHdoYXQgQXBwS2l0
IGRvZXMgZm9yIHZlcnRpY2FsIHdyaXRpbmcuLi4KLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4g
dGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwga0NU
Rm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgQ0ZJbmRleCBudW1UYWJsZXMgPSBDRkFy
cmF5R2V0Q291bnQodGFibGVUYWdzLmdldCgpKTsKLSAgICBmb3IgKENGSW5kZXggaW5kZXggPSAw
OyBpbmRleCA8IG51bVRhYmxlczsgKytpbmRleCkgewotICAgICAgICBDVEZvbnRUYWJsZVRhZyB0
YWcgPSAoQ1RGb250VGFibGVUYWcpKHVpbnRwdHJfdClDRkFycmF5R2V0VmFsdWVBdEluZGV4KHRh
YmxlVGFncy5nZXQoKSwgaW5kZXgpOwotICAgICAgICBpZiAodGFnID09IGtDVEZvbnRUYWJsZVZo
ZWEgfHwgdGFnID09IGtDVEZvbnRUYWJsZVZPUkcpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBpbml0Rm9udERhdGEo
Rm9udCogZm9udERhdGEpCi17Ci0gICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY2dG
b250KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZhbWlseSh2b2lkKQotewotICAgIHN0YXRp
YyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5ID0gW1tbTlNGb250IHN5c3RlbUZvbnRP
ZlNpemU6MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07Ci0gICAgcmV0dXJuIHdlYkZhbGxiYWNr
Rm9udEZhbWlseTsKLX0KLQotY29uc3QgRm9udCogRm9udDo6Y29tcG9zaXRlRm9udFJlZmVyZW5j
ZUZvbnQoTlNGb250ICprZXkpIGNvbnN0Ci17Ci0gICAgaWYgKCFrZXkgfHwgQ0ZFcXVhbChhZG9w
dENGKENURm9udENvcHlQb3N0U2NyaXB0TmFtZShDVEZvbnRSZWYoa2V5KSkpLmdldCgpLCBDRlNU
UigiTGFzdFJlc29ydCIpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7Ci0KLSAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fZGVyaXZlZEZvbnREYXRhLT5jb21wb3NpdGVGb250UmVmZXJlbmNlcy5hZGQoa2V5
LCBudWxscHRyKTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgTlNG
b250ICpzdWJzdGl0dXRlRm9udCA9IFtrZXkgcHJpbnRlckZvbnRdOwotCi0gICAgICAgIENURm9u
dFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKChDVEZvbnRS
ZWYpc3Vic3RpdHV0ZUZvbnQpOwotICAgICAgICBib29sIHN5bnRoZXRpY0JvbGQgPSBwbGF0Zm9y
bURhdGEoKS5zeW50aGV0aWNCb2xkKCkgJiYgISh0cmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0KTsK
LSAgICAgICAgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gcGxhdGZvcm1EYXRhKCkuc3ludGhldGlj
T2JsaXF1ZSgpICYmICEodHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KTsKLQotICAgICAgICBG
b250UGxhdGZvcm1EYXRhIHN1YnN0aXR1dGVQbGF0Zm9ybShzdWJzdGl0dXRlRm9udCwgcGxhdGZv
cm1EYXRhKCkuc2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBwbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpLCBwbGF0Zm9ybURhdGEoKS53aWR0aFZhcmlhbnQoKSk7Ci0g
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGb250OjpjcmVhdGUoc3Vic3RpdHV0
ZVBsYXRmb3JtLCBpc0N1c3RvbUZvbnQoKSk7Ci0gICAgfQotICAgIHJldHVybiBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmdldCgpOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCi17
Ci0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEubV9zeW50aGV0aWNC
b2xkID8gMS4wZiA6IDAuZjsKLQotICAgIGJvb2wgZmFpbGVkU2V0dXAgPSBmYWxzZTsKLSAgICBp
ZiAoIWluaXRGb250RGF0YSh0aGlzKSkgewotICAgICAgICAvLyBBY2shIFNvbWV0aGluZyB2ZXJ5
IGJhZCBoYXBwZW5lZCwgbGlrZSBhIGNvcnJ1cHQgZm9udC4KLSAgICAgICAgLy8gVHJ5IGxvb2tp
bmcgZm9yIGFuIGFsdGVybmF0ZSAnYmFzZScgZm9udCBmb3IgdGhpcyByZW5kZXJlci4KLQotICAg
ICAgICAvLyBTcGVjaWFsIGNhc2UgaGFjayB0byB1c2UgIlRpbWVzIE5ldyBSb21hbiIgaW4gcGxh
Y2Ugb2YgIlRpbWVzIi4KLSAgICAgICAgLy8gIlRpbWVzIFJPIiBpcyBhIGNvbW1vbiBmb250IHdo
b3NlIGZhbWlseSBuYW1lIGlzICJUaW1lcyIuCi0gICAgICAgIC8vIEl0IG92ZXJyaWRlcyB0aGUg
bm9ybWFsICJUaW1lcyIgZmFtaWx5IGZvbnQuCi0gICAgICAgIC8vIEl0IGFsc28gYXBwZWFycyB0
byBoYXZlIGEgY29ycnVwdCByZWd1bGFyIHZhcmlhbnQuCi0gICAgICAgIE5TU3RyaW5nICpmYWxs
YmFja0ZvbnRGYW1pbHk7Ci0gICAgICAgIGlmIChbW21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIGZh
bWlseU5hbWVdIGlzRXF1YWw6QCJUaW1lcyJdKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RmFt
aWx5ID0gQCJUaW1lcyBOZXcgUm9tYW4iOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmYWxs
YmFja0ZvbnRGYW1pbHkgPSB3ZWJGYWxsYmFja0ZvbnRGYW1pbHkoKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFRyeSBzZXR0aW5nIHVwIHRoZSBhbHRlcm5hdGUgZm9udC4KLSAgICAgICAgLy8gVGhp
cyBpcyBhIGxhc3QgZGl0Y2ggZWZmb3J0IHRvIHVzZSBhIHN1YnN0aXR1dGUgZm9udCB3aGVuIHNv
bWV0aGluZyBoYXMgZ29uZSB3cm9uZy4KLSNpZiAhRVJST1JfRElTQUJMRUQKLSAgICAgICAgUmV0
YWluUHRyPE5TRm9udD4gaW5pdGlhbEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKLSNl
bmRpZgotICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEuZm9udCgpKQotICAgICAgICAgICAgbV9w
bGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0g
Y29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6ZmFsbGJhY2tGb250
RmFtaWx5XSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5T
Rm9udChbTlNGb250IGZvbnRXaXRoTmFtZTpmYWxsYmFja0ZvbnRGYW1pbHkgc2l6ZTptX3BsYXRm
b3JtRGF0YS5zaXplKCldKTsKLSAgICAgICAgaWYgKCFpbml0Rm9udERhdGEodGhpcykpIHsKLSAg
ICAgICAgICAgIGlmIChbZmFsbGJhY2tGb250RmFtaWx5IGlzRXF1YWw6QCJUaW1lcyBOZXcgUm9t
YW4iXSkgewotICAgICAgICAgICAgICAgIC8vIE9LLCBjb3VsZG4ndCBzZXR1cCBUaW1lcyBOZXcg
Um9tYW4gYXMgYW4gYWx0ZXJuYXRlIHRvIFRpbWVzLCBmYWxsYmFjawotICAgICAgICAgICAgICAg
IC8vIG9uIHRoZSBzeXN0ZW0gZm9udC4gIElmIHRoaXMgZmFpbHMgd2UgaGF2ZSBubyBhbHRlcm5h
dGl2ZSBsZWZ0LgotICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChbW05T
Rm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZvcm1EYXRh
Lm5zRm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNrRm9udEZhbWlseSgpXSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFpbml0Rm9udERhdGEodGhpcykpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2UgdHJpZWQsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5v
IGpveS4gV2UgaGF2ZSB0byBnaXZlIHVwLgotICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1Io
InVuYWJsZSB0byBpbml0aWFsaXplIHdpdGggZm9udCAlQCIsIGluaXRpYWxGb250LmdldCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgdHJpZWQgdGhl
IHJlcXVlc3RlZCBmb250IGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0byBn
aXZlIHVwLgotICAgICAgICAgICAgICAgIExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUg
d2l0aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGZhaWxl
ZFNldHVwID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJl
cG9ydCB0aGUgcHJvYmxlbS4KLSAgICAgICAgTE9HX0VSUk9SKCJDb3JydXB0IGZvbnQgZGV0ZWN0
ZWQsIHVzaW5nICVAIGluIHBsYWNlIG9mICVALiIsCi0gICAgICAgICAgICBbbV9wbGF0Zm9ybURh
dGEubnNGb250KCkgZmFtaWx5TmFtZV0sIFtpbml0aWFsRm9udC5nZXQoKSBmYW1pbHlOYW1lXSk7
Ci0gICAgfQotCi0gICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHRyeSB0byBzZXQgdXAgdXNpbmcg
dGhlIHN5c3RlbSBmb250LgotICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSBUaW1lcyBh
bmQgVGltZXMgTmV3IFJvbWFuIGFyZSBib3RoIHVuYXZhaWxhYmxlLgotICAgIGlmIChmYWlsZWRT
ZXR1cCkgewotICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXROU0ZvbnQoW05TRm9udCBzeXN0ZW1G
b250T2ZTaXplOlttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBwb2ludFNpemVdXSk7Ci0gICAgICAg
IExPR19FUlJPUigiZmFpbGVkIHRvIHNldCB1cCBmb250LCB1c2luZyBzeXN0ZW0gZm9udCAlcyIs
IG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgICAgIGluaXRGb250RGF0YSh0aGlzKTsKLSAg
ICB9Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gV29yayBhcm91bmQgPHJkYXI6Ly9wcm9i
bGVtLzE5NDMzNDkwPgotICAgIENHR2x5cGggZHVtbXlHbHlwaHNbXSA9IHswLCAwfTsKLSAgICBD
R1NpemUgZHVtbXlTaXplW10gPSB7Q0dTaXplTWFrZSgwLCAwKSwgQ0dTaXplTWFrZSgwLCAwKX07
Ci0gICAgQ1RGb250VHJhbnNmb3JtR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBkdW1t
eUdseXBocywgZHVtbXlTaXplLCAyLCBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyB8
IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcpOwotI2VuZGlmCi0gICAgCi0gICAgaW50IGlB
c2NlbnQ7Ci0gICAgaW50IGlEZXNjZW50OwotICAgIGludCBpQ2FwSGVpZ2h0OwotICAgIGludCBp
TGluZUdhcDsKLSAgICB1bnNpZ25lZCB1bml0c1BlckVtOwotICAgIGlBc2NlbnQgPSBDR0ZvbnRH
ZXRBc2NlbnQobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpOwotICAgIC8vIFNvbWUgZm9udHMgZXJy
b25lb3VzbHkgc3BlY2lmeSBhIHBvc2l0aXZlIGRlc2NlbmRlciB2YWx1ZS4gV2UgZm9sbG93IENv
cmUgVGV4dCBpbiBhc3N1bWluZyB0aGF0Ci0gICAgLy8gc3VjaCBmb250cyBtZWFudCB0aGUgc2Ft
ZSBkaXN0YW5jZSwgYnV0IGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbi4KLSAgICBpRGVzY2VudCA9
IC1hYnMoQ0dGb250R2V0RGVzY2VudChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSkpOwotICAgIGlD
YXBIZWlnaHQgPSBDR0ZvbnRHZXRDYXBIZWlnaHQobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpOwot
ICAgIGlMaW5lR2FwID0gQ0dGb250R2V0TGVhZGluZyhtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7
Ci0gICAgdW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0obV9wbGF0Zm9ybURhdGEuY2dG
b250KCkpOwotCi0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEubV9zaXplOwot
ICAgIGZsb2F0IGFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2NlbnQsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplOwotICAgIGZsb2F0IGRlc2NlbnQgPSAtc2NhbGVFbVRvVW5pdHMoaURlc2NlbnQs
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGNhcEhlaWdodCA9IHNjYWxlRW1U
b1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIAotICAgIGZs
b2F0IGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwgdW5pdHNQZXJFbSkgKiBwb2lu
dFNpemU7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCBUaW1lcywgSGVsdmV0aWNhLCBhbmQg
Q291cmllciB0byBjbG9zZWx5IG1hdGNoIHRoZQotICAgIC8vIHZlcnRpY2FsIG1ldHJpY3Mgb2Yg
dGhlaXIgTWljcm9zb2Z0IGNvdW50ZXJwYXJ0cyB0aGF0IGFyZSB0aGUgZGUgZmFjdG8KLSAgICAv
LyB3ZWIgc3RhbmRhcmQuIFRoZSBBcHBLaXQgYWRqdXN0bWVudCBvZiAyMCUgaXMgdG9vIGJpZyBh
bmQgaXMKLSAgICAvLyBpbmNvcnJlY3RseSBhZGRlZCB0byBsaW5lIHNwYWNpbmcsIHNvIHdlIHVz
ZSBhIDE1JSBhZGp1c3RtZW50IGluc3RlYWQKLSAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBhc2Nl
bnQuCi0gICAgTlNTdHJpbmcgKmZhbWlseU5hbWUgPSBbbV9wbGF0Zm9ybURhdGEubnNGb250KCkg
ZmFtaWx5TmFtZV07Ci0gICAgaWYgKFtmYW1pbHlOYW1lIGlzRXF1YWxUb1N0cmluZzpAIlRpbWVz
Il0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiSGVsdmV0aWNhIl0gfHwgW2ZhbWls
eU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQ291cmllciJdKQotICAgICAgICBhc2NlbnQgKz0gZmxv
b3JmKCgoYXNjZW50ICsgZGVzY2VudCkgKiAwLjE1ZikgKyAwLjVmKTsKLQotICAgIC8vIENvbXB1
dGUgYW5kIHN0b3JlIGxpbmUgc3BhY2luZywgYmVmb3JlIHRoZSBsaW5lIG1ldHJpY3MgaGFja3Mg
YXJlIGFwcGxpZWQuCi0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGFz
Y2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKSk7Ci0KLSAgICAvLyBI
YWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxvdyByb29tIGZvciBtYXJrZWQgdGV4dCB1
bmRlcmxpbmVzLgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81Mzg2MTgzPgotICAgIGlmIChkZXNj
ZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgW2ZhbWlseU5hbWUgaGFzUHJlZml4OkAiSGlyYWdp
bm8iXSkgewotICAgICAgICBsaW5lR2FwIC09IDMgLSBkZXNjZW50OwotICAgICAgICBkZXNjZW50
ID0gMzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKLSAgICAgICAgbV9o
YXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhtX3BsYXRmb3JtRGF0YS5j
dEZvbnQoKSk7Ci0KLSAgICBmbG9hdCB4SGVpZ2h0OwotCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgp
Lm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbCkgewotICAgICAgICAvLyBNZWFzdXJlIHRoZSBh
Y3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXh0ZW5k
IGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCi0gICAgICAgIC8vIHJlcG9ydGVk
IHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUgZ2x5cGggdGhhdCBp
cyBhYm92ZSB0aGUgYmFzZWxpbmUuCi0gICAgICAgIE5TR2x5cGggeEdseXBoID0gZ2x5cGhGb3JD
aGFyYWN0ZXIoJ3gnKTsKLSAgICAgICAgaWYgKHhHbHlwaCkKLSAgICAgICAgICAgIHhIZWlnaHQg
PSAtQ0dSZWN0R2V0TWluWShwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKHhHbHlwaCkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB4SGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoQ0dGb250R2V0WEhl
aWdodChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwot
ICAgIH0gZWxzZQotICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9u
dCgpLT5mb250TWV0cmljcygpLnhIZWlnaHQoKTsKLQotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5p
dHNQZXJFbSh1bml0c1BlckVtKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQp
OwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKLSAgICBtX2ZvbnRNZXRy
aWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdh
cChsaW5lR2FwKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7Ci19Ci0K
LXN0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJsZUZvclRhZyhGb250UGxhdGZvcm1EYXRhJiBw
bGF0Zm9ybURhdGEsIEZvdXJDaGFyQ29kZSB0YWJsZU5hbWUpCi17Ci0gICAgcmV0dXJuIENHRm9u
dENvcHlUYWJsZUZvclRhZyhwbGF0Zm9ybURhdGEuY2dGb250KCksIHRhYmxlTmFtZSk7Ci19Ci0K
LXZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKLXsKLSAgICBtX2F2Z0NoYXJXaWR0
aCA9IDA7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwOwotICAgIAotICAgIFJldGFpblB0cjxDRkRh
dGFSZWY+IG9zMlRhYmxlID0gYWRvcHRDRihjb3B5Rm9udFRhYmxlRm9yVGFnKG1fcGxhdGZvcm1E
YXRhLCAnT1MvMicpKTsKLSAgICBpZiAob3MyVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKG9zMlRh
YmxlLmdldCgpKSA+PSA0KSB7Ci0gICAgICAgIGNvbnN0IFVJbnQ4KiBvczIgPSBDRkRhdGFHZXRC
eXRlUHRyKG9zMlRhYmxlLmdldCgpKTsKLSAgICAgICAgU0ludDE2IG9zMkF2Z0NoYXJXaWR0aCA9
IG9zMlsyXSAqIDI1NiArIG9zMlszXTsKLSAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBzY2FsZUVt
VG9Vbml0cyhvczJBdmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpKSAqIG1f
cGxhdGZvcm1EYXRhLm1fc2l6ZTsKLSAgICB9Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBo
ZWFkVGFibGUgPSBhZG9wdENGKGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdo
ZWFkJykpOwotICAgIGlmIChoZWFkVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKGhlYWRUYWJsZS5n
ZXQoKSkgPj0gNDIpIHsKLSAgICAgICAgY29uc3QgVUludDgqIGhlYWQgPSBDRkRhdGFHZXRCeXRl
UHRyKGhlYWRUYWJsZS5nZXQoKSk7Ci0gICAgICAgIHVzaG9ydCB1eE1pbiA9IGhlYWRbMzZdICog
MjU2ICsgaGVhZFszN107Ci0gICAgICAgIHVzaG9ydCB1eE1heCA9IGhlYWRbNDBdICogMjU2ICsg
aGVhZFs0MV07Ci0gICAgICAgIFNJbnQxNiB4TWluID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1p
bik7Ci0gICAgICAgIFNJbnQxNiB4TWF4ID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1heCk7Ci0g
ICAgICAgIGZsb2F0IGRpZmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeE1heCAtIHhNaW4pOwotICAg
ICAgICBtX21heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKGRpZmYsIG1fZm9udE1ldHJpY3Mu
dW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLm1fc2l6ZTsKLSAgICB9Ci0KLSAgICAvLyBG
YWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGltYXRlLCB3aGljaCB3aWxsIHBvcHVsYXRl
IHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9zaXRpdmUuCi0gICAgaW5pdENoYXJXaWR0
aHMoKTsKLX0KLSNlbmRpZiAvLyBVU0UoQVBQS0lUKQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtRGVz
dHJveSgpCi17Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TKQotUGFzc1JlZlB0cjxGb250PiBGb250
OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQg
c2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7Ci0gICAgICAg
IEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEpOwotICAgICAg
ICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2FsZUZh
Y3RvcjsKLSAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShzY2FsZWRGb250RGF0YSwgdHJ1ZSwg
ZmFsc2UpOwotICAgIH0KLQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBm
bG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7Ci0gICAgRm9u
dFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1h
bmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHRvU2l6ZTpzaXplXSwg
c2l6ZSwgZmFsc2UsIGZhbHNlLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKTsKLQotICAg
IC8vIEFwcEtpdCByZXNldHMgdGhlIHR5cGUgaW5mb3JtYXRpb24gKHNjcmVlbi9wcmludGVyKSB3
aGVuIHlvdSBjb252ZXJ0IGEgZm9udCB0byBhIGRpZmZlcmVudCBzaXplLgotICAgIC8vIFdlIGhh
dmUgdG8gZml4IHVwIHRoZSBmb250IHRoYXQgd2UncmUgaGFuZGVkIGJhY2suCi0gICAgc2NhbGVk
Rm9udERhdGEuc2V0TlNGb250KFtzY2FsZWRGb250RGF0YS5uc0ZvbnQoKSBwcmludGVyRm9udF0p
OwotCi0gICAgaWYgKHNjYWxlZEZvbnREYXRhLmZvbnQoKSkgewotICAgICAgICBOU0ZvbnRNYW5h
Z2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLSAg
ICAgICAgTlNGb250VHJhaXRNYXNrIGZvbnRUcmFpdHMgPSBbZm9udE1hbmFnZXIgdHJhaXRzT2ZG
b250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpXTsKLQotICAgICAgICBpZiAobV9wbGF0Zm9ybURh
dGEubV9zeW50aGV0aWNCb2xkKQotICAgICAgICAgICAgZm9udFRyYWl0cyB8PSBOU0JvbGRGb250
TWFzazsKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljT2JsaXF1ZSkKLSAg
ICAgICAgICAgIGZvbnRUcmFpdHMgfD0gTlNJdGFsaWNGb250TWFzazsKLQotICAgICAgICBOU0Zv
bnRUcmFpdE1hc2sgc2NhbGVkRm9udFRyYWl0cyA9IFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6
c2NhbGVkRm9udERhdGEubnNGb250KCldOwotICAgICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRo
ZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRU
cmFpdHMgJiBOU0JvbGRGb250TWFzayk7Ci0gICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhl
dGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzaykgJiYgIShzY2FsZWRG
b250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzayk7Ci0KLSAgICAgICAgcmV0dXJuIGZvbnRDYWNo
ZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEoc2NhbGVkRm9udERhdGEpOwotICAgIH0KLSAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgRm9udDo6
ZGV0ZXJtaW5lUGl0Y2goKQotewotICAgIE5TRm9udCogZiA9IG1fcGxhdGZvcm1EYXRhLm5zRm9u
dCgpOwotICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLgotICAgIC8vIEFjY29yZGluZyB0
byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNob3VsZCB0cmVhdCBPc2FrYS1Nb25vIGFz
IGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCB0aGUgQXBwS2l0IGRvZXMgbm90IHJlcG9y
dCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgotCi0gICAgLy8gU3BlY2lhbCBjYXNlIE1TLVBH
b3RoaWMuCi0gICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS80MDMyOTM4Piwgd2Ug
c2hvdWxkIG5vdCB0cmVhdCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUg
dGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KLQotICAg
IC8vIFNwZWNpYWwgY2FzZSBNb25vdHlwZUNvcnNpdmEKLSAgICAvLyBBY2NvcmRpbmcgdG8gPHJk
YXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1vbm90eXBlQ29yc2l2
YSBhcyBmaXhlZCBwaXRjaC4KLSAgICAvLyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1v
bm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLQotICAgIE5TU3RyaW5nICpuYW1lID0gW2Yg
Zm9udE5hbWVdOwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoW2YgaXNGaXhlZFBpdGNoXSB8
fCBbZiBfaXNGYWtlRml4ZWRQaXRjaF0gfHwKLSAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0
aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9PSBOU09yZGVyZWRTYW1lKSAmJgotICAgICAgICAg
ICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMtUEdvdGhpYyJdICE9IE5TT3JkZXJl
ZFNhbWUgJiYKLSAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1vbm90
eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7Ci19Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKLQotRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgp
IGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OwotICAgIGJvdW5kaW5nQm94ID0g
Q1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0aWNh
bE9yaWVudGF0aW9uIDoga0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAwLCAx
KTsKLSAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0JveC5tYXhZKCkpOwotICAgIGlmICht
X3N5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5k
aW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOwotCi0gICAgcmV0dXJuIGJv
dW5kaW5nQm94OwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotaW5saW5lIENHRm9udFJlbmRlcmlu
Z1N0eWxlIEZvbnQ6OnJlbmRlcmluZ1N0eWxlKCkgY29uc3QKLXsKLSAgICBDR0ZvbnRSZW5kZXJp
bmdTdHlsZSBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0Zv
bnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5
bGVTdWJwaXhlbFF1YW50aXphdGlvbjsKLSAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURhdGEo
KS5uc0ZvbnQoKTsKLSAgICBpZiAoZm9udCkgewotICAgICAgICBzd2l0Y2ggKFtmb250IHJlbmRl
cmluZ01vZGVdKSB7Ci0gICAgICAgIGNhc2UgTlNGb250SW50ZWdlckFkdmFuY2VtZW50c1JlbmRl
cmluZ01vZGU6Ci0gICAgICAgICAgICBzdHlsZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBOU0ZvbnRBbnRpYWxpYXNlZEludGVnZXJBZHZhbmNlbWVudHNSZW5kZXJpbmdN
b2RlOgotICAgICAgICAgICAgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNp
bmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdHlsZTsKLX0KLQotaW5saW5lIGJv
b2wgRm9udDo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udChHbHlwaCBnbHlwaCwgQ0dTaXplJiBh
ZHZhbmNlKSBjb25zdAotewotICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YSgpLm5zRm9u
dCgpOwotICAgIGlmICghZm9udCB8fCAhcGxhdGZvcm1EYXRhKCkuaXNDb2xvckJpdG1hcEZvbnQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGFkdmFuY2UgPSBOU1NpemVUb0NHU2l6ZShb
Zm9udCBhZHZhbmNlbWVudEZvckdseXBoOmdseXBoXSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0j
ZW5kaWYKLQotc3RhdGljIGJvb2wgaGFzQ3VzdG9tVHJhY2tpbmcoQ1RGb250UmVmIGZvbnQpCi17
Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwg
MTA5MAotICAgIFVOVVNFRF9QQVJBTShmb250KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQot
ICAgIHJldHVybiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRD
b3B5Rm9udERlc2NyaXB0b3IoZm9udCkpLmdldCgpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNFbW9qaShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCi17
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHJldHVybiBwbGF0Zm9ybURhdGEubV9pc0Vtb2ppOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocGxhdGZvcm1EYXRhKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci0jZW5kaWYKLX0KLQotaW5saW5lIGJvb2wgRm9udDo6Y2FuVXNlRmFzdEdseXBoQWR2YW5jZUdl
dHRlcihHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRBZHZhbmNl
KSBjb25zdAotewotICAgIC8vIEZhc3QgZ2V0dGVyIGRvZXNuJ3QgdGFrZSBjdXN0b20gdHJhY2tp
bmcgaW50byBhY2NvdW50Ci0gICAgaWYgKGhhc0N1c3RvbVRyYWNraW5nKHBsYXRmb3JtRGF0YSgp
LmN0Rm9udCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIEZhc3QgZ2V0dGVyIGRv
ZXNuJ3Qgd29yayBmb3IgZW1vamkKLSAgICBpZiAoaXNFbW9qaShwbGF0Zm9ybURhdGEoKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyAuLi4gb3IgZm9yIGFueSBiaXRtYXAgZm9udHMg
aW4gZ2VuZXJhbAotICAgIGlmIChhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KGdseXBoLCBhZHZh
bmNlKSkgewotICAgICAgICBwb3B1bGF0ZWRBZHZhbmNlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZmxvYXQgRm9udDo6cGxhdGZv
cm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIENHU2l6ZSBhZHZhbmNl
ID0gQ0dTaXplWmVybzsKLSAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IEhvcml6b250YWw7Ci0gICAgYm9vbCBwb3B1bGF0ZWRBZHZhbmNlID0gZmFs
c2U7Ci0gICAgaWYgKChob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjaykg
JiYgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihnbHlwaCwgYWR2YW5jZSwgcG9wdWxhdGVk
QWR2YW5jZSkpIHsKLSAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gcGxhdGZvcm1EYXRhKCkubV9z
aXplOwotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtl
U2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwotICAgICAgICBpZiAoIUNHRm9udEdldEdseXBo
QWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgJm0sIHJlbmRlcmluZ1N0
eWxlKCksICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDR0ZvbnRDb3B5RnVsbE5hbWUocGxhdGZvcm1E
YXRhKCkuY2dGb250KCkpKTsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNhY2hl
IGdseXBoIHdpZHRocyBmb3IgJUAgJWYiLCBmdWxsTmFtZS5nZXQoKSwgcG9pbnRTaXplKTsKLSAg
ICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgh
cG9wdWxhdGVkQWR2YW5jZSkKLSAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9w
bGF0Zm9ybURhdGEuY3RGb250KCksIGhvcml6b250YWwgPyBrQ1RGb250SG9yaXpvbnRhbE9yaWVu
dGF0aW9uIDoga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24sICZnbHlwaCwgJmFkdmFuY2UsIDEp
OwotCi0gICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Ci19
Ci0KLXN0cnVjdCBQcm92aWRlckluZm8gewotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzOwot
ICAgIHNpemVfdCBsZW5ndGg7Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXM7Ci19Owot
Ci1zdGF0aWMgY29uc3QgVW5pQ2hhciogcHJvdmlkZVN0cmluZ0FuZEF0dHJpYnV0ZXMoQ0ZJbmRl
eCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmlidXRl
cywgdm9pZCogY29udGV4dCkKLXsKLSAgICBQcm92aWRlckluZm8qIGluZm8gPSBzdGF0aWNfY2Fz
dDxzdHJ1Y3QgUHJvdmlkZXJJbmZvKj4oY29udGV4dCk7Ci0gICAgaWYgKHN0cmluZ0luZGV4IDwg
MCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0cmluZ0luZGV4KSA+PSBpbmZvLT5sZW5ndGgpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgKmNvdW50ID0gaW5mby0+bGVuZ3RoIC0gc3RyaW5nSW5k
ZXg7Ci0gICAgKmF0dHJpYnV0ZXMgPSBpbmZvLT5hdHRyaWJ1dGVzOwotICAgIHJldHVybiBpbmZv
LT5jaGFyYWN0ZXJzICsgc3RyaW5nSW5kZXg7Ci19Ci0KLWJvb2wgRm9udDo6Y2FuUmVuZGVyQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICgh
bV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQpCi0gICAgICAgIG1fY29tYmluaW5n
Q2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0ID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoTWFwPFN0cmlu
ZywgYm9vbD4+KCk7Ci0KLSAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBib29sPjo6QWRkUmVzdWx0
IGFkZFJlc3VsdCA9IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0LT5hZGQoU3Ry
aW5nKGNoYXJhY3RlcnMsIGxlbmd0aCksIGZhbHNlKTsKLSAgICBpZiAoIWFkZFJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAg
IFJldGFpblB0cjxDRlR5cGVSZWY+IGZvbnRFcXVhbGl0eU9iamVjdCA9IHBsYXRmb3JtRGF0YSgp
Lm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKTsKLQotICAgIFByb3ZpZGVySW5mbyBpbmZvID0geyBj
aGFyYWN0ZXJzLCBsZW5ndGgsIGdldENGU3RyaW5nQXR0cmlidXRlcygwLCBwbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpKSB9OwotICAgIFJldGFpblB0cjxDVExpbmVSZWY+IGxpbmUgPSBhZG9w
dENGKENUTGluZUNyZWF0ZVdpdGhVbmlDaGFyUHJvdmlkZXIoJnByb3ZpZGVTdHJpbmdBbmRBdHRy
aWJ1dGVzLCAwLCAmaW5mbykpOwotCi0gICAgQ0ZBcnJheVJlZiBydW5BcnJheSA9IENUTGluZUdl
dEdseXBoUnVucyhsaW5lLmdldCgpKTsKLSAgICBDRkluZGV4IHJ1bkNvdW50ID0gQ0ZBcnJheUdl
dENvdW50KHJ1bkFycmF5KTsKLQotICAgIGZvciAoQ0ZJbmRleCByID0gMDsgciA8IHJ1bkNvdW50
OyByKyspIHsKLSAgICAgICAgQ1RSdW5SZWYgY3RSdW4gPSBzdGF0aWNfY2FzdDxDVFJ1blJlZj4o
Q0ZBcnJheUdldFZhbHVlQXRJbmRleChydW5BcnJheSwgcikpOwotICAgICAgICBBU1NFUlQoQ0ZH
ZXRUeXBlSUQoY3RSdW4pID09IENUUnVuR2V0VHlwZUlEKCkpOwotICAgICAgICBDRkRpY3Rpb25h
cnlSZWYgcnVuQXR0cmlidXRlcyA9IENUUnVuR2V0QXR0cmlidXRlcyhjdFJ1bik7Ci0gICAgICAg
IENURm9udFJlZiBydW5Gb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250UmVmPihDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShydW5BdHRyaWJ1dGVzLCBrQ1RGb250QXR0cmlidXRlTmFtZSkpOwotICAgICAgICBp
ZiAoIUNGRXF1YWwoZm9udEVxdWFsaXR5T2JqZWN0LmdldCgpLCBGb250UGxhdGZvcm1EYXRhOjpv
YmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkZvbnQpLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gdHJ1ZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="270690"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>