<?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>3231</bug_id>
          
          <creation_ts>2005-06-01 14:38:00 -0700</creation_ts>
          <short_desc>CSS1: synthesize bold and oblique when those font variations are unavailable</short_desc>
          <delta_ts>2005-10-06 08:43:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>412</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>daniel</cc>
    
    <cc>mitz</cc>
    
    <cc>nickshanks</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>10416</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-01 14:38:00 -0700</bug_when>
    <thetext>If a bold version of a particular font is requested but none exists on the system, Web Kit does not properly 
synthesize a font.  Instead it honors the weight but falls back to another font.  Instead it should synthesize 
a font with the appropriate weight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>10790</commentid>
    <comment_count>1</comment_count>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-06-07 07:32:36 -0700</bug_when>
    <thetext>If the font has an fvar weight axis, this can be used instead of synthesizing a heavier typeface.
Possibly another bug should be opened to track this though, as fvar can be used for features other than 
just weight. Test case at http://web.nickshanks.com/safari/fvar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11689</commentid>
    <comment_count>2</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-12 23:24:53 -0700</bug_when>
    <thetext>*** Bug 3494 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19133</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2005-09-08 21:17:38 -0700</bug_when>
    <thetext>Nick, the test case mentioned in comment #1 doesn&apos;t appear to be accessible at present.  Would it be 
possible to attach it to the bug so that it will always be available?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19284</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-10 09:39:31 -0700</bug_when>
    <thetext>Yes, the fvar possibility should be a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19285</commentid>
    <comment_count>5</comment_count>
      <attachid>3844</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-10 09:41:04 -0700</bug_when>
    <thetext>Created attachment 3844
add synthesized bold and oblique, other related renderer improvements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19293</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-10 12:58:22 -0700</bug_when>
    <thetext>In Radar as &lt;rdar://problem/3256269&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19542</commentid>
    <comment_count>7</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-09-12 15:02:26 -0700</bug_when>
    <thetext>I think you have a problem in your order-swapping loop in _CG_drawRun:style:geometry:. You&apos;re 
decrementing end by 3 in each iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19546</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-12 17:50:27 -0700</bug_when>
    <thetext>Oops! You&apos;re right. I have to move that -- out!

I&apos;ll have to make sure to run pixel tests rather than just layout tests.

I&apos;m leaving this patch in review? anyway so that Dave Hyatt can review it -- but he should review- it due to 
that bad mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20679</commentid>
    <comment_count>9</comment_count>
      <attachid>3844</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-09-27 13:46:26 -0700</bug_when>
    <thetext>Comment on attachment 3844
add synthesized bold and oblique, other related renderer improvements

Just a personal preference, but I like style.rtl over style.RTL.  Unless you
feel really strongly, I&apos;d rather this just stay the way it is currently.

Looks good, but fix the mistake already pointed out, and I&apos;ll re-review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20744</commentid>
    <comment_count>10</comment_count>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-09-28 10:38:53 -0700</bug_when>
    <thetext>Opened bug #5168 to cover fvar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20978</commentid>
    <comment_count>11</comment_count>
      <attachid>4106</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-30 08:18:06 -0700</bug_when>
    <thetext>Created attachment 4106
revised patch fixing bug Mitz noticed, and with RTL back to rtl as requested</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21298</commentid>
    <comment_count>12</comment_count>
      <attachid>4106</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-10-03 14:44:56 -0700</bug_when>
    <thetext>Comment on attachment 4106
revised patch fixing bug Mitz noticed, and with RTL back to rtl as requested

r=me, make sure to run perf tests and layout tests to make sure we have no
regressions.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3844</attachid>
            <date>2005-09-10 09:41:04 -0700</date>
            <delta_ts>2005-09-30 08:18:06 -0700</delta_ts>
            <desc>add synthesized bold and oblique, other related renderer improvements</desc>
            <filename>SynthesizedBoldObliquePatch.txt</filename>
            <type>text/plain</type>
            <size>156980</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUvV2ViQ29yZS5leHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQKZGlmZiAtcCAt
dSAtcjEuNDQgV2ViQ29yZS9XZWJDb3JlLmV4cAotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cAkzMCBK
dWwgMjAwNSAwOTowNTowMSAtMDAwMAkxLjQ0CisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwCTEwIFNl
cCAyMDA1IDE2OjMxOjA0IC0wMDAwCkBAIC0xMzEsNSArMTMxLDYgQEAgX1dlYkNvcmVFbGVtZW50
TGlua1VSTEtleQogX1dlYkNvcmVFbGVtZW50VGl0bGVLZXkKIF9XZWJDb3JlSW5pdGlhbGl6ZUVt
cHR5VGV4dEdlb21ldHJ5CiBfV2ViQ29yZUluaXRpYWxpemVFbXB0eVRleHRTdHlsZQorX1dlYkNv
cmVJbml0aWFsaXplRm9udAogX1dlYkNvcmVJbml0aWFsaXplVGV4dFJ1bgogX1dlYkNvcmVQYWdl
Q2FjaGVTdGF0ZUtleQpJbmRleDogV2ViQ29yZS9rd3EvS1dRQ29tYm9Cb3gubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUNvbWJvQm94Lm1tLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjY1CmRpZmYgLXAgLXUgLXIxLjY1IFdlYkNvcmUva3dxL0tXUUNvbWJv
Qm94Lm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FDb21ib0JveC5tbQkyIFNlcCAyMDA1IDIxOjM0OjQ3
IC0wMDAwCTEuNjUKKysrIFdlYkNvcmUva3dxL0tXUUNvbWJvQm94Lm1tCTEwIFNlcCAyMDA1IDE2
OjMxOjM1IC0wMDAwCkBAIC0xNjIsOSArMTYyLDExIEBAIFFTaXplIFFDb21ib0JveDo6c2l6ZUhp
bnQoKSBjb25zdCAKICAgICAgICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8S1dRTGlzdEJveEl0
ZW0+IGkgPSBjb25zdF9jYXN0PGNvbnN0IFFWYWx1ZUxpc3Q8S1dRTGlzdEJveEl0ZW0+ICY+KF9p
dGVtcykuYmVnaW4oKTsKICAgICAgICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8S1dRTGlzdEJv
eEl0ZW0+IGUgPSBjb25zdF9jYXN0PGNvbnN0IFFWYWx1ZUxpc3Q8S1dRTGlzdEJveEl0ZW0+ICY+
KF9pdGVtcykuZW5kKCk7CiAgICAgICAgIGlmIChpICE9IGUpIHsKLSAgICAgICAgICAgIGlkIDxX
ZWJDb3JlVGV4dFJlbmRlcmVyPiBpdGVtUmVuZGVyZXIgPSBbW1dlYkNvcmVUZXh0UmVuZGVyZXJG
YWN0b3J5IHNoYXJlZEZhY3RvcnldCi0gICAgICAgICAgICAgICAgcmVuZGVyZXJXaXRoRm9udDpb
YnV0dG9uIGZvbnRdCi0gICAgICAgICAgICAgICAgdXNpbmdQcmludGVyRm9udDohW05TR3JhcGhp
Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXV07CisgICAgICAgICAgICBX
ZWJDb3JlRm9udCBpdGVtRm9udDsKKyAgICAgICAgICAgIFdlYkNvcmVJbml0aWFsaXplRm9udCgm
aXRlbUZvbnQpOworICAgICAgICAgICAgaXRlbUZvbnQuZm9udCA9IFtidXR0b24gZm9udF07Cisg
ICAgICAgICAgICBpdGVtRm9udC5mb3JQcmludGVyID0gIVtOU0dyYXBoaWNzQ29udGV4dCBjdXJy
ZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl07CisgICAgICAgICAgICBpZCA8V2ViQ29yZVRleHRS
ZW5kZXJlcj4gaXRlbVJlbmRlcmVyID0gW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFy
ZWRGYWN0b3J5XSByZW5kZXJlcldpdGhGb250Oml0ZW1Gb250XTsKICAgICAgICAgICAgIGlkIDxX
ZWJDb3JlVGV4dFJlbmRlcmVyPiBsYWJlbFJlbmRlcmVyID0gbmlsOwogICAgICAgICAgICAgV2Vi
Q29yZVRleHRTdHlsZSBzdHlsZTsKICAgICAgICAgICAgIFdlYkNvcmVJbml0aWFsaXplRW1wdHlU
ZXh0U3R5bGUoJnN0eWxlKTsKQEAgLTE4Miw5ICsxODQsMTEgQEAgUVNpemUgUUNvbWJvQm94Ojpz
aXplSGludCgpIGNvbnN0IAogICAgICAgICAgICAgICAgIGlkIDxXZWJDb3JlVGV4dFJlbmRlcmVy
PiByZW5kZXJlcjsKICAgICAgICAgICAgICAgICBpZiAoaXNHcm91cExhYmVsKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChsYWJlbFJlbmRlcmVyID09IG5pbCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbGFiZWxSZW5kZXJlciA9IFtbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkgc2hh
cmVkRmFjdG9yeV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlcldpdGhGb250
OmxhYmVsRm9udCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdQcmludGVyRm9u
dDohW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlRm9udCBsYWJlbEZvbnQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJDb3JlSW5pdGlhbGl6ZUZvbnQoJmxhYmVsRm9udCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsYWJlbEZvbnQuZm9udCA9IHRoaXMtPmxhYmVsRm9udCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbGFiZWxGb250LmZvclByaW50ZXIgPSAhW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxhYmVsUmVuZGVyZXIgPSBbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJl
ZEZhY3RvcnldIHJlbmRlcmVyV2l0aEZvbnQ6bGFiZWxGb250XTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICByZW5kZXJlciA9IGxhYmVsUmVuZGVyZXI7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKSW5kZXg6IFdlYkNvcmUva3dxL0tXUUZvbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRRm9udC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjMyCmRpZmYgLXAgLXUgLXIxLjMyIFdlYkNvcmUva3dxL0tXUUZvbnQuaAot
LS0gV2ViQ29yZS9rd3EvS1dRRm9udC5oCTkgSnVsIDIwMDUgMjA6MTk6MjUgLTAwMDAJMS4zMgor
KysgV2ViQ29yZS9rd3EvS1dRRm9udC5oCTEwIFNlcCAyMDA1IDE2OjMxOjM1IC0wMDAwCkBAIC0y
NywxMiArMjcsNyBAQAogI2RlZmluZSBRRk9OVF9IXwogCiAjaW5jbHVkZSAiS1dRRm9udEZhbWls
eS5oIgotCi0jaWZkZWYgX19PQkpDX18KLUBjbGFzcyBOU0ZvbnQ7Ci0jZWxzZQotY2xhc3MgTlNG
b250OwotI2VuZGlmCisjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkuaCIKIAog
Y2xhc3MgUUZvbnQgewogcHVibGljOgpAQCAtNzUsNyArNzAsOCBAQCBwdWJsaWM6CiAgICAgaW50
IGdldE5TVHJhaXRzKCkgY29uc3QgeyByZXR1cm4gX3RyYWl0OyB9CiAgICAgZmxvYXQgZ2V0TlNT
aXplKCkgY29uc3QgeyByZXR1cm4gX3NpemU7IH0KICAgICAKLSAgICBOU0ZvbnQgKmdldE5TRm9u
dCgpIGNvbnN0OworICAgIE5TRm9udCAqZ2V0TlNGb250KCkgY29uc3QgeyByZXR1cm4gZ2V0V2Vi
Q29yZUZvbnQoKS5mb250OyB9CisgICAgY29uc3QgV2ViQ29yZUZvbnQgJmdldFdlYkNvcmVGb250
KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgS1dRRm9udEZhbWlseSBfZmFtaWx5OwpAQCAtODMs
NyArNzksNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IF9zaXplOwogICAgIGJvb2wgX2lzUHJpbnRl
ckZvbnQgOiAxOwogICAgIG11dGFibGUgUGl0Y2ggX3BpdGNoIDogMjsKLSAgICBtdXRhYmxlIE5T
Rm9udCAqX05TRm9udDsKKyAgICBtdXRhYmxlIFdlYkNvcmVGb250IG1fd2ViQ29yZUZvbnQ7CiB9
OwogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva3dxL0tXUUZvbnQubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUZvbnQubW0sdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNDgKZGlmZiAtcCAtdSAtcjEuNDggV2ViQ29yZS9rd3EvS1dRRm9udC5tbQotLS0gV2Vi
Q29yZS9rd3EvS1dRRm9udC5tbQkyNSBBdWcgMjAwNSAxNzo0NzoyNSAtMDAwMAkxLjQ4CisrKyBX
ZWJDb3JlL2t3cS9LV1FGb250Lm1tCTEwIFNlcCAyMDA1IDE2OjMxOjM1IC0wMDAwCkBAIC0zNSwx
MyArMzUsMTMgQEAgUUZvbnQ6OlFGb250KCkKICAgICAsIF9zaXplKDEyLjApCiAgICAgLCBfaXNQ
cmludGVyRm9udChmYWxzZSkKICAgICAsIF9waXRjaChVbmtub3duKQotICAgICwgX05TRm9udCgw
KQogeworICAgIG1fd2ViQ29yZUZvbnQuZm9udCA9IG5pbDsKIH0KIAogUUZvbnQ6On5RRm9udCgp
CiB7Ci0gICAgS1dRUmVsZWFzZShfTlNGb250KTsKKyAgICBLV1FSZWxlYXNlKG1fd2ViQ29yZUZv
bnQuZm9udCk7CiB9CiAKIFFGb250OjpRRm9udChjb25zdCBRRm9udCAmb3RoZXIpCkBAIC01MCw4
ICs1MCw5IEBAIFFGb250OjpRRm9udChjb25zdCBRRm9udCAmb3RoZXIpCiAgICAgLCBfc2l6ZShv
dGhlci5fc2l6ZSkKICAgICAsIF9pc1ByaW50ZXJGb250KG90aGVyLl9pc1ByaW50ZXJGb250KQog
ICAgICwgX3BpdGNoKG90aGVyLl9waXRjaCkKLSAgICAsIF9OU0ZvbnQoS1dRUmV0YWluKG90aGVy
Ll9OU0ZvbnQpKQorICAgICwgbV93ZWJDb3JlRm9udChvdGhlci5tX3dlYkNvcmVGb250KQogewor
ICAgIEtXUVJldGFpbihtX3dlYkNvcmVGb250LmZvbnQpOwogfQogCiBRRm9udCAmUUZvbnQ6Om9w
ZXJhdG9yPShjb25zdCBRRm9udCAmb3RoZXIpCkBAIC02MSw5ICs2Miw5IEBAIFFGb250ICZRRm9u
dDo6b3BlcmF0b3I9KGNvbnN0IFFGb250ICZvdGgKICAgICBfc2l6ZSA9IG90aGVyLl9zaXplOwog
ICAgIF9pc1ByaW50ZXJGb250ID0gb3RoZXIuX2lzUHJpbnRlckZvbnQ7CiAgICAgX3BpdGNoID0g
b3RoZXIuX3BpdGNoOwotICAgIEtXUVJldGFpbihvdGhlci5fTlNGb250KTsKLSAgICBLV1FSZWxl
YXNlKF9OU0ZvbnQpOwotICAgIF9OU0ZvbnQgPSBvdGhlci5fTlNGb250OworICAgIEtXUVJldGFp
bihvdGhlci5tX3dlYkNvcmVGb250LmZvbnQpOworICAgIEtXUVJlbGVhc2UobV93ZWJDb3JlRm9u
dC5mb250KTsKKyAgICBtX3dlYkNvcmVGb250ID0gb3RoZXIubV93ZWJDb3JlRm9udDsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTc1LDI0ICs3NiwyNCBAQCBRU3RyaW5nIFFGb250OjpmYW1p
bHkoKSBjb25zdAogdm9pZCBRRm9udDo6c2V0RmFtaWx5KGNvbnN0IFFTdHJpbmcgJnFmYW1pbHlO
YW1lKQogewogICAgIF9mYW1pbHkuc2V0RmFtaWx5KHFmYW1pbHlOYW1lKTsKLSAgICBLV1FSZWxl
YXNlKF9OU0ZvbnQpOwotICAgIF9OU0ZvbnQgPSAwOworICAgIEtXUVJlbGVhc2UobV93ZWJDb3Jl
Rm9udC5mb250KTsKKyAgICBtX3dlYkNvcmVGb250LmZvbnQgPSBuaWw7CiAgICAgX3BpdGNoID0g
VW5rbm93bjsKIH0KIAogdm9pZCBRRm9udDo6c2V0Rmlyc3RGYW1pbHkoY29uc3QgS1dRRm9udEZh
bWlseSYgZmFtaWx5KSAKIHsKICAgICBfZmFtaWx5ID0gZmFtaWx5OwotICAgIEtXUVJlbGVhc2Uo
X05TRm9udCk7Ci0gICAgX05TRm9udCA9IDA7CisgICAgS1dRUmVsZWFzZShtX3dlYkNvcmVGb250
LmZvbnQpOworICAgIG1fd2ViQ29yZUZvbnQuZm9udCA9IG5pbDsKICAgICBfcGl0Y2ggPSBVbmtu
b3duOwogfQogCiB2b2lkIFFGb250OjpzZXRQaXhlbFNpemUoZmxvYXQgcykKIHsKICAgICBpZiAo
X3NpemUgIT0gcykgewotICAgICAgICBLV1FSZWxlYXNlKF9OU0ZvbnQpOyAKLSAgICAgICAgX05T
Rm9udCA9IDA7CisgICAgICAgIEtXUVJlbGVhc2UobV93ZWJDb3JlRm9udC5mb250KTsgCisgICAg
ICAgIG1fd2ViQ29yZUZvbnQuZm9udCA9IG5pbDsKICAgICAgICAgX3BpdGNoID0gVW5rbm93bjsK
ICAgICB9CiAgICAgX3NpemUgPSBzOwpAQCAtMTAxLDE2ICsxMDIsMTYgQEAgdm9pZCBRRm9udDo6
c2V0UGl4ZWxTaXplKGZsb2F0IHMpCiB2b2lkIFFGb250OjpzZXRXZWlnaHQoaW50IHdlaWdodCkK
IHsKICAgICBpZiAod2VpZ2h0ID09IEJvbGQpIHsKLSAgICAgICAgaWYgKCEoX3RyYWl0ICYgTlNC
b2xkRm9udE1hc2spKXsKLSAgICAgICAgICAgIEtXUVJlbGVhc2UoX05TRm9udCk7Ci0gICAgICAg
ICAgICBfTlNGb250ID0gMDsKKyAgICAgICAgaWYgKCEoX3RyYWl0ICYgTlNCb2xkRm9udE1hc2sp
KSB7CisgICAgICAgICAgICBLV1FSZWxlYXNlKG1fd2ViQ29yZUZvbnQuZm9udCk7CisgICAgICAg
ICAgICBtX3dlYkNvcmVGb250LmZvbnQgPSBuaWw7CiAgICAgICAgICAgICBfcGl0Y2ggPSBVbmtu
b3duOwogICAgICAgICB9CiAgICAgICAgIF90cmFpdCB8PSBOU0JvbGRGb250TWFzazsKICAgICB9
IGVsc2UgaWYgKHdlaWdodCA9PSBOb3JtYWwpIHsKICAgICAgICAgaWYgKChfdHJhaXQgJiBOU0Jv
bGRGb250TWFzaykpewotICAgICAgICAgICAgS1dRUmVsZWFzZShfTlNGb250KTsKLSAgICAgICAg
ICAgIF9OU0ZvbnQgPSAwOworICAgICAgICAgICAgS1dRUmVsZWFzZShtX3dlYkNvcmVGb250LmZv
bnQpOworICAgICAgICAgICAgbV93ZWJDb3JlRm9udC5mb250ID0gbmlsOwogICAgICAgICAgICAg
X3BpdGNoID0gVW5rbm93bjsKICAgICAgICAgfQogICAgICAgICBfdHJhaXQgJj0gfk5TQm9sZEZv
bnRNYXNrOwpAQCAtMTMxLDE1ICsxMzIsMTUgQEAgdm9pZCBRRm9udDo6c2V0SXRhbGljKGJvb2wg
ZmxhZykKIHsKICAgICBpZiAoZmxhZykgewogICAgICAgICBpZiAoIShfdHJhaXQgJiBOU0l0YWxp
Y0ZvbnRNYXNrKSl7Ci0gICAgICAgICAgICBLV1FSZWxlYXNlKF9OU0ZvbnQpOwotICAgICAgICAg
ICAgX05TRm9udCA9IDA7CisgICAgICAgICAgICBLV1FSZWxlYXNlKG1fd2ViQ29yZUZvbnQuZm9u
dCk7CisgICAgICAgICAgICBtX3dlYkNvcmVGb250LmZvbnQgPSBuaWw7CiAgICAgICAgICAgICBf
cGl0Y2ggPSBVbmtub3duOwogICAgICAgICB9CiAgICAgICAgIF90cmFpdCB8PSBOU0l0YWxpY0Zv
bnRNYXNrOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICgoX3RyYWl0ICYgTlNJdGFsaWNGb250
TWFzaykpewotICAgICAgICAgICAgS1dRUmVsZWFzZShfTlNGb250KTsKLSAgICAgICAgICAgIF9O
U0ZvbnQgPSAwOworICAgICAgICAgICAgS1dRUmVsZWFzZShtX3dlYkNvcmVGb250LmZvbnQpOwor
ICAgICAgICAgICAgbV93ZWJDb3JlRm9udC5mb250ID0gbmlsOwogICAgICAgICAgICAgX3BpdGNo
ID0gVW5rbm93bjsKICAgICAgICAgfQogICAgICAgICBfdHJhaXQgJj0gfk5TSXRhbGljRm9udE1h
c2s7CkBAIC0xNTksNyArMTYwLDcgQEAgYm9vbCBRRm9udDo6Ym9sZCgpIGNvbnN0CiB2b2lkIFFG
b250OjpkZXRlcm1pbmVQaXRjaCgpIGNvbnN0CiB7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7
Ci0gICAgaWYgKFtbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gaXNG
b250Rml4ZWRQaXRjaDpnZXROU0ZvbnQoKV0pCisgICAgaWYgKFtbV2ViQ29yZVRleHRSZW5kZXJl
ckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gaXNGb250Rml4ZWRQaXRjaDpnZXRXZWJDb3JlRm9udCgp
XSkKICAgICAgICAgX3BpdGNoID0gRml4ZWQ7CiAgICAgZWxzZQogICAgICAgICBfcGl0Y2ggPSBW
YXJpYWJsZTsKQEAgLTE3NSwxNiArMTc2LDE2IEBAIGJvb2wgUUZvbnQ6Om9wZXJhdG9yPT0oY29u
c3QgUUZvbnQgJmNvbXAKICAgICAgICAgJiYgX3BpdGNoID09IGNvbXBhcmVGb250Ll9waXRjaDsK
IH0KIAotTlNGb250ICpRRm9udDo6Z2V0TlNGb250KCkgY29uc3QKK2NvbnN0IFdlYkNvcmVGb250
ICZRRm9udDo6Z2V0V2ViQ29yZUZvbnQoKSBjb25zdAogewotICAgIGlmICghX05TRm9udCkgewor
ICAgIGlmICghbV93ZWJDb3JlRm9udC5mb250KSB7CiAgICAgICAgIENSRUFURV9GQU1JTFlfQVJS
QVkoKnRoaXMsIGZhbWlsaWVzKTsKIAlLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAgICAgICAgX05T
Rm9udCA9IEtXUVJldGFpbihbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3Rv
cnldIAotICAgICAgICAgICAgZm9udFdpdGhGYW1pbGllczpmYW1pbGllcwotICAgICAgICAgICAg
ICAgICAgICAgIHRyYWl0czpnZXROU1RyYWl0cygpIAotICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZTpnZXROU1NpemUoKV0pOworICAgICAgICBtX3dlYkNvcmVGb250ID0gW1tXZWJDb3JlVGV4
dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSAKKyAgICAgICAgICAgIGZvbnRXaXRoRmFt
aWxpZXM6ZmFtaWxpZXMgdHJhaXRzOmdldE5TVHJhaXRzKCkgc2l6ZTpnZXROU1NpemUoKV07Cisg
ICAgICAgIEtXUVJldGFpbihtX3dlYkNvcmVGb250LmZvbnQpOworICAgICAgICBtX3dlYkNvcmVG
b250LmZvclByaW50ZXIgPSBfaXNQcmludGVyRm9udDsKIAlLV1FfVU5CTE9DS19FWENFUFRJT05T
OwogICAgIH0KLSAgICByZXR1cm4gX05TRm9udDsKKyAgICByZXR1cm4gbV93ZWJDb3JlRm9udDsK
IH0KSW5kZXg6IFdlYkNvcmUva3dxL0tXUUZvbnRNZXRyaWNzLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FGb250TWV0cmljcy5tbSx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS44OQpkaWZmIC1wIC11IC1yMS44OSBXZWJDb3JlL2t3cS9LV1FGb250TWV0cmlj
cy5tbQotLS0gV2ViQ29yZS9rd3EvS1dRRm9udE1ldHJpY3MubW0JMjkgSnVsIDIwMDUgMjM6NDI6
NTUgLTAwMDAJMS44OQorKysgV2ViQ29yZS9rd3EvS1dRRm9udE1ldHJpY3MubW0JMTAgU2VwIDIw
MDUgMTY6MzE6MzYgLTAwMDAKQEAgLTUwLDExICs1MCw4IEBAIHN0cnVjdCBRRm9udE1ldHJpY3NQ
cml2YXRlCiAgICAgfQogICAgIGlkIDxXZWJDb3JlVGV4dFJlbmRlcmVyPiBnZXRSZW5kZXJlcigp
CiAgICAgewotICAgICAgICBpZiAoIV9yZW5kZXJlcikgewotICAgICAgICAgICAgX3JlbmRlcmVy
ID0gS1dRUmV0YWluKFtbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0K
LSAgICAgICAgICAgICAgICByZW5kZXJlcldpdGhGb250Ol9mb250LmdldE5TRm9udCgpCi0gICAg
ICAgICAgICAgICAgdXNpbmdQcmludGVyRm9udDpfZm9udC5pc1ByaW50ZXJGb250KCldKTsKLSAg
ICAgICAgfQorICAgICAgICBpZiAoIV9yZW5kZXJlcikKKyAgICAgICAgICAgIF9yZW5kZXJlciA9
IEtXUVJldGFpbihbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHJl
bmRlcmVyV2l0aEZvbnQ6X2ZvbnQuZ2V0V2ViQ29yZUZvbnQoKV0pOwogICAgICAgICByZXR1cm4g
X3JlbmRlcmVyOwogICAgIH0KICAgICAKQEAgLTMyMiw3ICszMTksNyBAQCBpbnQgUUZvbnRNZXRy
aWNzOjpjaGVja1NlbGVjdGlvblBvaW50IChRCiAgICAgc3R5bGUucGFkZGluZyA9IHRvQWRkOwog
ICAgIHN0eWxlLnRhYldpZHRoID0gdGFiV2lkdGg7CiAgICAgc3R5bGUueHBvcyA9IHhwb3M7Ci0g
ICAgc3R5bGUucnRsID0gcmV2ZXJzZWQ7CisgICAgc3R5bGUuUlRMID0gcmV2ZXJzZWQ7CiAKICAg
ICByZXR1cm4gW2RhdGEtPmdldFJlbmRlcmVyKCkgcG9pbnRUb09mZnNldDomcnVuIHN0eWxlOiZz
dHlsZSBwb3NpdGlvbjp4IHJldmVyc2VkOnJldmVyc2VkIGluY2x1ZGVQYXJ0aWFsR2x5cGhzOmlu
Y2x1ZGVQYXJ0aWFsR2x5cGhzXTsKIH0KSW5kZXg6IFdlYkNvcmUva3dxL0tXUUxpbmVFZGl0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FMaW5lRWRpdC5t
bSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MApkaWZmIC1wIC11IC1yMS43MCBXZWJDb3JlL2t3
cS9LV1FMaW5lRWRpdC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRTGluZUVkaXQubW0JMzAgQXVnIDIw
MDUgMDk6MzA6MjQgLTAwMDAJMS43MAorKysgV2ViQ29yZS9rd3EvS1dRTGluZUVkaXQubW0JMTAg
U2VwIDIwMDUgMTY6MzE6MzYgLTAwMDAKQEAgLTI1MiwxMiArMjUyLDEzIEBAIFFTaXplIFFMaW5l
RWRpdDo6c2l6ZUZvckNoYXJhY3RlcldpZHRoKGkKIAogICAgIEtXUV9CTE9DS19FWENFUFRJT05T
OwogCi0gICAgTlNGb250ICpmb250ID0gW3RleHRGaWVsZCBmb250XTsKLQotICAgIHNpemUuaGVp
Z2h0ICs9IFtmb250IGRlZmF1bHRMaW5lSGVpZ2h0Rm9yRm9udF07CisgICAgV2ViQ29yZUZvbnQg
Zm9udDsKKyAgICBXZWJDb3JlSW5pdGlhbGl6ZUZvbnQoJmZvbnQpOworICAgIGZvbnQuZm9udCA9
IFt0ZXh0RmllbGQgZm9udF07CisgICAgZm9udC5mb3JQcmludGVyID0gIVtOU0dyYXBoaWNzQ29u
dGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl07CisgICAgaWQgPFdlYkNvcmVUZXh0
UmVuZGVyZXI+IHJlbmRlcmVyID0gW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRG
YWN0b3J5XSByZW5kZXJlcldpdGhGb250OmZvbnRdOwogCi0gICAgaWQgPFdlYkNvcmVUZXh0UmVu
ZGVyZXI+IHJlbmRlcmVyID0gW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0
b3J5XQotICAgICAgICByZW5kZXJlcldpdGhGb250OmZvbnQgdXNpbmdQcmludGVyRm9udDohW05T
R3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXV07CisgICAgc2l6
ZS5oZWlnaHQgKz0gW2ZvbnQuZm9udCBkZWZhdWx0TGluZUhlaWdodEZvckZvbnRdOwogCiAgICAg
V2ViQ29yZVRleHRTdHlsZSBzdHlsZTsKICAgICBXZWJDb3JlSW5pdGlhbGl6ZUVtcHR5VGV4dFN0
eWxlKCZzdHlsZSk7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FMaXN0Qm94Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FMaXN0Qm94Lm1tLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjU3CmRpZmYgLXAgLXUgLXIxLjU3IFdlYkNvcmUva3dxL0tXUUxpc3RCb3gu
bW0KLS0tIFdlYkNvcmUva3dxL0tXUUxpc3RCb3gubW0JMiBTZXAgMjAwNSAyMTozNDo0OCAtMDAw
MAkxLjU3CisrKyBXZWJDb3JlL2t3cS9LV1FMaXN0Qm94Lm1tCTEwIFNlcCAyMDA1IDE2OjMxOjM2
IC0wMDAwCkBAIC04MCwyNCArODAsMjMgQEAgc3RhdGljIE5TRm9udCAqaXRlbUZvbnQoKQogICAg
IHJldHVybiBmb250OwogfQogCi1zdGF0aWMgTlNGb250ICpncm91cExhYmVsRm9udCgpCi17Ci0g
ICAgc3RhdGljIE5TRm9udCAqZm9udCA9IFtbTlNGb250IGJvbGRTeXN0ZW1Gb250T2ZTaXplOltO
U0ZvbnQgc21hbGxTeXN0ZW1Gb250U2l6ZV1dIHJldGFpbl07Ci0gICAgcmV0dXJuIGZvbnQ7Ci19
Ci0KIHN0YXRpYyBpZCA8V2ViQ29yZVRleHRSZW5kZXJlcj4gaXRlbVRleHRSZW5kZXJlcigpCiB7
CiAgICAgaWYgKFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVl
bl0pIHsKICAgICAgICAgaWYgKGl0ZW1TY3JlZW5SZW5kZXJlciA9PSBuaWwpIHsKLSAgICAgICAg
ICAgIGl0ZW1TY3JlZW5SZW5kZXJlciA9IFtbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNo
YXJlZEZhY3RvcnldCi0gICAgICAgICAgICAgICAgcmVuZGVyZXJXaXRoRm9udDppdGVtRm9udCgp
IHVzaW5nUHJpbnRlckZvbnQ6Tk9dIHJldGFpbl07CisgICAgICAgICAgICBXZWJDb3JlRm9udCBm
b250OworICAgICAgICAgICAgV2ViQ29yZUluaXRpYWxpemVGb250KCZmb250KTsKKyAgICAgICAg
ICAgIGZvbnQuZm9udCA9IGl0ZW1Gb250KCk7CisgICAgICAgICAgICBpdGVtU2NyZWVuUmVuZGVy
ZXIgPSBbW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSByZW5kZXJl
cldpdGhGb250OmZvbnRdIHJldGFpbl07CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGl0ZW1T
Y3JlZW5SZW5kZXJlcjsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoaXRlbVByaW50ZXJSZW5k
ZXJlciA9PSBuaWwpIHsKLSAgICAgICAgICAgIGl0ZW1QcmludGVyUmVuZGVyZXIgPSBbW1tXZWJD
b3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XQotICAgICAgICAgICAgICAgIHJl
bmRlcmVyV2l0aEZvbnQ6aXRlbUZvbnQoKSB1c2luZ1ByaW50ZXJGb250OllFU10gcmV0YWluXTsK
KyAgICAgICAgICAgIFdlYkNvcmVGb250IGZvbnQ7CisgICAgICAgICAgICBXZWJDb3JlSW5pdGlh
bGl6ZUZvbnQoJmZvbnQpOworICAgICAgICAgICAgZm9udC5mb250ID0gaXRlbUZvbnQoKTsKKyAg
ICAgICAgICAgIGZvbnQuZm9yUHJpbnRlciA9IFlFUzsKKyAgICAgICAgICAgIGl0ZW1QcmludGVy
UmVuZGVyZXIgPSBbW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBy
ZW5kZXJlcldpdGhGb250OmZvbnRdIHJldGFpbl07CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IGl0ZW1QcmludGVyUmVuZGVyZXI7CiAgICAgfQpAQCAtMTA3LDE0ICsxMDYsMTkgQEAgc3RhdGlj
IGlkIDxXZWJDb3JlVGV4dFJlbmRlcmVyPiBncm91cExhYgogewogICAgIGlmIChbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dKSB7CiAgICAgICAgIGlmIChn
cm91cExhYmVsU2NyZWVuUmVuZGVyZXIgPT0gbmlsKSB7Ci0gICAgICAgICAgICBncm91cExhYmVs
U2NyZWVuUmVuZGVyZXIgPSBbW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0
b3J5XQotICAgICAgICAgICAgICAgIHJlbmRlcmVyV2l0aEZvbnQ6Z3JvdXBMYWJlbEZvbnQoKSB1
c2luZ1ByaW50ZXJGb250Ok5PXSByZXRhaW5dOworICAgICAgICAgICAgV2ViQ29yZUZvbnQgZm9u
dDsKKyAgICAgICAgICAgIFdlYkNvcmVJbml0aWFsaXplRm9udCgmZm9udCk7CisgICAgICAgICAg
ICBmb250LmZvbnQgPSBbTlNGb250IGJvbGRTeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc21hbGxT
eXN0ZW1Gb250U2l6ZV1dOworICAgICAgICAgICAgZ3JvdXBMYWJlbFNjcmVlblJlbmRlcmVyID0g
W1tbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVuZGVyZXJXaXRo
Rm9udDpmb250XSByZXRhaW5dOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBncm91cExhYmVs
U2NyZWVuUmVuZGVyZXI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGdyb3VwTGFiZWxQcmlu
dGVyUmVuZGVyZXIgPT0gbmlsKSB7Ci0gICAgICAgICAgICBncm91cExhYmVsUHJpbnRlclJlbmRl
cmVyID0gW1tbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0KLSAgICAg
ICAgICAgICAgICByZW5kZXJlcldpdGhGb250Omdyb3VwTGFiZWxGb250KCkgdXNpbmdQcmludGVy
Rm9udDpZRVNdIHJldGFpbl07CisgICAgICAgICAgICBXZWJDb3JlRm9udCBmb250OworICAgICAg
ICAgICAgV2ViQ29yZUluaXRpYWxpemVGb250KCZmb250KTsKKyAgICAgICAgICAgIGZvbnQuZm9u
dCA9IFtOU0ZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzbWFsbFN5c3RlbUZvbnRT
aXplXV07CisgICAgICAgICAgICBmb250LmZvclByaW50ZXIgPSBZRVM7CisgICAgICAgICAgICBn
cm91cExhYmVsUHJpbnRlclJlbmRlcmVyID0gW1tbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkg
c2hhcmVkRmFjdG9yeV0gcmVuZGVyZXJXaXRoRm9udDpmb250XSByZXRhaW5dOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBncm91cExhYmVsUHJpbnRlclJlbmRlcmVyOwogICAgIH0KQEAgLTI3
NCw3ICsyNzgsNyBAQCBRU2l6ZSBRTGlzdEJveDo6c2l6ZUZvck51bWJlck9mTGluZXMoaW50CiAg
ICAgICAgIGlmIChpICE9IGUpIHsKICAgICAgICAgICAgIFdlYkNvcmVUZXh0U3R5bGUgc3R5bGU7
CiAgICAgICAgICAgICBXZWJDb3JlSW5pdGlhbGl6ZUVtcHR5VGV4dFN0eWxlKCZzdHlsZSk7Ci0g
ICAgICAgICAgICBzdHlsZS5ydGwgPSBbdGFibGVWaWV3IGJhc2VXcml0aW5nRGlyZWN0aW9uXSA9
PSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKyAgICAgICAgICAgIHN0eWxlLlJUTCA9
IFt0YWJsZVZpZXcgYmFzZVdyaXRpbmdEaXJlY3Rpb25dID09IE5TV3JpdGluZ0RpcmVjdGlvblJp
Z2h0VG9MZWZ0OwogICAgICAgICAgICAgc3R5bGUuYXBwbHlSdW5Sb3VuZGluZyA9IE5POwogICAg
ICAgICAgICAgc3R5bGUuYXBwbHlXb3JkUm91bmRpbmcgPSBOTzsKICAgICAgICAgICAgIApAQCAt
Mjg0LDE5ICsyODgsMTEgQEAgUVNpemUgUUxpc3RCb3g6OnNpemVGb3JOdW1iZXJPZkxpbmVzKGlu
dAogICAgICAgICAgICAgaWYgKHRhYmxlVmlldy0+aXNTeXN0ZW1Gb250KSB7ICAgICAgICAKICAg
ICAgICAgICAgICAgICByZW5kZXJlciA9IGl0ZW1UZXh0UmVuZGVyZXIoKTsKICAgICAgICAgICAg
ICAgICBncm91cExhYmVsUmVuZGVyZXIgPSBncm91cExhYmVsVGV4dFJlbmRlcmVyKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBOU0ZvbnQgKmYg
PSBmb250KCkuZ2V0TlNGb250KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHJlbmRlcmVyID0gW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5
XSByZW5kZXJlcldpdGhGb250OmZvbnQoKS5nZXRXZWJDb3JlRm9udCgpXTsKICAgICAgICAgICAg
ICAgICBRRm9udCBiID0gZm9udCgpOwotICAgICAgICAgICAgICAgIGIuc2V0V2VpZ2h0KFFGb250
OjpCb2xkKTsKLSAgICAgICAgICAgICAgICBOU0ZvbnQgKmJvbGRGb250ID0gYi5nZXROU0ZvbnQo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIg
PSBbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldCi0gICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVyV2l0aEZvbnQ6ZiB1c2luZ1ByaW50ZXJGb250OiFbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dXTsKLQotICAgICAgICAgICAg
ICAgIGdyb3VwTGFiZWxSZW5kZXJlciA9IFtbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkgc2hh
cmVkRmFjdG9yeV0KLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJXaXRoRm9udDpib2xkRm9u
dCB1c2luZ1ByaW50ZXJGb250OiFbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHREcmF3
aW5nVG9TY3JlZW5dXTsKKyAgICAgICAgICAgICAgICBiLnNldFdlaWdodChRRm9udDo6Qm9sZCk7
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZ3JvdXBMYWJlbFJlbmRlcmVyID0gW1tXZWJD
b3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSByZW5kZXJlcldpdGhGb250OmIu
Z2V0V2ViQ29yZUZvbnQoKV07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGRvIHsKQEAgLTMxNyw5ICszMTMsOCBAQCBRU2l6ZSBRTGlzdEJveDo6c2l6ZUZvck51bWJl
ck9mTGluZXMoaW50CiAgICAgICAgIF93aWR0aEdvb2QgPSB0cnVlOwogICAgIH0KICAgICAKLSAg
ICBOU1NpemUgbnNzaXplID0geyBfd2lkdGgsIFt0YWJsZVZpZXcgcm93SGVpZ2h0XSAqIE1BWCht
aW5MaW5lcywgbGluZXMpIH07Ci0gICAgc2l6ZSA9IFtOU1Njcm9sbFZpZXcgZnJhbWVTaXplRm9y
Q29udGVudFNpemU6bnNzaXplCi0gICAgICAgIGhhc0hvcml6b250YWxTY3JvbGxlcjpOTyBoYXNW
ZXJ0aWNhbFNjcm9sbGVyOllFUyBib3JkZXJUeXBlOk5TQmV6ZWxCb3JkZXJdOworICAgIE5TU2l6
ZSBjb250ZW50U2l6ZSA9IHsgX3dpZHRoLCBbdGFibGVWaWV3IHJvd0hlaWdodF0gKiBNQVgobWlu
TGluZXMsIGxpbmVzKSB9OworICAgIHNpemUgPSBbTlNTY3JvbGxWaWV3IGZyYW1lU2l6ZUZvckNv
bnRlbnRTaXplOmNvbnRlbnRTaXplIGhhc0hvcml6b250YWxTY3JvbGxlcjpOTyBoYXNWZXJ0aWNh
bFNjcm9sbGVyOllFUyBib3JkZXJUeXBlOk5TQmV6ZWxCb3JkZXJdOwogICAgIHNpemUud2lkdGgg
Kz0gW05TU2Nyb2xsZXIgc2Nyb2xsZXJXaWR0aEZvckNvbnRyb2xTaXplOk5TU21hbGxDb250cm9s
U2l6ZV0gLSBbTlNTY3JvbGxlciBzY3JvbGxlcldpZHRoXSArIGxlZnRNYXJnaW4gKyByaWdodE1h
cmdpbjsKIAogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CkBAIC02MjgsMjQgKzYyMywxOSBA
QCB2b2lkIFFMaXN0Qm94OjpzZXRGb250KGNvbnN0IFFGb250ICZmb250CiAKICAgICBib29sIFJU
TCA9IF9kaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAKLSAgICBO
U0ZvbnQgKmZvbnQgPSBfYm94LT5mb250KCkuZ2V0TlNGb250KCk7Ci0gICAgCiAgICAgaWQgPFdl
YkNvcmVUZXh0UmVuZGVyZXI+IHJlbmRlcmVyOwogICAgIGlmIChpc1N5c3RlbUZvbnQpIHsKICAg
ICAgICAgcmVuZGVyZXIgPSAoaXRlbS50eXBlID09IEtXUUxpc3RCb3hHcm91cExhYmVsKSA/IGdy
b3VwTGFiZWxUZXh0UmVuZGVyZXIoKSA6IGl0ZW1UZXh0UmVuZGVyZXIoKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoaXRlbS50eXBlID09IEtXUUxpc3RCb3hHcm91cExhYmVsKSB7Ci0gICAg
ICAgICAgICBRRm9udCBib2xkRm9udCA9IF9ib3gtPmZvbnQoKTsKLSAgICAgICAgICAgIGJvbGRG
b250LnNldFdlaWdodChRRm9udDo6Qm9sZCk7Ci0gICAgICAgICAgICBmb250ID0gYm9sZEZvbnQu
Z2V0TlNGb250KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVuZGVyZXIgPSBbW1dlYkNvcmVUZXh0
UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldCi0gICAgICAgICAgICByZW5kZXJlcldpdGhG
b250OmZvbnQgdXNpbmdQcmludGVyRm9udDohW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250
ZXh0RHJhd2luZ1RvU2NyZWVuXV07CisgICAgICAgIFFGb250IGl0ZW1Gb250ID0gX2JveC0+Zm9u
dCgpOworICAgICAgICBpZiAoaXRlbS50eXBlID09IEtXUUxpc3RCb3hHcm91cExhYmVsKQorICAg
ICAgICAgICAgaXRlbUZvbnQuc2V0V2VpZ2h0KFFGb250OjpCb2xkKTsKKyAgICAgICAgcmVuZGVy
ZXIgPSBbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHJlbmRlcmVy
V2l0aEZvbnQ6aXRlbUZvbnQuZ2V0V2ViQ29yZUZvbnQoKV07CiAgICAgfQogICAgCiAgICAgV2Vi
Q29yZVRleHRTdHlsZSBzdHlsZTsKICAgICBXZWJDb3JlSW5pdGlhbGl6ZUVtcHR5VGV4dFN0eWxl
KCZzdHlsZSk7Ci0gICAgc3R5bGUucnRsID0gUlRMOworICAgIHN0eWxlLlJUTCA9IFJUTDsKICAg
ICBzdHlsZS5hcHBseVJ1blJvdW5kaW5nID0gTk87CiAgICAgc3R5bGUuYXBwbHlXb3JkUm91bmRp
bmcgPSBOTzsKICAgICBzdHlsZS50ZXh0Q29sb3IgPSBjb2xvcjsKQEAgLTY2MSw3ICs2NTEsNyBA
QCB2b2lkIFFMaXN0Qm94OjpzZXRGb250KGNvbnN0IFFGb250ICZmb250CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgcG9pbnQueCA9IE5TTWF4WChjZWxsUmVjdCkgLSByaWdodE1hcmdpbiAtIFtyZW5k
ZXJlciBmbG9hdFdpZHRoRm9yUnVuOiZydW4gc3R5bGU6JnN0eWxlIHdpZHRoczowXTsKICAgICB9
Ci0gICAgcG9pbnQueSA9IE5TTWF4WShjZWxsUmVjdCkgKyBbZm9udCBkZXNjZW5kZXJdIC0gYm90
dG9tTWFyZ2luOworICAgIHBvaW50LnkgPSBOU01heFkoY2VsbFJlY3QpICsgW3JlbmRlcmVyIGRl
c2NlbnRdIC0gYm90dG9tTWFyZ2luOwogCiAgICAgV2ViQ29yZVRleHRHZW9tZXRyeSBnZW9tZXRy
eTsKICAgICBXZWJDb3JlSW5pdGlhbGl6ZUVtcHR5VGV4dEdlb21ldHJ5KCZnZW9tZXRyeSk7CkBA
IC03MDIsOCArNjkyLDcgQEAgdm9pZCBRTGlzdEJveDo6c2V0Rm9udChjb25zdCBRRm9udCAmZm9u
dAogLSAodm9pZClmb250Q2hhbmdlZAogewogICAgIE5TRm9udCAqZm9udCA9IF9ib3gtPmZvbnQo
KS5nZXROU0ZvbnQoKTsKLSAgICBpc1N5c3RlbUZvbnQgPSBbW2ZvbnQgZm9udE5hbWVdIGlzRXF1
YWxUb1N0cmluZzpbaXRlbUZvbnQoKSBmb250TmFtZV1dICYmIChbZm9udCBwb2ludFNpemVdID09
IFtpdGVtRm9udCgpIHBvaW50U2l6ZV0pOwotICAgIAorICAgIGlzU3lzdGVtRm9udCA9IFtbZm9u
dCBmb250TmFtZV0gaXNFcXVhbFRvU3RyaW5nOltpdGVtRm9udCgpIGZvbnROYW1lXV0gJiYgW2Zv
bnQgcG9pbnRTaXplXSA9PSBbaXRlbUZvbnQoKSBwb2ludFNpemVdOwogICAgIFtzZWxmIHNldFJv
d0hlaWdodDpjZWlsZihbZm9udCBhc2NlbmRlcl0gLSBbZm9udCBkZXNjZW5kZXJdICsgYm90dG9t
TWFyZ2luKV07CiAgICAgW3NlbGYgc2V0TmVlZHNEaXNwbGF5OllFU107CiB9CkluZGV4OiBXZWJD
b3JlL2t3cS9LV1FQYWludGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2t3cS9LV1FQYWludGVyLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzNgpkaWZmIC1w
IC11IC1yMS4xMzYgV2ViQ29yZS9rd3EvS1dRUGFpbnRlci5tbQotLS0gV2ViQ29yZS9rd3EvS1dR
UGFpbnRlci5tbQk1IFNlcCAyMDA1IDA0OjAxOjI0IC0wMDAwCTEuMTM2CisrKyBXZWJDb3JlL2t3
cS9LV1FQYWludGVyLm1tCTEwIFNlcCAyMDA1IDE2OjMxOjM3IC0wMDAwCkBAIC01NjksOCArNTY5
LDcgQEAgdm9pZCBRUGFpbnRlcjo6X3VwZGF0ZVJlbmRlcmVyKCkKICAgICAgICAgaWQgPFdlYkNv
cmVUZXh0UmVuZGVyZXI+IG9sZFJlbmRlcmVyID0gZGF0YS0+dGV4dFJlbmRlcmVyOwogCUtXUV9C
TE9DS19FWENFUFRJT05TOwogICAgICAgICBkYXRhLT50ZXh0UmVuZGVyZXIgPSBLV1FSZXRhaW4o
W1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XQotICAgICAgICAgICAg
cmVuZGVyZXJXaXRoRm9udDpkYXRhLT50ZXh0UmVuZGVyZXJGb250LmdldE5TRm9udCgpCi0gICAg
ICAgICAgICB1c2luZ1ByaW50ZXJGb250OmRhdGEtPnRleHRSZW5kZXJlckZvbnQuaXNQcmludGVy
Rm9udCgpXSk7CisgICAgICAgICAgICByZW5kZXJlcldpdGhGb250OmRhdGEtPnRleHRSZW5kZXJl
ckZvbnQuZ2V0V2ViQ29yZUZvbnQoKV0pOwogICAgICAgICBLV1FSZWxlYXNlKG9sZFJlbmRlcmVy
KTsKIAlLV1FfVU5CTE9DS19FWENFUFRJT05TOwogICAgIH0KQEAgLTYzMCw3ICs2MjksNyBAQCB2
b2lkIFFQYWludGVyOjpkcmF3VGV4dChpbnQgeCwgaW50IHksIGluCiAgICAgV2ViQ29yZUluaXRp
YWxpemVFbXB0eVRleHRTdHlsZSgmc3R5bGUpOwogICAgIHN0eWxlLnRleHRDb2xvciA9IG5zQ29s
b3IoZGF0YS0+c3RhdGUucGVuLmNvbG9yKCkpOwogICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9
IGJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgPyBuc0NvbG9yKGJhY2tncm91bmRDb2xvcikgOiBu
aWw7Ci0gICAgc3R5bGUucnRsID0gZCA9PSBSVEwgPyB0cnVlIDogZmFsc2U7CisgICAgc3R5bGUu
UlRMID0gZCA9PSBSVEw7CiAgICAgc3R5bGUudmlzdWFsbHlPcmRlcmVkID0gdmlzdWFsbHlPcmRl
cmVkOwogICAgIHN0eWxlLmxldHRlclNwYWNpbmcgPSBsZXR0ZXJTcGFjaW5nOwogICAgIHN0eWxl
LndvcmRTcGFjaW5nID0gd29yZFNwYWNpbmc7CkBAIC02NjksNyArNjY4LDcgQEAgdm9pZCBRUGFp
bnRlcjo6ZHJhd0hpZ2hsaWdodEZvclRleHQoaW50IAogICAgIFdlYkNvcmVJbml0aWFsaXplRW1w
dHlUZXh0U3R5bGUoJnN0eWxlKTsKICAgICBzdHlsZS50ZXh0Q29sb3IgPSBuc0NvbG9yKGRhdGEt
PnN0YXRlLnBlbi5jb2xvcigpKTsKICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3Jv
dW5kQ29sb3IuaXNWYWxpZCgpID8gbnNDb2xvcihiYWNrZ3JvdW5kQ29sb3IpIDogbmlsOwotICAg
IHN0eWxlLnJ0bCA9IGQgPT0gUlRMID8gdHJ1ZSA6IGZhbHNlOworICAgIHN0eWxlLlJUTCA9IGQg
PT0gUlRMOwogICAgIHN0eWxlLnZpc3VhbGx5T3JkZXJlZCA9IHZpc3VhbGx5T3JkZXJlZDsKICAg
ICBzdHlsZS5sZXR0ZXJTcGFjaW5nID0gbGV0dGVyU3BhY2luZzsKICAgICBzdHlsZS53b3JkU3Bh
Y2luZyA9IHdvcmRTcGFjaW5nOwpJbmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZVRleHRSZW5kZXJl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlVGV4
dFJlbmRlcmVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzUKZGlmZiAtcCAtdSAtcjEuMzUg
V2ViQ29yZS9rd3EvV2ViQ29yZVRleHRSZW5kZXJlci5oCi0tLSBXZWJDb3JlL2t3cS9XZWJDb3Jl
VGV4dFJlbmRlcmVyLmgJMjkgSnVsIDIwMDUgMjM6NDI6NTUgLTAwMDAJMS4zNQorKysgV2ViQ29y
ZS9rd3EvV2ViQ29yZVRleHRSZW5kZXJlci5oCTEwIFNlcCAyMDA1IDE2OjMxOjM3IC0wMDAwCkBA
IC0yOSw4ICsyOSw3IEBACiAjZGVmaW5lIFJPVU5EX1RPX0lOVCh4KSAodW5zaWduZWQgaW50KSgo
eCkrLjUpCiAjZW5kaWYKIAotc3RydWN0IFdlYkNvcmVUZXh0U3R5bGUKLXsKK3R5cGVkZWYgc3Ry
dWN0IHsKICAgICBOU0NvbG9yICp0ZXh0Q29sb3I7CiAgICAgTlNDb2xvciAqYmFja2dyb3VuZENv
bG9yOwogICAgIGZsb2F0IGxldHRlclNwYWNpbmc7CkBAIC00MCwzNyArMzksMzEgQEAgc3RydWN0
IFdlYkNvcmVUZXh0U3R5bGUKICAgICBmbG9hdCB4cG9zOwogICAgIE5TU3RyaW5nICoqZmFtaWxp
ZXM7CiAgICAgdW5zaWduZWQgc21hbGxDYXBzIDogMTsKLSAgICB1bnNpZ25lZCBydGwgOiAxOwor
ICAgIHVuc2lnbmVkIFJUTCA6IDE7CiAgICAgdW5zaWduZWQgdmlzdWFsbHlPcmRlcmVkIDogMTsK
ICAgICB1bnNpZ25lZCBhcHBseVJ1blJvdW5kaW5nIDogMTsKICAgICB1bnNpZ25lZCBhcHBseVdv
cmRSb3VuZGluZyA6IDE7CiAgICAgdW5zaWduZWQgYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24gOiAx
OwotfTsKK30gV2ViQ29yZVRleHRTdHlsZTsKIAotc3RydWN0IFdlYkNvcmVUZXh0UnVuCi17Cit0
eXBlZGVmIHN0cnVjdCB7CiAgICAgY29uc3QgVW5pQ2hhciAqY2hhcmFjdGVyczsKLSAgICB1bnNp
Z25lZCBpbnQgbGVuZ3RoOworICAgIHVuc2lnbmVkIGxlbmd0aDsKICAgICBpbnQgZnJvbTsKICAg
ICBpbnQgdG87Ci19OworfSBXZWJDb3JlVGV4dFJ1bjsKIAotc3RydWN0IFdlYkNvcmVUZXh0R2Vv
bWV0cnkKLXsKK3R5cGVkZWYgc3RydWN0IHsKICAgICBOU1BvaW50IHBvaW50OwogICAgIGZsb2F0
IHNlbGVjdGlvblk7CiAgICAgZmxvYXQgc2VsZWN0aW9uSGVpZ2h0OwotICAgIGJvb2wgdXNlRm9u
dE1ldHJpY3NGb3JTZWxlY3Rpb25ZQW5kSGVpZ2h0IDogMTsKLX07CisgICAgdW5zaWduZWQgdXNl
Rm9udE1ldHJpY3NGb3JTZWxlY3Rpb25ZQW5kSGVpZ2h0IDogMTsKK30gV2ViQ29yZVRleHRHZW9t
ZXRyeTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi10eXBl
ZGVmIHN0cnVjdCBXZWJDb3JlVGV4dFJ1biBXZWJDb3JlVGV4dFJ1bjsKLXR5cGVkZWYgc3RydWN0
IFdlYkNvcmVUZXh0U3R5bGUgV2ViQ29yZVRleHRTdHlsZTsKLXR5cGVkZWYgc3RydWN0IFdlYkNv
cmVUZXh0R2VvbWV0cnkgV2ViQ29yZVRleHRHZW9tZXRyeTsKLQogZXh0ZXJuIHZvaWQgV2ViQ29y
ZUluaXRpYWxpemVUZXh0UnVuKFdlYkNvcmVUZXh0UnVuICpydW4sIGNvbnN0IFVuaUNoYXIgKmNo
YXJhY3RlcnMsIHVuc2lnbmVkIGludCBsZW5ndGgsIGludCBmcm9tLCBpbnQgdG8pOwogZXh0ZXJu
IHZvaWQgV2ViQ29yZUluaXRpYWxpemVFbXB0eVRleHRTdHlsZShXZWJDb3JlVGV4dFN0eWxlICpz
dHlsZSk7CiBleHRlcm4gdm9pZCBXZWJDb3JlSW5pdGlhbGl6ZUVtcHR5VGV4dEdlb21ldHJ5KFdl
YkNvcmVUZXh0R2VvbWV0cnkgKmdlb21ldHJ5KTsKQEAgLTEwNSw0ICs5OCw1IEBAIGV4dGVybiB2
b2lkIFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0R2UKIAogLy8gc2VsZWN0aW9uIHBvaW50IGNo
ZWNrCiAtIChpbnQpcG9pbnRUb09mZnNldDooY29uc3QgV2ViQ29yZVRleHRSdW4gKilydW4gc3R5
bGU6KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilzdHlsZSBwb3NpdGlvbjooaW50KXggcmV2ZXJz
ZWQ6KEJPT0wpcmV2ZXJzZWQgaW5jbHVkZVBhcnRpYWxHbHlwaHM6KEJPT0wpaW5jbHVkZVBhcnRp
YWxHbHlwaHM7CisKIEBlbmQKSW5kZXg6IFdlYkNvcmUva3dxL1dlYkNvcmVUZXh0UmVuZGVyZXJG
YWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL1dlYkNv
cmVUZXh0UmVuZGVyZXJGYWN0b3J5LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAt
cCAtdSAtcjEuMTIgV2ViQ29yZS9rd3EvV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkuaAotLS0g
V2ViQ29yZS9rd3EvV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkuaAkzMSBBdWcgMjAwNCAwMDo0
OToxNyAtMDAwMAkxLjEyCisrKyBXZWJDb3JlL2t3cS9XZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9y
eS5oCTEwIFNlcCAyMDA1IDE2OjMxOjM3IC0wMDAwCkBAIC0yMywxOCArMjMsNDIgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCiAKKyNpZmRlZiBfX09CSkNfXwogI2ltcG9ydCA8Q29jb2EvQ29jb2Eu
aD4KLQogQHByb3RvY29sIFdlYkNvcmVUZXh0UmVuZGVyZXI7CisjZWxzZQorY2xhc3MgTlNGb250
OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBOU0ZvbnQgKmZvbnQ7CisgICAgdW5z
aWduZWQgc3ludGhldGljQm9sZCA6IDE7CisgICAgdW5zaWduZWQgc3ludGhldGljT2JsaXF1ZSA6
IDE7CisgICAgdW5zaWduZWQgZm9yUHJpbnRlciA6IDE7Cit9IFdlYkNvcmVGb250OworCisjaWZk
ZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2V4dGVybiB2b2lkIFdlYkNv
cmVJbml0aWFsaXplRm9udChXZWJDb3JlRm9udCAqZm9udCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1
cworfQorI2VuZGlmCisKKyNpZmRlZiBfX09CSkNfXwogCiBAaW50ZXJmYWNlIFdlYkNvcmVUZXh0
UmVuZGVyZXJGYWN0b3J5IDogTlNPYmplY3QKIAogKyAoV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rv
cnkgKilzaGFyZWRGYWN0b3J5OwogCi0tIChOU0ZvbnQgKilmb250V2l0aEZhbWlsaWVzOihOU1N0
cmluZyAqKilmYW1pbGllcyB0cmFpdHM6KE5TRm9udFRyYWl0TWFzayl0cmFpdHMgc2l6ZTooZmxv
YXQpc2l6ZTsKLS0gKEJPT0wpaXNGb250Rml4ZWRQaXRjaDooTlNGb250ICopZm9udDsKLS0gKGlk
IDxXZWJDb3JlVGV4dFJlbmRlcmVyPilyZW5kZXJlcldpdGhGb250OihOU0ZvbnQgKilmb250IHVz
aW5nUHJpbnRlckZvbnQ6KEJPT0wpdXNpbmdQcmludGVyRm9udDsKKy0gKFdlYkNvcmVGb250KWZv
bnRXaXRoRmFtaWxpZXM6KE5TU3RyaW5nICoqKWZhbWlsaWVzIHRyYWl0czooTlNGb250VHJhaXRN
YXNrKXRyYWl0cyBzaXplOihmbG9hdClzaXplOworLSAoQk9PTClpc0ZvbnRGaXhlZFBpdGNoOihX
ZWJDb3JlRm9udClmb250OworLSAoaWQgPFdlYkNvcmVUZXh0UmVuZGVyZXI+KXJlbmRlcmVyV2l0
aEZvbnQ6KFdlYkNvcmVGb250KWZvbnQ7CiAKIC0gKHZvaWQpY2xlYXJDYWNoZXM7CiAKIEBlbmQK
KworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2t3cS9XZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZVRleHRS
ZW5kZXJlckZhY3RvcnkubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQKZGlmZiAtcCAtdSAt
cjEuMjQgV2ViQ29yZS9rd3EvV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkubW0KLS0tIFdlYkNv
cmUva3dxL1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5Lm1tCTI5IEp1bCAyMDA1IDIzOjQyOjU1
IC0wMDAwCTEuMjQKKysrIFdlYkNvcmUva3dxL1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5Lm1t
CTEwIFNlcCAyMDA1IDE2OjMxOjM3IC0wMDAwCkBAIC0yMywxMyArMjMsMjEgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAogICovCiAKLSNpbXBvcnQgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKICNpbXBvcnQg
IldlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5LmgiCiAKICNpbXBvcnQgIktXUUFzc2VydGlvbnMu
aCIKICNpbXBvcnQgIktXUUtIVE1MUGFydC5oIgogI2ltcG9ydCAiS1dRTGlzdEJveC5oIgogI2lt
cG9ydCAiV2ViQ29yZUJyaWRnZS5oIgorI2ltcG9ydCAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgor
Cit2b2lkIFdlYkNvcmVJbml0aWFsaXplRm9udChXZWJDb3JlRm9udCAqZm9udCkKK3sKKyAgICBm
b250LT5mb250ID0gbmlsOworICAgIGZvbnQtPnN5bnRoZXRpY0JvbGQgPSBOTzsKKyAgICBmb250
LT5zeW50aGV0aWNPYmxpcXVlID0gTk87CisgICAgZm9udC0+Zm9yUHJpbnRlciA9IE5POworfQog
CiB2b2lkIFdlYkNvcmVJbml0aWFsaXplVGV4dFJ1bihXZWJDb3JlVGV4dFJ1biAqcnVuLCBjb25z
dCBVbmlDaGFyICpjaGFyYWN0ZXJzLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCBpbnQgZnJvbSwgaW50
IHRvKQogewpAQCAtNDEsMjggKzQ5LDI1IEBAIHZvaWQgV2ViQ29yZUluaXRpYWxpemVUZXh0UnVu
KFdlYkNvcmVUZXgKIAogdm9pZCBXZWJDb3JlSW5pdGlhbGl6ZUVtcHR5VGV4dFN0eWxlKFdlYkNv
cmVUZXh0U3R5bGUgKnN0eWxlKQogewotICAgIHN0eWxlLT5wYWRkaW5nID0gMDsKLS8vICAgIHN0
eWxlLT50YWJXaWR0aCA9IDAuMEY7Ci0vLyAgICBzdHlsZS0+eHBvcyA9IDAuMEY7CiAgICAgc3R5
bGUtPnRleHRDb2xvciA9IG5pbDsKICAgICBzdHlsZS0+YmFja2dyb3VuZENvbG9yID0gbmlsOwot
ICAgIHN0eWxlLT5ydGwgPSBmYWxzZTsKLSAgICBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkID0gZmFs
c2U7CiAgICAgc3R5bGUtPmxldHRlclNwYWNpbmcgPSAwOwogICAgIHN0eWxlLT53b3JkU3BhY2lu
ZyA9IDA7Ci0gICAgc3R5bGUtPnNtYWxsQ2FwcyA9IGZhbHNlOwotICAgIHN0eWxlLT5hcHBseVJ1
blJvdW5kaW5nID0gdHJ1ZTsKLSAgICBzdHlsZS0+YXBwbHlXb3JkUm91bmRpbmcgPSB0cnVlOwot
ICAgIHN0eWxlLT5hdHRlbXB0Rm9udFN1YnN0aXR1dGlvbiA9IHRydWU7CisgICAgc3R5bGUtPnBh
ZGRpbmcgPSAwOwogICAgIHN0eWxlLT5mYW1pbGllcyA9IG5pbDsKKyAgICBzdHlsZS0+c21hbGxD
YXBzID0gTk87CisgICAgc3R5bGUtPlJUTCA9IE5POworICAgIHN0eWxlLT52aXN1YWxseU9yZGVy
ZWQgPSBOTzsKKyAgICBzdHlsZS0+YXBwbHlSdW5Sb3VuZGluZyA9IFlFUzsKKyAgICBzdHlsZS0+
YXBwbHlXb3JkUm91bmRpbmcgPSBZRVM7CisgICAgc3R5bGUtPmF0dGVtcHRGb250U3Vic3RpdHV0
aW9uID0gWUVTOwogfQogCiB2b2lkIFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0R2VvbWV0cnko
V2ViQ29yZVRleHRHZW9tZXRyeSAqZ2VvbWV0cnkpCiB7Ci0gICAgZ2VvbWV0cnktPnBvaW50ID0g
TlNNYWtlUG9pbnQoMCwwKTsKLSAgICBnZW9tZXRyeS0+c2VsZWN0aW9uWSA9IDA7Ci0gICAgZ2Vv
bWV0cnktPnNlbGVjdGlvbkhlaWdodCA9IDA7Ci0gICAgZ2VvbWV0cnktPnVzZUZvbnRNZXRyaWNz
Rm9yU2VsZWN0aW9uWUFuZEhlaWdodCA9IHRydWU7CisgICAgZ2VvbWV0cnktPnBvaW50LnggPSAw
OworICAgIGdlb21ldHJ5LT5wb2ludC55ID0gMDsKKyAgICBnZW9tZXRyeS0+dXNlRm9udE1ldHJp
Y3NGb3JTZWxlY3Rpb25ZQW5kSGVpZ2h0ID0gWUVTOwogfQogCiBAaW1wbGVtZW50YXRpb24gV2Vi
Q29yZVRleHRSZW5kZXJlckZhY3RvcnkKQEAgLTg0LDE4ICs4OSwyMyBAQCBzdGF0aWMgV2ViQ29y
ZVRleHRSZW5kZXJlckZhY3RvcnkgKnNoYXJlCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKE5T
Rm9udCAqKWZvbnRXaXRoRmFtaWxpZXM6KE5TU3RyaW5nICoqKWZhbWlsaWVzIHRyYWl0czooTlNG
b250VHJhaXRNYXNrKXRyYWl0cyBzaXplOihmbG9hdClzaXplCistIChXZWJDb3JlRm9udClmb250
V2l0aEZhbWlsaWVzOihOU1N0cmluZyAqKilmYW1pbGllcyB0cmFpdHM6KE5TRm9udFRyYWl0TWFz
ayl0cmFpdHMgc2l6ZTooZmxvYXQpc2l6ZQogewotICAgIHJldHVybiBuaWw7CisgICAgRVJST1Io
ImZvbnRXaXRoRmFtaWxpZXMgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGV4dCByZW5kZXJl
ciBmYWN0b3J5IHN1YmNsYXNzIik7CisgICAgV2ViQ29yZUZvbnQgZm9udDsKKyAgICBXZWJDb3Jl
SW5pdGlhbGl6ZUZvbnQoJmZvbnQpOworICAgIHJldHVybiBmb250OwogfQogCi0tIChCT09MKWlz
Rm9udEZpeGVkUGl0Y2g6KE5TRm9udCAqKWZvbnQKKy0gKEJPT0wpaXNGb250Rml4ZWRQaXRjaDoo
V2ViQ29yZUZvbnQpZm9udAogeworICAgIEVSUk9SKCJpc0ZvbnRGaXhlZFBpdGNoIG5lZWRzIHRv
IGJlIGltcGxlbWVudGVkIGluIHRleHQgcmVuZGVyZXIgZmFjdG9yeSBzdWJjbGFzcyIpOwogICAg
IHJldHVybiBOTzsKIH0KIAotLSAoaWQgPFdlYkNvcmVUZXh0UmVuZGVyZXI+KXJlbmRlcmVyV2l0
aEZvbnQ6KE5TRm9udCAqKWZvbnQgdXNpbmdQcmludGVyRm9udDooQk9PTCl1c2luZ1ByaW50ZXJG
b250CistIChpZCA8V2ViQ29yZVRleHRSZW5kZXJlcj4pcmVuZGVyZXJXaXRoRm9udDooV2ViQ29y
ZUZvbnQpZm9udAogeworICAgIEVSUk9SKCJyZW5kZXJlckZvckZvbnQgbmVlZHMgdG8gYmUgaW1w
bGVtZW50ZWQgaW4gdGV4dCByZW5kZXJlciBmYWN0b3J5IHN1YmNsYXNzIik7CiAgICAgcmV0dXJu
IG5pbDsKIH0KIApJbmRleDogV2ViQ29yZS9sYXlvdXQtdGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJk
L3Bhc3RlLXRleHQtMDExLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9sYXlvdXQtdGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtMDEx
LWV4cGVjdGVkLnR4dCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC1yMS4x
MiBXZWJDb3JlL2xheW91dC10ZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTEt
ZXhwZWN0ZWQudHh0Ci0tLSBXZWJDb3JlL2xheW91dC10ZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQv
cGFzdGUtdGV4dC0wMTEtZXhwZWN0ZWQudHh0CTE1IEF1ZyAyMDA1IDAzOjM5OjU1IC0wMDAwCTEu
MTIKKysrIFdlYkNvcmUvbGF5b3V0LXRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0
LTAxMS1leHBlY3RlZC50eHQJMTAgU2VwIDIwMDUgMTY6MzE6NDUgLTAwMDAKQEAgLTE1LDI0ICsx
NSwyNCBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUg
ODAweDYwMAogICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgICAg
UmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTc2Ci0gICAgICBSZW5kZXJCbG9j
ayB7UH0gYXQgKDAsMCkgc2l6ZSA3ODR4MTgKLSAgICAgICAgUmVuZGVySW5saW5lIHtGT05UfSBh
dCAoMCwwKSBzaXplIDM3eDE4Ci0gICAgICAgICAgUmVuZGVySW5saW5lIHtCfSBhdCAoMCwwKSBz
aXplIDM3eDE4Ci0gICAgICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDM3
eDE4Ci0gICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDM3OiAiaGVsbG8iCi0g
ICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMzQpIHNpemUgNzg0eDE4Ci0gICAgICAgIFJlbmRl
cklubGluZSB7Rk9OVH0gYXQgKDAsMCkgc2l6ZSAzOXgxOAotICAgICAgICAgIFJlbmRlcklubGlu
ZSB7Qn0gYXQgKDAsMCkgc2l6ZSAzOXgxOAotICAgICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0g
YXQgKDAsMCkgc2l6ZSAzOXgxOAotICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0
aCAzOTogInRoZXJlIgotICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDY4KSBzaXplIDc4NHgx
OAotICAgICAgICBSZW5kZXJJbmxpbmUge0ZPTlR9IGF0ICgwLDApIHNpemUgMzd4MTgKLSAgICAg
ICAgICBSZW5kZXJJbmxpbmUge0J9IGF0ICgwLDApIHNpemUgMzd4MTgKLSAgICAgICAgICAgIFJl
bmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMzd4MTgKLSAgICAgICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMCkgd2lkdGggMzc6ICJoZWxsbyIKLSAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAo
MCwxMDIpIHNpemUgNzg0eDE4Ci0gICAgICAgIFJlbmRlcklubGluZSB7Rk9OVH0gYXQgKDAsMCkg
c2l6ZSAzOXgxOAotICAgICAgICAgIFJlbmRlcklubGluZSB7Qn0gYXQgKDAsMCkgc2l6ZSAzOXgx
OAotICAgICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAzOXgxOAotICAg
ICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzOTogInRoZXJlIgorICAgICAgUmVu
ZGVyQmxvY2sge1B9IGF0ICgwLDApIHNpemUgNzg0eDIxCisgICAgICAgIFJlbmRlcklubGluZSB7
Rk9OVH0gYXQgKDAsMCkgc2l6ZSA1NXgyMAorICAgICAgICAgIFJlbmRlcklubGluZSB7Qn0gYXQg
KDAsMCkgc2l6ZSA1NXgyMAorICAgICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkg
c2l6ZSA1NXgyMQorICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1NTogImhl
bGxvIgorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDM3KSBzaXplIDc4NHgyMQorICAgICAg
ICBSZW5kZXJJbmxpbmUge0ZPTlR9IGF0ICgwLDApIHNpemUgNTV4MjAKKyAgICAgICAgICBSZW5k
ZXJJbmxpbmUge0J9IGF0ICgwLDApIHNpemUgNTV4MjAKKyAgICAgICAgICAgIFJlbmRlclRleHQg
e1RFWFR9IGF0ICgwLDApIHNpemUgNTV4MjEKKyAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggNTU6ICJ0aGVyZSIKKyAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCw3NCkgc2l6
ZSA3ODR4MjEKKyAgICAgICAgUmVuZGVySW5saW5lIHtGT05UfSBhdCAoMCwwKSBzaXplIDU1eDIw
CisgICAgICAgICAgUmVuZGVySW5saW5lIHtCfSBhdCAoMCwwKSBzaXplIDU1eDIwCisgICAgICAg
ICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDU1eDIxCisgICAgICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDU1OiAiaGVsbG8iCisgICAgICBSZW5kZXJCbG9jayB7
UH0gYXQgKDAsMTExKSBzaXplIDc4NHgyMQorICAgICAgICBSZW5kZXJJbmxpbmUge0ZPTlR9IGF0
ICgwLDApIHNpemUgNTV4MjAKKyAgICAgICAgICBSZW5kZXJJbmxpbmUge0J9IGF0ICgwLDApIHNp
emUgNTV4MjAKKyAgICAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgNTV4
MjEKKyAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTU6ICJ0aGVyZSIKIGNh
cmV0OiBwb3NpdGlvbiA1IG9mIGNoaWxkIDAge1RFWFR9IG9mIGNoaWxkIDAge0J9IG9mIGNoaWxk
IDAge0ZPTlR9IG9mIGNoaWxkIDUge1B9IG9mIGNoaWxkIDEge0JPRFl9IG9mIGNoaWxkIDAge0hU
TUx9IG9mIGRvY3VtZW50CkluZGV4OiBXZWJLaXQvTWlzYy5zdWJwcm9qL1dlYktpdE5TU3RyaW5n
RXh0cmFzLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9NaXNjLnN1YnBy
b2ovV2ViS2l0TlNTdHJpbmdFeHRyYXMubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNgpkaWZm
IC1wIC11IC1yMS4yNiBXZWJLaXQvTWlzYy5zdWJwcm9qL1dlYktpdE5TU3RyaW5nRXh0cmFzLm0K
LS0tIFdlYktpdC9NaXNjLnN1YnByb2ovV2ViS2l0TlNTdHJpbmdFeHRyYXMubQk1IEp1biAyMDA1
IDE3OjU0OjI1IC0wMDAwCTEuMjYKKysrIFdlYktpdC9NaXNjLnN1YnByb2ovV2ViS2l0TlNTdHJp
bmdFeHRyYXMubQkxMCBTZXAgMjAwNSAxNjozMzoxMCAtMDAwMApAQCAtNTYsOCArNTYsMTEgQEAg
c3RhdGljIEJPT0wgY2FuVXNlRmFzdFJlbmRlcmVyKGNvbnN0IFVuaQogCiAgICAgW3NlbGYgZ2V0
Q2hhcmFjdGVyczpidWZmZXJdOwogICAgIAotICAgIGlmIChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVm
ZmVyLCBsZW5ndGgpKXsKLSAgICAgICAgV2ViVGV4dFJlbmRlcmVyICpyZW5kZXJlciA9IFtbV2Vi
VGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSByZW5kZXJlcldpdGhGb250OmZvbnQg
dXNpbmdQcmludGVyRm9udDpOT107CisgICAgaWYgKGNhblVzZUZhc3RSZW5kZXJlcihidWZmZXIs
IGxlbmd0aCkpIHsKKyAgICAgICAgV2ViQ29yZUZvbnQgZjsKKyAgICAgICAgV2ViQ29yZUluaXRp
YWxpemVGb250KCZmKTsKKyAgICAgICAgZi5mb250ID0gZm9udDsKKyAgICAgICAgV2ViVGV4dFJl
bmRlcmVyICpyZW5kZXJlciA9IFtbV2ViVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5
XSByZW5kZXJlcldpdGhGb250OmZdOwogCiAgICAgICAgIFdlYkNvcmVUZXh0UnVuIHJ1bjsKICAg
ICAgICAgV2ViQ29yZUluaXRpYWxpemVUZXh0UnVuICgmcnVuLCBidWZmZXIsIGxlbmd0aCwgMCwg
bGVuZ3RoKTsKQEAgLTExMiw3ICsxMTUsMTAgQEAgc3RhdGljIEJPT0wgY2FuVXNlRmFzdFJlbmRl
cmVyKGNvbnN0IFVuaQogICAgIFtzZWxmIGdldENoYXJhY3RlcnM6YnVmZmVyXTsKIAogICAgIGlm
IChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVmZmVyLCBsZW5ndGgpKXsKLSAgICAgICAgV2ViVGV4dFJl
bmRlcmVyICpyZW5kZXJlciA9IFtbV2ViVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5
XSByZW5kZXJlcldpdGhGb250OmZvbnQgdXNpbmdQcmludGVyRm9udDpOT107CisgICAgICAgIFdl
YkNvcmVGb250IGY7CisgICAgICAgIFdlYkNvcmVJbml0aWFsaXplRm9udCgmZik7CisgICAgICAg
IGYuZm9udCA9IGZvbnQ7CisgICAgICAgIFdlYlRleHRSZW5kZXJlciAqcmVuZGVyZXIgPSBbW1dl
YlRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVuZGVyZXJXaXRoRm9udDpmXTsK
IAogICAgICAgICBXZWJDb3JlVGV4dFJ1biBydW47CiAgICAgICAgIFdlYkNvcmVJbml0aWFsaXpl
VGV4dFJ1biAoJnJ1biwgYnVmZmVyLCBsZW5ndGgsIDAsIGxlbmd0aCk7CkluZGV4OiBXZWJLaXQv
TWlzYy5zdWJwcm9qL1dlYlN0cmluZ1RydW5jYXRvci5tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJLaXQvTWlzYy5zdWJwcm9qL1dlYlN0cmluZ1RydW5jYXRvci5tLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjIyCmRpZmYgLXAgLXUgLXIxLjIyIFdlYktpdC9NaXNjLnN1YnByb2ov
V2ViU3RyaW5nVHJ1bmNhdG9yLm0KLS0tIFdlYktpdC9NaXNjLnN1YnByb2ovV2ViU3RyaW5nVHJ1
bmNhdG9yLm0JNSBKdW4gMjAwNSAxNzo1NDoyNiAtMDAwMAkxLjIyCisrKyBXZWJLaXQvTWlzYy5z
dWJwcm9qL1dlYlN0cmluZ1RydW5jYXRvci5tCTEwIFNlcCAyMDA1IDE2OjMzOjEwIC0wMDAwCkBA
IC0xMTMsNyArMTEzLDEwIEBAIHN0YXRpYyBOU1N0cmluZyAqdHJ1bmNhdGVTdHJpbmcoTlNTdHJp
bmcKICAgICAgICAgY3VycmVudEZvbnQgPSBbZm9udCByZXRhaW5dOwogICAgICAgICBbY3VycmVu
dFJlbmRlcmVyIHJlbGVhc2VdOwogICAgICAgICBbV2ViVGV4dFJlbmRlcmVyRmFjdG9yeSBjcmVh
dGVTaGFyZWRGYWN0b3J5XTsKLSAgICAgICAgY3VycmVudFJlbmRlcmVyID0gW1tbV2ViVGV4dFJl
bmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSByZW5kZXJlcldpdGhGb250OmZvbnQgdXNpbmdQ
cmludGVyRm9udDpOT10gcmV0YWluXTsKKyAgICAgICAgV2ViQ29yZUZvbnQgZjsKKyAgICAgICAg
V2ViQ29yZUluaXRpYWxpemVGb250KCZmKTsKKyAgICAgICAgZi5mb250ID0gZm9udDsKKyAgICAg
ICAgY3VycmVudFJlbmRlcmVyID0gW1tbV2ViVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0
b3J5XSByZW5kZXJlcldpdGhGb250OmZdIHJldGFpbl07CiAgICAgICAgIGVsbGlwc2lzID0gRUxM
SVBTSVNfQ0hBUkFDVEVSOwogICAgICAgICBjdXJyZW50RWxsaXBzaXNXaWR0aCA9IHN0cmluZ1dp
ZHRoKGN1cnJlbnRSZW5kZXJlciwgJmVsbGlwc2lzLCAxKTsKICAgICB9CkBAIC0yMTksNyArMjIy
LDEwIEBAIHN0YXRpYyBOU0ZvbnQgKmRlZmF1bHRNZW51Rm9udCh2b2lkKQogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKICAgICB1bmljaGFyICpzID0gbWFsbG9jKHNpemVv
Zih1bmljaGFyKSAqIGxlbmd0aCk7CiAgICAgW3N0cmluZyBnZXRDaGFyYWN0ZXJzOnNdOwotICAg
IGZsb2F0IHdpZHRoID0gc3RyaW5nV2lkdGgoW1tXZWJUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJl
ZEZhY3RvcnldIHJlbmRlcmVyV2l0aEZvbnQ6Zm9udCB1c2luZ1ByaW50ZXJGb250Ok5PXSwgcywg
bGVuZ3RoKTsKKyAgICBXZWJDb3JlRm9udCBmOworICAgIFdlYkNvcmVJbml0aWFsaXplRm9udCgm
Zik7CisgICAgZi5mb250ID0gZm9udDsKKyAgICBmbG9hdCB3aWR0aCA9IHN0cmluZ1dpZHRoKFtb
V2ViVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSByZW5kZXJlcldpdGhGb250OmZd
LCBzLCBsZW5ndGgpOwogICAgIGZyZWUocyk7CiAgICAgcmV0dXJuIHdpZHRoOwogfQpJbmRleDog
V2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViR2x5cGhCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiBXZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkdseXBoQnVmZmVyLmgKZGlmZiAt
TiBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJHbHlwaEJ1ZmZlci5oCi0tLSBXZWJL
aXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJHbHlwaEJ1ZmZlci5oCTUgSnVuIDIwMDUgMTc6
NTQ6NDAgLTAwMDAJMS4zCisrKyBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJHbHlw
aEJ1ZmZlci5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsNTIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgotCi0KLUBpbnRlcmZhY2UgV2ViR2x5
cGhCdWZmZXIgOiBOU09iamVjdAotewotICAgIE5TRm9udCAqZm9udDsKLSAgICBOU0NvbG9yICpj
b2xvcjsKLSAgICBmbG9hdCBidWZmZXJlZFN0YXJ0WCwgYnVmZmVyZWRTdGFydFk7Ci0gICAgZmxv
YXQgbGFzdFBvc2l0aW9uWCwgbGFzdFBvc2l0aW9uWTsKLSAgICBpbnQgYnVmZmVyZWRDb3VudDsK
LSAgICBpbnQgYnVmZmVyU2l6ZTsKLSAgICBDR1NpemUgKmJ1ZmZlcmVkQWR2YW5jZXM7Ci0gICAg
Q0dHbHlwaCAqYnVmZmVyZWRHbHlwaHM7Ci19Ci0tIChpZClpbml0V2l0aEZvbnQ6KE5TRm9udCAq
KWZvbnQgY29sb3I6KE5TQ29sb3IgKiljb2xvcjsKLS0gKHZvaWQpYWRkR2x5cGhzOihDR0dseXBo
ICopbmV3R2x5cGhzIGFkdmFuY2VzOihDR1NpemUgKiluZXdBZHZhbmNlcyBjb3VudDooaW50KWNv
dW50IGF0OihmbG9hdClzdGFydFggOihmbG9hdClzdGFydFk7Ci0tICh2b2lkKWRyYXdJblZpZXc6
KE5TVmlldyAqKXRhcmdldFZpZXc7Ci0tICh2b2lkKXJlc2V0OwotLSAoTlNGb250ICopZm9udDsK
LS0gKE5TQ29sb3IgKiljb2xvcjsKLUBlbmQKLQotCi0KSW5kZXg6IFdlYktpdC9XZWJDb3JlU3Vw
cG9ydC5zdWJwcm9qL1dlYkdseXBoQnVmZmVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogV2ViQ29y
ZVN1cHBvcnQuc3VicHJvai9XZWJHbHlwaEJ1ZmZlci5tCmRpZmYgLU4gV2ViS2l0L1dlYkNvcmVT
dXBwb3J0LnN1YnByb2ovV2ViR2x5cGhCdWZmZXIubQotLS0gV2ViS2l0L1dlYkNvcmVTdXBwb3J0
LnN1YnByb2ovV2ViR2x5cGhCdWZmZXIubQk1IEp1biAyMDA1IDE3OjU0OjQwIC0wMDAwCTEuNAor
KysgV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViR2x5cGhCdWZmZXIubQkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgIldlYkdseXBoQnVmZmVyLmgiCi0KLSNpbXBvcnQgIldlYk5TT2JqZWN0RXh0cmFzLmgiCi0K
LSNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KLQotQGltcGxlbWVudGF0aW9uIFdl
YkdseXBoQnVmZmVyCi0KLS0gaW5pdFdpdGhGb250OiAoTlNGb250ICopZiBjb2xvcjogKE5TQ29s
b3IgKiljCi17Ci0gICAgW3N1cGVyIGluaXRdOwotICAgIGZvbnQgPSBbZiByZXRhaW5dOwotICAg
IGNvbG9yID0gW2MgcmV0YWluXTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoTlNGb250ICop
Zm9udAotewotICAgIHJldHVybiBmb250OwotfQotCi0tIChOU0NvbG9yICopY29sb3IKLXsKLSAg
ICByZXR1cm4gY29sb3I7Ci19Ci0KLS0gKHZvaWQpcmVzZXQKLXsKLSAgICBpZiAoYnVmZmVyZWRB
ZHZhbmNlcyl7Ci0gICAgICAgIGZyZWUgKGJ1ZmZlcmVkQWR2YW5jZXMpOwotICAgICAgICBidWZm
ZXJlZEFkdmFuY2VzID0gMDsKLSAgICB9Ci0gICAgaWYgKGJ1ZmZlcmVkR2x5cGhzKXsKLSAgICAg
ICAgZnJlZSAoYnVmZmVyZWRHbHlwaHMpOwotICAgICAgICBidWZmZXJlZEdseXBocyA9IDA7Ci0g
ICAgfQotICAgIGJ1ZmZlclNpemUgPSAwOwotICAgIGJ1ZmZlcmVkQ291bnQgPSAwOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbZm9udCByZWxlYXNlXTsKLSAgICBbY29sb3IgcmVsZWFz
ZV07Ci0gICAgW3NlbGYgcmVzZXRdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9p
ZClmaW5hbGl6ZQotewotICAgIFtzZWxmIHJlc2V0XTsKLSAgICBbc3VwZXIgZmluYWxpemVdOwot
fQotCi0tICh2b2lkKWRyYXdJblZpZXc6IChOU1ZpZXcgKil0YXJnZXRWaWV3Ci17Ci0gICAgQ0dD
b250ZXh0UmVmIGNnQ29udGV4dDsKLSAgICAKLSAgICBbdGFyZ2V0VmlldyBsb2NrRm9jdXNdOwot
ICAgIGNnQ29udGV4dCA9IChDR0NvbnRleHRSZWYpW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gZ3JhcGhpY3NQb3J0XTsKLSAgICBbY29sb3Igc2V0XTsKLSAgICBbZm9udCBzZXRd
OwotICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbiAoY2dDb250ZXh0LCBidWZmZXJlZFN0YXJ0
WCwgYnVmZmVyZWRTdGFydFkpOwotICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMg
KGNnQ29udGV4dCwgYnVmZmVyZWRHbHlwaHMsIGJ1ZmZlcmVkQWR2YW5jZXMsIGJ1ZmZlcmVkQ291
bnQpOwotICAgIFt0YXJnZXRWaWV3IHVubG9ja0ZvY3VzXTsKLX0KLQotCi0tICh2b2lkKWFkZEds
eXBoczogKENHR2x5cGggKiluZXdHbHlwaHMgYWR2YW5jZXM6IChDR1NpemUgKiluZXdBZHZhbmNl
cyBjb3VudDogKGludCljb3VudCBhdDogKGZsb2F0KXN0YXJ0WCA6IChmbG9hdClzdGFydFkKLXsK
LSAgICBpbnQgc2l6ZU5lZWRlZCA9IGJ1ZmZlcmVkQ291bnQgKyBjb3VudDsKLSAgICBCT09MIGZp
cnN0QnVmZmVyID0gTk87Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyB0aGUgZmly
c3QgYnVmZmVyaW5nIHBhc3MuCi0gICAgaWYgKCFidWZmZXJlZEFkdmFuY2VzKXsKLSAgICAgICAg
bGFzdFBvc2l0aW9uWCA9IGJ1ZmZlcmVkU3RhcnRYID0gc3RhcnRYOwotICAgICAgICBsYXN0UG9z
aXRpb25ZID0gYnVmZmVyZWRTdGFydFkgPSBzdGFydFk7Ci0gICAgICAgIGZpcnN0QnVmZmVyID0g
WUVTOwotICAgIH0KLSAgICAKLSAgICBpZiAoc2l6ZU5lZWRlZCA+IGJ1ZmZlclNpemUpewotICAg
ICAgICBpZiAoYnVmZmVyU2l6ZSA9PSAwKQotICAgICAgICAgICAgYnVmZmVyU2l6ZSA9IDUxMjsJ
Ly8gNTEyKjI9MTAyNCBpcyB0aGUgbWluIHNpemUsIHNlZSBiZWxvdy4KLSAgICAgICAgaW50IHNp
emVUb0FsbG9jYXRlID0gTUFYIChidWZmZXJTaXplKjIsIHNpemVOZWVkZWQpOwotICAgICAgICBp
ZiAoYnVmZmVyZWRBZHZhbmNlcykKLSAgICAgICAgICAgIGJ1ZmZlcmVkQWR2YW5jZXMgPSAoQ0dT
aXplICopcmVhbGxvYyhidWZmZXJlZEFkdmFuY2VzLCBzaXplVG9BbGxvY2F0ZSAqIHNpemVvZihD
R1NpemUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYnVmZmVyZWRBZHZhbmNlcyA9IChD
R1NpemUgKiltYWxsb2MgKHNpemVUb0FsbG9jYXRlICogc2l6ZW9mKENHU2l6ZSkpOwotICAgICAg
ICBpZiAoYnVmZmVyZWRHbHlwaHMpCi0gICAgICAgICAgICBidWZmZXJlZEdseXBocyA9IChDR0ds
eXBoICopcmVhbGxvYyhidWZmZXJlZEdseXBocywgc2l6ZVRvQWxsb2NhdGUgKiBzaXplb2YoQ0dH
bHlwaCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWZmZXJlZEdseXBocyA9IChDR0ds
eXBoICopbWFsbG9jIChzaXplVG9BbGxvY2F0ZSAqIHNpemVvZihDR0dseXBoKSk7Ci0gICAgICAg
IGJ1ZmZlclNpemUgPSBzaXplVG9BbGxvY2F0ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGZpcnN0
QnVmZmVyID09IE5PKXsKLSAgICAgICAgYnVmZmVyZWRBZHZhbmNlc1tidWZmZXJlZENvdW50LTFd
LndpZHRoID0gc3RhcnRYIC0gbGFzdFBvc2l0aW9uWDsKLSAgICAgICAgYnVmZmVyZWRBZHZhbmNl
c1tidWZmZXJlZENvdW50LTFdLmhlaWdodCA9IHN0YXJ0WSAtIGxhc3RQb3NpdGlvblk7Ci0gICAg
fQotICAgIAotICAgIGludCBpOwotICAgIGxhc3RQb3NpdGlvblggPSBzdGFydFg7Ci0gICAgbGFz
dFBvc2l0aW9uWSA9IHN0YXJ0WTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQtMTsgaSsrKXsK
LSAgICAgICAgbGFzdFBvc2l0aW9uWCArPSBuZXdBZHZhbmNlc1tpXS53aWR0aDsKLSAgICAgICAg
bGFzdFBvc2l0aW9uWSArPSBuZXdBZHZhbmNlc1tpXS5oZWlnaHQ7Ci0gICAgfQotCi0gICAgbWVt
Y3B5ICgmYnVmZmVyZWRBZHZhbmNlc1tidWZmZXJlZENvdW50XSwgbmV3QWR2YW5jZXMsIGNvdW50
ICogc2l6ZW9mKENHU2l6ZSkpOwotICAgIG1lbWNweSAoJmJ1ZmZlcmVkR2x5cGhzW2J1ZmZlcmVk
Q291bnRdLCBuZXdHbHlwaHMsIGNvdW50ICogc2l6ZW9mKENHR2x5cGgpKTsKLSAgICBidWZmZXJl
ZENvdW50ID0gYnVmZmVyZWRDb3VudCArIGNvdW50OwotfQotQGVuZAotCkluZGV4OiBXZWJLaXQv
V2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0UmVuZGVyZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViVGV4dFJlbmRl
cmVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzgKZGlmZiAtcCAtdSAtcjEuMzggV2ViS2l0
L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViVGV4dFJlbmRlcmVyLmgKLS0tIFdlYktpdC9XZWJD
b3JlU3VwcG9ydC5zdWJwcm9qL1dlYlRleHRSZW5kZXJlci5oCTEyIEp1bCAyMDA1IDE3OjQ0OjEw
IC0wMDAwCTEuMzgKKysrIFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYlRleHRSZW5k
ZXJlci5oCTEwIFNlcCAyMDA1IDE2OjMzOjEyIC0wMDAwCkBAIC0yNywxNyArMjcsMTAgQEAKICAq
LwogCiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUZXh0UmVuZGVyZXIuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgV2lk
dGhNYXAgV2lkdGhNYXA7Ci10eXBlZGVmIHN0cnVjdCBXaWR0aEVudHJ5IFdpZHRoRW50cnk7CiB0
eXBlZGVmIHN0cnVjdCBHbHlwaE1hcCBHbHlwaE1hcDsKLXR5cGVkZWYgc3RydWN0IEdseXBoRW50
cnkgR2x5cGhFbnRyeTsKLXR5cGVkZWYgc3RydWN0IFVuaWNvZGVHbHlwaE1hcCBVbmljb2RlR2x5
cGhNYXA7Ci10eXBlZGVmIHN0cnVjdCBTdWJzdGl0dXRlRm9udFdpZHRoTWFwIFN1YnN0aXR1dGVG
b250V2lkdGhNYXA7Ci10eXBlZGVmIHN0cnVjdCBDaGFyYWN0ZXJXaWR0aEl0ZXJhdG9yIENoYXJh
Y3RlcldpZHRoSXRlcmF0b3I7Ci0KLS8vLyBTaG91bGQgYmUgbW9yZSB0aGFuIGVub3VnaCBmb3Ig
bm9ybWFsIHVzYWdlLgotI2RlZmluZSBOVU1fU1VCU1RJVFVURV9GT05UX01BUFMJMTAKIAogQGlu
dGVyZmFjZSBXZWJUZXh0UmVuZGVyZXIgOiBOU09iamVjdCA8V2ViQ29yZVRleHRSZW5kZXJlcj4K
IHsKQEAgLTQ5LDQwICs0MiwyOSBAQCB0eXBlZGVmIHN0cnVjdCBDaGFyYWN0ZXJXaWR0aEl0ZXJh
dG9yIENoCiAgICAgdm9pZCAqc3R5bGVHcm91cDsKICAgICAKIEBwdWJsaWMKLSAgICBOU0ZvbnQg
KmZvbnQ7Ci0gICAgR2x5cGhNYXAgKmNoYXJhY3RlclRvR2x5cGhNYXA7CQkJLy8gVXNlZCBmb3Ig
MTZiaXQgY2xlYW4gdW5pY29kZSBjaGFyYWN0ZXJzLgotICAgIFVuaWNvZGVHbHlwaE1hcCAqdW5p
Y29kZUNoYXJhY3RlclRvR2x5cGhNYXA7IAkvLyBVc2VkIGZvciBzdXJyb2dhdGVzLgorICAgIFdl
YkNvcmVGb250IGZvbnQ7CisgICAgR2x5cGhNYXAgKmNoYXJhY3RlclRvR2x5cGhNYXA7CiAgICAg
V2lkdGhNYXAgKmdseXBoVG9XaWR0aE1hcDsKIAogICAgIEJPT0wgdHJlYXRBc0ZpeGVkUGl0Y2g7
CiAgICAgQVRTR2x5cGhSZWYgc3BhY2VHbHlwaDsKICAgICBmbG9hdCBzcGFjZVdpZHRoOwogICAg
IGZsb2F0IGFkanVzdGVkU3BhY2VXaWR0aDsKLQotICAgIGludCBudW1TdWJzdGl0dXRlRm9udFdp
ZHRoTWFwczsKLSAgICBpbnQgbWF4U3Vic3RpdHV0ZUZvbnRXaWR0aE1hcHM7Ci0gICAgU3Vic3Rp
dHV0ZUZvbnRXaWR0aE1hcCAqc3Vic3RpdHV0ZUZvbnRXaWR0aE1hcHM7Ci0gICAgQk9PTCB1c2lu
Z1ByaW50ZXJGb250OwotICAgIEJPT0wgaXNTbWFsbENhcHNSZW5kZXJlcjsKKyAgICBmbG9hdCBz
eW50aGV0aWNCb2xkT2Zmc2V0OwogICAgIAogQHByaXZhdGUKICAgICBXZWJUZXh0UmVuZGVyZXIg
KnNtYWxsQ2Fwc1JlbmRlcmVyOwotICAgIE5TRm9udCAqc21hbGxDYXBzRm9udDsKLSAgICBBVFNV
U3R5bGUgX0FUU1VTc3R5bGU7CisgICAgQVRTVVN0eWxlIF9BVFNVU3R5bGU7CiAgICAgQk9PTCBB
VFNVU3R5bGVJbml0aWFsaXplZDsKICAgICBCT09MIEFUU1VNaXJyb3JzOwogfQogCi0rIChCT09M
KXNob3VsZEJ1ZmZlclRleHREcmF3aW5nOwotCi0tIChpZClpbml0V2l0aEZvbnQ6KE5TRm9udCAq
KWZvbnQgdXNpbmdQcmludGVyRm9udDooQk9PTCl1c2luZ1ByaW50ZXJGb250OworLSAoaWQpaW5p
dFdpdGhGb250OihXZWJDb3JlRm9udClmb250OwogCiBAZW5kCiAKLQogQGludGVyZmFjZSBXZWJU
ZXh0UmVuZGVyZXIgKFdlYlByaXZhdGUpCiAKLSsgKHZvaWQpX3NldEFsd2F5c1VzZUFUU1U6KEJP
T0wpZjsKKysgKHZvaWQpc2V0QWx3YXlzVXNlQVRTVTooQk9PTClmOwogCiBAZW5kCi0KSW5kZXg6
IFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYlRleHRSZW5kZXJlci5tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJU
ZXh0UmVuZGVyZXIubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xODkKZGlmZiAtcCAtdSAtcjEu
MTg5IFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYlRleHRSZW5kZXJlci5tCi0tLSBX
ZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0UmVuZGVyZXIubQkyNSBBdWcgMjAw
NSAyMzo0NjozMCAtMDAwMAkxLjE4OQorKysgV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ov
V2ViVGV4dFJlbmRlcmVyLm0JMTAgU2VwIDIwMDUgMTY6MzM6MTMgLTAwMDAKQEAgLTMxLDcgKzMx
LDYgQEAKICNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5o
PgogI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KIAotI2ltcG9ydCA8V2ViS2l0L1dlYkdseXBoQnVm
ZmVyLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViR3JhcGhpY3NCcmlkZ2UuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJLaXRMb2dnaW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViTlNPYmplY3RFeHRyYXMu
aD4KQEAgLTQ2LDkgKzQ1LDE0IEBACiAKIC8vIEZJWE1FOiBGQVRBTF9BTFdBWVMgc2VlbXMgbGlr
ZSBhIGJhZCBpZGVhOyBsZXRzIHN0b3AgdXNpbmcgaXQuCiAKLS8vIFNQSSBmcm9tIG90aGVyIGZy
YW1ld29ya3MuCisjZGVmaW5lIFNNQUxMQ0FQU19GT05UU0laRV9NVUxUSVBMSUVSIDAuN2YKKwor
Ly8gU2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggZm9yIG5vcm1hbCB1c2FnZS4KKyNkZWZpbmUg
TlVNX1NVQlNUSVRVVEVfRk9OVF9NQVBTIDEwCisKKy8vIEFjY29yZGluZyB0byBodHRwOi8vd3d3
LnVuaWNvZGUub3JnL1B1YmxpYy9VTklEQVRBL1VDRC5odG1sI0Nhbm9uaWNhbF9Db21iaW5pbmdf
Q2xhc3NfVmFsdWVzCisjZGVmaW5lIEhJUkFHQU5BX0tBVEFLQU5BX1ZPSUNJTkdfTUFSS1MgOAog
Ci0vLyBNYWNyb3MKICNkZWZpbmUgU1BBQ0UgMHgwMDIwCiAjZGVmaW5lIE5PX0JSRUFLX1NQQUNF
IDB4MDBBMAogI2RlZmluZSBaRVJPX1dJRFRIX1NQQUNFIDB4MjAwQgpAQCAtNjksNTkgKzczLDM3
IEBACiAKICNkZWZpbmUgVU5JTklUSUFMSVpFRF9HTFlQSF9XSURUSCA2NTUzNQogCi0jZGVmaW5l
IEFUU0ZvbnRSZWZGcm9tTlNGb250KGZvbnQpIChGTUdldEFUU0ZvbnRSZWZGcm9tRm9udCgoRk1G
b250KVdLR2V0TlNGb250QVRTVUZvbnRJZChmb250KSkpCi0KLSNkZWZpbmUgU01BTExDQVBTX0ZP
TlRTSVpFX01VTFRJUExJRVIgMC43RgotI2RlZmluZSBJTlZBTElEX1dJRFRIIC0oX19GTFRfTUFY
X18pCisjZGVmaW5lIElOVkFMSURfV0lEVEggKC1GTFRfTUFYKQogCiAjaWYgIWRlZmluZWQoU2Nh
bGVFbVRvVW5pdHMpCi0jZGVmaW5lIENPTlRFWFRfRFBJCSg3Mi4wKQorI2RlZmluZSBDT05URVhU
X0RQSSAgICAoNzIuMCkKIAogI2RlZmluZSBTY2FsZUVtVG9Vbml0cyhYLCBVX1BFUl9FTSkJKFgg
KiAoKDEuMCAqIENPTlRFWFRfRFBJKSAvIChDT05URVhUX0RQSSAqIFVfUEVSX0VNKSkpCiAjZW5k
aWYKIAotLy8gRGF0YXR5cGVzCiB0eXBlZGVmIGZsb2F0IFdlYkdseXBoV2lkdGg7CiB0eXBlZGVm
IFVJbnQzMiBVbmljb2RlQ2hhcjsKIAotc3RydWN0IFdpZHRoRW50cnkgewotICAgIFdlYkdseXBo
V2lkdGggd2lkdGg7Ci19OwotCiBzdHJ1Y3QgV2lkdGhNYXAgewogICAgIEFUU0dseXBoUmVmIHN0
YXJ0UmFuZ2U7CiAgICAgQVRTR2x5cGhSZWYgZW5kUmFuZ2U7CiAgICAgV2lkdGhNYXAgKm5leHQ7
Ci0gICAgV2lkdGhFbnRyeSAqd2lkdGhzOworICAgIFdlYkdseXBoV2lkdGggKndpZHRoczsKIH07
CiAKLXN0cnVjdCBHbHlwaEVudHJ5Ci17Cit0eXBlZGVmIHN0cnVjdCB7CiAgICAgQVRTR2x5cGhS
ZWYgZ2x5cGg7Ci0gICAgTlNGb250ICpmb250OwotfTsKKyAgICBXZWJUZXh0UmVuZGVyZXIgKnN1
YnN0aXR1dGVSZW5kZXJlcjsKK30gR2x5cGhFbnRyeTsKIAogc3RydWN0IEdseXBoTWFwIHsKLSAg
ICBVbmlDaGFyIHN0YXJ0UmFuZ2U7Ci0gICAgVW5pQ2hhciBlbmRSYW5nZTsKLSAgICBHbHlwaE1h
cCAqbmV4dDsKLSAgICBHbHlwaEVudHJ5ICpnbHlwaHM7Ci19OwotCi1zdHJ1Y3QgVW5pY29kZUds
eXBoTWFwIHsKICAgICBVbmljb2RlQ2hhciBzdGFydFJhbmdlOwogICAgIFVuaWNvZGVDaGFyIGVu
ZFJhbmdlOwotICAgIFVuaWNvZGVHbHlwaE1hcCAqbmV4dDsKKyAgICBHbHlwaE1hcCAqbmV4dDsK
ICAgICBHbHlwaEVudHJ5ICpnbHlwaHM7CiB9OwogCi1zdHJ1Y3QgU3Vic3RpdHV0ZUZvbnRXaWR0
aE1hcCB7Ci0gICAgTlNGb250ICpmb250OwotICAgIFdpZHRoTWFwICptYXA7Ci19OwotCi1zdHJ1
Y3QgQ2hhcmFjdGVyV2lkdGhJdGVyYXRvcgotewordHlwZWRlZiBzdHJ1Y3QgewogICAgIFdlYlRl
eHRSZW5kZXJlciAqcmVuZGVyZXI7CiAgICAgY29uc3QgV2ViQ29yZVRleHRSdW4gKnJ1bjsKICAg
ICBjb25zdCBXZWJDb3JlVGV4dFN0eWxlICpzdHlsZTsKQEAgLTEzMCwyMiArMTEyLDIxIEBAIHN0
cnVjdCBDaGFyYWN0ZXJXaWR0aEl0ZXJhdG9yCiAgICAgZmxvYXQgd2lkdGhUb1N0YXJ0OwogICAg
IGZsb2F0IHBhZGRpbmc7CiAgICAgZmxvYXQgcGFkUGVyU3BhY2U7Ci19OworfSBDaGFyYWN0ZXJX
aWR0aEl0ZXJhdG9yOwogCi0vLyBJbnRlcm5hbCBBUEkKIEBpbnRlcmZhY2UgV2ViVGV4dFJlbmRl
cmVyIChXZWJJbnRlcm5hbCkKIAotLSAoTlNGb250ICopX3N1YnN0aXR1dGVGb250Rm9yQ2hhcmFj
dGVyczogKGNvbnN0IHVuaWNoYXIgKiljaGFyYWN0ZXJzIGxlbmd0aDogKGludCludW1DaGFyYWN0
ZXJzIGZhbWlsaWVzOiAoTlNTdHJpbmcgKiopZmFtaWxpZXM7CistIChXZWJUZXh0UmVuZGVyZXIg
KilzdWJzdGl0dXRlUmVuZGVyZXJGb3JDaGFyYWN0ZXJzOihjb25zdCB1bmljaGFyICopY2hhcmFj
dGVycyBsZW5ndGg6KGludCludW1DaGFyYWN0ZXJzIGZhbWlsaWVzOihOU1N0cmluZyAqKilmYW1p
bGllczsKKy0gKFdlYlRleHRSZW5kZXJlciAqKXJlbmRlcmVyRm9yQWx0ZXJuYXRlRm9udDooV2Vi
Q29yZUZvbnQpYWx0ZXJuYXRlTlNGb250OwogCi0tIChXaWR0aE1hcCAqKV9leHRlbmRHbHlwaFRv
V2lkdGhNYXBUb0luY2x1ZGU6KEFUU0dseXBoUmVmKWdseXBoSUQgZm9udDooTlNGb250ICopZm9u
dDsKLS0gKEFUU0dseXBoUmVmKV9leHRlbmRDaGFyYWN0ZXJUb0dseXBoTWFwVG9JbmNsdWRlOihV
bmlDaGFyKSBjOwotLSAoQVRTR2x5cGhSZWYpX2V4dGVuZFVuaWNvZGVDaGFyYWN0ZXJUb0dseXBo
TWFwVG9JbmNsdWRlOiAoVW5pY29kZUNoYXIpYzsKLS0gKHZvaWQpX3VwZGF0ZUdseXBoRW50cnlG
b3JDaGFyYWN0ZXI6IChVbmlDaGFyKWMgZ2x5cGhJRDogKEFUU0dseXBoUmVmKWdseXBoSUQgZm9u
dDogKE5TRm9udCAqKXN1YnN0aXR1dGVGb250OworLSAoV2lkdGhNYXAgKilfZXh0ZW5kR2x5cGhU
b1dpZHRoTWFwVG9JbmNsdWRlOihBVFNHbHlwaFJlZilnbHlwaElEOworLSAoQVRTR2x5cGhSZWYp
ZXh0ZW5kQ2hhcmFjdGVyVG9HbHlwaE1hcFRvSW5jbHVkZTooVW5pY29kZUNoYXIpYzsKKy0gKHZv
aWQpdXBkYXRlR2x5cGhFbnRyeUZvckNoYXJhY3RlcjooVW5pY29kZUNoYXIpYyBnbHlwaElEOihB
VFNHbHlwaFJlZilnbHlwaElEIHN1YnN0aXR1dGVSZW5kZXJlcjooV2ViVGV4dFJlbmRlcmVyICop
c3Vic3RpdHV0ZVJlbmRlcmVyOwogCi0tIChmbG9hdClfZmxvYXRXaWR0aEZvclJ1bjooY29uc3Qg
V2ViQ29yZVRleHRSdW4gKilydW4gc3R5bGU6KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilzdHls
ZSB3aWR0aHM6KGZsb2F0ICopd2lkdGhCdWZmZXIgZm9udHM6KE5TRm9udCAqKilmb250QnVmZmVy
IGdseXBoczooQ0dHbHlwaCAqKWdseXBoQnVmZmVyIHN0YXJ0UG9zaXRpb246KGZsb2F0ICopc3Rh
cnRQb3NpdGlvbiBudW1HbHlwaHM6KGludCAqKV9udW1HbHlwaHM7CistIChmbG9hdClmbG9hdFdp
ZHRoRm9yUnVuOihjb25zdCBXZWJDb3JlVGV4dFJ1biAqKXJ1biBzdHlsZTooY29uc3QgV2ViQ29y
ZVRleHRTdHlsZSAqKXN0eWxlIHdpZHRoczooZmxvYXQgKil3aWR0aEJ1ZmZlciBzdWJzdGl0dXRl
UmVuZGVyZXJzOihXZWJUZXh0UmVuZGVyZXIgKiopcmVuZGVyZXJCdWZmZXIgZ2x5cGhzOihDR0ds
eXBoICopZ2x5cGhCdWZmZXIgc3RhcnRQb3NpdGlvbjooZmxvYXQgKilzdGFydFBvc2l0aW9uIG51
bUdseXBoczooaW50ICopX251bUdseXBoczsKIAogLy8gTWVhc3VyaW5nIHJ1bnMuCi0tIChmbG9h
dClfQ0dfZmxvYXRXaWR0aEZvclJ1bjooY29uc3QgV2ViQ29yZVRleHRSdW4gKilydW4gc3R5bGU6
KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilzdHlsZSB3aWR0aHM6IChmbG9hdCAqKXdpZHRoQnVm
ZmVyIGZvbnRzOiAoTlNGb250ICoqKWZvbnRCdWZmZXIgZ2x5cGhzOiAoQ0dHbHlwaCAqKWdseXBo
QnVmZmVyIHN0YXJ0UG9zaXRpb246KGZsb2F0ICopc3RhcnRQb3NpdGlvbiBudW1HbHlwaHM6IChp
bnQgKilfbnVtR2x5cGhzOworLSAoZmxvYXQpX0NHX2Zsb2F0V2lkdGhGb3JSdW46KGNvbnN0IFdl
YkNvcmVUZXh0UnVuICopcnVuIHN0eWxlOihjb25zdCBXZWJDb3JlVGV4dFN0eWxlICopc3R5bGUg
d2lkdGhzOiAoZmxvYXQgKil3aWR0aEJ1ZmZlciBzdWJzdGl0dXRlUmVuZGVyZXJzOihXZWJUZXh0
UmVuZGVyZXIgKiopcmVuZGVyZXJCdWZmZXIgZ2x5cGhzOiAoQ0dHbHlwaCAqKWdseXBoQnVmZmVy
IHN0YXJ0UG9zaXRpb246KGZsb2F0ICopc3RhcnRQb3NpdGlvbiBudW1HbHlwaHM6IChpbnQgKilf
bnVtR2x5cGhzOwogLSAoZmxvYXQpX0FUU1VfZmxvYXRXaWR0aEZvclJ1bjooY29uc3QgV2ViQ29y
ZVRleHRSdW4gKilydW4gc3R5bGU6KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilzdHlsZTsKIAog
Ly8gRHJhd2luZyBydW5zLgpAQCAtMTYwLDE3ICsxNDEsMTIgQEAgc3RydWN0IENoYXJhY3Rlcldp
ZHRoSXRlcmF0b3IKIC0gKHZvaWQpX0NHX2RyYXdIaWdobGlnaHRGb3JSdW46KGNvbnN0IFdlYkNv
cmVUZXh0UnVuICopcnVuIHN0eWxlOihjb25zdCBXZWJDb3JlVGV4dFN0eWxlICopc3R5bGUgZ2Vv
bWV0cnk6KGNvbnN0IFdlYkNvcmVUZXh0R2VvbWV0cnkgKilnZW9tZXRyeTsKIC0gKHZvaWQpX0FU
U1VfZHJhd0hpZ2hsaWdodEZvclJ1bjooY29uc3QgV2ViQ29yZVRleHRSdW4gKilydW4gc3R5bGU6
KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilzdHlsZSBnZW9tZXRyeTooY29uc3QgV2ViQ29yZVRl
eHRHZW9tZXRyeSAqKWdlb21ldHJ5OwogCi0tIChCT09MKV9zZXR1cEZvbnQ7CistIChCT09MKXNl
dFVwRm9udDsKIAotLy8gU21hbGwgY2FwcwotLSAodm9pZClfc2V0SXNTbWFsbENhcHNSZW5kZXJl
cjooQk9PTClmbGFnOwotLSAoQk9PTClfaXNTbWFsbENhcHNSZW5kZXJlcjsKLS0gKFdlYlRleHRS
ZW5kZXJlciAqKV9zbWFsbENhcHNSZW5kZXJlcjsKLS0gKE5TRm9udCAqKV9zbWFsbENhcHNGb250
OworLSAoV2ViVGV4dFJlbmRlcmVyICopc21hbGxDYXBzUmVuZGVyZXI7CiAKIEBlbmQKIAotCiAv
LyBDaGFyYWN0ZXIgcHJvcGVydHkgZnVuY3Rpb25zLgogCiBzdGF0aWMgaW5saW5lIEJPT0wgaXNT
cGFjZShVbmlDaGFyIGMpCkBAIC0xOTcsMTggKzE3MywxMCBAQCBzdGF0aWMgaW5saW5lIEJPT0wg
aXNSb3VuZGluZ0hhY2tDaGFyYWN0CiAvLyBNYXAgdXRpbGl0eSBmdW5jdGlvbnMKIHN0YXRpYyB2
b2lkIGZyZWVXaWR0aE1hcChXaWR0aE1hcCAqbWFwKTsKIHN0YXRpYyB2b2lkIGZyZWVHbHlwaE1h
cChHbHlwaE1hcCAqbWFwKTsKLXN0YXRpYyB2b2lkIGZyZWVVbmljb2RlR2x5cGhNYXAoVW5pY29k
ZUdseXBoTWFwICptYXApOwotc3RhdGljIGlubGluZSBBVFNHbHlwaFJlZiBnbHlwaEZvclVuaWNv
ZGVDaGFyYWN0ZXIgKFVuaWNvZGVHbHlwaE1hcCAqbWFwLCBVbmljb2RlQ2hhciBjLCBOU0ZvbnQg
Kipmb250KTsKLXN0YXRpYyBpbmxpbmUgU3Vic3RpdHV0ZUZvbnRXaWR0aE1hcCAqbWFwRm9yU3Vi
c3RpdHV0ZUZvbnQoV2ViVGV4dFJlbmRlcmVyICpyZW5kZXJlciwgTlNGb250ICpmb250KTsKLXN0
YXRpYyBpbmxpbmUgQVRTR2x5cGhSZWYgZ2x5cGhGb3JDaGFyYWN0ZXIgKEdseXBoTWFwICptYXAs
IFVuaUNoYXIgYywgTlNGb250ICoqZm9udCk7Ci1zdGF0aWMgaW5saW5lIFN1YnN0aXR1dGVGb250
V2lkdGhNYXAgKm1hcEZvclN1YnN0aXR1dGVGb250KFdlYlRleHRSZW5kZXJlciAqcmVuZGVyZXIs
IE5TRm9udCAqZm9udCk7Ci1zdGF0aWMgaW5saW5lIFdlYkdseXBoV2lkdGggd2lkdGhGcm9tTWFw
IChXZWJUZXh0UmVuZGVyZXIgKnJlbmRlcmVyLCBXaWR0aE1hcCAqbWFwLCBBVFNHbHlwaFJlZiBn
bHlwaCwgTlNGb250ICpmb250KTsKLXN0YXRpYyBpbmxpbmUgV2ViR2x5cGhXaWR0aCB3aWR0aEZv
ckdseXBoIChXZWJUZXh0UmVuZGVyZXIgKnJlbmRlcmVyLCBBVFNHbHlwaFJlZiBnbHlwaCwgTlNG
b250ICpmb250KTsKIAotc3RhdGljIFdlYkdseXBoV2lkdGggZ2V0VW5jYWNoZWRXaWR0aChXZWJU
ZXh0UmVuZGVyZXIgKnJlbmRlcmVyLCBXaWR0aE1hcCAqbWFwLCBBVFNHbHlwaFJlZiBnbHlwaCwg
TlNGb250ICpmb250KQorc3RhdGljIFdlYkdseXBoV2lkdGggZ2V0VW5jYWNoZWRXaWR0aChXZWJU
ZXh0UmVuZGVyZXIgKnJlbmRlcmVyLCBXaWR0aE1hcCAqbWFwLCBBVFNHbHlwaFJlZiBnbHlwaCkK
IHsKLSAgICBpZiAoZm9udCA9PSBOVUxMKQotICAgICAgICBmb250ID0gcmVuZGVyZXItPmZvbnQ7
CisgICAgTlNGb250ICpmb250ID0gcmVuZGVyZXItPmZvbnQuZm9udDsKIAogICAgIGZsb2F0IHBv
aW50U2l6ZSA9IFtmb250IHBvaW50U2l6ZV07CiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENH
QWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHBvaW50U2l6ZSwgcG9pbnRTaXplKTsKQEAgLTIyMSw1
OSArMTg5LDQ1IEBAIHN0YXRpYyBXZWJHbHlwaFdpZHRoIGdldFVuY2FjaGVkV2lkdGgoV2UKICAg
ICByZXR1cm4gYWR2YW5jZS53aWR0aDsKIH0KIAotc3RhdGljIGlubGluZSBXZWJHbHlwaFdpZHRo
IHdpZHRoRnJvbU1hcCAoV2ViVGV4dFJlbmRlcmVyICpyZW5kZXJlciwgV2lkdGhNYXAgKm1hcCwg
QVRTR2x5cGhSZWYgZ2x5cGgsIE5TRm9udCAqZm9udCkKK3N0YXRpYyBpbmxpbmUgV2ViR2x5cGhX
aWR0aCB3aWR0aEZyb21NYXAoV2ViVGV4dFJlbmRlcmVyICpyZW5kZXJlciwgV2lkdGhNYXAgKm1h
cCwgQVRTR2x5cGhSZWYgZ2x5cGgpCiB7Ci0gICAgV2ViR2x5cGhXaWR0aCB3aWR0aCA9IFVOSU5J
VElBTElaRURfR0xZUEhfV0lEVEg7Ci0gICAgCi0gICAgd2hpbGUgKDEpewotICAgICAgICBpZiAo
bWFwID09IDApCi0gICAgICAgICAgICBtYXAgPSBbcmVuZGVyZXIgX2V4dGVuZEdseXBoVG9XaWR0
aE1hcFRvSW5jbHVkZTogZ2x5cGggZm9udDpmb250XTsKLQotICAgICAgICBpZiAoZ2x5cGggPj0g
bWFwLT5zdGFydFJhbmdlICYmIGdseXBoIDw9IG1hcC0+ZW5kUmFuZ2UpewotICAgICAgICAgICAg
d2lkdGggPSBtYXAtPndpZHRoc1tnbHlwaCAtIG1hcC0+c3RhcnRSYW5nZV0ud2lkdGg7Ci0gICAg
ICAgICAgICBpZiAod2lkdGggPT0gVU5JTklUSUFMSVpFRF9HTFlQSF9XSURUSCl7Ci0gICAgICAg
ICAgICAgICAgd2lkdGggPSBnZXRVbmNhY2hlZFdpZHRoIChyZW5kZXJlciwgbWFwLCBnbHlwaCwg
Zm9udCk7Ci0gICAgICAgICAgICAgICAgbWFwLT53aWR0aHNbZ2x5cGggLSBtYXAtPnN0YXJ0UmFu
Z2VdLndpZHRoID0gd2lkdGg7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKG1hcCA9PSBO
VUxMKQorICAgICAgICAgICAgbWFwID0gW3JlbmRlcmVyIF9leHRlbmRHbHlwaFRvV2lkdGhNYXBU
b0luY2x1ZGU6Z2x5cGhdOworCisgICAgICAgIGlmIChnbHlwaCA+PSBtYXAtPnN0YXJ0UmFuZ2Ug
JiYgZ2x5cGggPD0gbWFwLT5lbmRSYW5nZSkgeworICAgICAgICAgICAgV2ViR2x5cGhXaWR0aCB3
aWR0aCA9IG1hcC0+d2lkdGhzW2dseXBoIC0gbWFwLT5zdGFydFJhbmdlXTsKKyAgICAgICAgICAg
IGlmICh3aWR0aCA9PSBVTklOSVRJQUxJWkVEX0dMWVBIX1dJRFRIKSB7CisgICAgICAgICAgICAg
ICAgd2lkdGggPSBnZXRVbmNhY2hlZFdpZHRoKHJlbmRlcmVyLCBtYXAsIGdseXBoKTsKKyAgICAg
ICAgICAgICAgICBtYXAtPndpZHRoc1tnbHlwaCAtIG1hcC0+c3RhcnRSYW5nZV0gPSB3aWR0aDsK
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB3aWR0aDsKICAgICAgICAgfQotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1hcCA9IG1hcC0+bmV4dDsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gd2lkdGg7CisKKyAg
ICAgICAgbWFwID0gbWFwLT5uZXh0OwogICAgIH0KIH0gICAgCiAKLXN0YXRpYyBpbmxpbmUgV2Vi
R2x5cGhXaWR0aCB3aWR0aEZvckdseXBoIChXZWJUZXh0UmVuZGVyZXIgKnJlbmRlcmVyLCBBVFNH
bHlwaFJlZiBnbHlwaCwgTlNGb250ICpmb250KQorc3RhdGljIGlubGluZSBXZWJHbHlwaFdpZHRo
IHdpZHRoRm9yR2x5cGgoV2ViVGV4dFJlbmRlcmVyICpyZW5kZXJlciwgQVRTR2x5cGhSZWYgZ2x5
cGgpCiB7Ci0gICAgV2lkdGhNYXAgKm1hcDsKLQotICAgIGlmIChmb250ICYmIGZvbnQgIT0gcmVu
ZGVyZXItPmZvbnQpCi0gICAgICAgIG1hcCA9IG1hcEZvclN1YnN0aXR1dGVGb250KHJlbmRlcmVy
LCBmb250KS0+bWFwOwotICAgIGVsc2UKLSAgICAgICAgbWFwID0gcmVuZGVyZXItPmdseXBoVG9X
aWR0aE1hcDsKLQotICAgIHJldHVybiB3aWR0aEZyb21NYXAgKHJlbmRlcmVyLCBtYXAsIGdseXBo
LCBmb250KTsKKyAgICByZXR1cm4gd2lkdGhGcm9tTWFwKHJlbmRlcmVyLCByZW5kZXJlci0+Z2x5
cGhUb1dpZHRoTWFwLCBnbHlwaCkgKyByZW5kZXJlci0+c3ludGhldGljQm9sZE9mZnNldDsKIH0K
IAogLy8gSXRlcmF0b3IgZnVuY3Rpb25zCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplQ2hhcmFjdGVy
V2lkdGhJdGVyYXRvciAoQ2hhcmFjdGVyV2lkdGhJdGVyYXRvciAqaXRlcmF0b3IsIFdlYlRleHRS
ZW5kZXJlciAqcmVuZGVyZXIsIGNvbnN0IFdlYkNvcmVUZXh0UnVuICpydW4gLCBjb25zdCBXZWJD
b3JlVGV4dFN0eWxlICpzdHlsZSk7Ci1zdGF0aWMgZmxvYXQgd2lkdGhGb3JOZXh0Q2hhcmFjdGVy
IChDaGFyYWN0ZXJXaWR0aEl0ZXJhdG9yICppdGVyYXRvciwgQVRTR2x5cGhSZWYgKmdseXBoVXNl
ZCwgTlNGb250ICoqZm9udFVzZWQpOworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUNoYXJhY3Rlcldp
ZHRoSXRlcmF0b3IoQ2hhcmFjdGVyV2lkdGhJdGVyYXRvciAqaXRlcmF0b3IsIFdlYlRleHRSZW5k
ZXJlciAqcmVuZGVyZXIsIGNvbnN0IFdlYkNvcmVUZXh0UnVuICpydW4gLCBjb25zdCBXZWJDb3Jl
VGV4dFN0eWxlICpzdHlsZSk7CitzdGF0aWMgZmxvYXQgd2lkdGhGb3JOZXh0Q2hhcmFjdGVyKENo
YXJhY3RlcldpZHRoSXRlcmF0b3IgKml0ZXJhdG9yLCBBVFNHbHlwaFJlZiAqZ2x5cGhVc2VkLCBX
ZWJUZXh0UmVuZGVyZXIgKipyZW5kZXJlclVzZWQpOwogCi0KLS8vIE1pc2MuCiBzdGF0aWMgQk9P
TCBmaWxsU3R5bGVXaXRoQXR0cmlidXRlcyhBVFNVU3R5bGUgc3R5bGUsIE5TRm9udCAqdGhlRm9u
dCk7CiBzdGF0aWMgQk9PTCBzaG91bGRVc2VBVFNVKGNvbnN0IFdlYkNvcmVUZXh0UnVuICpydW4p
Owotc3RhdGljIE5TU3RyaW5nICpwYXRoRnJvbUZvbnQoTlNGb250ICpmb250KTsKIAorI2lmICFF
UlJPUl9ESVNBQkxFRAorc3RhdGljIE5TU3RyaW5nICpwYXRoRnJvbUZvbnQoTlNGb250ICpmb250
KTsKKyNlbmRpZgogCiAvLyBHbG9iYWxzCi1zdGF0aWMgQ0ZDaGFyYWN0ZXJTZXRSZWYgbm9uQmFz
ZUNoYXJzID0gTlVMTDsKIHN0YXRpYyBCT09MIGJ1ZmZlclRleHREcmF3aW5nID0gTk87CiBzdGF0
aWMgQk9PTCBhbHdheXNVc2VBVFNVID0gTk87CiAKLQogQGltcGxlbWVudGF0aW9uIFdlYlRleHRS
ZW5kZXJlcgogCiArIChOU1N0cmluZyAqKXdlYkZhbGxiYWNrRm9udEZhbWlseQpAQCAtMjg0LDE3
MSArMjM4LDEyOCBAQCBzdGF0aWMgQk9PTCBhbHdheXNVc2VBVFNVID0gTk87CiAgICAgcmV0dXJu
IHdlYkZhbGxiYWNrRm9udEZhbWlseTsKIH0KIAotKyAoQk9PTClzaG91bGRCdWZmZXJUZXh0RHJh
d2luZwotewotICAgIHJldHVybiBidWZmZXJUZXh0RHJhd2luZzsKLX0KLQogKyAodm9pZClpbml0
aWFsaXplCiB7Ci0gICAgbm9uQmFzZUNoYXJzID0gQ0ZDaGFyYWN0ZXJTZXRHZXRQcmVkZWZpbmVk
KGtDRkNoYXJhY3RlclNldE5vbkJhc2UpOwogICAgIGJ1ZmZlclRleHREcmF3aW5nID0gW1tbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHN0cmluZ0ZvcktleTpAIkJ1ZmZlclRl
eHREcmF3aW5nIl0gaXNFcXVhbDogQCJZRVMiXTsKIH0KIAotLSBpbml0V2l0aEZvbnQ6KE5TRm9u
dCAqKWYgdXNpbmdQcmludGVyRm9udDooQk9PTClwCistIGluaXRXaXRoRm9udDooV2ViQ29yZUZv
bnQpZgogewogICAgIFtzdXBlciBpbml0XTsKICAgICAKICAgICAvLyBRdWFydHogY2FuIG9ubHkg
aGFuZGxlIGZvbnRzIHdpdGggdGhlc2UgZ2x5cGggcGFja2luZ3MuICBPdGhlciBwYWNraW5ncyBo
YXZlCiAgICAgLy8gYmVlbiBkZXByZWNhdGVkLgotICAgIGlmIChbZiBnbHlwaFBhY2tpbmddICE9
IE5TTmF0aXZlU2hvcnRHbHlwaFBhY2tpbmcgJiYKLSAgICAgICAgW2YgZ2x5cGhQYWNraW5nXSAh
PSBOU1R3b0J5dGVHbHlwaFBhY2tpbmcpIHsKLSAgICAgICAgLy8gQXBwYXJhbnRseSB0aGVyZSBh
cmUgbWFueSBkZXByZWNhdGVkIGZvbnRzIG91dCB0aGVyZSB3aXRoIHVuc3VwcG9ydGVkIHBhY2tp
bmcgdHlwZXMuCisgICAgaWYgKFtmLmZvbnQgZ2x5cGhQYWNraW5nXSAhPSBOU05hdGl2ZVNob3J0
R2x5cGhQYWNraW5nICYmIFtmLmZvbnQgZ2x5cGhQYWNraW5nXSAhPSBOU1R3b0J5dGVHbHlwaFBh
Y2tpbmcpIHsKKyAgICAgICAgLy8gQXBwYXJlbnRseSB0aGVyZSBhcmUgbWFueSBkZXByZWNhdGVk
IGZvbnRzIG91dCB0aGVyZSB3aXRoIHVuc3VwcG9ydGVkIHBhY2tpbmcgdHlwZXMuCiAgICAgICAg
IC8vIExvZyBhbmQgdXNlIGZhbGxiYWNrIGZvbnQuCi0gICAgICAgIC8vIFRoaXMgY2hhbmdlIGZp
eGVzIHRoZSBtYW55IGNyYXNoZXMgcmVwb3J0ZWQgaW4gMzc4MjUzMy4gIE1vc3QgbGlrZWx5LCB0
aGUKLSAgICAgICAgLy8gcHJvYmxlbSBpcyBlbmNvdW50ZXJlZCB3aGVuIHBlb3BsZSB1cGdyYWRl
IGZyb20gT1MgOSwgb3IgaGF2ZSBPUyA5Ci0gICAgICAgIC8vIGZvbnRzIGluc3RhbGxlZCBvbiBP
UyBYLgotICAgICAgICBOU0xvZyAoQCIlczolZCAgVW5hYmxlIHRvIHVzZSBkZXByZWNhdGVkIGZv
bnQgJUAgJWYsIHVzaW5nIHN5c3RlbSBmb250IGluc3RlYWQiLCBfX0ZJTEVfXywgX19MSU5FX18s
IFtmIGRpc3BsYXlOYW1lXSwgW2YgcG9pbnRTaXplXSk7Ci0gICAgICAgIGYgPSBbTlNGb250IHN5
c3RlbUZvbnRPZlNpemU6W2YgcG9pbnRTaXplXV07CisgICAgICAgIC8vIFRoaXMgY2hhbmdlIGZp
eGVzIHRoZSBtYW55IGNyYXNoZXMgcmVwb3J0ZWQgaW4gMzc4MjUzMy4KKyAgICAgICAgLy8gTW9z
dCBsaWtlbHksIHRoZSBwcm9ibGVtIGlzIGVuY291bnRlcmVkIHdoZW4gcGVvcGxlIHVwZ3JhZGUg
ZnJvbSBPUyA5LCBvciBoYXZlIE9TIDkgZm9udHMgaW5zdGFsbGVkIG9uIE9TIFguCisgICAgICAg
IE5TTG9nKEAiJXM6JWQgIFVuYWJsZSB0byB1c2UgZGVwcmVjYXRlZCBmb250ICVAICVmLCB1c2lu
ZyBzeXN0ZW0gZm9udCBpbnN0ZWFkIiwgX19GSUxFX18sIF9fTElORV9fLCBbZi5mb250IGRpc3Bs
YXlOYW1lXSwgW2YuZm9udCBwb2ludFNpemVdKTsKKyAgICAgICAgZi5mb250ID0gW05TRm9udCBz
eXN0ZW1Gb250T2ZTaXplOltmLmZvbnQgcG9pbnRTaXplXV07CiAgICAgfQotICAgICAgICAKLSAg
ICBtYXhTdWJzdGl0dXRlRm9udFdpZHRoTWFwcyA9IE5VTV9TVUJTVElUVVRFX0ZPTlRfTUFQUzsK
LSAgICBzdWJzdGl0dXRlRm9udFdpZHRoTWFwcyA9IGNhbGxvYyAoMSwgbWF4U3Vic3RpdHV0ZUZv
bnRXaWR0aE1hcHMgKiBzaXplb2YoU3Vic3RpdHV0ZUZvbnRXaWR0aE1hcCkpOwotICAgIGZvbnQg
PSBbKHAgPyBbZiBwcmludGVyRm9udF0gOiBbZiBzY3JlZW5Gb250XSkgcmV0YWluXTsKLSAgICB1
c2luZ1ByaW50ZXJGb250ID0gcDsKKworICAgIGZvbnQgPSBmOworCisgICAgc3ludGhldGljQm9s
ZE9mZnNldCA9IGYuc3ludGhldGljQm9sZCA/IGNlaWxmKFtmLmZvbnQgcG9pbnRTaXplXSAvIDI0
LjBmKSA6IDAuZjsKICAgICAKICAgICBib29sIGZhaWxlZFNldHVwID0gZmFsc2U7Ci0gICAgaWYg
KCFbc2VsZiBfc2V0dXBGb250XSl7Ci0gICAgICAgIC8vIEFjayEgIFNvbWV0aGluZyB2ZXJ5IGJh
ZCBoYXBwZW5lZCwgbGlrZSBhIGNvcnJ1cHQgZm9udC4gIFRyeQotICAgICAgICAvLyBsb29raW5n
IGZvciBhbiBhbHRlcm5hdGUgJ2Jhc2UnIGZvbnQgZm9yIHRoaXMgcmVuZGVyZXIuCi0KLSAgICAg
ICAgLy8gU3BlY2lhbCBjYXNlIGhhY2sgdG8gdXNlICJUaW1lcyBOZXcgUm9tYW4iIGluIHBsYWNl
IG9mICJUaW1lcyIuICAiVGltZXMgUk8iIGlzIGEgY29tbW9uIGZvbnQKLSAgICAgICAgLy8gd2hv
c2UgZmFtaWx5IG5hbWUgaXMgIlRpbWVzIi4gIEl0IG92ZXJyaWRlcyB0aGUgbm9ybWFsICJUaW1l
cyIgZmFtaWx5IGZvbnQuICBJdCBhbHNvCi0gICAgICAgIC8vIGFwcGVhcnMgdG8gaGF2ZSBhIGNv
cnJ1cHQgcmVndWxhciB2YXJpYW50LgorICAgIGlmICghW3NlbGYgc2V0VXBGb250XSkgeworICAg
ICAgICAvLyBBY2shIFNvbWV0aGluZyB2ZXJ5IGJhZCBoYXBwZW5lZCwgbGlrZSBhIGNvcnJ1cHQg
Zm9udC4KKyAgICAgICAgLy8gVHJ5IGxvb2tpbmcgZm9yIGFuIGFsdGVybmF0ZSAnYmFzZScgZm9u
dCBmb3IgdGhpcyByZW5kZXJlci4KKworICAgICAgICAvLyBTcGVjaWFsIGNhc2UgaGFjayB0byB1
c2UgIlRpbWVzIE5ldyBSb21hbiIgaW4gcGxhY2Ugb2YgIlRpbWVzIi4KKyAgICAgICAgLy8gIlRp
bWVzIFJPIiBpcyBhIGNvbW1vbiBmb250IHdob3NlIGZhbWlseSBuYW1lIGlzICJUaW1lcyIuCisg
ICAgICAgIC8vIEl0IG92ZXJyaWRlcyB0aGUgbm9ybWFsICJUaW1lcyIgZmFtaWx5IGZvbnQuCisg
ICAgICAgIC8vIEl0IGFsc28gYXBwZWFycyB0byBoYXZlIGEgY29ycnVwdCByZWd1bGFyIHZhcmlh
bnQuCiAgICAgICAgIE5TU3RyaW5nICpmYWxsYmFja0ZvbnRGYW1pbHk7Ci0KLSAgICAgICAgaWYg
KFtbZm9udCBmYW1pbHlOYW1lXSBpc0VxdWFsOkAiVGltZXMiXSkKKyAgICAgICAgaWYgKFtbZm9u
dC5mb250IGZhbWlseU5hbWVdIGlzRXF1YWw6QCJUaW1lcyJdKQogICAgICAgICAgICAgZmFsbGJh
Y2tGb250RmFtaWx5ID0gQCJUaW1lcyBOZXcgUm9tYW4iOwotICAgICAgICBlbHNlIHsKKyAgICAg
ICAgZWxzZQogICAgICAgICAgICAgZmFsbGJhY2tGb250RmFtaWx5ID0gW1dlYlRleHRSZW5kZXJl
ciB3ZWJGYWxsYmFja0ZvbnRGYW1pbHldOwotICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAv
LyBUcnkgc2V0dGluZyB1cCB0aGUgYWx0ZXJuYXRlIGZvbnQuICBUaGlzIGlzIGEgbGFzdCBkaXRj
aCBlZmZvcnQgdG8gdXNlIGEKLQkvLyBzdWJzdGl0dXRlIGZvbnQgd2hlbiBzb21ldGhpbmcgaGFz
IGdvbmUgd3JvbmcuCi0gICAgICAgIE5TRm9udCAqaW5pdGlhbEZvbnQgPSBmb250OwotICAgICAg
ICBbaW5pdGlhbEZvbnQgYXV0b3JlbGVhc2VdOwotICAgICAgICBOU0ZvbnQgKmFmID0gW1tOU0Zv
bnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDpmb250IHRvRmFtaWx5OmZh
bGxiYWNrRm9udEZhbWlseV07Ci0gICAgICAgIGZvbnQgPSBbKHAgPyBbYWYgcHJpbnRlckZvbnRd
IDogW2FmIHNjcmVlbkZvbnRdKSByZXRhaW5dOworICAgICAgICAvLyBUcnkgc2V0dGluZyB1cCB0
aGUgYWx0ZXJuYXRlIGZvbnQuCisgICAgICAgIC8vIFRoaXMgaXMgYSBsYXN0IGRpdGNoIGVmZm9y
dCB0byB1c2UgYSBzdWJzdGl0dXRlIGZvbnQgd2hlbiBzb21ldGhpbmcgaGFzIGdvbmUgd3Jvbmcu
CisgICAgICAgIE5TRm9udCAqaW5pdGlhbEZvbnQgPSBmb250LmZvbnQ7CisgICAgICAgIGZvbnQu
Zm9udCA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6Zm9u
dC5mb250IHRvRmFtaWx5OmZhbGxiYWNrRm9udEZhbWlseV07CisjaWYgIUVSUk9SX0RJU0FCTEVE
CiAgICAgICAgIE5TU3RyaW5nICpmaWxlUGF0aCA9IHBhdGhGcm9tRm9udChpbml0aWFsRm9udCk7
Ci0gICAgICAgIGZpbGVQYXRoID0gZmlsZVBhdGggPyBmaWxlUGF0aCA6IChOU1N0cmluZyAqKUAi
bm90IGtub3duIjsKLSAgICAgICAgaWYgKCFbc2VsZiBfc2V0dXBGb250XSl7CisgICAgICAgIGlm
ICghZmlsZVBhdGgpCisgICAgICAgICAgICBmaWxlUGF0aCA9IEAibm90IGtub3duIjsKKyNlbmRp
ZgorICAgICAgICBpZiAoIVtzZWxmIHNldFVwRm9udF0pIHsKIAkgICAgaWYgKFtmYWxsYmFja0Zv
bnRGYW1pbHkgaXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7CiAJCS8vIE9LLCBjb3VsZG4n
dCBzZXR1cCBUaW1lcyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJuYXRlIHRvIFRpbWVzLCBmYWxsYmFj
awogCQkvLyBvbiB0aGUgc3lzdGVtIGZvbnQuICBJZiB0aGlzIGZhaWxzIHdlIGhhdmUgbm8gYWx0
ZXJuYXRpdmUgbGVmdC4KLQkJYWYgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
IGNvbnZlcnRGb250OmZvbnQgdG9GYW1pbHk6W1dlYlRleHRSZW5kZXJlciB3ZWJGYWxsYmFja0Zv
bnRGYW1pbHldXTsKLQkJZm9udCA9IFsocCA/IFthZiBwcmludGVyRm9udF0gOiBbYWYgc2NyZWVu
Rm9udF0pIHJldGFpbl07Ci0JCWlmICghW3NlbGYgX3NldHVwRm9udF0pewotCQkgICAgLy8gV2Ug
dHJpZWQsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIGFuZCB0aGUgc3lzdGVtIGZvbnQuICBObyBq
b3kuICBXZSBoYXZlIHRvIGdpdmUgdXAuCi0JCSAgICBFUlJPUiAoIiVAIHVuYWJsZSB0byBpbml0
aWFsaXplIHdpdGggZm9udCAlQCBhdCAlQCIsIHNlbGYsIGluaXRpYWxGb250LCBmaWxlUGF0aCk7
CisJCWZvbnQuZm9udCA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVy
dEZvbnQ6Zm9udC5mb250IHRvRmFtaWx5OltXZWJUZXh0UmVuZGVyZXIgd2ViRmFsbGJhY2tGb250
RmFtaWx5XV07CisJCWlmICghW3NlbGYgc2V0VXBGb250XSkgeworCQkgICAgLy8gV2UgdHJpZWQs
IFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2Ug
aGF2ZSB0byBnaXZlIHVwLgorCQkgICAgRVJST1IoIiVAIHVuYWJsZSB0byBpbml0aWFsaXplIHdp
dGggZm9udCAlQCBhdCAlQCIsIHNlbGYsIGluaXRpYWxGb250LCBmaWxlUGF0aCk7CiAgICAgICAg
ICAgICAgICAgICAgIGZhaWxlZFNldHVwID0gdHJ1ZTsKIAkJfQotCSAgICB9Ci0JICAgIGVsc2Ug
ewotCQkvLyBXZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRoZSBzeXN0ZSwgZm9udC4g
IE5vIGpveS4gIFdlIGhhdmUgdG8gZ2l2ZSB1cC4KLQkJRVJST1IgKCIlQCB1bmFibGUgdG8gaW5p
dGlhbGl6ZSB3aXRoIGZvbnQgJUAgYXQgJUAiLCBzZWxmLCBpbml0aWFsRm9udCwgZmlsZVBhdGgp
OworCSAgICB9IGVsc2UgeworCQkvLyBXZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRo
ZSBzeXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCisJCUVSUk9SKCIlQCB1
bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAgYXQgJUAiLCBzZWxmLCBpbml0aWFsRm9u
dCwgZmlsZVBhdGgpOwogICAgICAgICAgICAgICAgIGZhaWxlZFNldHVwID0gdHJ1ZTsKIAkgICAg
fQogICAgICAgICB9CiAKICAgICAgICAgLy8gUmVwb3J0IHRoZSBwcm9ibGVtLgotICAgICAgICBF
UlJPUiAoIkNvcnJ1cHQgZm9udCBkZXRlY3RlZCwgdXNpbmcgJUAgaW4gcGxhY2Ugb2YgJUAgbG9j
YXRlZCBhdCBcIiVAXCIuIiwgCi0gICAgICAgICAgICAgICAgICAgIFtmb250IGZhbWlseU5hbWVd
LCAKLSAgICAgICAgICAgICAgICAgICAgW2luaXRpYWxGb250IGZhbWlseU5hbWVdLAotICAgICAg
ICAgICAgICAgICAgICBmaWxlUGF0aCk7CisgICAgICAgIEVSUk9SKCJDb3JydXB0IGZvbnQgZGV0
ZWN0ZWQsIHVzaW5nICVAIGluIHBsYWNlIG9mICVAIGxvY2F0ZWQgYXQgXCIlQFwiLiIsCisgICAg
ICAgICAgICBbZm9udC5mb250IGZhbWlseU5hbWVdLCBbaW5pdGlhbEZvbnQgZmFtaWx5TmFtZV0s
IGZpbGVQYXRoKTsKICAgICB9CiAKLSAgICAvLyBJZiBhbGwgZWxzZSBmYWlscyB0cnkgdG8gc2V0
dXAgdXNpbmcgdGhlIHN5c3RlbSBmb250LiAgVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlCi0gICAg
Ly8gVGltZXMgYW5kIFRpbWVzIE5ldyBSb21hbiBhcmUgYm90aCB1bmF2YWlsYWJsZS4KKyAgICAv
LyBJZiBhbGwgZWxzZSBmYWlscywgdHJ5IHRvIHNldCB1cCB1c2luZyB0aGUgc3lzdGVtIGZvbnQu
CisgICAgLy8gVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9t
YW4gYXJlIGJvdGggdW5hdmFpbGFibGUuCiAgICAgaWYgKGZhaWxlZFNldHVwKSB7Ci0gICAgICAg
IGYgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W2YgcG9pbnRTaXplXV07Ci0gICAgICAgIEVS
Uk9SICgiJUAgZmFpbGVkIHRvIHNldHVwIGZvbnQsIHVzaW5nIHN5c3RlbSBmb250ICVzIiwgc2Vs
ZiwgZik7Ci0gICAgICAgIGZvbnQgPSBbKHAgPyBbZiBwcmludGVyRm9udF0gOiBbZiBzY3JlZW5G
b250XSkgcmV0YWluXTsKLSAgICAgICAgW3NlbGYgX3NldHVwRm9udF07CisgICAgICAgIGZvbnQu
Zm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbZm9udC5mb250IHBvaW50U2l6ZV1dOwor
ICAgICAgICBFUlJPUigiJUAgZmFpbGVkIHRvIHNldCB1cCBmb250LCB1c2luZyBzeXN0ZW0gZm9u
dCAlcyIsIHNlbGYsIGZvbnQuZm9udCk7CisgICAgICAgIFtzZWxmIHNldFVwRm9udF07CiAgICAg
fQogICAgIAogICAgIGludCBpQXNjZW50OwogICAgIGludCBpRGVzY2VudDsKICAgICBpbnQgaUxp
bmVHYXA7Ci0JdW5zaWduZWQgdW5pdHNQZXJFbTsKLQlXS0dldEZvbnRNZXRyaWNzKGZvbnQsICZp
QXNjZW50LCAmaURlc2NlbnQsICZpTGluZUdhcCwgJnVuaXRzUGVyRW0pOyAKLSAgICBmbG9hdCBw
b2ludFNpemUgPSBbZm9udCBwb2ludFNpemVdOwotICAgIGZsb2F0IGFzYyA9IChTY2FsZUVtVG9V
bml0cyhpQXNjZW50LCB1bml0c1BlckVtKSpwb2ludFNpemUpOwotICAgIGZsb2F0IGRzYyA9ICgt
U2NhbGVFbVRvVW5pdHMoaURlc2NlbnQsIHVuaXRzUGVyRW0pKnBvaW50U2l6ZSk7Ci0gICAgZmxv
YXQgX2xpbmVHYXAgPSBTY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwgdW5pdHNQZXJFbSkqcG9pbnRT
aXplOwotICAgIGZsb2F0IGFkanVzdG1lbnQ7CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbTsKKyAg
ICBXS0dldEZvbnRNZXRyaWNzKGZvbnQuZm9udCwgJmlBc2NlbnQsICZpRGVzY2VudCwgJmlMaW5l
R2FwLCAmdW5pdHNQZXJFbSk7IAorICAgIGZsb2F0IHBvaW50U2l6ZSA9IFtmb250LmZvbnQgcG9p
bnRTaXplXTsKKyAgICBmbG9hdCBhc2MgPSBTY2FsZUVtVG9Vbml0cyhpQXNjZW50LCB1bml0c1Bl
ckVtKSAqIHBvaW50U2l6ZTsKKyAgICBmbG9hdCBkc2MgPSAtU2NhbGVFbVRvVW5pdHMoaURlc2Nl
bnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgIGZsb2F0IF9saW5lR2FwID0gU2NhbGVF
bVRvVW5pdHMoaUxpbmVHYXAsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwogCiAgICAgLy8gV2Ug
bmVlZCB0byBhZGp1c3QgVGltZXMsIEhlbHZldGljYSwgYW5kIENvdXJpZXIgdG8gY2xvc2VseSBt
YXRjaCB0aGUKICAgICAvLyB2ZXJ0aWNhbCBtZXRyaWNzIG9mIHRoZWlyIE1pY3Jvc29mdCBjb3Vu
dGVycGFydHMgdGhhdCBhcmUgdGhlIGRlIGZhY3RvCiAgICAgLy8gd2ViIHN0YW5kYXJkLiAgVGhl
IEFwcEtpdCBhZGp1c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcwogICAgIC8vIGluY29y
cmVjdGx5IGFkZGVkIHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQg
aW5zdGVhZAogICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KLSAgICBpZiAoW1tmb250
IGZhbWlseU5hbWVdIGlzRXF1YWxUb1N0cmluZzpAIlRpbWVzIl0gfHwKLSAgICAgICAgW1tmb250
IGZhbWlseU5hbWVdIGlzRXF1YWxUb1N0cmluZzpAIkhlbHZldGljYSJdIHx8Ci0gICAgICAgIFtb
Zm9udCBmYW1pbHlOYW1lXSBpc0VxdWFsVG9TdHJpbmc6QCJDb3VyaWVyIl0pIHsKLSAgICAgICAg
YWRqdXN0bWVudCA9IGZsb29yKCgoYXNjICsgZHNjKSAqIDAuMTUpICsgMC41KTsKLSAgICB9IGVs
c2UgewotICAgICAgICBhZGp1c3RtZW50ID0gMC4wOwotICAgIH0KKyAgICBOU1N0cmluZyAqZmFt
aWx5TmFtZSA9IFtmb250LmZvbnQgZmFtaWx5TmFtZV07CisgICAgaWYgKFtmYW1pbHlOYW1lIGlz
RXF1YWxUb1N0cmluZzpAIlRpbWVzIl0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAi
SGVsdmV0aWNhIl0gfHwgW2ZhbWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQ291cmllciJdKQor
ICAgICAgICBhc2MgKz0gZmxvb3JmKCgoYXNjICsgZHNjKSAqIDAuMTVmKSArIDAuNWYpOwogCi0g
ICAgYXNjZW50ID0gUk9VTkRfVE9fSU5UKGFzYyArIGFkanVzdG1lbnQpOworICAgIGFzY2VudCA9
IFJPVU5EX1RPX0lOVChhc2MpOwogICAgIGRlc2NlbnQgPSBST1VORF9UT19JTlQoZHNjKTsKIAot
ICAgIF9saW5lR2FwID0gKF9saW5lR2FwID4gMC4wID8gZmxvb3IoX2xpbmVHYXAgKyAwLjUpIDog
MC4wKTsKKyAgICBfbGluZUdhcCA9IF9saW5lR2FwID4gMC4wID8gZmxvb3JmKF9saW5lR2FwICsg
MC41ZikgOiAwLjBmOwogICAgIGxpbmVHYXAgPSAoaW50KV9saW5lR2FwOwotICAgIGxpbmVTcGFj
aW5nID0gIGFzY2VudCArIGRlc2NlbnQgKyBsaW5lR2FwOworICAgIGxpbmVTcGFjaW5nID0gYXNj
ZW50ICsgZGVzY2VudCArIGxpbmVHYXA7CiAKLSNpZmRlZiBDT01QQVJFX0FQUEtJVF9DR19NRVRS
SUNTCi0gICAgcHJpbnRmICgiXG5DRy9BcHBraXQgbWV0cmljcyBmb3IgZm9udCAlcywgJWYsIGxp
bmVHYXAgJWYsIGFkanVzdG1lbnQgJWZcbiIsIFtbZm9udCBkaXNwbGF5TmFtZV0gY1N0cmluZ10s
IFtmb250IHBvaW50U2l6ZV0sIGxpbmVHYXAsIGFkanVzdG1lbnQpOwotICAgIGlmIChST1VORF9U
T19JTlQoW2ZvbnQgYXNjZW5kZXJdKSAhPSBhc2NlbnQgfHwKLSAgICAgICAgUk9VTkRfVE9fSU5U
KC1bZm9udCBkZXNjZW5kZXJdKSAhPSBkZXNjZW50IHx8Ci0gICAgICAgIFJPVU5EX1RPX0lOVChb
Zm9udCBkZWZhdWx0TGluZUhlaWdodEZvckZvbnRdKSAhPSBsaW5lU3BhY2luZyl7Ci0gICAgICAg
IHByaW50ZiAoIlxuQ0cvQXBwa2l0IG1pc21hdGNoZWQgbWV0cmljcyBmb3IgZm9udCAlcywgJWYg
KCVzKVxuIiwgW1tmb250IGRpc3BsYXlOYW1lXSBjU3RyaW5nXSwgW2ZvbnQgcG9pbnRTaXplXSwK
LSAgICAgICAgICAgICAgICAoW2ZvbnQgc2NyZWVuRm9udF0gPyBbW1tmb250IHNjcmVlbkZvbnRd
IGRpc3BsYXlOYW1lXSBjU3RyaW5nXSA6ICJub25lIikpOwotICAgICAgICBwcmludGYgKCJhc2Nl
bnQoJXMpLCBkZXNjZW50KCVzKSwgbGluZVNwYWNpbmcoJXMpXG4iLAotICAgICAgICAgICAgICAg
IChST1VORF9UT19JTlQoW2ZvbnQgYXNjZW5kZXJdKSAhPSBhc2NlbnQpID8gImRpZmZlcmVudCIg
OiAic2FtZSIsCi0gICAgICAgICAgICAgICAgKFJPVU5EX1RPX0lOVCgtW2ZvbnQgZGVzY2VuZGVy
XSkgIT0gZGVzY2VudCkgPyAiZGlmZmVyZW50IiA6ICJzYW1lIiwKLSAgICAgICAgICAgICAgICAo
Uk9VTkRfVE9fSU5UKFtmb250IGRlZmF1bHRMaW5lSGVpZ2h0Rm9yRm9udF0pICE9IGxpbmVTcGFj
aW5nKSA/ICJkaWZmZXJlbnQiIDogInNhbWUiKTsKLSAgICAgICAgcHJpbnRmICgiQ0c6ICBhc2Nl
bnQgJWYsICIsIGFzYyk7Ci0gICAgICAgIHByaW50ZiAoImRlc2NlbnQgJWYsICIsIGRzYyk7Ci0g
ICAgICAgIHByaW50ZiAoImxpbmVHYXAgJWYsICIsIGxpbmVHYXApOwotICAgICAgICBwcmludGYg
KCJsaW5lU3BhY2luZyAlZFxuIiwgbGluZVNwYWNpbmcpOwotICAgICAgICAKLSAgICAgICAgcHJp
bnRmICgiTlNGb250OiAgYXNjZW50ICVmLCAiLCBbZm9udCBhc2NlbmRlcl0pOwotICAgICAgICBw
cmludGYgKCJkZXNjZW50ICVmLCAiLCBbZm9udCBkZXNjZW5kZXJdKTsKLSAgICAgICAgcHJpbnRm
ICgibGluZVNwYWNpbmcgJWZcbiIsIFtmb250IGRlZmF1bHRMaW5lSGVpZ2h0Rm9yRm9udF0pOwot
ICAgIH0KLSNlbmRpZgotICAgICAKLSAgICBpc1NtYWxsQ2Fwc1JlbmRlcmVyID0gTk87CisgICAg
W2ZvbnQuZm9udCByZXRhaW5dOwogICAgIAogICAgIHJldHVybiBzZWxmOwogfQogCiAtICh2b2lk
KWRlYWxsb2MKIHsKLSAgICBbZm9udCByZWxlYXNlXTsKLSAgICBbc21hbGxDYXBzRm9udCByZWxl
YXNlXTsKKyAgICBbZm9udC5mb250IHJlbGVhc2VdOwogICAgIFtzbWFsbENhcHNSZW5kZXJlciBy
ZWxlYXNlXTsKIAogICAgIGlmIChzdHlsZUdyb3VwKQotCQlXS1JlbGVhc2VTdHlsZUdyb3VwKHN0
eWxlR3JvdXApOworICAgICAgICBXS1JlbGVhc2VTdHlsZUdyb3VwKHN0eWxlR3JvdXApOwogCiAg
ICAgZnJlZVdpZHRoTWFwKGdseXBoVG9XaWR0aE1hcCk7CiAgICAgZnJlZUdseXBoTWFwKGNoYXJh
Y3RlclRvR2x5cGhNYXApOwotICAgIGZyZWVVbmljb2RlR2x5cGhNYXAodW5pY29kZUNoYXJhY3Rl
clRvR2x5cGhNYXApOwogCiAgICAgaWYgKEFUU1VTdHlsZUluaXRpYWxpemVkKQotICAgICAgICBB
VFNVRGlzcG9zZVN0eWxlKF9BVFNVU3N0eWxlKTsKKyAgICAgICAgQVRTVURpc3Bvc2VTdHlsZShf
QVRTVVN0eWxlKTsKICAgICAKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CkBAIC00NjAsMTAgKzM3
MSw5IEBAIHN0YXRpYyBCT09MIGFsd2F5c1VzZUFUU1UgPSBOTzsKIAogICAgIGZyZWVXaWR0aE1h
cChnbHlwaFRvV2lkdGhNYXApOwogICAgIGZyZWVHbHlwaE1hcChjaGFyYWN0ZXJUb0dseXBoTWFw
KTsKLSAgICBmcmVlVW5pY29kZUdseXBoTWFwKHVuaWNvZGVDaGFyYWN0ZXJUb0dseXBoTWFwKTsK
IAogICAgIGlmIChBVFNVU3R5bGVJbml0aWFsaXplZCkKLSAgICAgICAgQVRTVURpc3Bvc2VTdHls
ZShfQVRTVVNzdHlsZSk7CisgICAgICAgIEFUU1VEaXNwb3NlU3R5bGUoX0FUU1VTdHlsZSk7CiAg
ICAgCiAgICAgW3N1cGVyIGZpbmFsaXplXTsKIH0KQEAgLTQ4OCwxMiArMzk4LDExIEBAIHN0YXRp
YyBCT09MIGFsd2F5c1VzZUFUU1UgPSBOTzsKIAogLSAoZmxvYXQpeEhlaWdodAogewotICAgIC8v
IE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBiZWNhdXNlIEFwcEtpdCBzeW50aGVz
aXplcyBYIGhlaWdodCByYXRoZXIKLSAgICAvLyB0aGFuIGdldHRpbmcgaXQgZnJvbSB0aGUgZm9u
dC4gVW5mb3J0dW5hdGVseSwgTlNGb250IHdpbGwgcm91bmQgdGhpcyBmb3IgdXMKLSAgICAvLyBz
byB3ZSBkb24ndCBxdWl0ZSBnZXQgdGhlIHJpZ2h0IHZhbHVlLgotICAgIE5TR2x5cGggeEdseXBo
ID0gW2ZvbnQgZ2x5cGhXaXRoTmFtZTpAIngiXTsKKyAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwg
Y2hhcmFjdGVyICJ4IiwgYmVjYXVzZSBBcHBLaXQgc3ludGhlc2l6ZXMgWCBoZWlnaHQgcmF0aGVy
IHRoYW4gZ2V0dGluZyBpdCBmcm9tIHRoZSBmb250LgorICAgIC8vIFVuZm9ydHVuYXRlbHksIE5T
Rm9udCB3aWxsIHJvdW5kIHRoaXMgZm9yIHVzIHNvIHdlIGRvbid0IHF1aXRlIGdldCB0aGUgcmln
aHQgdmFsdWUuCisgICAgTlNHbHlwaCB4R2x5cGggPSBbZm9udC5mb250IGdseXBoV2l0aE5hbWU6
QCJ4Il07CiAgICAgaWYgKHhHbHlwaCkgewotICAgICAgICBOU1JlY3QgeEJveCA9IFtmb250IGJv
dW5kaW5nUmVjdEZvckdseXBoOnhHbHlwaF07CisgICAgICAgIE5TUmVjdCB4Qm94ID0gW2ZvbnQu
Zm9udCBib3VuZGluZ1JlY3RGb3JHbHlwaDp4R2x5cGhdOwogICAgICAgICAvLyBVc2UgdGhlIG1h
eGltdW0gb2YgZWl0aGVyIHdpZHRoIG9yIGhlaWdodCBiZWNhdXNlICJ4IiBpcyBuZWFybHkgc3F1
YXJlCiAgICAgICAgIC8vIGFuZCB3ZWIgcGFnZXMgdGhhdCBmb29saXNobHkgdXNlIHRoaXMgbWV0
cmljIGZvciB3aWR0aCB3aWxsIGJlIGxhaWQgb3V0CiAgICAgICAgIC8vIHBvb3JseSBpZiB3ZSBy
ZXR1cm4gYW4gYWNjdXJhdGUgaGVpZ2h0LiBDbGFzc2ljIGNhc2UgaXMgVGltZXMgMTMgcG9pbnQs
CkBAIC01MDEsMjggKzQxMCwyMSBAQCBzdGF0aWMgQk9PTCBhbHdheXNVc2VBVFNVID0gTk87CiAg
ICAgICAgIHJldHVybiBNQVgoTlNNYXhYKHhCb3gpLCBOU01heFkoeEJveCkpOwogICAgIH0KIAot
ICAgIHJldHVybiBbZm9udCB4SGVpZ2h0XTsKKyAgICByZXR1cm4gW2ZvbnQuZm9udCB4SGVpZ2h0
XTsKIH0KIAogLSAodm9pZClkcmF3UnVuOihjb25zdCBXZWJDb3JlVGV4dFJ1biAqKXJ1biBzdHls
ZTooY29uc3QgV2ViQ29yZVRleHRTdHlsZSAqKXN0eWxlIGdlb21ldHJ5Oihjb25zdCBXZWJDb3Jl
VGV4dEdlb21ldHJ5ICopZ2VvbWV0cnkKIHsKLSAgICBpZiAoc3R5bGUtPnNtYWxsQ2FwcyAmJiAh
aXNTbWFsbENhcHNSZW5kZXJlcikgewotICAgICAgICBbW3NlbGYgX3NtYWxsQ2Fwc1JlbmRlcmVy
XSBkcmF3UnVuOnJ1biBzdHlsZTpzdHlsZSBnZW9tZXRyeTpnZW9tZXRyeV07Ci0gICAgfQotICAg
IGVsc2UgewotICAgICAgICBpZiAoc2hvdWxkVXNlQVRTVShydW4pKQotICAgICAgICAgICAgW3Nl
bGYgX0FUU1VfZHJhd1J1bjpydW4gc3R5bGU6c3R5bGUgZ2VvbWV0cnk6Z2VvbWV0cnldOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBbc2VsZiBfQ0dfZHJhd1J1bjpydW4gc3R5bGU6c3R5bGUg
Z2VvbWV0cnk6Z2VvbWV0cnldOwotICAgIH0KKyAgICBpZiAoc2hvdWxkVXNlQVRTVShydW4pKQor
ICAgICAgICBbc2VsZiBfQVRTVV9kcmF3UnVuOnJ1biBzdHlsZTpzdHlsZSBnZW9tZXRyeTpnZW9t
ZXRyeV07CisgICAgZWxzZQorICAgICAgICBbc2VsZiBfQ0dfZHJhd1J1bjpydW4gc3R5bGU6c3R5
bGUgZ2VvbWV0cnk6Z2VvbWV0cnldOwogfQogCiAtIChmbG9hdClmbG9hdFdpZHRoRm9yUnVuOihj
b25zdCBXZWJDb3JlVGV4dFJ1biAqKXJ1biBzdHlsZTooY29uc3QgV2ViQ29yZVRleHRTdHlsZSAq
KXN0eWxlIHdpZHRoczooZmxvYXQgKil3aWR0aEJ1ZmZlcgogewotICAgIGlmIChzdHlsZS0+c21h
bGxDYXBzICYmICFpc1NtYWxsQ2Fwc1JlbmRlcmVyKSB7Ci0gICAgICAgIHJldHVybiBbW3NlbGYg
X3NtYWxsQ2Fwc1JlbmRlcmVyXSBfZmxvYXRXaWR0aEZvclJ1bjpydW4gc3R5bGU6c3R5bGUgd2lk
dGhzOndpZHRoQnVmZmVyIGZvbnRzOm5pbCBnbHlwaHM6bmlsIHN0YXJ0UG9zaXRpb246bmlsIG51
bUdseXBoczpuaWxdOwotICAgIH0KLSAgICByZXR1cm4gW3NlbGYgX2Zsb2F0V2lkdGhGb3JSdW46
cnVuIHN0eWxlOnN0eWxlIHdpZHRoczp3aWR0aEJ1ZmZlciBmb250czpuaWwgZ2x5cGhzOm5pbCBz
dGFydFBvc2l0aW9uOm5pbCBudW1HbHlwaHM6bmlsXTsKKyAgICByZXR1cm4gW3NlbGYgZmxvYXRX
aWR0aEZvclJ1bjpydW4gc3R5bGU6c3R5bGUgd2lkdGhzOndpZHRoQnVmZmVyCisgICAgICAgIHN1
YnN0aXR1dGVSZW5kZXJlcnM6TlVMTCBnbHlwaHM6TlVMTCBzdGFydFBvc2l0aW9uOk5VTEwgbnVt
R2x5cGhzOk5VTExdOwogfQogCiAtICh2b2lkKWRyYXdMaW5lRm9yQ2hhcmFjdGVyczooTlNQb2lu
dClwb2ludCB5T2Zmc2V0OihmbG9hdCl5T2Zmc2V0IHdpZHRoOiAoaW50KXdpZHRoIGNvbG9yOihO
U0NvbG9yICopY29sb3IgdGhpY2tuZXNzOihmbG9hdCl0aGlja25lc3MKQEAgLTU4MCwxNSArNDgy
LDEwIEBAIHN0YXRpYyBCT09MIGFsd2F5c1VzZUFUU1UgPSBOTzsKIAogLSAodm9pZClkcmF3SGln
aGxpZ2h0Rm9yUnVuOihjb25zdCBXZWJDb3JlVGV4dFJ1biAqKXJ1biBzdHlsZTooY29uc3QgV2Vi
Q29yZVRleHRTdHlsZSAqKXN0eWxlIGdlb21ldHJ5Oihjb25zdCBXZWJDb3JlVGV4dEdlb21ldHJ5
ICopZ2VvbWV0cnkKIHsKLSAgICBpZiAoc3R5bGUtPnNtYWxsQ2FwcyAmJiAhaXNTbWFsbENhcHNS
ZW5kZXJlcikgewotICAgICAgICBbW3NlbGYgX3NtYWxsQ2Fwc1JlbmRlcmVyXSBkcmF3SGlnaGxp
Z2h0Rm9yUnVuOnJ1biBzdHlsZTpzdHlsZSBnZW9tZXRyeTpnZW9tZXRyeV07Ci0gICAgfQotICAg
IGVsc2UgewotICAgICAgICBpZiAoc2hvdWxkVXNlQVRTVShydW4pKQotICAgICAgICAgICAgW3Nl
bGYgX0FUU1VfZHJhd0hpZ2hsaWdodEZvclJ1bjpydW4gc3R5bGU6c3R5bGUgZ2VvbWV0cnk6Z2Vv
bWV0cnldOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbc2VsZiBfQ0dfZHJhd0hpZ2hsaWdo
dEZvclJ1bjpydW4gc3R5bGU6c3R5bGUgZ2VvbWV0cnk6Z2VvbWV0cnldOwotICAgIH0KKyAgICBp
ZiAoc2hvdWxkVXNlQVRTVShydW4pKQorICAgICAgICBbc2VsZiBfQVRTVV9kcmF3SGlnaGxpZ2h0
Rm9yUnVuOnJ1biBzdHlsZTpzdHlsZSBnZW9tZXRyeTpnZW9tZXRyeV07CisgICAgZWxzZQorICAg
ICAgICBbc2VsZiBfQ0dfZHJhd0hpZ2hsaWdodEZvclJ1bjpydW4gc3R5bGU6c3R5bGUgZ2VvbWV0
cnk6Z2VvbWV0cnldOwogfQogCiAtIChpbnQpbWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzCkBAIC02
NTYsMTAgKzU1Myw2IEBAIHN0YXRpYyBCT09MIGFsd2F5c1VzZUFUU1UgPSBOTzsKIAogLSAoaW50
KXBvaW50VG9PZmZzZXQ6KGNvbnN0IFdlYkNvcmVUZXh0UnVuICopcnVuIHN0eWxlOihjb25zdCBX
ZWJDb3JlVGV4dFN0eWxlICopc3R5bGUgcG9zaXRpb246KGludCl4IHJldmVyc2VkOihCT09MKXJl
dmVyc2VkIGluY2x1ZGVQYXJ0aWFsR2x5cGhzOihCT09MKWluY2x1ZGVQYXJ0aWFsR2x5cGhzCiB7
Ci0gICAgaWYgKHN0eWxlLT5zbWFsbENhcHMgJiYgIWlzU21hbGxDYXBzUmVuZGVyZXIpIHsKLSAg
ICAgICAgcmV0dXJuIFtbc2VsZiBfc21hbGxDYXBzUmVuZGVyZXJdIHBvaW50VG9PZmZzZXQ6cnVu
IHN0eWxlOnN0eWxlIHBvc2l0aW9uOnggcmV2ZXJzZWQ6cmV2ZXJzZWQgaW5jbHVkZVBhcnRpYWxH
bHlwaHM6aW5jbHVkZVBhcnRpYWxHbHlwaHNdOwotICAgIH0KLQogICAgIGlmIChzaG91bGRVc2VB
VFNVKHJ1bikpCiAgICAgICAgIHJldHVybiBbc2VsZiBfQVRTVV9wb2ludFRvT2Zmc2V0OnJ1biBz
dHlsZTpzdHlsZSBwb3NpdGlvbjp4IHJldmVyc2VkOnJldmVyc2VkIGluY2x1ZGVQYXJ0aWFsR2x5
cGhzOmluY2x1ZGVQYXJ0aWFsR2x5cGhzXTsKICAgICByZXR1cm4gW3NlbGYgX0NHX3BvaW50VG9P
ZmZzZXQ6cnVuIHN0eWxlOnN0eWxlIHBvc2l0aW9uOnggcmV2ZXJzZWQ6cmV2ZXJzZWQgaW5jbHVk
ZVBhcnRpYWxHbHlwaHM6aW5jbHVkZVBhcnRpYWxHbHlwaHNdOwpAQCAtNjczLDEzOSArNTY2LDEx
MSBAQCBzdGF0aWMgQk9PTCBhbHdheXNVc2VBVFNVID0gTk87CiAKIEBpbXBsZW1lbnRhdGlvbiBX
ZWJUZXh0UmVuZGVyZXIgKFdlYkludGVybmFsKQogCi0rICh2b2lkKV9zZXRBbHdheXNVc2VBVFNV
OihCT09MKWYKKysgKHZvaWQpc2V0QWx3YXlzVXNlQVRTVTooQk9PTClmCiB7CiAgICAgYWx3YXlz
VXNlQVRTVSA9IGY7CiB9CiAKLS0gKHZvaWQpX3NldElzU21hbGxDYXBzUmVuZGVyZXI6KEJPT0wp
ZmxhZwotewotICAgIGlzU21hbGxDYXBzUmVuZGVyZXIgPSBmbGFnOwotfQotCi0tIChCT09MKV9p
c1NtYWxsQ2Fwc1JlbmRlcmVyCi17Ci0gICAgcmV0dXJuIGlzU21hbGxDYXBzUmVuZGVyZXI7Ci19
Ci0KLS0gKFdlYlRleHRSZW5kZXJlciAqKV9zbWFsbENhcHNSZW5kZXJlcgorLSAoV2ViVGV4dFJl
bmRlcmVyICopc21hbGxDYXBzUmVuZGVyZXIKIHsKICAgICBpZiAoIXNtYWxsQ2Fwc1JlbmRlcmVy
KSB7CiAJTlNfRFVSSU5HCi0JICAgIHNtYWxsQ2Fwc1JlbmRlcmVyID0gW1tXZWJUZXh0UmVuZGVy
ZXIgYWxsb2NdIGluaXRXaXRoRm9udDpmb250IHVzaW5nUHJpbnRlckZvbnQ6dXNpbmdQcmludGVy
Rm9udF07CisgICAgICAgICAgICBmbG9hdCBzaXplID0gW2ZvbnQuZm9udCBwb2ludFNpemVdICog
U01BTExDQVBTX0ZPTlRTSVpFX01VTFRJUExJRVI7CisgICAgICAgICAgICBXZWJDb3JlRm9udCBz
bWFsbENhcHNGb250OworICAgICAgICAgICAgV2ViQ29yZUluaXRpYWxpemVGb250KCZzbWFsbENh
cHNGb250KTsKKyAgICAgICAgICAgIHNtYWxsQ2Fwc0ZvbnQuZm9udCA9IFtbTlNGb250TWFuYWdl
ciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6Zm9udC5mb250IHRvU2l6ZTpzaXplXTsK
KwkgICAgc21hbGxDYXBzUmVuZGVyZXIgPSBbW3NlbGYgcmVuZGVyZXJGb3JBbHRlcm5hdGVGb250
OnNtYWxsQ2Fwc0ZvbnRdIHJldGFpbl07CiAJTlNfSEFORExFUgotCSAgICBpZiAoQVNTRVJUX0RJ
U0FCTEVEKSB7Ci0JCU5TTG9nKEAiVW5jYXVnaHQgZXhjZXB0aW9uIC0gJUBcbiIsIGxvY2FsRXhj
ZXB0aW9uKTsKLQkgICAgfSBlbHNlIHsKLQkJQVNTRVJUX1dJVEhfTUVTU0FHRSgwLCAiVW5jYXVn
aHQgZXhjZXB0aW9uIC0gJUAiLCBsb2NhbEV4Y2VwdGlvbik7Ci0JICAgIH0gCisgICAgICAgICAg
ICBOU0xvZyhAInVuY2F1Z2h0IGV4Y2VwdGlvbiBzZWxlY3RpbmcgZm9udCBmb3Igc21hbGwgY2Fw
czogJUAiLCBsb2NhbEV4Y2VwdGlvbik7CiAJTlNfRU5ESEFORExFUgotCi0gICAgICAgIFtzbWFs
bENhcHNSZW5kZXJlciBfc2V0SXNTbWFsbENhcHNSZW5kZXJlcjpZRVNdOwogICAgIH0KICAgICBy
ZXR1cm4gc21hbGxDYXBzUmVuZGVyZXI7CiB9CiAKLS0gKE5TRm9udCAqKV9zbWFsbENhcHNGb250
Ci17Ci0gICAgaWYgKCFzbWFsbENhcHNGb250KQotICAgICAgICBzbWFsbENhcHNGb250ID0gW1tb
TlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6Zm9udCB0b1NpemU6
KFtmb250IHBvaW50U2l6ZV0gKiBTTUFMTENBUFNfRk9OVFNJWkVfTVVMVElQTElFUildIHNjcmVl
bkZvbnRdOwotICAgIHJldHVybiB1c2luZ1ByaW50ZXJGb250ID8gW3NtYWxsQ2Fwc0ZvbnQgcHJp
bnRlckZvbnRdIDogc21hbGxDYXBzRm9udDsKLX0KLQogc3RhdGljIGlubGluZSBCT09MIGZvbnRD
b250YWluc1N0cmluZyhOU0ZvbnQgKmZvbnQsIE5TU3RyaW5nICpzdHJpbmcpCiB7CiAgICAgTlND
aGFyYWN0ZXJTZXQgKnNldCA9IFtbZm9udCBjb3ZlcmVkQ2hhcmFjdGVyU2V0XSBpbnZlcnRlZFNl
dF07CiAgICAgcmV0dXJuIHNldCAmJiBbc3RyaW5nIHJhbmdlT2ZDaGFyYWN0ZXJGcm9tU2V0OnNl
dF0ubG9jYXRpb24gPT0gTlNOb3RGb3VuZDsKIH0KIAotLSAoTlNGb250ICopX3N1YnN0aXR1dGVG
b250Rm9yU3RyaW5nOiAoTlNTdHJpbmcgKilzdHJpbmcgZmFtaWxpZXM6IChOU1N0cmluZyAqKilm
YW1pbGllcworLSAoTlNGb250ICopX3N1YnN0aXR1dGVGb250Rm9yU3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZyBmYW1pbGllczooTlNTdHJpbmcgKiopZmFtaWxpZXMKIHsKICAgICBOU0ZvbnQgKnN1
YnN0aXR1dGVGb250ID0gbmlsOwogCi0gICAgLy8gRmlyc3Qgc2VhcmNoIHRoZSBDU1MgZmFtaWx5
IGZhbGxiYWNrIGxpc3QuICBTdGFydCBhdCAxICgybmQgZm9udCkKLSAgICAvLyBiZWNhdXNlIHdl
J3ZlIGFscmVhZHkgZmFpbGVkIG9uIHRoZSBmaXJzdCBsb29rdXAuCisgICAgLy8gRmlyc3Qgc2Vh
cmNoIHRoZSBDU1MgZmFtaWx5IGZhbGxiYWNrIGxpc3QuCisgICAgLy8gU3RhcnQgYXQgMSAoMm5k
IGZvbnQpIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBmYWlsZWQgb24gdGhlIGZpcnN0IGxvb2t1cC4K
ICAgICBOU1N0cmluZyAqZmFtaWx5ID0gbmlsOwogICAgIGludCBpID0gMTsKLSAgICB3aGlsZSAo
ZmFtaWxpZXMgJiYgZmFtaWxpZXNbaV0gIT0gMCkgeworICAgIHdoaWxlIChmYW1pbGllcyAmJiBm
YW1pbGllc1tpXSkgewogICAgICAgICBmYW1pbHkgPSBmYW1pbGllc1tpKytdOwotICAgICAgICBz
dWJzdGl0dXRlRm9udCA9IFtbV2ViVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBj
YWNoZWRGb250RnJvbUZhbWlseTogZmFtaWx5IHRyYWl0czpbW05TRm9udE1hbmFnZXIgc2hhcmVk
Rm9udE1hbmFnZXJdIHRyYWl0c09mRm9udDpmb250XSBzaXplOltmb250IHBvaW50U2l6ZV1dOwot
ICAgICAgICBpZiAoc3Vic3RpdHV0ZUZvbnQpIHsKLSAgICAgICAgICAgIGlmIChmb250Q29udGFp
bnNTdHJpbmcoc3Vic3RpdHV0ZUZvbnQsIHN0cmluZykpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBzdWJzdGl0dXRlRm9udCA9IG5pbDsgCisgICAgICAgIE5TRm9udCAqZiA9
IFtbV2ViVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBjYWNoZWRGb250RnJvbUZh
bWlseTpmYW1pbHkKKyAgICAgICAgICAgIHRyYWl0czpbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9u
dE1hbmFnZXJdIHRyYWl0c09mRm9udDpmb250LmZvbnRdIHNpemU6W2ZvbnQuZm9udCBwb2ludFNp
emVdXTsKKyAgICAgICAgaWYgKGYgJiYgZm9udENvbnRhaW5zU3RyaW5nKGYsIHN0cmluZykpIHsK
KyAgICAgICAgICAgIHN1YnN0aXR1dGVGb250ID0gZjsgCisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBOb3cgZG8gc3RyaW5nIGJhc2VkIGxvb2t1cC4K
ICAgICBpZiAoc3Vic3RpdHV0ZUZvbnQgPT0gbmlsKQotICAgICAgICBzdWJzdGl0dXRlRm9udCA9
IFdLR2V0Rm9udEluTGFuZ3VhZ2VGb3JSYW5nZShmb250LCBzdHJpbmcsIE5TTWFrZVJhbmdlICgw
LFtzdHJpbmcgbGVuZ3RoXSkpOwotCQkKKyAgICAgICAgc3Vic3RpdHV0ZUZvbnQgPSBXS0dldEZv
bnRJbkxhbmd1YWdlRm9yUmFuZ2UoZm9udC5mb250LCBzdHJpbmcsIE5TTWFrZVJhbmdlKDAsIFtz
dHJpbmcgbGVuZ3RoXSkpOwogCiAgICAgLy8gTm93IGRvIGNoYXJhY3RlciBiYXNlZCBsb29rdXAu
CiAgICAgaWYgKHN1YnN0aXR1dGVGb250ID09IG5pbCAmJiBbc3RyaW5nIGxlbmd0aF0gPT0gMSkK
LSAgICAgICAgc3Vic3RpdHV0ZUZvbnQgPSBXS0dldEZvbnRJbkxhbmd1YWdlRm9yQ2hhcmFjdGVy
KGZvbnQsIFtzdHJpbmcgY2hhcmFjdGVyQXRJbmRleDogMF0pOwotCi0gICAgLy8gR2V0IHRoZSBz
Y3JlZW4gb3IgcHJpbnRlciB2YXJpYXRpb24gb2YgdGhlIGZvbnQuCi0gICAgc3Vic3RpdHV0ZUZv
bnQgPSB1c2luZ1ByaW50ZXJGb250ID8gW3N1YnN0aXR1dGVGb250IHByaW50ZXJGb250XSA6IFtz
dWJzdGl0dXRlRm9udCBzY3JlZW5Gb250XTsKKyAgICAgICAgc3Vic3RpdHV0ZUZvbnQgPSBXS0dl
dEZvbnRJbkxhbmd1YWdlRm9yQ2hhcmFjdGVyKGZvbnQuZm9udCwgW3N0cmluZyBjaGFyYWN0ZXJB
dEluZGV4OjBdKTsKIAotICAgIGlmIChbc3Vic3RpdHV0ZUZvbnQgaXNFcXVhbDogZm9udF0pCisg
ICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYSBkaXN0aW5jdCBmb250LgorICAgIGlm
IChzdWJzdGl0dXRlRm9udCAmJiBbW3N1YnN0aXR1dGVGb250IHNjcmVlbkZvbnRdIGlzRXF1YWw6
W2ZvbnQuZm9udCBzY3JlZW5Gb250XV0pCiAgICAgICAgIHN1YnN0aXR1dGVGb250ID0gbmlsOwog
Ci0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIHN1YnN0aXR1dGUgZm9udCwgYXR0ZW1wdCB0byBt
YXRjaCBpdCB0byB0aGUgYmVzdCB2YXJpYXRpb24uICBJZiB3ZSBoYXZlCi0gICAgLy8gYSBnb29k
IG1hdGNoIHJldHVybiB0aGF0LCBvdGhlcndpc2UgcmV0dXJuIHRoZSBmb250IHRoZSBBcHBLaXQg
aGFzIGZvdW5kLgotICAgIE5TRm9udE1hbmFnZXIgKm1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBz
aGFyZWRGb250TWFuYWdlcl07Ci0gICAgTlNGb250ICpzdWJzdGl0dXRlRm9udDIgPSBbbWFuYWdl
ciBmb250V2l0aEZhbWlseTooTlNTdHJpbmcgKilbc3Vic3RpdHV0ZUZvbnQgZmFtaWx5TmFtZV0g
dHJhaXRzOlttYW5hZ2VyIHRyYWl0c09mRm9udDpmb250XSB3ZWlnaHQ6W21hbmFnZXIgd2VpZ2h0
T2ZGb250OmZvbnRdIHNpemU6W2ZvbnQgcG9pbnRTaXplXV07Ci0gICAgaWYgKHN1YnN0aXR1dGVG
b250MikKLQlzdWJzdGl0dXRlRm9udCA9IHN1YnN0aXR1dGVGb250MjsKLQotICAgIC8vIE5vdywg
ZmluYWxseSwgZ2V0IHRoZSBwcmludGVyIG9yIHNjcmVlbiB2YXJpYXRpb24uCi0gICAgc3Vic3Rp
dHV0ZUZvbnQgPSB1c2luZ1ByaW50ZXJGb250ID8gW3N1YnN0aXR1dGVGb250IHByaW50ZXJGb250
XSA6IFtzdWJzdGl0dXRlRm9udCBzY3JlZW5Gb250XTsKKyAgICAvLyBOb3cgdGhhdCB3ZSBoYXZl
IGEgc3Vic3RpdHV0ZSBmb250LCBhdHRlbXB0IHRvIG1hdGNoIGl0IHRvIHRoZSBiZXN0IHZhcmlh
dGlvbi4KKyAgICAvLyBJZiB3ZSBoYXZlIGEgZ29vZCBtYXRjaCByZXR1cm4gdGhhdCwgb3RoZXJ3
aXNlIHJldHVybiB0aGUgZm9udCB0aGUgQXBwS2l0IGhhcyBmb3VuZC4KKyAgICBpZiAoc3Vic3Rp
dHV0ZUZvbnQpIHsKKyAgICAgICAgTlNGb250TWFuYWdlciAqbWFuYWdlciA9IFtOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKKyAgICAgICAgTlNGb250ICpiZXN0VmFyaWF0aW9uID0g
W21hbmFnZXIgZm9udFdpdGhGYW1pbHk6W3N1YnN0aXR1dGVGb250IGZhbWlseU5hbWVdIHRyYWl0
czpbbWFuYWdlciB0cmFpdHNPZkZvbnQ6Zm9udC5mb250XQorICAgICAgICAgICAgd2VpZ2h0Oltt
YW5hZ2VyIHdlaWdodE9mRm9udDpmb250LmZvbnRdIHNpemU6W2ZvbnQuZm9udCBwb2ludFNpemVd
XTsKKyAgICAgICAgaWYgKGJlc3RWYXJpYXRpb24pCisgICAgICAgICAgICBzdWJzdGl0dXRlRm9u
dCA9IGJlc3RWYXJpYXRpb247CisgICAgfQogCiAgICAgcmV0dXJuIHN1YnN0aXR1dGVGb250Owog
fQogCi0tIChOU0ZvbnQgKilfc3Vic3RpdHV0ZUZvbnRGb3JDaGFyYWN0ZXJzOiAoY29uc3QgdW5p
Y2hhciAqKWNoYXJhY3RlcnMgbGVuZ3RoOiAoaW50KW51bUNoYXJhY3RlcnMgZmFtaWxpZXM6IChO
U1N0cmluZyAqKilmYW1pbGllcworLSAoV2ViVGV4dFJlbmRlcmVyICopcmVuZGVyZXJGb3JBbHRl
cm5hdGVGb250OihXZWJDb3JlRm9udClhbHRlcm5hdGVGb250CiB7Ci0gICAgTlNTdHJpbmcgKnN0
cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weToodW5pY2hh
ciAqKWNoYXJhY3RlcnMgbGVuZ3RoOiBudW1DaGFyYWN0ZXJzIGZyZWVXaGVuRG9uZTogTk9dOwot
ICAgIE5TRm9udCAqc3Vic3RpdHV0ZUZvbnQgPSBbc2VsZiBfc3Vic3RpdHV0ZUZvbnRGb3JTdHJp
bmc6IHN0cmluZyBmYW1pbGllczogZmFtaWxpZXNdOwotICAgIFtzdHJpbmcgcmVsZWFzZV07Ci0g
ICAgcmV0dXJuIHN1YnN0aXR1dGVGb250OworICAgIGlmICghYWx0ZXJuYXRlRm9udC5mb250KQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBb
TlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CisgICAgTlNGb250VHJhaXRNYXNrIGZv
bnRUcmFpdHMgPSBbZm9udE1hbmFnZXIgdHJhaXRzT2ZGb250OmZvbnQuZm9udF07CisgICAgaWYg
KGZvbnQuc3ludGhldGljQm9sZCkKKyAgICAgICAgZm9udFRyYWl0cyB8PSBOU0JvbGRGb250TWFz
azsKKyAgICBpZiAoZm9udC5zeW50aGV0aWNPYmxpcXVlKQorICAgICAgICBmb250VHJhaXRzIHw9
IE5TSXRhbGljRm9udE1hc2s7CisgICAgTlNGb250VHJhaXRNYXNrIGFsdGVybmF0ZUZvbnRUcmFp
dHMgPSBbZm9udE1hbmFnZXIgdHJhaXRzT2ZGb250OmFsdGVybmF0ZUZvbnQuZm9udF07CisKKyAg
ICBhbHRlcm5hdGVGb250LnN5bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAmIE5TQm9sZEZvbnRN
YXNrKSAmJiAhKGFsdGVybmF0ZUZvbnRUcmFpdHMgJiBOU0JvbGRGb250TWFzayk7CisgICAgYWx0
ZXJuYXRlRm9udC5zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRN
YXNrKSAmJiAhKGFsdGVybmF0ZUZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKTsKKyAgICBh
bHRlcm5hdGVGb250LmZvclByaW50ZXIgPSBmb250LmZvclByaW50ZXI7CisKKyAgICByZXR1cm4g
W1tXZWJUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHJlbmRlcmVyV2l0aEZvbnQ6
YWx0ZXJuYXRlRm9udF07CiB9CiAKLS0gKHZvaWQpX2NvbnZlcnRDaGFyYWN0ZXJzOiAoY29uc3Qg
VW5pQ2hhciAqKWNoYXJhY3RlcnMgbGVuZ3RoOiAodW5zaWduZWQpbnVtQ2hhcmFjdGVycyB0b0ds
eXBoczogKFdLR2x5cGhWZWN0b3JSZWYpZ2x5cGhzCistIChXZWJUZXh0UmVuZGVyZXIgKilzdWJz
dGl0dXRlUmVuZGVyZXJGb3JDaGFyYWN0ZXJzOihjb25zdCB1bmljaGFyICopY2hhcmFjdGVycyBs
ZW5ndGg6KGludCludW1DaGFyYWN0ZXJzIGZhbWlsaWVzOihOU1N0cmluZyAqKilmYW1pbGllcwog
ewotICAgIE9TU3RhdHVzIHN0YXR1cyA9IFdLQ29udmVydENoYXJUb0dseXBocyhzdHlsZUdyb3Vw
LCBjaGFyYWN0ZXJzLCBudW1DaGFyYWN0ZXJzLCBnbHlwaHMpOwotICAgIGlmIChzdGF0dXMgIT0g
bm9FcnIpewotICAgICAgICBGQVRBTF9BTFdBWVMgKCJ1bmFibGUgdG8gZ2V0IGdseXBoc2ZvciAl
QCAlZiBlcnJvciA9ICglZCkiLCBzZWxmLCBbZm9udCBkaXNwbGF5TmFtZV0sIFtmb250IHBvaW50
U2l6ZV0sIHN0YXR1cyk7Ci0gICAgfQorICAgIFdlYkNvcmVGb250IHN1YnN0aXR1dGVGb250Owor
ICAgIFdlYkNvcmVJbml0aWFsaXplRm9udCgmc3Vic3RpdHV0ZUZvbnQpOworICAgIE5TU3RyaW5n
ICpzdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0NvcHk6KHVu
aWNoYXIgKiljaGFyYWN0ZXJzIGxlbmd0aDogbnVtQ2hhcmFjdGVycyBmcmVlV2hlbkRvbmU6IE5P
XTsKKyAgICBzdWJzdGl0dXRlRm9udC5mb250ID0gW3NlbGYgX3N1YnN0aXR1dGVGb250Rm9yU3Ry
aW5nOnN0cmluZyBmYW1pbGllczpmYW1pbGllc107CisgICAgW3N0cmluZyByZWxlYXNlXTsKKyAg
ICByZXR1cm4gW3NlbGYgcmVuZGVyZXJGb3JBbHRlcm5hdGVGb250OnN1YnN0aXR1dGVGb250XTsK
IH0KIAotLSAodm9pZClfY29udmVydFVuaWNvZGVDaGFyYWN0ZXJzOiAoY29uc3QgVW5pY29kZUNo
YXIgKiljaGFyYWN0ZXJzIGxlbmd0aDogKHVuc2lnbmVkKW51bUNoYXJhY3RlcnMgdG9HbHlwaHM6
IChXS0dseXBoVmVjdG9yUmVmKWdseXBocworLSAodm9pZClfY29udmVydENoYXJhY3RlcnM6KGNv
bnN0IFVuaUNoYXIgKiljaGFyYWN0ZXJzIGxlbmd0aDoodW5zaWduZWQpbnVtQ2hhcmFjdGVycyB0
b0dseXBoczooV0tHbHlwaFZlY3RvclJlZilnbHlwaHMKIHsKLSAgICBVbmlDaGFyIGxvY2FsQnVm
ZmVyW0xPQ0FMX0JVRkZFUl9TSVpFXTsKLSAgICBVbmlDaGFyICpidWZmZXIgPSBsb2NhbEJ1ZmZl
cjsKLSAgICB1bnNpZ25lZCBpLCBidWZQb3MgPSAwOwotICAgIAotICAgIGlmIChudW1DaGFyYWN0
ZXJzKjIgPiBMT0NBTF9CVUZGRVJfU0laRSkgewotICAgICAgICBidWZmZXIgPSAoVW5pQ2hhciAq
KW1hbGxvYyhzaXplb2YoVW5pQ2hhcikgKiBudW1DaGFyYWN0ZXJzICogMik7Ci0gICAgfQotICAg
IAotICAgIGZvciAoaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzOyBpKyspIHsKLSAgICAgICAgVW5p
Y29kZUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgIEFTU0VSVChVMTZfTEVOR1RIKGMp
ID09IDIpOwotICAgICAgICBidWZmZXJbYnVmUG9zKytdID0gVTE2X0xFQUQoYyk7Ci0gICAgICAg
IGJ1ZmZlcltidWZQb3MrK10gPSBVMTZfVFJBSUwoYyk7Ci0gICAgfQotICAgICAgICAKLSAgICBP
U1N0YXR1cyBzdGF0dXMgPSBXS0NvbnZlcnRDaGFyVG9HbHlwaHMoc3R5bGVHcm91cCwgYnVmZmVy
LCBudW1DaGFyYWN0ZXJzKjIsIGdseXBocyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0Vycil7Ci0g
ICAgICAgIEZBVEFMX0FMV0FZUyAoInVuYWJsZSB0byBnZXQgZ2x5cGhzZm9yICVAICVmIGVycm9y
ID0gKCVkKSIsIHNlbGYsIFtmb250IGRpc3BsYXlOYW1lXSwgW2ZvbnQgcG9pbnRTaXplXSwgc3Rh
dHVzKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGJ1ZmZlciAhPSBsb2NhbEJ1ZmZlcikgewotICAg
ICAgICBmcmVlKGJ1ZmZlcik7Ci0gICAgfQorICAgIE9TU3RhdHVzIHN0YXR1cyA9IFdLQ29udmVy
dENoYXJUb0dseXBocyhzdHlsZUdyb3VwLCBjaGFyYWN0ZXJzLCBudW1DaGFyYWN0ZXJzLCBnbHlw
aHMpOworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpCisgICAgICAgIEZBVEFMX0FMV0FZUygidW5h
YmxlIHRvIGdldCBnbHlwaHMgZm9yICVAICVmIGVycm9yID0gKCVkKSIsIHNlbGYsIFtmb250LmZv
bnQgZGlzcGxheU5hbWVdLCBbZm9udC5mb250IHBvaW50U2l6ZV0sIHN0YXR1cyk7CiB9CiAKIC8v
IE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCByb3VuZCBvciBjZWlsIHNwYWNl
IHdpZHRocy4KQEAgLTgxMywxMiArNjc4LDEzIEBAIHN0YXRpYyBpbmxpbmUgQk9PTCBmb250Q29u
dGFpbnNTdHJpbmcoTlMKIC8vIGV2ZXJ5IGNoYXJhY3RlciBhbmQgdGhlIHNwYWNlIGFyZSB0aGUg
c2FtZSB3aWR0aC4gIE90aGVyd2lzZSB3ZSByb3VuZC4KIC0gKEJPT0wpX2NvbXB1dGVXaWR0aEZv
clNwYWNlCiB7Ci0gICAgc3BhY2VHbHlwaCA9IFtzZWxmIF9leHRlbmRDaGFyYWN0ZXJUb0dseXBo
TWFwVG9JbmNsdWRlOlNQQUNFXTsKKyAgICBzcGFjZUdseXBoID0gW3NlbGYgZXh0ZW5kQ2hhcmFj
dGVyVG9HbHlwaE1hcFRvSW5jbHVkZTpTUEFDRV07CiAgICAgaWYgKHNwYWNlR2x5cGggPT0gMCkg
ewogICAgICAgICByZXR1cm4gTk87CiAgICAgfQogCi0gICAgZmxvYXQgd2lkdGggPSB3aWR0aEZv
ckdseXBoKHNlbGYsIHNwYWNlR2x5cGgsIDApOworICAgIGZsb2F0IHdpZHRoID0gd2lkdGhGb3JH
bHlwaChzZWxmLCBzcGFjZUdseXBoKTsKKwogICAgIHNwYWNlV2lkdGggPSB3aWR0aDsKIAogICAg
IHRyZWF0QXNGaXhlZFBpdGNoID0gW1tXZWJUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3Rv
cnldIGlzRm9udEZpeGVkUGl0Y2g6Zm9udF07CkBAIC04MjcsMTMgKzY5MywxNSBAQCBzdGF0aWMg
aW5saW5lIEJPT0wgZm9udENvbnRhaW5zU3RyaW5nKE5TCiAgICAgcmV0dXJuIFlFUzsKIH0KIAot
LSAoQk9PTClfc2V0dXBGb250CistIChCT09MKXNldFVwRm9udAogeworICAgIGZvbnQuZm9udCA9
IGZvbnQuZm9yUHJpbnRlciA/IFtmb250LmZvbnQgcHJpbnRlckZvbnRdIDogW2ZvbnQuZm9udCBz
Y3JlZW5Gb250XTsKKwogICAgIEFUU1VTdHlsZSBmb250U3R5bGU7CiAgICAgaWYgKEFUU1VDcmVh
dGVTdHlsZSgmZm9udFN0eWxlKSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAg
aWYgKCFmaWxsU3R5bGVXaXRoQXR0cmlidXRlcyhmb250U3R5bGUsIGZvbnQpKSB7CisgICAgaWYg
KCFmaWxsU3R5bGVXaXRoQXR0cmlidXRlcyhmb250U3R5bGUsIGZvbnQuZm9udCkpIHsKICAgICAg
ICAgQVRTVURpc3Bvc2VTdHlsZShmb250U3R5bGUpOwogICAgICAgICByZXR1cm4gTk87CiAgICAg
fQpAQCAtODQyLDcgKzcxMCw3IEBAIHN0YXRpYyBpbmxpbmUgQk9PTCBmb250Q29udGFpbnNTdHJp
bmcoTlMKICAgICAgICAgQVRTVURpc3Bvc2VTdHlsZShmb250U3R5bGUpOwogICAgICAgICByZXR1
cm4gTk87CiAgICAgfQotICAgIAorCiAgICAgQVRTVURpc3Bvc2VTdHlsZShmb250U3R5bGUpOwog
CiAgICAgaWYgKCFbc2VsZiBfY29tcHV0ZVdpZHRoRm9yU3BhY2VdKSB7CkBAIC04NTYsMTQgKzcy
NCwxNCBAQCBzdGF0aWMgaW5saW5lIEJPT0wgZm9udENvbnRhaW5zU3RyaW5nKE5TCiAgICAgcmV0
dXJuIFlFUzsKIH0KIAorI2lmICFFUlJPUl9ESVNBQkxFRAorCiBzdGF0aWMgTlNTdHJpbmcgKnBh
dGhGcm9tRm9udCAoTlNGb250ICpmb250KQogewogICAgIFVJbnQ4IF9maWxlUGF0aEJ1ZmZlcltQ
QVRIX01BWF07CiAgICAgTlNTdHJpbmcgKmZpbGVQYXRoID0gbmlsOwogICAgIEZTU3BlYyBvRmls
ZTsKLSAgICBPU1N0YXR1cyBzdGF0dXMgPSBBVFNGb250R2V0RmlsZVNwZWNpZmljYXRpb24oCi0g
ICAgICAgICAgICBBVFNGb250UmVmRnJvbU5TRm9udChmb250KSwKLSAgICAgICAgICAgICZvRmls
ZSk7CisgICAgT1NTdGF0dXMgc3RhdHVzID0gQVRTRm9udEdldEZpbGVTcGVjaWZpY2F0aW9uKEZN
R2V0QVRTRm9udFJlZkZyb21Gb250KChGTUZvbnQpV0tHZXROU0ZvbnRBVFNVRm9udElkKGZvbnQp
KSwgJm9GaWxlKTsKICAgICBpZiAoc3RhdHVzID09IG5vRXJyKXsKICAgICAgICAgT1NFcnIgZXJy
OwogICAgICAgICBGU1JlZiBmaWxlUmVmOwpAQCAtODc4LDY0ICs3NDYsNTYgQEAgc3RhdGljIE5T
U3RyaW5nICpwYXRoRnJvbUZvbnQgKE5TRm9udCAqZgogICAgIHJldHVybiBmaWxlUGF0aDsKIH0K
IAorI2VuZGlmCisKIC8vIFVzZWZ1bCBwYWdlIGZvciB0ZXN0aW5nIGh0dHA6Ly9ob21lLmF0dC5u
ZXQvfmphbWVza2Fzcwotc3RhdGljIHZvaWQgX2RyYXdHbHlwaHMoTlNGb250ICpmb250LCBOU0Nv
bG9yICpjb2xvciwgQ0dHbHlwaCAqZ2x5cGhzLCBDR1NpemUgKmFkdmFuY2VzLCBmbG9hdCB4LCBm
bG9hdCB5LCBpbnQgbnVtR2x5cGhzKQorc3RhdGljIHZvaWQgZHJhd0dseXBocyhOU0ZvbnQgKmZv
bnQsIE5TQ29sb3IgKmNvbG9yLCBDR0dseXBoICpnbHlwaHMsIENHU2l6ZSAqYWR2YW5jZXMsIGZs
b2F0IHgsIGZsb2F0IHksIGludCBudW1HbHlwaHMsCisgICAgZmxvYXQgc3ludGhldGljQm9sZE9m
ZnNldCwgQk9PTCBzeW50aGV0aWNPYmxpcXVlKQogewotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRl
eHQ7CisgICAgTlNHcmFwaGljc0NvbnRleHQgKmdDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0
IGN1cnJlbnRDb250ZXh0XTsKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gKENHQ29udGV4
dFJlZilbZ0NvbnRleHQgZ3JhcGhpY3NQb3J0XTsKIAotICAgIGlmIChbV2ViVGV4dFJlbmRlcmVy
IHNob3VsZEJ1ZmZlclRleHREcmF3aW5nXSAmJiBbW1dlYlRleHRSZW5kZXJlckZhY3Rvcnkgc2hh
cmVkRmFjdG9yeV0gY29hbGVzY2VUZXh0RHJhd2luZ10pewotICAgICAgICAvLyBBZGQgYnVmZmVy
ZWQgZ2x5cGhzIGFuZCBhZHZhbmNlcwotICAgICAgICAvLyBGSVhNRTogIElmIHdlIGV2ZXIgdXNl
IHRoaXMgYWdhaW4sIG5lZWQgdG8gYWRkIFJUTC4KLSAgICAgICAgV2ViR2x5cGhCdWZmZXIgKmdC
dWZmZXIgPSBbW1dlYlRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gZ2x5cGhCdWZm
ZXJGb3JGb250OiBmb250IGFuZENvbG9yOiBjb2xvcl07Ci0gICAgICAgIFtnQnVmZmVyIGFkZEds
eXBoczogZ2x5cGhzIGFkdmFuY2VzOiBhZHZhbmNlcyBjb3VudDogbnVtR2x5cGhzIGF0OiB4IDog
eV07Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCAqZ0NvbnRl
eHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOwotICAgICAgICBjZ0NvbnRl
eHQgPSAoQ0dDb250ZXh0UmVmKVtnQ29udGV4dCBncmFwaGljc1BvcnRdOwotICAgICAgICAvLyBT
ZXR1cCB0aGUgY29sb3IgYW5kIGZvbnQuCi0KLQlib29sIG9yaWdpbmFsU2hvdWxkVXNlRm9udFNt
b290aGluZzsKLQkKLQlvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBXS0NHQ29udGV4
dEdldFNob3VsZFNtb290aEZvbnRzIChjZ0NvbnRleHQpOwotCUNHQ29udGV4dFNldFNob3VsZFNt
b290aEZvbnRzIChjZ0NvbnRleHQsIFtXZWJWaWV3IF9zaG91bGRVc2VGb250U21vb3RoaW5nXSk7
Ci0gICAgICAgIAotICAgICAgICBOU0ZvbnQgKmRyYXdGb250OwotICAgICAgICAKLSAgICAgICAg
aWYgKFtnQ29udGV4dCBpc0RyYXdpbmdUb1NjcmVlbl0pewotICAgICAgICAgICAgZHJhd0ZvbnQg
PSBbZm9udCBzY3JlZW5Gb250XTsKLSAgICAgICAgICAgIGlmIChkcmF3Rm9udCAhPSBmb250KXsK
LSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgZ2V0dGluZyB0aGlzIGluIHRvbyBtYW55IHBsYWNl
cyAoMzQwNjQxMSk7IHVzZSBFUlJPUiBzbyBpdCBvbmx5IHByaW50cyBvbgotICAgICAgICAgICAg
ICAgIC8vIGRlYnVnIHZlcnNpb25zIGZvciBub3cuIChXZSBzaG91bGQgZGVidWcgdGhpcyBhbHNv
LCBldmVudHVhbGx5KS4KLSAgICAgICAgICAgICAgICBFUlJPUiAoIkF0dGVtcHRpbmcgdG8gc2V0
IG5vbi1zY3JlZW4gZm9udCAoJUApIHdoZW4gZHJhd2luZyB0byBzY3JlZW4uICBVc2luZyBzY3Jl
ZW4gZm9udCBhbnl3YXksIG1heSByZXN1bHQgaW4gaW5jb3JyZWN0IG1ldHJpY3MuIiwgW1tbZm9u
dCBmb250RGVzY3JpcHRvcl0gZm9udEF0dHJpYnV0ZXNdIG9iamVjdEZvcktleTogTlNGb250TmFt
ZUF0dHJpYnV0ZV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgZHJhd0ZvbnQgPSBbZm9udCBwcmludGVyRm9udF07Ci0gICAgICAgICAgICBp
ZiAoZHJhd0ZvbnQgIT0gZm9udCl7Ci0gICAgICAgICAgICAgICAgTlNMb2cgKEAiQXR0ZW1wdGlu
ZyB0byBzZXQgbm9uLXByaW50ZXIgZm9udCAoJUApIHdoZW4gcHJpbnRpbmcuICBVc2luZyBwcmlu
dGVyIGZvbnQgYW55d2F5LCBtYXkgcmVzdWx0IGluIGluY29ycmVjdCBtZXRyaWNzLiIsIFtbW2Zv
bnQgZm9udERlc2NyaXB0b3JdIGZvbnRBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6IE5TRm9udE5h
bWVBdHRyaWJ1dGVdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLQlOU1Zp
ZXcgKnYgPSBbTlNWaWV3IGZvY3VzVmlld107CisgICAgYm9vbCBvcmlnaW5hbFNob3VsZFVzZUZv
bnRTbW9vdGhpbmcgPSBXS0NHQ29udGV4dEdldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCk7
CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBbV2ViVmlldyBf
c2hvdWxkVXNlRm9udFNtb290aGluZ10pOworICAgIAorICAgIE5TRm9udCAqZHJhd0ZvbnQ7Cisg
ICAgaWYgKFtnQ29udGV4dCBpc0RyYXdpbmdUb1NjcmVlbl0pIHsKKyAgICAgICAgZHJhd0ZvbnQg
PSBbZm9udCBzY3JlZW5Gb250XTsKKyAgICAgICAgaWYgKGRyYXdGb250ICE9IGZvbnQpCisgICAg
ICAgICAgICAvLyBXZSBhcmUgZ2V0dGluZyB0aGlzIGluIHRvbyBtYW55IHBsYWNlcyAoMzQwNjQx
MSk7IHVzZSBFUlJPUiBzbyBpdCBvbmx5IHByaW50cyBvbiBkZWJ1ZyB2ZXJzaW9ucyBmb3Igbm93
LiAoV2Ugc2hvdWxkIGRlYnVnIHRoaXMgYWxzbywgZXZlbnR1YWxseSkuCisgICAgICAgICAgICBF
UlJPUigiQXR0ZW1wdGluZyB0byBzZXQgbm9uLXNjcmVlbiBmb250ICglQCkgd2hlbiBkcmF3aW5n
IHRvIHNjcmVlbi4gIFVzaW5nIHNjcmVlbiBmb250IGFueXdheSwgbWF5IHJlc3VsdCBpbiBpbmNv
cnJlY3QgbWV0cmljcy4iLAorICAgICAgICAgICAgICAgIFtbW2ZvbnQgZm9udERlc2NyaXB0b3Jd
IGZvbnRBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6TlNGb250TmFtZUF0dHJpYnV0ZV0pOworICAg
IH0gZWxzZSB7CisgICAgICAgIGRyYXdGb250ID0gW2ZvbnQgcHJpbnRlckZvbnRdOworICAgICAg
ICBpZiAoZHJhd0ZvbnQgIT0gZm9udCkKKyAgICAgICAgICAgIE5TTG9nKEAiQXR0ZW1wdGluZyB0
byBzZXQgbm9uLXByaW50ZXIgZm9udCAoJUApIHdoZW4gcHJpbnRpbmcuICBVc2luZyBwcmludGVy
IGZvbnQgYW55d2F5LCBtYXkgcmVzdWx0IGluIGluY29ycmVjdCBtZXRyaWNzLiIsCisgICAgICAg
ICAgICAgICAgW1tbZm9udCBmb250RGVzY3JpcHRvcl0gZm9udEF0dHJpYnV0ZXNdIG9iamVjdEZv
cktleTpOU0ZvbnROYW1lQXR0cmlidXRlXSk7CisgICAgfQorICAgIAorICAgIENHQ29udGV4dFNl
dEZvbnQoY2dDb250ZXh0LCBXS0dldENHRm9udEZyb21OU0ZvbnQoZHJhd0ZvbnQpKTsKKworICAg
IENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKKyAgICBtZW1jcHkoJm1hdHJpeCwgW2RyYXdGb250
IG1hdHJpeF0sIHNpemVvZihtYXRyaXgpKTsKKyAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKKyAg
ICBtYXRyaXguZCA9IC1tYXRyaXguZDsKKyAgICBpZiAoc3ludGhldGljT2JsaXF1ZSkKKyAgICAg
ICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRyYW5z
Zm9ybU1ha2UoMSwgMCwgLXRhbmYoMTQgKiBhY29zZigwKSAvIDkwKSwgMSwgMCwgMCkpOyAKKyAg
ICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNnQ29udGV4dCwgbWF0cml4KTsKIAotICAgICAgICBD
R0NvbnRleHRTZXRGb250KGNnQ29udGV4dCwgV0tHZXRDR0ZvbnRGcm9tTlNGb250KGRyYXdGb250
KSk7Ci0gICAgICAgIAotICAgICAgICAvLyBEZWFsIHdpdGggZmxpcHBpbmcgZmxpcHB5bmVzcy4K
LSAgICAgICAgY29uc3QgZmxvYXQgKm1hdHJpeCA9IFtkcmF3Rm9udCBtYXRyaXhdOwotICAgICAg
ICBmbG9hdCBmbGlwID0gW3YgaXNGbGlwcGVkXSA/IC0xIDogMTsKLSAgICAgICAgQ0dDb250ZXh0
U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFrZShtYXRyaXhbMF0s
IG1hdHJpeFsxXSAqIGZsaXAsIG1hdHJpeFsyXSwgbWF0cml4WzNdICogZmxpcCwgbWF0cml4WzRd
LCBtYXRyaXhbNV0pKTsKLQkJV0tTZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNnQ29udGV4dCwgZHJh
d0ZvbnQpOwotICAgICAgICBDR0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIDEuMEYpOwor
ICAgIFdLU2V0Q0dGb250UmVuZGVyaW5nTW9kZShjZ0NvbnRleHQsIGRyYXdGb250KTsKKyAgICBD
R0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIDEuMGYpOwogCi0gICAgICAgIFtjb2xvciBz
ZXRdOworICAgIFtjb2xvciBzZXRdOwogCi0gICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlv
bihjZ0NvbnRleHQsIHgsIHkpOworICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRl
eHQsIHgsIHkpOworICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOworICAgIGlmIChzeW50aGV0aWNCb2xkT2Zm
c2V0KSB7CisgICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHggKyBz
eW50aGV0aWNCb2xkT2Zmc2V0LCB5KTsKICAgICAgICAgQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocyk7Ci0KLQlDR0Nv
bnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIG9yaWdpbmFsU2hvdWxkVXNlRm9u
dFNtb290aGluZyk7CiAgICAgfQotfQogCisgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9u
dHMoY2dDb250ZXh0LCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpOworfQogCiAtICh2
b2lkKV9DR19kcmF3SGlnaGxpZ2h0Rm9yUnVuOihjb25zdCBXZWJDb3JlVGV4dFJ1biAqKXJ1biBz
dHlsZTooY29uc3QgV2ViQ29yZVRleHRTdHlsZSAqKXN0eWxlIGdlb21ldHJ5Oihjb25zdCBXZWJD
b3JlVGV4dEdlb21ldHJ5ICopZ2VvbWV0cnkKIHsKQEAgLTk1MywxMyArODEzLDEzIEBAIHN0YXRp
YyB2b2lkIF9kcmF3R2x5cGhzKE5TRm9udCAqZm9udCwgTlMKICAgICAvLyBUaGUgc3RhcnRpbmcg
cG9pbnQgbmVlZHMgdG8gYmUgYWRqdXN0ZWQgdG8gYWNjb3VudCBmb3IgdGhlIHdpZHRoIG9mCiAg
ICAgLy8gdGhlIGdseXBocyBhdCB0aGUgc3RhcnQgb2YgdGhlIHJ1bi4KICAgICB3aGlsZSAod2lk
dGhJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyIDwgKHVuc2lnbmVkKXJ1bi0+ZnJvbSkgewotICAg
ICAgICBzdGFydFBvc2l0aW9uICs9IHdpZHRoRm9yTmV4dENoYXJhY3Rlcigmd2lkdGhJdGVyYXRv
ciwgMCwgMCk7CisgICAgICAgIHN0YXJ0UG9zaXRpb24gKz0gd2lkdGhGb3JOZXh0Q2hhcmFjdGVy
KCZ3aWR0aEl0ZXJhdG9yLCBOVUxMLCBOVUxMKTsKICAgICB9CiAgICAgZmxvYXQgc3RhcnRYID0g
c3RhcnRQb3NpdGlvbiArIGdlb21ldHJ5LT5wb2ludC54OwogICAgIAogICAgIGZsb2F0IGJhY2tn
cm91bmRXaWR0aCA9IDAuMEY7CiAgICAgd2hpbGUgKHdpZHRoSXRlcmF0b3IuY3VycmVudENoYXJh
Y3RlciA8ICh1bnNpZ25lZClydW4tPnRvKSB7Ci0gICAgICAgIGJhY2tncm91bmRXaWR0aCArPSB3
aWR0aEZvck5leHRDaGFyYWN0ZXIoJndpZHRoSXRlcmF0b3IsIDAsIDApOworICAgICAgICBiYWNr
Z3JvdW5kV2lkdGggKz0gd2lkdGhGb3JOZXh0Q2hhcmFjdGVyKCZ3aWR0aEl0ZXJhdG9yLCBOVUxM
LCBOVUxMKTsKICAgICB9CiAKICAgICBpZiAoc3R5bGUtPmJhY2tncm91bmRDb2xvciAhPSBuaWwp
ewpAQCAtOTcwLDE1ICs4MzAsMTQgQEAgc3RhdGljIHZvaWQgX2RyYXdHbHlwaHMoTlNGb250ICpm
b250LCBOUwogCiAgICAgICAgIGZsb2F0IHlQb3MgPSBnZW9tZXRyeS0+dXNlRm9udE1ldHJpY3NG
b3JTZWxlY3Rpb25ZQW5kSGVpZ2h0ID8gZ2VvbWV0cnktPnBvaW50LnkgLSBbc2VsZiBhc2NlbnRd
IC0gKGxpbmVHYXAvMikgOiBnZW9tZXRyeS0+c2VsZWN0aW9uWTsKICAgICAgICAgZmxvYXQgaGVp
Z2h0ID0gZ2VvbWV0cnktPnVzZUZvbnRNZXRyaWNzRm9yU2VsZWN0aW9uWUFuZEhlaWdodCA/IFtz
ZWxmIGxpbmVTcGFjaW5nXSA6IGdlb21ldHJ5LT5zZWxlY3Rpb25IZWlnaHQ7Ci0gICAgICAgIGlm
IChzdHlsZS0+cnRsKXsKKyAgICAgICAgaWYgKHN0eWxlLT5SVEwpIHsKICAgICAgICAgICAgIGZs
b2F0IGNvbXBsZXRlUnVuV2lkdGggPSBzdGFydFBvc2l0aW9uICsgYmFja2dyb3VuZFdpZHRoOwog
ICAgICAgICAgICAgd2hpbGUgKHdpZHRoSXRlcmF0b3IuY3VycmVudENoYXJhY3RlciA8IHJ1bi0+
bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGVSdW5XaWR0aCArPSB3aWR0aEZvck5l
eHRDaGFyYWN0ZXIoJndpZHRoSXRlcmF0b3IsIDAsIDApOworICAgICAgICAgICAgICAgIGNvbXBs
ZXRlUnVuV2lkdGggKz0gd2lkdGhGb3JOZXh0Q2hhcmFjdGVyKCZ3aWR0aEl0ZXJhdG9yLCBOVUxM
LCBOVUxMKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgW05TQmV6aWVyUGF0aCBmaWxs
UmVjdDpOU01ha2VSZWN0KGdlb21ldHJ5LT5wb2ludC54ICsgY29tcGxldGVSdW5XaWR0aCAtIHN0
YXJ0UG9zaXRpb24gLSBiYWNrZ3JvdW5kV2lkdGgsIHlQb3MsIGJhY2tncm91bmRXaWR0aCwgaGVp
Z2h0KV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBbTlNCZXppZXJQYXRoIGZpbGxSZWN0Ok5TTWFrZVJlY3Qoc3RhcnRYLCB5UG9zLCBi
YWNrZ3JvdW5kV2lkdGgsIGhlaWdodCldOwogICAgICAgICB9CiAgICAgfQpAQCAtOTg5LDcgKzg0
OCw3IEBAIHN0YXRpYyB2b2lkIF9kcmF3R2x5cGhzKE5TRm9udCAqZm9udCwgTlMKIHsKICAgICBm
bG9hdCAqd2lkdGhCdWZmZXIsIGxvY2FsV2lkdGhCdWZmZXJbTE9DQUxfQlVGRkVSX1NJWkVdOwog
ICAgIENHR2x5cGggKmdseXBoQnVmZmVyLCBsb2NhbEdseXBoQnVmZmVyW0xPQ0FMX0JVRkZFUl9T
SVpFXTsKLSAgICBOU0ZvbnQgKipmb250QnVmZmVyLCAqbG9jYWxGb250QnVmZmVyW0xPQ0FMX0JV
RkZFUl9TSVpFXTsKKyAgICBXZWJUZXh0UmVuZGVyZXIgKipyZW5kZXJlckJ1ZmZlciwgKmxvY2Fs
UmVuZGVyZXJCdWZmZXJbTE9DQUxfQlVGRkVSX1NJWkVdOwogICAgIENHU2l6ZSAqYWR2YW5jZXMs
IGxvY2FsQWR2YW5jZUJ1ZmZlcltMT0NBTF9CVUZGRVJfU0laRV07CiAgICAgaW50IG51bUdseXBo
cyA9IDAsIGk7CiAgICAgZmxvYXQgc3RhcnRYOwpAQCAtMTAwMiwxOCArODYxLDE4IEBAIHN0YXRp
YyB2b2lkIF9kcmF3R2x5cGhzKE5TRm9udCAqZm9udCwgTlMKICAgICAgICAgYWR2YW5jZXMgPSAo
Q0dTaXplICopY2FsbG9jKGxlbmd0aCpNQVhfR0xZUEhfRVhQQU5TSU9OLCBzaXplb2YoQ0dTaXpl
KSk7CiAgICAgICAgIHdpZHRoQnVmZmVyID0gKGZsb2F0ICopY2FsbG9jKGxlbmd0aCpNQVhfR0xZ
UEhfRVhQQU5TSU9OLCBzaXplb2YoZmxvYXQpKTsKICAgICAgICAgZ2x5cGhCdWZmZXIgPSAoQ0dH
bHlwaCAqKWNhbGxvYyhsZW5ndGgqTUFYX0dMWVBIX0VYUEFOU0lPTiwgc2l6ZW9mKEFUU0dseXBo
UmVmKSk7Ci0gICAgICAgIGZvbnRCdWZmZXIgPSAoTlNGb250ICoqKWNhbGxvYyhsZW5ndGgqTUFY
X0dMWVBIX0VYUEFOU0lPTiwgc2l6ZW9mKE5TRm9udCAqKSk7CisgICAgICAgIHJlbmRlcmVyQnVm
ZmVyID0gKFdlYlRleHRSZW5kZXJlciAqKiljYWxsb2MobGVuZ3RoKk1BWF9HTFlQSF9FWFBBTlNJ
T04sIHNpemVvZihXZWJUZXh0UmVuZGVyZXIgKikpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGFk
dmFuY2VzID0gbG9jYWxBZHZhbmNlQnVmZmVyOwogICAgICAgICB3aWR0aEJ1ZmZlciA9IGxvY2Fs
V2lkdGhCdWZmZXI7CiAgICAgICAgIGdseXBoQnVmZmVyID0gbG9jYWxHbHlwaEJ1ZmZlcjsKLSAg
ICAgICAgZm9udEJ1ZmZlciA9IGxvY2FsRm9udEJ1ZmZlcjsKKyAgICAgICAgcmVuZGVyZXJCdWZm
ZXIgPSBsb2NhbFJlbmRlcmVyQnVmZmVyOwogICAgIH0KIAotICAgIFtzZWxmIF9mbG9hdFdpZHRo
Rm9yUnVuOnJ1bgorICAgIFtzZWxmIGZsb2F0V2lkdGhGb3JSdW46cnVuCiAgICAgICAgIHN0eWxl
OnN0eWxlCiAgICAgICAgIHdpZHRoczp3aWR0aEJ1ZmZlciAKLSAgICAgICAgZm9udHM6Zm9udEJ1
ZmZlcgorICAgICAgICBzdWJzdGl0dXRlUmVuZGVyZXJzOnJlbmRlcmVyQnVmZmVyCiAgICAgICAg
IGdseXBoczpnbHlwaEJ1ZmZlcgogICAgICAgICBzdGFydFBvc2l0aW9uOiZzdGFydFgKICAgICAg
ICAgbnVtR2x5cGhzOiAmbnVtR2x5cGhzXTsKQEAgLTEwMzUsNjAgKzg5NCw2MiBAQCBzdGF0aWMg
dm9pZCBfZHJhd0dseXBocyhOU0ZvbnQgKmZvbnQsIE5TCiAgICAgaWYgKHN0eWxlLT5iYWNrZ3Jv
dW5kQ29sb3IgIT0gbmlsKQogICAgICAgICBbc2VsZiBfQ0dfZHJhd0hpZ2hsaWdodEZvclJ1bjpy
dW4gc3R5bGU6c3R5bGUgZ2VvbWV0cnk6Z2VvbWV0cnldOwogICAgIAotICAgIC8vIEZpbmFsbHks
IGRyYXcgdGhlIGdseXBocy4KLSAgICBpbnQgbGFzdEZyb20gPSAwOwotICAgIGludCBwb3MgPSAw
OwotCiAgICAgLy8gU3dhcCB0aGUgb3JkZXIgb2YgdGhlIGdseXBocyBpZiByaWdodC10by1sZWZ0
LgotICAgIGlmIChzdHlsZS0+cnRsICYmIG51bUdseXBocyA+IDEpeworICAgIGlmIChzdHlsZS0+
UlRMKSB7CiAgICAgICAgIGludCBpOwotICAgICAgICBpbnQgZW5kID0gbnVtR2x5cGhzOworICAg
ICAgICBpbnQgbWlkID0gbnVtR2x5cGhzIC8gMjsKKyAgICAgICAgaW50IGVuZDsKICAgICAgICAg
Q0dHbHlwaCBnc3dhcDEsIGdzd2FwMjsKICAgICAgICAgQ0dTaXplIGFzd2FwMSwgYXN3YXAyOwot
ICAgICAgICBOU0ZvbnQgKmZzd2FwMSwgKmZzd2FwMjsKLSAgICAgICAgCi0gICAgICAgIGZvciAo
aSA9IHBvcywgZW5kID0gbnVtR2x5cGhzOyBpIDwgKG51bUdseXBocyAtIHBvcykvMjsgaSsrKXsK
KyAgICAgICAgV2ViVGV4dFJlbmRlcmVyICpyc3dhcDEsICpyc3dhcDI7CisgICAgICAgIGZvciAo
aSA9IDAsIGVuZCA9IG51bUdseXBoczsgaSA8IG1pZDsgaSsrKSB7CiAgICAgICAgICAgICBnc3dh
cDEgPSBnbHlwaEJ1ZmZlcltpXTsKICAgICAgICAgICAgIGdzd2FwMiA9IGdseXBoQnVmZmVyWy0t
ZW5kXTsKICAgICAgICAgICAgIGdseXBoQnVmZmVyW2ldID0gZ3N3YXAyOwogICAgICAgICAgICAg
Z2x5cGhCdWZmZXJbZW5kXSA9IGdzd2FwMTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSBw
b3MsIGVuZCA9IG51bUdseXBoczsgaSA8IChudW1HbHlwaHMgLSBwb3MpLzI7IGkrKyl7CisKICAg
ICAgICAgICAgIGFzd2FwMSA9IGFkdmFuY2VzW2ldOwogICAgICAgICAgICAgYXN3YXAyID0gYWR2
YW5jZXNbLS1lbmRdOwogICAgICAgICAgICAgYWR2YW5jZXNbaV0gPSBhc3dhcDI7CiAgICAgICAg
ICAgICBhZHZhbmNlc1tlbmRdID0gYXN3YXAxOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9
IHBvcywgZW5kID0gbnVtR2x5cGhzOyBpIDwgKG51bUdseXBocyAtIHBvcykvMjsgaSsrKXsKLSAg
ICAgICAgICAgIGZzd2FwMSA9IGZvbnRCdWZmZXJbaV07Ci0gICAgICAgICAgICBmc3dhcDIgPSBm
b250QnVmZmVyWy0tZW5kXTsKLSAgICAgICAgICAgIGZvbnRCdWZmZXJbaV0gPSBmc3dhcDI7Ci0g
ICAgICAgICAgICBmb250QnVmZmVyW2VuZF0gPSBmc3dhcDE7CisKKyAgICAgICAgICAgIHJzd2Fw
MSA9IHJlbmRlcmVyQnVmZmVyW2ldOworICAgICAgICAgICAgcnN3YXAyID0gcmVuZGVyZXJCdWZm
ZXJbLS1lbmRdOworICAgICAgICAgICAgcmVuZGVyZXJCdWZmZXJbaV0gPSByc3dhcDI7CisgICAg
ICAgICAgICByZW5kZXJlckJ1ZmZlcltlbmRdID0gcnN3YXAxOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgLy8gRHJhdyBlYWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyB0aGF0IGFyZSBpbmNs
dWRlZCBpbiB0aGUgc2FtZSBmb250LgotICAgIE5TRm9udCAqY3VycmVudEZvbnQgPSBmb250QnVm
ZmVyW3Bvc107CisgICAgLy8gRmluYWxseSwgZHJhdyB0aGUgZ2x5cGhzLgorICAgIGludCBsYXN0
RnJvbSA9IDA7CisgICAgaW50IHBvcyA9IDA7CisKKyAgICAvLyBEcmF3IGVhY2ggY29udGlndW91
cyBydW4gb2YgZ2x5cGhzIHRoYXQgdXNlIHRoZSBzYW1lIHJlbmRlcmVyLgorICAgIFdlYlRleHRS
ZW5kZXJlciAqY3VycmVudFJlbmRlcmVyID0gcmVuZGVyZXJCdWZmZXJbcG9zXTsKICAgICBmbG9h
dCBuZXh0WCA9IHN0YXJ0WDsKICAgICBpbnQgbmV4dEdseXBoID0gcG9zOwotCi0gICAgd2hpbGUg
KG5leHRHbHlwaCA8IG51bUdseXBocyl7Ci0gICAgICAgIGlmICgoZm9udEJ1ZmZlcltuZXh0R2x5
cGhdICE9IDAgJiYgZm9udEJ1ZmZlcltuZXh0R2x5cGhdICE9IGN1cnJlbnRGb250KSl7Ci0gICAg
ICAgICAgICBfZHJhd0dseXBocyhjdXJyZW50Rm9udCwgc3R5bGUtPnRleHRDb2xvciwgJmdseXBo
QnVmZmVyW2xhc3RGcm9tXSwgJmFkdmFuY2VzW2xhc3RGcm9tXSwgc3RhcnRYLCBnZW9tZXRyeS0+
cG9pbnQueSwgbmV4dEdseXBoIC0gbGFzdEZyb20pOworICAgIHdoaWxlIChuZXh0R2x5cGggPCBu
dW1HbHlwaHMpIHsKKyAgICAgICAgV2ViVGV4dFJlbmRlcmVyICpuZXh0UmVuZGVyZXIgPSByZW5k
ZXJlckJ1ZmZlcltuZXh0R2x5cGhdOworICAgICAgICBpZiAobmV4dFJlbmRlcmVyICYmIG5leHRS
ZW5kZXJlciAhPSBjdXJyZW50UmVuZGVyZXIpIHsKKyAgICAgICAgICAgIGRyYXdHbHlwaHMoY3Vy
cmVudFJlbmRlcmVyLT5mb250LmZvbnQsIHN0eWxlLT50ZXh0Q29sb3IsICZnbHlwaEJ1ZmZlclts
YXN0RnJvbV0sICZhZHZhbmNlc1tsYXN0RnJvbV0sCisgICAgICAgICAgICAgICAgc3RhcnRYLCBn
ZW9tZXRyeS0+cG9pbnQueSwgbmV4dEdseXBoIC0gbGFzdEZyb20sCisgICAgICAgICAgICAgICAg
Y3VycmVudFJlbmRlcmVyLT5zeW50aGV0aWNCb2xkT2Zmc2V0LCBjdXJyZW50UmVuZGVyZXItPmZv
bnQuc3ludGhldGljT2JsaXF1ZSk7CiAgICAgICAgICAgICBsYXN0RnJvbSA9IG5leHRHbHlwaDsK
LSAgICAgICAgICAgIGN1cnJlbnRGb250ID0gZm9udEJ1ZmZlcltuZXh0R2x5cGhdOworICAgICAg
ICAgICAgY3VycmVudFJlbmRlcmVyID0gbmV4dFJlbmRlcmVyOwogICAgICAgICAgICAgc3RhcnRY
ID0gbmV4dFg7CiAgICAgICAgIH0KICAgICAgICAgbmV4dFggKz0gYWR2YW5jZXNbbmV4dEdseXBo
XS53aWR0aDsKICAgICAgICAgbmV4dEdseXBoKys7CiAgICAgfQotICAgIF9kcmF3R2x5cGhzKGN1
cnJlbnRGb250LCBzdHlsZS0+dGV4dENvbG9yLCAmZ2x5cGhCdWZmZXJbbGFzdEZyb21dLCAmYWR2
YW5jZXNbbGFzdEZyb21dLCBzdGFydFgsIGdlb21ldHJ5LT5wb2ludC55LCBuZXh0R2x5cGggLSBs
YXN0RnJvbSk7CisgICAgZHJhd0dseXBocyhjdXJyZW50UmVuZGVyZXItPmZvbnQuZm9udCwgc3R5
bGUtPnRleHRDb2xvciwgJmdseXBoQnVmZmVyW2xhc3RGcm9tXSwgJmFkdmFuY2VzW2xhc3RGcm9t
XSwKKyAgICAgICAgc3RhcnRYLCBnZW9tZXRyeS0+cG9pbnQueSwgbmV4dEdseXBoIC0gbGFzdEZy
b20sCisgICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c3ludGhldGljQm9sZE9mZnNldCwgY3VycmVu
dFJlbmRlcmVyLT5mb250LnN5bnRoZXRpY09ibGlxdWUpOwogCiAgICAgaWYgKGFkdmFuY2VzICE9
IGxvY2FsQWR2YW5jZUJ1ZmZlcikgewogICAgICAgICBmcmVlKGFkdmFuY2VzKTsKICAgICAgICAg
ZnJlZSh3aWR0aEJ1ZmZlcik7CiAgICAgICAgIGZyZWUoZ2x5cGhCdWZmZXIpOwotICAgICAgICBm
cmVlKGZvbnRCdWZmZXIpOworICAgICAgICBmcmVlKHJlbmRlcmVyQnVmZmVyKTsKICAgICB9CiB9
CiAKQEAgLTExMjgsMjAgKzk4OSwyMSBAQCBzdGF0aWMgY29uc3QgY2hhciAqam9pbmluZ05hbWVz
W10gPSB7CiB9OwogI2VuZGlmCiAKLS0gKGZsb2F0KV9mbG9hdFdpZHRoRm9yUnVuOihjb25zdCBX
ZWJDb3JlVGV4dFJ1biAqKXJ1biBzdHlsZTooY29uc3QgV2ViQ29yZVRleHRTdHlsZSAqKXN0eWxl
IHdpZHRoczooZmxvYXQgKil3aWR0aEJ1ZmZlciBmb250czooTlNGb250ICoqKWZvbnRCdWZmZXIg
Z2x5cGhzOihDR0dseXBoICopZ2x5cGhCdWZmZXIgc3RhcnRQb3NpdGlvbjooZmxvYXQgKilzdGFy
dFBvc2l0aW9uIG51bUdseXBoczooaW50ICopX251bUdseXBocworLSAoZmxvYXQpZmxvYXRXaWR0
aEZvclJ1bjooY29uc3QgV2ViQ29yZVRleHRSdW4gKilydW4gc3R5bGU6KGNvbnN0IFdlYkNvcmVU
ZXh0U3R5bGUgKilzdHlsZSB3aWR0aHM6KGZsb2F0ICopd2lkdGhCdWZmZXIgc3Vic3RpdHV0ZVJl
bmRlcmVyczooV2ViVGV4dFJlbmRlcmVyICoqKXJlbmRlcmVyQnVmZmVyCisgICAgZ2x5cGhzOihD
R0dseXBoICopZ2x5cGhCdWZmZXIgc3RhcnRQb3NpdGlvbjooZmxvYXQgKilzdGFydFBvc2l0aW9u
IG51bUdseXBoczooaW50ICopX251bUdseXBocwogewogICAgIGlmIChzaG91bGRVc2VBVFNVKHJ1
bikpCiAgICAgICAgIHJldHVybiBbc2VsZiBfQVRTVV9mbG9hdFdpZHRoRm9yUnVuOnJ1biBzdHls
ZTpzdHlsZV07CiAgICAgCi0gICAgcmV0dXJuIFtzZWxmIF9DR19mbG9hdFdpZHRoRm9yUnVuOnJ1
biBzdHlsZTpzdHlsZSB3aWR0aHM6d2lkdGhCdWZmZXIgZm9udHM6Zm9udEJ1ZmZlciBnbHlwaHM6
Z2x5cGhCdWZmZXIgc3RhcnRQb3NpdGlvbjpzdGFydFBvc2l0aW9uIG51bUdseXBoczpfbnVtR2x5
cGhzXTsKLQorICAgIHJldHVybiBbc2VsZiBfQ0dfZmxvYXRXaWR0aEZvclJ1bjpydW4gc3R5bGU6
c3R5bGUgd2lkdGhzOndpZHRoQnVmZmVyIHN1YnN0aXR1dGVSZW5kZXJlcnM6cmVuZGVyZXJCdWZm
ZXIgZ2x5cGhzOmdseXBoQnVmZmVyIHN0YXJ0UG9zaXRpb246c3RhcnRQb3NpdGlvbiBudW1HbHlw
aHM6X251bUdseXBoc107CiB9CiAKLS0gKGZsb2F0KV9DR19mbG9hdFdpZHRoRm9yUnVuOihjb25z
dCBXZWJDb3JlVGV4dFJ1biAqKXJ1biBzdHlsZTooY29uc3QgV2ViQ29yZVRleHRTdHlsZSAqKXN0
eWxlIHdpZHRoczogKGZsb2F0ICopd2lkdGhCdWZmZXIgZm9udHM6IChOU0ZvbnQgKiopZm9udEJ1
ZmZlciBnbHlwaHM6IChDR0dseXBoICopZ2x5cGhCdWZmZXIgc3RhcnRQb3NpdGlvbjooZmxvYXQg
KilzdGFydFBvc2l0aW9uIG51bUdseXBoczogKGludCAqKV9udW1HbHlwaHMKKy0gKGZsb2F0KV9D
R19mbG9hdFdpZHRoRm9yUnVuOihjb25zdCBXZWJDb3JlVGV4dFJ1biAqKXJ1biBzdHlsZTooY29u
c3QgV2ViQ29yZVRleHRTdHlsZSAqKXN0eWxlIHdpZHRoczooZmxvYXQgKil3aWR0aEJ1ZmZlciBz
dWJzdGl0dXRlUmVuZGVyZXJzOihXZWJUZXh0UmVuZGVyZXIgKiopcmVuZGVyZXJCdWZmZXIKKyAg
ICBnbHlwaHM6KENHR2x5cGggKilnbHlwaEJ1ZmZlciBzdGFydFBvc2l0aW9uOihmbG9hdCAqKXN0
YXJ0UG9zaXRpb24gbnVtR2x5cGhzOihpbnQgKilfbnVtR2x5cGhzCiB7CiAgICAgZmxvYXQgX25l
eHRXaWR0aDsKICAgICBDaGFyYWN0ZXJXaWR0aEl0ZXJhdG9yIHdpZHRoSXRlcmF0b3I7Ci0gICAg
TlNGb250ICpmb250VXNlZCA9IDA7CisgICAgV2ViVGV4dFJlbmRlcmVyICpyZW5kZXJlclVzZWQg
PSBuaWw7CiAgICAgQVRTR2x5cGhSZWYgZ2x5cGhVc2VkOwogICAgIGludCBudW1HbHlwaHMgPSAw
OwogICAgIApAQCAtMTE0OSwxMSArMTAxMSwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciAqam9pbmlu
Z05hbWVzW10gPSB7CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24pCiAgICAgICAgICpzdGFydFBvc2l0
aW9uID0gd2lkdGhJdGVyYXRvci53aWR0aFRvU3RhcnQ7CiAgICAgd2hpbGUgKHdpZHRoSXRlcmF0
b3IuY3VycmVudENoYXJhY3RlciA8ICh1bnNpZ25lZCl3aWR0aEl0ZXJhdG9yLnJ1bi0+dG8pIHsK
LSAgICAgICAgX25leHRXaWR0aCA9IHdpZHRoRm9yTmV4dENoYXJhY3Rlcigmd2lkdGhJdGVyYXRv
ciwgJmdseXBoVXNlZCwgJmZvbnRVc2VkKTsKKyAgICAgICAgX25leHRXaWR0aCA9IHdpZHRoRm9y
TmV4dENoYXJhY3Rlcigmd2lkdGhJdGVyYXRvciwgJmdseXBoVXNlZCwgJnJlbmRlcmVyVXNlZCk7
CiAgICAgICAgIGlmIChfbmV4dFdpZHRoID09IElOVkFMSURfV0lEVEgpCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgaWYgKGZvbnRCdWZmZXIpCi0gICAgICAgICAgICBmb250QnVmZmVyW251
bUdseXBoc10gPSBmb250VXNlZDsKKyAgICAgICAgaWYgKHJlbmRlcmVyQnVmZmVyKQorICAgICAg
ICAgICAgcmVuZGVyZXJCdWZmZXJbbnVtR2x5cGhzXSA9IHJlbmRlcmVyVXNlZDsKICAgICAgICAg
aWYgKGdseXBoQnVmZmVyKQogICAgICAgICAgICAgZ2x5cGhCdWZmZXJbbnVtR2x5cGhzXSA9IGds
eXBoVXNlZDsKICAgICAgICAgaWYgKHdpZHRoQnVmZmVyKQpAQCAtMTE2Nyw5OSArMTAyOSwzMCBA
QCBzdGF0aWMgY29uc3QgY2hhciAqam9pbmluZ05hbWVzW10gPSB7CiAgICAgcmV0dXJuIHdpZHRo
SXRlcmF0b3IucnVuV2lkdGhTb0ZhcjsKIH0KIAotLSAoQVRTR2x5cGhSZWYpX2V4dGVuZFVuaWNv
ZGVDaGFyYWN0ZXJUb0dseXBoTWFwVG9JbmNsdWRlOihVbmljb2RlQ2hhciljCi17Ci0gICAgVW5p
Y29kZUdseXBoTWFwICptYXAgPSAoVW5pY29kZUdseXBoTWFwICopY2FsbG9jICgxLCBzaXplb2Yo
VW5pY29kZUdseXBoTWFwKSk7Ci0gICAgQVRTTGF5b3V0UmVjb3JkICpnbHlwaFJlY29yZDsKLQlj
aGFyIGdseXBoVmVjdG9yW1dLR2x5cGhWZWN0b3JTaXplXTsKLSAgICBVbmljb2RlQ2hhciBlbmQs
IHN0YXJ0OwotICAgIHVuc2lnbmVkIGJsb2NrU2l6ZTsKLSAgICBBVFNHbHlwaFJlZiBnbHlwaElE
OwotICAgIAotICAgIGlmICh1bmljb2RlQ2hhcmFjdGVyVG9HbHlwaE1hcCA9PSAwKQotICAgICAg
ICBibG9ja1NpemUgPSBJTklUSUFMX0JMT0NLX1NJWkU7Ci0gICAgZWxzZQotICAgICAgICBibG9j
a1NpemUgPSBJTkNSRU1FTlRBTF9CTE9DS19TSVpFOwotICAgIHN0YXJ0ID0gKGMgLyBibG9ja1Np
emUpICogYmxvY2tTaXplOwotICAgIGVuZCA9IHN0YXJ0ICsgKGJsb2NrU2l6ZSAtIDEpOwotICAg
ICAgICAKLSAgICBMT0coRm9udENhY2hlLCAiJUAgKDB4JTA0eCkgYWRkaW5nIGdseXBocyBmb3Ig
MHglMDR4IHRvIDB4JTA0eCIsIGZvbnQsIGMsIHN0YXJ0LCBlbmQpOwotCi0gICAgbWFwLT5zdGFy
dFJhbmdlID0gc3RhcnQ7Ci0gICAgbWFwLT5lbmRSYW5nZSA9IGVuZDsKLSAgICAKLSAgICB1bnNp
Z25lZCBpLCBjb3VudCA9IGVuZCAtIHN0YXJ0ICsgMTsKLSAgICBVbmljb2RlQ2hhciBidWZmZXJb
SU5DUkVNRU5UQUxfQkxPQ0tfU0laRSsyXTsKLSAgICAKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291
bnQ7IGkrKyl7Ci0gICAgICAgIGJ1ZmZlcltpXSA9IGkrc3RhcnQ7Ci0gICAgfQotCi0gICAgT1NT
dGF0dXMgc3RhdHVzOwotICAgIHN0YXR1cyA9IFdLSW5pdGlhbGl6ZUdseXBoVmVjdG9yKGNvdW50
KjIsICZnbHlwaFZlY3Rvcik7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0Vycil7Ci0gICAgICAgIC8v
IFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgaW5kaWNhdGVzIGEgYmFkIGZvbnQhICBJZiBpdCBk
b2VzIHRoZQotICAgICAgICAvLyBmb250IHN1YnN0aXR1dGlvbiBjb2RlIHdpbGwgZmluZCBhbiBh
bHRlcm5hdGUgZm9udC4KLSAgICAgICAgZnJlZShtYXApOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgCi0gICAgW3NlbGYgX2NvbnZlcnRVbmljb2RlQ2hhcmFjdGVyczogJmJ1ZmZlclsw
XSBsZW5ndGg6IGNvdW50IHRvR2x5cGhzOiAmZ2x5cGhWZWN0b3JdOwotICAgIHVuc2lnbmVkIG51
bUdseXBocyA9IFdLR2V0R2x5cGhWZWN0b3JOdW1HbHlwaHMoJmdseXBoVmVjdG9yKTsKLSAgICBp
ZiAobnVtR2x5cGhzICE9IGNvdW50KXsKLSAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFw
cGVuLCBpbmRpY2F0ZXMgYSBiYWQgZm9udCEgIElmIGl0IGRvZXMgdGhlCi0gICAgICAgIC8vIGZv
bnQgc3Vic3RpdHV0aW9uIGNvZGUgd2lsbCBmaW5kIGFuIGFsdGVybmF0ZSBmb250LgotICAgICAg
ICBmcmVlKG1hcCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAgICAgICAgIAotICAg
IG1hcC0+Z2x5cGhzID0gKEdseXBoRW50cnkgKiltYWxsb2MgKGNvdW50ICogc2l6ZW9mKEdseXBo
RW50cnkpKTsKLSAgICBnbHlwaFJlY29yZCA9IFdLR2V0R2x5cGhWZWN0b3JGaXJzdFJlY29yZCgm
Z2x5cGhWZWN0b3IpOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAg
IG1hcC0+Z2x5cGhzW2ldLmdseXBoID0gZ2x5cGhSZWNvcmQtPmdseXBoSUQ7Ci0gICAgICAgIG1h
cC0+Z2x5cGhzW2ldLmZvbnQgPSAwOwotICAgICAgICBnbHlwaFJlY29yZCA9IChBVFNMYXlvdXRS
ZWNvcmQgKikoKGNoYXIgKilnbHlwaFJlY29yZCArIFdLR2V0R2x5cGhWZWN0b3JSZWNvcmRTaXpl
KCZnbHlwaFZlY3RvcikpOwotICAgIH0KLSAgICBXS0NsZWFyR2x5cGhWZWN0b3IoJmdseXBoVmVj
dG9yKTsKLSAgICAKLSAgICBpZiAodW5pY29kZUNoYXJhY3RlclRvR2x5cGhNYXAgPT0gMCkKLSAg
ICAgICAgdW5pY29kZUNoYXJhY3RlclRvR2x5cGhNYXAgPSBtYXA7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIFVuaWNvZGVHbHlwaE1hcCAqbGFzdE1hcCA9IHVuaWNvZGVDaGFyYWN0ZXJUb0dseXBoTWFw
OwotICAgICAgICB3aGlsZSAobGFzdE1hcC0+bmV4dCAhPSAwKQotICAgICAgICAgICAgbGFzdE1h
cCA9IGxhc3RNYXAtPm5leHQ7Ci0gICAgICAgIGxhc3RNYXAtPm5leHQgPSBtYXA7Ci0gICAgfQot
Ci0gICAgZ2x5cGhJRCA9IG1hcC0+Z2x5cGhzW2MgLSBzdGFydF0uZ2x5cGg7Ci0gICAgCi0gICAg
cmV0dXJuIGdseXBoSUQ7Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZUdseXBoRW50cnlGb3JDaGFyYWN0
ZXI6KFVuaUNoYXIpYyBnbHlwaElEOihBVFNHbHlwaFJlZilnbHlwaElEIGZvbnQ6KE5TRm9udCAq
KXN1YnN0aXR1dGVGb250CistICh2b2lkKXVwZGF0ZUdseXBoRW50cnlGb3JDaGFyYWN0ZXI6KFVu
aWNvZGVDaGFyKWMgZ2x5cGhJRDooQVRTR2x5cGhSZWYpZ2x5cGhJRCBzdWJzdGl0dXRlUmVuZGVy
ZXI6KFdlYlRleHRSZW5kZXJlciAqKXN1YnN0aXR1dGVSZW5kZXJlcgogewotICAgIEdseXBoTWFw
ICpsYXN0TWFwID0gY2hhcmFjdGVyVG9HbHlwaE1hcDsKLSAgICB3aGlsZSAobGFzdE1hcCAhPSAw
KXsKLSAgICAgICAgaWYgKGMgPj0gbGFzdE1hcC0+c3RhcnRSYW5nZSAmJiBjIDw9IGxhc3RNYXAt
PmVuZFJhbmdlKXsKLSAgICAgICAgICAgIGxhc3RNYXAtPmdseXBoc1tjIC0gbGFzdE1hcC0+c3Rh
cnRSYW5nZV0uZ2x5cGggPSBnbHlwaElEOwotICAgICAgICAgICAgLy8gVGhpcyBmb250IHdpbGwg
bGVhay4gIE5vIHByb2JsZW0gdGhvdWdoLCBpdCBoYXMgdG8gc3RpY2sgYXJvdW5kCi0gICAgICAg
ICAgICAvLyBmb3JldmVyLiAgTWF4IHRoZW9yZXRpY2FsIHJldGFpbiBjb3VudHMgYXBwbGllZCBo
ZXJlIHdpbGwgYmUKLSAgICAgICAgICAgIC8vIG51bV9mb250c19vbl9zeXN0ZW0gKiBudW1fZ2x5
cGhzX2luX2ZvbnQuCi0gICAgICAgICAgICBsYXN0TWFwLT5nbHlwaHNbYyAtIGxhc3RNYXAtPnN0
YXJ0UmFuZ2VdLmZvbnQgPSBbc3Vic3RpdHV0ZUZvbnQgcmV0YWluXTsKKyAgICBHbHlwaE1hcCAq
bWFwOworICAgIGZvciAobWFwID0gY2hhcmFjdGVyVG9HbHlwaE1hcDsgbWFwOyBtYXAgPSBtYXAt
Pm5leHQpIHsKKyAgICAgICAgVW5pY29kZUNoYXIgc3RhcnQgPSBtYXAtPnN0YXJ0UmFuZ2U7Cisg
ICAgICAgIGlmIChjID49IHN0YXJ0ICYmIGMgPD0gbWFwLT5lbmRSYW5nZSkgeworICAgICAgICAg
ICAgaW50IGkgPSBjIC0gc3RhcnQ7CisgICAgICAgICAgICBtYXAtPmdseXBoc1tpXS5nbHlwaCA9
IGdseXBoSUQ7CisgICAgICAgICAgICAvLyBUaGlzIHJlbmRlcmVyIHdpbGwgbGVhay4KKyAgICAg
ICAgICAgIC8vIE5vIHByb2JsZW0gdGhvdWdoOyB3ZSB3YW50IGl0IHRvIHN0aWNrIGFyb3VuZCBm
b3JldmVyLgorICAgICAgICAgICAgLy8gTWF4IHRoZW9yZXRpY2FsIHJldGFpbiBjb3VudHMgYXBw
bGllZCBoZXJlIHdpbGwgYmUgbnVtX2ZvbnRzX29uX3N5c3RlbSAqIG51bV9nbHlwaHNfaW5fZm9u
dC4KKyAgICAgICAgICAgIG1hcC0+Z2x5cGhzW2ldLnN1YnN0aXR1dGVSZW5kZXJlciA9IFtzdWJz
dGl0dXRlUmVuZGVyZXIgcmV0YWluXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGxhc3RNYXAgPSBsYXN0TWFwLT5uZXh0OwogICAgIH0KIH0KIAotLSAoQVRTR2x5cGhS
ZWYpX2V4dGVuZENoYXJhY3RlclRvR2x5cGhNYXBUb0luY2x1ZGU6KFVuaUNoYXIpIGMKKy0gKEFU
U0dseXBoUmVmKWV4dGVuZENoYXJhY3RlclRvR2x5cGhNYXBUb0luY2x1ZGU6KFVuaWNvZGVDaGFy
KWMKIHsKLSAgICBHbHlwaE1hcCAqbWFwID0gKEdseXBoTWFwICopY2FsbG9jICgxLCBzaXplb2Yo
R2x5cGhNYXApKTsKKyAgICBHbHlwaE1hcCAqbWFwID0gKEdseXBoTWFwICopY2FsbG9jKDEsIHNp
emVvZihHbHlwaE1hcCkpOwogICAgIEFUU0xheW91dFJlY29yZCAqZ2x5cGhSZWNvcmQ7Ci0JY2hh
ciBnbHlwaFZlY3RvcltXS0dseXBoVmVjdG9yU2l6ZV07Ci0gICAgVW5pQ2hhciBlbmQsIHN0YXJ0
OworICAgIGNoYXIgZ2x5cGhWZWN0b3JbV0tHbHlwaFZlY3RvclNpemVdOworICAgIFVuaWNvZGVD
aGFyIGVuZCwgc3RhcnQ7CiAgICAgdW5zaWduZWQgYmxvY2tTaXplOwotICAgIEFUU0dseXBoUmVm
IGdseXBoSUQ7CiAgICAgCiAgICAgaWYgKGNoYXJhY3RlclRvR2x5cGhNYXAgPT0gMCkKICAgICAg
ICAgYmxvY2tTaXplID0gSU5JVElBTF9CTE9DS19TSVpFOwpAQCAtMTI3MywyMyArMTA2NiwzNCBA
QCBzdGF0aWMgY29uc3QgY2hhciAqam9pbmluZ05hbWVzW10gPSB7CiAgICAgbWFwLT5zdGFydFJh
bmdlID0gc3RhcnQ7CiAgICAgbWFwLT5lbmRSYW5nZSA9IGVuZDsKICAgICAKLSAgICB1bnNpZ25l
ZCBpLCBjb3VudCA9IGVuZCAtIHN0YXJ0ICsgMTsKLSAgICBzaG9ydCB1bnNpZ25lZCBidWZmZXJb
SU5DUkVNRU5UQUxfQkxPQ0tfU0laRSsyXTsKLSAgICAKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291
bnQ7IGkrKykgewotICAgICAgICBidWZmZXJbaV0gPSBpK3N0YXJ0OwotICAgIH0KLQotICAgIGlm
IChzdGFydCA9PSAwKSB7Ci0gICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCBy
ZW5kZXIgYXQgYWxsLgotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMHgyMDsgKytpKQotICAgICAg
ICAgICAgYnVmZmVyW2ldID0gWkVST19XSURUSF9TUEFDRTsKLSAgICAgICAgYnVmZmVyWzB4N0Zd
ID0gWkVST19XSURUSF9TUEFDRTsKLQotICAgICAgICAvLyBCdXQgXG4sIFx0LCBhbmQgbm9uYnJl
YWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgYnVmZmVyWydcbidd
ID0gJyAnOwotICAgICAgICBidWZmZXJbJ1x0J10gPSAnICc7Ci0gICAgICAgIGJ1ZmZlcltOT19C
UkVBS19TUEFDRV0gPSAnICc7CisgICAgdW5zaWduZWQgaTsKKyAgICB1bnNpZ25lZCBjb3VudCA9
IGVuZCAtIHN0YXJ0ICsgMTsKKyAgICB1bnNpZ25lZCBzaG9ydCBidWZmZXJbSU5DUkVNRU5UQUxf
QkxPQ0tfU0laRSAqIDIgKyAyXTsKKyAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGg7CisKKyAgICBp
ZiAoc3RhcnQgPCAweDEwMDAwKSB7CisgICAgICAgIGJ1ZmZlckxlbmd0aCA9IGNvdW50OworICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9
IGkgKyBzdGFydDsKKworICAgICAgICBpZiAoc3RhcnQgPT0gMCkgeworICAgICAgICAgICAgLy8g
Q29udHJvbCBjaGFyYWN0ZXJzIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCisgICAgICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgMHgyMDsgKytpKQorICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IFpF
Uk9fV0lEVEhfU1BBQ0U7CisgICAgICAgICAgICBidWZmZXJbMHg3Rl0gPSBaRVJPX1dJRFRIX1NQ
QUNFOworCisgICAgICAgICAgICAvLyBCdXQgXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2Ug
bXVzdCByZW5kZXIgYXMgYSBzcGFjZS4KKyAgICAgICAgICAgIGJ1ZmZlclsnXG4nXSA9ICcgJzsK
KyAgICAgICAgICAgIGJ1ZmZlclsnXHQnXSA9ICcgJzsKKyAgICAgICAgICAgIGJ1ZmZlcltOT19C
UkVBS19TUEFDRV0gPSAnICc7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBidWZm
ZXJMZW5ndGggPSBjb3VudCAqIDI7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7CisgICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKKyAgICAgICAgICAgIGJ1ZmZlcltp
ICogMl0gPSBVMTZfTEVBRChjKTsKKyAgICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2
X1RSQUlMKGMpOworICAgICAgICB9CiAgICAgfQogCiAgICAgT1NTdGF0dXMgc3RhdHVzID0gV0tJ
bml0aWFsaXplR2x5cGhWZWN0b3IoY291bnQsICZnbHlwaFZlY3Rvcik7CkBAIC0xMzAwLDIwICsx
MTA0LDE5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpqb2luaW5nTmFtZXNbXSA9IHsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCi0gICAgW3NlbGYgX2NvbnZlcnRDaGFyYWN0ZXJzOiAmYnVmZmVy
WzBdIGxlbmd0aDogY291bnQgdG9HbHlwaHM6ICZnbHlwaFZlY3Rvcl07CisgICAgW3NlbGYgX2Nv
bnZlcnRDaGFyYWN0ZXJzOiZidWZmZXJbMF0gbGVuZ3RoOmJ1ZmZlckxlbmd0aCB0b0dseXBoczom
Z2x5cGhWZWN0b3JdOwogICAgIHVuc2lnbmVkIG51bUdseXBocyA9IFdLR2V0R2x5cGhWZWN0b3JO
dW1HbHlwaHMoJmdseXBoVmVjdG9yKTsKLSAgICBpZiAobnVtR2x5cGhzICE9IGNvdW50KXsKLSAg
ICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBwZXJoYXBzIGluZGljYXRlcyBhIGJh
ZCBmb250ISAgSWYgaXQgZG9lcyB0aGUKLSAgICAgICAgLy8gZm9udCBzdWJzdGl0dXRpb24gY29k
ZSB3aWxsIGZpbmQgYW4gYWx0ZXJuYXRlIGZvbnQuCisgICAgaWYgKG51bUdseXBocyAhPSBjb3Vu
dCkgeworICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIHBlcmhhcHMgaW5kaWNh
dGVzIGEgYmFkIGZvbnQ/CisgICAgICAgIC8vIElmIGl0IGRvZXMgaGFwcGVuLCB0aGUgZm9udCBz
dWJzdGl0dXRpb24gY29kZSB3aWxsIGZpbmQgYW4gYWx0ZXJuYXRlIGZvbnQuCiAgICAgICAgIGZy
ZWUobWFwKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgICAgICAgICAgCi0gICAgbWFw
LT5nbHlwaHMgPSAoR2x5cGhFbnRyeSAqKW1hbGxvYyAoY291bnQgKiBzaXplb2YoR2x5cGhFbnRy
eSkpOworCisgICAgbWFwLT5nbHlwaHMgPSAoR2x5cGhFbnRyeSAqKWNhbGxvYyhjb3VudCwgc2l6
ZW9mKEdseXBoRW50cnkpKTsKICAgICBnbHlwaFJlY29yZCA9IChBVFNMYXlvdXRSZWNvcmQgKilX
S0dldEdseXBoVmVjdG9yRmlyc3RSZWNvcmQoZ2x5cGhWZWN0b3IpOwogICAgIGZvciAoaSA9IDA7
IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIG1hcC0+Z2x5cGhzW2ldLmdseXBoID0gZ2x5cGhS
ZWNvcmQtPmdseXBoSUQ7Ci0gICAgICAgIG1hcC0+Z2x5cGhzW2ldLmZvbnQgPSAwOwogICAgICAg
ICBnbHlwaFJlY29yZCA9IChBVFNMYXlvdXRSZWNvcmQgKikoKGNoYXIgKilnbHlwaFJlY29yZCAr
IFdLR2V0R2x5cGhWZWN0b3JSZWNvcmRTaXplKGdseXBoVmVjdG9yKSk7CiAgICAgfQogICAgIFdL
Q2xlYXJHbHlwaFZlY3RvcigmZ2x5cGhWZWN0b3IpOwpAQCAtMTMyNyw0MCArMTEzMCwzNCBAQCBz
dGF0aWMgY29uc3QgY2hhciAqam9pbmluZ05hbWVzW10gPSB7CiAgICAgICAgIGxhc3RNYXAtPm5l
eHQgPSBtYXA7CiAgICAgfQogCi0gICAgZ2x5cGhJRCA9IG1hcC0+Z2x5cGhzW2MgLSBzdGFydF0u
Z2x5cGg7Ci0gICAgCisgICAgQVRTR2x5cGhSZWYgZ2x5cGhJRCA9IG1hcC0+Z2x5cGhzW2MgLSBz
dGFydF0uZ2x5cGg7CisKICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGNoYXJhY3RlcnMgMDA3Ri0w
MEEwLgotICAgIGlmIChnbHlwaElEID09IDAgJiYgYyA+PSAweDdGICYmIGMgPD0gMHhBMCl7Ci0g
ICAgICAgIGdseXBoSUQgPSBXS0dldERlZmF1bHRHbHlwaEZvckNoYXIoZm9udCwgYyk7CisgICAg
aWYgKGdseXBoSUQgPT0gMCAmJiBjID49IDB4N0YgJiYgYyA8PSAweEEwKSB7CisgICAgICAgIGds
eXBoSUQgPSBXS0dldERlZmF1bHRHbHlwaEZvckNoYXIoZm9udC5mb250LCBjKTsKICAgICAgICAg
bWFwLT5nbHlwaHNbYyAtIHN0YXJ0XS5nbHlwaCA9IGdseXBoSUQ7Ci0gICAgICAgIG1hcC0+Z2x5
cGhzW2MgLSBzdGFydF0uZm9udCA9IDA7CiAgICAgfQogCiAgICAgcmV0dXJuIGdseXBoSUQ7CiB9
CiAKLQotLSAoV2lkdGhNYXAgKilfZXh0ZW5kR2x5cGhUb1dpZHRoTWFwVG9JbmNsdWRlOihBVFNH
bHlwaFJlZilnbHlwaElEIGZvbnQ6KE5TRm9udCAqKXN1YkZvbnQKKy0gKFdpZHRoTWFwICopX2V4
dGVuZEdseXBoVG9XaWR0aE1hcFRvSW5jbHVkZTooQVRTR2x5cGhSZWYpZ2x5cGhJRAogewotICAg
IFdpZHRoTWFwICptYXAgPSAoV2lkdGhNYXAgKiljYWxsb2MgKDEsIHNpemVvZihXaWR0aE1hcCkp
LCAqKnJvb3RNYXA7CisgICAgV2lkdGhNYXAgKm1hcCA9IChXaWR0aE1hcCAqKWNhbGxvYygxLCBz
aXplb2YoV2lkdGhNYXApKTsKICAgICB1bnNpZ25lZCBlbmQ7CiAgICAgQVRTR2x5cGhSZWYgc3Rh
cnQ7CiAgICAgdW5zaWduZWQgYmxvY2tTaXplOwogICAgIHVuc2lnbmVkIGksIGNvdW50OwogICAg
IAotICAgIGlmIChzdWJGb250ICYmIHN1YkZvbnQgIT0gZm9udCkKLSAgICAgICAgcm9vdE1hcCA9
ICZtYXBGb3JTdWJzdGl0dXRlRm9udChzZWxmLHN1YkZvbnQpLT5tYXA7Ci0gICAgZWxzZQotICAg
ICAgICByb290TWFwID0gJmdseXBoVG9XaWR0aE1hcDsKLSAgICAgICAgCi0gICAgaWYgKCpyb290
TWFwID09IDApewotICAgICAgICBpZiAoWyhzdWJGb250ID8gc3ViRm9udCA6IGZvbnQpIG51bWJl
ck9mR2x5cGhzXSA8IElOSVRJQUxfQkxPQ0tfU0laRSkKLSAgICAgICAgICAgIGJsb2NrU2l6ZSA9
IFtmb250IG51bWJlck9mR2x5cGhzXTsKKyAgICBOU0ZvbnQgKmYgPSBmb250LmZvbnQ7CisgICAg
aWYgKGdseXBoVG9XaWR0aE1hcCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChbZiBudW1iZXJPZkds
eXBoc10gPCBJTklUSUFMX0JMT0NLX1NJWkUpCisgICAgICAgICAgICBibG9ja1NpemUgPSBbZiBu
dW1iZXJPZkdseXBoc107CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICBibG9ja1NpemUgPSBJ
TklUSUFMX0JMT0NLX1NJWkU7Ci0gICAgfQotICAgIGVsc2UKKyAgICB9IGVsc2UgewogICAgICAg
ICBibG9ja1NpemUgPSBJTkNSRU1FTlRBTF9CTE9DS19TSVpFOworICAgIH0KICAgICBpZiAoYmxv
Y2tTaXplID09IDApIHsKICAgICAgICAgc3RhcnQgPSAwOwogICAgIH0gZWxzZSB7CkBAIC0xMzc2
LDI4ICsxMTczLDIyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpqb2luaW5nTmFtZXNbXSA9IHsKICAg
ICBtYXAtPmVuZFJhbmdlID0gZW5kOwogICAgIGNvdW50ID0gZW5kIC0gc3RhcnQgKyAxOwogCi0g
ICAgbWFwLT53aWR0aHMgPSAoV2lkdGhFbnRyeSAqKW1hbGxvYyAoY291bnQgKiBzaXplb2YoV2lk
dGhFbnRyeSkpOworICAgIG1hcC0+d2lkdGhzID0gKFdlYkdseXBoV2lkdGggKiltYWxsb2MoY291
bnQgKiBzaXplb2YoV2ViR2x5cGhXaWR0aCkpOworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgICAgICBtYXAtPndpZHRoc1tpXSA9IFVOSU5JVElBTElaRURfR0xZUEhfV0lEVEg7
CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKyl7Ci0gICAgICAgIG1hcC0+d2lkdGhz
W2ldLndpZHRoID0gVU5JTklUSUFMSVpFRF9HTFlQSF9XSURUSDsKLSAgICB9Ci0KLSAgICBpZiAo
KnJvb3RNYXAgPT0gMCkKLSAgICAgICAgKnJvb3RNYXAgPSBtYXA7CisgICAgaWYgKGdseXBoVG9X
aWR0aE1hcCA9PSAwKQorICAgICAgICBnbHlwaFRvV2lkdGhNYXAgPSBtYXA7CiAgICAgZWxzZSB7
Ci0gICAgICAgIFdpZHRoTWFwICpsYXN0TWFwID0gKnJvb3RNYXA7CisgICAgICAgIFdpZHRoTWFw
ICpsYXN0TWFwID0gZ2x5cGhUb1dpZHRoTWFwOwogICAgICAgICB3aGlsZSAobGFzdE1hcC0+bmV4
dCAhPSAwKQogICAgICAgICAgICAgbGFzdE1hcCA9IGxhc3RNYXAtPm5leHQ7CiAgICAgICAgIGxh
c3RNYXAtPm5leHQgPSBtYXA7CiAgICAgfQogCi0jaWZkZWYgX1RJTUlORwotICAgIExPRyhGb250
Q2FjaGUsICIlQCB0b3RhbCB0aW1lIHRvIGFkdmFuY2VzIGxvb2t1cCAlZiBzZWNvbmRzIiwgZm9u
dCwgdG90YWxDR0dldEFkdmFuY2VzVGltZSk7Ci0jZW5kaWYKICAgICByZXR1cm4gbWFwOwogfQog
Ci0KIC0gKHZvaWQpX2luaXRpYWxpemVBVFNVU3R5bGUKIHsKICAgICAvLyBUaGUgdHdvIE5TRm9u
dCBjYWxscyBpbiB0aGlzIG1ldGhvZCAocG9pbnRTaXplIGFuZCBfYXRzRm9udElEKQpAQCAtMTQw
NywyMyArMTE5OCwyMyBAQCBzdGF0aWMgY29uc3QgY2hhciAqam9pbmluZ05hbWVzW10gPSB7CiAg
ICAgICAgIE9TU3RhdHVzIHN0YXR1czsKICAgICAgICAgQnl0ZUNvdW50IHByb3BUYWJsZVNpemU7
CiAgICAgICAgIAotICAgICAgICBzdGF0dXMgPSBBVFNVQ3JlYXRlU3R5bGUoJl9BVFNVU3N0eWxl
KTsKKyAgICAgICAgc3RhdHVzID0gQVRTVUNyZWF0ZVN0eWxlKCZfQVRTVVN0eWxlKTsKICAgICAg
ICAgaWYoc3RhdHVzICE9IG5vRXJyKQotICAgICAgICAgICAgRkFUQUxfQUxXQVlTICgiQVRTVUNy
ZWF0ZVN0eWxlIGZhaWxlZCAoJWQpIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIEZBVEFMX0FMV0FZ
UygiQVRTVUNyZWF0ZVN0eWxlIGZhaWxlZCAoJWQpIiwgc3RhdHVzKTsKICAgICAKLSAgICAgICAg
QVRTVUZvbnRJRCBmb250SUQgPSBXS0dldE5TRm9udEFUU1VGb250SWQoZm9udCk7Ci0gICAgICAg
IGlmIChmb250SUQgPT0gMCl7Ci0gICAgICAgICAgICBBVFNVRGlzcG9zZVN0eWxlKF9BVFNVU3N0
eWxlKTsKLSAgICAgICAgICAgIEVSUk9SICgidW5hYmxlIHRvIGdldCBBVFNVRm9udElEIGZvciAl
QCIsIGZvbnQpOworICAgICAgICBBVFNVRm9udElEIGZvbnRJRCA9IFdLR2V0TlNGb250QVRTVUZv
bnRJZChmb250LmZvbnQpOworICAgICAgICBpZiAoZm9udElEID09IDApIHsKKyAgICAgICAgICAg
IEFUU1VEaXNwb3NlU3R5bGUoX0FUU1VTdHlsZSk7CisgICAgICAgICAgICBFUlJPUigidW5hYmxl
IHRvIGdldCBBVFNVRm9udElEIGZvciAlQCIsIGZvbnQuZm9udCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlICgxLC0xKTsKLSAgICAgICAgRml4ZWQg
Zm9udFNpemUgPSBGbG9hdFRvRml4ZWQoW2ZvbnQgcG9pbnRTaXplXSk7CisgICAgICAgIEZpeGVk
IGZvbnRTaXplID0gRmxvYXRUb0ZpeGVkKFtmb250LmZvbnQgcG9pbnRTaXplXSk7CiAgICAgICAg
IEFUU1VBdHRyaWJ1dGVUYWcgc3R5bGVUYWdzW10gPSB7IGtBVFNVU2l6ZVRhZywga0FUU1VGb250
VGFnLCBrQVRTVUZvbnRNYXRyaXhUYWd9OwogICAgICAgICBCeXRlQ291bnQgc3R5bGVTaXplc1td
ID0geyAgc2l6ZW9mKEZpeGVkKSwgc2l6ZW9mKEFUU1VGb250SUQpLCBzaXplb2YoQ0dBZmZpbmVU
cmFuc2Zvcm0pIH07CiAgICAgICAgIEFUU1VBdHRyaWJ1dGVWYWx1ZVB0ciBzdHlsZVZhbHVlc1td
ID0geyAmZm9udFNpemUsICZmb250SUQsICZ0cmFuc2Zvcm0gIH07Ci0gICAgICAgIHN0YXR1cyA9
IEFUU1VTZXRBdHRyaWJ1dGVzIChfQVRTVVNzdHlsZSwgMywgc3R5bGVUYWdzLCBzdHlsZVNpemVz
LCBzdHlsZVZhbHVlcyk7CisgICAgICAgIHN0YXR1cyA9IEFUU1VTZXRBdHRyaWJ1dGVzIChfQVRT
VVN0eWxlLCAzLCBzdHlsZVRhZ3MsIHN0eWxlU2l6ZXMsIHN0eWxlVmFsdWVzKTsKICAgICAgICAg
aWYoc3RhdHVzICE9IG5vRXJyKQogICAgICAgICAgICAgRkFUQUxfQUxXQVlTICgiQVRTVVNldEF0
dHJpYnV0ZXMgZmFpbGVkICglZCkiLCBzdGF0dXMpOwogICAgICAgICBzdGF0dXMgPSBBVFNGb250
R2V0VGFibGUoZm9udElELCAncHJvcCcsIDAsIDAsIDAsICZwcm9wVGFibGVTaXplKTsKQEAgLTE0
NTIsMTkgKzEyNDMsMjIgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmpvaW5pbmdOYW1lc1tdID0gewog
ICAgIAogICAgIFtzZWxmIF9pbml0aWFsaXplQVRTVVN0eWxlXTsKICAgICAKLSAgICAvLyBGSVhN
RTogVGhpcyBpcyBtaXNzaW5nIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgdGhhdCB0aGUgQ29yZUdy
YXBoaWNzIGNvZGUgcGF0aCBoYXM6Ci0gICAgLy8gLSBCb3RoIFxuIGFuZCBub25icmVha2luZyBz
cGFjZSByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAvLyAtIEFsbCBvdGhlciBjb250cm9sIGNoYXJh
Y3RlcnMgbXVzdCBub3QgcmVuZGVyIGF0IGFsbCAob3RoZXIgY29kZSBwYXRoIHVzZXMgemVyby13
aWR0aCBzcGFjZXMpLgorICAgIC8vIEZJWE1FOiBUaGlzIGlzIGN1cnJlbnRseSBtaXNzaW5nIHRo
ZSBmb2xsb3dpbmcgcmVxdWlyZWQgZmVhdHVyZXMgdGhhdCB0aGUgQ29yZUdyYXBoaWNzIGNvZGUg
cGF0aCBoYXM6CisgICAgLy8gLSBcbiwgXHQsIGFuZCBub25icmVha2luZyBzcGFjZSByZW5kZXIg
YXMgYSBzcGFjZS4KKyAgICAvLyAtIE90aGVyIGNvbnRyb2wgY2hhcmFjdGVycyBkbyBub3QgcmVu
ZGVyIChvdGhlciBjb2RlIHBhdGggdXNlcyB6ZXJvLXdpZHRoIHNwYWNlcykuCisgICAgLy8gLSBT
bWFsbCBjYXBzLgorICAgIC8vIC0gU3ludGhlc2l6ZWQgYm9sZC4KKyAgICAvLyAtIFN5bnRoZXNp
emVkIG9ibGlxdWUuCiAKICAgICBydW5MZW5ndGggPSBydW4tPnRvIC0gcnVuLT5mcm9tOwogICAg
IHN0YXR1cyA9IEFUU1VDcmVhdGVUZXh0TGF5b3V0V2l0aFRleHRQdHIoCiAgICAgICAgICAgICBy
dW4tPmNoYXJhY3RlcnMsCi0gICAgICAgICAgICBydW4tPmZyb20sICAgICAgICAgICAvLyBvZmZz
ZXQKLSAgICAgICAgICAgIHJ1bkxlbmd0aCwgICAgICAgIC8vIGxlbmd0aAotICAgICAgICAgICAg
cnVuLT5sZW5ndGgsICAgICAgICAgLy8gdG90YWwgbGVuZ3RoCisgICAgICAgICAgICBydW4tPmZy
b20sICAgICAgLy8gb2Zmc2V0CisgICAgICAgICAgICBydW5MZW5ndGgsICAgICAgLy8gbGVuZ3Ro
CisgICAgICAgICAgICBydW4tPmxlbmd0aCwgICAgLy8gdG90YWwgbGVuZ3RoCiAgICAgICAgICAg
ICAxLCAgICAgICAgICAgICAgLy8gc3R5bGVSdW5Db3VudAotICAgICAgICAgICAgJnJ1bkxlbmd0
aCwgICAgLy8gbGVuZ3RoIG9mIHN0eWxlIHJ1bgotICAgICAgICAgICAgJl9BVFNVU3N0eWxlLCAK
KyAgICAgICAgICAgICZydW5MZW5ndGgsICAgICAvLyBsZW5ndGggb2Ygc3R5bGUgcnVuCisgICAg
ICAgICAgICAmX0FUU1VTdHlsZSwgCiAgICAgICAgICAgICAmbGF5b3V0KTsKICAgICBpZihzdGF0
dXMgIT0gbm9FcnIpCiAgICAgICAgIEZBVEFMX0FMV0FZUyAoIkFUU1VDcmVhdGVUZXh0TGF5b3V0
V2l0aFRleHRQdHIgZmFpbGVkKCVkKSIsIHN0YXR1cyk7CkBAIC0xNDcyLDEwICsxMjY2LDEwIEBA
IHN0YXRpYyBjb25zdCBjaGFyICpqb2luaW5nTmFtZXNbXSA9IHsKICAgICBDR0NvbnRleHRSZWYg
Y2dDb250ZXh0ID0gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250
ZXh0XSBncmFwaGljc1BvcnRdOwogICAgIEFUU0xpbmVMYXlvdXRPcHRpb25zIGxpbmVMYXlvdXRP
cHRpb25zID0gKGtBVFNMaW5lRnJhY3REaXNhYmxlIHwga0FUU0xpbmVEaXNhYmxlQXV0b0FkanVz
dERpc3BsYXlQb3MgfCBrQVRTTGluZVVzZURldmljZU1ldHJpY3MgfAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtBVFNMaW5lS2VlcFNwYWNlc091dE9mTWFy
Z2luIHwga0FUU0xpbmVIYXNOb0hhbmdlcnMpOwotICAgIEJvb2xlYW4gcnRsID0gc3R5bGUtPnJ0
bDsKKyAgICBCb29sZWFuIFJUTCA9IHN0eWxlLT5SVEw7CiAgICAgQVRTVUF0dHJpYnV0ZVRhZyB0
YWdzW10gPSB7IGtBVFNVQ0dDb250ZXh0VGFnLCBrQVRTVUxpbmVMYXlvdXRPcHRpb25zVGFnLCBr
QVRTVUxpbmVEaXJlY3Rpb25UYWcgfTsKICAgICBCeXRlQ291bnQgc2l6ZXNbXSA9IHsgc2l6ZW9m
KENHQ29udGV4dFJlZiksIHNpemVvZihBVFNMaW5lTGF5b3V0T3B0aW9ucyksIHNpemVvZihCb29s
ZWFuKSAgfTsKLSAgICBBVFNVQXR0cmlidXRlVmFsdWVQdHIgdmFsdWVzW10gPSB7ICZjZ0NvbnRl
eHQsICZsaW5lTGF5b3V0T3B0aW9ucywgJnJ0bCB9OworICAgIEFUU1VBdHRyaWJ1dGVWYWx1ZVB0
ciB2YWx1ZXNbXSA9IHsgJmNnQ29udGV4dCwgJmxpbmVMYXlvdXRPcHRpb25zLCAmUlRMIH07CiAg
ICAgCiAgICAgc3RhdHVzID0gQVRTVVNldExheW91dENvbnRyb2xzKGxheW91dCwgMywgdGFncywg
c2l6ZXMsIHZhbHVlcyk7CiAgICAgaWYoc3RhdHVzICE9IG5vRXJyKQpAQCAtMTQ4NywxNiArMTI4
MSwxNSBAQCBzdGF0aWMgY29uc3QgY2hhciAqam9pbmluZ05hbWVzW10gPSB7CiAKICAgICBzdWJz
dGl0dXRlT2Zmc2V0ID0gcnVuLT5mcm9tOwogICAgIHdoaWxlICgoc3RhdHVzID0gQVRTVU1hdGNo
Rm9udHNUb1RleHQobGF5b3V0LCBzdWJzdGl0dXRlT2Zmc2V0LCBrQVRTVVRvVGV4dEVuZCwgJkFU
U1VTdWJzdGl0dXRlRm9udCwgJnN1YnN0aXR1dGVPZmZzZXQsICZzdWJzdGl0dXRlTGVuZ3RoKSkg
PT0ga0FUU1VGb250c01hdGNoZWQgfHwgc3RhdHVzID09IGtBVFNVRm9udHNOb3RNYXRjaGVkKSB7
Ci0gICAgICAgIE5TRm9udCAqc3Vic3RpdHV0ZUZvbnQgPSBbc2VsZiBfc3Vic3RpdHV0ZUZvbnRG
b3JDaGFyYWN0ZXJzOnJ1bi0+Y2hhcmFjdGVycytzdWJzdGl0dXRlT2Zmc2V0IGxlbmd0aDpzdWJz
dGl0dXRlTGVuZ3RoIGZhbWlsaWVzOnN0eWxlLT5mYW1pbGllc107Ci0gICAgICAgIGlmIChzdWJz
dGl0dXRlRm9udCkgewotICAgICAgICAgICAgV2ViVGV4dFJlbmRlcmVyICpzdWJzdGl0dXRlUmVu
ZGVyZXIgPSBbW1dlYlRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVuZGVyZXJX
aXRoRm9udDpzdWJzdGl0dXRlRm9udCB1c2luZ1ByaW50ZXJGb250OnVzaW5nUHJpbnRlckZvbnRd
OworICAgICAgICBXZWJUZXh0UmVuZGVyZXIgKnN1YnN0aXR1dGVSZW5kZXJlciA9IFtzZWxmIHN1
YnN0aXR1dGVSZW5kZXJlckZvckNoYXJhY3RlcnM6cnVuLT5jaGFyYWN0ZXJzK3N1YnN0aXR1dGVP
ZmZzZXQgbGVuZ3RoOnN1YnN0aXR1dGVMZW5ndGggZmFtaWxpZXM6c3R5bGUtPmZhbWlsaWVzXTsK
KyAgICAgICAgaWYgKHN1YnN0aXR1dGVSZW5kZXJlcikgewogICAgICAgICAgICAgW3N1YnN0aXR1
dGVSZW5kZXJlciBfaW5pdGlhbGl6ZUFUU1VTdHlsZV07Ci0gICAgICAgICAgICBpZiAoc3Vic3Rp
dHV0ZVJlbmRlcmVyICYmIHN1YnN0aXR1dGVSZW5kZXJlci0+X0FUU1VTc3R5bGUpCi0gICAgICAg
ICAgICAgICAgQVRTVVNldFJ1blN0eWxlKGxheW91dCwgc3Vic3RpdHV0ZVJlbmRlcmVyLT5fQVRT
VVNzdHlsZSwgc3Vic3RpdHV0ZU9mZnNldCwgc3Vic3RpdHV0ZUxlbmd0aCk7CisgICAgICAgICAg
ICBpZiAoc3Vic3RpdHV0ZVJlbmRlcmVyICYmIHN1YnN0aXR1dGVSZW5kZXJlci0+X0FUU1VTdHls
ZSkKKyAgICAgICAgICAgICAgICBBVFNVU2V0UnVuU3R5bGUobGF5b3V0LCBzdWJzdGl0dXRlUmVu
ZGVyZXItPl9BVFNVU3R5bGUsIHN1YnN0aXR1dGVPZmZzZXQsIHN1YnN0aXR1dGVMZW5ndGgpOwog
ICAgICAgICAgICAgLy8gaWdub3JpbmcgZXJyb3JzCiAgICAgICAgIH0KICAgICAgICAgc3Vic3Rp
dHV0ZU9mZnNldCArPSBzdWJzdGl0dXRlTGVuZ3RoOwotICAgIH07CisgICAgfQogICAgIC8vIGln
bm9yaW5nIGVycm9ycyBpbiBmb250IHN1YnN0aXR1dGlvbgogICAgICAgICAKICAgICByZXR1cm4g
bGF5b3V0OwpAQCAtMTU5OSw3ICsxMzkyLDcgQEAgc3RhdGljIFdlYkNvcmVUZXh0UnVuIGFwcGx5
TWlycm9yaW5nVG9SdQogICAgIGlmIChzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKSB7CiAgICAgICAg
IHN3YXBwZWRSdW4gPSByZXZlcnNlQ2hhcmFjdGVyc0luUnVuKHJ1bik7CiAgICAgICAgIGFSdW4g
PSAmc3dhcHBlZFJ1bjsKLSAgICB9IGVsc2UgaWYgKHN0eWxlLT5ydGwgJiYgIUFUU1VNaXJyb3Jz
KSB7CisgICAgfSBlbHNlIGlmIChzdHlsZS0+UlRMICYmICFBVFNVTWlycm9ycykgewogICAgICAg
ICBzd2FwcGVkUnVuID0gYXBwbHlNaXJyb3JpbmdUb1J1bihydW4pOwogICAgICAgICBhUnVuID0g
JnN3YXBwZWRSdW47CiAgICAgfQpAQCAtMTY0MSwyMCArMTQzNCwxOSBAQCBzdGF0aWMgV2ViQ29y
ZVRleHRSdW4gYXBwbHlNaXJyb3JpbmdUb1J1CiAKICAgICBmbG9hdCB5UG9zID0gZ2VvbWV0cnkt
PnVzZUZvbnRNZXRyaWNzRm9yU2VsZWN0aW9uWUFuZEhlaWdodCA/IGdlb21ldHJ5LT5wb2ludC55
IC0gW3NlbGYgYXNjZW50XSA6IGdlb21ldHJ5LT5zZWxlY3Rpb25ZOwogICAgIGZsb2F0IGhlaWdo
dCA9IGdlb21ldHJ5LT51c2VGb250TWV0cmljc0ZvclNlbGVjdGlvbllBbmRIZWlnaHQgPyBbc2Vs
ZiBsaW5lU3BhY2luZ10gOiBnZW9tZXRyeS0+c2VsZWN0aW9uSGVpZ2h0OwotICAgIGlmIChzdHls
ZS0+cnRsIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQpeworICAgIGlmIChzdHlsZS0+UlRMIHx8
IHN0eWxlLT52aXN1YWxseU9yZGVyZWQpIHsKICAgICAgICAgV2ViQ29yZVRleHRSdW4gY29tcGxl
dGVSdW4gPSAqYVJ1bjsKICAgICAgICAgY29tcGxldGVSdW4uZnJvbSA9IDA7CiAgICAgICAgIGNv
bXBsZXRlUnVuLnRvID0gYVJ1bi0+bGVuZ3RoOwogICAgICAgICBmbG9hdCBjb21wbGV0ZVJ1bldp
ZHRoID0gW3NlbGYgZmxvYXRXaWR0aEZvclJ1bjomY29tcGxldGVSdW4gc3R5bGU6c3R5bGUgd2lk
dGhzOjBdOwogICAgICAgICBbTlNCZXppZXJQYXRoIGZpbGxSZWN0Ok5TTWFrZVJlY3QoZ2VvbWV0
cnktPnBvaW50LnggKyBjb21wbGV0ZVJ1bldpZHRoIC0gKHNlbGVjdGVkTGVmdFgtZ2VvbWV0cnkt
PnBvaW50LngpIC0gYmFja2dyb3VuZFdpZHRoLCB5UG9zLCBiYWNrZ3JvdW5kV2lkdGgsIGhlaWdo
dCldOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICBbTlNCZXppZXJQ
YXRoIGZpbGxSZWN0Ok5TTWFrZVJlY3Qoc2VsZWN0ZWRMZWZ0WCwgeVBvcywgYmFja2dyb3VuZFdp
ZHRoLCBoZWlnaHQpXTsKICAgICB9CiAKLSAgICBBVFNVRGlzcG9zZVRleHRMYXlvdXQgKGxheW91
dCk7IC8vIElnbm9yZSB0aGUgZXJyb3IuICBOb3RoaW5nIHdlIGNhbiBkbyBhbnl3YXkuCisgICAg
QVRTVURpc3Bvc2VUZXh0TGF5b3V0KGxheW91dCk7CiAKLSAgICBpZiAoc3R5bGUtPnZpc3VhbGx5
T3JkZXJlZCB8fCAoc3R5bGUtPnJ0bCAmJiAhQVRTVU1pcnJvcnMpKQorICAgIGlmIChzdHlsZS0+
dmlzdWFsbHlPcmRlcmVkIHx8IChzdHlsZS0+UlRMICYmICFBVFNVTWlycm9ycykpCiAgICAgICAg
IGZyZWUgKCh2b2lkICopc3dhcHBlZFJ1bi5jaGFyYWN0ZXJzKTsKIH0KIApAQCAtMTY3NCw3ICsx
NDY2LDcgQEAgc3RhdGljIFdlYkNvcmVUZXh0UnVuIGFwcGx5TWlycm9yaW5nVG9SdQogICAgIGlm
IChzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKSB7CiAgICAgICAgIHN3YXBwZWRSdW4gPSByZXZlcnNl
Q2hhcmFjdGVyc0luUnVuKHJ1bik7CiAgICAgICAgIGFSdW4gPSAmc3dhcHBlZFJ1bjsKLSAgICB9
IGVsc2UgaWYgKHN0eWxlLT5ydGwgJiYgIUFUU1VNaXJyb3JzKSB7CisgICAgfSBlbHNlIGlmIChz
dHlsZS0+UlRMICYmICFBVFNVTWlycm9ycykgewogICAgICAgICBzd2FwcGVkUnVuID0gYXBwbHlN
aXJyb3JpbmdUb1J1bihydW4pOwogICAgICAgICBhUnVuID0gJnN3YXBwZWRSdW47CiAgICAgfQpA
QCAtMTcxMCw3ICsxNTAyLDcgQEAgc3RhdGljIFdlYkNvcmVUZXh0UnVuIGFwcGx5TWlycm9yaW5n
VG9SdQogCiAgICAgQVRTVURpc3Bvc2VUZXh0TGF5b3V0IChsYXlvdXQpOyAvLyBJZ25vcmUgdGhl
IGVycm9yLiAgTm90aGluZyB3ZSBjYW4gZG8gYW55d2F5LgogICAgIAotICAgIGlmIChzdHlsZS0+
dmlzdWFsbHlPcmRlcmVkIHx8IChzdHlsZS0+cnRsICYmICFBVFNVTWlycm9ycykpCisgICAgaWYg
KHN0eWxlLT52aXN1YWxseU9yZGVyZWQgfHwgKHN0eWxlLT5SVEwgJiYgIUFUU1VNaXJyb3JzKSkK
ICAgICAgICAgZnJlZSAoKHZvaWQgKilzd2FwcGVkUnVuLmNoYXJhY3RlcnMpOwogfQogCkBAIC0x
NzIxLDcgKzE1MTMsNiBAQCBzdGF0aWMgV2ViQ29yZVRleHRSdW4gYXBwbHlNaXJyb3JpbmdUb1J1
CiAKICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOwogICAgIEFUU1VUZXh0TGF5b3V0IGxheW91dDsK
LSAgICBVbmlDaGFyQXJyYXlPZmZzZXQgcHJpbWFyeU9mZnNldCA9IDA7CiAgICAgVW5pQ2hhckFy
cmF5T2Zmc2V0IHNlY29uZGFyeU9mZnNldCA9IDA7CiAgICAgT1NTdGF0dXMgc3RhdHVzOwogICAg
IEJvb2xlYW4gaXNMZWFkaW5nOwpAQCAtMTczMiwxNCArMTUyMywxNCBAQCBzdGF0aWMgV2ViQ29y
ZVRleHRSdW4gYXBwbHlNaXJyb3JpbmdUb1J1CiAgICAgaWYgKHN0eWxlLT52aXN1YWxseU9yZGVy
ZWQpIHsKICAgICAgICAgc3dhcHBlZFJ1biA9IHJldmVyc2VDaGFyYWN0ZXJzSW5SdW4ocnVuKTsK
ICAgICAgICAgYVJ1biA9ICZzd2FwcGVkUnVuOwotICAgIH0gZWxzZSBpZiAoc3R5bGUtPnJ0bCAm
JiAhQVRTVU1pcnJvcnMpIHsKKyAgICB9IGVsc2UgaWYgKHN0eWxlLT5SVEwgJiYgIUFUU1VNaXJy
b3JzKSB7CiAgICAgICAgIHN3YXBwZWRSdW4gPSBhcHBseU1pcnJvcmluZ1RvUnVuKHJ1bik7CiAg
ICAgICAgIGFSdW4gPSAmc3dhcHBlZFJ1bjsKICAgICB9CiAKICAgICBsYXlvdXQgPSBbc2VsZiBf
Y3JlYXRlQVRTVVRleHRMYXlvdXRGb3JSdW46YVJ1biBzdHlsZTpzdHlsZV07CiAKLSAgICBwcmlt
YXJ5T2Zmc2V0ID0gYVJ1bi0+ZnJvbTsKKyAgICBVbmlDaGFyQXJyYXlPZmZzZXQgcHJpbWFyeU9m
ZnNldCA9IGFSdW4tPmZyb207CiAgICAgCiAgICAgLy8gRklYTUU6IE5vIGlkZWEgaG93IHRvIGF2
b2lkIGluY2x1ZGluZyBwYXJ0aWFsIGdseXBocy4gICBOb3QgZXZlbiBzdXJlIGlmIHRoYXQncyB0
aGUgYmVoYXZpb3IKICAgICAvLyB0aGlzIHlpZWxkcyBub3cuCkBAIC0xNzUzLDkgKzE1NDQsOCBA
QCBzdGF0aWMgV2ViQ29yZVRleHRSdW4gYXBwbHlNaXJyb3JpbmdUb1J1CiAgICAgICAgCiAgICAg
QVRTVURpc3Bvc2VUZXh0TGF5b3V0KGxheW91dCk7CiAgICAgCi0gICAgaWYgKHN0eWxlLT52aXN1
YWxseU9yZGVyZWQgfHwgKHN0eWxlLT5ydGwgJiYgIUFUU1VNaXJyb3JzKSkgeworICAgIGlmIChz
dHlsZS0+dmlzdWFsbHlPcmRlcmVkIHx8IChzdHlsZS0+UlRMICYmICFBVFNVTWlycm9ycykpCiAg
ICAgICAgIGZyZWUgKCh2b2lkICopc3dhcHBlZFJ1bi5jaGFyYWN0ZXJzKTsKLSAgICB9CiAKICAg
ICByZXR1cm4gb2Zmc2V0IC0gYVJ1bi0+ZnJvbTsKIH0KQEAgLTE3NzMsNyArMTU2Myw3IEBAIHN0
YXRpYyBXZWJDb3JlVGV4dFJ1biBhcHBseU1pcnJvcmluZ1RvUnUKICAgICAgICAgd2lkdGggPSBb
c2VsZiBmbG9hdFdpZHRoRm9yUnVuOnJ1biBzdHlsZTpzdHlsZSB3aWR0aHM6bmlsXTsKICAgICAg
ICAgZGVsdGEgLT0gd2lkdGg7CiAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBydW4tPmxlbmd0aCkg
ewotICAgICAgICAgICAgZmxvYXQgdyA9IHdpZHRoRm9yTmV4dENoYXJhY3Rlcigmd2lkdGhJdGVy
YXRvciwgMCwgMCk7CisgICAgICAgICAgICBmbG9hdCB3ID0gd2lkdGhGb3JOZXh0Q2hhcmFjdGVy
KCZ3aWR0aEl0ZXJhdG9yLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgIGlmICh3ID09IElOVkFM
SURfV0lEVEgpIHsKICAgICAgICAgICAgICAgICAvLyBTb21ldGhpbmcgdmVyeSBiYWQgaGFwcGVu
ZWQsIGxpa2Ugd2Ugb25seSBoYXZlIGhhbGYgb2YgYSBzdXJyb2dhdGUgcGFpci4KICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTE3OTMsNyArMTU4Myw3IEBAIHN0YXRpYyBXZWJDb3JlVGV4dFJ1
biBhcHBseU1pcnJvcmluZ1RvUnUKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIHdo
aWxlIChvZmZzZXQgPCBydW4tPmxlbmd0aCkgewotICAgICAgICAgICAgZmxvYXQgdyA9IHdpZHRo
Rm9yTmV4dENoYXJhY3Rlcigmd2lkdGhJdGVyYXRvciwgMCwgMCk7CisgICAgICAgICAgICBmbG9h
dCB3ID0gd2lkdGhGb3JOZXh0Q2hhcmFjdGVyKCZ3aWR0aEl0ZXJhdG9yLCBOVUxMLCBOVUxMKTsK
ICAgICAgICAgICAgIGlmICh3ID09IElOVkFMSURfV0lEVEgpIHsKICAgICAgICAgICAgICAgICAv
LyBTb21ldGhpbmcgdmVyeSBiYWQgaGFwcGVuZWQsIGxpa2Ugd2Ugb25seSBoYXZlIGhhbGYgb2Yg
YSBzdXJyb2dhdGUgcGFpci4KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE4MzAsNyArMTYy
MCw2IEBAIHN0YXRpYyB2b2lkIGZyZWVXaWR0aE1hcChXaWR0aE1hcCAqbWFwKQogICAgIH0KIH0K
IAotCiBzdGF0aWMgdm9pZCBmcmVlR2x5cGhNYXAoR2x5cGhNYXAgKm1hcCkKIHsKICAgICB3aGls
ZSAobWFwKSB7CkBAIC0xODQxLDc4ICsxNjMwLDI2IEBAIHN0YXRpYyB2b2lkIGZyZWVHbHlwaE1h
cChHbHlwaE1hcCAqbWFwKQogICAgIH0KIH0KIAotCi1zdGF0aWMgdm9pZCBmcmVlVW5pY29kZUds
eXBoTWFwKFVuaWNvZGVHbHlwaE1hcCAqbWFwKQotewotICAgIHdoaWxlIChtYXApIHsKLSAgICAg
ICAgVW5pY29kZUdseXBoTWFwICpuZXh0ID0gbWFwLT5uZXh0OwotICAgICAgICBmcmVlKG1hcC0+
Z2x5cGhzKTsKLSAgICAgICAgZnJlZShtYXApOwotICAgICAgICBtYXAgPSBuZXh0OwotICAgIH0K
LX0KLQotCi1zdGF0aWMgaW5saW5lIEFUU0dseXBoUmVmIGdseXBoRm9yQ2hhcmFjdGVyIChHbHlw
aE1hcCAqbWFwLCBVbmlDaGFyIGMsIE5TRm9udCAqKmZvbnQpCitzdGF0aWMgaW5saW5lIEFUU0ds
eXBoUmVmIGdseXBoRm9yQ2hhcmFjdGVyKEdseXBoTWFwICptYXAsIFVuaWNvZGVDaGFyIGMsIFdl
YlRleHRSZW5kZXJlciAqKnJlbmRlcmVyKQogewogICAgIGlmIChtYXAgPT0gMCkKICAgICAgICAg
cmV0dXJuIG5vbkdseXBoSUQ7CiAgICAgCiAgICAgLy8gdGhpcyBsb29wIGlzIGhvdCwgc28gaXQg
aXMgd3JpdHRlbiB0byBhdm9pZCBMU1Ugc3RhbGxzCiAgICAgd2hpbGUgKG1hcCkgewotICAgICAg
ICBVbmlDaGFyIHN0YXJ0ID0gbWFwLT5zdGFydFJhbmdlOworICAgICAgICBVbmljb2RlQ2hhciBz
dGFydCA9IG1hcC0+c3RhcnRSYW5nZTsKICAgICAgICAgR2x5cGhNYXAgKm5leHRNYXAgPSBtYXAt
Pm5leHQ7Ci0gICAgICAgIGlmIChjID49IHN0YXJ0ICYmIGMgPD0gbWFwLT5lbmRSYW5nZSl7Ci0g
ICAgICAgICAgICBHbHlwaEVudHJ5ICpnZSA9ICZtYXAtPmdseXBoc1tjLXN0YXJ0XTsKLSAgICAg
ICAgICAgICpmb250ID0gZ2UtPmZvbnQ7CisgICAgICAgIGlmIChjID49IHN0YXJ0ICYmIGMgPD0g
bWFwLT5lbmRSYW5nZSkgeworICAgICAgICAgICAgR2x5cGhFbnRyeSAqZ2UgPSAmbWFwLT5nbHlw
aHNbYyAtIHN0YXJ0XTsKKyAgICAgICAgICAgIFdlYlRleHRSZW5kZXJlciAqc3Vic3RpdHV0ZVJl
bmRlcmVyID0gZ2UtPnN1YnN0aXR1dGVSZW5kZXJlcjsKKyAgICAgICAgICAgIGlmIChzdWJzdGl0
dXRlUmVuZGVyZXIpCisgICAgICAgICAgICAgICAgKnJlbmRlcmVyID0gc3Vic3RpdHV0ZVJlbmRl
cmVyOwogICAgICAgICAgICAgcmV0dXJuIGdlLT5nbHlwaDsKICAgICAgICAgfQogICAgICAgICBt
YXAgPSBuZXh0TWFwOwogICAgIH0KLSAgICByZXR1cm4gbm9uR2x5cGhJRDsKLX0KLSAKLSAKLXN0
YXRpYyBpbmxpbmUgQVRTR2x5cGhSZWYgZ2x5cGhGb3JVbmljb2RlQ2hhcmFjdGVyIChVbmljb2Rl
R2x5cGhNYXAgKm1hcCwgVW5pY29kZUNoYXIgYywgTlNGb250ICoqZm9udCkKLXsKLSAgICBpZiAo
bWFwID09IDApCi0gICAgICAgIHJldHVybiBub25HbHlwaElEOwotICAgICAgICAKLSAgICB3aGls
ZSAobWFwKSB7Ci0gICAgICAgIGlmIChjID49IG1hcC0+c3RhcnRSYW5nZSAmJiBjIDw9IG1hcC0+
ZW5kUmFuZ2UpewotICAgICAgICAgICAgKmZvbnQgPSBtYXAtPmdseXBoc1tjLW1hcC0+c3RhcnRS
YW5nZV0uZm9udDsKLSAgICAgICAgICAgIHJldHVybiBtYXAtPmdseXBoc1tjLW1hcC0+c3RhcnRS
YW5nZV0uZ2x5cGg7Ci0gICAgICAgIH0KLSAgICAgICAgbWFwID0gbWFwLT5uZXh0OwotICAgIH0K
LSAgICByZXR1cm4gbm9uR2x5cGhJRDsKLX0KLSAKIAotI2lmZGVmIF9USU1JTkcgICAgICAgIAot
c3RhdGljIGRvdWJsZSB0b3RhbENHR2V0QWR2YW5jZXNUaW1lID0gMDsKLSNlbmRpZgotCi1zdGF0
aWMgaW5saW5lIFN1YnN0aXR1dGVGb250V2lkdGhNYXAgKm1hcEZvclN1YnN0aXR1dGVGb250KFdl
YlRleHRSZW5kZXJlciAqcmVuZGVyZXIsIE5TRm9udCAqZm9udCkKLXsKLSAgICBpbnQgaTsKLSAg
ICAKLSAgICBmb3IgKGkgPSAwOyBpIDwgcmVuZGVyZXItPm51bVN1YnN0aXR1dGVGb250V2lkdGhN
YXBzOyBpKyspewotICAgICAgICBpZiAoZm9udCA9PSByZW5kZXJlci0+c3Vic3RpdHV0ZUZvbnRX
aWR0aE1hcHNbaV0uZm9udCkKLSAgICAgICAgICAgIHJldHVybiAmcmVuZGVyZXItPnN1YnN0aXR1
dGVGb250V2lkdGhNYXBzW2ldOwotICAgIH0KLSAgICAKLSAgICBpZiAocmVuZGVyZXItPm51bVN1
YnN0aXR1dGVGb250V2lkdGhNYXBzID09IHJlbmRlcmVyLT5tYXhTdWJzdGl0dXRlRm9udFdpZHRo
TWFwcyl7Ci0gICAgICAgIHJlbmRlcmVyLT5tYXhTdWJzdGl0dXRlRm9udFdpZHRoTWFwcyA9IHJl
bmRlcmVyLT5tYXhTdWJzdGl0dXRlRm9udFdpZHRoTWFwcyAqIDI7Ci0gICAgICAgIHJlbmRlcmVy
LT5zdWJzdGl0dXRlRm9udFdpZHRoTWFwcyA9IHJlYWxsb2MgKHJlbmRlcmVyLT5zdWJzdGl0dXRl
Rm9udFdpZHRoTWFwcywgcmVuZGVyZXItPm1heFN1YnN0aXR1dGVGb250V2lkdGhNYXBzICogc2l6
ZW9mKFN1YnN0aXR1dGVGb250V2lkdGhNYXApKTsKLSAgICAgICAgZm9yIChpID0gcmVuZGVyZXIt
Pm51bVN1YnN0aXR1dGVGb250V2lkdGhNYXBzOyBpIDwgcmVuZGVyZXItPm1heFN1YnN0aXR1dGVG
b250V2lkdGhNYXBzOyBpKyspewotICAgICAgICAgICAgcmVuZGVyZXItPnN1YnN0aXR1dGVGb250
V2lkdGhNYXBzW2ldLmZvbnQgPSAwOwotICAgICAgICAgICAgcmVuZGVyZXItPnN1YnN0aXR1dGVG
b250V2lkdGhNYXBzW2ldLm1hcCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmVu
ZGVyZXItPnN1YnN0aXR1dGVGb250V2lkdGhNYXBzW3JlbmRlcmVyLT5udW1TdWJzdGl0dXRlRm9u
dFdpZHRoTWFwc10uZm9udCA9IGZvbnQ7Ci0gICAgcmV0dXJuICZyZW5kZXJlci0+c3Vic3RpdHV0
ZUZvbnRXaWR0aE1hcHNbcmVuZGVyZXItPm51bVN1YnN0aXR1dGVGb250V2lkdGhNYXBzKytdOwor
ICAgIHJldHVybiBub25HbHlwaElEOwogfQogCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ2hhcmFj
dGVyV2lkdGhJdGVyYXRvciAoQ2hhcmFjdGVyV2lkdGhJdGVyYXRvciAqaXRlcmF0b3IsIFdlYlRl
eHRSZW5kZXJlciAqcmVuZGVyZXIsIGNvbnN0IFdlYkNvcmVUZXh0UnVuICpydW4gLCBjb25zdCBX
ZWJDb3JlVGV4dFN0eWxlICpzdHlsZSkgCkBAIC0xOTUyLDkgKzE2ODksOCBAQCBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplQ2hhcmFjdGVyV2lkdGhJdGVyCiAgICAgICAgIENoYXJhY3RlcldpZHRoSXRl
cmF0b3Igc3RhcnRQb3NpdGlvbkl0ZXJhdG9yOwogICAgICAgICBpbml0aWFsaXplQ2hhcmFjdGVy
V2lkdGhJdGVyYXRvciAoJnN0YXJ0UG9zaXRpb25JdGVyYXRvciwgcmVuZGVyZXIsICZzdGFydFBv
c2l0aW9uUnVuLCBzdHlsZSk7CiAgICAgICAgIAotICAgICAgICB3aGlsZSAoc3RhcnRQb3NpdGlv
bkl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIgPCAodW5zaWduZWQpc3RhcnRQb3NpdGlvblJ1bi50
byl7Ci0gICAgICAgICAgICB3aWR0aEZvck5leHRDaGFyYWN0ZXIoJnN0YXJ0UG9zaXRpb25JdGVy
YXRvciwgMCwgMCk7Ci0gICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHN0YXJ0UG9zaXRpb25JdGVy
YXRvci5jdXJyZW50Q2hhcmFjdGVyIDwgKHVuc2lnbmVkKXN0YXJ0UG9zaXRpb25SdW4udG8pCisg
ICAgICAgICAgICB3aWR0aEZvck5leHRDaGFyYWN0ZXIoJnN0YXJ0UG9zaXRpb25JdGVyYXRvciwg
TlVMTCwgTlVMTCk7CiAgICAgICAgIGl0ZXJhdG9yLT53aWR0aFRvU3RhcnQgPSBzdGFydFBvc2l0
aW9uSXRlcmF0b3IucnVuV2lkdGhTb0ZhcjsKICAgICB9CiAgICAgZWxzZQpAQCAtMTk2OSwxOSAr
MTcwNSwxNSBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGNlaWxDdXJyZW50V2lkdGggKENoCiAgICAg
cmV0dXJuIGRlbHRhOwogfQogCi0vLyBBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy51bmljb2RlLm9y
Zy9QdWJsaWMvVU5JREFUQS9VQ0QuaHRtbCNDYW5vbmljYWxfQ29tYmluaW5nX0NsYXNzX1ZhbHVl
cwotI2RlZmluZSBISVJBR0FOQV9LQVRBS0FOQV9WT0lDSU5HX01BUktTIDgKLQogLy8gUmV0dXJu
IElOVkFMSURfV0lEVEggaWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgb3Igd2UncmUgYXQgdGhl
IGVuZCBvZiB0aGUgcmFuZ2UgaW4gdGhlIHJ1bi4KLXN0YXRpYyBmbG9hdCB3aWR0aEZvck5leHRD
aGFyYWN0ZXIoQ2hhcmFjdGVyV2lkdGhJdGVyYXRvciAqaXRlcmF0b3IsIEFUU0dseXBoUmVmICpn
bHlwaFVzZWQsIE5TRm9udCAqKmZvbnRVc2VkKQorc3RhdGljIGZsb2F0IHdpZHRoRm9yTmV4dENo
YXJhY3RlcihDaGFyYWN0ZXJXaWR0aEl0ZXJhdG9yICppdGVyYXRvciwgQVRTR2x5cGhSZWYgKmds
eXBoVXNlZCwgV2ViVGV4dFJlbmRlcmVyICoqcmVuZGVyZXJVc2VkKQogewogICAgIFdlYlRleHRS
ZW5kZXJlciAqcmVuZGVyZXIgPSBpdGVyYXRvci0+cmVuZGVyZXI7CiAgICAgY29uc3QgV2ViQ29y
ZVRleHRSdW4gKnJ1biA9IGl0ZXJhdG9yLT5ydW47CiAgICAgY29uc3QgV2ViQ29yZVRleHRTdHls
ZSAqc3R5bGUgPSBpdGVyYXRvci0+c3R5bGU7CiAgICAgdW5zaWduZWQgY3VycmVudENoYXJhY3Rl
ciA9IGl0ZXJhdG9yLT5jdXJyZW50Q2hhcmFjdGVyOwogCi0gICAgTlNGb250ICpfZm9udFVzZWQg
PSBuaWw7Ci0gICAgQVRTR2x5cGhSZWYgX2dseXBoVXNlZCA9IG5pbDsKKyAgICBBVFNHbHlwaFJl
ZiBnbHlwaCA9IDA7CiAgICAgCiAgICAgLy8gQ2hlY2sgZm9yIGVuZCBvZiBydW4uCiAgICAgaWYg
KGN1cnJlbnRDaGFyYWN0ZXIgPj0gKHVuc2lnbmVkKXJ1bi0+dG8pCkBAIC0xOTk5LDQ2ICsxNzMx
LDI3IEBAIHN0YXRpYyBmbG9hdCB3aWR0aEZvck5leHRDaGFyYWN0ZXIoQ2hhcmEKICAgICB1bnNp
Z25lZCBjbHVzdGVyTGVuZ3RoID0gMTsKICAgICBpZiAoVTE2X0lTX0xFQUQoYykpIHsKICAgICAg
ICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW5vdGhlciBjaGFyYWN0ZXIgYW5kIGl0J3MgYSBsb3cg
c3Vycm9nYXRlLgotICAgICAgICBVbmlDaGFyIGxvdzsKLSAgICAgICAgaWYgKGN1cnJlbnRDaGFy
YWN0ZXIgKyAxID49IHJ1bi0+bGVuZ3RoIHx8ICFVMTZfSVNfVFJBSUwoKGxvdyA9IGNwWzFdKSkp
IHsKLSAgICAgICAgICAgIC8vIEVycm9yISAgVGhlIHNlY29uZCBjb21wb25lbnQgb2YgdGhlIHN1
cnJvZ2F0ZSBwYWlyIGlzIG1pc3NpbmcuCisgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyICsg
MSA+PSBydW4tPmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBJTlZBTElEX1dJRFRIOworICAg
ICAgICBVbmlDaGFyIGxvdyA9IGNwWzFdOworICAgICAgICBpZiAoIVUxNl9JU19UUkFJTChsb3cp
KQogICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfV0lEVEg7Ci0gICAgICAgIH0KLQogICAgICAg
ICBjID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGMsIGxvdyk7CiAgICAgICAgIGNsdXN0ZXJMZW5n
dGggPSAyOwogICAgIH0KIAotICAgIC8vIElmIHNtYWxsLWNhcHMgY29udmVydCBsb3dlcmNhc2Ug
dG8gdXBwZXIuCi0gICAgQk9PTCB1c2VTbWFsbENhcHNGb250ID0gTk87Ci0gICAgaWYgKHJlbmRl
cmVyLT5pc1NtYWxsQ2Fwc1JlbmRlcmVyKSB7Ci0gICAgICAgIGlmICghdV9pc1VVcHBlcmNhc2Uo
YykpIHsKLSAgICAgICAgICAgIC8vIE9ubHkgdXNlIHNtYWxsIGNhcCBmb250IGlmIHRoZSB0aGUg
dXBwZXJjYXNlIHZlcnNpb24gb2YgdGhlIGNoYXJhY3RlcgotICAgICAgICAgICAgLy8gaXMgZGlm
ZmVyZW50IHRoYW4gdGhlIGxvd2VyY2FzZS4KLSAgICAgICAgICAgIFVuaWNvZGVDaGFyIG5ld0Mg
PSB1X3RvdXBwZXIoYyk7Ci0gICAgICAgICAgICBpZiAobmV3QyAhPSBjKSB7Ci0gICAgICAgICAg
ICAgICAgdXNlU21hbGxDYXBzRm9udCA9IFlFUzsKLSAgICAgICAgICAgICAgICBjID0gbmV3QzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBEZWFsIHdpdGgg
SGlyYWdhbmEgYW5kIEthdGFrYW5hIHZvaWNlZCBhbmQgc2VtaS12b2ljZWQgc3lsbGFibGVzLiAg
Tm9ybWFsaXplIGludG8KLSAgICAvLyBjb21wb3NlZCBmb3JtLCBhbmQgdGhlbiBsb29rIGZvciBn
bHlwaCB3aXRoIGJhc2UgKyBjb21iaW5lZCBtYXJrLgotICAgIGlmIChjID49IDB4MzA0MSAmJiBj
IDw9IDB4MzBGRSkgeyAvLyBFYXJseSBvdXQgdG8gbWluaW1pemUgcGVyZm9ybWFuY2UgaW1wYWN0
LiAgRG8gd2UgaGF2ZSBhIEhpcmFnYW5hL0thdGFrYW5hIGNoYXJhY3Rlcj8KKyAgICAvLyBEZWFs
IHdpdGggSGlyYWdhbmEgYW5kIEthdGFrYW5hIHZvaWNlZCBhbmQgc2VtaS12b2ljZWQgc3lsbGFi
bGVzLgorICAgIC8vIE5vcm1hbGl6ZSBpbnRvIGNvbXBvc2VkIGZvcm0sIGFuZCB0aGVuIGxvb2sg
Zm9yIGdseXBoIHdpdGggYmFzZSArIGNvbWJpbmVkIG1hcmsuCisgICAgaWYgKGMgPj0gMHgzMDQx
ICYmIGMgPD0gMHgzMEZFKSB7IC8vIEVhcmx5IG91dCB0byBtaW5pbWl6ZSBwZXJmb3JtYW5jZSBp
bXBhY3QuIERvIHdlIGhhdmUgYSBIaXJhZ2FuYS9LYXRha2FuYSBjaGFyYWN0ZXI/CiAgICAgICAg
IGlmIChjdXJyZW50Q2hhcmFjdGVyIDwgKHVuc2lnbmVkKXJ1bi0+dG8pIHsKICAgICAgICAgICAg
IFVuaWNvZGVDaGFyIG5leHRDaGFyYWN0ZXIgPSBydW4tPmNoYXJhY3RlcnNbY3VycmVudENoYXJh
Y3RlcisxXTsKICAgICAgICAgICAgIGlmICh1X2dldENvbWJpbmluZ0NsYXNzKG5leHRDaGFyYWN0
ZXIpID09IEhJUkFHQU5BX0tBVEFLQU5BX1ZPSUNJTkdfTUFSS1MpIHsKLSAgICAgICAgICAgICAg
ICBVQ2hhciBub3JtYWxpemVkQ2hhcmFjdGVyc1syXSA9IHsgMCwgMCB9OwotICAgICAgICAgICAg
ICAgIFVFcnJvckNvZGUgdVN0YXR1cyA9IDA7Ci0gICAgICAgICAgICAgICAgaW50MzJfdCByZXN1
bHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXpl
IGludG8gY29tcG9zZWQgZm9ybSB1c2luZyAzLjIgcnVsZXMuCi0gICAgICAgICAgICAgICAgcmVz
dWx0TGVuZ3RoID0gdW5vcm1fbm9ybWFsaXplKCZydW4tPmNoYXJhY3RlcnNbY3VycmVudENoYXJh
Y3Rlcl0sIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOT1JNX05GQywgVU5P
Uk1fVU5JQ09ERV8zXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZub3JtYWxp
emVkQ2hhcmFjdGVyc1swXSwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVT
dGF0dXMpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMZW5ndGggPT0gMSAmJiB1U3RhdHVz
ID09IDApeworICAgICAgICAgICAgICAgIFVDaGFyIG5vcm1hbGl6ZWRDaGFyYWN0ZXJzWzJdID0g
eyAwLCAwIH07CisgICAgICAgICAgICAgICAgVUVycm9yQ29kZSB1U3RhdHVzID0gMDsgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50MzJfdCByZXN1bHRMZW5ndGggPSB1bm9ybV9u
b3JtYWxpemUoJnJ1bi0+Y2hhcmFjdGVyc1tjdXJyZW50Q2hhcmFjdGVyXSwgMiwKKyAgICAgICAg
ICAgICAgICAgICAgVU5PUk1fTkZDLCBVTk9STV9VTklDT0RFXzNfMiwgJm5vcm1hbGl6ZWRDaGFy
YWN0ZXJzWzBdLCAyLCAmdVN0YXR1cyk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdExlbmd0
aCA9PSAxICYmIHVTdGF0dXMgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICBjID0gbm9ybWFs
aXplZENoYXJhY3RlcnNbMF07CiAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJMZW5ndGggPSAy
OwogICAgICAgICAgICAgICAgIH0KQEAgLTIwNDYsNTIgKzE3NTksMzkgQEAgc3RhdGljIGZsb2F0
IHdpZHRoRm9yTmV4dENoYXJhY3RlcihDaGFyYQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KHN0eWxlLT5ydGwpIHsKKyAgICBpZiAoc3R5bGUtPlJUTCkKICAgICAgICAgYyA9IHVfY2hhck1p
cnJvcihjKTsKLSAgICB9CiAgICAgCi0gICAgaWYgKGMgPD0gMHhGRkZGKSB7Ci0gICAgICAgIF9n
bHlwaFVzZWQgPSBnbHlwaEZvckNoYXJhY3RlcihyZW5kZXJlci0+Y2hhcmFjdGVyVG9HbHlwaE1h
cCwgYywgJl9mb250VXNlZCk7Ci0gICAgICAgIGlmIChfZ2x5cGhVc2VkID09IG5vbkdseXBoSUQp
IHsKLSAgICAgICAgICAgIF9nbHlwaFVzZWQgPSBbcmVuZGVyZXIgX2V4dGVuZENoYXJhY3RlclRv
R2x5cGhNYXBUb0luY2x1ZGU6Y107Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBf
Z2x5cGhVc2VkID0gZ2x5cGhGb3JVbmljb2RlQ2hhcmFjdGVyKHJlbmRlcmVyLT51bmljb2RlQ2hh
cmFjdGVyVG9HbHlwaE1hcCwgYywgJl9mb250VXNlZCk7Ci0gICAgICAgIGlmIChfZ2x5cGhVc2Vk
ID09IG5vbkdseXBoSUQpIHsKLSAgICAgICAgICAgIF9nbHlwaFVzZWQgPSBbcmVuZGVyZXIgX2V4
dGVuZFVuaWNvZGVDaGFyYWN0ZXJUb0dseXBoTWFwVG9JbmNsdWRlOmNdOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHJlbmRlcmluZyBpbiAnc21hbGwt
Y2FwcycgbW9kZS4KLSAgICAvLyBBU1NVTVBUSU9OOiAgV2UgYXNzdW1lIHRoZSBzYW1lIGZvbnQg
aW4gYSBzbWFsbGVyIHNpemUgaGFzCi0gICAgLy8gdGhlIHNhbWUgZ2x5cGhzIGFzIHRoZSBsYXJn
ZSBmb250LgotICAgIGlmICh1c2VTbWFsbENhcHNGb250KSB7Ci0gICAgICAgIGlmIChfZm9udFVz
ZWQgPT0gbmlsKQotICAgICAgICAgICAgX2ZvbnRVc2VkID0gW3JlbmRlcmVyIF9zbWFsbENhcHNG
b250XTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBQb3RlbnRpYWwgZm9yIG9wdGlt
aXphdGlvbi4gIFRoaXMgcGF0aCBzaG91bGQgb25seSBiZSB0YWtlbiBpZiB3ZSdyZQotICAgICAg
ICAgICAgLy8gdXNpbmcgYSBjYWNoZWQgc3Vic3RpdHV0ZWQgZm9udC4KLSAgICAgICAgICAgIF9m
b250VXNlZCA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6
X2ZvbnRVc2VkIHRvU2l6ZTpbX2ZvbnRVc2VkIHBvaW50U2l6ZV0gKiBTTUFMTENBUFNfRk9OVFNJ
WkVfTVVMVElQTElFUl07CisgICAgLy8gSWYgc21hbGwtY2FwcywgY29udmVydCBsb3dlcmNhc2Ug
dG8gdXBwZXIuCisgICAgaWYgKHN0eWxlLT5zbWFsbENhcHMgJiYgIXVfaXNVVXBwZXJjYXNlKGMp
KSB7CisgICAgICAgIFVuaWNvZGVDaGFyIG5ld0MgPSB1X3RvdXBwZXIoYyk7CisgICAgICAgIGlm
IChuZXdDICE9IGMpIHsKKyAgICAgICAgICAgIGMgPSBuZXdDOworICAgICAgICAgICAgcmVuZGVy
ZXIgPSBbcmVuZGVyZXIgc21hbGxDYXBzUmVuZGVyZXJdOwogICAgICAgICB9CiAgICAgfQorICAg
IAorICAgIGdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIocmVuZGVyZXItPmNoYXJhY3RlclRvR2x5
cGhNYXAsIGMsICZyZW5kZXJlcik7CisgICAgaWYgKGdseXBoID09IG5vbkdseXBoSUQpCisgICAg
ICAgIGdseXBoID0gW3JlbmRlcmVyIGV4dGVuZENoYXJhY3RlclRvR2x5cGhNYXBUb0luY2x1ZGU6
Y107CiAKICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGdseXBoIGFuZCBmb250LCBnZXQgaXRzIHdp
ZHRoLgogICAgIFdlYkdseXBoV2lkdGggd2lkdGg7CiAgICAgaWYgKHN0eWxlLT50YWJXaWR0aCAh
PSAwLjBGICYmIGMgPT0gJ1x0JykgewogICAgICAgICB3aWR0aCA9IHN0eWxlLT50YWJXaWR0aCAt
IGZtb2RmKHN0eWxlLT54cG9zK2l0ZXJhdG9yLT5ydW5XaWR0aFNvRmFyLCBzdHlsZS0+dGFiV2lk
dGgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHdpZHRoID0gd2lkdGhGb3JHbHlwaChyZW5kZXJl
ciwgX2dseXBoVXNlZCwgX2ZvbnRVc2VkKTsKKyAgICAgICAgd2lkdGggPSB3aWR0aEZvckdseXBo
KHJlbmRlcmVyLCBnbHlwaCk7CiAgICAgICAgIC8vIFdlIHNwZWNpYWwgY2FzZSBzcGFjZXMgaW4g
dHdvIHdheXMgd2hlbiBhcHBseWluZyB3b3JkIHJvdW5kaW5nLgogICAgICAgICAvLyBGaXJzdCwg
d2Ugcm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4KICAgICAg
ICAgLy8gU2Vjb25kLCBpbiBmaXhlZC1waXRjaCBmb250cyB3ZSBlbnN1cmUgdGhhdCBhbGwgY2hh
cmFjdGVycyB0aGF0CiAgICAgICAgIC8vIG1hdGNoIHRoZSB3aWR0aCBvZiB0aGUgc3BhY2UgY2hh
cmFjdGVyIGhhdmUgdGhlIHNhbWUgd2lkdGggYXMgdGhlIHNwYWNlIGNoYXJhY3Rlci4KLSAgICAg
ICAgaWYgKHN0eWxlLT5hcHBseVdvcmRSb3VuZGluZyAmJiAocmVuZGVyZXItPnRyZWF0QXNGaXhl
ZFBpdGNoID8gd2lkdGggPT0gcmVuZGVyZXItPnNwYWNlV2lkdGggOiBfZ2x5cGhVc2VkID09IHJl
bmRlcmVyLT5zcGFjZUdseXBoKSkKKyAgICAgICAgaWYgKHN0eWxlLT5hcHBseVdvcmRSb3VuZGlu
ZyAmJiAocmVuZGVyZXItPnRyZWF0QXNGaXhlZFBpdGNoID8gd2lkdGggPT0gcmVuZGVyZXItPnNw
YWNlV2lkdGggOiBnbHlwaCA9PSByZW5kZXJlci0+c3BhY2VHbHlwaCkpCiAgICAgICAgICAgICB3
aWR0aCA9IHJlbmRlcmVyLT5hZGp1c3RlZFNwYWNlV2lkdGg7CiAgICAgfQogICAgIAogICAgIC8v
IFRyeSB0byBmaW5kIGEgc3Vic3RpdHV0ZSBmb250IGlmIHRoaXMgZm9udCBkaWRuJ3QgaGF2ZSBh
IGdseXBoIGZvciBhIGNoYXJhY3RlciBpbiB0aGUKICAgICAvLyBzdHJpbmcuICBJZiBvbmUgaXNu
J3QgZm91bmQgd2UgZW5kIHVwIGRyYXdpbmcgYW5kIG1lYXN1cmluZyB0aGUgMCBnbHlwaCwgdXN1
YWxseSBhIGJveC4KLSAgICBpZiAoX2dseXBoVXNlZCA9PSAwICYmIHN0eWxlLT5hdHRlbXB0Rm9u
dFN1YnN0aXR1dGlvbikgeworICAgIGlmIChnbHlwaCA9PSAwICYmIHN0eWxlLT5hdHRlbXB0Rm9u
dFN1YnN0aXR1dGlvbikgewogICAgICAgICBVbmlDaGFyIGNoYXJhY3RlckFycmF5WzJdOwogICAg
ICAgICB1bnNpZ25lZCBjaGFyYWN0ZXJBcnJheUxlbmd0aDsKICAgICAgICAgCkBAIC0yMTA0LDEy
ICsxODA0LDkgQEAgc3RhdGljIGZsb2F0IHdpZHRoRm9yTmV4dENoYXJhY3RlcihDaGFyYQogICAg
ICAgICAgICAgY2hhcmFjdGVyQXJyYXlMZW5ndGggPSAyOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBOU0ZvbnQgKnN1YnN0aXR1dGVGb250ID0gW3JlbmRlcmVyIF9zdWJzdGl0dXRlRm9u
dEZvckNoYXJhY3RlcnM6Y2hhcmFjdGVyQXJyYXkgbGVuZ3RoOmNoYXJhY3RlckFycmF5TGVuZ3Ro
Ci0gICAgICAgICAgICBmYW1pbGllczpzdHlsZS0+ZmFtaWxpZXNdOwotICAgICAgICBpZiAoc3Vi
c3RpdHV0ZUZvbnQpIHsKLSAgICAgICAgICAgIGludCBjTnVtR2x5cGhzID0gMDsKLSAgICAgICAg
ICAgIEFUU0dseXBoUmVmIGxvY2FsR2x5cGhCdWZmZXJbTUFYX0dMWVBIX0VYUEFOU0lPTl07Ci0g
ICAgICAgICAgICAKKyAgICAgICAgV2ViVGV4dFJlbmRlcmVyICpzdWJzdGl0dXRlUmVuZGVyZXIg
PSBbcmVuZGVyZXIgc3Vic3RpdHV0ZVJlbmRlcmVyRm9yQ2hhcmFjdGVyczpjaGFyYWN0ZXJBcnJh
eQorICAgICAgICAgICAgbGVuZ3RoOmNoYXJhY3RlckFycmF5TGVuZ3RoIGZhbWlsaWVzOnN0eWxl
LT5mYW1pbGllc107CisgICAgICAgIGlmIChzdWJzdGl0dXRlUmVuZGVyZXIpIHsKICAgICAgICAg
ICAgIFdlYkNvcmVUZXh0UnVuIGNsdXN0ZXJSdW47CiAgICAgICAgICAgICBXZWJDb3JlSW5pdGlh
bGl6ZVRleHRSdW4oJmNsdXN0ZXJSdW4sIGNoYXJhY3RlckFycmF5LCBjaGFyYWN0ZXJBcnJheUxl
bmd0aCwgMCwgY2hhcmFjdGVyQXJyYXlMZW5ndGgpOwogICAgICAgICAgICAgV2ViQ29yZVRleHRT
dHlsZSBjbHVzdGVyU3R5bGUgPSAqaXRlcmF0b3ItPnN0eWxlOwpAQCAtMjExNyw0MSArMTgxNCwy
OSBAQCBzdGF0aWMgZmxvYXQgd2lkdGhGb3JOZXh0Q2hhcmFjdGVyKENoYXJhCiAgICAgICAgICAg
ICBjbHVzdGVyU3R5bGUuYXBwbHlSdW5Sb3VuZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgY2x1
c3RlclN0eWxlLmF0dGVtcHRGb250U3Vic3RpdHV0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIFdlYlRleHRSZW5kZXJlciAqc3Vic3RpdHV0ZVJlbmRlcmVyOwotICAgICAg
ICAgICAgc3Vic3RpdHV0ZVJlbmRlcmVyID0gW1tXZWJUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJl
ZEZhY3RvcnldIHJlbmRlcmVyV2l0aEZvbnQ6c3Vic3RpdHV0ZUZvbnQgdXNpbmdQcmludGVyRm9u
dDpyZW5kZXJlci0+dXNpbmdQcmludGVyRm9udF07Ci0gICAgICAgICAgICB3aWR0aCA9IFtzdWJz
dGl0dXRlUmVuZGVyZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZmxvYXRXaWR0aEZv
clJ1bjomY2x1c3RlclJ1bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiZjbHVz
dGVyU3R5bGUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzOiBuaWwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb250czogbmlsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2x5cGhzOiAmbG9jYWxHbHlwaEJ1ZmZlclswXQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXJ0UG9zaXRpb246bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
R2x5cGhzOiZjTnVtR2x5cGhzXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgX2ZvbnRVc2Vk
ID0gc3Vic3RpdHV0ZUZvbnQ7Ci0gICAgICAgICAgICBfZ2x5cGhVc2VkID0gbG9jYWxHbHlwaEJ1
ZmZlclswXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGMgPD0gMHhGRkZGICYmIGNO
dW1HbHlwaHMgPT0gMSAmJiBsb2NhbEdseXBoQnVmZmVyWzBdICE9IDApewotICAgICAgICAgICAg
ICAgIFtyZW5kZXJlciBfdXBkYXRlR2x5cGhFbnRyeUZvckNoYXJhY3RlcjpjIGdseXBoSUQ6bG9j
YWxHbHlwaEJ1ZmZlclswXSBmb250OnN1YnN0aXR1dGVGb250XTsKKyAgICAgICAgICAgIGludCBj
TnVtR2x5cGhzOworICAgICAgICAgICAgQVRTR2x5cGhSZWYgbG9jYWxHbHlwaEJ1ZmZlcltNQVhf
R0xZUEhfRVhQQU5TSU9OXTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHdpZHRoID0gW3N1YnN0
aXR1dGVSZW5kZXJlciBmbG9hdFdpZHRoRm9yUnVuOiZjbHVzdGVyUnVuIHN0eWxlOiZjbHVzdGVy
U3R5bGUgCisgICAgICAgICAgICAgICAgd2lkdGhzOk5VTEwgc3Vic3RpdHV0ZVJlbmRlcmVyczpO
VUxMIGdseXBoczpsb2NhbEdseXBoQnVmZmVyIHN0YXJ0UG9zaXRpb246TlVMTCBudW1HbHlwaHM6
JmNOdW1HbHlwaHNdOworICAgICAgICAgICAgaWYgKGNOdW1HbHlwaHMgPT0gMSkgeworICAgICAg
ICAgICAgICAgIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlclswXTsKKyAgICAgICAgICAgICAgICBb
cmVuZGVyZXIgdXBkYXRlR2x5cGhFbnRyeUZvckNoYXJhY3RlcjpjIGdseXBoSUQ6Z2x5cGggc3Vi
c3RpdHV0ZVJlbmRlcmVyOnN1YnN0aXR1dGVSZW5kZXJlcl07CisgICAgICAgICAgICAgICAgcmVu
ZGVyZXIgPSBzdWJzdGl0dXRlUmVuZGVyZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAoIV9mb250VXNlZCkKLSAgICAgICAgX2ZvbnRVc2VkID0gcmVuZGVyZXIt
PmZvbnQ7Ci0KICAgICAvLyBGb3JjZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHVzZWQgdG8gZGV0ZXJt
aW5lIHdvcmQgYm91bmRhcmllcyBmb3IgdGhlIHJvdW5kaW5nIGhhY2sKICAgICAvLyB0byBiZSBp
bnRlZ2VyIHdpZHRoLCBzbyBmb2xsb3dpbmcgd29yZHMgd2lsbCBzdGFydCBvbiBhbiBpbnRlZ2Vy
IGJvdW5kYXJ5LgotICAgIGlmIChzdHlsZS0+YXBwbHlXb3JkUm91bmRpbmcgJiYgaXNSb3VuZGlu
Z0hhY2tDaGFyYWN0ZXIoYykpIHsKKyAgICBpZiAoc3R5bGUtPmFwcGx5V29yZFJvdW5kaW5nICYm
IGlzUm91bmRpbmdIYWNrQ2hhcmFjdGVyKGMpKQogICAgICAgICB3aWR0aCA9IGNlaWxmKHdpZHRo
KTsKLSAgICB9CiAgICAgCiAgICAgLy8gQWNjb3VudCBmb3IgbGV0dGVyLXNwYWNpbmcKICAgICBp
ZiAoc3R5bGUtPmxldHRlclNwYWNpbmcgJiYgd2lkdGggPiAwKQogICAgICAgICB3aWR0aCArPSBz
dHlsZS0+bGV0dGVyU3BhY2luZzsKIAotICAgIC8vIEFjY291bnQgZm9yIHBhZGRpbmcuICBraHRt
bCB1c2VzIHNwYWNlIHBhZGRpbmcgdG8ganVzdGlmeSB0ZXh0LiAgV2UKLSAgICAvLyBkaXN0cmli
dXRlIHRoZSBzcGVjaWZpZWQgcGFkZGluZyBvdmVyIHRoZSBhdmFpbGFibGUgc3BhY2VzIGluIHRo
ZSBydW4uCisgICAgLy8gQWNjb3VudCBmb3IgcGFkZGluZy4gV2ViQ29yZSB1c2VzIHNwYWNlIHBh
ZGRpbmcgdG8ganVzdGlmeSB0ZXh0LgorICAgIC8vIFdlIGRpc3RyaWJ1dGUgdGhlIHNwZWNpZmll
ZCBwYWRkaW5nIG92ZXIgdGhlIGF2YWlsYWJsZSBzcGFjZXMgaW4gdGhlIHJ1bi4KICAgICBpZiAo
aXNTcGFjZShjKSkgewogICAgICAgICBpZiAoaXRlcmF0b3ItPnBhZGRpbmcgPiAwKSB7CiAgICAg
ICAgICAgICAvLyBPbmx5IHVzZSBsZWZ0IG92ZXIgcGFkZGluZyBpZiBub3RlIGV2ZW5seSBkaXZp
c2libGUgYnkgCkBAIC0yMTU5LDggKzE4NDQsNyBAQCBzdGF0aWMgZmxvYXQgd2lkdGhGb3JOZXh0
Q2hhcmFjdGVyKENoYXJhCiAgICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnBhZGRpbmcgPCBpdGVy
YXRvci0+cGFkUGVyU3BhY2UpewogICAgICAgICAgICAgICAgIHdpZHRoICs9IGl0ZXJhdG9yLT5w
YWRkaW5nOwogICAgICAgICAgICAgICAgIGl0ZXJhdG9yLT5wYWRkaW5nID0gMDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICB3aWR0aCArPSBpdGVyYXRvci0+cGFkUGVyU3BhY2U7CiAgICAgICAgICAgICAgICAg
aXRlcmF0b3ItPnBhZGRpbmcgLT0gaXRlcmF0b3ItPnBhZFBlclNwYWNlOwogICAgICAgICAgICAg
fQpAQCAtMjE5NiwxNiArMTg4MCwxNSBAQCBzdGF0aWMgZmxvYXQgd2lkdGhGb3JOZXh0Q2hhcmFj
dGVyKENoYXJhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZm9udFVzZWQpCi0gICAgICAg
ICpmb250VXNlZCA9IF9mb250VXNlZDsKKyAgICBpZiAocmVuZGVyZXJVc2VkKQorICAgICAgICAq
cmVuZGVyZXJVc2VkID0gcmVuZGVyZXI7CiAgICAgCiAgICAgaWYgKGdseXBoVXNlZCkKLSAgICAg
ICAgKmdseXBoVXNlZCA9IF9nbHlwaFVzZWQ7CisgICAgICAgICpnbHlwaFVzZWQgPSBnbHlwaDsK
IAogICAgIHJldHVybiB3aWR0aDsKIH0KIAotCiBzdGF0aWMgQk9PTCBmaWxsU3R5bGVXaXRoQXR0
cmlidXRlcyhBVFNVU3R5bGUgc3R5bGUsIE5TRm9udCAqdGhlRm9udCkKIHsKICAgICBpZiAodGhl
Rm9udCkgewpAQCAtMjIzMywzMyArMTkxNiw0OSBAQCBzdGF0aWMgQk9PTCBmaWxsU3R5bGVXaXRo
QXR0cmlidXRlcyhBVFNVCiAKIHN0YXRpYyBCT09MIHNob3VsZFVzZUFUU1UoY29uc3QgV2ViQ29y
ZVRleHRSdW4gKnJ1bikKIHsKLSAgICBVbmlDaGFyIGM7Ci0gICAgY29uc3QgVW5pQ2hhciAqY2hh
cmFjdGVycyA9IHJ1bi0+Y2hhcmFjdGVyczsKLSAgICBpbnQgaSwgZnJvbSA9IHJ1bi0+ZnJvbSwg
dG8gPSBydW4tPnRvOwotICAgIAogICAgIGlmIChhbHdheXNVc2VBVFNVKQogICAgICAgICByZXR1
cm4gWUVTOwogICAgICAgICAKLSAgICBmb3IgKGkgPSBmcm9tOyBpIDwgdG87IGkrKyl7Ci0gICAg
ICAgIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBpZiAoYyA8IDB4MzAwKSAgICAgICAgICAg
ICAgICAgICAgICAvLyBFYXJseSBjb250aW51ZSB0byBhdm9pZCBvdGhlciBjaGVja3MgZm9yIHRo
ZSBjb21tb24gY2FzZS4KKyAgICBjb25zdCBVbmlDaGFyICpjaGFyYWN0ZXJzID0gcnVuLT5jaGFy
YWN0ZXJzOworICAgIGludCB0byA9IHJ1bi0+dG87CisgICAgaW50IGk7CisgICAgZm9yIChpID0g
cnVuLT5mcm9tOyBpIDwgdG87IGkrKykgeworICAgICAgICBVbmlDaGFyIGMgPSBjaGFyYWN0ZXJz
W2ldOworICAgICAgICBpZiAoYyA8IDB4MzAwKSAgICAgICAgICAgICAgICAgICAgICAvLyBVKzAz
MDAgdGhyb3VnaCBVKzAzNkYgQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoYyA+PSAweDMwMCAmJiBjIDw9
IDB4MzZGKSAgICAgICAvLyBVKzAzMDAgdGhyb3VnaCBVKzAzNkYgQ29tYmluaW5nIGRpYWNyaXRp
Y2FsIG1hcmtzCisgICAgICAgIGlmIChjIDw9IDB4MzZGKQogICAgICAgICAgICAgcmV0dXJuIFlF
UzsKLSAgICAgICAgaWYgKGMgPj0gMHgyMEQwICYmIGMgPD0gMHgyMEZGKSAgICAgLy8gVSsyMEQw
IHRocm91Z2ggVSsyMEZGIENvbWJpbmluZyBtYXJrcyBmb3Igc3ltYm9scworCisgICAgICAgIGlm
IChjIDwgMHgwNTkxKSAgICAgICAgICAgICAgICAgICAgIC8vIFUrMDU5MSB0aHJvdWdoIFUrMTA1
OSBBcmFiaWMsIEhlYnJldywgU3lyaWFjLCBUaGFhbmEsIERldmFuYWdhcmksIEJlbmdhbGksIEd1
cm11a2hpLCBHdWphcmF0aSwgT3JpeWEsIFRhbWlsLCBUZWx1Z3UsIEthbm5hZGEsIE1hbGF5YWxh
bSwgU2luaGFsYSwgVGhhaSwgTGFvLCBUaWJldGFuLCBNeWFubWFyCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxMDU5KQogICAgICAgICAgICAgcmV0dXJuIFlFUzsK
LSAgICAgICAgaWYgKGMgPj0gMHhGRTIwICYmIGMgPD0gMHhGRTJmKSAgICAgLy8gVStGRTIwIHRo
cm91Z2ggVStGRTJGIENvbWJpbmluZyBoYWxmIG1hcmtzCisKKyAgICAgICAgaWYgKGMgPCAweDEx
MDApICAgICAgICAgICAgICAgICAgICAgLy8gVSsxMTAwIHRocm91Z2ggVSsxMUZGIEhhbmd1bCBK
YW1vIChvbmx5IEFuY2llbnQgS29yZWFuIHNob3VsZCBiZSBsZWZ0IGhlcmUgaWYgeW91IHByZWNv
bXBvc2U7IE1vZGVybiBLb3JlYW4gd2lsbCBiZSBwcmVjb21wb3NlZCBhcyBhIHJlc3VsdCBvZiBz
dGVwIEEpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxMUZGKQog
ICAgICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAgICAgaWYgKGMgPj0gMHg1OTEgJiYgYyA8PSAw
eDEwNTkpICAgICAgLy8gVSswNTkxIHRocm91Z2ggVSsxMDU5IEFyYWJpYywgSGVicmV3LCBTeXJp
YWMsIFRoYWFuYSwgRGV2YW5hZ2FyaSwgQmVuZ2FsaSwgR3VybXVraGksIEd1amFyYXRpLCBPcml5
YSwgVGFtaWwsIFRlbHVndSwgS2FubmFkYSwgTWFsYXlhbGFtLCBTaW5oYWxhLCBUaGFpLCBMYW8s
IFRpYmV0YW4sIE15YW5tYXIKKworICAgICAgICBpZiAoYyA8IDB4MTc4MCkgICAgICAgICAgICAg
ICAgICAgICAvLyBVKzE3ODAgdGhyb3VnaCBVKzE4QUYgS2htZXIsIE1vbmdvbGlhbgorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjIDw9IDB4MThBRikKICAgICAgICAgICAgIHJl
dHVybiBZRVM7Ci0gICAgICAgIGlmIChjID49IDB4MTEwMCAmJiBjIDw9IDB4MTFGRikgICAgIC8v
IFUrMTEwMCB0aHJvdWdoIFUrMTFGRiBIYW5ndWwgSmFtbyAob25seSBBbmNpZW50IEtvcmVhbiBz
aG91bGQgYmUgbGVmdCBoZXJlIGlmIHlvdSBwcmVjb21wb3NlOyBNb2Rlcm4gS29yZWFuIHdpbGwg
YmUgcHJlY29tcG9zZWQgYXMgYSByZXN1bHQgb2Ygc3RlcCBBKQorCisgICAgICAgIGlmIChjIDwg
MHgxOTAwKSAgICAgICAgICAgICAgICAgICAgIC8vIFUrMTkwMCB0aHJvdWdoIFUrMTk0RiBMaW1i
dSAoVW5pY29kZSA0LjApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0g
MHgxOTRGKQogICAgICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAgICAgaWYgKGMgPj0gMHgxNzgw
ICYmIGMgPD0gMHgxOEFGKSAgICAgLy8gVSsxNzgwIHRocm91Z2ggVSsxOEFGIEtobWVyLCBNb25n
b2xpYW4KKworICAgICAgICBpZiAoYyA8IDB4MjBEMCkgICAgICAgICAgICAgICAgICAgICAvLyBV
KzIwRDAgdGhyb3VnaCBVKzIwRkYgQ29tYmluaW5nIG1hcmtzIGZvciBzeW1ib2xzCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgyMEZGKQogICAgICAgICAgICAgcmV0
dXJuIFlFUzsKLSAgICAgICAgaWYgKGMgPj0gMHgxOTAwICYmIGMgPD0gMHgxOTRGKSAgICAgLy8g
VSsxOTAwIHRocm91Z2ggVSsxOTRGIExpbWJ1IChVbmljb2RlIDQuMCkKKworICAgICAgICBpZiAo
YyA8IDB4RkUyMCkgICAgICAgICAgICAgICAgICAgICAvLyBVK0ZFMjAgdGhyb3VnaCBVK0ZFMkYg
Q29tYmluaW5nIGhhbGYgbWFya3MKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YyA8PSAweEZFMkYpCiAgICAgICAgICAgICByZXR1cm4gWUVTOwogICAgIH0KLSAgICAKKwogICAg
IHJldHVybiBOTzsKIH0KSW5kZXg6IFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYlRl
eHRSZW5kZXJlckZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0
L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViVGV4dFJlbmRlcmVyRmFjdG9yeS5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXAgLXUgLXIxLjE2IFdlYktpdC9XZWJDb3JlU3VwcG9y
dC5zdWJwcm9qL1dlYlRleHRSZW5kZXJlckZhY3RvcnkuaAotLS0gV2ViS2l0L1dlYkNvcmVTdXBw
b3J0LnN1YnByb2ovV2ViVGV4dFJlbmRlcmVyRmFjdG9yeS5oCTUgSnVuIDIwMDUgMTc6NTQ6NDEg
LTAwMDAJMS4xNgorKysgV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViVGV4dFJlbmRl
cmVyRmFjdG9yeS5oCTEwIFNlcCAyMDA1IDE2OjMzOjEzIC0wMDAwCkBAIC0yNywzMyArMjcsMjMg
QEAKICAqLwogCiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5Lmg+
Ci0jaW1wb3J0IDxXZWJLaXQvV2ViR2x5cGhCdWZmZXIuaD4KIAogQGNsYXNzIFdlYlRleHRSZW5k
ZXJlcjsKIAorI2RlZmluZSBXRUJfVEVYVF9SRU5ERVJFUl9GQUNUT1JZX05VTV9DQUNIRVMgOAor
CiBAaW50ZXJmYWNlIFdlYlRleHRSZW5kZXJlckZhY3RvcnkgOiBXZWJDb3JlVGV4dFJlbmRlcmVy
RmFjdG9yeQogewotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmNhY2hlRm9yU2NyZWVuOwotICAg
IE5TTXV0YWJsZURpY3Rpb25hcnkgKmNhY2hlRm9yUHJpbnRlcjsKKyAgICBOU011dGFibGVEaWN0
aW9uYXJ5ICpjYWNoZXNbV0VCX1RFWFRfUkVOREVSRVJfRkFDVE9SWV9OVU1fQ0FDSEVTXTsKICAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICp2aWV3QnVmZmVyczsKICAgICBOU011dGFibGVBcnJheSAq
dmlld1N0YWNrOwogfQogCiArICh2b2lkKWNyZWF0ZVNoYXJlZEZhY3Rvcnk7CiArIChXZWJUZXh0
UmVuZGVyZXJGYWN0b3J5ICopc2hhcmVkRmFjdG9yeTsKLS0gKE5TRm9udCAqKWNhY2hlZEZvbnRG
cm9tRmFtaWx5OihOU1N0cmluZyAqKWZhbWlseSB0cmFpdHM6KE5TRm9udFRyYWl0TWFzayl0cmFp
dHMgc2l6ZTooZmxvYXQpc2l6ZTsKLQotLSAoV2ViVGV4dFJlbmRlcmVyICopcmVuZGVyZXJXaXRo
Rm9udDooTlNGb250ICopZm9udCB1c2luZ1ByaW50ZXJGb250OihCT09MKXVzaW5nUHJpbnRlckZv
bnQ7Ci0KLS0gKEJPT0wpY29hbGVzY2VUZXh0RHJhd2luZzsKLS0gKHZvaWQpZW5kQ29hbGVzY2VU
ZXh0RHJhd2luZzsKLS0gKHZvaWQpc3RhcnRDb2FsZXNjZVRleHREcmF3aW5nOwogCi0tIChXZWJH
bHlwaEJ1ZmZlciAqKWdseXBoQnVmZmVyRm9yRm9udDooTlNGb250ICopZm9udCBhbmRDb2xvcjoo
TlNDb2xvciAqKWNvbG9yOworLSAoTlNGb250ICopY2FjaGVkRm9udEZyb21GYW1pbHk6KE5TU3Ry
aW5nICopZmFtaWx5IHRyYWl0czooTlNGb250VHJhaXRNYXNrKXRyYWl0cyBzaXplOihmbG9hdClz
aXplOwogCi1AZW5kCistIChXZWJUZXh0UmVuZGVyZXIgKilyZW5kZXJlcldpdGhGb250OihXZWJD
b3JlRm9udClmb250OwogCi1AaW50ZXJmYWNlIE5TRm9udCAoV2ViUHJpdmF0ZUV4dGVuc2lvbnMp
Ci0tIChCT09MKV93ZWJfaXNGYWtlRml4ZWRQaXRjaDsKIEBlbmQKLQpJbmRleDogV2ViS2l0L1dl
YkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViVGV4dFJlbmRlcmVyRmFjdG9yeS5tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0
UmVuZGVyZXJGYWN0b3J5Lm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDYKZGlmZiAtcCAtdSAt
cjEuNDYgV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViVGV4dFJlbmRlcmVyRmFjdG9y
eS5tCi0tLSBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0UmVuZGVyZXJGYWN0
b3J5Lm0JNiBKdW4gMjAwNSAxMzoyNjoxNiAtMDAwMAkxLjQ2CisrKyBXZWJLaXQvV2ViQ29yZVN1
cHBvcnQuc3VicHJvai9XZWJUZXh0UmVuZGVyZXJGYWN0b3J5Lm0JMTAgU2VwIDIwMDUgMTY6MzM6
MTQgLTAwMDAKQEAgLTM3LDYgKzM3LDggQEAKIAogI2ltcG9ydCA8bWFjaC1vL2R5bGQuaD4KIAor
I2RlZmluZSBTWU5USEVTSVpFRF9GT05UX1RSQUlUUyAoTlNCb2xkRm9udE1hc2sgfCBOU0l0YWxp
Y0ZvbnRNYXNrKQorCiAjZGVmaW5lIElNUE9SVEFOVF9GT05UX1RSQUlUUyAoMCBcCiAgICAgfCBO
U0JvbGRGb250TWFzayBcCiAgICAgfCBOU0NvbXByZXNzZWRGb250TWFzayBcCkBAIC02MCw2OCAr
NjIsNyBAQAogCiBAaW1wbGVtZW50YXRpb24gV2ViVGV4dFJlbmRlcmVyRmFjdG9yeQogCi0tIChC
T09MKWNvYWxlc2NlVGV4dERyYXdpbmcKLXsKLSAgICByZXR1cm4gW3ZpZXdTdGFjayBvYmplY3RB
dEluZGV4OiBbdmlld1N0YWNrIGNvdW50XS0xXSA9PSBbTlNWaWV3IGZvY3VzVmlld10gPyBZRVMg
OiBOTzsKLX0KLQotLSAodm9pZClzdGFydENvYWxlc2NlVGV4dERyYXdpbmcKLXsKLSAgICBpZiAo
IXZpZXdTdGFjaykKLSAgICAgICAgdmlld1N0YWNrID0gW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF07Ci0gICAgaWYgKCF2aWV3QnVmZmVycykKLSAgICAgICAgdmlld0J1ZmZlcnMgPSBbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgIFt2aWV3U3RhY2sgYWRkT2JqZWN0
OiBbTlNWaWV3IGZvY3VzVmlld11dOwotfQotCi0tICh2b2lkKWVuZENvYWxlc2NlVGV4dERyYXdp
bmcKLXsKLSAgICBBU1NFUlQoW3NlbGYgY29hbGVzY2VUZXh0RHJhd2luZ10pOwotICAgIAotICAg
IE5TVmlldyAqdGFyZ2V0VmlldyA9IFt2aWV3U3RhY2sgb2JqZWN0QXRJbmRleDogW3ZpZXdTdGFj
ayBjb3VudF0tMV07Ci0gICAgW3ZpZXdTdGFjayByZW1vdmVMYXN0T2JqZWN0XTsKLSAgICBOU1Zh
bHVlICp2aWV3S2V5ID0gW05TVmFsdWUgdmFsdWVXaXRoTm9ucmV0YWluZWRPYmplY3Q6IHRhcmdl
dFZpZXddOwotICAgIE5TTXV0YWJsZVNldCAqZ2x5cGhCdWZmZXJzID0gW3ZpZXdCdWZmZXJzIG9i
amVjdEZvcktleTp2aWV3S2V5XTsKLQotICAgIFtnbHlwaEJ1ZmZlcnMgbWFrZU9iamVjdHNQZXJm
b3JtU2VsZWN0b3I6IEBzZWxlY3RvcihkcmF3SW5WaWV3Oikgd2l0aE9iamVjdDogdGFyZ2V0Vmll
d107Ci0gICAgW2dseXBoQnVmZmVycyBtYWtlT2JqZWN0c1BlcmZvcm1TZWxlY3RvcjogQHNlbGVj
dG9yKHJlc2V0KV07Ci0gICAgW3ZpZXdCdWZmZXJzIHJlbW92ZU9iamVjdEZvcktleTogdmlld0tl
eV07Ci19Ci0KLS0gKFdlYkdseXBoQnVmZmVyICopZ2x5cGhCdWZmZXJGb3JGb250OiAoTlNGb250
ICopZm9udCBhbmRDb2xvcjogKE5TQ29sb3IgKiljb2xvcgotewotICAgIEFTU0VSVChbc2VsZiBj
b2FsZXNjZVRleHREcmF3aW5nXSk7Ci0KLSAgICBOU011dGFibGVTZXQgKmdseXBoQnVmZmVyczsK
LSAgICBXZWJHbHlwaEJ1ZmZlciAqZ2x5cGhCdWZmZXIgPSBuaWw7Ci0gICAgTlNWYWx1ZSAqdmll
d0tleSA9IFtOU1ZhbHVlIHZhbHVlV2l0aE5vbnJldGFpbmVkT2JqZWN0OiBbTlNWaWV3IGZvY3Vz
Vmlld11dOwotICAgIAotICAgIGdseXBoQnVmZmVycyA9IFt2aWV3QnVmZmVycyBvYmplY3RGb3JL
ZXk6dmlld0tleV07Ci0gICAgaWYgKGdseXBoQnVmZmVycyA9PSBuaWwpewotICAgICAgICBnbHlw
aEJ1ZmZlcnMgPSBbW05TTXV0YWJsZVNldCBhbGxvY10gaW5pdF07Ci0gICAgICAgIFt2aWV3QnVm
ZmVycyBzZXRPYmplY3Q6IGdseXBoQnVmZmVycyBmb3JLZXk6IHZpZXdLZXldOwotICAgICAgICBb
Z2x5cGhCdWZmZXJzIHJlbGVhc2VdOwotICAgIH0KLSAgICAKLSAgICBOU0VudW1lcmF0b3IgKmVu
dW1lcmF0b3IgPSBbZ2x5cGhCdWZmZXJzIG9iamVjdEVudW1lcmF0b3JdOwotICAgIGlkIHZhbHVl
OwotICAgIAotICAgIC8vIENvdWxkIHVzZSBhIGRpY3Rpb25hcnkgdy8gZm9udC9jb2xvciBrZXkg
Zm9yIGZhc3RlciBsb29rdXAuCi0gICAgd2hpbGUgKCh2YWx1ZSA9IFtlbnVtZXJhdG9yIG5leHRP
YmplY3RdKSkgewotICAgICAgICBpZiAoW3ZhbHVlIGZvbnRdID09IGZvbnQgJiYgW1t2YWx1ZSBj
b2xvcl0gaXNFcXVhbDogY29sb3JdKQotICAgICAgICAgICAgZ2x5cGhCdWZmZXIgPSB2YWx1ZTsK
LSAgICB9Ci0gICAgaWYgKGdseXBoQnVmZmVyID09IG5pbCl7Ci0gICAgICAgIGdseXBoQnVmZmVy
ID0gW1tXZWJHbHlwaEJ1ZmZlciBhbGxvY10gaW5pdFdpdGhGb250OiBmb250IGNvbG9yOiBjb2xv
cl07Ci0gICAgICAgIFtnbHlwaEJ1ZmZlcnMgYWRkT2JqZWN0OiBnbHlwaEJ1ZmZlcl07Ci0gICAg
ICAgIFtnbHlwaEJ1ZmZlciByZWxlYXNlXTsKLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiBn
bHlwaEJ1ZmZlcjsKLX0KLQotc3RhdGljIGJvb2wKLWdldEFwcERlZmF1bHRWYWx1ZShDRlN0cmlu
Z1JlZiBrZXksIGludCAqdikKK3N0YXRpYyBib29sIGdldEFwcERlZmF1bHRWYWx1ZShDRlN0cmlu
Z1JlZiBrZXksIGludCAqdikKIHsKICAgICBDRlByb3BlcnR5TGlzdFJlZiB2YWx1ZTsKIApAQCAt
MTUxLDggKzkyLDcgQEAgZ2V0QXBwRGVmYXVsdFZhbHVlKENGU3RyaW5nUmVmIGtleSwgaW50IAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbAotZ2V0VXNlckRlZmF1bHRWYWx1ZShD
RlN0cmluZ1JlZiBrZXksIGludCAqdikKK3N0YXRpYyBib29sIGdldFVzZXJEZWZhdWx0VmFsdWUo
Q0ZTdHJpbmdSZWYga2V5LCBpbnQgKnYpCiB7CiAgICAgQ0ZQcm9wZXJ0eUxpc3RSZWYgdmFsdWU7
CiAKQEAgLTE4OCwxMCArMTI4LDkgQEAgc3RhdGljIGludCBnZXRMQ0RTY2FsZVBhcmFtZXRlcnMo
dm9pZCkKICAgICAgICAgICAgIHJldHVybiAxOwogICAgIH0KIAotCWlmIChXS0ZvbnRTbW9vdGhp
bmdNb2RlSXNMQ0QobW9kZSkpCi0JCXJldHVybiA0OwotCWVsc2UKLQkJcmV0dXJuIDE7CisgICAg
aWYgKFdLRm9udFNtb290aGluZ01vZGVJc0xDRChtb2RlKSkKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGZvbnRDYWNo
ZTsKQEAgLTE5OSwxOSArMTM4LDE3IEBAIHN0YXRpYyBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGZp
eGVkUGl0Y2gKIAogLSAodm9pZCljbGVhckNhY2hlcwogewotICAgIFtjYWNoZUZvclNjcmVlbiBy
ZWxlYXNlXTsKLSAgICBbY2FjaGVGb3JQcmludGVyIHJlbGVhc2VdOwotICAgIAotICAgIGNhY2hl
Rm9yU2NyZWVuID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBjYWNo
ZUZvclByaW50ZXIgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAgIGlu
dCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBXRUJfVEVYVF9SRU5ERVJFUl9GQUNUT1JZX05VTV9D
QUNIRVM7ICsraSkKKyAgICAgICAgW2NhY2hlc1tpXSByZW1vdmVBbGxPYmplY3RzXTsKIAogICAg
IGlmIChmb250Q2FjaGUpCiAgICAgICAgIENGUmVsZWFzZShmb250Q2FjaGUpOwogICAgIGZvbnRD
YWNoZSA9IE5VTEw7CiAgICAgCiAgICAgaWYgKGZpeGVkUGl0Y2hGb250cykgewotICAgICAgICBD
RlJlbGVhc2UgKGZpeGVkUGl0Y2hGb250cyk7Ci0gICAgICAgIGZpeGVkUGl0Y2hGb250cyA9IDA7
CisgICAgICAgIENGUmVsZWFzZShmaXhlZFBpdGNoRm9udHMpOworICAgICAgICBmaXhlZFBpdGNo
Rm9udHMgPSBOVUxMOwogICAgIH0KICAgICAgICAgCiAgICAgW3N1cGVyIGNsZWFyQ2FjaGVzXTsK
QEAgLTIzNiwxOSArMTczLDE5IEBAIGZvbnRzQ2hhbmdlZCggQVRTRm9udE5vdGlmaWNhdGlvbklu
Zm9SZWYKICAgICBpZiAoIVtzZWxmIHNoYXJlZEZhY3RvcnldKSB7CiAgICAgICAgIFtbW3NlbGYg
YWxsb2NdIGluaXRdIHJlbGVhc2VdOwogCi0Jc2l6ZV90IHM7Ci0JaWYgKFdlYlN5c3RlbU1haW5N
ZW1vcnkoKSA+IDEyOCAqIDEwMjQgKiAxMDI0KQotCQlzID0gTUlOSU1VTV9HTFlQSF9DQUNIRV9T
SVpFKmdldExDRFNjYWxlUGFyYW1ldGVycygpOwotCWVsc2UKLQkJcyA9IE1JTklNVU1fR0xZUEhf
Q0FDSEVfU0laRTsKKyAgICAgICAgc2l6ZV90IHM7CisgICAgICAgIGlmIChXZWJTeXN0ZW1NYWlu
TWVtb3J5KCkgPiAxMjggKiAxMDI0ICogMTAyNCkKKyAgICAgICAgICAgIHMgPSBNSU5JTVVNX0dM
WVBIX0NBQ0hFX1NJWkUqZ2V0TENEU2NhbGVQYXJhbWV0ZXJzKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHMgPSBNSU5JTVVNX0dMWVBIX0NBQ0hFX1NJWkU7CiAjaWZuZGVmIE5ERUJVRwot
CUxPRyAoQ2FjaGVTaXplcywgIkdseXBoIGNhY2hlIHNpemUgc2V0IHRvICVkIGJ5dGVzLiIsIHMp
OworICAgICAgICBMT0coQ2FjaGVTaXplcywgIkdseXBoIGNhY2hlIHNpemUgc2V0IHRvICVkIGJ5
dGVzLiIsIHMpOwogI2VuZGlmCi0JV0tTZXRVcEZvbnRDYWNoZShzKTsKKyAgICAgICAgV0tTZXRV
cEZvbnRDYWNoZShzKTsKIAogICAgICAgICAvLyBJZ25vcmUgZXJyb3JzIHJldHVybmVkIGZyb20g
QVRTRm9udE5vdGlmaWNhdGlvblN1YnNjcmliZS4gIElmIHdlIGNhbid0IHN1YnNjcmliZSB0aGVu
IHdlCiAgICAgICAgIC8vIHdvbid0IGJlIHRvbGQgYWJvdXQgY2hhbmdlcyB0byBmb250cy4KLQlB
VFNGb250Tm90aWZpY2F0aW9uU3Vic2NyaWJlKCBmb250c0NoYW5nZWQsIGtBVFNGb250Tm90aWZ5
T3B0aW9uRGVmYXVsdCwgKHZvaWQgKilbc3VwZXIgc2hhcmVkRmFjdG9yeV0sIG5pbCApOworICAg
ICAgICBBVFNGb250Tm90aWZpY2F0aW9uU3Vic2NyaWJlKCBmb250c0NoYW5nZWQsIGtBVFNGb250
Tm90aWZ5T3B0aW9uRGVmYXVsdCwgKHZvaWQgKilbc3VwZXIgc2hhcmVkRmFjdG9yeV0sIG5pbCAp
OwogICAgIH0KICAgICBBU1NFUlQoW1tzZWxmIHNoYXJlZEZhY3RvcnldIGlzS2luZE9mQ2xhc3M6
c2VsZl0pOwogfQpAQCAtMjU4LDM0ICsxOTUsMzMgQEAgZm9udHNDaGFuZ2VkKCBBVFNGb250Tm90
aWZpY2F0aW9uSW5mb1JlZgogICAgIHJldHVybiAoV2ViVGV4dFJlbmRlcmVyRmFjdG9yeSAqKVtz
dXBlciBzaGFyZWRGYWN0b3J5XTsKIH0KIAotLSAoQk9PTClpc0ZvbnRGaXhlZFBpdGNoOiAoTlNG
b250ICopZm9udAorLSAoQk9PTClpc0ZvbnRGaXhlZFBpdGNoOihXZWJDb3JlRm9udClmb250CiB7
Ci0gICAgQk9PTCByZXQgPSBOTzsKLSAgICAKLSAgICBpZiAoIWZpeGVkUGl0Y2hGb250cykgewot
ICAgICAgICBmaXhlZFBpdGNoRm9udHMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlICgwLCAw
LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsIDApOwotICAgIH0KLSAgICAKLSAgICBD
RkJvb2xlYW5SZWYgdmFsID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUgKGZpeGVkUGl0Y2hGb250cywg
Zm9udCk7CisgICAgTlNGb250ICpmID0gZm9udC5mb250OworCisgICAgaWYgKCFmaXhlZFBpdGNo
Rm9udHMpCisgICAgICAgIGZpeGVkUGl0Y2hGb250cyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFi
bGUoMCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAwKTsKKyAgICBDRkJvb2xl
YW5SZWYgdmFsID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZml4ZWRQaXRjaEZvbnRzLCBmKTsKKwor
ICAgIEJPT0wgcmV0OyAgICAKICAgICBpZiAodmFsKSB7CiAgICAgICAgIHJldCA9ICh2YWwgPT0g
a0NGQm9vbGVhblRydWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBP
c2FrYS1Nb25vLgorICAgICAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzM5OTk0
Njc+LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KKyAgICAgICAg
Ly8gTm90ZSB0aGF0IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4
ZWQgcGl0Y2guCisKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNlIE1TLVBHb3RoaWMuCisgICAgICAg
IC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNDAzMjkzOCwgd2Ugc2hvdWxkIG5vdCB0
cmVhdCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNoLgorICAgICAgICAvLyBOb3RlIHRoYXQgQXBw
S2l0IGRvZXMgcmVwb3J0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCisKKyAgICAgICAgTlNT
dHJpbmcgKm5hbWUgPSBbZiBmb250TmFtZV07CisgICAgICAgIHJldCA9IChbZiBpc0ZpeGVkUGl0
Y2hdIHx8IFtmIF9pc0Zha2VGaXhlZFBpdGNoXSB8fCBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21w
YXJlOkAiT3Nha2EtTW9ubyJdID09IE5TT3JkZXJlZFNhbWUpCisgICAgICAgICAgICAmJiAhW25h
bWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1TLVBHb3RoaWMiXSA9PSBOU09yZGVyZWRTYW1l
OworCisgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGZpeGVkUGl0Y2hGb250cywgZiwgcmV0
ID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2UpOwogICAgIH0KLSAgICBlbHNlIHsK
LSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIE9zYWthLU1vbm8uICBBY2NvcmRpbmcgdG8gPHJkYXI6
Ly9wcm9ibGVtLzM5OTk0Njc+LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2EtTW9ubwotICAgICAgICAv
LyBhcyBmaXhlZCBwaXRjaC4gTm90ZSB0aGF0IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE1T
LVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCi0KLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIE1TIFBH
b3RoaWMuICBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzQwMzI5MzgsIHdlIHNob3VsZCBu
b3QgdHJlYXQgTVMtUEdvdGhpYwotICAgICAgICAvLyBhcyBmaXhlZCBwaXRjaC4gIE5vdGUgdGhh
dCBBcHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KLSAgICAgICAg
aWYgKChbZm9udCBpc0ZpeGVkUGl0Y2hdIHx8IFtmb250IF9pc0Zha2VGaXhlZFBpdGNoXSB8fCBb
W2ZvbnQgZm9udE5hbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJPc2FrYS1Nb25vIl0gPT0g
TlNPcmRlcmVkU2FtZSkgJiYgCi0gICAgICAgICAgICAgICAgIVtbZm9udCBmb250TmFtZV0gY2Fz
ZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1TLVBHb3RoaWMiXSA9PSBOU09yZGVyZWRTYW1lKSB7Ci0g
ICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZSAoZml4ZWRQaXRjaEZvbnRzLCBmb250LCBr
Q0ZCb29sZWFuVHJ1ZSk7Ci0gICAgICAgICAgICByZXQgPSBZRVM7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZSAoZml4ZWRQaXRjaEZv
bnRzLCBmb250LCBrQ0ZCb29sZWFuRmFsc2UpOwotICAgICAgICAgICAgcmV0ID0gTk87Ci0gICAg
ICAgIH0KLSAgICB9CisKICAgICByZXR1cm4gcmV0OyAgICAKIH0KIApAQCAtMjkzLDI5ICsyMjks
MzIgQEAgZm9udHNDaGFuZ2VkKCBBVFNGb250Tm90aWZpY2F0aW9uSW5mb1JlZgogewogICAgIFtz
dXBlciBpbml0XTsKICAgICAKLSAgICBjYWNoZUZvclNjcmVlbiA9IFtbTlNNdXRhYmxlRGljdGlv
bmFyeSBhbGxvY10gaW5pdF07Ci0gICAgY2FjaGVGb3JQcmludGVyID0gW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgV0VC
X1RFWFRfUkVOREVSRVJfRkFDVE9SWV9OVU1fQ0FDSEVTOyArK2kpCisgICAgICAgIGNhY2hlc1tp
XSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CiAgICAgCiAgICAgcmV0dXJu
IHNlbGY7CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIFtjYWNoZUZvclNjcmVlbiByZWxl
YXNlXTsKLSAgICBbY2FjaGVGb3JQcmludGVyIHJlbGVhc2VdOworICAgIGludCBpOworICAgIGZv
ciAoaSA9IDA7IGkgPCBXRUJfVEVYVF9SRU5ERVJFUl9GQUNUT1JZX05VTV9DQUNIRVM7ICsraSkK
KyAgICAgICAgW2NhY2hlc1tpXSByZWxlYXNlXTsKKwogICAgIFt2aWV3QnVmZmVycyByZWxlYXNl
XTsKICAgICBbdmlld1N0YWNrIHJlbGVhc2VdOwogICAgIAogICAgIFtzdXBlciBkZWFsbG9jXTsK
IH0KIAotLSAoV2ViVGV4dFJlbmRlcmVyICopcmVuZGVyZXJXaXRoRm9udDooTlNGb250ICopZm9u
dCB1c2luZ1ByaW50ZXJGb250OihCT09MKXVzaW5nUHJpbnRlckZvbnQKKy0gKFdlYlRleHRSZW5k
ZXJlciAqKXJlbmRlcmVyV2l0aEZvbnQ6KFdlYkNvcmVGb250KWZvbnQKIHsKLSAgICBOU011dGFi
bGVEaWN0aW9uYXJ5ICpjYWNoZSA9IHVzaW5nUHJpbnRlckZvbnQgPyBjYWNoZUZvclByaW50ZXIg
OiBjYWNoZUZvclNjcmVlbjsKLSAgICBXZWJUZXh0UmVuZGVyZXIgKnJlbmRlcmVyID0gW2NhY2hl
IG9iamVjdEZvcktleTpmb250XTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpjYWNoZSA9IGNh
Y2hlc1soZm9udC5zeW50aGV0aWNCb2xkIDw8IDIpIHwgKGZvbnQuc3ludGhldGljT2JsaXF1ZSA8
PCAxKSB8IGZvbnQuZm9yUHJpbnRlcl07CisgICAgV2ViVGV4dFJlbmRlcmVyICpyZW5kZXJlciA9
IFtjYWNoZSBvYmplY3RGb3JLZXk6Zm9udC5mb250XTsKICAgICBpZiAocmVuZGVyZXIgPT0gbmls
KSB7Ci0gICAgICAgIHJlbmRlcmVyID0gW1tXZWJUZXh0UmVuZGVyZXIgYWxsb2NdIGluaXRXaXRo
Rm9udDpmb250IHVzaW5nUHJpbnRlckZvbnQ6dXNpbmdQcmludGVyRm9udF07Ci0gICAgICAgIFtj
YWNoZSBzZXRPYmplY3Q6cmVuZGVyZXIgZm9yS2V5OmZvbnRdOworICAgICAgICByZW5kZXJlciA9
IFtbV2ViVGV4dFJlbmRlcmVyIGFsbG9jXSBpbml0V2l0aEZvbnQ6Zm9udF07CisgICAgICAgIFtj
YWNoZSBzZXRPYmplY3Q6cmVuZGVyZXIgZm9yS2V5OmZvbnQuZm9udF07CiAgICAgICAgIFtyZW5k
ZXJlciByZWxlYXNlXTsKICAgICB9CiAgICAgcmV0dXJuIHJlbmRlcmVyOwpAQCAtMzM2LDU1ICsy
NzUsNTcgQEAgZm9udHNDaGFuZ2VkKCBBVFNGb250Tm90aWZpY2F0aW9uSW5mb1JlZgogICAgIHJl
dHVybiBmb250OwogfQogCi0gICAgICAgIAotCi0tIChOU0ZvbnQgKilmb250V2l0aEZhbWlsaWVz
OihOU1N0cmluZyAqKilmYW1pbGllcyB0cmFpdHM6KE5TRm9udFRyYWl0TWFzayl0cmFpdHMgc2l6
ZTooZmxvYXQpc2l6ZQorLSAoV2ViQ29yZUZvbnQpZm9udFdpdGhGYW1pbGllczooTlNTdHJpbmcg
KiopZmFtaWxpZXMgdHJhaXRzOihOU0ZvbnRUcmFpdE1hc2spdHJhaXRzIHNpemU6KGZsb2F0KXNp
emUKIHsKICAgICBOU0ZvbnQgKmZvbnQgPSBuaWw7Ci0gICAgTlNTdHJpbmcgKmZhbWlseTsKLSAg
ICBpbnQgaSA9IDA7CiAgICAgCi0gICAgd2hpbGUgKGZhbWlsaWVzICYmIGZhbWlsaWVzW2ldICE9
IDAgJiYgZm9udCA9PSBuaWwpewotICAgICAgICBmYW1pbHkgPSBmYW1pbGllc1tpKytdOworICAg
IGludCBpID0gMDsKKyAgICB3aGlsZSAoZmFtaWxpZXMgJiYgZmFtaWxpZXNbaV0gIT0gMCAmJiBm
b250ID09IG5pbCkgeworICAgICAgICBOU1N0cmluZyAqZmFtaWx5ID0gZmFtaWxpZXNbaSsrXTsK
ICAgICAgICAgaWYgKFtmYW1pbHkgbGVuZ3RoXSAhPSAwKQotICAgICAgICAgICAgZm9udCA9IFtz
ZWxmIGNhY2hlZEZvbnRGcm9tRmFtaWx5OiBmYW1pbHkgdHJhaXRzOnRyYWl0cyBzaXplOnNpemVd
OworICAgICAgICAgICAgZm9udCA9IFtzZWxmIGNhY2hlZEZvbnRGcm9tRmFtaWx5OmZhbWlseSB0
cmFpdHM6dHJhaXRzIHNpemU6c2l6ZV07CiAgICAgfQorCiAgICAgaWYgKGZvbnQgPT0gbmlsKSB7
Ci0gICAgICAgIC8vIFdlIGRpZG4ndCBmaW5kIGEgZm9udC4gIFVzZSBhIGZhbGxiYWNrIGZvbnQu
Ci0gICAgICAgIHN0YXRpYyBpbnQgbWF0Y2hDb3VudCA9IDM7Ci0gICAgICAgIHN0YXRpYyBOU1N0
cmluZyAqbWF0Y2hXb3Jkc1tdID0geyBAIkFyYWJpYyIsIEAiUGFzaHRvIiwgQCJVcmR1IiB9Owot
ICAgICAgICBzdGF0aWMgTlNTdHJpbmcgKm1hdGNoRmFtaWxpZXNbXSA9IHsgQCJHZWV6YSBQcm8i
LCBAIkdlZXphIFBybyIsIEAiR2VlemEgUHJvIiB9OworICAgICAgICAvLyBXZSBkaWRuJ3QgZmlu
ZCBhIGZvbnQuIFVzZSBhIGZhbGxiYWNrIGZvbnQuCiAgICAgICAgIAogICAgICAgICAvLyBGaXJz
dCB3ZSdsbCBhdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNo
IGJhc2VkIG9uIAogICAgICAgICAvLyB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4gdGhlIHRo
ZSByZXF1ZXN0ZWQgbmFtZXMuICBGb3IgZXhhbXBsZSwgd2UnbGwKICAgICAgICAgLy8gbWF0Y2gg
YW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0byBHZWV6YSBQcm8uCi0gICAgICAgIGlu
dCBqOwogICAgICAgICBpID0gMDsKICAgICAgICAgd2hpbGUgKGZhbWlsaWVzICYmIGZhbWlsaWVz
W2ldICE9IDAgJiYgZm9udCA9PSBuaWwpIHsKLSAgICAgICAgICAgIGZhbWlseSA9IGZhbWlsaWVz
W2krK107CisgICAgICAgICAgICBOU1N0cmluZyAqZmFtaWx5ID0gZmFtaWxpZXNbaSsrXTsKICAg
ICAgICAgICAgIGlmIChbZmFtaWx5IGxlbmd0aF0gIT0gMCkgewotICAgICAgICAgICAgICAgIGog
PSAwOwotICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgbWF0Y2hDb3VudCAmJiBmb250ID09IG5p
bCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoW2ZhbWlseSByYW5nZU9mU3RyaW5nOm1hdGNo
V29yZHNbal0gb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF0ubG9jYXRpb24gIT0gTlNO
b3RGb3VuZCkgeworICAgICAgICAgICAgICAgIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IG1hdGNo
V29yZHNbM10gPSB7IEAiQXJhYmljIiwgQCJQYXNodG8iLCBAIlVyZHUiIH07CisgICAgICAgICAg
ICAgICAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgbWF0Y2hGYW1pbGllc1szXSA9IHsgQCJHZWV6
YSBQcm8iLCBAIkdlZXphIFBybyIsIEAiR2VlemEgUHJvIiB9OworICAgICAgICAgICAgICAgIGlu
dCBqOworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAzICYmIGZvbnQgPT0gbmlsOyAr
K2opCisgICAgICAgICAgICAgICAgICAgIGlmIChbZmFtaWx5IHJhbmdlT2ZTdHJpbmc6bWF0Y2hX
b3Jkc1tqXSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXS5sb2NhdGlvbiAhPSBOU05v
dEZvdW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IFtzZWxmIGNhY2hlZEZvbnRG
cm9tRmFtaWx5Om1hdGNoRmFtaWxpZXNbal0gdHJhaXRzOnRyYWl0cyBzaXplOnNpemVdOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGorKzsKLSAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFN0
aWxsIG5vdGhpbmcgZm91bmQsIHVzZSB0aGUgZmluYWwgZmFsbGJhY2suCi0gICAgICAgIGlmIChm
b250ID09IG5pbCkgeworICAgICAgICBpZiAoZm9udCA9PSBuaWwpCiAgICAgICAgICAgICBmb250
ID0gW3NlbGYgZmFsbGJhY2tGb250V2l0aFRyYWl0czp0cmFpdHMgc2l6ZTpzaXplXTsKLSAgICAg
ICAgfQogICAgIH0KIAotICAgIHJldHVybiBmb250OworICAgIE5TRm9udFRyYWl0TWFzayBhY3R1
YWxUcmFpdHMgPSAwOworICAgIGlmICh0cmFpdHMgJiAoTlNJdGFsaWNGb250TWFzayB8IE5TQm9s
ZEZvbnRNYXNrKSkKKyAgICAgICAgYWN0dWFsVHJhaXRzID0gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJl
ZEZvbnRNYW5hZ2VyXSB0cmFpdHNPZkZvbnQ6Zm9udF07CisKKyAgICBXZWJDb3JlRm9udCByZXN1
bHQ7CisgICAgcmVzdWx0LmZvbnQgPSBmb250OworICAgIHJlc3VsdC5zeW50aGV0aWNCb2xkID0g
KHRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKSAmJiAhKGFjdHVhbFRyYWl0cyAmIE5TQm9sZEZvbnRN
YXNrKTsKKyAgICByZXN1bHQuc3ludGhldGljT2JsaXF1ZSA9ICh0cmFpdHMgJiBOU0l0YWxpY0Zv
bnRNYXNrKSAmJiAhKGFjdHVhbFRyYWl0cyAmIE5TSXRhbGljRm9udE1hc2spOworICAgIHJlc3Vs
dC5mb3JQcmludGVyID0gTk87CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIEJPT0wg
YWNjZXB0YWJsZUNob2ljZShOU0ZvbnRUcmFpdE1hc2sgZGVzaXJlZFRyYWl0cywgaW50IGRlc2ly
ZWRXZWlnaHQsCiAgICAgTlNGb250VHJhaXRNYXNrIGNhbmRpZGF0ZVRyYWl0cywgaW50IGNhbmRp
ZGF0ZVdlaWdodCkKIHsKKyAgICBkZXNpcmVkVHJhaXRzICY9IH5TWU5USEVTSVpFRF9GT05UX1RS
QUlUUzsKICAgICByZXR1cm4gKGNhbmRpZGF0ZVRyYWl0cyAmIGRlc2lyZWRUcmFpdHMpID09IGRl
c2lyZWRUcmFpdHM7CiB9CiAKQEAgLTQxMiwxOSArMzUzLDEzIEBAIHN0YXRpYyBCT09MIGJldHRl
ckNob2ljZShOU0ZvbnRUcmFpdE1hc2sKICAgICBpbnQgaSA9IDA7CiAgICAgTlNGb250VHJhaXRN
YXNrIG1hc2s7CiAgICAgd2hpbGUgKChtYXNrID0gbWFza3NbaSsrXSkpIHsKLSAgICAgICAgaWYg
KChkZXNpcmVkVHJhaXRzICYgbWFzaykgIT0gMCkgewotICAgICAgICAgICAgQVNTRVJUKChjaG9z
ZW5UcmFpdHMgJiBtYXNrKSAhPSAwKTsKLSAgICAgICAgICAgIEFTU0VSVCgoY2FuZGlkYXRlVHJh
aXRzICYgbWFzaykgIT0gMCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICBCT09MIGNob3Nlbkhhc1Vud2FudGVkVHJhaXQgPSAoY2hvc2VuVHJhaXRzICYgbWFzaykg
IT0gMDsKLSAgICAgICAgQk9PTCBjYW5kaWRhdGVIYXNVbndhbnRlZFRyYWl0ID0gKGNhbmRpZGF0
ZVRyYWl0cyAmIG1hc2spICE9IDA7Ci0gICAgICAgIGlmICghY2FuZGlkYXRlSGFzVW53YW50ZWRU
cmFpdCAmJiBjaG9zZW5IYXNVbndhbnRlZFRyYWl0KSB7CisgICAgICAgIEJPT0wgZGVzaXJlZCA9
IChkZXNpcmVkVHJhaXRzICYgbWFzaykgIT0gMDsKKyAgICAgICAgQk9PTCBjaG9zZW5IYXNVbndh
bnRlZFRyYWl0ID0gZGVzaXJlZCAhPSAoKGNob3NlblRyYWl0cyAmIG1hc2spICE9IDApOworICAg
ICAgICBCT09MIGNhbmRpZGF0ZUhhc1Vud2FudGVkVHJhaXQgPSBkZXNpcmVkICE9ICgoY2FuZGlk
YXRlVHJhaXRzICYgbWFzaykgIT0gMCk7CisgICAgICAgIGlmICghY2FuZGlkYXRlSGFzVW53YW50
ZWRUcmFpdCAmJiBjaG9zZW5IYXNVbndhbnRlZFRyYWl0KQogICAgICAgICAgICAgcmV0dXJuIFlF
UzsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWNob3Nlbkhhc1Vud2FudGVkVHJhaXQgJiYgY2Fu
ZGlkYXRlSGFzVW53YW50ZWRUcmFpdCkgeworICAgICAgICBpZiAoIWNob3Nlbkhhc1Vud2FudGVk
VHJhaXQgJiYgY2FuZGlkYXRlSGFzVW53YW50ZWRUcmFpdCkKICAgICAgICAgICAgIHJldHVybiBO
TzsKLSAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpbnQgY2hvc2VuV2VpZ2h0RGVsdGEgPSBj
aG9zZW5XZWlnaHQgLSBkZXNpcmVkV2VpZ2h0OwpAQCAtNDYyLDE0ICszOTcsMTQgQEAgc3RhdGlj
IEJPT0wgYmV0dGVyQ2hvaWNlKE5TRm9udFRyYWl0TWFzawogICAgIHdoaWxlICgoYXZhaWxhYmxl
Rm9udCA9IFthdmFpbGFibGVGb250cyBuZXh0T2JqZWN0XSkpIHsKICAgICAgICAgaWYgKFtkZXNp
cmVkRmFtaWx5IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6YXZhaWxhYmxlRm9udF0gPT0gTlNPcmRl
cmVkU2FtZSkgewogICAgICAgICAgICAgTlNGb250ICpuYW1lTWF0Y2hlZEZvbnQgPSBbTlNGb250
IGZvbnRXaXRoTmFtZTphdmFpbGFibGVGb250IHNpemU6c2l6ZV07Ci0JICAgIAotCSAgICAvLyBT
cGVjaWFsIGNhc2UgT3Nha2EtTW9uby4gIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5
OTQ2Nz4sIHdlIG5lZWQgdG8gCi0JICAgIC8vIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0
Y2guCi0JICAgIGlmIChbZGVzaXJlZEZhbWlseSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiT3Nh
a2EtTW9ubyJdID09IE5TT3JkZXJlZFNhbWUgJiYgZGVzaXJlZFRyYWl0cyA9PSAwKSB7Ci0JCUxP
RyAoRm9udFNlbGVjdGlvbiwgImZvdW5kIGV4YWN0IG1hdGNoIGZvciBPc2FrYS1Nb25vXG4iKTsK
LQkJcmV0dXJuIG5hbWVNYXRjaGVkRm9udDsKLQkgICAgfQotCSAgICAKKyAgICAKKyAgICAgICAg
ICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLiAgQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJv
YmxlbS8zOTk5NDY3Piwgd2UgbmVlZCB0byAKKyAgICAgICAgICAgIC8vIHRyZWF0IE9zYWthLU1v
bm8gYXMgZml4ZWQgcGl0Y2guCisgICAgICAgICAgICBpZiAoW2Rlc2lyZWRGYW1pbHkgY2FzZUlu
c2Vuc2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9PSBOU09yZGVyZWRTYW1lICYmIGRlc2ly
ZWRUcmFpdHMgPT0gMCkgeworICAgICAgICAgICAgICAgIExPRyAoRm9udFNlbGVjdGlvbiwgImZv
dW5kIGV4YWN0IG1hdGNoIGZvciBPc2FrYS1Nb25vXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbmFtZU1hdGNoZWRGb250OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBOU0ZvbnRU
cmFpdE1hc2sgdHJhaXRzID0gW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpuYW1lTWF0Y2hlZEZv
bnRdOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoKHRyYWl0cyAmIGRlc2lyZWRUcmFp
dHMpID09IGRlc2lyZWRUcmFpdHMpewpAQCAtNTA5LDEyICs0NDQsMTAgQEAgc3RhdGljIEJPT0wg
YmV0dGVyQ2hvaWNlKE5TRm9udFRyYWl0TWFzawogICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgZm9u
dFRyYWl0cyA9IFtbZm9udEluZm8gb2JqZWN0QXRJbmRleDozXSB1bnNpZ25lZEludFZhbHVlXTsK
ICAgICAgICAgCiAgICAgICAgIEJPT0wgbmV3V2lubmVyOwotICAgICAgICAKICAgICAgICAgaWYg
KCFjaG9zZUZvbnQpIHsKICAgICAgICAgICAgIG5ld1dpbm5lciA9IGFjY2VwdGFibGVDaG9pY2Uo
ZGVzaXJlZFRyYWl0cywgREVTSVJFRF9XRUlHSFQsIGZvbnRUcmFpdHMsIGZvbnRXZWlnaHQpOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbmV3V2lubmVyID0gYmV0dGVyQ2hvaWNlKGRl
c2lyZWRUcmFpdHMsIERFU0lSRURfV0VJR0hULAotICAgICAgICAgICAgICAgIGNob3NlblRyYWl0
cywgY2hvc2VuV2VpZ2h0LCBmb250VHJhaXRzLCBmb250V2VpZ2h0KTsKKyAgICAgICAgICAgIG5l
d1dpbm5lciA9IGJldHRlckNob2ljZShkZXNpcmVkVHJhaXRzLCBERVNJUkVEX1dFSUdIVCwgY2hv
c2VuVHJhaXRzLCBjaG9zZW5XZWlnaHQsIGZvbnRUcmFpdHMsIGZvbnRXZWlnaHQpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKG5ld1dpbm5lcikgewpJbmRleDogV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNwpkaWZmIC1wIC11IC1yMS43IFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagotLS0gV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTkgU2VwIDIw
MDUgMjI6MTQ6NDMgLTAwMDAJMS43CisrKyBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJMTAgU2VwIDIwMDUgMTY6MzM6MTcgLTAwMDAKQEAgLTcwLDcgKzcwLDYgQEAKIAkJ
OTM5ODEwM0MwODI0QkYwMTAwOERGMDM4IC8qIFdlYkJyaWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVBRkI0NUUwMkI5NERDODAxODYzNUNBIC8q
IFdlYkJyaWRnZS5oICovOyB9OwogCQk5Mzk4MTAzRDA4MjRCRjAxMDA4REYwMzggLyogV2ViQ29v
a2llQWRhcHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjU0ODhDRjQwMkNCMDRFRTAxRkY2Mjc0IC8qIFdlYkNvb2tpZUFkYXB0ZXIuaCAqLzsgfTsK
IAkJOTM5ODEwM0UwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZpbGVCdXR0b24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMTEwMjI4MDM2NjdDRjEwMDg2
MzVDRSAvKiBXZWJGaWxlQnV0dG9uLmggKi87IH07Ci0JCTkzOTgxMDNGMDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJHbHlwaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjVFN0IyNDUwMzAyNUNFODAxQTgwMTgwIC8qIFdlYkdseXBoQnVmZmVyLmgg
Ki87IH07CiAJCTkzOTgxMDQwMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJJbWFnZVJlbmRlcmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Q0UxRjhBMDAy
QTVDNkYzMEVDQTJBQ0QgLyogV2ViSW1hZ2VSZW5kZXJlci5oICovOyB9OwogCQk5Mzk4MTA0MTA4
MjRCRjAxMDA4REYwMzggLyogV2ViSW1hZ2VSZW5kZXJlckZhY3RvcnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlDRTFGOEEyMDJBNUM2RjMwRUNBMkFD
RCAvKiBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5oICovOyB9OwogCQk5Mzk4MTA0MjA4MjRCRjAx
MDA4REYwMzggLyogV2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzQ1RDRFQTAzNjVDNUIyMDA4NjM1Q0Ug
LyogV2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxMCw3ICsyMDksNiBAQAogCQk5Mzk4MTBERTA4
MjRCRjAxMDA4REYwMzggLyogV2ViQnJpZGdlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNUFGQjQ1RjAyQjk0REM4MDE4NjM1Q0EgLyogV2ViQnJpZGdl
Lm0gKi87IH07CiAJCTkzOTgxMERGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJDb29raWVBZGFwdGVy
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTQ4OENG
NTAyQ0IwNEVFMDFGRjYyNzQgLyogV2ViQ29va2llQWRhcHRlci5tICovOyB9OwogCQk5Mzk4MTBF
MDA4MjRCRjAxMDA4REYwMzggLyogV2ViRmlsZUJ1dHRvbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMxMTAyMjkwMzY2N0NGMTAwODYzNUNFIC8qIFdl
YkZpbGVCdXR0b24ubSAqLzsgfTsKLQkJOTM5ODEwRTEwODI0QkYwMTAwOERGMDM4IC8qIFdlYkds
eXBoQnVmZmVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNUU3QjI0NjAzMDI1Q0U4MDFBODAxODAgLyogV2ViR2x5cGhCdWZmZXIubSAqLzsgfTsKIAkJ
OTM5ODEwRTIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkltYWdlUmVuZGVyZXIubSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlDRTFGOEExMDJBNUM2RjMwRUNB
MkFDRCAvKiBXZWJJbWFnZVJlbmRlcmVyLm0gKi87IH07CiAJCTkzOTgxMEUzMDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUNFMUY4QTMwMkE1QzZGMzBFQ0EyQUNEIC8qIFdlYklt
YWdlUmVuZGVyZXJGYWN0b3J5Lm0gKi87IH07CiAJCTkzOTgxMEU0MDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNDVENEVCMDM2NUM1QjIwMDg2MzVDRSAvKiBXZWJKYXZh
U2NyaXB0VGV4dElucHV0UGFuZWwubSAqLzsgfTsKQEAgLTU4Miw4ICs1ODAsNiBAQAogCQlGNUUw
QTc2RjAyQjhGRUU0MDFDMUE1MjUgLyogV2ViVVJMc1dpdGhUaXRsZXMubSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYlVSTHNXaXRoVGl0bGVzLm07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY1RTBFMTA4MDJCQzQ1RjgwMTg2MzVDQSAvKiBXZWJTdWJyZXNv
dXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTdWJyZXNv
dXJjZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUUwRTEwOTAyQkM0
NUY4MDE4NjM1Q0EgLyogV2ViU3VicmVzb3VyY2VMb2FkZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5vYmpjOyBwYXRoID0gV2ViU3VicmVzb3VyY2VMb2FkZXIubTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRjVFN0IyNDUwMzAyNUNFODAxQTgwMTgwIC8qIFdlYkdseXBoQnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdseXBoQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY1RTdCMjQ2MDMwMjVDRTgwMUE4MDE4MCAvKiBX
ZWJHbHlwaEJ1ZmZlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJH
bHlwaEJ1ZmZlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUVCQzQ1NTAyMTM0
QkMzMDFDQTE1MjAgLyogV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1RUJDNDU2MDIxMzRCQzMwMUNBMTUyMCAvKiBXZWJCYXNl
TmV0c2NhcGVQbHVnaW5WaWV3Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9
IFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRjVGNzE3MUUwMjg4NDkzQzAxODYzNUNBIC8qIFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOZXRzY2FwZVBsdWdpblBhY2th
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5Niw4ICs5OTIsNiBAQAogCQkJ
CTkzMDU4OTJBMDcwODY4QjMwMEU3OUQ5NiAvKiBXZWJEYXNoYm9hcmRSZWdpb24uaCAqLywKIAkJ
CQk5MzExMDIyODAzNjY3Q0YxMDA4NjM1Q0UgLyogV2ViRmlsZUJ1dHRvbi5oICovLAogCQkJCTkz
MTEwMjI5MDM2NjdDRjEwMDg2MzVDRSAvKiBXZWJGaWxlQnV0dG9uLm0gKi8sCi0JCQkJRjVFN0Iy
NDUwMzAyNUNFODAxQTgwMTgwIC8qIFdlYkdseXBoQnVmZmVyLmggKi8sCi0JCQkJRjVFN0IyNDYw
MzAyNUNFODAxQTgwMTgwIC8qIFdlYkdseXBoQnVmZmVyLm0gKi8sCiAJCQkJQkUyNkYxOEQwNTUx
N0UwODAwQkZBMEMzIC8qIFdlYkdyYXBoaWNzQnJpZGdlLmggKi8sCiAJCQkJQkUyNkYxOEUwNTUx
N0UwODAwQkZBMEMzIC8qIFdlYkdyYXBoaWNzQnJpZGdlLm0gKi8sCiAJCQkJNTE0QzRDMkEwNzVF
N0RFNTAwQjg5Q0FEIC8qIFdlYkltYWdlRGVjb2RlSXRlbS5oICovLApAQCAtMTE1Myw3ICsxMTQ3
LDYgQEAKIAkJCQk5Mzk4MTAzQzA4MjRCRjAxMDA4REYwMzggLyogV2ViQnJpZGdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5Mzk4MTAzRDA4MjRCRjAxMDA4REYwMzggLyogV2ViQ29va2llQWRhcHRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwM0UwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZp
bGVCdXR0b24uaCBpbiBIZWFkZXJzICovLAotCQkJCTkzOTgxMDNGMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJHbHlwaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNDAwODI0QkYwMTAw
OERGMDM4IC8qIFdlYkltYWdlUmVuZGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDQx
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM5ODEwNDIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkphdmFTY3JpcHRUZXh0SW5w
dXRQYW5lbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNzI3LDcgKzE3MjAsNiBAQAogCQkJCTkzOTgx
MERFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJCcmlkZ2UubSBpbiBTb3VyY2VzICovLAogCQkJCTkz
OTgxMERGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJDb29raWVBZGFwdGVyLm0gaW4gU291cmNlcyAq
LywKIAkJCQk5Mzk4MTBFMDA4MjRCRjAxMDA4REYwMzggLyogV2ViRmlsZUJ1dHRvbi5tIGluIFNv
dXJjZXMgKi8sCi0JCQkJOTM5ODEwRTEwODI0QkYwMTAwOERGMDM4IC8qIFdlYkdseXBoQnVmZmVy
Lm0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBFMjA4MjRCRjAxMDA4REYwMzggLyogV2ViSW1h
Z2VSZW5kZXJlci5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRTMwODI0QkYwMTAwOERGMDM4
IC8qIFdlYkltYWdlUmVuZGVyZXJGYWN0b3J5Lm0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBF
NDA4MjRCRjAxMDA4REYwMzggLyogV2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLm0gaW4gU291
cmNlcyAqLywKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJIVE1M
Vmlldy5tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ2NwpkaWZmIC1wIC11IC1yMS40NjcgV2Vi
S2l0L1dlYlZpZXcuc3VicHJvai9XZWJIVE1MVmlldy5tCi0tLSBXZWJLaXQvV2ViVmlldy5zdWJw
cm9qL1dlYkhUTUxWaWV3Lm0JNSBTZXAgMjAwNSAyMjoyNjowNSAtMDAwMAkxLjQ2NworKysgV2Vi
S2l0L1dlYlZpZXcuc3VicHJvai9XZWJIVE1MVmlldy5tCTEwIFNlcCAyMDA1IDE2OjMzOjIyIC0w
MDAwCkBAIC0yNDAxLDI0ICsyNDAxLDEyIEBAIHN0YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhpdFZp
ZXcgPSBuaWw7CiAgICAgWyhXZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVydmlld10gc2V0QWRkaXRp
b25hbENsaXA6cmVjdF07CiAKICAgICBOU19EVVJJTkcgewotICAgICAgICBXZWJUZXh0UmVuZGVy
ZXJGYWN0b3J5ICp0ZXh0UmVuZGVyZXJGYWN0b3J5SWZDb2FsZXNjaW5nID0gbmlsOwotICAgICAg
ICBpZiAoW1dlYlRleHRSZW5kZXJlciBzaG91bGRCdWZmZXJUZXh0RHJhd2luZ10gJiYgW05TVmll
dyBmb2N1c1ZpZXddKSB7Ci0gICAgICAgICAgICB0ZXh0UmVuZGVyZXJGYWN0b3J5SWZDb2FsZXNj
aW5nID0gW1dlYlRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV07Ci0gICAgICAgICAg
ICBbdGV4dFJlbmRlcmVyRmFjdG9yeUlmQ29hbGVzY2luZyBzdGFydENvYWxlc2NlVGV4dERyYXdp
bmddOwotICAgICAgICB9Ci0KICAgICAgICAgaWYgKFtzZWxmIF90cmFuc3BhcmVudEJhY2tncm91
bmRdKSB7CiAgICAgICAgICAgICBbW05TQ29sb3IgY2xlYXJDb2xvcl0gc2V0XTsKICAgICAgICAg
ICAgIE5TUmVjdEZpbGwgKHJlY3QpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvL2Rv
dWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwogICAgICAgICBbW3NlbGYg
X2JyaWRnZV0gZHJhd1JlY3Q6cmVjdF07Ci0gICAgICAgIC8vTE9HKFRpbWluZywgImRyYXcgdGlt
ZSAlZSIsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQpOwotCi0gICAgICAgIGlm
ICh0ZXh0UmVuZGVyZXJGYWN0b3J5SWZDb2FsZXNjaW5nICE9IG5pbCkgewotICAgICAgICAgICAg
W3RleHRSZW5kZXJlckZhY3RvcnlJZkNvYWxlc2NpbmcgZW5kQ29hbGVzY2VUZXh0RHJhd2luZ107
Ci0gICAgICAgIH0KIAogICAgICAgICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSBy
ZXNldEFkZGl0aW9uYWxDbGlwXTsKIApJbmRleDogV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJU
ZXh0Vmlldy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViVmlldy5z
dWJwcm9qL1dlYlRleHRWaWV3Lm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjAKZGlmZiAtcCAt
dSAtcjEuNjAgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJUZXh0Vmlldy5tCi0tLSBXZWJLaXQv
V2ViVmlldy5zdWJwcm9qL1dlYlRleHRWaWV3Lm0JMjcgSnVsIDIwMDUgMjE6MzY6NDQgLTAwMDAJ
MS42MAorKysgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJUZXh0Vmlldy5tCTEwIFNlcCAyMDA1
IDE2OjMzOjIyIC0wMDAwCkBAIC0xMjQsMTIgKzEyNCw4IEBACiAtICh2b2lkKXNldEZpeGVkV2lk
dGhGb250CiB7CiAgICAgV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW3NlbGYgX3ByZWZl
cmVuY2VzXTsKLSAgICBOU1N0cmluZyAqZmFtaWxpZXNbMl07Ci0gICAgZmFtaWxpZXNbMF0gPSBb
cHJlZmVyZW5jZXMgZml4ZWRGb250RmFtaWx5XTsKLSAgICBmYW1pbGllc1sxXSA9IG5pbDsKLSAg
ICBOU0ZvbnQgKmZvbnQgPSBbW1dlYlRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0g
Zm9udFdpdGhGYW1pbGllczpmYW1pbGllcyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0czowIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplOltwcmVmZXJlbmNlcyBkZWZhdWx0Rml4ZWRGb250U2l6ZV0qX3RleHRTaXpl
TXVsdGlwbGllcl07CisgICAgTlNGb250ICpmb250ID0gW1tXZWJUZXh0UmVuZGVyZXJGYWN0b3J5
IHNoYXJlZEZhY3RvcnldIGNhY2hlZEZvbnRGcm9tRmFtaWx5OltwcmVmZXJlbmNlcyBmaXhlZEZv
bnRGYW1pbHldCisgICAgICAgIHRyYWl0czowIHNpemU6W3ByZWZlcmVuY2VzIGRlZmF1bHRGaXhl
ZEZvbnRTaXplXSAqIF90ZXh0U2l6ZU11bHRpcGxpZXJdOwogICAgIGlmIChmb250KSB7CiAgICAg
ICAgIFtzZWxmIHNldEZvbnQ6Zm9udF07CiAgICAgfQpJbmRleDogV2ViS2l0L1dlYlZpZXcuc3Vi
cHJvai9XZWJWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9XZWJW
aWV3LnN1YnByb2ovV2ViVmlldy5tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMwNApkaWZmIC1w
IC11IC1yMS4zMDQgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3Lm0KLS0tIFdlYktpdC9X
ZWJWaWV3LnN1YnByb2ovV2ViVmlldy5tCTIzIEF1ZyAyMDA1IDAxOjIyOjE2IC0wMDAwCTEuMzA0
CisrKyBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXcubQkxMCBTZXAgMjAwNSAxNjozMzoy
NCAtMDAwMApAQCAtNDE0LDcgKzQxNCw3IEBAIHN0YXRpYyBib29sIGRlYnVnV2lkZ2V0ID0gdHJ1
ZTsKIAogKyAodm9pZClfc2V0QWx3YXlzVXNlQVRTVTooQk9PTClmCiB7Ci0gICAgW1dlYlRleHRS
ZW5kZXJlciBfc2V0QWx3YXlzVXNlQVRTVTpmXTsKKyAgICBbV2ViVGV4dFJlbmRlcmVyIHNldEFs
d2F5c1VzZUFUU1U6Zl07CiB9CiAKICsgKEJPT0wpY2FuU2hvd0ZpbGU6KE5TU3RyaW5nICopcGF0
aAo=
</data>
<flag name="review"
          id="552"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4106</attachid>
            <date>2005-09-30 08:18:06 -0700</date>
            <delta_ts>2005-10-03 14:44:56 -0700</delta_ts>
            <desc>revised patch fixing bug Mitz noticed, and with RTL back to rtl as requested</desc>
            <filename>SynthesizedBoldObliquePatch2.txt</filename>
            <type>text/plain</type>
            <size>154593</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUvV2ViQ29yZS5leHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQKZGlmZiAtcCAt
dSAtcjEuNDQgV2ViQ29yZS9XZWJDb3JlLmV4cAotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cAkzMCBK
dWwgMjAwNSAwOTowNTowMSAtMDAwMAkxLjQ0CisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwCTMwIFNl
cCAyMDA1IDE1OjE1OjQ2IC0wMDAwCkBAIC0xMzEsNSArMTMxLDYgQEAgX1dlYkNvcmVFbGVtZW50
TGlua1VSTEtleQogX1dlYkNvcmVFbGVtZW50VGl0bGVLZXkKIF9XZWJDb3JlSW5pdGlhbGl6ZUVt
cHR5VGV4dEdlb21ldHJ5CiBfV2ViQ29yZUluaXRpYWxpemVFbXB0eVRleHRTdHlsZQorX1dlYkNv
cmVJbml0aWFsaXplRm9udAogX1dlYkNvcmVJbml0aWFsaXplVGV4dFJ1bgogX1dlYkNvcmVQYWdl
Q2FjaGVTdGF0ZUtleQpJbmRleDogV2ViQ29yZS9rd3EvS1dRQ29tYm9Cb3gubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUNvbWJvQm94Lm1tLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjY2CmRpZmYgLXAgLXUgLXIxLjY2IFdlYkNvcmUva3dxL0tXUUNvbWJv
Qm94Lm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FDb21ib0JveC5tbQkyNyBTZXAgMjAwNSAyMjozNzoy
NyAtMDAwMAkxLjY2CisrKyBXZWJDb3JlL2t3cS9LV1FDb21ib0JveC5tbQkzMCBTZXAgMjAwNSAx
NToxNTo0OCAtMDAwMApAQCAtMTYyLDkgKzE2MiwxMSBAQCBRU2l6ZSBRQ29tYm9Cb3g6OnNpemVI
aW50KCkgY29uc3QgCiAgICAgICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPEtXUUxpc3RCb3hJ
dGVtPiBpID0gY29uc3RfY2FzdDxjb25zdCBRVmFsdWVMaXN0PEtXUUxpc3RCb3hJdGVtPiAmPihf
aXRlbXMpLmJlZ2luKCk7CiAgICAgICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPEtXUUxpc3RC
b3hJdGVtPiBlID0gY29uc3RfY2FzdDxjb25zdCBRVmFsdWVMaXN0PEtXUUxpc3RCb3hJdGVtPiAm
PihfaXRlbXMpLmVuZCgpOwogICAgICAgICBpZiAoaSAhPSBlKSB7Ci0gICAgICAgICAgICBpZCA8
V2ViQ29yZVRleHRSZW5kZXJlcj4gaXRlbVJlbmRlcmVyID0gW1tXZWJDb3JlVGV4dFJlbmRlcmVy
RmFjdG9yeSBzaGFyZWRGYWN0b3J5XQotICAgICAgICAgICAgICAgIHJlbmRlcmVyV2l0aEZvbnQ6
W2J1dHRvbiBmb250XQotICAgICAgICAgICAgICAgIHVzaW5nUHJpbnRlckZvbnQ6IVtOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl1dOworICAgICAgICAgICAg
V2ViQ29yZUZvbnQgaXRlbUZvbnQ7CisgICAgICAgICAgICBXZWJDb3JlSW5pdGlhbGl6ZUZvbnQo
Jml0ZW1Gb250KTsKKyAgICAgICAgICAgIGl0ZW1Gb250LmZvbnQgPSBbYnV0dG9uIGZvbnRdOwor
ICAgICAgICAgICAgaXRlbUZvbnQuZm9yUHJpbnRlciA9ICFbTlNHcmFwaGljc0NvbnRleHQgY3Vy
cmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dOworICAgICAgICAgICAgaWQgPFdlYkNvcmVUZXh0
UmVuZGVyZXI+IGl0ZW1SZW5kZXJlciA9IFtbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkgc2hh
cmVkRmFjdG9yeV0gcmVuZGVyZXJXaXRoRm9udDppdGVtRm9udF07CiAgICAgICAgICAgICBpZCA8
V2ViQ29yZVRleHRSZW5kZXJlcj4gbGFiZWxSZW5kZXJlciA9IG5pbDsKICAgICAgICAgICAgIFdl
YkNvcmVUZXh0U3R5bGUgc3R5bGU7CiAgICAgICAgICAgICBXZWJDb3JlSW5pdGlhbGl6ZUVtcHR5
VGV4dFN0eWxlKCZzdHlsZSk7CkBAIC0xODIsOSArMTg0LDExIEBAIFFTaXplIFFDb21ib0JveDo6
c2l6ZUhpbnQoKSBjb25zdCAKICAgICAgICAgICAgICAgICBpZCA8V2ViQ29yZVRleHRSZW5kZXJl
cj4gcmVuZGVyZXI7CiAgICAgICAgICAgICAgICAgaWYgKGlzR3JvdXBMYWJlbCkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAobGFiZWxSZW5kZXJlciA9PSBuaWwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxhYmVsUmVuZGVyZXIgPSBbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNo
YXJlZEZhY3RvcnldCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJXaXRoRm9u
dDpsYWJlbEZvbnQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nUHJpbnRlckZv
bnQ6IVtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl1dOwor
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZUZvbnQgbGFiZWxGb250OworICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViQ29yZUluaXRpYWxpemVGb250KCZsYWJlbEZvbnQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbGFiZWxGb250LmZvbnQgPSB0aGlzLT5sYWJlbEZvbnQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxhYmVsRm9udC5mb3JQcmludGVyID0gIVtOU0dyYXBoaWNz
Q29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl07CisgICAgICAgICAgICAgICAg
ICAgICAgICBsYWJlbFJlbmRlcmVyID0gW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFy
ZWRGYWN0b3J5XSByZW5kZXJlcldpdGhGb250OmxhYmVsRm9udF07CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSBsYWJlbFJlbmRlcmVyOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FGb250LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUZvbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zMgpkaWZmIC1wIC11IC1yMS4zMiBXZWJDb3JlL2t3cS9LV1FGb250LmgK
LS0tIFdlYkNvcmUva3dxL0tXUUZvbnQuaAk5IEp1bCAyMDA1IDIwOjE5OjI1IC0wMDAwCTEuMzIK
KysrIFdlYkNvcmUva3dxL0tXUUZvbnQuaAkzMCBTZXAgMjAwNSAxNToxNTo0OSAtMDAwMApAQCAt
MjcsMTIgKzI3LDcgQEAKICNkZWZpbmUgUUZPTlRfSF8KIAogI2luY2x1ZGUgIktXUUZvbnRGYW1p
bHkuaCIKLQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgTlNGb250OwotI2Vsc2UKLWNsYXNzIE5T
Rm9udDsKLSNlbmRpZgorI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5LmgiCiAK
IGNsYXNzIFFGb250IHsKIHB1YmxpYzoKQEAgLTc1LDcgKzcwLDggQEAgcHVibGljOgogICAgIGlu
dCBnZXROU1RyYWl0cygpIGNvbnN0IHsgcmV0dXJuIF90cmFpdDsgfQogICAgIGZsb2F0IGdldE5T
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9zaXplOyB9CiAgICAgCi0gICAgTlNGb250ICpnZXROU0Zv
bnQoKSBjb25zdDsKKyAgICBOU0ZvbnQgKmdldE5TRm9udCgpIGNvbnN0IHsgcmV0dXJuIGdldFdl
YkNvcmVGb250KCkuZm9udDsgfQorICAgIGNvbnN0IFdlYkNvcmVGb250ICZnZXRXZWJDb3JlRm9u
dCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEtXUUZvbnRGYW1pbHkgX2ZhbWlseTsKQEAgLTgz
LDcgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBfc2l6ZTsKICAgICBib29sIF9pc1ByaW50
ZXJGb250IDogMTsKICAgICBtdXRhYmxlIFBpdGNoIF9waXRjaCA6IDI7Ci0gICAgbXV0YWJsZSBO
U0ZvbnQgKl9OU0ZvbnQ7CisgICAgbXV0YWJsZSBXZWJDb3JlRm9udCBtX3dlYkNvcmVGb250Owog
fTsKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FGb250Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FGb250Lm1tLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjQ4CmRpZmYgLXAgLXUgLXIxLjQ4IFdlYkNvcmUva3dxL0tXUUZvbnQubW0KLS0tIFdl
YkNvcmUva3dxL0tXUUZvbnQubW0JMjUgQXVnIDIwMDUgMTc6NDc6MjUgLTAwMDAJMS40OAorKysg
V2ViQ29yZS9rd3EvS1dRRm9udC5tbQkzMCBTZXAgMjAwNSAxNToxNTo0OSAtMDAwMApAQCAtMzUs
MTMgKzM1LDEzIEBAIFFGb250OjpRRm9udCgpCiAgICAgLCBfc2l6ZSgxMi4wKQogICAgICwgX2lz
UHJpbnRlckZvbnQoZmFsc2UpCiAgICAgLCBfcGl0Y2goVW5rbm93bikKLSAgICAsIF9OU0ZvbnQo
MCkKIHsKKyAgICBtX3dlYkNvcmVGb250LmZvbnQgPSBuaWw7CiB9CiAKIFFGb250Ojp+UUZvbnQo
KQogewotICAgIEtXUVJlbGVhc2UoX05TRm9udCk7CisgICAgS1dRUmVsZWFzZShtX3dlYkNvcmVG
b250LmZvbnQpOwogfQogCiBRRm9udDo6UUZvbnQoY29uc3QgUUZvbnQgJm90aGVyKQpAQCAtNTAs
OCArNTAsOSBAQCBRRm9udDo6UUZvbnQoY29uc3QgUUZvbnQgJm90aGVyKQogICAgICwgX3NpemUo
b3RoZXIuX3NpemUpCiAgICAgLCBfaXNQcmludGVyRm9udChvdGhlci5faXNQcmludGVyRm9udCkK
ICAgICAsIF9waXRjaChvdGhlci5fcGl0Y2gpCi0gICAgLCBfTlNGb250KEtXUVJldGFpbihvdGhl
ci5fTlNGb250KSkKKyAgICAsIG1fd2ViQ29yZUZvbnQob3RoZXIubV93ZWJDb3JlRm9udCkKIHsK
KyAgICBLV1FSZXRhaW4obV93ZWJDb3JlRm9udC5mb250KTsKIH0KIAogUUZvbnQgJlFGb250Ojpv
cGVyYXRvcj0oY29uc3QgUUZvbnQgJm90aGVyKQpAQCAtNjEsOSArNjIsOSBAQCBRRm9udCAmUUZv
bnQ6Om9wZXJhdG9yPShjb25zdCBRRm9udCAmb3RoCiAgICAgX3NpemUgPSBvdGhlci5fc2l6ZTsK
ICAgICBfaXNQcmludGVyRm9udCA9IG90aGVyLl9pc1ByaW50ZXJGb250OwogICAgIF9waXRjaCA9
IG90aGVyLl9waXRjaDsKLSAgICBLV1FSZXRhaW4ob3RoZXIuX05TRm9udCk7Ci0gICAgS1dRUmVs
ZWFzZShfTlNGb250KTsKLSAgICBfTlNGb250ID0gb3RoZXIuX05TRm9udDsKKyAgICBLV1FSZXRh
aW4ob3RoZXIubV93ZWJDb3JlRm9udC5mb250KTsKKyAgICBLV1FSZWxlYXNlKG1fd2ViQ29yZUZv
bnQuZm9udCk7CisgICAgbV93ZWJDb3JlRm9udCA9IG90aGVyLm1fd2ViQ29yZUZvbnQ7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC03NSwyNCArNzYsMjQgQEAgUVN0cmluZyBRRm9udDo6ZmFt
aWx5KCkgY29uc3QKIHZvaWQgUUZvbnQ6OnNldEZhbWlseShjb25zdCBRU3RyaW5nICZxZmFtaWx5
TmFtZSkKIHsKICAgICBfZmFtaWx5LnNldEZhbWlseShxZmFtaWx5TmFtZSk7Ci0gICAgS1dRUmVs
ZWFzZShfTlNGb250KTsKLSAgICBfTlNGb250ID0gMDsKKyAgICBLV1FSZWxlYXNlKG1fd2ViQ29y
ZUZvbnQuZm9udCk7CisgICAgbV93ZWJDb3JlRm9udC5mb250ID0gbmlsOwogICAgIF9waXRjaCA9
IFVua25vd247CiB9CiAKIHZvaWQgUUZvbnQ6OnNldEZpcnN0RmFtaWx5KGNvbnN0IEtXUUZvbnRG
YW1pbHkmIGZhbWlseSkgCiB7CiAgICAgX2ZhbWlseSA9IGZhbWlseTsKLSAgICBLV1FSZWxlYXNl
KF9OU0ZvbnQpOwotICAgIF9OU0ZvbnQgPSAwOworICAgIEtXUVJlbGVhc2UobV93ZWJDb3JlRm9u
dC5mb250KTsKKyAgICBtX3dlYkNvcmVGb250LmZvbnQgPSBuaWw7CiAgICAgX3BpdGNoID0gVW5r
bm93bjsKIH0KIAogdm9pZCBRRm9udDo6c2V0UGl4ZWxTaXplKGZsb2F0IHMpCiB7CiAgICAgaWYg
KF9zaXplICE9IHMpIHsKLSAgICAgICAgS1dRUmVsZWFzZShfTlNGb250KTsgCi0gICAgICAgIF9O
U0ZvbnQgPSAwOworICAgICAgICBLV1FSZWxlYXNlKG1fd2ViQ29yZUZvbnQuZm9udCk7IAorICAg
ICAgICBtX3dlYkNvcmVGb250LmZvbnQgPSBuaWw7CiAgICAgICAgIF9waXRjaCA9IFVua25vd247
CiAgICAgfQogICAgIF9zaXplID0gczsKQEAgLTEwMSwxNiArMTAyLDE2IEBAIHZvaWQgUUZvbnQ6
OnNldFBpeGVsU2l6ZShmbG9hdCBzKQogdm9pZCBRRm9udDo6c2V0V2VpZ2h0KGludCB3ZWlnaHQp
CiB7CiAgICAgaWYgKHdlaWdodCA9PSBCb2xkKSB7Ci0gICAgICAgIGlmICghKF90cmFpdCAmIE5T
Qm9sZEZvbnRNYXNrKSl7Ci0gICAgICAgICAgICBLV1FSZWxlYXNlKF9OU0ZvbnQpOwotICAgICAg
ICAgICAgX05TRm9udCA9IDA7CisgICAgICAgIGlmICghKF90cmFpdCAmIE5TQm9sZEZvbnRNYXNr
KSkgeworICAgICAgICAgICAgS1dRUmVsZWFzZShtX3dlYkNvcmVGb250LmZvbnQpOworICAgICAg
ICAgICAgbV93ZWJDb3JlRm9udC5mb250ID0gbmlsOwogICAgICAgICAgICAgX3BpdGNoID0gVW5r
bm93bjsKICAgICAgICAgfQogICAgICAgICBfdHJhaXQgfD0gTlNCb2xkRm9udE1hc2s7CiAgICAg
fSBlbHNlIGlmICh3ZWlnaHQgPT0gTm9ybWFsKSB7CiAgICAgICAgIGlmICgoX3RyYWl0ICYgTlNC
b2xkRm9udE1hc2spKXsKLSAgICAgICAgICAgIEtXUVJlbGVhc2UoX05TRm9udCk7Ci0gICAgICAg
ICAgICBfTlNGb250ID0gMDsKKyAgICAgICAgICAgIEtXUVJlbGVhc2UobV93ZWJDb3JlRm9udC5m
b250KTsKKyAgICAgICAgICAgIG1fd2ViQ29yZUZvbnQuZm9udCA9IG5pbDsKICAgICAgICAgICAg
IF9waXRjaCA9IFVua25vd247CiAgICAgICAgIH0KICAgICAgICAgX3RyYWl0ICY9IH5OU0JvbGRG
b250TWFzazsKQEAgLTEzMSwxNSArMTMyLDE1IEBAIHZvaWQgUUZvbnQ6OnNldEl0YWxpYyhib29s
IGZsYWcpCiB7CiAgICAgaWYgKGZsYWcpIHsKICAgICAgICAgaWYgKCEoX3RyYWl0ICYgTlNJdGFs
aWNGb250TWFzaykpewotICAgICAgICAgICAgS1dRUmVsZWFzZShfTlNGb250KTsKLSAgICAgICAg
ICAgIF9OU0ZvbnQgPSAwOworICAgICAgICAgICAgS1dRUmVsZWFzZShtX3dlYkNvcmVGb250LmZv
bnQpOworICAgICAgICAgICAgbV93ZWJDb3JlRm9udC5mb250ID0gbmlsOwogICAgICAgICAgICAg
X3BpdGNoID0gVW5rbm93bjsKICAgICAgICAgfQogICAgICAgICBfdHJhaXQgfD0gTlNJdGFsaWNG
b250TWFzazsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoKF90cmFpdCAmIE5TSXRhbGljRm9u
dE1hc2spKXsKLSAgICAgICAgICAgIEtXUVJlbGVhc2UoX05TRm9udCk7Ci0gICAgICAgICAgICBf
TlNGb250ID0gMDsKKyAgICAgICAgICAgIEtXUVJlbGVhc2UobV93ZWJDb3JlRm9udC5mb250KTsK
KyAgICAgICAgICAgIG1fd2ViQ29yZUZvbnQuZm9udCA9IG5pbDsKICAgICAgICAgICAgIF9waXRj
aCA9IFVua25vd247CiAgICAgICAgIH0KICAgICAgICAgX3RyYWl0ICY9IH5OU0l0YWxpY0ZvbnRN
YXNrOwpAQCAtMTU5LDcgKzE2MCw3IEBAIGJvb2wgUUZvbnQ6OmJvbGQoKSBjb25zdAogdm9pZCBR
Rm9udDo6ZGV0ZXJtaW5lUGl0Y2goKSBjb25zdAogewogICAgIEtXUV9CTE9DS19FWENFUFRJT05T
OwotICAgIGlmIChbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIGlz
Rm9udEZpeGVkUGl0Y2g6Z2V0TlNGb250KCldKQorICAgIGlmIChbW1dlYkNvcmVUZXh0UmVuZGVy
ZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIGlzRm9udEZpeGVkUGl0Y2g6Z2V0V2ViQ29yZUZvbnQo
KV0pCiAgICAgICAgIF9waXRjaCA9IEZpeGVkOwogICAgIGVsc2UKICAgICAgICAgX3BpdGNoID0g
VmFyaWFibGU7CkBAIC0xNzUsMTYgKzE3NiwxNiBAQCBib29sIFFGb250OjpvcGVyYXRvcj09KGNv
bnN0IFFGb250ICZjb21wCiAgICAgICAgICYmIF9waXRjaCA9PSBjb21wYXJlRm9udC5fcGl0Y2g7
CiB9CiAKLU5TRm9udCAqUUZvbnQ6OmdldE5TRm9udCgpIGNvbnN0Citjb25zdCBXZWJDb3JlRm9u
dCAmUUZvbnQ6OmdldFdlYkNvcmVGb250KCkgY29uc3QKIHsKLSAgICBpZiAoIV9OU0ZvbnQpIHsK
KyAgICBpZiAoIW1fd2ViQ29yZUZvbnQuZm9udCkgewogICAgICAgICBDUkVBVEVfRkFNSUxZX0FS
UkFZKCp0aGlzLCBmYW1pbGllcyk7CiAJS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgICAgIF9O
U0ZvbnQgPSBLV1FSZXRhaW4oW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0
b3J5XSAKLSAgICAgICAgICAgIGZvbnRXaXRoRmFtaWxpZXM6ZmFtaWxpZXMKLSAgICAgICAgICAg
ICAgICAgICAgICB0cmFpdHM6Z2V0TlNUcmFpdHMoKSAKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNpemU6Z2V0TlNTaXplKCldKTsKKyAgICAgICAgbV93ZWJDb3JlRm9udCA9IFtbV2ViQ29yZVRl
eHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gCisgICAgICAgICAgICBmb250V2l0aEZh
bWlsaWVzOmZhbWlsaWVzIHRyYWl0czpnZXROU1RyYWl0cygpIHNpemU6Z2V0TlNTaXplKCldOwor
ICAgICAgICBLV1FSZXRhaW4obV93ZWJDb3JlRm9udC5mb250KTsKKyAgICAgICAgbV93ZWJDb3Jl
Rm9udC5mb3JQcmludGVyID0gX2lzUHJpbnRlckZvbnQ7CiAJS1dRX1VOQkxPQ0tfRVhDRVBUSU9O
UzsKICAgICB9Ci0gICAgcmV0dXJuIF9OU0ZvbnQ7CisgICAgcmV0dXJuIG1fd2ViQ29yZUZvbnQ7
CiB9CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FGb250TWV0cmljcy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRRm9udE1ldHJpY3MubW0sdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuODkKZGlmZiAtcCAtdSAtcjEuODkgV2ViQ29yZS9rd3EvS1dRRm9udE1ldHJp
Y3MubW0KLS0tIFdlYkNvcmUva3dxL0tXUUZvbnRNZXRyaWNzLm1tCTI5IEp1bCAyMDA1IDIzOjQy
OjU1IC0wMDAwCTEuODkKKysrIFdlYkNvcmUva3dxL0tXUUZvbnRNZXRyaWNzLm1tCTMwIFNlcCAy
MDA1IDE1OjE1OjQ5IC0wMDAwCkBAIC01MCwxMSArNTAsOCBAQCBzdHJ1Y3QgUUZvbnRNZXRyaWNz
UHJpdmF0ZQogICAgIH0KICAgICBpZCA8V2ViQ29yZVRleHRSZW5kZXJlcj4gZ2V0UmVuZGVyZXIo
KQogICAgIHsKLSAgICAgICAgaWYgKCFfcmVuZGVyZXIpIHsKLSAgICAgICAgICAgIF9yZW5kZXJl
ciA9IEtXUVJldGFpbihbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3Rvcnld
Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXJXaXRoRm9udDpfZm9udC5nZXROU0ZvbnQoKQotICAg
ICAgICAgICAgICAgIHVzaW5nUHJpbnRlckZvbnQ6X2ZvbnQuaXNQcmludGVyRm9udCgpXSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKCFfcmVuZGVyZXIpCisgICAgICAgICAgICBfcmVuZGVyZXIg
PSBLV1FSZXRhaW4oW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBy
ZW5kZXJlcldpdGhGb250Ol9mb250LmdldFdlYkNvcmVGb250KCldKTsKICAgICAgICAgcmV0dXJu
IF9yZW5kZXJlcjsKICAgICB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FMaW5lRWRpdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRTGluZUVkaXQu
bW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzEKZGlmZiAtcCAtdSAtcjEuNzEgV2ViQ29yZS9r
d3EvS1dRTGluZUVkaXQubW0KLS0tIFdlYkNvcmUva3dxL0tXUUxpbmVFZGl0Lm1tCTI0IFNlcCAy
MDA1IDExOjA1OjMzIC0wMDAwCTEuNzEKKysrIFdlYkNvcmUva3dxL0tXUUxpbmVFZGl0Lm1tCTMw
IFNlcCAyMDA1IDE1OjE1OjQ5IC0wMDAwCkBAIC0yNTQsMTIgKzI1NCwxMyBAQCBRU2l6ZSBRTGlu
ZUVkaXQ6OnNpemVGb3JDaGFyYWN0ZXJXaWR0aChpCiAKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9O
UzsKIAotICAgIE5TRm9udCAqZm9udCA9IFt0ZXh0RmllbGQgZm9udF07Ci0KLSAgICBzaXplLmhl
aWdodCArPSBbZm9udCBkZWZhdWx0TGluZUhlaWdodEZvckZvbnRdOworICAgIFdlYkNvcmVGb250
IGZvbnQ7CisgICAgV2ViQ29yZUluaXRpYWxpemVGb250KCZmb250KTsKKyAgICBmb250LmZvbnQg
PSBbdGV4dEZpZWxkIGZvbnRdOworICAgIGZvbnQuZm9yUHJpbnRlciA9ICFbTlNHcmFwaGljc0Nv
bnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dOworICAgIGlkIDxXZWJDb3JlVGV4
dFJlbmRlcmVyPiByZW5kZXJlciA9IFtbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVk
RmFjdG9yeV0gcmVuZGVyZXJXaXRoRm9udDpmb250XTsKIAotICAgIGlkIDxXZWJDb3JlVGV4dFJl
bmRlcmVyPiByZW5kZXJlciA9IFtbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFj
dG9yeV0KLSAgICAgICAgcmVuZGVyZXJXaXRoRm9udDpmb250IHVzaW5nUHJpbnRlckZvbnQ6IVtO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl1dOworICAgIHNp
emUuaGVpZ2h0ICs9IFtmb250LmZvbnQgZGVmYXVsdExpbmVIZWlnaHRGb3JGb250XTsKIAogICAg
IFdlYkNvcmVUZXh0U3R5bGUgc3R5bGU7CiAgICAgV2ViQ29yZUluaXRpYWxpemVFbXB0eVRleHRT
dHlsZSgmc3R5bGUpOwpJbmRleDogV2ViQ29yZS9rd3EvS1dRTGlzdEJveC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRTGlzdEJveC5tbSx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS41OApkaWZmIC1wIC11IC1yMS41OCBXZWJDb3JlL2t3cS9LV1FMaXN0Qm94
Lm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FMaXN0Qm94Lm1tCTI3IFNlcCAyMDA1IDIyOjM3OjI5IC0w
MDAwCTEuNTgKKysrIFdlYkNvcmUva3dxL0tXUUxpc3RCb3gubW0JMzAgU2VwIDIwMDUgMTU6MTU6
NTAgLTAwMDAKQEAgLTgwLDI0ICs4MCwyMyBAQCBzdGF0aWMgTlNGb250ICppdGVtRm9udCgpCiAg
ICAgcmV0dXJuIGZvbnQ7CiB9CiAKLXN0YXRpYyBOU0ZvbnQgKmdyb3VwTGFiZWxGb250KCkKLXsK
LSAgICBzdGF0aWMgTlNGb250ICpmb250ID0gW1tOU0ZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6
W05TRm9udCBzbWFsbFN5c3RlbUZvbnRTaXplXV0gcmV0YWluXTsKLSAgICByZXR1cm4gZm9udDsK
LX0KLQogc3RhdGljIGlkIDxXZWJDb3JlVGV4dFJlbmRlcmVyPiBpdGVtVGV4dFJlbmRlcmVyKCkK
IHsKICAgICBpZiAoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2Ny
ZWVuXSkgewogICAgICAgICBpZiAoaXRlbVNjcmVlblJlbmRlcmVyID09IG5pbCkgewotICAgICAg
ICAgICAgaXRlbVNjcmVlblJlbmRlcmVyID0gW1tbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkg
c2hhcmVkRmFjdG9yeV0KLSAgICAgICAgICAgICAgICByZW5kZXJlcldpdGhGb250Oml0ZW1Gb250
KCkgdXNpbmdQcmludGVyRm9udDpOT10gcmV0YWluXTsKKyAgICAgICAgICAgIFdlYkNvcmVGb250
IGZvbnQ7CisgICAgICAgICAgICBXZWJDb3JlSW5pdGlhbGl6ZUZvbnQoJmZvbnQpOworICAgICAg
ICAgICAgZm9udC5mb250ID0gaXRlbUZvbnQoKTsKKyAgICAgICAgICAgIGl0ZW1TY3JlZW5SZW5k
ZXJlciA9IFtbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHJlbmRl
cmVyV2l0aEZvbnQ6Zm9udF0gcmV0YWluXTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gaXRl
bVNjcmVlblJlbmRlcmVyOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChpdGVtUHJpbnRlclJl
bmRlcmVyID09IG5pbCkgewotICAgICAgICAgICAgaXRlbVByaW50ZXJSZW5kZXJlciA9IFtbW1dl
YkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldCi0gICAgICAgICAgICAgICAg
cmVuZGVyZXJXaXRoRm9udDppdGVtRm9udCgpIHVzaW5nUHJpbnRlckZvbnQ6WUVTXSByZXRhaW5d
OworICAgICAgICAgICAgV2ViQ29yZUZvbnQgZm9udDsKKyAgICAgICAgICAgIFdlYkNvcmVJbml0
aWFsaXplRm9udCgmZm9udCk7CisgICAgICAgICAgICBmb250LmZvbnQgPSBpdGVtRm9udCgpOwor
ICAgICAgICAgICAgZm9udC5mb3JQcmludGVyID0gWUVTOworICAgICAgICAgICAgaXRlbVByaW50
ZXJSZW5kZXJlciA9IFtbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3Rvcnld
IHJlbmRlcmVyV2l0aEZvbnQ6Zm9udF0gcmV0YWluXTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gaXRlbVByaW50ZXJSZW5kZXJlcjsKICAgICB9CkBAIC0xMDcsMTQgKzEwNiwxOSBAQCBzdGF0
aWMgaWQgPFdlYkNvcmVUZXh0UmVuZGVyZXI+IGdyb3VwTGFiCiB7CiAgICAgaWYgKFtOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl0pIHsKICAgICAgICAgaWYg
KGdyb3VwTGFiZWxTY3JlZW5SZW5kZXJlciA9PSBuaWwpIHsKLSAgICAgICAgICAgIGdyb3VwTGFi
ZWxTY3JlZW5SZW5kZXJlciA9IFtbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZh
Y3RvcnldCi0gICAgICAgICAgICAgICAgcmVuZGVyZXJXaXRoRm9udDpncm91cExhYmVsRm9udCgp
IHVzaW5nUHJpbnRlckZvbnQ6Tk9dIHJldGFpbl07CisgICAgICAgICAgICBXZWJDb3JlRm9udCBm
b250OworICAgICAgICAgICAgV2ViQ29yZUluaXRpYWxpemVGb250KCZmb250KTsKKyAgICAgICAg
ICAgIGZvbnQuZm9udCA9IFtOU0ZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzbWFs
bFN5c3RlbUZvbnRTaXplXV07CisgICAgICAgICAgICBncm91cExhYmVsU2NyZWVuUmVuZGVyZXIg
PSBbW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSByZW5kZXJlcldp
dGhGb250OmZvbnRdIHJldGFpbl07CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGdyb3VwTGFi
ZWxTY3JlZW5SZW5kZXJlcjsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoZ3JvdXBMYWJlbFBy
aW50ZXJSZW5kZXJlciA9PSBuaWwpIHsKLSAgICAgICAgICAgIGdyb3VwTGFiZWxQcmludGVyUmVu
ZGVyZXIgPSBbW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XQotICAg
ICAgICAgICAgICAgIHJlbmRlcmVyV2l0aEZvbnQ6Z3JvdXBMYWJlbEZvbnQoKSB1c2luZ1ByaW50
ZXJGb250OllFU10gcmV0YWluXTsKKyAgICAgICAgICAgIFdlYkNvcmVGb250IGZvbnQ7CisgICAg
ICAgICAgICBXZWJDb3JlSW5pdGlhbGl6ZUZvbnQoJmZvbnQpOworICAgICAgICAgICAgZm9udC5m
b250ID0gW05TRm9udCBib2xkU3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHNtYWxsU3lzdGVtRm9u
dFNpemVdXTsKKyAgICAgICAgICAgIGZvbnQuZm9yUHJpbnRlciA9IFlFUzsKKyAgICAgICAgICAg
IGdyb3VwTGFiZWxQcmludGVyUmVuZGVyZXIgPSBbW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9y
eSBzaGFyZWRGYWN0b3J5XSByZW5kZXJlcldpdGhGb250OmZvbnRdIHJldGFpbl07CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGdyb3VwTGFiZWxQcmludGVyUmVuZGVyZXI7CiAgICAgfQpAQCAt
Mjg0LDE5ICsyODgsMTEgQEAgUVNpemUgUUxpc3RCb3g6OnNpemVGb3JOdW1iZXJPZkxpbmVzKGlu
dAogICAgICAgICAgICAgaWYgKHRhYmxlVmlldy0+aXNTeXN0ZW1Gb250KSB7ICAgICAgICAKICAg
ICAgICAgICAgICAgICByZW5kZXJlciA9IGl0ZW1UZXh0UmVuZGVyZXIoKTsKICAgICAgICAgICAg
ICAgICBncm91cExhYmVsUmVuZGVyZXIgPSBncm91cExhYmVsVGV4dFJlbmRlcmVyKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBOU0ZvbnQgKmYg
PSBmb250KCkuZ2V0TlNGb250KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHJlbmRlcmVyID0gW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5
XSByZW5kZXJlcldpdGhGb250OmZvbnQoKS5nZXRXZWJDb3JlRm9udCgpXTsKICAgICAgICAgICAg
ICAgICBRRm9udCBiID0gZm9udCgpOwotICAgICAgICAgICAgICAgIGIuc2V0V2VpZ2h0KFFGb250
OjpCb2xkKTsKLSAgICAgICAgICAgICAgICBOU0ZvbnQgKmJvbGRGb250ID0gYi5nZXROU0ZvbnQo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIg
PSBbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldCi0gICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVyV2l0aEZvbnQ6ZiB1c2luZ1ByaW50ZXJGb250OiFbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dXTsKLQotICAgICAgICAgICAg
ICAgIGdyb3VwTGFiZWxSZW5kZXJlciA9IFtbV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnkgc2hh
cmVkRmFjdG9yeV0KLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJXaXRoRm9udDpib2xkRm9u
dCB1c2luZ1ByaW50ZXJGb250OiFbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHREcmF3
aW5nVG9TY3JlZW5dXTsKKyAgICAgICAgICAgICAgICBiLnNldFdlaWdodChRRm9udDo6Qm9sZCk7
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZ3JvdXBMYWJlbFJlbmRlcmVyID0gW1tXZWJD
b3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSByZW5kZXJlcldpdGhGb250OmIu
Z2V0V2ViQ29yZUZvbnQoKV07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGRvIHsKQEAgLTMxNyw5ICszMTMsOCBAQCBRU2l6ZSBRTGlzdEJveDo6c2l6ZUZvck51bWJl
ck9mTGluZXMoaW50CiAgICAgICAgIF93aWR0aEdvb2QgPSB0cnVlOwogICAgIH0KICAgICAKLSAg
ICBOU1NpemUgbnNzaXplID0geyBfd2lkdGgsIFt0YWJsZVZpZXcgcm93SGVpZ2h0XSAqIE1BWCht
aW5MaW5lcywgbGluZXMpIH07Ci0gICAgc2l6ZSA9IFtOU1Njcm9sbFZpZXcgZnJhbWVTaXplRm9y
Q29udGVudFNpemU6bnNzaXplCi0gICAgICAgIGhhc0hvcml6b250YWxTY3JvbGxlcjpOTyBoYXNW
ZXJ0aWNhbFNjcm9sbGVyOllFUyBib3JkZXJUeXBlOk5TQmV6ZWxCb3JkZXJdOworICAgIE5TU2l6
ZSBjb250ZW50U2l6ZSA9IHsgX3dpZHRoLCBbdGFibGVWaWV3IHJvd0hlaWdodF0gKiBNQVgobWlu
TGluZXMsIGxpbmVzKSB9OworICAgIHNpemUgPSBbTlNTY3JvbGxWaWV3IGZyYW1lU2l6ZUZvckNv
bnRlbnRTaXplOmNvbnRlbnRTaXplIGhhc0hvcml6b250YWxTY3JvbGxlcjpOTyBoYXNWZXJ0aWNh
bFNjcm9sbGVyOllFUyBib3JkZXJUeXBlOk5TQmV6ZWxCb3JkZXJdOwogICAgIHNpemUud2lkdGgg
Kz0gW05TU2Nyb2xsZXIgc2Nyb2xsZXJXaWR0aEZvckNvbnRyb2xTaXplOk5TU21hbGxDb250cm9s
U2l6ZV0gLSBbTlNTY3JvbGxlciBzY3JvbGxlcldpZHRoXSArIGxlZnRNYXJnaW4gKyByaWdodE1h
cmdpbjsKIAogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CkBAIC02MjYsMjYgKzYyMSwyMSBA
QCB2b2lkIFFMaXN0Qm94OjpzZXRGb250KGNvbnN0IFFGb250ICZmb250CiAgICAgICAgIGNvbG9y
ID0gW05TQ29sb3IgZGlzYWJsZWRDb250cm9sVGV4dENvbG9yXTsKICAgICB9CiAKLSAgICBib29s
IFJUTCA9IF9kaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAg
Ym9vbCBydGwgPSBfZGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0Owog
Ci0gICAgTlNGb250ICpmb250ID0gX2JveC0+Zm9udCgpLmdldE5TRm9udCgpOwotICAgIAogICAg
IGlkIDxXZWJDb3JlVGV4dFJlbmRlcmVyPiByZW5kZXJlcjsKICAgICBpZiAoaXNTeXN0ZW1Gb250
KSB7CiAgICAgICAgIHJlbmRlcmVyID0gKGl0ZW0udHlwZSA9PSBLV1FMaXN0Qm94R3JvdXBMYWJl
bCkgPyBncm91cExhYmVsVGV4dFJlbmRlcmVyKCkgOiBpdGVtVGV4dFJlbmRlcmVyKCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBLV1FMaXN0Qm94R3JvdXBMYWJlbCkg
ewotICAgICAgICAgICAgUUZvbnQgYm9sZEZvbnQgPSBfYm94LT5mb250KCk7Ci0gICAgICAgICAg
ICBib2xkRm9udC5zZXRXZWlnaHQoUUZvbnQ6OkJvbGQpOwotICAgICAgICAgICAgZm9udCA9IGJv
bGRGb250LmdldE5TRm9udCgpOwotICAgICAgICB9Ci0gICAgICAgIHJlbmRlcmVyID0gW1tXZWJD
b3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XQotICAgICAgICAgICAgcmVuZGVy
ZXJXaXRoRm9udDpmb250IHVzaW5nUHJpbnRlckZvbnQ6IVtOU0dyYXBoaWNzQ29udGV4dCBjdXJy
ZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl1dOworICAgICAgICBRRm9udCBpdGVtRm9udCA9IF9i
b3gtPmZvbnQoKTsKKyAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBLV1FMaXN0Qm94R3JvdXBMYWJl
bCkKKyAgICAgICAgICAgIGl0ZW1Gb250LnNldFdlaWdodChRRm9udDo6Qm9sZCk7CisgICAgICAg
IHJlbmRlcmVyID0gW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBy
ZW5kZXJlcldpdGhGb250Oml0ZW1Gb250LmdldFdlYkNvcmVGb250KCldOwogICAgIH0KICAgIAog
ICAgIFdlYkNvcmVUZXh0U3R5bGUgc3R5bGU7CiAgICAgV2ViQ29yZUluaXRpYWxpemVFbXB0eVRl
eHRTdHlsZSgmc3R5bGUpOwotICAgIHN0eWxlLnJ0bCA9IFJUTDsKKyAgICBzdHlsZS5ydGwgPSBy
dGw7CiAgICAgc3R5bGUuYXBwbHlSdW5Sb3VuZGluZyA9IE5POwogICAgIHN0eWxlLmFwcGx5V29y
ZFJvdW5kaW5nID0gTk87CiAgICAgc3R5bGUudGV4dENvbG9yID0gY29sb3I7CkBAIC02NTYsMTIg
KzY0NiwxMiBAQCB2b2lkIFFMaXN0Qm94OjpzZXRGb250KGNvbnN0IFFGb250ICZmb250CiAKICAg
ICBOU1JlY3QgY2VsbFJlY3QgPSBbc2VsZiBmcmFtZU9mQ2VsbEF0Q29sdW1uOjAgcm93OnJvd107
CiAgICAgTlNQb2ludCBwb2ludDsKLSAgICBpZiAoIVJUTCkgeworICAgIGlmICghcnRsKSB7CiAg
ICAgICAgIHBvaW50LnggPSBOU01pblgoY2VsbFJlY3QpICsgbGVmdE1hcmdpbjsKICAgICB9IGVs
c2UgewogICAgICAgICBwb2ludC54ID0gTlNNYXhYKGNlbGxSZWN0KSAtIHJpZ2h0TWFyZ2luIC0g
W3JlbmRlcmVyIGZsb2F0V2lkdGhGb3JSdW46JnJ1biBzdHlsZTomc3R5bGUgd2lkdGhzOjBdOwog
ICAgIH0KLSAgICBwb2ludC55ID0gTlNNYXhZKGNlbGxSZWN0KSArIFtmb250IGRlc2NlbmRlcl0g
LSBib3R0b21NYXJnaW47CisgICAgcG9pbnQueSA9IE5TTWF4WShjZWxsUmVjdCkgKyBbcmVuZGVy
ZXIgZGVzY2VudF0gLSBib3R0b21NYXJnaW47CiAKICAgICBXZWJDb3JlVGV4dEdlb21ldHJ5IGdl
b21ldHJ5OwogICAgIFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0R2VvbWV0cnkoJmdlb21ldHJ5
KTsKQEAgLTcwMiw4ICs2OTIsNyBAQCB2b2lkIFFMaXN0Qm94OjpzZXRGb250KGNvbnN0IFFGb250
ICZmb250CiAtICh2b2lkKWZvbnRDaGFuZ2VkCiB7CiAgICAgTlNGb250ICpmb250ID0gX2JveC0+
Zm9udCgpLmdldE5TRm9udCgpOwotICAgIGlzU3lzdGVtRm9udCA9IFtbZm9udCBmb250TmFtZV0g
aXNFcXVhbFRvU3RyaW5nOltpdGVtRm9udCgpIGZvbnROYW1lXV0gJiYgKFtmb250IHBvaW50U2l6
ZV0gPT0gW2l0ZW1Gb250KCkgcG9pbnRTaXplXSk7Ci0gICAgCisgICAgaXNTeXN0ZW1Gb250ID0g
W1tmb250IGZvbnROYW1lXSBpc0VxdWFsVG9TdHJpbmc6W2l0ZW1Gb250KCkgZm9udE5hbWVdXSAm
JiBbZm9udCBwb2ludFNpemVdID09IFtpdGVtRm9udCgpIHBvaW50U2l6ZV07CiAgICAgW3NlbGYg
c2V0Um93SGVpZ2h0OmNlaWxmKFtmb250IGFzY2VuZGVyXSAtIFtmb250IGRlc2NlbmRlcl0gKyBi
b3R0b21NYXJnaW4pXTsKICAgICBbc2VsZiBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKIH0KSW5kZXg6
IFdlYkNvcmUva3dxL0tXUVBhaW50ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva3dxL0tXUVBhaW50ZXIubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQzCmRp
ZmYgLXAgLXUgLXIxLjE0MyBXZWJDb3JlL2t3cS9LV1FQYWludGVyLm1tCi0tLSBXZWJDb3JlL2t3
cS9LV1FQYWludGVyLm1tCTI3IFNlcCAyMDA1IDIyOjM3OjMwIC0wMDAwCTEuMTQzCisrKyBXZWJD
b3JlL2t3cS9LV1FQYWludGVyLm1tCTMwIFNlcCAyMDA1IDE1OjE1OjUwIC0wMDAwCkBAIC02MDUs
OCArNjA1LDcgQEAgdm9pZCBRUGFpbnRlcjo6X3VwZGF0ZVJlbmRlcmVyKCkKICAgICAgICAgaWQg
PFdlYkNvcmVUZXh0UmVuZGVyZXI+IG9sZFJlbmRlcmVyID0gZGF0YS0+dGV4dFJlbmRlcmVyOwog
CUtXUV9CTE9DS19FWENFUFRJT05TOwogICAgICAgICBkYXRhLT50ZXh0UmVuZGVyZXIgPSBLV1FS
ZXRhaW4oW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XQotICAgICAg
ICAgICAgcmVuZGVyZXJXaXRoRm9udDpkYXRhLT50ZXh0UmVuZGVyZXJGb250LmdldE5TRm9udCgp
Ci0gICAgICAgICAgICB1c2luZ1ByaW50ZXJGb250OmRhdGEtPnRleHRSZW5kZXJlckZvbnQuaXNQ
cmludGVyRm9udCgpXSk7CisgICAgICAgICAgICByZW5kZXJlcldpdGhGb250OmRhdGEtPnRleHRS
ZW5kZXJlckZvbnQuZ2V0V2ViQ29yZUZvbnQoKV0pOwogICAgICAgICBLV1FSZWxlYXNlKG9sZFJl
bmRlcmVyKTsKIAlLV1FfVU5CTE9DS19FWENFUFRJT05TOwogICAgIH0KQEAgLTY2Niw3ICs2NjUs
NyBAQCB2b2lkIFFQYWludGVyOjpkcmF3VGV4dChpbnQgeCwgaW50IHksIGluCiAgICAgV2ViQ29y
ZUluaXRpYWxpemVFbXB0eVRleHRTdHlsZSgmc3R5bGUpOwogICAgIHN0eWxlLnRleHRDb2xvciA9
IG5zQ29sb3IoZGF0YS0+c3RhdGUucGVuLmNvbG9yKCkpOwogICAgIHN0eWxlLmJhY2tncm91bmRD
b2xvciA9IGJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgPyBuc0NvbG9yKGJhY2tncm91bmRDb2xv
cikgOiBuaWw7Ci0gICAgc3R5bGUucnRsID0gZCA9PSBSVEwgPyB0cnVlIDogZmFsc2U7CisgICAg
c3R5bGUucnRsID0gZCA9PSBSVEw7CiAgICAgc3R5bGUuZGlyZWN0aW9uYWxPdmVycmlkZSA9IHZp
c3VhbGx5T3JkZXJlZDsKICAgICBzdHlsZS5sZXR0ZXJTcGFjaW5nID0gbGV0dGVyU3BhY2luZzsK
ICAgICBzdHlsZS53b3JkU3BhY2luZyA9IHdvcmRTcGFjaW5nOwpAQCAtNzA1LDcgKzcwNCw3IEBA
IHZvaWQgUVBhaW50ZXI6OmRyYXdIaWdobGlnaHRGb3JUZXh0KGludCAKICAgICBXZWJDb3JlSW5p
dGlhbGl6ZUVtcHR5VGV4dFN0eWxlKCZzdHlsZSk7CiAgICAgc3R5bGUudGV4dENvbG9yID0gbnND
b2xvcihkYXRhLT5zdGF0ZS5wZW4uY29sb3IoKSk7CiAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9y
ID0gYmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSA/IG5zQ29sb3IoYmFja2dyb3VuZENvbG9yKSA6
IG5pbDsKLSAgICBzdHlsZS5ydGwgPSBkID09IFJUTCA/IHRydWUgOiBmYWxzZTsKKyAgICBzdHls
ZS5ydGwgPSBkID09IFJUTDsKICAgICBzdHlsZS5kaXJlY3Rpb25hbE92ZXJyaWRlID0gdmlzdWFs
bHlPcmRlcmVkOwogICAgIHN0eWxlLmxldHRlclNwYWNpbmcgPSBsZXR0ZXJTcGFjaW5nOwogICAg
IHN0eWxlLndvcmRTcGFjaW5nID0gd29yZFNwYWNpbmc7CkluZGV4OiBXZWJDb3JlL2t3cS9XZWJD
b3JlVGV4dFJlbmRlcmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL1dlYkNvcmVUZXh0UmVuZGVyZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNgpkaWZm
IC1wIC11IC1yMS4zNiBXZWJDb3JlL2t3cS9XZWJDb3JlVGV4dFJlbmRlcmVyLmgKLS0tIFdlYkNv
cmUva3dxL1dlYkNvcmVUZXh0UmVuZGVyZXIuaAkyNCBTZXAgMjAwNSAxMTo0NToxOCAtMDAwMAkx
LjM2CisrKyBXZWJDb3JlL2t3cS9XZWJDb3JlVGV4dFJlbmRlcmVyLmgJMzAgU2VwIDIwMDUgMTU6
MTU6NTEgLTAwMDAKQEAgLTI5LDggKzI5LDcgQEAKICNkZWZpbmUgUk9VTkRfVE9fSU5UKHgpICh1
bnNpZ25lZCBpbnQpKCh4KSsuNSkKICNlbmRpZgogCi1zdHJ1Y3QgV2ViQ29yZVRleHRTdHlsZQot
ewordHlwZWRlZiBzdHJ1Y3QgewogICAgIE5TQ29sb3IgKnRleHRDb2xvcjsKICAgICBOU0NvbG9y
ICpiYWNrZ3JvdW5kQ29sb3I7CiAgICAgZmxvYXQgbGV0dGVyU3BhY2luZzsKQEAgLTQ1LDMyICs0
NCwyNiBAQCBzdHJ1Y3QgV2ViQ29yZVRleHRTdHlsZQogICAgIHVuc2lnbmVkIGFwcGx5UnVuUm91
bmRpbmcgOiAxOwogICAgIHVuc2lnbmVkIGFwcGx5V29yZFJvdW5kaW5nIDogMTsKICAgICB1bnNp
Z25lZCBhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbiA6IDE7Ci19OworfSBXZWJDb3JlVGV4dFN0eWxl
OwogCi1zdHJ1Y3QgV2ViQ29yZVRleHRSdW4KLXsKK3R5cGVkZWYgc3RydWN0IHsKICAgICBjb25z
dCBVbmlDaGFyICpjaGFyYWN0ZXJzOwotICAgIHVuc2lnbmVkIGludCBsZW5ndGg7CisgICAgdW5z
aWduZWQgbGVuZ3RoOwogICAgIGludCBmcm9tOwogICAgIGludCB0bzsKLX07Cit9IFdlYkNvcmVU
ZXh0UnVuOwogCi1zdHJ1Y3QgV2ViQ29yZVRleHRHZW9tZXRyeQotewordHlwZWRlZiBzdHJ1Y3Qg
ewogICAgIE5TUG9pbnQgcG9pbnQ7CiAgICAgZmxvYXQgc2VsZWN0aW9uWTsKICAgICBmbG9hdCBz
ZWxlY3Rpb25IZWlnaHQ7Ci0gICAgYm9vbCB1c2VGb250TWV0cmljc0ZvclNlbGVjdGlvbllBbmRI
ZWlnaHQgOiAxOwotfTsKKyAgICB1bnNpZ25lZCB1c2VGb250TWV0cmljc0ZvclNlbGVjdGlvbllB
bmRIZWlnaHQgOiAxOworfSBXZWJDb3JlVGV4dEdlb21ldHJ5OwogCiAjaWZkZWYgX19jcGx1c3Bs
dXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IFdlYkNvcmVUZXh0UnVu
IFdlYkNvcmVUZXh0UnVuOwotdHlwZWRlZiBzdHJ1Y3QgV2ViQ29yZVRleHRTdHlsZSBXZWJDb3Jl
VGV4dFN0eWxlOwotdHlwZWRlZiBzdHJ1Y3QgV2ViQ29yZVRleHRHZW9tZXRyeSBXZWJDb3JlVGV4
dEdlb21ldHJ5OwotCiBleHRlcm4gdm9pZCBXZWJDb3JlSW5pdGlhbGl6ZVRleHRSdW4oV2ViQ29y
ZVRleHRSdW4gKnJ1biwgY29uc3QgVW5pQ2hhciAqY2hhcmFjdGVycywgdW5zaWduZWQgaW50IGxl
bmd0aCwgaW50IGZyb20sIGludCB0byk7CiBleHRlcm4gdm9pZCBXZWJDb3JlSW5pdGlhbGl6ZUVt
cHR5VGV4dFN0eWxlKFdlYkNvcmVUZXh0U3R5bGUgKnN0eWxlKTsKIGV4dGVybiB2b2lkIFdlYkNv
cmVJbml0aWFsaXplRW1wdHlUZXh0R2VvbWV0cnkoV2ViQ29yZVRleHRHZW9tZXRyeSAqZ2VvbWV0
cnkpOwpAQCAtMTA1LDQgKzk4LDUgQEAgZXh0ZXJuIHZvaWQgV2ViQ29yZUluaXRpYWxpemVFbXB0
eVRleHRHZQogCiAvLyBzZWxlY3Rpb24gcG9pbnQgY2hlY2sKIC0gKGludClwb2ludFRvT2Zmc2V0
Oihjb25zdCBXZWJDb3JlVGV4dFJ1biAqKXJ1biBzdHlsZTooY29uc3QgV2ViQ29yZVRleHRTdHls
ZSAqKXN0eWxlIHBvc2l0aW9uOihpbnQpeCByZXZlcnNlZDooQk9PTClyZXZlcnNlZCBpbmNsdWRl
UGFydGlhbEdseXBoczooQk9PTClpbmNsdWRlUGFydGlhbEdseXBoczsKKwogQGVuZApJbmRleDog
V2ViQ29yZS9rd3EvV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC1yMS4xMiBXZWJDb3JlL2t3cS9X
ZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeS5oCi0tLSBXZWJDb3JlL2t3cS9XZWJDb3JlVGV4dFJl
bmRlcmVyRmFjdG9yeS5oCTMxIEF1ZyAyMDA0IDAwOjQ5OjE3IC0wMDAwCTEuMTIKKysrIFdlYkNv
cmUva3dxL1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5LmgJMzAgU2VwIDIwMDUgMTU6MTU6NTEg
LTAwMDAKQEAgLTIzLDE4ICsyMyw0MiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAorI2lmZGVm
IF9fT0JKQ19fCiAjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgotCiBAcHJvdG9jb2wgV2ViQ29yZVRl
eHRSZW5kZXJlcjsKKyNlbHNlCitjbGFzcyBOU0ZvbnQ7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1
Y3QgV2ViQ29yZUZvbnQgeworICAgIE5TRm9udCAqZm9udDsKKyAgICB1bnNpZ25lZCBzeW50aGV0
aWNCb2xkIDogMTsKKyAgICB1bnNpZ25lZCBzeW50aGV0aWNPYmxpcXVlIDogMTsKKyAgICB1bnNp
Z25lZCBmb3JQcmludGVyIDogMTsKK30gV2ViQ29yZUZvbnQ7CisKKyNpZmRlZiBfX2NwbHVzcGx1
cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgV2ViQ29yZUluaXRpYWxpemVG
b250KFdlYkNvcmVGb250ICpmb250KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYK
KworI2lmZGVmIF9fT0JKQ19fCiAKIEBpbnRlcmZhY2UgV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rv
cnkgOiBOU09iamVjdAogCiArIChXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSAqKXNoYXJlZEZh
Y3Rvcnk7CiAKLS0gKE5TRm9udCAqKWZvbnRXaXRoRmFtaWxpZXM6KE5TU3RyaW5nICoqKWZhbWls
aWVzIHRyYWl0czooTlNGb250VHJhaXRNYXNrKXRyYWl0cyBzaXplOihmbG9hdClzaXplOwotLSAo
Qk9PTClpc0ZvbnRGaXhlZFBpdGNoOihOU0ZvbnQgKilmb250OwotLSAoaWQgPFdlYkNvcmVUZXh0
UmVuZGVyZXI+KXJlbmRlcmVyV2l0aEZvbnQ6KE5TRm9udCAqKWZvbnQgdXNpbmdQcmludGVyRm9u
dDooQk9PTCl1c2luZ1ByaW50ZXJGb250OworLSAoV2ViQ29yZUZvbnQpZm9udFdpdGhGYW1pbGll
czooTlNTdHJpbmcgKiopZmFtaWxpZXMgdHJhaXRzOihOU0ZvbnRUcmFpdE1hc2spdHJhaXRzIHNp
emU6KGZsb2F0KXNpemU7CistIChCT09MKWlzRm9udEZpeGVkUGl0Y2g6KFdlYkNvcmVGb250KWZv
bnQ7CistIChpZCA8V2ViQ29yZVRleHRSZW5kZXJlcj4pcmVuZGVyZXJXaXRoRm9udDooV2ViQ29y
ZUZvbnQpZm9udDsKIAogLSAodm9pZCljbGVhckNhY2hlczsKIAogQGVuZAorCisjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUva3dxL1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9y
eS5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNgpkaWZmIC1wIC11IC1yMS4yNiBXZWJDb3Jl
L2t3cS9XZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeS5tbQotLS0gV2ViQ29yZS9rd3EvV2ViQ29y
ZVRleHRSZW5kZXJlckZhY3RvcnkubW0JMjcgU2VwIDIwMDUgMjI6Mzc6MzMgLTAwMDAJMS4yNgor
KysgV2ViQ29yZS9rd3EvV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkubW0JMzAgU2VwIDIwMDUg
MTU6MTU6NTEgLTAwMDAKQEAgLTIzLDEzICsyMywyMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8K
IAotI2ltcG9ydCAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2ltcG9ydCAiV2ViQ29yZVRleHRS
ZW5kZXJlckZhY3RvcnkuaCIKIAogI2ltcG9ydCA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2lt
cG9ydCAiS1dRS0hUTUxQYXJ0LmgiCiAjaW1wb3J0ICJLV1FMaXN0Qm94LmgiCiAjaW1wb3J0ICJX
ZWJDb3JlQnJpZGdlLmgiCisjaW1wb3J0ICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCisKK3ZvaWQg
V2ViQ29yZUluaXRpYWxpemVGb250KFdlYkNvcmVGb250ICpmb250KQoreworICAgIGZvbnQtPmZv
bnQgPSBuaWw7CisgICAgZm9udC0+c3ludGhldGljQm9sZCA9IE5POworICAgIGZvbnQtPnN5bnRo
ZXRpY09ibGlxdWUgPSBOTzsKKyAgICBmb250LT5mb3JQcmludGVyID0gTk87Cit9CiAKIHZvaWQg
V2ViQ29yZUluaXRpYWxpemVUZXh0UnVuKFdlYkNvcmVUZXh0UnVuICpydW4sIGNvbnN0IFVuaUNo
YXIgKmNoYXJhY3RlcnMsIHVuc2lnbmVkIGludCBsZW5ndGgsIGludCBmcm9tLCBpbnQgdG8pCiB7
CkBAIC00MSwyOCArNDksMjUgQEAgdm9pZCBXZWJDb3JlSW5pdGlhbGl6ZVRleHRSdW4oV2ViQ29y
ZVRleAogCiB2b2lkIFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0U3R5bGUoV2ViQ29yZVRleHRT
dHlsZSAqc3R5bGUpCiB7Ci0gICAgc3R5bGUtPnBhZGRpbmcgPSAwOwotLy8gICAgc3R5bGUtPnRh
YldpZHRoID0gMC4wRjsKLS8vICAgIHN0eWxlLT54cG9zID0gMC4wRjsKICAgICBzdHlsZS0+dGV4
dENvbG9yID0gbmlsOwogICAgIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IgPSBuaWw7Ci0gICAgc3R5
bGUtPnJ0bCA9IGZhbHNlOwotICAgIHN0eWxlLT5kaXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2U7
CiAgICAgc3R5bGUtPmxldHRlclNwYWNpbmcgPSAwOwogICAgIHN0eWxlLT53b3JkU3BhY2luZyA9
IDA7Ci0gICAgc3R5bGUtPnNtYWxsQ2FwcyA9IGZhbHNlOwotICAgIHN0eWxlLT5hcHBseVJ1blJv
dW5kaW5nID0gdHJ1ZTsKLSAgICBzdHlsZS0+YXBwbHlXb3JkUm91bmRpbmcgPSB0cnVlOwotICAg
IHN0eWxlLT5hdHRlbXB0Rm9udFN1YnN0aXR1dGlvbiA9IHRydWU7CisgICAgc3R5bGUtPnBhZGRp
bmcgPSAwOwogICAgIHN0eWxlLT5mYW1pbGllcyA9IG5pbDsKKyAgICBzdHlsZS0+c21hbGxDYXBz
ID0gTk87CisgICAgc3R5bGUtPnJ0bCA9IE5POworICAgIHN0eWxlLT5kaXJlY3Rpb25hbE92ZXJy
aWRlID0gTk87CisgICAgc3R5bGUtPmFwcGx5UnVuUm91bmRpbmcgPSBZRVM7CisgICAgc3R5bGUt
PmFwcGx5V29yZFJvdW5kaW5nID0gWUVTOworICAgIHN0eWxlLT5hdHRlbXB0Rm9udFN1YnN0aXR1
dGlvbiA9IFlFUzsKIH0KIAogdm9pZCBXZWJDb3JlSW5pdGlhbGl6ZUVtcHR5VGV4dEdlb21ldHJ5
KFdlYkNvcmVUZXh0R2VvbWV0cnkgKmdlb21ldHJ5KQogewotICAgIGdlb21ldHJ5LT5wb2ludCA9
IE5TTWFrZVBvaW50KDAsMCk7Ci0gICAgZ2VvbWV0cnktPnNlbGVjdGlvblkgPSAwOwotICAgIGdl
b21ldHJ5LT5zZWxlY3Rpb25IZWlnaHQgPSAwOwotICAgIGdlb21ldHJ5LT51c2VGb250TWV0cmlj
c0ZvclNlbGVjdGlvbllBbmRIZWlnaHQgPSB0cnVlOworICAgIGdlb21ldHJ5LT5wb2ludC54ID0g
MDsKKyAgICBnZW9tZXRyeS0+cG9pbnQueSA9IDA7CisgICAgZ2VvbWV0cnktPnVzZUZvbnRNZXRy
aWNzRm9yU2VsZWN0aW9uWUFuZEhlaWdodCA9IFlFUzsKIH0KIAogQGltcGxlbWVudGF0aW9uIFdl
YkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5CkBAIC04NCwxOCArODksMjMgQEAgc3RhdGljIFdlYkNv
cmVUZXh0UmVuZGVyZXJGYWN0b3J5ICpzaGFyZQogICAgIHJldHVybiBzZWxmOwogfQogCi0tIChO
U0ZvbnQgKilmb250V2l0aEZhbWlsaWVzOihOU1N0cmluZyAqKilmYW1pbGllcyB0cmFpdHM6KE5T
Rm9udFRyYWl0TWFzayl0cmFpdHMgc2l6ZTooZmxvYXQpc2l6ZQorLSAoV2ViQ29yZUZvbnQpZm9u
dFdpdGhGYW1pbGllczooTlNTdHJpbmcgKiopZmFtaWxpZXMgdHJhaXRzOihOU0ZvbnRUcmFpdE1h
c2spdHJhaXRzIHNpemU6KGZsb2F0KXNpemUKIHsKLSAgICByZXR1cm4gbmlsOworICAgIEVSUk9S
KCJmb250V2l0aEZhbWlsaWVzIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkIGluIHRleHQgcmVuZGVy
ZXIgZmFjdG9yeSBzdWJjbGFzcyIpOworICAgIFdlYkNvcmVGb250IGZvbnQ7CisgICAgV2ViQ29y
ZUluaXRpYWxpemVGb250KCZmb250KTsKKyAgICByZXR1cm4gZm9udDsKIH0KIAotLSAoQk9PTClp
c0ZvbnRGaXhlZFBpdGNoOihOU0ZvbnQgKilmb250CistIChCT09MKWlzRm9udEZpeGVkUGl0Y2g6
KFdlYkNvcmVGb250KWZvbnQKIHsKKyAgICBFUlJPUigiaXNGb250Rml4ZWRQaXRjaCBuZWVkcyB0
byBiZSBpbXBsZW1lbnRlZCBpbiB0ZXh0IHJlbmRlcmVyIGZhY3Rvcnkgc3ViY2xhc3MiKTsKICAg
ICByZXR1cm4gTk87CiB9CiAKLS0gKGlkIDxXZWJDb3JlVGV4dFJlbmRlcmVyPilyZW5kZXJlcldp
dGhGb250OihOU0ZvbnQgKilmb250IHVzaW5nUHJpbnRlckZvbnQ6KEJPT0wpdXNpbmdQcmludGVy
Rm9udAorLSAoaWQgPFdlYkNvcmVUZXh0UmVuZGVyZXI+KXJlbmRlcmVyV2l0aEZvbnQ6KFdlYkNv
cmVGb250KWZvbnQKIHsKKyAgICBFUlJPUigicmVuZGVyZXJGb3JGb250IG5lZWRzIHRvIGJlIGlt
cGxlbWVudGVkIGluIHRleHQgcmVuZGVyZXIgZmFjdG9yeSBzdWJjbGFzcyIpOwogICAgIHJldHVy
biBuaWw7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbGF5b3V0LXRlc3RzL2VkaXRpbmcvcGFzdGVib2Fy
ZC9wYXN0ZS10ZXh0LTAxMS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUvbGF5b3V0LXRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0LTAx
MS1leHBlY3RlZC50eHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtcCAtdSAtcjEu
MTIgV2ViQ29yZS9sYXlvdXQtdGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtMDEx
LWV4cGVjdGVkLnR4dAotLS0gV2ViQ29yZS9sYXlvdXQtdGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJk
L3Bhc3RlLXRleHQtMDExLWV4cGVjdGVkLnR4dAkxNSBBdWcgMjAwNSAwMzozOTo1NSAtMDAwMAkx
LjEyCisrKyBXZWJDb3JlL2xheW91dC10ZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4
dC0wMTEtZXhwZWN0ZWQudHh0CTMwIFNlcCAyMDA1IDE1OjE2OjA3IC0wMDAwCkBAIC0xNSwyNCAr
MTUsMjQgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKICAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAogICAg
IFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU3NgotICAgICAgUmVuZGVyQmxv
Y2sge1B9IGF0ICgwLDApIHNpemUgNzg0eDE4Ci0gICAgICAgIFJlbmRlcklubGluZSB7Rk9OVH0g
YXQgKDAsMCkgc2l6ZSAzN3gxOAotICAgICAgICAgIFJlbmRlcklubGluZSB7Qn0gYXQgKDAsMCkg
c2l6ZSAzN3gxOAotICAgICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAz
N3gxOAotICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzNzogImhlbGxvIgot
ICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDM0KSBzaXplIDc4NHgxOAotICAgICAgICBSZW5k
ZXJJbmxpbmUge0ZPTlR9IGF0ICgwLDApIHNpemUgMzl4MTgKLSAgICAgICAgICBSZW5kZXJJbmxp
bmUge0J9IGF0ICgwLDApIHNpemUgMzl4MTgKLSAgICAgICAgICAgIFJlbmRlclRleHQge1RFWFR9
IGF0ICgwLDApIHNpemUgMzl4MTgKLSAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggMzk6ICJ0aGVyZSIKLSAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCw2OCkgc2l6ZSA3ODR4
MTgKLSAgICAgICAgUmVuZGVySW5saW5lIHtGT05UfSBhdCAoMCwwKSBzaXplIDM3eDE4Ci0gICAg
ICAgICAgUmVuZGVySW5saW5lIHtCfSBhdCAoMCwwKSBzaXplIDM3eDE4Ci0gICAgICAgICAgICBS
ZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDM3eDE4Ci0gICAgICAgICAgICAgIHRleHQg
cnVuIGF0ICgwLDApIHdpZHRoIDM3OiAiaGVsbG8iCi0gICAgICBSZW5kZXJCbG9jayB7UH0gYXQg
KDAsMTAyKSBzaXplIDc4NHgxOAotICAgICAgICBSZW5kZXJJbmxpbmUge0ZPTlR9IGF0ICgwLDAp
IHNpemUgMzl4MTgKLSAgICAgICAgICBSZW5kZXJJbmxpbmUge0J9IGF0ICgwLDApIHNpemUgMzl4
MTgKLSAgICAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMzl4MTgKLSAg
ICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzk6ICJ0aGVyZSIKKyAgICAgIFJl
bmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXplIDc4NHgyMQorICAgICAgICBSZW5kZXJJbmxpbmUg
e0ZPTlR9IGF0ICgwLDApIHNpemUgNTV4MjAKKyAgICAgICAgICBSZW5kZXJJbmxpbmUge0J9IGF0
ICgwLDApIHNpemUgNTV4MjAKKyAgICAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDAp
IHNpemUgNTV4MjEKKyAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTU6ICJo
ZWxsbyIKKyAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCwzNykgc2l6ZSA3ODR4MjEKKyAgICAg
ICAgUmVuZGVySW5saW5lIHtGT05UfSBhdCAoMCwwKSBzaXplIDU1eDIwCisgICAgICAgICAgUmVu
ZGVySW5saW5lIHtCfSBhdCAoMCwwKSBzaXplIDU1eDIwCisgICAgICAgICAgICBSZW5kZXJUZXh0
IHtURVhUfSBhdCAoMCwwKSBzaXplIDU1eDIxCisgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgw
LDApIHdpZHRoIDU1OiAidGhlcmUiCisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsNzQpIHNp
emUgNzg0eDIxCisgICAgICAgIFJlbmRlcklubGluZSB7Rk9OVH0gYXQgKDAsMCkgc2l6ZSA1NXgy
MAorICAgICAgICAgIFJlbmRlcklubGluZSB7Qn0gYXQgKDAsMCkgc2l6ZSA1NXgyMAorICAgICAg
ICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSA1NXgyMQorICAgICAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1NTogImhlbGxvIgorICAgICAgUmVuZGVyQmxvY2sg
e1B9IGF0ICgwLDExMSkgc2l6ZSA3ODR4MjEKKyAgICAgICAgUmVuZGVySW5saW5lIHtGT05UfSBh
dCAoMCwwKSBzaXplIDU1eDIwCisgICAgICAgICAgUmVuZGVySW5saW5lIHtCfSBhdCAoMCwwKSBz
aXplIDU1eDIwCisgICAgICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDU1
eDIxCisgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDU1OiAidGhlcmUiCiBj
YXJldDogcG9zaXRpb24gNSBvZiBjaGlsZCAwIHtURVhUfSBvZiBjaGlsZCAwIHtCfSBvZiBjaGls
ZCAwIHtGT05UfSBvZiBjaGlsZCA1IHtQfSBvZiBjaGlsZCAxIHtCT0RZfSBvZiBjaGlsZCAwIHtI
VE1MfSBvZiBkb2N1bWVudApJbmRleDogV2ViS2l0L01pc2Muc3VicHJvai9XZWJLaXROU1N0cmlu
Z0V4dHJhcy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvTWlzYy5zdWJw
cm9qL1dlYktpdE5TU3RyaW5nRXh0cmFzLm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYKZGlm
ZiAtcCAtdSAtcjEuMjYgV2ViS2l0L01pc2Muc3VicHJvai9XZWJLaXROU1N0cmluZ0V4dHJhcy5t
Ci0tLSBXZWJLaXQvTWlzYy5zdWJwcm9qL1dlYktpdE5TU3RyaW5nRXh0cmFzLm0JNSBKdW4gMjAw
NSAxNzo1NDoyNSAtMDAwMAkxLjI2CisrKyBXZWJLaXQvTWlzYy5zdWJwcm9qL1dlYktpdE5TU3Ry
aW5nRXh0cmFzLm0JMzAgU2VwIDIwMDUgMTU6MTg6NTcgLTAwMDAKQEAgLTU2LDggKzU2LDExIEBA
IHN0YXRpYyBCT09MIGNhblVzZUZhc3RSZW5kZXJlcihjb25zdCBVbmkKIAogICAgIFtzZWxmIGdl
dENoYXJhY3RlcnM6YnVmZmVyXTsKICAgICAKLSAgICBpZiAoY2FuVXNlRmFzdFJlbmRlcmVyKGJ1
ZmZlciwgbGVuZ3RoKSl7Ci0gICAgICAgIFdlYlRleHRSZW5kZXJlciAqcmVuZGVyZXIgPSBbW1dl
YlRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVuZGVyZXJXaXRoRm9udDpmb250
IHVzaW5nUHJpbnRlckZvbnQ6Tk9dOworICAgIGlmIChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVmZmVy
LCBsZW5ndGgpKSB7CisgICAgICAgIFdlYkNvcmVGb250IGY7CisgICAgICAgIFdlYkNvcmVJbml0
aWFsaXplRm9udCgmZik7CisgICAgICAgIGYuZm9udCA9IGZvbnQ7CisgICAgICAgIFdlYlRleHRS
ZW5kZXJlciAqcmVuZGVyZXIgPSBbW1dlYlRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9y
eV0gcmVuZGVyZXJXaXRoRm9udDpmXTsKIAogICAgICAgICBXZWJDb3JlVGV4dFJ1biBydW47CiAg
ICAgICAgIFdlYkNvcmVJbml0aWFsaXplVGV4dFJ1biAoJnJ1biwgYnVmZmVyLCBsZW5ndGgsIDAs
IGxlbmd0aCk7CkBAIC0xMTIsNyArMTE1LDEwIEBAIHN0YXRpYyBCT09MIGNhblVzZUZhc3RSZW5k
ZXJlcihjb25zdCBVbmkKICAgICBbc2VsZiBnZXRDaGFyYWN0ZXJzOmJ1ZmZlcl07CiAKICAgICBp
ZiAoY2FuVXNlRmFzdFJlbmRlcmVyKGJ1ZmZlciwgbGVuZ3RoKSl7Ci0gICAgICAgIFdlYlRleHRS
ZW5kZXJlciAqcmVuZGVyZXIgPSBbW1dlYlRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9y
eV0gcmVuZGVyZXJXaXRoRm9udDpmb250IHVzaW5nUHJpbnRlckZvbnQ6Tk9dOworICAgICAgICBX
ZWJDb3JlRm9udCBmOworICAgICAgICBXZWJDb3JlSW5pdGlhbGl6ZUZvbnQoJmYpOworICAgICAg
ICBmLmZvbnQgPSBmb250OworICAgICAgICBXZWJUZXh0UmVuZGVyZXIgKnJlbmRlcmVyID0gW1tX
ZWJUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHJlbmRlcmVyV2l0aEZvbnQ6Zl07
CiAKICAgICAgICAgV2ViQ29yZVRleHRSdW4gcnVuOwogICAgICAgICBXZWJDb3JlSW5pdGlhbGl6
ZVRleHRSdW4gKCZydW4sIGJ1ZmZlciwgbGVuZ3RoLCAwLCBsZW5ndGgpOwpJbmRleDogV2ViS2l0
L01pc2Muc3VicHJvai9XZWJTdHJpbmdUcnVuY2F0b3IubQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViS2l0L01pc2Muc3VicHJvai9XZWJTdHJpbmdUcnVuY2F0b3IubSx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yMgpkaWZmIC1wIC11IC1yMS4yMiBXZWJLaXQvTWlzYy5zdWJwcm9q
L1dlYlN0cmluZ1RydW5jYXRvci5tCi0tLSBXZWJLaXQvTWlzYy5zdWJwcm9qL1dlYlN0cmluZ1Ry
dW5jYXRvci5tCTUgSnVuIDIwMDUgMTc6NTQ6MjYgLTAwMDAJMS4yMgorKysgV2ViS2l0L01pc2Mu
c3VicHJvai9XZWJTdHJpbmdUcnVuY2F0b3IubQkzMCBTZXAgMjAwNSAxNToxODo1NyAtMDAwMApA
QCAtMTEzLDcgKzExMywxMCBAQCBzdGF0aWMgTlNTdHJpbmcgKnRydW5jYXRlU3RyaW5nKE5TU3Ry
aW5nCiAgICAgICAgIGN1cnJlbnRGb250ID0gW2ZvbnQgcmV0YWluXTsKICAgICAgICAgW2N1cnJl
bnRSZW5kZXJlciByZWxlYXNlXTsKICAgICAgICAgW1dlYlRleHRSZW5kZXJlckZhY3RvcnkgY3Jl
YXRlU2hhcmVkRmFjdG9yeV07Ci0gICAgICAgIGN1cnJlbnRSZW5kZXJlciA9IFtbW1dlYlRleHRS
ZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVuZGVyZXJXaXRoRm9udDpmb250IHVzaW5n
UHJpbnRlckZvbnQ6Tk9dIHJldGFpbl07CisgICAgICAgIFdlYkNvcmVGb250IGY7CisgICAgICAg
IFdlYkNvcmVJbml0aWFsaXplRm9udCgmZik7CisgICAgICAgIGYuZm9udCA9IGZvbnQ7CisgICAg
ICAgIGN1cnJlbnRSZW5kZXJlciA9IFtbW1dlYlRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFj
dG9yeV0gcmVuZGVyZXJXaXRoRm9udDpmXSByZXRhaW5dOwogICAgICAgICBlbGxpcHNpcyA9IEVM
TElQU0lTX0NIQVJBQ1RFUjsKICAgICAgICAgY3VycmVudEVsbGlwc2lzV2lkdGggPSBzdHJpbmdX
aWR0aChjdXJyZW50UmVuZGVyZXIsICZlbGxpcHNpcywgMSk7CiAgICAgfQpAQCAtMjE5LDcgKzIy
MiwxMCBAQCBzdGF0aWMgTlNGb250ICpkZWZhdWx0TWVudUZvbnQodm9pZCkKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07CiAgICAgdW5pY2hhciAqcyA9IG1hbGxvYyhzaXpl
b2YodW5pY2hhcikgKiBsZW5ndGgpOwogICAgIFtzdHJpbmcgZ2V0Q2hhcmFjdGVyczpzXTsKLSAg
ICBmbG9hdCB3aWR0aCA9IHN0cmluZ1dpZHRoKFtbV2ViVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFy
ZWRGYWN0b3J5XSByZW5kZXJlcldpdGhGb250OmZvbnQgdXNpbmdQcmludGVyRm9udDpOT10sIHMs
IGxlbmd0aCk7CisgICAgV2ViQ29yZUZvbnQgZjsKKyAgICBXZWJDb3JlSW5pdGlhbGl6ZUZvbnQo
JmYpOworICAgIGYuZm9udCA9IGZvbnQ7CisgICAgZmxvYXQgd2lkdGggPSBzdHJpbmdXaWR0aChb
W1dlYlRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVuZGVyZXJXaXRoRm9udDpm
XSwgcywgbGVuZ3RoKTsKICAgICBmcmVlKHMpOwogICAgIHJldHVybiB3aWR0aDsKIH0KSW5kZXg6
IFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkdseXBoQnVmZmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJHbHlwaEJ1ZmZlci5oCmRpZmYg
LU4gV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViR2x5cGhCdWZmZXIuaAotLS0gV2Vi
S2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViR2x5cGhCdWZmZXIuaAk1IEp1biAyMDA1IDE3
OjU0OjQwIC0wMDAwCTEuMworKysgV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViR2x5
cGhCdWZmZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDUyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KLQotCi1AaW50ZXJmYWNlIFdlYkds
eXBoQnVmZmVyIDogTlNPYmplY3QKLXsKLSAgICBOU0ZvbnQgKmZvbnQ7Ci0gICAgTlNDb2xvciAq
Y29sb3I7Ci0gICAgZmxvYXQgYnVmZmVyZWRTdGFydFgsIGJ1ZmZlcmVkU3RhcnRZOwotICAgIGZs
b2F0IGxhc3RQb3NpdGlvblgsIGxhc3RQb3NpdGlvblk7Ci0gICAgaW50IGJ1ZmZlcmVkQ291bnQ7
Ci0gICAgaW50IGJ1ZmZlclNpemU7Ci0gICAgQ0dTaXplICpidWZmZXJlZEFkdmFuY2VzOwotICAg
IENHR2x5cGggKmJ1ZmZlcmVkR2x5cGhzOwotfQotLSAoaWQpaW5pdFdpdGhGb250OihOU0ZvbnQg
Kilmb250IGNvbG9yOihOU0NvbG9yICopY29sb3I7Ci0tICh2b2lkKWFkZEdseXBoczooQ0dHbHlw
aCAqKW5ld0dseXBocyBhZHZhbmNlczooQ0dTaXplICopbmV3QWR2YW5jZXMgY291bnQ6KGludClj
b3VudCBhdDooZmxvYXQpc3RhcnRYIDooZmxvYXQpc3RhcnRZOwotLSAodm9pZClkcmF3SW5WaWV3
OihOU1ZpZXcgKil0YXJnZXRWaWV3OwotLSAodm9pZClyZXNldDsKLS0gKE5TRm9udCAqKWZvbnQ7
Ci0tIChOU0NvbG9yICopY29sb3I7Ci1AZW5kCi0KLQotCkluZGV4OiBXZWJLaXQvV2ViQ29yZVN1
cHBvcnQuc3VicHJvai9XZWJHbHlwaEJ1ZmZlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IFdlYkNv
cmVTdXBwb3J0LnN1YnByb2ovV2ViR2x5cGhCdWZmZXIubQpkaWZmIC1OIFdlYktpdC9XZWJDb3Jl
U3VwcG9ydC5zdWJwcm9qL1dlYkdseXBoQnVmZmVyLm0KLS0tIFdlYktpdC9XZWJDb3JlU3VwcG9y
dC5zdWJwcm9qL1dlYkdseXBoQnVmZmVyLm0JNSBKdW4gMjAwNSAxNzo1NDo0MCAtMDAwMAkxLjQK
KysrIFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkdseXBoQnVmZmVyLm0JMSBKYW4g
MTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1w
b3J0ICJXZWJHbHlwaEJ1ZmZlci5oIgotCi0jaW1wb3J0ICJXZWJOU09iamVjdEV4dHJhcy5oIgot
Ci0jaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+Ci0KLUBpbXBsZW1lbnRhdGlvbiBX
ZWJHbHlwaEJ1ZmZlcgotCi0tIGluaXRXaXRoRm9udDogKE5TRm9udCAqKWYgY29sb3I6IChOU0Nv
bG9yICopYwotewotICAgIFtzdXBlciBpbml0XTsKLSAgICBmb250ID0gW2YgcmV0YWluXTsKLSAg
ICBjb2xvciA9IFtjIHJldGFpbl07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKE5TRm9udCAq
KWZvbnQKLXsKLSAgICByZXR1cm4gZm9udDsKLX0KLQotLSAoTlNDb2xvciAqKWNvbG9yCi17Ci0g
ICAgcmV0dXJuIGNvbG9yOwotfQotCi0tICh2b2lkKXJlc2V0Ci17Ci0gICAgaWYgKGJ1ZmZlcmVk
QWR2YW5jZXMpewotICAgICAgICBmcmVlIChidWZmZXJlZEFkdmFuY2VzKTsKLSAgICAgICAgYnVm
ZmVyZWRBZHZhbmNlcyA9IDA7Ci0gICAgfQotICAgIGlmIChidWZmZXJlZEdseXBocyl7Ci0gICAg
ICAgIGZyZWUgKGJ1ZmZlcmVkR2x5cGhzKTsKLSAgICAgICAgYnVmZmVyZWRHbHlwaHMgPSAwOwot
ICAgIH0KLSAgICBidWZmZXJTaXplID0gMDsKLSAgICBidWZmZXJlZENvdW50ID0gMDsKLX0KLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgW2ZvbnQgcmVsZWFzZV07Ci0gICAgW2NvbG9yIHJlbGVh
c2VdOwotICAgIFtzZWxmIHJlc2V0XTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZv
aWQpZmluYWxpemUKLXsKLSAgICBbc2VsZiByZXNldF07Ci0gICAgW3N1cGVyIGZpbmFsaXplXTsK
LX0KLQotLSAodm9pZClkcmF3SW5WaWV3OiAoTlNWaWV3ICopdGFyZ2V0VmlldwotewotICAgIENH
Q29udGV4dFJlZiBjZ0NvbnRleHQ7Ci0gICAgCi0gICAgW3RhcmdldFZpZXcgbG9ja0ZvY3VzXTsK
LSAgICBjZ0NvbnRleHQgPSAoQ0dDb250ZXh0UmVmKVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVu
dENvbnRleHRdIGdyYXBoaWNzUG9ydF07Ci0gICAgW2NvbG9yIHNldF07Ci0gICAgW2ZvbnQgc2V0
XTsKLSAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24gKGNnQ29udGV4dCwgYnVmZmVyZWRTdGFy
dFgsIGJ1ZmZlcmVkU3RhcnRZKTsKLSAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2Vz
IChjZ0NvbnRleHQsIGJ1ZmZlcmVkR2x5cGhzLCBidWZmZXJlZEFkdmFuY2VzLCBidWZmZXJlZENv
dW50KTsKLSAgICBbdGFyZ2V0VmlldyB1bmxvY2tGb2N1c107Ci19Ci0KLQotLSAodm9pZClhZGRH
bHlwaHM6IChDR0dseXBoICopbmV3R2x5cGhzIGFkdmFuY2VzOiAoQ0dTaXplICopbmV3QWR2YW5j
ZXMgY291bnQ6IChpbnQpY291bnQgYXQ6IChmbG9hdClzdGFydFggOiAoZmxvYXQpc3RhcnRZCi17
Ci0gICAgaW50IHNpemVOZWVkZWQgPSBidWZmZXJlZENvdW50ICsgY291bnQ7Ci0gICAgQk9PTCBm
aXJzdEJ1ZmZlciA9IE5POwotCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGZp
cnN0IGJ1ZmZlcmluZyBwYXNzLgotICAgIGlmICghYnVmZmVyZWRBZHZhbmNlcyl7Ci0gICAgICAg
IGxhc3RQb3NpdGlvblggPSBidWZmZXJlZFN0YXJ0WCA9IHN0YXJ0WDsKLSAgICAgICAgbGFzdFBv
c2l0aW9uWSA9IGJ1ZmZlcmVkU3RhcnRZID0gc3RhcnRZOwotICAgICAgICBmaXJzdEJ1ZmZlciA9
IFlFUzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHNpemVOZWVkZWQgPiBidWZmZXJTaXplKXsKLSAg
ICAgICAgaWYgKGJ1ZmZlclNpemUgPT0gMCkKLSAgICAgICAgICAgIGJ1ZmZlclNpemUgPSA1MTI7
CS8vIDUxMioyPTEwMjQgaXMgdGhlIG1pbiBzaXplLCBzZWUgYmVsb3cuCi0gICAgICAgIGludCBz
aXplVG9BbGxvY2F0ZSA9IE1BWCAoYnVmZmVyU2l6ZSoyLCBzaXplTmVlZGVkKTsKLSAgICAgICAg
aWYgKGJ1ZmZlcmVkQWR2YW5jZXMpCi0gICAgICAgICAgICBidWZmZXJlZEFkdmFuY2VzID0gKENH
U2l6ZSAqKXJlYWxsb2MoYnVmZmVyZWRBZHZhbmNlcywgc2l6ZVRvQWxsb2NhdGUgKiBzaXplb2Yo
Q0dTaXplKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ1ZmZlcmVkQWR2YW5jZXMgPSAo
Q0dTaXplICopbWFsbG9jIChzaXplVG9BbGxvY2F0ZSAqIHNpemVvZihDR1NpemUpKTsKLSAgICAg
ICAgaWYgKGJ1ZmZlcmVkR2x5cGhzKQotICAgICAgICAgICAgYnVmZmVyZWRHbHlwaHMgPSAoQ0dH
bHlwaCAqKXJlYWxsb2MoYnVmZmVyZWRHbHlwaHMsIHNpemVUb0FsbG9jYXRlICogc2l6ZW9mKENH
R2x5cGgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYnVmZmVyZWRHbHlwaHMgPSAoQ0dH
bHlwaCAqKW1hbGxvYyAoc2l6ZVRvQWxsb2NhdGUgKiBzaXplb2YoQ0dHbHlwaCkpOwotICAgICAg
ICBidWZmZXJTaXplID0gc2l6ZVRvQWxsb2NhdGU7Ci0gICAgfQotICAgIAotICAgIGlmIChmaXJz
dEJ1ZmZlciA9PSBOTyl7Ci0gICAgICAgIGJ1ZmZlcmVkQWR2YW5jZXNbYnVmZmVyZWRDb3VudC0x
XS53aWR0aCA9IHN0YXJ0WCAtIGxhc3RQb3NpdGlvblg7Ci0gICAgICAgIGJ1ZmZlcmVkQWR2YW5j
ZXNbYnVmZmVyZWRDb3VudC0xXS5oZWlnaHQgPSBzdGFydFkgLSBsYXN0UG9zaXRpb25ZOwotICAg
IH0KLSAgICAKLSAgICBpbnQgaTsKLSAgICBsYXN0UG9zaXRpb25YID0gc3RhcnRYOwotICAgIGxh
c3RQb3NpdGlvblkgPSBzdGFydFk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50LTE7IGkrKyl7
Ci0gICAgICAgIGxhc3RQb3NpdGlvblggKz0gbmV3QWR2YW5jZXNbaV0ud2lkdGg7Ci0gICAgICAg
IGxhc3RQb3NpdGlvblkgKz0gbmV3QWR2YW5jZXNbaV0uaGVpZ2h0OwotICAgIH0KLQotICAgIG1l
bWNweSAoJmJ1ZmZlcmVkQWR2YW5jZXNbYnVmZmVyZWRDb3VudF0sIG5ld0FkdmFuY2VzLCBjb3Vu
dCAqIHNpemVvZihDR1NpemUpKTsKLSAgICBtZW1jcHkgKCZidWZmZXJlZEdseXBoc1tidWZmZXJl
ZENvdW50XSwgbmV3R2x5cGhzLCBjb3VudCAqIHNpemVvZihDR0dseXBoKSk7Ci0gICAgYnVmZmVy
ZWRDb3VudCA9IGJ1ZmZlcmVkQ291bnQgKyBjb3VudDsKLX0KLUBlbmQKLQpJbmRleDogV2ViS2l0
L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViVGV4dFJlbmRlcmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYlRleHRSZW5k
ZXJlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM4CmRpZmYgLXAgLXUgLXIxLjM4IFdlYktp
dC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYlRleHRSZW5kZXJlci5oCi0tLSBXZWJLaXQvV2Vi
Q29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0UmVuZGVyZXIuaAkxMiBKdWwgMjAwNSAxNzo0NDox
MCAtMDAwMAkxLjM4CisrKyBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0UmVu
ZGVyZXIuaAkzMCBTZXAgMjAwNSAxNToxODo1NyAtMDAwMApAQCAtMjcsMTcgKzI3LDEwIEBACiAg
Ki8KIAogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGV4dFJlbmRlcmVyLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5Lmg+CiAKIHR5cGVkZWYgc3RydWN0IFdp
ZHRoTWFwIFdpZHRoTWFwOwotdHlwZWRlZiBzdHJ1Y3QgV2lkdGhFbnRyeSBXaWR0aEVudHJ5Owog
dHlwZWRlZiBzdHJ1Y3QgR2x5cGhNYXAgR2x5cGhNYXA7Ci10eXBlZGVmIHN0cnVjdCBHbHlwaEVu
dHJ5IEdseXBoRW50cnk7Ci10eXBlZGVmIHN0cnVjdCBVbmljb2RlR2x5cGhNYXAgVW5pY29kZUds
eXBoTWFwOwotdHlwZWRlZiBzdHJ1Y3QgU3Vic3RpdHV0ZUZvbnRXaWR0aE1hcCBTdWJzdGl0dXRl
Rm9udFdpZHRoTWFwOwotdHlwZWRlZiBzdHJ1Y3QgQ2hhcmFjdGVyV2lkdGhJdGVyYXRvciBDaGFy
YWN0ZXJXaWR0aEl0ZXJhdG9yOwotCi0vLy8gU2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggZm9y
IG5vcm1hbCB1c2FnZS4KLSNkZWZpbmUgTlVNX1NVQlNUSVRVVEVfRk9OVF9NQVBTCTEwCiAKIEBp
bnRlcmZhY2UgV2ViVGV4dFJlbmRlcmVyIDogTlNPYmplY3QgPFdlYkNvcmVUZXh0UmVuZGVyZXI+
CiB7CkBAIC00OSw0MCArNDIsMjkgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2hhcmFjdGVyV2lkdGhJdGVy
YXRvciBDaAogICAgIHZvaWQgKnN0eWxlR3JvdXA7CiAgICAgCiBAcHVibGljCi0gICAgTlNGb250
ICpmb250OwotICAgIEdseXBoTWFwICpjaGFyYWN0ZXJUb0dseXBoTWFwOwkJCS8vIFVzZWQgZm9y
IDE2Yml0IGNsZWFuIHVuaWNvZGUgY2hhcmFjdGVycy4KLSAgICBVbmljb2RlR2x5cGhNYXAgKnVu
aWNvZGVDaGFyYWN0ZXJUb0dseXBoTWFwOyAJLy8gVXNlZCBmb3Igc3Vycm9nYXRlcy4KKyAgICBX
ZWJDb3JlRm9udCBmb250OworICAgIEdseXBoTWFwICpjaGFyYWN0ZXJUb0dseXBoTWFwOwogICAg
IFdpZHRoTWFwICpnbHlwaFRvV2lkdGhNYXA7CiAKICAgICBCT09MIHRyZWF0QXNGaXhlZFBpdGNo
OwogICAgIEFUU0dseXBoUmVmIHNwYWNlR2x5cGg7CiAgICAgZmxvYXQgc3BhY2VXaWR0aDsKICAg
ICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGg7Ci0KLSAgICBpbnQgbnVtU3Vic3RpdHV0ZUZvbnRX
aWR0aE1hcHM7Ci0gICAgaW50IG1heFN1YnN0aXR1dGVGb250V2lkdGhNYXBzOwotICAgIFN1YnN0
aXR1dGVGb250V2lkdGhNYXAgKnN1YnN0aXR1dGVGb250V2lkdGhNYXBzOwotICAgIEJPT0wgdXNp
bmdQcmludGVyRm9udDsKLSAgICBCT09MIGlzU21hbGxDYXBzUmVuZGVyZXI7CisgICAgZmxvYXQg
c3ludGhldGljQm9sZE9mZnNldDsKICAgICAKIEBwcml2YXRlCiAgICAgV2ViVGV4dFJlbmRlcmVy
ICpzbWFsbENhcHNSZW5kZXJlcjsKLSAgICBOU0ZvbnQgKnNtYWxsQ2Fwc0ZvbnQ7Ci0gICAgQVRT
VVN0eWxlIF9BVFNVU3N0eWxlOworICAgIEFUU1VTdHlsZSBfQVRTVVN0eWxlOwogICAgIEJPT0wg
QVRTVVN0eWxlSW5pdGlhbGl6ZWQ7CiAgICAgQk9PTCBBVFNVTWlycm9yczsKIH0KIAotKyAoQk9P
TClzaG91bGRCdWZmZXJUZXh0RHJhd2luZzsKLQotLSAoaWQpaW5pdFdpdGhGb250OihOU0ZvbnQg
Kilmb250IHVzaW5nUHJpbnRlckZvbnQ6KEJPT0wpdXNpbmdQcmludGVyRm9udDsKKy0gKGlkKWlu
aXRXaXRoRm9udDooV2ViQ29yZUZvbnQpZm9udDsKIAogQGVuZAogCi0KIEBpbnRlcmZhY2UgV2Vi
VGV4dFJlbmRlcmVyIChXZWJQcml2YXRlKQogCi0rICh2b2lkKV9zZXRBbHdheXNVc2VBVFNVOihC
T09MKWY7CisrICh2b2lkKXNldEFsd2F5c1VzZUFUU1U6KEJPT0wpZjsKIAogQGVuZAotCkluZGV4
OiBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0UmVuZGVyZXIubQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2Vi
VGV4dFJlbmRlcmVyLm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkyCmRpZmYgLXAgLXUgLXIx
LjE5MiBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0UmVuZGVyZXIubQotLS0g
V2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViVGV4dFJlbmRlcmVyLm0JMjQgU2VwIDIw
MDUgMTM6MzY6NTMgLTAwMDAJMS4xOTIKKysrIFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9q
L1dlYlRleHRSZW5kZXJlci5tCTMwIFNlcCAyMDA1IDE1OjE4OjU5IC0wMDAwCkBAIC0zMSw3ICsz
MSw2IEBACiAjaW1wb3J0IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMu
aD4KICNpbXBvcnQgPENvY29hL0NvY29hLmg+CiAKLSNpbXBvcnQgPFdlYktpdC9XZWJHbHlwaEJ1
ZmZlci5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkdyYXBoaWNzQnJpZGdlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV2ViS2l0TG9nZ2luZy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYk5TT2JqZWN0RXh0cmFz
Lmg+CkBAIC00Niw5ICs0NSwxNCBAQAogCiAvLyBGSVhNRTogRkFUQUxfQUxXQVlTIHNlZW1zIGxp
a2UgYSBiYWQgaWRlYTsgbGV0cyBzdG9wIHVzaW5nIGl0LgogCi0vLyBTUEkgZnJvbSBvdGhlciBm
cmFtZXdvcmtzLgorI2RlZmluZSBTTUFMTENBUFNfRk9OVFNJWkVfTVVMVElQTElFUiAwLjdmCisK
Ky8vIFNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoIGZvciBub3JtYWwgdXNhZ2UuCisjZGVmaW5l
IE5VTV9TVUJTVElUVVRFX0ZPTlRfTUFQUyAxMAorCisvLyBBY2NvcmRpbmcgdG8gaHR0cDovL3d3
dy51bmljb2RlLm9yZy9QdWJsaWMvVU5JREFUQS9VQ0QuaHRtbCNDYW5vbmljYWxfQ29tYmluaW5n
X0NsYXNzX1ZhbHVlcworI2RlZmluZSBISVJBR0FOQV9LQVRBS0FOQV9WT0lDSU5HX01BUktTIDgK
IAotLy8gTWFjcm9zCiAjZGVmaW5lIFNQQUNFIDB4MDAyMAogI2RlZmluZSBOT19CUkVBS19TUEFD
RSAweDAwQTAKICNkZWZpbmUgWkVST19XSURUSF9TUEFDRSAweDIwMEIKQEAgLTcwLDEwICs3NCw3
IEBACiAKICNkZWZpbmUgVU5JTklUSUFMSVpFRF9HTFlQSF9XSURUSCA2NTUzNQogCi0jZGVmaW5l
IEFUU0ZvbnRSZWZGcm9tTlNGb250KGZvbnQpIChGTUdldEFUU0ZvbnRSZWZGcm9tRm9udCgoRk1G
b250KVdLR2V0TlNGb250QVRTVUZvbnRJZChmb250KSkpCi0KLSNkZWZpbmUgU01BTExDQVBTX0ZP
TlRTSVpFX01VTFRJUExJRVIgMC43RgotI2RlZmluZSBJTlZBTElEX1dJRFRIIC0oX19GTFRfTUFY
X18pCisjZGVmaW5lIElOVkFMSURfV0lEVEggKC1GTFRfTUFYKQogCiAjaWYgIWRlZmluZWQoU2Nh
bGVFbVRvVW5pdHMpCiAjZGVmaW5lIENPTlRFWFRfRFBJCSg3Mi4wKQpAQCAtODEsNDggKzgyLDI5
IEBACiAjZGVmaW5lIFNjYWxlRW1Ub1VuaXRzKFgsIFVfUEVSX0VNKQkoWCAqICgoMS4wICogQ09O
VEVYVF9EUEkpIC8gKENPTlRFWFRfRFBJICogVV9QRVJfRU0pKSkKICNlbmRpZgogCi0vLyBEYXRh
dHlwZXMKIHR5cGVkZWYgZmxvYXQgV2ViR2x5cGhXaWR0aDsKIHR5cGVkZWYgVUludDMyIFVuaWNv
ZGVDaGFyOwogCi1zdHJ1Y3QgV2lkdGhFbnRyeSB7Ci0gICAgV2ViR2x5cGhXaWR0aCB3aWR0aDsK
LX07Ci0KIHN0cnVjdCBXaWR0aE1hcCB7CiAgICAgQVRTR2x5cGhSZWYgc3RhcnRSYW5nZTsKICAg
ICBBVFNHbHlwaFJlZiBlbmRSYW5nZTsKICAgICBXaWR0aE1hcCAqbmV4dDsKLSAgICBXaWR0aEVu
dHJ5ICp3aWR0aHM7CisgICAgV2ViR2x5cGhXaWR0aCAqd2lkdGhzOwogfTsKIAotc3RydWN0IEds
eXBoRW50cnkKLXsKK3R5cGVkZWYgc3RydWN0IEdseXBoRW50cnkgewogICAgIEFUU0dseXBoUmVm
IGdseXBoOwotICAgIE5TRm9udCAqZm9udDsKLX07CisgICAgV2ViVGV4dFJlbmRlcmVyICpzdWJz
dGl0dXRlUmVuZGVyZXI7Cit9IEdseXBoRW50cnk7CiAKIHN0cnVjdCBHbHlwaE1hcCB7Ci0gICAg
VW5pQ2hhciBzdGFydFJhbmdlOwotICAgIFVuaUNoYXIgZW5kUmFuZ2U7Ci0gICAgR2x5cGhNYXAg
Km5leHQ7Ci0gICAgR2x5cGhFbnRyeSAqZ2x5cGhzOwotfTsKLQotc3RydWN0IFVuaWNvZGVHbHlw
aE1hcCB7CiAgICAgVW5pY29kZUNoYXIgc3RhcnRSYW5nZTsKICAgICBVbmljb2RlQ2hhciBlbmRS
YW5nZTsKLSAgICBVbmljb2RlR2x5cGhNYXAgKm5leHQ7CisgICAgR2x5cGhNYXAgKm5leHQ7CiAg
ICAgR2x5cGhFbnRyeSAqZ2x5cGhzOwogfTsKIAotc3RydWN0IFN1YnN0aXR1dGVGb250V2lkdGhN
YXAgewotICAgIE5TRm9udCAqZm9udDsKLSAgICBXaWR0aE1hcCAqbWFwOwotfTsKLQotc3RydWN0
IENoYXJhY3RlcldpZHRoSXRlcmF0b3IKLXsKK3R5cGVkZWYgc3RydWN0IENoYXJhY3RlcldpZHRo
SXRlcmF0b3IgewogICAgIFdlYlRleHRSZW5kZXJlciAqcmVuZGVyZXI7CiAgICAgY29uc3QgV2Vi
Q29yZVRleHRSdW4gKnJ1bjsKICAgICBjb25zdCBXZWJDb3JlVGV4dFN0eWxlICpzdHlsZTsKQEAg
LTEzMSw5ICsxMTMsOSBAQCBzdHJ1Y3QgQ2hhcmFjdGVyV2lkdGhJdGVyYXRvcgogICAgIGZsb2F0
IHdpZHRoVG9TdGFydDsKICAgICBmbG9hdCBwYWRkaW5nOwogICAgIGZsb2F0IHBhZFBlclNwYWNl
OwotfTsKK30gQ2hhcmFjdGVyV2lkdGhJdGVyYXRvcjsKIAotdHlwZWRlZiBzdHJ1Y3QKK3R5cGVk
ZWYgc3RydWN0IEFUU1VMYXlvdXRQYXJhbWV0ZXJzCiB7CiAgICAgV2ViVGV4dFJlbmRlcmVyICpy
ZW5kZXJlcjsKICAgICBjb25zdCBXZWJDb3JlVGV4dFJ1biAqcnVuOwpAQCAtMTQxLDIwICsxMjMs
MTkgQEAgdHlwZWRlZiBzdHJ1Y3QKICAgICBBVFNVVGV4dExheW91dCBsYXlvdXQ7CiB9IEFUU1VM
YXlvdXRQYXJhbWV0ZXJzOwogCi0vLyBJbnRlcm5hbCBBUEkKIEBpbnRlcmZhY2UgV2ViVGV4dFJl
bmRlcmVyIChXZWJJbnRlcm5hbCkKIAotLSAoTlNGb250ICopX3N1YnN0aXR1dGVGb250Rm9yQ2hh
cmFjdGVyczogKGNvbnN0IHVuaWNoYXIgKiljaGFyYWN0ZXJzIGxlbmd0aDogKGludCludW1DaGFy
YWN0ZXJzIGZhbWlsaWVzOiAoTlNTdHJpbmcgKiopZmFtaWxpZXM7CistIChXZWJUZXh0UmVuZGVy
ZXIgKilzdWJzdGl0dXRlUmVuZGVyZXJGb3JDaGFyYWN0ZXJzOihjb25zdCB1bmljaGFyICopY2hh
cmFjdGVycyBsZW5ndGg6KGludCludW1DaGFyYWN0ZXJzIGZhbWlsaWVzOihOU1N0cmluZyAqKilm
YW1pbGllczsKKy0gKFdlYlRleHRSZW5kZXJlciAqKXJlbmRlcmVyRm9yQWx0ZXJuYXRlRm9udDoo
V2ViQ29yZUZvbnQpYWx0ZXJuYXRlTlNGb250OwogCi0tIChXaWR0aE1hcCAqKV9leHRlbmRHbHlw
aFRvV2lkdGhNYXBUb0luY2x1ZGU6KEFUU0dseXBoUmVmKWdseXBoSUQgZm9udDooTlNGb250ICop
Zm9udDsKLS0gKEFUU0dseXBoUmVmKV9leHRlbmRDaGFyYWN0ZXJUb0dseXBoTWFwVG9JbmNsdWRl
OihVbmlDaGFyKSBjOwotLSAoQVRTR2x5cGhSZWYpX2V4dGVuZFVuaWNvZGVDaGFyYWN0ZXJUb0ds
eXBoTWFwVG9JbmNsdWRlOiAoVW5pY29kZUNoYXIpYzsKLS0gKHZvaWQpX3VwZGF0ZUdseXBoRW50
cnlGb3JDaGFyYWN0ZXI6IChVbmlDaGFyKWMgZ2x5cGhJRDogKEFUU0dseXBoUmVmKWdseXBoSUQg
Zm9udDogKE5TRm9udCAqKXN1YnN0aXR1dGVGb250OworLSAoV2lkdGhNYXAgKilfZXh0ZW5kR2x5
cGhUb1dpZHRoTWFwVG9JbmNsdWRlOihBVFNHbHlwaFJlZilnbHlwaElEOworLSAoQVRTR2x5cGhS
ZWYpZXh0ZW5kQ2hhcmFjdGVyVG9HbHlwaE1hcFRvSW5jbHVkZTooVW5pY29kZUNoYXIpYzsKKy0g
KHZvaWQpdXBkYXRlR2x5cGhFbnRyeUZvckNoYXJhY3RlcjooVW5pY29kZUNoYXIpYyBnbHlwaElE
OihBVFNHbHlwaFJlZilnbHlwaElEIHN1YnN0aXR1dGVSZW5kZXJlcjooV2ViVGV4dFJlbmRlcmVy
ICopc3Vic3RpdHV0ZVJlbmRlcmVyOwogCi0tIChmbG9hdClfZmxvYXRXaWR0aEZvclJ1bjooY29u
c3QgV2ViQ29yZVRleHRSdW4gKilydW4gc3R5bGU6KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilz
dHlsZSB3aWR0aHM6KGZsb2F0ICopd2lkdGhCdWZmZXIgZm9udHM6KE5TRm9udCAqKilmb250QnVm
ZmVyIGdseXBoczooQ0dHbHlwaCAqKWdseXBoQnVmZmVyIHN0YXJ0UG9zaXRpb246KGZsb2F0ICop
c3RhcnRQb3NpdGlvbiBudW1HbHlwaHM6KGludCAqKV9udW1HbHlwaHM7CistIChmbG9hdClmbG9h
dFdpZHRoRm9yUnVuOihjb25zdCBXZWJDb3JlVGV4dFJ1biAqKXJ1biBzdHlsZTooY29uc3QgV2Vi
Q29yZVRleHRTdHlsZSAqKXN0eWxlIHdpZHRoczooZmxvYXQgKil3aWR0aEJ1ZmZlciBzdWJzdGl0
dXRlUmVuZGVyZXJzOihXZWJUZXh0UmVuZGVyZXIgKiopcmVuZGVyZXJCdWZmZXIgZ2x5cGhzOihD
R0dseXBoICopZ2x5cGhCdWZmZXIgc3RhcnRQb3NpdGlvbjooZmxvYXQgKilzdGFydFBvc2l0aW9u
IG51bUdseXBoczooaW50ICopX251bUdseXBoczsKIAogLy8gTWVhc3VyaW5nIHJ1bnMuCi0tIChm
bG9hdClfQ0dfZmxvYXRXaWR0aEZvclJ1bjooY29uc3QgV2ViQ29yZVRleHRSdW4gKilydW4gc3R5
bGU6KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilzdHlsZSB3aWR0aHM6IChmbG9hdCAqKXdpZHRo
QnVmZmVyIGZvbnRzOiAoTlNGb250ICoqKWZvbnRCdWZmZXIgZ2x5cGhzOiAoQ0dHbHlwaCAqKWds
eXBoQnVmZmVyIHN0YXJ0UG9zaXRpb246KGZsb2F0ICopc3RhcnRQb3NpdGlvbiBudW1HbHlwaHM6
IChpbnQgKilfbnVtR2x5cGhzOworLSAoZmxvYXQpX0NHX2Zsb2F0V2lkdGhGb3JSdW46KGNvbnN0
IFdlYkNvcmVUZXh0UnVuICopcnVuIHN0eWxlOihjb25zdCBXZWJDb3JlVGV4dFN0eWxlICopc3R5
bGUgd2lkdGhzOiAoZmxvYXQgKil3aWR0aEJ1ZmZlciBzdWJzdGl0dXRlUmVuZGVyZXJzOihXZWJU
ZXh0UmVuZGVyZXIgKiopcmVuZGVyZXJCdWZmZXIgZ2x5cGhzOiAoQ0dHbHlwaCAqKWdseXBoQnVm
ZmVyIHN0YXJ0UG9zaXRpb246KGZsb2F0ICopc3RhcnRQb3NpdGlvbiBudW1HbHlwaHM6IChpbnQg
KilfbnVtR2x5cGhzOwogLSAoZmxvYXQpX0FUU1VfZmxvYXRXaWR0aEZvclJ1bjooY29uc3QgV2Vi
Q29yZVRleHRSdW4gKilydW4gc3R5bGU6KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilzdHlsZTsK
IAogLy8gRHJhd2luZyBydW5zLgpAQCAtMTY5LDE5ICsxNTAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QK
IC0gKHZvaWQpX0NHX2RyYXdIaWdobGlnaHRGb3JSdW46KGNvbnN0IFdlYkNvcmVUZXh0UnVuICop
cnVuIHN0eWxlOihjb25zdCBXZWJDb3JlVGV4dFN0eWxlICopc3R5bGUgZ2VvbWV0cnk6KGNvbnN0
IFdlYkNvcmVUZXh0R2VvbWV0cnkgKilnZW9tZXRyeTsKIC0gKHZvaWQpX0FUU1VfZHJhd0hpZ2hs
aWdodEZvclJ1bjooY29uc3QgV2ViQ29yZVRleHRSdW4gKilydW4gc3R5bGU6KGNvbnN0IFdlYkNv
cmVUZXh0U3R5bGUgKilzdHlsZSBnZW9tZXRyeTooY29uc3QgV2ViQ29yZVRleHRHZW9tZXRyeSAq
KWdlb21ldHJ5OwogCi0tIChCT09MKV9zZXR1cEZvbnQ7CistIChCT09MKXNldFVwRm9udDsKIAog
LSAoQVRTVVRleHRMYXlvdXQpX2NyZWF0ZUFUU1VUZXh0TGF5b3V0Rm9yUnVuOihjb25zdCBXZWJD
b3JlVGV4dFJ1biAqKXJ1biBzdHlsZTooY29uc3QgV2ViQ29yZVRleHRTdHlsZSAqKXN0eWxlOwog
Ci0vLyBTbWFsbCBjYXBzCi0tICh2b2lkKV9zZXRJc1NtYWxsQ2Fwc1JlbmRlcmVyOihCT09MKWZs
YWc7Ci0tIChCT09MKV9pc1NtYWxsQ2Fwc1JlbmRlcmVyOwotLSAoV2ViVGV4dFJlbmRlcmVyICop
X3NtYWxsQ2Fwc1JlbmRlcmVyOwotLSAoTlNGb250ICopX3NtYWxsQ2Fwc0ZvbnQ7CistIChXZWJU
ZXh0UmVuZGVyZXIgKilzbWFsbENhcHNSZW5kZXJlcjsKIAogQGVuZAogCi0KIC8vIENoYXJhY3Rl
ciBwcm9wZXJ0eSBmdW5jdGlvbnMuCiAKIHN0YXRpYyBpbmxpbmUgQk9PTCBpc1NwYWNlKFVuaUNo
YXIgYykKQEAgLTIwOCwxOCArMTg0LDEwIEBAIHN0YXRpYyBpbmxpbmUgQk9PTCBpc1JvdW5kaW5n
SGFja0NoYXJhY3QKIC8vIE1hcCB1dGlsaXR5IGZ1bmN0aW9ucwogc3RhdGljIHZvaWQgZnJlZVdp
ZHRoTWFwKFdpZHRoTWFwICptYXApOwogc3RhdGljIHZvaWQgZnJlZUdseXBoTWFwKEdseXBoTWFw
ICptYXApOwotc3RhdGljIHZvaWQgZnJlZVVuaWNvZGVHbHlwaE1hcChVbmljb2RlR2x5cGhNYXAg
Km1hcCk7Ci1zdGF0aWMgaW5saW5lIEFUU0dseXBoUmVmIGdseXBoRm9yVW5pY29kZUNoYXJhY3Rl
ciAoVW5pY29kZUdseXBoTWFwICptYXAsIFVuaWNvZGVDaGFyIGMsIE5TRm9udCAqKmZvbnQpOwot
c3RhdGljIGlubGluZSBTdWJzdGl0dXRlRm9udFdpZHRoTWFwICptYXBGb3JTdWJzdGl0dXRlRm9u
dChXZWJUZXh0UmVuZGVyZXIgKnJlbmRlcmVyLCBOU0ZvbnQgKmZvbnQpOwotc3RhdGljIGlubGlu
ZSBBVFNHbHlwaFJlZiBnbHlwaEZvckNoYXJhY3RlciAoR2x5cGhNYXAgKm1hcCwgVW5pQ2hhciBj
LCBOU0ZvbnQgKipmb250KTsKLXN0YXRpYyBpbmxpbmUgU3Vic3RpdHV0ZUZvbnRXaWR0aE1hcCAq
bWFwRm9yU3Vic3RpdHV0ZUZvbnQoV2ViVGV4dFJlbmRlcmVyICpyZW5kZXJlciwgTlNGb250ICpm
b250KTsKLXN0YXRpYyBpbmxpbmUgV2ViR2x5cGhXaWR0aCB3aWR0aEZyb21NYXAgKFdlYlRleHRS
ZW5kZXJlciAqcmVuZGVyZXIsIFdpZHRoTWFwICptYXAsIEFUU0dseXBoUmVmIGdseXBoLCBOU0Zv
bnQgKmZvbnQpOwotc3RhdGljIGlubGluZSBXZWJHbHlwaFdpZHRoIHdpZHRoRm9yR2x5cGggKFdl
YlRleHRSZW5kZXJlciAqcmVuZGVyZXIsIEFUU0dseXBoUmVmIGdseXBoLCBOU0ZvbnQgKmZvbnQp
OwogCi1zdGF0aWMgV2ViR2x5cGhXaWR0aCBnZXRVbmNhY2hlZFdpZHRoKFdlYlRleHRSZW5kZXJl
ciAqcmVuZGVyZXIsIFdpZHRoTWFwICptYXAsIEFUU0dseXBoUmVmIGdseXBoLCBOU0ZvbnQgKmZv
bnQpCitzdGF0aWMgV2ViR2x5cGhXaWR0aCBnZXRVbmNhY2hlZFdpZHRoKFdlYlRleHRSZW5kZXJl
ciAqcmVuZGVyZXIsIFdpZHRoTWFwICptYXAsIEFUU0dseXBoUmVmIGdseXBoKQogewotICAgIGlm
IChmb250ID09IE5VTEwpCi0gICAgICAgIGZvbnQgPSByZW5kZXJlci0+Zm9udDsKKyAgICBOU0Zv
bnQgKmZvbnQgPSByZW5kZXJlci0+Zm9udC5mb250OwogCiAgICAgZmxvYXQgcG9pbnRTaXplID0g
W2ZvbnQgcG9pbnRTaXplXTsKICAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dBZmZpbmVUcmFu
c2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwpAQCAtMjMyLDQwICsyMDAsMjgg
QEAgc3RhdGljIFdlYkdseXBoV2lkdGggZ2V0VW5jYWNoZWRXaWR0aChXZQogICAgIHJldHVybiBh
ZHZhbmNlLndpZHRoOwogfQogCi1zdGF0aWMgaW5saW5lIFdlYkdseXBoV2lkdGggd2lkdGhGcm9t
TWFwIChXZWJUZXh0UmVuZGVyZXIgKnJlbmRlcmVyLCBXaWR0aE1hcCAqbWFwLCBBVFNHbHlwaFJl
ZiBnbHlwaCwgTlNGb250ICpmb250KQorc3RhdGljIGlubGluZSBXZWJHbHlwaFdpZHRoIHdpZHRo
RnJvbU1hcChXZWJUZXh0UmVuZGVyZXIgKnJlbmRlcmVyLCBXaWR0aE1hcCAqbWFwLCBBVFNHbHlw
aFJlZiBnbHlwaCkKIHsKLSAgICBXZWJHbHlwaFdpZHRoIHdpZHRoID0gVU5JTklUSUFMSVpFRF9H
TFlQSF9XSURUSDsKLSAgICAKLSAgICB3aGlsZSAoMSl7Ci0gICAgICAgIGlmIChtYXAgPT0gMCkK
LSAgICAgICAgICAgIG1hcCA9IFtyZW5kZXJlciBfZXh0ZW5kR2x5cGhUb1dpZHRoTWFwVG9JbmNs
dWRlOiBnbHlwaCBmb250OmZvbnRdOwotCi0gICAgICAgIGlmIChnbHlwaCA+PSBtYXAtPnN0YXJ0
UmFuZ2UgJiYgZ2x5cGggPD0gbWFwLT5lbmRSYW5nZSl7Ci0gICAgICAgICAgICB3aWR0aCA9IG1h
cC0+d2lkdGhzW2dseXBoIC0gbWFwLT5zdGFydFJhbmdlXS53aWR0aDsKLSAgICAgICAgICAgIGlm
ICh3aWR0aCA9PSBVTklOSVRJQUxJWkVEX0dMWVBIX1dJRFRIKXsKLSAgICAgICAgICAgICAgICB3
aWR0aCA9IGdldFVuY2FjaGVkV2lkdGggKHJlbmRlcmVyLCBtYXAsIGdseXBoLCBmb250KTsKLSAg
ICAgICAgICAgICAgICBtYXAtPndpZHRoc1tnbHlwaCAtIG1hcC0+c3RhcnRSYW5nZV0ud2lkdGgg
PSB3aWR0aDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAobWFwID09IE5VTEwpCisgICAg
ICAgICAgICBtYXAgPSBbcmVuZGVyZXIgX2V4dGVuZEdseXBoVG9XaWR0aE1hcFRvSW5jbHVkZTpn
bHlwaF07CisKKyAgICAgICAgaWYgKGdseXBoID49IG1hcC0+c3RhcnRSYW5nZSAmJiBnbHlwaCA8
PSBtYXAtPmVuZFJhbmdlKSB7CisgICAgICAgICAgICBXZWJHbHlwaFdpZHRoIHdpZHRoID0gbWFw
LT53aWR0aHNbZ2x5cGggLSBtYXAtPnN0YXJ0UmFuZ2VdOworICAgICAgICAgICAgaWYgKHdpZHRo
ID09IFVOSU5JVElBTElaRURfR0xZUEhfV0lEVEgpIHsKKyAgICAgICAgICAgICAgICB3aWR0aCA9
IGdldFVuY2FjaGVkV2lkdGgocmVuZGVyZXIsIG1hcCwgZ2x5cGgpOworICAgICAgICAgICAgICAg
IG1hcC0+d2lkdGhzW2dseXBoIC0gbWFwLT5zdGFydFJhbmdlXSA9IHdpZHRoOwogICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwogICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgbWFwID0gbWFwLT5uZXh0OwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiB3aWR0aDsKKworICAgICAgICBtYXAg
PSBtYXAtPm5leHQ7CiAgICAgfQogfSAgICAKIAotc3RhdGljIGlubGluZSBXZWJHbHlwaFdpZHRo
IHdpZHRoRm9yR2x5cGggKFdlYlRleHRSZW5kZXJlciAqcmVuZGVyZXIsIEFUU0dseXBoUmVmIGds
eXBoLCBOU0ZvbnQgKmZvbnQpCitzdGF0aWMgaW5saW5lIFdlYkdseXBoV2lkdGggd2lkdGhGb3JH
bHlwaChXZWJUZXh0UmVuZGVyZXIgKnJlbmRlcmVyLCBBVFNHbHlwaFJlZiBnbHlwaCkKIHsKLSAg
ICBXaWR0aE1hcCAqbWFwOwotCi0gICAgaWYgKGZvbnQgJiYgZm9udCAhPSByZW5kZXJlci0+Zm9u
dCkKLSAgICAgICAgbWFwID0gbWFwRm9yU3Vic3RpdHV0ZUZvbnQocmVuZGVyZXIsIGZvbnQpLT5t
YXA7Ci0gICAgZWxzZQotICAgICAgICBtYXAgPSByZW5kZXJlci0+Z2x5cGhUb1dpZHRoTWFwOwot
Ci0gICAgcmV0dXJuIHdpZHRoRnJvbU1hcCAocmVuZGVyZXIsIG1hcCwgZ2x5cGgsIGZvbnQpOwor
ICAgIHJldHVybiB3aWR0aEZyb21NYXAocmVuZGVyZXIsIHJlbmRlcmVyLT5nbHlwaFRvV2lkdGhN
YXAsIGdseXBoKSArIHJlbmRlcmVyLT5zeW50aGV0aWNCb2xkT2Zmc2V0OwogfQogCiBzdGF0aWMg
T1NTdGF0dXMgb3ZlcnJpZGVMYXlvdXRPcGVyYXRpb24oQVRTVUxheW91dE9wZXJhdGlvblNlbGVj
dG9yIGlDdXJyZW50T3BlcmF0aW9uLCBBVFNVTGluZVJlZiBpTGluZVJlZiwgVUludDMyIGlSZWZD
b24sIHZvaWQgKmlPcGVyYXRpb25DYWxsYmFja1BhcmFtZXRlclB0ciwgQVRTVUxheW91dE9wZXJh
dGlvbkNhbGxiYWNrU3RhdHVzICpvQ2FsbGJhY2tTdGF0dXMpCkBAIC0yODYsNyArMjQyLDcgQEAg
c3RhdGljIE9TU3RhdHVzIG92ZXJyaWRlTGF5b3V0T3BlcmF0aW9uKAogICAgICAgICAvLyBUaGUg
Q29yZUdyYXBoaWNzIGludGVycHJldGF0aW9uIG9mIE5TRm9udEFudGlhbGlhc2VkSW50ZWdlckFk
dmFuY2VtZW50c1JlbmRlcmluZ01vZGUgc2VlbXMKICAgICAgICAgLy8gdG8gYmUgInJvdW5kIGVh
Y2ggZ2x5cGgncyB3aWR0aCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIi4gVGhpcyBpcyBub3QgdGhl
IHNhbWUgYXMgQVRTVUkKICAgICAgICAgLy8gZG9lcyBpbiBhbnkgb2YgaXRzIGRldmljZS1tZXRy
aWNzIG1vZGVzLgotICAgICAgICBCb29sZWFuIHJvdW5kRWFjaEdseXBoID0gW3BhcmFtcy0+cmVu
ZGVyZXItPmZvbnQgcmVuZGVyaW5nTW9kZV0gPT0gTlNGb250QW50aWFsaWFzZWRJbnRlZ2VyQWR2
YW5jZW1lbnRzUmVuZGVyaW5nTW9kZTsKKyAgICAgICAgQm9vbGVhbiByb3VuZEVhY2hHbHlwaCA9
IFtwYXJhbXMtPnJlbmRlcmVyLT5mb250LmZvbnQgcmVuZGVyaW5nTW9kZV0gPT0gTlNGb250QW50
aWFsaWFzZWRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZTsKICAgICAgICAgRml4ZWQg
bGFzdE5hdGl2ZVBvcyA9IDA7CiAgICAgICAgIGZsb2F0IGxhc3RBZGp1c3RlZFBvcyA9IDA7CiAg
ICAgICAgIGNvbnN0IFdlYkNvcmVUZXh0UnVuICpydW4gPSBwYXJhbXMtPnJ1bjsKQEAgLTMyOSwy
NCArMjg1LDIzIEBAIHN0YXRpYyBPU1N0YXR1cyBvdmVycmlkZUxheW91dE9wZXJhdGlvbigKIH0K
IAogLy8gSXRlcmF0b3IgZnVuY3Rpb25zCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplQ2hhcmFjdGVy
V2lkdGhJdGVyYXRvciAoQ2hhcmFjdGVyV2lkdGhJdGVyYXRvciAqaXRlcmF0b3IsIFdlYlRleHRS
ZW5kZXJlciAqcmVuZGVyZXIsIGNvbnN0IFdlYkNvcmVUZXh0UnVuICpydW4gLCBjb25zdCBXZWJD
b3JlVGV4dFN0eWxlICpzdHlsZSk7Ci1zdGF0aWMgZmxvYXQgd2lkdGhGb3JOZXh0Q2hhcmFjdGVy
IChDaGFyYWN0ZXJXaWR0aEl0ZXJhdG9yICppdGVyYXRvciwgQVRTR2x5cGhSZWYgKmdseXBoVXNl
ZCwgTlNGb250ICoqZm9udFVzZWQpOworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUNoYXJhY3Rlcldp
ZHRoSXRlcmF0b3IoQ2hhcmFjdGVyV2lkdGhJdGVyYXRvciAqaXRlcmF0b3IsIFdlYlRleHRSZW5k
ZXJlciAqcmVuZGVyZXIsIGNvbnN0IFdlYkNvcmVUZXh0UnVuICpydW4gLCBjb25zdCBXZWJDb3Jl
VGV4dFN0eWxlICpzdHlsZSk7CitzdGF0aWMgZmxvYXQgd2lkdGhGb3JOZXh0Q2hhcmFjdGVyKENo
YXJhY3RlcldpZHRoSXRlcmF0b3IgKml0ZXJhdG9yLCBBVFNHbHlwaFJlZiAqZ2x5cGhVc2VkLCBX
ZWJUZXh0UmVuZGVyZXIgKipyZW5kZXJlclVzZWQpOwogCi0KLS8vIE1pc2MuCiBzdGF0aWMgQk9P
TCBmaWxsU3R5bGVXaXRoQXR0cmlidXRlcyhBVFNVU3R5bGUgc3R5bGUsIE5TRm9udCAqdGhlRm9u
dCk7CiBzdGF0aWMgQk9PTCBzaG91bGRVc2VBVFNVKGNvbnN0IFdlYkNvcmVUZXh0UnVuICpydW4p
OworCisjaWYgIUVSUk9SX0RJU0FCTEVECiBzdGF0aWMgTlNTdHJpbmcgKnBhdGhGcm9tRm9udChO
U0ZvbnQgKmZvbnQpOworI2VuZGlmCisKIHN0YXRpYyB2b2lkIGNyZWF0ZUFUU1VMYXlvdXRQYXJh
bWV0ZXJzKEFUU1VMYXlvdXRQYXJhbWV0ZXJzICpwYXJhbXMsIFdlYlRleHRSZW5kZXJlciAqcmVu
ZGVyZXIsIGNvbnN0IFdlYkNvcmVUZXh0UnVuICpydW4gLCBjb25zdCBXZWJDb3JlVGV4dFN0eWxl
ICpzdHlsZSk7CiBzdGF0aWMgdm9pZCBkaXNwb3NlQVRTVUxheW91dFBhcmFtZXRlcnMoQVRTVUxh
eW91dFBhcmFtZXRlcnMgKnBhcmFtcyk7CiAKLQogLy8gR2xvYmFscwotc3RhdGljIENGQ2hhcmFj
dGVyU2V0UmVmIG5vbkJhc2VDaGFycyA9IE5VTEw7CiBzdGF0aWMgQk9PTCBidWZmZXJUZXh0RHJh
d2luZyA9IE5POwogc3RhdGljIEJPT0wgYWx3YXlzVXNlQVRTVSA9IE5POwogCi0KIEBpbXBsZW1l
bnRhdGlvbiBXZWJUZXh0UmVuZGVyZXIKIAogKyAoTlNTdHJpbmcgKil3ZWJGYWxsYmFja0ZvbnRG
YW1pbHkKQEAgLTM1NywxNzEgKzMxMiwxMjggQEAgc3RhdGljIEJPT0wgYWx3YXlzVXNlQVRTVSA9
IE5POwogICAgIHJldHVybiB3ZWJGYWxsYmFja0ZvbnRGYW1pbHk7CiB9CiAKLSsgKEJPT0wpc2hv
dWxkQnVmZmVyVGV4dERyYXdpbmcKLXsKLSAgICByZXR1cm4gYnVmZmVyVGV4dERyYXdpbmc7Ci19
Ci0KICsgKHZvaWQpaW5pdGlhbGl6ZQogewotICAgIG5vbkJhc2VDaGFycyA9IENGQ2hhcmFjdGVy
U2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXROb25CYXNlKTsKICAgICBidWZmZXJUZXh0
RHJhd2luZyA9IFtbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzdHJpbmdG
b3JLZXk6QCJCdWZmZXJUZXh0RHJhd2luZyJdIGlzRXF1YWw6IEAiWUVTIl07CiB9CiAKLS0gaW5p
dFdpdGhGb250OihOU0ZvbnQgKilmIHVzaW5nUHJpbnRlckZvbnQ6KEJPT0wpcAorLSBpbml0V2l0
aEZvbnQ6KFdlYkNvcmVGb250KWYKIHsKICAgICBbc3VwZXIgaW5pdF07CiAgICAgCiAgICAgLy8g
UXVhcnR6IGNhbiBvbmx5IGhhbmRsZSBmb250cyB3aXRoIHRoZXNlIGdseXBoIHBhY2tpbmdzLiAg
T3RoZXIgcGFja2luZ3MgaGF2ZQogICAgIC8vIGJlZW4gZGVwcmVjYXRlZC4KLSAgICBpZiAoW2Yg
Z2x5cGhQYWNraW5nXSAhPSBOU05hdGl2ZVNob3J0R2x5cGhQYWNraW5nICYmCi0gICAgICAgIFtm
IGdseXBoUGFja2luZ10gIT0gTlNUd29CeXRlR2x5cGhQYWNraW5nKSB7Ci0gICAgICAgIC8vIEFw
cGFyYW50bHkgdGhlcmUgYXJlIG1hbnkgZGVwcmVjYXRlZCBmb250cyBvdXQgdGhlcmUgd2l0aCB1
bnN1cHBvcnRlZCBwYWNraW5nIHR5cGVzLgorICAgIGlmIChbZi5mb250IGdseXBoUGFja2luZ10g
IT0gTlNOYXRpdmVTaG9ydEdseXBoUGFja2luZyAmJiBbZi5mb250IGdseXBoUGFja2luZ10gIT0g
TlNUd29CeXRlR2x5cGhQYWNraW5nKSB7CisgICAgICAgIC8vIEFwcGFyZW50bHkgdGhlcmUgYXJl
IG1hbnkgZGVwcmVjYXRlZCBmb250cyBvdXQgdGhlcmUgd2l0aCB1bnN1cHBvcnRlZCBwYWNraW5n
IHR5cGVzLgogICAgICAgICAvLyBMb2cgYW5kIHVzZSBmYWxsYmFjayBmb250LgotICAgICAgICAv
LyBUaGlzIGNoYW5nZSBmaXhlcyB0aGUgbWFueSBjcmFzaGVzIHJlcG9ydGVkIGluIDM3ODI1MzMu
ICBNb3N0IGxpa2VseSwgdGhlCi0gICAgICAgIC8vIHByb2JsZW0gaXMgZW5jb3VudGVyZWQgd2hl
biBwZW9wbGUgdXBncmFkZSBmcm9tIE9TIDksIG9yIGhhdmUgT1MgOQotICAgICAgICAvLyBmb250
cyBpbnN0YWxsZWQgb24gT1MgWC4KLSAgICAgICAgTlNMb2cgKEAiJXM6JWQgIFVuYWJsZSB0byB1
c2UgZGVwcmVjYXRlZCBmb250ICVAICVmLCB1c2luZyBzeXN0ZW0gZm9udCBpbnN0ZWFkIiwgX19G
SUxFX18sIF9fTElORV9fLCBbZiBkaXNwbGF5TmFtZV0sIFtmIHBvaW50U2l6ZV0pOwotICAgICAg
ICBmID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltmIHBvaW50U2l6ZV1dOworICAgICAgICAv
LyBUaGlzIGNoYW5nZSBmaXhlcyB0aGUgbWFueSBjcmFzaGVzIHJlcG9ydGVkIGluIDM3ODI1MzMu
CisgICAgICAgIC8vIE1vc3QgbGlrZWx5LCB0aGUgcHJvYmxlbSBpcyBlbmNvdW50ZXJlZCB3aGVu
IHBlb3BsZSB1cGdyYWRlIGZyb20gT1MgOSwgb3IgaGF2ZSBPUyA5IGZvbnRzIGluc3RhbGxlZCBv
biBPUyBYLgorICAgICAgICBOU0xvZyhAIiVzOiVkICBVbmFibGUgdG8gdXNlIGRlcHJlY2F0ZWQg
Zm9udCAlQCAlZiwgdXNpbmcgc3lzdGVtIGZvbnQgaW5zdGVhZCIsIF9fRklMRV9fLCBfX0xJTkVf
XywgW2YuZm9udCBkaXNwbGF5TmFtZV0sIFtmLmZvbnQgcG9pbnRTaXplXSk7CisgICAgICAgIGYu
Zm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbZi5mb250IHBvaW50U2l6ZV1dOwogICAg
IH0KLSAgICAgICAgCi0gICAgbWF4U3Vic3RpdHV0ZUZvbnRXaWR0aE1hcHMgPSBOVU1fU1VCU1RJ
VFVURV9GT05UX01BUFM7Ci0gICAgc3Vic3RpdHV0ZUZvbnRXaWR0aE1hcHMgPSBjYWxsb2MgKDEs
IG1heFN1YnN0aXR1dGVGb250V2lkdGhNYXBzICogc2l6ZW9mKFN1YnN0aXR1dGVGb250V2lkdGhN
YXApKTsKLSAgICBmb250ID0gWyhwID8gW2YgcHJpbnRlckZvbnRdIDogW2Ygc2NyZWVuRm9udF0p
IHJldGFpbl07Ci0gICAgdXNpbmdQcmludGVyRm9udCA9IHA7CisKKyAgICBmb250ID0gZjsKKwor
ICAgIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmLnN5bnRoZXRpY0JvbGQgPyBjZWlsZihbZi5mb250
IHBvaW50U2l6ZV0gLyAyNC4wZikgOiAwLmY7CiAgICAgCiAgICAgYm9vbCBmYWlsZWRTZXR1cCA9
IGZhbHNlOwotICAgIGlmICghW3NlbGYgX3NldHVwRm9udF0pewotICAgICAgICAvLyBBY2shICBT
b21ldGhpbmcgdmVyeSBiYWQgaGFwcGVuZWQsIGxpa2UgYSBjb3JydXB0IGZvbnQuICBUcnkKLSAg
ICAgICAgLy8gbG9va2luZyBmb3IgYW4gYWx0ZXJuYXRlICdiYXNlJyBmb250IGZvciB0aGlzIHJl
bmRlcmVyLgotCi0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBoYWNrIHRvIHVzZSAiVGltZXMgTmV3
IFJvbWFuIiBpbiBwbGFjZSBvZiAiVGltZXMiLiAgIlRpbWVzIFJPIiBpcyBhIGNvbW1vbiBmb250
Ci0gICAgICAgIC8vIHdob3NlIGZhbWlseSBuYW1lIGlzICJUaW1lcyIuICBJdCBvdmVycmlkZXMg
dGhlIG5vcm1hbCAiVGltZXMiIGZhbWlseSBmb250LiAgSXQgYWxzbwotICAgICAgICAvLyBhcHBl
YXJzIHRvIGhhdmUgYSBjb3JydXB0IHJlZ3VsYXIgdmFyaWFudC4KKyAgICBpZiAoIVtzZWxmIHNl
dFVwRm9udF0pIHsKKyAgICAgICAgLy8gQWNrISBTb21ldGhpbmcgdmVyeSBiYWQgaGFwcGVuZWQs
IGxpa2UgYSBjb3JydXB0IGZvbnQuCisgICAgICAgIC8vIFRyeSBsb29raW5nIGZvciBhbiBhbHRl
cm5hdGUgJ2Jhc2UnIGZvbnQgZm9yIHRoaXMgcmVuZGVyZXIuCisKKyAgICAgICAgLy8gU3BlY2lh
bCBjYXNlIGhhY2sgdG8gdXNlICJUaW1lcyBOZXcgUm9tYW4iIGluIHBsYWNlIG9mICJUaW1lcyIu
CisgICAgICAgIC8vICJUaW1lcyBSTyIgaXMgYSBjb21tb24gZm9udCB3aG9zZSBmYW1pbHkgbmFt
ZSBpcyAiVGltZXMiLgorICAgICAgICAvLyBJdCBvdmVycmlkZXMgdGhlIG5vcm1hbCAiVGltZXMi
IGZhbWlseSBmb250LgorICAgICAgICAvLyBJdCBhbHNvIGFwcGVhcnMgdG8gaGF2ZSBhIGNvcnJ1
cHQgcmVndWxhciB2YXJpYW50LgogICAgICAgICBOU1N0cmluZyAqZmFsbGJhY2tGb250RmFtaWx5
OwotCi0gICAgICAgIGlmIChbW2ZvbnQgZmFtaWx5TmFtZV0gaXNFcXVhbDpAIlRpbWVzIl0pCisg
ICAgICAgIGlmIChbW2ZvbnQuZm9udCBmYW1pbHlOYW1lXSBpc0VxdWFsOkAiVGltZXMiXSkKICAg
ICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9IEAiVGltZXMgTmV3IFJvbWFuIjsKLSAgICAg
ICAgZWxzZSB7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9
IFtXZWJUZXh0UmVuZGVyZXIgd2ViRmFsbGJhY2tGb250RmFtaWx5XTsKLSAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgLy8gVHJ5IHNldHRpbmcgdXAgdGhlIGFsdGVybmF0ZSBmb250LiAgVGhp
cyBpcyBhIGxhc3QgZGl0Y2ggZWZmb3J0IHRvIHVzZSBhCi0JLy8gc3Vic3RpdHV0ZSBmb250IHdo
ZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25nLgotICAgICAgICBOU0ZvbnQgKmluaXRpYWxGb250
ID0gZm9udDsKLSAgICAgICAgW2luaXRpYWxGb250IGF1dG9yZWxlYXNlXTsKLSAgICAgICAgTlNG
b250ICphZiA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6
Zm9udCB0b0ZhbWlseTpmYWxsYmFja0ZvbnRGYW1pbHldOwotICAgICAgICBmb250ID0gWyhwID8g
W2FmIHByaW50ZXJGb250XSA6IFthZiBzY3JlZW5Gb250XSkgcmV0YWluXTsKKyAgICAgICAgLy8g
VHJ5IHNldHRpbmcgdXAgdGhlIGFsdGVybmF0ZSBmb250LgorICAgICAgICAvLyBUaGlzIGlzIGEg
bGFzdCBkaXRjaCBlZmZvcnQgdG8gdXNlIGEgc3Vic3RpdHV0ZSBmb250IHdoZW4gc29tZXRoaW5n
IGhhcyBnb25lIHdyb25nLgorICAgICAgICBOU0ZvbnQgKmluaXRpYWxGb250ID0gZm9udC5mb250
OworICAgICAgICBmb250LmZvbnQgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
IGNvbnZlcnRGb250OmZvbnQuZm9udCB0b0ZhbWlseTpmYWxsYmFja0ZvbnRGYW1pbHldOworI2lm
ICFFUlJPUl9ESVNBQkxFRAogICAgICAgICBOU1N0cmluZyAqZmlsZVBhdGggPSBwYXRoRnJvbUZv
bnQoaW5pdGlhbEZvbnQpOwotICAgICAgICBmaWxlUGF0aCA9IGZpbGVQYXRoID8gZmlsZVBhdGgg
OiAoTlNTdHJpbmcgKilAIm5vdCBrbm93biI7Ci0gICAgICAgIGlmICghW3NlbGYgX3NldHVwRm9u
dF0peworICAgICAgICBpZiAoIWZpbGVQYXRoKQorICAgICAgICAgICAgZmlsZVBhdGggPSBAIm5v
dCBrbm93biI7CisjZW5kaWYKKyAgICAgICAgaWYgKCFbc2VsZiBzZXRVcEZvbnRdKSB7CiAJICAg
IGlmIChbZmFsbGJhY2tGb250RmFtaWx5IGlzRXF1YWw6QCJUaW1lcyBOZXcgUm9tYW4iXSkgewog
CQkvLyBPSywgY291bGRuJ3Qgc2V0dXAgVGltZXMgTmV3IFJvbWFuIGFzIGFuIGFsdGVybmF0ZSB0
byBUaW1lcywgZmFsbGJhY2sKIAkJLy8gb24gdGhlIHN5c3RlbSBmb250LiAgSWYgdGhpcyBmYWls
cyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxlZnQuCi0JCWFmID0gW1tOU0ZvbnRNYW5hZ2VyIHNo
YXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDpmb250IHRvRmFtaWx5OltXZWJUZXh0UmVuZGVy
ZXIgd2ViRmFsbGJhY2tGb250RmFtaWx5XV07Ci0JCWZvbnQgPSBbKHAgPyBbYWYgcHJpbnRlckZv
bnRdIDogW2FmIHNjcmVlbkZvbnRdKSByZXRhaW5dOwotCQlpZiAoIVtzZWxmIF9zZXR1cEZvbnRd
KXsKLQkJICAgIC8vIFdlIHRyaWVkLCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBhbmQgdGhlIHN5
c3RlbSBmb250LiAgTm8gam95LiAgV2UgaGF2ZSB0byBnaXZlIHVwLgotCQkgICAgRVJST1IgKCIl
QCB1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAgYXQgJUAiLCBzZWxmLCBpbml0aWFs
Rm9udCwgZmlsZVBhdGgpOworCQlmb250LmZvbnQgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9u
dE1hbmFnZXJdIGNvbnZlcnRGb250OmZvbnQuZm9udCB0b0ZhbWlseTpbV2ViVGV4dFJlbmRlcmVy
IHdlYkZhbGxiYWNrRm9udEZhbWlseV1dOworCQlpZiAoIVtzZWxmIHNldFVwRm9udF0pIHsKKwkJ
ICAgIC8vIFdlIHRyaWVkLCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBhbmQgdGhlIHN5c3RlbSBm
b250LiBObyBqb3kuIFdlIGhhdmUgdG8gZ2l2ZSB1cC4KKwkJICAgIEVSUk9SKCIlQCB1bmFibGUg
dG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAgYXQgJUAiLCBzZWxmLCBpbml0aWFsRm9udCwgZmls
ZVBhdGgpOwogICAgICAgICAgICAgICAgICAgICBmYWlsZWRTZXR1cCA9IHRydWU7CiAJCX0KLQkg
ICAgfQotCSAgICBlbHNlIHsKLQkJLy8gV2UgdHJpZWQgdGhlIHJlcXVlc3RlZCBmb250IGFuZCB0
aGUgc3lzdGUsIGZvbnQuICBObyBqb3kuICBXZSBoYXZlIHRvIGdpdmUgdXAuCi0JCUVSUk9SICgi
JUAgdW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIGF0ICVAIiwgc2VsZiwgaW5pdGlh
bEZvbnQsIGZpbGVQYXRoKTsKKwkgICAgfSBlbHNlIHsKKwkJLy8gV2UgdHJpZWQgdGhlIHJlcXVl
c3RlZCBmb250IGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0byBnaXZlIHVw
LgorCQlFUlJPUigiJUAgdW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIGF0ICVAIiwg
c2VsZiwgaW5pdGlhbEZvbnQsIGZpbGVQYXRoKTsKICAgICAgICAgICAgICAgICBmYWlsZWRTZXR1
cCA9IHRydWU7CiAJICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8vIFJlcG9ydCB0aGUgcHJv
YmxlbS4KLSAgICAgICAgRVJST1IgKCJDb3JydXB0IGZvbnQgZGV0ZWN0ZWQsIHVzaW5nICVAIGlu
IHBsYWNlIG9mICVAIGxvY2F0ZWQgYXQgXCIlQFwiLiIsIAotICAgICAgICAgICAgICAgICAgICBb
Zm9udCBmYW1pbHlOYW1lXSwgCi0gICAgICAgICAgICAgICAgICAgIFtpbml0aWFsRm9udCBmYW1p
bHlOYW1lXSwKLSAgICAgICAgICAgICAgICAgICAgZmlsZVBhdGgpOworICAgICAgICBFUlJPUigi
Q29ycnVwdCBmb250IGRldGVjdGVkLCB1c2luZyAlQCBpbiBwbGFjZSBvZiAlQCBsb2NhdGVkIGF0
IFwiJUBcIi4iLAorICAgICAgICAgICAgW2ZvbnQuZm9udCBmYW1pbHlOYW1lXSwgW2luaXRpYWxG
b250IGZhbWlseU5hbWVdLCBmaWxlUGF0aCk7CiAgICAgfQogCi0gICAgLy8gSWYgYWxsIGVsc2Ug
ZmFpbHMgdHJ5IHRvIHNldHVwIHVzaW5nIHRoZSBzeXN0ZW0gZm9udC4gIFRoaXMgaXMgcHJvYmFi
bHkgYmVjYXVzZQotICAgIC8vIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9tYW4gYXJlIGJvdGggdW5h
dmFpbGFibGUuCisgICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHRyeSB0byBzZXQgdXAgdXNpbmcg
dGhlIHN5c3RlbSBmb250LgorICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSBUaW1lcyBh
bmQgVGltZXMgTmV3IFJvbWFuIGFyZSBib3RoIHVuYXZhaWxhYmxlLgogICAgIGlmIChmYWlsZWRT
ZXR1cCkgewotICAgICAgICBmID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltmIHBvaW50U2l6
ZV1dOwotICAgICAgICBFUlJPUiAoIiVAIGZhaWxlZCB0byBzZXR1cCBmb250LCB1c2luZyBzeXN0
ZW0gZm9udCAlcyIsIHNlbGYsIGYpOwotICAgICAgICBmb250ID0gWyhwID8gW2YgcHJpbnRlckZv
bnRdIDogW2Ygc2NyZWVuRm9udF0pIHJldGFpbl07Ci0gICAgICAgIFtzZWxmIF9zZXR1cEZvbnRd
OworICAgICAgICBmb250LmZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W2ZvbnQuZm9u
dCBwb2ludFNpemVdXTsKKyAgICAgICAgRVJST1IoIiVAIGZhaWxlZCB0byBzZXQgdXAgZm9udCwg
dXNpbmcgc3lzdGVtIGZvbnQgJXMiLCBzZWxmLCBmb250LmZvbnQpOworICAgICAgICBbc2VsZiBz
ZXRVcEZvbnRdOwogICAgIH0KICAgICAKICAgICBpbnQgaUFzY2VudDsKICAgICBpbnQgaURlc2Nl
bnQ7CiAgICAgaW50IGlMaW5lR2FwOwotCXVuc2lnbmVkIHVuaXRzUGVyRW07Ci0JV0tHZXRGb250
TWV0cmljcyhmb250LCAmaUFzY2VudCwgJmlEZXNjZW50LCAmaUxpbmVHYXAsICZ1bml0c1BlckVt
KTsgCi0gICAgZmxvYXQgcG9pbnRTaXplID0gW2ZvbnQgcG9pbnRTaXplXTsKLSAgICBmbG9hdCBh
c2MgPSAoU2NhbGVFbVRvVW5pdHMoaUFzY2VudCwgdW5pdHNQZXJFbSkqcG9pbnRTaXplKTsKLSAg
ICBmbG9hdCBkc2MgPSAoLVNjYWxlRW1Ub1VuaXRzKGlEZXNjZW50LCB1bml0c1BlckVtKSpwb2lu
dFNpemUpOwotICAgIGZsb2F0IF9saW5lR2FwID0gU2NhbGVFbVRvVW5pdHMoaUxpbmVHYXAsIHVu
aXRzUGVyRW0pKnBvaW50U2l6ZTsKLSAgICBmbG9hdCBhZGp1c3RtZW50OworICAgIHVuc2lnbmVk
IHVuaXRzUGVyRW07CisgICAgV0tHZXRGb250TWV0cmljcyhmb250LmZvbnQsICZpQXNjZW50LCAm
aURlc2NlbnQsICZpTGluZUdhcCwgJnVuaXRzUGVyRW0pOyAKKyAgICBmbG9hdCBwb2ludFNpemUg
PSBbZm9udC5mb250IHBvaW50U2l6ZV07CisgICAgZmxvYXQgYXNjID0gU2NhbGVFbVRvVW5pdHMo
aUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxvYXQgZHNjID0gLVNjYWxl
RW1Ub1VuaXRzKGlEZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICBmbG9hdCBf
bGluZUdhcCA9IFNjYWxlRW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZTsKIAogICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3Vy
aWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhlCiAgICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVp
ciBNaWNyb3NvZnQgY291bnRlcnBhcnRzIHRoYXQgYXJlIHRoZSBkZSBmYWN0bwogICAgIC8vIHdl
YiBzdGFuZGFyZC4gIFRoZSBBcHBLaXQgYWRqdXN0bWVudCBvZiAyMCUgaXMgdG9vIGJpZyBhbmQg
aXMKICAgICAvLyBpbmNvcnJlY3RseSBhZGRlZCB0byBsaW5lIHNwYWNpbmcsIHNvIHdlIHVzZSBh
IDE1JSBhZGp1c3RtZW50IGluc3RlYWQKICAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBhc2NlbnQu
Ci0gICAgaWYgKFtbZm9udCBmYW1pbHlOYW1lXSBpc0VxdWFsVG9TdHJpbmc6QCJUaW1lcyJdIHx8
Ci0gICAgICAgIFtbZm9udCBmYW1pbHlOYW1lXSBpc0VxdWFsVG9TdHJpbmc6QCJIZWx2ZXRpY2Ei
XSB8fAotICAgICAgICBbW2ZvbnQgZmFtaWx5TmFtZV0gaXNFcXVhbFRvU3RyaW5nOkAiQ291cmll
ciJdKSB7Ci0gICAgICAgIGFkanVzdG1lbnQgPSBmbG9vcigoKGFzYyArIGRzYykgKiAwLjE1KSAr
IDAuNSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYWRqdXN0bWVudCA9IDAuMDsKLSAgICB9Cisg
ICAgTlNTdHJpbmcgKmZhbWlseU5hbWUgPSBbZm9udC5mb250IGZhbWlseU5hbWVdOworICAgIGlm
IChbZmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJUaW1lcyJdIHx8IFtmYW1pbHlOYW1lIGlz
RXF1YWxUb1N0cmluZzpAIkhlbHZldGljYSJdIHx8IFtmYW1pbHlOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpAIkNvdXJpZXIiXSkKKyAgICAgICAgYXNjICs9IGZsb29yZigoKGFzYyArIGRzYykgKiAwLjE1
ZikgKyAwLjVmKTsKIAotICAgIGFzY2VudCA9IFJPVU5EX1RPX0lOVChhc2MgKyBhZGp1c3RtZW50
KTsKKyAgICBhc2NlbnQgPSBST1VORF9UT19JTlQoYXNjKTsKICAgICBkZXNjZW50ID0gUk9VTkRf
VE9fSU5UKGRzYyk7CiAKLSAgICBfbGluZUdhcCA9IChfbGluZUdhcCA+IDAuMCA/IGZsb29yKF9s
aW5lR2FwICsgMC41KSA6IDAuMCk7CisgICAgX2xpbmVHYXAgPSBfbGluZUdhcCA+IDAuMCA/IGZs
b29yZihfbGluZUdhcCArIDAuNWYpIDogMC4wZjsKICAgICBsaW5lR2FwID0gKGludClfbGluZUdh
cDsKLSAgICBsaW5lU3BhY2luZyA9ICBhc2NlbnQgKyBkZXNjZW50ICsgbGluZUdhcDsKKyAgICBs
aW5lU3BhY2luZyA9IGFzY2VudCArIGRlc2NlbnQgKyBsaW5lR2FwOwogCi0jaWZkZWYgQ09NUEFS
RV9BUFBLSVRfQ0dfTUVUUklDUwotICAgIHByaW50ZiAoIlxuQ0cvQXBwa2l0IG1ldHJpY3MgZm9y
IGZvbnQgJXMsICVmLCBsaW5lR2FwICVmLCBhZGp1c3RtZW50ICVmXG4iLCBbW2ZvbnQgZGlzcGxh
eU5hbWVdIGNTdHJpbmddLCBbZm9udCBwb2ludFNpemVdLCBsaW5lR2FwLCBhZGp1c3RtZW50KTsK
LSAgICBpZiAoUk9VTkRfVE9fSU5UKFtmb250IGFzY2VuZGVyXSkgIT0gYXNjZW50IHx8Ci0gICAg
ICAgIFJPVU5EX1RPX0lOVCgtW2ZvbnQgZGVzY2VuZGVyXSkgIT0gZGVzY2VudCB8fAotICAgICAg
ICBST1VORF9UT19JTlQoW2ZvbnQgZGVmYXVsdExpbmVIZWlnaHRGb3JGb250XSkgIT0gbGluZVNw
YWNpbmcpewotICAgICAgICBwcmludGYgKCJcbkNHL0FwcGtpdCBtaXNtYXRjaGVkIG1ldHJpY3Mg
Zm9yIGZvbnQgJXMsICVmICglcylcbiIsIFtbZm9udCBkaXNwbGF5TmFtZV0gY1N0cmluZ10sIFtm
b250IHBvaW50U2l6ZV0sCi0gICAgICAgICAgICAgICAgKFtmb250IHNjcmVlbkZvbnRdID8gW1tb
Zm9udCBzY3JlZW5Gb250XSBkaXNwbGF5TmFtZV0gY1N0cmluZ10gOiAibm9uZSIpKTsKLSAgICAg
ICAgcHJpbnRmICgiYXNjZW50KCVzKSwgZGVzY2VudCglcyksIGxpbmVTcGFjaW5nKCVzKVxuIiwK
LSAgICAgICAgICAgICAgICAoUk9VTkRfVE9fSU5UKFtmb250IGFzY2VuZGVyXSkgIT0gYXNjZW50
KSA/ICJkaWZmZXJlbnQiIDogInNhbWUiLAotICAgICAgICAgICAgICAgIChST1VORF9UT19JTlQo
LVtmb250IGRlc2NlbmRlcl0pICE9IGRlc2NlbnQpID8gImRpZmZlcmVudCIgOiAic2FtZSIsCi0g
ICAgICAgICAgICAgICAgKFJPVU5EX1RPX0lOVChbZm9udCBkZWZhdWx0TGluZUhlaWdodEZvckZv
bnRdKSAhPSBsaW5lU3BhY2luZykgPyAiZGlmZmVyZW50IiA6ICJzYW1lIik7Ci0gICAgICAgIHBy
aW50ZiAoIkNHOiAgYXNjZW50ICVmLCAiLCBhc2MpOwotICAgICAgICBwcmludGYgKCJkZXNjZW50
ICVmLCAiLCBkc2MpOwotICAgICAgICBwcmludGYgKCJsaW5lR2FwICVmLCAiLCBsaW5lR2FwKTsK
LSAgICAgICAgcHJpbnRmICgibGluZVNwYWNpbmcgJWRcbiIsIGxpbmVTcGFjaW5nKTsKLSAgICAg
ICAgCi0gICAgICAgIHByaW50ZiAoIk5TRm9udDogIGFzY2VudCAlZiwgIiwgW2ZvbnQgYXNjZW5k
ZXJdKTsKLSAgICAgICAgcHJpbnRmICgiZGVzY2VudCAlZiwgIiwgW2ZvbnQgZGVzY2VuZGVyXSk7
Ci0gICAgICAgIHByaW50ZiAoImxpbmVTcGFjaW5nICVmXG4iLCBbZm9udCBkZWZhdWx0TGluZUhl
aWdodEZvckZvbnRdKTsKLSAgICB9Ci0jZW5kaWYKLSAgICAgCi0gICAgaXNTbWFsbENhcHNSZW5k
ZXJlciA9IE5POworICAgIFtmb250LmZvbnQgcmV0YWluXTsKICAgICAKICAgICByZXR1cm4gc2Vs
ZjsKIH0KIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgW2ZvbnQgcmVsZWFzZV07Ci0gICAgW3Nt
YWxsQ2Fwc0ZvbnQgcmVsZWFzZV07CisgICAgW2ZvbnQuZm9udCByZWxlYXNlXTsKICAgICBbc21h
bGxDYXBzUmVuZGVyZXIgcmVsZWFzZV07CiAKICAgICBpZiAoc3R5bGVHcm91cCkKLQkJV0tSZWxl
YXNlU3R5bGVHcm91cChzdHlsZUdyb3VwKTsKKyAgICAgICAgV0tSZWxlYXNlU3R5bGVHcm91cChz
dHlsZUdyb3VwKTsKIAogICAgIGZyZWVXaWR0aE1hcChnbHlwaFRvV2lkdGhNYXApOwogICAgIGZy
ZWVHbHlwaE1hcChjaGFyYWN0ZXJUb0dseXBoTWFwKTsKLSAgICBmcmVlVW5pY29kZUdseXBoTWFw
KHVuaWNvZGVDaGFyYWN0ZXJUb0dseXBoTWFwKTsKIAogICAgIGlmIChBVFNVU3R5bGVJbml0aWFs
aXplZCkKLSAgICAgICAgQVRTVURpc3Bvc2VTdHlsZShfQVRTVVNzdHlsZSk7CisgICAgICAgIEFU
U1VEaXNwb3NlU3R5bGUoX0FUU1VTdHlsZSk7CiAgICAgCiAgICAgW3N1cGVyIGRlYWxsb2NdOwog
fQpAQCAtNTMzLDEwICs0NDUsOSBAQCBzdGF0aWMgQk9PTCBhbHdheXNVc2VBVFNVID0gTk87CiAK
ICAgICBmcmVlV2lkdGhNYXAoZ2x5cGhUb1dpZHRoTWFwKTsKICAgICBmcmVlR2x5cGhNYXAoY2hh
cmFjdGVyVG9HbHlwaE1hcCk7Ci0gICAgZnJlZVVuaWNvZGVHbHlwaE1hcCh1bmljb2RlQ2hhcmFj
dGVyVG9HbHlwaE1hcCk7CiAKICAgICBpZiAoQVRTVVN0eWxlSW5pdGlhbGl6ZWQpCi0gICAgICAg
IEFUU1VEaXNwb3NlU3R5bGUoX0FUU1VTc3R5bGUpOworICAgICAgICBBVFNVRGlzcG9zZVN0eWxl
KF9BVFNVU3R5bGUpOwogICAgIAogICAgIFtzdXBlciBmaW5hbGl6ZV07CiB9CkBAIC01NjEsMTIg
KzQ3MiwxMSBAQCBzdGF0aWMgQk9PTCBhbHdheXNVc2VBVFNVID0gTk87CiAKIC0gKGZsb2F0KXhI
ZWlnaHQKIHsKLSAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4IiwgYmVjYXVz
ZSBBcHBLaXQgc3ludGhlc2l6ZXMgWCBoZWlnaHQgcmF0aGVyCi0gICAgLy8gdGhhbiBnZXR0aW5n
IGl0IGZyb20gdGhlIGZvbnQuIFVuZm9ydHVuYXRlbHksIE5TRm9udCB3aWxsIHJvdW5kIHRoaXMg
Zm9yIHVzCi0gICAgLy8gc28gd2UgZG9uJ3QgcXVpdGUgZ2V0IHRoZSByaWdodCB2YWx1ZS4KLSAg
ICBOU0dseXBoIHhHbHlwaCA9IFtmb250IGdseXBoV2l0aE5hbWU6QCJ4Il07CisgICAgLy8gTWVh
c3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAieCIsIGJlY2F1c2UgQXBwS2l0IHN5bnRoZXNpemVz
IFggaGVpZ2h0IHJhdGhlciB0aGFuIGdldHRpbmcgaXQgZnJvbSB0aGUgZm9udC4KKyAgICAvLyBV
bmZvcnR1bmF0ZWx5LCBOU0ZvbnQgd2lsbCByb3VuZCB0aGlzIGZvciB1cyBzbyB3ZSBkb24ndCBx
dWl0ZSBnZXQgdGhlIHJpZ2h0IHZhbHVlLgorICAgIE5TR2x5cGggeEdseXBoID0gW2ZvbnQuZm9u
dCBnbHlwaFdpdGhOYW1lOkAieCJdOwogICAgIGlmICh4R2x5cGgpIHsKLSAgICAgICAgTlNSZWN0
IHhCb3ggPSBbZm9udCBib3VuZGluZ1JlY3RGb3JHbHlwaDp4R2x5cGhdOworICAgICAgICBOU1Jl
Y3QgeEJveCA9IFtmb250LmZvbnQgYm91bmRpbmdSZWN0Rm9yR2x5cGg6eEdseXBoXTsKICAgICAg
ICAgLy8gVXNlIHRoZSBtYXhpbXVtIG9mIGVpdGhlciB3aWR0aCBvciBoZWlnaHQgYmVjYXVzZSAi
eCIgaXMgbmVhcmx5IHNxdWFyZQogICAgICAgICAvLyBhbmQgd2ViIHBhZ2VzIHRoYXQgZm9vbGlz
aGx5IHVzZSB0aGlzIG1ldHJpYyBmb3Igd2lkdGggd2lsbCBiZSBsYWlkIG91dAogICAgICAgICAv
LyBwb29ybHkgaWYgd2UgcmV0dXJuIGFuIGFjY3VyYXRlIGhlaWdodC4gQ2xhc3NpYyBjYXNlIGlz
IFRpbWVzIDEzIHBvaW50LApAQCAtNTc0LDI4ICs0ODQsMjEgQEAgc3RhdGljIEJPT0wgYWx3YXlz
VXNlQVRTVSA9IE5POwogICAgICAgICByZXR1cm4gTUFYKE5TTWF4WCh4Qm94KSwgTlNNYXhZKHhC
b3gpKTsKICAgICB9CiAKLSAgICByZXR1cm4gW2ZvbnQgeEhlaWdodF07CisgICAgcmV0dXJuIFtm
b250LmZvbnQgeEhlaWdodF07CiB9CiAKIC0gKHZvaWQpZHJhd1J1bjooY29uc3QgV2ViQ29yZVRl
eHRSdW4gKilydW4gc3R5bGU6KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilzdHlsZSBnZW9tZXRy
eTooY29uc3QgV2ViQ29yZVRleHRHZW9tZXRyeSAqKWdlb21ldHJ5CiB7Ci0gICAgaWYgKHN0eWxl
LT5zbWFsbENhcHMgJiYgIWlzU21hbGxDYXBzUmVuZGVyZXIpIHsKLSAgICAgICAgW1tzZWxmIF9z
bWFsbENhcHNSZW5kZXJlcl0gZHJhd1J1bjpydW4gc3R5bGU6c3R5bGUgZ2VvbWV0cnk6Z2VvbWV0
cnldOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHNob3VsZFVzZUFUU1UocnVuKSkK
LSAgICAgICAgICAgIFtzZWxmIF9BVFNVX2RyYXdSdW46cnVuIHN0eWxlOnN0eWxlIGdlb21ldHJ5
Omdlb21ldHJ5XTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW3NlbGYgX0NHX2RyYXdSdW46
cnVuIHN0eWxlOnN0eWxlIGdlb21ldHJ5Omdlb21ldHJ5XTsKLSAgICB9CisgICAgaWYgKHNob3Vs
ZFVzZUFUU1UocnVuKSkKKyAgICAgICAgW3NlbGYgX0FUU1VfZHJhd1J1bjpydW4gc3R5bGU6c3R5
bGUgZ2VvbWV0cnk6Z2VvbWV0cnldOworICAgIGVsc2UKKyAgICAgICAgW3NlbGYgX0NHX2RyYXdS
dW46cnVuIHN0eWxlOnN0eWxlIGdlb21ldHJ5Omdlb21ldHJ5XTsKIH0KIAogLSAoZmxvYXQpZmxv
YXRXaWR0aEZvclJ1bjooY29uc3QgV2ViQ29yZVRleHRSdW4gKilydW4gc3R5bGU6KGNvbnN0IFdl
YkNvcmVUZXh0U3R5bGUgKilzdHlsZSB3aWR0aHM6KGZsb2F0ICopd2lkdGhCdWZmZXIKIHsKLSAg
ICBpZiAoc3R5bGUtPnNtYWxsQ2FwcyAmJiAhaXNTbWFsbENhcHNSZW5kZXJlcikgewotICAgICAg
ICByZXR1cm4gW1tzZWxmIF9zbWFsbENhcHNSZW5kZXJlcl0gX2Zsb2F0V2lkdGhGb3JSdW46cnVu
IHN0eWxlOnN0eWxlIHdpZHRoczp3aWR0aEJ1ZmZlciBmb250czpuaWwgZ2x5cGhzOm5pbCBzdGFy
dFBvc2l0aW9uOm5pbCBudW1HbHlwaHM6bmlsXTsKLSAgICB9Ci0gICAgcmV0dXJuIFtzZWxmIF9m
bG9hdFdpZHRoRm9yUnVuOnJ1biBzdHlsZTpzdHlsZSB3aWR0aHM6d2lkdGhCdWZmZXIgZm9udHM6
bmlsIGdseXBoczpuaWwgc3RhcnRQb3NpdGlvbjpuaWwgbnVtR2x5cGhzOm5pbF07CisgICAgcmV0
dXJuIFtzZWxmIGZsb2F0V2lkdGhGb3JSdW46cnVuIHN0eWxlOnN0eWxlIHdpZHRoczp3aWR0aEJ1
ZmZlcgorICAgICAgICBzdWJzdGl0dXRlUmVuZGVyZXJzOk5VTEwgZ2x5cGhzOk5VTEwgc3RhcnRQ
b3NpdGlvbjpOVUxMIG51bUdseXBoczpOVUxMXTsKIH0KIAogLSAodm9pZClkcmF3TGluZUZvckNo
YXJhY3RlcnM6KE5TUG9pbnQpcG9pbnQgeU9mZnNldDooZmxvYXQpeU9mZnNldCB3aWR0aDogKGlu
dCl3aWR0aCBjb2xvcjooTlNDb2xvciAqKWNvbG9yIHRoaWNrbmVzczooZmxvYXQpdGhpY2tuZXNz
CkBAIC02NTMsMTUgKzU1NiwxMCBAQCBzdGF0aWMgQk9PTCBhbHdheXNVc2VBVFNVID0gTk87CiAK
IC0gKHZvaWQpZHJhd0hpZ2hsaWdodEZvclJ1bjooY29uc3QgV2ViQ29yZVRleHRSdW4gKilydW4g
c3R5bGU6KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilzdHlsZSBnZW9tZXRyeTooY29uc3QgV2Vi
Q29yZVRleHRHZW9tZXRyeSAqKWdlb21ldHJ5CiB7Ci0gICAgaWYgKHN0eWxlLT5zbWFsbENhcHMg
JiYgIWlzU21hbGxDYXBzUmVuZGVyZXIpIHsKLSAgICAgICAgW1tzZWxmIF9zbWFsbENhcHNSZW5k
ZXJlcl0gZHJhd0hpZ2hsaWdodEZvclJ1bjpydW4gc3R5bGU6c3R5bGUgZ2VvbWV0cnk6Z2VvbWV0
cnldOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHNob3VsZFVzZUFUU1UocnVuKSkK
LSAgICAgICAgICAgIFtzZWxmIF9BVFNVX2RyYXdIaWdobGlnaHRGb3JSdW46cnVuIHN0eWxlOnN0
eWxlIGdlb21ldHJ5Omdlb21ldHJ5XTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW3NlbGYg
X0NHX2RyYXdIaWdobGlnaHRGb3JSdW46cnVuIHN0eWxlOnN0eWxlIGdlb21ldHJ5Omdlb21ldHJ5
XTsKLSAgICB9CisgICAgaWYgKHNob3VsZFVzZUFUU1UocnVuKSkKKyAgICAgICAgW3NlbGYgX0FU
U1VfZHJhd0hpZ2hsaWdodEZvclJ1bjpydW4gc3R5bGU6c3R5bGUgZ2VvbWV0cnk6Z2VvbWV0cnld
OworICAgIGVsc2UKKyAgICAgICAgW3NlbGYgX0NHX2RyYXdIaWdobGlnaHRGb3JSdW46cnVuIHN0
eWxlOnN0eWxlIGdlb21ldHJ5Omdlb21ldHJ5XTsKIH0KIAogLSAoaW50KW1pc3NwZWxsaW5nTGlu
ZVRoaWNrbmVzcwpAQCAtNzI5LDEwICs2MjcsNiBAQCBzdGF0aWMgQk9PTCBhbHdheXNVc2VBVFNV
ID0gTk87CiAKIC0gKGludClwb2ludFRvT2Zmc2V0Oihjb25zdCBXZWJDb3JlVGV4dFJ1biAqKXJ1
biBzdHlsZTooY29uc3QgV2ViQ29yZVRleHRTdHlsZSAqKXN0eWxlIHBvc2l0aW9uOihpbnQpeCBy
ZXZlcnNlZDooQk9PTClyZXZlcnNlZCBpbmNsdWRlUGFydGlhbEdseXBoczooQk9PTClpbmNsdWRl
UGFydGlhbEdseXBocwogewotICAgIGlmIChzdHlsZS0+c21hbGxDYXBzICYmICFpc1NtYWxsQ2Fw
c1JlbmRlcmVyKSB7Ci0gICAgICAgIHJldHVybiBbW3NlbGYgX3NtYWxsQ2Fwc1JlbmRlcmVyXSBw
b2ludFRvT2Zmc2V0OnJ1biBzdHlsZTpzdHlsZSBwb3NpdGlvbjp4IHJldmVyc2VkOnJldmVyc2Vk
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzOmluY2x1ZGVQYXJ0aWFsR2x5cGhzXTsKLSAgICB9Ci0KICAg
ICBpZiAoc2hvdWxkVXNlQVRTVShydW4pKQogICAgICAgICByZXR1cm4gW3NlbGYgX0FUU1VfcG9p
bnRUb09mZnNldDpydW4gc3R5bGU6c3R5bGUgcG9zaXRpb246eCByZXZlcnNlZDpyZXZlcnNlZCBp
bmNsdWRlUGFydGlhbEdseXBoczppbmNsdWRlUGFydGlhbEdseXBoc107CiAgICAgcmV0dXJuIFtz
ZWxmIF9DR19wb2ludFRvT2Zmc2V0OnJ1biBzdHlsZTpzdHlsZSBwb3NpdGlvbjp4IHJldmVyc2Vk
OnJldmVyc2VkIGluY2x1ZGVQYXJ0aWFsR2x5cGhzOmluY2x1ZGVQYXJ0aWFsR2x5cGhzXTsKQEAg
LTc0NiwxMzkgKzY0MCwxMTEgQEAgc3RhdGljIEJPT0wgYWx3YXlzVXNlQVRTVSA9IE5POwogCiBA
aW1wbGVtZW50YXRpb24gV2ViVGV4dFJlbmRlcmVyIChXZWJJbnRlcm5hbCkKIAotKyAodm9pZClf
c2V0QWx3YXlzVXNlQVRTVTooQk9PTClmCisrICh2b2lkKXNldEFsd2F5c1VzZUFUU1U6KEJPT0wp
ZgogewogICAgIGFsd2F5c1VzZUFUU1UgPSBmOwogfQogCi0tICh2b2lkKV9zZXRJc1NtYWxsQ2Fw
c1JlbmRlcmVyOihCT09MKWZsYWcKLXsKLSAgICBpc1NtYWxsQ2Fwc1JlbmRlcmVyID0gZmxhZzsK
LX0KLQotLSAoQk9PTClfaXNTbWFsbENhcHNSZW5kZXJlcgotewotICAgIHJldHVybiBpc1NtYWxs
Q2Fwc1JlbmRlcmVyOwotfQotCi0tIChXZWJUZXh0UmVuZGVyZXIgKilfc21hbGxDYXBzUmVuZGVy
ZXIKKy0gKFdlYlRleHRSZW5kZXJlciAqKXNtYWxsQ2Fwc1JlbmRlcmVyCiB7CiAgICAgaWYgKCFz
bWFsbENhcHNSZW5kZXJlcikgewogCU5TX0RVUklORwotCSAgICBzbWFsbENhcHNSZW5kZXJlciA9
IFtbV2ViVGV4dFJlbmRlcmVyIGFsbG9jXSBpbml0V2l0aEZvbnQ6Zm9udCB1c2luZ1ByaW50ZXJG
b250OnVzaW5nUHJpbnRlckZvbnRdOworICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IFtmb250LmZv
bnQgcG9pbnRTaXplXSAqIFNNQUxMQ0FQU19GT05UU0laRV9NVUxUSVBMSUVSOworICAgICAgICAg
ICAgV2ViQ29yZUZvbnQgc21hbGxDYXBzRm9udDsKKyAgICAgICAgICAgIFdlYkNvcmVJbml0aWFs
aXplRm9udCgmc21hbGxDYXBzRm9udCk7CisgICAgICAgICAgICBzbWFsbENhcHNGb250LmZvbnQg
PSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250OmZvbnQuZm9u
dCB0b1NpemU6c2l6ZV07CisJICAgIHNtYWxsQ2Fwc1JlbmRlcmVyID0gW1tzZWxmIHJlbmRlcmVy
Rm9yQWx0ZXJuYXRlRm9udDpzbWFsbENhcHNGb250XSByZXRhaW5dOwogCU5TX0hBTkRMRVIKLQkg
ICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkgewotCQlOU0xvZyhAIlVuY2F1Z2h0IGV4Y2VwdGlvbiAt
ICVAXG4iLCBsb2NhbEV4Y2VwdGlvbik7Ci0JICAgIH0gZWxzZSB7Ci0JCUFTU0VSVF9XSVRIX01F
U1NBR0UoMCwgIlVuY2F1Z2h0IGV4Y2VwdGlvbiAtICVAIiwgbG9jYWxFeGNlcHRpb24pOwotCSAg
ICB9IAorICAgICAgICAgICAgTlNMb2coQCJ1bmNhdWdodCBleGNlcHRpb24gc2VsZWN0aW5nIGZv
bnQgZm9yIHNtYWxsIGNhcHM6ICVAIiwgbG9jYWxFeGNlcHRpb24pOwogCU5TX0VOREhBTkRMRVIK
LQotICAgICAgICBbc21hbGxDYXBzUmVuZGVyZXIgX3NldElzU21hbGxDYXBzUmVuZGVyZXI6WUVT
XTsKICAgICB9CiAgICAgcmV0dXJuIHNtYWxsQ2Fwc1JlbmRlcmVyOwogfQogCi0tIChOU0ZvbnQg
Kilfc21hbGxDYXBzRm9udAotewotICAgIGlmICghc21hbGxDYXBzRm9udCkKLSAgICAgICAgc21h
bGxDYXBzRm9udCA9IFtbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRG
b250OmZvbnQgdG9TaXplOihbZm9udCBwb2ludFNpemVdICogU01BTExDQVBTX0ZPTlRTSVpFX01V
TFRJUExJRVIpXSBzY3JlZW5Gb250XTsKLSAgICByZXR1cm4gdXNpbmdQcmludGVyRm9udCA/IFtz
bWFsbENhcHNGb250IHByaW50ZXJGb250XSA6IHNtYWxsQ2Fwc0ZvbnQ7Ci19Ci0KIHN0YXRpYyBp
bmxpbmUgQk9PTCBmb250Q29udGFpbnNTdHJpbmcoTlNGb250ICpmb250LCBOU1N0cmluZyAqc3Ry
aW5nKQogewogICAgIE5TQ2hhcmFjdGVyU2V0ICpzZXQgPSBbW2ZvbnQgY292ZXJlZENoYXJhY3Rl
clNldF0gaW52ZXJ0ZWRTZXRdOwogICAgIHJldHVybiBzZXQgJiYgW3N0cmluZyByYW5nZU9mQ2hh
cmFjdGVyRnJvbVNldDpzZXRdLmxvY2F0aW9uID09IE5TTm90Rm91bmQ7CiB9CiAKLS0gKE5TRm9u
dCAqKV9zdWJzdGl0dXRlRm9udEZvclN0cmluZzogKE5TU3RyaW5nICopc3RyaW5nIGZhbWlsaWVz
OiAoTlNTdHJpbmcgKiopZmFtaWxpZXMKKy0gKE5TRm9udCAqKV9zdWJzdGl0dXRlRm9udEZvclN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcgZmFtaWxpZXM6KE5TU3RyaW5nICoqKWZhbWlsaWVzCiB7
CiAgICAgTlNGb250ICpzdWJzdGl0dXRlRm9udCA9IG5pbDsKIAotICAgIC8vIEZpcnN0IHNlYXJj
aCB0aGUgQ1NTIGZhbWlseSBmYWxsYmFjayBsaXN0LiAgU3RhcnQgYXQgMSAoMm5kIGZvbnQpCi0g
ICAgLy8gYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGZhaWxlZCBvbiB0aGUgZmlyc3QgbG9va3VwLgor
ICAgIC8vIEZpcnN0IHNlYXJjaCB0aGUgQ1NTIGZhbWlseSBmYWxsYmFjayBsaXN0LgorICAgIC8v
IFN0YXJ0IGF0IDEgKDJuZCBmb250KSBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgZmFpbGVkIG9uIHRo
ZSBmaXJzdCBsb29rdXAuCiAgICAgTlNTdHJpbmcgKmZhbWlseSA9IG5pbDsKICAgICBpbnQgaSA9
IDE7Ci0gICAgd2hpbGUgKGZhbWlsaWVzICYmIGZhbWlsaWVzW2ldICE9IDApIHsKKyAgICB3aGls
ZSAoZmFtaWxpZXMgJiYgZmFtaWxpZXNbaV0pIHsKICAgICAgICAgZmFtaWx5ID0gZmFtaWxpZXNb
aSsrXTsKLSAgICAgICAgc3Vic3RpdHV0ZUZvbnQgPSBbW1dlYlRleHRSZW5kZXJlckZhY3Rvcnkg
c2hhcmVkRmFjdG9yeV0gY2FjaGVkRm9udEZyb21GYW1pbHk6IGZhbWlseSB0cmFpdHM6W1tOU0Zv
bnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSB0cmFpdHNPZkZvbnQ6Zm9udF0gc2l6ZTpbZm9u
dCBwb2ludFNpemVdXTsKLSAgICAgICAgaWYgKHN1YnN0aXR1dGVGb250KSB7Ci0gICAgICAgICAg
ICBpZiAoZm9udENvbnRhaW5zU3RyaW5nKHN1YnN0aXR1dGVGb250LCBzdHJpbmcpKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc3Vic3RpdHV0ZUZvbnQgPSBuaWw7IAorICAg
ICAgICBOU0ZvbnQgKmYgPSBbW1dlYlRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0g
Y2FjaGVkRm9udEZyb21GYW1pbHk6ZmFtaWx5CisgICAgICAgICAgICB0cmFpdHM6W1tOU0ZvbnRN
YW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSB0cmFpdHNPZkZvbnQ6Zm9udC5mb250XSBzaXplOltm
b250LmZvbnQgcG9pbnRTaXplXV07CisgICAgICAgIGlmIChmICYmIGZvbnRDb250YWluc1N0cmlu
ZyhmLCBzdHJpbmcpKSB7CisgICAgICAgICAgICBzdWJzdGl0dXRlRm9udCA9IGY7IAorICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8gTm93IGRvIHN0cmlu
ZyBiYXNlZCBsb29rdXAuCiAgICAgaWYgKHN1YnN0aXR1dGVGb250ID09IG5pbCkKLSAgICAgICAg
c3Vic3RpdHV0ZUZvbnQgPSBXS0dldEZvbnRJbkxhbmd1YWdlRm9yUmFuZ2UoZm9udCwgc3RyaW5n
LCBOU01ha2VSYW5nZSAoMCxbc3RyaW5nIGxlbmd0aF0pKTsKLQkJCisgICAgICAgIHN1YnN0aXR1
dGVGb250ID0gV0tHZXRGb250SW5MYW5ndWFnZUZvclJhbmdlKGZvbnQuZm9udCwgc3RyaW5nLCBO
U01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pKTsKIAogICAgIC8vIE5vdyBkbyBjaGFyYWN0
ZXIgYmFzZWQgbG9va3VwLgogICAgIGlmIChzdWJzdGl0dXRlRm9udCA9PSBuaWwgJiYgW3N0cmlu
ZyBsZW5ndGhdID09IDEpCi0gICAgICAgIHN1YnN0aXR1dGVGb250ID0gV0tHZXRGb250SW5MYW5n
dWFnZUZvckNoYXJhY3Rlcihmb250LCBbc3RyaW5nIGNoYXJhY3RlckF0SW5kZXg6IDBdKTsKLQot
ICAgIC8vIEdldCB0aGUgc2NyZWVuIG9yIHByaW50ZXIgdmFyaWF0aW9uIG9mIHRoZSBmb250Lgot
ICAgIHN1YnN0aXR1dGVGb250ID0gdXNpbmdQcmludGVyRm9udCA/IFtzdWJzdGl0dXRlRm9udCBw
cmludGVyRm9udF0gOiBbc3Vic3RpdHV0ZUZvbnQgc2NyZWVuRm9udF07CisgICAgICAgIHN1YnN0
aXR1dGVGb250ID0gV0tHZXRGb250SW5MYW5ndWFnZUZvckNoYXJhY3Rlcihmb250LmZvbnQsIFtz
dHJpbmcgY2hhcmFjdGVyQXRJbmRleDowXSk7CiAKLSAgICBpZiAoW3N1YnN0aXR1dGVGb250IGlz
RXF1YWw6IGZvbnRdKQorICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGEgZGlzdGlu
Y3QgZm9udC4KKyAgICBpZiAoc3Vic3RpdHV0ZUZvbnQgJiYgW1tzdWJzdGl0dXRlRm9udCBzY3Jl
ZW5Gb250XSBpc0VxdWFsOltmb250LmZvbnQgc2NyZWVuRm9udF1dKQogICAgICAgICBzdWJzdGl0
dXRlRm9udCA9IG5pbDsKIAotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBzdWJzdGl0dXRlIGZv
bnQsIGF0dGVtcHQgdG8gbWF0Y2ggaXQgdG8gdGhlIGJlc3QgdmFyaWF0aW9uLiAgSWYgd2UgaGF2
ZQotICAgIC8vIGEgZ29vZCBtYXRjaCByZXR1cm4gdGhhdCwgb3RoZXJ3aXNlIHJldHVybiB0aGUg
Zm9udCB0aGUgQXBwS2l0IGhhcyBmb3VuZC4KLSAgICBOU0ZvbnRNYW5hZ2VyICptYW5hZ2VyID0g
W05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotICAgIE5TRm9udCAqc3Vic3RpdHV0
ZUZvbnQyID0gW21hbmFnZXIgZm9udFdpdGhGYW1pbHk6KE5TU3RyaW5nICopW3N1YnN0aXR1dGVG
b250IGZhbWlseU5hbWVdIHRyYWl0czpbbWFuYWdlciB0cmFpdHNPZkZvbnQ6Zm9udF0gd2VpZ2h0
OlttYW5hZ2VyIHdlaWdodE9mRm9udDpmb250XSBzaXplOltmb250IHBvaW50U2l6ZV1dOwotICAg
IGlmIChzdWJzdGl0dXRlRm9udDIpCi0Jc3Vic3RpdHV0ZUZvbnQgPSBzdWJzdGl0dXRlRm9udDI7
Ci0KLSAgICAvLyBOb3csIGZpbmFsbHksIGdldCB0aGUgcHJpbnRlciBvciBzY3JlZW4gdmFyaWF0
aW9uLgotICAgIHN1YnN0aXR1dGVGb250ID0gdXNpbmdQcmludGVyRm9udCA/IFtzdWJzdGl0dXRl
Rm9udCBwcmludGVyRm9udF0gOiBbc3Vic3RpdHV0ZUZvbnQgc2NyZWVuRm9udF07CisgICAgLy8g
Tm93IHRoYXQgd2UgaGF2ZSBhIHN1YnN0aXR1dGUgZm9udCwgYXR0ZW1wdCB0byBtYXRjaCBpdCB0
byB0aGUgYmVzdCB2YXJpYXRpb24uCisgICAgLy8gSWYgd2UgaGF2ZSBhIGdvb2QgbWF0Y2ggcmV0
dXJuIHRoYXQsIG90aGVyd2lzZSByZXR1cm4gdGhlIGZvbnQgdGhlIEFwcEtpdCBoYXMgZm91bmQu
CisgICAgaWYgKHN1YnN0aXR1dGVGb250KSB7CisgICAgICAgIE5TRm9udE1hbmFnZXIgKm1hbmFn
ZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CisgICAgICAgIE5TRm9udCAq
YmVzdFZhcmlhdGlvbiA9IFttYW5hZ2VyIGZvbnRXaXRoRmFtaWx5OltzdWJzdGl0dXRlRm9udCBm
YW1pbHlOYW1lXSB0cmFpdHM6W21hbmFnZXIgdHJhaXRzT2ZGb250OmZvbnQuZm9udF0KKyAgICAg
ICAgICAgIHdlaWdodDpbbWFuYWdlciB3ZWlnaHRPZkZvbnQ6Zm9udC5mb250XSBzaXplOltmb250
LmZvbnQgcG9pbnRTaXplXV07CisgICAgICAgIGlmIChiZXN0VmFyaWF0aW9uKQorICAgICAgICAg
ICAgc3Vic3RpdHV0ZUZvbnQgPSBiZXN0VmFyaWF0aW9uOworICAgIH0KIAogICAgIHJldHVybiBz
dWJzdGl0dXRlRm9udDsKIH0KIAotLSAoTlNGb250ICopX3N1YnN0aXR1dGVGb250Rm9yQ2hhcmFj
dGVyczogKGNvbnN0IHVuaWNoYXIgKiljaGFyYWN0ZXJzIGxlbmd0aDogKGludCludW1DaGFyYWN0
ZXJzIGZhbWlsaWVzOiAoTlNTdHJpbmcgKiopZmFtaWxpZXMKKy0gKFdlYlRleHRSZW5kZXJlciAq
KXJlbmRlcmVyRm9yQWx0ZXJuYXRlRm9udDooV2ViQ29yZUZvbnQpYWx0ZXJuYXRlRm9udAogewot
ICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3Rl
cnNOb0NvcHk6KHVuaWNoYXIgKiljaGFyYWN0ZXJzIGxlbmd0aDogbnVtQ2hhcmFjdGVycyBmcmVl
V2hlbkRvbmU6IE5PXTsKLSAgICBOU0ZvbnQgKnN1YnN0aXR1dGVGb250ID0gW3NlbGYgX3N1YnN0
aXR1dGVGb250Rm9yU3RyaW5nOiBzdHJpbmcgZmFtaWxpZXM6IGZhbWlsaWVzXTsKLSAgICBbc3Ry
aW5nIHJlbGVhc2VdOwotICAgIHJldHVybiBzdWJzdGl0dXRlRm9udDsKKyAgICBpZiAoIWFsdGVy
bmF0ZUZvbnQuZm9udCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TRm9udE1hbmFnZXIg
KmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOworICAgIE5T
Rm9udFRyYWl0TWFzayBmb250VHJhaXRzID0gW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpmb250
LmZvbnRdOworICAgIGlmIChmb250LnN5bnRoZXRpY0JvbGQpCisgICAgICAgIGZvbnRUcmFpdHMg
fD0gTlNCb2xkRm9udE1hc2s7CisgICAgaWYgKGZvbnQuc3ludGhldGljT2JsaXF1ZSkKKyAgICAg
ICAgZm9udFRyYWl0cyB8PSBOU0l0YWxpY0ZvbnRNYXNrOworICAgIE5TRm9udFRyYWl0TWFzayBh
bHRlcm5hdGVGb250VHJhaXRzID0gW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDphbHRlcm5hdGVG
b250LmZvbnRdOworCisgICAgYWx0ZXJuYXRlRm9udC5zeW50aGV0aWNCb2xkID0gKGZvbnRUcmFp
dHMgJiBOU0JvbGRGb250TWFzaykgJiYgIShhbHRlcm5hdGVGb250VHJhaXRzICYgTlNCb2xkRm9u
dE1hc2spOworICAgIGFsdGVybmF0ZUZvbnQuc3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRz
ICYgTlNJdGFsaWNGb250TWFzaykgJiYgIShhbHRlcm5hdGVGb250VHJhaXRzICYgTlNJdGFsaWNG
b250TWFzayk7CisgICAgYWx0ZXJuYXRlRm9udC5mb3JQcmludGVyID0gZm9udC5mb3JQcmludGVy
OworCisgICAgcmV0dXJuIFtbV2ViVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBy
ZW5kZXJlcldpdGhGb250OmFsdGVybmF0ZUZvbnRdOwogfQogCi0tICh2b2lkKV9jb252ZXJ0Q2hh
cmFjdGVyczogKGNvbnN0IFVuaUNoYXIgKiljaGFyYWN0ZXJzIGxlbmd0aDogKHVuc2lnbmVkKW51
bUNoYXJhY3RlcnMgdG9HbHlwaHM6IChXS0dseXBoVmVjdG9yUmVmKWdseXBocworLSAoV2ViVGV4
dFJlbmRlcmVyICopc3Vic3RpdHV0ZVJlbmRlcmVyRm9yQ2hhcmFjdGVyczooY29uc3QgdW5pY2hh
ciAqKWNoYXJhY3RlcnMgbGVuZ3RoOihpbnQpbnVtQ2hhcmFjdGVycyBmYW1pbGllczooTlNTdHJp
bmcgKiopZmFtaWxpZXMKIHsKLSAgICBPU1N0YXR1cyBzdGF0dXMgPSBXS0NvbnZlcnRDaGFyVG9H
bHlwaHMoc3R5bGVHcm91cCwgY2hhcmFjdGVycywgbnVtQ2hhcmFjdGVycywgZ2x5cGhzKTsKLSAg
ICBpZiAoc3RhdHVzICE9IG5vRXJyKXsKLSAgICAgICAgRkFUQUxfQUxXQVlTICgidW5hYmxlIHRv
IGdldCBnbHlwaHNmb3IgJUAgJWYgZXJyb3IgPSAoJWQpIiwgc2VsZiwgW2ZvbnQgZGlzcGxheU5h
bWVdLCBbZm9udCBwb2ludFNpemVdLCBzdGF0dXMpOwotICAgIH0KKyAgICBXZWJDb3JlRm9udCBz
dWJzdGl0dXRlRm9udDsKKyAgICBXZWJDb3JlSW5pdGlhbGl6ZUZvbnQoJnN1YnN0aXR1dGVGb250
KTsKKyAgICBOU1N0cmluZyAqc3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFy
YWN0ZXJzTm9Db3B5Oih1bmljaGFyICopY2hhcmFjdGVycyBsZW5ndGg6IG51bUNoYXJhY3RlcnMg
ZnJlZVdoZW5Eb25lOiBOT107CisgICAgc3Vic3RpdHV0ZUZvbnQuZm9udCA9IFtzZWxmIF9zdWJz
dGl0dXRlRm9udEZvclN0cmluZzpzdHJpbmcgZmFtaWxpZXM6ZmFtaWxpZXNdOworICAgIFtzdHJp
bmcgcmVsZWFzZV07CisgICAgcmV0dXJuIFtzZWxmIHJlbmRlcmVyRm9yQWx0ZXJuYXRlRm9udDpz
dWJzdGl0dXRlRm9udF07CiB9CiAKLS0gKHZvaWQpX2NvbnZlcnRVbmljb2RlQ2hhcmFjdGVyczog
KGNvbnN0IFVuaWNvZGVDaGFyICopY2hhcmFjdGVycyBsZW5ndGg6ICh1bnNpZ25lZCludW1DaGFy
YWN0ZXJzIHRvR2x5cGhzOiAoV0tHbHlwaFZlY3RvclJlZilnbHlwaHMKKy0gKHZvaWQpX2NvbnZl
cnRDaGFyYWN0ZXJzOihjb25zdCBVbmlDaGFyICopY2hhcmFjdGVycyBsZW5ndGg6KHVuc2lnbmVk
KW51bUNoYXJhY3RlcnMgdG9HbHlwaHM6KFdLR2x5cGhWZWN0b3JSZWYpZ2x5cGhzCiB7Ci0gICAg
VW5pQ2hhciBsb2NhbEJ1ZmZlcltMT0NBTF9CVUZGRVJfU0laRV07Ci0gICAgVW5pQ2hhciAqYnVm
ZmVyID0gbG9jYWxCdWZmZXI7Ci0gICAgdW5zaWduZWQgaSwgYnVmUG9zID0gMDsKLSAgICAKLSAg
ICBpZiAobnVtQ2hhcmFjdGVycyoyID4gTE9DQUxfQlVGRkVSX1NJWkUpIHsKLSAgICAgICAgYnVm
ZmVyID0gKFVuaUNoYXIgKiltYWxsb2Moc2l6ZW9mKFVuaUNoYXIpICogbnVtQ2hhcmFjdGVycyAq
IDIpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyczsgaSsr
KSB7Ci0gICAgICAgIFVuaWNvZGVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBBU1NF
UlQoVTE2X0xFTkdUSChjKSA9PSAyKTsKLSAgICAgICAgYnVmZmVyW2J1ZlBvcysrXSA9IFUxNl9M
RUFEKGMpOwotICAgICAgICBidWZmZXJbYnVmUG9zKytdID0gVTE2X1RSQUlMKGMpOwotICAgIH0K
LSAgICAgICAgCi0gICAgT1NTdGF0dXMgc3RhdHVzID0gV0tDb252ZXJ0Q2hhclRvR2x5cGhzKHN0
eWxlR3JvdXAsIGJ1ZmZlciwgbnVtQ2hhcmFjdGVycyoyLCBnbHlwaHMpOwotICAgIGlmIChzdGF0
dXMgIT0gbm9FcnIpewotICAgICAgICBGQVRBTF9BTFdBWVMgKCJ1bmFibGUgdG8gZ2V0IGdseXBo
c2ZvciAlQCAlZiBlcnJvciA9ICglZCkiLCBzZWxmLCBbZm9udCBkaXNwbGF5TmFtZV0sIFtmb250
IHBvaW50U2l6ZV0sIHN0YXR1cyk7Ci0gICAgfQotICAgIAotICAgIGlmIChidWZmZXIgIT0gbG9j
YWxCdWZmZXIpIHsKLSAgICAgICAgZnJlZShidWZmZXIpOwotICAgIH0KKyAgICBPU1N0YXR1cyBz
dGF0dXMgPSBXS0NvbnZlcnRDaGFyVG9HbHlwaHMoc3R5bGVHcm91cCwgY2hhcmFjdGVycywgbnVt
Q2hhcmFjdGVycywgZ2x5cGhzKTsKKyAgICBpZiAoc3RhdHVzICE9IG5vRXJyKQorICAgICAgICBG
QVRBTF9BTFdBWVMoInVuYWJsZSB0byBnZXQgZ2x5cGhzIGZvciAlQCAlZiBlcnJvciA9ICglZCki
LCBzZWxmLCBbZm9udC5mb250IGRpc3BsYXlOYW1lXSwgW2ZvbnQuZm9udCBwb2ludFNpemVdLCBz
dGF0dXMpOwogfQogCiAvLyBOYXN0eSBoYWNrIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgcm91
bmQgb3IgY2VpbCBzcGFjZSB3aWR0aHMuCkBAIC04ODYsMTIgKzc1MiwxMyBAQCBzdGF0aWMgaW5s
aW5lIEJPT0wgZm9udENvbnRhaW5zU3RyaW5nKE5TCiAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRo
ZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguICBPdGhlcndpc2Ugd2Ugcm91bmQuCiAtIChCT09M
KV9jb21wdXRlV2lkdGhGb3JTcGFjZQogewotICAgIHNwYWNlR2x5cGggPSBbc2VsZiBfZXh0ZW5k
Q2hhcmFjdGVyVG9HbHlwaE1hcFRvSW5jbHVkZTpTUEFDRV07CisgICAgc3BhY2VHbHlwaCA9IFtz
ZWxmIGV4dGVuZENoYXJhY3RlclRvR2x5cGhNYXBUb0luY2x1ZGU6U1BBQ0VdOwogICAgIGlmIChz
cGFjZUdseXBoID09IDApIHsKICAgICAgICAgcmV0dXJuIE5POwogICAgIH0KIAotICAgIGZsb2F0
IHdpZHRoID0gd2lkdGhGb3JHbHlwaChzZWxmLCBzcGFjZUdseXBoLCAwKTsKKyAgICBmbG9hdCB3
aWR0aCA9IHdpZHRoRm9yR2x5cGgoc2VsZiwgc3BhY2VHbHlwaCk7CisKICAgICBzcGFjZVdpZHRo
ID0gd2lkdGg7CiAKICAgICB0cmVhdEFzRml4ZWRQaXRjaCA9IFtbV2ViVGV4dFJlbmRlcmVyRmFj
dG9yeSBzaGFyZWRGYWN0b3J5XSBpc0ZvbnRGaXhlZFBpdGNoOmZvbnRdOwpAQCAtOTAwLDEzICs3
NjcsMTUgQEAgc3RhdGljIGlubGluZSBCT09MIGZvbnRDb250YWluc1N0cmluZyhOUwogICAgIHJl
dHVybiBZRVM7CiB9CiAKLS0gKEJPT0wpX3NldHVwRm9udAorLSAoQk9PTClzZXRVcEZvbnQKIHsK
KyAgICBmb250LmZvbnQgPSBmb250LmZvclByaW50ZXIgPyBbZm9udC5mb250IHByaW50ZXJGb250
XSA6IFtmb250LmZvbnQgc2NyZWVuRm9udF07CisKICAgICBBVFNVU3R5bGUgZm9udFN0eWxlOwog
ICAgIGlmIChBVFNVQ3JlYXRlU3R5bGUoJmZvbnRTdHlsZSkgIT0gbm9FcnIpCiAgICAgICAgIHJl
dHVybiBOTzsKIAotICAgIGlmICghZmlsbFN0eWxlV2l0aEF0dHJpYnV0ZXMoZm9udFN0eWxlLCBm
b250KSkgeworICAgIGlmICghZmlsbFN0eWxlV2l0aEF0dHJpYnV0ZXMoZm9udFN0eWxlLCBmb250
LmZvbnQpKSB7CiAgICAgICAgIEFUU1VEaXNwb3NlU3R5bGUoZm9udFN0eWxlKTsKICAgICAgICAg
cmV0dXJuIE5POwogICAgIH0KQEAgLTkxNSw3ICs3ODQsNyBAQCBzdGF0aWMgaW5saW5lIEJPT0wg
Zm9udENvbnRhaW5zU3RyaW5nKE5TCiAgICAgICAgIEFUU1VEaXNwb3NlU3R5bGUoZm9udFN0eWxl
KTsKICAgICAgICAgcmV0dXJuIE5POwogICAgIH0KLSAgICAKKwogICAgIEFUU1VEaXNwb3NlU3R5
bGUoZm9udFN0eWxlKTsKIAogICAgIGlmICghW3NlbGYgX2NvbXB1dGVXaWR0aEZvclNwYWNlXSkg
ewpAQCAtOTI5LDE0ICs3OTgsMTQgQEAgc3RhdGljIGlubGluZSBCT09MIGZvbnRDb250YWluc1N0
cmluZyhOUwogICAgIHJldHVybiBZRVM7CiB9CiAKKyNpZiAhRVJST1JfRElTQUJMRUQKKwogc3Rh
dGljIE5TU3RyaW5nICpwYXRoRnJvbUZvbnQgKE5TRm9udCAqZm9udCkKIHsKICAgICBVSW50OCBf
ZmlsZVBhdGhCdWZmZXJbUEFUSF9NQVhdOwogICAgIE5TU3RyaW5nICpmaWxlUGF0aCA9IG5pbDsK
ICAgICBGU1NwZWMgb0ZpbGU7Ci0gICAgT1NTdGF0dXMgc3RhdHVzID0gQVRTRm9udEdldEZpbGVT
cGVjaWZpY2F0aW9uKAotICAgICAgICAgICAgQVRTRm9udFJlZkZyb21OU0ZvbnQoZm9udCksCi0g
ICAgICAgICAgICAmb0ZpbGUpOworICAgIE9TU3RhdHVzIHN0YXR1cyA9IEFUU0ZvbnRHZXRGaWxl
U3BlY2lmaWNhdGlvbihGTUdldEFUU0ZvbnRSZWZGcm9tRm9udCgoRk1Gb250KVdLR2V0TlNGb250
QVRTVUZvbnRJZChmb250KSksICZvRmlsZSk7CiAgICAgaWYgKHN0YXR1cyA9PSBub0Vycil7CiAg
ICAgICAgIE9TRXJyIGVycjsKICAgICAgICAgRlNSZWYgZmlsZVJlZjsKQEAgLTk1MSw2NCArODIw
LDU2IEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aEZyb21Gb250IChOU0ZvbnQgKmYKICAgICByZXR1
cm4gZmlsZVBhdGg7CiB9CiAKKyNlbmRpZgorCiAvLyBVc2VmdWwgcGFnZSBmb3IgdGVzdGluZyBo
dHRwOi8vaG9tZS5hdHQubmV0L35qYW1lc2thc3MKLXN0YXRpYyB2b2lkIF9kcmF3R2x5cGhzKE5T
Rm9udCAqZm9udCwgTlNDb2xvciAqY29sb3IsIENHR2x5cGggKmdseXBocywgQ0dTaXplICphZHZh
bmNlcywgZmxvYXQgeCwgZmxvYXQgeSwgaW50IG51bUdseXBocykKK3N0YXRpYyB2b2lkIGRyYXdH
bHlwaHMoTlNGb250ICpmb250LCBOU0NvbG9yICpjb2xvciwgQ0dHbHlwaCAqZ2x5cGhzLCBDR1Np
emUgKmFkdmFuY2VzLCBmbG9hdCB4LCBmbG9hdCB5LCBpbnQgbnVtR2x5cGhzLAorICAgIGZsb2F0
IHN5bnRoZXRpY0JvbGRPZmZzZXQsIEJPT0wgc3ludGhldGljT2JsaXF1ZSkKIHsKLSAgICBDR0Nv
bnRleHRSZWYgY2dDb250ZXh0OworICAgIE5TR3JhcGhpY3NDb250ZXh0ICpnQ29udGV4dCA9IFtO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CisgICAgQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCA9IChDR0NvbnRleHRSZWYpW2dDb250ZXh0IGdyYXBoaWNzUG9ydF07CiAKLSAgICBpZiAo
W1dlYlRleHRSZW5kZXJlciBzaG91bGRCdWZmZXJUZXh0RHJhd2luZ10gJiYgW1tXZWJUZXh0UmVu
ZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIGNvYWxlc2NlVGV4dERyYXdpbmddKXsKLSAgICAg
ICAgLy8gQWRkIGJ1ZmZlcmVkIGdseXBocyBhbmQgYWR2YW5jZXMKLSAgICAgICAgLy8gRklYTUU6
ICBJZiB3ZSBldmVyIHVzZSB0aGlzIGFnYWluLCBuZWVkIHRvIGFkZCBSVEwuCi0gICAgICAgIFdl
YkdseXBoQnVmZmVyICpnQnVmZmVyID0gW1tXZWJUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZh
Y3RvcnldIGdseXBoQnVmZmVyRm9yRm9udDogZm9udCBhbmRDb2xvcjogY29sb3JdOwotICAgICAg
ICBbZ0J1ZmZlciBhZGRHbHlwaHM6IGdseXBocyBhZHZhbmNlczogYWR2YW5jZXMgY291bnQ6IG51
bUdseXBocyBhdDogeCA6IHldOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgTlNHcmFwaGlj
c0NvbnRleHQgKmdDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsK
LSAgICAgICAgY2dDb250ZXh0ID0gKENHQ29udGV4dFJlZilbZ0NvbnRleHQgZ3JhcGhpY3NQb3J0
XTsKLSAgICAgICAgLy8gU2V0dXAgdGhlIGNvbG9yIGFuZCBmb250LgotCi0JYm9vbCBvcmlnaW5h
bFNob3VsZFVzZUZvbnRTbW9vdGhpbmc7Ci0JCi0Jb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3Ro
aW5nID0gV0tDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhGb250cyAoY2dDb250ZXh0KTsKLQlDR0Nv
bnRleHRTZXRTaG91bGRTbW9vdGhGb250cyAoY2dDb250ZXh0LCBbV2ViVmlldyBfc2hvdWxkVXNl
Rm9udFNtb290aGluZ10pOwotICAgICAgICAKLSAgICAgICAgTlNGb250ICpkcmF3Rm9udDsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChbZ0NvbnRleHQgaXNEcmF3aW5nVG9TY3JlZW5dKXsKLSAgICAg
ICAgICAgIGRyYXdGb250ID0gW2ZvbnQgc2NyZWVuRm9udF07Ci0gICAgICAgICAgICBpZiAoZHJh
d0ZvbnQgIT0gZm9udCl7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIGdldHRpbmcgdGhpcyBp
biB0b28gbWFueSBwbGFjZXMgKDM0MDY0MTEpOyB1c2UgRVJST1Igc28gaXQgb25seSBwcmludHMg
b24KLSAgICAgICAgICAgICAgICAvLyBkZWJ1ZyB2ZXJzaW9ucyBmb3Igbm93LiAoV2Ugc2hvdWxk
IGRlYnVnIHRoaXMgYWxzbywgZXZlbnR1YWxseSkuCi0gICAgICAgICAgICAgICAgRVJST1IgKCJB
dHRlbXB0aW5nIHRvIHNldCBub24tc2NyZWVuIGZvbnQgKCVAKSB3aGVuIGRyYXdpbmcgdG8gc2Ny
ZWVuLiAgVXNpbmcgc2NyZWVuIGZvbnQgYW55d2F5LCBtYXkgcmVzdWx0IGluIGluY29ycmVjdCBt
ZXRyaWNzLiIsIFtbW2ZvbnQgZm9udERlc2NyaXB0b3JdIGZvbnRBdHRyaWJ1dGVzXSBvYmplY3RG
b3JLZXk6IE5TRm9udE5hbWVBdHRyaWJ1dGVdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGRyYXdGb250ID0gW2ZvbnQgcHJpbnRlckZvbnRd
OwotICAgICAgICAgICAgaWYgKGRyYXdGb250ICE9IGZvbnQpewotICAgICAgICAgICAgICAgIE5T
TG9nIChAIkF0dGVtcHRpbmcgdG8gc2V0IG5vbi1wcmludGVyIGZvbnQgKCVAKSB3aGVuIHByaW50
aW5nLiAgVXNpbmcgcHJpbnRlciBmb250IGFueXdheSwgbWF5IHJlc3VsdCBpbiBpbmNvcnJlY3Qg
bWV0cmljcy4iLCBbW1tmb250IGZvbnREZXNjcmlwdG9yXSBmb250QXR0cmlidXRlc10gb2JqZWN0
Rm9yS2V5OiBOU0ZvbnROYW1lQXR0cmlidXRlXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgCi0JTlNWaWV3ICp2ID0gW05TVmlldyBmb2N1c1ZpZXddOworICAgIGJvb2wgb3Jp
Z2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nID0gV0tDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhG
b250cyhjZ0NvbnRleHQpOworICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29u
dGV4dCwgW1dlYlZpZXcgX3Nob3VsZFVzZUZvbnRTbW9vdGhpbmddKTsKKyAgICAKKyAgICBOU0Zv
bnQgKmRyYXdGb250OworICAgIGlmIChbZ0NvbnRleHQgaXNEcmF3aW5nVG9TY3JlZW5dKSB7Cisg
ICAgICAgIGRyYXdGb250ID0gW2ZvbnQgc2NyZWVuRm9udF07CisgICAgICAgIGlmIChkcmF3Rm9u
dCAhPSBmb250KQorICAgICAgICAgICAgLy8gV2UgYXJlIGdldHRpbmcgdGhpcyBpbiB0b28gbWFu
eSBwbGFjZXMgKDM0MDY0MTEpOyB1c2UgRVJST1Igc28gaXQgb25seSBwcmludHMgb24gZGVidWcg
dmVyc2lvbnMgZm9yIG5vdy4gKFdlIHNob3VsZCBkZWJ1ZyB0aGlzIGFsc28sIGV2ZW50dWFsbHkp
LgorICAgICAgICAgICAgRVJST1IoIkF0dGVtcHRpbmcgdG8gc2V0IG5vbi1zY3JlZW4gZm9udCAo
JUApIHdoZW4gZHJhd2luZyB0byBzY3JlZW4uICBVc2luZyBzY3JlZW4gZm9udCBhbnl3YXksIG1h
eSByZXN1bHQgaW4gaW5jb3JyZWN0IG1ldHJpY3MuIiwKKyAgICAgICAgICAgICAgICBbW1tmb250
IGZvbnREZXNjcmlwdG9yXSBmb250QXR0cmlidXRlc10gb2JqZWN0Rm9yS2V5Ok5TRm9udE5hbWVB
dHRyaWJ1dGVdKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkcmF3Rm9udCA9IFtmb250IHByaW50
ZXJGb250XTsKKyAgICAgICAgaWYgKGRyYXdGb250ICE9IGZvbnQpCisgICAgICAgICAgICBOU0xv
ZyhAIkF0dGVtcHRpbmcgdG8gc2V0IG5vbi1wcmludGVyIGZvbnQgKCVAKSB3aGVuIHByaW50aW5n
LiAgVXNpbmcgcHJpbnRlciBmb250IGFueXdheSwgbWF5IHJlc3VsdCBpbiBpbmNvcnJlY3QgbWV0
cmljcy4iLAorICAgICAgICAgICAgICAgIFtbW2ZvbnQgZm9udERlc2NyaXB0b3JdIGZvbnRBdHRy
aWJ1dGVzXSBvYmplY3RGb3JLZXk6TlNGb250TmFtZUF0dHJpYnV0ZV0pOworICAgIH0KKyAgICAK
KyAgICBDR0NvbnRleHRTZXRGb250KGNnQ29udGV4dCwgV0tHZXRDR0ZvbnRGcm9tTlNGb250KGRy
YXdGb250KSk7CisKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXg7CisgICAgbWVtY3B5KCZt
YXRyaXgsIFtkcmF3Rm9udCBtYXRyaXhdLCBzaXplb2YobWF0cml4KSk7CisgICAgbWF0cml4LmIg
PSAtbWF0cml4LmI7CisgICAgbWF0cml4LmQgPSAtbWF0cml4LmQ7CisgICAgaWYgKHN5bnRoZXRp
Y09ibGlxdWUpCisgICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJp
eCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIDAsIC10YW5mKDE0ICogYWNvc2YoMCkgLyA5MCks
IDEsIDAsIDApKTsgCisgICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQsIG1hdHJp
eCk7CiAKLSAgICAgICAgQ0dDb250ZXh0U2V0Rm9udChjZ0NvbnRleHQsIFdLR2V0Q0dGb250RnJv
bU5TRm9udChkcmF3Rm9udCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRGVhbCB3aXRoIGZsaXBw
aW5nIGZsaXBweW5lc3MuCi0gICAgICAgIGNvbnN0IGZsb2F0ICptYXRyaXggPSBbZHJhd0ZvbnQg
bWF0cml4XTsKLSAgICAgICAgZmxvYXQgZmxpcCA9IFt2IGlzRmxpcHBlZF0gPyAtMSA6IDE7Ci0g
ICAgICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY2dDb250ZXh0LCBDR0FmZmluZVRyYW5zZm9y
bU1ha2UobWF0cml4WzBdLCBtYXRyaXhbMV0gKiBmbGlwLCBtYXRyaXhbMl0sIG1hdHJpeFszXSAq
IGZsaXAsIG1hdHJpeFs0XSwgbWF0cml4WzVdKSk7Ci0gICAgICAgIFdLU2V0Q0dGb250UmVuZGVy
aW5nTW9kZShjZ0NvbnRleHQsIGRyYXdGb250KTsKLSAgICAgICAgQ0dDb250ZXh0U2V0Rm9udFNp
emUoY2dDb250ZXh0LCAxLjBGKTsKKyAgICBXS1NldENHRm9udFJlbmRlcmluZ01vZGUoY2dDb250
ZXh0LCBkcmF3Rm9udCk7CisgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCAxLjBm
KTsKIAotICAgICAgICBbY29sb3Igc2V0XTsKKyAgICBbY29sb3Igc2V0XTsKIAotICAgICAgICBD
R0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCB4LCB5KTsKKyAgICBDR0NvbnRleHRT
ZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCB4LCB5KTsKKyAgICBDR0NvbnRleHRTaG93R2x5cGhz
V2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzKTsKKyAg
ICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkgeworICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9z
aXRpb24oY2dDb250ZXh0LCB4ICsgc3ludGhldGljQm9sZE9mZnNldCwgeSk7CiAgICAgICAgIENH
Q29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2Vz
LCBudW1HbHlwaHMpOwotCi0JQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0
LCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpOwogICAgIH0KLX0KIAorICAgIENHQ29u
dGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgb3JpZ2luYWxTaG91bGRVc2VGb250
U21vb3RoaW5nKTsKK30KIAogLSAodm9pZClfQ0dfZHJhd0hpZ2hsaWdodEZvclJ1bjooY29uc3Qg
V2ViQ29yZVRleHRSdW4gKilydW4gc3R5bGU6KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilzdHls
ZSBnZW9tZXRyeTooY29uc3QgV2ViQ29yZVRleHRHZW9tZXRyeSAqKWdlb21ldHJ5CiB7CkBAIC0x
MDI2LDEzICs4ODcsMTMgQEAgc3RhdGljIHZvaWQgX2RyYXdHbHlwaHMoTlNGb250ICpmb250LCBO
UwogICAgIC8vIFRoZSBzdGFydGluZyBwb2ludCBuZWVkcyB0byBiZSBhZGp1c3RlZCB0byBhY2Nv
dW50IGZvciB0aGUgd2lkdGggb2YKICAgICAvLyB0aGUgZ2x5cGhzIGF0IHRoZSBzdGFydCBvZiB0
aGUgcnVuLgogICAgIHdoaWxlICh3aWR0aEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIgPCAodW5z
aWduZWQpcnVuLT5mcm9tKSB7Ci0gICAgICAgIHN0YXJ0UG9zaXRpb24gKz0gd2lkdGhGb3JOZXh0
Q2hhcmFjdGVyKCZ3aWR0aEl0ZXJhdG9yLCAwLCAwKTsKKyAgICAgICAgc3RhcnRQb3NpdGlvbiAr
PSB3aWR0aEZvck5leHRDaGFyYWN0ZXIoJndpZHRoSXRlcmF0b3IsIE5VTEwsIE5VTEwpOwogICAg
IH0KICAgICBmbG9hdCBzdGFydFggPSBzdGFydFBvc2l0aW9uICsgZ2VvbWV0cnktPnBvaW50Lng7
CiAgICAgCiAgICAgZmxvYXQgYmFja2dyb3VuZFdpZHRoID0gMC4wRjsKICAgICB3aGlsZSAod2lk
dGhJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyIDwgKHVuc2lnbmVkKXJ1bi0+dG8pIHsKLSAgICAg
ICAgYmFja2dyb3VuZFdpZHRoICs9IHdpZHRoRm9yTmV4dENoYXJhY3Rlcigmd2lkdGhJdGVyYXRv
ciwgMCwgMCk7CisgICAgICAgIGJhY2tncm91bmRXaWR0aCArPSB3aWR0aEZvck5leHRDaGFyYWN0
ZXIoJndpZHRoSXRlcmF0b3IsIE5VTEwsIE5VTEwpOwogICAgIH0KIAogICAgIGlmIChzdHlsZS0+
YmFja2dyb3VuZENvbG9yICE9IG5pbCl7CkBAIC0xMDQzLDE1ICs5MDQsMTQgQEAgc3RhdGljIHZv
aWQgX2RyYXdHbHlwaHMoTlNGb250ICpmb250LCBOUwogCiAgICAgICAgIGZsb2F0IHlQb3MgPSBn
ZW9tZXRyeS0+dXNlRm9udE1ldHJpY3NGb3JTZWxlY3Rpb25ZQW5kSGVpZ2h0ID8gZ2VvbWV0cnkt
PnBvaW50LnkgLSBbc2VsZiBhc2NlbnRdIC0gKGxpbmVHYXAvMikgOiBnZW9tZXRyeS0+c2VsZWN0
aW9uWTsKICAgICAgICAgZmxvYXQgaGVpZ2h0ID0gZ2VvbWV0cnktPnVzZUZvbnRNZXRyaWNzRm9y
U2VsZWN0aW9uWUFuZEhlaWdodCA/IFtzZWxmIGxpbmVTcGFjaW5nXSA6IGdlb21ldHJ5LT5zZWxl
Y3Rpb25IZWlnaHQ7Ci0gICAgICAgIGlmIChzdHlsZS0+cnRsKXsKKyAgICAgICAgaWYgKHN0eWxl
LT5ydGwpIHsKICAgICAgICAgICAgIGZsb2F0IGNvbXBsZXRlUnVuV2lkdGggPSBzdGFydFBvc2l0
aW9uICsgYmFja2dyb3VuZFdpZHRoOwogICAgICAgICAgICAgd2hpbGUgKHdpZHRoSXRlcmF0b3Iu
Y3VycmVudENoYXJhY3RlciA8IHJ1bi0+bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgY29tcGxl
dGVSdW5XaWR0aCArPSB3aWR0aEZvck5leHRDaGFyYWN0ZXIoJndpZHRoSXRlcmF0b3IsIDAsIDAp
OworICAgICAgICAgICAgICAgIGNvbXBsZXRlUnVuV2lkdGggKz0gd2lkdGhGb3JOZXh0Q2hhcmFj
dGVyKCZ3aWR0aEl0ZXJhdG9yLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgW05TQmV6aWVyUGF0aCBmaWxsUmVjdDpOU01ha2VSZWN0KGdlb21ldHJ5LT5wb2ludC54
ICsgY29tcGxldGVSdW5XaWR0aCAtIHN0YXJ0UG9zaXRpb24gLSBiYWNrZ3JvdW5kV2lkdGgsIHlQ
b3MsIGJhY2tncm91bmRXaWR0aCwgaGVpZ2h0KV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7
CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBbTlNCZXppZXJQYXRoIGZpbGxSZWN0Ok5T
TWFrZVJlY3Qoc3RhcnRYLCB5UG9zLCBiYWNrZ3JvdW5kV2lkdGgsIGhlaWdodCldOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTA2Miw3ICs5MjIsNyBAQCBzdGF0aWMgdm9pZCBfZHJhd0dseXBocyhO
U0ZvbnQgKmZvbnQsIE5TCiB7CiAgICAgZmxvYXQgKndpZHRoQnVmZmVyLCBsb2NhbFdpZHRoQnVm
ZmVyW0xPQ0FMX0JVRkZFUl9TSVpFXTsKICAgICBDR0dseXBoICpnbHlwaEJ1ZmZlciwgbG9jYWxH
bHlwaEJ1ZmZlcltMT0NBTF9CVUZGRVJfU0laRV07Ci0gICAgTlNGb250ICoqZm9udEJ1ZmZlciwg
KmxvY2FsRm9udEJ1ZmZlcltMT0NBTF9CVUZGRVJfU0laRV07CisgICAgV2ViVGV4dFJlbmRlcmVy
ICoqcmVuZGVyZXJCdWZmZXIsICpsb2NhbFJlbmRlcmVyQnVmZmVyW0xPQ0FMX0JVRkZFUl9TSVpF
XTsKICAgICBDR1NpemUgKmFkdmFuY2VzLCBsb2NhbEFkdmFuY2VCdWZmZXJbTE9DQUxfQlVGRkVS
X1NJWkVdOwogICAgIGludCBudW1HbHlwaHMgPSAwLCBpOwogICAgIGZsb2F0IHN0YXJ0WDsKQEAg
LTEwNzUsMTggKzkzNSwxOCBAQCBzdGF0aWMgdm9pZCBfZHJhd0dseXBocyhOU0ZvbnQgKmZvbnQs
IE5TCiAgICAgICAgIGFkdmFuY2VzID0gKENHU2l6ZSAqKWNhbGxvYyhsZW5ndGgqTUFYX0dMWVBI
X0VYUEFOU0lPTiwgc2l6ZW9mKENHU2l6ZSkpOwogICAgICAgICB3aWR0aEJ1ZmZlciA9IChmbG9h
dCAqKWNhbGxvYyhsZW5ndGgqTUFYX0dMWVBIX0VYUEFOU0lPTiwgc2l6ZW9mKGZsb2F0KSk7CiAg
ICAgICAgIGdseXBoQnVmZmVyID0gKENHR2x5cGggKiljYWxsb2MobGVuZ3RoKk1BWF9HTFlQSF9F
WFBBTlNJT04sIHNpemVvZihBVFNHbHlwaFJlZikpOwotICAgICAgICBmb250QnVmZmVyID0gKE5T
Rm9udCAqKiljYWxsb2MobGVuZ3RoKk1BWF9HTFlQSF9FWFBBTlNJT04sIHNpemVvZihOU0ZvbnQg
KikpOworICAgICAgICByZW5kZXJlckJ1ZmZlciA9IChXZWJUZXh0UmVuZGVyZXIgKiopY2FsbG9j
KGxlbmd0aCpNQVhfR0xZUEhfRVhQQU5TSU9OLCBzaXplb2YoV2ViVGV4dFJlbmRlcmVyICopKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBhZHZhbmNlcyA9IGxvY2FsQWR2YW5jZUJ1ZmZlcjsKICAg
ICAgICAgd2lkdGhCdWZmZXIgPSBsb2NhbFdpZHRoQnVmZmVyOwogICAgICAgICBnbHlwaEJ1ZmZl
ciA9IGxvY2FsR2x5cGhCdWZmZXI7Ci0gICAgICAgIGZvbnRCdWZmZXIgPSBsb2NhbEZvbnRCdWZm
ZXI7CisgICAgICAgIHJlbmRlcmVyQnVmZmVyID0gbG9jYWxSZW5kZXJlckJ1ZmZlcjsKICAgICB9
CiAKLSAgICBbc2VsZiBfZmxvYXRXaWR0aEZvclJ1bjpydW4KKyAgICBbc2VsZiBmbG9hdFdpZHRo
Rm9yUnVuOnJ1bgogICAgICAgICBzdHlsZTpzdHlsZQogICAgICAgICB3aWR0aHM6d2lkdGhCdWZm
ZXIgCi0gICAgICAgIGZvbnRzOmZvbnRCdWZmZXIKKyAgICAgICAgc3Vic3RpdHV0ZVJlbmRlcmVy
czpyZW5kZXJlckJ1ZmZlcgogICAgICAgICBnbHlwaHM6Z2x5cGhCdWZmZXIKICAgICAgICAgc3Rh
cnRQb3NpdGlvbjomc3RhcnRYCiAgICAgICAgIG51bUdseXBoczogJm51bUdseXBoc107CkBAIC0x
MTA4LDc3ICs5NjgsNzcgQEAgc3RhdGljIHZvaWQgX2RyYXdHbHlwaHMoTlNGb250ICpmb250LCBO
UwogICAgIGlmIChzdHlsZS0+YmFja2dyb3VuZENvbG9yICE9IG5pbCkKICAgICAgICAgW3NlbGYg
X0NHX2RyYXdIaWdobGlnaHRGb3JSdW46cnVuIHN0eWxlOnN0eWxlIGdlb21ldHJ5Omdlb21ldHJ5
XTsKICAgICAKLSAgICAvLyBGaW5hbGx5LCBkcmF3IHRoZSBnbHlwaHMuCi0gICAgaW50IGxhc3RG
cm9tID0gMDsKLSAgICBpbnQgcG9zID0gMDsKLQogICAgIC8vIFN3YXAgdGhlIG9yZGVyIG9mIHRo
ZSBnbHlwaHMgaWYgcmlnaHQtdG8tbGVmdC4KLSAgICBpZiAoc3R5bGUtPnJ0bCAmJiBudW1HbHlw
aHMgPiAxKXsKKyAgICBpZiAoc3R5bGUtPnJ0bCkgewogICAgICAgICBpbnQgaTsKLSAgICAgICAg
aW50IGVuZCA9IG51bUdseXBoczsKLSAgICAgICAgQ0dHbHlwaCBnc3dhcDEsIGdzd2FwMjsKLSAg
ICAgICAgQ0dTaXplIGFzd2FwMSwgYXN3YXAyOwotICAgICAgICBOU0ZvbnQgKmZzd2FwMSwgKmZz
d2FwMjsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaSA9IHBvcywgZW5kID0gbnVtR2x5cGhzOyBp
IDwgKG51bUdseXBocyAtIHBvcykvMjsgaSsrKXsKLSAgICAgICAgICAgIGdzd2FwMSA9IGdseXBo
QnVmZmVyW2ldOwotICAgICAgICAgICAgZ3N3YXAyID0gZ2x5cGhCdWZmZXJbLS1lbmRdOworICAg
ICAgICBpbnQgbWlkID0gbnVtR2x5cGhzIC8gMjsKKyAgICAgICAgaW50IGVuZDsKKyAgICAgICAg
Zm9yIChpID0gMCwgZW5kID0gbnVtR2x5cGhzIC0gMTsgaSA8IG1pZDsgKytpLCAtLWVuZCkgewor
ICAgICAgICAgICAgQ0dHbHlwaCBnc3dhcDEgPSBnbHlwaEJ1ZmZlcltpXTsKKyAgICAgICAgICAg
IENHR2x5cGggZ3N3YXAyID0gZ2x5cGhCdWZmZXJbZW5kXTsKICAgICAgICAgICAgIGdseXBoQnVm
ZmVyW2ldID0gZ3N3YXAyOwogICAgICAgICAgICAgZ2x5cGhCdWZmZXJbZW5kXSA9IGdzd2FwMTsK
LSAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSBwb3MsIGVuZCA9IG51bUdseXBoczsgaSA8IChu
dW1HbHlwaHMgLSBwb3MpLzI7IGkrKyl7Ci0gICAgICAgICAgICBhc3dhcDEgPSBhZHZhbmNlc1tp
XTsKLSAgICAgICAgICAgIGFzd2FwMiA9IGFkdmFuY2VzWy0tZW5kXTsKKworICAgICAgICAgICAg
Q0dTaXplIGFzd2FwMSA9IGFkdmFuY2VzW2ldOworICAgICAgICAgICAgQ0dTaXplIGFzd2FwMiA9
IGFkdmFuY2VzW2VuZF07CiAgICAgICAgICAgICBhZHZhbmNlc1tpXSA9IGFzd2FwMjsKICAgICAg
ICAgICAgIGFkdmFuY2VzW2VuZF0gPSBhc3dhcDE7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChp
ID0gcG9zLCBlbmQgPSBudW1HbHlwaHM7IGkgPCAobnVtR2x5cGhzIC0gcG9zKS8yOyBpKyspewot
ICAgICAgICAgICAgZnN3YXAxID0gZm9udEJ1ZmZlcltpXTsKLSAgICAgICAgICAgIGZzd2FwMiA9
IGZvbnRCdWZmZXJbLS1lbmRdOwotICAgICAgICAgICAgZm9udEJ1ZmZlcltpXSA9IGZzd2FwMjsK
LSAgICAgICAgICAgIGZvbnRCdWZmZXJbZW5kXSA9IGZzd2FwMTsKKworICAgICAgICAgICAgV2Vi
VGV4dFJlbmRlcmVyICpyc3dhcDEgPSByZW5kZXJlckJ1ZmZlcltpXTsKKyAgICAgICAgICAgIFdl
YlRleHRSZW5kZXJlciAqcnN3YXAyID0gcmVuZGVyZXJCdWZmZXJbZW5kXTsKKyAgICAgICAgICAg
IHJlbmRlcmVyQnVmZmVyW2ldID0gcnN3YXAyOworICAgICAgICAgICAgcmVuZGVyZXJCdWZmZXJb
ZW5kXSA9IHJzd2FwMTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIERyYXcgZWFjaCBjb250
aWd1b3VzIHJ1biBvZiBnbHlwaHMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIHNhbWUgZm9udC4K
LSAgICBOU0ZvbnQgKmN1cnJlbnRGb250ID0gZm9udEJ1ZmZlcltwb3NdOworICAgIC8vIEZpbmFs
bHksIGRyYXcgdGhlIGdseXBocy4KKyAgICBpbnQgbGFzdEZyb20gPSAwOworICAgIGludCBwb3Mg
PSAwOworCisgICAgLy8gRHJhdyBlYWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyB0aGF0IHVz
ZSB0aGUgc2FtZSByZW5kZXJlci4KKyAgICBXZWJUZXh0UmVuZGVyZXIgKmN1cnJlbnRSZW5kZXJl
ciA9IHJlbmRlcmVyQnVmZmVyW3Bvc107CiAgICAgZmxvYXQgbmV4dFggPSBzdGFydFg7CiAgICAg
aW50IG5leHRHbHlwaCA9IHBvczsKLQotICAgIHdoaWxlIChuZXh0R2x5cGggPCBudW1HbHlwaHMp
ewotICAgICAgICBpZiAoKGZvbnRCdWZmZXJbbmV4dEdseXBoXSAhPSAwICYmIGZvbnRCdWZmZXJb
bmV4dEdseXBoXSAhPSBjdXJyZW50Rm9udCkpewotICAgICAgICAgICAgX2RyYXdHbHlwaHMoY3Vy
cmVudEZvbnQsIHN0eWxlLT50ZXh0Q29sb3IsICZnbHlwaEJ1ZmZlcltsYXN0RnJvbV0sICZhZHZh
bmNlc1tsYXN0RnJvbV0sIHN0YXJ0WCwgZ2VvbWV0cnktPnBvaW50LnksIG5leHRHbHlwaCAtIGxh
c3RGcm9tKTsKKyAgICB3aGlsZSAobmV4dEdseXBoIDwgbnVtR2x5cGhzKSB7CisgICAgICAgIFdl
YlRleHRSZW5kZXJlciAqbmV4dFJlbmRlcmVyID0gcmVuZGVyZXJCdWZmZXJbbmV4dEdseXBoXTsK
KyAgICAgICAgaWYgKG5leHRSZW5kZXJlciAmJiBuZXh0UmVuZGVyZXIgIT0gY3VycmVudFJlbmRl
cmVyKSB7CisgICAgICAgICAgICBkcmF3R2x5cGhzKGN1cnJlbnRSZW5kZXJlci0+Zm9udC5mb250
LCBzdHlsZS0+dGV4dENvbG9yLCAmZ2x5cGhCdWZmZXJbbGFzdEZyb21dLCAmYWR2YW5jZXNbbGFz
dEZyb21dLAorICAgICAgICAgICAgICAgIHN0YXJ0WCwgZ2VvbWV0cnktPnBvaW50LnksIG5leHRH
bHlwaCAtIGxhc3RGcm9tLAorICAgICAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c3ludGhl
dGljQm9sZE9mZnNldCwgY3VycmVudFJlbmRlcmVyLT5mb250LnN5bnRoZXRpY09ibGlxdWUpOwog
ICAgICAgICAgICAgbGFzdEZyb20gPSBuZXh0R2x5cGg7Ci0gICAgICAgICAgICBjdXJyZW50Rm9u
dCA9IGZvbnRCdWZmZXJbbmV4dEdseXBoXTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJlciA9
IG5leHRSZW5kZXJlcjsKICAgICAgICAgICAgIHN0YXJ0WCA9IG5leHRYOwogICAgICAgICB9CiAg
ICAgICAgIG5leHRYICs9IGFkdmFuY2VzW25leHRHbHlwaF0ud2lkdGg7CiAgICAgICAgIG5leHRH
bHlwaCsrOwogICAgIH0KLSAgICBfZHJhd0dseXBocyhjdXJyZW50Rm9udCwgc3R5bGUtPnRleHRD
b2xvciwgJmdseXBoQnVmZmVyW2xhc3RGcm9tXSwgJmFkdmFuY2VzW2xhc3RGcm9tXSwgc3RhcnRY
LCBnZW9tZXRyeS0+cG9pbnQueSwgbmV4dEdseXBoIC0gbGFzdEZyb20pOworICAgIGRyYXdHbHlw
aHMoY3VycmVudFJlbmRlcmVyLT5mb250LmZvbnQsIHN0eWxlLT50ZXh0Q29sb3IsICZnbHlwaEJ1
ZmZlcltsYXN0RnJvbV0sICZhZHZhbmNlc1tsYXN0RnJvbV0sCisgICAgICAgIHN0YXJ0WCwgZ2Vv
bWV0cnktPnBvaW50LnksIG5leHRHbHlwaCAtIGxhc3RGcm9tLAorICAgICAgICBjdXJyZW50UmVu
ZGVyZXItPnN5bnRoZXRpY0JvbGRPZmZzZXQsIGN1cnJlbnRSZW5kZXJlci0+Zm9udC5zeW50aGV0
aWNPYmxpcXVlKTsKIAogICAgIGlmIChhZHZhbmNlcyAhPSBsb2NhbEFkdmFuY2VCdWZmZXIpIHsK
ICAgICAgICAgZnJlZShhZHZhbmNlcyk7CiAgICAgICAgIGZyZWUod2lkdGhCdWZmZXIpOwogICAg
ICAgICBmcmVlKGdseXBoQnVmZmVyKTsKLSAgICAgICAgZnJlZShmb250QnVmZmVyKTsKKyAgICAg
ICAgZnJlZShyZW5kZXJlckJ1ZmZlcik7CiAgICAgfQogfQogCi0tIChmbG9hdClfZmxvYXRXaWR0
aEZvclJ1bjooY29uc3QgV2ViQ29yZVRleHRSdW4gKilydW4gc3R5bGU6KGNvbnN0IFdlYkNvcmVU
ZXh0U3R5bGUgKilzdHlsZSB3aWR0aHM6KGZsb2F0ICopd2lkdGhCdWZmZXIgZm9udHM6KE5TRm9u
dCAqKilmb250QnVmZmVyIGdseXBoczooQ0dHbHlwaCAqKWdseXBoQnVmZmVyIHN0YXJ0UG9zaXRp
b246KGZsb2F0ICopc3RhcnRQb3NpdGlvbiBudW1HbHlwaHM6KGludCAqKV9udW1HbHlwaHMKKy0g
KGZsb2F0KWZsb2F0V2lkdGhGb3JSdW46KGNvbnN0IFdlYkNvcmVUZXh0UnVuICopcnVuIHN0eWxl
Oihjb25zdCBXZWJDb3JlVGV4dFN0eWxlICopc3R5bGUgd2lkdGhzOihmbG9hdCAqKXdpZHRoQnVm
ZmVyIHN1YnN0aXR1dGVSZW5kZXJlcnM6KFdlYlRleHRSZW5kZXJlciAqKilyZW5kZXJlckJ1ZmZl
cgorICAgIGdseXBoczooQ0dHbHlwaCAqKWdseXBoQnVmZmVyIHN0YXJ0UG9zaXRpb246KGZsb2F0
ICopc3RhcnRQb3NpdGlvbiBudW1HbHlwaHM6KGludCAqKV9udW1HbHlwaHMKIHsKICAgICBpZiAo
c2hvdWxkVXNlQVRTVShydW4pKQogICAgICAgICByZXR1cm4gW3NlbGYgX0FUU1VfZmxvYXRXaWR0
aEZvclJ1bjpydW4gc3R5bGU6c3R5bGVdOwogICAgIAotICAgIHJldHVybiBbc2VsZiBfQ0dfZmxv
YXRXaWR0aEZvclJ1bjpydW4gc3R5bGU6c3R5bGUgd2lkdGhzOndpZHRoQnVmZmVyIGZvbnRzOmZv
bnRCdWZmZXIgZ2x5cGhzOmdseXBoQnVmZmVyIHN0YXJ0UG9zaXRpb246c3RhcnRQb3NpdGlvbiBu
dW1HbHlwaHM6X251bUdseXBoc107Ci0KKyAgICByZXR1cm4gW3NlbGYgX0NHX2Zsb2F0V2lkdGhG
b3JSdW46cnVuIHN0eWxlOnN0eWxlIHdpZHRoczp3aWR0aEJ1ZmZlciBzdWJzdGl0dXRlUmVuZGVy
ZXJzOnJlbmRlcmVyQnVmZmVyIGdseXBoczpnbHlwaEJ1ZmZlciBzdGFydFBvc2l0aW9uOnN0YXJ0
UG9zaXRpb24gbnVtR2x5cGhzOl9udW1HbHlwaHNdOwogfQogCi0tIChmbG9hdClfQ0dfZmxvYXRX
aWR0aEZvclJ1bjooY29uc3QgV2ViQ29yZVRleHRSdW4gKilydW4gc3R5bGU6KGNvbnN0IFdlYkNv
cmVUZXh0U3R5bGUgKilzdHlsZSB3aWR0aHM6IChmbG9hdCAqKXdpZHRoQnVmZmVyIGZvbnRzOiAo
TlNGb250ICoqKWZvbnRCdWZmZXIgZ2x5cGhzOiAoQ0dHbHlwaCAqKWdseXBoQnVmZmVyIHN0YXJ0
UG9zaXRpb246KGZsb2F0ICopc3RhcnRQb3NpdGlvbiBudW1HbHlwaHM6IChpbnQgKilfbnVtR2x5
cGhzCistIChmbG9hdClfQ0dfZmxvYXRXaWR0aEZvclJ1bjooY29uc3QgV2ViQ29yZVRleHRSdW4g
KilydW4gc3R5bGU6KGNvbnN0IFdlYkNvcmVUZXh0U3R5bGUgKilzdHlsZSB3aWR0aHM6KGZsb2F0
ICopd2lkdGhCdWZmZXIgc3Vic3RpdHV0ZVJlbmRlcmVyczooV2ViVGV4dFJlbmRlcmVyICoqKXJl
bmRlcmVyQnVmZmVyCisgICAgZ2x5cGhzOihDR0dseXBoICopZ2x5cGhCdWZmZXIgc3RhcnRQb3Np
dGlvbjooZmxvYXQgKilzdGFydFBvc2l0aW9uIG51bUdseXBoczooaW50ICopX251bUdseXBocwog
ewogICAgIGZsb2F0IF9uZXh0V2lkdGg7CiAgICAgQ2hhcmFjdGVyV2lkdGhJdGVyYXRvciB3aWR0
aEl0ZXJhdG9yOwotICAgIE5TRm9udCAqZm9udFVzZWQgPSAwOworICAgIFdlYlRleHRSZW5kZXJl
ciAqcmVuZGVyZXJVc2VkID0gbmlsOwogICAgIEFUU0dseXBoUmVmIGdseXBoVXNlZDsKICAgICBp
bnQgbnVtR2x5cGhzID0gMDsKICAgICAKQEAgLTExODYsMTEgKzEwNDYsMTEgQEAgc3RhdGljIHZv
aWQgX2RyYXdHbHlwaHMoTlNGb250ICpmb250LCBOUwogICAgIGlmIChzdGFydFBvc2l0aW9uKQog
ICAgICAgICAqc3RhcnRQb3NpdGlvbiA9IHdpZHRoSXRlcmF0b3Iud2lkdGhUb1N0YXJ0OwogICAg
IHdoaWxlICh3aWR0aEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIgPCAodW5zaWduZWQpd2lkdGhJ
dGVyYXRvci5ydW4tPnRvKSB7Ci0gICAgICAgIF9uZXh0V2lkdGggPSB3aWR0aEZvck5leHRDaGFy
YWN0ZXIoJndpZHRoSXRlcmF0b3IsICZnbHlwaFVzZWQsICZmb250VXNlZCk7CisgICAgICAgIF9u
ZXh0V2lkdGggPSB3aWR0aEZvck5leHRDaGFyYWN0ZXIoJndpZHRoSXRlcmF0b3IsICZnbHlwaFVz
ZWQsICZyZW5kZXJlclVzZWQpOwogICAgICAgICBpZiAoX25leHRXaWR0aCA9PSBJTlZBTElEX1dJ
RFRIKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChmb250QnVmZmVyKQotICAgICAg
ICAgICAgZm9udEJ1ZmZlcltudW1HbHlwaHNdID0gZm9udFVzZWQ7CisgICAgICAgIGlmIChyZW5k
ZXJlckJ1ZmZlcikKKyAgICAgICAgICAgIHJlbmRlcmVyQnVmZmVyW251bUdseXBoc10gPSByZW5k
ZXJlclVzZWQ7CiAgICAgICAgIGlmIChnbHlwaEJ1ZmZlcikKICAgICAgICAgICAgIGdseXBoQnVm
ZmVyW251bUdseXBoc10gPSBnbHlwaFVzZWQ7CiAgICAgICAgIGlmICh3aWR0aEJ1ZmZlcikKQEAg
LTEyMDQsOTkgKzEwNjQsMzAgQEAgc3RhdGljIHZvaWQgX2RyYXdHbHlwaHMoTlNGb250ICpmb250
LCBOUwogICAgIHJldHVybiB3aWR0aEl0ZXJhdG9yLnJ1bldpZHRoU29GYXI7CiB9CiAKLS0gKEFU
U0dseXBoUmVmKV9leHRlbmRVbmljb2RlQ2hhcmFjdGVyVG9HbHlwaE1hcFRvSW5jbHVkZTooVW5p
Y29kZUNoYXIpYwotewotICAgIFVuaWNvZGVHbHlwaE1hcCAqbWFwID0gKFVuaWNvZGVHbHlwaE1h
cCAqKWNhbGxvYyAoMSwgc2l6ZW9mKFVuaWNvZGVHbHlwaE1hcCkpOwotICAgIEFUU0xheW91dFJl
Y29yZCAqZ2x5cGhSZWNvcmQ7Ci0JY2hhciBnbHlwaFZlY3RvcltXS0dseXBoVmVjdG9yU2l6ZV07
Ci0gICAgVW5pY29kZUNoYXIgZW5kLCBzdGFydDsKLSAgICB1bnNpZ25lZCBibG9ja1NpemU7Ci0g
ICAgQVRTR2x5cGhSZWYgZ2x5cGhJRDsKLSAgICAKLSAgICBpZiAodW5pY29kZUNoYXJhY3RlclRv
R2x5cGhNYXAgPT0gMCkKLSAgICAgICAgYmxvY2tTaXplID0gSU5JVElBTF9CTE9DS19TSVpFOwot
ICAgIGVsc2UKLSAgICAgICAgYmxvY2tTaXplID0gSU5DUkVNRU5UQUxfQkxPQ0tfU0laRTsKLSAg
ICBzdGFydCA9IChjIC8gYmxvY2tTaXplKSAqIGJsb2NrU2l6ZTsKLSAgICBlbmQgPSBzdGFydCAr
IChibG9ja1NpemUgLSAxKTsKLSAgICAgICAgCi0gICAgTE9HKEZvbnRDYWNoZSwgIiVAICgweCUw
NHgpIGFkZGluZyBnbHlwaHMgZm9yIDB4JTA0eCB0byAweCUwNHgiLCBmb250LCBjLCBzdGFydCwg
ZW5kKTsKLQotICAgIG1hcC0+c3RhcnRSYW5nZSA9IHN0YXJ0OwotICAgIG1hcC0+ZW5kUmFuZ2Ug
PSBlbmQ7Ci0gICAgCi0gICAgdW5zaWduZWQgaSwgY291bnQgPSBlbmQgLSBzdGFydCArIDE7Ci0g
ICAgVW5pY29kZUNoYXIgYnVmZmVyW0lOQ1JFTUVOVEFMX0JMT0NLX1NJWkUrMl07Ci0gICAgCi0g
ICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspewotICAgICAgICBidWZmZXJbaV0gPSBpK3N0
YXJ0OwotICAgIH0KLQotICAgIE9TU3RhdHVzIHN0YXR1czsKLSAgICBzdGF0dXMgPSBXS0luaXRp
YWxpemVHbHlwaFZlY3Rvcihjb3VudCoyLCAmZ2x5cGhWZWN0b3IpOwotICAgIGlmIChzdGF0dXMg
IT0gbm9FcnIpewotICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGluZGljYXRl
cyBhIGJhZCBmb250ISAgSWYgaXQgZG9lcyB0aGUKLSAgICAgICAgLy8gZm9udCBzdWJzdGl0dXRp
b24gY29kZSB3aWxsIGZpbmQgYW4gYWx0ZXJuYXRlIGZvbnQuCi0gICAgICAgIGZyZWUobWFwKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIFtzZWxmIF9jb252ZXJ0VW5pY29k
ZUNoYXJhY3RlcnM6ICZidWZmZXJbMF0gbGVuZ3RoOiBjb3VudCB0b0dseXBoczogJmdseXBoVmVj
dG9yXTsKLSAgICB1bnNpZ25lZCBudW1HbHlwaHMgPSBXS0dldEdseXBoVmVjdG9yTnVtR2x5cGhz
KCZnbHlwaFZlY3Rvcik7Ci0gICAgaWYgKG51bUdseXBocyAhPSBjb3VudCl7Ci0gICAgICAgIC8v
IFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgaW5kaWNhdGVzIGEgYmFkIGZvbnQhICBJZiBpdCBk
b2VzIHRoZQotICAgICAgICAvLyBmb250IHN1YnN0aXR1dGlvbiBjb2RlIHdpbGwgZmluZCBhbiBh
bHRlcm5hdGUgZm9udC4KLSAgICAgICAgZnJlZShtYXApOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgICAgICAgICAKLSAgICBtYXAtPmdseXBocyA9IChHbHlwaEVudHJ5ICopbWFsbG9j
IChjb3VudCAqIHNpemVvZihHbHlwaEVudHJ5KSk7Ci0gICAgZ2x5cGhSZWNvcmQgPSBXS0dldEds
eXBoVmVjdG9yRmlyc3RSZWNvcmQoJmdseXBoVmVjdG9yKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykgewotICAgICAgICBtYXAtPmdseXBoc1tpXS5nbHlwaCA9IGdseXBoUmVjb3Jk
LT5nbHlwaElEOwotICAgICAgICBtYXAtPmdseXBoc1tpXS5mb250ID0gMDsKLSAgICAgICAgZ2x5
cGhSZWNvcmQgPSAoQVRTTGF5b3V0UmVjb3JkICopKChjaGFyICopZ2x5cGhSZWNvcmQgKyBXS0dl
dEdseXBoVmVjdG9yUmVjb3JkU2l6ZSgmZ2x5cGhWZWN0b3IpKTsKLSAgICB9Ci0gICAgV0tDbGVh
ckdseXBoVmVjdG9yKCZnbHlwaFZlY3Rvcik7Ci0gICAgCi0gICAgaWYgKHVuaWNvZGVDaGFyYWN0
ZXJUb0dseXBoTWFwID09IDApCi0gICAgICAgIHVuaWNvZGVDaGFyYWN0ZXJUb0dseXBoTWFwID0g
bWFwOwotICAgIGVsc2UgewotICAgICAgICBVbmljb2RlR2x5cGhNYXAgKmxhc3RNYXAgPSB1bmlj
b2RlQ2hhcmFjdGVyVG9HbHlwaE1hcDsKLSAgICAgICAgd2hpbGUgKGxhc3RNYXAtPm5leHQgIT0g
MCkKLSAgICAgICAgICAgIGxhc3RNYXAgPSBsYXN0TWFwLT5uZXh0OwotICAgICAgICBsYXN0TWFw
LT5uZXh0ID0gbWFwOwotICAgIH0KLQotICAgIGdseXBoSUQgPSBtYXAtPmdseXBoc1tjIC0gc3Rh
cnRdLmdseXBoOwotICAgIAotICAgIHJldHVybiBnbHlwaElEOwotfQotCi0tICh2b2lkKV91cGRh
dGVHbHlwaEVudHJ5Rm9yQ2hhcmFjdGVyOihVbmlDaGFyKWMgZ2x5cGhJRDooQVRTR2x5cGhSZWYp
Z2x5cGhJRCBmb250OihOU0ZvbnQgKilzdWJzdGl0dXRlRm9udAorLSAodm9pZCl1cGRhdGVHbHlw
aEVudHJ5Rm9yQ2hhcmFjdGVyOihVbmljb2RlQ2hhciljIGdseXBoSUQ6KEFUU0dseXBoUmVmKWds
eXBoSUQgc3Vic3RpdHV0ZVJlbmRlcmVyOihXZWJUZXh0UmVuZGVyZXIgKilzdWJzdGl0dXRlUmVu
ZGVyZXIKIHsKLSAgICBHbHlwaE1hcCAqbGFzdE1hcCA9IGNoYXJhY3RlclRvR2x5cGhNYXA7Ci0g
ICAgd2hpbGUgKGxhc3RNYXAgIT0gMCl7Ci0gICAgICAgIGlmIChjID49IGxhc3RNYXAtPnN0YXJ0
UmFuZ2UgJiYgYyA8PSBsYXN0TWFwLT5lbmRSYW5nZSl7Ci0gICAgICAgICAgICBsYXN0TWFwLT5n
bHlwaHNbYyAtIGxhc3RNYXAtPnN0YXJ0UmFuZ2VdLmdseXBoID0gZ2x5cGhJRDsKLSAgICAgICAg
ICAgIC8vIFRoaXMgZm9udCB3aWxsIGxlYWsuICBObyBwcm9ibGVtIHRob3VnaCwgaXQgaGFzIHRv
IHN0aWNrIGFyb3VuZAotICAgICAgICAgICAgLy8gZm9yZXZlci4gIE1heCB0aGVvcmV0aWNhbCBy
ZXRhaW4gY291bnRzIGFwcGxpZWQgaGVyZSB3aWxsIGJlCi0gICAgICAgICAgICAvLyBudW1fZm9u
dHNfb25fc3lzdGVtICogbnVtX2dseXBoc19pbl9mb250LgotICAgICAgICAgICAgbGFzdE1hcC0+
Z2x5cGhzW2MgLSBsYXN0TWFwLT5zdGFydFJhbmdlXS5mb250ID0gW3N1YnN0aXR1dGVGb250IHJl
dGFpbl07CisgICAgR2x5cGhNYXAgKm1hcDsKKyAgICBmb3IgKG1hcCA9IGNoYXJhY3RlclRvR2x5
cGhNYXA7IG1hcDsgbWFwID0gbWFwLT5uZXh0KSB7CisgICAgICAgIFVuaWNvZGVDaGFyIHN0YXJ0
ID0gbWFwLT5zdGFydFJhbmdlOworICAgICAgICBpZiAoYyA+PSBzdGFydCAmJiBjIDw9IG1hcC0+
ZW5kUmFuZ2UpIHsKKyAgICAgICAgICAgIGludCBpID0gYyAtIHN0YXJ0OworICAgICAgICAgICAg
bWFwLT5nbHlwaHNbaV0uZ2x5cGggPSBnbHlwaElEOworICAgICAgICAgICAgLy8gVGhpcyByZW5k
ZXJlciB3aWxsIGxlYWsuCisgICAgICAgICAgICAvLyBObyBwcm9ibGVtIHRob3VnaDsgd2Ugd2Fu
dCBpdCB0byBzdGljayBhcm91bmQgZm9yZXZlci4KKyAgICAgICAgICAgIC8vIE1heCB0aGVvcmV0
aWNhbCByZXRhaW4gY291bnRzIGFwcGxpZWQgaGVyZSB3aWxsIGJlIG51bV9mb250c19vbl9zeXN0
ZW0gKiBudW1fZ2x5cGhzX2luX2ZvbnQuCisgICAgICAgICAgICBtYXAtPmdseXBoc1tpXS5zdWJz
dGl0dXRlUmVuZGVyZXIgPSBbc3Vic3RpdHV0ZVJlbmRlcmVyIHJldGFpbl07CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBsYXN0TWFwID0gbGFzdE1hcC0+bmV4dDsKICAg
ICB9CiB9CiAKLS0gKEFUU0dseXBoUmVmKV9leHRlbmRDaGFyYWN0ZXJUb0dseXBoTWFwVG9JbmNs
dWRlOihVbmlDaGFyKSBjCistIChBVFNHbHlwaFJlZilleHRlbmRDaGFyYWN0ZXJUb0dseXBoTWFw
VG9JbmNsdWRlOihVbmljb2RlQ2hhciljCiB7Ci0gICAgR2x5cGhNYXAgKm1hcCA9IChHbHlwaE1h
cCAqKWNhbGxvYyAoMSwgc2l6ZW9mKEdseXBoTWFwKSk7CisgICAgR2x5cGhNYXAgKm1hcCA9IChH
bHlwaE1hcCAqKWNhbGxvYygxLCBzaXplb2YoR2x5cGhNYXApKTsKICAgICBBVFNMYXlvdXRSZWNv
cmQgKmdseXBoUmVjb3JkOwotCWNoYXIgZ2x5cGhWZWN0b3JbV0tHbHlwaFZlY3RvclNpemVdOwot
ICAgIFVuaUNoYXIgZW5kLCBzdGFydDsKKyAgICBjaGFyIGdseXBoVmVjdG9yW1dLR2x5cGhWZWN0
b3JTaXplXTsKKyAgICBVbmljb2RlQ2hhciBlbmQsIHN0YXJ0OwogICAgIHVuc2lnbmVkIGJsb2Nr
U2l6ZTsKLSAgICBBVFNHbHlwaFJlZiBnbHlwaElEOwogICAgIAogICAgIGlmIChjaGFyYWN0ZXJU
b0dseXBoTWFwID09IDApCiAgICAgICAgIGJsb2NrU2l6ZSA9IElOSVRJQUxfQkxPQ0tfU0laRTsK
QEAgLTEzMTAsMjMgKzExMDEsMzQgQEAgc3RhdGljIHZvaWQgX2RyYXdHbHlwaHMoTlNGb250ICpm
b250LCBOUwogICAgIG1hcC0+c3RhcnRSYW5nZSA9IHN0YXJ0OwogICAgIG1hcC0+ZW5kUmFuZ2Ug
PSBlbmQ7CiAgICAgCi0gICAgdW5zaWduZWQgaSwgY291bnQgPSBlbmQgLSBzdGFydCArIDE7Ci0g
ICAgc2hvcnQgdW5zaWduZWQgYnVmZmVyW0lOQ1JFTUVOVEFMX0JMT0NLX1NJWkUrMl07Ci0gICAg
Ci0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgYnVmZmVyW2ldID0g
aStzdGFydDsKLSAgICB9Ci0KLSAgICBpZiAoc3RhcnQgPT0gMCkgewotICAgICAgICAvLyBDb250
cm9sIGNoYXJhY3RlcnMgbXVzdCBub3QgcmVuZGVyIGF0IGFsbC4KLSAgICAgICAgZm9yIChpID0g
MDsgaSA8IDB4MjA7ICsraSkKLSAgICAgICAgICAgIGJ1ZmZlcltpXSA9IFpFUk9fV0lEVEhfU1BB
Q0U7Ci0gICAgICAgIGJ1ZmZlclsweDdGXSA9IFpFUk9fV0lEVEhfU1BBQ0U7Ci0KLSAgICAgICAg
Ly8gQnV0IFxuLCBcdCwgYW5kIG5vbmJyZWFraW5nIHNwYWNlIG11c3QgcmVuZGVyIGFzIGEgc3Bh
Y2UuCi0gICAgICAgIGJ1ZmZlclsnXG4nXSA9ICcgJzsKLSAgICAgICAgYnVmZmVyWydcdCddID0g
JyAnOwotICAgICAgICBidWZmZXJbTk9fQlJFQUtfU1BBQ0VdID0gJyAnOworICAgIHVuc2lnbmVk
IGk7CisgICAgdW5zaWduZWQgY291bnQgPSBlbmQgLSBzdGFydCArIDE7CisgICAgdW5zaWduZWQg
c2hvcnQgYnVmZmVyW0lOQ1JFTUVOVEFMX0JMT0NLX1NJWkUgKiAyICsgMl07CisgICAgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoOworCisgICAgaWYgKHN0YXJ0IDwgMHgxMDAwMCkgeworICAgICAgICBi
dWZmZXJMZW5ndGggPSBjb3VudDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgICAgICAgICBidWZmZXJbaV0gPSBpICsgc3RhcnQ7CisKKyAgICAgICAgaWYgKHN0YXJ0
ID09IDApIHsKKyAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5k
ZXIgYXQgYWxsLgorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDB4MjA7ICsraSkKKyAgICAg
ICAgICAgICAgICBidWZmZXJbaV0gPSBaRVJPX1dJRFRIX1NQQUNFOworICAgICAgICAgICAgYnVm
ZmVyWzB4N0ZdID0gWkVST19XSURUSF9TUEFDRTsKKworICAgICAgICAgICAgLy8gQnV0IFxuLCBc
dCwgYW5kIG5vbmJyZWFraW5nIHNwYWNlIG11c3QgcmVuZGVyIGFzIGEgc3BhY2UuCisgICAgICAg
ICAgICBidWZmZXJbJ1xuJ10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbJ1x0J10gPSAnICc7
CisgICAgICAgICAgICBidWZmZXJbTk9fQlJFQUtfU1BBQ0VdID0gJyAnOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyTGVuZ3RoID0gY291bnQgKiAyOworICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgaW50IGMgPSBpICsgc3Rh
cnQ7CisgICAgICAgICAgICBidWZmZXJbaSAqIDJdID0gVTE2X0xFQUQoYyk7CisgICAgICAgICAg
ICBidWZmZXJbaSAqIDIgKyAxXSA9IFUxNl9UUkFJTChjKTsKKyAgICAgICAgfQogICAgIH0KIAog
ICAgIE9TU3RhdHVzIHN0YXR1cyA9IFdLSW5pdGlhbGl6ZUdseXBoVmVjdG9yKGNvdW50LCAmZ2x5
cGhWZWN0b3IpOwpAQCAtMTMzNywyMCArMTEzOSwxOSBAQCBzdGF0aWMgdm9pZCBfZHJhd0dseXBo
cyhOU0ZvbnQgKmZvbnQsIE5TCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFtzZWxm
IF9jb252ZXJ0Q2hhcmFjdGVyczogJmJ1ZmZlclswXSBsZW5ndGg6IGNvdW50IHRvR2x5cGhzOiAm
Z2x5cGhWZWN0b3JdOworICAgIFtzZWxmIF9jb252ZXJ0Q2hhcmFjdGVyczomYnVmZmVyWzBdIGxl
bmd0aDpidWZmZXJMZW5ndGggdG9HbHlwaHM6JmdseXBoVmVjdG9yXTsKICAgICB1bnNpZ25lZCBu
dW1HbHlwaHMgPSBXS0dldEdseXBoVmVjdG9yTnVtR2x5cGhzKCZnbHlwaFZlY3Rvcik7Ci0gICAg
aWYgKG51bUdseXBocyAhPSBjb3VudCl7Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhh
cHBlbiwgcGVyaGFwcyBpbmRpY2F0ZXMgYSBiYWQgZm9udCEgIElmIGl0IGRvZXMgdGhlCi0gICAg
ICAgIC8vIGZvbnQgc3Vic3RpdHV0aW9uIGNvZGUgd2lsbCBmaW5kIGFuIGFsdGVybmF0ZSBmb250
LgorICAgIGlmIChudW1HbHlwaHMgIT0gY291bnQpIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQg
bmV2ZXIgaGFwcGVuLCBwZXJoYXBzIGluZGljYXRlcyBhIGJhZCBmb250PworICAgICAgICAvLyBJ
ZiBpdCBkb2VzIGhhcHBlbiwgdGhlIGZvbnQgc3Vic3RpdHV0aW9uIGNvZGUgd2lsbCBmaW5kIGFu
IGFsdGVybmF0ZSBmb250LgogICAgICAgICBmcmVlKG1hcCk7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLSAgICAgICAgICAgIAotICAgIG1hcC0+Z2x5cGhzID0gKEdseXBoRW50cnkgKiltYWxs
b2MgKGNvdW50ICogc2l6ZW9mKEdseXBoRW50cnkpKTsKKworICAgIG1hcC0+Z2x5cGhzID0gKEds
eXBoRW50cnkgKiljYWxsb2MoY291bnQsIHNpemVvZihHbHlwaEVudHJ5KSk7CiAgICAgZ2x5cGhS
ZWNvcmQgPSAoQVRTTGF5b3V0UmVjb3JkICopV0tHZXRHbHlwaFZlY3RvckZpcnN0UmVjb3JkKGds
eXBoVmVjdG9yKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICBt
YXAtPmdseXBoc1tpXS5nbHlwaCA9IGdseXBoUmVjb3JkLT5nbHlwaElEOwotICAgICAgICBtYXAt
PmdseXBoc1tpXS5mb250ID0gMDsKICAgICAgICAgZ2x5cGhSZWNvcmQgPSAoQVRTTGF5b3V0UmVj
b3JkICopKChjaGFyICopZ2x5cGhSZWNvcmQgKyBXS0dldEdseXBoVmVjdG9yUmVjb3JkU2l6ZShn
bHlwaFZlY3RvcikpOwogICAgIH0KICAgICBXS0NsZWFyR2x5cGhWZWN0b3IoJmdseXBoVmVjdG9y
KTsKQEAgLTEzNjQsNDAgKzExNjUsMzQgQEAgc3RhdGljIHZvaWQgX2RyYXdHbHlwaHMoTlNGb250
ICpmb250LCBOUwogICAgICAgICBsYXN0TWFwLT5uZXh0ID0gbWFwOwogICAgIH0KIAotICAgIGds
eXBoSUQgPSBtYXAtPmdseXBoc1tjIC0gc3RhcnRdLmdseXBoOwotICAgIAorICAgIEFUU0dseXBo
UmVmIGdseXBoSUQgPSBtYXAtPmdseXBoc1tjIC0gc3RhcnRdLmdseXBoOworCiAgICAgLy8gU3Bl
Y2lhbCBjYXNlIGZvciBjaGFyYWN0ZXJzIDAwN0YtMDBBMC4KLSAgICBpZiAoZ2x5cGhJRCA9PSAw
ICYmIGMgPj0gMHg3RiAmJiBjIDw9IDB4QTApewotICAgICAgICBnbHlwaElEID0gV0tHZXREZWZh
dWx0R2x5cGhGb3JDaGFyKGZvbnQsIGMpOworICAgIGlmIChnbHlwaElEID09IDAgJiYgYyA+PSAw
eDdGICYmIGMgPD0gMHhBMCkgeworICAgICAgICBnbHlwaElEID0gV0tHZXREZWZhdWx0R2x5cGhG
b3JDaGFyKGZvbnQuZm9udCwgYyk7CiAgICAgICAgIG1hcC0+Z2x5cGhzW2MgLSBzdGFydF0uZ2x5
cGggPSBnbHlwaElEOwotICAgICAgICBtYXAtPmdseXBoc1tjIC0gc3RhcnRdLmZvbnQgPSAwOwog
ICAgIH0KIAogICAgIHJldHVybiBnbHlwaElEOwogfQogCi0KLS0gKFdpZHRoTWFwICopX2V4dGVu
ZEdseXBoVG9XaWR0aE1hcFRvSW5jbHVkZTooQVRTR2x5cGhSZWYpZ2x5cGhJRCBmb250OihOU0Zv
bnQgKilzdWJGb250CistIChXaWR0aE1hcCAqKV9leHRlbmRHbHlwaFRvV2lkdGhNYXBUb0luY2x1
ZGU6KEFUU0dseXBoUmVmKWdseXBoSUQKIHsKLSAgICBXaWR0aE1hcCAqbWFwID0gKFdpZHRoTWFw
ICopY2FsbG9jICgxLCBzaXplb2YoV2lkdGhNYXApKSwgKipyb290TWFwOworICAgIFdpZHRoTWFw
ICptYXAgPSAoV2lkdGhNYXAgKiljYWxsb2MoMSwgc2l6ZW9mKFdpZHRoTWFwKSk7CiAgICAgdW5z
aWduZWQgZW5kOwogICAgIEFUU0dseXBoUmVmIHN0YXJ0OwogICAgIHVuc2lnbmVkIGJsb2NrU2l6
ZTsKICAgICB1bnNpZ25lZCBpLCBjb3VudDsKICAgICAKLSAgICBpZiAoc3ViRm9udCAmJiBzdWJG
b250ICE9IGZvbnQpCi0gICAgICAgIHJvb3RNYXAgPSAmbWFwRm9yU3Vic3RpdHV0ZUZvbnQoc2Vs
ZixzdWJGb250KS0+bWFwOwotICAgIGVsc2UKLSAgICAgICAgcm9vdE1hcCA9ICZnbHlwaFRvV2lk
dGhNYXA7Ci0gICAgICAgIAotICAgIGlmICgqcm9vdE1hcCA9PSAwKXsKLSAgICAgICAgaWYgKFso
c3ViRm9udCA/IHN1YkZvbnQgOiBmb250KSBudW1iZXJPZkdseXBoc10gPCBJTklUSUFMX0JMT0NL
X1NJWkUpCi0gICAgICAgICAgICBibG9ja1NpemUgPSBbZm9udCBudW1iZXJPZkdseXBoc107Cisg
ICAgTlNGb250ICpmID0gZm9udC5mb250OworICAgIGlmIChnbHlwaFRvV2lkdGhNYXAgPT0gTlVM
TCkgeworICAgICAgICBpZiAoW2YgbnVtYmVyT2ZHbHlwaHNdIDwgSU5JVElBTF9CTE9DS19TSVpF
KQorICAgICAgICAgICAgYmxvY2tTaXplID0gW2YgbnVtYmVyT2ZHbHlwaHNdOwogICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgYmxvY2tTaXplID0gSU5JVElBTF9CTE9DS19TSVpFOwotICAgIH0K
LSAgICBlbHNlCisgICAgfSBlbHNlIHsKICAgICAgICAgYmxvY2tTaXplID0gSU5DUkVNRU5UQUxf
QkxPQ0tfU0laRTsKKyAgICB9CiAgICAgaWYgKGJsb2NrU2l6ZSA9PSAwKSB7CiAgICAgICAgIHN0
YXJ0ID0gMDsKICAgICB9IGVsc2UgewpAQCAtMTQxMywyOCArMTIwOCwyMiBAQCBzdGF0aWMgdm9p
ZCBfZHJhd0dseXBocyhOU0ZvbnQgKmZvbnQsIE5TCiAgICAgbWFwLT5lbmRSYW5nZSA9IGVuZDsK
ICAgICBjb3VudCA9IGVuZCAtIHN0YXJ0ICsgMTsKIAotICAgIG1hcC0+d2lkdGhzID0gKFdpZHRo
RW50cnkgKiltYWxsb2MgKGNvdW50ICogc2l6ZW9mKFdpZHRoRW50cnkpKTsKKyAgICBtYXAtPndp
ZHRocyA9IChXZWJHbHlwaFdpZHRoICopbWFsbG9jKGNvdW50ICogc2l6ZW9mKFdlYkdseXBoV2lk
dGgpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgbWFwLT53aWR0
aHNbaV0gPSBVTklOSVRJQUxJWkVEX0dMWVBIX1dJRFRIOwogCi0gICAgZm9yIChpID0gMDsgaSA8
IGNvdW50OyBpKyspewotICAgICAgICBtYXAtPndpZHRoc1tpXS53aWR0aCA9IFVOSU5JVElBTEla
RURfR0xZUEhfV0lEVEg7Ci0gICAgfQotCi0gICAgaWYgKCpyb290TWFwID09IDApCi0gICAgICAg
ICpyb290TWFwID0gbWFwOworICAgIGlmIChnbHlwaFRvV2lkdGhNYXAgPT0gMCkKKyAgICAgICAg
Z2x5cGhUb1dpZHRoTWFwID0gbWFwOwogICAgIGVsc2UgewotICAgICAgICBXaWR0aE1hcCAqbGFz
dE1hcCA9ICpyb290TWFwOworICAgICAgICBXaWR0aE1hcCAqbGFzdE1hcCA9IGdseXBoVG9XaWR0
aE1hcDsKICAgICAgICAgd2hpbGUgKGxhc3RNYXAtPm5leHQgIT0gMCkKICAgICAgICAgICAgIGxh
c3RNYXAgPSBsYXN0TWFwLT5uZXh0OwogICAgICAgICBsYXN0TWFwLT5uZXh0ID0gbWFwOwogICAg
IH0KIAotI2lmZGVmIF9USU1JTkcKLSAgICBMT0coRm9udENhY2hlLCAiJUAgdG90YWwgdGltZSB0
byBhZHZhbmNlcyBsb29rdXAgJWYgc2Vjb25kcyIsIGZvbnQsIHRvdGFsQ0dHZXRBZHZhbmNlc1Rp
bWUpOwotI2VuZGlmCiAgICAgcmV0dXJuIG1hcDsKIH0KIAotCiAtICh2b2lkKV9pbml0aWFsaXpl
QVRTVVN0eWxlCiB7CiAgICAgLy8gVGhlIHR3byBOU0ZvbnQgY2FsbHMgaW4gdGhpcyBtZXRob2Qg
KHBvaW50U2l6ZSBhbmQgX2F0c0ZvbnRJRCkKQEAgLTE0NDQsMjMgKzEyMzMsMjMgQEAgc3RhdGlj
IHZvaWQgX2RyYXdHbHlwaHMoTlNGb250ICpmb250LCBOUwogICAgICAgICBPU1N0YXR1cyBzdGF0
dXM7CiAgICAgICAgIEJ5dGVDb3VudCBwcm9wVGFibGVTaXplOwogICAgICAgICAKLSAgICAgICAg
c3RhdHVzID0gQVRTVUNyZWF0ZVN0eWxlKCZfQVRTVVNzdHlsZSk7CisgICAgICAgIHN0YXR1cyA9
IEFUU1VDcmVhdGVTdHlsZSgmX0FUU1VTdHlsZSk7CiAgICAgICAgIGlmKHN0YXR1cyAhPSBub0Vy
cikKLSAgICAgICAgICAgIEZBVEFMX0FMV0FZUyAoIkFUU1VDcmVhdGVTdHlsZSBmYWlsZWQgKCVk
KSIsIHN0YXR1cyk7CisgICAgICAgICAgICBGQVRBTF9BTFdBWVMoIkFUU1VDcmVhdGVTdHlsZSBm
YWlsZWQgKCVkKSIsIHN0YXR1cyk7CiAgICAgCi0gICAgICAgIEFUU1VGb250SUQgZm9udElEID0g
V0tHZXROU0ZvbnRBVFNVRm9udElkKGZvbnQpOwotICAgICAgICBpZiAoZm9udElEID09IDApewot
ICAgICAgICAgICAgQVRTVURpc3Bvc2VTdHlsZShfQVRTVVNzdHlsZSk7Ci0gICAgICAgICAgICBF
UlJPUiAoInVuYWJsZSB0byBnZXQgQVRTVUZvbnRJRCBmb3IgJUAiLCBmb250KTsKKyAgICAgICAg
QVRTVUZvbnRJRCBmb250SUQgPSBXS0dldE5TRm9udEFUU1VGb250SWQoZm9udC5mb250KTsKKyAg
ICAgICAgaWYgKGZvbnRJRCA9PSAwKSB7CisgICAgICAgICAgICBBVFNVRGlzcG9zZVN0eWxlKF9B
VFNVU3R5bGUpOworICAgICAgICAgICAgRVJST1IoInVuYWJsZSB0byBnZXQgQVRTVUZvbnRJRCBm
b3IgJUAiLCBmb250LmZvbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5z
Zm9ybU1ha2VTY2FsZSAoMSwtMSk7Ci0gICAgICAgIEZpeGVkIGZvbnRTaXplID0gRmxvYXRUb0Zp
eGVkKFtmb250IHBvaW50U2l6ZV0pOworICAgICAgICBGaXhlZCBmb250U2l6ZSA9IEZsb2F0VG9G
aXhlZChbZm9udC5mb250IHBvaW50U2l6ZV0pOwogICAgICAgICBBVFNVQXR0cmlidXRlVGFnIHN0
eWxlVGFnc1tdID0geyBrQVRTVVNpemVUYWcsIGtBVFNVRm9udFRhZywga0FUU1VGb250TWF0cml4
VGFnfTsKICAgICAgICAgQnl0ZUNvdW50IHN0eWxlU2l6ZXNbXSA9IHsgIHNpemVvZihGaXhlZCks
IHNpemVvZihBVFNVRm9udElEKSwgc2l6ZW9mKENHQWZmaW5lVHJhbnNmb3JtKSB9OwogICAgICAg
ICBBVFNVQXR0cmlidXRlVmFsdWVQdHIgc3R5bGVWYWx1ZXNbXSA9IHsgJmZvbnRTaXplLCAmZm9u
dElELCAmdHJhbnNmb3JtICB9OwotICAgICAgICBzdGF0dXMgPSBBVFNVU2V0QXR0cmlidXRlcyAo
X0FUU1VTc3R5bGUsIDMsIHN0eWxlVGFncywgc3R5bGVTaXplcywgc3R5bGVWYWx1ZXMpOworICAg
ICAgICBzdGF0dXMgPSBBVFNVU2V0QXR0cmlidXRlcyAoX0FUU1VTdHlsZSwgMywgc3R5bGVUYWdz
LCBzdHlsZVNpemVzLCBzdHlsZVZhbHVlcyk7CiAgICAgICAgIGlmKHN0YXR1cyAhPSBub0VycikK
ICAgICAgICAgICAgIEZBVEFMX0FMV0FZUyAoIkFUU1VTZXRBdHRyaWJ1dGVzIGZhaWxlZCAoJWQp
Iiwgc3RhdHVzKTsKICAgICAgICAgc3RhdHVzID0gQVRTRm9udEdldFRhYmxlKGZvbnRJRCwgJ3By
b3AnLCAwLCAwLCAwLCAmcHJvcFRhYmxlU2l6ZSk7CkBAIC0xNDkwLDE5ICsxMjc5LDIyIEBAIHN0
YXRpYyB2b2lkIF9kcmF3R2x5cGhzKE5TRm9udCAqZm9udCwgTlMKICAgICAKICAgICBbc2VsZiBf
aW5pdGlhbGl6ZUFUU1VTdHlsZV07CiAgICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgbWlzc2lu
ZyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIHRoYXQgdGhlIENvcmVHcmFwaGljcyBjb2RlIHBhdGgg
aGFzOgotICAgIC8vIC0gQm90aCBcbiBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgcmVuZGVyIGFzIGEg
c3BhY2UuCi0gICAgLy8gLSBBbGwgb3RoZXIgY29udHJvbCBjaGFyYWN0ZXJzIG11c3Qgbm90IHJl
bmRlciBhdCBhbGwgKG90aGVyIGNvZGUgcGF0aCB1c2VzIHplcm8td2lkdGggc3BhY2VzKS4KKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyBjdXJyZW50bHkgbWlzc2luZyB0aGUgZm9sbG93aW5nIHJlcXVp
cmVkIGZlYXR1cmVzIHRoYXQgdGhlIENvcmVHcmFwaGljcyBjb2RlIHBhdGggaGFzOgorICAgIC8v
IC0gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgcmVuZGVyIGFzIGEgc3BhY2UuCisgICAg
Ly8gLSBPdGhlciBjb250cm9sIGNoYXJhY3RlcnMgZG8gbm90IHJlbmRlciAob3RoZXIgY29kZSBw
YXRoIHVzZXMgemVyby13aWR0aCBzcGFjZXMpLgorICAgIC8vIC0gU21hbGwgY2Fwcy4KKyAgICAv
LyAtIFN5bnRoZXNpemVkIGJvbGQuCisgICAgLy8gLSBTeW50aGVzaXplZCBvYmxpcXVlLgogCiAg
ICAgcnVuTGVuZ3RoID0gcnVuLT50byAtIHJ1bi0+ZnJvbTsKICAgICBzdGF0dXMgPSBBVFNVQ3Jl
YXRlVGV4dExheW91dFdpdGhUZXh0UHRyKAogICAgICAgICAgICAgcnVuLT5jaGFyYWN0ZXJzLAot
ICAgICAgICAgICAgcnVuLT5mcm9tLCAgICAgICAgICAgLy8gb2Zmc2V0Ci0gICAgICAgICAgICBy
dW5MZW5ndGgsICAgICAgICAvLyBsZW5ndGgKLSAgICAgICAgICAgIHJ1bi0+bGVuZ3RoLCAgICAg
ICAgIC8vIHRvdGFsIGxlbmd0aAorICAgICAgICAgICAgcnVuLT5mcm9tLCAgICAgIC8vIG9mZnNl
dAorICAgICAgICAgICAgcnVuTGVuZ3RoLCAgICAgIC8vIGxlbmd0aAorICAgICAgICAgICAgcnVu
LT5sZW5ndGgsICAgIC8vIHRvdGFsIGxlbmd0aAogICAgICAgICAgICAgMSwgICAgICAgICAgICAg
IC8vIHN0eWxlUnVuQ291bnQKLSAgICAgICAgICAgICZydW5MZW5ndGgsICAgIC8vIGxlbmd0aCBv
ZiBzdHlsZSBydW4KLSAgICAgICAgICAgICZfQVRTVVNzdHlsZSwgCisgICAgICAgICAgICAmcnVu
TGVuZ3RoLCAgICAgLy8gbGVuZ3RoIG9mIHN0eWxlIHJ1bgorICAgICAgICAgICAgJl9BVFNVU3R5
bGUsIAogICAgICAgICAgICAgJmxheW91dCk7CiAgICAgaWYoc3RhdHVzICE9IG5vRXJyKQogICAg
ICAgICBGQVRBTF9BTFdBWVMgKCJBVFNVQ3JlYXRlVGV4dExheW91dFdpdGhUZXh0UHRyIGZhaWxl
ZCglZCkiLCBzdGF0dXMpOwpAQCAtMTUyNiwxNiArMTMxOCwxNSBAQCBzdGF0aWMgdm9pZCBfZHJh
d0dseXBocyhOU0ZvbnQgKmZvbnQsIE5TCiAKICAgICBzdWJzdGl0dXRlT2Zmc2V0ID0gcnVuLT5m
cm9tOwogICAgIHdoaWxlICgoc3RhdHVzID0gQVRTVU1hdGNoRm9udHNUb1RleHQobGF5b3V0LCBz
dWJzdGl0dXRlT2Zmc2V0LCBrQVRTVVRvVGV4dEVuZCwgJkFUU1VTdWJzdGl0dXRlRm9udCwgJnN1
YnN0aXR1dGVPZmZzZXQsICZzdWJzdGl0dXRlTGVuZ3RoKSkgPT0ga0FUU1VGb250c01hdGNoZWQg
fHwgc3RhdHVzID09IGtBVFNVRm9udHNOb3RNYXRjaGVkKSB7Ci0gICAgICAgIE5TRm9udCAqc3Vi
c3RpdHV0ZUZvbnQgPSBbc2VsZiBfc3Vic3RpdHV0ZUZvbnRGb3JDaGFyYWN0ZXJzOnJ1bi0+Y2hh
cmFjdGVycytzdWJzdGl0dXRlT2Zmc2V0IGxlbmd0aDpzdWJzdGl0dXRlTGVuZ3RoIGZhbWlsaWVz
OnN0eWxlLT5mYW1pbGllc107Ci0gICAgICAgIGlmIChzdWJzdGl0dXRlRm9udCkgewotICAgICAg
ICAgICAgV2ViVGV4dFJlbmRlcmVyICpzdWJzdGl0dXRlUmVuZGVyZXIgPSBbW1dlYlRleHRSZW5k
ZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVuZGVyZXJXaXRoRm9udDpzdWJzdGl0dXRlRm9u
dCB1c2luZ1ByaW50ZXJGb250OnVzaW5nUHJpbnRlckZvbnRdOworICAgICAgICBXZWJUZXh0UmVu
ZGVyZXIgKnN1YnN0aXR1dGVSZW5kZXJlciA9IFtzZWxmIHN1YnN0aXR1dGVSZW5kZXJlckZvckNo
YXJhY3RlcnM6cnVuLT5jaGFyYWN0ZXJzK3N1YnN0aXR1dGVPZmZzZXQgbGVuZ3RoOnN1YnN0aXR1
dGVMZW5ndGggZmFtaWxpZXM6c3R5bGUtPmZhbWlsaWVzXTsKKyAgICAgICAgaWYgKHN1YnN0aXR1
dGVSZW5kZXJlcikgewogICAgICAgICAgICAgW3N1YnN0aXR1dGVSZW5kZXJlciBfaW5pdGlhbGl6
ZUFUU1VTdHlsZV07Ci0gICAgICAgICAgICBpZiAoc3Vic3RpdHV0ZVJlbmRlcmVyICYmIHN1YnN0
aXR1dGVSZW5kZXJlci0+X0FUU1VTc3R5bGUpCi0gICAgICAgICAgICAgICAgQVRTVVNldFJ1blN0
eWxlKGxheW91dCwgc3Vic3RpdHV0ZVJlbmRlcmVyLT5fQVRTVVNzdHlsZSwgc3Vic3RpdHV0ZU9m
ZnNldCwgc3Vic3RpdHV0ZUxlbmd0aCk7CisgICAgICAgICAgICBpZiAoc3Vic3RpdHV0ZVJlbmRl
cmVyICYmIHN1YnN0aXR1dGVSZW5kZXJlci0+X0FUU1VTdHlsZSkKKyAgICAgICAgICAgICAgICBB
VFNVU2V0UnVuU3R5bGUobGF5b3V0LCBzdWJzdGl0dXRlUmVuZGVyZXItPl9BVFNVU3R5bGUsIHN1
YnN0aXR1dGVPZmZzZXQsIHN1YnN0aXR1dGVMZW5ndGgpOwogICAgICAgICAgICAgLy8gaWdub3Jp
bmcgZXJyb3JzCiAgICAgICAgIH0KICAgICAgICAgc3Vic3RpdHV0ZU9mZnNldCArPSBzdWJzdGl0
dXRlTGVuZ3RoOwotICAgIH07CisgICAgfQogICAgIC8vIGlnbm9yaW5nIGVycm9ycyBpbiBmb250
IHN1YnN0aXR1dGlvbgogICAgICAgICAKICAgICByZXR1cm4gbGF5b3V0OwpAQCAtMTc2NCw3ICsx
NTU1LDYgQEAgc3RhdGljIFdlYkNvcmVUZXh0UnVuIGFwcGx5TWlycm9yaW5nVG9SdQogICAgIC8v
IF9jcmVhdGVBVFNVVGV4dExheW91dEZvclJ1bjouIFRoaXMgaXMgZXhjZXB0aW9uLXNhZmUuCiAK
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOwotICAgIFVuaUNoYXJBcnJheU9mZnNldCBwcmltYXJ5
T2Zmc2V0ID0gMDsKICAgICBVbmlDaGFyQXJyYXlPZmZzZXQgc2Vjb25kYXJ5T2Zmc2V0ID0gMDsK
ICAgICBPU1N0YXR1cyBzdGF0dXM7CiAgICAgQm9vbGVhbiBpc0xlYWRpbmc7CkBAIC0xNzkyLDcg
KzE1ODIsNyBAQCBzdGF0aWMgV2ViQ29yZVRleHRSdW4gYXBwbHlNaXJyb3JpbmdUb1J1CiAgICAg
QVRTVUxheW91dFBhcmFtZXRlcnMgcGFyYW1zOwogICAgIGNyZWF0ZUFUU1VMYXlvdXRQYXJhbWV0
ZXJzKCZwYXJhbXMsIHNlbGYsIGFSdW4sIHN0eWxlKTsKIAotICAgIHByaW1hcnlPZmZzZXQgPSBh
UnVuLT5mcm9tOworICAgIFVuaUNoYXJBcnJheU9mZnNldCBwcmltYXJ5T2Zmc2V0ID0gYVJ1bi0+
ZnJvbTsKICAgICAKICAgICAvLyBGSVhNRTogTm8gaWRlYSBob3cgdG8gYXZvaWQgaW5jbHVkaW5n
IHBhcnRpYWwgZ2x5cGhzLiAgIE5vdCBldmVuIHN1cmUgaWYgdGhhdCdzIHRoZSBiZWhhdmlvcgog
ICAgIC8vIHRoaXMgeWllbGRzIG5vdy4KQEAgLTE4MDYsOSArMTU5Niw4IEBAIHN0YXRpYyBXZWJD
b3JlVGV4dFJ1biBhcHBseU1pcnJvcmluZ1RvUnUKICAgICAgICAKICAgICBkaXNwb3NlQVRTVUxh
eW91dFBhcmFtZXRlcnMoJnBhcmFtcyk7CiAgICAgCi0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb25h
bE92ZXJyaWRlIHx8IChzdHlsZS0+cnRsICYmICFBVFNVTWlycm9ycykpIHsKKyAgICBpZiAoc3R5
bGUtPmRpcmVjdGlvbmFsT3ZlcnJpZGUgfHwgKHN0eWxlLT5ydGwgJiYgIUFUU1VNaXJyb3JzKSkK
ICAgICAgICAgZnJlZSAoKHZvaWQgKilzd2FwcGVkUnVuLmNoYXJhY3RlcnMpOwotICAgIH0KIAog
ICAgIHJldHVybiBvZmZzZXQgLSBhUnVuLT5mcm9tOwogfQpAQCAtMTgyNiw3ICsxNjE1LDcgQEAg
c3RhdGljIFdlYkNvcmVUZXh0UnVuIGFwcGx5TWlycm9yaW5nVG9SdQogICAgICAgICB3aWR0aCA9
IFtzZWxmIGZsb2F0V2lkdGhGb3JSdW46cnVuIHN0eWxlOnN0eWxlIHdpZHRoczpuaWxdOwogICAg
ICAgICBkZWx0YSAtPSB3aWR0aDsKICAgICAgICAgd2hpbGUgKG9mZnNldCA8IHJ1bi0+bGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBmbG9hdCB3ID0gd2lkdGhGb3JOZXh0Q2hhcmFjdGVyKCZ3aWR0aEl0
ZXJhdG9yLCAwLCAwKTsKKyAgICAgICAgICAgIGZsb2F0IHcgPSB3aWR0aEZvck5leHRDaGFyYWN0
ZXIoJndpZHRoSXRlcmF0b3IsIE5VTEwsIE5VTEwpOwogICAgICAgICAgICAgaWYgKHcgPT0gSU5W
QUxJRF9XSURUSCkgewogICAgICAgICAgICAgICAgIC8vIFNvbWV0aGluZyB2ZXJ5IGJhZCBoYXBw
ZW5lZCwgbGlrZSB3ZSBvbmx5IGhhdmUgaGFsZiBvZiBhIHN1cnJvZ2F0ZSBwYWlyLgogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTg0Niw3ICsxNjM1LDcgQEAgc3RhdGljIFdlYkNvcmVUZXh0
UnVuIGFwcGx5TWlycm9yaW5nVG9SdQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAg
d2hpbGUgKG9mZnNldCA8IHJ1bi0+bGVuZ3RoKSB7Ci0gICAgICAgICAgICBmbG9hdCB3ID0gd2lk
dGhGb3JOZXh0Q2hhcmFjdGVyKCZ3aWR0aEl0ZXJhdG9yLCAwLCAwKTsKKyAgICAgICAgICAgIGZs
b2F0IHcgPSB3aWR0aEZvck5leHRDaGFyYWN0ZXIoJndpZHRoSXRlcmF0b3IsIE5VTEwsIE5VTEwp
OwogICAgICAgICAgICAgaWYgKHcgPT0gSU5WQUxJRF9XSURUSCkgewogICAgICAgICAgICAgICAg
IC8vIFNvbWV0aGluZyB2ZXJ5IGJhZCBoYXBwZW5lZCwgbGlrZSB3ZSBvbmx5IGhhdmUgaGFsZiBv
ZiBhIHN1cnJvZ2F0ZSBwYWlyLgogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg4Myw3ICsx
NjcyLDYgQEAgc3RhdGljIHZvaWQgZnJlZVdpZHRoTWFwKFdpZHRoTWFwICptYXApCiAgICAgfQog
fQogCi0KIHN0YXRpYyB2b2lkIGZyZWVHbHlwaE1hcChHbHlwaE1hcCAqbWFwKQogewogICAgIHdo
aWxlIChtYXApIHsKQEAgLTE4OTQsNzggKzE2ODIsMjYgQEAgc3RhdGljIHZvaWQgZnJlZUdseXBo
TWFwKEdseXBoTWFwICptYXApCiAgICAgfQogfQogCi0KLXN0YXRpYyB2b2lkIGZyZWVVbmljb2Rl
R2x5cGhNYXAoVW5pY29kZUdseXBoTWFwICptYXApCi17Ci0gICAgd2hpbGUgKG1hcCkgewotICAg
ICAgICBVbmljb2RlR2x5cGhNYXAgKm5leHQgPSBtYXAtPm5leHQ7Ci0gICAgICAgIGZyZWUobWFw
LT5nbHlwaHMpOwotICAgICAgICBmcmVlKG1hcCk7Ci0gICAgICAgIG1hcCA9IG5leHQ7Ci0gICAg
fQotfQotCi0KLXN0YXRpYyBpbmxpbmUgQVRTR2x5cGhSZWYgZ2x5cGhGb3JDaGFyYWN0ZXIgKEds
eXBoTWFwICptYXAsIFVuaUNoYXIgYywgTlNGb250ICoqZm9udCkKK3N0YXRpYyBpbmxpbmUgQVRT
R2x5cGhSZWYgZ2x5cGhGb3JDaGFyYWN0ZXIoR2x5cGhNYXAgKm1hcCwgVW5pY29kZUNoYXIgYywg
V2ViVGV4dFJlbmRlcmVyICoqcmVuZGVyZXIpCiB7CiAgICAgaWYgKG1hcCA9PSAwKQogICAgICAg
ICByZXR1cm4gbm9uR2x5cGhJRDsKICAgICAKICAgICAvLyB0aGlzIGxvb3AgaXMgaG90LCBzbyBp
dCBpcyB3cml0dGVuIHRvIGF2b2lkIExTVSBzdGFsbHMKICAgICB3aGlsZSAobWFwKSB7Ci0gICAg
ICAgIFVuaUNoYXIgc3RhcnQgPSBtYXAtPnN0YXJ0UmFuZ2U7CisgICAgICAgIFVuaWNvZGVDaGFy
IHN0YXJ0ID0gbWFwLT5zdGFydFJhbmdlOwogICAgICAgICBHbHlwaE1hcCAqbmV4dE1hcCA9IG1h
cC0+bmV4dDsKLSAgICAgICAgaWYgKGMgPj0gc3RhcnQgJiYgYyA8PSBtYXAtPmVuZFJhbmdlKXsK
LSAgICAgICAgICAgIEdseXBoRW50cnkgKmdlID0gJm1hcC0+Z2x5cGhzW2Mtc3RhcnRdOwotICAg
ICAgICAgICAgKmZvbnQgPSBnZS0+Zm9udDsKKyAgICAgICAgaWYgKGMgPj0gc3RhcnQgJiYgYyA8
PSBtYXAtPmVuZFJhbmdlKSB7CisgICAgICAgICAgICBHbHlwaEVudHJ5ICpnZSA9ICZtYXAtPmds
eXBoc1tjIC0gc3RhcnRdOworICAgICAgICAgICAgV2ViVGV4dFJlbmRlcmVyICpzdWJzdGl0dXRl
UmVuZGVyZXIgPSBnZS0+c3Vic3RpdHV0ZVJlbmRlcmVyOworICAgICAgICAgICAgaWYgKHN1YnN0
aXR1dGVSZW5kZXJlcikKKyAgICAgICAgICAgICAgICAqcmVuZGVyZXIgPSBzdWJzdGl0dXRlUmVu
ZGVyZXI7CiAgICAgICAgICAgICByZXR1cm4gZ2UtPmdseXBoOwogICAgICAgICB9CiAgICAgICAg
IG1hcCA9IG5leHRNYXA7CiAgICAgfQotICAgIHJldHVybiBub25HbHlwaElEOwotfQotIAotIAot
c3RhdGljIGlubGluZSBBVFNHbHlwaFJlZiBnbHlwaEZvclVuaWNvZGVDaGFyYWN0ZXIgKFVuaWNv
ZGVHbHlwaE1hcCAqbWFwLCBVbmljb2RlQ2hhciBjLCBOU0ZvbnQgKipmb250KQotewotICAgIGlm
IChtYXAgPT0gMCkKLSAgICAgICAgcmV0dXJuIG5vbkdseXBoSUQ7Ci0gICAgICAgIAotICAgIHdo
aWxlIChtYXApIHsKLSAgICAgICAgaWYgKGMgPj0gbWFwLT5zdGFydFJhbmdlICYmIGMgPD0gbWFw
LT5lbmRSYW5nZSl7Ci0gICAgICAgICAgICAqZm9udCA9IG1hcC0+Z2x5cGhzW2MtbWFwLT5zdGFy
dFJhbmdlXS5mb250OwotICAgICAgICAgICAgcmV0dXJuIG1hcC0+Z2x5cGhzW2MtbWFwLT5zdGFy
dFJhbmdlXS5nbHlwaDsKLSAgICAgICAgfQotICAgICAgICBtYXAgPSBtYXAtPm5leHQ7Ci0gICAg
fQotICAgIHJldHVybiBub25HbHlwaElEOwotfQotIAotCi0jaWZkZWYgX1RJTUlORyAgICAgICAg
Ci1zdGF0aWMgZG91YmxlIHRvdGFsQ0dHZXRBZHZhbmNlc1RpbWUgPSAwOwotI2VuZGlmCiAKLXN0
YXRpYyBpbmxpbmUgU3Vic3RpdHV0ZUZvbnRXaWR0aE1hcCAqbWFwRm9yU3Vic3RpdHV0ZUZvbnQo
V2ViVGV4dFJlbmRlcmVyICpyZW5kZXJlciwgTlNGb250ICpmb250KQotewotICAgIGludCBpOwot
ICAgIAotICAgIGZvciAoaSA9IDA7IGkgPCByZW5kZXJlci0+bnVtU3Vic3RpdHV0ZUZvbnRXaWR0
aE1hcHM7IGkrKyl7Ci0gICAgICAgIGlmIChmb250ID09IHJlbmRlcmVyLT5zdWJzdGl0dXRlRm9u
dFdpZHRoTWFwc1tpXS5mb250KQotICAgICAgICAgICAgcmV0dXJuICZyZW5kZXJlci0+c3Vic3Rp
dHV0ZUZvbnRXaWR0aE1hcHNbaV07Ci0gICAgfQotICAgIAotICAgIGlmIChyZW5kZXJlci0+bnVt
U3Vic3RpdHV0ZUZvbnRXaWR0aE1hcHMgPT0gcmVuZGVyZXItPm1heFN1YnN0aXR1dGVGb250V2lk
dGhNYXBzKXsKLSAgICAgICAgcmVuZGVyZXItPm1heFN1YnN0aXR1dGVGb250V2lkdGhNYXBzID0g
cmVuZGVyZXItPm1heFN1YnN0aXR1dGVGb250V2lkdGhNYXBzICogMjsKLSAgICAgICAgcmVuZGVy
ZXItPnN1YnN0aXR1dGVGb250V2lkdGhNYXBzID0gcmVhbGxvYyAocmVuZGVyZXItPnN1YnN0aXR1
dGVGb250V2lkdGhNYXBzLCByZW5kZXJlci0+bWF4U3Vic3RpdHV0ZUZvbnRXaWR0aE1hcHMgKiBz
aXplb2YoU3Vic3RpdHV0ZUZvbnRXaWR0aE1hcCkpOwotICAgICAgICBmb3IgKGkgPSByZW5kZXJl
ci0+bnVtU3Vic3RpdHV0ZUZvbnRXaWR0aE1hcHM7IGkgPCByZW5kZXJlci0+bWF4U3Vic3RpdHV0
ZUZvbnRXaWR0aE1hcHM7IGkrKyl7Ci0gICAgICAgICAgICByZW5kZXJlci0+c3Vic3RpdHV0ZUZv
bnRXaWR0aE1hcHNbaV0uZm9udCA9IDA7Ci0gICAgICAgICAgICByZW5kZXJlci0+c3Vic3RpdHV0
ZUZvbnRXaWR0aE1hcHNbaV0ubWFwID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBy
ZW5kZXJlci0+c3Vic3RpdHV0ZUZvbnRXaWR0aE1hcHNbcmVuZGVyZXItPm51bVN1YnN0aXR1dGVG
b250V2lkdGhNYXBzXS5mb250ID0gZm9udDsKLSAgICByZXR1cm4gJnJlbmRlcmVyLT5zdWJzdGl0
dXRlRm9udFdpZHRoTWFwc1tyZW5kZXJlci0+bnVtU3Vic3RpdHV0ZUZvbnRXaWR0aE1hcHMrK107
CisgICAgcmV0dXJuIG5vbkdseXBoSUQ7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVDaGFy
YWN0ZXJXaWR0aEl0ZXJhdG9yIChDaGFyYWN0ZXJXaWR0aEl0ZXJhdG9yICppdGVyYXRvciwgV2Vi
VGV4dFJlbmRlcmVyICpyZW5kZXJlciwgY29uc3QgV2ViQ29yZVRleHRSdW4gKnJ1biAsIGNvbnN0
IFdlYkNvcmVUZXh0U3R5bGUgKnN0eWxlKSAKQEAgLTIwMDUsOSArMTc0MSw4IEBAIHN0YXRpYyB2
b2lkIGluaXRpYWxpemVDaGFyYWN0ZXJXaWR0aEl0ZXIKICAgICAgICAgQ2hhcmFjdGVyV2lkdGhJ
dGVyYXRvciBzdGFydFBvc2l0aW9uSXRlcmF0b3I7CiAgICAgICAgIGluaXRpYWxpemVDaGFyYWN0
ZXJXaWR0aEl0ZXJhdG9yICgmc3RhcnRQb3NpdGlvbkl0ZXJhdG9yLCByZW5kZXJlciwgJnN0YXJ0
UG9zaXRpb25SdW4sIHN0eWxlKTsKICAgICAgICAgCi0gICAgICAgIHdoaWxlIChzdGFydFBvc2l0
aW9uSXRlcmF0b3IuY3VycmVudENoYXJhY3RlciA8ICh1bnNpZ25lZClzdGFydFBvc2l0aW9uUnVu
LnRvKXsKLSAgICAgICAgICAgIHdpZHRoRm9yTmV4dENoYXJhY3Rlcigmc3RhcnRQb3NpdGlvbkl0
ZXJhdG9yLCAwLCAwKTsKLSAgICAgICAgfQorICAgICAgICB3aGlsZSAoc3RhcnRQb3NpdGlvbkl0
ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIgPCAodW5zaWduZWQpc3RhcnRQb3NpdGlvblJ1bi50bykK
KyAgICAgICAgICAgIHdpZHRoRm9yTmV4dENoYXJhY3Rlcigmc3RhcnRQb3NpdGlvbkl0ZXJhdG9y
LCBOVUxMLCBOVUxMKTsKICAgICAgICAgaXRlcmF0b3ItPndpZHRoVG9TdGFydCA9IHN0YXJ0UG9z
aXRpb25JdGVyYXRvci5ydW5XaWR0aFNvRmFyOwogICAgIH0KICAgICBlbHNlCkBAIC0yMDM2LDE5
ICsxNzcxLDE1IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgY2VpbEN1cnJlbnRXaWR0aCAoQ2gKICAg
ICByZXR1cm4gZGVsdGE7CiB9CiAKLS8vIEFjY29yZGluZyB0byBodHRwOi8vd3d3LnVuaWNvZGUu
b3JnL1B1YmxpYy9VTklEQVRBL1VDRC5odG1sI0Nhbm9uaWNhbF9Db21iaW5pbmdfQ2xhc3NfVmFs
dWVzCi0jZGVmaW5lIEhJUkFHQU5BX0tBVEFLQU5BX1ZPSUNJTkdfTUFSS1MgOAotCiAvLyBSZXR1
cm4gSU5WQUxJRF9XSURUSCBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCBvciB3ZSdyZSBhdCB0
aGUgZW5kIG9mIHRoZSByYW5nZSBpbiB0aGUgcnVuLgotc3RhdGljIGZsb2F0IHdpZHRoRm9yTmV4
dENoYXJhY3RlcihDaGFyYWN0ZXJXaWR0aEl0ZXJhdG9yICppdGVyYXRvciwgQVRTR2x5cGhSZWYg
KmdseXBoVXNlZCwgTlNGb250ICoqZm9udFVzZWQpCitzdGF0aWMgZmxvYXQgd2lkdGhGb3JOZXh0
Q2hhcmFjdGVyKENoYXJhY3RlcldpZHRoSXRlcmF0b3IgKml0ZXJhdG9yLCBBVFNHbHlwaFJlZiAq
Z2x5cGhVc2VkLCBXZWJUZXh0UmVuZGVyZXIgKipyZW5kZXJlclVzZWQpCiB7CiAgICAgV2ViVGV4
dFJlbmRlcmVyICpyZW5kZXJlciA9IGl0ZXJhdG9yLT5yZW5kZXJlcjsKICAgICBjb25zdCBXZWJD
b3JlVGV4dFJ1biAqcnVuID0gaXRlcmF0b3ItPnJ1bjsKICAgICBjb25zdCBXZWJDb3JlVGV4dFN0
eWxlICpzdHlsZSA9IGl0ZXJhdG9yLT5zdHlsZTsKICAgICB1bnNpZ25lZCBjdXJyZW50Q2hhcmFj
dGVyID0gaXRlcmF0b3ItPmN1cnJlbnRDaGFyYWN0ZXI7CiAKLSAgICBOU0ZvbnQgKl9mb250VXNl
ZCA9IG5pbDsKLSAgICBBVFNHbHlwaFJlZiBfZ2x5cGhVc2VkID0gbmlsOworICAgIEFUU0dseXBo
UmVmIGdseXBoID0gMDsKICAgICAKICAgICAvLyBDaGVjayBmb3IgZW5kIG9mIHJ1bi4KICAgICBp
ZiAoY3VycmVudENoYXJhY3RlciA+PSAodW5zaWduZWQpcnVuLT50bykKQEAgLTIwNjYsNDYgKzE3
OTcsMjcgQEAgc3RhdGljIGZsb2F0IHdpZHRoRm9yTmV4dENoYXJhY3RlcihDaGFyYQogICAgIHVu
c2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAxOwogICAgIGlmIChVMTZfSVNfTEVBRChjKSkgewogICAg
ICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbm90aGVyIGNoYXJhY3RlciBhbmQgaXQncyBhIGxv
dyBzdXJyb2dhdGUuCi0gICAgICAgIFVuaUNoYXIgbG93OwotICAgICAgICBpZiAoY3VycmVudENo
YXJhY3RlciArIDEgPj0gcnVuLT5sZW5ndGggfHwgIVUxNl9JU19UUkFJTCgobG93ID0gY3BbMV0p
KSkgewotICAgICAgICAgICAgLy8gRXJyb3IhICBUaGUgc2Vjb25kIGNvbXBvbmVudCBvZiB0aGUg
c3Vycm9nYXRlIHBhaXIgaXMgbWlzc2luZy4KKyAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIg
KyAxID49IHJ1bi0+bGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfV0lEVEg7Cisg
ICAgICAgIFVuaUNoYXIgbG93ID0gY3BbMV07CisgICAgICAgIGlmICghVTE2X0lTX1RSQUlMKGxv
dykpCiAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9XSURUSDsKLSAgICAgICAgfQotCiAgICAg
ICAgIGMgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoYywgbG93KTsKICAgICAgICAgY2x1c3Rlckxl
bmd0aCA9IDI7CiAgICAgfQogCi0gICAgLy8gSWYgc21hbGwtY2FwcyBjb252ZXJ0IGxvd2VyY2Fz
ZSB0byB1cHBlci4KLSAgICBCT09MIHVzZVNtYWxsQ2Fwc0ZvbnQgPSBOTzsKLSAgICBpZiAocmVu
ZGVyZXItPmlzU21hbGxDYXBzUmVuZGVyZXIpIHsKLSAgICAgICAgaWYgKCF1X2lzVVVwcGVyY2Fz
ZShjKSkgewotICAgICAgICAgICAgLy8gT25seSB1c2Ugc21hbGwgY2FwIGZvbnQgaWYgdGhlIHRo
ZSB1cHBlcmNhc2UgdmVyc2lvbiBvZiB0aGUgY2hhcmFjdGVyCi0gICAgICAgICAgICAvLyBpcyBk
aWZmZXJlbnQgdGhhbiB0aGUgbG93ZXJjYXNlLgotICAgICAgICAgICAgVW5pY29kZUNoYXIgbmV3
QyA9IHVfdG91cHBlcihjKTsKLSAgICAgICAgICAgIGlmIChuZXdDICE9IGMpIHsKLSAgICAgICAg
ICAgICAgICB1c2VTbWFsbENhcHNGb250ID0gWUVTOwotICAgICAgICAgICAgICAgIGMgPSBuZXdD
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIERlYWwgd2l0
aCBIaXJhZ2FuYSBhbmQgS2F0YWthbmEgdm9pY2VkIGFuZCBzZW1pLXZvaWNlZCBzeWxsYWJsZXMu
ICBOb3JtYWxpemUgaW50bwotICAgIC8vIGNvbXBvc2VkIGZvcm0sIGFuZCB0aGVuIGxvb2sgZm9y
IGdseXBoIHdpdGggYmFzZSArIGNvbWJpbmVkIG1hcmsuCi0gICAgaWYgKGMgPj0gMHgzMDQxICYm
IGMgPD0gMHgzMEZFKSB7IC8vIEVhcmx5IG91dCB0byBtaW5pbWl6ZSBwZXJmb3JtYW5jZSBpbXBh
Y3QuICBEbyB3ZSBoYXZlIGEgSGlyYWdhbmEvS2F0YWthbmEgY2hhcmFjdGVyPworICAgIC8vIERl
YWwgd2l0aCBIaXJhZ2FuYSBhbmQgS2F0YWthbmEgdm9pY2VkIGFuZCBzZW1pLXZvaWNlZCBzeWxs
YWJsZXMuCisgICAgLy8gTm9ybWFsaXplIGludG8gY29tcG9zZWQgZm9ybSwgYW5kIHRoZW4gbG9v
ayBmb3IgZ2x5cGggd2l0aCBiYXNlICsgY29tYmluZWQgbWFyay4KKyAgICBpZiAoYyA+PSAweDMw
NDEgJiYgYyA8PSAweDMwRkUpIHsgLy8gRWFybHkgb3V0IHRvIG1pbmltaXplIHBlcmZvcm1hbmNl
IGltcGFjdC4gRG8gd2UgaGF2ZSBhIEhpcmFnYW5hL0thdGFrYW5hIGNoYXJhY3Rlcj8KICAgICAg
ICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgPCAodW5zaWduZWQpcnVuLT50bykgewogICAgICAgICAg
ICAgVW5pY29kZUNoYXIgbmV4dENoYXJhY3RlciA9IHJ1bi0+Y2hhcmFjdGVyc1tjdXJyZW50Q2hh
cmFjdGVyKzFdOwogICAgICAgICAgICAgaWYgKHVfZ2V0Q29tYmluaW5nQ2xhc3MobmV4dENoYXJh
Y3RlcikgPT0gSElSQUdBTkFfS0FUQUtBTkFfVk9JQ0lOR19NQVJLUykgewotICAgICAgICAgICAg
ICAgIFVDaGFyIG5vcm1hbGl6ZWRDaGFyYWN0ZXJzWzJdID0geyAwLCAwIH07Ci0gICAgICAgICAg
ICAgICAgVUVycm9yQ29kZSB1U3RhdHVzID0gMDsKLSAgICAgICAgICAgICAgICBpbnQzMl90IHJl
c3VsdExlbmd0aDsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBOb3JtYWxp
emUgaW50byBjb21wb3NlZCBmb3JtIHVzaW5nIDMuMiBydWxlcy4KLSAgICAgICAgICAgICAgICBy
ZXN1bHRMZW5ndGggPSB1bm9ybV9ub3JtYWxpemUoJnJ1bi0+Y2hhcmFjdGVyc1tjdXJyZW50Q2hh
cmFjdGVyXSwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5PUk1fTkZDLCBV
Tk9STV9VTklDT0RFXzNfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5vcm1h
bGl6ZWRDaGFyYWN0ZXJzWzBdLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
dVN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdExlbmd0aCA9PSAxICYmIHVTdGF0
dXMgPT0gMCl7CisgICAgICAgICAgICAgICAgVUNoYXIgbm9ybWFsaXplZENoYXJhY3RlcnNbMl0g
PSB7IDAsIDAgfTsKKyAgICAgICAgICAgICAgICBVRXJyb3JDb2RlIHVTdGF0dXMgPSAwOyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJlc3VsdExlbmd0aCA9IHVub3Jt
X25vcm1hbGl6ZSgmcnVuLT5jaGFyYWN0ZXJzW2N1cnJlbnRDaGFyYWN0ZXJdLCAyLAorICAgICAg
ICAgICAgICAgICAgICBVTk9STV9ORkMsIFVOT1JNX1VOSUNPREVfM18yLCAmbm9ybWFsaXplZENo
YXJhY3RlcnNbMF0sIDIsICZ1U3RhdHVzKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0TGVu
Z3RoID09IDEgJiYgdVN0YXR1cyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGMgPSBub3Jt
YWxpemVkQ2hhcmFjdGVyc1swXTsKICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlckxlbmd0aCA9
IDI7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjExMyw1MiArMTgyNSwzOSBAQCBzdGF0aWMgZmxv
YXQgd2lkdGhGb3JOZXh0Q2hhcmFjdGVyKENoYXJhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAoc3R5bGUtPnJ0bCkgeworICAgIGlmIChzdHlsZS0+cnRsKQogICAgICAgICBjID0gdV9jaGFy
TWlycm9yKGMpOwotICAgIH0KICAgICAKLSAgICBpZiAoYyA8PSAweEZGRkYpIHsKLSAgICAgICAg
X2dseXBoVXNlZCA9IGdseXBoRm9yQ2hhcmFjdGVyKHJlbmRlcmVyLT5jaGFyYWN0ZXJUb0dseXBo
TWFwLCBjLCAmX2ZvbnRVc2VkKTsKLSAgICAgICAgaWYgKF9nbHlwaFVzZWQgPT0gbm9uR2x5cGhJ
RCkgewotICAgICAgICAgICAgX2dseXBoVXNlZCA9IFtyZW5kZXJlciBfZXh0ZW5kQ2hhcmFjdGVy
VG9HbHlwaE1hcFRvSW5jbHVkZTpjXTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IF9nbHlwaFVzZWQgPSBnbHlwaEZvclVuaWNvZGVDaGFyYWN0ZXIocmVuZGVyZXItPnVuaWNvZGVD
aGFyYWN0ZXJUb0dseXBoTWFwLCBjLCAmX2ZvbnRVc2VkKTsKLSAgICAgICAgaWYgKF9nbHlwaFVz
ZWQgPT0gbm9uR2x5cGhJRCkgewotICAgICAgICAgICAgX2dseXBoVXNlZCA9IFtyZW5kZXJlciBf
ZXh0ZW5kVW5pY29kZUNoYXJhY3RlclRvR2x5cGhNYXBUb0luY2x1ZGU6Y107Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UncmUgcmVuZGVyaW5nIGluICdzbWFs
bC1jYXBzJyBtb2RlLgotICAgIC8vIEFTU1VNUFRJT046ICBXZSBhc3N1bWUgdGhlIHNhbWUgZm9u
dCBpbiBhIHNtYWxsZXIgc2l6ZSBoYXMKLSAgICAvLyB0aGUgc2FtZSBnbHlwaHMgYXMgdGhlIGxh
cmdlIGZvbnQuCi0gICAgaWYgKHVzZVNtYWxsQ2Fwc0ZvbnQpIHsKLSAgICAgICAgaWYgKF9mb250
VXNlZCA9PSBuaWwpCi0gICAgICAgICAgICBfZm9udFVzZWQgPSBbcmVuZGVyZXIgX3NtYWxsQ2Fw
c0ZvbnRdOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFBvdGVudGlhbCBmb3Igb3B0
aW1pemF0aW9uLiAgVGhpcyBwYXRoIHNob3VsZCBvbmx5IGJlIHRha2VuIGlmIHdlJ3JlCi0gICAg
ICAgICAgICAvLyB1c2luZyBhIGNhY2hlZCBzdWJzdGl0dXRlZCBmb250LgotICAgICAgICAgICAg
X2ZvbnRVc2VkID0gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9u
dDpfZm9udFVzZWQgdG9TaXplOltfZm9udFVzZWQgcG9pbnRTaXplXSAqIFNNQUxMQ0FQU19GT05U
U0laRV9NVUxUSVBMSUVSXTsKKyAgICAvLyBJZiBzbWFsbC1jYXBzLCBjb252ZXJ0IGxvd2VyY2Fz
ZSB0byB1cHBlci4KKyAgICBpZiAoc3R5bGUtPnNtYWxsQ2FwcyAmJiAhdV9pc1VVcHBlcmNhc2Uo
YykpIHsKKyAgICAgICAgVW5pY29kZUNoYXIgbmV3QyA9IHVfdG91cHBlcihjKTsKKyAgICAgICAg
aWYgKG5ld0MgIT0gYykgeworICAgICAgICAgICAgYyA9IG5ld0M7CisgICAgICAgICAgICByZW5k
ZXJlciA9IFtyZW5kZXJlciBzbWFsbENhcHNSZW5kZXJlcl07CiAgICAgICAgIH0KICAgICB9Cisg
ICAgCisgICAgZ2x5cGggPSBnbHlwaEZvckNoYXJhY3RlcihyZW5kZXJlci0+Y2hhcmFjdGVyVG9H
bHlwaE1hcCwgYywgJnJlbmRlcmVyKTsKKyAgICBpZiAoZ2x5cGggPT0gbm9uR2x5cGhJRCkKKyAg
ICAgICAgZ2x5cGggPSBbcmVuZGVyZXIgZXh0ZW5kQ2hhcmFjdGVyVG9HbHlwaE1hcFRvSW5jbHVk
ZTpjXTsKIAogICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgZ2x5cGggYW5kIGZvbnQsIGdldCBpdHMg
d2lkdGguCiAgICAgV2ViR2x5cGhXaWR0aCB3aWR0aDsKICAgICBpZiAoc3R5bGUtPnRhYldpZHRo
ICE9IDAuMEYgJiYgYyA9PSAnXHQnKSB7CiAgICAgICAgIHdpZHRoID0gc3R5bGUtPnRhYldpZHRo
IC0gZm1vZGYoc3R5bGUtPnhwb3MraXRlcmF0b3ItPnJ1bldpZHRoU29GYXIsIHN0eWxlLT50YWJX
aWR0aCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgd2lkdGggPSB3aWR0aEZvckdseXBoKHJlbmRl
cmVyLCBfZ2x5cGhVc2VkLCBfZm9udFVzZWQpOworICAgICAgICB3aWR0aCA9IHdpZHRoRm9yR2x5
cGgocmVuZGVyZXIsIGdseXBoKTsKICAgICAgICAgLy8gV2Ugc3BlY2lhbCBjYXNlIHNwYWNlcyBp
biB0d28gd2F5cyB3aGVuIGFwcGx5aW5nIHdvcmQgcm91bmRpbmcuCiAgICAgICAgIC8vIEZpcnN0
LCB3ZSByb3VuZCBzcGFjZXMgdG8gYW4gYWRqdXN0ZWQgd2lkdGggaW4gYWxsIGZvbnRzLgogICAg
ICAgICAvLyBTZWNvbmQsIGluIGZpeGVkLXBpdGNoIGZvbnRzIHdlIGVuc3VyZSB0aGF0IGFsbCBj
aGFyYWN0ZXJzIHRoYXQKICAgICAgICAgLy8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBzcGFjZSBj
aGFyYWN0ZXIgaGF2ZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgc3BhY2UgY2hhcmFjdGVyLgotICAg
ICAgICBpZiAoc3R5bGUtPmFwcGx5V29yZFJvdW5kaW5nICYmIChyZW5kZXJlci0+dHJlYXRBc0Zp
eGVkUGl0Y2ggPyB3aWR0aCA9PSByZW5kZXJlci0+c3BhY2VXaWR0aCA6IF9nbHlwaFVzZWQgPT0g
cmVuZGVyZXItPnNwYWNlR2x5cGgpKQorICAgICAgICBpZiAoc3R5bGUtPmFwcGx5V29yZFJvdW5k
aW5nICYmIChyZW5kZXJlci0+dHJlYXRBc0ZpeGVkUGl0Y2ggPyB3aWR0aCA9PSByZW5kZXJlci0+
c3BhY2VXaWR0aCA6IGdseXBoID09IHJlbmRlcmVyLT5zcGFjZUdseXBoKSkKICAgICAgICAgICAg
IHdpZHRoID0gcmVuZGVyZXItPmFkanVzdGVkU3BhY2VXaWR0aDsKICAgICB9CiAgICAgCiAgICAg
Ly8gVHJ5IHRvIGZpbmQgYSBzdWJzdGl0dXRlIGZvbnQgaWYgdGhpcyBmb250IGRpZG4ndCBoYXZl
IGEgZ2x5cGggZm9yIGEgY2hhcmFjdGVyIGluIHRoZQogICAgIC8vIHN0cmluZy4gIElmIG9uZSBp
c24ndCBmb3VuZCB3ZSBlbmQgdXAgZHJhd2luZyBhbmQgbWVhc3VyaW5nIHRoZSAwIGdseXBoLCB1
c3VhbGx5IGEgYm94LgotICAgIGlmIChfZ2x5cGhVc2VkID09IDAgJiYgc3R5bGUtPmF0dGVtcHRG
b250U3Vic3RpdHV0aW9uKSB7CisgICAgaWYgKGdseXBoID09IDAgJiYgc3R5bGUtPmF0dGVtcHRG
b250U3Vic3RpdHV0aW9uKSB7CiAgICAgICAgIFVuaUNoYXIgY2hhcmFjdGVyQXJyYXlbMl07CiAg
ICAgICAgIHVuc2lnbmVkIGNoYXJhY3RlckFycmF5TGVuZ3RoOwogICAgICAgICAKQEAgLTIxNzEs
MTIgKzE4NzAsOSBAQCBzdGF0aWMgZmxvYXQgd2lkdGhGb3JOZXh0Q2hhcmFjdGVyKENoYXJhCiAg
ICAgICAgICAgICBjaGFyYWN0ZXJBcnJheUxlbmd0aCA9IDI7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIE5TRm9udCAqc3Vic3RpdHV0ZUZvbnQgPSBbcmVuZGVyZXIgX3N1YnN0aXR1dGVG
b250Rm9yQ2hhcmFjdGVyczpjaGFyYWN0ZXJBcnJheSBsZW5ndGg6Y2hhcmFjdGVyQXJyYXlMZW5n
dGgKLSAgICAgICAgICAgIGZhbWlsaWVzOnN0eWxlLT5mYW1pbGllc107Ci0gICAgICAgIGlmIChz
dWJzdGl0dXRlRm9udCkgewotICAgICAgICAgICAgaW50IGNOdW1HbHlwaHMgPSAwOwotICAgICAg
ICAgICAgQVRTR2x5cGhSZWYgbG9jYWxHbHlwaEJ1ZmZlcltNQVhfR0xZUEhfRVhQQU5TSU9OXTsK
LSAgICAgICAgICAgIAorICAgICAgICBXZWJUZXh0UmVuZGVyZXIgKnN1YnN0aXR1dGVSZW5kZXJl
ciA9IFtyZW5kZXJlciBzdWJzdGl0dXRlUmVuZGVyZXJGb3JDaGFyYWN0ZXJzOmNoYXJhY3RlckFy
cmF5CisgICAgICAgICAgICBsZW5ndGg6Y2hhcmFjdGVyQXJyYXlMZW5ndGggZmFtaWxpZXM6c3R5
bGUtPmZhbWlsaWVzXTsKKyAgICAgICAgaWYgKHN1YnN0aXR1dGVSZW5kZXJlcikgewogICAgICAg
ICAgICAgV2ViQ29yZVRleHRSdW4gY2x1c3RlclJ1bjsKICAgICAgICAgICAgIFdlYkNvcmVJbml0
aWFsaXplVGV4dFJ1bigmY2x1c3RlclJ1biwgY2hhcmFjdGVyQXJyYXksIGNoYXJhY3RlckFycmF5
TGVuZ3RoLCAwLCBjaGFyYWN0ZXJBcnJheUxlbmd0aCk7CiAgICAgICAgICAgICBXZWJDb3JlVGV4
dFN0eWxlIGNsdXN0ZXJTdHlsZSA9ICppdGVyYXRvci0+c3R5bGU7CkBAIC0yMTg0LDQxICsxODgw
LDI5IEBAIHN0YXRpYyBmbG9hdCB3aWR0aEZvck5leHRDaGFyYWN0ZXIoQ2hhcmEKICAgICAgICAg
ICAgIGNsdXN0ZXJTdHlsZS5hcHBseVJ1blJvdW5kaW5nID0gZmFsc2U7CiAgICAgICAgICAgICBj
bHVzdGVyU3R5bGUuYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24gPSBmYWxzZTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgV2ViVGV4dFJlbmRlcmVyICpzdWJzdGl0dXRlUmVuZGVyZXI7Ci0gICAg
ICAgICAgICBzdWJzdGl0dXRlUmVuZGVyZXIgPSBbW1dlYlRleHRSZW5kZXJlckZhY3Rvcnkgc2hh
cmVkRmFjdG9yeV0gcmVuZGVyZXJXaXRoRm9udDpzdWJzdGl0dXRlRm9udCB1c2luZ1ByaW50ZXJG
b250OnJlbmRlcmVyLT51c2luZ1ByaW50ZXJGb250XTsKLSAgICAgICAgICAgIHdpZHRoID0gW3N1
YnN0aXR1dGVSZW5kZXJlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9mbG9hdFdpZHRo
Rm9yUnVuOiZjbHVzdGVyUnVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6JmNs
dXN0ZXJTdHlsZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHM6IG5pbAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRzOiBuaWwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbHlwaHM6ICZsb2NhbEdseXBoQnVmZmVyWzBdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnRQb3NpdGlvbjpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1HbHlwaHM6JmNOdW1HbHlwaHNdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBfZm9udFVz
ZWQgPSBzdWJzdGl0dXRlRm9udDsKLSAgICAgICAgICAgIF9nbHlwaFVzZWQgPSBsb2NhbEdseXBo
QnVmZmVyWzBdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYyA8PSAweEZGRkYgJiYg
Y051bUdseXBocyA9PSAxICYmIGxvY2FsR2x5cGhCdWZmZXJbMF0gIT0gMCl7Ci0gICAgICAgICAg
ICAgICAgW3JlbmRlcmVyIF91cGRhdGVHbHlwaEVudHJ5Rm9yQ2hhcmFjdGVyOmMgZ2x5cGhJRDps
b2NhbEdseXBoQnVmZmVyWzBdIGZvbnQ6c3Vic3RpdHV0ZUZvbnRdOworICAgICAgICAgICAgaW50
IGNOdW1HbHlwaHM7CisgICAgICAgICAgICBBVFNHbHlwaFJlZiBsb2NhbEdseXBoQnVmZmVyW01B
WF9HTFlQSF9FWFBBTlNJT05dOyAgICAgICAgICAgIAorICAgICAgICAgICAgd2lkdGggPSBbc3Vi
c3RpdHV0ZVJlbmRlcmVyIGZsb2F0V2lkdGhGb3JSdW46JmNsdXN0ZXJSdW4gc3R5bGU6JmNsdXN0
ZXJTdHlsZSAKKyAgICAgICAgICAgICAgICB3aWR0aHM6TlVMTCBzdWJzdGl0dXRlUmVuZGVyZXJz
Ok5VTEwgZ2x5cGhzOmxvY2FsR2x5cGhCdWZmZXIgc3RhcnRQb3NpdGlvbjpOVUxMIG51bUdseXBo
czomY051bUdseXBoc107CisgICAgICAgICAgICBpZiAoY051bUdseXBocyA9PSAxKSB7CisgICAg
ICAgICAgICAgICAgZ2x5cGggPSBsb2NhbEdseXBoQnVmZmVyWzBdOworICAgICAgICAgICAgICAg
IFtyZW5kZXJlciB1cGRhdGVHbHlwaEVudHJ5Rm9yQ2hhcmFjdGVyOmMgZ2x5cGhJRDpnbHlwaCBz
dWJzdGl0dXRlUmVuZGVyZXI6c3Vic3RpdHV0ZVJlbmRlcmVyXTsKKyAgICAgICAgICAgICAgICBy
ZW5kZXJlciA9IHN1YnN0aXR1dGVSZW5kZXJlcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmICghX2ZvbnRVc2VkKQotICAgICAgICBfZm9udFVzZWQgPSByZW5kZXJl
ci0+Zm9udDsKLQogICAgIC8vIEZvcmNlIGNoYXJhY3RlcnMgdGhhdCBhcmUgdXNlZCB0byBkZXRl
cm1pbmUgd29yZCBib3VuZGFyaWVzIGZvciB0aGUgcm91bmRpbmcgaGFjawogICAgIC8vIHRvIGJl
IGludGVnZXIgd2lkdGgsIHNvIGZvbGxvd2luZyB3b3JkcyB3aWxsIHN0YXJ0IG9uIGFuIGludGVn
ZXIgYm91bmRhcnkuCi0gICAgaWYgKHN0eWxlLT5hcHBseVdvcmRSb3VuZGluZyAmJiBpc1JvdW5k
aW5nSGFja0NoYXJhY3RlcihjKSkgeworICAgIGlmIChzdHlsZS0+YXBwbHlXb3JkUm91bmRpbmcg
JiYgaXNSb3VuZGluZ0hhY2tDaGFyYWN0ZXIoYykpCiAgICAgICAgIHdpZHRoID0gY2VpbGYod2lk
dGgpOwotICAgIH0KICAgICAKICAgICAvLyBBY2NvdW50IGZvciBsZXR0ZXItc3BhY2luZwogICAg
IGlmIChzdHlsZS0+bGV0dGVyU3BhY2luZyAmJiB3aWR0aCA+IDApCiAgICAgICAgIHdpZHRoICs9
IHN0eWxlLT5sZXR0ZXJTcGFjaW5nOwogCi0gICAgLy8gQWNjb3VudCBmb3IgcGFkZGluZy4gIGto
dG1sIHVzZXMgc3BhY2UgcGFkZGluZyB0byBqdXN0aWZ5IHRleHQuICBXZQotICAgIC8vIGRpc3Ry
aWJ1dGUgdGhlIHNwZWNpZmllZCBwYWRkaW5nIG92ZXIgdGhlIGF2YWlsYWJsZSBzcGFjZXMgaW4g
dGhlIHJ1bi4KKyAgICAvLyBBY2NvdW50IGZvciBwYWRkaW5nLiBXZWJDb3JlIHVzZXMgc3BhY2Ug
cGFkZGluZyB0byBqdXN0aWZ5IHRleHQuCisgICAgLy8gV2UgZGlzdHJpYnV0ZSB0aGUgc3BlY2lm
aWVkIHBhZGRpbmcgb3ZlciB0aGUgYXZhaWxhYmxlIHNwYWNlcyBpbiB0aGUgcnVuLgogICAgIGlm
IChpc1NwYWNlKGMpKSB7CiAgICAgICAgIGlmIChpdGVyYXRvci0+cGFkZGluZyA+IDApIHsKICAg
ICAgICAgICAgIC8vIE9ubHkgdXNlIGxlZnQgb3ZlciBwYWRkaW5nIGlmIG5vdGUgZXZlbmx5IGRp
dmlzaWJsZSBieSAKQEAgLTIyMjYsOCArMTkxMCw3IEBAIHN0YXRpYyBmbG9hdCB3aWR0aEZvck5l
eHRDaGFyYWN0ZXIoQ2hhcmEKICAgICAgICAgICAgIGlmIChpdGVyYXRvci0+cGFkZGluZyA8IGl0
ZXJhdG9yLT5wYWRQZXJTcGFjZSl7CiAgICAgICAgICAgICAgICAgd2lkdGggKz0gaXRlcmF0b3It
PnBhZGRpbmc7CiAgICAgICAgICAgICAgICAgaXRlcmF0b3ItPnBhZGRpbmcgPSAwOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIHdpZHRoICs9IGl0ZXJhdG9yLT5wYWRQZXJTcGFjZTsKICAgICAgICAgICAgICAg
ICBpdGVyYXRvci0+cGFkZGluZyAtPSBpdGVyYXRvci0+cGFkUGVyU3BhY2U7CiAgICAgICAgICAg
ICB9CkBAIC0yMjYzLDE2ICsxOTQ2LDE1IEBAIHN0YXRpYyBmbG9hdCB3aWR0aEZvck5leHRDaGFy
YWN0ZXIoQ2hhcmEKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChmb250VXNlZCkKLSAgICAg
ICAgKmZvbnRVc2VkID0gX2ZvbnRVc2VkOworICAgIGlmIChyZW5kZXJlclVzZWQpCisgICAgICAg
ICpyZW5kZXJlclVzZWQgPSByZW5kZXJlcjsKICAgICAKICAgICBpZiAoZ2x5cGhVc2VkKQotICAg
ICAgICAqZ2x5cGhVc2VkID0gX2dseXBoVXNlZDsKKyAgICAgICAgKmdseXBoVXNlZCA9IGdseXBo
OwogCiAgICAgcmV0dXJuIHdpZHRoOwogfQogCi0KIHN0YXRpYyBCT09MIGZpbGxTdHlsZVdpdGhB
dHRyaWJ1dGVzKEFUU1VTdHlsZSBzdHlsZSwgTlNGb250ICp0aGVGb250KQogewogICAgIGlmICh0
aGVGb250KSB7CkBAIC0yMzAwLDMzICsxOTgyLDQ5IEBAIHN0YXRpYyBCT09MIGZpbGxTdHlsZVdp
dGhBdHRyaWJ1dGVzKEFUU1UKIAogc3RhdGljIEJPT0wgc2hvdWxkVXNlQVRTVShjb25zdCBXZWJD
b3JlVGV4dFJ1biAqcnVuKQogewotICAgIFVuaUNoYXIgYzsKLSAgICBjb25zdCBVbmlDaGFyICpj
aGFyYWN0ZXJzID0gcnVuLT5jaGFyYWN0ZXJzOwotICAgIGludCBpLCBmcm9tID0gcnVuLT5mcm9t
LCB0byA9IHJ1bi0+dG87Ci0gICAgCiAgICAgaWYgKGFsd2F5c1VzZUFUU1UpCiAgICAgICAgIHJl
dHVybiBZRVM7CiAgICAgICAgIAotICAgIGZvciAoaSA9IGZyb207IGkgPCB0bzsgaSsrKXsKLSAg
ICAgICAgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgIGlmIChjIDwgMHgzMDApICAgICAgICAg
ICAgICAgICAgICAgIC8vIEVhcmx5IGNvbnRpbnVlIHRvIGF2b2lkIG90aGVyIGNoZWNrcyBmb3Ig
dGhlIGNvbW1vbiBjYXNlLgorICAgIGNvbnN0IFVuaUNoYXIgKmNoYXJhY3RlcnMgPSBydW4tPmNo
YXJhY3RlcnM7CisgICAgaW50IHRvID0gcnVuLT50bzsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkg
PSBydW4tPmZyb207IGkgPCB0bzsgaSsrKSB7CisgICAgICAgIFVuaUNoYXIgYyA9IGNoYXJhY3Rl
cnNbaV07CisgICAgICAgIGlmIChjIDwgMHgzMDApICAgICAgICAgICAgICAgICAgICAgIC8vIFUr
MDMwMCB0aHJvdWdoIFUrMDM2RiBDb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgIGlmIChjID49IDB4MzAwICYmIGMg
PD0gMHgzNkYpICAgICAgIC8vIFUrMDMwMCB0aHJvdWdoIFUrMDM2RiBDb21iaW5pbmcgZGlhY3Jp
dGljYWwgbWFya3MKKyAgICAgICAgaWYgKGMgPD0gMHgzNkYpCiAgICAgICAgICAgICByZXR1cm4g
WUVTOwotICAgICAgICBpZiAoYyA+PSAweDIwRDAgJiYgYyA8PSAweDIwRkYpICAgICAvLyBVKzIw
RDAgdGhyb3VnaCBVKzIwRkYgQ29tYmluaW5nIG1hcmtzIGZvciBzeW1ib2xzCisKKyAgICAgICAg
aWYgKGMgPCAweDA1OTEpICAgICAgICAgICAgICAgICAgICAgLy8gVSswNTkxIHRocm91Z2ggVSsx
MDU5IEFyYWJpYywgSGVicmV3LCBTeXJpYWMsIFRoYWFuYSwgRGV2YW5hZ2FyaSwgQmVuZ2FsaSwg
R3VybXVraGksIEd1amFyYXRpLCBPcml5YSwgVGFtaWwsIFRlbHVndSwgS2FubmFkYSwgTWFsYXlh
bGFtLCBTaW5oYWxhLCBUaGFpLCBMYW8sIFRpYmV0YW4sIE15YW5tYXIKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDEwNTkpCiAgICAgICAgICAgICByZXR1cm4gWUVT
OwotICAgICAgICBpZiAoYyA+PSAweEZFMjAgJiYgYyA8PSAweEZFMmYpICAgICAvLyBVK0ZFMjAg
dGhyb3VnaCBVK0ZFMkYgQ29tYmluaW5nIGhhbGYgbWFya3MKKworICAgICAgICBpZiAoYyA8IDB4
MTEwMCkgICAgICAgICAgICAgICAgICAgICAvLyBVKzExMDAgdGhyb3VnaCBVKzExRkYgSGFuZ3Vs
IEphbW8gKG9ubHkgQW5jaWVudCBLb3JlYW4gc2hvdWxkIGJlIGxlZnQgaGVyZSBpZiB5b3UgcHJl
Y29tcG9zZTsgTW9kZXJuIEtvcmVhbiB3aWxsIGJlIHByZWNvbXBvc2VkIGFzIGEgcmVzdWx0IG9m
IHN0ZXAgQSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDExRkYp
CiAgICAgICAgICAgICByZXR1cm4gWUVTOwotICAgICAgICBpZiAoYyA+PSAweDU5MSAmJiBjIDw9
IDB4MTA1OSkgICAgICAvLyBVKzA1OTEgdGhyb3VnaCBVKzEwNTkgQXJhYmljLCBIZWJyZXcsIFN5
cmlhYywgVGhhYW5hLCBEZXZhbmFnYXJpLCBCZW5nYWxpLCBHdXJtdWtoaSwgR3VqYXJhdGksIE9y
aXlhLCBUYW1pbCwgVGVsdWd1LCBLYW5uYWRhLCBNYWxheWFsYW0sIFNpbmhhbGEsIFRoYWksIExh
bywgVGliZXRhbiwgTXlhbm1hcgorCisgICAgICAgIGlmIChjIDwgMHgxNzgwKSAgICAgICAgICAg
ICAgICAgICAgIC8vIFUrMTc4MCB0aHJvdWdoIFUrMThBRiBLaG1lciwgTW9uZ29saWFuCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGMgPD0gMHgxOEFGKQogICAgICAgICAgICAg
cmV0dXJuIFlFUzsKLSAgICAgICAgaWYgKGMgPj0gMHgxMTAwICYmIGMgPD0gMHgxMUZGKSAgICAg
Ly8gVSsxMTAwIHRocm91Z2ggVSsxMUZGIEhhbmd1bCBKYW1vIChvbmx5IEFuY2llbnQgS29yZWFu
IHNob3VsZCBiZSBsZWZ0IGhlcmUgaWYgeW91IHByZWNvbXBvc2U7IE1vZGVybiBLb3JlYW4gd2ls
bCBiZSBwcmVjb21wb3NlZCBhcyBhIHJlc3VsdCBvZiBzdGVwIEEpCisKKyAgICAgICAgaWYgKGMg
PCAweDE5MDApICAgICAgICAgICAgICAgICAgICAgLy8gVSsxOTAwIHRocm91Z2ggVSsxOTRGIExp
bWJ1IChVbmljb2RlIDQuMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8
PSAweDE5NEYpCiAgICAgICAgICAgICByZXR1cm4gWUVTOwotICAgICAgICBpZiAoYyA+PSAweDE3
ODAgJiYgYyA8PSAweDE4QUYpICAgICAvLyBVKzE3ODAgdGhyb3VnaCBVKzE4QUYgS2htZXIsIE1v
bmdvbGlhbgorCisgICAgICAgIGlmIChjIDwgMHgyMEQwKSAgICAgICAgICAgICAgICAgICAgIC8v
IFUrMjBEMCB0aHJvdWdoIFUrMjBGRiBDb21iaW5pbmcgbWFya3MgZm9yIHN5bWJvbHMKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYyA8PSAweDIwRkYpCiAgICAgICAgICAgICBy
ZXR1cm4gWUVTOwotICAgICAgICBpZiAoYyA+PSAweDE5MDAgJiYgYyA8PSAweDE5NEYpICAgICAv
LyBVKzE5MDAgdGhyb3VnaCBVKzE5NEYgTGltYnUgKFVuaWNvZGUgNC4wKQorCisgICAgICAgIGlm
IChjIDwgMHhGRTIwKSAgICAgICAgICAgICAgICAgICAgIC8vIFUrRkUyMCB0aHJvdWdoIFUrRkUy
RiBDb21iaW5pbmcgaGFsZiBtYXJrcworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChjIDw9IDB4RkUyRikKICAgICAgICAgICAgIHJldHVybiBZRVM7CiAgICAgfQotICAgIAorCiAg
ICAgcmV0dXJuIE5POwogfQpJbmRleDogV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2Vi
VGV4dFJlbmRlcmVyRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJL
aXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0UmVuZGVyZXJGYWN0b3J5LmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtcCAtdSAtcjEuMTYgV2ViS2l0L1dlYkNvcmVTdXBw
b3J0LnN1YnByb2ovV2ViVGV4dFJlbmRlcmVyRmFjdG9yeS5oCi0tLSBXZWJLaXQvV2ViQ29yZVN1
cHBvcnQuc3VicHJvai9XZWJUZXh0UmVuZGVyZXJGYWN0b3J5LmgJNSBKdW4gMjAwNSAxNzo1NDo0
MSAtMDAwMAkxLjE2CisrKyBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0UmVu
ZGVyZXJGYWN0b3J5LmgJMzAgU2VwIDIwMDUgMTU6MTg6NTkgLTAwMDAKQEAgLTI3LDMzICsyNywy
MyBAQAogICovCiAKICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRleHRSZW5kZXJlckZhY3Rvcnku
aD4KLSNpbXBvcnQgPFdlYktpdC9XZWJHbHlwaEJ1ZmZlci5oPgogCiBAY2xhc3MgV2ViVGV4dFJl
bmRlcmVyOwogCisjZGVmaW5lIFdFQl9URVhUX1JFTkRFUkVSX0ZBQ1RPUllfTlVNX0NBQ0hFUyA4
CisKIEBpbnRlcmZhY2UgV2ViVGV4dFJlbmRlcmVyRmFjdG9yeSA6IFdlYkNvcmVUZXh0UmVuZGVy
ZXJGYWN0b3J5CiB7Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqY2FjaGVGb3JTY3JlZW47Ci0g
ICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqY2FjaGVGb3JQcmludGVyOworICAgIE5TTXV0YWJsZURp
Y3Rpb25hcnkgKmNhY2hlc1tXRUJfVEVYVF9SRU5ERVJFUl9GQUNUT1JZX05VTV9DQUNIRVNdOwog
ICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKnZpZXdCdWZmZXJzOwogICAgIE5TTXV0YWJsZUFycmF5
ICp2aWV3U3RhY2s7CiB9CiAKICsgKHZvaWQpY3JlYXRlU2hhcmVkRmFjdG9yeTsKICsgKFdlYlRl
eHRSZW5kZXJlckZhY3RvcnkgKilzaGFyZWRGYWN0b3J5OwotLSAoTlNGb250ICopY2FjaGVkRm9u
dEZyb21GYW1pbHk6KE5TU3RyaW5nICopZmFtaWx5IHRyYWl0czooTlNGb250VHJhaXRNYXNrKXRy
YWl0cyBzaXplOihmbG9hdClzaXplOwotCi0tIChXZWJUZXh0UmVuZGVyZXIgKilyZW5kZXJlcldp
dGhGb250OihOU0ZvbnQgKilmb250IHVzaW5nUHJpbnRlckZvbnQ6KEJPT0wpdXNpbmdQcmludGVy
Rm9udDsKLQotLSAoQk9PTCljb2FsZXNjZVRleHREcmF3aW5nOwotLSAodm9pZCllbmRDb2FsZXNj
ZVRleHREcmF3aW5nOwotLSAodm9pZClzdGFydENvYWxlc2NlVGV4dERyYXdpbmc7CiAKLS0gKFdl
YkdseXBoQnVmZmVyICopZ2x5cGhCdWZmZXJGb3JGb250OihOU0ZvbnQgKilmb250IGFuZENvbG9y
OihOU0NvbG9yICopY29sb3I7CistIChOU0ZvbnQgKiljYWNoZWRGb250RnJvbUZhbWlseTooTlNT
dHJpbmcgKilmYW1pbHkgdHJhaXRzOihOU0ZvbnRUcmFpdE1hc2spdHJhaXRzIHNpemU6KGZsb2F0
KXNpemU7CiAKLUBlbmQKKy0gKFdlYlRleHRSZW5kZXJlciAqKXJlbmRlcmVyV2l0aEZvbnQ6KFdl
YkNvcmVGb250KWZvbnQ7CiAKLUBpbnRlcmZhY2UgTlNGb250IChXZWJQcml2YXRlRXh0ZW5zaW9u
cykKLS0gKEJPT0wpX3dlYl9pc0Zha2VGaXhlZFBpdGNoOwogQGVuZAotCkluZGV4OiBXZWJLaXQv
V2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0UmVuZGVyZXJGYWN0b3J5Lm0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYlRl
eHRSZW5kZXJlckZhY3RvcnkubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NgpkaWZmIC1wIC11
IC1yMS40NiBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJUZXh0UmVuZGVyZXJGYWN0
b3J5Lm0KLS0tIFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYlRleHRSZW5kZXJlckZh
Y3RvcnkubQk2IEp1biAyMDA1IDEzOjI2OjE2IC0wMDAwCTEuNDYKKysrIFdlYktpdC9XZWJDb3Jl
U3VwcG9ydC5zdWJwcm9qL1dlYlRleHRSZW5kZXJlckZhY3RvcnkubQkzMCBTZXAgMjAwNSAxNTox
ODo1OSAtMDAwMApAQCAtMzcsNiArMzcsOCBAQAogCiAjaW1wb3J0IDxtYWNoLW8vZHlsZC5oPgog
CisjZGVmaW5lIFNZTlRIRVNJWkVEX0ZPTlRfVFJBSVRTIChOU0JvbGRGb250TWFzayB8IE5TSXRh
bGljRm9udE1hc2spCisKICNkZWZpbmUgSU1QT1JUQU5UX0ZPTlRfVFJBSVRTICgwIFwKICAgICB8
IE5TQm9sZEZvbnRNYXNrIFwKICAgICB8IE5TQ29tcHJlc3NlZEZvbnRNYXNrIFwKQEAgLTYwLDY4
ICs2Miw3IEBACiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJUZXh0UmVuZGVyZXJGYWN0b3J5CiAKLS0g
KEJPT0wpY29hbGVzY2VUZXh0RHJhd2luZwotewotICAgIHJldHVybiBbdmlld1N0YWNrIG9iamVj
dEF0SW5kZXg6IFt2aWV3U3RhY2sgY291bnRdLTFdID09IFtOU1ZpZXcgZm9jdXNWaWV3XSA/IFlF
UyA6IE5POwotfQotCi0tICh2b2lkKXN0YXJ0Q29hbGVzY2VUZXh0RHJhd2luZwotewotICAgIGlm
ICghdmlld1N0YWNrKQotICAgICAgICB2aWV3U3RhY2sgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XTsKLSAgICBpZiAoIXZpZXdCdWZmZXJzKQotICAgICAgICB2aWV3QnVmZmVycyA9IFtb
TlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgW3ZpZXdTdGFjayBhZGRPYmpl
Y3Q6IFtOU1ZpZXcgZm9jdXNWaWV3XV07Ci19Ci0KLS0gKHZvaWQpZW5kQ29hbGVzY2VUZXh0RHJh
d2luZwotewotICAgIEFTU0VSVChbc2VsZiBjb2FsZXNjZVRleHREcmF3aW5nXSk7Ci0gICAgCi0g
ICAgTlNWaWV3ICp0YXJnZXRWaWV3ID0gW3ZpZXdTdGFjayBvYmplY3RBdEluZGV4OiBbdmlld1N0
YWNrIGNvdW50XS0xXTsKLSAgICBbdmlld1N0YWNrIHJlbW92ZUxhc3RPYmplY3RdOwotICAgIE5T
VmFsdWUgKnZpZXdLZXkgPSBbTlNWYWx1ZSB2YWx1ZVdpdGhOb25yZXRhaW5lZE9iamVjdDogdGFy
Z2V0Vmlld107Ci0gICAgTlNNdXRhYmxlU2V0ICpnbHlwaEJ1ZmZlcnMgPSBbdmlld0J1ZmZlcnMg
b2JqZWN0Rm9yS2V5OnZpZXdLZXldOwotCi0gICAgW2dseXBoQnVmZmVycyBtYWtlT2JqZWN0c1Bl
cmZvcm1TZWxlY3RvcjogQHNlbGVjdG9yKGRyYXdJblZpZXc6KSB3aXRoT2JqZWN0OiB0YXJnZXRW
aWV3XTsKLSAgICBbZ2x5cGhCdWZmZXJzIG1ha2VPYmplY3RzUGVyZm9ybVNlbGVjdG9yOiBAc2Vs
ZWN0b3IocmVzZXQpXTsKLSAgICBbdmlld0J1ZmZlcnMgcmVtb3ZlT2JqZWN0Rm9yS2V5OiB2aWV3
S2V5XTsKLX0KLQotLSAoV2ViR2x5cGhCdWZmZXIgKilnbHlwaEJ1ZmZlckZvckZvbnQ6IChOU0Zv
bnQgKilmb250IGFuZENvbG9yOiAoTlNDb2xvciAqKWNvbG9yCi17Ci0gICAgQVNTRVJUKFtzZWxm
IGNvYWxlc2NlVGV4dERyYXdpbmddKTsKLQotICAgIE5TTXV0YWJsZVNldCAqZ2x5cGhCdWZmZXJz
OwotICAgIFdlYkdseXBoQnVmZmVyICpnbHlwaEJ1ZmZlciA9IG5pbDsKLSAgICBOU1ZhbHVlICp2
aWV3S2V5ID0gW05TVmFsdWUgdmFsdWVXaXRoTm9ucmV0YWluZWRPYmplY3Q6IFtOU1ZpZXcgZm9j
dXNWaWV3XV07Ci0gICAgCi0gICAgZ2x5cGhCdWZmZXJzID0gW3ZpZXdCdWZmZXJzIG9iamVjdEZv
cktleTp2aWV3S2V5XTsKLSAgICBpZiAoZ2x5cGhCdWZmZXJzID09IG5pbCl7Ci0gICAgICAgIGds
eXBoQnVmZmVycyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0XTsKLSAgICAgICAgW3ZpZXdC
dWZmZXJzIHNldE9iamVjdDogZ2x5cGhCdWZmZXJzIGZvcktleTogdmlld0tleV07Ci0gICAgICAg
IFtnbHlwaEJ1ZmZlcnMgcmVsZWFzZV07Ci0gICAgfQotICAgIAotICAgIE5TRW51bWVyYXRvciAq
ZW51bWVyYXRvciA9IFtnbHlwaEJ1ZmZlcnMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgaWQgdmFs
dWU7Ci0gICAgCi0gICAgLy8gQ291bGQgdXNlIGEgZGljdGlvbmFyeSB3LyBmb250L2NvbG9yIGtl
eSBmb3IgZmFzdGVyIGxvb2t1cC4KLSAgICB3aGlsZSAoKHZhbHVlID0gW2VudW1lcmF0b3IgbmV4
dE9iamVjdF0pKSB7Ci0gICAgICAgIGlmIChbdmFsdWUgZm9udF0gPT0gZm9udCAmJiBbW3ZhbHVl
IGNvbG9yXSBpc0VxdWFsOiBjb2xvcl0pCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlciA9IHZhbHVl
OwotICAgIH0KLSAgICBpZiAoZ2x5cGhCdWZmZXIgPT0gbmlsKXsKLSAgICAgICAgZ2x5cGhCdWZm
ZXIgPSBbW1dlYkdseXBoQnVmZmVyIGFsbG9jXSBpbml0V2l0aEZvbnQ6IGZvbnQgY29sb3I6IGNv
bG9yXTsKLSAgICAgICAgW2dseXBoQnVmZmVycyBhZGRPYmplY3Q6IGdseXBoQnVmZmVyXTsKLSAg
ICAgICAgW2dseXBoQnVmZmVyIHJlbGVhc2VdOwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJu
IGdseXBoQnVmZmVyOwotfQotCi1zdGF0aWMgYm9vbAotZ2V0QXBwRGVmYXVsdFZhbHVlKENGU3Ry
aW5nUmVmIGtleSwgaW50ICp2KQorc3RhdGljIGJvb2wgZ2V0QXBwRGVmYXVsdFZhbHVlKENGU3Ry
aW5nUmVmIGtleSwgaW50ICp2KQogewogICAgIENGUHJvcGVydHlMaXN0UmVmIHZhbHVlOwogCkBA
IC0xNTEsOCArOTIsNyBAQCBnZXRBcHBEZWZhdWx0VmFsdWUoQ0ZTdHJpbmdSZWYga2V5LCBpbnQg
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sCi1nZXRVc2VyRGVmYXVsdFZhbHVl
KENGU3RyaW5nUmVmIGtleSwgaW50ICp2KQorc3RhdGljIGJvb2wgZ2V0VXNlckRlZmF1bHRWYWx1
ZShDRlN0cmluZ1JlZiBrZXksIGludCAqdikKIHsKICAgICBDRlByb3BlcnR5TGlzdFJlZiB2YWx1
ZTsKIApAQCAtMTg4LDEwICsxMjgsOSBAQCBzdGF0aWMgaW50IGdldExDRFNjYWxlUGFyYW1ldGVy
cyh2b2lkKQogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCi0JaWYgKFdLRm9udFNtb290
aGluZ01vZGVJc0xDRChtb2RlKSkKLQkJcmV0dXJuIDQ7Ci0JZWxzZQotCQlyZXR1cm4gMTsKKyAg
ICBpZiAoV0tGb250U21vb3RoaW5nTW9kZUlzTENEKG1vZGUpKQorICAgICAgICByZXR1cm4gNDsK
KyAgICByZXR1cm4gMTsKIH0KIAogc3RhdGljIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgZm9udENh
Y2hlOwpAQCAtMTk5LDE5ICsxMzgsMTcgQEAgc3RhdGljIENGTXV0YWJsZURpY3Rpb25hcnlSZWYg
Zml4ZWRQaXRjaAogCiAtICh2b2lkKWNsZWFyQ2FjaGVzCiB7Ci0gICAgW2NhY2hlRm9yU2NyZWVu
IHJlbGVhc2VdOwotICAgIFtjYWNoZUZvclByaW50ZXIgcmVsZWFzZV07Ci0gICAgCi0gICAgY2Fj
aGVGb3JTY3JlZW4gPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgIGNh
Y2hlRm9yUHJpbnRlciA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CisgICAg
aW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IFdFQl9URVhUX1JFTkRFUkVSX0ZBQ1RPUllfTlVN
X0NBQ0hFUzsgKytpKQorICAgICAgICBbY2FjaGVzW2ldIHJlbW92ZUFsbE9iamVjdHNdOwogCiAg
ICAgaWYgKGZvbnRDYWNoZSkKICAgICAgICAgQ0ZSZWxlYXNlKGZvbnRDYWNoZSk7CiAgICAgZm9u
dENhY2hlID0gTlVMTDsKICAgICAKICAgICBpZiAoZml4ZWRQaXRjaEZvbnRzKSB7Ci0gICAgICAg
IENGUmVsZWFzZSAoZml4ZWRQaXRjaEZvbnRzKTsKLSAgICAgICAgZml4ZWRQaXRjaEZvbnRzID0g
MDsKKyAgICAgICAgQ0ZSZWxlYXNlKGZpeGVkUGl0Y2hGb250cyk7CisgICAgICAgIGZpeGVkUGl0
Y2hGb250cyA9IE5VTEw7CiAgICAgfQogICAgICAgICAKICAgICBbc3VwZXIgY2xlYXJDYWNoZXNd
OwpAQCAtMjM2LDE5ICsxNzMsMTkgQEAgZm9udHNDaGFuZ2VkKCBBVFNGb250Tm90aWZpY2F0aW9u
SW5mb1JlZgogICAgIGlmICghW3NlbGYgc2hhcmVkRmFjdG9yeV0pIHsKICAgICAgICAgW1tbc2Vs
ZiBhbGxvY10gaW5pdF0gcmVsZWFzZV07CiAKLQlzaXplX3QgczsKLQlpZiAoV2ViU3lzdGVtTWFp
bk1lbW9yeSgpID4gMTI4ICogMTAyNCAqIDEwMjQpCi0JCXMgPSBNSU5JTVVNX0dMWVBIX0NBQ0hF
X1NJWkUqZ2V0TENEU2NhbGVQYXJhbWV0ZXJzKCk7Ci0JZWxzZQotCQlzID0gTUlOSU1VTV9HTFlQ
SF9DQUNIRV9TSVpFOworICAgICAgICBzaXplX3QgczsKKyAgICAgICAgaWYgKFdlYlN5c3RlbU1h
aW5NZW1vcnkoKSA+IDEyOCAqIDEwMjQgKiAxMDI0KQorICAgICAgICAgICAgcyA9IE1JTklNVU1f
R0xZUEhfQ0FDSEVfU0laRSpnZXRMQ0RTY2FsZVBhcmFtZXRlcnMoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcyA9IE1JTklNVU1fR0xZUEhfQ0FDSEVfU0laRTsKICNpZm5kZWYgTkRFQlVH
Ci0JTE9HIChDYWNoZVNpemVzLCAiR2x5cGggY2FjaGUgc2l6ZSBzZXQgdG8gJWQgYnl0ZXMuIiwg
cyk7CisgICAgICAgIExPRyhDYWNoZVNpemVzLCAiR2x5cGggY2FjaGUgc2l6ZSBzZXQgdG8gJWQg
Ynl0ZXMuIiwgcyk7CiAjZW5kaWYKLQlXS1NldFVwRm9udENhY2hlKHMpOworICAgICAgICBXS1Nl
dFVwRm9udENhY2hlKHMpOwogCiAgICAgICAgIC8vIElnbm9yZSBlcnJvcnMgcmV0dXJuZWQgZnJv
bSBBVFNGb250Tm90aWZpY2F0aW9uU3Vic2NyaWJlLiAgSWYgd2UgY2FuJ3Qgc3Vic2NyaWJlIHRo
ZW4gd2UKICAgICAgICAgLy8gd29uJ3QgYmUgdG9sZCBhYm91dCBjaGFuZ2VzIHRvIGZvbnRzLgot
CUFUU0ZvbnROb3RpZmljYXRpb25TdWJzY3JpYmUoIGZvbnRzQ2hhbmdlZCwga0FUU0ZvbnROb3Rp
ZnlPcHRpb25EZWZhdWx0LCAodm9pZCAqKVtzdXBlciBzaGFyZWRGYWN0b3J5XSwgbmlsICk7Cisg
ICAgICAgIEFUU0ZvbnROb3RpZmljYXRpb25TdWJzY3JpYmUoIGZvbnRzQ2hhbmdlZCwga0FUU0Zv
bnROb3RpZnlPcHRpb25EZWZhdWx0LCAodm9pZCAqKVtzdXBlciBzaGFyZWRGYWN0b3J5XSwgbmls
ICk7CiAgICAgfQogICAgIEFTU0VSVChbW3NlbGYgc2hhcmVkRmFjdG9yeV0gaXNLaW5kT2ZDbGFz
czpzZWxmXSk7CiB9CkBAIC0yNTgsMzQgKzE5NSwzMyBAQCBmb250c0NoYW5nZWQoIEFUU0ZvbnRO
b3RpZmljYXRpb25JbmZvUmVmCiAgICAgcmV0dXJuIChXZWJUZXh0UmVuZGVyZXJGYWN0b3J5ICop
W3N1cGVyIHNoYXJlZEZhY3RvcnldOwogfQogCi0tIChCT09MKWlzRm9udEZpeGVkUGl0Y2g6IChO
U0ZvbnQgKilmb250CistIChCT09MKWlzRm9udEZpeGVkUGl0Y2g6KFdlYkNvcmVGb250KWZvbnQK
IHsKLSAgICBCT09MIHJldCA9IE5POwotICAgIAotICAgIGlmICghZml4ZWRQaXRjaEZvbnRzKSB7
Ci0gICAgICAgIGZpeGVkUGl0Y2hGb250cyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUgKDAs
IDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgMCk7Ci0gICAgfQotICAgIAotICAg
IENGQm9vbGVhblJlZiB2YWwgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZSAoZml4ZWRQaXRjaEZvbnRz
LCBmb250KTsKKyAgICBOU0ZvbnQgKmYgPSBmb250LmZvbnQ7CisKKyAgICBpZiAoIWZpeGVkUGl0
Y2hGb250cykKKyAgICAgICAgZml4ZWRQaXRjaEZvbnRzID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0
YWJsZSgwLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsIDApOworICAgIENGQm9v
bGVhblJlZiB2YWwgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmaXhlZFBpdGNoRm9udHMsIGYpOwor
CisgICAgQk9PTCByZXQ7ICAgIAogICAgIGlmICh2YWwpIHsKICAgICAgICAgcmV0ID0gKHZhbCA9
PSBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNl
IE9zYWthLU1vbm8uCisgICAgICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5
OTQ2Nz4sIHdlIHNob3VsZCB0cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgorICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5vdCByZXBvcnQgT3Nha2EtTW9ubyBhcyBm
aXhlZCBwaXRjaC4KKworICAgICAgICAvLyBTcGVjaWFsIGNhc2UgTVMtUEdvdGhpYy4KKyAgICAg
ICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS80MDMyOTM4LCB3ZSBzaG91bGQgbm90
IHRyZWF0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCisgICAgICAgIC8vIE5vdGUgdGhhdCBB
cHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KKworICAgICAgICBO
U1N0cmluZyAqbmFtZSA9IFtmIGZvbnROYW1lXTsKKyAgICAgICAgcmV0ID0gKFtmIGlzRml4ZWRQ
aXRjaF0gfHwgW2YgX2lzRmFrZUZpeGVkUGl0Y2hdIHx8IFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNv
bXBhcmU6QCJPc2FrYS1Nb25vIl0gPT0gTlNPcmRlcmVkU2FtZSkKKyAgICAgICAgICAgICYmICFb
bmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMtUEdvdGhpYyJdID09IE5TT3JkZXJlZFNh
bWU7CisKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoZml4ZWRQaXRjaEZvbnRzLCBmLCBy
ZXQgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZSk7CiAgICAgfQotICAgIGVsc2Ug
ewotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgT3Nha2EtTW9uby4gIEFjY29yZGluZyB0byA8cmRh
cjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNob3VsZCB0cmVhdCBPc2FrYS1Nb25vCi0gICAgICAg
IC8vIGFzIGZpeGVkIHBpdGNoLiBOb3RlIHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5vdCByZXBvcnQg
TVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KLQotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgTVMg
UEdvdGhpYy4gIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNDAzMjkzOCwgd2Ugc2hvdWxk
IG5vdCB0cmVhdCBNUy1QR290aGljCi0gICAgICAgIC8vIGFzIGZpeGVkIHBpdGNoLiAgTm90ZSB0
aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNoLgotICAgICAg
ICBpZiAoKFtmb250IGlzRml4ZWRQaXRjaF0gfHwgW2ZvbnQgX2lzRmFrZUZpeGVkUGl0Y2hdIHx8
IFtbZm9udCBmb250TmFtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9
PSBOU09yZGVyZWRTYW1lKSAmJiAKLSAgICAgICAgICAgICAgICAhW1tmb250IGZvbnROYW1lXSBj
YXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMtUEdvdGhpYyJdID09IE5TT3JkZXJlZFNhbWUpIHsK
LSAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlIChmaXhlZFBpdGNoRm9udHMsIGZvbnQs
IGtDRkJvb2xlYW5UcnVlKTsKLSAgICAgICAgICAgIHJldCA9IFlFUzsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlIChmaXhlZFBpdGNo
Rm9udHMsIGZvbnQsIGtDRkJvb2xlYW5GYWxzZSk7Ci0gICAgICAgICAgICByZXQgPSBOTzsKLSAg
ICAgICAgfQotICAgIH0KKwogICAgIHJldHVybiByZXQ7ICAgIAogfQogCkBAIC0yOTMsMjkgKzIy
OSwzMiBAQCBmb250c0NoYW5nZWQoIEFUU0ZvbnROb3RpZmljYXRpb25JbmZvUmVmCiB7CiAgICAg
W3N1cGVyIGluaXRdOwogICAgIAotICAgIGNhY2hlRm9yU2NyZWVuID0gW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBjYWNoZUZvclByaW50ZXIgPSBbW05TTXV0YWJsZURp
Y3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBX
RUJfVEVYVF9SRU5ERVJFUl9GQUNUT1JZX05VTV9DQUNIRVM7ICsraSkKKyAgICAgICAgY2FjaGVz
W2ldID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKICAgICAKICAgICByZXR1
cm4gc2VsZjsKIH0KIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgW2NhY2hlRm9yU2NyZWVuIHJl
bGVhc2VdOwotICAgIFtjYWNoZUZvclByaW50ZXIgcmVsZWFzZV07CisgICAgaW50IGk7CisgICAg
Zm9yIChpID0gMDsgaSA8IFdFQl9URVhUX1JFTkRFUkVSX0ZBQ1RPUllfTlVNX0NBQ0hFUzsgKytp
KQorICAgICAgICBbY2FjaGVzW2ldIHJlbGVhc2VdOworCiAgICAgW3ZpZXdCdWZmZXJzIHJlbGVh
c2VdOwogICAgIFt2aWV3U3RhY2sgcmVsZWFzZV07CiAgICAgCiAgICAgW3N1cGVyIGRlYWxsb2Nd
OwogfQogCi0tIChXZWJUZXh0UmVuZGVyZXIgKilyZW5kZXJlcldpdGhGb250OihOU0ZvbnQgKilm
b250IHVzaW5nUHJpbnRlckZvbnQ6KEJPT0wpdXNpbmdQcmludGVyRm9udAorLSAoV2ViVGV4dFJl
bmRlcmVyICopcmVuZGVyZXJXaXRoRm9udDooV2ViQ29yZUZvbnQpZm9udAogewotICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkgKmNhY2hlID0gdXNpbmdQcmludGVyRm9udCA/IGNhY2hlRm9yUHJpbnRl
ciA6IGNhY2hlRm9yU2NyZWVuOwotICAgIFdlYlRleHRSZW5kZXJlciAqcmVuZGVyZXIgPSBbY2Fj
aGUgb2JqZWN0Rm9yS2V5OmZvbnRdOworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmNhY2hlID0g
Y2FjaGVzWyhmb250LnN5bnRoZXRpY0JvbGQgPDwgMikgfCAoZm9udC5zeW50aGV0aWNPYmxpcXVl
IDw8IDEpIHwgZm9udC5mb3JQcmludGVyXTsKKyAgICBXZWJUZXh0UmVuZGVyZXIgKnJlbmRlcmVy
ID0gW2NhY2hlIG9iamVjdEZvcktleTpmb250LmZvbnRdOwogICAgIGlmIChyZW5kZXJlciA9PSBu
aWwpIHsKLSAgICAgICAgcmVuZGVyZXIgPSBbW1dlYlRleHRSZW5kZXJlciBhbGxvY10gaW5pdFdp
dGhGb250OmZvbnQgdXNpbmdQcmludGVyRm9udDp1c2luZ1ByaW50ZXJGb250XTsKLSAgICAgICAg
W2NhY2hlIHNldE9iamVjdDpyZW5kZXJlciBmb3JLZXk6Zm9udF07CisgICAgICAgIHJlbmRlcmVy
ID0gW1tXZWJUZXh0UmVuZGVyZXIgYWxsb2NdIGluaXRXaXRoRm9udDpmb250XTsKKyAgICAgICAg
W2NhY2hlIHNldE9iamVjdDpyZW5kZXJlciBmb3JLZXk6Zm9udC5mb250XTsKICAgICAgICAgW3Jl
bmRlcmVyIHJlbGVhc2VdOwogICAgIH0KICAgICByZXR1cm4gcmVuZGVyZXI7CkBAIC0zMzYsNTUg
KzI3NSw1NyBAQCBmb250c0NoYW5nZWQoIEFUU0ZvbnROb3RpZmljYXRpb25JbmZvUmVmCiAgICAg
cmV0dXJuIGZvbnQ7CiB9CiAKLSAgICAgICAgCi0KLS0gKE5TRm9udCAqKWZvbnRXaXRoRmFtaWxp
ZXM6KE5TU3RyaW5nICoqKWZhbWlsaWVzIHRyYWl0czooTlNGb250VHJhaXRNYXNrKXRyYWl0cyBz
aXplOihmbG9hdClzaXplCistIChXZWJDb3JlRm9udClmb250V2l0aEZhbWlsaWVzOihOU1N0cmlu
ZyAqKilmYW1pbGllcyB0cmFpdHM6KE5TRm9udFRyYWl0TWFzayl0cmFpdHMgc2l6ZTooZmxvYXQp
c2l6ZQogewogICAgIE5TRm9udCAqZm9udCA9IG5pbDsKLSAgICBOU1N0cmluZyAqZmFtaWx5Owot
ICAgIGludCBpID0gMDsKICAgICAKLSAgICB3aGlsZSAoZmFtaWxpZXMgJiYgZmFtaWxpZXNbaV0g
IT0gMCAmJiBmb250ID09IG5pbCl7Ci0gICAgICAgIGZhbWlseSA9IGZhbWlsaWVzW2krK107Cisg
ICAgaW50IGkgPSAwOworICAgIHdoaWxlIChmYW1pbGllcyAmJiBmYW1pbGllc1tpXSAhPSAwICYm
IGZvbnQgPT0gbmlsKSB7CisgICAgICAgIE5TU3RyaW5nICpmYW1pbHkgPSBmYW1pbGllc1tpKytd
OwogICAgICAgICBpZiAoW2ZhbWlseSBsZW5ndGhdICE9IDApCi0gICAgICAgICAgICBmb250ID0g
W3NlbGYgY2FjaGVkRm9udEZyb21GYW1pbHk6IGZhbWlseSB0cmFpdHM6dHJhaXRzIHNpemU6c2l6
ZV07CisgICAgICAgICAgICBmb250ID0gW3NlbGYgY2FjaGVkRm9udEZyb21GYW1pbHk6ZmFtaWx5
IHRyYWl0czp0cmFpdHMgc2l6ZTpzaXplXTsKICAgICB9CisKICAgICBpZiAoZm9udCA9PSBuaWwp
IHsKLSAgICAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiAgVXNlIGEgZmFsbGJhY2sgZm9u
dC4KLSAgICAgICAgc3RhdGljIGludCBtYXRjaENvdW50ID0gMzsKLSAgICAgICAgc3RhdGljIE5T
U3RyaW5nICptYXRjaFdvcmRzW10gPSB7IEAiQXJhYmljIiwgQCJQYXNodG8iLCBAIlVyZHUiIH07
Ci0gICAgICAgIHN0YXRpYyBOU1N0cmluZyAqbWF0Y2hGYW1pbGllc1tdID0geyBAIkdlZXphIFBy
byIsIEAiR2VlemEgUHJvIiwgQCJHZWV6YSBQcm8iIH07CisgICAgICAgIC8vIFdlIGRpZG4ndCBm
aW5kIGEgZm9udC4gVXNlIGEgZmFsbGJhY2sgZm9udC4KICAgICAgICAgCiAgICAgICAgIC8vIEZp
cnN0IHdlJ2xsIGF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0
Y2ggYmFzZWQgb24gCiAgICAgICAgIC8vIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbiB0aGUg
dGhlIHJlcXVlc3RlZCBuYW1lcy4gIEZvciBleGFtcGxlLCB3ZSdsbAogICAgICAgICAvLyBtYXRj
aCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KLSAgICAgICAg
aW50IGo7CiAgICAgICAgIGkgPSAwOwogICAgICAgICB3aGlsZSAoZmFtaWxpZXMgJiYgZmFtaWxp
ZXNbaV0gIT0gMCAmJiBmb250ID09IG5pbCkgewotICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWxp
ZXNbaSsrXTsKKyAgICAgICAgICAgIE5TU3RyaW5nICpmYW1pbHkgPSBmYW1pbGllc1tpKytdOwog
ICAgICAgICAgICAgaWYgKFtmYW1pbHkgbGVuZ3RoXSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAg
aiA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGogPCBtYXRjaENvdW50ICYmIGZvbnQgPT0g
bmlsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChbZmFtaWx5IHJhbmdlT2ZTdHJpbmc6bWF0
Y2hXb3Jkc1tqXSBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXS5sb2NhdGlvbiAhPSBO
U05vdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgbWF0
Y2hXb3Jkc1szXSA9IHsgQCJBcmFiaWMiLCBAIlBhc2h0byIsIEAiVXJkdSIgfTsKKyAgICAgICAg
ICAgICAgICBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBtYXRjaEZhbWlsaWVzWzNdID0geyBAIkdl
ZXphIFBybyIsIEAiR2VlemEgUHJvIiwgQCJHZWV6YSBQcm8iIH07CisgICAgICAgICAgICAgICAg
aW50IGo7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDMgJiYgZm9udCA9PSBuaWw7
ICsraikKKyAgICAgICAgICAgICAgICAgICAgaWYgKFtmYW1pbHkgcmFuZ2VPZlN0cmluZzptYXRj
aFdvcmRzW2pdIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdLmxvY2F0aW9uICE9IE5T
Tm90Rm91bmQpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gW3NlbGYgY2FjaGVkRm9u
dEZyb21GYW1pbHk6bWF0Y2hGYW1pbGllc1tqXSB0cmFpdHM6dHJhaXRzIHNpemU6c2l6ZV07Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaisrOwotICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8g
U3RpbGwgbm90aGluZyBmb3VuZCwgdXNlIHRoZSBmaW5hbCBmYWxsYmFjay4KLSAgICAgICAgaWYg
KGZvbnQgPT0gbmlsKSB7CisgICAgICAgIGlmIChmb250ID09IG5pbCkKICAgICAgICAgICAgIGZv
bnQgPSBbc2VsZiBmYWxsYmFja0ZvbnRXaXRoVHJhaXRzOnRyYWl0cyBzaXplOnNpemVdOwotICAg
ICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGZvbnQ7CisgICAgTlNGb250VHJhaXRNYXNrIGFj
dHVhbFRyYWl0cyA9IDA7CisgICAgaWYgKHRyYWl0cyAmIChOU0l0YWxpY0ZvbnRNYXNrIHwgTlNC
b2xkRm9udE1hc2spKQorICAgICAgICBhY3R1YWxUcmFpdHMgPSBbW05TRm9udE1hbmFnZXIgc2hh
cmVkRm9udE1hbmFnZXJdIHRyYWl0c09mRm9udDpmb250XTsKKworICAgIFdlYkNvcmVGb250IHJl
c3VsdDsKKyAgICByZXN1bHQuZm9udCA9IGZvbnQ7CisgICAgcmVzdWx0LnN5bnRoZXRpY0JvbGQg
PSAodHJhaXRzICYgTlNCb2xkRm9udE1hc2spICYmICEoYWN0dWFsVHJhaXRzICYgTlNCb2xkRm9u
dE1hc2spOworICAgIHJlc3VsdC5zeW50aGV0aWNPYmxpcXVlID0gKHRyYWl0cyAmIE5TSXRhbGlj
Rm9udE1hc2spICYmICEoYWN0dWFsVHJhaXRzICYgTlNJdGFsaWNGb250TWFzayk7CisgICAgcmVz
dWx0LmZvclByaW50ZXIgPSBOTzsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgQk9P
TCBhY2NlcHRhYmxlQ2hvaWNlKE5TRm9udFRyYWl0TWFzayBkZXNpcmVkVHJhaXRzLCBpbnQgZGVz
aXJlZFdlaWdodCwKICAgICBOU0ZvbnRUcmFpdE1hc2sgY2FuZGlkYXRlVHJhaXRzLCBpbnQgY2Fu
ZGlkYXRlV2VpZ2h0KQogeworICAgIGRlc2lyZWRUcmFpdHMgJj0gflNZTlRIRVNJWkVEX0ZPTlRf
VFJBSVRTOwogICAgIHJldHVybiAoY2FuZGlkYXRlVHJhaXRzICYgZGVzaXJlZFRyYWl0cykgPT0g
ZGVzaXJlZFRyYWl0czsKIH0KIApAQCAtNDEyLDE5ICszNTMsMTMgQEAgc3RhdGljIEJPT0wgYmV0
dGVyQ2hvaWNlKE5TRm9udFRyYWl0TWFzawogICAgIGludCBpID0gMDsKICAgICBOU0ZvbnRUcmFp
dE1hc2sgbWFzazsKICAgICB3aGlsZSAoKG1hc2sgPSBtYXNrc1tpKytdKSkgewotICAgICAgICBp
ZiAoKGRlc2lyZWRUcmFpdHMgJiBtYXNrKSAhPSAwKSB7Ci0gICAgICAgICAgICBBU1NFUlQoKGNo
b3NlblRyYWl0cyAmIG1hc2spICE9IDApOwotICAgICAgICAgICAgQVNTRVJUKChjYW5kaWRhdGVU
cmFpdHMgJiBtYXNrKSAhPSAwKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIEJPT0wgY2hvc2VuSGFzVW53YW50ZWRUcmFpdCA9IChjaG9zZW5UcmFpdHMgJiBtYXNr
KSAhPSAwOwotICAgICAgICBCT09MIGNhbmRpZGF0ZUhhc1Vud2FudGVkVHJhaXQgPSAoY2FuZGlk
YXRlVHJhaXRzICYgbWFzaykgIT0gMDsKLSAgICAgICAgaWYgKCFjYW5kaWRhdGVIYXNVbndhbnRl
ZFRyYWl0ICYmIGNob3Nlbkhhc1Vud2FudGVkVHJhaXQpIHsKKyAgICAgICAgQk9PTCBkZXNpcmVk
ID0gKGRlc2lyZWRUcmFpdHMgJiBtYXNrKSAhPSAwOworICAgICAgICBCT09MIGNob3Nlbkhhc1Vu
d2FudGVkVHJhaXQgPSBkZXNpcmVkICE9ICgoY2hvc2VuVHJhaXRzICYgbWFzaykgIT0gMCk7Cisg
ICAgICAgIEJPT0wgY2FuZGlkYXRlSGFzVW53YW50ZWRUcmFpdCA9IGRlc2lyZWQgIT0gKChjYW5k
aWRhdGVUcmFpdHMgJiBtYXNrKSAhPSAwKTsKKyAgICAgICAgaWYgKCFjYW5kaWRhdGVIYXNVbndh
bnRlZFRyYWl0ICYmIGNob3Nlbkhhc1Vud2FudGVkVHJhaXQpCiAgICAgICAgICAgICByZXR1cm4g
WUVTOwotICAgICAgICB9Ci0gICAgICAgIGlmICghY2hvc2VuSGFzVW53YW50ZWRUcmFpdCAmJiBj
YW5kaWRhdGVIYXNVbndhbnRlZFRyYWl0KSB7CisgICAgICAgIGlmICghY2hvc2VuSGFzVW53YW50
ZWRUcmFpdCAmJiBjYW5kaWRhdGVIYXNVbndhbnRlZFRyYWl0KQogICAgICAgICAgICAgcmV0dXJu
IE5POwotICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGludCBjaG9zZW5XZWlnaHREZWx0YSA9
IGNob3NlbldlaWdodCAtIGRlc2lyZWRXZWlnaHQ7CkBAIC00NjIsMTQgKzM5NywxNCBAQCBzdGF0
aWMgQk9PTCBiZXR0ZXJDaG9pY2UoTlNGb250VHJhaXRNYXNrCiAgICAgd2hpbGUgKChhdmFpbGFi
bGVGb250ID0gW2F2YWlsYWJsZUZvbnRzIG5leHRPYmplY3RdKSkgewogICAgICAgICBpZiAoW2Rl
c2lyZWRGYW1pbHkgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTphdmFpbGFibGVGb250XSA9PSBOU09y
ZGVyZWRTYW1lKSB7CiAgICAgICAgICAgICBOU0ZvbnQgKm5hbWVNYXRjaGVkRm9udCA9IFtOU0Zv
bnQgZm9udFdpdGhOYW1lOmF2YWlsYWJsZUZvbnQgc2l6ZTpzaXplXTsKLQkgICAgCi0JICAgIC8v
IFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLiAgQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8z
OTk5NDY3Piwgd2UgbmVlZCB0byAKLQkgICAgLy8gdHJlYXQgT3Nha2EtTW9ubyBhcyBmaXhlZCBw
aXRjaC4KLQkgICAgaWYgKFtkZXNpcmVkRmFtaWx5IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJP
c2FrYS1Nb25vIl0gPT0gTlNPcmRlcmVkU2FtZSAmJiBkZXNpcmVkVHJhaXRzID09IDApIHsKLQkJ
TE9HIChGb250U2VsZWN0aW9uLCAiZm91bmQgZXhhY3QgbWF0Y2ggZm9yIE9zYWthLU1vbm9cbiIp
OwotCQlyZXR1cm4gbmFtZU1hdGNoZWRGb250OwotCSAgICB9Ci0JICAgIAorICAgIAorICAgICAg
ICAgICAgLy8gU3BlY2lhbCBjYXNlIE9zYWthLU1vbm8uICBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9w
cm9ibGVtLzM5OTk0Njc+LCB3ZSBuZWVkIHRvIAorICAgICAgICAgICAgLy8gdHJlYXQgT3Nha2Et
TW9ubyBhcyBmaXhlZCBwaXRjaC4KKyAgICAgICAgICAgIGlmIChbZGVzaXJlZEZhbWlseSBjYXNl
SW5zZW5zaXRpdmVDb21wYXJlOkAiT3Nha2EtTW9ubyJdID09IE5TT3JkZXJlZFNhbWUgJiYgZGVz
aXJlZFRyYWl0cyA9PSAwKSB7CisgICAgICAgICAgICAgICAgTE9HIChGb250U2VsZWN0aW9uLCAi
Zm91bmQgZXhhY3QgbWF0Y2ggZm9yIE9zYWthLU1vbm9cbiIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBuYW1lTWF0Y2hlZEZvbnQ7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIE5TRm9u
dFRyYWl0TWFzayB0cmFpdHMgPSBbZm9udE1hbmFnZXIgdHJhaXRzT2ZGb250Om5hbWVNYXRjaGVk
Rm9udF07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICgodHJhaXRzICYgZGVzaXJlZFRy
YWl0cykgPT0gZGVzaXJlZFRyYWl0cyl7CkBAIC01MDksMTIgKzQ0NCwxMCBAQCBzdGF0aWMgQk9P
TCBiZXR0ZXJDaG9pY2UoTlNGb250VHJhaXRNYXNrCiAgICAgICAgIE5TRm9udFRyYWl0TWFzayBm
b250VHJhaXRzID0gW1tmb250SW5mbyBvYmplY3RBdEluZGV4OjNdIHVuc2lnbmVkSW50VmFsdWVd
OwogICAgICAgICAKICAgICAgICAgQk9PTCBuZXdXaW5uZXI7Ci0gICAgICAgIAogICAgICAgICBp
ZiAoIWNob3NlRm9udCkgewogICAgICAgICAgICAgbmV3V2lubmVyID0gYWNjZXB0YWJsZUNob2lj
ZShkZXNpcmVkVHJhaXRzLCBERVNJUkVEX1dFSUdIVCwgZm9udFRyYWl0cywgZm9udFdlaWdodCk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuZXdXaW5uZXIgPSBiZXR0ZXJDaG9pY2Uo
ZGVzaXJlZFRyYWl0cywgREVTSVJFRF9XRUlHSFQsCi0gICAgICAgICAgICAgICAgY2hvc2VuVHJh
aXRzLCBjaG9zZW5XZWlnaHQsIGZvbnRUcmFpdHMsIGZvbnRXZWlnaHQpOworICAgICAgICAgICAg
bmV3V2lubmVyID0gYmV0dGVyQ2hvaWNlKGRlc2lyZWRUcmFpdHMsIERFU0lSRURfV0VJR0hULCBj
aG9zZW5UcmFpdHMsIGNob3NlbldlaWdodCwgZm9udFRyYWl0cywgZm9udFdlaWdodCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAobmV3V2lubmVyKSB7CkluZGV4OiBXZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaix2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMApkaWZmIC1wIC11IC1yMS4xMCBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKLS0tIFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyOCBT
ZXAgMjAwNSAxODo0MzoxNCAtMDAwMAkxLjEwCisrKyBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJMzAgU2VwIDIwMDUgMTU6MTk6MDUgLTAwMDAKQEAgLTcwLDcgKzcwLDYg
QEAKIAkJOTM5ODEwM0MwODI0QkYwMTAwOERGMDM4IC8qIFdlYkJyaWRnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVBRkI0NUUwMkI5NERDODAxODYz
NUNBIC8qIFdlYkJyaWRnZS5oICovOyB9OwogCQk5Mzk4MTAzRDA4MjRCRjAxMDA4REYwMzggLyog
V2ViQ29va2llQWRhcHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjU0ODhDRjQwMkNCMDRFRTAxRkY2Mjc0IC8qIFdlYkNvb2tpZUFkYXB0ZXIuaCAq
LzsgfTsKIAkJOTM5ODEwM0UwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZpbGVCdXR0b24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMTEwMjI4MDM2NjdD
RjEwMDg2MzVDRSAvKiBXZWJGaWxlQnV0dG9uLmggKi87IH07Ci0JCTkzOTgxMDNGMDgyNEJGMDEw
MDhERjAzOCAvKiBXZWJHbHlwaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjVFN0IyNDUwMzAyNUNFODAxQTgwMTgwIC8qIFdlYkdseXBoQnVm
ZmVyLmggKi87IH07CiAJCTkzOTgxMDQwMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJJbWFnZVJlbmRl
cmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Q0Ux
RjhBMDAyQTVDNkYzMEVDQTJBQ0QgLyogV2ViSW1hZ2VSZW5kZXJlci5oICovOyB9OwogCQk5Mzk4
MTA0MTA4MjRCRjAxMDA4REYwMzggLyogV2ViSW1hZ2VSZW5kZXJlckZhY3RvcnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlDRTFGOEEyMDJBNUM2RjMw
RUNBMkFDRCAvKiBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5oICovOyB9OwogCQk5Mzk4MTA0MjA4
MjRCRjAxMDA4REYwMzggLyogV2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzQ1RDRFQTAzNjVDNUIyMDA4
NjM1Q0UgLyogV2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxMCw3ICsyMDksNiBAQAogCQk5Mzk4
MTBERTA4MjRCRjAxMDA4REYwMzggLyogV2ViQnJpZGdlLm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUFGQjQ1RjAyQjk0REM4MDE4NjM1Q0EgLyogV2Vi
QnJpZGdlLm0gKi87IH07CiAJCTkzOTgxMERGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJDb29raWVB
ZGFwdGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTQ4OENGNTAyQ0IwNEVFMDFGRjYyNzQgLyogV2ViQ29va2llQWRhcHRlci5tICovOyB9OwogCQk5
Mzk4MTBFMDA4MjRCRjAxMDA4REYwMzggLyogV2ViRmlsZUJ1dHRvbi5tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMxMTAyMjkwMzY2N0NGMTAwODYzNUNF
IC8qIFdlYkZpbGVCdXR0b24ubSAqLzsgfTsKLQkJOTM5ODEwRTEwODI0QkYwMTAwOERGMDM4IC8q
IFdlYkdseXBoQnVmZmVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNUU3QjI0NjAzMDI1Q0U4MDFBODAxODAgLyogV2ViR2x5cGhCdWZmZXIubSAqLzsg
fTsKIAkJOTM5ODEwRTIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkltYWdlUmVuZGVyZXIubSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlDRTFGOEExMDJBNUM2
RjMwRUNBMkFDRCAvKiBXZWJJbWFnZVJlbmRlcmVyLm0gKi87IH07CiAJCTkzOTgxMEUzMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUNFMUY4QTMwMkE1QzZGMzBFQ0EyQUNEIC8q
IFdlYkltYWdlUmVuZGVyZXJGYWN0b3J5Lm0gKi87IH07CiAJCTkzOTgxMEU0MDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNDVENEVCMDM2NUM1QjIwMDg2MzVDRSAvKiBX
ZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubSAqLzsgfTsKQEAgLTU4NCw4ICs1ODIsNiBAQAog
CQlGNUUwQTc2RjAyQjhGRUU0MDFDMUE1MjUgLyogV2ViVVJMc1dpdGhUaXRsZXMubSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYlVSTHNXaXRoVGl0bGVzLm07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1RTBFMTA4MDJCQzQ1RjgwMTg2MzVDQSAvKiBXZWJT
dWJyZXNvdXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJT
dWJyZXNvdXJjZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUUwRTEw
OTAyQkM0NUY4MDE4NjM1Q0EgLyogV2ViU3VicmVzb3VyY2VMb2FkZXIubSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViU3VicmVzb3VyY2VMb2FkZXIubTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjVFN0IyNDUwMzAyNUNFODAxQTgwMTgwIC8qIFdlYkdseXBo
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdseXBoQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY1RTdCMjQ2MDMwMjVDRTgwMUE4MDE4
MCAvKiBXZWJHbHlwaEJ1ZmZlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGgg
PSBXZWJHbHlwaEJ1ZmZlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUVCQzQ1
NTAyMTM0QkMzMDFDQTE1MjAgLyogV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1RUJDNDU2MDIxMzRCQzMwMUNBMTUyMCAvKiBX
ZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsg
cGF0aCA9IFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjVGNzE3MUUwMjg4NDkzQzAxODYzNUNBIC8qIFdlYk5ldHNjYXBlUGx1Z2luUGFj
a2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOZXRzY2FwZVBsdWdp
blBhY2thZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5OSw4ICs5OTUsNiBA
QAogCQkJCTkzMDU4OTJBMDcwODY4QjMwMEU3OUQ5NiAvKiBXZWJEYXNoYm9hcmRSZWdpb24uaCAq
LywKIAkJCQk5MzExMDIyODAzNjY3Q0YxMDA4NjM1Q0UgLyogV2ViRmlsZUJ1dHRvbi5oICovLAog
CQkJCTkzMTEwMjI5MDM2NjdDRjEwMDg2MzVDRSAvKiBXZWJGaWxlQnV0dG9uLm0gKi8sCi0JCQkJ
RjVFN0IyNDUwMzAyNUNFODAxQTgwMTgwIC8qIFdlYkdseXBoQnVmZmVyLmggKi8sCi0JCQkJRjVF
N0IyNDYwMzAyNUNFODAxQTgwMTgwIC8qIFdlYkdseXBoQnVmZmVyLm0gKi8sCiAJCQkJQkUyNkYx
OEQwNTUxN0UwODAwQkZBMEMzIC8qIFdlYkdyYXBoaWNzQnJpZGdlLmggKi8sCiAJCQkJQkUyNkYx
OEUwNTUxN0UwODAwQkZBMEMzIC8qIFdlYkdyYXBoaWNzQnJpZGdlLm0gKi8sCiAJCQkJNTE0QzRD
MkEwNzVFN0RFNTAwQjg5Q0FEIC8qIFdlYkltYWdlRGVjb2RlSXRlbS5oICovLApAQCAtMTE1Niw3
ICsxMTUwLDYgQEAKIAkJCQk5Mzk4MTAzQzA4MjRCRjAxMDA4REYwMzggLyogV2ViQnJpZGdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTAzRDA4MjRCRjAxMDA4REYwMzggLyogV2ViQ29va2ll
QWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwM0UwODI0QkYwMTAwOERGMDM4IC8q
IFdlYkZpbGVCdXR0b24uaCBpbiBIZWFkZXJzICovLAotCQkJCTkzOTgxMDNGMDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJHbHlwaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNDAwODI0
QkYwMTAwOERGMDM4IC8qIFdlYkltYWdlUmVuZGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
OTgxMDQxMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM5ODEwNDIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkphdmFTY3JpcHRU
ZXh0SW5wdXRQYW5lbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNzMxLDcgKzE3MjQsNiBAQAogCQkJ
CTkzOTgxMERFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJCcmlkZ2UubSBpbiBTb3VyY2VzICovLAog
CQkJCTkzOTgxMERGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJDb29raWVBZGFwdGVyLm0gaW4gU291
cmNlcyAqLywKIAkJCQk5Mzk4MTBFMDA4MjRCRjAxMDA4REYwMzggLyogV2ViRmlsZUJ1dHRvbi5t
IGluIFNvdXJjZXMgKi8sCi0JCQkJOTM5ODEwRTEwODI0QkYwMTAwOERGMDM4IC8qIFdlYkdseXBo
QnVmZmVyLm0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBFMjA4MjRCRjAxMDA4REYwMzggLyog
V2ViSW1hZ2VSZW5kZXJlci5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRTMwODI0QkYwMTAw
OERGMDM4IC8qIFdlYkltYWdlUmVuZGVyZXJGYWN0b3J5Lm0gaW4gU291cmNlcyAqLywKIAkJCQk5
Mzk4MTBFNDA4MjRCRjAxMDA4REYwMzggLyogV2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLm0g
aW4gU291cmNlcyAqLywKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcu
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYlZpZXcuc3VicHJvai9X
ZWJIVE1MVmlldy5tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ3MQpkaWZmIC1wIC11IC1yMS40
NzEgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJIVE1MVmlldy5tCi0tLSBXZWJLaXQvV2ViVmll
dy5zdWJwcm9qL1dlYkhUTUxWaWV3Lm0JMjQgU2VwIDIwMDUgMTA6NTg6MTkgLTAwMDAJMS40NzEK
KysrIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubQkzMCBTZXAgMjAwNSAxNTox
OTowOSAtMDAwMApAQCAtMjQwNiwyNCArMjQwNiwxMiBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmxh
c3RIaXRWaWV3ID0gbmlsOwogICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXddIHNl
dEFkZGl0aW9uYWxDbGlwOnJlY3RdOwogCiAgICAgTlNfRFVSSU5HIHsKLSAgICAgICAgV2ViVGV4
dFJlbmRlcmVyRmFjdG9yeSAqdGV4dFJlbmRlcmVyRmFjdG9yeUlmQ29hbGVzY2luZyA9IG5pbDsK
LSAgICAgICAgaWYgKFtXZWJUZXh0UmVuZGVyZXIgc2hvdWxkQnVmZmVyVGV4dERyYXdpbmddICYm
IFtOU1ZpZXcgZm9jdXNWaWV3XSkgewotICAgICAgICAgICAgdGV4dFJlbmRlcmVyRmFjdG9yeUlm
Q29hbGVzY2luZyA9IFtXZWJUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldOwotICAg
ICAgICAgICAgW3RleHRSZW5kZXJlckZhY3RvcnlJZkNvYWxlc2Npbmcgc3RhcnRDb2FsZXNjZVRl
eHREcmF3aW5nXTsKLSAgICAgICAgfQotCiAgICAgICAgIGlmIChbc2VsZiBfdHJhbnNwYXJlbnRC
YWNrZ3JvdW5kXSkgewogICAgICAgICAgICAgW1tOU0NvbG9yIGNsZWFyQ29sb3JdIHNldF07CiAg
ICAgICAgICAgICBOU1JlY3RGaWxsIChyZWN0KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgLy9kb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKICAgICAgICAg
W1tzZWxmIF9icmlkZ2VdIGRyYXdSZWN0OnJlY3RdOwotICAgICAgICAvL0xPRyhUaW1pbmcsICJk
cmF3IHRpbWUgJWUiLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0KTsKLQotICAg
ICAgICBpZiAodGV4dFJlbmRlcmVyRmFjdG9yeUlmQ29hbGVzY2luZyAhPSBuaWwpIHsKLSAgICAg
ICAgICAgIFt0ZXh0UmVuZGVyZXJGYWN0b3J5SWZDb2FsZXNjaW5nIGVuZENvYWxlc2NlVGV4dERy
YXdpbmddOwotICAgICAgICB9CiAKICAgICAgICAgWyhXZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVy
dmlld10gcmVzZXRBZGRpdGlvbmFsQ2xpcF07CiAKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnBy
b2ovV2ViVGV4dFZpZXcubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dl
YlZpZXcuc3VicHJvai9XZWJUZXh0Vmlldy5tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYzCmRp
ZmYgLXAgLXUgLXIxLjYzIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVGV4dFZpZXcubQotLS0g
V2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJUZXh0Vmlldy5tCTI2IFNlcCAyMDA1IDE5OjA3OjAw
IC0wMDAwCTEuNjMKKysrIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVGV4dFZpZXcubQkzMCBT
ZXAgMjAwNSAxNToxOTowOSAtMDAwMApAQCAtMTMwLDEyICsxMzAsOCBAQAogLSAodm9pZClzZXRG
aXhlZFdpZHRoRm9udAogewogICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtzZWxm
IF9wcmVmZXJlbmNlc107Ci0gICAgTlNTdHJpbmcgKmZhbWlsaWVzWzJdOwotICAgIGZhbWlsaWVz
WzBdID0gW3ByZWZlcmVuY2VzIGZpeGVkRm9udEZhbWlseV07Ci0gICAgZmFtaWxpZXNbMV0gPSBu
aWw7Ci0gICAgTlNGb250ICpmb250ID0gW1tXZWJUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZh
Y3RvcnldIGZvbnRXaXRoRmFtaWxpZXM6ZmFtaWxpZXMgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpdHM6MCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZTpbcHJlZmVyZW5jZXMgZGVmYXVsdEZpeGVkRm9udFNpemVdKl90
ZXh0U2l6ZU11bHRpcGxpZXJdOworICAgIE5TRm9udCAqZm9udCA9IFtbV2ViVGV4dFJlbmRlcmVy
RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBjYWNoZWRGb250RnJvbUZhbWlseTpbcHJlZmVyZW5jZXMg
Zml4ZWRGb250RmFtaWx5XQorICAgICAgICB0cmFpdHM6MCBzaXplOltwcmVmZXJlbmNlcyBkZWZh
dWx0Rml4ZWRGb250U2l6ZV0gKiBfdGV4dFNpemVNdWx0aXBsaWVyXTsKICAgICBpZiAoZm9udCkg
ewogICAgICAgICBbc2VsZiBzZXRGb250OmZvbnRdOwogICAgIH0KSW5kZXg6IFdlYktpdC9XZWJW
aWV3LnN1YnByb2ovV2ViVmlldy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJL
aXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXcubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMDkK
ZGlmZiAtcCAtdSAtcjEuMzA5IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5tCi0tLSBX
ZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXcubQkyOCBTZXAgMjAwNSAxODo0MzoxNCAtMDAw
MAkxLjMwOQorKysgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3Lm0JMzAgU2VwIDIwMDUg
MTU6MTk6MTEgLTAwMDAKQEAgLTQwNCw3ICs0MDQsNyBAQCBzdGF0aWMgYm9vbCBkZWJ1Z1dpZGdl
dCA9IHRydWU7CiAKICsgKHZvaWQpX3NldEFsd2F5c1VzZUFUU1U6KEJPT0wpZgogewotICAgIFtX
ZWJUZXh0UmVuZGVyZXIgX3NldEFsd2F5c1VzZUFUU1U6Zl07CisgICAgW1dlYlRleHRSZW5kZXJl
ciBzZXRBbHdheXNVc2VBVFNVOmZdOwogfQogCiArIChCT09MKWNhblNob3dGaWxlOihOU1N0cmlu
ZyAqKXBhdGgK
</data>
<flag name="review"
          id="642"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>