<?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>200771</bug_id>
          
          <creation_ts>2019-08-15 09:52:39 -0700</creation_ts>
          <short_desc>[FTW] Support web fonts</short_desc>
          <delta_ts>2019-08-15 14:49:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>Safari 10</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>161817</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>pvollan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1561581</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-15 09:52:39 -0700</bug_when>
    <thetext>The current code path for handling web fonts uses &apos;AddFontMemResourceEx&apos;. Unfortunately, this only updates the font caches used by GDI, and is not exposed to DirectWrite.

This patch does the following:
1. Moves some code into a new DirectWriteUtilities file, similar to how Direct2D is handled, so we can share code in more places.
2. After adding the font to GDI, it adds the font information to the DirectWrite font cache.
3. Add logic to check the overall system DirectWrite fonts, as well as the custom font cache used for downloaded fonts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561583</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-15 09:56:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/54350291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561626</commentid>
    <comment_count>2</comment_count>
      <attachid>376393</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-15 10:55:14 -0700</bug_when>
    <thetext>Created attachment 376393
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561701</commentid>
    <comment_count>3</comment_count>
      <attachid>376410</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-15 12:43:01 -0700</bug_when>
    <thetext>Created attachment 376410
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561703</commentid>
    <comment_count>4</comment_count>
      <attachid>376411</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-15 12:49:44 -0700</bug_when>
    <thetext>Created attachment 376411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561759</commentid>
    <comment_count>5</comment_count>
      <attachid>376411</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-15 14:49:08 -0700</bug_when>
    <thetext>Comment on attachment 376411
Patch

Clearing flags on attachment: 376411

Committed r248748: &lt;https://trac.webkit.org/changeset/248748&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561760</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-15 14:49:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376393</attachid>
            <date>2019-08-15 10:55:14 -0700</date>
            <delta_ts>2019-08-15 12:43:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200771-20190815105505.patch</filename>
            <type>text/plain</type>
            <size>36779</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODcxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE5LTA4LTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIFN1cHBvcnQgd2Vi
IGZvbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDA3NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0MzUwMjkxPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IGNvZGUgcGF0aCBm
b3IgaGFuZGxpbmcgd2ViIGZvbnRzIHVzZXMgJ0FkZEZvbnRNZW1SZXNvdXJjZUV4Jy4gVW5mb3J0
dW5hdGVseSwgdGhpcyBvbmx5IHVwZGF0ZXMgdGhlIGZvbnQgY2FjaGVzIHVzZWQgYnkgR0RJLCBh
bmQgaXMgbm90IGV4cG9zZWQgdG8gRGlyZWN0V3JpdGUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBk
b2VzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDEuIE1vdmVzIHNvbWUgY29kZSBpbnRvIGEgbmV3
IERpcmVjdFdyaXRlVXRpbGl0aWVzIGZpbGUsIHNpbWlsYXIgdG8gaG93IERpcmVjdDJEIGlzIGhh
bmRsZWQsIHNvIHdlCisgICAgICAgICAgIGNhbiBzaGFyZSBjb2RlIGluIG1vcmUgcGxhY2VzLgor
ICAgICAgICAyLiBBZnRlciBhZGRpbmcgdGhlIGZvbnQgdG8gR0RJLCBpdCBhZGRzIHRoZSBmb250
IGluZm9ybWF0aW9uIHRvIHRoZSBEaXJlY3RXcml0ZSBmb250IGNhY2hlLgorICAgICAgICAzLiBB
ZGQgbG9naWMgdG8gY2hlY2sgdGhlIG92ZXJhbGwgc3lzdGVtIERpcmVjdFdyaXRlIGZvbnRzLCBh
cyB3ZWxsIGFzIHRoZSBjdXN0b20gZm9udCBjYWNoZSB1c2VkCisgICAgICAgICAgIGZvciBkb3du
bG9hZGVkIGZvbnRzLgorCisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6IEFkZCBEaXJlY3RX
cml0ZVV0aWxpdGllcy5jcHAKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwOgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcDoKKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09w
ZW5UeXBlVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbmFtZUFuZEFjdGl2YXRl
Rm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tl
bmREaXJlY3QyREltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFja2luZ1N0b3JlQmFja2Vu
ZERpcmVjdDJESW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJl
Y3QyRDo6Y29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlR0RJRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
dXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZUZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpzeXN0ZW1EV3JpdGVGYWN0b3J5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OnN5c3RlbURXcml0ZUdkaUludGVyb3ApOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHA6CisKIDIwMTktMDgtMTUgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIFdpbkNh
aXJvIGJ1aWxkIGZpeCBhZnRlciByMjQ4NzEzLgpJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1GVFcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21h
a2UJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtl
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
bG9hdFBvaW50RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVj
dERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3Qy
RC5jcHAKQEAgLTE1MCw2ICsxNTEsNDEgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAogKQogCitpZiAoVVNFX0NGKQorICAgIGxp
c3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICIk
e1dFQkNPUkVfRElSfS9sb2FkZXIvYXJjaGl2ZS9jZiIKKyAgICAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2NmIgorICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vY2Yvd2luIgor
ICAgICkKKworICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBlZGl0aW5n
L1NtYXJ0UmVwbGFjZUNGLmNwcAorCisgICAgICAgIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmUuY3BwCisKKyAgICAgICAgcGxhdGZvcm0vY2YvS2V5ZWREZWNvZGVyQ0YuY3BwCisg
ICAgICAgIHBsYXRmb3JtL2NmL0tleWVkRW5jb2RlckNGLmNwcAorICAgICAgICBwbGF0Zm9ybS9j
Zi9TaGFyZWRCdWZmZXJDRi5jcHAKKworICAgICAgICBwbGF0Zm9ybS9jZi93aW4vQ2VydGlmaWNh
dGVDRldpbi5jcHAKKworICAgICAgICBwbGF0Zm9ybS90ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3Bw
CisgICAgKQorCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCisgICAgICAgIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaAorCisgICAg
ICAgIHBsYXRmb3JtL2NmL3dpbi9DZXJ0aWZpY2F0ZUNGV2luLmgKKyAgICApCisKKyAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUyAke0NPUkVGT1VOREFUSU9OX0xJQlJBUll9KQorICAg
IGxpc3QoQVBQRU5EIFdlYkNvcmVUZXN0U3VwcG9ydF9MSUJSQVJJRVMgJHtDT1JFRk9VTkRBVElP
Tl9MSUJSQVJZfSkKK2Vsc2UgKCkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAg
ICAgICAgcGxhdGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5jcHAKKyAgICApCitlbmRpZiAoKQorCiBs
aXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBhY2Nlc3Np
YmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcldpbi5oCiAKQEAgLTE2MCw2ICsx
OTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0RpcmVjdDJET3BlcmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dDJEVXRpbGl0aWVzLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGls
aXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50LmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgK
QEAgLTIxMyw2ICsyNTAsMTMgQEAgbGlzdChBUFBFTkQgV2ViQ29yZVRlc3RTdXBwb3J0X0xJQlJB
UklFUwogICAgIHNobHdhcGkKICkKIAorbWFrZV9kaXJlY3RvcnkoJHtDTUFLRV9SVU5USU1FX09V
VFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMvZW4ubHByb2opCitmaWxlKENPUFkKKyAg
ICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncyIKKyAgICAiJHtX
RUJDT1JFX0RJUn0vZW4ubHByb2ovbWVkaWFDb250cm9sc0xvY2FsaXplZFN0cmluZ3MuanMiCisg
ICAgREVTVElOQVRJT04KKyAgICAke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2Vi
S2l0LnJlc291cmNlcy9lbi5scHJvagorKQogZmlsZShDT1BZCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzQXBwbGUuY3NzIgogICAgICIke1dF
QkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCShyZXZpc2lvbiAy
NDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBACiAjZW5kaWYKIAogI2lmIFVTRShESVJFQ1QyRCkK
LSNpbmNsdWRlIDxkd3JpdGUuaD4KKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkRm9udC5jcHAJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRGb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkd3Jp
dGUuaD4KKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5j
cHAJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRTVkdGb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUg
IlNWR1RvT1RGRm9udENvbnZlcnNpb24uaCIKIAogI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRl
IDxkd3JpdGUuaD4KKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQAogI2VuZGlmCiAKICNpZiBV
U0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZHdyaXRlLmg+CisjaW5jbHVkZSA8ZHdyaXRlXzMuaD4K
ICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAK
ICNlbmRpZgogCiAjaWYgVVNFKERJUkVDVDJEKQotaW50ZXJmYWNlIElEV3JpdGVGYWN0b3J5Owor
aW50ZXJmYWNlIElEV3JpdGVGYWN0b3J5NTsKIGludGVyZmFjZSBJRFdyaXRlR2RpSW50ZXJvcDsK
ICNlbmRpZgogCkBAIC0yMTksMTEgKzIxOSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZmxvYXQg
YXNjZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRIYWNrKGNvbnN0IFdDSEFSKiwgZmxvYXQgYXNjZW50
LCBmbG9hdCBkZXNjZW50KTsKICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBJRFdyaXRlRmFjdG9yeSogc3lzdGVtRFdyaXRlRmFjdG9yeSgpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRFdyaXRlR2RpSW50ZXJvcCogc3lzdGVtRFdyaXRl
R2RpSW50ZXJvcCgpOwotI2VuZGlmCi0KIHByaXZhdGU6CiAgICAgRm9udChjb25zdCBGb250UGxh
dGZvcm1EYXRhJiwgT3JpZ2luLCBJbnRlcnN0aXRpYWwsIFZpc2liaWxpdHksIE9yaWVudGF0aW9u
RmFsbGJhY2spOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5jcHAJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcg
QEAKICNlbmRpZgogCiAjaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGR3cml0ZS5oPgorI2lu
Y2x1ZGUgPGR3cml0ZV8zLmg+CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxh
dGZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAKICNlbmRpZgogCiAjaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGR3cml0ZS5o
PgorI2luY2x1ZGUgPGR3cml0ZV8zLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0
Zm9ybURhdGEuaAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3
IEBAIGludGVyZmFjZSBJRFdyaXRlRm9udEZhY2U7CiAjZW5kaWYKIAogI2lmIFVTRShESVJFQ1Qy
RCkKLSNpbmNsdWRlIDxkd3JpdGUuaD4KKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKERJUkVDVDJEKQotICAgIEZvbnRQbGF0Zm9ybURh
dGEoR0RJT2JqZWN0PEhGT05UPiwgSURXcml0ZUZvbnQqLCBmbG9hdCBzaXplLCBib29sIHN5bnRo
ZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgYm9vbCB1c2VHREkpOworICAgIEZvbnRQ
bGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmLCBJRFdyaXRlRm9udCosIGZsb2F0IHNpemUs
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENBSVJPKQpAQCAtMTQ1LDYgKzE0
NSw3IEBAIHB1YmxpYzoKICAgICBJRFdyaXRlRm9udEZhY2UqIGR3Rm9udEZhY2UoKSBjb25zdCB7
IHJldHVybiBtX2R3Rm9udEZhY2UuZ2V0KCk7IH0KIAogICAgIHN0YXRpYyBIUkVTVUxUIGNyZWF0
ZUZhbGxiYWNrRm9udChjb25zdCBMT0dGT05UJiwgSURXcml0ZUZvbnQqKik7CisgICAgc3RhdGlj
IEhSRVNVTFQgY3JlYXRlRmFsbGJhY2tGb250KEhGT05ULCBJRFdyaXRlRm9udCoqKTsKICNlbmRp
ZgogCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZVV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksMTEgQEAKIAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCisjaWYg
VVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSA8ZHdyaXRlXzMuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBC
aWdFbmRpYW5VU2hvcnQgeyAKQEAgLTQyMyw2ICs0MjgsMTEgQEAgSEFORExFIHJlbmFtZUFuZEFj
dGl2YXRlRm9udChjb25zdCBTaGFyZQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyNpZiBV
U0UoRElSRUNUMkQpCisgICAgSFJFU1VMVCBociA9IERpcmVjdFdyaXRlOjphZGRGb250RnJvbURh
dGFUb1Byb2Nlc3NDb2xsZWN0aW9uKHJld3JpdHRlbkZvbnREYXRhKTsKKyAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSk7CisjZW5kaWYKKwogICAgIHJldHVybiBmb250SGFuZGxlOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2Vu
ZERpcmVjdDJESW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwCShyZXZpc2lv
biAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2lu
Z1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDIzICs2
MCwzMSBAQCBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsOjp+QmFja2luCiAKIHZvaWQg
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNj
cm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKIHsKLSAgICBJbnRSZWN0IHRh
cmdldFJlY3QgPSBzY3JvbGxSZWN0OwotICAgIHRhcmdldFJlY3QubW92ZShzY3JvbGxPZmZzZXQp
OwotICAgIHRhcmdldFJlY3Quc2hpZnRNYXhYRWRnZVRvKHRhcmdldFJlY3QubWF4WCgpIC0gc2Ny
b2xsT2Zmc2V0LndpZHRoKCkpOwotICAgIHRhcmdldFJlY3Quc2hpZnRNYXhZRWRnZVRvKHRhcmdl
dFJlY3QubWF4WSgpIC0gc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKLSAgICBpZiAodGFyZ2V0UmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICghbV9zY3JvbGxTdXJmYWNl
KSB7CiAgICAgICAgIGF1dG8gZmxvYXRTaXplID0gRGlyZWN0MkQ6OmJpdG1hcFNpemUobV9zdXJm
YWNlLmdldCgpKTsKICAgICAgICAgSW50U2l6ZSBzaXplKGZsb2F0U2l6ZS53aWR0aCgpLCBmbG9h
dFNpemUuaGVpZ2h0KCkpOwogICAgICAgICBhdXRvIHNjYWxlID0gRGlyZWN0MkQ6OmJpdG1hcFJl
c29sdXRpb24obV9zdXJmYWNlLmdldCgpKTsKICAgICAgICAgQVNTRVJUKHNjYWxlLngoKSA9PSBz
Y2FsZS55KCkpOworICAgICAgICBzaXplLnNjYWxlKDEuMCAvIHNjYWxlLngoKSwgMS4wIC8gc2Nh
bGUueSgpKTsKICAgICAgICAgbV9zY3JvbGxTdXJmYWNlID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1h
cChtX3JlbmRlclRhcmdldC5nZXQoKSwgc2l6ZSk7CiAgICAgfQogCi0gICAgRGlyZWN0MkQ6OmNv
cHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIobV9zdXJmYWNlLmdldCgpLCBtX3Njcm9sbFN1
cmZhY2UuZ2V0KCksIHNjcm9sbE9mZnNldCwgdGFyZ2V0UmVjdCk7Ci0gICAgRGlyZWN0MkQ6OmNv
cHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIobV9zY3JvbGxTdXJmYWNlLmdldCgpLCBtX3N1
cmZhY2UuZ2V0KCksIEludFNpemUoKSwgdGFyZ2V0UmVjdCk7CisgICAgSW50UmVjdCBzb3VyY2VS
ZWN0ID0gc2Nyb2xsUmVjdDsKKyAgICBzb3VyY2VSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldCk7Cisg
ICAgaWYgKHNvdXJjZVJlY3QueCgpIDwgMCkKKyAgICAgICAgc291cmNlUmVjdC5zZXRYKDApOwor
ICAgIGlmIChzb3VyY2VSZWN0LnkoKSA8IDApCisgICAgICAgIHNvdXJjZVJlY3Quc2V0WSgwKTsK
KworICAgIERpcmVjdDJEOjpjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKG1fc3VyZmFj
ZS5nZXQoKSwgbV9zY3JvbGxTdXJmYWNlLmdldCgpLCBzY3JvbGxPZmZzZXQsIHNvdXJjZVJlY3Qp
OworCisgICAgSW50U2l6ZSBkZXN0UG9zaXRpb247CisgICAgaWYgKHNjcm9sbE9mZnNldC53aWR0
aCgpID4gMCB8fCBzY3JvbGxPZmZzZXQuaGVpZ2h0KCkgPiAwKSB7CisgICAgICAgIGRlc3RQb3Np
dGlvbi5zZXRXaWR0aChzY3JvbGxPZmZzZXQud2lkdGgoKSk7CisgICAgICAgIGRlc3RQb3NpdGlv
bi5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBEaXJlY3Qy
RDo6Y29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihtX3Njcm9sbFN1cmZhY2UuZ2V0KCks
IG1fc3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgpLCBzY3JvbGxSZWN0LCBkZXN0UG9zaXRpb24pOwog
CiAgICAgbV9zY3JvbGxlZEh5c3RlcmVzaXMuaW1wdWxzZSgpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5oCShyZXZpc2lvbiAyNDg0NDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERp
cmVjdDJESW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBAIGludGVyZmFjZSBJ
V0lDQml0bWFwOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEludFNpemU7CisKIGNs
YXNzIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwgZmluYWwgOiBwdWJsaWMgQmFja2lu
Z1N0b3JlQmFja2VuZERpcmVjdDJEIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBCYWNr
aW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsKGNvbnN0IEludFNpemUmLCBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3Rvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RGlyZWN0MkRVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI0ODQ0NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhIFMuTC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRk
ZWQgc3lzdGVtcwogICoKQEAgLTE3Myw4ICsxNzQsMTAgQEAgQ09NUHRyPElEMkQxRENSZW5kZXJU
YXJnZXQ+IGNyZWF0ZUdESVJlbgogCiB2b2lkIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3Ro
ZXIoSUQyRDFCaXRtYXAqIGZyb20sIElEMkQxQml0bWFwKiB0bywgY29uc3QgSW50U2l6ZSYgc291
cmNlT2Zmc2V0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0
KQogewotICAgIGF1dG8gb2Zmc2V0ID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIGF1dG8gc291cmNl
UmVjdCA9IEQyRDE6OlJlY3RVKHNvdXJjZU9mZnNldC53aWR0aCgpLCAtc291cmNlT2Zmc2V0Lmhl
aWdodCgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGF1dG8gb2Zmc2V0ID0g
RDJEMTo6UG9pbnQyVShkZXN0T2Zmc2V0LndpZHRoKCksIGRlc3RPZmZzZXQuaGVpZ2h0KCkpOwor
CisgICAgRDJEMV9SRUNUX1Ugc291cmNlUmVjdCA9IHJlY3Q7CisKICAgICBIUkVTVUxUIGhyID0g
dG8tPkNvcHlGcm9tQml0bWFwKCZvZmZzZXQsIGZyb20sICZzb3VyY2VSZWN0KTsKICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dFdyaXRlVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKKworI2lmIFVTRShESVJF
Q1QyRCkKKworI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
I2luY2x1ZGUgPGR3cml0ZV8zLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgRGlyZWN0V3JpdGUgeworCitJRFdyaXRlRmFjdG9yeTUqIGZhY3RvcnkoKQoreworICAgIHN0
YXRpYyBJRFdyaXRlRmFjdG9yeTUqIGRpcmVjdFdyaXRlRmFjdG9yeSA9IG51bGxwdHI7CisgICAg
aWYgKCFkaXJlY3RXcml0ZUZhY3RvcnkpIHsKKyAgICAgICAgSFJFU1VMVCBociA9IERXcml0ZUNy
ZWF0ZUZhY3RvcnkoRFdSSVRFX0ZBQ1RPUllfVFlQRV9TSEFSRUQsIF9fdXVpZG9mKGRpcmVjdFdy
aXRlRmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24qKj4oJmRpcmVjdFdyaXRlRmFj
dG9yeSkpOworICAgICAgICBkaXJlY3RXcml0ZUZhY3RvcnktPkFkZFJlZigpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlyZWN0
V3JpdGVGYWN0b3J5OworfQorCitJRFdyaXRlR2RpSW50ZXJvcCogZ2RpSW50ZXJvcCgpCit7Cisg
ICAgc3RhdGljIElEV3JpdGVHZGlJbnRlcm9wKiBkaXJlY3RXcml0ZUdkaUludGVyb3AgPSBudWxs
cHRyOworICAgIGlmICghZGlyZWN0V3JpdGVHZGlJbnRlcm9wKSB7CisgICAgICAgIEhSRVNVTFQg
aHIgPSBmYWN0b3J5KCktPkdldEdkaUludGVyb3AoJmRpcmVjdFdyaXRlR2RpSW50ZXJvcCk7Cisg
ICAgICAgIGRpcmVjdFdyaXRlR2RpSW50ZXJvcC0+QWRkUmVmKCk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KKworICAgIHJldHVybiBkaXJlY3RXcml0ZUdk
aUludGVyb3A7Cit9CisKK3N0YXRpYyBJRFdyaXRlSW5NZW1vcnlGb250RmlsZUxvYWRlciogbWVt
b3J5Rm9udExvYWRlcigpCit7CisgICAgc3RhdGljIElEV3JpdGVJbk1lbW9yeUZvbnRGaWxlTG9h
ZGVyKiBtZW1vcnlGb250TG9hZGVyID0gbnVsbHB0cjsKKyAgICBpZiAoIW1lbW9yeUZvbnRMb2Fk
ZXIpIHsKKyAgICAgICAgSFJFU1VMVCBociA9IGZhY3RvcnkoKS0+Q3JlYXRlSW5NZW1vcnlGb250
RmlsZUxvYWRlcigmbWVtb3J5Rm9udExvYWRlcik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOworICAgICAgICBtZW1vcnlGb250TG9hZGVyLT5BZGRSZWYoKTsKKworICAg
ICAgICBociA9IGZhY3RvcnkoKS0+UmVnaXN0ZXJGb250RmlsZUxvYWRlcihtZW1vcnlGb250TG9h
ZGVyKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIG1lbW9yeUZvbnRMb2FkZXI7Cit9CisKK3N0YXRpYyBJRFdyaXRlRm9udFNldEJ1
aWxkZXIxKiBmb250U2V0QnVpbGRlcigpCit7CisgICAgc3RhdGljIElEV3JpdGVGb250U2V0QnVp
bGRlcjEqIGZvbnRTZXRCdWlsZGVyID0gbnVsbHB0cjsKKyAgICBpZiAoIWZvbnRTZXRCdWlsZGVy
KSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBmYWN0b3J5KCktPkNyZWF0ZUZvbnRTZXRCdWlsZGVy
KCZmb250U2V0QnVpbGRlcik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OworICAgICAgICBmb250U2V0QnVpbGRlci0+QWRkUmVmKCk7CisgICAgfQorCisgICAgcmV0dXJu
IGZvbnRTZXRCdWlsZGVyOworfQorCitzdGF0aWMgQ09NUHRyPElEV3JpdGVGb250U2V0PiBmb250
U2V0Oworc3RhdGljIENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24xPiBmb250Q29sbGVjdGlv
bjsKK3N0YXRpYyBVSU5UMzIgZm9udENvdW50ID0gMDsKKworSURXcml0ZUZvbnRDb2xsZWN0aW9u
MSogd2ViUHJvY2Vzc0ZvbnRDb2xsZWN0aW9uKCkKK3sKKyAgICBIUkVTVUxUIGhyID0gU19PSzsK
KworICAgIGlmICghZm9udFNldCkgeworICAgICAgICBociA9IGZvbnRTZXRCdWlsZGVyKCktPkNy
ZWF0ZUZvbnRTZXQoJmZvbnRTZXQpOworICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBmb250Q29sbGVjdGlvbiA9IG51bGxw
dHI7CisgICAgICAgIGhyID0gZmFjdG9yeSgpLT5DcmVhdGVGb250Q29sbGVjdGlvbkZyb21Gb250
U2V0KGZvbnRTZXQuZ2V0KCksICZmb250Q29sbGVjdGlvbik7CisgICAgICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIEFTU0VSVChm
b250Q29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseUNvdW50KCkgPT0gZm9udENvdW50KTsKKyAgICB9
CisKKyAgICByZXR1cm4gZm9udENvbGxlY3Rpb24uZ2V0KCk7Cit9CisKK0hSRVNVTFQgYWRkRm9u
dEZyb21EYXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihjb25zdCBWZWN0b3I8Y2hhcj4mIGZvbnREYXRh
KQoreworICAgIENPTVB0cjxJRFdyaXRlRm9udEZpbGU+IGZvbnRGaWxlOworICAgIEhSRVNVTFQg
aHIgPSBtZW1vcnlGb250TG9hZGVyKCktPkNyZWF0ZUluTWVtb3J5Rm9udEZpbGVSZWZlcmVuY2Uo
ZmFjdG9yeSgpLCBmb250RGF0YS5kYXRhKCksIGZvbnREYXRhLnNpemUoKSwgbnVsbHB0ciwgJmZv
bnRGaWxlKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBocjsKKwor
ICAgIGhyID0gZm9udFNldEJ1aWxkZXIoKS0+QWRkRm9udEZpbGUoZm9udEZpbGUuZ2V0KCkpOwor
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgZm9udFNl
dCA9IG51bGxwdHI7CisgICAgKytmb250Q291bnQ7CisKKyAgICByZXR1cm4gaHI7Cit9CisKK1Zl
Y3Rvcjx3Y2hhcl90PiBmYW1pbHlOYW1lRm9yTG9jYWxlKElEV3JpdGVGb250RmFtaWx5KiBmb250
RmFtaWx5LCBjb25zdCBWZWN0b3I8d2NoYXJfdD4mIGxvY2FsZU5hbWUpCit7CisgICAgQ09NUHRy
PElEV3JpdGVMb2NhbGl6ZWRTdHJpbmdzPiBmYW1pbHlOYW1lczsKKyAgICBIUkVTVUxUIGhyID0g
Zm9udEZhbWlseS0+R2V0RmFtaWx5TmFtZXMoJmZhbWlseU5hbWVzKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEJPT0wgZXhpc3RzID0gZmFsc2U7Cisg
ICAgdW5zaWduZWQgbG9jYWxlSW5kZXggPSAwOworICAgIGlmICghbG9jYWxlTmFtZS5pc0VtcHR5
KCkpCisgICAgICAgIGhyID0gZmFtaWx5TmFtZXMtPkZpbmRMb2NhbGVOYW1lKGxvY2FsZU5hbWUu
ZGF0YSgpLCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOworCisgICAgaWYgKFNVQ0NFRURFRChocikg
JiYgIWV4aXN0cykKKyAgICAgICAgaHIgPSBmYW1pbHlOYW1lcy0+RmluZExvY2FsZU5hbWUoTCJl
bi11cyIsICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIHVuc2lnbmVkIGZhbWlseU5hbWVMZW5ndGggPSAwOwor
ICAgIGhyID0gZmFtaWx5TmFtZXMtPkdldFN0cmluZ0xlbmd0aChsb2NhbGVJbmRleCwgJmZhbWls
eU5hbWVMZW5ndGgpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIFZlY3Rvcjx3Y2hhcl90PiBmYW1pbHlOYW1lKGZhbWlseU5hbWVMZW5ndGggKyAx
KTsKKyAgICBociA9IGZhbWlseU5hbWVzLT5HZXRTdHJpbmcobG9jYWxlSW5kZXgsIGZhbWlseU5h
bWUuZGF0YSgpLCBmYW1pbHlOYW1lLnNpemUoKSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIGZhbWlseU5hbWU7Cit9CisKK0NPTVB0
cjxJRFdyaXRlRm9udEZhbWlseT4gZm9udEZhbWlseUZvckNvbGxlY3Rpb24oSURXcml0ZUZvbnRD
b2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwgY29uc3QgVmVjdG9yPHdjaGFyX3Q+JiBsb2NhbGVO
YW1lLCBjb25zdCBMT0dGT05UJiBsb2dGb250KQoreworICAgIENPTVB0cjxJRFdyaXRlRm9udEZh
bWlseT4gZm9udEZhbWlseTsKKworICAgIHVuc2lnbmVkIGZvbnRGYW1pbHlDb3VudCA9IGZvbnRD
b2xsZWN0aW9uLT5HZXRGb250RmFtaWx5Q291bnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGZvbnRJ
bmRleCA9IDA7IGZvbnRJbmRleCA8IGZvbnRGYW1pbHlDb3VudDsgKytmb250SW5kZXgpIHsKKyAg
ICAgICAgSFJFU1VMVCBociA9IGZvbnRDb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5KGZvbnRJbmRl
eCwgJmZvbnRGYW1pbHkpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgIGF1dG8gZmFtaWx5TmFtZSA9IGZhbWlseU5hbWVGb3JM
b2NhbGUoZm9udEZhbWlseS5nZXQoKSwgbG9jYWxlTmFtZSk7CisKKyAgICAgICAgaWYgKCF3Y3Nj
bXAobG9nRm9udC5sZkZhY2VOYW1lLCBmYW1pbHlOYW1lLmRhdGEoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZm9udEZhbWlseTsKKworICAgICAgICBmb250RmFtaWx5ID0gbnVsbHB0cjsKKyAgICB9
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQ09NUHRyPElEV3JpdGVGb250PiBjcmVhdGVX
aXRoUGxhdGZvcm1Gb250KGNvbnN0IExPR0ZPTlQmIGxvZ0ZvbnQpCit7CisgICAgQ09NUHRyPElE
V3JpdGVGb250Q29sbGVjdGlvbj4gc3lzdGVtRm9udENvbGxlY3Rpb247CisgICAgSFJFU1VMVCBo
ciA9IGZhY3RvcnkoKS0+R2V0U3lzdGVtRm9udENvbGxlY3Rpb24oJnN5c3RlbUZvbnRDb2xsZWN0
aW9uKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBWZWN0b3I8d2NoYXJfdD4gbG9jYWxlTmFtZShMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKKyAg
ICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKGxvY2FsZU5hbWUu
ZGF0YSgpLCBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKKworICAgIENPTVB0cjxJRFdyaXRlRm9u
dEZhbWlseT4gZm9udEZhbWlseSA9IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9uKHN5c3RlbUZvbnRD
b2xsZWN0aW9uLmdldCgpLCBsb2NhbGVOYW1lLCBsb2dGb250KTsKKyAgICBpZiAoIWZvbnRGYW1p
bHkpCisgICAgICAgIGZvbnRGYW1pbHkgPSBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbih3ZWJQcm9j
ZXNzRm9udENvbGxlY3Rpb24oKSwgbG9jYWxlTmFtZSwgbG9nRm9udCk7CisKKyAgICBpZiAoIWZv
bnRGYW1pbHkpIHsKKyAgICAgICAgLy8gSnVzdCByZXR1cm4gdGhlIGZpcnN0IHN5c3RlbSBmb250
LgorICAgICAgICBociA9IHN5c3RlbUZvbnRDb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5KDAsICZm
b250RmFtaWx5KTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYXV0byBmYW1pbHlOYW1lID0gZmFt
aWx5TmFtZUZvckxvY2FsZShmb250RmFtaWx5LmdldCgpLCBsb2NhbGVOYW1lKTsKKyAgICAgICAg
VU5VU0VEX1ZBUklBQkxFKGZhbWlseU5hbWUpOworI2VuZGlmCisgICAgfQorCisgICAgRFdSSVRF
X0ZPTlRfV0VJR0hUIHdlaWdodCA9IHN0YXRpY19jYXN0PERXUklURV9GT05UX1dFSUdIVD4obG9n
Rm9udC5sZldlaWdodCk7CisgICAgRFdSSVRFX0ZPTlRfU1RSRVRDSCBzdHJldGNoID0gc3RhdGlj
X2Nhc3Q8RFdSSVRFX0ZPTlRfU1RSRVRDSD4obG9nRm9udC5sZlF1YWxpdHkpOworICAgIERXUklU
RV9GT05UX1NUWUxFIHN0eWxlID0gbG9nRm9udC5sZkl0YWxpYyA/IERXUklURV9GT05UX1NUWUxF
X0lUQUxJQyA6IERXUklURV9GT05UX1NUWUxFX05PUk1BTDsKKworICAgIENPTVB0cjxJRFdyaXRl
Rm9udD4gZHdGb250OworICAgIGhyID0gZm9udEZhbWlseS0+R2V0Rmlyc3RNYXRjaGluZ0ZvbnQo
d2VpZ2h0LCBzdHJldGNoLCBzdHlsZSwgJmR3Rm9udCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOworCisgICAgcmV0dXJuIGR3Rm9udDsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlyZWN0V3Jp
dGUKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1
ZGUgIkNPTVB0ci5oIgorCitpbnRlcmZhY2UgSURXcml0ZUZhY3Rvcnk1OworaW50ZXJmYWNlIElE
V3JpdGVGb250OworaW50ZXJmYWNlIElEV3JpdGVGb250Q29sbGVjdGlvbjsKK2ludGVyZmFjZSBJ
RFdyaXRlRm9udENvbGxlY3Rpb24xOworaW50ZXJmYWNlIElEV3JpdGVGb250RmFtaWx5OworaW50
ZXJmYWNlIElEV3JpdGVHZGlJbnRlcm9wOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNoYXJlZEJ1ZmZlcjsKKworbmFtZXNwYWNlIERpcmVjdFdyaXRlIHsKKworSURXcml0ZUZhY3Rv
cnk1KiBmYWN0b3J5KCk7CitJRFdyaXRlR2RpSW50ZXJvcCogZ2RpSW50ZXJvcCgpOworCitJRFdy
aXRlRm9udENvbGxlY3Rpb24xKiB3ZWJQcm9jZXNzRm9udENvbGxlY3Rpb24oKTsKKworSFJFU1VM
VCBhZGRGb250RnJvbURhdGFUb1Byb2Nlc3NDb2xsZWN0aW9uKGNvbnN0IFZlY3RvcjxjaGFyPiYg
Zm9udERhdGEpOworQ09NUHRyPElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5Rm9yQ29sbGVj
dGlvbihJRFdyaXRlRm9udENvbGxlY3Rpb24qLCBjb25zdCBWZWN0b3I8d2NoYXJfdD4mIGxvY2Fs
ZU5hbWUsIGNvbnN0IExPR0ZPTlQmKTsKK0NPTVB0cjxJRFdyaXRlRm9udD4gY3JlYXRlV2l0aFBs
YXRmb3JtRm9udChjb25zdCBMT0dGT05UJik7CitWZWN0b3I8d2NoYXJfdD4gZmFtaWx5TmFtZUZv
ckxvY2FsZShJRFdyaXRlRm9udEZhbWlseSosIGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxl
TmFtZSk7CisKK30gLy8gbmFtZXNwYWNlIERpcmVjdFdyaXRlCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCShyZXZpc2lv
biAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENh
Y2hlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2VuZGlmCiAKICNp
ZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZHdyaXRlLmg+CisjaW5jbHVkZSA8ZHdyaXRlXzMu
aD4KICNlbmRpZgogCiB1c2luZyBzdGQ6Om1pbjsKQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMg
R0RJT2JqZWN0PEhGT05UPiBjcmVhdGVHRElGb250KGNvCiAgICAgbWF0Y2hEYXRhLm1fY2hvc2Vu
LmxmVW5kZXJsaW5lID0gZmFsc2U7CiAgICAgbWF0Y2hEYXRhLm1fY2hvc2VuLmxmU3RyaWtlT3V0
ID0gZmFsc2U7CiAgICAgbWF0Y2hEYXRhLm1fY2hvc2VuLmxmQ2hhclNldCA9IERFRkFVTFRfQ0hB
UlNFVDsKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlS
TykgfHwgVVNFKERJUkVDVDJEKQogICAgIG1hdGNoRGF0YS5tX2Nob3Nlbi5sZk91dFByZWNpc2lv
biA9IE9VVF9UVF9PTkxZX1BSRUNJUzsKICNlbHNlCiAgICAgbWF0Y2hEYXRhLm1fY2hvc2VuLmxm
T3V0UHJlY2lzaW9uID0gT1VUX1RUX1BSRUNJUzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5j
cHAJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQAogI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb3Jl
VGV4dFJlbmRlcmVyLmgiCiAjaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGR3cml0ZS5oPgor
I2luY2x1ZGUgPGR3cml0ZV8zLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2
aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBA
CiAjZW5kaWYKIAogI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVk
ZSA8ZHdyaXRlLmg+CisjaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
IDxkd3JpdGVfMy5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY1LDcgKzY1
LDcgQEAgRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogICAgIGxvZ0Zv
bnQubGZVbmRlcmxpbmUgPSBmYWxzZTsKICAgICBsb2dGb250LmxmU3RyaWtlT3V0ID0gZmFsc2U7
CiAgICAgbG9nRm9udC5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7Ci0jaWYgVVNFKENHKSB8
fCBVU0UoQ0FJUk8pCisjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pIHx8IFVTRShESVJFQ1QyRCkK
ICAgICBsb2dGb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX09OTFlfUFJFQ0lTOwogI2Vsc2UK
ICAgICBsb2dGb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX1BSRUNJUzsKQEAgLTc2LDIwICs3
NiwxMSBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6CiAgICAgbG9n
Rm9udC5sZldlaWdodCA9IGJvbGQgPyA3MDAgOiA0MDA7CiAKICAgICBhdXRvIGhmb250ID0gYWRv
cHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJmxvZ0ZvbnQpKTsKLQogI2lmIFVTRShD
RykKICAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQgPSBhZG9wdENGKENHRm9udENyZWF0
ZVdpdGhQbGF0Zm9ybUZvbnQoJmxvZ0ZvbnQpKTsKICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0
YShXVEZNb3ZlKGhmb250KSwgY2dGb250LmdldCgpLCBzaXplLCBib2xkLCBpdGFsaWMsIHJlbmRl
cmluZ01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZSk7CiAjZWxzZQotICAgIENP
TVB0cjxJRFdyaXRlRm9udD4gZHdGb250OwotICAgIEhSRVNVTFQgaHIgPSBGb250OjpzeXN0ZW1E
V3JpdGVHZGlJbnRlcm9wKCktPkNyZWF0ZUZvbnRGcm9tTE9HRk9OVCgmbG9nRm9udCwgJmR3Rm9u
dCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKSB7Ci0gICAgICAgIExPR0ZPTlQgY3VzdG9tRm9u
dDsKLSAgICAgICAgaHIgPSA6OkdldE9iamVjdChoZm9udC5nZXQoKSwgc2l6ZW9mKExPR0ZPTlQp
LCAmY3VzdG9tRm9udCk7Ci0gICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAg
aHIgPSBGb250UGxhdGZvcm1EYXRhOjpjcmVhdGVGYWxsYmFja0ZvbnQoY3VzdG9tRm9udCwgJmR3
Rm9udCk7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIENP
TVB0cjxJRFdyaXRlRm9udD4gZHdGb250ID0gRGlyZWN0V3JpdGU6OmNyZWF0ZVdpdGhQbGF0Zm9y
bUZvbnQobG9nRm9udCk7CiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZShoZm9u
dCksIGR3Rm9udC5nZXQoKSwgc2l6ZSwgYm9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09IEZv
bnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YURpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaWYgVVNFKERJUkVDVDJEKQogCisj
aW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJTaGFyZWRHRElPYmplY3QuaCIK
ICNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZHdyaXRlLmg+CisjaW5jbHVkZSA8ZHdyaXRl
XzMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTM5LDI0ICs0MSwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB2b2lkIEZvbnRQbGF0Zm9ybURh
dGE6OnBsYXRmb3JtRGF0YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NI
QVIqIGZhY2VOYW1lKQogewogICAgIExPR0ZPTlQgbG9nZm9udDsKLSAgICBHZXRPYmplY3QoZm9u
dCwgc2l6ZW9mKGxvZ2ZvbnQpLCAmbG9nZm9udCk7Ci0KLSAgICBIUkVTVUxUIGhyID0gRm9udDo6
c3lzdGVtRFdyaXRlR2RpSW50ZXJvcCgpLT5DcmVhdGVGb250RnJvbUxPR0ZPTlQoJmxvZ2ZvbnQs
ICZtX2R3Rm9udCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKSB7Ci0gICAgICAgIGhyID0gRm9u
dFBsYXRmb3JtRGF0YTo6Y3JlYXRlRmFsbGJhY2tGb250KGxvZ2ZvbnQsICZtX2R3Rm9udCk7Ci0g
ICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgSFJFU1VMVCBociA9IDo6R2V0T2JqZWN0KGZvbnQsIHNpemVvZihMT0dGT05UKSwgJmxvZ2Zv
bnQpOworICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICBtX2R3Rm9udCA9IERpcmVjdFdy
aXRlOjpjcmVhdGVXaXRoUGxhdGZvcm1Gb250KGxvZ2ZvbnQpOworICAgIFJFTEVBU0VfQVNTRVJU
KG1fZHdGb250KTsKIAogICAgIGhyID0gbV9kd0ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZtX2R3Rm9u
dEZhY2UpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOworICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgaWYgKCFtX3VzZUdESSkKICAgICAg
ICAgbV9pc1N5c3RlbUZvbnQgPSAhd2NzY21wKGZhY2VOYW1lLCBMIkx1Y2lkYSBHcmFuZGUiKTsK
IH0KIAotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+
IGhmb250LCBJRFdyaXRlRm9udCogZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9i
bGlxdWUsIGJvb2wgdXNlR0RJKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShH
RElPYmplY3Q8SEZPTlQ+JiYgaGZvbnQsIElEV3JpdGVGb250KiBmb250LCBmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCiAgICAgOiBtX3N5bnRoZXRpY0Jv
bGQoYm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQogICAgICwgbV9zaXpl
KHNpemUpCkBAIC0xMjQsNjcgKzEyMSw0OCBAQCBIUkVTVUxUIEZvbnRQbGF0Zm9ybURhdGE6OmNy
ZWF0ZUZhbGxiYWNrCiAgICAgaWYgKCFkd0ZvbnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CiAKLSAgICBDT01QdHI8SURXcml0ZUZvbnRDb2xsZWN0aW9uPiBmb250Q29sbGVjdGlvbjsKLSAg
ICBIUkVTVUxUIGhyID0gRm9udDo6c3lzdGVtRFdyaXRlRmFjdG9yeSgpLT5HZXRTeXN0ZW1Gb250
Q29sbGVjdGlvbigmZm9udENvbGxlY3Rpb24pOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAg
ICByZXR1cm4gaHI7CisgICAgKmR3Rm9udCA9IERpcmVjdFdyaXRlOjpjcmVhdGVXaXRoUGxhdGZv
cm1Gb250KGxvZ0ZvbnQpLmdldCgpOwogCi0gICAgd2NoYXJfdCBsb2NhbGVOYW1lW0xPQ0FMRV9O
QU1FX01BWF9MRU5HVEhdOwotICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExv
Y2FsZU5hbWUobG9jYWxlTmFtZSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisgICAgcmV0dXJu
IFNfT0s7Cit9CiAKLSAgICBDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHk7CitI
UkVTVUxUIEZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZUZhbGxiYWNrRm9udChIRk9OVCBoZm9udCwg
SURXcml0ZUZvbnQqKiBkd0ZvbnQpCit7CisgICAgaWYgKCFkd0ZvbnQpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CiAKLSAgICB1bnNpZ25lZCBmb250RmFtaWx5Q291bnQgPSBmb250Q29sbGVj
dGlvbi0+R2V0Rm9udEZhbWlseUNvdW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBmb250SW5kZXgg
PSAwOyBmb250SW5kZXggPCBmb250RmFtaWx5Q291bnQ7ICsrZm9udEluZGV4KSB7Ci0gICAgICAg
IGhyID0gZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHkoZm9udEluZGV4LCAmZm9udEZhbWls
eSk7Ci0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIGhyOwotCi0g
ICAgICAgIENPTVB0cjxJRFdyaXRlTG9jYWxpemVkU3RyaW5ncz4gZmFtaWx5TmFtZXM7Ci0gICAg
ICAgIGhyID0gZm9udEZhbWlseS0+R2V0RmFtaWx5TmFtZXMoJmZhbWlseU5hbWVzKTsKLSAgICAg
ICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICAgICAgQk9P
TCBleGlzdHMgPSBmYWxzZTsKLSAgICAgICAgdW5zaWduZWQgbG9jYWxlSW5kZXggPSAwOwotICAg
ICAgICBpZiAobG9jYWxlTGVuZ3RoKQotICAgICAgICAgICAgaHIgPSBmYW1pbHlOYW1lcy0+Rmlu
ZExvY2FsZU5hbWUobG9jYWxlTmFtZSwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKLQotICAgICAg
ICBpZiAoU1VDQ0VFREVEKGhyKSAmJiAhZXhpc3RzKQotICAgICAgICAgICAgaHIgPSBmYW1pbHlO
YW1lcy0+RmluZExvY2FsZU5hbWUoTCJlbi11cyIsICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7Ci0K
LSAgICAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICAg
ICAgdW5zaWduZWQgZmFtaWx5TmFtZUxlbmd0aCA9IDA7Ci0gICAgICAgIGhyID0gZmFtaWx5TmFt
ZXMtPkdldFN0cmluZ0xlbmd0aChsb2NhbGVJbmRleCwgJmZhbWlseU5hbWVMZW5ndGgpOwotICAg
ICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICAg
ICAgVmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWUoZmFtaWx5TmFtZUxlbmd0aCArIDEpOwotICAg
ICAgICBociA9IGZhbWlseU5hbWVzLT5HZXRTdHJpbmcobG9jYWxlSW5kZXgsIGZhbWlseU5hbWUu
ZGF0YSgpLCBmYW1pbHlOYW1lLnNpemUoKSk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
LSAgICAgICAgICAgIHJldHVybiBocjsKKyAgICBDT01QdHI8SURXcml0ZUZvbnRDb2xsZWN0aW9u
PiBmb250Q29sbGVjdGlvbjsKKyAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmZhY3Rvcnko
KS0+R2V0U3lzdGVtRm9udENvbGxlY3Rpb24oJmZvbnRDb2xsZWN0aW9uKTsKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOwogCi0gICAgICAgIGlmICghd2NzY21wKGxvZ0Zv
bnQubGZGYWNlTmFtZSwgZmFtaWx5TmFtZS5kYXRhKCkpKQotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgSFduZERDIGhkYygwKTsKKyAgICBIR0RJT0JKIG9sZEZvbnQgPSA6OlNlbGVjdE9iamVjdCho
ZGMsIGhmb250KTsKIAotICAgICAgICBmb250RmFtaWx5ID0gbnVsbHB0cjsKKyAgICBDT01QdHI8
SURXcml0ZUZvbnRGYWNlPiBmb250RmFjZTsKKyAgICBociA9IERpcmVjdFdyaXRlOjpnZGlJbnRl
cm9wKCktPkNyZWF0ZUZvbnRGYWNlRnJvbUhkYyhoZGMsICZmb250RmFjZSk7CisgICAgaWYgKEZB
SUxFRChocikpIHsKKyAgICAgICAgOjpTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICAg
ICAgcmV0dXJuIGhyOwogICAgIH0KIAotICAgIGlmICghZm9udEZhbWlseSkgewotICAgICAgICBo
ciA9IGZvbnRDb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5KDAsICZmb250RmFtaWx5KTsKLSAgICAg
ICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgICAgICByZXR1cm4gaHI7CisgICAgTE9HRk9OVCBn
ZGlCYXNlZEZvbnQgPSB7IH07CisgICAgaHIgPSBEaXJlY3RXcml0ZTo6Z2RpSW50ZXJvcCgpLT5D
b252ZXJ0Rm9udEZhY2VUb0xPR0ZPTlQoZm9udEZhY2UuZ2V0KCksICZnZGlCYXNlZEZvbnQpOwor
ICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIDo6U2VsZWN0T2JqZWN0KGhkYywgb2xkRm9u
dCk7CisgICAgICAgIHJldHVybiBocjsKICAgICB9CiAKLSAgICBEV1JJVEVfRk9OVF9XRUlHSFQg
d2VpZ2h0ID0gc3RhdGljX2Nhc3Q8RFdSSVRFX0ZPTlRfV0VJR0hUPihsb2dGb250LmxmV2VpZ2h0
KTsKLSAgICBEV1JJVEVfRk9OVF9TVFJFVENIIHN0cmV0Y2ggPSBzdGF0aWNfY2FzdDxEV1JJVEVf
Rk9OVF9TVFJFVENIPihsb2dGb250LmxmUXVhbGl0eSk7Ci0gICAgRFdSSVRFX0ZPTlRfU1RZTEUg
c3R5bGUgPSBsb2dGb250LmxmSXRhbGljID8gRFdSSVRFX0ZPTlRfU1RZTEVfSVRBTElDIDogRFdS
SVRFX0ZPTlRfU1RZTEVfTk9STUFMOworICAgIGhyID0gZm9udENvbGxlY3Rpb24tPkdldEZvbnRG
cm9tRm9udEZhY2UoZm9udEZhY2UuZ2V0KCksIGR3Rm9udCk7CisKKyAgICBpZiAoIVNVQ0NFRURF
RChocikpCisgICAgICAgIGhyID0gRGlyZWN0V3JpdGU6OndlYlByb2Nlc3NGb250Q29sbGVjdGlv
bigpLT5HZXRGb250RnJvbUZvbnRGYWNlKGZvbnRGYWNlLmdldCgpLCBkd0ZvbnQpOwogCi0gICAg
aHIgPSBmb250RmFtaWx5LT5HZXRGaXJzdE1hdGNoaW5nRm9udCh3ZWlnaHQsIHN0cmV0Y2gsIHN0
eWxlLCBkd0ZvbnQpOworICAgIDo6U2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CisgICAgaWYg
KFNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBocjsKIAotICAgIHJldHVybiBocjsKKyAg
ICByZXR1cm4gY3JlYXRlRmFsbGJhY2tGb250KGdkaUJhc2VkRm9udCwgZHdGb250KTsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKICNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZHdyaXRlLmg+CisjaW5j
bHVkZSA8ZHdyaXRlXzMuaD4KICNlbmRpZgogCiB1c2luZyBzdGQ6Om1pbjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTAgQEAKIAogI2lmIFVTRShESVJFQ1Qy
RCkKIAorI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIlRleHRBbmFseXplckhlbHBlci5oIgotI2luY2x1ZGUgPGR3cml0ZS5oPgor
I2luY2x1ZGUgPGR3cml0ZV8zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDMsNyAr
NDQsNyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpCiAgICAgYm9v
bCBoYXZlR2x5cGhzID0gZmFsc2U7CiAKICAgICBDT01QdHI8SURXcml0ZVRleHRBbmFseXplcj4g
YW5hbHl6ZXI7Ci0gICAgSFJFU1VMVCBociA9IEZvbnQ6OnN5c3RlbURXcml0ZUZhY3RvcnkoKS0+
Q3JlYXRlVGV4dEFuYWx5emVyKCZhbmFseXplcik7CisgICAgSFJFU1VMVCBociA9IERpcmVjdFdy
aXRlOjpmYWN0b3J5KCktPkNyZWF0ZVRleHRBbmFseXplcigmYW5hbHl6ZXIpOwogICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgYXV0byYgZm9udFBsYXRmb3JtRGF0YSA9
IGZvbnQucGxhdGZvcm1EYXRhKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5j
cHAJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgogI2luY2x1ZGUg
PGQyZDEuaD4KICNpbmNsdWRlIDxkMmQxZWZmZWN0cy5oPgotI2luY2x1ZGUgPGR3cml0ZS5oPgor
I2luY2x1ZGUgPGR3cml0ZV8zLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogCiAjcHJhZ21hIHdh
cm5pbmcgKGRpc2FibGUgOiA0NzU2KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNw
cAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBVU0UoRElSRUNUMkQpCiAKKyNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgog
I2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgpAQCAtMzYsNyArMzcsNyBAQAogI2luY2x1ZGUg
IkhXbmREQy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8Y29tdXRp
bC5oPgotI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPGR3cml0ZV8zLmg+CiAjaW5jbHVk
ZSA8bWxhbmcuaD4KICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CiAjaW5jbHVkZSA8dW5pY29k
ZS91bm9ybS5oPgpAQCAtNDcsMjggKzQ4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1J
RFdyaXRlRmFjdG9yeSogRm9udDo6c3lzdGVtRFdyaXRlRmFjdG9yeSgpCi17Ci0gICAgc3RhdGlj
IElEV3JpdGVGYWN0b3J5KiBkaXJlY3RXcml0ZUZhY3RvcnkgPSBudWxscHRyOwotICAgIGlmICgh
ZGlyZWN0V3JpdGVGYWN0b3J5KSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBEV3JpdGVDcmVhdGVG
YWN0b3J5KERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVELCBfX3V1aWRvZihkaXJlY3RXcml0ZUZh
Y3RvcnkpLCByZWludGVycHJldF9jYXN0PElVbmtub3duKio+KCZkaXJlY3RXcml0ZUZhY3Rvcnkp
KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGRpcmVjdFdyaXRlRmFjdG9yeTsKLX0KLQotSURXcml0ZUdkaUludGVyb3AqIEZvbnQ6
OnN5c3RlbURXcml0ZUdkaUludGVyb3AoKQotewotICAgIHN0YXRpYyBJRFdyaXRlR2RpSW50ZXJv
cCogZGlyZWN0V3JpdGVHZGlJbnRlcm9wID0gbnVsbHB0cjsKLSAgICBpZiAoIWRpcmVjdFdyaXRl
R2RpSW50ZXJvcCkgewotICAgICAgICBIUkVTVUxUIGhyID0gc3lzdGVtRFdyaXRlRmFjdG9yeSgp
LT5HZXRHZGlJbnRlcm9wKCZkaXJlY3RXcml0ZUdkaUludGVyb3ApOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGlyZWN0V3JpdGVH
ZGlJbnRlcm9wOwotfQotCiBzdGF0aWMgVmVjdG9yPFdDSEFSPiBnZXRGYWNlTmFtZShJRFdyaXRl
Rm9udCogZm9udCkKIHsKICAgICBpZiAoIWZvbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJ
KHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAK
ICNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCiAjaWYgVVNFKERJUkVDVDJEKQotI2lu
Y2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPGR3cml0ZV8zLmg+CiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376410</attachid>
            <date>2019-08-15 12:43:01 -0700</date>
            <delta_ts>2019-08-15 12:49:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200771-20190815124252.patch</filename>
            <type>text/plain</type>
            <size>37342</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODcxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE5LTA4LTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIFN1cHBvcnQgd2Vi
IGZvbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDA3NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0MzUwMjkxPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IGNvZGUgcGF0aCBm
b3IgaGFuZGxpbmcgd2ViIGZvbnRzIHVzZXMgJ0FkZEZvbnRNZW1SZXNvdXJjZUV4Jy4gVW5mb3J0
dW5hdGVseSwgdGhpcyBvbmx5IHVwZGF0ZXMgdGhlIGZvbnQgY2FjaGVzIHVzZWQgYnkgR0RJLCBh
bmQgaXMgbm90IGV4cG9zZWQgdG8gRGlyZWN0V3JpdGUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBk
b2VzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDEuIE1vdmVzIHNvbWUgY29kZSBpbnRvIGEgbmV3
IERpcmVjdFdyaXRlVXRpbGl0aWVzIGZpbGUsIHNpbWlsYXIgdG8gaG93IERpcmVjdDJEIGlzIGhh
bmRsZWQsIHNvIHdlCisgICAgICAgICAgIGNhbiBzaGFyZSBjb2RlIGluIG1vcmUgcGxhY2VzLgor
ICAgICAgICAyLiBBZnRlciBhZGRpbmcgdGhlIGZvbnQgdG8gR0RJLCBpdCBhZGRzIHRoZSBmb250
IGluZm9ybWF0aW9uIHRvIHRoZSBEaXJlY3RXcml0ZSBmb250IGNhY2hlLgorICAgICAgICAzLiBB
ZGQgbG9naWMgdG8gY2hlY2sgdGhlIG92ZXJhbGwgc3lzdGVtIERpcmVjdFdyaXRlIGZvbnRzLCBh
cyB3ZWxsIGFzIHRoZSBjdXN0b20gZm9udCBjYWNoZSB1c2VkCisgICAgICAgICAgIGZvciBkb3du
bG9hZGVkIGZvbnRzLgorCisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6IEFkZCBEaXJlY3RX
cml0ZVV0aWxpdGllcy5jcHAKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwOgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcDoKKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09w
ZW5UeXBlVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbmFtZUFuZEFjdGl2YXRl
Rm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tl
bmREaXJlY3QyREltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFja2luZ1N0b3JlQmFja2Vu
ZERpcmVjdDJESW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJl
Y3QyRDo6Y29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlR0RJRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
dXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZUZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpzeXN0ZW1EV3JpdGVGYWN0b3J5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OnN5c3RlbURXcml0ZUdkaUludGVyb3ApOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHA6CisKIDIwMTktMDgtMTUgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIFdpbkNh
aXJvIGJ1aWxkIGZpeCBhZnRlciByMjQ4NzEzLgpJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1GVFcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21h
a2UJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtl
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
bG9hdFBvaW50RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVj
dERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFNpemVEaXJlY3Qy
RC5jcHAKQEAgLTE1MCw2ICsxNTEsNDEgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAogKQogCitpZiAoVVNFX0NGKQorICAgIGxp
c3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICIk
e1dFQkNPUkVfRElSfS9sb2FkZXIvYXJjaGl2ZS9jZiIKKyAgICAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2NmIgorICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vY2Yvd2luIgor
ICAgICkKKworICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBlZGl0aW5n
L1NtYXJ0UmVwbGFjZUNGLmNwcAorCisgICAgICAgIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmUuY3BwCisKKyAgICAgICAgcGxhdGZvcm0vY2YvS2V5ZWREZWNvZGVyQ0YuY3BwCisg
ICAgICAgIHBsYXRmb3JtL2NmL0tleWVkRW5jb2RlckNGLmNwcAorICAgICAgICBwbGF0Zm9ybS9j
Zi9TaGFyZWRCdWZmZXJDRi5jcHAKKworICAgICAgICBwbGF0Zm9ybS9jZi93aW4vQ2VydGlmaWNh
dGVDRldpbi5jcHAKKworICAgICAgICBwbGF0Zm9ybS90ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3Bw
CisgICAgKQorCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCisgICAgICAgIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaAorCisgICAg
ICAgIHBsYXRmb3JtL2NmL3dpbi9DZXJ0aWZpY2F0ZUNGV2luLmgKKyAgICApCisKKyAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUyAke0NPUkVGT1VOREFUSU9OX0xJQlJBUll9KQorICAg
IGxpc3QoQVBQRU5EIFdlYkNvcmVUZXN0U3VwcG9ydF9MSUJSQVJJRVMgJHtDT1JFRk9VTkRBVElP
Tl9MSUJSQVJZfSkKK2Vsc2UgKCkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAg
ICAgICAgcGxhdGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5jcHAKKyAgICApCitlbmRpZiAoKQorCiBs
aXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBhY2Nlc3Np
YmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcldpbi5oCiAKQEAgLTE2MCw2ICsx
OTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0RpcmVjdDJET3BlcmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dDJEVXRpbGl0aWVzLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGls
aXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50LmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgK
QEAgLTIxMyw2ICsyNTAsMTMgQEAgbGlzdChBUFBFTkQgV2ViQ29yZVRlc3RTdXBwb3J0X0xJQlJB
UklFUwogICAgIHNobHdhcGkKICkKIAorbWFrZV9kaXJlY3RvcnkoJHtDTUFLRV9SVU5USU1FX09V
VFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMvZW4ubHByb2opCitmaWxlKENPUFkKKyAg
ICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncyIKKyAgICAiJHtX
RUJDT1JFX0RJUn0vZW4ubHByb2ovbWVkaWFDb250cm9sc0xvY2FsaXplZFN0cmluZ3MuanMiCisg
ICAgREVTVElOQVRJT04KKyAgICAke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2Vi
S2l0LnJlc291cmNlcy9lbi5scHJvagorKQogZmlsZShDT1BZCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzQXBwbGUuY3NzIgogICAgICIke1dF
QkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCShyZXZpc2lvbiAy
NDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxMCArNDgsNiBAQAogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5o
IgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZHdyaXRlLmg+Ci0jZW5k
aWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBpbmxpbmUgdm9pZCBDU1NGb250RmFjZVNvdXJj
ZTo6c2V0U3RhdHVzKFN0YXR1cyBuZXdTdGF0dXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEw
ICszOSw2IEBACiAjaW5jbHVkZSAiV09GRkZpbGVGb3JtYXQuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZHdyaXRlLmg+Ci0jZW5kaWYK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNoZWRGb250OjpDYWNoZWRGb250KENhY2hlZFJl
c291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQs
IGNvbnN0IENvb2tpZUphciogY29va2llSmFyLCBUeXBlIHR5cGUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuY3BwCShyZXZpc2lvbiAyNDg0NDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDEwICs0MCw2IEBACiAjaW5jbHVkZSAiVHlwZWRFbGVtZW50RGVzY2Vu
ZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiU1ZHVG9PVEZGb250Q29udmVyc2lvbi5oIgogCi0j
aWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGR3cml0ZS5oPgotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQ2FjaGVkU1ZHRm9udDo6Q2FjaGVkU1ZHRm9udChDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25z
dCBDb29raWVKYXIqIGNvb2tpZUphcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDYgQEAK
ICNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgogI2VuZGlmCiAKLSNpZiBVU0UoRElS
RUNUMkQpCi0jaW5jbHVkZSA8ZHdyaXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1bnNpZ25lZCBHbHlwaFBhZ2U6OnNfY291bnQgPSAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1
MSw3IEBACiAjZW5kaWYKIAogI2lmIFVTRShESVJFQ1QyRCkKLWludGVyZmFjZSBJRFdyaXRlRmFj
dG9yeTsKK2ludGVyZmFjZSBJRFdyaXRlRmFjdG9yeTU7CiBpbnRlcmZhY2UgSURXcml0ZUdkaUlu
dGVyb3A7CiAjZW5kaWYKIApAQCAtMjE5LDExICsyMTksNiBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGZsb2F0IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0
IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7CiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSURXcml0ZUZhY3RvcnkqIHN5c3RlbURXcml0ZUZhY3Rv
cnkoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSURXcml0ZUdkaUludGVyb3AqIHN5c3Rl
bURXcml0ZUdkaUludGVyb3AoKTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAgIEZvbnQoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYsIE9yaWdpbiwgSW50ZXJzdGl0aWFsLCBWaXNpYmlsaXR5LCBPcmll
bnRhdGlvbkZhbGxiYWNrKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuY3BwCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MCArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAot
I2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkd3JpdGUuaD4KLSNlbmRpZgotCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWN1cnNpdmVMb2NrQWRhcHRlci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDI0ODQ0NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsNiBAQAogI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0ZvbnQuaD4KICNlbmRpZgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGR3cml0
ZS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0
YS5oCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgaW50
ZXJmYWNlIElEV3JpdGVGb250RmFjZTsKICNlbmRpZgogCiAjaWYgVVNFKERJUkVDVDJEKQotI2lu
Y2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPGR3cml0ZV8zLmg+CiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oV0lOKSAmJiBVU0UoRElSRUNUMkQpCi0gICAgRm9udFBsYXRmb3JtRGF0YShHRElP
YmplY3Q8SEZPTlQ+LCBJRFdyaXRlRm9udCosIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9s
ZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CisgICAgRm9udFBsYXRmb3Jt
RGF0YShHRElPYmplY3Q8SEZPTlQ+JiYsIElEV3JpdGVGb250KiwgZmxvYXQgc2l6ZSwgYm9vbCBz
eW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0FJUk8pCkBAIC0xNDUsNiArMTQ1LDcgQEAg
cHVibGljOgogICAgIElEV3JpdGVGb250RmFjZSogZHdGb250RmFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHdGb250RmFjZS5nZXQoKTsgfQogCiAgICAgc3RhdGljIEhSRVNVTFQgY3JlYXRlRmFsbGJh
Y2tGb250KGNvbnN0IExPR0ZPTlQmLCBJRFdyaXRlRm9udCoqKTsKKyAgICBzdGF0aWMgSFJFU1VM
VCBjcmVhdGVGYWxsYmFja0ZvbnQoSEZPTlQsIElEV3JpdGVGb250KiopOwogI2VuZGlmCiAKICAg
ICBib29sIGlzRml4ZWRQaXRjaCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0
aWVzLmNwcAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKKyNpZiBVU0UoRElS
RUNUMkQpCisjaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxkd3Jp
dGVfMy5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEJpZ0VuZGlh
blVTaG9ydCB7IApAQCAtNDIzLDYgKzQyOCwxMSBAQCBIQU5ETEUgcmVuYW1lQW5kQWN0aXZhdGVG
b250KGNvbnN0IFNoYXJlCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAorI2lmIFVTRShESVJF
Q1QyRCkKKyAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmFkZEZvbnRGcm9tRGF0YVRvUHJv
Y2Vzc0NvbGxlY3Rpb24ocmV3cml0dGVuRm9udERhdGEpOworICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIGZvbnRIYW5kbGU7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0
MkRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAJKHJldmlzaW9uIDI0ODQ0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVC
YWNrZW5kRGlyZWN0MkRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMjMgKzYwLDMxIEBA
IEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGw6On5CYWNraW4KIAogdm9pZCBCYWNraW5n
U3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVj
dCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQogewotICAgIEludFJlY3QgdGFyZ2V0UmVj
dCA9IHNjcm9sbFJlY3Q7Ci0gICAgdGFyZ2V0UmVjdC5tb3ZlKHNjcm9sbE9mZnNldCk7Ci0gICAg
dGFyZ2V0UmVjdC5zaGlmdE1heFhFZGdlVG8odGFyZ2V0UmVjdC5tYXhYKCkgLSBzY3JvbGxPZmZz
ZXQud2lkdGgoKSk7Ci0gICAgdGFyZ2V0UmVjdC5zaGlmdE1heFlFZGdlVG8odGFyZ2V0UmVjdC5t
YXhZKCkgLSBzY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOwotICAgIGlmICh0YXJnZXRSZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCFtX3Njcm9sbFN1cmZhY2UpIHsKICAg
ICAgICAgYXV0byBmbG9hdFNpemUgPSBEaXJlY3QyRDo6Yml0bWFwU2l6ZShtX3N1cmZhY2UuZ2V0
KCkpOwogICAgICAgICBJbnRTaXplIHNpemUoZmxvYXRTaXplLndpZHRoKCksIGZsb2F0U2l6ZS5o
ZWlnaHQoKSk7CiAgICAgICAgIGF1dG8gc2NhbGUgPSBEaXJlY3QyRDo6Yml0bWFwUmVzb2x1dGlv
bihtX3N1cmZhY2UuZ2V0KCkpOwogICAgICAgICBBU1NFUlQoc2NhbGUueCgpID09IHNjYWxlLnko
KSk7CisgICAgICAgIHNpemUuc2NhbGUoMS4wIC8gc2NhbGUueCgpLCAxLjAgLyBzY2FsZS55KCkp
OwogICAgICAgICBtX3Njcm9sbFN1cmZhY2UgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKG1fcmVu
ZGVyVGFyZ2V0LmdldCgpLCBzaXplKTsKICAgICB9CiAKLSAgICBEaXJlY3QyRDo6Y29weVJlY3RG
cm9tT25lU3VyZmFjZVRvQW5vdGhlcihtX3N1cmZhY2UuZ2V0KCksIG1fc2Nyb2xsU3VyZmFjZS5n
ZXQoKSwgc2Nyb2xsT2Zmc2V0LCB0YXJnZXRSZWN0KTsKLSAgICBEaXJlY3QyRDo6Y29weVJlY3RG
cm9tT25lU3VyZmFjZVRvQW5vdGhlcihtX3Njcm9sbFN1cmZhY2UuZ2V0KCksIG1fc3VyZmFjZS5n
ZXQoKSwgSW50U2l6ZSgpLCB0YXJnZXRSZWN0KTsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBz
Y3JvbGxSZWN0OworICAgIHNvdXJjZVJlY3QubW92ZSgtc2Nyb2xsT2Zmc2V0KTsKKyAgICBpZiAo
c291cmNlUmVjdC54KCkgPCAwKQorICAgICAgICBzb3VyY2VSZWN0LnNldFgoMCk7CisgICAgaWYg
KHNvdXJjZVJlY3QueSgpIDwgMCkKKyAgICAgICAgc291cmNlUmVjdC5zZXRZKDApOworCisgICAg
RGlyZWN0MkQ6OmNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIobV9zdXJmYWNlLmdldCgp
LCBtX3Njcm9sbFN1cmZhY2UuZ2V0KCksIHNjcm9sbE9mZnNldCwgc291cmNlUmVjdCk7CisKKyAg
ICBJbnRTaXplIGRlc3RQb3NpdGlvbjsKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LndpZHRoKCkgPiAw
IHx8IHNjcm9sbE9mZnNldC5oZWlnaHQoKSA+IDApIHsKKyAgICAgICAgZGVzdFBvc2l0aW9uLnNl
dFdpZHRoKHNjcm9sbE9mZnNldC53aWR0aCgpKTsKKyAgICAgICAgZGVzdFBvc2l0aW9uLnNldEhl
aWdodChzY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOworICAgIH0KKworICAgIERpcmVjdDJEOjpjb3B5
UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKG1fc2Nyb2xsU3VyZmFjZS5nZXQoKSwgbV9zdXJm
YWNlLmdldCgpLCBJbnRTaXplKCksIHNjcm9sbFJlY3QsIGRlc3RQb3NpdGlvbik7CiAKICAgICBt
X3Njcm9sbGVkSHlzdGVyZXNpcy5pbXB1bHNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5n
U3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJ
bXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAgaW50ZXJmYWNlIElXSUNCaXRt
YXA7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW50U2l6ZTsKKwogY2xhc3MgQmFj
a2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbCBmaW5hbCA6IHB1YmxpYyBCYWNraW5nU3RvcmVC
YWNrZW5kRGlyZWN0MkQgewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEJhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyREltcGwoY29uc3QgSW50U2l6ZSYsIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3Qy
RFV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MLgogICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0
ZW1zCiAgKgpAQCAtMTczLDggKzE3NCwxMCBAQCBDT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4g
Y3JlYXRlR0RJUmVuCiAKIHZvaWQgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihJRDJE
MUJpdG1hcCogZnJvbSwgSUQyRDFCaXRtYXAqIHRvLCBjb25zdCBJbnRTaXplJiBzb3VyY2VPZmZz
ZXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQpCiB7Ci0g
ICAgYXV0byBvZmZzZXQgPSBEMkQxOjpQb2ludDJVKCk7Ci0gICAgYXV0byBzb3VyY2VSZWN0ID0g
RDJEMTo6UmVjdFUoc291cmNlT2Zmc2V0LndpZHRoKCksIC1zb3VyY2VPZmZzZXQuaGVpZ2h0KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgYXV0byBvZmZzZXQgPSBEMkQxOjpQ
b2ludDJVKGRlc3RPZmZzZXQud2lkdGgoKSwgZGVzdE9mZnNldC5oZWlnaHQoKSk7CisKKyAgICBE
MkQxX1JFQ1RfVSBzb3VyY2VSZWN0ID0gcmVjdDsKKwogICAgIEhSRVNVTFQgaHIgPSB0by0+Q29w
eUZyb21CaXRtYXAoJm9mZnNldCwgZnJvbSwgJnNvdXJjZVJlY3QpOwogICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVV
dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5oIgorCisjaWYgVVNFKERJUkVDVDJEKQor
CisjaW5jbHVkZSAiQ09NUHRyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVk
ZSA8ZHdyaXRlXzMuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBEaXJl
Y3RXcml0ZSB7CisKK0lEV3JpdGVGYWN0b3J5NSogZmFjdG9yeSgpCit7CisgICAgc3RhdGljIElE
V3JpdGVGYWN0b3J5NSogZGlyZWN0V3JpdGVGYWN0b3J5ID0gbnVsbHB0cjsKKyAgICBpZiAoIWRp
cmVjdFdyaXRlRmFjdG9yeSkgeworICAgICAgICBIUkVTVUxUIGhyID0gRFdyaXRlQ3JlYXRlRmFj
dG9yeShEV1JJVEVfRkFDVE9SWV9UWVBFX1NIQVJFRCwgX191dWlkb2YoZGlyZWN0V3JpdGVGYWN0
b3J5KSwgcmVpbnRlcnByZXRfY2FzdDxJVW5rbm93bioqPigmZGlyZWN0V3JpdGVGYWN0b3J5KSk7
CisgICAgICAgIGRpcmVjdFdyaXRlRmFjdG9yeS0+QWRkUmVmKCk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KKworICAgIHJldHVybiBkaXJlY3RXcml0ZUZh
Y3Rvcnk7Cit9CisKK0lEV3JpdGVHZGlJbnRlcm9wKiBnZGlJbnRlcm9wKCkKK3sKKyAgICBzdGF0
aWMgSURXcml0ZUdkaUludGVyb3AqIGRpcmVjdFdyaXRlR2RpSW50ZXJvcCA9IG51bGxwdHI7Cisg
ICAgaWYgKCFkaXJlY3RXcml0ZUdkaUludGVyb3ApIHsKKyAgICAgICAgSFJFU1VMVCBociA9IGZh
Y3RvcnkoKS0+R2V0R2RpSW50ZXJvcCgmZGlyZWN0V3JpdGVHZGlJbnRlcm9wKTsKKyAgICAgICAg
ZGlyZWN0V3JpdGVHZGlJbnRlcm9wLT5BZGRSZWYoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CisgICAgfQorCisgICAgcmV0dXJuIGRpcmVjdFdyaXRlR2RpSW50ZXJv
cDsKK30KKworc3RhdGljIElEV3JpdGVJbk1lbW9yeUZvbnRGaWxlTG9hZGVyKiBtZW1vcnlGb250
TG9hZGVyKCkKK3sKKyAgICBzdGF0aWMgSURXcml0ZUluTWVtb3J5Rm9udEZpbGVMb2FkZXIqIG1l
bW9yeUZvbnRMb2FkZXIgPSBudWxscHRyOworICAgIGlmICghbWVtb3J5Rm9udExvYWRlcikgewor
ICAgICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5DcmVhdGVJbk1lbW9yeUZvbnRGaWxlTG9h
ZGVyKCZtZW1vcnlGb250TG9hZGVyKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CisgICAgICAgIG1lbW9yeUZvbnRMb2FkZXItPkFkZFJlZigpOworCisgICAgICAgIGhy
ID0gZmFjdG9yeSgpLT5SZWdpc3RlckZvbnRGaWxlTG9hZGVyKG1lbW9yeUZvbnRMb2FkZXIpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbWVtb3J5Rm9udExvYWRlcjsKK30KKworc3RhdGljIElEV3JpdGVGb250U2V0QnVpbGRlcjEq
IGZvbnRTZXRCdWlsZGVyKCkKK3sKKyAgICBzdGF0aWMgSURXcml0ZUZvbnRTZXRCdWlsZGVyMSog
Zm9udFNldEJ1aWxkZXIgPSBudWxscHRyOworICAgIGlmICghZm9udFNldEJ1aWxkZXIpIHsKKyAg
ICAgICAgSFJFU1VMVCBociA9IGZhY3RvcnkoKS0+Q3JlYXRlRm9udFNldEJ1aWxkZXIoJmZvbnRT
ZXRCdWlsZGVyKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAg
ICAgIGZvbnRTZXRCdWlsZGVyLT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZm9udFNl
dEJ1aWxkZXI7Cit9CisKK3N0YXRpYyBDT01QdHI8SURXcml0ZUZvbnRTZXQ+IGZvbnRTZXQ7Citz
dGF0aWMgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+IGZvbnRDb2xsZWN0aW9uOworc3Rh
dGljIFVJTlQzMiBmb250Q291bnQgPSAwOworCitJRFdyaXRlRm9udENvbGxlY3Rpb24xKiB3ZWJQ
cm9jZXNzRm9udENvbGxlY3Rpb24oKQoreworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAg
aWYgKCFmb250U2V0KSB7CisgICAgICAgIGhyID0gZm9udFNldEJ1aWxkZXIoKS0+Q3JlYXRlRm9u
dFNldCgmZm9udFNldCk7CisgICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIGZvbnRDb2xsZWN0aW9uID0gbnVsbHB0cjsKKyAg
ICAgICAgaHIgPSBmYWN0b3J5KCktPkNyZWF0ZUZvbnRDb2xsZWN0aW9uRnJvbUZvbnRTZXQoZm9u
dFNldC5nZXQoKSwgJmZvbnRDb2xsZWN0aW9uKTsKKyAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgQVNTRVJUKGZvbnRDb2xs
ZWN0aW9uLT5HZXRGb250RmFtaWx5Q291bnQoKSA9PSBmb250Q291bnQpOworICAgIH0KKworICAg
IHJldHVybiBmb250Q29sbGVjdGlvbi5nZXQoKTsKK30KKworSFJFU1VMVCBhZGRGb250RnJvbURh
dGFUb1Byb2Nlc3NDb2xsZWN0aW9uKGNvbnN0IFZlY3RvcjxjaGFyPiYgZm9udERhdGEpCit7Cisg
ICAgQ09NUHRyPElEV3JpdGVGb250RmlsZT4gZm9udEZpbGU7CisgICAgSFJFU1VMVCBociA9IG1l
bW9yeUZvbnRMb2FkZXIoKS0+Q3JlYXRlSW5NZW1vcnlGb250RmlsZVJlZmVyZW5jZShmYWN0b3J5
KCksIGZvbnREYXRhLmRhdGEoKSwgZm9udERhdGEuc2l6ZSgpLCBudWxscHRyLCAmZm9udEZpbGUp
OworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIg
PSBmb250U2V0QnVpbGRlcigpLT5BZGRGb250RmlsZShmb250RmlsZS5nZXQoKSk7CisgICAgaWYg
KCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBmb250U2V0ID0gbnVs
bHB0cjsKKyAgICArK2ZvbnRDb3VudDsKKworICAgIHJldHVybiBocjsKK30KKworVmVjdG9yPHdj
aGFyX3Q+IGZhbWlseU5hbWVGb3JMb2NhbGUoSURXcml0ZUZvbnRGYW1pbHkqIGZvbnRGYW1pbHks
IGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFtZSkKK3sKKyAgICBDT01QdHI8SURXcml0
ZUxvY2FsaXplZFN0cmluZ3M+IGZhbWlseU5hbWVzOworICAgIEhSRVNVTFQgaHIgPSBmb250RmFt
aWx5LT5HZXRGYW1pbHlOYW1lcygmZmFtaWx5TmFtZXMpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgQk9PTCBleGlzdHMgPSBmYWxzZTsKKyAgICB1bnNp
Z25lZCBsb2NhbGVJbmRleCA9IDA7CisgICAgaWYgKCFsb2NhbGVOYW1lLmlzRW1wdHkoKSkKKyAg
ICAgICAgaHIgPSBmYW1pbHlOYW1lcy0+RmluZExvY2FsZU5hbWUobG9jYWxlTmFtZS5kYXRhKCks
ICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7CisKKyAgICBpZiAoU1VDQ0VFREVEKGhyKSAmJiAhZXhp
c3RzKQorICAgICAgICBociA9IGZhbWlseU5hbWVzLT5GaW5kTG9jYWxlTmFtZShMImVuLXVzIiwg
JmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgdW5zaWduZWQgZmFtaWx5TmFtZUxlbmd0aCA9IDA7CisgICAgaHIg
PSBmYW1pbHlOYW1lcy0+R2V0U3RyaW5nTGVuZ3RoKGxvY2FsZUluZGV4LCAmZmFtaWx5TmFtZUxl
bmd0aCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgVmVjdG9yPHdjaGFyX3Q+IGZhbWlseU5hbWUoZmFtaWx5TmFtZUxlbmd0aCArIDEpOworICAg
IGhyID0gZmFtaWx5TmFtZXMtPkdldFN0cmluZyhsb2NhbGVJbmRleCwgZmFtaWx5TmFtZS5kYXRh
KCksIGZhbWlseU5hbWUuc2l6ZSgpKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4gZmFtaWx5TmFtZTsKK30KKworQ09NUHRyPElEV3Jp
dGVGb250RmFtaWx5PiBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbihJRFdyaXRlRm9udENvbGxlY3Rp
b24qIGZvbnRDb2xsZWN0aW9uLCBjb25zdCBWZWN0b3I8d2NoYXJfdD4mIGxvY2FsZU5hbWUsIGNv
bnN0IExPR0ZPTlQmIGxvZ0ZvbnQpCit7CisgICAgQ09NUHRyPElEV3JpdGVGb250RmFtaWx5PiBm
b250RmFtaWx5OworCisgICAgdW5zaWduZWQgZm9udEZhbWlseUNvdW50ID0gZm9udENvbGxlY3Rp
b24tPkdldEZvbnRGYW1pbHlDb3VudCgpOworICAgIGZvciAodW5zaWduZWQgZm9udEluZGV4ID0g
MDsgZm9udEluZGV4IDwgZm9udEZhbWlseUNvdW50OyArK2ZvbnRJbmRleCkgeworICAgICAgICBI
UkVTVUxUIGhyID0gZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHkoZm9udEluZGV4LCAmZm9u
dEZhbWlseSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgYXV0byBmYW1pbHlOYW1lID0gZmFtaWx5TmFtZUZvckxvY2FsZShm
b250RmFtaWx5LmdldCgpLCBsb2NhbGVOYW1lKTsKKworICAgICAgICBpZiAoIXdjc2NtcChsb2dG
b250LmxmRmFjZU5hbWUsIGZhbWlseU5hbWUuZGF0YSgpKSkKKyAgICAgICAgICAgIHJldHVybiBm
b250RmFtaWx5OworCisgICAgICAgIGZvbnRGYW1pbHkgPSBudWxscHRyOworICAgIH0KKworICAg
IHJldHVybiBudWxscHRyOworfQorCitDT01QdHI8SURXcml0ZUZvbnQ+IGNyZWF0ZVdpdGhQbGF0
Zm9ybUZvbnQoY29uc3QgTE9HRk9OVCYgbG9nRm9udCkKK3sKKyAgICBDT01QdHI8SURXcml0ZUZv
bnRDb2xsZWN0aW9uPiBzeXN0ZW1Gb250Q29sbGVjdGlvbjsKKyAgICBIUkVTVUxUIGhyID0gZmFj
dG9yeSgpLT5HZXRTeXN0ZW1Gb250Q29sbGVjdGlvbigmc3lzdGVtRm9udENvbGxlY3Rpb24pOwor
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFZlY3Rv
cjx3Y2hhcl90PiBsb2NhbGVOYW1lKExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOworICAgIGludCBs
b2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUobG9jYWxlTmFtZS5kYXRhKCks
IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOworCisgICAgQ09NUHRyPElEV3JpdGVGb250RmFtaWx5
PiBmb250RmFtaWx5ID0gZm9udEZhbWlseUZvckNvbGxlY3Rpb24oc3lzdGVtRm9udENvbGxlY3Rp
b24uZ2V0KCksIGxvY2FsZU5hbWUsIGxvZ0ZvbnQpOworICAgIGlmICghZm9udEZhbWlseSkKKyAg
ICAgICAgZm9udEZhbWlseSA9IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9uKHdlYlByb2Nlc3NGb250
Q29sbGVjdGlvbigpLCBsb2NhbGVOYW1lLCBsb2dGb250KTsKKworICAgIGlmICghZm9udEZhbWls
eSkgeworICAgICAgICAvLyBKdXN0IHJldHVybiB0aGUgZmlyc3Qgc3lzdGVtIGZvbnQuCisgICAg
ICAgIGhyID0gc3lzdGVtRm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHkoMCwgJmZvbnRGYW1p
bHkpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisjaWZuZGVmIE5ERUJVRworICAgICAgICBhdXRvIGZhbWlseU5hbWUgPSBmYW1pbHlOYW1l
Rm9yTG9jYWxlKGZvbnRGYW1pbHkuZ2V0KCksIGxvY2FsZU5hbWUpOworICAgICAgICBVTlVTRURf
VkFSSUFCTEUoZmFtaWx5TmFtZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBEV1JJVEVfRk9OVF9X
RUlHSFQgd2VpZ2h0ID0gc3RhdGljX2Nhc3Q8RFdSSVRFX0ZPTlRfV0VJR0hUPihsb2dGb250Lmxm
V2VpZ2h0KTsKKyAgICBEV1JJVEVfRk9OVF9TVFJFVENIIHN0cmV0Y2ggPSBzdGF0aWNfY2FzdDxE
V1JJVEVfRk9OVF9TVFJFVENIPihsb2dGb250LmxmUXVhbGl0eSk7CisgICAgRFdSSVRFX0ZPTlRf
U1RZTEUgc3R5bGUgPSBsb2dGb250LmxmSXRhbGljID8gRFdSSVRFX0ZPTlRfU1RZTEVfSVRBTElD
IDogRFdSSVRFX0ZPTlRfU1RZTEVfTk9STUFMOworCisgICAgQ09NUHRyPElEV3JpdGVGb250PiBk
d0ZvbnQ7CisgICAgaHIgPSBmb250RmFtaWx5LT5HZXRGaXJzdE1hdGNoaW5nRm9udCh3ZWlnaHQs
IHN0cmV0Y2gsIHN0eWxlLCAmZHdGb250KTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisK
KyAgICByZXR1cm4gZHdGb250OworfQorCit9IC8vIG5hbWVzcGFjZSBEaXJlY3RXcml0ZQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0V3JpdGVVdGlsaXRpZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiQ09N
UHRyLmgiCisKK2ludGVyZmFjZSBJRFdyaXRlRmFjdG9yeTU7CitpbnRlcmZhY2UgSURXcml0ZUZv
bnQ7CitpbnRlcmZhY2UgSURXcml0ZUZvbnRDb2xsZWN0aW9uOworaW50ZXJmYWNlIElEV3JpdGVG
b250Q29sbGVjdGlvbjE7CitpbnRlcmZhY2UgSURXcml0ZUZvbnRGYW1pbHk7CitpbnRlcmZhY2Ug
SURXcml0ZUdkaUludGVyb3A7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVk
QnVmZmVyOworCituYW1lc3BhY2UgRGlyZWN0V3JpdGUgeworCitJRFdyaXRlRmFjdG9yeTUqIGZh
Y3RvcnkoKTsKK0lEV3JpdGVHZGlJbnRlcm9wKiBnZGlJbnRlcm9wKCk7CisKK0lEV3JpdGVGb250
Q29sbGVjdGlvbjEqIHdlYlByb2Nlc3NGb250Q29sbGVjdGlvbigpOworCitIUkVTVUxUIGFkZEZv
bnRGcm9tRGF0YVRvUHJvY2Vzc0NvbGxlY3Rpb24oY29uc3QgVmVjdG9yPGNoYXI+JiBmb250RGF0
YSk7CitDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9uKElE
V3JpdGVGb250Q29sbGVjdGlvbiosIGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFtZSwg
Y29uc3QgTE9HRk9OVCYpOworQ09NUHRyPElEV3JpdGVGb250PiBjcmVhdGVXaXRoUGxhdGZvcm1G
b250KGNvbnN0IExPR0ZPTlQmKTsKK1ZlY3Rvcjx3Y2hhcl90PiBmYW1pbHlOYW1lRm9yTG9jYWxl
KElEV3JpdGVGb250RmFtaWx5KiwgY29uc3QgVmVjdG9yPHdjaGFyX3Q+JiBsb2NhbGVOYW1lKTsK
KworfSAvLyBuYW1lc3BhY2UgRGlyZWN0V3JpdGUKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHJldmlzaW9uIDI0ODQ0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAjZW5kaWYKIAogI2lmIFVTRShE
SVJFQ1QyRCkKLSNpbmNsdWRlIDxkd3JpdGUuaD4KKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgogI2Vu
ZGlmCiAKIHVzaW5nIHN0ZDo6bWluOwpAQCAtNTA2LDcgKzUwNiw3IEBAIHN0YXRpYyBHRElPYmpl
Y3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY28KICAgICBtYXRjaERhdGEubV9jaG9zZW4ubGZVbmRl
cmxpbmUgPSBmYWxzZTsKICAgICBtYXRjaERhdGEubV9jaG9zZW4ubGZTdHJpa2VPdXQgPSBmYWxz
ZTsKICAgICBtYXRjaERhdGEubV9jaG9zZW4ubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOwot
I2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKSB8fCBV
U0UoRElSRUNUMkQpCiAgICAgbWF0Y2hEYXRhLm1fY2hvc2VuLmxmT3V0UHJlY2lzaW9uID0gT1VU
X1RUX09OTFlfUFJFQ0lTOwogI2Vsc2UKICAgICBtYXRjaERhdGEubV9jaG9zZW4ubGZPdXRQcmVj
aXNpb24gPSBPVVRfVFRfUFJFQ0lTOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAkocmV2
aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDYXNjYWRlRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAj
aW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVu
ZGVyZXIuaCIKICNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8ZHdyaXRlLmg+CisjaW5jbHVk
ZSA8ZHdyaXRlXzMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAy
NDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAKICNlbmRp
ZgogCiAjaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlIDxkd3Jp
dGUuaD4KKyNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5oIgorI2luY2x1ZGUgPGR3cml0
ZV8zLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUsNyArNjUsNyBAQCBG
b250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6CiAgICAgbG9nRm9udC5sZlVu
ZGVybGluZSA9IGZhbHNlOwogICAgIGxvZ0ZvbnQubGZTdHJpa2VPdXQgPSBmYWxzZTsKICAgICBs
b2dGb250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNFVDsKLSNpZiBVU0UoQ0cpIHx8IFVTRShD
QUlSTykKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykgfHwgVVNFKERJUkVDVDJEKQogICAgIGxv
Z0ZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfT05MWV9QUkVDSVM7CiAjZWxzZQogICAgIGxv
Z0ZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfUFJFQ0lTOwpAQCAtNzYsMjAgKzc2LDExIEBA
IEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YToKICAgICBsb2dGb250Lmxm
V2VpZ2h0ID0gYm9sZCA/IDcwMCA6IDQwMDsKIAogICAgIGF1dG8gaGZvbnQgPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmbG9nRm9udCkpOwotCiAjaWYgVVNFKENHKQogICAg
IFJldGFpblB0cjxDR0ZvbnRSZWY+IGNnRm9udCA9IGFkb3B0Q0YoQ0dGb250Q3JlYXRlV2l0aFBs
YXRmb3JtRm9udCgmbG9nRm9udCkpOwogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKFdURk1v
dmUoaGZvbnQpLCBjZ0ZvbnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVyaW5nTW9k
ZSA9PSBGb250UmVuZGVyaW5nTW9kZTo6QWx0ZXJuYXRlKTsKICNlbHNlCi0gICAgQ09NUHRyPElE
V3JpdGVGb250PiBkd0ZvbnQ7Ci0gICAgSFJFU1VMVCBociA9IEZvbnQ6OnN5c3RlbURXcml0ZUdk
aUludGVyb3AoKS0+Q3JlYXRlRm9udEZyb21MT0dGT05UKCZsb2dGb250LCAmZHdGb250KTsKLSAg
ICBpZiAoIVNVQ0NFRURFRChocikpIHsKLSAgICAgICAgTE9HRk9OVCBjdXN0b21Gb250OwotICAg
ICAgICBociA9IDo6R2V0T2JqZWN0KGhmb250LmdldCgpLCBzaXplb2YoTE9HRk9OVCksICZjdXN0
b21Gb250KTsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgICAgICBociA9IEZv
bnRQbGF0Zm9ybURhdGE6OmNyZWF0ZUZhbGxiYWNrRm9udChjdXN0b21Gb250LCAmZHdGb250KTsK
LSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgQ09NUHRyPElE
V3JpdGVGb250PiBkd0ZvbnQgPSBEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udChs
b2dGb250KTsKICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgZHdG
b250LmdldCgpLCBzaXplLCBib2xkLCBpdGFsaWMsIHJlbmRlcmluZ01vZGUgPT0gRm9udFJlbmRl
cmluZ01vZGU6OkFsdGVybmF0ZSk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpZiBVU0UoRElSRUNUMkQpCiAKKyNpbmNsdWRl
ICJEaXJlY3RXcml0ZVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIlNoYXJlZEdESU9iamVjdC5oIgogI2luY2x1
ZGUgPGQyZDEuaD4KLSNpbmNsdWRlIDxkd3JpdGUuaD4KKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksMjQg
KzQxLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxh
dGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBIREMgaGRjLCBXQ0hBUiogZmFj
ZU5hbWUpCiB7CiAgICAgTE9HRk9OVCBsb2dmb250OwotICAgIEdldE9iamVjdChmb250LCBzaXpl
b2YobG9nZm9udCksICZsb2dmb250KTsKLQotICAgIEhSRVNVTFQgaHIgPSBGb250OjpzeXN0ZW1E
V3JpdGVHZGlJbnRlcm9wKCktPkNyZWF0ZUZvbnRGcm9tTE9HRk9OVCgmbG9nZm9udCwgJm1fZHdG
b250KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpIHsKLSAgICAgICAgaHIgPSBGb250UGxhdGZv
cm1EYXRhOjpjcmVhdGVGYWxsYmFja0ZvbnQobG9nZm9udCwgJm1fZHdGb250KTsKLSAgICAgICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBIUkVT
VUxUIGhyID0gOjpHZXRPYmplY3QoZm9udCwgc2l6ZW9mKExPR0ZPTlQpLCAmbG9nZm9udCk7Cisg
ICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgIG1fZHdGb250ID0gRGlyZWN0V3JpdGU6OmNy
ZWF0ZVdpdGhQbGF0Zm9ybUZvbnQobG9nZm9udCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kd0Zv
bnQpOwogCiAgICAgaHIgPSBtX2R3Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47CisgICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKICAgICBpZiAoIW1fdXNlR0RJKQogICAgICAgICBtX2lz
U3lzdGVtRm9udCA9ICF3Y3NjbXAoZmFjZU5hbWUsIEwiTHVjaWRhIEdyYW5kZSIpOwogfQogCi1G
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4gaGZvbnQs
IElEV3JpdGVGb250KiBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwg
Ym9vbCB1c2VHREkpCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVj
dDxIRk9OVD4mJiBoZm9udCwgSURXcml0ZUZvbnQqIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSkKICAgICA6IG1fc3ludGhldGljQm9sZChib2xk
KQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCiAgICAgLCBtX3NpemUoc2l6ZSkK
QEAgLTEyNCw2NyArMTIxLDQ4IEBAIEhSRVNVTFQgRm9udFBsYXRmb3JtRGF0YTo6Y3JlYXRlRmFs
bGJhY2sKICAgICBpZiAoIWR3Rm9udCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAg
IENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24+IGZvbnRDb2xsZWN0aW9uOwotICAgIEhSRVNV
TFQgaHIgPSBGb250OjpzeXN0ZW1EV3JpdGVGYWN0b3J5KCktPkdldFN5c3RlbUZvbnRDb2xsZWN0
aW9uKCZmb250Q29sbGVjdGlvbik7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVy
biBocjsKKyAgICAqZHdGb250ID0gRGlyZWN0V3JpdGU6OmNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQo
bG9nRm9udCkuZ2V0KCk7CiAKLSAgICB3Y2hhcl90IGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFY
X0xFTkdUSF07Ci0gICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVzZXJEZWZhdWx0TG9jYWxlTmFt
ZShsb2NhbGVOYW1lLCBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKKyAgICByZXR1cm4gU19PSzsK
K30KIAotICAgIENPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4gZm9udEZhbWlseTsKK0hSRVNVTFQg
Rm9udFBsYXRmb3JtRGF0YTo6Y3JlYXRlRmFsbGJhY2tGb250KEhGT05UIGhmb250LCBJRFdyaXRl
Rm9udCoqIGR3Rm9udCkKK3sKKyAgICBpZiAoIWR3Rm9udCkKKyAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKIAotICAgIHVuc2lnbmVkIGZvbnRGYW1pbHlDb3VudCA9IGZvbnRDb2xsZWN0aW9uLT5H
ZXRGb250RmFtaWx5Q291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGZvbnRJbmRleCA9IDA7IGZv
bnRJbmRleCA8IGZvbnRGYW1pbHlDb3VudDsgKytmb250SW5kZXgpIHsKLSAgICAgICAgaHIgPSBm
b250Q29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseShmb250SW5kZXgsICZmb250RmFtaWx5KTsKLSAg
ICAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICAgICAg
Q09NUHRyPElEV3JpdGVMb2NhbGl6ZWRTdHJpbmdzPiBmYW1pbHlOYW1lczsKLSAgICAgICAgaHIg
PSBmb250RmFtaWx5LT5HZXRGYW1pbHlOYW1lcygmZmFtaWx5TmFtZXMpOwotICAgICAgICBpZiAo
RkFJTEVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBocjsKLQotICAgICAgICBCT09MIGV4aXN0
cyA9IGZhbHNlOwotICAgICAgICB1bnNpZ25lZCBsb2NhbGVJbmRleCA9IDA7Ci0gICAgICAgIGlm
IChsb2NhbGVMZW5ndGgpCi0gICAgICAgICAgICBociA9IGZhbWlseU5hbWVzLT5GaW5kTG9jYWxl
TmFtZShsb2NhbGVOYW1lLCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOwotCi0gICAgICAgIGlmIChT
VUNDRUVERUQoaHIpICYmICFleGlzdHMpCi0gICAgICAgICAgICBociA9IGZhbWlseU5hbWVzLT5G
aW5kTG9jYWxlTmFtZShMImVuLXVzIiwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKLQotICAgICAg
ICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBocjsKLQotICAgICAgICB1bnNp
Z25lZCBmYW1pbHlOYW1lTGVuZ3RoID0gMDsKLSAgICAgICAgaHIgPSBmYW1pbHlOYW1lcy0+R2V0
U3RyaW5nTGVuZ3RoKGxvY2FsZUluZGV4LCAmZmFtaWx5TmFtZUxlbmd0aCk7Ci0gICAgICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBocjsKLQotICAgICAgICBWZWN0
b3I8d2NoYXJfdD4gZmFtaWx5TmFtZShmYW1pbHlOYW1lTGVuZ3RoICsgMSk7Ci0gICAgICAgIGhy
ID0gZmFtaWx5TmFtZXMtPkdldFN0cmluZyhsb2NhbGVJbmRleCwgZmFtaWx5TmFtZS5kYXRhKCks
IGZhbWlseU5hbWUuc2l6ZSgpKTsKLSAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAg
ICAgICAgcmV0dXJuIGhyOworICAgIENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24+IGZvbnRD
b2xsZWN0aW9uOworICAgIEhSRVNVTFQgaHIgPSBEaXJlY3RXcml0ZTo6ZmFjdG9yeSgpLT5HZXRT
eXN0ZW1Gb250Q29sbGVjdGlvbigmZm9udENvbGxlY3Rpb24pOworICAgIGlmIChGQUlMRUQoaHIp
KQorICAgICAgICByZXR1cm4gaHI7CiAKLSAgICAgICAgaWYgKCF3Y3NjbXAobG9nRm9udC5sZkZh
Y2VOYW1lLCBmYW1pbHlOYW1lLmRhdGEoKSkpCi0gICAgICAgICAgICBicmVhazsKKyAgICBIV25k
REMgaGRjKDApOworICAgIEhHRElPQkogb2xkRm9udCA9IDo6U2VsZWN0T2JqZWN0KGhkYywgaGZv
bnQpOwogCi0gICAgICAgIGZvbnRGYW1pbHkgPSBudWxscHRyOworICAgIENPTVB0cjxJRFdyaXRl
Rm9udEZhY2U+IGZvbnRGYWNlOworICAgIGhyID0gRGlyZWN0V3JpdGU6OmdkaUludGVyb3AoKS0+
Q3JlYXRlRm9udEZhY2VGcm9tSGRjKGhkYywgJmZvbnRGYWNlKTsKKyAgICBpZiAoRkFJTEVEKGhy
KSkgeworICAgICAgICA6OlNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOworICAgICAgICByZXR1
cm4gaHI7CiAgICAgfQogCi0gICAgaWYgKCFmb250RmFtaWx5KSB7Ci0gICAgICAgIGhyID0gZm9u
dENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHkoMCwgJmZvbnRGYW1pbHkpOwotICAgICAgICBpZiAo
RkFJTEVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBocjsKKyAgICBMT0dGT05UIGdkaUJhc2Vk
Rm9udCA9IHsgfTsKKyAgICBociA9IERpcmVjdFdyaXRlOjpnZGlJbnRlcm9wKCktPkNvbnZlcnRG
b250RmFjZVRvTE9HRk9OVChmb250RmFjZS5nZXQoKSwgJmdkaUJhc2VkRm9udCk7CisgICAgaWYg
KEZBSUxFRChocikpIHsKKyAgICAgICAgOjpTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAg
ICAgICAgcmV0dXJuIGhyOwogICAgIH0KIAotICAgIERXUklURV9GT05UX1dFSUdIVCB3ZWlnaHQg
PSBzdGF0aWNfY2FzdDxEV1JJVEVfRk9OVF9XRUlHSFQ+KGxvZ0ZvbnQubGZXZWlnaHQpOwotICAg
IERXUklURV9GT05UX1NUUkVUQ0ggc3RyZXRjaCA9IHN0YXRpY19jYXN0PERXUklURV9GT05UX1NU
UkVUQ0g+KGxvZ0ZvbnQubGZRdWFsaXR5KTsKLSAgICBEV1JJVEVfRk9OVF9TVFlMRSBzdHlsZSA9
IGxvZ0ZvbnQubGZJdGFsaWMgPyBEV1JJVEVfRk9OVF9TVFlMRV9JVEFMSUMgOiBEV1JJVEVfRk9O
VF9TVFlMRV9OT1JNQUw7CisgICAgaHIgPSBmb250Q29sbGVjdGlvbi0+R2V0Rm9udEZyb21Gb250
RmFjZShmb250RmFjZS5nZXQoKSwgZHdGb250KTsKKworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgaHIgPSBEaXJlY3RXcml0ZTo6d2ViUHJvY2Vzc0ZvbnRDb2xsZWN0aW9uKCktPkdl
dEZvbnRGcm9tRm9udEZhY2UoZm9udEZhY2UuZ2V0KCksIGR3Rm9udCk7CiAKLSAgICBociA9IGZv
bnRGYW1pbHktPkdldEZpcnN0TWF0Y2hpbmdGb250KHdlaWdodCwgc3RyZXRjaCwgc3R5bGUsIGR3
Rm9udCk7CisgICAgOjpTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICBpZiAoU1VDQ0VF
REVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOwogCi0gICAgcmV0dXJuIGhyOworICAgIHJldHVy
biBjcmVhdGVGYWxsYmFja0ZvbnQoZ2RpQmFzZWRGb250LCBkd0ZvbnQpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkd3JpdGUuaD4KKyNpbmNsdWRlIDxk
d3JpdGVfMy5oPgogI2VuZGlmCiAKIHVzaW5nIHN0ZDo6bWluOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBh
Z2VUcmVlTm9kZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgVVNFKERJUkVDVDJEKQogCisj
aW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5j
bHVkZSAiVGV4dEFuYWx5emVySGVscGVyLmgiCi0jaW5jbHVkZSA8ZHdyaXRlLmg+CisjaW5jbHVk
ZSA8ZHdyaXRlXzMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0NCw3IEBA
IGJvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2kKICAgICBib29sIGhhdmVH
bHlwaHMgPSBmYWxzZTsKIAogICAgIENPTVB0cjxJRFdyaXRlVGV4dEFuYWx5emVyPiBhbmFseXpl
cjsKLSAgICBIUkVTVUxUIGhyID0gRm9udDo6c3lzdGVtRFdyaXRlRmFjdG9yeSgpLT5DcmVhdGVU
ZXh0QW5hbHl6ZXIoJmFuYWx5emVyKTsKKyAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmZh
Y3RvcnkoKS0+Q3JlYXRlVGV4dEFuYWx5emVyKCZhbmFseXplcik7CiAgICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CiAKICAgICBhdXRvJiBmb250UGxhdGZvcm1EYXRhID0gZm9udC5w
bGF0Zm9ybURhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkocmV2
aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCiAjaW5jbHVkZSA8ZDJkMS5o
PgogI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0jaW5jbHVkZSA8ZHdyaXRlLmg+CisjaW5jbHVk
ZSA8ZHdyaXRlXzMuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAKICNwcmFnbWEgd2FybmluZyAo
ZGlzYWJsZSA6IDQ3NTYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2lt
cGxlRm9udERhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2lmIFVTRShESVJFQ1QyRCkKIAorI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCkBAIC0zNiw3ICszNyw3IEBACiAjaW5jbHVkZSAiSFduZERD
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDxjb211dGlsLmg+Ci0j
aW5jbHVkZSA8ZHdyaXRlLmg+CisjaW5jbHVkZSA8ZHdyaXRlXzMuaD4KICNpbmNsdWRlIDxtbGFu
Zy5oPgogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KICNpbmNsdWRlIDx1bmljb2RlL3Vub3Jt
Lmg+CkBAIC00NywyOCArNDgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEV3JpdGVG
YWN0b3J5KiBGb250OjpzeXN0ZW1EV3JpdGVGYWN0b3J5KCkKLXsKLSAgICBzdGF0aWMgSURXcml0
ZUZhY3RvcnkqIGRpcmVjdFdyaXRlRmFjdG9yeSA9IG51bGxwdHI7Ci0gICAgaWYgKCFkaXJlY3RX
cml0ZUZhY3RvcnkpIHsKLSAgICAgICAgSFJFU1VMVCBociA9IERXcml0ZUNyZWF0ZUZhY3Rvcnko
RFdSSVRFX0ZBQ1RPUllfVFlQRV9TSEFSRUQsIF9fdXVpZG9mKGRpcmVjdFdyaXRlRmFjdG9yeSks
IHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24qKj4oJmRpcmVjdFdyaXRlRmFjdG9yeSkpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZGlyZWN0V3JpdGVGYWN0b3J5OwotfQotCi1JRFdyaXRlR2RpSW50ZXJvcCogRm9udDo6c3lzdGVt
RFdyaXRlR2RpSW50ZXJvcCgpCi17Ci0gICAgc3RhdGljIElEV3JpdGVHZGlJbnRlcm9wKiBkaXJl
Y3RXcml0ZUdkaUludGVyb3AgPSBudWxscHRyOwotICAgIGlmICghZGlyZWN0V3JpdGVHZGlJbnRl
cm9wKSB7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBzeXN0ZW1EV3JpdGVGYWN0b3J5KCktPkdldEdk
aUludGVyb3AoJmRpcmVjdFdyaXRlR2RpSW50ZXJvcCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotICAgIH0KLQotICAgIHJldHVybiBkaXJlY3RXcml0ZUdkaUludGVy
b3A7Ci19Ci0KIHN0YXRpYyBWZWN0b3I8V0NIQVI+IGdldEZhY2VOYW1lKElEV3JpdGVGb250KiBm
b250KQogewogICAgIGlmICghZm9udCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkocmV2aXNp
b24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBs
ZUZvbnREYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1
ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKICNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8
ZHdyaXRlLmg+CisjaW5jbHVkZSA8ZHdyaXRlXzMuaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376411</attachid>
            <date>2019-08-15 12:49:44 -0700</date>
            <delta_ts>2019-08-15 14:49:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200771-20190815124934.patch</filename>
            <type>text/plain</type>
            <size>33941</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODcxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE5LTA4LTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIFN1cHBvcnQgd2Vi
IGZvbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDA3NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0MzUwMjkxPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IGNvZGUgcGF0aCBm
b3IgaGFuZGxpbmcgd2ViIGZvbnRzIHVzZXMgJ0FkZEZvbnRNZW1SZXNvdXJjZUV4Jy4gVW5mb3J0
dW5hdGVseSwgdGhpcyBvbmx5IHVwZGF0ZXMgdGhlIGZvbnQgY2FjaGVzIHVzZWQgYnkgR0RJLCBh
bmQgaXMgbm90IGV4cG9zZWQgdG8gRGlyZWN0V3JpdGUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBk
b2VzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDEuIE1vdmVzIHNvbWUgY29kZSBpbnRvIGEgbmV3
IERpcmVjdFdyaXRlVXRpbGl0aWVzIGZpbGUsIHNpbWlsYXIgdG8gaG93IERpcmVjdDJEIGlzIGhh
bmRsZWQsIHNvIHdlCisgICAgICAgICAgIGNhbiBzaGFyZSBjb2RlIGluIG1vcmUgcGxhY2VzLgor
ICAgICAgICAyLiBBZnRlciBhZGRpbmcgdGhlIGZvbnQgdG8gR0RJLCBpdCBhZGRzIHRoZSBmb250
IGluZm9ybWF0aW9uIHRvIHRoZSBEaXJlY3RXcml0ZSBmb250IGNhY2hlLgorICAgICAgICAzLiBB
ZGQgbG9naWMgdG8gY2hlY2sgdGhlIG92ZXJhbGwgc3lzdGVtIERpcmVjdFdyaXRlIGZvbnRzLCBh
cyB3ZWxsIGFzIHRoZSBjdXN0b20gZm9udCBjYWNoZSB1c2VkCisgICAgICAgICAgIGZvciBkb3du
bG9hZGVkIGZvbnRzLgorCisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6IEFkZCBEaXJlY3RX
cml0ZVV0aWxpdGllcy5jcHAKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwOgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcDoKKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09w
ZW5UeXBlVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbmFtZUFuZEFjdGl2YXRl
Rm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0
aWVzLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdy
aXRlVXRpbGl0aWVzLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q2FjaGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR0RJRm9udCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGly
ZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1E
YXRhSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZUZhbGxi
YWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFXaW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVl
Tm9kZURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3Qy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzeXN0ZW1EV3JpdGVGYWN0b3J5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5c3RlbURXcml0ZUdkaUludGVyb3ApOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdp
bi5jcHA6CisKIDIwMTktMDgtMTUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkIFdpbkNhaXJvIGJ1aWxkIGZpeCBhZnRlciByMjQ4NzEzLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
SUJQaXhlbERhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0
aW9ucy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9GbG9hdFNpemVEaXJlY3QyRC5jcHAKQEAgLTE1MCw2ICsxNTEsNDEgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAog
KQogCitpZiAoVVNFX0NGKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURF
X0RJUkVDVE9SSUVTCisgICAgICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvYXJjaGl2ZS9jZiIK
KyAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2NmIgorICAgICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vY2Yvd2luIgorICAgICkKKworICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVf
U09VUkNFUworICAgICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZUNGLmNwcAorCisgICAgICAgIGxv
YWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCisKKyAgICAgICAgcGxhdGZvcm0v
Y2YvS2V5ZWREZWNvZGVyQ0YuY3BwCisgICAgICAgIHBsYXRmb3JtL2NmL0tleWVkRW5jb2RlckNG
LmNwcAorICAgICAgICBwbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKKworICAgICAgICBw
bGF0Zm9ybS9jZi93aW4vQ2VydGlmaWNhdGVDRldpbi5jcHAKKworICAgICAgICBwbGF0Zm9ybS90
ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwCisgICAgKQorCisgICAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCisgICAgICAgIGxvYWRlci9hcmNoaXZlL2NmL0xl
Z2FjeVdlYkFyY2hpdmUuaAorCisgICAgICAgIHBsYXRmb3JtL2NmL3dpbi9DZXJ0aWZpY2F0ZUNG
V2luLmgKKyAgICApCisKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUyAke0NPUkVG
T1VOREFUSU9OX0xJQlJBUll9KQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVUZXN0U3VwcG9ydF9M
SUJSQVJJRVMgJHtDT1JFRk9VTkRBVElPTl9MSUJSQVJZfSkKK2Vsc2UgKCkKKyAgICBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxhdGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5j
cHAKKyAgICApCitlbmRpZiAoKQorCiBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcldpbi5oCiAKQEAgLTE2MCw2ICsxOTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9GdWxsU2NyZWVuQ29udHJvbGxlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxT
Y3JlZW5Db250cm9sbGVyQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJELmgKQEAgLTIxMyw2ICsyNTAsMTMgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZVRlc3RTdXBwb3J0X0xJQlJBUklFUwogICAgIHNobHdhcGkKICkKIAorbWFrZV9kaXJl
Y3RvcnkoJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYktpdC5yZXNvdXJjZXMv
ZW4ubHByb2opCitmaWxlKENPUFkKKyAgICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovTG9jYWxp
emFibGUuc3RyaW5ncyIKKyAgICAiJHtXRUJDT1JFX0RJUn0vZW4ubHByb2ovbWVkaWFDb250cm9s
c0xvY2FsaXplZFN0cmluZ3MuanMiCisgICAgREVTVElOQVRJT04KKyAgICAke0NNQUtFX1JVTlRJ
TUVfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0LnJlc291cmNlcy9lbi5scHJvagorKQogZmlsZShD
T1BZCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRy
b2xzQXBwbGUuY3NzIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhY29udHJvbHMv
bWVkaWFDb250cm9sc0FwcGxlLmpzIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuY3BwCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsNiBAQAogI2lu
Y2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0j
aW5jbHVkZSA8ZHdyaXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBpbmxp
bmUgdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6c2V0U3RhdHVzKFN0YXR1cyBuZXdTdGF0dXMpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCShyZXZpc2lv
biAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSw2IEBACiAjaW5jbHVkZSAiV09GRkZpbGVGb3Jt
YXQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5j
bHVkZSA8ZHdyaXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNoZWRG
b250OjpDYWNoZWRGb250KENhY2hlZFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0IFBB
TDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IENvb2tpZUphciogY29va2llSmFyLCBUeXBl
IHR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0Zv
bnQuY3BwCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkU1ZHRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEwICs0MCw2IEBACiAjaW5j
bHVkZSAiVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiU1ZHVG9P
VEZGb250Q29udmVyc2lvbi5oIgogCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGR3cml0
ZS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2FjaGVkU1ZHRm9udDo6Q2Fj
aGVkU1ZHRm9udChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBQQUw6OlNl
c3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBDb29raWVKYXIqIGNvb2tpZUphcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAyNDg0NDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsMTAgKzQ1LDYgQEAKICNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5o
IgogI2VuZGlmCiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZHdyaXRlLmg+Ci0jZW5k
aWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1bnNpZ25lZCBHbHlwaFBhZ2U6OnNfY291bnQg
PSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNp
b24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBACiAjZW5kaWYKIAogI2lmIFVTRShESVJFQ1Qy
RCkKLWludGVyZmFjZSBJRFdyaXRlRmFjdG9yeTsKK2ludGVyZmFjZSBJRFdyaXRlRmFjdG9yeTU7
CiBpbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7CiAjZW5kaWYKIApAQCAtMjE5LDExICsyMTks
NiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGZsb2F0IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50
SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7CiAjZW5kaWYK
IAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSURXcml0ZUZh
Y3RvcnkqIHN5c3RlbURXcml0ZUZhY3RvcnkoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
SURXcml0ZUdkaUludGVyb3AqIHN5c3RlbURXcml0ZUdkaUludGVyb3AoKTsKLSNlbmRpZgotCiBw
cml2YXRlOgogICAgIEZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIE9yaWdpbiwgSW50ZXJz
dGl0aWFsLCBWaXNpYmlsaXR5LCBPcmllbnRhdGlvbkZhbGxiYWNrKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCShyZXZpc2lvbiAy
NDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVy
dGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkd3Jp
dGUuaD4KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlIDx3dGYv
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWN1cnNpdmVMb2NrQWRhcHRlci5oPgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0
YS5jcHAJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsNiBA
QAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ZvbnQuaD4KICNlbmRpZgogCi0jaWYgVVNFKERJ
UkVDVDJEKQotI2luY2x1ZGUgPGR3cml0ZS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDcgKzY1LDcgQEAgaW50ZXJmYWNlIElEV3JpdGVGb250RmFjZTsKICNlbmRpZgog
CiAjaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPGR3cml0
ZV8zLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTAzLDcgKzEwMyw3IEBA
IHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoRElSRUNUMkQpCi0g
ICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+LCBJRFdyaXRlRm9udCosIGZsb2F0
IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVz
ZUdESSk7CisgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+JiYsIElEV3JpdGVG
b250KiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlx
dWUsIGJvb2wgdXNlR0RJKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0FJ
Uk8pCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVibGljOgogICAgIElEV3JpdGVGb250RmFjZSogZHdG
b250RmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHdGb250RmFjZS5nZXQoKTsgfQogCiAgICAgc3Rh
dGljIEhSRVNVTFQgY3JlYXRlRmFsbGJhY2tGb250KGNvbnN0IExPR0ZPTlQmLCBJRFdyaXRlRm9u
dCoqKTsKKyAgICBzdGF0aWMgSFJFU1VMVCBjcmVhdGVGYWxsYmFja0ZvbnQoSEZPTlQsIElEV3Jp
dGVGb250KiopOwogI2VuZGlmCiAKICAgICBib29sIGlzRml4ZWRQaXRjaCgpIGNvbnN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCiAKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGls
aXRpZXMuaCIKKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IEJpZ0VuZGlhblVTaG9ydCB7IApAQCAtNDIzLDYgKzQyOCwxMSBAQCBI
QU5ETEUgcmVuYW1lQW5kQWN0aXZhdGVGb250KGNvbnN0IFNoYXJlCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAorI2lmIFVTRShESVJFQ1QyRCkKKyAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3Jp
dGU6OmFkZEZvbnRGcm9tRGF0YVRvUHJvY2Vzc0NvbGxlY3Rpb24ocmV3cml0dGVuRm9udERhdGEp
OworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIGZvbnRI
YW5kbGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9C
YWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwuaAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsOCBAQCBpbnRlcmZhY2UgSVdJQ0JpdG1hcDsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBJbnRTaXplOworCiBjbGFzcyBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0
MkRJbXBsIGZpbmFsIDogcHVibGljIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRCB7CiBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbChj
b25zdCBJbnRTaXplJiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3Jp
dGVVdGlsaXRpZXMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVz
LmgiCisKKyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgorCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIERpcmVjdFdyaXRlIHsKKworSURXcml0ZUZhY3Rvcnk1KiBm
YWN0b3J5KCkKK3sKKyAgICBzdGF0aWMgSURXcml0ZUZhY3Rvcnk1KiBkaXJlY3RXcml0ZUZhY3Rv
cnkgPSBudWxscHRyOworICAgIGlmICghZGlyZWN0V3JpdGVGYWN0b3J5KSB7CisgICAgICAgIEhS
RVNVTFQgaHIgPSBEV3JpdGVDcmVhdGVGYWN0b3J5KERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVE
LCBfX3V1aWRvZihkaXJlY3RXcml0ZUZhY3RvcnkpLCByZWludGVycHJldF9jYXN0PElVbmtub3du
Kio+KCZkaXJlY3RXcml0ZUZhY3RvcnkpKTsKKyAgICAgICAgZGlyZWN0V3JpdGVGYWN0b3J5LT5B
ZGRSZWYoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgfQor
CisgICAgcmV0dXJuIGRpcmVjdFdyaXRlRmFjdG9yeTsKK30KKworSURXcml0ZUdkaUludGVyb3Aq
IGdkaUludGVyb3AoKQoreworICAgIHN0YXRpYyBJRFdyaXRlR2RpSW50ZXJvcCogZGlyZWN0V3Jp
dGVHZGlJbnRlcm9wID0gbnVsbHB0cjsKKyAgICBpZiAoIWRpcmVjdFdyaXRlR2RpSW50ZXJvcCkg
eworICAgICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5HZXRHZGlJbnRlcm9wKCZkaXJlY3RX
cml0ZUdkaUludGVyb3ApOworICAgICAgICBkaXJlY3RXcml0ZUdkaUludGVyb3AtPkFkZFJlZigp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZGlyZWN0V3JpdGVHZGlJbnRlcm9wOworfQorCitzdGF0aWMgSURXcml0ZUluTWVtb3J5
Rm9udEZpbGVMb2FkZXIqIG1lbW9yeUZvbnRMb2FkZXIoKQoreworICAgIHN0YXRpYyBJRFdyaXRl
SW5NZW1vcnlGb250RmlsZUxvYWRlciogbWVtb3J5Rm9udExvYWRlciA9IG51bGxwdHI7CisgICAg
aWYgKCFtZW1vcnlGb250TG9hZGVyKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBmYWN0b3J5KCkt
PkNyZWF0ZUluTWVtb3J5Rm9udEZpbGVMb2FkZXIoJm1lbW9yeUZvbnRMb2FkZXIpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgbWVtb3J5Rm9udExvYWRl
ci0+QWRkUmVmKCk7CisKKyAgICAgICAgaHIgPSBmYWN0b3J5KCktPlJlZ2lzdGVyRm9udEZpbGVM
b2FkZXIobWVtb3J5Rm9udExvYWRlcik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOworICAgIH0KKworICAgIHJldHVybiBtZW1vcnlGb250TG9hZGVyOworfQorCitzdGF0
aWMgSURXcml0ZUZvbnRTZXRCdWlsZGVyMSogZm9udFNldEJ1aWxkZXIoKQoreworICAgIHN0YXRp
YyBJRFdyaXRlRm9udFNldEJ1aWxkZXIxKiBmb250U2V0QnVpbGRlciA9IG51bGxwdHI7CisgICAg
aWYgKCFmb250U2V0QnVpbGRlcikgeworICAgICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5D
cmVhdGVGb250U2V0QnVpbGRlcigmZm9udFNldEJ1aWxkZXIpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgZm9udFNldEJ1aWxkZXItPkFkZFJlZigpOwor
ICAgIH0KKworICAgIHJldHVybiBmb250U2V0QnVpbGRlcjsKK30KKworc3RhdGljIENPTVB0cjxJ
RFdyaXRlRm9udFNldD4gZm9udFNldDsKK3N0YXRpYyBDT01QdHI8SURXcml0ZUZvbnRDb2xsZWN0
aW9uMT4gZm9udENvbGxlY3Rpb247CitzdGF0aWMgVUlOVDMyIGZvbnRDb3VudCA9IDA7CisKK0lE
V3JpdGVGb250Q29sbGVjdGlvbjEqIHdlYlByb2Nlc3NGb250Q29sbGVjdGlvbigpCit7CisgICAg
SFJFU1VMVCBociA9IFNfT0s7CisKKyAgICBpZiAoIWZvbnRTZXQpIHsKKyAgICAgICAgaHIgPSBm
b250U2V0QnVpbGRlcigpLT5DcmVhdGVGb250U2V0KCZmb250U2V0KTsKKyAgICAgICAgaWYgKCFT
VUNDRUVERUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgZm9u
dENvbGxlY3Rpb24gPSBudWxscHRyOworICAgICAgICBociA9IGZhY3RvcnkoKS0+Q3JlYXRlRm9u
dENvbGxlY3Rpb25Gcm9tRm9udFNldChmb250U2V0LmdldCgpLCAmZm9udENvbGxlY3Rpb24pOwor
ICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICBBU1NFUlQoZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHlDb3VudCgpID09
IGZvbnRDb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIGZvbnRDb2xsZWN0aW9uLmdldCgpOwor
fQorCitIUkVTVUxUIGFkZEZvbnRGcm9tRGF0YVRvUHJvY2Vzc0NvbGxlY3Rpb24oY29uc3QgVmVj
dG9yPGNoYXI+JiBmb250RGF0YSkKK3sKKyAgICBDT01QdHI8SURXcml0ZUZvbnRGaWxlPiBmb250
RmlsZTsKKyAgICBIUkVTVUxUIGhyID0gbWVtb3J5Rm9udExvYWRlcigpLT5DcmVhdGVJbk1lbW9y
eUZvbnRGaWxlUmVmZXJlbmNlKGZhY3RvcnkoKSwgZm9udERhdGEuZGF0YSgpLCBmb250RGF0YS5z
aXplKCksIG51bGxwdHIsICZmb250RmlsZSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAg
ICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IGZvbnRTZXRCdWlsZGVyKCktPkFkZEZvbnRGaWxl
KGZvbnRGaWxlLmdldCgpKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVy
biBocjsKKworICAgIGZvbnRTZXQgPSBudWxscHRyOworICAgICsrZm9udENvdW50OworCisgICAg
cmV0dXJuIGhyOworfQorCitWZWN0b3I8d2NoYXJfdD4gZmFtaWx5TmFtZUZvckxvY2FsZShJRFdy
aXRlRm9udEZhbWlseSogZm9udEZhbWlseSwgY29uc3QgVmVjdG9yPHdjaGFyX3Q+JiBsb2NhbGVO
YW1lKQoreworICAgIENPTVB0cjxJRFdyaXRlTG9jYWxpemVkU3RyaW5ncz4gZmFtaWx5TmFtZXM7
CisgICAgSFJFU1VMVCBociA9IGZvbnRGYW1pbHktPkdldEZhbWlseU5hbWVzKCZmYW1pbHlOYW1l
cyk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBCT09M
IGV4aXN0cyA9IGZhbHNlOworICAgIHVuc2lnbmVkIGxvY2FsZUluZGV4ID0gMDsKKyAgICBpZiAo
IWxvY2FsZU5hbWUuaXNFbXB0eSgpKQorICAgICAgICBociA9IGZhbWlseU5hbWVzLT5GaW5kTG9j
YWxlTmFtZShsb2NhbGVOYW1lLmRhdGEoKSwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKKworICAg
IGlmIChTVUNDRUVERUQoaHIpICYmICFleGlzdHMpCisgICAgICAgIGhyID0gZmFtaWx5TmFtZXMt
PkZpbmRMb2NhbGVOYW1lKEwiZW4tdXMiLCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOworCisgICAg
aWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICB1bnNpZ25lZCBmYW1p
bHlOYW1lTGVuZ3RoID0gMDsKKyAgICBociA9IGZhbWlseU5hbWVzLT5HZXRTdHJpbmdMZW5ndGgo
bG9jYWxlSW5kZXgsICZmYW1pbHlOYW1lTGVuZ3RoKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8d2NoYXJfdD4gZmFtaWx5TmFtZShm
YW1pbHlOYW1lTGVuZ3RoICsgMSk7CisgICAgaHIgPSBmYW1pbHlOYW1lcy0+R2V0U3RyaW5nKGxv
Y2FsZUluZGV4LCBmYW1pbHlOYW1lLmRhdGEoKSwgZmFtaWx5TmFtZS5zaXplKCkpOworICAgIGlm
ICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBmYW1p
bHlOYW1lOworfQorCitDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHlGb3JDb2xs
ZWN0aW9uKElEV3JpdGVGb250Q29sbGVjdGlvbiogZm9udENvbGxlY3Rpb24sIGNvbnN0IFZlY3Rv
cjx3Y2hhcl90PiYgbG9jYWxlTmFtZSwgY29uc3QgTE9HRk9OVCYgbG9nRm9udCkKK3sKKyAgICBD
T01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHk7CisKKyAgICB1bnNpZ25lZCBmb250
RmFtaWx5Q291bnQgPSBmb250Q29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseUNvdW50KCk7CisgICAg
Zm9yICh1bnNpZ25lZCBmb250SW5kZXggPSAwOyBmb250SW5kZXggPCBmb250RmFtaWx5Q291bnQ7
ICsrZm9udEluZGV4KSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBmb250Q29sbGVjdGlvbi0+R2V0
Rm9udEZhbWlseShmb250SW5kZXgsICZmb250RmFtaWx5KTsKKyAgICAgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhdXRvIGZhbWlseU5h
bWUgPSBmYW1pbHlOYW1lRm9yTG9jYWxlKGZvbnRGYW1pbHkuZ2V0KCksIGxvY2FsZU5hbWUpOwor
CisgICAgICAgIGlmICghd2NzY21wKGxvZ0ZvbnQubGZGYWNlTmFtZSwgZmFtaWx5TmFtZS5kYXRh
KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZvbnRGYW1pbHk7CisKKyAgICAgICAgZm9udEZhbWls
eSA9IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0NPTVB0cjxJ
RFdyaXRlRm9udD4gY3JlYXRlV2l0aFBsYXRmb3JtRm9udChjb25zdCBMT0dGT05UJiBsb2dGb250
KQoreworICAgIENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24+IHN5c3RlbUZvbnRDb2xsZWN0
aW9uOworICAgIEhSRVNVTFQgaHIgPSBmYWN0b3J5KCktPkdldFN5c3RlbUZvbnRDb2xsZWN0aW9u
KCZzeXN0ZW1Gb250Q29sbGVjdGlvbik7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgVmVjdG9yPHdjaGFyX3Q+IGxvY2FsZU5hbWUoTE9DQUxFX05B
TUVfTUFYX0xFTkdUSCk7CisgICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVzZXJEZWZhdWx0TG9j
YWxlTmFtZShsb2NhbGVOYW1lLmRhdGEoKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisKKyAg
ICBDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHkgPSBmb250RmFtaWx5Rm9yQ29s
bGVjdGlvbihzeXN0ZW1Gb250Q29sbGVjdGlvbi5nZXQoKSwgbG9jYWxlTmFtZSwgbG9nRm9udCk7
CisgICAgaWYgKCFmb250RmFtaWx5KQorICAgICAgICBmb250RmFtaWx5ID0gZm9udEZhbWlseUZv
ckNvbGxlY3Rpb24od2ViUHJvY2Vzc0ZvbnRDb2xsZWN0aW9uKCksIGxvY2FsZU5hbWUsIGxvZ0Zv
bnQpOworCisgICAgaWYgKCFmb250RmFtaWx5KSB7CisgICAgICAgIC8vIEp1c3QgcmV0dXJuIHRo
ZSBmaXJzdCBzeXN0ZW0gZm9udC4KKyAgICAgICAgaHIgPSBzeXN0ZW1Gb250Q29sbGVjdGlvbi0+
R2V0Rm9udEZhbWlseSgwLCAmZm9udEZhbWlseSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGF1
dG8gZmFtaWx5TmFtZSA9IGZhbWlseU5hbWVGb3JMb2NhbGUoZm9udEZhbWlseS5nZXQoKSwgbG9j
YWxlTmFtZSk7CisgICAgICAgIFVOVVNFRF9WQVJJQUJMRShmYW1pbHlOYW1lKTsKKyNlbmRpZgor
ICAgIH0KKworICAgIERXUklURV9GT05UX1dFSUdIVCB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxEV1JJ
VEVfRk9OVF9XRUlHSFQ+KGxvZ0ZvbnQubGZXZWlnaHQpOworICAgIERXUklURV9GT05UX1NUUkVU
Q0ggc3RyZXRjaCA9IHN0YXRpY19jYXN0PERXUklURV9GT05UX1NUUkVUQ0g+KGxvZ0ZvbnQubGZR
dWFsaXR5KTsKKyAgICBEV1JJVEVfRk9OVF9TVFlMRSBzdHlsZSA9IGxvZ0ZvbnQubGZJdGFsaWMg
PyBEV1JJVEVfRk9OVF9TVFlMRV9JVEFMSUMgOiBEV1JJVEVfRk9OVF9TVFlMRV9OT1JNQUw7CisK
KyAgICBDT01QdHI8SURXcml0ZUZvbnQ+IGR3Rm9udDsKKyAgICBociA9IGZvbnRGYW1pbHktPkdl
dEZpcnN0TWF0Y2hpbmdGb250KHdlaWdodCwgc3RyZXRjaCwgc3R5bGUsICZkd0ZvbnQpOworICAg
IEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIHJldHVybiBkd0ZvbnQ7Cit9CisKK30gLy8g
bmFtZXNwYWNlIERpcmVjdFdyaXRlCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0
aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
RElSRUNUMkQpCisKKyNpbmNsdWRlICJDT01QdHIuaCIKKworaW50ZXJmYWNlIElEV3JpdGVGYWN0
b3J5NTsKK2ludGVyZmFjZSBJRFdyaXRlRm9udDsKK2ludGVyZmFjZSBJRFdyaXRlRm9udENvbGxl
Y3Rpb247CitpbnRlcmZhY2UgSURXcml0ZUZvbnRDb2xsZWN0aW9uMTsKK2ludGVyZmFjZSBJRFdy
aXRlRm9udEZhbWlseTsKK2ludGVyZmFjZSBJRFdyaXRlR2RpSW50ZXJvcDsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK25hbWVzcGFjZSBEaXJlY3RXcml0
ZSB7CisKK0lEV3JpdGVGYWN0b3J5NSogZmFjdG9yeSgpOworSURXcml0ZUdkaUludGVyb3AqIGdk
aUludGVyb3AoKTsKKworSURXcml0ZUZvbnRDb2xsZWN0aW9uMSogd2ViUHJvY2Vzc0ZvbnRDb2xs
ZWN0aW9uKCk7CisKK0hSRVNVTFQgYWRkRm9udEZyb21EYXRhVG9Qcm9jZXNzQ29sbGVjdGlvbihj
b25zdCBWZWN0b3I8Y2hhcj4mIGZvbnREYXRhKTsKK0NPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4g
Zm9udEZhbWlseUZvckNvbGxlY3Rpb24oSURXcml0ZUZvbnRDb2xsZWN0aW9uKiwgY29uc3QgVmVj
dG9yPHdjaGFyX3Q+JiBsb2NhbGVOYW1lLCBjb25zdCBMT0dGT05UJik7CitDT01QdHI8SURXcml0
ZUZvbnQ+IGNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoY29uc3QgTE9HRk9OVCYpOworVmVjdG9yPHdj
aGFyX3Q+IGZhbWlseU5hbWVGb3JMb2NhbGUoSURXcml0ZUZvbnRGYW1pbHkqLCBjb25zdCBWZWN0
b3I8d2NoYXJfdD4mIGxvY2FsZU5hbWUpOworCit9IC8vIG5hbWVzcGFjZSBEaXJlY3RXcml0ZQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENh
Y2hlV2luLmNwcAkocmV2aXNpb24gMjQ4NDQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAKICNlbmRpZgogCiAjaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGR3cml0ZS5oPgor
I2luY2x1ZGUgPGR3cml0ZV8zLmg+CiAjZW5kaWYKIAogdXNpbmcgc3RkOjptaW47CkBAIC01MDYs
NyArNTA2LDcgQEAgc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjbwogICAg
IG1hdGNoRGF0YS5tX2Nob3Nlbi5sZlVuZGVybGluZSA9IGZhbHNlOwogICAgIG1hdGNoRGF0YS5t
X2Nob3Nlbi5sZlN0cmlrZU91dCA9IGZhbHNlOwogICAgIG1hdGNoRGF0YS5tX2Nob3Nlbi5sZkNo
YXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCisjaWYg
VVNFKENHKSB8fCBVU0UoQ0FJUk8pIHx8IFVTRShESVJFQ1QyRCkKICAgICBtYXRjaERhdGEubV9j
aG9zZW4ubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfT05MWV9QUkVDSVM7CiAjZWxzZQogICAgIG1h
dGNoRGF0YS5tX2Nob3Nlbi5sZk91dFByZWNpc2lvbiA9IE9VVF9UVF9QUkVDSVM7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDYXNjYWRlRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2luY2x1ZGUgPGQyZDEuaD4KLSNp
bmNsdWRlIDxkd3JpdGUuaD4KKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsOCArMzQsOCBAQAogI2VuZGlmCiAKICNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVk
ZSAiRm9udC5oIgotI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSA8ZHdyaXRlXzMuaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC02NSw3ICs2NSw3IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRm
b3JtRGF0YToKICAgICBsb2dGb250LmxmVW5kZXJsaW5lID0gZmFsc2U7CiAgICAgbG9nRm9udC5s
ZlN0cmlrZU91dCA9IGZhbHNlOwogICAgIGxvZ0ZvbnQubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFS
U0VUOwotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorI2lmIFVTRShDRykgfHwgVVNFKENBSVJP
KSB8fCBVU0UoRElSRUNUMkQpCiAgICAgbG9nRm9udC5sZk91dFByZWNpc2lvbiA9IE9VVF9UVF9P
TkxZX1BSRUNJUzsKICNlbHNlCiAgICAgbG9nRm9udC5sZk91dFByZWNpc2lvbiA9IE9VVF9UVF9Q
UkVDSVM7CkBAIC03NiwyMCArNzYsMTEgQEAgRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhOgogICAgIGxvZ0ZvbnQubGZXZWlnaHQgPSBib2xkID8gNzAwIDogNDAwOwogCiAg
ICAgYXV0byBoZm9udCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRm9udEluZGlyZWN0KCZsb2dG
b250KSk7Ci0KICNpZiBVU0UoQ0cpCiAgICAgUmV0YWluUHRyPENHRm9udFJlZj4gY2dGb250ID0g
YWRvcHRDRihDR0ZvbnRDcmVhdGVXaXRoUGxhdGZvcm1Gb250KCZsb2dGb250KSk7CiAgICAgcmV0
dXJuIEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZShoZm9udCksIGNnRm9udC5nZXQoKSwgc2l6ZSwg
Ym9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5h
dGUpOwogI2Vsc2UKLSAgICBDT01QdHI8SURXcml0ZUZvbnQ+IGR3Rm9udDsKLSAgICBIUkVTVUxU
IGhyID0gRm9udDo6c3lzdGVtRFdyaXRlR2RpSW50ZXJvcCgpLT5DcmVhdGVGb250RnJvbUxPR0ZP
TlQoJmxvZ0ZvbnQsICZkd0ZvbnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkgewotICAgICAg
ICBMT0dGT05UIGN1c3RvbUZvbnQ7Ci0gICAgICAgIGhyID0gOjpHZXRPYmplY3QoaGZvbnQuZ2V0
KCksIHNpemVvZihMT0dGT05UKSwgJmN1c3RvbUZvbnQpOwotICAgICAgICBpZiAoU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgICAgIGhyID0gRm9udFBsYXRmb3JtRGF0YTo6Y3JlYXRlRmFsbGJhY2tG
b250KGN1c3RvbUZvbnQsICZkd0ZvbnQpOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKKyAgICBDT01QdHI8SURXcml0ZUZvbnQ+IGR3Rm9udCA9IERpcmVjdFdyaXRl
OjpjcmVhdGVXaXRoUGxhdGZvcm1Gb250KGxvZ0ZvbnQpOwogICAgIHJldHVybiBGb250UGxhdGZv
cm1EYXRhKFdURk1vdmUoaGZvbnQpLCBkd0ZvbnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywg
cmVuZGVyaW5nTW9kZSA9PSBGb250UmVuZGVyaW5nTW9kZTo6QWx0ZXJuYXRlKTsKICNlbmRpZgog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0ODQ0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTIgQEAKIAogI2lm
IFVTRShESVJFQ1QyRCkKIAorI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSAi
U2hhcmVkR0RJT2JqZWN0LmgiCiAjaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGR3cml0ZS5o
PgorI2luY2x1ZGUgPGR3cml0ZV8zLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwyNCArNDEsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
dm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0
IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSkKIHsKICAgICBMT0dGT05UIGxvZ2ZvbnQ7
Ci0gICAgR2V0T2JqZWN0KGZvbnQsIHNpemVvZihsb2dmb250KSwgJmxvZ2ZvbnQpOwotCi0gICAg
SFJFU1VMVCBociA9IEZvbnQ6OnN5c3RlbURXcml0ZUdkaUludGVyb3AoKS0+Q3JlYXRlRm9udEZy
b21MT0dGT05UKCZsb2dmb250LCAmbV9kd0ZvbnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkg
ewotICAgICAgICBociA9IEZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZUZhbGxiYWNrRm9udChsb2dm
b250LCAmbV9kd0ZvbnQpOwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIEhSRVNVTFQgaHIgPSA6OkdldE9iamVjdChmb250LCBzaXpl
b2YoTE9HRk9OVCksICZsb2dmb250KTsKKyAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAg
bV9kd0ZvbnQgPSBEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udChsb2dmb250KTsK
KyAgICBSRUxFQVNFX0FTU0VSVChtX2R3Rm9udCk7CiAKICAgICBociA9IG1fZHdGb250LT5DcmVh
dGVGb250RmFjZSgmbV9kd0ZvbnRGYWNlKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybjsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgIGlm
ICghbV91c2VHREkpCiAgICAgICAgIG1faXNTeXN0ZW1Gb250ID0gIXdjc2NtcChmYWNlTmFtZSwg
TCJMdWNpZGEgR3JhbmRlIik7CiB9CiAKLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoR0RJT2JqZWN0PEhGT05UPiBoZm9udCwgSURXcml0ZUZvbnQqIGZvbnQsIGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSkKK0ZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmIGhmb250LCBJRFdyaXRlRm9udCog
Zm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQog
ICAgIDogbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2Js
aXF1ZSkKICAgICAsIG1fc2l6ZShzaXplKQpAQCAtMTI0LDY3ICsxMjEsNDggQEAgSFJFU1VMVCBG
b250UGxhdGZvcm1EYXRhOjpjcmVhdGVGYWxsYmFjawogICAgIGlmICghZHdGb250KQogICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbj4g
Zm9udENvbGxlY3Rpb247Ci0gICAgSFJFU1VMVCBociA9IEZvbnQ6OnN5c3RlbURXcml0ZUZhY3Rv
cnkoKS0+R2V0U3lzdGVtRm9udENvbGxlY3Rpb24oJmZvbnRDb2xsZWN0aW9uKTsKLSAgICBpZiAo
RkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOworICAgICpkd0ZvbnQgPSBEaXJlY3RXcml0
ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udChsb2dGb250KS5nZXQoKTsKIAotICAgIHdjaGFyX3Qg
bG9jYWxlTmFtZVtMT0NBTEVfTkFNRV9NQVhfTEVOR1RIXTsKLSAgICBpbnQgbG9jYWxlTGVuZ3Ro
ID0gR2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKGxvY2FsZU5hbWUsIExPQ0FMRV9OQU1FX01BWF9M
RU5HVEgpOworICAgIHJldHVybiBTX09LOworfQogCi0gICAgQ09NUHRyPElEV3JpdGVGb250RmFt
aWx5PiBmb250RmFtaWx5OworSFJFU1VMVCBGb250UGxhdGZvcm1EYXRhOjpjcmVhdGVGYWxsYmFj
a0ZvbnQoSEZPTlQgaGZvbnQsIElEV3JpdGVGb250KiogZHdGb250KQoreworICAgIGlmICghZHdG
b250KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgdW5zaWduZWQgZm9udEZhbWls
eUNvdW50ID0gZm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHlDb3VudCgpOwotICAgIGZvciAo
dW5zaWduZWQgZm9udEluZGV4ID0gMDsgZm9udEluZGV4IDwgZm9udEZhbWlseUNvdW50OyArK2Zv
bnRJbmRleCkgewotICAgICAgICBociA9IGZvbnRDb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5KGZv
bnRJbmRleCwgJmZvbnRGYW1pbHkpOwotICAgICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAg
ICAgIHJldHVybiBocjsKLQotICAgICAgICBDT01QdHI8SURXcml0ZUxvY2FsaXplZFN0cmluZ3M+
IGZhbWlseU5hbWVzOwotICAgICAgICBociA9IGZvbnRGYW1pbHktPkdldEZhbWlseU5hbWVzKCZm
YW1pbHlOYW1lcyk7Ci0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICAgICAgcmV0dXJu
IGhyOwotCi0gICAgICAgIEJPT0wgZXhpc3RzID0gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIGxv
Y2FsZUluZGV4ID0gMDsKLSAgICAgICAgaWYgKGxvY2FsZUxlbmd0aCkKLSAgICAgICAgICAgIGhy
ID0gZmFtaWx5TmFtZXMtPkZpbmRMb2NhbGVOYW1lKGxvY2FsZU5hbWUsICZsb2NhbGVJbmRleCwg
JmV4aXN0cyk7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgIWV4aXN0cykKLSAgICAg
ICAgICAgIGhyID0gZmFtaWx5TmFtZXMtPkZpbmRMb2NhbGVOYW1lKEwiZW4tdXMiLCAmbG9jYWxl
SW5kZXgsICZleGlzdHMpOwotCi0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICAgICAg
cmV0dXJuIGhyOwotCi0gICAgICAgIHVuc2lnbmVkIGZhbWlseU5hbWVMZW5ndGggPSAwOwotICAg
ICAgICBociA9IGZhbWlseU5hbWVzLT5HZXRTdHJpbmdMZW5ndGgobG9jYWxlSW5kZXgsICZmYW1p
bHlOYW1lTGVuZ3RoKTsKLSAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAg
cmV0dXJuIGhyOwotCi0gICAgICAgIFZlY3Rvcjx3Y2hhcl90PiBmYW1pbHlOYW1lKGZhbWlseU5h
bWVMZW5ndGggKyAxKTsKLSAgICAgICAgaHIgPSBmYW1pbHlOYW1lcy0+R2V0U3RyaW5nKGxvY2Fs
ZUluZGV4LCBmYW1pbHlOYW1lLmRhdGEoKSwgZmFtaWx5TmFtZS5zaXplKCkpOwotICAgICAgICBp
ZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm4gaHI7CisgICAgQ09NUHRyPElE
V3JpdGVGb250Q29sbGVjdGlvbj4gZm9udENvbGxlY3Rpb247CisgICAgSFJFU1VMVCBociA9IERp
cmVjdFdyaXRlOjpmYWN0b3J5KCktPkdldFN5c3RlbUZvbnRDb2xsZWN0aW9uKCZmb250Q29sbGVj
dGlvbik7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKIAotICAgICAg
ICBpZiAoIXdjc2NtcChsb2dGb250LmxmRmFjZU5hbWUsIGZhbWlseU5hbWUuZGF0YSgpKSkKLSAg
ICAgICAgICAgIGJyZWFrOworICAgIEhXbmREQyBoZGMoMCk7CisgICAgSEdESU9CSiBvbGRGb250
ID0gOjpTZWxlY3RPYmplY3QoaGRjLCBoZm9udCk7CiAKLSAgICAgICAgZm9udEZhbWlseSA9IG51
bGxwdHI7CisgICAgQ09NUHRyPElEV3JpdGVGb250RmFjZT4gZm9udEZhY2U7CisgICAgaHIgPSBE
aXJlY3RXcml0ZTo6Z2RpSW50ZXJvcCgpLT5DcmVhdGVGb250RmFjZUZyb21IZGMoaGRjLCAmZm9u
dEZhY2UpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIDo6U2VsZWN0T2JqZWN0KGhk
Yywgb2xkRm9udCk7CisgICAgICAgIHJldHVybiBocjsKICAgICB9CiAKLSAgICBpZiAoIWZvbnRG
YW1pbHkpIHsKLSAgICAgICAgaHIgPSBmb250Q29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseSgwLCAm
Zm9udEZhbWlseSk7Ci0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICAgICAgcmV0dXJu
IGhyOworICAgIExPR0ZPTlQgZ2RpQmFzZWRGb250ID0geyB9OworICAgIGhyID0gRGlyZWN0V3Jp
dGU6OmdkaUludGVyb3AoKS0+Q29udmVydEZvbnRGYWNlVG9MT0dGT05UKGZvbnRGYWNlLmdldCgp
LCAmZ2RpQmFzZWRGb250KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICA6OlNlbGVj
dE9iamVjdChoZGMsIG9sZEZvbnQpOworICAgICAgICByZXR1cm4gaHI7CiAgICAgfQogCi0gICAg
RFdSSVRFX0ZPTlRfV0VJR0hUIHdlaWdodCA9IHN0YXRpY19jYXN0PERXUklURV9GT05UX1dFSUdI
VD4obG9nRm9udC5sZldlaWdodCk7Ci0gICAgRFdSSVRFX0ZPTlRfU1RSRVRDSCBzdHJldGNoID0g
c3RhdGljX2Nhc3Q8RFdSSVRFX0ZPTlRfU1RSRVRDSD4obG9nRm9udC5sZlF1YWxpdHkpOwotICAg
IERXUklURV9GT05UX1NUWUxFIHN0eWxlID0gbG9nRm9udC5sZkl0YWxpYyA/IERXUklURV9GT05U
X1NUWUxFX0lUQUxJQyA6IERXUklURV9GT05UX1NUWUxFX05PUk1BTDsKKyAgICBociA9IGZvbnRD
b2xsZWN0aW9uLT5HZXRGb250RnJvbUZvbnRGYWNlKGZvbnRGYWNlLmdldCgpLCBkd0ZvbnQpOwor
CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICBociA9IERpcmVjdFdyaXRlOjp3ZWJQ
cm9jZXNzRm9udENvbGxlY3Rpb24oKS0+R2V0Rm9udEZyb21Gb250RmFjZShmb250RmFjZS5nZXQo
KSwgZHdGb250KTsKIAotICAgIGhyID0gZm9udEZhbWlseS0+R2V0Rmlyc3RNYXRjaGluZ0ZvbnQo
d2VpZ2h0LCBzdHJldGNoLCBzdHlsZSwgZHdGb250KTsKKyAgICA6OlNlbGVjdE9iamVjdChoZGMs
IG9sZEZvbnQpOworICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CiAK
LSAgICByZXR1cm4gaHI7CisgICAgcmV0dXJuIGNyZWF0ZUZhbGxiYWNrRm9udChnZGlCYXNlZEZv
bnQsIGR3Rm9udCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAJKHJldmlz
aW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
UGxhdGZvcm1EYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgVVNFKERJUkVDVDJEKQotI2luY2x1
ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPGR3cml0ZV8zLmg+CiAjZW5kaWYKIAogdXNpbmcgc3Rk
OjptaW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQ
YWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCShyZXZpc2lv
biAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQ
YWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBA
CiAKICNpZiBVU0UoRElSRUNUMkQpCiAKKyNpbmNsdWRlICJEaXJlY3RXcml0ZVV0aWxpdGllcy5o
IgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJUZXh0QW5hbHl6ZXJIZWxwZXIuaCIKLSNp
bmNsdWRlIDxkd3JpdGUuaD4KKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQzLDcgKzQ0LDcgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1
ZmZlciwgdW5zaQogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwogCiAgICAgQ09NUHRyPElE
V3JpdGVUZXh0QW5hbHl6ZXI+IGFuYWx5emVyOwotICAgIEhSRVNVTFQgaHIgPSBGb250OjpzeXN0
ZW1EV3JpdGVGYWN0b3J5KCktPkNyZWF0ZVRleHRBbmFseXplcigmYW5hbHl6ZXIpOworICAgIEhS
RVNVTFQgaHIgPSBEaXJlY3RXcml0ZTo6ZmFjdG9yeSgpLT5DcmVhdGVUZXh0QW5hbHl6ZXIoJmFu
YWx5emVyKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgIGF1dG8m
IGZvbnRQbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8ZDJkMWVmZmVjdHMuaD4KLSNp
bmNsdWRlIDxkd3JpdGUuaD4KKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgogI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KIAogI3ByYWdtYSB3YXJuaW5nIChkaXNhYmxlIDogNDc1NikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0ODQ0NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgVVNFKERJUkVDVDJEKQogCisjaW5jbHVk
ZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKQEAgLTM2LDcg
KzM3LDcgQEAKICNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgPGNvbXV0aWwuaD4KLSNpbmNsdWRlIDxkd3JpdGUuaD4KKyNpbmNsdWRlIDxk
d3JpdGVfMy5oPgogI2luY2x1ZGUgPG1sYW5nLmg+CiAjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5o
PgogI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KQEAgLTQ3LDI4ICs0OCw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotSURXcml0ZUZhY3RvcnkqIEZvbnQ6OnN5c3RlbURXcml0ZUZhY3Rv
cnkoKQotewotICAgIHN0YXRpYyBJRFdyaXRlRmFjdG9yeSogZGlyZWN0V3JpdGVGYWN0b3J5ID0g
bnVsbHB0cjsKLSAgICBpZiAoIWRpcmVjdFdyaXRlRmFjdG9yeSkgewotICAgICAgICBIUkVTVUxU
IGhyID0gRFdyaXRlQ3JlYXRlRmFjdG9yeShEV1JJVEVfRkFDVE9SWV9UWVBFX1NIQVJFRCwgX191
dWlkb2YoZGlyZWN0V3JpdGVGYWN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDxJVW5rbm93bioqPigm
ZGlyZWN0V3JpdGVGYWN0b3J5KSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotICAgIH0KLQotICAgIHJldHVybiBkaXJlY3RXcml0ZUZhY3Rvcnk7Ci19Ci0KLUlEV3Jp
dGVHZGlJbnRlcm9wKiBGb250OjpzeXN0ZW1EV3JpdGVHZGlJbnRlcm9wKCkKLXsKLSAgICBzdGF0
aWMgSURXcml0ZUdkaUludGVyb3AqIGRpcmVjdFdyaXRlR2RpSW50ZXJvcCA9IG51bGxwdHI7Ci0g
ICAgaWYgKCFkaXJlY3RXcml0ZUdkaUludGVyb3ApIHsKLSAgICAgICAgSFJFU1VMVCBociA9IHN5
c3RlbURXcml0ZUZhY3RvcnkoKS0+R2V0R2RpSW50ZXJvcCgmZGlyZWN0V3JpdGVHZGlJbnRlcm9w
KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGRpcmVjdFdyaXRlR2RpSW50ZXJvcDsKLX0KLQogc3RhdGljIFZlY3RvcjxXQ0hBUj4g
Z2V0RmFjZU5hbWUoSURXcml0ZUZvbnQqIGZvbnQpCiB7CiAgICAgaWYgKCFmb250KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2lt
cGxlRm9udERhdGFXaW4uY3BwCShyZXZpc2lvbiAyNDg0NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxMCArMzcsNiBAQAogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxk
d3JpdGUuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIGdf
c2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>