<?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>192589</bug_id>
          
          <creation_ts>2018-12-11 06:50:13 -0800</creation_ts>
          <short_desc>[FreeType] Remove HarfBuzzFace</short_desc>
          <delta_ts>2018-12-13 01:43:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>192151</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1486922</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-11 06:50:13 -0800</bug_when>
    <thetext>This was used to share the common implementation with the chromium port, but now that only freetype based ports use it, it can be removed and use hb_ft_face_create_cached() instead. We don&apos;t need the glyph cache either, since we are already caching glyphs in Font.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1486925</commentid>
    <comment_count>1</comment_count>
      <attachid>357047</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-11 06:58:04 -0800</bug_when>
    <thetext>Created attachment 357047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1486926</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-11 06:58:28 -0800</bug_when>
    <thetext>I wrote this patch on top of patch attached to bug #192151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487048</commentid>
    <comment_count>3</comment_count>
      <attachid>357047</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-12-11 14:58:35 -0800</bug_when>
    <thetext>Comment on attachment 357047
Patch

Probably goes without saying, but you should see if Myles has comments before landing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487164</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-12 01:19:56 -0800</bug_when>
    <thetext>Committed r239101: &lt;https://trac.webkit.org/changeset/239101&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487165</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-12-12 01:21:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/46655797&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487279</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-12-12 11:05:37 -0800</bug_when>
    <thetext>Reopening. I rolled this out in r239122 because it depends on bug #192151.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487537</commentid>
    <comment_count>7</comment_count>
      <attachid>357219</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-13 01:20:36 -0800</bug_when>
    <thetext>Created attachment 357219
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487541</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-13 01:43:54 -0800</bug_when>
    <thetext>Committed r239157: &lt;https://trac.webkit.org/changeset/239157&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357047</attachid>
            <date>2018-12-11 06:58:04 -0800</date>
            <delta_ts>2018-12-13 01:20:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-hb-face-deleted.diff</filename>
            <type>text/plain</type>
            <size>46204</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4Y2UwNjZkYjcwZC4uMGRhNzg0ZmFjYWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxOC0xMi0xMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0ZyZWVUeXBlXSBSZW1vdmUgSGFyZkJ1enpGYWNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI1ODkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWJhc2VsaW5lIHRlc3QgdGhhdCBub3cg
bWF0Y2hlcyB0aGUgZmlyZWZveCBvdXRwdXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvbWF0
aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvbWF0aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWV4cGVjdGVkLnR4
dDoKKwogMjAxOC0xMi0xMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0ZyZWVUeXBlXSBBZGQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB2
YXJpYXRpb24gZm9udHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9tYXRo
bWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ3RrL21hdGhtbC9vcGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1leHBlY3RlZC5w
bmcKaW5kZXggMzVlYmU3MzExZWYyMDYwNmU0MDdiODJjYTZjNDYwZTdjOGEzOWQzMi4uMDU4NWEw
ZTZmNTZkM2JhNzUzMjRiZDAxMGYyNGFmZmI3YjA2ZDZmNCAxMDA2NDQKR0lUIGJpbmFyeSBwYXRj
aApsaXRlcmFsIDM4MTMKemNtZUh+ZU4+V1g2dT5WaU5gODxZNjNUSjNeMn1EIylDJEFaezN5KkBy
bGwqZjUodn1XKEZ2X2dhKXhPM1ZZT1VxCnpYLSg2emM1MGd3JkQxNnsoTXMxJFR7QjVEclhFVHdZ
ZyZHeDI8Ji1aYGxxdiN3Vmwmezl7ellQSm9vRmxfamxpaQp6SCtebE96b25WMjgzMChXVEltfU1V
XkVrZSRSLW9mRkUtT2A9QWRRblBDeGR9aTBIX09tPnV6LTFKbTd8QUt8Zk8KemZqZzd3ekJ0bDdW
aGJPQSp+KHdRVDxFJXAjcEp1NDdhalE+OEpYfWBgfT18KGA8JHR+YTIkWFZ4eXNrKVEmRyt7Cnpy
Q1R0ZyQ5RGdeQ2cmY2pnKD53S0EjYTw+V3JEeD1abGlBXm1lZ2NoLVA/YkRVTD9vMyNKSUpWXzJ8
S2h0Y3cxQwp6Z2VJP15eTk43LWtfJVZNQkBOOyNKcTA5PCQoZHBUTk4kc3pLeXAkfWdvOUs1bSQw
WDUoMG92PTlsOUh1Smx4JmcKelVFVSEhPWI4WV4kSCt1Y0Y2aUtCK3cjTz9iQ2FtaHgjJCNgMERQ
aTMleWNZKio5bTI8RjFBYHRVbGtZR0NGfE0qCnojdzZHZlEhRjNybH55NUY4cUpwfUJxKyNDeDA9
dWk/JXplOWU+Kyg+K1NBZ1pRKVBKUmBtYXJ1PlIyRm1PWXxyYgp6azNQJV9QMWIwJlNgPWdTTnJu
K0g5SF9JdkpBZy1rPiZDUFJoMWltZ3pBVWpSTlh9aykzKz1iQF9eSit2UXFadFcKenRrO2dyKENH
PkFNWWRMfnVjPk57P2NSTXRVIzUmcGtTV3tSK1F1X1hLeT5helV8T0UlcDVSY0JBS010Z1EhMTY9
Cno5THtfIzRNMkxpQks7Mio4NXB2YkBGRmBxeUVgQEB5clp5VENuT3w8aEs4PUxCN3I9K0FiUiM5
M0sxZ013QExMIwp6Xn5lX0lsdF9qIz5AUGwpRXxlKWZKdzA+dF42YlphMDJaPXVrYjFraWU4TEhF
anFPPCFDbEd3Szd2dzh4eG55aD0KeihYUjRsbT1ZdzxvbzI5V2VTbyp9QFJ+Rl9vaTA7MGorKCpy
Q08rTHNINHxLYWozbzlCNC1iIXhCXzh1ZndaMkVCCnpwNTFOKik3eSFMP1hxOHR1cEJHfDNPd3pj
KUcheSFTPzlEe2JvUyFLaXcpdTtZZy1oaip7dkRSSHxNQWE1d3BxcAp6YzVoR2ByZmBRYm87dmhn
PHNWTiV6ZztzP3B4KCs3YFkyOyRrZCVnWFhNQWh+N08mUiU0UT45bkdTK3ltbng1VVQKeiQqekJO
cHJeT0R3Pi0lUjxsOCsmeXp0R05wWUQ8azM9RVZmTyMhKkpodVQqP0swZEN+WUw8SkVmY0cmKVQ+
YWcyCnpHYzVUSy1WQShnNHpqajIyJjVTUDJnVlJzVTY0fCRqSSsxNXg3LUt2KStudnR4dUJwUmQo
V2hrMUwqKCoqK1okIQp6KEg5VHZUVXlwQFA2UEI3ZCpnbkpvJV9xbHhCPX03WjtiYEF5aHQ7NVQw
UlJFb2E5KU9laW9JdWctPFdRZ3tHUjYKek5FRTJIcX03K0BIak4wWEZtKTt1NkNBPylhQShKeW1S
YmtxPUh9fHVzKkxZRGg7WEwoa2gkWGVTX308OEVIP3ZyCnpPVk87YnpGckBZTSlne1VaX3h7Ry1q
I0EpVHdIcFJXYGxRM0pSYXEhQHtsMXVZdThVUUx1U3U2ZXVqcnBsfiR3Kwp6dV9HVjdgLXhHbll+
VEVDMEReNl5qcDUrV2dRLUswbzlDYmdHSmFzMUQzcj82X09tZHhDeXZWeUwmQiNVNX4+cUwKenFP
fVAzYig9elErezQ0MkcyOHswQF5ObFpxNlZKIW1sfGhjZUFVaSN0YS1MZXFnSVE9Vih9d1cwXkgp
KyY8aFM2CnpGaHd5ZUIxWXZFbTZjMzEwfWYjI2Q9e3toVV43ciN2SzQxfm1iMUd4MmtZI1RvKTNZ
eV5sKjY1NWsmbU8lcWEhIQp6P2RfPWplcy0yMWo1Wkl6X35YVHpaXnBNPHlEMiNHemxQMWgoPjlC
JCNHUXE+YShULThfb3BMPEx0TEFFcWZ3bHwKengmUzwxO1laek0ldGpiWUB4Jm55KzBrI1ZzTFFa
I0wzMH5TZDU9OVpHU2NAfjwmc0FaMEUoem5VYyhtUD5XVXROCnpSI1l+QytrWCo/KFVVKjlpeVB9
TSplJm1BJTlCY145V057YT5LPUJjI0Jia1QtMlNZd3NqMV98YHZDcUFJO21aVgp6WFUkMDhSUDhq
NzQ2KVFOTDlHa0dKQilKb0B7N2pFTVRmdSVXMDZXc0c3KWxVKSNhfjQ1REt4UTw1YWZOJFQqY3sK
ekJwblUmZFNJJTNjaytDWUZQI3dFbl5gWDAhb290emghIyEyQ1JSfmRgIWtqNTkwdjdHS0RGej88
SHQ3PG9FQX1DCnpGRGN6PmdEMUEpUW9qTGtocC0hbGx4dklmPEBlJnNXeS0md0s4PystQkxMJCEj
MDVTUypBQzVSQUQ0MmdJMj15bgp6czRxd3FQbCl4JURNTXpuQ1hJPzYwZlA9N1R+K0N5QCYjeUc+
U0UlbFVEI0FHcSoqU2d7TnZtV2lQYzE0YW8ldlAKek8+cEIpdXI7akpzfERFJlFEcX02bm5vKnI5
RXQjRkJ1I3ZRUFQrMkc+eiRVYXRnVVprYnJyZjIpXjJ8TnxDYEFrCnF5d2VeYG1VcHRldVkwd2FX
YUJOXiY9YVRiYVhzWlJYanpDfUwxQzMmcGx7KGFVZ3wmQz8+WlgqCgpsaXRlcmFsIDM4MzIKemNt
ZUh+WWZ3e0g1UCZ6fjYtbDZGQjA7SHhBVDRNYDV9dnNfTn4ocmhyeHFXaDd6OWFwTVhHM15tX1ZC
bjYwfSs/CnorTD0wMWxvb3V7VnJ6OykxfFBmPEslZzJWczE+RFlQXjV4MkI0VTY1QSpBPS12PnA0
eSptMCkrbkVXXzlYVjJOKQp6b2M7RWt6NUNXZ3QjRVBuYk9yI0ltRzgwRjBvWnYxNUlIMHdJXiNh
dy01KHcxP1RxQj9PaUUyaitMa0hZNGh6RlcKejd8ZihGQnJHQH42aytte2Y8cj0rblNBQyNNbzRs
dmxnUzg0amRwWkhII3NLMHprJkBHPzAybFReYm1rK19EYzVCCnpfMVdMXz53P3hMNH0weE54Um0w
JCFTbE44Sz9FZ35USWUhXkBXN0Z1QUM/IyUpRWR0SnslVUp2eU5vUHQ0STZUYQp6YHBFWU92WTtl
JHtJMkhFQjMpbCQ/WGJ4aT5GZ0pBM0Q3Pkt4al9lRGMqLTIkYnQoclM9I18tPnZ0TFZPVF5nMlUK
ejs9VSVIJWU2ZEgpNFNDR0ReZ1hlYWY2MSVvIz5uYDhUSSo7M2lwc0JCbXlLNyQ+OG0kZkVOa3BA
NmJKU0VSKktfCnpFS3w+eXRubVpLSyglIU5qZ3ZidSpzYEFgJmRUeXZmYj4/ZDh4YnpzKThMJnxK
aT8yRiQ3OV5rQCFRPG8rRUswMgp6R0hEdjlHZCpkVj9GMHkwPEo3VTVXZ2ZhT1AqenUpJSpNT2lp
NDJlflBvODVCcEhCK19YYHpafVF+MzY9c1FUMWgKejBgVFNyelZleWJJTyp+fUpBSlpgYSZsWnh1
fit+dTluJFNFd2tuWkBOQlRCUS1zVj95P3ptN3xUNTRjPCFvOT1NCnppYCptPXFpWik0ei1qOU5u
TlRiaVhKbktRI1JBbHtLa3s0Rjt8PUsjcXFGTChsKil9OExBNWs/QlR2YFc2KDFpVAp6WHI9KzJK
JEdWWEozQGx8Z2gtRDdiU1l5YHJGfXVoPm9CQUZaTkcrVmU4YmJIPV8xa2owVmV7cV40dlktQ1gt
bWAKejBGPE9MUm4/X1NMOVJzYmptZSU5aWpGLW9xakBRXz80aHxMbksjcGtBb1c9Zz9wOW48QkRm
SVNIeT9QNV9pdDlACno/Kmk1N2ZAJClpcU18Y3ImT35+LWZJPmlDd1l6eUtAWTJYfXhjV303RDtg
NWxqNldWV2c8cCNzT0paPCZvNE1SSwp6UGBnUXRvOXRCNyYldV5lYylhUDBkcjg9eV56fGJWWmwy
aEozTTA4PT9geU12YW1WSn47QUNaRzNBJD1KXn1ZWmQKenszRU9wM05SUzIjUD5oQkQqcm5iQTc4
VkokUWo9JDZiPkkxMDNaUzQqVz9DK3A8ZzV4aUFJam4zNG5OdU9HcVdmCnojYShxZClkUXNmQHxH
Py1ocX5NYyhpaWljMUZZbHR5ayVDUWl1VkVLR2YpSztoQUZ+fXR+RUM5SSp1a21EXzVvdAp6NEdz
P0tzPFNkOSs8KyZraCokV1B1eVg1YVlTTlRjOzRQdCVGZ3VMJTR3Sk93X3koZWZkPjx5PE58ZEZ7
d1RFe3IKelJjc19eSXVUQjhkWWwpQTJ8WTIwMCZ8cDJEPGIqdFMlJjZAJXZKYmQha2NIVCM9aVFA
enVgKHhQbWUlcEs5NWxwCno4bDYjcGJjUW9ROFlHe0sjVWBwPXZTaTcoZUhqNGFiNkBPQnp3ZUsk
OV9FRk9KJHM7VFlISXBzd0xQVCU2b2A4ewp6OSgmI0RmQTA+Vkg4TGJfejY8YH1GR2UlbnFPZUgx
SCt7JjxzY2U1aGZxVFFOYl8wfGpqI29yVENRZ0B1KVVMOHcKelJhSUwlPzdKSVZybyVKdXMoVGQz
RiZkNEpvQj5KSUpJbDNOdHktLTxiKGFZREhialR3MzxTdl5UNDdXYXNEZT5BCno4I3p0dmk9QW0r
VVM0ZiZaNmp1SGtqfDlmJmxCZTZvPCk1bTFrQzB6bk17bnNIXzVBVTk8ZHxBYUxxMkQ7NT5mVQp6
PGt4Xl9Se3lDMzxabWVfO312byVTU0hOTyVvR1lNZT9DY29rP2teVEEjSW1nKSFOQD1TVjhQej5h
RD1tJWRObXQKemRkWUlWZWpDT3RnQDJURTBRRUNpX3ktPkUhSW9NMG9gWUFydE9ieFpCQj52TCtQ
JGxhMm5WbDk/RFM4YkpoQGlICno2ekFCMz5lbTI2T0VDYylaQ3MlP1JIQWQqe15CdFlmQiYtfHQ0
ZGR3bCREam04KGFZUHJWUGwwNT1vdEloby1HOQp6LXRaUUhRfU9fe2B7dkQ/KzZ3fXNjeylna0Aw
Yzk2QzhBYFoxJjktZGo7elIzPiU/Q2ZjQzJ0TEtwOHxGRDwpNUAKeiNwdVRCN15uTnJiRyV8IXRG
czFyYXwxIU9uMEM+Kzs1M2JsMU8yMGVVJkNKPGQmc1ohWC1lcEh5M3VGYEZ2S0Z5CnopeUlgWVlX
TUdoZ1YpIVBmV3ElNGNVKHE9e0E3MTRgc2Jjbihlc1VJdldERU9JSENHQUVuTTNfR0JtV2F4UDxf
Wgp6dWJgSjQ/eHlqSksrWWpMdz1PTyZ1NjJ3Sih2QysmSEVMXkNtSFAqfkBydVE2UGBuNWxEe3JX
UihLXzBATy1Tdj0KentMTCFzcW9XVk4xVUxHVmRMa2ZrRkx+RSZCO15HdnUwQD98OHFvXjJoYCY1
TStGSy07TD8xQj5jTz1iMTw1KHNQCnpuelI3fEZlcD9YbzZuJCk3ampCdnlNeUBtYDl6N1RidkZq
a2VyZFlMZjlNa2FPRDhlNCMmKU1RYnZ7JCleVWAqRgpmM1g9YTc2MF5xelZAVHE8Z3x7aV9TMUdL
RmpBRUI5PEtfSmM0O2J1cAoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9t
YXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL21hdGhtbC9vcGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1leHBlY3Rl
ZC50eHQKaW5kZXggODkyZTkyNWExN2IuLjI1OTFjZjNmNDIxIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvbWF0aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvbWF0aG1sL29wZW50eXBlL29w
ZW50eXBlLXN0cmV0Y2h5LWV4cGVjdGVkLnR4dApAQCAtMSw4ICsxLDggQEAKIGxheWVyIGF0ICgw
LDApIHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAotbGF5
ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MzM5Ci0gIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBz
aXplIDgwMHgzMzkKLSAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCwxNikgc2l6ZSA3ODR4MzA3
CitsYXllciBhdCAoMCwwKSBzaXplIDgwMHgzNTAKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgw
LDApIHNpemUgODAweDM1MAorICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDE2KSBzaXplIDc4
NHgzMTgKICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXplIDc4NHgzNQogICAgICAg
ICBSZW5kZXJNYXRoTUxNYXRoIHttYXRofSBhdCAoMCwyMCkgc2l6ZSAyNngxMQogICAgICAgICAg
IFJlbmRlck1hdGhNTFJvdyB7bXJvd30gYXQgKDAsMCkgc2l6ZSAyNngxMQpAQCAtMzUsMTAgKzM1
LDEwIEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDMzOQogICAgICAgICAgICAgICAgIFJlbmRl
clRleHQgeyN0ZXh0fSBhdCAoMCwtMykgc2l6ZSAyeDAKICAgICAgICAgICAgICAgICAgIHRleHQg
cnVuIGF0ICgwLC0zKSB3aWR0aCAyOiAiXHh7MjE5Rn0iCiAgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAotICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDIyMSkg
c2l6ZSA3ODR4ODYKLSAgICAgICAgUmVuZGVyTWF0aE1MTWF0aCB7bWF0aH0gYXQgKDAsMCkgc2l6
ZSA4NHg4MgotICAgICAgICAgIFJlbmRlck1hdGhNTFJvdyB7bXJvd30gYXQgKDAsMCkgc2l6ZSA4
NHg4MgotICAgICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3Ige21vfSBhdCAoMCwwKSBzaXpl
IDg0eDgyCisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMjIxKSBzaXplIDc4NHg5NworICAg
ICAgICBSZW5kZXJNYXRoTUxNYXRoIHttYXRofSBhdCAoMCwwKSBzaXplIDk0eDkzCisgICAgICAg
ICAgUmVuZGVyTWF0aE1MUm93IHttcm93fSBhdCAoMCwwKSBzaXplIDk0eDkzCisgICAgICAgICAg
ICBSZW5kZXJNYXRoTUxPcGVyYXRvciB7bW99IGF0ICgwLDApIHNpemUgOTR4OTMKICAgICAgICAg
ICAgICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsMCkgc2l6ZSAxMHgxMgogICAgICAg
ICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCw2KSBzaXplIDEweDAKICAgICAgICAg
ICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDYpIHdpZHRoIDEwOiAiXHh7MkExQn0iCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggN2I1ZjQyNzgwNTguLjM2MGJmYmMwMGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTgtMTItMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtGcmVlVHlwZV0gUmVtb3ZlIEhhcmZCdXp6RmFjZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3YXMgdXNlZCB0byBzaGFy
ZSB0aGUgY29tbW9uIGltcGxlbWVudGF0aW9uIHdpdGggdGhlIGNocm9taXVtIHBvcnQsIGJ1dCBu
b3cgdGhhdCBvbmx5IGZyZWV0eXBlIGJhc2VkIHBvcnRzCisgICAgICAgIHVzZSBpdCwgaXQgY2Fu
IGJlIHJlbW92ZWQgYW5kIHVzZSBoYl9mdF9mYWNlX2NyZWF0ZV9jYWNoZWQoKSBpbnN0ZWFkLiBX
ZSBkb24ndCBuZWVkIHRoZSBnbHlwaCBjYWNoZSBlaXRoZXIsCisgICAgICAgIHNpbmNlIHdlIGFy
ZSBhbHJlYWR5IGNhY2hpbmcgZ2x5cGhzIGluIEZvbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9G
cmVlVHlwZS5jbWFrZTogUmVtb3ZlIEhhcmZCdXp6RmFjZUNhaXJvLmNwcCBhbmQgSGFyZkJ1enpG
YWNlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmg6
IFJlbW92ZSBIYXJmQnV6ekZhY2UgbWVtYmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZyZWV0eXBlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHA6IEFkZCBtaXNzaW5n
IGluY2x1ZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRm
b3JtRGF0YUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
Om9wZXJhdG9yPSk6IFJlbW92ZSBtX2hhcmZCdXp6RmFjZSBoYW5kbGluZy4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZU9wZW5UeXBlTWF0aEhhcmZCdXp6Rm9udCBj
b25zdCk6IE5ldyBmdW50Y3Rpb24gdG8gY3JlYXRlIGEgaGJfZm9udF90IGZvcgorICAgICAgICBP
cGVuVHlwZSBtYXRoLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBs
ZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZsb2F0VG9I
YXJmQnV6elBvc2l0aW9uKTogTW92ZWQgZnJvbSBIYXJmQnV6ekZhY2VDYWlyby5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmhhcmZCdXp6Rm9udEZ1bmN0aW9ucyk6IEFsc28gbW92ZWQgZnJvbSBIYXJmQnV6
ekZhY2VDYWlyby5jcHAsIGJ1dCBpbXBsZW1lbnQgZ2V0X25vbWluYWwvdmFyaWF0aW9uCisgICAg
ICAgIGZ1bmN0aW9ucyB3aGVuIHVzaW5nIEhhcmZCdXp6ID49IDEuMi4zIGFuZCB1c2UgRm9udDo6
Z2x5cGhGb3JDaGFyYWN0ZXIoKSB0byBtYWtlIGl0IHNpbXBsZXIuCisgICAgICAgIChXZWJDb3Jl
Ojpmb250RmVhdHVyZXMpOiBNb3ZlZCBmcm9tIEhhcmZCdXp6RmFjZUNhaXJvLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OmZpbmRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKTogTW92
ZWQgZnJvbSBIYXJmQnV6ekZhY2UuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRD
b250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6IENyZWF0ZSB0
aGUgSGFyZkJ1enogZmFjZSBhbmQgZm9udCBoZXJlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ2Fpcm8uY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hiVW5pcXVlUHRyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpIYlB0ckRlbGV0ZXI8aGJfZmFjZV90Pjo6b3BlcmF0b3IoKSBjb25z
dCk6IEFkZCBkZWxldGVyIGZvciBoYl9mYWNlX3QuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcGVu
VHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKTogVXNlIEZvbnRQbGF0Zm9ybURhdGE6OmNy
ZWF0ZU9wZW5UeXBlTWF0aEhhcmZCdXp6Rm9udCgpLgorCiAyMDE4LTEyLTEwICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbRnJlZVR5cGVdIEFk
ZCBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHZhcmlhdGlvbiBmb250cwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJlZVR5cGUuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9GcmVlVHlwZS5jbWFrZQppbmRleCA5OGYzZWUxODVjOS4uYzE2OTc3ZjQ5N2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZyZWVUeXBlLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZyZWVUeXBlLmNtYWtlCkBAIC0xMSw3ICsxMSw2IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuY3BwCiApCiAKIGlmIChQT1JUIFNUUkVRVUFMICJH
VEsiKQpAQCAtMjcsOCArMjYsNiBAQCBlbmRpZiAoKQogaWYgKFVTRV9DQUlSTykKICAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvSGFyZmJ1enpORy5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6ekZhY2VDYWlyby5jcHAKICAgICApCiBlbmRpZiAoKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXgg
YmY2MjNhZGQzMmYuLjhhMTdjOGJlN2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC00MCw3ICs0MCw3IEBACiAKICNp
ZiBVU0UoRlJFRVRZUEUpCiAjaW5jbHVkZSAiRmNVbmlxdWVQdHIuaCIKLSNpbmNsdWRlICJIYXJm
QnV6ekZhY2UuaCIKKyNpbmNsdWRlICJIYlVuaXF1ZVB0ci5oIgogI2luY2x1ZGUgIlJlZlB0ckZv
bnRjb25maWcuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjZW5kaWYKQEAgLTE2OCw3ICsxNjgsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShGUkVFVFlQRSkKLSAgICBIYXJmQnV6ekZhY2Um
IGhhcmZCdXp6RmFjZSgpIGNvbnN0OworICAgIEhiVW5pcXVlUHRyPGhiX2ZvbnRfdD4gY3JlYXRl
T3BlblR5cGVNYXRoSGFyZkJ1enpGb250KCkgY29uc3Q7CiAgICAgYm9vbCBoYXNDb21wYXRpYmxl
Q2hhcm1hcCgpIGNvbnN0OwogICAgIEZjUGF0dGVybiogZmNQYXR0ZXJuKCkgY29uc3Q7CiAgICAg
Ym9vbCBpc0ZpeGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkV2lkdGg7IH0KQEAgLTI0
OSw3ICsyNDksNiBAQCBwcml2YXRlOgogCiAjaWYgVVNFKEZSRUVUWVBFKQogICAgIFJlZlB0cjxG
Y1BhdHRlcm4+IG1fcGF0dGVybjsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXJmQnV6
ekZhY2U+IG1faGFyZkJ1enpGYWNlOwogI2VuZGlmCiAKICAgICAvLyBUaGUgdmFsdWVzIGJlbG93
IGFyZSBjb21tb24gdG8gYWxsIHBvcnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhRnJlZVR5cGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YUZyZWVUeXBlLmNwcAppbmRleCA4ODIxZDQyYTcyOS4uMTM3NjVmNDNkYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udEN1c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8ZnQyYnVpbGQu
aD4KICNpbmNsdWRlIEZUX01PRFVMRV9ICisjaW5jbHVkZSA8bXV0ZXg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKaW5k
ZXggYzVlMTQ4OTY5NWMuLjYxNjIyODE5YzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9y
bURhdGFGcmVlVHlwZS5jcHAKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxmb250Y29uZmln
L2ZjZnJlZXR5cGUuaD4KICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfVFJVRVRZ
UEVfVEFCTEVTX0gKKyNpbmNsdWRlIDxoYi1mdC5oPgorI2luY2x1ZGUgPGhiLW90Lmg+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtMTQ0LDkgKzE0Niw2IEBAIEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6
Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKIAogICAgIG1fc2NhbGVk
Rm9udCA9IG90aGVyLm1fc2NhbGVkRm9udDsKIAotICAgIC8vIFRoaXMgd2lsbCBiZSByZS1jcmVh
dGVkIG9uIGRlbWFuZC4KLSAgICBtX2hhcmZCdXp6RmFjZSA9IG51bGxwdHI7Ci0KICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTE4NCwxMyArMTgzLDYgQEAgRm9udFBsYXRmb3JtRGF0YSBGb250
UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhTaXplKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNvdXJj
ZSwKICAgICByZXR1cm4gY29weTsKIH0KIAotSGFyZkJ1enpGYWNlJiBGb250UGxhdGZvcm1EYXRh
OjpoYXJmQnV6ekZhY2UoKSBjb25zdAotewotICAgIGlmICghbV9oYXJmQnV6ekZhY2UpCi0gICAg
ICAgIG1faGFyZkJ1enpGYWNlID0gc3RkOjptYWtlX3VuaXF1ZTxIYXJmQnV6ekZhY2U+KGNvbnN0
X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSY+KCp0aGlzKSwgaGFzaCgpKTsKLSAgICByZXR1cm4gKm1f
aGFyZkJ1enpGYWNlOwotfQotCiBGY1BhdHRlcm4qIEZvbnRQbGF0Zm9ybURhdGE6OmZjUGF0dGVy
bigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGF0dGVybi5nZXQoKTsKQEAgLTMwMSw0ICsyOTMs
MTggQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9udFBsYXRmb3JtRGF0YTo6b3BlblR5cGVUYWJs
ZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
V1RGTW92ZShkYXRhKSk7CiB9CiAKK0hiVW5pcXVlUHRyPGhiX2ZvbnRfdD4gRm9udFBsYXRmb3Jt
RGF0YTo6Y3JlYXRlT3BlblR5cGVNYXRoSGFyZkJ1enpGb250KCkgY29uc3QKK3sKKyAgICBDYWly
b0Z0RmFjZUxvY2tlciBjYWlyb0Z0RmFjZUxvY2tlcihtX3NjYWxlZEZvbnQuZ2V0KCkpOworICAg
IEZUX0ZhY2UgZnRGYWNlID0gY2Fpcm9GdEZhY2VMb2NrZXIuZnRGYWNlKCk7CisgICAgaWYgKCFm
dEZhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSGJVbmlxdWVQdHI8aGJfZmFj
ZV90PiBmYWNlKGhiX2Z0X2ZhY2VfY3JlYXRlX2NhY2hlZChmdEZhY2UpKTsKKyAgICBpZiAoIWhi
X290X21hdGhfaGFzX2RhdGEoZmFjZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIEhiVW5pcXVlUHRyPGhiX2ZvbnRfdD4oaGJfZm9udF9jcmVhdGUoZmFjZS5n
ZXQoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJI
YXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9D
b21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHAKaW5kZXggMjcxMjNkM2I2ODAuLmIzOGYy
ZTVjODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1
enouY3BwCkBAIC0yNiwxMSArMjYsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJIYlVuaXF1ZVB0ci5oIgogI2lu
Y2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgPGhiLWZ0
Lmg+CiAjaW5jbHVkZSA8aGItaWN1Lmg+CiAKKyNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQor
I2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBzdGF0aWMgaW5saW5lIGZsb2F0IGhhcmZCdXp6UG9zaXRpb25Ub0Zsb2F0KGhiX3Bv
c2l0aW9uX3QgdmFsdWUpCkBAIC0zOCw2ICs0NCw5MCBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGhh
cmZCdXp6UG9zaXRpb25Ub0Zsb2F0KGhiX3Bvc2l0aW9uX3QgdmFsdWUpCiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkgLyAoMSA8PCAxNik7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
aGJfcG9zaXRpb25fdCBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihmbG9hdCB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aGJfcG9zaXRpb25fdD4odmFsdWUgKiAoMSA8PCAxNikpOwor
fQorCitzdGF0aWMgaW5saW5lIGhiX3Bvc2l0aW9uX3QgZG91YmxlVG9IYXJmQnV6elBvc2l0aW9u
KGRvdWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aGJfcG9zaXRpb25fdD4o
dmFsdWUgKiAoMSA8PCAxNikpOworfQorCitzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmQnV6
ekZvbnRGdW5jdGlvbnMoKQoreworICAgIHN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGZvbnRGdW5j
dGlvbnMgPSBudWxscHRyOworCisgICAgLy8gV2UgZG9uJ3Qgc2V0IGNhbGxiYWNrIGZ1bmN0aW9u
cyB3aGljaCB3ZSBjYW4ndCBzdXBwb3J0LgorICAgIC8vIEhhcmZidXp6IHdpbGwgdXNlIHRoZSBm
YWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpZiB0aGV5IGFyZW4ndCBzZXQuCisgICAgaWYgKCFmb250
RnVuY3Rpb25zKSB7CisgICAgICAgIGZvbnRGdW5jdGlvbnMgPSBoYl9mb250X2Z1bmNzX2NyZWF0
ZSgpOworI2lmIEhCX1ZFUlNJT05fQVRMRUFTVCgxLCAyLCAzKQorICAgICAgICBoYl9mb250X2Z1
bmNzX3NldF9ub21pbmFsX2dseXBoX2Z1bmMoZm9udEZ1bmN0aW9ucywgW10oaGJfZm9udF90Kiwg
dm9pZCogY29udGV4dCwgaGJfY29kZXBvaW50X3QgdW5pY29kZSwgaGJfY29kZXBvaW50X3QqIGds
eXBoLCB2b2lkKikgLT4gaGJfYm9vbF90IHsKKyAgICAgICAgICAgIGF1dG8mIGZvbnQgPSAqc3Rh
dGljX2Nhc3Q8Rm9udCo+KGNvbnRleHQpOworICAgICAgICAgICAgKmdseXBoID0gZm9udC5nbHlw
aEZvckNoYXJhY3Rlcih1bmljb2RlKTsKKyAgICAgICAgICAgIHJldHVybiAhISpnbHlwaDsKKyAg
ICAgICAgfSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRf
dmFyaWF0aW9uX2dseXBoX2Z1bmMoZm9udEZ1bmN0aW9ucywgW10oaGJfZm9udF90Kiwgdm9pZCog
Y29udGV4dCwgaGJfY29kZXBvaW50X3QgdW5pY29kZSwgaGJfY29kZXBvaW50X3QgdmFyaWF0aW9u
LCBoYl9jb2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQqKSAtPiBoYl9ib29sX3QgeworICAgICAgICAg
ICAgYXV0byYgZm9udCA9ICpzdGF0aWNfY2FzdDxGb250Kj4oY29udGV4dCk7CisgICAgICAgICAg
ICBhdXRvKiBzY2FsZWRGb250ID0gZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7Cisg
ICAgICAgICAgICBBU1NFUlQoc2NhbGVkRm9udCk7CisKKyAgICAgICAgICAgIENhaXJvRnRGYWNl
TG9ja2VyIGNhaXJvRnRGYWNlTG9ja2VyKHNjYWxlZEZvbnQpOworICAgICAgICAgICAgaWYgKEZU
X0ZhY2UgZnRGYWNlID0gY2Fpcm9GdEZhY2VMb2NrZXIuZnRGYWNlKCkpIHsKKyAgICAgICAgICAg
ICAgICAqZ2x5cGggPSBGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXgoZnRGYWNlLCB1bmljb2Rl
LCB2YXJpYXRpb24pOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSwgbnVsbHB0ciwgbnVs
bHB0cik7CisjZWxzZQorICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9mdW5jKGZvbnRG
dW5jdGlvbnMsIFtdKGhiX2ZvbnRfdCosIHZvaWQqIGNvbnRleHQsIGhiX2NvZGVwb2ludF90IHVu
aWNvZGUsIGhiX2NvZGVwb2ludF90LCBoYl9jb2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQqKSAtPiBo
Yl9ib29sX3QgeworICAgICAgICAgICAgYXV0byYgZm9udCA9ICpzdGF0aWNfY2FzdDxGb250Kj4o
Y29udGV4dCk7CisgICAgICAgICAgICAqZ2x5cGggPSBmb250LmdseXBoRm9yQ2hhcmFjdGVyKHVu
aWNvZGUpOworICAgICAgICAgICAgcmV0dXJuICEhKmdseXBoOworICAgICAgICB9LCBudWxscHRy
LCBudWxscHRyKTsKKyNlbmRpZgorICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX2Fk
dmFuY2VfZnVuYyhmb250RnVuY3Rpb25zLCBbXShoYl9mb250X3QqLCB2b2lkKiBjb250ZXh0LCBo
Yl9jb2RlcG9pbnRfdCBwb2ludCwgdm9pZCopIC0+IGhiX2Jvb2xfdCB7CisgICAgICAgICAgICBh
dXRvJiBmb250ID0gKnN0YXRpY19jYXN0PEZvbnQqPihjb250ZXh0KTsKKyAgICAgICAgICAgIGF1
dG8qIHNjYWxlZEZvbnQgPSBmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKTsKKyAgICAg
ICAgICAgIEFTU0VSVChzY2FsZWRGb250KTsKKworICAgICAgICAgICAgY2Fpcm9fdGV4dF9leHRl
bnRzX3QgZ2x5cGhFeHRlbnRzOworICAgICAgICAgICAgY2Fpcm9fZ2x5cGhfdCBnbHlwaCA9IHsg
cG9pbnQsIDAsIDAgfTsKKyAgICAgICAgICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVu
dHMoc2NhbGVkRm9udCwgJmdseXBoLCAxLCAmZ2x5cGhFeHRlbnRzKTsKKworICAgICAgICAgICAg
Ym9vbCBoYXNWZXJ0aWNhbEdseXBocyA9IGdseXBoRXh0ZW50cy55X2FkdmFuY2U7CisgICAgICAg
ICAgICByZXR1cm4gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGhhc1ZlcnRpY2FsR2x5cGhzID8g
LWdseXBoRXh0ZW50cy55X2FkdmFuY2UgOiBnbHlwaEV4dGVudHMueF9hZHZhbmNlKTsKKyAgICAg
ICAgfSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5
cGhfaF9vcmlnaW5fZnVuYyhmb250RnVuY3Rpb25zLCBbXShoYl9mb250X3QqLCB2b2lkKiwgaGJf
Y29kZXBvaW50X3QsIGhiX3Bvc2l0aW9uX3QqLCBoYl9wb3NpdGlvbl90Kiwgdm9pZCopIC0+IGhi
X2Jvb2xfdCB7CisgICAgICAgICAgICAvLyBKdXN0IHJldHVybiB0cnVlLCBmb2xsb3dpbmcgdGhl
IHdheSB0aGF0IEhhcmZidXp6LUZyZWVUeXBlIGltcGxlbWVudGF0aW9uIGRvZXMuCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAg
ICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZXh0ZW50c19mdW5jKGZvbnRGdW5jdGlvbnMsIFtd
KGhiX2ZvbnRfdCosIHZvaWQqIGNvbnRleHQsIGhiX2NvZGVwb2ludF90IHBvaW50LCBoYl9nbHlw
aF9leHRlbnRzX3QqIGV4dGVudHMsIHZvaWQqKSAtPiBoYl9ib29sX3QgeworICAgICAgICAgICAg
YXV0byYgZm9udCA9ICpzdGF0aWNfY2FzdDxGb250Kj4oY29udGV4dCk7CisgICAgICAgICAgICBh
dXRvKiBzY2FsZWRGb250ID0gZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7CisgICAg
ICAgICAgICBBU1NFUlQoc2NhbGVkRm9udCk7CisKKyAgICAgICAgICAgIGNhaXJvX3RleHRfZXh0
ZW50c190IGdseXBoRXh0ZW50czsKKyAgICAgICAgICAgIGNhaXJvX2dseXBoX3QgZ2x5cGggPSB7
IHBvaW50LCAwLCAwIH07CisgICAgICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRl
bnRzKHNjYWxlZEZvbnQsICZnbHlwaCwgMSwgJmdseXBoRXh0ZW50cyk7CisKKyAgICAgICAgICAg
IGJvb2wgaGFzVmVydGljYWxHbHlwaHMgPSBnbHlwaEV4dGVudHMueV9hZHZhbmNlOworICAgICAg
ICAgICAgZXh0ZW50cy0+eF9iZWFyaW5nID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGdseXBo
RXh0ZW50cy54X2JlYXJpbmcpOworICAgICAgICAgICAgZXh0ZW50cy0+eV9iZWFyaW5nID0gZG91
YmxlVG9IYXJmQnV6elBvc2l0aW9uKGhhc1ZlcnRpY2FsR2x5cGhzID8gLWdseXBoRXh0ZW50cy55
X2JlYXJpbmcgOiBnbHlwaEV4dGVudHMueV9iZWFyaW5nKTsKKyAgICAgICAgICAgIGV4dGVudHMt
PndpZHRoID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGhhc1ZlcnRpY2FsR2x5cGhzID8gLWds
eXBoRXh0ZW50cy5oZWlnaHQgOiBnbHlwaEV4dGVudHMud2lkdGgpOworICAgICAgICAgICAgZXh0
ZW50cy0+aGVpZ2h0ID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGhhc1ZlcnRpY2FsR2x5cGhz
ID8gZ2x5cGhFeHRlbnRzLndpZHRoIDogZ2x5cGhFeHRlbnRzLmhlaWdodCk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAgICAg
aGJfZm9udF9mdW5jc19tYWtlX2ltbXV0YWJsZShmb250RnVuY3Rpb25zKTsKKyAgICB9CisgICAg
cmV0dXJuIGZvbnRGdW5jdGlvbnM7Cit9CisKIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxl
eFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKGhiX2J1ZmZlcl90KiBidWZmZXIsIGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwg
dW5zaWduZWQgc3RyaW5nTGVuZ3RoLCB1bnNpZ25lZCBpbmRleEJlZ2luLCB1bnNpZ25lZCBpbmRl
eEVuZCkKICAgICA6IG1faW5pdGlhbEFkdmFuY2UoMCwgMCkKICAgICAsIG1fZm9udChmb250KQpA
QCAtODMsMjUgKzE3MywyOCBAQCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVu
OjpDb21wbGV4VGV4dFJ1bihoYl9idWZmZXJfdCogYnVmZmVyLCBjb25zdAogICAgIH0KIH0KIAot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGhiRW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKTsK
K3N0YXRpYyBjb25zdCBoYl90YWdfdCBzX3ZlcnRUYWcgPSBIQl9UQUcoJ3YnLCAnZScsICdyJywg
J3QnKTsKK3N0YXRpYyBjb25zdCBoYl90YWdfdCBzX3ZydDJUYWcgPSBIQl9UQUcoJ3YnLCAncics
ICd0JywgJzInKTsKK3N0YXRpYyBjb25zdCBoYl90YWdfdCBzX2tlcm5UYWcgPSBIQl9UQUcoJ2sn
LCAnZScsICdyJywgJ24nKTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hiRW5kID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KC0xKTsKIAogc3RhdGljIFZlY3RvcjxoYl9mZWF0dXJlX3QsIDQ+IGZv
bnRGZWF0dXJlcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgRm9udE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKQogewogICAgIFZlY3RvcjxoYl9mZWF0dXJlX3QsIDQ+IGZlYXR1cmVzOwogCiAgICAg
aWYgKG9yaWVudGF0aW9uID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKLSAgICAgICAg
ZmVhdHVyZXMuYXBwZW5kKHsgSGFyZkJ1enpGYWNlOjp2ZXJ0VGFnLCAxLCAwLCBoYkVuZCB9KTsK
LSAgICAgICAgZmVhdHVyZXMuYXBwZW5kKHsgSGFyZkJ1enpGYWNlOjp2cnQyVGFnLCAxLCAwLCBo
YkVuZCB9KTsKKyAgICAgICAgZmVhdHVyZXMuYXBwZW5kKHsgc192ZXJ0VGFnLCAxLCAwLCBzX2hi
RW5kIH0pOworICAgICAgICBmZWF0dXJlcy5hcHBlbmQoeyBzX3ZydDJUYWcsIDEsIDAsIHNfaGJF
bmQgfSk7CiAgICAgfQogCi0gICAgaGJfZmVhdHVyZV90IGtlcm5pbmcgPSB7IEhhcmZCdXp6RmFj
ZTo6a2VyblRhZywgMCwgMCwgaGJFbmQgfTsKKyAgICBoYl9mZWF0dXJlX3Qga2VybmluZyA9IHsg
c19rZXJuVGFnLCAwLCAwLCBzX2hiRW5kIH07CiAgICAgaWYgKGZvbnQuZW5hYmxlS2VybmluZygp
KQogICAgICAgICBrZXJuaW5nLnZhbHVlID0gMTsKICAgICBmZWF0dXJlcy5hcHBlbmQoV1RGTW92
ZShrZXJuaW5nKSk7CiAKICAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBmb250LmZvbnREZXNjcmlw
dGlvbigpLmZlYXR1cmVTZXR0aW5ncygpKSB7CiAgICAgICAgIGF1dG8mIHRhZyA9IGZlYXR1cmUu
dGFnKCk7Ci0gICAgICAgIGZlYXR1cmVzLmFwcGVuZCh7IEhCX1RBRyh0YWdbMF0sIHRhZ1sxXSwg
dGFnWzJdLCB0YWdbM10pLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZmVhdHVyZS52YWx1ZSgpKSwg
MCwgaGJFbmQgfSk7CisgICAgICAgIGZlYXR1cmVzLmFwcGVuZCh7IEhCX1RBRyh0YWdbMF0sIHRh
Z1sxXSwgdGFnWzJdLCB0YWdbM10pLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZmVhdHVyZS52YWx1
ZSgpKSwgMCwgc19oYkVuZCB9KTsKICAgICB9CiAKICAgICByZXR1cm4gZmVhdHVyZXM7CkBAIC0x
NjgsNiArMjYxLDI3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEhCUnVuPiBmaW5kTmV4dFJ1bihj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoCiAgICAgcmV0dXJuIHN0ZDo6
b3B0aW9uYWw8SEJSdW4+KHsgc3RhcnRJbmRleCwgdGV4dEl0ZXJhdG9yLmN1cnJlbnRJbmRleCgp
LCBjdXJyZW50U2NyaXB0LnZhbHVlKCkgfSk7CiB9CiAKK3N0YXRpYyBoYl9zY3JpcHRfdCBmaW5k
U2NyaXB0Rm9yVmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbihoYl9mYWNlX3QqIGZhY2UpCit7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENvdW50ID0gMzI7CisKKyAgICB1bnNpZ25lZCBz
Y3JpcHRDb3VudCA9IG1heENvdW50OworICAgIGhiX3RhZ190IHNjcmlwdFRhZ3NbbWF4Q291bnRd
OworICAgIGhiX290X2xheW91dF90YWJsZV9nZXRfc2NyaXB0X3RhZ3MoZmFjZSwgSEJfT1RfVEFH
X0dTVUIsIDAsICZzY3JpcHRDb3VudCwgc2NyaXB0VGFncyk7CisgICAgZm9yICh1bnNpZ25lZCBz
Y3JpcHRJbmRleCA9IDA7IHNjcmlwdEluZGV4IDwgc2NyaXB0Q291bnQ7ICsrc2NyaXB0SW5kZXgp
IHsKKyAgICAgICAgdW5zaWduZWQgbGFuZ3VhZ2VDb3VudCA9IG1heENvdW50OworICAgICAgICBo
Yl90YWdfdCBsYW5ndWFnZVRhZ3NbbWF4Q291bnRdOworICAgICAgICBoYl9vdF9sYXlvdXRfc2Ny
aXB0X2dldF9sYW5ndWFnZV90YWdzKGZhY2UsIEhCX09UX1RBR19HU1VCLCBzY3JpcHRJbmRleCwg
MCwgJmxhbmd1YWdlQ291bnQsIGxhbmd1YWdlVGFncyk7CisgICAgICAgIGZvciAodW5zaWduZWQg
bGFuZ3VhZ2VJbmRleCA9IDA7IGxhbmd1YWdlSW5kZXggPCBsYW5ndWFnZUNvdW50OyArK2xhbmd1
YWdlSW5kZXgpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZlYXR1cmVJbmRleDsKKyAgICAgICAg
ICAgIGlmIChoYl9vdF9sYXlvdXRfbGFuZ3VhZ2VfZmluZF9mZWF0dXJlKGZhY2UsIEhCX09UX1RB
R19HU1VCLCBzY3JpcHRJbmRleCwgbGFuZ3VhZ2VJbmRleCwgc192ZXJ0VGFnLCAmZmVhdHVyZUlu
ZGV4KQorICAgICAgICAgICAgICAgIHx8IGhiX290X2xheW91dF9sYW5ndWFnZV9maW5kX2ZlYXR1
cmUoZmFjZSwgSEJfT1RfVEFHX0dTVUIsIHNjcmlwdEluZGV4LCBsYW5ndWFnZUluZGV4LCBzX3Zy
dDJUYWcsICZmZWF0dXJlSW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBoYl9vdF90YWdf
dG9fc2NyaXB0KHNjcmlwdFRhZ3Nbc2NyaXB0SW5kZXhdKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gSEJfU0NSSVBUX0lOVkFMSUQ7Cit9CisKIHZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3Qg
Rm9udCogZm9udCkKIHsKICAgICBpZiAoIWZvbnQpIHsKQEAgLTE5MSwxMyArMzA1LDUwIEBAIHZv
aWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFj
dGVycyhjb25zdCBVQ2hhciogY2hhCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IGF1dG8m
IGZvbnRQbGF0Zm9ybURhdGEgPSBmb250LT5wbGF0Zm9ybURhdGEoKTsKKyAgICBhdXRvKiBzY2Fs
ZWRGb250ID0gZm9udFBsYXRmb3JtRGF0YS5zY2FsZWRGb250KCk7CisgICAgQ2Fpcm9GdEZhY2VM
b2NrZXIgY2Fpcm9GdEZhY2VMb2NrZXIoc2NhbGVkRm9udCk7CisgICAgRlRfRmFjZSBmdEZhY2Ug
PSBjYWlyb0Z0RmFjZUxvY2tlci5mdEZhY2UoKTsKKyAgICBpZiAoIWZ0RmFjZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgSGJVbmlxdWVQdHI8aGJfZmFjZV90PiBmYWNlKGhiX2Z0X2ZhY2VfY3Jl
YXRlX2NhY2hlZChmdEZhY2UpKTsKKyAgICBIYlVuaXF1ZVB0cjxoYl9mb250X3Q+IGhhcmZCdXp6
Rm9udChoYl9mb250X2NyZWF0ZShmYWNlLmdldCgpKSk7CisgICAgaGJfZm9udF9zZXRfZnVuY3Mo
aGFyZkJ1enpGb250LmdldCgpLCBoYXJmQnV6ekZvbnRGdW5jdGlvbnMoKSwgY29uc3RfY2FzdDxG
b250Kj4oZm9udCksIG51bGxwdHIpOworICAgIGNvbnN0IGZsb2F0IHNpemUgPSBmb250UGxhdGZv
cm1EYXRhLnNpemUoKTsKKyAgICBpZiAoZmxvb3JmKHNpemUpID09IHNpemUpCisgICAgICAgIGhi
X2ZvbnRfc2V0X3BwZW0oaGFyZkJ1enpGb250LmdldCgpLCBzaXplLCBzaXplKTsKKyAgICBpbnQg
c2NhbGUgPSBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihzaXplKTsKKyAgICBoYl9mb250X3NldF9z
Y2FsZShoYXJmQnV6ekZvbnQuZ2V0KCksIHNjYWxlLCBzY2FsZSk7CisKKyNpZiBFTkFCTEUoVkFS
SUFUSU9OX0ZPTlRTKQorICAgIEZUX01NX1ZhciogZnRNTVZhcjsKKyAgICBpZiAoIUZUX0dldF9N
TV9WYXIoZnRGYWNlLCAmZnRNTVZhcikpIHsKKyAgICAgICAgVmVjdG9yPEZUX0ZpeGVkLCA0PiBj
b29yZHM7CisgICAgICAgIGNvb3Jkcy5yZXNpemUoZnRNTVZhci0+bnVtX2F4aXMpOworICAgICAg
ICBpZiAoIUZUX0dldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzKGZ0RmFjZSwgY29vcmRzLnNpemUo
KSwgY29vcmRzLmRhdGEoKSkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxoYl92YXJpYXRpb25fdCwg
ND4gdmFyaWF0aW9ucyhjb29yZHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAoRlRfVUludCBp
ID0gMDsgaSA8IGZ0TU1WYXItPm51bV9heGlzOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXJp
YXRpb25zW2ldLnRhZyA9IGZ0TU1WYXItPmF4aXNbaV0udGFnOworICAgICAgICAgICAgICAgIHZh
cmlhdGlvbnNbaV0udmFsdWUgPSBjb29yZHNbaV0gLyA2NTUzNi4wOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaGJfZm9udF9zZXRfdmFyaWF0aW9ucyhoYXJmQnV6ekZvbnQuZ2V0KCksIHZh
cmlhdGlvbnMuZGF0YSgpLCB2YXJpYXRpb25zLnNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAg
RlRfRG9uZV9NTV9WYXIoZnRGYWNlLT5nbHlwaC0+bGlicmFyeSwgZnRNTVZhcik7CisgICAgfQor
I2VuZGlmCisKKyAgICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGhhcmZCdXp6Rm9udC5nZXQoKSk7
CisKICAgICBhdXRvIGZlYXR1cmVzID0gZm9udEZlYXR1cmVzKG1fZm9udCwgZm9udFBsYXRmb3Jt
RGF0YS5vcmllbnRhdGlvbigpKTsKICAgICBIYlVuaXF1ZVB0cjxoYl9idWZmZXJfdD4gYnVmZmVy
KGhiX2J1ZmZlcl9jcmVhdGUoKSk7CisgICAgaWYgKGZvbnRQbGF0Zm9ybURhdGEub3JpZW50YXRp
b24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKQorICAgICAgICBoYl9idWZmZXJfc2V0
X3NjcmlwdChidWZmZXIuZ2V0KCksIGZpbmRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0
aW9uKGZhY2UuZ2V0KCkpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydW5Db3Vu
dDsgKytpKSB7CiAgICAgICAgIGF1dG8mIHJ1biA9IHJ1bkxpc3RbbV9ydW4ucnRsKCkgPyBydW5D
b3VudCAtIGkgLSAxIDogaV07CiAKLSAgICAgICAgaGJfYnVmZmVyX3NldF9zY3JpcHQoYnVmZmVy
LmdldCgpLCBoYl9pY3Vfc2NyaXB0X3RvX3NjcmlwdChydW4uc2NyaXB0KSk7CisgICAgICAgIGlm
IChmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgIT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCkKKyAgICAgICAgICAgIGhiX2J1ZmZlcl9zZXRfc2NyaXB0KGJ1ZmZlci5nZXQoKSwgaGJf
aWN1X3NjcmlwdF90b19zY3JpcHQocnVuLnNjcmlwdCkpOwogICAgICAgICBpZiAoIW1fbWF5VXNl
TmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gfHwgbV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpKQog
ICAgICAgICAgICAgaGJfYnVmZmVyX3NldF9kaXJlY3Rpb24oYnVmZmVyLmdldCgpLCBtX3J1bi5y
dGwoKSA/IEhCX0RJUkVDVElPTl9SVEwgOiBIQl9ESVJFQ1RJT05fTFRSKTsKICAgICAgICAgZWxz
ZSB7CkBAIC0yMDYsMTEgKzM1Nyw2IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xs
ZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhCiAgICAgICAg
IH0KICAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihidWZmZXIuZ2V0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoLCBydW4uc3RhcnRJbmRl
eCwgcnVuLmVuZEluZGV4IC0gcnVuLnN0YXJ0SW5kZXgpOwogCi0gICAgICAgIGF1dG8mIGZhY2Ug
PSBmb250UGxhdGZvcm1EYXRhLmhhcmZCdXp6RmFjZSgpOwotICAgICAgICBpZiAoZm9udFBsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCi0gICAg
ICAgICAgICBmYWNlLnNldFNjcmlwdEZvclZlcnRpY2FsR2x5cGhTdWJzdGl0dXRpb24oYnVmZmVy
LmdldCgpKTsKLQotICAgICAgICBIYlVuaXF1ZVB0cjxoYl9mb250X3Q+IGhhcmZCdXp6Rm9udChm
YWNlLmNyZWF0ZUZvbnQoKSk7CiAgICAgICAgIGhiX3NoYXBlKGhhcmZCdXp6Rm9udC5nZXQoKSwg
YnVmZmVyLmdldCgpLCBmZWF0dXJlcy5pc0VtcHR5KCkgPyBudWxscHRyIDogZmVhdHVyZXMuZGF0
YSgpLCBmZWF0dXJlcy5zaXplKCkpOwogICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQo
Q29tcGxleFRleHRSdW46OmNyZWF0ZShidWZmZXIuZ2V0KCksICpmb250LCBjaGFyYWN0ZXJzLCBz
dHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBydW4uc3RhcnRJbmRleCwgcnVuLmVuZEluZGV4KSk7CiAg
ICAgICAgIGhiX2J1ZmZlcl9yZXNldChidWZmZXIuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NjkxZDgzMzVjLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZh
Y2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCi0KLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRh
LmgiCi0jaW5jbHVkZSA8aGItb3QuaD4KLSNpbmNsdWRlIDxoYi5oPgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGhiX3RhZ190
IEhhcmZCdXp6RmFjZTo6dmVydFRhZyA9IEhCX1RBRygndicsICdlJywgJ3InLCAndCcpOwotY29u
c3QgaGJfdGFnX3QgSGFyZkJ1enpGYWNlOjp2cnQyVGFnID0gSEJfVEFHKCd2JywgJ3InLCAndCcs
ICcyJyk7Ci1jb25zdCBoYl90YWdfdCBIYXJmQnV6ekZhY2U6Omtlcm5UYWcgPSBIQl9UQUcoJ2sn
LCAnZScsICdyJywgJ24nKTsKLQotLy8gVGhvdWdoIHdlIGhhdmUgRm9udENhY2hlIGNsYXNzLCB3
aGljaCBwcm92aWRlcyB0aGUgY2FjaGUgbWVjaGFuaXNtIGZvcgotLy8gV2ViS2l0J3MgZm9udCBv
YmplY3RzLCB3ZSBhbHNvIG5lZWQgYWRkaXRpb25hbCBjYWNoaW5nIGxheWVyIGZvciBIYXJmQnV6
egotLy8gdG8gcmVkdWNlIHRoZSBtZW1vcnkgY29uc3VtcHRpb24gYmVjYXVzZSBoYl9mYWNlX3Qg
c2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAotLy8gdW5kZXJsaW5nIGZvbnQgZGF0YSAoZS5nLiBD
VEZvbnRSZWYsIEZURmFjZSkuCi0KLUhhcmZCdXp6RmFjZTo6Q2FjaGVFbnRyeTo6Q2FjaGVFbnRy
eShoYl9mYWNlX3QqIGZhY2UpCi0gICAgOiBtX2ZhY2UoZmFjZSkKLXsKLSAgICBBU1NFUlQobV9m
YWNlKTsKLX0KLQotSGFyZkJ1enpGYWNlOjpDYWNoZUVudHJ5Ojp+Q2FjaGVFbnRyeSgpCi17Ci0g
ICAgaGJfZmFjZV9kZXN0cm95KG1fZmFjZSk7Ci19Ci0KLUhhcmZCdXp6RmFjZTo6Q2FjaGUmIEhh
cmZCdXp6RmFjZTo6Y2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDYWNoZT4g
c19jYWNoZTsKLSAgICByZXR1cm4gc19jYWNoZTsKLX0KLQotSGFyZkJ1enpGYWNlOjpIYXJmQnV6
ekZhY2UoRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCB1aW50NjRfdCB1bmlxdWVJRCkK
LSAgICA6IG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKLSAgICAsIG1fdW5pcXVlSUQodW5p
cXVlSUQpCi0gICAgLCBtX3NjcmlwdEZvclZlcnRpY2FsVGV4dChIQl9TQ1JJUFRfSU5WQUxJRCkK
LXsKLSAgICBhdXRvIHJlc3VsdCA9IGNhY2hlKCkuYWRkKG1fdW5pcXVlSUQsIG51bGxwdHIpOwot
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IENhY2hlRW50cnk6OmNyZWF0ZShjcmVhdGVGYWNlKCkpOwotICAgIG1fY2FjaGVFbnRyeSA9
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLUhhcmZCdXp6RmFjZTo6fkhhcmZCdXp6RmFj
ZSgpCi17Ci0gICAgYXV0byBpdCA9IGNhY2hlKCkuZmluZChtX3VuaXF1ZUlEKTsKLSAgICBBU1NF
UlQoaXQgIT0gY2FjaGUoKS5lbmQoKSk7Ci0gICAgQVNTRVJUKGl0LT52YWx1ZSA9PSBtX2NhY2hl
RW50cnkpOwotICAgIEFTU0VSVChpdC0+dmFsdWUtPnJlZkNvdW50KCkgPiAxKTsKLQotICAgIG1f
Y2FjaGVFbnRyeSA9IG51bGxwdHI7Ci0gICAgaWYgKGl0LT52YWx1ZS0+cmVmQ291bnQoKSA9PSAx
KQotICAgICAgICBjYWNoZSgpLnJlbW92ZShpdCk7Ci19Ci0KLXN0YXRpYyBoYl9zY3JpcHRfdCBm
aW5kU2NyaXB0Rm9yVmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbihoYl9mYWNlX3QqIGZhY2UpCi17
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENvdW50ID0gMzI7Ci0KLSAgICB1bnNpZ25l
ZCBzY3JpcHRDb3VudCA9IG1heENvdW50OwotICAgIGhiX3RhZ190IHNjcmlwdFRhZ3NbbWF4Q291
bnRdOwotICAgIGhiX290X2xheW91dF90YWJsZV9nZXRfc2NyaXB0X3RhZ3MoZmFjZSwgSEJfT1Rf
VEFHX0dTVUIsIDAsICZzY3JpcHRDb3VudCwgc2NyaXB0VGFncyk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBzY3JpcHRJbmRleCA9IDA7IHNjcmlwdEluZGV4IDwgc2NyaXB0Q291bnQ7ICsrc2NyaXB0SW5k
ZXgpIHsKLSAgICAgICAgdW5zaWduZWQgbGFuZ3VhZ2VDb3VudCA9IG1heENvdW50OwotICAgICAg
ICBoYl90YWdfdCBsYW5ndWFnZVRhZ3NbbWF4Q291bnRdOwotICAgICAgICBoYl9vdF9sYXlvdXRf
c2NyaXB0X2dldF9sYW5ndWFnZV90YWdzKGZhY2UsIEhCX09UX1RBR19HU1VCLCBzY3JpcHRJbmRl
eCwgMCwgJmxhbmd1YWdlQ291bnQsIGxhbmd1YWdlVGFncyk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgbGFuZ3VhZ2VJbmRleCA9IDA7IGxhbmd1YWdlSW5kZXggPCBsYW5ndWFnZUNvdW50OyArK2xh
bmd1YWdlSW5kZXgpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGZlYXR1cmVJbmRleDsKLSAgICAg
ICAgICAgIGlmIChoYl9vdF9sYXlvdXRfbGFuZ3VhZ2VfZmluZF9mZWF0dXJlKGZhY2UsIEhCX09U
X1RBR19HU1VCLCBzY3JpcHRJbmRleCwgbGFuZ3VhZ2VJbmRleCwgSGFyZkJ1enpGYWNlOjp2ZXJ0
VGFnLCAmZmVhdHVyZUluZGV4KQotICAgICAgICAgICAgICAgIHx8IGhiX290X2xheW91dF9sYW5n
dWFnZV9maW5kX2ZlYXR1cmUoZmFjZSwgSEJfT1RfVEFHX0dTVUIsIHNjcmlwdEluZGV4LCBsYW5n
dWFnZUluZGV4LCBIYXJmQnV6ekZhY2U6OnZydDJUYWcsICZmZWF0dXJlSW5kZXgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBoYl9vdF90YWdfdG9fc2NyaXB0KHNjcmlwdFRhZ3Nbc2NyaXB0SW5k
ZXhdKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gSEJfU0NSSVBUX0lOVkFMSUQ7Ci19
Ci0KLXZvaWQgSGFyZkJ1enpGYWNlOjpzZXRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0
aW9uKGhiX2J1ZmZlcl90KiBidWZmZXIpCi17Ci0gICAgaWYgKG1fc2NyaXB0Rm9yVmVydGljYWxU
ZXh0ID09IEhCX1NDUklQVF9JTlZBTElEKQotICAgICAgICBtX3NjcmlwdEZvclZlcnRpY2FsVGV4
dCA9IGZpbmRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKG1fY2FjaGVFbnRyeS0+
ZmFjZSgpKTsKLSAgICBoYl9idWZmZXJfc2V0X3NjcmlwdChidWZmZXIsIG1fc2NyaXB0Rm9yVmVy
dGljYWxUZXh0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA2ZDVmN2JjYTguLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFj
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSGFyZkJ1enpGYWNlX2gK
LSNkZWZpbmUgSGFyZkJ1enpGYWNlX2gKLQotI2luY2x1ZGUgPGhiLmg+Ci0KLSNpbmNsdWRlIDxt
ZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci0KLWNsYXNz
IEhhcmZCdXp6RmFjZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIGNvbnN0IGhiX3RhZ190IHZlcnRUYWc7Ci0gICAgc3RhdGljIGNvbnN0IGhiX3Rh
Z190IHZydDJUYWc7Ci0gICAgc3RhdGljIGNvbnN0IGhiX3RhZ190IGtlcm5UYWc7Ci0KLSAgICBI
YXJmQnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSYsIHVpbnQ2NF90KTsKLSAgICB+SGFyZkJ1enpG
YWNlKCk7Ci0KLSAgICBoYl9mb250X3QqIGNyZWF0ZUZvbnQoKTsKLQotICAgIHZvaWQgc2V0U2Ny
aXB0Rm9yVmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbihoYl9idWZmZXJfdCopOwotCi0gICAgdXNp
bmcgR2x5cGhDYWNoZSA9IEhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90LCBEZWZhdWx0SGFzaDx1
aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMy
X3Q+PjsKLXByaXZhdGU6Ci0gICAgY2xhc3MgQ2FjaGVFbnRyeSA6IHB1YmxpYyBSZWZDb3VudGVk
PENhY2hlRW50cnk+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZWY8Q2FjaGVFbnRy
eT4gY3JlYXRlKGhiX2ZhY2VfdCogZmFjZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ2FjaGVFbnRyeShmYWNlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgfkNh
Y2hlRW50cnkoKTsKLQotICAgICAgICBoYl9mYWNlX3QqIGZhY2UoKSB7IHJldHVybiBtX2ZhY2U7
IH0KLSAgICAgICAgR2x5cGhDYWNoZSYgZ2x5cGhDYWNoZSgpIHsgcmV0dXJuIG1fZ2x5cGhDYWNo
ZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2FjaGVFbnRyeShoYl9mYWNlX3QqKTsKLQot
ICAgICAgICBoYl9mYWNlX3QqIG1fZmFjZTsKLSAgICAgICAgR2x5cGhDYWNoZSBtX2dseXBoQ2Fj
aGU7Ci0gICAgfTsKLQotICAgIHVzaW5nIENhY2hlID0gSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRy
PENhY2hlRW50cnk+LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90Pj47Ci0gICAgc3RhdGljIENhY2hlJiBjYWNoZSgpOwot
Ci0gICAgaGJfZmFjZV90KiBjcmVhdGVGYWNlKCk7Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhJiBt
X3BsYXRmb3JtRGF0YTsKLSAgICB1aW50NjRfdCBtX3VuaXF1ZUlEOwotICAgIFJlZlB0cjxDYWNo
ZUVudHJ5PiBtX2NhY2hlRW50cnk7Ci0KLSAgICBoYl9zY3JpcHRfdCBtX3NjcmlwdEZvclZlcnRp
Y2FsVGV4dDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEhhcmZCdXp6RmFjZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VD
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6ekZhY2VDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NGI1ODk0
YWFiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9IYXJmQnV6ekZhY2VDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgotCi0jaW5jbHVkZSAiQ2Fpcm9VdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNp
bmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNp
bmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlIDxjYWlyby1mdC5oPgotI2luY2x1ZGUg
PGNhaXJvLmg+Ci0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gK
LSNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICi0jaW5jbHVkZSA8aGIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgot
Ci0jaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSNpbmNsdWRlIEZUX01VTFRJUExFX01BU1RF
UlNfSAotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEhhcmZCdXp6Rm9u
dERhdGEgewotICAgIEhhcmZCdXp6RmFjZTo6R2x5cGhDYWNoZSYgZ2x5cGhDYWNoZUZvckZhY2VD
YWNoZUVudHJ5OwotICAgIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiBjYWlyb1NjYWxlZEZv
bnQ7Ci19OwotCi1zdGF0aWMgaGJfcG9zaXRpb25fdCBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihm
bG9hdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aGJfcG9zaXRpb25fdD4odmFs
dWUgKiAoMSA8PCAxNikpOwotfQotCi1zdGF0aWMgaGJfcG9zaXRpb25fdCBkb3VibGVUb0hhcmZC
dXp6UG9zaXRpb24oZG91YmxlIHZhbHVlKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxoYl9w
b3NpdGlvbl90Pih2YWx1ZSAqICgxIDw8IDE2KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIENhaXJvR2V0
R2x5cGhXaWR0aEFuZEV4dGVudHMoY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCwgaGJf
Y29kZXBvaW50X3QgY29kZXBvaW50LCBoYl9wb3NpdGlvbl90KiBhZHZhbmNlLCBoYl9nbHlwaF9l
eHRlbnRzX3QqIGV4dGVudHMpCi17Ci0gICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZ2x5cGhFeHRl
bnRzOwotICAgIGNhaXJvX2dseXBoX3QgZ2x5cGg7Ci0gICAgZ2x5cGguaW5kZXggPSBjb2RlcG9p
bnQ7Ci0gICAgZ2x5cGgueCA9IDA7Ci0gICAgZ2x5cGgueSA9IDA7Ci0gICAgY2Fpcm9fc2NhbGVk
X2ZvbnRfZ2x5cGhfZXh0ZW50cyhzY2FsZWRGb250LCAmZ2x5cGgsIDEsICZnbHlwaEV4dGVudHMp
OwotCi0gICAgYm9vbCBoYXNWZXJ0aWNhbEdseXBocyA9IGdseXBoRXh0ZW50cy55X2FkdmFuY2U7
Ci0gICAgaWYgKGFkdmFuY2UpCi0gICAgICAgICphZHZhbmNlID0gZG91YmxlVG9IYXJmQnV6elBv
c2l0aW9uKGhhc1ZlcnRpY2FsR2x5cGhzID8gLWdseXBoRXh0ZW50cy55X2FkdmFuY2UgOiBnbHlw
aEV4dGVudHMueF9hZHZhbmNlKTsKLQotICAgIGlmIChleHRlbnRzKSB7Ci0gICAgICAgIGV4dGVu
dHMtPnhfYmVhcmluZyA9IGRvdWJsZVRvSGFyZkJ1enpQb3NpdGlvbihnbHlwaEV4dGVudHMueF9i
ZWFyaW5nKTsKLSAgICAgICAgZXh0ZW50cy0+eV9iZWFyaW5nID0gZG91YmxlVG9IYXJmQnV6elBv
c2l0aW9uKGhhc1ZlcnRpY2FsR2x5cGhzID8gLWdseXBoRXh0ZW50cy55X2JlYXJpbmcgOiBnbHlw
aEV4dGVudHMueV9iZWFyaW5nKTsKLSAgICAgICAgZXh0ZW50cy0+d2lkdGggPSBkb3VibGVUb0hh
cmZCdXp6UG9zaXRpb24oaGFzVmVydGljYWxHbHlwaHMgPyAtZ2x5cGhFeHRlbnRzLmhlaWdodCA6
IGdseXBoRXh0ZW50cy53aWR0aCk7Ci0gICAgICAgIGV4dGVudHMtPmhlaWdodCA9IGRvdWJsZVRv
SGFyZkJ1enpQb3NpdGlvbihoYXNWZXJ0aWNhbEdseXBocyA/IGdseXBoRXh0ZW50cy53aWR0aCA6
IGdseXBoRXh0ZW50cy5oZWlnaHQpOwotICAgIH0KLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBoYXJm
QnV6ekdldEdseXBoKGhiX2ZvbnRfdCosIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCB1
bmljb2RlLCBoYl9jb2RlcG9pbnRfdCwgaGJfY29kZXBvaW50X3QqIGdseXBoLCB2b2lkKikKLXsK
LSAgICBhdXRvJiBoYkZvbnREYXRhID0gKnN0YXRpY19jYXN0PEhhcmZCdXp6Rm9udERhdGEqPihm
b250RGF0YSk7Ci0gICAgYXV0byogc2NhbGVkRm9udCA9IGhiRm9udERhdGEuY2Fpcm9TY2FsZWRG
b250LmdldCgpOwotICAgIEFTU0VSVChzY2FsZWRGb250KTsKLQotICAgIGF1dG8gcmVzdWx0ID0g
aGJGb250RGF0YS5nbHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnkuYWRkKHVuaWNvZGUsIDApOwot
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBjYWlyb19nbHlwaF90KiBnbHlw
aHMgPSAwOwotICAgICAgICBpbnQgbnVtR2x5cGhzID0gMDsKLSAgICAgICAgY2hhciBidWZmZXJb
VThfTUFYX0xFTkdUSF07Ci0gICAgICAgIHNpemVfdCBidWZmZXJMZW5ndGggPSAwOwotICAgICAg
ICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZSh1bmljb2RlKSAmJiB1bmljb2RlICE9ICdc
dCcpCi0gICAgICAgICAgICB1bmljb2RlID0gJyAnOwotICAgICAgICBlbHNlIGlmIChGb250Q2Fz
Y2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KHVuaWNvZGUpKQotICAg
ICAgICAgICAgdW5pY29kZSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICBVOF9BUFBFTkRfVU5T
QUZFKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCB1bmljb2RlKTsKLSAgICAgICAgaWYgKGNhaXJvX3Nj
YWxlZF9mb250X3RleHRfdG9fZ2x5cGhzKHNjYWxlZEZvbnQsIDAsIDAsIGJ1ZmZlciwgYnVmZmVy
TGVuZ3RoLCAmZ2x5cGhzLCAmbnVtR2x5cGhzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKSAh
PSBDQUlST19TVEFUVVNfU1VDQ0VTUyB8fCAhbnVtR2x5cGhzKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZ2x5cGhzWzBdLmluZGV4
OwotICAgICAgICBjYWlyb19nbHlwaF9mcmVlKGdseXBocyk7Ci0gICAgfQotICAgICpnbHlwaCA9
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgcmV0dXJuICEhKmdseXBoOwotfQotCi1zdGF0
aWMgaGJfcG9zaXRpb25fdCBoYXJmQnV6ekdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UoaGJfZm9u
dF90Kiwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCB2b2lkKikKLXsKLSAg
ICBhdXRvJiBoYkZvbnREYXRhID0gKnN0YXRpY19jYXN0PEhhcmZCdXp6Rm9udERhdGEqPihmb250
RGF0YSk7Ci0gICAgYXV0byogc2NhbGVkRm9udCA9IGhiRm9udERhdGEuY2Fpcm9TY2FsZWRGb250
LmdldCgpOwotICAgIEFTU0VSVChzY2FsZWRGb250KTsKLQotICAgIGhiX3Bvc2l0aW9uX3QgYWR2
YW5jZSA9IDA7Ci0gICAgQ2Fpcm9HZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhzY2FsZWRGb250LCBn
bHlwaCwgJmFkdmFuY2UsIDApOwotICAgIHJldHVybiBhZHZhbmNlOwotfQotCi1zdGF0aWMgaGJf
Ym9vbF90IGhhcmZCdXp6R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCosIHZvaWQq
LCBoYl9jb2RlcG9pbnRfdCwgaGJfcG9zaXRpb25fdCosIGhiX3Bvc2l0aW9uX3QqLCB2b2lkKikK
LXsKLSAgICAvLyBKdXN0IHJldHVybiB0cnVlLCBmb2xsb3dpbmcgdGhlIHdheSB0aGF0IEhhcmZi
dXp6LUZyZWVUeXBlCi0gICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcy4KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBoYXJmQnV6ekdldEdseXBoRXh0ZW50cyhoYl9mb250
X3QqLCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX2dseXBoX2V4dGVu
dHNfdCogZXh0ZW50cywgdm9pZCopCi17Ci0gICAgYXV0byYgaGJGb250RGF0YSA9ICpzdGF0aWNf
Y2FzdDxIYXJmQnV6ekZvbnREYXRhKj4oZm9udERhdGEpOwotICAgIGF1dG8qIHNjYWxlZEZvbnQg
PSBoYkZvbnREYXRhLmNhaXJvU2NhbGVkRm9udC5nZXQoKTsKLSAgICBBU1NFUlQoc2NhbGVkRm9u
dCk7Ci0KLSAgICBDYWlyb0dldEdseXBoV2lkdGhBbmRFeHRlbnRzKHNjYWxlZEZvbnQsIGdseXBo
LCAwLCBleHRlbnRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGhiX2ZvbnRfZnVu
Y3NfdCogaGFyZkJ1enpDYWlyb1RleHRHZXRGb250RnVuY3MoKQotewotICAgIHN0YXRpYyBoYl9m
b250X2Z1bmNzX3QqIGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3MgPSAwOwotCi0gICAgLy8gV2UgZG9u
J3Qgc2V0IGNhbGxiYWNrIGZ1bmN0aW9ucyB3aGljaCB3ZSBjYW4ndCBzdXBwb3J0LgotICAgIC8v
IEhhcmZidXp6IHdpbGwgdXNlIHRoZSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpZiB0aGV5IGFy
ZW4ndCBzZXQuCi0gICAgaWYgKCFoYXJmQnV6ekNhaXJvRm9udEZ1bmNzKSB7Ci0gICAgICAgIGhh
cmZCdXp6Q2Fpcm9Gb250RnVuY3MgPSBoYl9mb250X2Z1bmNzX2NyZWF0ZSgpOwotICAgICAgICBo
Yl9mb250X2Z1bmNzX3NldF9nbHlwaF9mdW5jKGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3MsIGhhcmZC
dXp6R2V0R2x5cGgsIDAsIDApOwotICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX2Fk
dmFuY2VfZnVuYyhoYXJmQnV6ekNhaXJvRm9udEZ1bmNzLCBoYXJmQnV6ekdldEdseXBoSG9yaXpv
bnRhbEFkdmFuY2UsIDAsIDApOwotICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX29y
aWdpbl9mdW5jKGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3MsIGhhcmZCdXp6R2V0R2x5cGhIb3Jpem9u
dGFsT3JpZ2luLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZXh0ZW50
c19mdW5jKGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3MsIGhhcmZCdXp6R2V0R2x5cGhFeHRlbnRzLCAw
LCAwKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19tYWtlX2ltbXV0YWJsZShoYXJmQnV6ekNhaXJv
Rm9udEZ1bmNzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3M7Ci19
Ci0KLXN0YXRpYyBoYl9ibG9iX3QqIGhhcmZCdXp6Q2Fpcm9HZXRUYWJsZShoYl9mYWNlX3QqLCBo
Yl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQotewotICAgIGF1dG8qIHNjYWxlZEZvbnQgPSBz
dGF0aWNfY2FzdDxjYWlyb19zY2FsZWRfZm9udF90Kj4odXNlckRhdGEpOwotICAgIGlmICghc2Nh
bGVkRm9udCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDYWlyb0Z0RmFjZUxvY2tlciBjYWly
b0Z0RmFjZUxvY2tlcihzY2FsZWRGb250KTsKLSAgICBGVF9GYWNlIGZ0Rm9udCA9IGNhaXJvRnRG
YWNlTG9ja2VyLmZ0RmFjZSgpOwotICAgIGlmICghZnRGb250KQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIEZUX1VMb25nIHRhYmxlU2l6ZSA9IDA7Ci0gICAgRlRfRXJyb3IgZXJyb3Ig
PSBGVF9Mb2FkX1NmbnRfVGFibGUoZnRGb250LCB0YWcsIDAsIDAsICZ0YWJsZVNpemUpOwotICAg
IGlmIChlcnJvcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBGVF9CeXRlKiBidWZmZXIgPSBy
ZWludGVycHJldF9jYXN0PEZUX0J5dGUqPihmYXN0TWFsbG9jKHRhYmxlU2l6ZSkpOwotICAgIGlm
ICghYnVmZmVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBGVF9VTG9uZyBleHBlY3RlZFRhYmxl
U2l6ZSA9IHRhYmxlU2l6ZTsKLSAgICBlcnJvciA9IEZUX0xvYWRfU2ZudF9UYWJsZShmdEZvbnQs
IHRhZywgMCwgYnVmZmVyLCAmdGFibGVTaXplKTsKLSAgICBpZiAoZXJyb3IgfHwgdGFibGVTaXpl
ICE9IGV4cGVjdGVkVGFibGVTaXplKSB7Ci0gICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBoYl9ibG9iX2NyZWF0ZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpLCB0YWJsZVNpemUsIEhCX01FTU9SWV9NT0RF
X1dSSVRBQkxFLCBidWZmZXIsIGZhc3RGcmVlKTsKLX0KLQotaGJfZmFjZV90KiBIYXJmQnV6ekZh
Y2U6OmNyZWF0ZUZhY2UoKQotewotICAgIGF1dG8qIHNjYWxlZEZvbnQgPSBtX3BsYXRmb3JtRGF0
YS5zY2FsZWRGb250KCk7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfcmVmZXJlbmNlKHNjYWxlZEZv
bnQpOwotCi0gICAgaGJfZmFjZV90KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyho
YXJmQnV6ekNhaXJvR2V0VGFibGUsIHNjYWxlZEZvbnQsCi0gICAgICAgIFtdKHZvaWQqIGRhdGEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3koc3RhdGlj
X2Nhc3Q8Y2Fpcm9fc2NhbGVkX2ZvbnRfdCo+KGRhdGEpKTsKLSAgICAgICAgfSk7Ci0gICAgQVNT
RVJUKGZhY2UpOwotICAgIHJldHVybiBmYWNlOwotfQotCi1oYl9mb250X3QqIEhhcmZCdXp6RmFj
ZTo6Y3JlYXRlRm9udCgpCi17Ci0gICAgaGJfZm9udF90KiBmb250ID0gaGJfZm9udF9jcmVhdGUo
bV9jYWNoZUVudHJ5LT5mYWNlKCkpOwotICAgIGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZC
dXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1bmNzKCksIG5ldyBIYXJmQnV6ekZvbnREYXRhIHsgbV9jYWNo
ZUVudHJ5LT5nbHlwaENhY2hlKCksIG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSB9LAotICAg
ICAgICBbXSh2b2lkKiBkYXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgc3RhdGlj
X2Nhc3Q8SGFyZkJ1enpGb250RGF0YSo+KGRhdGEpOwotICAgICAgICB9KTsKLQotICAgIGNvbnN0
IGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgaWYgKGZsb29yZihzaXpl
KSA9PSBzaXplKQotICAgICAgICBoYl9mb250X3NldF9wcGVtKGZvbnQsIHNpemUsIHNpemUpOwot
ICAgIGludCBzY2FsZSA9IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKHNpemUpOwotICAgIGhiX2Zv
bnRfc2V0X3NjYWxlKGZvbnQsIHNjYWxlLCBzY2FsZSk7Ci0KLSNpZiBFTkFCTEUoVkFSSUFUSU9O
X0ZPTlRTKQotICAgIHsKLSAgICAgICAgQ2Fpcm9GdEZhY2VMb2NrZXIgY2Fpcm9GdEZhY2VMb2Nr
ZXIobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgpKTsKLSAgICAgICAgaWYgKEZUX0ZhY2UgZmFj
ZSA9IGNhaXJvRnRGYWNlTG9ja2VyLmZ0RmFjZSgpKSB7Ci0gICAgICAgICAgICBGVF9NTV9WYXIq
IGZ0TU1WYXI7Ci0gICAgICAgICAgICBpZiAoIUZUX0dldF9NTV9WYXIoZmFjZSwgJmZ0TU1WYXIp
KSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPEZUX0ZpeGVkLCA0PiBjb29yZHM7Ci0gICAgICAg
ICAgICAgICAgY29vcmRzLnJlc2l6ZShmdE1NVmFyLT5udW1fYXhpcyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFGVF9HZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcyhmYWNlLCBjb29yZHMuc2l6ZSgp
LCBjb29yZHMuZGF0YSgpKSkgewotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8aGJfdmFyaWF0
aW9uX3QsIDQ+IHZhcmlhdGlvbnMoY29vcmRzLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAoRlRfVUludCBpID0gMDsgaSA8IGZ0TU1WYXItPm51bV9heGlzOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbnNbaV0udGFnID0gZnRNTVZhci0+YXhpc1tpXS50
YWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb25zW2ldLnZhbHVlID0gY29vcmRz
W2ldIC8gNjU1MzYuMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBoYl9mb250X3NldF92YXJpYXRpb25zKGZvbnQsIHZhcmlhdGlvbnMuZGF0YSgpLCB2YXJpYXRp
b25zLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEZUX0RvbmVf
TU1fVmFyKGZhY2UtPmdseXBoLT5saWJyYXJ5LCBmdE1NVmFyKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgaGJfZm9udF9tYWtlX2ltbXV0YWJsZShmb250
KTsKLSAgICByZXR1cm4gZm9udDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGJVbmlxdWVQ
dHIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hiVW5pcXVl
UHRyLmgKaW5kZXggZWFiOTVjNjNkZDkuLjBkNmYyOTNlNzU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYlVuaXF1ZVB0ci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hiVW5pcXVlUHRyLmgKQEAg
LTUyLDYgKzUyLDEzIEBAIHRlbXBsYXRlPD4gc3RydWN0IEhiUHRyRGVsZXRlcjxoYl9idWZmZXJf
dD4gewogICAgIH0KIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEhiUHRyRGVsZXRlcjxoYl9mYWNl
X3Q+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoaGJfZmFjZV90KiBwdHIpIGNvbnN0CisgICAgewor
ICAgICAgICBoYl9mYWNlX2Rlc3Ryb3kocHRyKTsKKyAgICB9Cit9OworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKIHVzaW5nIFdlYkNvcmU6OkhiVW5pcXVlUHRyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1h
dGhEYXRhLmNwcAppbmRleCA3NjZkMjQ2MzNlMy4uNWQ4OGNkNzc2ODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlTWF0aERhdGEuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjZW5kaWYKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCkBAIC0yNTcsMTAgKzI1Niw4IEBAIE9wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBlTWF0aERh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udCkKIH0KICNlbGlmIFVTRShIQVJGQlVaWikK
IE9wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBlTWF0aERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgZm9udCkKLSAgICA6IG1fbWF0aEZvbnQoZm9udC5oYXJmQnV6ekZhY2UoKS5jcmVhdGVGb250
KCkpCisgICAgOiBtX21hdGhGb250KGZvbnQuY3JlYXRlT3BlblR5cGVNYXRoSGFyZkJ1enpGb250
KCkpCiB7Ci0gICAgaWYgKCFoYl9vdF9tYXRoX2hhc19kYXRhKGhiX2ZvbnRfZ2V0X2ZhY2UobV9t
YXRoRm9udC5nZXQoKSkpKQotICAgICAgICBtX21hdGhGb250ID0gbnVsbHB0cjsKIH0KICNlbGlm
IFVTRShESVJFQ1QyRCkKIE9wZW5UeXBlTWF0aERhdGE6Ok9wZW5UeXBlTWF0aERhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZm9udCkKQEAgLTI5NiwxMyArMjkzLDEzIEBAIGZsb2F0IE9wZW5U
eXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFudChjb25zdCBGb250JiBmb250LCBNYXRoQ29uc3Rh
bnQgY29uc3RhbnQpCiAKICAgICByZXR1cm4gdmFsdWUgKiBmb250LnNpemVQZXJVbml0KCk7CiAj
ZWxpZiBVU0UoSEFSRkJVWlopCi1mbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3Rh
bnQoY29uc3QgRm9udCYsIE1hdGhDb25zdGFudCBjb25zdGFudCkgY29uc3QKK2Zsb2F0IE9wZW5U
eXBlTWF0aERhdGE6OmdldE1hdGhDb25zdGFudChjb25zdCBGb250JiBmb250LCBNYXRoQ29uc3Rh
bnQgY29uc3RhbnQpIGNvbnN0CiB7CiAgICAgaGJfcG9zaXRpb25fdCB2YWx1ZSA9IGhiX290X21h
dGhfZ2V0X2NvbnN0YW50KG1fbWF0aEZvbnQuZ2V0KCksIHN0YXRpY19jYXN0PGhiX290X21hdGhf
Y29uc3RhbnRfdD4oY29uc3RhbnQpKTsKICAgICBpZiAoY29uc3RhbnQgPT0gU2NyaXB0UGVyY2Vu
dFNjYWxlRG93biB8fCBjb25zdGFudCA9PSBTY3JpcHRTY3JpcHRQZXJjZW50U2NhbGVEb3duIHx8
IGNvbnN0YW50ID09IFJhZGljYWxEZWdyZWVCb3R0b21SYWlzZVBlcmNlbnQpCiAgICAgICAgIHJl
dHVybiB2YWx1ZSAvIDEwMC4wOwogCi0gICAgcmV0dXJuIHZhbHVlIC8gNjU1MzYuMDsKKyAgICBy
ZXR1cm4gdmFsdWUgKiBmb250LnNpemVQZXJVbml0KCk7CiAjZWxzZQogZmxvYXQgT3BlblR5cGVN
YXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IEZvbnQmLCBNYXRoQ29uc3RhbnQpIGNvbnN0
CiB7CkBAIC0zMjYsOSArMzIzLDkgQEAgZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRhbGlj
Q29ycmVjdGlvbihjb25zdCBGb250JiBmb250LCBHbHlwaCBnbHlwaCkgY29uc3QKIAogICAgIHJl
dHVybiBtYXRoSXRhbGljc0NvcnJlY3Rpb25JbmZvLT5nZXRJdGFsaWNDb3JyZWN0aW9uKCptX21h
dGhCdWZmZXIsIGdseXBoKSAqIGZvbnQuc2l6ZVBlclVuaXQoKTsKICNlbGlmIFVTRShIQVJGQlVa
WikKLWZsb2F0IE9wZW5UeXBlTWF0aERhdGE6OmdldEl0YWxpY0NvcnJlY3Rpb24oY29uc3QgRm9u
dCYsIEdseXBoIGdseXBoKSBjb25zdAorZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRhbGlj
Q29ycmVjdGlvbihjb25zdCBGb250JiBmb250LCBHbHlwaCBnbHlwaCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaGJfb3RfbWF0aF9nZXRfZ2x5cGhfaXRhbGljc19jb3JyZWN0aW9uKG1fbWF0aEZvbnQu
Z2V0KCksIGdseXBoKSAvIDY1NTM2LjA7CisgICAgcmV0dXJuIGhiX290X21hdGhfZ2V0X2dseXBo
X2l0YWxpY3NfY29ycmVjdGlvbihtX21hdGhGb250LmdldCgpLCBnbHlwaCkgKiBmb250LnNpemVQ
ZXJVbml0KCk7CiAjZWxzZQogZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29ycmVj
dGlvbihjb25zdCBGb250JiwgR2x5cGgpIGNvbnN0CiB7Cg==
</data>
<flag name="review"
          id="373965"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357219</attachid>
            <date>2018-12-13 01:20:36 -0800</date>
            <delta_ts>2018-12-13 01:20:36 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk-hb-face-removed.diff</filename>
            <type>text/plain</type>
            <size>46164</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkNGMzYTM0NzVkOS4uNTk1YTQ2YzQ0ZGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxOC0xMi0xMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0ZyZWVUeXBlXSBSZW1vdmUgSGFyZkJ1enpGYWNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI1ODkKKworICAgICAgICBSZXZpZXdl
ZCBieSBNaWNoYWVsIENhdGFuemFyby4KKworICAgICAgICBSZWJhc2VsaW5lIHRlc3QgdGhhdCBu
b3cgbWF0Y2hlcyB0aGUgZmlyZWZveCBvdXRwdXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
bWF0aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWV4cGVjdGVkLnBuZzoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvbWF0aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWV4cGVjdGVk
LnR4dDoKKwogMjAxOC0xMi0xMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0ZyZWVUeXBlXSBBZGQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBv
ZiB2YXJpYXRpb24gZm9udHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9t
YXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL21hdGhtbC9vcGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1leHBlY3Rl
ZC5wbmcKaW5kZXggMzVlYmU3MzExZWYyMDYwNmU0MDdiODJjYTZjNDYwZTdjOGEzOWQzMi4uMDU4
NWEwZTZmNTZkM2JhNzUzMjRiZDAxMGYyNGFmZmI3YjA2ZDZmNCAxMDA2NDQKR0lUIGJpbmFyeSBw
YXRjaApsaXRlcmFsIDM4MTMKemNtZUh+ZU4+V1g2dT5WaU5gODxZNjNUSjNeMn1EIylDJEFaezN5
KkBybGwqZjUodn1XKEZ2X2dhKXhPM1ZZT1VxCnpYLSg2emM1MGd3JkQxNnsoTXMxJFR7QjVEclhF
VHdZZyZHeDI8Ji1aYGxxdiN3Vmwmezl7ellQSm9vRmxfamxpaQp6SCtebE96b25WMjgzMChXVElt
fU1VXkVrZSRSLW9mRkUtT2A9QWRRblBDeGR9aTBIX09tPnV6LTFKbTd8QUt8Zk8KemZqZzd3ekJ0
bDdWaGJPQSp+KHdRVDxFJXAjcEp1NDdhalE+OEpYfWBgfT18KGA8JHR+YTIkWFZ4eXNrKVEmRyt7
CnpyQ1R0ZyQ5RGdeQ2cmY2pnKD53S0EjYTw+V3JEeD1abGlBXm1lZ2NoLVA/YkRVTD9vMyNKSUpW
XzJ8S2h0Y3cxQwp6Z2VJP15eTk43LWtfJVZNQkBOOyNKcTA5PCQoZHBUTk4kc3pLeXAkfWdvOUs1
bSQwWDUoMG92PTlsOUh1Smx4JmcKelVFVSEhPWI4WV4kSCt1Y0Y2aUtCK3cjTz9iQ2FtaHgjJCNg
MERQaTMleWNZKio5bTI8RjFBYHRVbGtZR0NGfE0qCnojdzZHZlEhRjNybH55NUY4cUpwfUJxKyND
eDA9dWk/JXplOWU+Kyg+K1NBZ1pRKVBKUmBtYXJ1PlIyRm1PWXxyYgp6azNQJV9QMWIwJlNgPWdT
TnJuK0g5SF9JdkpBZy1rPiZDUFJoMWltZ3pBVWpSTlh9aykzKz1iQF9eSit2UXFadFcKenRrO2dy
KENHPkFNWWRMfnVjPk57P2NSTXRVIzUmcGtTV3tSK1F1X1hLeT5helV8T0UlcDVSY0JBS010Z1Eh
MTY9Cno5THtfIzRNMkxpQks7Mio4NXB2YkBGRmBxeUVgQEB5clp5VENuT3w8aEs4PUxCN3I9K0Fi
UiM5M0sxZ013QExMIwp6Xn5lX0lsdF9qIz5AUGwpRXxlKWZKdzA+dF42YlphMDJaPXVrYjFraWU4
TEhFanFPPCFDbEd3Szd2dzh4eG55aD0KeihYUjRsbT1ZdzxvbzI5V2VTbyp9QFJ+Rl9vaTA7MGor
KCpyQ08rTHNINHxLYWozbzlCNC1iIXhCXzh1ZndaMkVCCnpwNTFOKik3eSFMP1hxOHR1cEJHfDNP
d3pjKUcheSFTPzlEe2JvUyFLaXcpdTtZZy1oaip7dkRSSHxNQWE1d3BxcAp6YzVoR2ByZmBRYm87
dmhnPHNWTiV6ZztzP3B4KCs3YFkyOyRrZCVnWFhNQWh+N08mUiU0UT45bkdTK3ltbng1VVQKeiQq
ekJOcHJeT0R3Pi0lUjxsOCsmeXp0R05wWUQ8azM9RVZmTyMhKkpodVQqP0swZEN+WUw8SkVmY0cm
KVQ+YWcyCnpHYzVUSy1WQShnNHpqajIyJjVTUDJnVlJzVTY0fCRqSSsxNXg3LUt2KStudnR4dUJw
UmQoV2hrMUwqKCoqK1okIQp6KEg5VHZUVXlwQFA2UEI3ZCpnbkpvJV9xbHhCPX03WjtiYEF5aHQ7
NVQwUlJFb2E5KU9laW9JdWctPFdRZ3tHUjYKek5FRTJIcX03K0BIak4wWEZtKTt1NkNBPylhQShK
eW1SYmtxPUh9fHVzKkxZRGg7WEwoa2gkWGVTX308OEVIP3ZyCnpPVk87YnpGckBZTSlne1VaX3h7
Ry1qI0EpVHdIcFJXYGxRM0pSYXEhQHtsMXVZdThVUUx1U3U2ZXVqcnBsfiR3Kwp6dV9HVjdgLXhH
bll+VEVDMEReNl5qcDUrV2dRLUswbzlDYmdHSmFzMUQzcj82X09tZHhDeXZWeUwmQiNVNX4+cUwK
enFPfVAzYig9elErezQ0MkcyOHswQF5ObFpxNlZKIW1sfGhjZUFVaSN0YS1MZXFnSVE9Vih9d1cw
XkgpKyY8aFM2CnpGaHd5ZUIxWXZFbTZjMzEwfWYjI2Q9e3toVV43ciN2SzQxfm1iMUd4MmtZI1Rv
KTNZeV5sKjY1NWsmbU8lcWEhIQp6P2RfPWplcy0yMWo1Wkl6X35YVHpaXnBNPHlEMiNHemxQMWgo
PjlCJCNHUXE+YShULThfb3BMPEx0TEFFcWZ3bHwKengmUzwxO1laek0ldGpiWUB4Jm55KzBrI1Zz
TFFaI0wzMH5TZDU9OVpHU2NAfjwmc0FaMEUoem5VYyhtUD5XVXROCnpSI1l+QytrWCo/KFVVKjlp
eVB9TSplJm1BJTlCY145V057YT5LPUJjI0Jia1QtMlNZd3NqMV98YHZDcUFJO21aVgp6WFUkMDhS
UDhqNzQ2KVFOTDlHa0dKQilKb0B7N2pFTVRmdSVXMDZXc0c3KWxVKSNhfjQ1REt4UTw1YWZOJFQq
Y3sKekJwblUmZFNJJTNjaytDWUZQI3dFbl5gWDAhb290emghIyEyQ1JSfmRgIWtqNTkwdjdHS0RG
ej88SHQ3PG9FQX1DCnpGRGN6PmdEMUEpUW9qTGtocC0hbGx4dklmPEBlJnNXeS0md0s4PystQkxM
JCEjMDVTUypBQzVSQUQ0MmdJMj15bgp6czRxd3FQbCl4JURNTXpuQ1hJPzYwZlA9N1R+K0N5QCYj
eUc+U0UlbFVEI0FHcSoqU2d7TnZtV2lQYzE0YW8ldlAKek8+cEIpdXI7akpzfERFJlFEcX02bm5v
KnI5RXQjRkJ1I3ZRUFQrMkc+eiRVYXRnVVprYnJyZjIpXjJ8TnxDYEFrCnF5d2VeYG1VcHRldVkw
d2FXYUJOXiY9YVRiYVhzWlJYanpDfUwxQzMmcGx7KGFVZ3wmQz8+WlgqCgpsaXRlcmFsIDM4MzIK
emNtZUh+WWZ3e0g1UCZ6fjYtbDZGQjA7SHhBVDRNYDV9dnNfTn4ocmhyeHFXaDd6OWFwTVhHM15t
X1ZCbjYwfSs/CnorTD0wMWxvb3V7VnJ6OykxfFBmPEslZzJWczE+RFlQXjV4MkI0VTY1QSpBPS12
PnA0eSptMCkrbkVXXzlYVjJOKQp6b2M7RWt6NUNXZ3QjRVBuYk9yI0ltRzgwRjBvWnYxNUlIMHdJ
XiNhdy01KHcxP1RxQj9PaUUyaitMa0hZNGh6RlcKejd8ZihGQnJHQH42aytte2Y8cj0rblNBQyNN
bzRsdmxnUzg0amRwWkhII3NLMHprJkBHPzAybFReYm1rK19EYzVCCnpfMVdMXz53P3hMNH0weE54
Um0wJCFTbE44Sz9FZ35USWUhXkBXN0Z1QUM/IyUpRWR0SnslVUp2eU5vUHQ0STZUYQp6YHBFWU92
WTtlJHtJMkhFQjMpbCQ/WGJ4aT5GZ0pBM0Q3Pkt4al9lRGMqLTIkYnQoclM9I18tPnZ0TFZPVF5n
MlUKejs9VSVIJWU2ZEgpNFNDR0ReZ1hlYWY2MSVvIz5uYDhUSSo7M2lwc0JCbXlLNyQ+OG0kZkVO
a3BANmJKU0VSKktfCnpFS3w+eXRubVpLSyglIU5qZ3ZidSpzYEFgJmRUeXZmYj4/ZDh4YnpzKThM
JnxKaT8yRiQ3OV5rQCFRPG8rRUswMgp6R0hEdjlHZCpkVj9GMHkwPEo3VTVXZ2ZhT1AqenUpJSpN
T2lpNDJlflBvODVCcEhCK19YYHpafVF+MzY9c1FUMWgKejBgVFNyelZleWJJTyp+fUpBSlpgYSZs
Wnh1fit+dTluJFNFd2tuWkBOQlRCUS1zVj95P3ptN3xUNTRjPCFvOT1NCnppYCptPXFpWik0ei1q
OU5uTlRiaVhKbktRI1JBbHtLa3s0Rjt8PUsjcXFGTChsKil9OExBNWs/QlR2YFc2KDFpVAp6WHI9
KzJKJEdWWEozQGx8Z2gtRDdiU1l5YHJGfXVoPm9CQUZaTkcrVmU4YmJIPV8xa2owVmV7cV40dlkt
Q1gtbWAKejBGPE9MUm4/X1NMOVJzYmptZSU5aWpGLW9xakBRXz80aHxMbksjcGtBb1c9Zz9wOW48
QkRmSVNIeT9QNV9pdDlACno/Kmk1N2ZAJClpcU18Y3ImT35+LWZJPmlDd1l6eUtAWTJYfXhjV303
RDtgNWxqNldWV2c8cCNzT0paPCZvNE1SSwp6UGBnUXRvOXRCNyYldV5lYylhUDBkcjg9eV56fGJW
WmwyaEozTTA4PT9geU12YW1WSn47QUNaRzNBJD1KXn1ZWmQKenszRU9wM05SUzIjUD5oQkQqcm5i
QTc4VkokUWo9JDZiPkkxMDNaUzQqVz9DK3A8ZzV4aUFJam4zNG5OdU9HcVdmCnojYShxZClkUXNm
QHxHPy1ocX5NYyhpaWljMUZZbHR5ayVDUWl1VkVLR2YpSztoQUZ+fXR+RUM5SSp1a21EXzVvdAp6
NEdzP0tzPFNkOSs8KyZraCokV1B1eVg1YVlTTlRjOzRQdCVGZ3VMJTR3Sk93X3koZWZkPjx5PE58
ZEZ7d1RFe3IKelJjc19eSXVUQjhkWWwpQTJ8WTIwMCZ8cDJEPGIqdFMlJjZAJXZKYmQha2NIVCM9
aVFAenVgKHhQbWUlcEs5NWxwCno4bDYjcGJjUW9ROFlHe0sjVWBwPXZTaTcoZUhqNGFiNkBPQnp3
ZUskOV9FRk9KJHM7VFlISXBzd0xQVCU2b2A4ewp6OSgmI0RmQTA+Vkg4TGJfejY8YH1GR2UlbnFP
ZUgxSCt7JjxzY2U1aGZxVFFOYl8wfGpqI29yVENRZ0B1KVVMOHcKelJhSUwlPzdKSVZybyVKdXMo
VGQzRiZkNEpvQj5KSUpJbDNOdHktLTxiKGFZREhialR3MzxTdl5UNDdXYXNEZT5BCno4I3p0dmk9
QW0rVVM0ZiZaNmp1SGtqfDlmJmxCZTZvPCk1bTFrQzB6bk17bnNIXzVBVTk8ZHxBYUxxMkQ7NT5m
VQp6PGt4Xl9Se3lDMzxabWVfO312byVTU0hOTyVvR1lNZT9DY29rP2teVEEjSW1nKSFOQD1TVjhQ
ej5hRD1tJWRObXQKemRkWUlWZWpDT3RnQDJURTBRRUNpX3ktPkUhSW9NMG9gWUFydE9ieFpCQj52
TCtQJGxhMm5WbDk/RFM4YkpoQGlICno2ekFCMz5lbTI2T0VDYylaQ3MlP1JIQWQqe15CdFlmQiYt
fHQ0ZGR3bCREam04KGFZUHJWUGwwNT1vdEloby1HOQp6LXRaUUhRfU9fe2B7dkQ/KzZ3fXNjeyln
a0AwYzk2QzhBYFoxJjktZGo7elIzPiU/Q2ZjQzJ0TEtwOHxGRDwpNUAKeiNwdVRCN15uTnJiRyV8
IXRGczFyYXwxIU9uMEM+Kzs1M2JsMU8yMGVVJkNKPGQmc1ohWC1lcEh5M3VGYEZ2S0Z5CnopeUlg
WVlXTUdoZ1YpIVBmV3ElNGNVKHE9e0E3MTRgc2Jjbihlc1VJdldERU9JSENHQUVuTTNfR0JtV2F4
UDxfWgp6dWJgSjQ/eHlqSksrWWpMdz1PTyZ1NjJ3Sih2QysmSEVMXkNtSFAqfkBydVE2UGBuNWxE
e3JXUihLXzBATy1Tdj0KentMTCFzcW9XVk4xVUxHVmRMa2ZrRkx+RSZCO15HdnUwQD98OHFvXjJo
YCY1TStGSy07TD8xQj5jTz1iMTw1KHNQCnpuelI3fEZlcD9YbzZuJCk3ampCdnlNeUBtYDl6N1Ri
dkZqa2VyZFlMZjlNa2FPRDhlNCMmKU1RYnZ7JCleVWAqRgpmM1g9YTc2MF5xelZAVHE8Z3x7aV9T
MUdLRmpBRUI5PEtfSmM0O2J1cAoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL21hdGhtbC9vcGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1leHBl
Y3RlZC50eHQKaW5kZXggODkyZTkyNWExN2IuLjI1OTFjZjNmNDIxIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvbWF0aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvbWF0aG1sL29wZW50eXBl
L29wZW50eXBlLXN0cmV0Y2h5LWV4cGVjdGVkLnR4dApAQCAtMSw4ICsxLDggQEAKIGxheWVyIGF0
ICgwLDApIHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAot
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MzM5Ci0gIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCww
KSBzaXplIDgwMHgzMzkKLSAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCwxNikgc2l6ZSA3ODR4
MzA3CitsYXllciBhdCAoMCwwKSBzaXplIDgwMHgzNTAKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0
ICgwLDApIHNpemUgODAweDM1MAorICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDE2KSBzaXpl
IDc4NHgzMTgKICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXplIDc4NHgzNQogICAg
ICAgICBSZW5kZXJNYXRoTUxNYXRoIHttYXRofSBhdCAoMCwyMCkgc2l6ZSAyNngxMQogICAgICAg
ICAgIFJlbmRlck1hdGhNTFJvdyB7bXJvd30gYXQgKDAsMCkgc2l6ZSAyNngxMQpAQCAtMzUsMTAg
KzM1LDEwIEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDMzOQogICAgICAgICAgICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoMCwtMykgc2l6ZSAyeDAKICAgICAgICAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLC0zKSB3aWR0aCAyOiAiXHh7MjE5Rn0iCiAgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAotICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDIy
MSkgc2l6ZSA3ODR4ODYKLSAgICAgICAgUmVuZGVyTWF0aE1MTWF0aCB7bWF0aH0gYXQgKDAsMCkg
c2l6ZSA4NHg4MgotICAgICAgICAgIFJlbmRlck1hdGhNTFJvdyB7bXJvd30gYXQgKDAsMCkgc2l6
ZSA4NHg4MgotICAgICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3Ige21vfSBhdCAoMCwwKSBz
aXplIDg0eDgyCisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMjIxKSBzaXplIDc4NHg5Nwor
ICAgICAgICBSZW5kZXJNYXRoTUxNYXRoIHttYXRofSBhdCAoMCwwKSBzaXplIDk0eDkzCisgICAg
ICAgICAgUmVuZGVyTWF0aE1MUm93IHttcm93fSBhdCAoMCwwKSBzaXplIDk0eDkzCisgICAgICAg
ICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvciB7bW99IGF0ICgwLDApIHNpemUgOTR4OTMKICAgICAg
ICAgICAgICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsMCkgc2l6ZSAxMHgxMgogICAg
ICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCw2KSBzaXplIDEweDAKICAgICAg
ICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDYpIHdpZHRoIDEwOiAiXHh7MkExQn0iCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYWYwZTZiMDFlYzMuLjc4ZTcyNGRlYjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzcgQEAKKzIwMTgtMTItMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtGcmVlVHlwZV0gUmVtb3ZlIEhhcmZCdXp6RmFjZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNTg5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8uCisKKyAgICAgICAgVGhpcyB3YXMgdXNlZCB0
byBzaGFyZSB0aGUgY29tbW9uIGltcGxlbWVudGF0aW9uIHdpdGggdGhlIGNocm9taXVtIHBvcnQs
IGJ1dCBub3cgdGhhdCBvbmx5IGZyZWV0eXBlIGJhc2VkIHBvcnRzCisgICAgICAgIHVzZSBpdCwg
aXQgY2FuIGJlIHJlbW92ZWQgYW5kIHVzZSBoYl9mdF9mYWNlX2NyZWF0ZV9jYWNoZWQoKSBpbnN0
ZWFkLiBXZSBkb24ndCBuZWVkIHRoZSBnbHlwaCBjYWNoZSBlaXRoZXIsCisgICAgICAgIHNpbmNl
IHdlIGFyZSBhbHJlYWR5IGNhY2hpbmcgZ2x5cGhzIGluIEZvbnQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9GcmVlVHlwZS5jbWFrZTogUmVtb3ZlIEhhcmZCdXp6RmFjZUNhaXJvLmNwcCBhbmQgSGFy
ZkJ1enpGYWNlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1E
YXRhLmg6IFJlbW92ZSBIYXJmQnV6ekZhY2UgbWVtYmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHA6IEFkZCBt
aXNzaW5nIGluY2x1ZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9y
bURhdGE6Om9wZXJhdG9yPSk6IFJlbW92ZSBtX2hhcmZCdXp6RmFjZSBoYW5kbGluZy4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZU9wZW5UeXBlTWF0aEhhcmZCdXp6
Rm9udCBjb25zdCk6IE5ldyBmdW50Y3Rpb24gdG8gY3JlYXRlIGEgaGJfZm9udF90IGZvcgorICAg
ICAgICBPcGVuVHlwZSBtYXRoLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZs
b2F0VG9IYXJmQnV6elBvc2l0aW9uKTogTW92ZWQgZnJvbSBIYXJmQnV6ekZhY2VDYWlyby5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OmhhcmZCdXp6Rm9udEZ1bmN0aW9ucyk6IEFsc28gbW92ZWQgZnJvbSBI
YXJmQnV6ekZhY2VDYWlyby5jcHAsIGJ1dCBpbXBsZW1lbnQgZ2V0X25vbWluYWwvdmFyaWF0aW9u
CisgICAgICAgIGZ1bmN0aW9ucyB3aGVuIHVzaW5nIEhhcmZCdXp6ID49IDEuMi4zIGFuZCB1c2Ug
Rm9udDo6Z2x5cGhGb3JDaGFyYWN0ZXIoKSB0byBtYWtlIGl0IHNpbXBsZXIuCisgICAgICAgIChX
ZWJDb3JlOjpmb250RmVhdHVyZXMpOiBNb3ZlZCBmcm9tIEhhcmZCdXp6RmFjZUNhaXJvLmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6OmZpbmRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9u
KTogTW92ZWQgZnJvbSBIYXJmQnV6ekZhY2UuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6IENy
ZWF0ZSB0aGUgSGFyZkJ1enogZmFjZSBhbmQgZm9udCBoZXJlLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ2Fpcm8uY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hiVW5pcXVlUHRy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpIYlB0ckRlbGV0ZXI8aGJfZmFjZV90Pjo6b3BlcmF0b3Io
KSBjb25zdCk6IEFkZCBkZWxldGVyIGZvciBoYl9mYWNlX3QuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpPcGVuVHlwZU1hdGhEYXRhOjpPcGVuVHlwZU1hdGhEYXRhKTogVXNlIEZvbnRQbGF0Zm9ybURh
dGE6OmNyZWF0ZU9wZW5UeXBlTWF0aEhhcmZCdXp6Rm9udCgpLgorCiAyMDE4LTEyLTEyICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbRnJlZVR5
cGVdIEFkZCBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHZhcmlhdGlvbiBmb250cwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJlZVR5cGUuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GcmVlVHlwZS5jbWFrZQppbmRleCA5OGYzZWUxODVjOS4uYzE2OTc3ZjQ5
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZyZWVUeXBlLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZyZWVUeXBlLmNtYWtlCkBAIC0xMSw3ICsxMSw2
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Zy
ZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuY3BwCiApCiAKIGlmIChQT1JUIFNUUkVR
VUFMICJHVEsiKQpAQCAtMjcsOCArMjYsNiBAQCBlbmRpZiAoKQogaWYgKFVTRV9DQUlSTykKICAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKLQotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDYWlyby5jcHAKICAgICApCiBlbmRpZiAoKQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRh
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgK
aW5kZXggYmY2MjNhZGQzMmYuLjhhMTdjOGJlN2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC00MCw3ICs0MCw3IEBA
CiAKICNpZiBVU0UoRlJFRVRZUEUpCiAjaW5jbHVkZSAiRmNVbmlxdWVQdHIuaCIKLSNpbmNsdWRl
ICJIYXJmQnV6ekZhY2UuaCIKKyNpbmNsdWRlICJIYlVuaXF1ZVB0ci5oIgogI2luY2x1ZGUgIlJl
ZlB0ckZvbnRjb25maWcuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjZW5kaWYKQEAgLTE2OCw3ICsx
NjgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShGUkVFVFlQRSkKLSAgICBIYXJmQnV6
ekZhY2UmIGhhcmZCdXp6RmFjZSgpIGNvbnN0OworICAgIEhiVW5pcXVlUHRyPGhiX2ZvbnRfdD4g
Y3JlYXRlT3BlblR5cGVNYXRoSGFyZkJ1enpGb250KCkgY29uc3Q7CiAgICAgYm9vbCBoYXNDb21w
YXRpYmxlQ2hhcm1hcCgpIGNvbnN0OwogICAgIEZjUGF0dGVybiogZmNQYXR0ZXJuKCkgY29uc3Q7
CiAgICAgYm9vbCBpc0ZpeGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkV2lkdGg7IH0K
QEAgLTI0OSw3ICsyNDksNiBAQCBwcml2YXRlOgogCiAjaWYgVVNFKEZSRUVUWVBFKQogICAgIFJl
ZlB0cjxGY1BhdHRlcm4+IG1fcGF0dGVybjsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxI
YXJmQnV6ekZhY2U+IG1faGFyZkJ1enpGYWNlOwogI2VuZGlmCiAKICAgICAvLyBUaGUgdmFsdWVz
IGJlbG93IGFyZSBjb21tb24gdG8gYWxsIHBvcnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhRnJlZVR5
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udEN1
c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAppbmRleCA4ODIxZDQyYTcyOS4uMTM3NjVmNDNk
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udEN1c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBl
LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8ZnQy
YnVpbGQuaD4KICNpbmNsdWRlIEZUX01PRFVMRV9ICisjaW5jbHVkZSA8bXV0ZXg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5j
cHAKaW5kZXggYjQ2NzQ0YzBjZWYuLjY0NWNkMTczNTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQ
bGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxmb250
Y29uZmlnL2ZjZnJlZXR5cGUuaD4KICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRf
VFJVRVRZUEVfVEFCTEVTX0gKKyNpbmNsdWRlIDxoYi1mdC5oPgorI2luY2x1ZGUgPGhiLW90Lmg+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApAQCAtMTQ0LDkgKzE0Niw2IEBAIEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9y
bURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKIAogICAgIG1f
c2NhbGVkRm9udCA9IG90aGVyLm1fc2NhbGVkRm9udDsKIAotICAgIC8vIFRoaXMgd2lsbCBiZSBy
ZS1jcmVhdGVkIG9uIGRlbWFuZC4KLSAgICBtX2hhcmZCdXp6RmFjZSA9IG51bGxwdHI7Ci0KICAg
ICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE4NCwxMyArMTgzLDYgQEAgRm9udFBsYXRmb3JtRGF0
YSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhTaXplKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHNvdXJjZSwKICAgICByZXR1cm4gY29weTsKIH0KIAotSGFyZkJ1enpGYWNlJiBGb250UGxhdGZv
cm1EYXRhOjpoYXJmQnV6ekZhY2UoKSBjb25zdAotewotICAgIGlmICghbV9oYXJmQnV6ekZhY2Up
Ci0gICAgICAgIG1faGFyZkJ1enpGYWNlID0gc3RkOjptYWtlX3VuaXF1ZTxIYXJmQnV6ekZhY2U+
KGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSY+KCp0aGlzKSwgaGFzaCgpKTsKLSAgICByZXR1
cm4gKm1faGFyZkJ1enpGYWNlOwotfQotCiBGY1BhdHRlcm4qIEZvbnRQbGF0Zm9ybURhdGE6OmZj
UGF0dGVybigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGF0dGVybi5nZXQoKTsKQEAgLTMwNCw0
ICsyOTYsMTggQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9udFBsYXRmb3JtRGF0YTo6b3BlblR5
cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoV1RGTW92ZShkYXRhKSk7CiB9CiAKK0hiVW5pcXVlUHRyPGhiX2ZvbnRfdD4gRm9udFBs
YXRmb3JtRGF0YTo6Y3JlYXRlT3BlblR5cGVNYXRoSGFyZkJ1enpGb250KCkgY29uc3QKK3sKKyAg
ICBDYWlyb0Z0RmFjZUxvY2tlciBjYWlyb0Z0RmFjZUxvY2tlcihtX3NjYWxlZEZvbnQuZ2V0KCkp
OworICAgIEZUX0ZhY2UgZnRGYWNlID0gY2Fpcm9GdEZhY2VMb2NrZXIuZnRGYWNlKCk7CisgICAg
aWYgKCFmdEZhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSGJVbmlxdWVQdHI8
aGJfZmFjZV90PiBmYWNlKGhiX2Z0X2ZhY2VfY3JlYXRlX2NhY2hlZChmdEZhY2UpKTsKKyAgICBp
ZiAoIWhiX290X21hdGhfaGFzX2RhdGEoZmFjZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIEhiVW5pcXVlUHRyPGhiX2ZvbnRfdD4oaGJfZm9udF9jcmVhdGUo
ZmFjZS5nZXQoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRy
b2xsZXJIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHAKaW5kZXggMjcxMjNkM2I2ODAu
LjQ0MjI2OTcyZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVy
SGFyZkJ1enouY3BwCkBAIC0yNiwxMCArMjYsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkNhaXJvVXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJIYlVuaXF1ZVB0ci5o
IgogI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUg
PGhiLWZ0Lmg+CiAjaW5jbHVkZSA8aGItaWN1Lmg+CisjaW5jbHVkZSA8aGItb3QuaD4KKworI2lm
IEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisjaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gK
KyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDYgKzQ1LDkwIEBAIHN0YXRp
YyBpbmxpbmUgZmxvYXQgaGFyZkJ1enpQb3NpdGlvblRvRmxvYXQoaGJfcG9zaXRpb25fdCB2YWx1
ZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKSAvICgxIDw8IDE2KTsKIH0K
IAorc3RhdGljIGlubGluZSBoYl9wb3NpdGlvbl90IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGZs
b2F0IHZhbHVlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxoYl9wb3NpdGlvbl90Pih2YWx1
ZSAqICgxIDw8IDE2KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaGJfcG9zaXRpb25fdCBkb3VibGVU
b0hhcmZCdXp6UG9zaXRpb24oZG91YmxlIHZhbHVlKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxoYl9wb3NpdGlvbl90Pih2YWx1ZSAqICgxIDw8IDE2KSk7Cit9CisKK3N0YXRpYyBoYl9mb250
X2Z1bmNzX3QqIGhhcmZCdXp6Rm9udEZ1bmN0aW9ucygpCit7CisgICAgc3RhdGljIGhiX2ZvbnRf
ZnVuY3NfdCogZm9udEZ1bmN0aW9ucyA9IG51bGxwdHI7CisKKyAgICAvLyBXZSBkb24ndCBzZXQg
Y2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIHdlIGNhbid0IHN1cHBvcnQuCisgICAgLy8gSGFyZmJ1
enogd2lsbCB1c2UgdGhlIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIGlmIHRoZXkgYXJlbid0IHNl
dC4KKyAgICBpZiAoIWZvbnRGdW5jdGlvbnMpIHsKKyAgICAgICAgZm9udEZ1bmN0aW9ucyA9IGhi
X2ZvbnRfZnVuY3NfY3JlYXRlKCk7CisjaWYgSEJfVkVSU0lPTl9BVExFQVNUKDEsIDIsIDMpCisg
ICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X25vbWluYWxfZ2x5cGhfZnVuYyhmb250RnVuY3Rpb25z
LCBbXShoYl9mb250X3QqLCB2b2lkKiBjb250ZXh0LCBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBo
Yl9jb2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQqKSAtPiBoYl9ib29sX3QgeworICAgICAgICAgICAg
YXV0byYgZm9udCA9ICpzdGF0aWNfY2FzdDxGb250Kj4oY29udGV4dCk7CisgICAgICAgICAgICAq
Z2x5cGggPSBmb250LmdseXBoRm9yQ2hhcmFjdGVyKHVuaWNvZGUpOworICAgICAgICAgICAgcmV0
dXJuICEhKmdseXBoOworICAgICAgICB9LCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICBo
Yl9mb250X2Z1bmNzX3NldF92YXJpYXRpb25fZ2x5cGhfZnVuYyhmb250RnVuY3Rpb25zLCBbXSho
Yl9mb250X3QqLCB2b2lkKiBjb250ZXh0LCBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9jb2Rl
cG9pbnRfdCB2YXJpYXRpb24sIGhiX2NvZGVwb2ludF90KiBnbHlwaCwgdm9pZCopIC0+IGhiX2Jv
b2xfdCB7CisgICAgICAgICAgICBhdXRvJiBmb250ID0gKnN0YXRpY19jYXN0PEZvbnQqPihjb250
ZXh0KTsKKyAgICAgICAgICAgIGF1dG8qIHNjYWxlZEZvbnQgPSBmb250LnBsYXRmb3JtRGF0YSgp
LnNjYWxlZEZvbnQoKTsKKyAgICAgICAgICAgIEFTU0VSVChzY2FsZWRGb250KTsKKworICAgICAg
ICAgICAgQ2Fpcm9GdEZhY2VMb2NrZXIgY2Fpcm9GdEZhY2VMb2NrZXIoc2NhbGVkRm9udCk7Cisg
ICAgICAgICAgICBpZiAoRlRfRmFjZSBmdEZhY2UgPSBjYWlyb0Z0RmFjZUxvY2tlci5mdEZhY2Uo
KSkgeworICAgICAgICAgICAgICAgICpnbHlwaCA9IEZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJbmRl
eChmdEZhY2UsIHVuaWNvZGUsIHZhcmlhdGlvbik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9LCBudWxscHRyLCBudWxscHRyKTsKKyNlbHNlCisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0
X2dseXBoX2Z1bmMoZm9udEZ1bmN0aW9ucywgW10oaGJfZm9udF90Kiwgdm9pZCogY29udGV4dCwg
aGJfY29kZXBvaW50X3QgdW5pY29kZSwgaGJfY29kZXBvaW50X3QsIGhiX2NvZGVwb2ludF90KiBn
bHlwaCwgdm9pZCopIC0+IGhiX2Jvb2xfdCB7CisgICAgICAgICAgICBhdXRvJiBmb250ID0gKnN0
YXRpY19jYXN0PEZvbnQqPihjb250ZXh0KTsKKyAgICAgICAgICAgICpnbHlwaCA9IGZvbnQuZ2x5
cGhGb3JDaGFyYWN0ZXIodW5pY29kZSk7CisgICAgICAgICAgICByZXR1cm4gISEqZ2x5cGg7Cisg
ICAgICAgIH0sIG51bGxwdHIsIG51bGxwdHIpOworI2VuZGlmCisgICAgICAgIGhiX2ZvbnRfZnVu
Y3Nfc2V0X2dseXBoX2hfYWR2YW5jZV9mdW5jKGZvbnRGdW5jdGlvbnMsIFtdKGhiX2ZvbnRfdCos
IHZvaWQqIGNvbnRleHQsIGhiX2NvZGVwb2ludF90IHBvaW50LCB2b2lkKikgLT4gaGJfYm9vbF90
IHsKKyAgICAgICAgICAgIGF1dG8mIGZvbnQgPSAqc3RhdGljX2Nhc3Q8Rm9udCo+KGNvbnRleHQp
OworICAgICAgICAgICAgYXV0byogc2NhbGVkRm9udCA9IGZvbnQucGxhdGZvcm1EYXRhKCkuc2Nh
bGVkRm9udCgpOworICAgICAgICAgICAgQVNTRVJUKHNjYWxlZEZvbnQpOworCisgICAgICAgICAg
ICBjYWlyb190ZXh0X2V4dGVudHNfdCBnbHlwaEV4dGVudHM7CisgICAgICAgICAgICBjYWlyb19n
bHlwaF90IGdseXBoID0geyBwb2ludCwgMCwgMCB9OworICAgICAgICAgICAgY2Fpcm9fc2NhbGVk
X2ZvbnRfZ2x5cGhfZXh0ZW50cyhzY2FsZWRGb250LCAmZ2x5cGgsIDEsICZnbHlwaEV4dGVudHMp
OworCisgICAgICAgICAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzID0gZ2x5cGhFeHRlbnRzLnlf
YWR2YW5jZTsKKyAgICAgICAgICAgIHJldHVybiBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oaGFz
VmVydGljYWxHbHlwaHMgPyAtZ2x5cGhFeHRlbnRzLnlfYWR2YW5jZSA6IGdseXBoRXh0ZW50cy54
X2FkdmFuY2UpOworICAgICAgICB9LCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICBoYl9m
b250X2Z1bmNzX3NldF9nbHlwaF9oX29yaWdpbl9mdW5jKGZvbnRGdW5jdGlvbnMsIFtdKGhiX2Zv
bnRfdCosIHZvaWQqLCBoYl9jb2RlcG9pbnRfdCwgaGJfcG9zaXRpb25fdCosIGhiX3Bvc2l0aW9u
X3QqLCB2b2lkKikgLT4gaGJfYm9vbF90IHsKKyAgICAgICAgICAgIC8vIEp1c3QgcmV0dXJuIHRy
dWUsIGZvbGxvd2luZyB0aGUgd2F5IHRoYXQgSGFyZmJ1enotRnJlZVR5cGUgaW1wbGVtZW50YXRp
b24gZG9lcy4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LCBudWxscHRyLCBu
dWxscHRyKTsKKworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9leHRlbnRzX2Z1bmMo
Zm9udEZ1bmN0aW9ucywgW10oaGJfZm9udF90Kiwgdm9pZCogY29udGV4dCwgaGJfY29kZXBvaW50
X3QgcG9pbnQsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cywgdm9pZCopIC0+IGhiX2Jvb2xf
dCB7CisgICAgICAgICAgICBhdXRvJiBmb250ID0gKnN0YXRpY19jYXN0PEZvbnQqPihjb250ZXh0
KTsKKyAgICAgICAgICAgIGF1dG8qIHNjYWxlZEZvbnQgPSBmb250LnBsYXRmb3JtRGF0YSgpLnNj
YWxlZEZvbnQoKTsKKyAgICAgICAgICAgIEFTU0VSVChzY2FsZWRGb250KTsKKworICAgICAgICAg
ICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZ2x5cGhFeHRlbnRzOworICAgICAgICAgICAgY2Fpcm9f
Z2x5cGhfdCBnbHlwaCA9IHsgcG9pbnQsIDAsIDAgfTsKKyAgICAgICAgICAgIGNhaXJvX3NjYWxl
ZF9mb250X2dseXBoX2V4dGVudHMoc2NhbGVkRm9udCwgJmdseXBoLCAxLCAmZ2x5cGhFeHRlbnRz
KTsKKworICAgICAgICAgICAgYm9vbCBoYXNWZXJ0aWNhbEdseXBocyA9IGdseXBoRXh0ZW50cy55
X2FkdmFuY2U7CisgICAgICAgICAgICBleHRlbnRzLT54X2JlYXJpbmcgPSBkb3VibGVUb0hhcmZC
dXp6UG9zaXRpb24oZ2x5cGhFeHRlbnRzLnhfYmVhcmluZyk7CisgICAgICAgICAgICBleHRlbnRz
LT55X2JlYXJpbmcgPSBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oaGFzVmVydGljYWxHbHlwaHMg
PyAtZ2x5cGhFeHRlbnRzLnlfYmVhcmluZyA6IGdseXBoRXh0ZW50cy55X2JlYXJpbmcpOworICAg
ICAgICAgICAgZXh0ZW50cy0+d2lkdGggPSBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oaGFzVmVy
dGljYWxHbHlwaHMgPyAtZ2x5cGhFeHRlbnRzLmhlaWdodCA6IGdseXBoRXh0ZW50cy53aWR0aCk7
CisgICAgICAgICAgICBleHRlbnRzLT5oZWlnaHQgPSBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24o
aGFzVmVydGljYWxHbHlwaHMgPyBnbHlwaEV4dGVudHMud2lkdGggOiBnbHlwaEV4dGVudHMuaGVp
Z2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LCBudWxscHRyLCBudWxs
cHRyKTsKKworICAgICAgICBoYl9mb250X2Z1bmNzX21ha2VfaW1tdXRhYmxlKGZvbnRGdW5jdGlv
bnMpOworICAgIH0KKyAgICByZXR1cm4gZm9udEZ1bmN0aW9uczsKK30KKwogQ29tcGxleFRleHRD
b250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oaGJfYnVmZmVyX3QqIGJ1
ZmZlciwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IHN0cmluZ0xvY2F0aW9uLCB1bnNpZ25lZCBzdHJpbmdMZW5ndGgsIHVuc2lnbmVkIGluZGV4QmVn
aW4sIHVuc2lnbmVkIGluZGV4RW5kKQogICAgIDogbV9pbml0aWFsQWR2YW5jZSgwLCAwKQogICAg
ICwgbV9mb250KGZvbnQpCkBAIC04MywyNSArMTc0LDI4IEBAIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKGhiX2J1ZmZlcl90KiBidWZmZXIsIGNv
bnN0CiAgICAgfQogfQogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaGJFbmQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oLTEpOworc3RhdGljIGNvbnN0IGhiX3RhZ190IHNfdmVydFRhZyA9IEhCX1RB
RygndicsICdlJywgJ3InLCAndCcpOworc3RhdGljIGNvbnN0IGhiX3RhZ190IHNfdnJ0MlRhZyA9
IEhCX1RBRygndicsICdyJywgJ3QnLCAnMicpOworc3RhdGljIGNvbnN0IGhiX3RhZ190IHNfa2Vy
blRhZyA9IEhCX1RBRygnaycsICdlJywgJ3InLCAnbicpOworc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNfaGJFbmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpOwogCiBzdGF0aWMgVmVjdG9yPGhi
X2ZlYXR1cmVfdCwgND4gZm9udEZlYXR1cmVzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBGb250
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAgICAgVmVjdG9yPGhiX2ZlYXR1cmVfdCwgND4g
ZmVhdHVyZXM7CiAKICAgICBpZiAob3JpZW50YXRpb24gPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCkgewotICAgICAgICBmZWF0dXJlcy5hcHBlbmQoeyBIYXJmQnV6ekZhY2U6OnZlcnRUYWcs
IDEsIDAsIGhiRW5kIH0pOwotICAgICAgICBmZWF0dXJlcy5hcHBlbmQoeyBIYXJmQnV6ekZhY2U6
OnZydDJUYWcsIDEsIDAsIGhiRW5kIH0pOworICAgICAgICBmZWF0dXJlcy5hcHBlbmQoeyBzX3Zl
cnRUYWcsIDEsIDAsIHNfaGJFbmQgfSk7CisgICAgICAgIGZlYXR1cmVzLmFwcGVuZCh7IHNfdnJ0
MlRhZywgMSwgMCwgc19oYkVuZCB9KTsKICAgICB9CiAKLSAgICBoYl9mZWF0dXJlX3Qga2Vybmlu
ZyA9IHsgSGFyZkJ1enpGYWNlOjprZXJuVGFnLCAwLCAwLCBoYkVuZCB9OworICAgIGhiX2ZlYXR1
cmVfdCBrZXJuaW5nID0geyBzX2tlcm5UYWcsIDAsIDAsIHNfaGJFbmQgfTsKICAgICBpZiAoZm9u
dC5lbmFibGVLZXJuaW5nKCkpCiAgICAgICAgIGtlcm5pbmcudmFsdWUgPSAxOwogICAgIGZlYXR1
cmVzLmFwcGVuZChXVEZNb3ZlKGtlcm5pbmcpKTsKIAogICAgIGZvciAoYXV0byYgZmVhdHVyZSA6
IGZvbnQuZm9udERlc2NyaXB0aW9uKCkuZmVhdHVyZVNldHRpbmdzKCkpIHsKICAgICAgICAgYXV0
byYgdGFnID0gZmVhdHVyZS50YWcoKTsKLSAgICAgICAgZmVhdHVyZXMuYXBwZW5kKHsgSEJfVEFH
KHRhZ1swXSwgdGFnWzFdLCB0YWdbMl0sIHRhZ1szXSksIHN0YXRpY19jYXN0PHVpbnQzMl90Pihm
ZWF0dXJlLnZhbHVlKCkpLCAwLCBoYkVuZCB9KTsKKyAgICAgICAgZmVhdHVyZXMuYXBwZW5kKHsg
SEJfVEFHKHRhZ1swXSwgdGFnWzFdLCB0YWdbMl0sIHRhZ1szXSksIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihmZWF0dXJlLnZhbHVlKCkpLCAwLCBzX2hiRW5kIH0pOwogICAgIH0KIAogICAgIHJldHVy
biBmZWF0dXJlczsKQEAgLTE2OCw2ICsyNjIsMjcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SEJS
dW4+IGZpbmROZXh0UnVuKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgK
ICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxIQlJ1bj4oeyBzdGFydEluZGV4LCB0ZXh0SXRlcmF0
b3IuY3VycmVudEluZGV4KCksIGN1cnJlbnRTY3JpcHQudmFsdWUoKSB9KTsKIH0KIAorc3RhdGlj
IGhiX3NjcmlwdF90IGZpbmRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKGhiX2Zh
Y2VfdCogZmFjZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnQgPSAzMjsK
KworICAgIHVuc2lnbmVkIHNjcmlwdENvdW50ID0gbWF4Q291bnQ7CisgICAgaGJfdGFnX3Qgc2Ny
aXB0VGFnc1ttYXhDb3VudF07CisgICAgaGJfb3RfbGF5b3V0X3RhYmxlX2dldF9zY3JpcHRfdGFn
cyhmYWNlLCBIQl9PVF9UQUdfR1NVQiwgMCwgJnNjcmlwdENvdW50LCBzY3JpcHRUYWdzKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIHNjcmlwdEluZGV4ID0gMDsgc2NyaXB0SW5kZXggPCBzY3JpcHRDb3Vu
dDsgKytzY3JpcHRJbmRleCkgeworICAgICAgICB1bnNpZ25lZCBsYW5ndWFnZUNvdW50ID0gbWF4
Q291bnQ7CisgICAgICAgIGhiX3RhZ190IGxhbmd1YWdlVGFnc1ttYXhDb3VudF07CisgICAgICAg
IGhiX290X2xheW91dF9zY3JpcHRfZ2V0X2xhbmd1YWdlX3RhZ3MoZmFjZSwgSEJfT1RfVEFHX0dT
VUIsIHNjcmlwdEluZGV4LCAwLCAmbGFuZ3VhZ2VDb3VudCwgbGFuZ3VhZ2VUYWdzKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBsYW5ndWFnZUluZGV4ID0gMDsgbGFuZ3VhZ2VJbmRleCA8IGxhbmd1
YWdlQ291bnQ7ICsrbGFuZ3VhZ2VJbmRleCkgeworICAgICAgICAgICAgdW5zaWduZWQgZmVhdHVy
ZUluZGV4OworICAgICAgICAgICAgaWYgKGhiX290X2xheW91dF9sYW5ndWFnZV9maW5kX2ZlYXR1
cmUoZmFjZSwgSEJfT1RfVEFHX0dTVUIsIHNjcmlwdEluZGV4LCBsYW5ndWFnZUluZGV4LCBzX3Zl
cnRUYWcsICZmZWF0dXJlSW5kZXgpCisgICAgICAgICAgICAgICAgfHwgaGJfb3RfbGF5b3V0X2xh
bmd1YWdlX2ZpbmRfZmVhdHVyZShmYWNlLCBIQl9PVF9UQUdfR1NVQiwgc2NyaXB0SW5kZXgsIGxh
bmd1YWdlSW5kZXgsIHNfdnJ0MlRhZywgJmZlYXR1cmVJbmRleCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGhiX290X3RhZ190b19zY3JpcHQoc2NyaXB0VGFnc1tzY3JpcHRJbmRleF0pOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBIQl9TQ1JJUFRfSU5WQUxJRDsKK30KKwogdm9pZCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJz
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmlu
Z0xvY2F0aW9uLCBjb25zdCBGb250KiBmb250KQogewogICAgIGlmICghZm9udCkgewpAQCAtMTkx
LDEzICszMDYsNTAgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4
VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGEKICAgICAgICAgcmV0dXJuOwog
CiAgICAgY29uc3QgYXV0byYgZm9udFBsYXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgp
OworICAgIGF1dG8qIHNjYWxlZEZvbnQgPSBmb250UGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKTsK
KyAgICBDYWlyb0Z0RmFjZUxvY2tlciBjYWlyb0Z0RmFjZUxvY2tlcihzY2FsZWRGb250KTsKKyAg
ICBGVF9GYWNlIGZ0RmFjZSA9IGNhaXJvRnRGYWNlTG9ja2VyLmZ0RmFjZSgpOworICAgIGlmICgh
ZnRGYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBIYlVuaXF1ZVB0cjxoYl9mYWNlX3Q+IGZh
Y2UoaGJfZnRfZmFjZV9jcmVhdGVfY2FjaGVkKGZ0RmFjZSkpOworICAgIEhiVW5pcXVlUHRyPGhi
X2ZvbnRfdD4gaGFyZkJ1enpGb250KGhiX2ZvbnRfY3JlYXRlKGZhY2UuZ2V0KCkpKTsKKyAgICBo
Yl9mb250X3NldF9mdW5jcyhoYXJmQnV6ekZvbnQuZ2V0KCksIGhhcmZCdXp6Rm9udEZ1bmN0aW9u
cygpLCBjb25zdF9jYXN0PEZvbnQqPihmb250KSwgbnVsbHB0cik7CisgICAgY29uc3QgZmxvYXQg
c2l6ZSA9IGZvbnRQbGF0Zm9ybURhdGEuc2l6ZSgpOworICAgIGlmIChmbG9vcmYoc2l6ZSkgPT0g
c2l6ZSkKKyAgICAgICAgaGJfZm9udF9zZXRfcHBlbShoYXJmQnV6ekZvbnQuZ2V0KCksIHNpemUs
IHNpemUpOworICAgIGludCBzY2FsZSA9IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKHNpemUpOwor
ICAgIGhiX2ZvbnRfc2V0X3NjYWxlKGhhcmZCdXp6Rm9udC5nZXQoKSwgc2NhbGUsIHNjYWxlKTsK
KworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAgRlRfTU1fVmFyKiBmdE1NVmFyOwor
ICAgIGlmICghRlRfR2V0X01NX1ZhcihmdEZhY2UsICZmdE1NVmFyKSkgeworICAgICAgICBWZWN0
b3I8RlRfRml4ZWQsIDQ+IGNvb3JkczsKKyAgICAgICAgY29vcmRzLnJlc2l6ZShmdE1NVmFyLT5u
dW1fYXhpcyk7CisgICAgICAgIGlmICghRlRfR2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMoZnRG
YWNlLCBjb29yZHMuc2l6ZSgpLCBjb29yZHMuZGF0YSgpKSkgeworICAgICAgICAgICAgVmVjdG9y
PGhiX3ZhcmlhdGlvbl90LCA0PiB2YXJpYXRpb25zKGNvb3Jkcy5zaXplKCkpOworICAgICAgICAg
ICAgZm9yIChGVF9VSW50IGkgPSAwOyBpIDwgZnRNTVZhci0+bnVtX2F4aXM7ICsraSkgeworICAg
ICAgICAgICAgICAgIHZhcmlhdGlvbnNbaV0udGFnID0gZnRNTVZhci0+YXhpc1tpXS50YWc7Cisg
ICAgICAgICAgICAgICAgdmFyaWF0aW9uc1tpXS52YWx1ZSA9IGNvb3Jkc1tpXSAvIDY1NTM2LjA7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYl9mb250X3NldF92YXJpYXRpb25zKGhhcmZC
dXp6Rm9udC5nZXQoKSwgdmFyaWF0aW9ucy5kYXRhKCksIHZhcmlhdGlvbnMuc2l6ZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICBGVF9Eb25lX01NX1ZhcihmdEZhY2UtPmdseXBoLT5saWJyYXJ5LCBm
dE1NVmFyKTsKKyAgICB9CisjZW5kaWYKKworICAgIGhiX2ZvbnRfbWFrZV9pbW11dGFibGUoaGFy
ZkJ1enpGb250LmdldCgpKTsKKwogICAgIGF1dG8gZmVhdHVyZXMgPSBmb250RmVhdHVyZXMobV9m
b250LCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkpOwogICAgIEhiVW5pcXVlUHRyPGhi
X2J1ZmZlcl90PiBidWZmZXIoaGJfYnVmZmVyX2NyZWF0ZSgpKTsKKyAgICBpZiAoZm9udFBsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCisgICAg
ICAgIGhiX2J1ZmZlcl9zZXRfc2NyaXB0KGJ1ZmZlci5nZXQoKSwgZmluZFNjcmlwdEZvclZlcnRp
Y2FsR2x5cGhTdWJzdGl0dXRpb24oZmFjZS5nZXQoKSkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHJ1bkNvdW50OyArK2kpIHsKICAgICAgICAgYXV0byYgcnVuID0gcnVuTGlzdFtt
X3J1bi5ydGwoKSA/IHJ1bkNvdW50IC0gaSAtIDEgOiBpXTsKIAotICAgICAgICBoYl9idWZmZXJf
c2V0X3NjcmlwdChidWZmZXIuZ2V0KCksIGhiX2ljdV9zY3JpcHRfdG9fc2NyaXB0KHJ1bi5zY3Jp
cHQpKTsKKyAgICAgICAgaWYgKGZvbnRQbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSAhPSBGb250
T3JpZW50YXRpb246OlZlcnRpY2FsKQorICAgICAgICAgICAgaGJfYnVmZmVyX3NldF9zY3JpcHQo
YnVmZmVyLmdldCgpLCBoYl9pY3Vfc2NyaXB0X3RvX3NjcmlwdChydW4uc2NyaXB0KSk7CiAgICAg
ICAgIGlmICghbV9tYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiB8fCBtX3J1bi5kaXJlY3Rp
b25hbE92ZXJyaWRlKCkpCiAgICAgICAgICAgICBoYl9idWZmZXJfc2V0X2RpcmVjdGlvbihidWZm
ZXIuZ2V0KCksIG1fcnVuLnJ0bCgpID8gSEJfRElSRUNUSU9OX1JUTCA6IEhCX0RJUkVDVElPTl9M
VFIpOwogICAgICAgICBlbHNlIHsKQEAgLTIwNiwxMSArMzU4LDYgQEAgdm9pZCBDb21wbGV4VGV4
dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiBjaGEKICAgICAgICAgfQogICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGJ1ZmZlci5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGNoYXJhY3RlcnMpLCBsZW5n
dGgsIHJ1bi5zdGFydEluZGV4LCBydW4uZW5kSW5kZXggLSBydW4uc3RhcnRJbmRleCk7CiAKLSAg
ICAgICAgYXV0byYgZmFjZSA9IGZvbnRQbGF0Zm9ybURhdGEuaGFyZkJ1enpGYWNlKCk7Ci0gICAg
ICAgIGlmIChmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9u
OjpWZXJ0aWNhbCkKLSAgICAgICAgICAgIGZhY2Uuc2V0U2NyaXB0Rm9yVmVydGljYWxHbHlwaFN1
YnN0aXR1dGlvbihidWZmZXIuZ2V0KCkpOwotCi0gICAgICAgIEhiVW5pcXVlUHRyPGhiX2ZvbnRf
dD4gaGFyZkJ1enpGb250KGZhY2UuY3JlYXRlRm9udCgpKTsKICAgICAgICAgaGJfc2hhcGUoaGFy
ZkJ1enpGb250LmdldCgpLCBidWZmZXIuZ2V0KCksIGZlYXR1cmVzLmlzRW1wdHkoKSA/IG51bGxw
dHIgOiBmZWF0dXJlcy5kYXRhKCksIGZlYXR1cmVzLnNpemUoKSk7CiAgICAgICAgIG1fY29tcGxl
eFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKGJ1ZmZlci5nZXQoKSwgKmZv
bnQsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIHJ1bi5zdGFydEluZGV4LCBy
dW4uZW5kSW5kZXgpKTsKICAgICAgICAgaGJfYnVmZmVyX3Jlc2V0KGJ1ZmZlci5nZXQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6ekZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpGYWNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU2OTFkODMz
NWMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0hhcmZCdXp6RmFjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIKLQotI2luY2x1ZGUg
IkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlIDxoYi1vdC5oPgotI2luY2x1ZGUgPGhiLmg+
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY29uc3QgaGJfdGFnX3QgSGFyZkJ1enpGYWNlOjp2ZXJ0VGFnID0gSEJfVEFHKCd2JywgJ2Un
LCAncicsICd0Jyk7Ci1jb25zdCBoYl90YWdfdCBIYXJmQnV6ekZhY2U6OnZydDJUYWcgPSBIQl9U
QUcoJ3YnLCAncicsICd0JywgJzInKTsKLWNvbnN0IGhiX3RhZ190IEhhcmZCdXp6RmFjZTo6a2Vy
blRhZyA9IEhCX1RBRygnaycsICdlJywgJ3InLCAnbicpOwotCi0vLyBUaG91Z2ggd2UgaGF2ZSBG
b250Q2FjaGUgY2xhc3MsIHdoaWNoIHByb3ZpZGVzIHRoZSBjYWNoZSBtZWNoYW5pc20gZm9yCi0v
LyBXZWJLaXQncyBmb250IG9iamVjdHMsIHdlIGFsc28gbmVlZCBhZGRpdGlvbmFsIGNhY2hpbmcg
bGF5ZXIgZm9yIEhhcmZCdXp6Ci0vLyB0byByZWR1Y2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBi
ZWNhdXNlIGhiX2ZhY2VfdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCi0vLyB1bmRlcmxpbmcg
Zm9udCBkYXRhIChlLmcuIENURm9udFJlZiwgRlRGYWNlKS4KLQotSGFyZkJ1enpGYWNlOjpDYWNo
ZUVudHJ5OjpDYWNoZUVudHJ5KGhiX2ZhY2VfdCogZmFjZSkKLSAgICA6IG1fZmFjZShmYWNlKQot
ewotICAgIEFTU0VSVChtX2ZhY2UpOwotfQotCi1IYXJmQnV6ekZhY2U6OkNhY2hlRW50cnk6On5D
YWNoZUVudHJ5KCkKLXsKLSAgICBoYl9mYWNlX2Rlc3Ryb3kobV9mYWNlKTsKLX0KLQotSGFyZkJ1
enpGYWNlOjpDYWNoZSYgSGFyZkJ1enpGYWNlOjpjYWNoZSgpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPENhY2hlPiBzX2NhY2hlOwotICAgIHJldHVybiBzX2NhY2hlOwotfQotCi1IYXJm
QnV6ekZhY2U6OkhhcmZCdXp6RmFjZShGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIHVp
bnQ2NF90IHVuaXF1ZUlEKQotICAgIDogbV9wbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKQotICAg
ICwgbV91bmlxdWVJRCh1bmlxdWVJRCkKLSAgICAsIG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0KEhC
X1NDUklQVF9JTlZBTElEKQotewotICAgIGF1dG8gcmVzdWx0ID0gY2FjaGUoKS5hZGQobV91bmlx
dWVJRCwgbnVsbHB0cik7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gQ2FjaGVFbnRyeTo6Y3JlYXRlKGNyZWF0ZUZhY2UoKSk7Ci0g
ICAgbV9jYWNoZUVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotSGFyZkJ1enpG
YWNlOjp+SGFyZkJ1enpGYWNlKCkKLXsKLSAgICBhdXRvIGl0ID0gY2FjaGUoKS5maW5kKG1fdW5p
cXVlSUQpOwotICAgIEFTU0VSVChpdCAhPSBjYWNoZSgpLmVuZCgpKTsKLSAgICBBU1NFUlQoaXQt
PnZhbHVlID09IG1fY2FjaGVFbnRyeSk7Ci0gICAgQVNTRVJUKGl0LT52YWx1ZS0+cmVmQ291bnQo
KSA+IDEpOwotCi0gICAgbV9jYWNoZUVudHJ5ID0gbnVsbHB0cjsKLSAgICBpZiAoaXQtPnZhbHVl
LT5yZWZDb3VudCgpID09IDEpCi0gICAgICAgIGNhY2hlKCkucmVtb3ZlKGl0KTsKLX0KLQotc3Rh
dGljIGhiX3NjcmlwdF90IGZpbmRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKGhi
X2ZhY2VfdCogZmFjZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnQgPSAz
MjsKLQotICAgIHVuc2lnbmVkIHNjcmlwdENvdW50ID0gbWF4Q291bnQ7Ci0gICAgaGJfdGFnX3Qg
c2NyaXB0VGFnc1ttYXhDb3VudF07Ci0gICAgaGJfb3RfbGF5b3V0X3RhYmxlX2dldF9zY3JpcHRf
dGFncyhmYWNlLCBIQl9PVF9UQUdfR1NVQiwgMCwgJnNjcmlwdENvdW50LCBzY3JpcHRUYWdzKTsK
LSAgICBmb3IgKHVuc2lnbmVkIHNjcmlwdEluZGV4ID0gMDsgc2NyaXB0SW5kZXggPCBzY3JpcHRD
b3VudDsgKytzY3JpcHRJbmRleCkgewotICAgICAgICB1bnNpZ25lZCBsYW5ndWFnZUNvdW50ID0g
bWF4Q291bnQ7Ci0gICAgICAgIGhiX3RhZ190IGxhbmd1YWdlVGFnc1ttYXhDb3VudF07Ci0gICAg
ICAgIGhiX290X2xheW91dF9zY3JpcHRfZ2V0X2xhbmd1YWdlX3RhZ3MoZmFjZSwgSEJfT1RfVEFH
X0dTVUIsIHNjcmlwdEluZGV4LCAwLCAmbGFuZ3VhZ2VDb3VudCwgbGFuZ3VhZ2VUYWdzKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBsYW5ndWFnZUluZGV4ID0gMDsgbGFuZ3VhZ2VJbmRleCA8IGxh
bmd1YWdlQ291bnQ7ICsrbGFuZ3VhZ2VJbmRleCkgewotICAgICAgICAgICAgdW5zaWduZWQgZmVh
dHVyZUluZGV4OwotICAgICAgICAgICAgaWYgKGhiX290X2xheW91dF9sYW5ndWFnZV9maW5kX2Zl
YXR1cmUoZmFjZSwgSEJfT1RfVEFHX0dTVUIsIHNjcmlwdEluZGV4LCBsYW5ndWFnZUluZGV4LCBI
YXJmQnV6ekZhY2U6OnZlcnRUYWcsICZmZWF0dXJlSW5kZXgpCi0gICAgICAgICAgICAgICAgfHwg
aGJfb3RfbGF5b3V0X2xhbmd1YWdlX2ZpbmRfZmVhdHVyZShmYWNlLCBIQl9PVF9UQUdfR1NVQiwg
c2NyaXB0SW5kZXgsIGxhbmd1YWdlSW5kZXgsIEhhcmZCdXp6RmFjZTo6dnJ0MlRhZywgJmZlYXR1
cmVJbmRleCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGhiX290X3RhZ190b19zY3JpcHQoc2Ny
aXB0VGFnc1tzY3JpcHRJbmRleF0pOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBIQl9T
Q1JJUFRfSU5WQUxJRDsKLX0KLQotdm9pZCBIYXJmQnV6ekZhY2U6OnNldFNjcmlwdEZvclZlcnRp
Y2FsR2x5cGhTdWJzdGl0dXRpb24oaGJfYnVmZmVyX3QqIGJ1ZmZlcikKLXsKLSAgICBpZiAobV9z
Y3JpcHRGb3JWZXJ0aWNhbFRleHQgPT0gSEJfU0NSSVBUX0lOVkFMSUQpCi0gICAgICAgIG1fc2Ny
aXB0Rm9yVmVydGljYWxUZXh0ID0gZmluZFNjcmlwdEZvclZlcnRpY2FsR2x5cGhTdWJzdGl0dXRp
b24obV9jYWNoZUVudHJ5LT5mYWNlKCkpOwotICAgIGhiX2J1ZmZlcl9zZXRfc2NyaXB0KGJ1ZmZl
ciwgbV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9I
YXJmQnV6ekZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6RmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDZkNWY3YmNh
OC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovSGFyZkJ1enpGYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBIYXJmQnV6ekZhY2VfaAotI2RlZmluZSBIYXJmQnV6ekZhY2VfaAotCi0jaW5jbHVkZSA8aGIu
aD4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udFBsYXRm
b3JtRGF0YTsKLQotY2xhc3MgSGFyZkJ1enpGYWNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgaGJfdGFnX3QgdmVydFRhZzsKLSAgICBz
dGF0aWMgY29uc3QgaGJfdGFnX3QgdnJ0MlRhZzsKLSAgICBzdGF0aWMgY29uc3QgaGJfdGFnX3Qg
a2VyblRhZzsKLQotICAgIEhhcmZCdXp6RmFjZShGb250UGxhdGZvcm1EYXRhJiwgdWludDY0X3Qp
OwotICAgIH5IYXJmQnV6ekZhY2UoKTsKLQotICAgIGhiX2ZvbnRfdCogY3JlYXRlRm9udCgpOwot
Ci0gICAgdm9pZCBzZXRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKGhiX2J1ZmZl
cl90Kik7Ci0KLSAgICB1c2luZyBHbHlwaENhY2hlID0gSGFzaE1hcDx1aW50MzJfdCwgdWludDMy
X3QsIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czx1aW50MzJfdD4+OwotcHJpdmF0ZToKLSAgICBjbGFzcyBDYWNoZUVudHJ5IDog
cHVibGljIFJlZkNvdW50ZWQ8Q2FjaGVFbnRyeT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFJlZjxDYWNoZUVudHJ5PiBjcmVhdGUoaGJfZmFjZV90KiBmYWNlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWNoZUVudHJ5KGZhY2UpKTsKLSAgICAg
ICAgfQotICAgICAgICB+Q2FjaGVFbnRyeSgpOwotCi0gICAgICAgIGhiX2ZhY2VfdCogZmFjZSgp
IHsgcmV0dXJuIG1fZmFjZTsgfQotICAgICAgICBHbHlwaENhY2hlJiBnbHlwaENhY2hlKCkgeyBy
ZXR1cm4gbV9nbHlwaENhY2hlOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDYWNoZUVudHJ5
KGhiX2ZhY2VfdCopOwotCi0gICAgICAgIGhiX2ZhY2VfdCogbV9mYWNlOwotICAgICAgICBHbHlw
aENhY2hlIG1fZ2x5cGhDYWNoZTsKLSAgICB9OwotCi0gICAgdXNpbmcgQ2FjaGUgPSBIYXNoTWFw
PHVpbnQ2NF90LCBSZWZQdHI8Q2FjaGVFbnRyeT4sIFdURjo6SW50SGFzaDx1aW50NjRfdD4sIFdU
Rjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+PjsKLSAgICBzdGF0aWMg
Q2FjaGUmIGNhY2hlKCk7Ci0KLSAgICBoYl9mYWNlX3QqIGNyZWF0ZUZhY2UoKTsKLQotICAgIEZv
bnRQbGF0Zm9ybURhdGEmIG1fcGxhdGZvcm1EYXRhOwotICAgIHVpbnQ2NF90IG1fdW5pcXVlSUQ7
Ci0gICAgUmVmUHRyPENhY2hlRW50cnk+IG1fY2FjaGVFbnRyeTsKLQotICAgIGhiX3NjcmlwdF90
IG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0OwotfTsKLQotfQotCi0jZW5kaWYgLy8gSGFyZkJ1enpG
YWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDU0YjU4OTRhYWIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDI0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCi0KLSNp
bmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJG
b250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJH
bHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgPGNhaXJv
LWZ0Lmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1
ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFCTEVTX0gKLSNpbmNsdWRl
IDxoYi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWaWV3Lmg+Ci0KLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotI2luY2x1ZGUg
RlRfTVVMVElQTEVfTUFTVEVSU19ICi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dHJ1Y3QgSGFyZkJ1enpGb250RGF0YSB7Ci0gICAgSGFyZkJ1enpGYWNlOjpHbHlwaENhY2hlJiBn
bHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnk7Ci0gICAgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250
X3Q+IGNhaXJvU2NhbGVkRm9udDsKLX07Ci0KLXN0YXRpYyBoYl9wb3NpdGlvbl90IGZsb2F0VG9I
YXJmQnV6elBvc2l0aW9uKGZsb2F0IHZhbHVlKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxo
Yl9wb3NpdGlvbl90Pih2YWx1ZSAqICgxIDw8IDE2KSk7Ci19Ci0KLXN0YXRpYyBoYl9wb3NpdGlv
bl90IGRvdWJsZVRvSGFyZkJ1enpQb3NpdGlvbihkb3VibGUgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGhiX3Bvc2l0aW9uX3Q+KHZhbHVlICogKDEgPDwgMTYpKTsKLX0KLQotc3Rh
dGljIHZvaWQgQ2Fpcm9HZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhjYWlyb19zY2FsZWRfZm9udF90
KiBzY2FsZWRGb250LCBoYl9jb2RlcG9pbnRfdCBjb2RlcG9pbnQsIGhiX3Bvc2l0aW9uX3QqIGFk
dmFuY2UsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cykKLXsKLSAgICBjYWlyb190ZXh0X2V4
dGVudHNfdCBnbHlwaEV4dGVudHM7Ci0gICAgY2Fpcm9fZ2x5cGhfdCBnbHlwaDsKLSAgICBnbHlw
aC5pbmRleCA9IGNvZGVwb2ludDsKLSAgICBnbHlwaC54ID0gMDsKLSAgICBnbHlwaC55ID0gMDsK
LSAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKHNjYWxlZEZvbnQsICZnbHlwaCwg
MSwgJmdseXBoRXh0ZW50cyk7Ci0KLSAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzID0gZ2x5cGhF
eHRlbnRzLnlfYWR2YW5jZTsKLSAgICBpZiAoYWR2YW5jZSkKLSAgICAgICAgKmFkdmFuY2UgPSBk
b3VibGVUb0hhcmZCdXp6UG9zaXRpb24oaGFzVmVydGljYWxHbHlwaHMgPyAtZ2x5cGhFeHRlbnRz
LnlfYWR2YW5jZSA6IGdseXBoRXh0ZW50cy54X2FkdmFuY2UpOwotCi0gICAgaWYgKGV4dGVudHMp
IHsKLSAgICAgICAgZXh0ZW50cy0+eF9iZWFyaW5nID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9u
KGdseXBoRXh0ZW50cy54X2JlYXJpbmcpOwotICAgICAgICBleHRlbnRzLT55X2JlYXJpbmcgPSBk
b3VibGVUb0hhcmZCdXp6UG9zaXRpb24oaGFzVmVydGljYWxHbHlwaHMgPyAtZ2x5cGhFeHRlbnRz
LnlfYmVhcmluZyA6IGdseXBoRXh0ZW50cy55X2JlYXJpbmcpOwotICAgICAgICBleHRlbnRzLT53
aWR0aCA9IGRvdWJsZVRvSGFyZkJ1enpQb3NpdGlvbihoYXNWZXJ0aWNhbEdseXBocyA/IC1nbHlw
aEV4dGVudHMuaGVpZ2h0IDogZ2x5cGhFeHRlbnRzLndpZHRoKTsKLSAgICAgICAgZXh0ZW50cy0+
aGVpZ2h0ID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGhhc1ZlcnRpY2FsR2x5cGhzID8gZ2x5
cGhFeHRlbnRzLndpZHRoIDogZ2x5cGhFeHRlbnRzLmhlaWdodCk7Ci0gICAgfQotfQotCi1zdGF0
aWMgaGJfYm9vbF90IGhhcmZCdXp6R2V0R2x5cGgoaGJfZm9udF90Kiwgdm9pZCogZm9udERhdGEs
IGhiX2NvZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90LCBoYl9jb2RlcG9pbnRfdCog
Z2x5cGgsIHZvaWQqKQotewotICAgIGF1dG8mIGhiRm9udERhdGEgPSAqc3RhdGljX2Nhc3Q8SGFy
ZkJ1enpGb250RGF0YSo+KGZvbnREYXRhKTsKLSAgICBhdXRvKiBzY2FsZWRGb250ID0gaGJGb250
RGF0YS5jYWlyb1NjYWxlZEZvbnQuZ2V0KCk7Ci0gICAgQVNTRVJUKHNjYWxlZEZvbnQpOwotCi0g
ICAgYXV0byByZXN1bHQgPSBoYkZvbnREYXRhLmdseXBoQ2FjaGVGb3JGYWNlQ2FjaGVFbnRyeS5h
ZGQodW5pY29kZSwgMCk7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGNh
aXJvX2dseXBoX3QqIGdseXBocyA9IDA7Ci0gICAgICAgIGludCBudW1HbHlwaHMgPSAwOwotICAg
ICAgICBjaGFyIGJ1ZmZlcltVOF9NQVhfTEVOR1RIXTsKLSAgICAgICAgc2l6ZV90IGJ1ZmZlckxl
bmd0aCA9IDA7Ci0gICAgICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKHVuaWNvZGUp
ICYmIHVuaWNvZGUgIT0gJ1x0JykKLSAgICAgICAgICAgIHVuaWNvZGUgPSAnICc7Ci0gICAgICAg
IGVsc2UgaWYgKEZvbnRDYXNjYWRlOjp0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3Jp
cHQodW5pY29kZSkpCi0gICAgICAgICAgICB1bmljb2RlID0gemVyb1dpZHRoU3BhY2U7Ci0gICAg
ICAgIFU4X0FQUEVORF9VTlNBRkUoYnVmZmVyLCBidWZmZXJMZW5ndGgsIHVuaWNvZGUpOwotICAg
ICAgICBpZiAoY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF90b19nbHlwaHMoc2NhbGVkRm9udCwgMCwg
MCwgYnVmZmVyLCBidWZmZXJMZW5ndGgsICZnbHlwaHMsICZudW1HbHlwaHMsIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTIHx8ICFudW1HbHlwaHMpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBnbHlwaHNbMF0uaW5kZXg7Ci0gICAgICAgIGNhaXJvX2dseXBoX2ZyZWUoZ2x5cGhzKTsKLSAg
ICB9Ci0gICAgKmdseXBoID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICByZXR1cm4gISEq
Z2x5cGg7Ci19Ci0KLXN0YXRpYyBoYl9wb3NpdGlvbl90IGhhcmZCdXp6R2V0R2x5cGhIb3Jpem9u
dGFsQWR2YW5jZShoYl9mb250X3QqLCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5
cGgsIHZvaWQqKQotewotICAgIGF1dG8mIGhiRm9udERhdGEgPSAqc3RhdGljX2Nhc3Q8SGFyZkJ1
enpGb250RGF0YSo+KGZvbnREYXRhKTsKLSAgICBhdXRvKiBzY2FsZWRGb250ID0gaGJGb250RGF0
YS5jYWlyb1NjYWxlZEZvbnQuZ2V0KCk7Ci0gICAgQVNTRVJUKHNjYWxlZEZvbnQpOwotCi0gICAg
aGJfcG9zaXRpb25fdCBhZHZhbmNlID0gMDsKLSAgICBDYWlyb0dldEdseXBoV2lkdGhBbmRFeHRl
bnRzKHNjYWxlZEZvbnQsIGdseXBoLCAmYWR2YW5jZSwgMCk7Ci0gICAgcmV0dXJuIGFkdmFuY2U7
Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QgaGFyZkJ1enpHZXRHbHlwaEhvcml6b250YWxPcmlnaW4o
aGJfZm9udF90Kiwgdm9pZCosIGhiX2NvZGVwb2ludF90LCBoYl9wb3NpdGlvbl90KiwgaGJfcG9z
aXRpb25fdCosIHZvaWQqKQotewotICAgIC8vIEp1c3QgcmV0dXJuIHRydWUsIGZvbGxvd2luZyB0
aGUgd2F5IHRoYXQgSGFyZmJ1enotRnJlZVR5cGUKLSAgICAvLyBpbXBsZW1lbnRhdGlvbiBkb2Vz
LgotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaGJfYm9vbF90IGhhcmZCdXp6R2V0R2x5
cGhFeHRlbnRzKGhiX2ZvbnRfdCosIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlw
aCwgaGJfZ2x5cGhfZXh0ZW50c190KiBleHRlbnRzLCB2b2lkKikKLXsKLSAgICBhdXRvJiBoYkZv
bnREYXRhID0gKnN0YXRpY19jYXN0PEhhcmZCdXp6Rm9udERhdGEqPihmb250RGF0YSk7Ci0gICAg
YXV0byogc2NhbGVkRm9udCA9IGhiRm9udERhdGEuY2Fpcm9TY2FsZWRGb250LmdldCgpOwotICAg
IEFTU0VSVChzY2FsZWRGb250KTsKLQotICAgIENhaXJvR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMo
c2NhbGVkRm9udCwgZ2x5cGgsIDAsIGV4dGVudHMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmQnV6ekNhaXJvVGV4dEdldEZvbnRGdW5jcygpCi17
Ci0gICAgc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZkJ1enpDYWlyb0ZvbnRGdW5jcyA9IDA7
Ci0KLSAgICAvLyBXZSBkb24ndCBzZXQgY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIHdlIGNhbid0
IHN1cHBvcnQuCi0gICAgLy8gSGFyZmJ1enogd2lsbCB1c2UgdGhlIGZhbGxiYWNrIGltcGxlbWVu
dGF0aW9uIGlmIHRoZXkgYXJlbid0IHNldC4KLSAgICBpZiAoIWhhcmZCdXp6Q2Fpcm9Gb250RnVu
Y3MpIHsKLSAgICAgICAgaGFyZkJ1enpDYWlyb0ZvbnRGdW5jcyA9IGhiX2ZvbnRfZnVuY3NfY3Jl
YXRlKCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2Z1bmMoaGFyZkJ1enpDYWly
b0ZvbnRGdW5jcywgaGFyZkJ1enpHZXRHbHlwaCwgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVu
Y3Nfc2V0X2dseXBoX2hfYWR2YW5jZV9mdW5jKGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3MsIGhhcmZC
dXp6R2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSwgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVu
Y3Nfc2V0X2dseXBoX2hfb3JpZ2luX2Z1bmMoaGFyZkJ1enpDYWlyb0ZvbnRGdW5jcywgaGFyZkJ1
enpHZXRHbHlwaEhvcml6b250YWxPcmlnaW4sIDAsIDApOwotICAgICAgICBoYl9mb250X2Z1bmNz
X3NldF9nbHlwaF9leHRlbnRzX2Z1bmMoaGFyZkJ1enpDYWlyb0ZvbnRGdW5jcywgaGFyZkJ1enpH
ZXRHbHlwaEV4dGVudHMsIDAsIDApOwotICAgICAgICBoYl9mb250X2Z1bmNzX21ha2VfaW1tdXRh
YmxlKGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3MpOwotICAgIH0KLSAgICByZXR1cm4gaGFyZkJ1enpD
YWlyb0ZvbnRGdW5jczsKLX0KLQotc3RhdGljIGhiX2Jsb2JfdCogaGFyZkJ1enpDYWlyb0dldFRh
YmxlKGhiX2ZhY2VfdCosIGhiX3RhZ190IHRhZywgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgYXV0
byogc2NhbGVkRm9udCA9IHN0YXRpY19jYXN0PGNhaXJvX3NjYWxlZF9mb250X3QqPih1c2VyRGF0
YSk7Ci0gICAgaWYgKCFzY2FsZWRGb250KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENhaXJv
RnRGYWNlTG9ja2VyIGNhaXJvRnRGYWNlTG9ja2VyKHNjYWxlZEZvbnQpOwotICAgIEZUX0ZhY2Ug
ZnRGb250ID0gY2Fpcm9GdEZhY2VMb2NrZXIuZnRGYWNlKCk7Ci0gICAgaWYgKCFmdEZvbnQpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRlRfVUxvbmcgdGFibGVTaXplID0gMDsKLSAg
ICBGVF9FcnJvciBlcnJvciA9IEZUX0xvYWRfU2ZudF9UYWJsZShmdEZvbnQsIHRhZywgMCwgMCwg
JnRhYmxlU2l6ZSk7Ci0gICAgaWYgKGVycm9yKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEZU
X0J5dGUqIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RlRfQnl0ZSo+KGZhc3RNYWxsb2ModGFi
bGVTaXplKSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZUX1VM
b25nIGV4cGVjdGVkVGFibGVTaXplID0gdGFibGVTaXplOwotICAgIGVycm9yID0gRlRfTG9hZF9T
Zm50X1RhYmxlKGZ0Rm9udCwgdGFnLCAwLCBidWZmZXIsICZ0YWJsZVNpemUpOwotICAgIGlmIChl
cnJvciB8fCB0YWJsZVNpemUgIT0gZXhwZWN0ZWRUYWJsZVNpemUpIHsKLSAgICAgICAgZmFzdEZy
ZWUoYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGhiX2Js
b2JfY3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIHRhYmxlU2l6
ZSwgSEJfTUVNT1JZX01PREVfV1JJVEFCTEUsIGJ1ZmZlciwgZmFzdEZyZWUpOwotfQotCi1oYl9m
YWNlX3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRmFjZSgpCi17Ci0gICAgYXV0byogc2NhbGVkRm9u
dCA9IG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKTsKLSAgICBjYWlyb19zY2FsZWRfZm9udF9y
ZWZlcmVuY2Uoc2NhbGVkRm9udCk7Ci0KLSAgICBoYl9mYWNlX3QqIGZhY2UgPSBoYl9mYWNlX2Ny
ZWF0ZV9mb3JfdGFibGVzKGhhcmZCdXp6Q2Fpcm9HZXRUYWJsZSwgc2NhbGVkRm9udCwKLSAgICAg
ICAgW10odm9pZCogZGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgY2Fpcm9fc2NhbGVkX2Zv
bnRfZGVzdHJveShzdGF0aWNfY2FzdDxjYWlyb19zY2FsZWRfZm9udF90Kj4oZGF0YSkpOwotICAg
ICAgICB9KTsKLSAgICBBU1NFUlQoZmFjZSk7Ci0gICAgcmV0dXJuIGZhY2U7Ci19Ci0KLWhiX2Zv
bnRfdCogSGFyZkJ1enpGYWNlOjpjcmVhdGVGb250KCkKLXsKLSAgICBoYl9mb250X3QqIGZvbnQg
PSBoYl9mb250X2NyZWF0ZShtX2NhY2hlRW50cnktPmZhY2UoKSk7Ci0gICAgaGJfZm9udF9zZXRf
ZnVuY3MoZm9udCwgaGFyZkJ1enpDYWlyb1RleHRHZXRGb250RnVuY3MoKSwgbmV3IEhhcmZCdXp6
Rm9udERhdGEgeyBtX2NhY2hlRW50cnktPmdseXBoQ2FjaGUoKSwgbV9wbGF0Zm9ybURhdGEuc2Nh
bGVkRm9udCgpIH0sCi0gICAgICAgIFtdKHZvaWQqIGRhdGEpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxIYXJmQnV6ekZvbnREYXRhKj4oZGF0YSk7Ci0gICAgICAg
IH0pOwotCi0gICAgY29uc3QgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAg
ICBpZiAoZmxvb3JmKHNpemUpID09IHNpemUpCi0gICAgICAgIGhiX2ZvbnRfc2V0X3BwZW0oZm9u
dCwgc2l6ZSwgc2l6ZSk7Ci0gICAgaW50IHNjYWxlID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24o
c2l6ZSk7Ci0gICAgaGJfZm9udF9zZXRfc2NhbGUoZm9udCwgc2NhbGUsIHNjYWxlKTsKLQotI2lm
IEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi0gICAgewotICAgICAgICBDYWlyb0Z0RmFjZUxvY2tl
ciBjYWlyb0Z0RmFjZUxvY2tlcihtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCkpOwotICAgICAg
ICBpZiAoRlRfRmFjZSBmYWNlID0gY2Fpcm9GdEZhY2VMb2NrZXIuZnRGYWNlKCkpIHsKLSAgICAg
ICAgICAgIEZUX01NX1ZhciogZnRNTVZhcjsKLSAgICAgICAgICAgIGlmICghRlRfR2V0X01NX1Zh
cihmYWNlLCAmZnRNTVZhcikpIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8RlRfRml4ZWQsIDQ+
IGNvb3JkczsKLSAgICAgICAgICAgICAgICBjb29yZHMucmVzaXplKGZ0TU1WYXItPm51bV9heGlz
KTsKLSAgICAgICAgICAgICAgICBpZiAoIUZUX0dldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzKGZh
Y2UsIGNvb3Jkcy5zaXplKCksIGNvb3Jkcy5kYXRhKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxoYl92YXJpYXRpb25fdCwgND4gdmFyaWF0aW9ucyhjb29yZHMuc2l6ZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChGVF9VSW50IGkgPSAwOyBpIDwgZnRNTVZhci0+bnVtX2F4
aXM7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uc1tpXS50YWcgPSBm
dE1NVmFyLT5heGlzW2ldLnRhZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbnNb
aV0udmFsdWUgPSBjb29yZHNbaV0gLyA2NTUzNi4wOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGhiX2ZvbnRfc2V0X3ZhcmlhdGlvbnMoZm9udCwgdmFyaWF0aW9u
cy5kYXRhKCksIHZhcmlhdGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgRlRfRG9uZV9NTV9WYXIoZmFjZS0+Z2x5cGgtPmxpYnJhcnksIGZ0TU1WYXIpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBoYl9mb250X21h
a2VfaW1tdXRhYmxlKGZvbnQpOwotICAgIHJldHVybiBmb250OwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9IYlVuaXF1ZVB0ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGJVbmlxdWVQdHIuaAppbmRleCBlYWI5NWM2M2RkOS4uMGQ2ZjI5M2U3NTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hiVW5p
cXVlUHRyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGJVbmlxdWVQdHIuaApAQCAtNTIsNiArNTIsMTMgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGJQdHJE
ZWxldGVyPGhiX2J1ZmZlcl90PiB7CiAgICAgfQogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSGJQ
dHJEZWxldGVyPGhiX2ZhY2VfdD4geworICAgIHZvaWQgb3BlcmF0b3IoKShoYl9mYWNlX3QqIHB0
cikgY29uc3QKKyAgICB7CisgICAgICAgIGhiX2ZhY2VfZGVzdHJveShwdHIpOworICAgIH0KK307
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogdXNpbmcgV2ViQ29yZTo6SGJVbmlxdWVQdHI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9P
cGVuVHlwZU1hdGhEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCmluZGV4IDc2NmQyNDYzM2UzLi41ZDg4Y2Q3NzY4
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUv
T3BlblR5cGVNYXRoRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVNYXRoRGF0YS5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNlbmRp
ZgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTI1NywxMCArMjU2LDggQEAgT3BlblR5cGVNYXRoRGF0
YTo6T3BlblR5cGVNYXRoRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250KQogfQogI2Vs
aWYgVVNFKEhBUkZCVVpaKQogT3BlblR5cGVNYXRoRGF0YTo6T3BlblR5cGVNYXRoRGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBmb250KQotICAgIDogbV9tYXRoRm9udChmb250LmhhcmZCdXp6
RmFjZSgpLmNyZWF0ZUZvbnQoKSkKKyAgICA6IG1fbWF0aEZvbnQoZm9udC5jcmVhdGVPcGVuVHlw
ZU1hdGhIYXJmQnV6ekZvbnQoKSkKIHsKLSAgICBpZiAoIWhiX290X21hdGhfaGFzX2RhdGEoaGJf
Zm9udF9nZXRfZmFjZShtX21hdGhGb250LmdldCgpKSkpCi0gICAgICAgIG1fbWF0aEZvbnQgPSBu
dWxscHRyOwogfQogI2VsaWYgVVNFKERJUkVDVDJEKQogT3BlblR5cGVNYXRoRGF0YTo6T3BlblR5
cGVNYXRoRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250KQpAQCAtMjk2LDEzICsyOTMs
MTMgQEAgZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IEZvbnQm
IGZvbnQsIE1hdGhDb25zdGFudCBjb25zdGFudCkKIAogICAgIHJldHVybiB2YWx1ZSAqIGZvbnQu
c2l6ZVBlclVuaXQoKTsKICNlbGlmIFVTRShIQVJGQlVaWikKLWZsb2F0IE9wZW5UeXBlTWF0aERh
dGE6OmdldE1hdGhDb25zdGFudChjb25zdCBGb250JiwgTWF0aENvbnN0YW50IGNvbnN0YW50KSBj
b25zdAorZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0TWF0aENvbnN0YW50KGNvbnN0IEZvbnQm
IGZvbnQsIE1hdGhDb25zdGFudCBjb25zdGFudCkgY29uc3QKIHsKICAgICBoYl9wb3NpdGlvbl90
IHZhbHVlID0gaGJfb3RfbWF0aF9nZXRfY29uc3RhbnQobV9tYXRoRm9udC5nZXQoKSwgc3RhdGlj
X2Nhc3Q8aGJfb3RfbWF0aF9jb25zdGFudF90Pihjb25zdGFudCkpOwogICAgIGlmIChjb25zdGFu
dCA9PSBTY3JpcHRQZXJjZW50U2NhbGVEb3duIHx8IGNvbnN0YW50ID09IFNjcmlwdFNjcmlwdFBl
cmNlbnRTY2FsZURvd24gfHwgY29uc3RhbnQgPT0gUmFkaWNhbERlZ3JlZUJvdHRvbVJhaXNlUGVy
Y2VudCkKICAgICAgICAgcmV0dXJuIHZhbHVlIC8gMTAwLjA7CiAKLSAgICByZXR1cm4gdmFsdWUg
LyA2NTUzNi4wOworICAgIHJldHVybiB2YWx1ZSAqIGZvbnQuc2l6ZVBlclVuaXQoKTsKICNlbHNl
CiBmbG9hdCBPcGVuVHlwZU1hdGhEYXRhOjpnZXRNYXRoQ29uc3RhbnQoY29uc3QgRm9udCYsIE1h
dGhDb25zdGFudCkgY29uc3QKIHsKQEAgLTMyNiw5ICszMjMsOSBAQCBmbG9hdCBPcGVuVHlwZU1h
dGhEYXRhOjpnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IEZvbnQmIGZvbnQsIEdseXBoIGdseXBo
KSBjb25zdAogCiAgICAgcmV0dXJuIG1hdGhJdGFsaWNzQ29ycmVjdGlvbkluZm8tPmdldEl0YWxp
Y0NvcnJlY3Rpb24oKm1fbWF0aEJ1ZmZlciwgZ2x5cGgpICogZm9udC5zaXplUGVyVW5pdCgpOwog
I2VsaWYgVVNFKEhBUkZCVVpaKQotZmxvYXQgT3BlblR5cGVNYXRoRGF0YTo6Z2V0SXRhbGljQ29y
cmVjdGlvbihjb25zdCBGb250JiwgR2x5cGggZ2x5cGgpIGNvbnN0CitmbG9hdCBPcGVuVHlwZU1h
dGhEYXRhOjpnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IEZvbnQmIGZvbnQsIEdseXBoIGdseXBo
KSBjb25zdAogewotICAgIHJldHVybiBoYl9vdF9tYXRoX2dldF9nbHlwaF9pdGFsaWNzX2NvcnJl
Y3Rpb24obV9tYXRoRm9udC5nZXQoKSwgZ2x5cGgpIC8gNjU1MzYuMDsKKyAgICByZXR1cm4gaGJf
b3RfbWF0aF9nZXRfZ2x5cGhfaXRhbGljc19jb3JyZWN0aW9uKG1fbWF0aEZvbnQuZ2V0KCksIGds
eXBoKSAqIGZvbnQuc2l6ZVBlclVuaXQoKTsKICNlbHNlCiBmbG9hdCBPcGVuVHlwZU1hdGhEYXRh
OjpnZXRJdGFsaWNDb3JyZWN0aW9uKGNvbnN0IEZvbnQmLCBHbHlwaCkgY29uc3QKIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>