<?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>72780</bug_id>
          
          <creation_ts>2011-11-18 17:48:52 -0800</creation_ts>
          <short_desc>Move HarfBuzz files into their own directory</short_desc>
          <delta_ts>2011-12-27 16:49:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Tony Chang">tony</assigned_to>
          <cc>abarth</cc>
    
    <cc>agl</cc>
    
    <cc>bashi</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>efidler</cc>
    
    <cc>eric</cc>
    
    <cc>evan</cc>
    
    <cc>jamesr</cc>
    
    <cc>jkjiang</cc>
    
    <cc>jpetsovits</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>506244</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-18 17:48:52 -0800</bug_when>
    <thetext>Following up from Antonio Gomes&apos;s comment in bug #72768 (https://bugs.webkit.org/show_bug.cgi?id=72768#c5), we should move the HarfBuzz files from WebCore/platform/graphics/chromium
to a HarfBuzz directory since both the Chromium Linux and BlackBerry-port make use of these files. These files include:

platform/graphics/chromium/ComplexTextControllerLinux.cpp
platform/graphics/chromium/FontCacheLinux.cpp
platform/graphics/chromium/FontLinux.cpp
platform/graphics/chromium/FontPlatformDataLinux.cpp
platform/graphics/chromium/HarfbuzzSkia.cpp
platform/graphics/chromium/SimpleFontDataLinux.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506249</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-18 17:53:59 -0800</bug_when>
    <thetext>SGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506253</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-18 17:57:19 -0800</bug_when>
    <thetext>Should we change the &quot;Linux&quot; suffix to &quot;HarfBuzz&quot; at the same time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506255</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-18 17:58:38 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Should we change the &quot;Linux&quot; suffix to &quot;HarfBuzz&quot; at the same time?

Sounds reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524959</commentid>
    <comment_count>4</comment_count>
      <attachid>120114</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-12-20 16:43:36 -0800</bug_when>
    <thetext>Created attachment 120114
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524961</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-20 16:46:50 -0800</bug_when>
    <thetext>Attachment 120114 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/harfbuzz/HarfBuzzSkia.cpp:47:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524974</commentid>
    <comment_count>6</comment_count>
      <attachid>120114</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-12-20 17:00:38 -0800</bug_when>
    <thetext>Comment on attachment 120114
Patch

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

LGTM.

FYI, I&apos;m working on Harfbuzz-ng transition on Chromium port (https://bugs.webkit.org/show_bug.cgi?id=67933). It will take time because Harfbuzz-ng have performance and rendering regression as far as I tested.

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1481
&gt; +            [&apos;include&apos;, &apos;platform/graphics/harfbuzz/SimpleFontDataSkia\\.cpp$&apos;],

Shouldn&apos;t we also add &apos;harfbuzz&apos; in &apos;exclude&apos;  pattern at line 1396 and 1451?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527412</commentid>
    <comment_count>7</comment_count>
      <attachid>120605</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-12-27 10:35:37 -0800</bug_when>
    <thetext>Created attachment 120605
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527413</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-27 10:38:23 -0800</bug_when>
    <thetext>Attachment 120605 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/harfbuzz/HarfBuzzSkia.cpp:47:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527415</commentid>
    <comment_count>9</comment_count>
      <attachid>120605</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-12-27 10:49:31 -0800</bug_when>
    <thetext>Comment on attachment 120605
Patch

Looks sane to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527447</commentid>
    <comment_count>10</comment_count>
      <attachid>120605</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-27 12:16:13 -0800</bug_when>
    <thetext>Comment on attachment 120605
Patch

Attachment 120605 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11040333</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527451</commentid>
    <comment_count>11</comment_count>
      <attachid>120613</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-12-27 13:09:07 -0800</bug_when>
    <thetext>Created attachment 120613
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527505</commentid>
    <comment_count>12</comment_count>
      <attachid>120613</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-27 16:49:45 -0800</bug_when>
    <thetext>Comment on attachment 120613
Patch for landing

Clearing flags on attachment: 120613

Committed r103742: &lt;http://trac.webkit.org/changeset/103742&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527506</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-27 16:49:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120114</attachid>
            <date>2011-12-20 16:43:36 -0800</date>
            <delta_ts>2011-12-27 10:35:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72780-20111220164354.patch</filename>
            <type>text/plain</type>
            <size>189537</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdhNDNkZDFhZmRiNDll
MGI4ZDlmNjQ0ZTBiMjRjODY3MTE4ZjZhNy4uYmE2OGIxNjAwN2U1ODZkODBlNmIxMGEzZmJmOTIx
MzJkOGM4MmNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMzIEBACiAyMDExLTEyLTIwICBUb255
IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgTW92ZSBIYXJmQnV6eiBmaWxl
cyBpbnRvIHRoZWlyIG93biBkaXJlY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcyNzgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRm9udENhY2hlTGludXguY3BwIGdvdCBtb3ZlZCB0byBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwIHNpbmNlIGl0IHdhc24ndCBIYXJmQnV6
eiBzcGVjaWZpYy4KKworICAgICAgICBJIHVzZWQgSGFyZkJ1enogaW4gZmlsZW5hbWVzIHNpbmNl
IHRoYXQgc2VlbXMgdG8gYmUgaG93IHRoZSBuYW1lIGlzIGNhcGl0YWxpemVkIG9uIHRoZSBwcm9q
ZWN0IGhvbWUgcGFnZS4KKworICAgICAgICBGaXhlZCBzb21lIHN0eWxlIGVycm9ycyBjYXVnaHQg
YnkgdGhlIHN0eWxlIGNoZWNrZXIuCisKKyAgICAgICAgKiBQbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2U6CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9y
bURhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4
dENvbnRyb2xsZXJIYXJmQnV6ei5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVy
SGFyZkJ1enouaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmguCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6Lmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGlu
dXguaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSGFyZmJ1enpTa2lhLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNraWEuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L1NpbXBsZUZvbnREYXRhU2tpYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNw
cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dENhY2hlTGludXguY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQ
YWdlVHJlZU5vZGVTa2lhLmNwcDoKKworMjAxMS0xMi0yMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hy
b21pdW0ub3JnPgorCiAgICAgICAgIHNpemVvZihSZW5kZXJTdHlsZSkgaXMgNjQgaW5zdGVhZCBv
ZiA1NiBvbiBXaW5kb3dzICh4ODYpCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NDg3NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUJsYWNrQmVycnkuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2UKaW5kZXggOWM5NWMxM2VmODYxN2Y3YjFlZTk1ZjRiODVjOGYxMGIwZmVmZGExNS4uNTJjNGVi
MmM5OGRjYzYzZGU3OGM1OWY2OWUyMjhmMTE4NDQ2ZDRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtOCw3ICs4LDcgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9J
TkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2JsYWNrYmVy
cnkvQ29va2llRGF0YWJhc2VCYWNraW5nU3RvcmUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9za2lhIgotICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bSIgIyBGb3IgZm9udCBzdWJzeXN0ZW0KKyAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enoiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW50eXBlLyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tp
YSIKQEAgLTQyLDEyICs0MiwxMiBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICMgU2tp
YSBmb250IGJhY2tlbmQgc291cmNlcwogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9za2lhL1BsYXRmb3JtQnJpZGdlLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovU2ltcGxlRm9udERhdGFIYXJmQnV6ei5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ZvbnRDYWNoZVNraWEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBh
Z2VUcmVlTm9kZVNraWEuY3BwCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5n
eXAKaW5kZXggNDIzOGNjNzhhNjVmZDlmZmVhNTYzMzcwMjI5NTAxOGFlY2FiMTZlOC4uYzlkZDdi
OWFiMGU0ZDhlMmI2M2MzMzUxMDhmNTZiNWEzZTVjZWQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXAKQEAgLTIzMSw2ICsyMzEsMTEgQEAKICAgICAgICAgIyBGSVhNRTog
QWxzbyBlbmFibGUgdGhpcyBmb3IgV2luZG93cyBhZnRlciB2ZXJpZnlpbmcgbm8gd2FybmluZ3MK
ICAgICAgICAgJ2Nocm9taXVtX2NvZGUnOiAxLAogICAgICAgfV0sCisgICAgICBbJ3VzZV94MTE9
PTEgb3IgT1M9PSJhbmRyb2lkIicsIHsKKyAgICAgICAgJ3dlYmNvcmVfaW5jbHVkZV9kaXJzJzog
WworICAgICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6eicsCisgICAgICAgIF0s
CisgICAgICB9XSwKICAgICAgIFsnT1M9PSJ3aW4iIGFuZCBidWlsZHR5cGU9PSJPZmZpY2lhbCIn
LCB7CiAgICAgICAgICMgT24gd2luZG93cyBvZmZpY2lhbCByZWxlYXNlIGJ1aWxkcywgd2UgdHJ5
IHRvIHByZXNlcnZlIHN5bWJvbCBzcGFjZS4KICAgICAgICAgJ2Rlcml2ZWRfc291cmNlc19hZ2dy
ZWdhdGVfZmlsZXMnOiBbCkBAIC0xNDcwLDExICsxNDc1LDEwIEBACiAgICAgICAgIFsndXNlX3gx
MSA9PSAxJywgewogICAgICAgICAgICdzb3VyY2VzLyc6IFsKICAgICAgICAgICAgICMgQ2hlcnJ5
LXBpY2sgZmlsZXMgZXhjbHVkZWQgYnkgdGhlIGJyb2FkZXIgcmVndWxhciBleHByZXNzaW9ucyBh
Ym92ZS4KLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eFxcLmNwcCQnXSwKLSAgICAgICAgICAgIFsnaW5j
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eFxcLmNwcCQn
XSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250TGludXhcXC5jcHAkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4XFwuY3BwJCddLAotICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRh
TGludXhcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enpcXC5jcHAkJ10sCisgICAg
ICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZC
dXp6XFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6elxcLmNwcCQnXSwKKyAgICAgICAgICAg
IFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9TaW1wbGVGb250RGF0YVNr
aWFcXC5jcHAkJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgfSwgeyAjIHVzZV94MTE9PTAKICAg
ICAgICAgICAnc291cmNlcy8nOiBbCkBAIC0xNjM1LDYgKzE2MzksNyBAQAogICAgICAgICAgICAg
WydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFNpemVDR1xcLmNwcCQnXSwKICAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNo
cm9taXVtTWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRNYWNcXC5tbSQnXSwKKyAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWFcXC5jcHAkJ10sCiAgICAgICAgICAgICBb
J2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWFc
XC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vY2hyb21pdW0vRHJh
Z0ltYWdlQ2hyb21pdW1NYWNcXC5jcHAkJ10sCiAgICAgICAgICAgXSwKQEAgLTE2NjUsNiArMTY3
MCw3IEBACiAKICAgICAgICAgICAgICMgVGhlIENocm9taXVtIFdpbiBjdXJyZW50bHkgdXNlcyBH
bHlwaFBhZ2VUcmVlTm9kZUNocm9taXVtV2luLmNwcCBmcm9tCiAgICAgICAgICAgICAjIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtLCBpbmNsdWRlZCBieSByZWdleCBhYm92ZSwgaW5zdGVhZC4K
KyAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNo
ZVNraWFcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWFcXC5jcHAkJ10sCiAKICAgICAgICAgICAgICMg
U3lzdGVtSW5mby5jcHAgaXMgdXNlZnVsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGNvcHkgaXQuCkBA
IC0xNjc1LDE0ICsxNjgxLDE0IEBACiAgICAgICAgICAgJ3NvdXJjZXMvJzogWwogICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtTGludXhc
XC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vY2hyb21pdW0vRmls
ZVN5c3RlbUNocm9taXVtTGludXhcXC5jcHAkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXhcXC5j
cHAkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udExpbnV4XFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eFxcLmNwcCQnXSwKICAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VU
cmVlTm9kZUxpbnV4XFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYVxcLmNwcCQnXSwKICAgICAgICAgICAgIFsn
ZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1cXC5jcHAk
J10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2ltcGxlRm9udERhdGFMaW51eFxcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WRE1YUGFyc2VyXFwuY3BwJCddLAorICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29u
dHJvbGxlckhhcmZCdXp6XFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6elxcLmNwcCQnXSwKKyAgICAgICAgICAg
IFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRh
SGFyZkJ1enpcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZmJ1enpTa2lhXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L1NpbXBsZUZvbnREYXRhU2tpYVxcLmNw
cCQnXSwKICAgICAgICAgICBdLAogICAgICAgICB9LCB7ICMgT1MhPSJhbmRyb2lkIgogICAgICAg
ICAgICdzb3VyY2VzLyc6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4NTY5ODcwMTAzYTc4ZDMyM2Yy
YjI4YWMxNjdlMjVhZjYxOThhNTQxLi44MmNmMDVmZGU1NDYyNGRlNDk3YWY3Mjk3ZGE4YTNhYjJk
MjZiZmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTEzLDggKzM1MTMsNiBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgnLApAQCAtMzUyMywxNCArMzUyMSwxMCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENo
cm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRD
YWNoZUFuZHJvaWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcCcsCi0gICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4u
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZv
cm1EYXRhQ2hyb21pdW1XaW4uaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRSZW5kZXJTdHlsZS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9t
aXVtV2luLmgnLApAQCAtMzU0MSw4ICszNTM1LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUNocm9taXVtV2luLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0hhcmZidXp6U2tpYS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0hhcmZidXp6U2tpYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JY29uQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JY29uQ2hyb21pdW1BbmRyb2lkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oJywKQEAgLTM1NzgsNyArMzU3
MCw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hy
b21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFk
ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5jcHAnLApAQCAtMzc4OSw2
ICszNzgwLDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3Rr
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFBvaW50R3RrLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsuY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRy
b2xsZXJIYXJmQnV6ei5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFI
YXJmQnV6ei5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6elNraWEuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9I
YXJmQnV6elNraWEuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
U2ltcGxlRm9udERhdGFTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbG9yTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29t
cGxleFRleHRDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oJywKQEAgLTM4OTUsNiArMzg5NCw3IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zsb2F0UG9pbnRTa2lh
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFJlY3RTa2lh
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lh
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvRm9udFNraWEuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxp
bnV4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwODdjMjMzMDkwMWZlYTZh
M2U3ZjE2YzRkM2YwZjc3ZGVmYTM0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NzEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXJM
aW51eC5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2lu
Y2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRleHRS
dW4uaCIKLQotZXh0ZXJuICJDIiB7Ci0jaW5jbHVkZSAiaGFyZmJ1enotdW5pY29kZS5oIgotfQot
Ci0jaW5jbHVkZSA8dW5pY29kZS9ub3JtbHpyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ly8gSGFyZmJ1enogdXNlcyAyNi42IGZpeGVkIHBvaW50IHZhbHVlcyBmb3IgcGl4ZWwgb2Zmc2V0
cy4gSG93ZXZlciwgd2UgZG9uJ3QKLS8vIGhhbmRsZSBzdWJwaXhlbCBwb3NpdGlvbmluZyBzbyB0
aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdHJ1bmNhdGUgSGFyZmJ1enoKLS8vIHZhbHVlcyB0byBh
IG51bWJlciBvZiBwaXhlbHMuCi1zdGF0aWMgaW50IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdl
cihIQl9GaXhlZCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUgPj4gNjsKLX0KLQotQ29tcGxl
eFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgVGV4dFJ1biYgcnVu
LCBpbnQgc3RhcnRpbmdYLCBpbnQgc3RhcnRpbmdZLCB1bnNpZ25lZCB3b3JkU3BhY2luZywgdW5z
aWduZWQgbGV0dGVyU3BhY2luZywgdW5zaWduZWQgcGFkZGluZywgY29uc3QgRm9udCogZm9udCkK
LSAgICA6IG1fZm9udChmb250KQotICAgICwgbV9ydW4oZ2V0Tm9ybWFsaXplZFRleHRSdW4ocnVu
LCBtX25vcm1hbGl6ZWRSdW4sIG1fbm9ybWFsaXplZEJ1ZmZlcikpCi17Ci0gICAgLy8gRG8gbm90
IHVzZSB8cnVufCBpbnNpZGUgdGhpcyBjb25zdHJ1Y3Rvci4gVXNlIHxtX3J1bnwgaW5zdGVhZC4K
LQotICAgIG1lbXNldCgmbV9pdGVtLCAwLCBzaXplb2YobV9pdGVtKSk7Ci0gICAgLy8gV2UgY2Fu
bm90IGtub3csIGFoZWFkIG9mIHRpbWUsIGhvdyBtYW55IGdseXBocyBhIGdpdmVuIHNjcmlwdCBy
dW4KLSAgICAvLyB3aWxsIHByb2R1Y2UuIFdlIHRha2UgYSBndWVzcyB0aGF0IHNjcmlwdCBydW5z
IHdpbGwgbm90IHByb2R1Y2UgbW9yZQotICAgIC8vIHRoYW4gdHdpY2UgYXMgbWFueSBnbHlwaHMg
YXMgdGhlcmUgYXJlIGNvZGUgcG9pbnRzIHBsdXMgYSBiaXQgb2YKLSAgICAvLyBwYWRkaW5nIGFu
ZCBmYWxsYmFjayBpZiB3ZSBmaW5kIHRoYXQgd2UgYXJlIHdyb25nLgotICAgIGNyZWF0ZUdseXBo
QXJyYXlzKChtX3J1bi5sZW5ndGgoKSArIDIpICogMik7Ci0KLSAgICBtX2l0ZW0ubG9nX2NsdXN0
ZXJzID0gbmV3IHVuc2lnbmVkIHNob3J0W21fcnVuLmxlbmd0aCgpXTsKLQotICAgIG1faXRlbS5m
YWNlID0gMDsKLSAgICBtX2l0ZW0uZm9udCA9IGFsbG9jSGFyZmJ1enpGb250KCk7Ci0KLSAgICBt
X2l0ZW0uaXRlbS5iaWRpTGV2ZWwgPSBtX3J1bi5ydGwoKTsKLQotICAgIG1faXRlbS5zdHJpbmcg
PSBtX3J1bi5jaGFyYWN0ZXJzKCk7Ci0gICAgbV9pdGVtLnN0cmluZ0xlbmd0aCA9IG1fcnVuLmxl
bmd0aCgpOwotCi0gICAgcmVzZXQoc3RhcnRpbmdYKTsKLSAgICBtX3N0YXJ0aW5nWSA9IHN0YXJ0
aW5nWTsKLQotICAgIHNldFdvcmRTcGFjaW5nQWRqdXN0bWVudCh3b3JkU3BhY2luZyk7Ci0gICAg
c2V0TGV0dGVyU3BhY2luZ0FkanVzdG1lbnQobGV0dGVyU3BhY2luZyk7Ci0gICAgc2V0UGFkZGlu
ZyhwYWRkaW5nKTsKLX0KLQotQ29tcGxleFRleHRDb250cm9sbGVyOjp+Q29tcGxleFRleHRDb250
cm9sbGVyKCkKLXsKLSAgICBmYXN0RnJlZShtX2l0ZW0uZm9udCk7Ci0gICAgZGVsZXRlR2x5cGhB
cnJheXMoKTsKLSAgICBkZWxldGVbXSBtX2l0ZW0ubG9nX2NsdXN0ZXJzOwotfQotCi1ib29sIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6aXNXb3JkQnJlYWsodW5zaWduZWQgaW5kZXgpCi17Ci0gICAg
cmV0dXJuIGluZGV4ICYmIGlzQ29kZXBvaW50U3BhY2UobV9pdGVtLnN0cmluZ1tpbmRleF0pICYm
ICFpc0NvZGVwb2ludFNwYWNlKG1faXRlbS5zdHJpbmdbaW5kZXggLSAxXSk7Ci19Ci0KLWludCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OmRldGVybWluZVdvcmRCcmVha1NwYWNpbmcodW5zaWduZWQg
bG9nQ2x1c3RlcnNJbmRleCkKLXsKLSAgICBpbnQgd29yZEJyZWFrU3BhY2luZyA9IDA7Ci0gICAg
Ly8gVGhlIGZpcnN0IGhhbGYgb2YgdGhlIGNvbmp1bmN0aW9uIHdvcmtzIGFyb3VuZCB0aGUgY2Fz
ZSB3aGVyZQotICAgIC8vIG91dHB1dCBnbHlwaHMgYXJlbid0IGFzc29jaWF0ZWQgd2l0aCBhbnkg
Y29kZXBvaW50cyBieSB0aGUKLSAgICAvLyBjbHVzdGVycyBsb2cuCi0gICAgaWYgKGxvZ0NsdXN0
ZXJzSW5kZXggPCBtX2l0ZW0uaXRlbS5sZW5ndGgKLSAgICAgICAgJiYgaXNXb3JkQnJlYWsobV9p
dGVtLml0ZW0ucG9zICsgbG9nQ2x1c3RlcnNJbmRleCkpIHsKLSAgICAgICAgd29yZEJyZWFrU3Bh
Y2luZyA9IG1fd29yZFNwYWNpbmdBZGp1c3RtZW50OwotCi0gICAgICAgIGlmIChtX3BhZGRpbmcg
PiAwKSB7Ci0gICAgICAgICAgICBpbnQgdG9QYWQgPSByb3VuZGYobV9wYWRQZXJXb3JkQnJlYWsg
KyBtX3BhZEVycm9yKTsKLSAgICAgICAgICAgIG1fcGFkRXJyb3IgKz0gbV9wYWRQZXJXb3JkQnJl
YWsgLSB0b1BhZDsKLQotICAgICAgICAgICAgaWYgKG1fcGFkZGluZyA8IHRvUGFkKQotICAgICAg
ICAgICAgICAgIHRvUGFkID0gbV9wYWRkaW5nOwotICAgICAgICAgICAgbV9wYWRkaW5nIC09IHRv
UGFkOwotICAgICAgICAgICAgd29yZEJyZWFrU3BhY2luZyArPSB0b1BhZDsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gd29yZEJyZWFrU3BhY2luZzsKLX0KLQotLy8gc2V0UGFkZGluZyBz
ZXRzIGEgbnVtYmVyIG9mIHBpeGVscyB0byBiZSBkaXN0cmlidXRlZCBhY3Jvc3MgdGhlIFRleHRS
dW4uCi0vLyBXZWJLaXQgdXNlcyB0aGlzIHRvIGp1c3RpZnkgdGV4dC4KLXZvaWQgQ29tcGxleFRl
eHRDb250cm9sbGVyOjpzZXRQYWRkaW5nKGludCBwYWRkaW5nKQotewotICAgIG1fcGFkZGluZyA9
IHBhZGRpbmc7Ci0gICAgbV9wYWRFcnJvciA9IDA7Ci0gICAgaWYgKCFtX3BhZGRpbmcpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlIGhhdmUgcGFkZGluZyB0byBkaXN0cmlidXRlLCB0
aGVuIHdlIHRyeSB0byBnaXZlIGFuIGVxdWFsCi0gICAgLy8gYW1vdW50IHRvIGVhY2ggc3BhY2Uu
IFRoZSBsYXN0IHNwYWNlIGdldHMgdGhlIHNtYWxsZXIgYW1vdW50LCBpZgotICAgIC8vIGFueS4K
LSAgICB1bnNpZ25lZCBudW1Xb3JkQnJlYWtzID0gMDsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2l0ZW0uc3RyaW5nTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGlzV29yZEJy
ZWFrKGkpKQotICAgICAgICAgICAgbnVtV29yZEJyZWFrcysrOwotICAgIH0KLQotICAgIGlmIChu
dW1Xb3JkQnJlYWtzKQotICAgICAgICBtX3BhZFBlcldvcmRCcmVhayA9IG1fcGFkZGluZyAvIG51
bVdvcmRCcmVha3M7Ci0gICAgZWxzZQotICAgICAgICBtX3BhZFBlcldvcmRCcmVhayA9IDA7Ci19
Ci0KLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpyZXNldChpbnQgb2Zmc2V0KQotewotICAg
IG1faW5kZXhPZk5leHRTY3JpcHRSdW4gPSAwOwotICAgIG1fb2Zmc2V0WCA9IG9mZnNldDsKLX0K
LQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldHVwRm9yUlRMKCkKLXsKLSAgICBpbnQg
cGFkZGluZyA9IG1fcGFkZGluZzsKLSAgICAvLyBGSVhNRTogdGhpcyBjYXVzZXMgdXMgdG8gc2hh
cGUgdGhlIHRleHQgdHdpY2UgLS0gb25jZSB0byBjb21wdXRlIHRoZSB3aWR0aCBhbmQgdGhlbiBh
Z2FpbgotICAgIC8vIGJlbG93IHdoZW4gYWN0dWFsbHkgcmVuZGVyaW5nLiBDaGFuZ2UgQ29tcGxl
eFRleHRDb250cm9sbGVyIHRvIG1hdGNoIHBsYXRmb3JtL21hYyBhbmQKLSAgICAvLyBwbGF0Zm9y
bS9jaHJvbWl1bS93aW4gYnkgaGF2aW5nIGl0IHN0b3JlIHRoZSBzaGFwZWQgcnVucywgc28gd2Ug
Y2FuIHJldXNlIHRoZSByZXN1bHRzLgotICAgIHJlc2V0KG1fb2Zmc2V0WCArIHdpZHRoT2ZGdWxs
UnVuKCkpOwotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBwYWRkaW5nIGFnYWluIGJlY2F1c2Ug
Q29tcGxleFRleHRDb250cm9sbGVyIGxheW91dCBjb25zdW1lZCB0aGUgdmFsdWUuCi0gICAgLy8g
Rml4aW5nIHRoZSBhYm92ZSBwcm9ibGVtIHdvdWxkIGhlbHAgaGVyZSB0b28uCi0gICAgc2V0UGFk
ZGluZyhwYWRkaW5nKTsKLX0KLQotLy8gQWR2YW5jZSB0byB0aGUgbmV4dCBzY3JpcHQgcnVuLCBy
ZXR1cm5pbmcgZmFsc2Ugd2hlbiB0aGUgZW5kIG9mIHRoZQotLy8gVGV4dFJ1biBoYXMgYmVlbiBy
ZWFjaGVkLgotYm9vbCBDb21wbGV4VGV4dENvbnRyb2xsZXI6Om5leHRTY3JpcHRSdW4oKQotewot
ICAgIC8vIEVuc3VyZSB3ZSdyZSBub3QgcG9pbnRpbmcgYXQgdGhlIHNtYWxsIGNhcHMgYnVmZmVy
LgotICAgIG1faXRlbS5zdHJpbmcgPSBtX3J1bi5jaGFyYWN0ZXJzKCk7Ci0KLSAgICBpZiAoIWhi
X3V0ZjE2X3NjcmlwdF9ydW5fbmV4dCgwLCAmbV9pdGVtLml0ZW0sIG1fcnVuLmNoYXJhY3RlcnMo
KSwgbV9ydW4ubGVuZ3RoKCksICZtX2luZGV4T2ZOZXh0U2NyaXB0UnVuKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gSXQgaXMgYWN0dWFsbHkgd3JvbmcgdG8gY29uc2lkZXIgc2Ny
aXB0IHJ1bnMgYXQgYWxsIGluIHRoaXMgY29kZS4KLSAgICAvLyBPdGhlciBXZWJLaXQgY29kZSAo
ZS5nLiBNYWMpIHNlZ21lbnRzIGNvbXBsZXggdGV4dCBqdXN0IGJ5IGZpbmRpbmcKLSAgICAvLyB0
aGUgbG9uZ2VzdCBzcGFuIG9mIHRleHQgY292ZXJlZCBieSBhIHNpbmdsZSBmb250LgotICAgIC8v
IEJ1dCB3ZSBjdXJyZW50bHkgbmVlZCB0byBjYWxsIGhiX3V0ZjE2X3NjcmlwdF9ydW5fbmV4dCBh
bnl3YXkgdG8gZmlsbAotICAgIC8vIGluIHRoZSBoYXJmYnV6eiBkYXRhIHN0cnVjdHVyZXMgdG8g
ZS5nLiBwaWNrIHRoZSBjb3JyZWN0IHNjcmlwdCdzIHNoYXBlci4KLSAgICAvLyBTbyB3ZSBhbGxv
dyB0aGF0IHRvIHJ1biBmaXJzdCwgdGhlbiBkbyBhIHNlY29uZCBwYXNzIG92ZXIgdGhlIHJhbmdl
IGl0Ci0gICAgLy8gZm91bmQgYW5kIHRha2UgdGhlIGxhcmdlc3Qgc3VicmVnaW9uIHRoYXQgc3Rh
eXMgd2l0aGluIGEgc2luZ2xlIGZvbnQuCi0gICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJh
dG9yIGl0ZXJhdG9yKHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4oJm1faXRlbS5zdHJpbmdbbV9p
dGVtLml0ZW0ucG9zXSksIDAsIHN0YXRpY19jYXN0PGludD4obV9pdGVtLml0ZW0ubGVuZ3RoKSwg
c3RhdGljX2Nhc3Q8aW50PihtX2l0ZW0uaXRlbS5sZW5ndGgpKTsKLSAgICBVQ2hhcjMyIGNoYXJh
Y3RlcjsKLSAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKLSAgICBpZiAoIWl0ZXJhdG9y
LmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIG1fY3VycmVudEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Y2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7Ci0gICAgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVy
TGVuZ3RoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJM
ZW5ndGgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBt
X2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsK
LSAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBtX2N1cnJlbnRGb250RGF0YSkKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOwotICAg
IH0KLSAgICBtX2l0ZW0uaXRlbS5sZW5ndGggPSBpdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7
Ci0gICAgbV9pbmRleE9mTmV4dFNjcmlwdFJ1biA9IG1faXRlbS5pdGVtLnBvcyArIGl0ZXJhdG9y
LmN1cnJlbnRDaGFyYWN0ZXIoKTsKLQotICAgIHNldHVwRm9udEZvclNjcmlwdFJ1bigpOwotICAg
IHNoYXBlR2x5cGhzKCk7Ci0gICAgc2V0R2x5cGhQb3NpdGlvbnMocnRsKCkpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWZsb2F0IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6d2lkdGhPZkZ1bGxS
dW4oKQotewotICAgIGZsb2F0IHdpZHRoU3VtID0gMDsKLSAgICB3aGlsZSAobmV4dFNjcmlwdFJ1
bigpKQotICAgICAgICB3aWR0aFN1bSArPSB3aWR0aCgpOwotCi0gICAgcmV0dXJuIHdpZHRoU3Vt
OwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cEZvbnRGZWF0dXJlcyhjb25zdCBGb250RmVhdHVyZVNl
dHRpbmdzKiBzZXR0aW5ncywgSEJfRmFjZVJlY18qIGhiRmFjZSkKLXsKLSAgICBpZiAoIXNldHRp
bmdzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGJGYWNlLT5nc3ViKQotICAgICAgICBI
Ql9HU1VCX0NsZWFyX0ZlYXR1cmVzKGhiRmFjZS0+Z3N1Yik7Ci0gICAgaWYgKGhiRmFjZS0+Z3Bv
cykKLSAgICAgICAgSEJfR1BPU19DbGVhcl9GZWF0dXJlcyhoYkZhY2UtPmdwb3MpOwotCi0gICAg
SEJfVVNob3J0IHNjcmlwdEluZGV4ID0gMDsKLSAgICBIQl9HU1VCX1NlbGVjdF9TY3JpcHQoaGJG
YWNlLT5nc3ViLCBIQl9NQUtFX1RBRygnRCcsICdGJywgJ0wnLCAnVCcpLCAmc2NyaXB0SW5kZXgp
OwotICAgIHNpemVfdCBudW1GZWF0dXJlcyA9IHNldHRpbmdzLT5zaXplKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1GZWF0dXJlczsgKytpKSB7Ci0gICAgICAgIGlmICghc2V0dGlu
Z3MtPmF0KGkpLnZhbHVlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSEJfVVNo
b3J0IGZlYXR1cmVJbmRleCA9IDA7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiB0YWcgPSBzZXR0aW5n
cy0+YXQoaSkudGFnKCkuY2hhcmFjdGVycygpOwotICAgICAgICBIQl9VSW50IGZlYXR1cmUgPSBI
Ql9NQUtFX1RBRyh0YWdbMF0sIHRhZ1sxXSwgdGFnWzJdLCB0YWdbM10pOwotICAgICAgICBpZiAo
aGJGYWNlLT5nc3ViICYmIEhCX0dTVUJfU2VsZWN0X0ZlYXR1cmUoaGJGYWNlLT5nc3ViLCBmZWF0
dXJlLCBzY3JpcHRJbmRleCwgMHhmZmZmLCAmZmVhdHVyZUluZGV4KSA9PSBIQl9FcnJfT2spCi0g
ICAgICAgICAgICBIQl9HU1VCX0FkZF9GZWF0dXJlKGhiRmFjZS0+Z3N1YiwgZmVhdHVyZUluZGV4
LCBzZXR0aW5ncy0+YXQoaSkudmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGhiRmFjZS0+Z3Bv
cyAmJiBIQl9HUE9TX1NlbGVjdF9GZWF0dXJlKGhiRmFjZS0+Z3BvcywgZmVhdHVyZSwgc2NyaXB0
SW5kZXgsIDB4ZmZmZiwgJmZlYXR1cmVJbmRleCkgPT0gSEJfRXJyX09rKQotICAgICAgICAgICAg
SEJfR1BPU19BZGRfRmVhdHVyZShoYkZhY2UtPmdwb3MsIGZlYXR1cmVJbmRleCwgc2V0dGluZ3Mt
PmF0KGkpLnZhbHVlKCkpOwotICAgIH0KLX0KLQotc3RhdGljIFVDaGFyMzIgc3Vycm9nYXRlUGFp
ckF3YXJlRmlyc3RDaGFyYWN0ZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICBpZiAoVTE2X0lTX1NVUlJPR0FURShjaGFyYWN0ZXJzWzBdKSkgewotICAg
ICAgICBpZiAoIVUxNl9JU19TVVJST0dBVEVfTEVBRChjaGFyYWN0ZXJzWzBdKSB8fCBsZW5ndGgg
PCAyIHx8ICFVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1sxXSkpCi0gICAgICAgICAgICByZXR1cm4g
JyAnOwotICAgICAgICByZXR1cm4gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNbMF0s
IGNoYXJhY3RlcnNbMV0pOwotICAgIH0KLSAgICByZXR1cm4gY2hhcmFjdGVyc1swXTsKLX0KLQot
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldHVwRm9udEZvclNjcmlwdFJ1bigpCi17Ci0g
ICAgRm9udERhdGFWYXJpYW50IGZvbnREYXRhVmFyaWFudCA9IEF1dG9WYXJpYW50OwotICAgIC8v
IERldGVybWluZSBpZiB0aGlzIHNjcmlwdCBydW4gbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIHNt
YWxsIGNhcHMuCi0gICAgLy8gbmV4dFNjcmlwdFJ1bigpIHdpbGwgYWx3YXlzIHNlbmQgdXMgYSBy
dW4gb2YgdGhlIHNhbWUgY2FzZSwgYmVjYXVzZSBhCi0gICAgLy8gY2FzZSBjaGFuZ2Ugd2hpbGUg
aW4gc21hbGwtY2FwcyBtb2RlIGFsd2F5cyByZXN1bHRzIGluIGRpZmZlcmVudAotICAgIC8vIEZv
bnREYXRhLCBzbyB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhlIGZpcnN0IGNoYXJhY3RlcidzIGNh
c2UuCi0gICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSAmJiB1X2lzbG93ZXIobV9pdGVtLnN0
cmluZ1ttX2l0ZW0uaXRlbS5wb3NdKSkgewotICAgICAgICBtX3NtYWxsQ2Fwc1N0cmluZyA9IFN0
cmluZyhtX3J1bi5kYXRhKG1faXRlbS5pdGVtLnBvcyksIG1faXRlbS5pdGVtLmxlbmd0aCk7Ci0g
ICAgICAgIG1fc21hbGxDYXBzU3RyaW5nLm1ha2VVcHBlcigpOwotICAgICAgICBtX2l0ZW0uc3Ry
aW5nID0gbV9zbWFsbENhcHNTdHJpbmcuY2hhcmFjdGVycygpOwotICAgICAgICBtX2l0ZW0uaXRl
bS5wb3MgPSAwOwotICAgICAgICBmb250RGF0YVZhcmlhbnQgPSBTbWFsbENhcHNWYXJpYW50Owot
ICAgIH0KLSAgICBVQ2hhcjMyIGN1cnJlbnQgPSBzdXJyb2dhdGVQYWlyQXdhcmVGaXJzdENoYXJh
Y3RlcihzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KCZtX2l0ZW0uc3RyaW5nW21faXRlbS5pdGVt
LnBvc10pLCBtX2l0ZW0uaXRlbS5sZW5ndGggLSBtX2l0ZW0uaXRlbS5wb3MpOwotICAgIGNvbnN0
IEZvbnREYXRhKiBmb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGN1cnJl
bnQsIGZhbHNlLCBmb250RGF0YVZhcmlhbnQpLmZvbnREYXRhOwotICAgIGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnREYXRhLT5mb250RGF0YUZvckNoYXJhY3Rlcign
ICcpLT5wbGF0Zm9ybURhdGEoKTsKLSAgICBtX2l0ZW0uZmFjZSA9IHBsYXRmb3JtRGF0YS5oYXJm
YnV6ekZhY2UoKS0+ZmFjZSgpOwotICAgIC8vIFdlIG9ubHkgbmVlZCB0byBzZXR1cCBmb250IGZl
YXR1cmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1bi4KLSAgICBpZiAoIW1faXRlbS5pdGVt
LnBvcykKLSAgICAgICAgc2V0dXBGb250RmVhdHVyZXMobV9mb250LT5mb250RGVzY3JpcHRpb24o
KS5mZWF0dXJlU2V0dGluZ3MoKSwgbV9pdGVtLmZhY2UpOwotICAgIHZvaWQqIG9wYXF1ZVBsYXRm
b3JtRGF0YSA9IGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KCZwbGF0Zm9ybURhdGEpOwot
ICAgIG1faXRlbS5mb250LT51c2VyRGF0YSA9IG9wYXF1ZVBsYXRmb3JtRGF0YTsKLQotICAgIGlu
dCBzaXplID0gcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBtX2l0ZW0uZm9udC0+eF9wcGVtID0g
c2l6ZTsKLSAgICBtX2l0ZW0uZm9udC0+eV9wcGVtID0gc2l6ZTsKLSAgICAvLyB4XyBhbmQgeV9z
Y2FsZSBhcmUgdGhlIGNvbnZlcnNpb24gZmFjdG9ycyBmcm9tIGZvbnQgZGVzaWduIHNwYWNlIChm
RW1TaXplKSB0byAxLzY0dGggb2YgZGV2aWNlIHBpeGVscyBpbiAxNi4xNiBmb3JtYXQuCi0gICAg
Y29uc3QgaW50IGRldmljZVBpeGVsRnJhY3Rpb24gPSA2NDsKLSAgICBjb25zdCBpbnQgbXVsdGlw
bHlGb3IxNkRvdDE2ID0gMSA8PCAxNjsKLSAgICBpbnQgc2NhbGUgPSBkZXZpY2VQaXhlbEZyYWN0
aW9uICogc2l6ZSAqIG11bHRpcGx5Rm9yMTZEb3QxNiAvIHBsYXRmb3JtRGF0YS5lbVNpemVJbkZv
bnRVbml0cygpOwotICAgIG1faXRlbS5mb250LT54X3NjYWxlID0gc2NhbGU7Ci0gICAgbV9pdGVt
LmZvbnQtPnlfc2NhbGUgPSBzY2FsZTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OmRlbGV0ZUdseXBoQXJyYXlzKCkKLXsKLSAgICBkZWxldGVbXSBtX2l0ZW0uZ2x5cGhzOwotICAg
IGRlbGV0ZVtdIG1faXRlbS5hdHRyaWJ1dGVzOwotICAgIGRlbGV0ZVtdIG1faXRlbS5hZHZhbmNl
czsKLSAgICBkZWxldGVbXSBtX2l0ZW0ub2Zmc2V0czsKLSAgICBkZWxldGVbXSBtX2dseXBoczE2
OwotICAgIGRlbGV0ZVtdIG1fcG9zaXRpb25zOwotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJv
bGxlcjo6Y3JlYXRlR2x5cGhBcnJheXMoaW50IHNpemUpCi17Ci0gICAgbV9pdGVtLmdseXBocyA9
IG5ldyBIQl9HbHlwaFtzaXplXTsKLSAgICBtX2l0ZW0uYXR0cmlidXRlcyA9IG5ldyBIQl9HbHlw
aEF0dHJpYnV0ZXNbc2l6ZV07Ci0gICAgbV9pdGVtLmFkdmFuY2VzID0gbmV3IEhCX0ZpeGVkW3Np
emVdOwotICAgIG1faXRlbS5vZmZzZXRzID0gbmV3IEhCX0ZpeGVkUG9pbnRbc2l6ZV07Ci0KLSAg
ICBtX2dseXBoczE2ID0gbmV3IHVpbnQxNl90W3NpemVdOwotICAgIG1fcG9zaXRpb25zID0gbmV3
IFNrUG9pbnRbc2l6ZV07Ci0KLSAgICBtX2l0ZW0ubnVtX2dseXBocyA9IHNpemU7Ci0gICAgbV9n
bHlwaHNBcnJheUNhcGFjaXR5ID0gc2l6ZTsgLy8gU2F2ZSB0aGUgR2x5cGhBcnJheXMgc2l6ZS4K
LSAgICByZXNldEdseXBoQXJyYXlzKCk7Ci19Ci0KLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVy
OjpyZXNldEdseXBoQXJyYXlzKCkKLXsKLSAgICBpbnQgc2l6ZSA9IG1faXRlbS5udW1fZ2x5cGhz
OwotICAgIC8vIEFsbCB0aGUgdHlwZXMgaGVyZSBkb24ndCBoYXZlIHBvaW50ZXJzLiBJdCBpcyBz
YWZlIHRvIHJlc2V0IHRvCi0gICAgLy8gemVybyB1bmxlc3MgSGFyZmJ1enogYnJlYWtzIHRoZSBj
b21wYXRpYmlsaXR5IGluIHRoZSBmdXR1cmUuCi0gICAgbWVtc2V0KG1faXRlbS5nbHlwaHMsIDAs
IHNpemUgKiBzaXplb2YoSEJfR2x5cGgpKTsKLSAgICBtZW1zZXQobV9pdGVtLmF0dHJpYnV0ZXMs
IDAsIHNpemUgKiBzaXplb2YoSEJfR2x5cGhBdHRyaWJ1dGVzKSk7Ci0gICAgbWVtc2V0KG1faXRl
bS5hZHZhbmNlcywgMCwgc2l6ZSAqIHNpemVvZihIQl9GaXhlZCkpOwotICAgIG1lbXNldChtX2l0
ZW0ub2Zmc2V0cywgMCwgc2l6ZSAqIHNpemVvZihIQl9GaXhlZFBvaW50KSk7Ci0gICAgbWVtc2V0
KG1fZ2x5cGhzMTYsIDAsIHNpemUgKiBzaXplb2YodWludDE2X3QpKTsKLSAgICBtZW1zZXQobV9w
b3NpdGlvbnMsIDAsIHNpemUgKiBzaXplb2YoU2tQb2ludCkpOwotfQotCi12b2lkIENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6c2hhcGVHbHlwaHMoKQotewotICAgIC8vIEhCX1NoYXBlSXRlbSgpIHJl
c2V0cyBtX2l0ZW0ubnVtX2dseXBocy4gSWYgdGhlIHByZXZpb3VzIGNhbGwgdG8KLSAgICAvLyBI
Ql9TaGFwZUl0ZW0oKSB1c2VkIGxlc3Mgc3BhY2UgdGhhbiB3YXMgYXZhaWxhYmxlLCB0aGUgY2Fw
YWNpdHkgb2YKLSAgICAvLyB0aGUgYXJyYXkgbWF5IGJlIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50
IHZhbHVlIG9mIG1faXRlbS5udW1fZ2x5cGhzLgotICAgIC8vIFNvLCB3ZSBuZWVkIHRvIHJlc2V0
IHRoZSBudW1fZ2x5cGhzIHRvIHRoZSBjYXBhY2l0eSBvZiB0aGUgYXJyYXkuCi0gICAgbV9pdGVt
Lm51bV9nbHlwaHMgPSBtX2dseXBoc0FycmF5Q2FwYWNpdHk7Ci0gICAgcmVzZXRHbHlwaEFycmF5
cygpOwotICAgIHdoaWxlICghSEJfU2hhcGVJdGVtKCZtX2l0ZW0pKSB7Ci0gICAgICAgIC8vIFdl
IG92ZXJmbG93ZWQgb3VyIGFycmF5cy4gUmVzaXplIGFuZCByZXRyeS4KLSAgICAgICAgLy8gSEJf
U2hhcGVJdGVtIGZpbGxzIGluIG1faXRlbS5udW1fZ2x5cGhzIHdpdGggdGhlIG5lZWRlZCBzaXpl
LgotICAgICAgICBkZWxldGVHbHlwaEFycmF5cygpOwotICAgICAgICAvLyBUaGUgfCsgMXwgaGVy
ZSBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEhhcmZidXp6OiB0aGUgS2htZXIKLSAgICAg
ICAgLy8gc2hhcGVyIChhdCBsZWFzdCkgY2FuIGZhaWwgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQg
Z2x5cGggYnVmZmVycwotICAgICAgICAvLyBhbmQgcmVxdWVzdCAwIGFkZGl0aW9uYWwgZ2x5cGhz
OiB0aHJvd2luZyB1cyBpbnRvIGFuIGluZmluaXRlCi0gICAgICAgIC8vIGxvb3AuCi0gICAgICAg
IGNyZWF0ZUdseXBoQXJyYXlzKG1faXRlbS5udW1fZ2x5cGhzICsgMSk7Ci0gICAgfQotfQotCi12
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0R2x5cGhQb3NpdGlvbnMoYm9vbCBpc1JUTCkK
LXsKLSAgICBjb25zdCBkb3VibGUgcnRsRmxpcCA9IGlzUlRMID8gLTEgOiAxOwotICAgIGRvdWJs
ZSBwb3NpdGlvbiA9IDA7Ci0KLSAgICAvLyBsb2dDbHVzdGVyc0luZGV4IGluZGV4ZXMgbG9nQ2x1
c3RlcnMgZm9yIHRoZSBmaXJzdCBjb2RlcG9pbnQgb2YgdGhlIGN1cnJlbnQgZ2x5cGguCi0gICAg
Ly8gRWFjaCB0aW1lIHdlIGFkdmFuY2UgYSBnbHlwaCwgd2Ugc2tpcCBvdmVyIGFsbCB0aGUgY29k
ZXBvaW50cyB0aGF0IGNvbnRyaWJ1dGVkIHRvIHRoZSBjdXJyZW50IGdseXBoLgotICAgIGludCBs
b2dDbHVzdGVyc0luZGV4ID0gMDsKLQotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZ2x5cGhz
IGluIGxvZ2ljYWwgb3JkZXIsIGZsaXBwaW5nIGZvciBSVEwgd2hlcmUgbmVjZXNzYXJ5LgotICAg
IC8vIEdseXBocyBhcmUgcG9zaXRpb25lZCBzdGFydGluZyBmcm9tIG1fb2Zmc2V0WDsgaW4gUlRM
IG1vZGUgdGhleSBnbyBsZWZ0d2FyZHMgZnJvbSB0aGVyZS4KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1faXRlbS5udW1fZ2x5cGhzOyArK2kpIHsKLSAgICAgICAgd2hpbGUgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsb2dDbHVzdGVyc0luZGV4KSA8IG1faXRlbS5pdGVtLmxlbmd0aCAmJiBt
X2l0ZW0ubG9nX2NsdXN0ZXJzW2xvZ0NsdXN0ZXJzSW5kZXhdIDwgaSkKLSAgICAgICAgICAgIGxv
Z0NsdXN0ZXJzSW5kZXgrKzsKLQotICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBnbHlwaCBpcyBq
dXN0IGFmdGVyIGEgc3BhY2UsIGFkZCBpbiB0aGUgd29yZCBzcGFjaW5nLgotICAgICAgICBwb3Np
dGlvbiArPSBkZXRlcm1pbmVXb3JkQnJlYWtTcGFjaW5nKGxvZ0NsdXN0ZXJzSW5kZXgpOwotCi0g
ICAgICAgIG1fZ2x5cGhzMTZbaV0gPSBtX2l0ZW0uZ2x5cGhzW2ldOwotICAgICAgICBkb3VibGUg
b2Zmc2V0WCA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0ub2Zmc2V0c1tpXS54
KTsKLSAgICAgICAgZG91YmxlIG9mZnNldFkgPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIo
bV9pdGVtLm9mZnNldHNbaV0ueSk7Ci0gICAgICAgIGRvdWJsZSBhZHZhbmNlID0gdHJ1bmNhdGVG
aXhlZFBvaW50VG9JbnRlZ2VyKG1faXRlbS5hZHZhbmNlc1tpXSk7Ci0gICAgICAgIGlmIChpc1JU
TCkKLSAgICAgICAgICAgIG9mZnNldFggLT0gYWR2YW5jZTsKLQotICAgICAgICBtX3Bvc2l0aW9u
c1tpXS5zZXQobV9vZmZzZXRYICsgKHBvc2l0aW9uICogcnRsRmxpcCkgKyBvZmZzZXRYLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGFydGluZ1kgKyBvZmZzZXRZKTsKLQotICAgICAg
ICBpZiAobV9jdXJyZW50Rm9udERhdGEtPmlzWmVyb1dpZHRoU3BhY2VHbHlwaChtX2dseXBoczE2
W2ldKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIEF0IHRoZSBlbmQgb2Yg
ZWFjaCBjbHVzdGVyLCBhZGQgaW4gdGhlIGxldHRlciBzcGFjaW5nLgotICAgICAgICBpZiAoaSAr
IDEgPT0gbV9pdGVtLm51bV9nbHlwaHMgfHwgbV9pdGVtLmF0dHJpYnV0ZXNbaSArIDFdLmNsdXN0
ZXJTdGFydCkKLSAgICAgICAgICAgIHBvc2l0aW9uICs9IG1fbGV0dGVyU3BhY2luZzsKLQotICAg
ICAgICBwb3NpdGlvbiArPSBhZHZhbmNlOwotICAgIH0KLSAgICBtX3BpeGVsV2lkdGggPSBzdGQ6
Om1heChwb3NpdGlvbiwgMC4wKTsKLSAgICBtX29mZnNldFggKz0gbV9waXhlbFdpZHRoICogcnRs
RmxpcDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6Om5vcm1hbGl6ZVNwYWNlc0Fu
ZE1pcnJvckNoYXJzKGNvbnN0IFVDaGFyKiBzb3VyY2UsIGJvb2wgcnRsLCBVQ2hhciogZGVzdGlu
YXRpb24sIGludCBsZW5ndGgpCi17Ci0gICAgaW50IHBvc2l0aW9uID0gMDsKLSAgICBib29sIGVy
cm9yID0gZmFsc2U7Ci0gICAgLy8gSXRlcmF0ZSBjaGFyYWN0ZXJzIGluIHNvdXJjZSBhbmQgbWly
cm9yIGNoYXJhY3RlciBpZiBuZWVkZWQuCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7
Ci0gICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotICAgICAgICBpbnQgbmV4dFBvc2l0aW9uID0g
cG9zaXRpb247Ci0gICAgICAgIFUxNl9ORVhUKHNvdXJjZSwgbmV4dFBvc2l0aW9uLCBsZW5ndGgs
IGNoYXJhY3Rlcik7Ci0gICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkK
LSAgICAgICAgICAgIGNoYXJhY3RlciA9ICcgJzsKLSAgICAgICAgZWxzZSBpZiAoRm9udDo6dHJl
YXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCi0gICAgICAgICAgICBjaGFyYWN0ZXIgPSB6
ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgZWxzZSBpZiAocnRsKQotICAgICAgICAgICAgY2hhcmFj
dGVyID0gdV9jaGFyTWlycm9yKGNoYXJhY3Rlcik7Ci0gICAgICAgIFUxNl9BUFBFTkQoZGVzdGlu
YXRpb24sIHBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3RlciwgZXJyb3IpOwotICAgICAgICBBU1NF
UlRfVU5VU0VEKGVycm9yLCAhZXJyb3IpOwotICAgICAgICBwb3NpdGlvbiA9IG5leHRQb3NpdGlv
bjsKLSAgICB9Ci19Ci0KLWNvbnN0IFRleHRSdW4mIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2V0
Tm9ybWFsaXplZFRleHRSdW4oY29uc3QgVGV4dFJ1biYgb3JpZ2luYWxSdW4sIE93blB0cjxUZXh0
UnVuPiYgbm9ybWFsaXplZFJ1biwgT3duQXJyYXlQdHI8VUNoYXI+JiBub3JtYWxpemVkQnVmZmVy
KQotewotICAgIC8vIE5vcm1hbGl6ZSB0aGUgdGV4dCBydW4gaW4gdGhyZWUgd2F5czoKLSAgICAv
LyAxKSBDb252ZXJ0IHRoZSB8b3JpZ2luYWxSdW58IHRvIE5GQyBub3JtYWxpemVkIGZvcm0gaWYg
Y29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCi0gICAgLy8gKFUrMDMwMC4uKSBhcmUgdXNlZCBp
biB0aGUgcnVuLiBUaGlzIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5IHNpbmNlIG1vc3QgT3BlblR5
cGUKLSAgICAvLyBmb250cyAoZS5nLiwgQXJpYWwpIGRvbid0IGhhdmUgc3Vic3RpdHV0aW9uIHJ1
bGVzIGZvciB0aGUgZGlhY3JpdGljYWwgbWFya3MgaW4KLSAgICAvLyB0aGVpciBHU1VCIHRhYmxl
cy4KLSAgICAvLwotICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlIGljdTo6Tm9ybWFs
aXplcjo6aXNOb3JtYWxpemVkKFVOT1JNX05GQykgQVBJIGhlcmUgc2luY2UKLSAgICAvLyB0aGUg
QVBJIHJldHVybnMgRkFMU0UgKD0gbm90IG5vcm1hbGl6ZWQpIGZvciBjb21wbGV4IHJ1bnMgdGhh
dCBkb24ndCByZXF1aXJlIE5GQwotICAgIC8vIG5vcm1hbGl6YXRpb24gKGUuZy4sIEFyYWJpYyB0
ZXh0KS4gVW5sZXNzIHRoZSBydW4gY29udGFpbnMgdGhlIGRpYWNyaXRpY2FsIG1hcmtzLAotICAg
IC8vIEhhcmZidXp6IHdpbGwgZG8gdGhlIHNhbWUgdGhpbmcgZm9yIHVzIHVzaW5nIHRoZSBHU1VC
IHRhYmxlLgotICAgIC8vIDIpIENvbnZlcnQgc3BhY2luZyBjaGFyYWN0ZXJzIGludG8gcGxhaW4g
c3BhY2VzLCBhcyBzb21lIGZvbnRzIHdpbGwgcHJvdmlkZSBnbHlwaHMKLSAgICAvLyBmb3IgY2hh
cmFjdGVycyBsaWtlICdcbicgb3RoZXJ3aXNlLgotICAgIC8vIDMpIENvbnZlcnQgbWlycm9yZWQg
Y2hhcmFjdGVycyBzdWNoIGFzIHBhcmVudGhlc2lzIGZvciBydGwgdGV4dC4KLQotICAgIC8vIENv
bnZlcnQgdG8gTkZDIGZvcm0gaWYgdGhlIHRleHQgaGFzIGRpYWNyaXRpY2FsIG1hcmtzLgotICAg
IGljdTo6VW5pY29kZVN0cmluZyBub3JtYWxpemVkU3RyaW5nOwotICAgIFVFcnJvckNvZGUgZXJy
b3IgPSBVX1pFUk9fRVJST1I7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG9yaWdpbmFsUnVu
Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgVUNoYXIgY2ggPSBvcmlnaW5hbFJ1bltpXTsKLSAg
ICAgICAgaWYgKDo6dWJsb2NrX2dldENvZGUoY2gpID09IFVCTE9DS19DT01CSU5JTkdfRElBQ1JJ
VElDQUxfTUFSS1MpIHsKLSAgICAgICAgICAgIGljdTo6Tm9ybWFsaXplcjo6bm9ybWFsaXplKGlj
dTo6VW5pY29kZVN0cmluZyhvcmlnaW5hbFJ1bi5jaGFyYWN0ZXJzKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFJ1bi5sZW5ndGgoKSksIFVOT1JNX05G
QywgMCAvKiBubyBvcHRpb25zICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9ybWFsaXplZFN0cmluZywgZXJyb3IpOwotICAgICAgICAgICAgaWYgKFVfRkFJTFVS
RShlcnJvcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUnVuOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3JtYWxpemUgc3BhY2UgYW5k
IG1pcnJvciBwYXJlbnRoZXNpcyBmb3IgcnRsIHRleHQuCi0gICAgaW50IG5vcm1hbGl6ZWRCdWZm
ZXJMZW5ndGg7Ci0gICAgY29uc3QgVUNoYXIqIHNvdXJjZVRleHQ7Ci0gICAgaWYgKG5vcm1hbGl6
ZWRTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJMZW5ndGggPSBv
cmlnaW5hbFJ1bi5sZW5ndGgoKTsKLSAgICAgICAgc291cmNlVGV4dCA9IG9yaWdpbmFsUnVuLmNo
YXJhY3RlcnMoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBub3JtYWxpemVkQnVmZmVyTGVuZ3Ro
ID0gbm9ybWFsaXplZFN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgc291cmNlVGV4dCA9IG5vcm1h
bGl6ZWRTdHJpbmcuZ2V0QnVmZmVyKCk7Ci0gICAgfQotCi0gICAgbm9ybWFsaXplZEJ1ZmZlciA9
IGFkb3B0QXJyYXlQdHIobmV3IFVDaGFyW25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggKyAxXSk7Ci0K
LSAgICBub3JtYWxpemVTcGFjZXNBbmRNaXJyb3JDaGFycyhzb3VyY2VUZXh0LCBvcmlnaW5hbFJ1
bi5ydGwoKSwgbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCk7
Ci0KLSAgICBub3JtYWxpemVkUnVuID0gYWRvcHRQdHIobmV3IFRleHRSdW4ob3JpZ2luYWxSdW4p
KTsKLSAgICBub3JtYWxpemVkUnVuLT5zZXRUZXh0KG5vcm1hbGl6ZWRCdWZmZXIuZ2V0KCksIG5v
cm1hbGl6ZWRCdWZmZXJMZW5ndGgpOwotICAgIHJldHVybiAqbm9ybWFsaXplZFJ1bjsKLX0KLQot
aW50IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0
UnVuKGludCB0YXJnZXRYKSBjb25zdAotewotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZ2x5
cGhzIGluIGxvZ2ljYWwgb3JkZXIsIHNlZWluZyB3aGV0aGVyIHRhcmdldFggZmFsbHMgYmV0d2Vl
biB0aGUgcHJldmlvdXMKLSAgICAvLyBwb3NpdGlvbiBhbmQgaGFsZndheSB0aHJvdWdoIHRoZSBj
dXJyZW50IGdseXBoLgotICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgcHJvYmFibHkgYmVsb25ncyBp
biBDb21wbGV4VGV4dENvbnRyb2xsZXIuCi0gICAgaW50IGxhc3RYID0gb2Zmc2V0WCgpIC0gKHJ0
bCgpID8gLW1fcGl4ZWxXaWR0aCA6IG1fcGl4ZWxXaWR0aCk7Ci0gICAgZm9yIChpbnQgZ2x5cGhJ
bmRleCA9IDA7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihnbHlwaEluZGV4KSA8IGxlbmd0aCgpOyAr
K2dseXBoSW5kZXgpIHsKLSAgICAgICAgaW50IGFkdmFuY2UgPSB0cnVuY2F0ZUZpeGVkUG9pbnRU
b0ludGVnZXIobV9pdGVtLmFkdmFuY2VzW2dseXBoSW5kZXhdKTsKLSAgICAgICAgaW50IG5leHRY
ID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbnMoKVtnbHlwaEluZGV4XS54KCkpICsgYWR2YW5j
ZSAvIDI7Ci0gICAgICAgIGlmIChzdGQ6Om1pbihuZXh0WCwgbGFzdFgpIDw9IHRhcmdldFggJiYg
dGFyZ2V0WCA8PSBzdGQ6Om1heChuZXh0WCwgbGFzdFgpKQotICAgICAgICAgICAgcmV0dXJuIGds
eXBoSW5kZXg7Ci0gICAgICAgIGxhc3RYID0gbmV4dFg7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxl
bmd0aCgpIC0gMTsKLX0KLQotaW50IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zmc2V0Rm9yUG9z
aXRpb24oaW50IHRhcmdldFgpCi17Ci0gICAgdW5zaWduZWQgYmFzZVBvc2l0aW9uID0gMDsKLQot
ICAgIGludCB4ID0gb2Zmc2V0WCgpOwotICAgIHdoaWxlIChuZXh0U2NyaXB0UnVuKCkpIHsKLSAg
ICAgICAgaW50IG5leHRYID0gb2Zmc2V0WCgpOwotCi0gICAgICAgIGlmIChzdGQ6Om1pbih4LCBu
ZXh0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IHN0ZDo6bWF4KHgsIG5leHRYKSkgewotICAg
ICAgICAgICAgLy8gVGhlIHggdmFsdWUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIHRoaXMgc2NyaXB0
IHJ1bi4KLSAgICAgICAgICAgIGNvbnN0IGludCBnbHlwaEluZGV4ID0gZ2x5cGhJbmRleEZvclhQ
b3NpdGlvbkluU2NyaXB0UnVuKHRhcmdldFgpOwotCi0gICAgICAgICAgICAvLyBOb3cgdGhhdCB3
ZSBoYXZlIGEgZ2x5cGggaW5kZXgsIHdlIGhhdmUgdG8gdHVybiB0aGF0IGludG8gYQotICAgICAg
ICAgICAgLy8gY29kZS1wb2ludCBpbmRleC4gQmVjYXVzZSBvZiBsaWdhdHVyZXMsIHNldmVyYWwg
Y29kZS1wb2ludHMgbWF5Ci0gICAgICAgICAgICAvLyBoYXZlIGdvbmUgaW50byBhIHNpbmdsZSBn
bHlwaC4gV2UgaXRlcmF0ZSBvdmVyIHRoZSBjbHVzdGVycyBsb2cKLSAgICAgICAgICAgIC8vIGFu
ZCBmaW5kIHRoZSBmaXJzdCBjb2RlLXBvaW50IHdoaWNoIGNvbnRyaWJ1dGVkIHRvIHRoZSBnbHlw
aC4KLQotICAgICAgICAgICAgLy8gU29tZSBzaGFwZXJzIChpLmUuIEtobWVyKSB3aWxsIHByb2R1
Y2UgY2x1c3RlciBsb2dzIHdoaWNoIHJlcG9ydAotICAgICAgICAgICAgLy8gdGhhdCAvbm8vIGNv
ZGUgcG9pbnRzIGNvbnRyaWJ1dGVkIHRvIGNlcnRhaW4gZ2x5cGhzLiBCZWNhdXNlIG9mCi0gICAg
ICAgICAgICAvLyB0aGlzLCB3ZSB0YWtlIGFueSBjb2RlIHBvaW50IHdoaWNoIGNvbnRyaWJ1dGVk
IHRvIHRoZSBnbHlwaCBpbgotICAgICAgICAgICAgLy8gcXVlc3Rpb24sIG9yIGFueSBzdWJzZXF1
ZW50IGdseXBoLiBJZiB3ZSBydW4gb2ZmIHRoZSBlbmQsIHRoZW4KLSAgICAgICAgICAgIC8vIHdl
IHRha2UgdGhlIGxhc3QgY29kZSBwb2ludC4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBudW1Db2RlUG9pbnRzKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChtX2l0
ZW0ubG9nX2NsdXN0ZXJzW2pdID49IGdseXBoSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBiYXNlUG9zaXRpb24gKyBqOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1
cm4gYmFzZVBvc2l0aW9uICsgbnVtQ29kZVBvaW50cygpIC0gMTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJhc2VQb3NpdGlvbiArPSBudW1Db2RlUG9pbnRzKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGJhc2VQb3NpdGlvbjsKLX0KLQotRmxvYXRSZWN0IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2Vs
ZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20s
IGludCB0bykKLXsKLSAgICBpbnQgZnJvbVggPSAtMSwgdG9YID0gLTE7Ci0gICAgLy8gSXRlcmF0
ZSB0aHJvdWdoIHRoZSBzY3JpcHQgcnVucyBpbiBsb2dpY2FsIG9yZGVyLCBzZWFyY2hpbmcgZm9y
IHRoZSBydW4gY292ZXJpbmcgdGhlIHBvc2l0aW9ucyBvZiBpbnRlcmVzdC4KLSAgICB3aGlsZSAo
bmV4dFNjcmlwdFJ1bigpICYmIChmcm9tWCA9PSAtMSB8fCB0b1ggPT0gLTEpKSB7Ci0gICAgICAg
IGlmIChmcm9tWCA9PSAtMSAmJiBmcm9tID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZy
b20pIDwgbnVtQ29kZVBvaW50cygpKSB7Ci0gICAgICAgICAgICAvLyB8ZnJvbXwgaXMgd2l0aGlu
IHRoaXMgc2NyaXB0IHJ1bi4gU28gd2UgaW5kZXggdGhlIGNsdXN0ZXJzIGxvZyB0bwotICAgICAg
ICAgICAgLy8gZmluZCB3aGljaCBnbHlwaCB0aGlzIGNvZGUtcG9pbnQgY29udHJpYnV0ZWQgdG8g
YW5kIGZpbmQgaXRzIHgKLSAgICAgICAgICAgIC8vIHBvc2l0aW9uLgotICAgICAgICAgICAgaW50
IGdseXBoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1tmcm9tXTsKLSAgICAgICAgICAgIGZyb21YID0g
cG9zaXRpb25zKClbZ2x5cGhdLngoKTsKLSAgICAgICAgICAgIGlmIChydGwoKSkKLSAgICAgICAg
ICAgICAgICBmcm9tWCArPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLmFkdmFu
Y2VzW2dseXBoXSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZnJvbSAtPSBudW1Db2Rl
UG9pbnRzKCk7Ci0KLSAgICAgICAgaWYgKHRvWCA9PSAtMSAmJiB0byA+PSAwICYmIHN0YXRpY19j
YXN0PHVuc2lnbmVkPih0bykgPCBudW1Db2RlUG9pbnRzKCkpIHsKLSAgICAgICAgICAgIGludCBn
bHlwaCA9IG1faXRlbS5sb2dfY2x1c3RlcnNbdG9dOwotICAgICAgICAgICAgdG9YID0gcG9zaXRp
b25zKClbZ2x5cGhdLngoKTsKLSAgICAgICAgICAgIGlmIChydGwoKSkKLSAgICAgICAgICAgICAg
ICB0b1ggKz0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKG1faXRlbS5hZHZhbmNlc1tnbHlw
aF0pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRvIC09IG51bUNvZGVQb2ludHMoKTsK
LSAgICB9Ci0KLSAgICAvLyBUaGUgcG9zaXRpb24gaW4gcXVlc3Rpb24gbWlnaHQgYmUganVzdCBh
ZnRlciB0aGUgdGV4dC4KLSAgICBpZiAoZnJvbVggPT0gLTEpCi0gICAgICAgIGZyb21YID0gb2Zm
c2V0WCgpOwotICAgIGlmICh0b1ggPT0gLTEpCi0gICAgICAgIHRvWCA9IG9mZnNldFgoKTsKLQot
ICAgIEFTU0VSVChmcm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEpOwotCi0gICAgaWYgKGZyb21YIDwg
dG9YKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIGZyb21YLCBwb2ludC55
KCksIHRvWCAtIGZyb21YLCBoZWlnaHQpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54
KCkgKyB0b1gsIHBvaW50LnkoKSwgZnJvbVggLSB0b1gsIGhlaWdodCk7Ci19Ci0KLXZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjpnbHlwaHNGb3JSYW5nZShpbnQgZnJvbSwgaW50IHRvLCBpbnQm
IGZyb21HbHlwaCwgaW50JiBnbHlwaExlbmd0aCkKLXsKLSAgICAvLyBDaGFyYWN0ZXIgb2Zmc2V0
cyB3aXRoaW4gdGhlIGN1cnJlbnQgcnVuLiBUSEVTRSBNQVkgTk9UIEJFIElOIFJBTkdFIGFuZCBt
YXkKLSAgICAvLyBiZSBuZWdhdGl2ZSwgZXRjLiBUaGUgY29kZSBiZWxvdyBoYW5kbGVzIHRoaXMu
Ci0gICAgaW50IGZyb21DaGFyID0gZnJvbSAtIG1faXRlbS5pdGVtLnBvczsKLSAgICBpbnQgdG9D
aGFyID0gdG8gLSBtX2l0ZW0uaXRlbS5wb3M7Ci0KLSAgICAvLyBTZWUgaWYgdGhlcmUgYXJlIGFu
eSBjaGFyYWN0ZXJzIGluIHRoZSBjdXJyZW50IHJ1bi4KLSAgICBpZiAoIW51bUNvZGVQb2ludHMo
KSB8fCBmcm9tQ2hhciA+PSBzdGF0aWNfY2FzdDxpbnQ+KG51bUNvZGVQb2ludHMoKSkgfHwgdG9D
aGFyIDw9IDApIHsKLSAgICAgICAgZnJvbUdseXBoID0gLTE7Ci0gICAgICAgIGdseXBoTGVuZ3Ro
ID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENvbXB1dGUgdGhlIHN0YXJ0
aW5nIGdseXBoIHdpdGhpbiB0aGlzIHNwYW4uIHxmcm9tfCBhbmQgfHRvfCBhcmUKLSAgICAvLyBn
bG9iYWwgb2Zmc2V0cyB0aGF0IG1heSBpbnRlcnNlY3QgYXJiaXRyYXJpbHkgd2l0aCBvdXIgbG9j
YWwgcnVuLgotICAgIGZyb21HbHlwaCA9IG1faXRlbS5sb2dfY2x1c3RlcnNbZnJvbUNoYXIgPCAw
ID8gMCA6IGZyb21DaGFyXTsKLSAgICBpZiAodG9DaGFyID49IHN0YXRpY19jYXN0PGludD4obnVt
Q29kZVBvaW50cygpKSkKLSAgICAgICAgZ2x5cGhMZW5ndGggPSBsZW5ndGgoKSAtIGZyb21HbHlw
aDsKLSAgICBlbHNlCi0gICAgICAgIGdseXBoTGVuZ3RoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1t0
b0NoYXJdIC0gZnJvbUdseXBoOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4
dENvbnRyb2xsZXJMaW51eC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMWQzZWM5NWVlZTEzNzRlMTVkMzllODIxYjBjOTliZDMzZGEwMTM2NS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvbXBsZXhUZXh0Q29udHJvbGxl
ckxpbnV4X2gKLSNkZWZpbmUgQ29tcGxleFRleHRDb250cm9sbGVyTGludXhfaAotCi0jaW5jbHVk
ZSAiSGFyZmJ1enpTa2lhLmgiCi0jaW5jbHVkZSAiU2tQb2ludC5oIgotI2luY2x1ZGUgIlNrU2Nh
bGFyLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotCi1leHRlcm4gIkMiIHsKLSNpbmNsdWRlICJo
YXJmYnV6ei1zaGFwZXIuaCIKLX0KLQotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNs
dWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udDsKLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci1j
bGFzcyBTaW1wbGVGb250RGF0YTsKLQotLy8gQ29tcGxleFRleHRDb250cm9sbGVyIHdhbGtzIGEg
VGV4dFJ1biBhbmQgcHJlc2VudHMgZWFjaCBzY3JpcHQgcnVuIGluIHNlcXVlbmNlLiBBCi0vLyBU
ZXh0UnVuIGlzIGEgc2VxdWVuY2Ugb2YgY29kZS1wb2ludHMgd2l0aCB0aGUgc2FtZSBlbWJlZGRp
bmcgbGV2ZWwgKGkuZS4gdGhleQotLy8gYXJlIGFsbCBsZWZ0LXRvLXJpZ2h0IG9yIHJpZ2h0LXRv
LWxlZnQpLiBBIHNjcmlwdCBydW4gaXMgYSBzdWJzZXF1ZW5jZSB3aGVyZQotLy8gYWxsIHRoZSBj
aGFyYWN0ZXJzIGhhdmUgdGhlIHNhbWUgc2NyaXB0IChlLmcuIEFyYWJpYywgVGhhaSBldGMpLiBT
aGFwaW5nIGlzCi0vLyBvbmx5IGV2ZXIgZG9uZSB3aXRoIHNjcmlwdCBydW5zIHNpbmNlIHRoZSBz
aGFwZXJzIG9ubHkga25vdyBob3cgdG8gZGVhbCB3aXRoCi0vLyBhIHNpbmdsZSBzY3JpcHQuCi0v
LwotLy8gSXRlcmF0aW9uIGlzIGFsd2F5cyBpbiBsb2dpY2FsIChha2EgcmVhZGluZykgb3JkZXIu
ICBGb3IgUlRMIHRleHQgdGhhdCBtZWFucwotLy8gdGhlIHJpZ2h0bW9zdCBwYXJ0IG9mIHRoZSB0
ZXh0IHdpbGwgYmUgZmlyc3QuCi0vLwotLy8gT25jZSB5b3UgaGF2ZSBzZXR1cCB0aGUgb2JqZWN0
LCBjYWxsIHxuZXh0U2NyaXB0UnVufCB0byBnZXQgdGhlIGZpcnN0IHNjcmlwdAotLy8gcnVuLiBU
aGlzIHdpbGwgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGl0ZXJhdGlvbiBpcyBjb21wbGV0ZS4gQXQg
YW55IHRpbWUgeW91Ci0vLyBjYW4gY2FsbCB8cmVzZXR8IHRvIHN0YXJ0IG92ZXIgYWdhaW4uCi1j
bGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXIgewotcHVibGljOgotICAgIENvbXBsZXhUZXh0Q29u
dHJvbGxlcihjb25zdCBUZXh0UnVuJiwgaW50IHN0YXJ0aW5nWCwgaW50IHN0YXJ0aW5nWSwgdW5z
aWduZWQgd29yZFNwYWNpbmcsIHVuc2lnbmVkIGxldHRlclNwYWNpbmcsIHVuc2lnbmVkIHBhZGRp
bmcsIGNvbnN0IEZvbnQqKTsKLSAgICB+Q29tcGxleFRleHRDb250cm9sbGVyKCk7Ci0KLSAgICBi
b29sIGlzV29yZEJyZWFrKHVuc2lnbmVkKTsKLSAgICBpbnQgZGV0ZXJtaW5lV29yZEJyZWFrU3Bh
Y2luZyh1bnNpZ25lZCk7Ci0gICAgLy8gc2V0UGFkZGluZyBzZXRzIGEgbnVtYmVyIG9mIHBpeGVs
cyB0byBiZSBkaXN0cmlidXRlZCBhY3Jvc3MgdGhlIFRleHRSdW4uCi0gICAgLy8gV2ViS2l0IHVz
ZXMgdGhpcyB0byBqdXN0aWZ5IHRleHQuCi0gICAgdm9pZCBzZXRQYWRkaW5nKGludCk7Ci0gICAg
dm9pZCByZXNldChpbnQgb2Zmc2V0KTsKLSAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHNjcmlw
dCBydW4sIHJldHVybmluZyBmYWxzZSB3aGVuIHRoZSBlbmQgb2YgdGhlCi0gICAgLy8gVGV4dFJ1
biBoYXMgYmVlbiByZWFjaGVkLgotICAgIGJvb2wgbmV4dFNjcmlwdFJ1bigpOwotICAgIGZsb2F0
IHdpZHRoT2ZGdWxsUnVuKCk7Ci0KLSAgICAvLyBzZXRXb3JkU3BhY2luZ0FkanVzdG1lbnQgc2V0
cyBhIGRlbHRhIChpbiBwaXhlbHMpIHdoaWNoIGlzIGFwcGxpZWQgYXQKLSAgICAvLyBlYWNoIHdv
cmQgYnJlYWsgaW4gdGhlIFRleHRSdW4uCi0gICAgdm9pZCBzZXRXb3JkU3BhY2luZ0FkanVzdG1l
bnQoaW50IHdvcmRTcGFjaW5nQWRqdXN0bWVudCkgeyBtX3dvcmRTcGFjaW5nQWRqdXN0bWVudCA9
IHdvcmRTcGFjaW5nQWRqdXN0bWVudDsgfQotCi0gICAgLy8gc2V0TGV0dGVyU3BhY2luZ0FkanVz
dG1lbnQgc2V0cyBhbiBhZGRpdGlvbmFsIG51bWJlciBvZiBwaXhlbHMgdGhhdCBpcwotICAgIC8v
IGFkZGVkIHRvIHRoZSBhZHZhbmNlIGFmdGVyIGVhY2ggb3V0cHV0IGNsdXN0ZXIuIFRoaXMgbWF0
Y2hlcyB0aGUgYmVoYXZpb3VyCi0gICAgLy8gb2YgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZS4KLSAg
ICB2b2lkIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50KGludCBsZXR0ZXJTcGFjaW5nQWRqdXN0
bWVudCkgeyBtX2xldHRlclNwYWNpbmcgPSBsZXR0ZXJTcGFjaW5nQWRqdXN0bWVudDsgfQotICAg
IGludCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9Ci0K
LSAgICB2b2lkIHNldHVwRm9yUlRMKCk7Ci0gICAgYm9vbCBydGwoKSBjb25zdCB7IHJldHVybiBt
X3J1bi5ydGwoKTsgfQotICAgIGNvbnN0IHVpbnQxNl90KiBnbHlwaHMoKSBjb25zdCB7IHJldHVy
biBtX2dseXBoczE2OyB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5n
dGggb2YgZ2x5cGhzIGZvciB0aGUgcmFuZ2UgW2Zyb20sIHRvKSBpbiB0aGUgY3VycmVudCBzY3Jp
cHQgcnVuLgotICAgIHZvaWQgZ2x5cGhzRm9yUmFuZ2UoaW50IGZyb20sIGludCB0bywgaW50JiBm
cm9tR2x5cGgsIGludCYgZ2x5cGhMZW5ndGgpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBsZW5ndGgg
b2YgdGhlIGFycmF5IHJldHVybmVkIGJ5IHxnbHlwaHN8Ci0gICAgY29uc3QgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLm51bV9nbHlwaHM7IH0KLQotICAgIC8vIFJldHVy
biB0aGUgb2Zmc2V0IGZvciBlYWNoIG9mIHRoZSBnbHlwaHMuIE5vdGUgdGhhdCB0aGlzIGlzIHRy
YW5zbGF0ZWQKLSAgICAvLyBieSB0aGUgY3VycmVudCB4IG9mZnNldCBhbmQgdGhhdCB0aGUgeCBv
ZmZzZXQgaXMgdXBkYXRlZCBmb3IgZWFjaCBzY3JpcHQKLSAgICAvLyBydW4uCi0gICAgY29uc3Qg
U2tQb2ludCogcG9zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbnM7IH0KLQotICAg
IC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIHRoZSBjdXJyZW50IHNjcmlw
dCBydW4KLSAgICBjb25zdCB1bnNpZ25lZCBudW1Db2RlUG9pbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9pdGVtLml0ZW0ubGVuZ3RoOyB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgcGl4ZWwg
cG9zaXRpb24gb2YgdGhlIGNvbnRyb2xsZXIuCi0gICAgY29uc3QgdW5zaWduZWQgb2Zmc2V0WCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0WDsgfQotCi0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSogZm9udFBsYXRmb3JtRGF0YUZvclNjcmlwdFJ1bigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Rm9udFBsYXRmb3JtRGF0YSo+KG1faXRlbS5mb250LT51c2VyRGF0YSk7IH0KLQotICAgIGlu
dCBvZmZzZXRGb3JQb3NpdGlvbihpbnQpOwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0KGNv
bnN0IEZsb2F0UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSAsIGludCB0byk7Ci0KLXByaXZh
dGU6Ci0gICAgLy8gUmV0dXJuIHRoZSB3aWR0aCAoaW4gcHgpIG9mIHRoZSBjdXJyZW50IHNjcmlw
dCBydW4uCi0gICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsV2lkdGg7
IH0KLQotICAgIHZvaWQgc2V0dXBGb250Rm9yU2NyaXB0UnVuKCk7Ci0gICAgdm9pZCBkZWxldGVH
bHlwaEFycmF5cygpOwotICAgIHZvaWQgY3JlYXRlR2x5cGhBcnJheXMoaW50KTsKLSAgICB2b2lk
IHJlc2V0R2x5cGhBcnJheXMoKTsKLSAgICB2b2lkIHNoYXBlR2x5cGhzKCk7Ci0gICAgdm9pZCBz
ZXRHbHlwaFBvc2l0aW9ucyhib29sKTsKLQotICAgIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZVNwYWNl
c0FuZE1pcnJvckNoYXJzKGNvbnN0IFVDaGFyKiBzb3VyY2UsIGJvb2wgcnRsLCBVQ2hhciogZGVz
dGluYXRpb24sIGludCBsZW5ndGgpOwotICAgIHN0YXRpYyBjb25zdCBUZXh0UnVuJiBnZXROb3Jt
YWxpemVkVGV4dFJ1bihjb25zdCBUZXh0UnVuJiBvcmlnaW5hbFJ1biwgT3duUHRyPFRleHRSdW4+
JiBub3JtYWxpemVkUnVuLCBPd25BcnJheVB0cjxVQ2hhcj4mIG5vcm1hbGl6ZWRCdWZmZXIpOwot
Ci0gICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBsb2dpYyBpbiBSZW5kZXJCbG9jazo6ZmluZE5leHRM
aW5lQnJlYWsKLSAgICBzdGF0aWMgYm9vbCBpc0NvZGVwb2ludFNwYWNlKEhCX1VDaGFyMTYgYykg
eyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnOyB9Ci0KLSAgICBpbnQgZ2x5cGhJbmRleEZv
clhQb3NpdGlvbkluU2NyaXB0UnVuKGludCB0YXJnZXRYKSBjb25zdDsKLQotICAgIGNvbnN0IEZv
bnQqIGNvbnN0IG1fZm9udDsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9jdXJyZW50Rm9u
dERhdGE7Ci0gICAgSEJfU2hhcGVySXRlbSBtX2l0ZW07Ci0gICAgdWludDE2X3QqIG1fZ2x5cGhz
MTY7IC8vIEEgdmVjdG9yIG9mIDE2LWJpdCBnbHlwaCBpZHMuCi0gICAgU2tQb2ludCogbV9wb3Np
dGlvbnM7IC8vIEEgdmVjdG9yIG9mIHBvc2l0aW9ucyBmb3IgZWFjaCBnbHlwaC4KLSAgICBzc2l6
ZV90IG1faW5kZXhPZk5leHRTY3JpcHRSdW47IC8vIEluZGV4ZXMgdGhlIHNjcmlwdCBydW4gaW4g
fG1fcnVufC4KLSAgICBpbnQgbV9vZmZzZXRYOyAvLyBPZmZzZXQgaW4gcGl4ZWxzIHRvIHRoZSBz
dGFydCBvZiB0aGUgbmV4dCBzY3JpcHQgcnVuLgotICAgIGludCBtX3N0YXJ0aW5nWTsgLy8gVGhl
IFkgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIHNjcmlwdCBydW4uCi0gICAgdW5zaWduZWQgbV9waXhl
bFdpZHRoOyAvLyBXaWR0aCAoaW4gcHgpIG9mIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCi0gICAg
dW5zaWduZWQgbV9nbHlwaHNBcnJheUNhcGFjaXR5OyAvLyBDdXJyZW50IHNpemUgb2YgYWxsIHRo
ZSBIYXJmYnV6eiBhcnJheXMuCi0KLSAgICBPd25QdHI8VGV4dFJ1bj4gbV9ub3JtYWxpemVkUnVu
OwotICAgIE93bkFycmF5UHRyPFVDaGFyPiBtX25vcm1hbGl6ZWRCdWZmZXI7IC8vIEEgYnVmZmVy
IGZvciBub3JtYWxpemVkIHJ1bi4KLSAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKLSAgICBpbnQg
bV93b3JkU3BhY2luZ0FkanVzdG1lbnQ7IC8vIGRlbHRhIGFkanVzdG1lbnQgKHBpeGVscykgZm9y
IGVhY2ggd29yZCBicmVhay4KLSAgICBmbG9hdCBtX3BhZGRpbmc7IC8vIHBpeGVscyB0byBiZSBk
aXN0cmlidXRlZCBvdmVyIHRoZSBsaW5lIGF0IHdvcmQgYnJlYWtzLgotICAgIGZsb2F0IG1fcGFk
UGVyV29yZEJyZWFrOyAvLyBwaXhlbHMgdG8gYmUgYWRkZWQgdG8gZWFjaCB3b3JkIGJyZWFrLgot
ICAgIGZsb2F0IG1fcGFkRXJyb3I7IC8vIHxtX3BhZFBlcldvcmRCcmVha3wgbWlnaHQgaGF2ZSBh
IGZyYWN0aW9uYWwgY29tcG9uZW50LgotICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHdl
IG9ubHkgYWRkIGEgd2hvbGUgbnVtYmVyIG9mIHBhZGRpbmcgcGl4ZWxzIGF0Ci0gICAgICAgICAg
ICAgICAgICAgICAgLy8gZWFjaCB3b3JkIGJyZWFrIHdlIGFjY3VtdWxhdGUgZXJyb3IuIFRoaXMg
aXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHBpeGVscyB0aGF0IHdl
IGFyZSBiZWhpbmQgc28gZmFyLgotICAgIGludCBtX2xldHRlclNwYWNpbmc7IC8vIHBpeGVscyB0
byBiZSBhZGRlZCBhZnRlciBlYWNoIGdseXBoLgotICAgIFN0cmluZyBtX3NtYWxsQ2Fwc1N0cmlu
ZzsgLy8gc3Vic3RyaW5nIG9mIG1fcnVuIGNvbnZlcnRlZCB0byBzbWFsbCBjYXBzLgotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ29tcGxleFRleHRDb250cm9sbGVy
TGludXhfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udENhY2hlTGludXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udENhY2hlTGludXguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2N2FmZDg0NTgwOTYwZTQ1OWU2YzkwNDc5NTJiZWUyYjU0ZDY5MTdjLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZv
bnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybVN1cHBvcnQuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAi
U2tQYWludC5oIgotI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKLSNpbmNsdWRlICJTa1V0aWxzLmgi
Ci0KLSNpbmNsdWRlIDx1bmljb2RlL2xvY2lkLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGb250Q2FjaGU6OnBs
YXRmb3JtSW5pdCgpCi17Ci19Ci0KLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBsZW5ndGgpCi17Ci0gICAgaWN1OjpMb2NhbGUgbG9jYWxlID0gaWN1
OjpMb2NhbGU6OmdldERlZmF1bHQoKTsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6OkZvbnRGYW1pbHkg
ZmFtaWx5OwotICAgIFBsYXRmb3JtU3VwcG9ydDo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMo
Y2hhcmFjdGVycywgbGVuZ3RoLCBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKSwgJmZhbWlseSk7Ci0gICAg
aWYgKGZhbWlseS5uYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBdG9t
aWNTdHJpbmcgYXRvbWljRmFtaWx5KGZhbWlseS5uYW1lKTsKLSAgICAvLyBDaGFuZ2VzIHdlaWdo
dCBhbmQvb3IgaXRhbGljIG9mIGdpdmVuIEZvbnREZXNjcmlwdGlvbiBkZXBlbmRzIG9uCi0gICAg
Ly8gdGhlIHJlc3VsdCBvZiBmb250Y29uZmlnIHNvIHRoYXQga2VlcGluZyB0aGUgY29ycmVjdCBm
b250IG1hcHBpbmcKLSAgICAvLyBvZiB0aGUgZ2l2ZW4gY2hhcmFjdGVycy4gU2VlIGh0dHA6Ly9j
cmJ1Zy5jb20vMzIxMDkgZm9yIGRldGFpbHMuCi0gICAgYm9vbCBzaG91bGRTZXRGYWtlQm9sZCA9
IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkU2V0RmFrZUl0YWxpYyA9IGZhbHNlOwotICAgIEZvbnRE
ZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihmb250LmZvbnREZXNjcmlwdGlvbigpKTsKLSAgICBpZiAo
ZmFtaWx5LmlzQm9sZCAmJiBkZXNjcmlwdGlvbi53ZWlnaHQoKSA8IEZvbnRXZWlnaHRCb2xkKQot
ICAgICAgICBkZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodEJvbGQpOwotICAgIGlmICgh
ZmFtaWx5LmlzQm9sZCAmJiBkZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkg
ewotICAgICAgICBzaG91bGRTZXRGYWtlQm9sZCA9IHRydWU7Ci0gICAgICAgIGRlc2NyaXB0aW9u
LnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICB9Ci0gICAgaWYgKGZhbWlseS5pc0l0
YWxpYyAmJiBkZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBGb250SXRhbGljT2ZmKQotICAgICAgICBk
ZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udEl0YWxpY09uKTsKLSAgICBpZiAoIWZhbWlseS5pc0l0
YWxpYyAmJiBkZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBGb250SXRhbGljT24pIHsKLSAgICAgICAg
c2hvdWxkU2V0RmFrZUl0YWxpYyA9IHRydWU7Ci0gICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxp
YyhGb250SXRhbGljT2ZmKTsKLSAgICB9Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3Jt
RGF0YSA9IEZvbnRQbGF0Zm9ybURhdGEoKmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3Jp
cHRpb24sIGF0b21pY0ZhbWlseSwgRG9Ob3RSZXRhaW4pKTsKLSAgICBwbGF0Zm9ybURhdGEuc2V0
RmFrZUJvbGQoc2hvdWxkU2V0RmFrZUJvbGQpOwotICAgIHBsYXRmb3JtRGF0YS5zZXRGYWtlSXRh
bGljKHNob3VsZFNldEZha2VJdGFsaWMpOwotICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YSgm
cGxhdGZvcm1EYXRhLCBEb05vdFJldGFpbik7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBGb250Q2Fj
aGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCi17Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0
YWluIHNob3VsZFJldGFpbikKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21p
Y1N0cmluZywgc2Fuc1N0ciwgKCJTYW5zIikpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgQXRvbWljU3RyaW5nLCBzZXJpZlN0ciwgKCJTZXJpZiIpKTsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgbW9ub3NwYWNlU3RyLCAoIk1vbm9zcGFjZSIpKTsK
LQotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0Zm9ybURhdGEgPSAwOwotICAgIHN3aXRj
aCAoZGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKSB7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRp
b246OlNlcmlmRmFtaWx5OgotICAgICAgICBmb250UGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9u
dFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgc2VyaWZTdHIpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5OgotICAgICAgICBmb250UGxh
dGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgbW9ub3Nw
YWNlU3RyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNT
ZXJpZkZhbWlseToKLSAgICBkZWZhdWx0OgotICAgICAgICBmb250UGxhdGZvcm1EYXRhID0gZ2V0
Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgc2Fuc1N0cik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIEFTU0VSVChmb250UGxhdGZvcm1EYXRhKTsKLSAgICByZXR1cm4g
Z2V0Q2FjaGVkRm9udERhdGEoZm9udFBsYXRmb3JtRGF0YSwgc2hvdWxkUmV0YWluKTsKLX0KLQot
dm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dW5zaWdu
ZWQ+JiB0cmFpdHNNYXNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1Gb250UGxh
dGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0g
ICAgY29uc3QgY2hhciogbmFtZSA9IDA7Ci0gICAgQ1N0cmluZyBzOwotCi0gICAgLy8gSWYgd2Un
cmUgY3JlYXRpbmcgYSBmYWxsYmFjayBmb250IChlLmcuICItd2Via2l0LW1vbm9zcGFjZSIpLCBj
b252ZXJ0IHRoZSBuYW1lIGludG8KLSAgICAvLyB0aGUgZmFsbGJhY2sgbmFtZSAobGlrZSAibW9u
b3NwYWNlIikgdGhhdCBmb250Y29uZmlnIHVuZGVyc3RhbmRzLgotICAgIGlmICghZmFtaWx5Lmxl
bmd0aCgpIHx8IGZhbWlseS5zdGFydHNXaXRoKCItd2Via2l0LSIpKSB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFt
aWx5VHlwZSBtVHlwZTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1OYW1lOwotICAgICAgICB9
IGZvbnREZXNjcmlwdGlvbnNbXSA9IHsKLSAgICAgICAgICAgIHsgRm9udERlc2NyaXB0aW9uOjpT
ZXJpZkZhbWlseSwgInNlcmlmIiB9LAotICAgICAgICAgICAgeyBGb250RGVzY3JpcHRpb246OlNh
bnNTZXJpZkZhbWlseSwgInNhbnMtc2VyaWYiIH0sCi0gICAgICAgICAgICB7IEZvbnREZXNjcmlw
dGlvbjo6TW9ub3NwYWNlRmFtaWx5LCAibW9ub3NwYWNlIiB9LAotICAgICAgICAgICAgeyBGb250
RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHksICJjdXJzaXZlIiB9LAotICAgICAgICAgICAgeyBG
b250RGVzY3JpcHRpb246OkZhbnRhc3lGYW1pbHksICJmYW50YXN5IiB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlwZSB0eXBlID0gZm9udERl
c2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IFNLX0FSUkFZX0NPVU5UKGZvbnREZXNjcmlwdGlvbnMpOyBpKyspIHsKLSAgICAgICAgICAg
IGlmICh0eXBlID09IGZvbnREZXNjcmlwdGlvbnNbaV0ubVR5cGUpIHsKLSAgICAgICAgICAgICAg
ICBuYW1lID0gZm9udERlc2NyaXB0aW9uc1tpXS5tTmFtZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIW5hbWUpCi0gICAgICAg
ICAgICBuYW1lID0gIiI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gY29udmVydCB0aGUgbmFt
ZSB0byB1dGY4Ci0gICAgICAgIHMgPSBmYW1pbHkuc3RyaW5nKCkudXRmOCgpOwotICAgICAgICBu
YW1lID0gcy5kYXRhKCk7Ci0gICAgfQotCi0gICAgaW50IHN0eWxlID0gU2tUeXBlZmFjZTo6a05v
cm1hbDsKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xk
KQotICAgICAgICBzdHlsZSB8PSBTa1R5cGVmYWNlOjprQm9sZDsKLSAgICBpZiAoZm9udERlc2Ny
aXB0aW9uLml0YWxpYygpKQotICAgICAgICBzdHlsZSB8PSBTa1R5cGVmYWNlOjprSXRhbGljOwot
Ci0gICAgU2tUeXBlZmFjZSogdGYgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tTmFtZShuYW1lLCBz
dGF0aWNfY2FzdDxTa1R5cGVmYWNlOjpTdHlsZT4oc3R5bGUpKTsKLSAgICBpZiAoIXRmKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHJlc3VsdCA9Ci0gICAgICAg
IG5ldyBGb250UGxhdGZvcm1EYXRhKHRmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uY29tcHV0
ZWRTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHlsZSAmIFNrVHlwZWZh
Y2U6OmtCb2xkKSAmJiAhdGYtPmlzQm9sZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc3R5bGUgJiBTa1R5cGVmYWNlOjprSXRhbGljKSAmJiAhdGYtPmlzSXRhbGljKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0
aW9uKCkpOwotICAgIHRmLT51bnJlZigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOTI2NTVkODIzYWVhOTg5MTc1YTYyYzQ2NjA5Yjc5M2M3NzgxODA1MS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MjYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDgsIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Rm9udC5oIgotCi0jaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyTGludXguaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhhcmZidXp6U2tpYS5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRlICJTa0NhbnZhcy5oIgotI2luY2x1ZGUg
IlNrUGFpbnQuaCIKLSNpbmNsdWRlICJTa1RlbXBsYXRlcy5oIgotI2luY2x1ZGUgIlNrVHlwZWZh
Y2UuaCIKLSNpbmNsdWRlICJTa1V0aWxzLmgiCi0KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBGb250OjpjYW5SZXR1cm5GYWxs
YmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCi17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBpc0NhbnZhc011bHRpTGF5ZXJlZChTa0Nh
bnZhcyogY2FudmFzKQotewotICAgIFNrQ2FudmFzOjpMYXllckl0ZXIgbGF5ZXJJdGVyYXRvcihj
YW52YXMsIGZhbHNlKTsKLSAgICBsYXllckl0ZXJhdG9yLm5leHQoKTsKLSAgICByZXR1cm4gIWxh
eWVySXRlcmF0b3IuZG9uZSgpOwotfQotCi1zdGF0aWMgdm9pZCBhZGp1c3RUZXh0UmVuZGVyTW9k
ZShTa1BhaW50KiBwYWludCwgUGxhdGZvcm1Db250ZXh0U2tpYSogc2tpYUNvbnRleHQpCi17Ci0g
ICAgLy8gT3VyIGxheWVycyBvbmx5IGhhdmUgYSBzaW5nbGUgYWxwaGEgY2hhbm5lbC4gVGhpcyBt
ZWFucyB0aGF0IHN1YnBpeGVsCi0gICAgLy8gcmVuZGVyZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9z
aXRpZWQgY29ycmVjdGx5IHdoZW4gdGhlIGxheWVyIGlzCi0gICAgLy8gY29sbGFwc2VkLiBUaGVy
ZWZvcmUsIHN1YnBpeGVsIHRleHQgaXMgZGlzYWJsZWQgd2hlbiB3ZSBhcmUgZHJhd2luZwotICAg
IC8vIG9udG8gYSBsYXllciBvciB3aGVuIHRoZSBjb21wb3NpdG9yIGlzIGJlaW5nIHVzZWQuCi0g
ICAgaWYgKGlzQ2FudmFzTXVsdGlMYXllcmVkKHNraWFDb250ZXh0LT5jYW52YXMoKSkgfHwgc2tp
YUNvbnRleHQtPmlzRHJhd2luZ1RvSW1hZ2VCdWZmZXIoKSkKLSAgICAgICAgcGFpbnQtPnNldExD
RFJlbmRlclRleHQoZmFsc2UpOwotfQotCi12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAgaW50IGZyb20sIGludCBudW1H
bHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0IHsKLSAgICBTa0FTU0VSVChzaXplb2YoR2x5cGhCdWZmZXJHbHlwaCkgPT0gc2l6ZW9mKHVp
bnQxNl90KSk7IC8vIGNvbXBpbGUtdGltZSBhc3NlcnQKLQotICAgIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocyA9IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKLSAgICBTa1NjYWxhciB4
ID0gU2tGbG9hdFRvU2NhbGFyKHBvaW50LngoKSk7Ci0gICAgU2tTY2FsYXIgeSA9IFNrRmxvYXRU
b1NjYWxhcihwb2ludC55KCkpOwotCi0gICAgLy8gRklYTUU6IHRleHQgcmVuZGVyaW5nIHNwZWVk
OgotICAgIC8vIEFuZHJvaWQgaGFzIGNvZGUgaW4gdGhlaXIgV2ViQ29yZSBmb3JrIHRvIHNwZWNp
YWwgY2FzZSB3aGVuIHRoZQotICAgIC8vIEdseXBoQnVmZmVyIGhhcyBubyBhZHZhbmNlcyBvdGhl
ciB0aGFuIHRoZSBkZWZhdWx0cy4gSW4gdGhhdCBjYXNlIHRoZQotICAgIC8vIHRleHQgZHJhd2lu
ZyBjYW4gcHJvY2VlZCBmYXN0ZXIuIEhvd2V2ZXIsIGl0J3MgdW5jbGVhciB3aGVuIHRob3NlCi0g
ICAgLy8gcGF0Y2hlcyBtYXkgYmUgdXBzdHJlYW1lZCB0byBXZWJLaXQgc28gd2UgYWx3YXlzIHVz
ZSB0aGUgc2xvd2VyIHBhdGgKLSAgICAvLyBoZXJlLgotICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2ID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSk7Ci0gICAgU2tBdXRvU1RNYWxs
b2M8MzIsIFNrUG9pbnQ+IHN0b3JhZ2UobnVtR2x5cGhzKSwgc3RvcmFnZTIobnVtR2x5cGhzKSwg
c3RvcmFnZTMobnVtR2x5cGhzKTsKLSAgICBTa1BvaW50KiBwb3MgPSBzdG9yYWdlLmdldCgpOwot
ICAgIFNrUG9pbnQqIHZQb3NCZWdpbiA9IHN0b3JhZ2UyLmdldCgpOwotICAgIFNrUG9pbnQqIHZQ
b3NFbmQgPSBzdG9yYWdlMy5nZXQoKTsKLQotICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGZvbnQtPnBs
YXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWw7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewotICAgICAgICBTa1NjYWxhciBteVdpZHRoID0gU2tG
bG9hdFRvU2NhbGFyKGFkdltpXS53aWR0aCgpKTsKLSAgICAgICAgcG9zW2ldLnNldCh4LCB5KTsK
LSAgICAgICAgaWYgKGlzVmVydGljYWwpIHsKLSAgICAgICAgICAgIHZQb3NCZWdpbltpXS5zZXQo
eCArIG15V2lkdGgsIHkpOwotICAgICAgICAgICAgdlBvc0VuZFtpXS5zZXQoeCArIG15V2lkdGgs
IHkgLSBteVdpZHRoKTsKLSAgICAgICAgfQotICAgICAgICB4ICs9IG15V2lkdGg7Ci0gICAgICAg
IHkgKz0gU2tGbG9hdFRvU2NhbGFyKGFkdltpXS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgU2tD
YW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgVGV4
dERyYXdpbmdNb2RlRmxhZ3MgdGV4dE1vZGUgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmdldFRl
eHREcmF3aW5nTW9kZSgpOwotCi0gICAgLy8gV2UgZHJhdyB0ZXh0IHVwIHRvIHR3byB0aW1lcyAo
b25jZSBmb3IgZmlsbCwgb25jZSBmb3Igc3Ryb2tlKS4KLSAgICBpZiAodGV4dE1vZGUgJiBUZXh0
TW9kZUZpbGwpIHsKLSAgICAgICAgU2tQYWludCBwYWludDsKLSAgICAgICAgZ2MtPnBsYXRmb3Jt
Q29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwotICAgICAgICBmb250LT5w
bGF0Zm9ybURhdGEoKS5zZXR1cFBhaW50KCZwYWludCk7Ci0gICAgICAgIGFkanVzdFRleHRSZW5k
ZXJNb2RlKCZwYWludCwgZ2MtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgcGFpbnQuc2V0
VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7Ci0KLSAgICAgICAg
aWYgKGlzVmVydGljYWwpIHsKLSAgICAgICAgICAgIFNrUGF0aCBwYXRoOwotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICAgICAgICAgIHBh
dGgucmVzZXQoKTsKLSAgICAgICAgICAgICAgICBwYXRoLm1vdmVUbyh2UG9zQmVnaW5baV0pOwot
ICAgICAgICAgICAgICAgIHBhdGgubGluZVRvKHZQb3NFbmRbaV0pOwotICAgICAgICAgICAgICAg
IGNhbnZhcy0+ZHJhd1RleHRPblBhdGgoZ2x5cGhzICsgaSwgMiwgcGF0aCwgMCwgcGFpbnQpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bv
c1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgPDwgMSwgcG9zLCBwYWludCk7Ci0gICAgfQotCi0gICAg
aWYgKCh0ZXh0TW9kZSAmIFRleHRNb2RlU3Ryb2tlKQotICAgICAgICAmJiBnYy0+cGxhdGZvcm1D
b250ZXh0KCktPmdldFN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UKLSAgICAgICAgJiYgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VUaGlja25lc3MoKSA+IDApIHsKLQotICAgICAgICBT
a1BhaW50IHBhaW50OwotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRG
b3JTdHJva2luZygmcGFpbnQsIDAsIDApOwotICAgICAgICBmb250LT5wbGF0Zm9ybURhdGEoKS5z
ZXR1cFBhaW50KCZwYWludCk7Ci0gICAgICAgIGFkanVzdFRleHRSZW5kZXJNb2RlKCZwYWludCwg
Z2MtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNr
UGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7Ci0KLSAgICAgICAgaWYgKHRleHRNb2RlICYg
VGV4dE1vZGVGaWxsKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBhbHNvIGZpbGxlZCwgd2UgZG9u
J3Qgd2FudCB0byBkcmF3IHNoYWRvd3MgdHdpY2UuCi0gICAgICAgICAgICAvLyBTZWUgY29tbWVu
dCBpbiBGb250Q2hyb21pdW1XaW4uY3BwOjpwYWludFNraWFUZXh0KCkgZm9yIG1vcmUgZGV0YWls
cy4KLSAgICAgICAgICAgIC8vIFNpbmNlIHdlIHVzZSB0aGUgbG9vcGVyIGZvciBzaGFkb3dzLCB3
ZSByZW1vdmUgaXQgKGlmIGFueSkgbm93LgotICAgICAgICAgICAgcGFpbnQuc2V0TG9vcGVyKDAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzVmVydGljYWwpIHsKLSAgICAgICAgICAgIFNr
UGF0aCBwYXRoOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsr
aSkgewotICAgICAgICAgICAgICAgIHBhdGgucmVzZXQoKTsKLSAgICAgICAgICAgICAgICBwYXRo
Lm1vdmVUbyh2UG9zQmVnaW5baV0pOwotICAgICAgICAgICAgICAgIHBhdGgubGluZVRvKHZQb3NF
bmRbaV0pOwotICAgICAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1RleHRPblBhdGgoZ2x5cGhzICsg
aSwgMiwgcGF0aCwgMCwgcGFpbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgPDwgMSwgcG9z
LCBwYWludCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBzZXR1cEZvclRleHRQYWludGluZyhT
a1BhaW50KiBwYWludCwgU2tDb2xvciBjb2xvcikKLXsKLSAgICBwYWludC0+c2V0VGV4dEVuY29k
aW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7Ci0gICAgcGFpbnQtPnNldENvbG9y
KGNvbG9yKTsKLX0KLQotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiBnYywgY29uc3QgVGV4dFJ1biYgcnVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgaWYg
KCFydW4ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNrQ2FudmFzKiBjYW52YXMg
PSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotICAgIFRleHREcmF3aW5nTW9kZUZs
YWdzIHRleHRNb2RlID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUZXh0RHJhd2luZ01vZGUo
KTsKLSAgICBib29sIGZpbGwgPSB0ZXh0TW9kZSAmIFRleHRNb2RlRmlsbDsKLSAgICBib29sIHN0
cm9rZSA9ICh0ZXh0TW9kZSAmIFRleHRNb2RlU3Ryb2tlKQotICAgICAgICAgICAgICAgJiYgZ2Mt
PnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlCi0gICAgICAg
ICAgICAgICAmJiBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0cm9rZVRoaWNrbmVzcygpID4g
MDsKLQotICAgIGlmICghZmlsbCAmJiAhc3Ryb2tlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBT
a1BhaW50IHN0cm9rZVBhaW50LCBmaWxsUGFpbnQ7Ci0gICAgaWYgKGZpbGwpIHsKLSAgICAgICAg
Z2MtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmZmlsbFBhaW50KTsK
LSAgICAgICAgc2V0dXBGb3JUZXh0UGFpbnRpbmcoJmZpbGxQYWludCwgZ2MtPmZpbGxDb2xvcigp
LnJnYigpKTsKLSAgICB9Ci0gICAgaWYgKHN0cm9rZSkgewotICAgICAgICBnYy0+cGxhdGZvcm1D
b250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmc3Ryb2tlUGFpbnQsIDAsIDApOwotICAg
ICAgICBzZXR1cEZvclRleHRQYWludGluZygmc3Ryb2tlUGFpbnQsIGdjLT5zdHJva2VDb2xvcigp
LnJnYigpKTsKLSAgICB9Ci0KLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihy
dW4sIHBvaW50LngoKSwgcG9pbnQueSgpLCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFjaW5nKCks
IHJ1bi5leHBhbnNpb24oKSwgdGhpcyk7Ci0KLSAgICBpZiAocnVuLnJ0bCgpKQotICAgICAgICBj
b250cm9sbGVyLnNldHVwRm9yUlRMKCk7Ci0KLSAgICB3aGlsZSAoY29udHJvbGxlci5uZXh0U2Ny
aXB0UnVuKCkpIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IGdseXBoIGZvdW5k
IGluIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCi0gICAgICAgIGludCBmcm9tR2x5cGgsIGdseXBo
TGVuZ3RoOwotICAgICAgICBjb250cm9sbGVyLmdseXBoc0ZvclJhbmdlKGZyb20sIHRvLCBmcm9t
R2x5cGgsIGdseXBoTGVuZ3RoKTsKLSAgICAgICAgaWYgKGZyb21HbHlwaCA8IDAgfHwgZ2x5cGhM
ZW5ndGggPD0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChmaWxsKSB7
Ci0gICAgICAgICAgICBjb250cm9sbGVyLmZvbnRQbGF0Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+
c2V0dXBQYWludCgmZmlsbFBhaW50KTsKLSAgICAgICAgICAgIGFkanVzdFRleHRSZW5kZXJNb2Rl
KCZmaWxsUGFpbnQsIGdjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgICAgICBjYW52YXMt
PmRyYXdQb3NUZXh0KGNvbnRyb2xsZXIuZ2x5cGhzKCkgKyBmcm9tR2x5cGgsIGdseXBoTGVuZ3Ro
IDw8IDEsIGNvbnRyb2xsZXIucG9zaXRpb25zKCkgKyBmcm9tR2x5cGgsIGZpbGxQYWludCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoc3Ryb2tlKSB7Ci0gICAgICAgICAgICBjb250cm9sbGVy
LmZvbnRQbGF0Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+c2V0dXBQYWludCgmc3Ryb2tlUGFpbnQp
OwotICAgICAgICAgICAgYWRqdXN0VGV4dFJlbmRlck1vZGUoJnN0cm9rZVBhaW50LCBnYy0+cGxh
dGZvcm1Db250ZXh0KCkpOwotICAgICAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChjb250cm9s
bGVyLmdseXBocygpICsgZnJvbUdseXBoLCBnbHlwaExlbmd0aCA8PCAxLCBjb250cm9sbGVyLnBv
c2l0aW9ucygpICsgZnJvbUdseXBoLCBzdHJva2VQYWludCk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRv
bWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50
IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIC8qIGZhbGxiYWNrRm9udHMg
Ki8sIEdseXBoT3ZlcmZsb3cqIC8qIGdseXBoT3ZlcmZsb3cgKi8pIGNvbnN0Ci17Ci0gICAgQ29t
cGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIocnVuLCAwLCAwLCB3b3JkU3BhY2luZygpLCBs
ZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNpb24oKSwgdGhpcyk7Ci0gICAgcmV0dXJuIGNvbnRy
b2xsZXIud2lkdGhPZkZ1bGxSdW4oKTsKLX0KLQotLy8gUmV0dXJuIHRoZSBjb2RlIHBvaW50IGlu
ZGV4IGZvciB0aGUgZ2l2ZW4gfHh8IG9mZnNldCBpbnRvIHRoZSB0ZXh0IHJ1bi4KLWludCBGb250
OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxv
YXQgeEZsb2F0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyB0cnVu
Y2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9yIEhUTUwsIGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3
aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVycwotICAgIC8vIHRvIEZvbnQ6Om9mZnNl
dEZvclBvc2l0aW9uKCkuIEJ1ZyBodHRwOi8vd2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhp
bmcgdGhpcyBwcm9ibGVtLgotICAgIGludCB0YXJnZXRYID0gc3RhdGljX2Nhc3Q8aW50Pih4Rmxv
YXQpOwotCi0gICAgLy8gKE1hYyBjb2RlIGlnbm9yZXMgaW5jbHVkZVBhcnRpYWxHbHlwaHMsIGFu
ZCB0aGV5IGRvbid0IGtub3cgd2hhdCBpdCdzCi0gICAgLy8gc3VwcG9zZWQgdG8gZG8sIHNvIHdl
IGp1c3QgaWdub3JlIGl0IGFzIHdlbGwuKQotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250
cm9sbGVyKHJ1biwgMCwgMCwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4uZXhw
YW5zaW9uKCksIHRoaXMpOwotICAgIGlmIChydW4ucnRsKCkpCi0gICAgICAgIGNvbnRyb2xsZXIu
c2V0dXBGb3JSVEwoKTsKLSAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih0
YXJnZXRYKTsKLX0KLQotLy8gUmV0dXJuIHRoZSByZWN0YW5nbGUgZm9yIHNlbGVjdGluZyB0aGUg
Z2l2ZW4gcmFuZ2Ugb2YgY29kZS1wb2ludHMgaW4gdGhlIFRleHRSdW4uCi1GbG9hdFJlY3QgRm9u
dDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgQ29tcGxleFRleHRDb250cm9s
bGVyIGNvbnRyb2xsZXIocnVuLCAwLCAwLCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFjaW5nKCks
IHJ1bi5leHBhbnNpb24oKSwgdGhpcyk7Ci0gICAgaWYgKHJ1bi5ydGwoKSkKLSAgICAgICAgY29u
dHJvbGxlci5zZXR1cEZvclJUTCgpOwotICAgIHJldHVybiBjb250cm9sbGVyLnNlbGVjdGlvblJl
Y3QocG9pbnQsIGhlaWdodCwgZnJvbSwgdG8pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggOTExYjAzNTZhZjYwNmZmMDAwMjUxOWU3N2I0
OGZmMDQzN2EyMWYxNy4uZjRmNjM1MjljZmRlNTkzMjE2MzZlODVmMzcwZWE2N2U3YmQzMjhjYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMzQsNyArMzQsNyBAQAogI2lmIE9TKFdJTkRP
V1MpCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmgiCiAjZWxpZiBPUyhV
TklYKSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFMaW51eC5oIgor
I2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oIgogI2VuZGlmCiAKICNlbmRpZiAg
Ly8gRm9udFBsYXRmb3JtRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY2YWI0N2U5OTMwZmNmMWNhMTFkYmIx
Mjg4MWZhMjczNzMxNjU2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxh
dGZvcm1EYXRhTGludXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjUxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdXBw
b3J0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQotI2luY2x1ZGUgIlNrQWR2YW5j
ZWRUeXBlZmFjZU1ldHJpY3MuaCIKLSNpbmNsdWRlICJTa1BhaW50LmgiCi0jaW5jbHVkZSAiU2tU
eXBlZmFjZS5oIgotCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPiAKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgU2tQYWludDo6SGludGluZyBza2lhSGludGluZyA9IFNr
UGFpbnQ6OmtOb3JtYWxfSGludGluZzsKLXN0YXRpYyBib29sIGlzU2tpYUFudGlBbGlhcyA9IHRy
dWU7Ci1zdGF0aWMgYm9vbCBpc1NraWFTdWJwaXhlbEdseXBocyA9IGZhbHNlOwotCi12b2lkIEZv
bnRQbGF0Zm9ybURhdGE6OnNldEhpbnRpbmcoU2tQYWludDo6SGludGluZyBoaW50aW5nKQotewot
ICAgIHNraWFIaW50aW5nID0gaGludGluZzsKLX0KLQotdm9pZCBGb250UGxhdGZvcm1EYXRhOjpz
ZXRBbnRpQWxpYXMoYm9vbCBpc0FudGlBbGlhcykKLXsKLSAgICBpc1NraWFBbnRpQWxpYXMgPSBp
c0FudGlBbGlhczsKLX0KLQotdm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRTdWJwaXhlbEdseXBo
cyhib29sIGlzU3VicGl4ZWxHbHlwaHMpCi17Ci0gICAgaXNTa2lhU3VicGl4ZWxHbHlwaHMgPSBp
c1N1YnBpeGVsR2x5cGhzOwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYykKLSAgICA6IG1fdHlwZWZhY2Uoc3JjLm1fdHlw
ZWZhY2UpCi0gICAgLCBtX2ZhbWlseShzcmMubV9mYW1pbHkpCi0gICAgLCBtX3RleHRTaXplKHNy
Yy5tX3RleHRTaXplKQotICAgICwgbV9lbVNpemVJbkZvbnRVbml0cyhzcmMubV9lbVNpemVJbkZv
bnRVbml0cykKLSAgICAsIG1fZmFrZUJvbGQoc3JjLm1fZmFrZUJvbGQpCi0gICAgLCBtX2Zha2VJ
dGFsaWMoc3JjLm1fZmFrZUl0YWxpYykKLSAgICAsIG1fb3JpZW50YXRpb24oc3JjLm1fb3JpZW50
YXRpb24pCi0gICAgLCBtX3RleHRPcmllbnRhdGlvbihzcmMubV90ZXh0T3JpZW50YXRpb24pCi0g
ICAgLCBtX3N0eWxlKHNyYy5tX3N0eWxlKQotICAgICwgbV9oYXJmYnV6ekZhY2Uoc3JjLm1faGFy
ZmJ1enpGYWNlKQotewotICAgIFNrU2FmZVJlZihtX3R5cGVmYWNlKTsKLX0KLQotRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShTa1R5cGVmYWNlKiB0ZiwgY29uc3QgY2hhciogZmFt
aWx5LCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBmYWtlQm9sZCwgYm9vbCBmYWtlSXRhbGljLCBGb250
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24p
Ci0gICAgOiBtX3R5cGVmYWNlKHRmKQotICAgICwgbV9mYW1pbHkoZmFtaWx5KQotICAgICwgbV90
ZXh0U2l6ZSh0ZXh0U2l6ZSkKLSAgICAsIG1fZW1TaXplSW5Gb250VW5pdHMoMCkKLSAgICAsIG1f
ZmFrZUJvbGQoZmFrZUJvbGQpCi0gICAgLCBtX2Zha2VJdGFsaWMoZmFrZUl0YWxpYykKLSAgICAs
IG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCi0gICAgLCBtX3RleHRPcmllbnRhdGlvbih0ZXh0
T3JpZW50YXRpb24pCi17Ci0gICAgU2tTYWZlUmVmKG1fdHlwZWZhY2UpOwotICAgIHF1ZXJ5U3lz
dGVtRm9yUmVuZGVyU3R5bGUoKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMsIGZsb2F0IHRleHRTaXplKQotICAgIDog
bV90eXBlZmFjZShzcmMubV90eXBlZmFjZSkKLSAgICAsIG1fZmFtaWx5KHNyYy5tX2ZhbWlseSkK
LSAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCi0gICAgLCBtX2VtU2l6ZUluRm9udFVuaXRzKHNy
Yy5tX2VtU2l6ZUluRm9udFVuaXRzKQotICAgICwgbV9mYWtlQm9sZChzcmMubV9mYWtlQm9sZCkK
LSAgICAsIG1fZmFrZUl0YWxpYyhzcmMubV9mYWtlSXRhbGljKQotICAgICwgbV9vcmllbnRhdGlv
bihzcmMubV9vcmllbnRhdGlvbikKLSAgICAsIG1fdGV4dE9yaWVudGF0aW9uKHNyYy5tX3RleHRP
cmllbnRhdGlvbikKLSAgICAsIG1faGFyZmJ1enpGYWNlKHNyYy5tX2hhcmZidXp6RmFjZSkKLXsK
LSAgICBTa1NhZmVSZWYobV90eXBlZmFjZSk7Ci0gICAgcXVlcnlTeXN0ZW1Gb3JSZW5kZXJTdHls
ZSgpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCi17Ci0gICAg
U2tTYWZlVW5yZWYobV90eXBlZmFjZSk7Ci19Ci0KLWludCBGb250UGxhdGZvcm1EYXRhOjplbVNp
emVJbkZvbnRVbml0cygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZW1TaXplSW5Gb250VW5pdHMpCi0g
ICAgICAgIHJldHVybiBtX2VtU2l6ZUluRm9udFVuaXRzOwotCi0gICAgU2tBZHZhbmNlZFR5cGVm
YWNlTWV0cmljcyogbWV0cmljcyA9IG1fdHlwZWZhY2UtPmdldEFkdmFuY2VkVHlwZWZhY2VNZXRy
aWNzKFNrQWR2YW5jZWRUeXBlZmFjZU1ldHJpY3M6OmtOb19QZXJHbHlwaEluZm8pOwotICAgIG1f
ZW1TaXplSW5Gb250VW5pdHMgPSBtZXRyaWNzLT5mRW1TaXplOwotICAgIG1ldHJpY3MtPnVucmVm
KCk7Ci0gICAgcmV0dXJuIG1fZW1TaXplSW5Gb250VW5pdHM7Ci19Ci0KLUZvbnRQbGF0Zm9ybURh
dGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBz
cmMpCi17Ci0gICAgU2tSZWZDbnRfU2FmZUFzc2lnbihtX3R5cGVmYWNlLCBzcmMubV90eXBlZmFj
ZSk7Ci0KLSAgICBtX2ZhbWlseSA9IHNyYy5tX2ZhbWlseTsKLSAgICBtX3RleHRTaXplID0gc3Jj
Lm1fdGV4dFNpemU7Ci0gICAgbV9mYWtlQm9sZCA9IHNyYy5tX2Zha2VCb2xkOwotICAgIG1fZmFr
ZUl0YWxpYyA9IHNyYy5tX2Zha2VJdGFsaWM7Ci0gICAgbV9oYXJmYnV6ekZhY2UgPSBzcmMubV9o
YXJmYnV6ekZhY2U7Ci0gICAgbV9vcmllbnRhdGlvbiA9IHNyYy5tX29yaWVudGF0aW9uOwotICAg
IG1fdGV4dE9yaWVudGF0aW9uID0gc3JjLm1fdGV4dE9yaWVudGF0aW9uOwotICAgIG1fc3R5bGUg
PSBzcmMubV9zdHlsZTsKLSAgICBtX2VtU2l6ZUluRm9udFVuaXRzID0gc3JjLm1fZW1TaXplSW5G
b250VW5pdHM7Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1TdHJp
bmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLSNlbmRpZgotCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldHVwUGFpbnQo
U2tQYWludCogcGFpbnQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgdHMgPSBtX3RleHRTaXpl
ID49IDAgPyBtX3RleHRTaXplIDogMTI7Ci0KLSAgICBwYWludC0+c2V0QW50aUFsaWFzKG1fc3R5
bGUudXNlQW50aUFsaWFzID09IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlID8gaXNTa2lh
QW50aUFsaWFzIDogbV9zdHlsZS51c2VBbnRpQWxpYXMpOwotICAgIHN3aXRjaCAobV9zdHlsZS51
c2VIaW50aW5nKSB7Ci0gICAgY2FzZSBGb250UmVuZGVyU3R5bGU6Ok5vUHJlZmVyZW5jZToKLSAg
ICAgICAgcGFpbnQtPnNldEhpbnRpbmcoc2tpYUhpbnRpbmcpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIDA6Ci0gICAgICAgIHBhaW50LT5zZXRIaW50aW5nKFNrUGFpbnQ6OmtOb19IaW50aW5n
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcGFpbnQtPnNldEhpbnRp
bmcoc3RhdGljX2Nhc3Q8U2tQYWludDo6SGludGluZz4obV9zdHlsZS5oaW50U3R5bGUpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcGFpbnQtPnNldEVtYmVkZGVkQml0bWFwVGV4dCht
X3N0eWxlLnVzZUJpdG1hcHMpOwotICAgIHBhaW50LT5zZXRUZXh0U2l6ZShTa0Zsb2F0VG9TY2Fs
YXIodHMpKTsKLSAgICBwYWludC0+c2V0VHlwZWZhY2UobV90eXBlZmFjZSk7Ci0gICAgcGFpbnQt
PnNldEZha2VCb2xkVGV4dChtX2Zha2VCb2xkKTsKLSAgICBwYWludC0+c2V0VGV4dFNrZXdYKG1f
ZmFrZUl0YWxpYyA/IC1TS19TY2FsYXIxIC8gNCA6IDApOwotICAgIHBhaW50LT5zZXRBdXRvaGlu
dGVkKG1fc3R5bGUudXNlQXV0b0hpbnQpOwotCi0gICAgaWYgKG1fc3R5bGUudXNlQW50aUFsaWFz
ID09IDEgfHwgKG1fc3R5bGUudXNlQW50aUFsaWFzID09IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVm
ZXJlbmNlICYmIGlzU2tpYUFudGlBbGlhcykpCi0gICAgICAgIHBhaW50LT5zZXRMQ0RSZW5kZXJU
ZXh0KG1fc3R5bGUudXNlU3VicGl4ZWwgPT0gRm9udFJlbmRlclN0eWxlOjpOb1ByZWZlcmVuY2Ug
PyBpc1NraWFTdWJwaXhlbEdseXBocyA6IG1fc3R5bGUudXNlU3VicGl4ZWwpOwotfQotCi1Ta0Zv
bnRJRCBGb250UGxhdGZvcm1EYXRhOjp1bmlxdWVJRCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
dHlwZWZhY2UtPnVuaXF1ZUlEKCk7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0
b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBhKSBjb25zdAotewotICAgIC8vIElmIGVpdGhl
ciBvZiB0aGUgdHlwZWZhY2UgcG9pbnRlcnMgYXJlIGludmFsaWQgKGVpdGhlciBOVUxMIG9yIHRo
ZQotICAgIC8vIHNwZWNpYWwgZGVsZXRlZCB2YWx1ZSkgdGhlbiB3ZSB0ZXN0IGZvciBwb2ludGVy
IGVxdWFsaXR5LiBPdGhlcndpc2UsIHdlCi0gICAgLy8gY2FsbCBTa1R5cGVmYWNlOjpFcXVhbCBv
biB0aGUgdmFsaWQgcG9pbnRlcnMuCi0gICAgYm9vbCB0eXBlZmFjZXNFcXVhbDsKLSAgICBpZiAo
bV90eXBlZmFjZSA9PSBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkKLSAgICAgICAgfHwgYS5t
X3R5cGVmYWNlID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKQotICAgICAgICB8fCAhbV90
eXBlZmFjZQotICAgICAgICB8fCAhYS5tX3R5cGVmYWNlKQotICAgICAgICB0eXBlZmFjZXNFcXVh
bCA9IG1fdHlwZWZhY2UgPT0gYS5tX3R5cGVmYWNlOwotICAgIGVsc2UKLSAgICAgICAgdHlwZWZh
Y2VzRXF1YWwgPSBTa1R5cGVmYWNlOjpFcXVhbChtX3R5cGVmYWNlLCBhLm1fdHlwZWZhY2UpOwot
Ci0gICAgcmV0dXJuIHR5cGVmYWNlc0VxdWFsIAotICAgICAgICAmJiBtX3RleHRTaXplID09IGEu
bV90ZXh0U2l6ZQotICAgICAgICAmJiBtX2Zha2VCb2xkID09IGEubV9mYWtlQm9sZAotICAgICAg
ICAmJiBtX2Zha2VJdGFsaWMgPT0gYS5tX2Zha2VJdGFsaWMKLSAgICAgICAgJiYgbV9vcmllbnRh
dGlvbiA9PSBhLm1fb3JpZW50YXRpb24KLSAgICAgICAgJiYgbV90ZXh0T3JpZW50YXRpb24gPT0g
YS5tX3RleHRPcmllbnRhdGlvbgotICAgICAgICAmJiBtX3N0eWxlID09IGEubV9zdHlsZTsKLX0K
LQotdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgdW5zaWdu
ZWQgaCA9IFNrVHlwZWZhY2U6OlVuaXF1ZUlEKG1fdHlwZWZhY2UpOwotICAgIGggXj0gMHgwMTAx
MDEwMSAqICgoc3RhdGljX2Nhc3Q8aW50PihtX3RleHRPcmllbnRhdGlvbikgPDwgMykgfCAoc3Rh
dGljX2Nhc3Q8aW50PihtX29yaWVudGF0aW9uKSA8PCAyKSB8IChzdGF0aWNfY2FzdDxpbnQ+KG1f
ZmFrZUJvbGQpIDw8IDEpIHwgc3RhdGljX2Nhc3Q8aW50PihtX2Zha2VJdGFsaWMpKTsKLQotICAg
IC8vIFRoaXMgbWVtY3B5IGlzIHRvIGF2b2lkIGEgcmVpbnRlcnByZXRfY2FzdCB0aGF0IGJyZWFr
cyBzdHJpY3QtYWxpYXNpbmcKLSAgICAvLyBydWxlcy4gTWVtY3B5IGlzIGdlbmVyYWxseSBvcHRp
bWl6ZWQgZW5vdWdoIHNvIHRoYXQgcGVyZm9ybWFuY2UgZG9lc24ndAotICAgIC8vIG1hdHRlciBo
ZXJlLgotICAgIHVpbnQzMl90IHRleHRTaXplQnl0ZXM7Ci0gICAgbWVtY3B5KCZ0ZXh0U2l6ZUJ5
dGVzLCAmbV90ZXh0U2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7Ci0gICAgaCBePSB0ZXh0U2l6ZUJ5
dGVzOwotCi0gICAgcmV0dXJuIGg7Ci19Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhl
ZFBpdGNoKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotSGFyZmJ1enpGYWNlKiBGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKSBj
b25zdAotewotICAgIGlmICghbV9oYXJmYnV6ekZhY2UpCi0gICAgICAgIG1faGFyZmJ1enpGYWNl
ID0gSGFyZmJ1enpGYWNlOjpjcmVhdGUoY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odGhp
cykpOwotCi0gICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdldCgpOwotfQotCi12b2lkIEZvbnRQ
bGF0Zm9ybURhdGE6OnF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKQotewotICAgIGlmICghbV9m
YW1pbHkubGVuZ3RoKCkpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGZhbWlseSBmb3Ig
dGhpcy4gUHJvYmFibHkgYmVjYXVzZSBpdCdzIGEgd2ViZm9udC4gV2UKLSAgICAgICAgLy8gc2V0
IGFsbCB0aGUgdmFsdWVzIHRvICdubyBwcmVmZXJlbmNlJyBhbmQgdGFrZSB0aGUgZGVmYXVsdHMg
cGFzc2VkCi0gICAgICAgIC8vIGluIGZyb20gWFNFVFRJTkdTLgotICAgICAgICBtX3N0eWxlLnVz
ZUJpdG1hcHMgPSBGb250UmVuZGVyU3R5bGU6Ok5vUHJlZmVyZW5jZTsKLSAgICAgICAgbV9zdHls
ZS51c2VBdXRvSGludCA9IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlOwotICAgICAgICBt
X3N0eWxlLnVzZUhpbnRpbmcgPSBGb250UmVuZGVyU3R5bGU6Ok5vUHJlZmVyZW5jZTsKLSAgICAg
ICAgbV9zdHlsZS51c2VBbnRpQWxpYXMgPSBGb250UmVuZGVyU3R5bGU6Ok5vUHJlZmVyZW5jZTsK
LSAgICAgICAgbV9zdHlsZS51c2VTdWJwaXhlbCA9IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJl
bmNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGxhdGZvcm1TdXBwb3J0OjpnZXRS
ZW5kZXJTdHlsZUZvclN0cmlrZShtX2ZhbWlseS5kYXRhKCksICgoKGludCltX3RleHRTaXplKSA8
PCAyKSB8IChtX3R5cGVmYWNlLT5zdHlsZSgpICYgMyksICZtX3N0eWxlKTsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZGNlOTA1MDQ1MDU4M2MzNzJhMzQ3NTJlOTMxMDI1
NGMzZTEzYTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0
YUxpbnV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoYykgMjAwNiwgMjAwNywgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFMaW51eF9oCi0jZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFM
aW51eF9oCi0KLSNpbmNsdWRlICJGb250T3JpZW50YXRpb24uaCIKLSNpbmNsdWRlICJGb250UmVu
ZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJIYXJmYnV6elNraWEuaCIKLSNpbmNsdWRlICJUZXh0T3Jp
ZW50YXRpb24uaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSW1wbC5oPgotI2luY2x1ZGUgPFNrUGFpbnQuaD4KLQotY2xhc3MgU2tUeXBlZmFjZTsK
LXR5cGVkZWYgdWludDMyX3QgU2tGb250SUQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgRm9udERlc2NyaXB0aW9uOwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRm9udFBs
YXRmb3JtRGF0YSBpcyB0aGUgaGFuZGxlIHdoaWNoIFdlYktpdCBoYXMgb24gYSBzcGVjaWZpYyBm
YWNlLiBBIGZhY2UKLS8vIGlzIHRoZSB0dXBsZSBvZiAoZm9udCwgc2l6ZSwgLi4uZXRjKS4gSGVy
ZSB3ZSBhcmUganVzdCB3cmFwcGluZyBhIFNraWEKLS8vIFNrVHlwZWZhY2UgcG9pbnRlciBhbmQg
ZGVhbGluZyB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZXRjLgotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgewotcHVibGljOgotICAgIC8vIFVzZWQg
Zm9yIGRlbGV0ZWQgdmFsdWVzIGluIHRoZSBmb250IGNhY2hlJ3MgaGFzaCB0YWJsZXMuIFRoZSBo
YXNoIHRhYmxlCi0gICAgLy8gd2lsbCBjcmVhdGUgdXMgd2l0aCB0aGlzIHN0cnVjdHVyZSwgYW5k
IGl0IHdpbGwgY29tcGFyZSBvdGhlciB2YWx1ZXMKLSAgICAvLyB0byB0aGlzICJEZWxldGVkIiBv
bmUuIEl0IGV4cGVjdHMgdGhlIERlbGV0ZWQgb25lIHRvIGJlIGRpZmZlcmVudGlhYmxlCi0gICAg
Ly8gZnJvbSB0aGUgTlVMTCBvbmUgKGNyZWF0ZWQgd2l0aCB0aGUgZW1wdHkgY29uc3RydWN0b3Ip
LCBzbyB3ZSBjYW4ndCBqdXN0Ci0gICAgLy8gc2V0IGV2ZXJ5dGhpbmcgdG8gTlVMTC4KLSAgICBG
b250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAg
OiBtX3R5cGVmYWNlKGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkKLSAgICAgICAgLCBtX3Rl
eHRTaXplKDApCi0gICAgICAgICwgbV9lbVNpemVJbkZvbnRVbml0cygwKQotICAgICAgICAsIG1f
ZmFrZUJvbGQoZmFsc2UpCi0gICAgICAgICwgbV9mYWtlSXRhbGljKGZhbHNlKQotICAgICAgICAs
IG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKLSAgICAgICAgLCBtX3RleHRPcmllbnRhdGlvbihU
ZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KQotICAgICAgICB7IH0KLQotICAgIEZvbnRQbGF0
Zm9ybURhdGEoKQotICAgICAgICA6IG1fdHlwZWZhY2UoMCkKLSAgICAgICAgLCBtX3RleHRTaXpl
KDApCi0gICAgICAgICwgbV9lbVNpemVJbkZvbnRVbml0cygwKQotICAgICAgICAsIG1fZmFrZUJv
bGQoZmFsc2UpCi0gICAgICAgICwgbV9mYWtlSXRhbGljKGZhbHNlKQotICAgICAgICAsIG1fb3Jp
ZW50YXRpb24oSG9yaXpvbnRhbCkKLSAgICAgICAgLCBtX3RleHRPcmllbnRhdGlvbihUZXh0T3Jp
ZW50YXRpb25WZXJ0aWNhbFJpZ2h0KQotICAgICAgICB7IH0KLQotICAgIEZvbnRQbGF0Zm9ybURh
dGEoZmxvYXQgdGV4dFNpemUsIGJvb2wgZmFrZUJvbGQsIGJvb2wgZmFrZUl0YWxpYykKLSAgICAg
ICAgOiBtX3R5cGVmYWNlKDApCi0gICAgICAgICwgbV90ZXh0U2l6ZSh0ZXh0U2l6ZSkKLSAgICAg
ICAgLCBtX2VtU2l6ZUluRm9udFVuaXRzKDApCi0gICAgICAgICwgbV9mYWtlQm9sZChmYWtlQm9s
ZCkKLSAgICAgICAgLCBtX2Zha2VJdGFsaWMoZmFrZUl0YWxpYykKLSAgICAgICAgLCBtX29yaWVu
dGF0aW9uKEhvcml6b250YWwpCi0gICAgICAgICwgbV90ZXh0T3JpZW50YXRpb24oVGV4dE9yaWVu
dGF0aW9uVmVydGljYWxSaWdodCkKLSAgICAgICAgeyB9Ci0KLSAgICBGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBGb250UGxhdGZvcm1EYXRhKFNrVHlwZWZh
Y2UqLCBjb25zdCBjaGFyKiBuYW1lLCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBmYWtlQm9sZCwgYm9v
bCBmYWtlSXRhbGljLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBUZXh0T3JpZW50YXRp
b24gPSBUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KTsKLSAgICBGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYywgZmxvYXQgdGV4dFNpemUpOwotICAgIH5Gb250
UGxhdGZvcm1EYXRhKCk7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUmV0dXJu
IHRydWUgaWZmIHRoaXMgZm9udCBpcyBtb25vc3BhY2VkIChpLmUuIGV2ZXJ5IGdseXBoIGhhcyBh
biBlcXVhbCB4Ci0gICAgLy8gYWR2YW5jZSkKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
Ym9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAg
ICAvLyBTZXR1cCBhIFNraWEgcGFpbnRpbmcgY29udGV4dCB0byB1c2UgdGhpcyBmb250LgotICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICB2b2lkIHNldHVwUGFpbnQoU2tQYWludCopIGNvbnN0
OwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFJldHVybiBTa2lhJ3MgdW5pcXVl
IGlkIGZvciB0aGlzIGZvbnQuIFRoaXMgZW5jb2RlcyBib3RoIHRoZSBzdHlsZSBhbmQKLSAgICAv
LyB0aGUgZm9udCdzIGZpbGUgbmFtZSBzbyByZWZlcnMgdG8gYSBzaW5nbGUgZmFjZS4KLSAgICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgU2tGb250SUQgdW5pcXVlSUQoKSBjb25zdDsKLQotICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLSAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0U2l6ZTsgfQotICAgIGludCBlbVNpemVJbkZvbnRVbml0cygpIGNvbnN0OwotCi0gICAg
Rm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlv
bjsgfQotICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQotICAgIHZvaWQgc2V0RmFrZUJvbGQo
Ym9vbCBmYWtlQm9sZCkgeyBtX2Zha2VCb2xkID0gZmFrZUJvbGQ7IH0KLSAgICB2b2lkIHNldEZh
a2VJdGFsaWMoYm9vbCBmYWtlSXRhbGljKSB7IG1fZmFrZUl0YWxpYyA9IGZha2VJdGFsaWM7IH0K
LSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0OwotICAg
IEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0g
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZWZh
Y2UgPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOyB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0g
ICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIEhhcmZidXp6RmFj
ZSogaGFyZmJ1enpGYWNlKCkgY29uc3Q7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
Ly8gR2xvYmFsIGZvbnQgcHJlZmVyZW5jZXMuLi4KLQotICAgIHN0YXRpYyB2b2lkIHNldEhpbnRp
bmcoU2tQYWludDo6SGludGluZyk7Ci0gICAgc3RhdGljIHZvaWQgc2V0QW50aUFsaWFzKGJvb2wg
b24pOwotICAgIHN0YXRpYyB2b2lkIHNldFN1YnBpeGVsR2x5cGhzKGJvb2wgb24pOwotCi1wcml2
YXRlOgotICAgIHZvaWQgcXVlcnlTeXN0ZW1Gb3JSZW5kZXJTdHlsZSgpOwotCi0gICAgLy8gRklY
TUU6IENvdWxkIFNrQXV0b1VucmVmIGJlIHVzZWQgaGVyZT8KLSAgICBTa1R5cGVmYWNlKiBtX3R5
cGVmYWNlOwotICAgIENTdHJpbmcgbV9mYW1pbHk7Ci0gICAgZmxvYXQgbV90ZXh0U2l6ZTsKLSAg
ICBtdXRhYmxlIGludCBtX2VtU2l6ZUluRm9udFVuaXRzOwotICAgIGJvb2wgbV9mYWtlQm9sZDsK
LSAgICBib29sIG1fZmFrZUl0YWxpYzsKLSAgICBGb250T3JpZW50YXRpb24gbV9vcmllbnRhdGlv
bjsKLSAgICBUZXh0T3JpZW50YXRpb24gbV90ZXh0T3JpZW50YXRpb247Ci0gICAgRm9udFJlbmRl
clN0eWxlIG1fc3R5bGU7Ci0gICAgbXV0YWJsZSBSZWZQdHI8SGFyZmJ1enpGYWNlPiBtX2hhcmZi
dXp6RmFjZTsKLQotICAgIFNrVHlwZWZhY2UqIGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSBj
b25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFNrVHlwZWZhY2UqPigtMSk7IH0KLX07Ci0K
LX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAgLy8gaWZkZWYgRm9udFBsYXRmb3Jt
RGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9IYXJmYnV6elNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MjFhZjE5NWUzY2JhMDVjZGNjNDdhYmNiMWMzZjgxMzlmYjk3M2M5Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjcy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRh
LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIu
aD4KLQotI2luY2x1ZGUgIlNrRm9udEhvc3QuaCIKLSNpbmNsdWRlICJTa1BhaW50LmgiCi0jaW5j
bHVkZSAiU2tQYXRoLmgiCi0jaW5jbHVkZSAiU2tQb2ludC5oIgotI2luY2x1ZGUgIlNrUmVjdC5o
IgotI2luY2x1ZGUgIlNrVXRpbHMuaCIKLQotZXh0ZXJuICJDIiB7Ci0jaW5jbHVkZSAiaGFyZmJ1
enotc2hhcGVyLmgiCi19Ci0KLS8vIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBjYWxsYmFja3Mg
d2hpY2ggSGFyZmJ1enogcmVxdWlyZXMgYnkgdXNpbmcgU2tpYQotLy8gY2FsbHMuIFNlZSB0aGUg
SGFyZmJ1enogc291cmNlIGZvciByZWZlcmVuY2VzIGFib3V0IHdoYXQgdGhlc2UgY2FsbGJhY2tz
IGRvLgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBIQl9GaXhlZCBTa2lhU2NhbGFy
VG9IYXJmYnV6ekZpeGVkKFNrU2NhbGFyIHZhbHVlKQotewotICAgIC8vIEhCX0ZpeGVkIGlzIGEg
MjYuNiBmaXhlZCBwb2ludCBmb3JtYXQuCi0gICAgcmV0dXJuIHZhbHVlICogNjQ7Ci19Ci0KLXN0
YXRpYyBIQl9Cb29sIHN0cmluZ1RvR2x5cGhzKEhCX0ZvbnQgaGJGb250LCBjb25zdCBIQl9VQ2hh
cjE2KiBjaGFyYWN0ZXJzLCBoYl91aW50MzIgbGVuZ3RoLCBIQl9HbHlwaCogZ2x5cGhzLCBoYl91
aW50MzIqIGdseXBoc1NpemUsIEhCX0Jvb2wgaXNSVEwpCi17Ci0gICAgRm9udFBsYXRmb3JtRGF0
YSogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGhiRm9udC0+dXNl
ckRhdGEpOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0KLSAgICBmb250LT5zZXR1cFBhaW50KCZwYWlu
dCk7Ci0gICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2Rp
bmcpOwotCi0gICAgdW5zaWduZWQgY29kZXBvaW50cyA9IDA7Ci0gICAgZm9yIChoYl91aW50MzIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoIVNrVVRGMTZfSXNIaWdoU3Vy
cm9nYXRlKGNoYXJhY3RlcnNbaV0pKQotICAgICAgICAgICAgY29kZXBvaW50cysrOwotICAgICAg
ICBpZiAoY29kZXBvaW50cyA+ICpnbHlwaHNTaXplKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgaW50IG51bUdseXBocyA9IHBhaW50LnRleHRUb0dseXBocyhjaGFyYWN0ZXJz
LCBsZW5ndGggKiBzaXplb2YodWludDE2X3QpLCByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4o
Z2x5cGhzKSk7Ci0KLSAgICAvLyBIQl9HbHlwaCBpcyAzMi1iaXQsIGJ1dCBTa2lhIG91dHB1dHMg
b25seSAxNi1iaXQgbnVtYmVycy4gU28gb3VyCi0gICAgLy8gfGdseXBoc3wgYXJyYXkgbmVlZHMg
dG8gYmUgY29udmVydGVkLgotICAgIGZvciAoaW50IGkgPSBudW1HbHlwaHMgLSAxOyBpID49IDA7
IC0taSkgewotICAgICAgICB1aW50MTZfdCB2YWx1ZTsKLSAgICAgICAgLy8gV2UgdXNlIGEgbWVt
Y3B5IHRvIGF2b2lkIGJyZWFraW5nIHN0cmljdCBhbGlhc2luZyBydWxlcy4KLSAgICAgICAgbWVt
Y3B5KCZ2YWx1ZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ2x5cGhzKSArIHNpemVvZih1aW50
MTZfdCkgKiBpLCBzaXplb2YodWludDE2X3QpKTsKLSAgICAgICAgZ2x5cGhzW2ldID0gdmFsdWU7
Ci0gICAgfQotCi0gICAgKmdseXBoc1NpemUgPSBudW1HbHlwaHM7Ci0gICAgcmV0dXJuIDE7Ci19
Ci0KLXN0YXRpYyB2b2lkIGdseXBoc1RvQWR2YW5jZXMoSEJfRm9udCBoYkZvbnQsIGNvbnN0IEhC
X0dseXBoKiBnbHlwaHMsIGhiX3VpbnQzMiBudW1HbHlwaHMsIEhCX0ZpeGVkKiBhZHZhbmNlcywg
aW50IGZsYWdzKQotewotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9j
YXN0PEZvbnRQbGF0Zm9ybURhdGEqPihoYkZvbnQtPnVzZXJEYXRhKTsKLSAgICBTa1BhaW50IHBh
aW50OwotCi0gICAgZm9udC0+c2V0dXBQYWludCgmcGFpbnQpOwotICAgIHBhaW50LnNldFRleHRF
bmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotCi0gICAgT3duQXJyYXlQ
dHI8dWludDE2X3Q+IGdseXBoczE2ID0gYWRvcHRBcnJheVB0cihuZXcgdWludDE2X3RbbnVtR2x5
cGhzXSk7Ci0gICAgaWYgKCFnbHlwaHMxNi5nZXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkKLSAgICAgICAgZ2x5cGhzMTZb
aV0gPSBnbHlwaHNbaV07Ci0gICAgcGFpbnQuZ2V0VGV4dFdpZHRocyhnbHlwaHMxNi5nZXQoKSwg
bnVtR2x5cGhzICogc2l6ZW9mKHVpbnQxNl90KSwgcmVpbnRlcnByZXRfY2FzdDxTa1NjYWxhcio+
KGFkdmFuY2VzKSk7Ci0KLSAgICAvLyBUaGUgfGFkdmFuY2VzfCB2YWx1ZXMgd2hpY2ggU2tpYSBv
dXRwdXRzIGFyZSBTa1NjYWxhcnMsIHdoaWNoIGFyZSBmbG9hdHMKLSAgICAvLyBpbiBDaHJvbWl1
bS4gSG93ZXZlciwgSGFyZmJ1enogd2FudHMgdGhlbSBpbiAyNi42IGZpeGVkIHBvaW50IGZvcm1h
dC4KLSAgICAvLyBUaGVzZSB0d28gZm9ybWF0cyBhcmUgYm90aCAzMi1iaXRzIGxvbmcuCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgIGZsb2F0
IHZhbHVlOwotICAgICAgICAvLyBXZSB1c2UgYSBtZW1jcHkgdG8gYXZvaWQgYnJlYWtpbmcgc3Ry
aWN0IGFsaWFzaW5nIHJ1bGVzLgotICAgICAgICBtZW1jcHkoJnZhbHVlLCByZWludGVycHJldF9j
YXN0PGNoYXIqPihhZHZhbmNlcykgKyBzaXplb2YoZmxvYXQpICogaSwgc2l6ZW9mKGZsb2F0KSk7
Ci0gICAgICAgIGFkdmFuY2VzW2ldID0gU2tpYVNjYWxhclRvSGFyZmJ1enpGaXhlZCh2YWx1ZSk7
Ci0gICAgfQotfQotCi1zdGF0aWMgSEJfQm9vbCBjYW5SZW5kZXIoSEJfRm9udCBoYkZvbnQsIGNv
bnN0IEhCX1VDaGFyMTYqIGNoYXJhY3RlcnMsIGhiX3VpbnQzMiBsZW5ndGgpCi17Ci0gICAgRm9u
dFBsYXRmb3JtRGF0YSogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+
KGhiRm9udC0+dXNlckRhdGEpOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0KLSAgICBmb250LT5zZXR1
cFBhaW50KCZwYWludCk7Ci0gICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtVVEYx
Nl9UZXh0RW5jb2RpbmcpOwotCi0gICAgT3duQXJyYXlQdHI8dWludDE2X3Q+IGdseXBoczE2ID0g
YWRvcHRBcnJheVB0cihuZXcgdWludDE2X3RbbGVuZ3RoXSk7Ci0gICAgaWYgKCFnbHlwaHMxNi5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaW50IG51bUdseXBocyA9IHBhaW50LnRleHRU
b0dseXBocyhjaGFyYWN0ZXJzLCBsZW5ndGggKiBzaXplb2YodWludDE2X3QpLCBnbHlwaHMxNi5n
ZXQoKSk7Ci0KLSAgICBib29sIGNhblJlbmRlciA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICBpZiAoIWdseXBoczE2W2ldKSB7Ci0gICAg
ICAgICAgICBjYW5SZW5kZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIGNhblJlbmRlcjsKLX0KLQotc3RhdGljIEhCX0Vycm9yIGdl
dE91dGxpbmVQb2ludChIQl9Gb250IGhiRm9udCwgSEJfR2x5cGggZ2x5cGgsIGludCBmbGFncywg
aGJfdWludDMyIHBvaW50LCBIQl9GaXhlZCogeFBvcywgSEJfRml4ZWQqIHlQb3MsIGhiX3VpbnQz
MiogcmVzdWx0aW5nTnVtUG9pbnRzKQotewotICAgIC8vIFdlIGNhbm5vdCBwcm92aWRlIHRoZSBy
aWdodCBwb3NpdGlvbiBvZiBvdXRsaW5lIHBvaW50cyBmcm9tIHBvaW50IGluZGV4LgotICAgIC8v
IEp1c3QgcmV0dXJuIEhCX0Vycl9PayB3aXRoIHJlc3VsdGluZ051bVBvaW50cyA9IDAgc28gdGhh
dCBoYXJmYnV6egotICAgIC8vIGZhbGxzIGJhY2sgb24gdXNpbmcgZGVzaWduIGNvb3JkaW5hdGUg
dmFsdWUgcGFpci4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYwMDc5IGZvciBtb3JlIGRldGFpbHMuCi0gICAgKnJlc3VsdGluZ051bVBvaW50cyA9
IDA7Ci0gICAgcmV0dXJuIEhCX0Vycl9PazsKLX0KLQotc3RhdGljIHZvaWQgZ2V0R2x5cGhNZXRy
aWNzKEhCX0ZvbnQgaGJGb250LCBIQl9HbHlwaCBnbHlwaCwgSEJfR2x5cGhNZXRyaWNzKiBtZXRy
aWNzKQotewotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGEqPihoYkZvbnQtPnVzZXJEYXRhKTsKLSAgICBTa1BhaW50IHBhaW50Owot
Ci0gICAgZm9udC0+c2V0dXBQYWludCgmcGFpbnQpOwotICAgIHBhaW50LnNldFRleHRFbmNvZGlu
ZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotICAgIHVpbnQxNl90IGdseXBoMTYg
PSBnbHlwaDsKLSAgICBTa1NjYWxhciB3aWR0aDsKLSAgICBTa1JlY3QgYm91bmRzOwotICAgIHBh
aW50LmdldFRleHRXaWR0aHMoJmdseXBoMTYsIHNpemVvZihnbHlwaDE2KSwgJndpZHRoLCAmYm91
bmRzKTsKLQotICAgIG1ldHJpY3MtPnggPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVkKGJvdW5k
cy5mTGVmdCk7Ci0gICAgbWV0cmljcy0+eSA9IFNraWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQoYm91
bmRzLmZUb3ApOwotICAgIG1ldHJpY3MtPndpZHRoID0gU2tpYVNjYWxhclRvSGFyZmJ1enpGaXhl
ZChib3VuZHMud2lkdGgoKSk7Ci0gICAgbWV0cmljcy0+aGVpZ2h0ID0gU2tpYVNjYWxhclRvSGFy
ZmJ1enpGaXhlZChib3VuZHMuaGVpZ2h0KCkpOwotCi0gICAgbWV0cmljcy0+eE9mZnNldCA9IFNr
aWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQod2lkdGgpOwotICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5
IGdldCB0aGUgfHl8IGNvcnJlY3QgYmVjYXVzZSBTa2lhIGRvZXNuJ3QgZXhwb3J0Ci0gICAgLy8g
dGhlIHZlcnRpY2FsIGFkdmFuY2UuIEhvd2V2ZXIsIG5vciB3ZSBkbyBldmVyIHJlbmRlciB2ZXJ0
aWNhbCB0ZXh0IGF0Ci0gICAgLy8gdGhlIG1vbWVudCBzbyBpdCdzIHVuaW1wb3J0YW50LgotICAg
IG1ldHJpY3MtPnlPZmZzZXQgPSAwOwotfQotCi1zdGF0aWMgSEJfRml4ZWQgZ2V0Rm9udE1ldHJp
YyhIQl9Gb250IGhiRm9udCwgSEJfRm9udE1ldHJpYyBtZXRyaWMpCi17Ci0gICAgRm9udFBsYXRm
b3JtRGF0YSogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGhiRm9u
dC0+dXNlckRhdGEpOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0KLSAgICBmb250LT5zZXR1cFBhaW50
KCZwYWludCk7Ci0gICAgU2tQYWludDo6Rm9udE1ldHJpY3Mgc2tpYU1ldHJpY3M7Ci0gICAgcGFp
bnQuZ2V0Rm9udE1ldHJpY3MoJnNraWFNZXRyaWNzKTsKLQotICAgIHN3aXRjaCAobWV0cmljKSB7
Ci0gICAgY2FzZSBIQl9Gb250QXNjZW50OgotICAgICAgICByZXR1cm4gU2tpYVNjYWxhclRvSGFy
ZmJ1enpGaXhlZCgtc2tpYU1ldHJpY3MuZkFzY2VudCk7Ci0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9y
dCBnZXR0aW5nIHRoZSByZXN0IG9mIHRoZSBtZXRyaWNzIGFuZCBIYXJmYnV6eiBkb2Vzbid0IHNl
ZW0gdG8gbmVlZCB0aGVtLgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LX0KLQotSEJfRm9udENsYXNzIGhhcmZidXp6U2tpYUNsYXNzID0gewotICAgIHN0cmluZ1RvR2x5
cGhzLAotICAgIGdseXBoc1RvQWR2YW5jZXMsCi0gICAgY2FuUmVuZGVyLAotICAgIGdldE91dGxp
bmVQb2ludCwKLSAgICBnZXRHbHlwaE1ldHJpY3MsCi0gICAgZ2V0Rm9udE1ldHJpYywKLX07Ci0K
LUhCX0ZvbnRfKiBhbGxvY0hhcmZidXp6Rm9udCgpCi17Ci0gICAgSEJfRm9udF8qIGZvbnQgPSBy
ZWludGVycHJldF9jYXN0PEhCX0ZvbnRfKj4oZmFzdE1hbGxvYyhzaXplb2YoSEJfRm9udF8pKSk7
Ci0gICAgbWVtc2V0KGZvbnQsIDAsIHNpemVvZihIQl9Gb250XykpOwotICAgIGZvbnQtPmtsYXNz
ID0gJmhhcmZidXp6U2tpYUNsYXNzOwotICAgIGZvbnQtPnVzZXJEYXRhID0gMDsKLQotICAgIHJl
dHVybiBmb250OwotfQotCi1IQl9FcnJvciBoYXJmYnV6elNraWFHZXRUYWJsZSh2b2lkKiB2b2lk
ZmFjZSwgY29uc3QgSEJfVGFnIHRhZywgSEJfQnl0ZSogYnVmZmVyLCBIQl9VSW50KiBsZW4pCi17
Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRm
b3JtRGF0YSo+KHZvaWRmYWNlKTsKLQotICAgIGNvbnN0IHNpemVfdCB0YWJsZVNpemUgPSBTa0Zv
bnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udC0+dW5pcXVlSUQoKSwgdGFnKTsKLSAgICBpZiAoIXRh
YmxlU2l6ZSkKLSAgICAgICAgcmV0dXJuIEhCX0Vycl9JbnZhbGlkX0FyZ3VtZW50OwotICAgIC8v
IElmIEhhcmZidXp6IHNwZWNpZmllZCBhIE5VTEwgYnVmZmVyIHRoZW4gaXQncyBhc2tpbmcgZm9y
IHRoZSBzaXplIG9mIHRoZSB0YWJsZS4KLSAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICAqbGVu
ID0gdGFibGVTaXplOwotICAgICAgICByZXR1cm4gSEJfRXJyX09rOwotICAgIH0KLQotICAgIGlm
ICgqbGVuIDwgdGFibGVTaXplKQotICAgICAgICByZXR1cm4gSEJfRXJyX0ludmFsaWRfQXJndW1l
bnQ7Ci0gICAgU2tGb250SG9zdDo6R2V0VGFibGVEYXRhKGZvbnQtPnVuaXF1ZUlEKCksIHRhZywg
MCwgdGFibGVTaXplLCBidWZmZXIpOwotICAgIHJldHVybiBIQl9FcnJfT2s7Ci19Ci0KLXR5cGVk
ZWYgcGFpcjxIQl9GYWNlUmVjXyosIHVuc2lnbmVkPiBGYWNlQ2FjaGVFbnRyeTsKLXR5cGVkZWYg
SGFzaE1hcDx1bnNpZ25lZCBpbnQsIEZhY2VDYWNoZUVudHJ5LCBXVEY6OkludEhhc2g8dW5zaWdu
ZWQgaW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZCBpbnQ+
ID4gSGFyZmJ1enpGYWNlQ2FjaGU7Ci1zdGF0aWMgSGFyZmJ1enpGYWNlQ2FjaGUqIGdIYXJmYnV6
ekZhY2VDYWNoZSA9IDA7Ci0KLXN0YXRpYyBIQl9GYWNlUmVjXyogZ2V0Q2FjaGVkSGFyZmJ1enpG
YWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKLXsKLSAgICBpZiAoIWdIYXJmYnV6
ekZhY2VDYWNoZSkKLSAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlID0gbmV3IEhhcmZidXp6RmFj
ZUNhY2hlOwotICAgIFNrRm9udElEIHVuaXF1ZUlEID0gcGxhdGZvcm1EYXRhLT51bmlxdWVJRCgp
OwotICAgIEhhcmZidXp6RmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBnSGFyZmJ1enpGYWNl
Q2FjaGUtPmZpbmQodW5pcXVlSUQpOwotICAgIGlmIChyZXN1bHQgPT0gZ0hhcmZidXp6RmFjZUNh
Y2hlLT5lbmQoKSkgewotICAgICAgICBGYWNlQ2FjaGVFbnRyeSBlbnRyeShIQl9OZXdGYWNlKHBs
YXRmb3JtRGF0YSwgaGFyZmJ1enpTa2lhR2V0VGFibGUpLCAxKTsKLSAgICAgICAgZ0hhcmZidXp6
RmFjZUNhY2hlLT5zZXQodW5pcXVlSUQsIGVudHJ5KTsKLSAgICAgICAgcmV0dXJuIGVudHJ5LmZp
cnN0OwotICAgIH0KLSAgICArKyhyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIHJl
dHVybiByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdDsKLX0KLQotc3RhdGljIHZvaWQgcmVsZWFz
ZUNhY2hlZEhhcmZidXp6RmFjZShTa0ZvbnRJRCB1bmlxdWVJRCkKLXsKLSAgICBIYXJmYnV6ekZh
Y2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gZ0hhcmZidXp6RmFjZUNhY2hlLT5maW5kKHVuaXF1
ZUlEKTsKLSAgICBBU1NFUlQocmVzdWx0ICE9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZW5kKCkpOwot
ICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1
bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vjb25k
LnNlY29uZCkpIHsKLSAgICAgICAgSEJfRnJlZUZhY2UocmVzdWx0LmdldCgpLT5zZWNvbmQuZmly
c3QpOwotICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnJlbW92ZSh1bmlxdWVJRCk7Ci0gICAg
fQotfQotCi1IYXJmYnV6ekZhY2U6OkhhcmZidXp6RmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0
Zm9ybURhdGEpCi0gICAgOiBtX3VuaXF1ZUlEKHBsYXRmb3JtRGF0YS0+dW5pcXVlSUQoKSkKLXsK
LSAgICBtX2hhcmZidXp6RmFjZSA9IGdldENhY2hlZEhhcmZidXp6RmFjZShwbGF0Zm9ybURhdGEp
OwotfQotCi1IYXJmYnV6ekZhY2U6On5IYXJmYnV6ekZhY2UoKQotewotICAgIHJlbGVhc2VDYWNo
ZWRIYXJmYnV6ekZhY2UobV91bmlxdWVJRCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9I
YXJmYnV6elNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0hhcmZidXp6U2tpYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzQzY2MzZjFl
ZTNiYWIzMzZmYmYzMTNkYmE1MzE0ODFkYzUwOWVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0hhcmZidXp6U2tpYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEhhcmZidXp6U2tpYV9oCi0jZGVmaW5lIEhhcmZidXp6U2tpYV9oCi0KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotc3RydWN0IEhCX0Zh
Y2VSZWNfOwotc3RydWN0IEhCX0ZvbnRfOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEZvbnRQbGF0Zm9ybURhdGE7Ci0KLWNsYXNzIEhhcmZidXp6RmFjZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEhhcmZidXp6RmFjZT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhhcmZi
dXp6RmFjZT4gY3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFyZmJ1enpGYWNlKHBsYXRmb3JtRGF0YSkpOwot
ICAgIH0KLQotICAgIH5IYXJmYnV6ekZhY2UoKTsKLQotICAgIEhCX0ZhY2VSZWNfKiBmYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXJmYnV6ekZhY2U7IH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSopOwotCi0gICAgdWludDMyX3QgbV91bmlx
dWVJRDsKLSAgICBIQl9GYWNlUmVjXyogbV9oYXJmYnV6ekZhY2U7Ci19OwotCi0vLyBGSVhNRTog
UmVtb3ZlIHRoaXMgYXN5bW1ldHJpYyBhbGxvYy9mcmVlIGZ1bmN0aW9uLgotLy8gV2UnbGwgcmVt
b3ZlIHRoaXMgb25jZSB3ZSBtb3ZlIHRvIHRoZSBuZXcgSGFyZmJ1enogQVBJLgotSEJfRm9udF8q
IGFsbG9jSGFyZmJ1enpGb250KCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2ltcGxlRm9udERhdGFMaW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDM0NWNiNjExY2U0ZTNlNmFkMDM1ODI0Mzk1NTY1NGY0NWU3NzAzMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnREZXNj
cmlwdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJWRE1YUGFyc2VyLmgi
Ci0KLSNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCi0jaW5jbHVkZSAiU2tQYWludC5oIgotI2luY2x1
ZGUgIlNrVGltZS5oIgotI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKLSNpbmNsdWRlICJTa1R5cGVz
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gU21hbGxjYXBzIHZlcnNpb25zIG9mIGZv
bnRzIGFyZSA3MCUgdGhlIHNpemUgb2YgdGhlIG5vcm1hbCBmb250Lgotc3RhdGljIGNvbnN0IGZs
b2F0IHNtYWxsQ2Fwc0ZyYWN0aW9uID0gMC43ZjsKLXN0YXRpYyBjb25zdCBmbG9hdCBlbXBoYXNp
c01hcmtGcmFjdGlvbiA9IC41OwotLy8gVGhpcyBpcyB0aGUgbGFyZ2VzdCBWRE1YIHRhYmxlIHdo
aWNoIHdlJ2xsIHRyeSB0byBsb2FkIGFuZCBwYXJzZS4KLXN0YXRpYyBjb25zdCBzaXplX3QgbWF4
VkRNWFRhYmxlU2l6ZSA9IDEwMjQgKiAxMDI0OyAgLy8gMSBNQgotCi12b2lkIFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGlmICghbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7
Ci0gICAgICAgIG1fZm9udE1ldHJpY3MucmVzZXQoKTsKLSAgICAgICAgbV9hdmdDaGFyV2lkdGgg
PSAwOwotICAgICAgICBtX21heENoYXJXaWR0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBTa1BhaW50IHBhaW50OwotICAgIFNrUGFpbnQ6OkZvbnRNZXRyaWNzIG1ldHJpY3M7
Ci0KLSAgICBtX3BsYXRmb3JtRGF0YS5zZXR1cFBhaW50KCZwYWludCk7Ci0gICAgcGFpbnQuZ2V0
Rm9udE1ldHJpY3MoJm1ldHJpY3MpOwotICAgIGNvbnN0IFNrRm9udElEIGZvbnRJRCA9IG1fcGxh
dGZvcm1EYXRhLnVuaXF1ZUlEKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgdmRteFRh
ZyA9IFNrU2V0Rm91ckJ5dGVUYWcoJ1YnLCAnRCcsICdNJywgJ1gnKTsKLSAgICBpbnQgcGl4ZWxT
aXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMC41OwotICAgIGludCB2ZG14QXNjZW50LCB2
ZG14RGVzY2VudDsKLSAgICBib29sIGlzVkRNWFZhbGlkID0gZmFsc2U7Ci0KLSAgICBzaXplX3Qg
dmRteFNpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udElELCB2ZG14VGFnKTsKLSAg
ICBpZiAodmRteFNpemUgJiYgdmRteFNpemUgPCBtYXhWRE1YVGFibGVTaXplKSB7Ci0gICAgICAg
IHVpbnQ4X3QqIHZkbXhUYWJsZSA9ICh1aW50OF90KikgZmFzdE1hbGxvYyh2ZG14U2l6ZSk7Ci0g
ICAgICAgIGlmICh2ZG14VGFibGUKLSAgICAgICAgICAgICYmIFNrRm9udEhvc3Q6OkdldFRhYmxl
RGF0YShmb250SUQsIHZkbXhUYWcsIDAsIHZkbXhTaXplLCB2ZG14VGFibGUpID09IHZkbXhTaXpl
Ci0gICAgICAgICAgICAmJiBwYXJzZVZETVgoJnZkbXhBc2NlbnQsICZ2ZG14RGVzY2VudCwgdmRt
eFRhYmxlLCB2ZG14U2l6ZSwgcGl4ZWxTaXplKSkKLSAgICAgICAgICAgIGlzVkRNWFZhbGlkID0g
dHJ1ZTsKLSAgICAgICAgZmFzdEZyZWUodmRteFRhYmxlKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBh
c2NlbnQ7Ci0gICAgZmxvYXQgZGVzY2VudDsKLQotICAgIC8vIEJld2FyZSB0aG9zZSB3aG8gc3Rl
cCBoZXJlOiBUaGlzIGNvZGUgaXMgZGVzaWduZWQgdG8gbWF0Y2ggV2luMzIgZm9udAotICAgIC8v
IG1ldHJpY3MgKmV4YWN0bHkqLgotICAgIGlmIChpc1ZETVhWYWxpZCkgewotICAgICAgICBhc2Nl
bnQgPSB2ZG14QXNjZW50OwotICAgICAgICBkZXNjZW50ID0gLXZkbXhEZXNjZW50OwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFNrU2NhbGFyIGhlaWdodCA9IC1tZXRyaWNzLmZBc2NlbnQgKyBtZXRy
aWNzLmZEZXNjZW50ICsgbWV0cmljcy5mTGVhZGluZzsKLSAgICAgICAgYXNjZW50ID0gU2tTY2Fs
YXJSb3VuZCgtbWV0cmljcy5mQXNjZW50KTsKLSAgICAgICAgZGVzY2VudCA9IFNrU2NhbGFyUm91
bmQoaGVpZ2h0KSAtIGFzY2VudDsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2Vu
dChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKLQotICAg
IGZsb2F0IHhIZWlnaHQ7Ci0gICAgaWYgKG1ldHJpY3MuZlhIZWlnaHQpCi0gICAgICAgIHhIZWln
aHQgPSBtZXRyaWNzLmZYSGVpZ2h0OwotICAgIGVsc2UgewotICAgICAgICAvLyBoYWNrIHRha2Vu
IGZyb20gdGhlIFdpbmRvd3MgcG9ydAotICAgICAgICB4SGVpZ2h0ID0gYXNjZW50ICogMC41NmY7
Ci0gICAgfQotCi0gICAgZmxvYXQgbGluZUdhcCA9IFNrU2NhbGFyVG9GbG9hdChtZXRyaWNzLmZM
ZWFkaW5nKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAgbV9m
b250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGlu
ZVNwYWNpbmcobHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSArIGxyb3VuZGYobGlu
ZUdhcCkpOwotCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkgewotICAgICAgICBzdGF0aWMgY29u
c3QgdWludDMyX3QgdmhlYVRhZyA9IFNrU2V0Rm91ckJ5dGVUYWcoJ3YnLCAnaCcsICdlJywgJ2En
KTsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHZvcmdUYWcgPSBTa1NldEZvdXJCeXRl
VGFnKCdWJywgJ08nLCAnUicsICdHJyk7Ci0gICAgICAgIHNpemVfdCB2aGVhU2l6ZSA9IFNrRm9u
dEhvc3Q6OkdldFRhYmxlU2l6ZShmb250SUQsIHZoZWFUYWcpOwotICAgICAgICBzaXplX3Qgdm9y
Z1NpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udElELCB2b3JnVGFnKTsKLSAgICAg
ICAgaWYgKCh2aGVhU2l6ZSA+IDApIHx8ICh2b3JnU2l6ZSA+IDApKQotICAgICAgICAgICAgbV9o
YXNWZXJ0aWNhbEdseXBocyA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gSW4gV2ViS2l0L1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwLCBtX3NwYWNlV2lkdGggaXMK
LSAgICAvLyBjYWxjdWxhdGVkIGZvciB1cywgYnV0IHdlIG5lZWQgdG8gY2FsY3VsYXRlIG1fbWF4
Q2hhcldpZHRoIGFuZAotICAgIC8vIG1fYXZnQ2hhcldpZHRoIGluIG9yZGVyIGZvciB0ZXh0IGVu
dHJ5IHdpZGdldHMgdG8gYmUgc2l6ZWQgY29ycmVjdGx5LgotCi0gICAgU2tTY2FsYXIgeFJhbmdl
ID0gbWV0cmljcy5mWE1heCAtIG1ldHJpY3MuZlhNaW47Ci0gICAgbV9tYXhDaGFyV2lkdGggPSBT
a1NjYWxhclJvdW5kKHhSYW5nZSAqIFNrU2NhbGFyUm91bmQobV9wbGF0Zm9ybURhdGEuc2l6ZSgp
KSk7Ci0KLSAgICBpZiAobWV0cmljcy5mQXZnQ2hhcldpZHRoKQotICAgICAgICBtX2F2Z0NoYXJX
aWR0aCA9IFNrU2NhbGFyUm91bmQobWV0cmljcy5mQXZnQ2hhcldpZHRoKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgbV9hdmdDaGFyV2lkdGggPSB4SGVpZ2h0OwotCi0gICAgICAgIEdseXBoUGFnZSog
Z2x5cGhQYWdlWmVybyA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodGhpcywgMCkt
PnBhZ2UoKTsKLQotICAgICAgICBpZiAoZ2x5cGhQYWdlWmVybykgewotICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IFVDaGFyMzIgeF9jaGFyID0gJ3gnOwotICAgICAgICAgICAgY29uc3QgR2x5cGgg
eEdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHhfY2hhcikuZ2x5
cGg7Ci0KLSAgICAgICAgICAgIGlmICh4R2x5cGgpCi0gICAgICAgICAgICAgICAgbV9hdmdDaGFy
V2lkdGggPSB3aWR0aEZvckdseXBoKHhHbHlwaCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17Ci0gICAgLy8gY2hh
cndpZHRocyBhcmUgc2V0IGluIHBsYXRmb3JtSW5pdC4KLX0KLQotdm9pZCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLX0KLQotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4g
U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKLXsKLSAgICBjb25z
dCBmbG9hdCBzY2FsZWRTaXplID0gbHJvdW5kZihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXpl
KCkgKiBzY2FsZUZhY3Rvcik7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0
YShGb250UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRTaXplKSwgaXNDdXN0b21G
b250KCksIGZhbHNlKSk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21h
bGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYg
KCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFs
bENhcHNGcmFjdGlvbik7Ci0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fw
cy5nZXQoKTsKLX0KLQotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01h
cmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QK
LXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
LT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGVt
cGhhc2lzTWFya0ZyYWN0aW9uKTsKLQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1w
aGFzaXNNYXJrLmdldCgpOwotfQotCi1ib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJh
Y3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAg
U2tQYWludCBwYWludDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4QnVmZmVyQ291bnQg
PSA2NDsKLSAgICB1aW50MTZfdCBnbHlwaHNbbWF4QnVmZmVyQ291bnRdOwotCi0gICAgbV9wbGF0
Zm9ybURhdGEuc2V0dXBQYWludCgmcGFpbnQpOwotICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhT
a1BhaW50OjprVVRGMTZfVGV4dEVuY29kaW5nKTsKLQotICAgIHdoaWxlIChsZW5ndGggPiAwKSB7
Ci0gICAgICAgIGludCBuID0gU2tNaW4zMihsZW5ndGgsIFNLX0FSUkFZX0NPVU5UKGdseXBocykp
OwotCi0gICAgICAgIC8vIHRleHRUb0dseXBocyB0YWtlcyBhIGJ5dGUgY291bnQgc28gd2UgZG91
YmxlIHRoZSBjaGFyYWN0ZXIgY291bnQuCi0gICAgICAgIGludCBjb3VudCA9IHBhaW50LnRleHRU
b0dseXBocyhjaGFyYWN0ZXJzLCBuICogMiwgZ2x5cGhzKTsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoMCA9PSBnbHlwaHNbaV0pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAvLyBtaXNzaW5nIGdseXBoCi0gICAg
ICAgIH0KLQotICAgICAgICBjaGFyYWN0ZXJzICs9IG47Ci0gICAgICAgIGxlbmd0aCAtPSBuOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRl
cm1pbmVQaXRjaCgpCi17Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IHBsYXRmb3JtRGF0YSgp
LmlzRml4ZWRQaXRjaCgpOwotfQotCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Qm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwot
fQotICAgIAotZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlw
aCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBTa0FTU0VSVChzaXplb2YoZ2x5cGgpID09IDIpOyAgIC8vIGNv
bXBpbGUtdGltZSBhc3NlcnQKLQotICAgIFNrUGFpbnQgcGFpbnQ7Ci0KLSAgICBtX3BsYXRmb3Jt
RGF0YS5zZXR1cFBhaW50KCZwYWludCk7Ci0KLSAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQ
YWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKLSAgICBTa1NjYWxhciB3aWR0aCA9IHBhaW50
Lm1lYXN1cmVUZXh0KCZnbHlwaCwgMik7Ci0KLSAgICAvLyBUaG91Z2ggV2ViS2l0IHN1cHBvcnRz
IG5vbi1pbnRlZ3JhbCBhZHZhbmNlcywgU2tpYSBvbmx5IHN1cHBvcnRzIHRoZW0KLSAgICAvLyBm
b3IgInN1YnBpeGVsIiAoZGlzdGluY3QgZnJvbSBMQ0Qgc3VicGl4ZWwgYW50aWFsaWFzaW5nKSB0
ZXh0LCB3aGljaAotICAgIC8vIHdlIGRvbid0IHVzZS4KLSAgICByZXR1cm4gcm91bmQoU2tTY2Fs
YXJUb0Zsb2F0KHdpZHRoKSk7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnVwZGF0ZUdseXBo
V2l0aFZhcmlhdGlvblNlbGVjdG9yKFVDaGFyMzIgY2hhcmFjdGVyLCBVQ2hhcjMyIHNlbGVjdG9y
LCBHbHlwaCYgZ2x5cGgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQot
fSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29u
dHJvbGxlckhhcmZCdXp6LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTM2MzY1YjQwOWJiMzVmOTA0YmE1MmU1
NDE1MjE2Yzk1ZjUyMzg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouY3BwCkBA
IC0wLDAgKzEsNTcxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbXBsZXhUZXh0
Q29udHJvbGxlckhhcmZCdXp6LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCisj
aW5jbHVkZSAiVGV4dFJ1bi5oIgorCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJoYXJmYnV6ei11
bmljb2RlLmgiCit9CisKKyNpbmNsdWRlIDx1bmljb2RlL25vcm1senIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBIYXJmYnV6eiB1c2VzIDI2LjYgZml4ZWQgcG9pbnQgdmFsdWVzIGZv
ciBwaXhlbCBvZmZzZXRzLiBIb3dldmVyLCB3ZSBkb24ndAorLy8gaGFuZGxlIHN1YnBpeGVsIHBv
c2l0aW9uaW5nIHNvIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0cnVuY2F0ZSBIYXJmYnV6egor
Ly8gdmFsdWVzIHRvIGEgbnVtYmVyIG9mIHBpeGVscy4KK3N0YXRpYyBpbnQgdHJ1bmNhdGVGaXhl
ZFBvaW50VG9JbnRlZ2VyKEhCX0ZpeGVkIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSA+PiA2
OworfQorCitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25z
dCBUZXh0UnVuJiBydW4sIGludCBzdGFydGluZ1gsIGludCBzdGFydGluZ1ksIHVuc2lnbmVkIHdv
cmRTcGFjaW5nLCB1bnNpZ25lZCBsZXR0ZXJTcGFjaW5nLCB1bnNpZ25lZCBwYWRkaW5nLCBjb25z
dCBGb250KiBmb250KQorICAgIDogbV9mb250KGZvbnQpCisgICAgLCBtX3J1bihnZXROb3JtYWxp
emVkVGV4dFJ1bihydW4sIG1fbm9ybWFsaXplZFJ1biwgbV9ub3JtYWxpemVkQnVmZmVyKSkKK3sK
KyAgICAvLyBEbyBub3QgdXNlIHxydW58IGluc2lkZSB0aGlzIGNvbnN0cnVjdG9yLiBVc2UgfG1f
cnVufCBpbnN0ZWFkLgorCisgICAgbWVtc2V0KCZtX2l0ZW0sIDAsIHNpemVvZihtX2l0ZW0pKTsK
KyAgICAvLyBXZSBjYW5ub3Qga25vdywgYWhlYWQgb2YgdGltZSwgaG93IG1hbnkgZ2x5cGhzIGEg
Z2l2ZW4gc2NyaXB0IHJ1bgorICAgIC8vIHdpbGwgcHJvZHVjZS4gV2UgdGFrZSBhIGd1ZXNzIHRo
YXQgc2NyaXB0IHJ1bnMgd2lsbCBub3QgcHJvZHVjZSBtb3JlCisgICAgLy8gdGhhbiB0d2ljZSBh
cyBtYW55IGdseXBocyBhcyB0aGVyZSBhcmUgY29kZSBwb2ludHMgcGx1cyBhIGJpdCBvZgorICAg
IC8vIHBhZGRpbmcgYW5kIGZhbGxiYWNrIGlmIHdlIGZpbmQgdGhhdCB3ZSBhcmUgd3JvbmcuCisg
ICAgY3JlYXRlR2x5cGhBcnJheXMoKG1fcnVuLmxlbmd0aCgpICsgMikgKiAyKTsKKworICAgIG1f
aXRlbS5sb2dfY2x1c3RlcnMgPSBuZXcgdW5zaWduZWQgc2hvcnRbbV9ydW4ubGVuZ3RoKCldOwor
CisgICAgbV9pdGVtLmZhY2UgPSAwOworICAgIG1faXRlbS5mb250ID0gYWxsb2NIYXJmYnV6ekZv
bnQoKTsKKworICAgIG1faXRlbS5pdGVtLmJpZGlMZXZlbCA9IG1fcnVuLnJ0bCgpOworCisgICAg
bV9pdGVtLnN0cmluZyA9IG1fcnVuLmNoYXJhY3RlcnMoKTsKKyAgICBtX2l0ZW0uc3RyaW5nTGVu
Z3RoID0gbV9ydW4ubGVuZ3RoKCk7CisKKyAgICByZXNldChzdGFydGluZ1gpOworICAgIG1fc3Rh
cnRpbmdZID0gc3RhcnRpbmdZOworCisgICAgc2V0V29yZFNwYWNpbmdBZGp1c3RtZW50KHdvcmRT
cGFjaW5nKTsKKyAgICBzZXRMZXR0ZXJTcGFjaW5nQWRqdXN0bWVudChsZXR0ZXJTcGFjaW5nKTsK
KyAgICBzZXRQYWRkaW5nKHBhZGRpbmcpOworfQorCitDb21wbGV4VGV4dENvbnRyb2xsZXI6On5D
b21wbGV4VGV4dENvbnRyb2xsZXIoKQoreworICAgIGZhc3RGcmVlKG1faXRlbS5mb250KTsKKyAg
ICBkZWxldGVHbHlwaEFycmF5cygpOworICAgIGRlbGV0ZVtdIG1faXRlbS5sb2dfY2x1c3RlcnM7
Cit9CisKK2Jvb2wgQ29tcGxleFRleHRDb250cm9sbGVyOjppc1dvcmRCcmVhayh1bnNpZ25lZCBp
bmRleCkKK3sKKyAgICByZXR1cm4gaW5kZXggJiYgaXNDb2RlcG9pbnRTcGFjZShtX2l0ZW0uc3Ry
aW5nW2luZGV4XSkgJiYgIWlzQ29kZXBvaW50U3BhY2UobV9pdGVtLnN0cmluZ1tpbmRleCAtIDFd
KTsKK30KKworaW50IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6ZGV0ZXJtaW5lV29yZEJyZWFrU3Bh
Y2luZyh1bnNpZ25lZCBsb2dDbHVzdGVyc0luZGV4KQoreworICAgIGludCB3b3JkQnJlYWtTcGFj
aW5nID0gMDsKKyAgICAvLyBUaGUgZmlyc3QgaGFsZiBvZiB0aGUgY29uanVuY3Rpb24gd29ya3Mg
YXJvdW5kIHRoZSBjYXNlIHdoZXJlCisgICAgLy8gb3V0cHV0IGdseXBocyBhcmVuJ3QgYXNzb2Np
YXRlZCB3aXRoIGFueSBjb2RlcG9pbnRzIGJ5IHRoZQorICAgIC8vIGNsdXN0ZXJzIGxvZy4KKyAg
ICBpZiAobG9nQ2x1c3RlcnNJbmRleCA8IG1faXRlbS5pdGVtLmxlbmd0aAorICAgICAgICAmJiBp
c1dvcmRCcmVhayhtX2l0ZW0uaXRlbS5wb3MgKyBsb2dDbHVzdGVyc0luZGV4KSkgeworICAgICAg
ICB3b3JkQnJlYWtTcGFjaW5nID0gbV93b3JkU3BhY2luZ0FkanVzdG1lbnQ7CisKKyAgICAgICAg
aWYgKG1fcGFkZGluZyA+IDApIHsKKyAgICAgICAgICAgIGludCB0b1BhZCA9IHJvdW5kZihtX3Bh
ZFBlcldvcmRCcmVhayArIG1fcGFkRXJyb3IpOworICAgICAgICAgICAgbV9wYWRFcnJvciArPSBt
X3BhZFBlcldvcmRCcmVhayAtIHRvUGFkOworCisgICAgICAgICAgICBpZiAobV9wYWRkaW5nIDwg
dG9QYWQpCisgICAgICAgICAgICAgICAgdG9QYWQgPSBtX3BhZGRpbmc7CisgICAgICAgICAgICBt
X3BhZGRpbmcgLT0gdG9QYWQ7CisgICAgICAgICAgICB3b3JkQnJlYWtTcGFjaW5nICs9IHRvUGFk
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB3b3JkQnJlYWtTcGFjaW5nOworfQorCisv
LyBzZXRQYWRkaW5nIHNldHMgYSBudW1iZXIgb2YgcGl4ZWxzIHRvIGJlIGRpc3RyaWJ1dGVkIGFj
cm9zcyB0aGUgVGV4dFJ1bi4KKy8vIFdlYktpdCB1c2VzIHRoaXMgdG8ganVzdGlmeSB0ZXh0Lgor
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldFBhZGRpbmcoaW50IHBhZGRpbmcpCit7Cisg
ICAgbV9wYWRkaW5nID0gcGFkZGluZzsKKyAgICBtX3BhZEVycm9yID0gMDsKKyAgICBpZiAoIW1f
cGFkZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgd2UgaGF2ZSBwYWRkaW5nIHRv
IGRpc3RyaWJ1dGUsIHRoZW4gd2UgdHJ5IHRvIGdpdmUgYW4gZXF1YWwKKyAgICAvLyBhbW91bnQg
dG8gZWFjaCBzcGFjZS4gVGhlIGxhc3Qgc3BhY2UgZ2V0cyB0aGUgc21hbGxlciBhbW91bnQsIGlm
CisgICAgLy8gYW55LgorICAgIHVuc2lnbmVkIG51bVdvcmRCcmVha3MgPSAwOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faXRlbS5zdHJpbmdMZW5ndGg7IGkrKykgeworICAgICAg
ICBpZiAoaXNXb3JkQnJlYWsoaSkpCisgICAgICAgICAgICBudW1Xb3JkQnJlYWtzKys7CisgICAg
fQorCisgICAgaWYgKG51bVdvcmRCcmVha3MpCisgICAgICAgIG1fcGFkUGVyV29yZEJyZWFrID0g
bV9wYWRkaW5nIC8gbnVtV29yZEJyZWFrczsKKyAgICBlbHNlCisgICAgICAgIG1fcGFkUGVyV29y
ZEJyZWFrID0gMDsKK30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnJlc2V0KGludCBv
ZmZzZXQpCit7CisgICAgbV9pbmRleE9mTmV4dFNjcmlwdFJ1biA9IDA7CisgICAgbV9vZmZzZXRY
ID0gb2Zmc2V0OworfQorCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0dXBGb3JSVEwo
KQoreworICAgIGludCBwYWRkaW5nID0gbV9wYWRkaW5nOworICAgIC8vIEZJWE1FOiB0aGlzIGNh
dXNlcyB1cyB0byBzaGFwZSB0aGUgdGV4dCB0d2ljZSAtLSBvbmNlIHRvIGNvbXB1dGUgdGhlIHdp
ZHRoIGFuZCB0aGVuIGFnYWluCisgICAgLy8gYmVsb3cgd2hlbiBhY3R1YWxseSByZW5kZXJpbmcu
IENoYW5nZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgdG8gbWF0Y2ggcGxhdGZvcm0vbWFjIGFuZAor
ICAgIC8vIHBsYXRmb3JtL2Nocm9taXVtL3dpbiBieSBoYXZpbmcgaXQgc3RvcmUgdGhlIHNoYXBl
ZCBydW5zLCBzbyB3ZSBjYW4gcmV1c2UgdGhlIHJlc3VsdHMuCisgICAgcmVzZXQobV9vZmZzZXRY
ICsgd2lkdGhPZkZ1bGxSdW4oKSk7CisgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHBhZGRpbmcg
YWdhaW4gYmVjYXVzZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgbGF5b3V0IGNvbnN1bWVkIHRoZSB2
YWx1ZS4KKyAgICAvLyBGaXhpbmcgdGhlIGFib3ZlIHByb2JsZW0gd291bGQgaGVscCBoZXJlIHRv
by4KKyAgICBzZXRQYWRkaW5nKHBhZGRpbmcpOworfQorCisvLyBBZHZhbmNlIHRvIHRoZSBuZXh0
IHNjcmlwdCBydW4sIHJldHVybmluZyBmYWxzZSB3aGVuIHRoZSBlbmQgb2YgdGhlCisvLyBUZXh0
UnVuIGhhcyBiZWVuIHJlYWNoZWQuCitib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6bmV4dFNj
cmlwdFJ1bigpCit7CisgICAgLy8gRW5zdXJlIHdlJ3JlIG5vdCBwb2ludGluZyBhdCB0aGUgc21h
bGwgY2FwcyBidWZmZXIuCisgICAgbV9pdGVtLnN0cmluZyA9IG1fcnVuLmNoYXJhY3RlcnMoKTsK
KworICAgIGlmICghaGJfdXRmMTZfc2NyaXB0X3J1bl9uZXh0KDAsICZtX2l0ZW0uaXRlbSwgbV9y
dW4uY2hhcmFjdGVycygpLCBtX3J1bi5sZW5ndGgoKSwgJm1faW5kZXhPZk5leHRTY3JpcHRSdW4p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJdCBpcyBhY3R1YWxseSB3cm9uZyB0
byBjb25zaWRlciBzY3JpcHQgcnVucyBhdCBhbGwgaW4gdGhpcyBjb2RlLgorICAgIC8vIE90aGVy
IFdlYktpdCBjb2RlIChlLmcuIE1hYykgc2VnbWVudHMgY29tcGxleCB0ZXh0IGp1c3QgYnkgZmlu
ZGluZworICAgIC8vIHRoZSBsb25nZXN0IHNwYW4gb2YgdGV4dCBjb3ZlcmVkIGJ5IGEgc2luZ2xl
IGZvbnQuCisgICAgLy8gQnV0IHdlIGN1cnJlbnRseSBuZWVkIHRvIGNhbGwgaGJfdXRmMTZfc2Ny
aXB0X3J1bl9uZXh0IGFueXdheSB0byBmaWxsCisgICAgLy8gaW4gdGhlIGhhcmZidXp6IGRhdGEg
c3RydWN0dXJlcyB0byBlLmcuIHBpY2sgdGhlIGNvcnJlY3Qgc2NyaXB0J3Mgc2hhcGVyLgorICAg
IC8vIFNvIHdlIGFsbG93IHRoYXQgdG8gcnVuIGZpcnN0LCB0aGVuIGRvIGEgc2Vjb25kIHBhc3Mg
b3ZlciB0aGUgcmFuZ2UgaXQKKyAgICAvLyBmb3VuZCBhbmQgdGFrZSB0aGUgbGFyZ2VzdCBzdWJy
ZWdpb24gdGhhdCBzdGF5cyB3aXRoaW4gYSBzaW5nbGUgZm9udC4KKyAgICBTdXJyb2dhdGVQYWly
QXdhcmVUZXh0SXRlcmF0b3IgaXRlcmF0b3Ioc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPigmbV9p
dGVtLnN0cmluZ1ttX2l0ZW0uaXRlbS5wb3NdKSwgMCwgc3RhdGljX2Nhc3Q8aW50PihtX2l0ZW0u
aXRlbS5sZW5ndGgpLCBzdGF0aWNfY2FzdDxpbnQ+KG1faXRlbS5pdGVtLmxlbmd0aCkpOworICAg
IFVDaGFyMzIgY2hhcmFjdGVyOworICAgIHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAwOworICAg
IGlmICghaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICBpdGVyYXRvci5h
ZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOworICAgIHdoaWxlIChpdGVyYXRvci5jb25zdW1lKGNoYXJh
Y3RlciwgY2x1c3Rlckxlbmd0aCkpIHsKKyAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG5l
eHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFs
c2UpLmZvbnREYXRhOworICAgICAgICBpZiAobmV4dEZvbnREYXRhICE9IG1fY3VycmVudEZvbnRE
YXRhKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rl
ckxlbmd0aCk7CisgICAgfQorICAgIG1faXRlbS5pdGVtLmxlbmd0aCA9IGl0ZXJhdG9yLmN1cnJl
bnRDaGFyYWN0ZXIoKTsKKyAgICBtX2luZGV4T2ZOZXh0U2NyaXB0UnVuID0gbV9pdGVtLml0ZW0u
cG9zICsgaXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpOworCisgICAgc2V0dXBGb250Rm9yU2Ny
aXB0UnVuKCk7CisgICAgc2hhcGVHbHlwaHMoKTsKKyAgICBzZXRHbHlwaFBvc2l0aW9ucyhydGwo
KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZmxvYXQgQ29tcGxleFRleHRDb250cm9sbGVy
Ojp3aWR0aE9mRnVsbFJ1bigpCit7CisgICAgZmxvYXQgd2lkdGhTdW0gPSAwOworICAgIHdoaWxl
IChuZXh0U2NyaXB0UnVuKCkpCisgICAgICAgIHdpZHRoU3VtICs9IHdpZHRoKCk7CisKKyAgICBy
ZXR1cm4gd2lkdGhTdW07Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwRm9udEZlYXR1cmVzKGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIHNldHRpbmdzLCBIQl9GYWNlUmVjXyogaGJGYWNlKQorewor
ICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYkZhY2UtPmdz
dWIpCisgICAgICAgIEhCX0dTVUJfQ2xlYXJfRmVhdHVyZXMoaGJGYWNlLT5nc3ViKTsKKyAgICBp
ZiAoaGJGYWNlLT5ncG9zKQorICAgICAgICBIQl9HUE9TX0NsZWFyX0ZlYXR1cmVzKGhiRmFjZS0+
Z3Bvcyk7CisKKyAgICBIQl9VU2hvcnQgc2NyaXB0SW5kZXggPSAwOworICAgIEhCX0dTVUJfU2Vs
ZWN0X1NjcmlwdChoYkZhY2UtPmdzdWIsIEhCX01BS0VfVEFHKCdEJywgJ0YnLCAnTCcsICdUJyks
ICZzY3JpcHRJbmRleCk7CisgICAgc2l6ZV90IG51bUZlYXR1cmVzID0gc2V0dGluZ3MtPnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUZlYXR1cmVzOyArK2kpIHsKKyAgICAg
ICAgaWYgKCFzZXR0aW5ncy0+YXQoaSkudmFsdWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBIQl9VU2hvcnQgZmVhdHVyZUluZGV4ID0gMDsKKyAgICAgICAgY29uc3QgVUNoYXIq
IHRhZyA9IHNldHRpbmdzLT5hdChpKS50YWcoKS5jaGFyYWN0ZXJzKCk7CisgICAgICAgIEhCX1VJ
bnQgZmVhdHVyZSA9IEhCX01BS0VfVEFHKHRhZ1swXSwgdGFnWzFdLCB0YWdbMl0sIHRhZ1szXSk7
CisgICAgICAgIGlmIChoYkZhY2UtPmdzdWIgJiYgSEJfR1NVQl9TZWxlY3RfRmVhdHVyZShoYkZh
Y2UtPmdzdWIsIGZlYXR1cmUsIHNjcmlwdEluZGV4LCAweGZmZmYsICZmZWF0dXJlSW5kZXgpID09
IEhCX0Vycl9PaykKKyAgICAgICAgICAgIEhCX0dTVUJfQWRkX0ZlYXR1cmUoaGJGYWNlLT5nc3Vi
LCBmZWF0dXJlSW5kZXgsIHNldHRpbmdzLT5hdChpKS52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBp
ZiAoaGJGYWNlLT5ncG9zICYmIEhCX0dQT1NfU2VsZWN0X0ZlYXR1cmUoaGJGYWNlLT5ncG9zLCBm
ZWF0dXJlLCBzY3JpcHRJbmRleCwgMHhmZmZmLCAmZmVhdHVyZUluZGV4KSA9PSBIQl9FcnJfT2sp
CisgICAgICAgICAgICBIQl9HUE9TX0FkZF9GZWF0dXJlKGhiRmFjZS0+Z3BvcywgZmVhdHVyZUlu
ZGV4LCBzZXR0aW5ncy0+YXQoaSkudmFsdWUoKSk7CisgICAgfQorfQorCitzdGF0aWMgVUNoYXIz
MiBzdXJyb2dhdGVQYWlyQXdhcmVGaXJzdENoYXJhY3Rlcihjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChVMTZfSVNfU1VSUk9HQVRFKGNoYXJhY3Rl
cnNbMF0pKSB7CisgICAgICAgIGlmICghVTE2X0lTX1NVUlJPR0FURV9MRUFEKGNoYXJhY3RlcnNb
MF0pIHx8IGxlbmd0aCA8IDIgfHwgIVUxNl9JU19UUkFJTChjaGFyYWN0ZXJzWzFdKSkKKyAgICAg
ICAgICAgIHJldHVybiAnICc7CisgICAgICAgIHJldHVybiBVMTZfR0VUX1NVUFBMRU1FTlRBUlko
Y2hhcmFjdGVyc1swXSwgY2hhcmFjdGVyc1sxXSk7CisgICAgfQorICAgIHJldHVybiBjaGFyYWN0
ZXJzWzBdOworfQorCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0dXBGb250Rm9yU2Ny
aXB0UnVuKCkKK3sKKyAgICBGb250RGF0YVZhcmlhbnQgZm9udERhdGFWYXJpYW50ID0gQXV0b1Zh
cmlhbnQ7CisgICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgc2NyaXB0IHJ1biBuZWVkcyB0byBiZSBj
b252ZXJ0ZWQgdG8gc21hbGwgY2Fwcy4KKyAgICAvLyBuZXh0U2NyaXB0UnVuKCkgd2lsbCBhbHdh
eXMgc2VuZCB1cyBhIHJ1biBvZiB0aGUgc2FtZSBjYXNlLCBiZWNhdXNlIGEKKyAgICAvLyBjYXNl
IGNoYW5nZSB3aGlsZSBpbiBzbWFsbC1jYXBzIG1vZGUgYWx3YXlzIHJlc3VsdHMgaW4gZGlmZmVy
ZW50CisgICAgLy8gRm9udERhdGEsIHNvIHdlIG9ubHkgbmVlZCB0byBjaGVjayB0aGUgZmlyc3Qg
Y2hhcmFjdGVyJ3MgY2FzZS4KKyAgICBpZiAobV9mb250LT5pc1NtYWxsQ2FwcygpICYmIHVfaXNs
b3dlcihtX2l0ZW0uc3RyaW5nW21faXRlbS5pdGVtLnBvc10pKSB7CisgICAgICAgIG1fc21hbGxD
YXBzU3RyaW5nID0gU3RyaW5nKG1fcnVuLmRhdGEobV9pdGVtLml0ZW0ucG9zKSwgbV9pdGVtLml0
ZW0ubGVuZ3RoKTsKKyAgICAgICAgbV9zbWFsbENhcHNTdHJpbmcubWFrZVVwcGVyKCk7CisgICAg
ICAgIG1faXRlbS5zdHJpbmcgPSBtX3NtYWxsQ2Fwc1N0cmluZy5jaGFyYWN0ZXJzKCk7CisgICAg
ICAgIG1faXRlbS5pdGVtLnBvcyA9IDA7CisgICAgICAgIGZvbnREYXRhVmFyaWFudCA9IFNtYWxs
Q2Fwc1ZhcmlhbnQ7CisgICAgfQorICAgIFVDaGFyMzIgY3VycmVudCA9IHN1cnJvZ2F0ZVBhaXJB
d2FyZUZpcnN0Q2hhcmFjdGVyKHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4oJm1faXRlbS5zdHJp
bmdbbV9pdGVtLml0ZW0ucG9zXSksIG1faXRlbS5pdGVtLmxlbmd0aCAtIG1faXRlbS5pdGVtLnBv
cyk7CisgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoY3VycmVudCwgZmFsc2UsIGZvbnREYXRhVmFyaWFudCkuZm9udERhdGE7CisgICAg
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udERhdGEtPmZvbnREYXRh
Rm9yQ2hhcmFjdGVyKCcgJyktPnBsYXRmb3JtRGF0YSgpOworICAgIG1faXRlbS5mYWNlID0gcGxh
dGZvcm1EYXRhLmhhcmZidXp6RmFjZSgpLT5mYWNlKCk7CisgICAgLy8gV2Ugb25seSBuZWVkIHRv
IHNldHVwIGZvbnQgZmVhdHVyZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVuLgorICAgIGlm
ICghbV9pdGVtLml0ZW0ucG9zKQorICAgICAgICBzZXR1cEZvbnRGZWF0dXJlcyhtX2ZvbnQtPmZv
bnREZXNjcmlwdGlvbigpLmZlYXR1cmVTZXR0aW5ncygpLCBtX2l0ZW0uZmFjZSk7CisgICAgdm9p
ZCogb3BhcXVlUGxhdGZvcm1EYXRhID0gY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oJnBs
YXRmb3JtRGF0YSk7CisgICAgbV9pdGVtLmZvbnQtPnVzZXJEYXRhID0gb3BhcXVlUGxhdGZvcm1E
YXRhOworCisgICAgaW50IHNpemUgPSBwbGF0Zm9ybURhdGEuc2l6ZSgpOworICAgIG1faXRlbS5m
b250LT54X3BwZW0gPSBzaXplOworICAgIG1faXRlbS5mb250LT55X3BwZW0gPSBzaXplOworICAg
IC8vIHhfIGFuZCB5X3NjYWxlIGFyZSB0aGUgY29udmVyc2lvbiBmYWN0b3JzIGZyb20gZm9udCBk
ZXNpZ24gc3BhY2UgKGZFbVNpemUpIHRvIDEvNjR0aCBvZiBkZXZpY2UgcGl4ZWxzIGluIDE2LjE2
IGZvcm1hdC4KKyAgICBjb25zdCBpbnQgZGV2aWNlUGl4ZWxGcmFjdGlvbiA9IDY0OworICAgIGNv
bnN0IGludCBtdWx0aXBseUZvcjE2RG90MTYgPSAxIDw8IDE2OworICAgIGludCBzY2FsZSA9IGRl
dmljZVBpeGVsRnJhY3Rpb24gKiBzaXplICogbXVsdGlwbHlGb3IxNkRvdDE2IC8gcGxhdGZvcm1E
YXRhLmVtU2l6ZUluRm9udFVuaXRzKCk7CisgICAgbV9pdGVtLmZvbnQtPnhfc2NhbGUgPSBzY2Fs
ZTsKKyAgICBtX2l0ZW0uZm9udC0+eV9zY2FsZSA9IHNjYWxlOworfQorCit2b2lkIENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6ZGVsZXRlR2x5cGhBcnJheXMoKQoreworICAgIGRlbGV0ZVtdIG1faXRl
bS5nbHlwaHM7CisgICAgZGVsZXRlW10gbV9pdGVtLmF0dHJpYnV0ZXM7CisgICAgZGVsZXRlW10g
bV9pdGVtLmFkdmFuY2VzOworICAgIGRlbGV0ZVtdIG1faXRlbS5vZmZzZXRzOworICAgIGRlbGV0
ZVtdIG1fZ2x5cGhzMTY7CisgICAgZGVsZXRlW10gbV9wb3NpdGlvbnM7Cit9CisKK3ZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjpjcmVhdGVHbHlwaEFycmF5cyhpbnQgc2l6ZSkKK3sKKyAgICBt
X2l0ZW0uZ2x5cGhzID0gbmV3IEhCX0dseXBoW3NpemVdOworICAgIG1faXRlbS5hdHRyaWJ1dGVz
ID0gbmV3IEhCX0dseXBoQXR0cmlidXRlc1tzaXplXTsKKyAgICBtX2l0ZW0uYWR2YW5jZXMgPSBu
ZXcgSEJfRml4ZWRbc2l6ZV07CisgICAgbV9pdGVtLm9mZnNldHMgPSBuZXcgSEJfRml4ZWRQb2lu
dFtzaXplXTsKKworICAgIG1fZ2x5cGhzMTYgPSBuZXcgdWludDE2X3Rbc2l6ZV07CisgICAgbV9w
b3NpdGlvbnMgPSBuZXcgU2tQb2ludFtzaXplXTsKKworICAgIG1faXRlbS5udW1fZ2x5cGhzID0g
c2l6ZTsKKyAgICBtX2dseXBoc0FycmF5Q2FwYWNpdHkgPSBzaXplOyAvLyBTYXZlIHRoZSBHbHlw
aEFycmF5cyBzaXplLgorICAgIHJlc2V0R2x5cGhBcnJheXMoKTsKK30KKwordm9pZCBDb21wbGV4
VGV4dENvbnRyb2xsZXI6OnJlc2V0R2x5cGhBcnJheXMoKQoreworICAgIGludCBzaXplID0gbV9p
dGVtLm51bV9nbHlwaHM7CisgICAgLy8gQWxsIHRoZSB0eXBlcyBoZXJlIGRvbid0IGhhdmUgcG9p
bnRlcnMuIEl0IGlzIHNhZmUgdG8gcmVzZXQgdG8KKyAgICAvLyB6ZXJvIHVubGVzcyBIYXJmYnV6
eiBicmVha3MgdGhlIGNvbXBhdGliaWxpdHkgaW4gdGhlIGZ1dHVyZS4KKyAgICBtZW1zZXQobV9p
dGVtLmdseXBocywgMCwgc2l6ZSAqIHNpemVvZihIQl9HbHlwaCkpOworICAgIG1lbXNldChtX2l0
ZW0uYXR0cmlidXRlcywgMCwgc2l6ZSAqIHNpemVvZihIQl9HbHlwaEF0dHJpYnV0ZXMpKTsKKyAg
ICBtZW1zZXQobV9pdGVtLmFkdmFuY2VzLCAwLCBzaXplICogc2l6ZW9mKEhCX0ZpeGVkKSk7Cisg
ICAgbWVtc2V0KG1faXRlbS5vZmZzZXRzLCAwLCBzaXplICogc2l6ZW9mKEhCX0ZpeGVkUG9pbnQp
KTsKKyAgICBtZW1zZXQobV9nbHlwaHMxNiwgMCwgc2l6ZSAqIHNpemVvZih1aW50MTZfdCkpOwor
ICAgIG1lbXNldChtX3Bvc2l0aW9ucywgMCwgc2l6ZSAqIHNpemVvZihTa1BvaW50KSk7Cit9CisK
K3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzaGFwZUdseXBocygpCit7CisgICAgLy8gSEJf
U2hhcGVJdGVtKCkgcmVzZXRzIG1faXRlbS5udW1fZ2x5cGhzLiBJZiB0aGUgcHJldmlvdXMgY2Fs
bCB0bworICAgIC8vIEhCX1NoYXBlSXRlbSgpIHVzZWQgbGVzcyBzcGFjZSB0aGFuIHdhcyBhdmFp
bGFibGUsIHRoZSBjYXBhY2l0eSBvZgorICAgIC8vIHRoZSBhcnJheSBtYXkgYmUgbGFyZ2VyIHRo
YW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgbV9pdGVtLm51bV9nbHlwaHMuCisgICAgLy8gU28sIHdl
IG5lZWQgdG8gcmVzZXQgdGhlIG51bV9nbHlwaHMgdG8gdGhlIGNhcGFjaXR5IG9mIHRoZSBhcnJh
eS4KKyAgICBtX2l0ZW0ubnVtX2dseXBocyA9IG1fZ2x5cGhzQXJyYXlDYXBhY2l0eTsKKyAgICBy
ZXNldEdseXBoQXJyYXlzKCk7CisgICAgd2hpbGUgKCFIQl9TaGFwZUl0ZW0oJm1faXRlbSkpIHsK
KyAgICAgICAgLy8gV2Ugb3ZlcmZsb3dlZCBvdXIgYXJyYXlzLiBSZXNpemUgYW5kIHJldHJ5Lgor
ICAgICAgICAvLyBIQl9TaGFwZUl0ZW0gZmlsbHMgaW4gbV9pdGVtLm51bV9nbHlwaHMgd2l0aCB0
aGUgbmVlZGVkIHNpemUuCisgICAgICAgIGRlbGV0ZUdseXBoQXJyYXlzKCk7CisgICAgICAgIC8v
IFRoZSB8KyAxfCBoZXJlIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gSGFyZmJ1eno6IHRo
ZSBLaG1lcgorICAgICAgICAvLyBzaGFwZXIgKGF0IGxlYXN0KSBjYW4gZmFpbCBiZWNhdXNlIG9m
IGluc3VmZmljaWVudCBnbHlwaCBidWZmZXJzCisgICAgICAgIC8vIGFuZCByZXF1ZXN0IDAgYWRk
aXRpb25hbCBnbHlwaHM6IHRocm93aW5nIHVzIGludG8gYW4gaW5maW5pdGUKKyAgICAgICAgLy8g
bG9vcC4KKyAgICAgICAgY3JlYXRlR2x5cGhBcnJheXMobV9pdGVtLm51bV9nbHlwaHMgKyAxKTsK
KyAgICB9Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXRHbHlwaFBvc2l0aW9u
cyhib29sIGlzUlRMKQoreworICAgIGNvbnN0IGRvdWJsZSBydGxGbGlwID0gaXNSVEwgPyAtMSA6
IDE7CisgICAgZG91YmxlIHBvc2l0aW9uID0gMDsKKworICAgIC8vIGxvZ0NsdXN0ZXJzSW5kZXgg
aW5kZXhlcyBsb2dDbHVzdGVycyBmb3IgdGhlIGZpcnN0IGNvZGVwb2ludCBvZiB0aGUgY3VycmVu
dCBnbHlwaC4KKyAgICAvLyBFYWNoIHRpbWUgd2UgYWR2YW5jZSBhIGdseXBoLCB3ZSBza2lwIG92
ZXIgYWxsIHRoZSBjb2RlcG9pbnRzIHRoYXQgY29udHJpYnV0ZWQgdG8gdGhlIGN1cnJlbnQgZ2x5
cGguCisgICAgaW50IGxvZ0NsdXN0ZXJzSW5kZXggPSAwOworCisgICAgLy8gSXRlcmF0ZSB0aHJv
dWdoIHRoZSBnbHlwaHMgaW4gbG9naWNhbCBvcmRlciwgZmxpcHBpbmcgZm9yIFJUTCB3aGVyZSBu
ZWNlc3NhcnkuCisgICAgLy8gR2x5cGhzIGFyZSBwb3NpdGlvbmVkIHN0YXJ0aW5nIGZyb20gbV9v
ZmZzZXRYOyBpbiBSVEwgbW9kZSB0aGV5IGdvIGxlZnR3YXJkcyBmcm9tIHRoZXJlLgorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtLm51bV9nbHlwaHM7ICsraSkgeworICAgICAgICB3
aGlsZSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvZ0NsdXN0ZXJzSW5kZXgpIDwgbV9pdGVtLml0
ZW0ubGVuZ3RoICYmIG1faXRlbS5sb2dfY2x1c3RlcnNbbG9nQ2x1c3RlcnNJbmRleF0gPCBpKQor
ICAgICAgICAgICAgbG9nQ2x1c3RlcnNJbmRleCsrOworCisgICAgICAgIC8vIElmIHRoZSBjdXJy
ZW50IGdseXBoIGlzIGp1c3QgYWZ0ZXIgYSBzcGFjZSwgYWRkIGluIHRoZSB3b3JkIHNwYWNpbmcu
CisgICAgICAgIHBvc2l0aW9uICs9IGRldGVybWluZVdvcmRCcmVha1NwYWNpbmcobG9nQ2x1c3Rl
cnNJbmRleCk7CisKKyAgICAgICAgbV9nbHlwaHMxNltpXSA9IG1faXRlbS5nbHlwaHNbaV07Cisg
ICAgICAgIGRvdWJsZSBvZmZzZXRYID0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKG1faXRl
bS5vZmZzZXRzW2ldLngpOworICAgICAgICBkb3VibGUgb2Zmc2V0WSA9IHRydW5jYXRlRml4ZWRQ
b2ludFRvSW50ZWdlcihtX2l0ZW0ub2Zmc2V0c1tpXS55KTsKKyAgICAgICAgZG91YmxlIGFkdmFu
Y2UgPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLmFkdmFuY2VzW2ldKTsKKyAg
ICAgICAgaWYgKGlzUlRMKQorICAgICAgICAgICAgb2Zmc2V0WCAtPSBhZHZhbmNlOworCisgICAg
ICAgIG1fcG9zaXRpb25zW2ldLnNldChtX29mZnNldFggKyAocG9zaXRpb24gKiBydGxGbGlwKSAr
IG9mZnNldFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0aW5nWSArIG9mZnNl
dFkpOworCisgICAgICAgIGlmIChtX2N1cnJlbnRGb250RGF0YS0+aXNaZXJvV2lkdGhTcGFjZUds
eXBoKG1fZ2x5cGhzMTZbaV0pKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8g
QXQgdGhlIGVuZCBvZiBlYWNoIGNsdXN0ZXIsIGFkZCBpbiB0aGUgbGV0dGVyIHNwYWNpbmcuCisg
ICAgICAgIGlmIChpICsgMSA9PSBtX2l0ZW0ubnVtX2dseXBocyB8fCBtX2l0ZW0uYXR0cmlidXRl
c1tpICsgMV0uY2x1c3RlclN0YXJ0KQorICAgICAgICAgICAgcG9zaXRpb24gKz0gbV9sZXR0ZXJT
cGFjaW5nOworCisgICAgICAgIHBvc2l0aW9uICs9IGFkdmFuY2U7CisgICAgfQorICAgIG1fcGl4
ZWxXaWR0aCA9IHN0ZDo6bWF4KHBvc2l0aW9uLCAwLjApOworICAgIG1fb2Zmc2V0WCArPSBtX3Bp
eGVsV2lkdGggKiBydGxGbGlwOworfQorCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6bm9y
bWFsaXplU3BhY2VzQW5kTWlycm9yQ2hhcnMoY29uc3QgVUNoYXIqIHNvdXJjZSwgYm9vbCBydGws
IFVDaGFyKiBkZXN0aW5hdGlvbiwgaW50IGxlbmd0aCkKK3sKKyAgICBpbnQgcG9zaXRpb24gPSAw
OworICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKKyAgICAvLyBJdGVyYXRlIGNoYXJhY3RlcnMgaW4g
c291cmNlIGFuZCBtaXJyb3IgY2hhcmFjdGVyIGlmIG5lZWRlZC4KKyAgICB3aGlsZSAocG9zaXRp
b24gPCBsZW5ndGgpIHsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CisgICAgICAgIGludCBu
ZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgVTE2X05FWFQoc291cmNlLCBuZXh0UG9z
aXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFj
ZShjaGFyYWN0ZXIpKQorICAgICAgICAgICAgY2hhcmFjdGVyID0gJyAnOworICAgICAgICBlbHNl
IGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFjdGVyKSkKKyAgICAgICAgICAg
IGNoYXJhY3RlciA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICBlbHNlIGlmIChydGwpCisgICAg
ICAgICAgICBjaGFyYWN0ZXIgPSB1X2NoYXJNaXJyb3IoY2hhcmFjdGVyKTsKKyAgICAgICAgVTE2
X0FQUEVORChkZXN0aW5hdGlvbiwgcG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyLCBlcnJvcik7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsICFlcnJvcik7CisgICAgICAgIHBvc2l0aW9u
ID0gbmV4dFBvc2l0aW9uOworICAgIH0KK30KKworY29uc3QgVGV4dFJ1biYgQ29tcGxleFRleHRD
b250cm9sbGVyOjpnZXROb3JtYWxpemVkVGV4dFJ1bihjb25zdCBUZXh0UnVuJiBvcmlnaW5hbFJ1
biwgT3duUHRyPFRleHRSdW4+JiBub3JtYWxpemVkUnVuLCBPd25BcnJheVB0cjxVQ2hhcj4mIG5v
cm1hbGl6ZWRCdWZmZXIpCit7CisgICAgLy8gTm9ybWFsaXplIHRoZSB0ZXh0IHJ1biBpbiB0aHJl
ZSB3YXlzOgorICAgIC8vIDEpIENvbnZlcnQgdGhlIHxvcmlnaW5hbFJ1bnwgdG8gTkZDIG5vcm1h
bGl6ZWQgZm9ybSBpZiBjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MKKyAgICAvLyAoVSswMzAw
Li4pIGFyZSB1c2VkIGluIHRoZSBydW4uIFRoaXMgY29udmVyc2lvbiBpcyBuZWNlc3Nhcnkgc2lu
Y2UgbW9zdCBPcGVuVHlwZQorICAgIC8vIGZvbnRzIChlLmcuLCBBcmlhbCkgZG9uJ3QgaGF2ZSBz
dWJzdGl0dXRpb24gcnVsZXMgZm9yIHRoZSBkaWFjcml0aWNhbCBtYXJrcyBpbgorICAgIC8vIHRo
ZWlyIEdTVUIgdGFibGVzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IHVzZSB0
aGUgaWN1OjpOb3JtYWxpemVyOjppc05vcm1hbGl6ZWQoVU5PUk1fTkZDKSBBUEkgaGVyZSBzaW5j
ZQorICAgIC8vIHRoZSBBUEkgcmV0dXJucyBGQUxTRSAoPSBub3Qgbm9ybWFsaXplZCkgZm9yIGNv
bXBsZXggcnVucyB0aGF0IGRvbid0IHJlcXVpcmUgTkZDCisgICAgLy8gbm9ybWFsaXphdGlvbiAo
ZS5nLiwgQXJhYmljIHRleHQpLiBVbmxlc3MgdGhlIHJ1biBjb250YWlucyB0aGUgZGlhY3JpdGlj
YWwgbWFya3MsCisgICAgLy8gSGFyZmJ1enogd2lsbCBkbyB0aGUgc2FtZSB0aGluZyBmb3IgdXMg
dXNpbmcgdGhlIEdTVUIgdGFibGUuCisgICAgLy8gMikgQ29udmVydCBzcGFjaW5nIGNoYXJhY3Rl
cnMgaW50byBwbGFpbiBzcGFjZXMsIGFzIHNvbWUgZm9udHMgd2lsbCBwcm92aWRlIGdseXBocwor
ICAgIC8vIGZvciBjaGFyYWN0ZXJzIGxpa2UgJ1xuJyBvdGhlcndpc2UuCisgICAgLy8gMykgQ29u
dmVydCBtaXJyb3JlZCBjaGFyYWN0ZXJzIHN1Y2ggYXMgcGFyZW50aGVzaXMgZm9yIHJ0bCB0ZXh0
LgorCisgICAgLy8gQ29udmVydCB0byBORkMgZm9ybSBpZiB0aGUgdGV4dCBoYXMgZGlhY3JpdGlj
YWwgbWFya3MuCisgICAgaWN1OjpVbmljb2RlU3RyaW5nIG5vcm1hbGl6ZWRTdHJpbmc7CisgICAg
VUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgb3JpZ2luYWxSdW4ubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBVQ2hhciBjaCA9IG9yaWdp
bmFsUnVuW2ldOworICAgICAgICBpZiAoOjp1YmxvY2tfZ2V0Q29kZShjaCkgPT0gVUJMT0NLX0NP
TUJJTklOR19ESUFDUklUSUNBTF9NQVJLUykgeworICAgICAgICAgICAgaWN1OjpOb3JtYWxpemVy
Ojpub3JtYWxpemUoaWN1OjpVbmljb2RlU3RyaW5nKG9yaWdpbmFsUnVuLmNoYXJhY3RlcnMoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUnVuLmxlbmd0
aCgpKSwgVU5PUk1fTkZDLCAwIC8qIG5vIG9wdGlvbnMgKi8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkU3RyaW5nLCBlcnJvcik7CisgICAgICAgICAg
ICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxS
dW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vcm1h
bGl6ZSBzcGFjZSBhbmQgbWlycm9yIHBhcmVudGhlc2lzIGZvciBydGwgdGV4dC4KKyAgICBpbnQg
bm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKKyAgICBjb25zdCBVQ2hhciogc291cmNlVGV4dDsKKyAg
ICBpZiAobm9ybWFsaXplZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbm9ybWFsaXplZEJ1
ZmZlckxlbmd0aCA9IG9yaWdpbmFsUnVuLmxlbmd0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0g
b3JpZ2luYWxSdW4uY2hhcmFjdGVycygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG5vcm1hbGl6
ZWRCdWZmZXJMZW5ndGggPSBub3JtYWxpemVkU3RyaW5nLmxlbmd0aCgpOworICAgICAgICBzb3Vy
Y2VUZXh0ID0gbm9ybWFsaXplZFN0cmluZy5nZXRCdWZmZXIoKTsKKyAgICB9CisKKyAgICBub3Jt
YWxpemVkQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgVUNoYXJbbm9ybWFsaXplZEJ1ZmZlckxl
bmd0aCArIDFdKTsKKworICAgIG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNoYXJzKHNvdXJjZVRl
eHQsIG9yaWdpbmFsUnVuLnJ0bCgpLCBub3JtYWxpemVkQnVmZmVyLmdldCgpLCBub3JtYWxpemVk
QnVmZmVyTGVuZ3RoKTsKKworICAgIG5vcm1hbGl6ZWRSdW4gPSBhZG9wdFB0cihuZXcgVGV4dFJ1
bihvcmlnaW5hbFJ1bikpOworICAgIG5vcm1hbGl6ZWRSdW4tPnNldFRleHQobm9ybWFsaXplZEJ1
ZmZlci5nZXQoKSwgbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCk7CisgICAgcmV0dXJuICpub3JtYWxp
emVkUnVuOworfQorCitpbnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpnbHlwaEluZGV4Rm9yWFBv
c2l0aW9uSW5TY3JpcHRSdW4oaW50IHRhcmdldFgpIGNvbnN0Cit7CisgICAgLy8gSXRlcmF0ZSB0
aHJvdWdoIHRoZSBnbHlwaHMgaW4gbG9naWNhbCBvcmRlciwgc2VlaW5nIHdoZXRoZXIgdGFyZ2V0
WCBmYWxscyBiZXR3ZWVuIHRoZSBwcmV2aW91cworICAgIC8vIHBvc2l0aW9uIGFuZCBoYWxmd2F5
IHRocm91Z2ggdGhlIGN1cnJlbnQgZ2x5cGguCisgICAgLy8gRklYTUU6IHRoaXMgY29kZSBwcm9i
YWJseSBiZWxvbmdzIGluIENvbXBsZXhUZXh0Q29udHJvbGxlci4KKyAgICBpbnQgbGFzdFggPSBv
ZmZzZXRYKCkgLSAocnRsKCkgPyAtbV9waXhlbFdpZHRoIDogbV9waXhlbFdpZHRoKTsKKyAgICBm
b3IgKGludCBnbHlwaEluZGV4ID0gMDsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdseXBoSW5kZXgp
IDwgbGVuZ3RoKCk7ICsrZ2x5cGhJbmRleCkgeworICAgICAgICBpbnQgYWR2YW5jZSA9IHRydW5j
YXRlRml4ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0uYWR2YW5jZXNbZ2x5cGhJbmRleF0pOworICAg
ICAgICBpbnQgbmV4dFggPSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9ucygpW2dseXBoSW5kZXhd
LngoKSkgKyBhZHZhbmNlIC8gMjsKKyAgICAgICAgaWYgKHN0ZDo6bWluKG5leHRYLCBsYXN0WCkg
PD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IHN0ZDo6bWF4KG5leHRYLCBsYXN0WCkpCisgICAgICAg
ICAgICByZXR1cm4gZ2x5cGhJbmRleDsKKyAgICAgICAgbGFzdFggPSBuZXh0WDsKKyAgICB9CisK
KyAgICByZXR1cm4gbGVuZ3RoKCkgLSAxOworfQorCitpbnQgQ29tcGxleFRleHRDb250cm9sbGVy
OjpvZmZzZXRGb3JQb3NpdGlvbihpbnQgdGFyZ2V0WCkKK3sKKyAgICB1bnNpZ25lZCBiYXNlUG9z
aXRpb24gPSAwOworCisgICAgaW50IHggPSBvZmZzZXRYKCk7CisgICAgd2hpbGUgKG5leHRTY3Jp
cHRSdW4oKSkgeworICAgICAgICBpbnQgbmV4dFggPSBvZmZzZXRYKCk7CisKKyAgICAgICAgaWYg
KHN0ZDo6bWluKHgsIG5leHRYKSA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gc3RkOjptYXgoeCwg
bmV4dFgpKSB7CisgICAgICAgICAgICAvLyBUaGUgeCB2YWx1ZSBpbiBxdWVzdGlvbiBpcyB3aXRo
aW4gdGhpcyBzY3JpcHQgcnVuLgorICAgICAgICAgICAgY29uc3QgaW50IGdseXBoSW5kZXggPSBn
bHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4odGFyZ2V0WCk7CisKKyAgICAgICAgICAg
IC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBpbmRleCwgd2UgaGF2ZSB0byB0dXJuIHRoYXQg
aW50byBhCisgICAgICAgICAgICAvLyBjb2RlLXBvaW50IGluZGV4LiBCZWNhdXNlIG9mIGxpZ2F0
dXJlcywgc2V2ZXJhbCBjb2RlLXBvaW50cyBtYXkKKyAgICAgICAgICAgIC8vIGhhdmUgZ29uZSBp
bnRvIGEgc2luZ2xlIGdseXBoLiBXZSBpdGVyYXRlIG92ZXIgdGhlIGNsdXN0ZXJzIGxvZworICAg
ICAgICAgICAgLy8gYW5kIGZpbmQgdGhlIGZpcnN0IGNvZGUtcG9pbnQgd2hpY2ggY29udHJpYnV0
ZWQgdG8gdGhlIGdseXBoLgorCisgICAgICAgICAgICAvLyBTb21lIHNoYXBlcnMgKGkuZS4gS2ht
ZXIpIHdpbGwgcHJvZHVjZSBjbHVzdGVyIGxvZ3Mgd2hpY2ggcmVwb3J0CisgICAgICAgICAgICAv
LyB0aGF0IC9uby8gY29kZSBwb2ludHMgY29udHJpYnV0ZWQgdG8gY2VydGFpbiBnbHlwaHMuIEJl
Y2F1c2Ugb2YKKyAgICAgICAgICAgIC8vIHRoaXMsIHdlIHRha2UgYW55IGNvZGUgcG9pbnQgd2hp
Y2ggY29udHJpYnV0ZWQgdG8gdGhlIGdseXBoIGluCisgICAgICAgICAgICAvLyBxdWVzdGlvbiwg
b3IgYW55IHN1YnNlcXVlbnQgZ2x5cGguIElmIHdlIHJ1biBvZmYgdGhlIGVuZCwgdGhlbgorICAg
ICAgICAgICAgLy8gd2UgdGFrZSB0aGUgbGFzdCBjb2RlIHBvaW50LgorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMDsgaiA8IG51bUNvZGVQb2ludHMoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1faXRlbS5sb2dfY2x1c3RlcnNbal0gPj0gZ2x5cGhJbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGJhc2VQb3NpdGlvbiArIGo7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiBiYXNlUG9zaXRpb24gKyBudW1Db2RlUG9pbnRzKCkgLSAxOworICAg
ICAgICB9CisKKyAgICAgICAgYmFzZVBvc2l0aW9uICs9IG51bUNvZGVQb2ludHMoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gYmFzZVBvc2l0aW9uOworfQorCitGbG9hdFJlY3QgQ29tcGxleFRleHRD
b250cm9sbGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVp
Z2h0LCBpbnQgZnJvbSwgaW50IHRvKQoreworICAgIGludCBmcm9tWCA9IC0xLCB0b1ggPSAtMTsK
KyAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2ljYWwgb3JkZXIs
IHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGludGVyZXN0
LgorICAgIHdoaWxlIChuZXh0U2NyaXB0UnVuKCkgJiYgKGZyb21YID09IC0xIHx8IHRvWCA9PSAt
MSkpIHsKKyAgICAgICAgaWYgKGZyb21YID09IC0xICYmIGZyb20gPj0gMCAmJiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZnJvbSkgPCBudW1Db2RlUG9pbnRzKCkpIHsKKyAgICAgICAgICAgIC8vIHxm
cm9tfCBpcyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLiBTbyB3ZSBpbmRleCB0aGUgY2x1c3RlcnMg
bG9nIHRvCisgICAgICAgICAgICAvLyBmaW5kIHdoaWNoIGdseXBoIHRoaXMgY29kZS1wb2ludCBj
b250cmlidXRlZCB0byBhbmQgZmluZCBpdHMgeAorICAgICAgICAgICAgLy8gcG9zaXRpb24uCisg
ICAgICAgICAgICBpbnQgZ2x5cGggPSBtX2l0ZW0ubG9nX2NsdXN0ZXJzW2Zyb21dOworICAgICAg
ICAgICAgZnJvbVggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOworICAgICAgICAgICAgaWYgKHJ0
bCgpKQorICAgICAgICAgICAgICAgIGZyb21YICs9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdl
cihtX2l0ZW0uYWR2YW5jZXNbZ2x5cGhdKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBm
cm9tIC09IG51bUNvZGVQb2ludHMoKTsKKworICAgICAgICBpZiAodG9YID09IC0xICYmIHRvID49
IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSA8IG51bUNvZGVQb2ludHMoKSkgeworICAg
ICAgICAgICAgaW50IGdseXBoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1t0b107CisgICAgICAgICAg
ICB0b1ggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOworICAgICAgICAgICAgaWYgKHJ0bCgpKQor
ICAgICAgICAgICAgICAgIHRvWCArPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVt
LmFkdmFuY2VzW2dseXBoXSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdG8gLT0gbnVt
Q29kZVBvaW50cygpOworICAgIH0KKworICAgIC8vIFRoZSBwb3NpdGlvbiBpbiBxdWVzdGlvbiBt
aWdodCBiZSBqdXN0IGFmdGVyIHRoZSB0ZXh0LgorICAgIGlmIChmcm9tWCA9PSAtMSkKKyAgICAg
ICAgZnJvbVggPSBvZmZzZXRYKCk7CisgICAgaWYgKHRvWCA9PSAtMSkKKyAgICAgICAgdG9YID0g
b2Zmc2V0WCgpOworCisgICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAhPSAtMSk7CisKKyAg
ICBpZiAoZnJvbVggPCB0b1gpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsg
ZnJvbVgsIHBvaW50LnkoKSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7CisKKyAgICByZXR1cm4gRmxv
YXRSZWN0KHBvaW50LngoKSArIHRvWCwgcG9pbnQueSgpLCBmcm9tWCAtIHRvWCwgaGVpZ2h0KTsK
K30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmdseXBoc0ZvclJhbmdlKGludCBmcm9t
LCBpbnQgdG8sIGludCYgZnJvbUdseXBoLCBpbnQmIGdseXBoTGVuZ3RoKQoreworICAgIC8vIENo
YXJhY3RlciBvZmZzZXRzIHdpdGhpbiB0aGUgY3VycmVudCBydW4uIFRIRVNFIE1BWSBOT1QgQkUg
SU4gUkFOR0UgYW5kIG1heQorICAgIC8vIGJlIG5lZ2F0aXZlLCBldGMuIFRoZSBjb2RlIGJlbG93
IGhhbmRsZXMgdGhpcy4KKyAgICBpbnQgZnJvbUNoYXIgPSBmcm9tIC0gbV9pdGVtLml0ZW0ucG9z
OworICAgIGludCB0b0NoYXIgPSB0byAtIG1faXRlbS5pdGVtLnBvczsKKworICAgIC8vIFNlZSBp
ZiB0aGVyZSBhcmUgYW55IGNoYXJhY3RlcnMgaW4gdGhlIGN1cnJlbnQgcnVuLgorICAgIGlmICgh
bnVtQ29kZVBvaW50cygpIHx8IGZyb21DaGFyID49IHN0YXRpY19jYXN0PGludD4obnVtQ29kZVBv
aW50cygpKSB8fCB0b0NoYXIgPD0gMCkgeworICAgICAgICBmcm9tR2x5cGggPSAtMTsKKyAgICAg
ICAgZ2x5cGhMZW5ndGggPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ29t
cHV0ZSB0aGUgc3RhcnRpbmcgZ2x5cGggd2l0aGluIHRoaXMgc3Bhbi4gfGZyb218IGFuZCB8dG98
IGFyZQorICAgIC8vIGdsb2JhbCBvZmZzZXRzIHRoYXQgbWF5IGludGVyc2VjdCBhcmJpdHJhcmls
eSB3aXRoIG91ciBsb2NhbCBydW4uCisgICAgZnJvbUdseXBoID0gbV9pdGVtLmxvZ19jbHVzdGVy
c1tmcm9tQ2hhciA8IDAgPyAwIDogZnJvbUNoYXJdOworICAgIGlmICh0b0NoYXIgPj0gc3RhdGlj
X2Nhc3Q8aW50PihudW1Db2RlUG9pbnRzKCkpKQorICAgICAgICBnbHlwaExlbmd0aCA9IGxlbmd0
aCgpIC0gZnJvbUdseXBoOworICAgIGVsc2UKKyAgICAgICAgZ2x5cGhMZW5ndGggPSBtX2l0ZW0u
bG9nX2NsdXN0ZXJzW3RvQ2hhcl0gLSBmcm9tR2x5cGg7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZmZjM2ZWJhZGIxMTEyNTVmZjQwNDlhZWM2ZTNiMWRhODk0N2NmZGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9D
b21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
b21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6el9oCisjZGVmaW5lIENvbXBsZXhUZXh0Q29udHJv
bGxlckhhcmZCdXp6X2gKKworI2luY2x1ZGUgIkhhcmZCdXp6U2tpYS5oIgorI2luY2x1ZGUgIlNr
UG9pbnQuaCIKKyNpbmNsdWRlICJTa1NjYWxhci5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKwor
ZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiaGFyZmJ1enotc2hhcGVyLmgiCit9CisKKyNpbmNsdWRl
IDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnQ7Citj
bGFzcyBGb250UGxhdGZvcm1EYXRhOworY2xhc3MgU2ltcGxlRm9udERhdGE7CisKKy8vIENvbXBs
ZXhUZXh0Q29udHJvbGxlciB3YWxrcyBhIFRleHRSdW4gYW5kIHByZXNlbnRzIGVhY2ggc2NyaXB0
IHJ1biBpbiBzZXF1ZW5jZS4gQQorLy8gVGV4dFJ1biBpcyBhIHNlcXVlbmNlIG9mIGNvZGUtcG9p
bnRzIHdpdGggdGhlIHNhbWUgZW1iZWRkaW5nIGxldmVsIChpLmUuIHRoZXkKKy8vIGFyZSBhbGwg
bGVmdC10by1yaWdodCBvciByaWdodC10by1sZWZ0KS4gQSBzY3JpcHQgcnVuIGlzIGEgc3Vic2Vx
dWVuY2Ugd2hlcmUKKy8vIGFsbCB0aGUgY2hhcmFjdGVycyBoYXZlIHRoZSBzYW1lIHNjcmlwdCAo
ZS5nLiBBcmFiaWMsIFRoYWkgZXRjKS4gU2hhcGluZyBpcworLy8gb25seSBldmVyIGRvbmUgd2l0
aCBzY3JpcHQgcnVucyBzaW5jZSB0aGUgc2hhcGVycyBvbmx5IGtub3cgaG93IHRvIGRlYWwgd2l0
aAorLy8gYSBzaW5nbGUgc2NyaXB0LgorLy8KKy8vIEl0ZXJhdGlvbiBpcyBhbHdheXMgaW4gbG9n
aWNhbCAoYWthIHJlYWRpbmcpIG9yZGVyLiBGb3IgUlRMIHRleHQgdGhhdCBtZWFucworLy8gdGhl
IHJpZ2h0bW9zdCBwYXJ0IG9mIHRoZSB0ZXh0IHdpbGwgYmUgZmlyc3QuCisvLworLy8gT25jZSB5
b3UgaGF2ZSBzZXR1cCB0aGUgb2JqZWN0LCBjYWxsIHxuZXh0U2NyaXB0UnVufCB0byBnZXQgdGhl
IGZpcnN0IHNjcmlwdAorLy8gcnVuLiBUaGlzIHdpbGwgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGl0
ZXJhdGlvbiBpcyBjb21wbGV0ZS4gQXQgYW55IHRpbWUgeW91CisvLyBjYW4gY2FsbCB8cmVzZXR8
IHRvIHN0YXJ0IG92ZXIgYWdhaW4uCitjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXIgeworcHVi
bGljOgorICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBUZXh0UnVuJiwgaW50IHN0YXJ0
aW5nWCwgaW50IHN0YXJ0aW5nWSwgdW5zaWduZWQgd29yZFNwYWNpbmcsIHVuc2lnbmVkIGxldHRl
clNwYWNpbmcsIHVuc2lnbmVkIHBhZGRpbmcsIGNvbnN0IEZvbnQqKTsKKyAgICB+Q29tcGxleFRl
eHRDb250cm9sbGVyKCk7CisKKyAgICBib29sIGlzV29yZEJyZWFrKHVuc2lnbmVkKTsKKyAgICBp
bnQgZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZyh1bnNpZ25lZCk7CisgICAgLy8gc2V0UGFkZGlu
ZyBzZXRzIGEgbnVtYmVyIG9mIHBpeGVscyB0byBiZSBkaXN0cmlidXRlZCBhY3Jvc3MgdGhlIFRl
eHRSdW4uCisgICAgLy8gV2ViS2l0IHVzZXMgdGhpcyB0byBqdXN0aWZ5IHRleHQuCisgICAgdm9p
ZCBzZXRQYWRkaW5nKGludCk7CisgICAgdm9pZCByZXNldChpbnQgb2Zmc2V0KTsKKyAgICAvLyBB
ZHZhbmNlIHRvIHRoZSBuZXh0IHNjcmlwdCBydW4sIHJldHVybmluZyBmYWxzZSB3aGVuIHRoZSBl
bmQgb2YgdGhlCisgICAgLy8gVGV4dFJ1biBoYXMgYmVlbiByZWFjaGVkLgorICAgIGJvb2wgbmV4
dFNjcmlwdFJ1bigpOworICAgIGZsb2F0IHdpZHRoT2ZGdWxsUnVuKCk7CisKKyAgICAvLyBzZXRX
b3JkU3BhY2luZ0FkanVzdG1lbnQgc2V0cyBhIGRlbHRhIChpbiBwaXhlbHMpIHdoaWNoIGlzIGFw
cGxpZWQgYXQKKyAgICAvLyBlYWNoIHdvcmQgYnJlYWsgaW4gdGhlIFRleHRSdW4uCisgICAgdm9p
ZCBzZXRXb3JkU3BhY2luZ0FkanVzdG1lbnQoaW50IHdvcmRTcGFjaW5nQWRqdXN0bWVudCkgeyBt
X3dvcmRTcGFjaW5nQWRqdXN0bWVudCA9IHdvcmRTcGFjaW5nQWRqdXN0bWVudDsgfQorCisgICAg
Ly8gc2V0TGV0dGVyU3BhY2luZ0FkanVzdG1lbnQgc2V0cyBhbiBhZGRpdGlvbmFsIG51bWJlciBv
ZiBwaXhlbHMgdGhhdCBpcworICAgIC8vIGFkZGVkIHRvIHRoZSBhZHZhbmNlIGFmdGVyIGVhY2gg
b3V0cHV0IGNsdXN0ZXIuIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3VyCisgICAgLy8gb2YgV2lk
dGhJdGVyYXRvcjo6YWR2YW5jZS4KKyAgICB2b2lkIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50
KGludCBsZXR0ZXJTcGFjaW5nQWRqdXN0bWVudCkgeyBtX2xldHRlclNwYWNpbmcgPSBsZXR0ZXJT
cGFjaW5nQWRqdXN0bWVudDsgfQorICAgIGludCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9sZXR0ZXJTcGFjaW5nOyB9CisKKyAgICB2b2lkIHNldHVwRm9yUlRMKCk7CisgICAgYm9v
bCBydGwoKSBjb25zdCB7IHJldHVybiBtX3J1bi5ydGwoKTsgfQorICAgIGNvbnN0IHVpbnQxNl90
KiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBoczE2OyB9CisKKyAgICAvLyBSZXR1cm4g
dGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggb2YgZ2x5cGhzIGZvciB0aGUgcmFuZ2UgW2Zyb20s
IHRvKSBpbiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgorICAgIHZvaWQgZ2x5cGhzRm9yUmFuZ2Uo
aW50IGZyb20sIGludCB0bywgaW50JiBmcm9tR2x5cGgsIGludCYgZ2x5cGhMZW5ndGgpOworCisg
ICAgLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHJldHVybmVkIGJ5IHxnbHlwaHN8
CisgICAgY29uc3QgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLm51bV9n
bHlwaHM7IH0KKworICAgIC8vIFJldHVybiB0aGUgb2Zmc2V0IGZvciBlYWNoIG9mIHRoZSBnbHlw
aHMuIE5vdGUgdGhhdCB0aGlzIGlzIHRyYW5zbGF0ZWQKKyAgICAvLyBieSB0aGUgY3VycmVudCB4
IG9mZnNldCBhbmQgdGhhdCB0aGUgeCBvZmZzZXQgaXMgdXBkYXRlZCBmb3IgZWFjaCBzY3JpcHQK
KyAgICAvLyBydW4uCisgICAgY29uc3QgU2tQb2ludCogcG9zaXRpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9wb3NpdGlvbnM7IH0KKworICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvZGUgcG9p
bnRzIGluIHRoZSBjdXJyZW50IHNjcmlwdCBydW4KKyAgICBjb25zdCB1bnNpZ25lZCBudW1Db2Rl
UG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLml0ZW0ubGVuZ3RoOyB9CisKKyAgICAvLyBS
ZXR1cm4gdGhlIGN1cnJlbnQgcGl4ZWwgcG9zaXRpb24gb2YgdGhlIGNvbnRyb2xsZXIuCisgICAg
Y29uc3QgdW5zaWduZWQgb2Zmc2V0WCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0WDsgfQorCisg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YUZvclNjcmlwdFJ1bigp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KG1faXRlbS5mb250
LT51c2VyRGF0YSk7IH0KKworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQpOworICAgIEZs
b2F0UmVjdCBzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQg
ZnJvbSAsIGludCB0byk7CisKK3ByaXZhdGU6CisgICAgLy8gUmV0dXJuIHRoZSB3aWR0aCAoaW4g
cHgpIG9mIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCisgICAgdW5zaWduZWQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3BpeGVsV2lkdGg7IH0KKworICAgIHZvaWQgc2V0dXBGb250Rm9yU2NyaXB0
UnVuKCk7CisgICAgdm9pZCBkZWxldGVHbHlwaEFycmF5cygpOworICAgIHZvaWQgY3JlYXRlR2x5
cGhBcnJheXMoaW50KTsKKyAgICB2b2lkIHJlc2V0R2x5cGhBcnJheXMoKTsKKyAgICB2b2lkIHNo
YXBlR2x5cGhzKCk7CisgICAgdm9pZCBzZXRHbHlwaFBvc2l0aW9ucyhib29sKTsKKworICAgIHN0
YXRpYyB2b2lkIG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNoYXJzKGNvbnN0IFVDaGFyKiBzb3Vy
Y2UsIGJvb2wgcnRsLCBVQ2hhciogZGVzdGluYXRpb24sIGludCBsZW5ndGgpOworICAgIHN0YXRp
YyBjb25zdCBUZXh0UnVuJiBnZXROb3JtYWxpemVkVGV4dFJ1bihjb25zdCBUZXh0UnVuJiBvcmln
aW5hbFJ1biwgT3duUHRyPFRleHRSdW4+JiBub3JtYWxpemVkUnVuLCBPd25BcnJheVB0cjxVQ2hh
cj4mIG5vcm1hbGl6ZWRCdWZmZXIpOworCisgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBsb2dpYyBp
biBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWsKKyAgICBzdGF0aWMgYm9vbCBpc0NvZGVw
b2ludFNwYWNlKEhCX1VDaGFyMTYgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnOyB9
CisKKyAgICBpbnQgZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0UnVuKGludCB0YXJnZXRY
KSBjb25zdDsKKworICAgIGNvbnN0IEZvbnQqIGNvbnN0IG1fZm9udDsKKyAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbV9jdXJyZW50Rm9udERhdGE7CisgICAgSEJfU2hhcGVySXRlbSBtX2l0ZW07
CisgICAgdWludDE2X3QqIG1fZ2x5cGhzMTY7IC8vIEEgdmVjdG9yIG9mIDE2LWJpdCBnbHlwaCBp
ZHMuCisgICAgU2tQb2ludCogbV9wb3NpdGlvbnM7IC8vIEEgdmVjdG9yIG9mIHBvc2l0aW9ucyBm
b3IgZWFjaCBnbHlwaC4KKyAgICBzc2l6ZV90IG1faW5kZXhPZk5leHRTY3JpcHRSdW47IC8vIElu
ZGV4ZXMgdGhlIHNjcmlwdCBydW4gaW4gfG1fcnVufC4KKyAgICBpbnQgbV9vZmZzZXRYOyAvLyBP
ZmZzZXQgaW4gcGl4ZWxzIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBzY3JpcHQgcnVuLgorICAg
IGludCBtX3N0YXJ0aW5nWTsgLy8gVGhlIFkgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIHNjcmlwdCBy
dW4uCisgICAgdW5zaWduZWQgbV9waXhlbFdpZHRoOyAvLyBXaWR0aCAoaW4gcHgpIG9mIHRoZSBj
dXJyZW50IHNjcmlwdCBydW4uCisgICAgdW5zaWduZWQgbV9nbHlwaHNBcnJheUNhcGFjaXR5OyAv
LyBDdXJyZW50IHNpemUgb2YgYWxsIHRoZSBIYXJmYnV6eiBhcnJheXMuCisKKyAgICBPd25QdHI8
VGV4dFJ1bj4gbV9ub3JtYWxpemVkUnVuOworICAgIE93bkFycmF5UHRyPFVDaGFyPiBtX25vcm1h
bGl6ZWRCdWZmZXI7IC8vIEEgYnVmZmVyIGZvciBub3JtYWxpemVkIHJ1bi4KKyAgICBjb25zdCBU
ZXh0UnVuJiBtX3J1bjsKKyAgICBpbnQgbV93b3JkU3BhY2luZ0FkanVzdG1lbnQ7IC8vIGRlbHRh
IGFkanVzdG1lbnQgKHBpeGVscykgZm9yIGVhY2ggd29yZCBicmVhay4KKyAgICBmbG9hdCBtX3Bh
ZGRpbmc7IC8vIHBpeGVscyB0byBiZSBkaXN0cmlidXRlZCBvdmVyIHRoZSBsaW5lIGF0IHdvcmQg
YnJlYWtzLgorICAgIGZsb2F0IG1fcGFkUGVyV29yZEJyZWFrOyAvLyBwaXhlbHMgdG8gYmUgYWRk
ZWQgdG8gZWFjaCB3b3JkIGJyZWFrLgorICAgIGZsb2F0IG1fcGFkRXJyb3I7IC8vIHxtX3BhZFBl
cldvcmRCcmVha3wgbWlnaHQgaGF2ZSBhIGZyYWN0aW9uYWwgY29tcG9uZW50LgorICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNpbmNlIHdlIG9ubHkgYWRkIGEgd2hvbGUgbnVtYmVyIG9mIHBhZGRp
bmcgcGl4ZWxzIGF0CisgICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCB3b3JkIGJyZWFrIHdl
IGFjY3VtdWxhdGUgZXJyb3IuIFRoaXMgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgLy8g
bnVtYmVyIG9mIHBpeGVscyB0aGF0IHdlIGFyZSBiZWhpbmQgc28gZmFyLgorICAgIGludCBtX2xl
dHRlclNwYWNpbmc7IC8vIHBpeGVscyB0byBiZSBhZGRlZCBhZnRlciBlYWNoIGdseXBoLgorICAg
IFN0cmluZyBtX3NtYWxsQ2Fwc1N0cmluZzsgLy8gc3Vic3RyaW5nIG9mIG1fcnVuIGNvbnZlcnRl
ZCB0byBzbWFsbCBjYXBzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enpfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmE4YWEyZTdkZDRiZmVkYWNlMzhiMGVkZmY1NTdhNjczYWE0YjBmMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0Zv
bnRIYXJmQnV6ei5jcHAKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDcsIDIwMDgsIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAiQ29tcGxleFRleHRDb250
cm9sbGVySGFyZkJ1enouaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhhcmZC
dXp6U2tpYS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRl
ICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJTa1RlbXBsYXRl
cy5oIgorI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKKyNpbmNsdWRlICJTa1V0aWxzLmgiCisKKyNp
bmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ym9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhz
SW5Db21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBp
c0NhbnZhc011bHRpTGF5ZXJlZChTa0NhbnZhcyogY2FudmFzKQoreworICAgIFNrQ2FudmFzOjpM
YXllckl0ZXIgbGF5ZXJJdGVyYXRvcihjYW52YXMsIGZhbHNlKTsKKyAgICBsYXllckl0ZXJhdG9y
Lm5leHQoKTsKKyAgICByZXR1cm4gIWxheWVySXRlcmF0b3IuZG9uZSgpOworfQorCitzdGF0aWMg
dm9pZCBhZGp1c3RUZXh0UmVuZGVyTW9kZShTa1BhaW50KiBwYWludCwgUGxhdGZvcm1Db250ZXh0
U2tpYSogc2tpYUNvbnRleHQpCit7CisgICAgLy8gT3VyIGxheWVycyBvbmx5IGhhdmUgYSBzaW5n
bGUgYWxwaGEgY2hhbm5lbC4gVGhpcyBtZWFucyB0aGF0IHN1YnBpeGVsCisgICAgLy8gcmVuZGVy
ZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9zaXRpZWQgY29ycmVjdGx5IHdoZW4gdGhlIGxheWVyIGlz
CisgICAgLy8gY29sbGFwc2VkLiBUaGVyZWZvcmUsIHN1YnBpeGVsIHRleHQgaXMgZGlzYWJsZWQg
d2hlbiB3ZSBhcmUgZHJhd2luZworICAgIC8vIG9udG8gYSBsYXllciBvciB3aGVuIHRoZSBjb21w
b3NpdG9yIGlzIGJlaW5nIHVzZWQuCisgICAgaWYgKGlzQ2FudmFzTXVsdGlMYXllcmVkKHNraWFD
b250ZXh0LT5jYW52YXMoKSkgfHwgc2tpYUNvbnRleHQtPmlzRHJhd2luZ1RvSW1hZ2VCdWZmZXIo
KSkKKyAgICAgICAgcGFpbnQtPnNldExDRFJlbmRlclRleHQoZmFsc2UpOworfQorCit2b2lkIEZv
bnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsKKyAgICBTa0FTU0VSVChzaXplb2YoR2x5cGhC
dWZmZXJHbHlwaCkgPT0gc2l6ZW9mKHVpbnQxNl90KSk7IC8vIGNvbXBpbGUtdGltZSBhc3NlcnQK
KworICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGdseXBoQnVmZmVyLmdseXBo
cyhmcm9tKTsKKyAgICBTa1NjYWxhciB4ID0gU2tGbG9hdFRvU2NhbGFyKHBvaW50LngoKSk7Cisg
ICAgU2tTY2FsYXIgeSA9IFNrRmxvYXRUb1NjYWxhcihwb2ludC55KCkpOworCisgICAgLy8gRklY
TUU6IHRleHQgcmVuZGVyaW5nIHNwZWVkOgorICAgIC8vIEFuZHJvaWQgaGFzIGNvZGUgaW4gdGhl
aXIgV2ViQ29yZSBmb3JrIHRvIHNwZWNpYWwgY2FzZSB3aGVuIHRoZQorICAgIC8vIEdseXBoQnVm
ZmVyIGhhcyBubyBhZHZhbmNlcyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0cy4gSW4gdGhhdCBjYXNl
IHRoZQorICAgIC8vIHRleHQgZHJhd2luZyBjYW4gcHJvY2VlZCBmYXN0ZXIuIEhvd2V2ZXIsIGl0
J3MgdW5jbGVhciB3aGVuIHRob3NlCisgICAgLy8gcGF0Y2hlcyBtYXkgYmUgdXBzdHJlYW1lZCB0
byBXZWJLaXQgc28gd2UgYWx3YXlzIHVzZSB0aGUgc2xvd2VyIHBhdGgKKyAgICAvLyBoZXJlLgor
ICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2ID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
ZnJvbSk7CisgICAgU2tBdXRvU1RNYWxsb2M8MzIsIFNrUG9pbnQ+IHN0b3JhZ2UobnVtR2x5cGhz
KSwgc3RvcmFnZTIobnVtR2x5cGhzKSwgc3RvcmFnZTMobnVtR2x5cGhzKTsKKyAgICBTa1BvaW50
KiBwb3MgPSBzdG9yYWdlLmdldCgpOworICAgIFNrUG9pbnQqIHZQb3NCZWdpbiA9IHN0b3JhZ2Uy
LmdldCgpOworICAgIFNrUG9pbnQqIHZQb3NFbmQgPSBzdG9yYWdlMy5nZXQoKTsKKworICAgIGJv
b2wgaXNWZXJ0aWNhbCA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWw7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgeworICAgICAg
ICBTa1NjYWxhciBteVdpZHRoID0gU2tGbG9hdFRvU2NhbGFyKGFkdltpXS53aWR0aCgpKTsKKyAg
ICAgICAgcG9zW2ldLnNldCh4LCB5KTsKKyAgICAgICAgaWYgKGlzVmVydGljYWwpIHsKKyAgICAg
ICAgICAgIHZQb3NCZWdpbltpXS5zZXQoeCArIG15V2lkdGgsIHkpOworICAgICAgICAgICAgdlBv
c0VuZFtpXS5zZXQoeCArIG15V2lkdGgsIHkgLSBteVdpZHRoKTsKKyAgICAgICAgfQorICAgICAg
ICB4ICs9IG15V2lkdGg7CisgICAgICAgIHkgKz0gU2tGbG9hdFRvU2NhbGFyKGFkdltpXS5oZWln
aHQoKSk7CisgICAgfQorCisgICAgU2tDYW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCk7CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dE1vZGUgPSBnYy0+
cGxhdGZvcm1Db250ZXh0KCktPmdldFRleHREcmF3aW5nTW9kZSgpOworCisgICAgLy8gV2UgZHJh
dyB0ZXh0IHVwIHRvIHR3byB0aW1lcyAob25jZSBmb3IgZmlsbCwgb25jZSBmb3Igc3Ryb2tlKS4K
KyAgICBpZiAodGV4dE1vZGUgJiBUZXh0TW9kZUZpbGwpIHsKKyAgICAgICAgU2tQYWludCBwYWlu
dDsKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygm
cGFpbnQpOworICAgICAgICBmb250LT5wbGF0Zm9ybURhdGEoKS5zZXR1cFBhaW50KCZwYWludCk7
CisgICAgICAgIGFkanVzdFRleHRSZW5kZXJNb2RlKCZwYWludCwgZ2MtPnBsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1Rl
eHRFbmNvZGluZyk7CisKKyAgICAgICAgaWYgKGlzVmVydGljYWwpIHsKKyAgICAgICAgICAgIFNr
UGF0aCBwYXRoOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsr
aSkgeworICAgICAgICAgICAgICAgIHBhdGgucmVzZXQoKTsKKyAgICAgICAgICAgICAgICBwYXRo
Lm1vdmVUbyh2UG9zQmVnaW5baV0pOworICAgICAgICAgICAgICAgIHBhdGgubGluZVRvKHZQb3NF
bmRbaV0pOworICAgICAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1RleHRPblBhdGgoZ2x5cGhzICsg
aSwgMiwgcGF0aCwgMCwgcGFpbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgPDwgMSwgcG9z
LCBwYWludCk7CisgICAgfQorCisgICAgaWYgKCh0ZXh0TW9kZSAmIFRleHRNb2RlU3Ryb2tlKQor
ICAgICAgICAmJiBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0cm9rZVN0eWxlKCkgIT0gTm9T
dHJva2UKKyAgICAgICAgJiYgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VUaGlja25l
c3MoKSA+IDApIHsKKworICAgICAgICBTa1BhaW50IHBhaW50OworICAgICAgICBnYy0+cGxhdGZv
cm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOworICAgICAg
ICBmb250LT5wbGF0Zm9ybURhdGEoKS5zZXR1cFBhaW50KCZwYWludCk7CisgICAgICAgIGFkanVz
dFRleHRSZW5kZXJNb2RlKCZwYWludCwgZ2MtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAg
cGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisK
KyAgICAgICAgaWYgKHRleHRNb2RlICYgVGV4dE1vZGVGaWxsKSB7CisgICAgICAgICAgICAvLyBJ
ZiB3ZSBhbHNvIGZpbGxlZCwgd2UgZG9uJ3Qgd2FudCB0byBkcmF3IHNoYWRvd3MgdHdpY2UuCisg
ICAgICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBGb250Q2hyb21pdW1XaW4uY3BwOjpwYWludFNr
aWFUZXh0KCkgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgICAgIC8vIFNpbmNlIHdlIHVzZSB0
aGUgbG9vcGVyIGZvciBzaGFkb3dzLCB3ZSByZW1vdmUgaXQgKGlmIGFueSkgbm93LgorICAgICAg
ICAgICAgcGFpbnQuc2V0TG9vcGVyKDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmVy
dGljYWwpIHsKKyAgICAgICAgICAgIFNrUGF0aCBwYXRoOworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgICAgIHBhdGgucmVzZXQo
KTsKKyAgICAgICAgICAgICAgICBwYXRoLm1vdmVUbyh2UG9zQmVnaW5baV0pOworICAgICAgICAg
ICAgICAgIHBhdGgubGluZVRvKHZQb3NFbmRbaV0pOworICAgICAgICAgICAgICAgIGNhbnZhcy0+
ZHJhd1RleHRPblBhdGgoZ2x5cGhzICsgaSwgMiwgcGF0aCwgMCwgcGFpbnQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5
cGhzLCBudW1HbHlwaHMgPDwgMSwgcG9zLCBwYWludCk7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCBzZXR1cEZvclRleHRQYWludGluZyhTa1BhaW50KiBwYWludCwgU2tDb2xvciBjb2xvcikKK3sK
KyAgICBwYWludC0+c2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGlu
Zyk7CisgICAgcGFpbnQtPnNldENvbG9yKGNvbG9yKTsKK30KKwordm9pZCBGb250OjpkcmF3Q29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgVGV4dFJ1biYgcnVuLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0Cit7CisgICAgaWYgKCFydW4ubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
OworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRNb2RlID0gZ2MtPnBsYXRmb3JtQ29udGV4
dCgpLT5nZXRUZXh0RHJhd2luZ01vZGUoKTsKKyAgICBib29sIGZpbGwgPSB0ZXh0TW9kZSAmIFRl
eHRNb2RlRmlsbDsKKyAgICBib29sIHN0cm9rZSA9ICh0ZXh0TW9kZSAmIFRleHRNb2RlU3Ryb2tl
KQorICAgICAgICAgICAgICAgJiYgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VTdHls
ZSgpICE9IE5vU3Ryb2tlCisgICAgICAgICAgICAgICAmJiBnYy0+cGxhdGZvcm1Db250ZXh0KCkt
PmdldFN0cm9rZVRoaWNrbmVzcygpID4gMDsKKworICAgIGlmICghZmlsbCAmJiAhc3Ryb2tlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTa1BhaW50IHN0cm9rZVBhaW50LCBmaWxsUGFpbnQ7Cisg
ICAgaWYgKGZpbGwpIHsKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50
Rm9yRmlsbGluZygmZmlsbFBhaW50KTsKKyAgICAgICAgc2V0dXBGb3JUZXh0UGFpbnRpbmcoJmZp
bGxQYWludCwgZ2MtPmZpbGxDb2xvcigpLnJnYigpKTsKKyAgICB9CisgICAgaWYgKHN0cm9rZSkg
eworICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygm
c3Ryb2tlUGFpbnQsIDAsIDApOworICAgICAgICBzZXR1cEZvclRleHRQYWludGluZygmc3Ryb2tl
UGFpbnQsIGdjLT5zdHJva2VDb2xvcigpLnJnYigpKTsKKyAgICB9CisKKyAgICBDb21wbGV4VGV4
dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIHBvaW50LngoKSwgcG9pbnQueSgpLCB3b3JkU3Bh
Y2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNpb24oKSwgdGhpcyk7CisKKyAgICBp
ZiAocnVuLnJ0bCgpKQorICAgICAgICBjb250cm9sbGVyLnNldHVwRm9yUlRMKCk7CisKKyAgICB3
aGlsZSAoY29udHJvbGxlci5uZXh0U2NyaXB0UnVuKCkpIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlcmUgaXMgYW55IGdseXBoIGZvdW5kIGluIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCisgICAg
ICAgIGludCBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoOworICAgICAgICBjb250cm9sbGVyLmdseXBo
c0ZvclJhbmdlKGZyb20sIHRvLCBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoKTsKKyAgICAgICAgaWYg
KGZyb21HbHlwaCA8IDAgfHwgZ2x5cGhMZW5ndGggPD0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGlmIChmaWxsKSB7CisgICAgICAgICAgICBjb250cm9sbGVyLmZvbnRQbGF0
Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+c2V0dXBQYWludCgmZmlsbFBhaW50KTsKKyAgICAgICAg
ICAgIGFkanVzdFRleHRSZW5kZXJNb2RlKCZmaWxsUGFpbnQsIGdjLT5wbGF0Zm9ybUNvbnRleHQo
KSk7CisgICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGNvbnRyb2xsZXIuZ2x5cGhzKCkg
KyBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoIDw8IDEsIGNvbnRyb2xsZXIucG9zaXRpb25zKCkgKyBm
cm9tR2x5cGgsIGZpbGxQYWludCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3Ryb2tlKSB7
CisgICAgICAgICAgICBjb250cm9sbGVyLmZvbnRQbGF0Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+
c2V0dXBQYWludCgmc3Ryb2tlUGFpbnQpOworICAgICAgICAgICAgYWRqdXN0VGV4dFJlbmRlck1v
ZGUoJnN0cm9rZVBhaW50LCBnYy0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgICAgICAgICAgY2Fu
dmFzLT5kcmF3UG9zVGV4dChjb250cm9sbGVyLmdseXBocygpICsgZnJvbUdseXBoLCBnbHlwaExl
bmd0aCA8PCAxLCBjb250cm9sbGVyLnBvc2l0aW9ucygpICsgZnJvbUdseXBoLCBzdHJva2VQYWlu
dCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NG
b3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRS
dW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9h
dFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIC8qIGZhbGxiYWNrRm9udHMgKi8sIEdseXBoT3ZlcmZsb3cqIC8qIGdseXBoT3ZlcmZs
b3cgKi8pIGNvbnN0Cit7CisgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIocnVu
LCAwLCAwLCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNpb24oKSwg
dGhpcyk7CisgICAgcmV0dXJuIGNvbnRyb2xsZXIud2lkdGhPZkZ1bGxSdW4oKTsKK30KKworLy8g
UmV0dXJuIHRoZSBjb2RlIHBvaW50IGluZGV4IGZvciB0aGUgZ2l2ZW4gfHh8IG9mZnNldCBpbnRv
IHRoZSB0ZXh0IHJ1bi4KK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK3sK
KyAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9yIEhUTUws
IGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVy
cworICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1ZyBodHRwOi8vd2Via2l0
Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgorICAgIGludCB0YXJnZXRY
ID0gc3RhdGljX2Nhc3Q8aW50Pih4RmxvYXQpOworCisgICAgLy8gKE1hYyBjb2RlIGlnbm9yZXMg
aW5jbHVkZVBhcnRpYWxHbHlwaHMsIGFuZCB0aGV5IGRvbid0IGtub3cgd2hhdCBpdCdzCisgICAg
Ly8gc3VwcG9zZWQgdG8gZG8sIHNvIHdlIGp1c3QgaWdub3JlIGl0IGFzIHdlbGwuKQorICAgIENv
bXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHJ1biwgMCwgMCwgd29yZFNwYWNpbmcoKSwg
bGV0dGVyU3BhY2luZygpLCBydW4uZXhwYW5zaW9uKCksIHRoaXMpOworICAgIGlmIChydW4ucnRs
KCkpCisgICAgICAgIGNvbnRyb2xsZXIuc2V0dXBGb3JSVEwoKTsKKyAgICByZXR1cm4gY29udHJv
bGxlci5vZmZzZXRGb3JQb3NpdGlvbih0YXJnZXRYKTsKK30KKworLy8gUmV0dXJuIHRoZSByZWN0
YW5nbGUgZm9yIHNlbGVjdGluZyB0aGUgZ2l2ZW4gcmFuZ2Ugb2YgY29kZS1wb2ludHMgaW4gdGhl
IFRleHRSdW4uCitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7
CisgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIocnVuLCAwLCAwLCB3b3JkU3Bh
Y2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNpb24oKSwgdGhpcyk7CisgICAgaWYg
KHJ1bi5ydGwoKSkKKyAgICAgICAgY29udHJvbGxlci5zZXR1cEZvclJUTCgpOworICAgIHJldHVy
biBjb250cm9sbGVyLnNlbGVjdGlvblJlY3QocG9pbnQsIGhlaWdodCwgZnJvbSwgdG8pOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhh
cmZCdXp6LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDQ1ZTEwNzA0MDhkNTY4MWRmOGJjZTg2NGIxYmYyNzY5
MTgyNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcApAQCAtMCwwICsxLDI1MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRm
b3JtRGF0YS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgorCisjaW5jbHVkZSAi
U2tBZHZhbmNlZFR5cGVmYWNlTWV0cmljcy5oIgorI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNs
dWRlICJTa1R5cGVmYWNlLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+IAor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTa1BhaW50OjpIaW50aW5nIHNraWFIaW50
aW5nID0gU2tQYWludDo6a05vcm1hbF9IaW50aW5nOworc3RhdGljIGJvb2wgaXNTa2lhQW50aUFs
aWFzID0gdHJ1ZTsKK3N0YXRpYyBib29sIGlzU2tpYVN1YnBpeGVsR2x5cGhzID0gZmFsc2U7CisK
K3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0SGludGluZyhTa1BhaW50OjpIaW50aW5nIGhpbnRp
bmcpCit7CisgICAgc2tpYUhpbnRpbmcgPSBoaW50aW5nOworfQorCit2b2lkIEZvbnRQbGF0Zm9y
bURhdGE6OnNldEFudGlBbGlhcyhib29sIGlzQW50aUFsaWFzKQoreworICAgIGlzU2tpYUFudGlB
bGlhcyA9IGlzQW50aUFsaWFzOworfQorCit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldFN1YnBp
eGVsR2x5cGhzKGJvb2wgaXNTdWJwaXhlbEdseXBocykKK3sKKyAgICBpc1NraWFTdWJwaXhlbEds
eXBocyA9IGlzU3VicGl4ZWxHbHlwaHM7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc3JjKQorICAgIDogbV90eXBlZmFjZShz
cmMubV90eXBlZmFjZSkKKyAgICAsIG1fZmFtaWx5KHNyYy5tX2ZhbWlseSkKKyAgICAsIG1fdGV4
dFNpemUoc3JjLm1fdGV4dFNpemUpCisgICAgLCBtX2VtU2l6ZUluRm9udFVuaXRzKHNyYy5tX2Vt
U2l6ZUluRm9udFVuaXRzKQorICAgICwgbV9mYWtlQm9sZChzcmMubV9mYWtlQm9sZCkKKyAgICAs
IG1fZmFrZUl0YWxpYyhzcmMubV9mYWtlSXRhbGljKQorICAgICwgbV9vcmllbnRhdGlvbihzcmMu
bV9vcmllbnRhdGlvbikKKyAgICAsIG1fdGV4dE9yaWVudGF0aW9uKHNyYy5tX3RleHRPcmllbnRh
dGlvbikKKyAgICAsIG1fc3R5bGUoc3JjLm1fc3R5bGUpCisgICAgLCBtX2hhcmZidXp6RmFjZShz
cmMubV9oYXJmYnV6ekZhY2UpCit7CisgICAgU2tTYWZlUmVmKG1fdHlwZWZhY2UpOworfQorCitG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKFNrVHlwZWZhY2UqIHRmLCBjb25zdCBj
aGFyKiBmYW1pbHksIGZsb2F0IHRleHRTaXplLCBib29sIGZha2VCb2xkLCBib29sIGZha2VJdGFs
aWMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgVGV4dE9yaWVudGF0aW9uIHRleHRPcmll
bnRhdGlvbikKKyAgICA6IG1fdHlwZWZhY2UodGYpCisgICAgLCBtX2ZhbWlseShmYW1pbHkpCisg
ICAgLCBtX3RleHRTaXplKHRleHRTaXplKQorICAgICwgbV9lbVNpemVJbkZvbnRVbml0cygwKQor
ICAgICwgbV9mYWtlQm9sZChmYWtlQm9sZCkKKyAgICAsIG1fZmFrZUl0YWxpYyhmYWtlSXRhbGlj
KQorICAgICwgbV9vcmllbnRhdGlvbihvcmllbnRhdGlvbikKKyAgICAsIG1fdGV4dE9yaWVudGF0
aW9uKHRleHRPcmllbnRhdGlvbikKK3sKKyAgICBTa1NhZmVSZWYobV90eXBlZmFjZSk7CisgICAg
cXVlcnlTeXN0ZW1Gb3JSZW5kZXJTdHlsZSgpOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYywgZmxvYXQgdGV4dFNpemUp
CisgICAgOiBtX3R5cGVmYWNlKHNyYy5tX3R5cGVmYWNlKQorICAgICwgbV9mYW1pbHkoc3JjLm1f
ZmFtaWx5KQorICAgICwgbV90ZXh0U2l6ZSh0ZXh0U2l6ZSkKKyAgICAsIG1fZW1TaXplSW5Gb250
VW5pdHMoc3JjLm1fZW1TaXplSW5Gb250VW5pdHMpCisgICAgLCBtX2Zha2VCb2xkKHNyYy5tX2Zh
a2VCb2xkKQorICAgICwgbV9mYWtlSXRhbGljKHNyYy5tX2Zha2VJdGFsaWMpCisgICAgLCBtX29y
aWVudGF0aW9uKHNyYy5tX29yaWVudGF0aW9uKQorICAgICwgbV90ZXh0T3JpZW50YXRpb24oc3Jj
Lm1fdGV4dE9yaWVudGF0aW9uKQorICAgICwgbV9oYXJmYnV6ekZhY2Uoc3JjLm1faGFyZmJ1enpG
YWNlKQoreworICAgIFNrU2FmZVJlZihtX3R5cGVmYWNlKTsKKyAgICBxdWVyeVN5c3RlbUZvclJl
bmRlclN0eWxlKCk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkK
K3sKKyAgICBTa1NhZmVVbnJlZihtX3R5cGVmYWNlKTsKK30KKworaW50IEZvbnRQbGF0Zm9ybURh
dGE6OmVtU2l6ZUluRm9udFVuaXRzKCkgY29uc3QKK3sKKyAgICBpZiAobV9lbVNpemVJbkZvbnRV
bml0cykKKyAgICAgICAgcmV0dXJuIG1fZW1TaXplSW5Gb250VW5pdHM7CisKKyAgICBTa0FkdmFu
Y2VkVHlwZWZhY2VNZXRyaWNzKiBtZXRyaWNzID0gbV90eXBlZmFjZS0+Z2V0QWR2YW5jZWRUeXBl
ZmFjZU1ldHJpY3MoU2tBZHZhbmNlZFR5cGVmYWNlTWV0cmljczo6a05vX1BlckdseXBoSW5mbyk7
CisgICAgbV9lbVNpemVJbkZvbnRVbml0cyA9IG1ldHJpY3MtPmZFbVNpemU7CisgICAgbWV0cmlj
cy0+dW5yZWYoKTsKKyAgICByZXR1cm4gbV9lbVNpemVJbkZvbnRVbml0czsKK30KKworRm9udFBs
YXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHNyYykKK3sKKyAgICBTa1JlZkNudF9TYWZlQXNzaWduKG1fdHlwZWZhY2UsIHNyYy5t
X3R5cGVmYWNlKTsKKworICAgIG1fZmFtaWx5ID0gc3JjLm1fZmFtaWx5OworICAgIG1fdGV4dFNp
emUgPSBzcmMubV90ZXh0U2l6ZTsKKyAgICBtX2Zha2VCb2xkID0gc3JjLm1fZmFrZUJvbGQ7Cisg
ICAgbV9mYWtlSXRhbGljID0gc3JjLm1fZmFrZUl0YWxpYzsKKyAgICBtX2hhcmZidXp6RmFjZSA9
IHNyYy5tX2hhcmZidXp6RmFjZTsKKyAgICBtX29yaWVudGF0aW9uID0gc3JjLm1fb3JpZW50YXRp
b247CisgICAgbV90ZXh0T3JpZW50YXRpb24gPSBzcmMubV90ZXh0T3JpZW50YXRpb247CisgICAg
bV9zdHlsZSA9IHNyYy5tX3N0eWxlOworICAgIG1fZW1TaXplSW5Gb250VW5pdHMgPSBzcmMubV9l
bVNpemVJbkZvbnRVbml0czsKKworICAgIHJldHVybiAqdGhpczsKK30KKworI2lmbmRlZiBOREVC
VUcKK1N0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorI2VuZGlmCisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0
dXBQYWludChTa1BhaW50KiBwYWludCkgY29uc3QKK3sKKyAgICBjb25zdCBmbG9hdCB0cyA9IG1f
dGV4dFNpemUgPj0gMCA/IG1fdGV4dFNpemUgOiAxMjsKKworICAgIHBhaW50LT5zZXRBbnRpQWxp
YXMobV9zdHlsZS51c2VBbnRpQWxpYXMgPT0gRm9udFJlbmRlclN0eWxlOjpOb1ByZWZlcmVuY2Ug
PyBpc1NraWFBbnRpQWxpYXMgOiBtX3N0eWxlLnVzZUFudGlBbGlhcyk7CisgICAgc3dpdGNoICht
X3N0eWxlLnVzZUhpbnRpbmcpIHsKKyAgICBjYXNlIEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJl
bmNlOgorICAgICAgICBwYWludC0+c2V0SGludGluZyhza2lhSGludGluZyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgMDoKKyAgICAgICAgcGFpbnQtPnNldEhpbnRpbmcoU2tQYWludDo6a05v
X0hpbnRpbmcpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBwYWludC0+
c2V0SGludGluZyhzdGF0aWNfY2FzdDxTa1BhaW50OjpIaW50aW5nPihtX3N0eWxlLmhpbnRTdHls
ZSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBwYWludC0+c2V0RW1iZWRkZWRCaXRt
YXBUZXh0KG1fc3R5bGUudXNlQml0bWFwcyk7CisgICAgcGFpbnQtPnNldFRleHRTaXplKFNrRmxv
YXRUb1NjYWxhcih0cykpOworICAgIHBhaW50LT5zZXRUeXBlZmFjZShtX3R5cGVmYWNlKTsKKyAg
ICBwYWludC0+c2V0RmFrZUJvbGRUZXh0KG1fZmFrZUJvbGQpOworICAgIHBhaW50LT5zZXRUZXh0
U2tld1gobV9mYWtlSXRhbGljID8gLVNLX1NjYWxhcjEgLyA0IDogMCk7CisgICAgcGFpbnQtPnNl
dEF1dG9oaW50ZWQobV9zdHlsZS51c2VBdXRvSGludCk7CisKKyAgICBpZiAobV9zdHlsZS51c2VB
bnRpQWxpYXMgPT0gMSB8fCAobV9zdHlsZS51c2VBbnRpQWxpYXMgPT0gRm9udFJlbmRlclN0eWxl
OjpOb1ByZWZlcmVuY2UgJiYgaXNTa2lhQW50aUFsaWFzKSkKKyAgICAgICAgcGFpbnQtPnNldExD
RFJlbmRlclRleHQobV9zdHlsZS51c2VTdWJwaXhlbCA9PSBGb250UmVuZGVyU3R5bGU6Ok5vUHJl
ZmVyZW5jZSA/IGlzU2tpYVN1YnBpeGVsR2x5cGhzIDogbV9zdHlsZS51c2VTdWJwaXhlbCk7Cit9
CisKK1NrRm9udElEIEZvbnRQbGF0Zm9ybURhdGE6OnVuaXF1ZUlEKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV90eXBlZmFjZS0+dW5pcXVlSUQoKTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRh
OjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGEpIGNvbnN0Cit7CisgICAgLy8g
SWYgZWl0aGVyIG9mIHRoZSB0eXBlZmFjZSBwb2ludGVycyBhcmUgaW52YWxpZCAoZWl0aGVyIDAg
b3IgdGhlCisgICAgLy8gc3BlY2lhbCBkZWxldGVkIHZhbHVlKSB0aGVuIHdlIHRlc3QgZm9yIHBv
aW50ZXIgZXF1YWxpdHkuIE90aGVyd2lzZSwgd2UKKyAgICAvLyBjYWxsIFNrVHlwZWZhY2U6OkVx
dWFsIG9uIHRoZSB2YWxpZCBwb2ludGVycy4KKyAgICBib29sIHR5cGVmYWNlc0VxdWFsOworICAg
IGlmIChtX3R5cGVmYWNlID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKQorICAgICAgICB8
fCBhLm1fdHlwZWZhY2UgPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpCisgICAgICAgIHx8
ICFtX3R5cGVmYWNlCisgICAgICAgIHx8ICFhLm1fdHlwZWZhY2UpCisgICAgICAgIHR5cGVmYWNl
c0VxdWFsID0gbV90eXBlZmFjZSA9PSBhLm1fdHlwZWZhY2U7CisgICAgZWxzZQorICAgICAgICB0
eXBlZmFjZXNFcXVhbCA9IFNrVHlwZWZhY2U6OkVxdWFsKG1fdHlwZWZhY2UsIGEubV90eXBlZmFj
ZSk7CisKKyAgICByZXR1cm4gdHlwZWZhY2VzRXF1YWwgCisgICAgICAgICYmIG1fdGV4dFNpemUg
PT0gYS5tX3RleHRTaXplCisgICAgICAgICYmIG1fZmFrZUJvbGQgPT0gYS5tX2Zha2VCb2xkCisg
ICAgICAgICYmIG1fZmFrZUl0YWxpYyA9PSBhLm1fZmFrZUl0YWxpYworICAgICAgICAmJiBtX29y
aWVudGF0aW9uID09IGEubV9vcmllbnRhdGlvbgorICAgICAgICAmJiBtX3RleHRPcmllbnRhdGlv
biA9PSBhLm1fdGV4dE9yaWVudGF0aW9uCisgICAgICAgICYmIG1fc3R5bGUgPT0gYS5tX3N0eWxl
OworfQorCit1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBoID0gU2tUeXBlZmFjZTo6VW5pcXVlSUQobV90eXBlZmFjZSk7CisgICAgaCBePSAw
eDAxMDEwMTAxICogKChzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dE9yaWVudGF0aW9uKSA8PCAzKSB8
IChzdGF0aWNfY2FzdDxpbnQ+KG1fb3JpZW50YXRpb24pIDw8IDIpIHwgKHN0YXRpY19jYXN0PGlu
dD4obV9mYWtlQm9sZCkgPDwgMSkgfCBzdGF0aWNfY2FzdDxpbnQ+KG1fZmFrZUl0YWxpYykpOwor
CisgICAgLy8gVGhpcyBtZW1jcHkgaXMgdG8gYXZvaWQgYSByZWludGVycHJldF9jYXN0IHRoYXQg
YnJlYWtzIHN0cmljdC1hbGlhc2luZworICAgIC8vIHJ1bGVzLiBNZW1jcHkgaXMgZ2VuZXJhbGx5
IG9wdGltaXplZCBlbm91Z2ggc28gdGhhdCBwZXJmb3JtYW5jZSBkb2Vzbid0CisgICAgLy8gbWF0
dGVyIGhlcmUuCisgICAgdWludDMyX3QgdGV4dFNpemVCeXRlczsKKyAgICBtZW1jcHkoJnRleHRT
aXplQnl0ZXMsICZtX3RleHRTaXplLCBzaXplb2YodWludDMyX3QpKTsKKyAgICBoIF49IHRleHRT
aXplQnl0ZXM7CisKKyAgICByZXR1cm4gaDsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpp
c0ZpeGVkUGl0Y2goKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitIYXJmYnV6ekZhY2UqIEZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFj
ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hhcmZidXp6RmFjZSkKKyAgICAgICAgbV9oYXJmYnV6
ekZhY2UgPSBIYXJmYnV6ekZhY2U6OmNyZWF0ZShjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEq
Pih0aGlzKSk7CisKKyAgICByZXR1cm4gbV9oYXJmYnV6ekZhY2UuZ2V0KCk7Cit9CisKK3ZvaWQg
Rm9udFBsYXRmb3JtRGF0YTo6cXVlcnlTeXN0ZW1Gb3JSZW5kZXJTdHlsZSgpCit7CisgICAgaWYg
KCFtX2ZhbWlseS5sZW5ndGgoKSkgeworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgZmFtaWx5
IGZvciB0aGlzLiBQcm9iYWJseSBiZWNhdXNlIGl0J3MgYSB3ZWJmb250LiBXZQorICAgICAgICAv
LyBzZXQgYWxsIHRoZSB2YWx1ZXMgdG8gJ25vIHByZWZlcmVuY2UnIGFuZCB0YWtlIHRoZSBkZWZh
dWx0cyBwYXNzZWQKKyAgICAgICAgLy8gaW4gZnJvbSBYU0VUVElOR1MuCisgICAgICAgIG1fc3R5
bGUudXNlQml0bWFwcyA9IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlOworICAgICAgICBt
X3N0eWxlLnVzZUF1dG9IaW50ID0gRm9udFJlbmRlclN0eWxlOjpOb1ByZWZlcmVuY2U7CisgICAg
ICAgIG1fc3R5bGUudXNlSGludGluZyA9IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlOwor
ICAgICAgICBtX3N0eWxlLnVzZUFudGlBbGlhcyA9IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJl
bmNlOworICAgICAgICBtX3N0eWxlLnVzZVN1YnBpeGVsID0gRm9udFJlbmRlclN0eWxlOjpOb1By
ZWZlcmVuY2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6
OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKG1fZmFtaWx5LmRhdGEoKSwgKCgoaW50KW1fdGV4dFNp
emUpIDw8IDIpIHwgKG1fdHlwZWZhY2UtPnN0eWxlKCkgJiAzKSwgJm1fc3R5bGUpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6
ei5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ4NzlmMmUyZTU3NzdmNzk3ZGI3YmE1ZTY0OTRmMTdlYmE1YzE3MWYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6el9oCisjZGVmaW5lIEZvbnRQ
bGF0Zm9ybURhdGFIYXJmQnV6el9oCisKKyNpbmNsdWRlICJGb250T3JpZW50YXRpb24uaCIKKyNp
bmNsdWRlICJGb250UmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJIYXJmQnV6elNraWEuaCIKKyNp
bmNsdWRlICJTa1BhaW50LmgiCisjaW5jbHVkZSAiVGV4dE9yaWVudGF0aW9uLmgiCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KKworY2xh
c3MgU2tUeXBlZmFjZTsKK3R5cGVkZWYgdWludDMyX3QgU2tGb250SUQ7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRm9udERlc2NyaXB0aW9uOworCisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gRm9udFBsYXRmb3JtRGF0YSBpcyB0aGUgaGFuZGxlIHdoaWNoIFdlYktpdCBoYXMg
b24gYSBzcGVjaWZpYyBmYWNlLiBBIGZhY2UKKy8vIGlzIHRoZSB0dXBsZSBvZiAoZm9udCwgc2l6
ZSwgLi4uZXRjKS4gSGVyZSB3ZSBhcmUganVzdCB3cmFwcGluZyBhIFNraWEKKy8vIFNrVHlwZWZh
Y2UgcG9pbnRlciBhbmQgZGVhbGluZyB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZXRjLgor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGEgeworcHVibGlj
OgorICAgIC8vIFVzZWQgZm9yIGRlbGV0ZWQgdmFsdWVzIGluIHRoZSBmb250IGNhY2hlJ3MgaGFz
aCB0YWJsZXMuIFRoZSBoYXNoIHRhYmxlCisgICAgLy8gd2lsbCBjcmVhdGUgdXMgd2l0aCB0aGlz
IHN0cnVjdHVyZSwgYW5kIGl0IHdpbGwgY29tcGFyZSBvdGhlciB2YWx1ZXMKKyAgICAvLyB0byB0
aGlzICJEZWxldGVkIiBvbmUuIEl0IGV4cGVjdHMgdGhlIERlbGV0ZWQgb25lIHRvIGJlIGRpZmZl
cmVudGlhYmxlCisgICAgLy8gZnJvbSB0aGUgMCBvbmUgKGNyZWF0ZWQgd2l0aCB0aGUgZW1wdHkg
Y29uc3RydWN0b3IpLCBzbyB3ZSBjYW4ndCBqdXN0CisgICAgLy8gc2V0IGV2ZXJ5dGhpbmcgdG8g
MC4KKyAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkK
KyAgICAgICAgOiBtX3R5cGVmYWNlKGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkKKyAgICAg
ICAgLCBtX3RleHRTaXplKDApCisgICAgICAgICwgbV9lbVNpemVJbkZvbnRVbml0cygwKQorICAg
ICAgICAsIG1fZmFrZUJvbGQoZmFsc2UpCisgICAgICAgICwgbV9mYWtlSXRhbGljKGZhbHNlKQor
ICAgICAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKKyAgICAgICAgLCBtX3RleHRPcmll
bnRhdGlvbihUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KQorICAgICAgICB7IH0KKworICAg
IEZvbnRQbGF0Zm9ybURhdGEoKQorICAgICAgICA6IG1fdHlwZWZhY2UoMCkKKyAgICAgICAgLCBt
X3RleHRTaXplKDApCisgICAgICAgICwgbV9lbVNpemVJbkZvbnRVbml0cygwKQorICAgICAgICAs
IG1fZmFrZUJvbGQoZmFsc2UpCisgICAgICAgICwgbV9mYWtlSXRhbGljKGZhbHNlKQorICAgICAg
ICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKKyAgICAgICAgLCBtX3RleHRPcmllbnRhdGlv
bihUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KQorICAgICAgICB7IH0KKworICAgIEZvbnRQ
bGF0Zm9ybURhdGEoZmxvYXQgdGV4dFNpemUsIGJvb2wgZmFrZUJvbGQsIGJvb2wgZmFrZUl0YWxp
YykKKyAgICAgICAgOiBtX3R5cGVmYWNlKDApCisgICAgICAgICwgbV90ZXh0U2l6ZSh0ZXh0U2l6
ZSkKKyAgICAgICAgLCBtX2VtU2l6ZUluRm9udFVuaXRzKDApCisgICAgICAgICwgbV9mYWtlQm9s
ZChmYWtlQm9sZCkKKyAgICAgICAgLCBtX2Zha2VJdGFsaWMoZmFrZUl0YWxpYykKKyAgICAgICAg
LCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCisgICAgICAgICwgbV90ZXh0T3JpZW50YXRpb24o
VGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkKKyAgICAgICAgeyB9CisKKyAgICBGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKyAgICBGb250UGxhdGZvcm1EYXRh
KFNrVHlwZWZhY2UqLCBjb25zdCBjaGFyKiBuYW1lLCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBmYWtl
Qm9sZCwgYm9vbCBmYWtlSXRhbGljLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBUZXh0
T3JpZW50YXRpb24gPSBUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KTsKKyAgICBGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYywgZmxvYXQgdGV4dFNpemUpOwor
ICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
Ly8gUmV0dXJuIHRydWUgaWZmIHRoaXMgZm9udCBpcyBtb25vc3BhY2VkIChpLmUuIGV2ZXJ5IGds
eXBoIGhhcyBhbiBlcXVhbCB4CisgICAgLy8gYWR2YW5jZSkKKyAgICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKKworICAgIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyBTZXR1cCBhIFNraWEgcGFpbnRpbmcgY29udGV4dCB0byB1c2UgdGhpcyBm
b250LgorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2b2lkIHNldHVwUGFpbnQoU2tQYWlu
dCopIGNvbnN0OworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFJldHVybiBTa2lh
J3MgdW5pcXVlIGlkIGZvciB0aGlzIGZvbnQuIFRoaXMgZW5jb2RlcyBib3RoIHRoZSBzdHlsZSBh
bmQKKyAgICAvLyB0aGUgZm9udCdzIGZpbGUgbmFtZSBzbyByZWZlcnMgdG8gYSBzaW5nbGUgZmFj
ZS4KKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU2tGb250SUQgdW5pcXVlSUQoKSBjb25z
dDsKKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKKyAgICBmbG9hdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0U2l6ZTsgfQorICAgIGludCBlbVNpemVJbkZvbnRVbml0cygpIGNvbnN0
OworCisgICAgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9v
cmllbnRhdGlvbjsgfQorICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQorICAgIHZvaWQgc2V0
RmFrZUJvbGQoYm9vbCBmYWtlQm9sZCkgeyBtX2Zha2VCb2xkID0gZmFrZUJvbGQ7IH0KKyAgICB2
b2lkIHNldEZha2VJdGFsaWMoYm9vbCBmYWtlSXRhbGljKSB7IG1fZmFrZUl0YWxpYyA9IGZha2VJ
dGFsaWM7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNv
bnN0OworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1E
YXRhJik7CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZWZhY2UgPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOyB9CisKKyNpZm5kZWYg
TkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworICAgIEhh
cmZidXp6RmFjZSogaGFyZmJ1enpGYWNlKCkgY29uc3Q7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgLy8gR2xvYmFsIGZvbnQgcHJlZmVyZW5jZXMuLi4KKworICAgIHN0YXRpYyB2b2lk
IHNldEhpbnRpbmcoU2tQYWludDo6SGludGluZyk7CisgICAgc3RhdGljIHZvaWQgc2V0QW50aUFs
aWFzKGJvb2wgb24pOworICAgIHN0YXRpYyB2b2lkIHNldFN1YnBpeGVsR2x5cGhzKGJvb2wgb24p
OworCitwcml2YXRlOgorICAgIHZvaWQgcXVlcnlTeXN0ZW1Gb3JSZW5kZXJTdHlsZSgpOworCisg
ICAgLy8gRklYTUU6IENvdWxkIFNrQXV0b1VucmVmIGJlIHVzZWQgaGVyZT8KKyAgICBTa1R5cGVm
YWNlKiBtX3R5cGVmYWNlOworICAgIENTdHJpbmcgbV9mYW1pbHk7CisgICAgZmxvYXQgbV90ZXh0
U2l6ZTsKKyAgICBtdXRhYmxlIGludCBtX2VtU2l6ZUluRm9udFVuaXRzOworICAgIGJvb2wgbV9m
YWtlQm9sZDsKKyAgICBib29sIG1fZmFrZUl0YWxpYzsKKyAgICBGb250T3JpZW50YXRpb24gbV9v
cmllbnRhdGlvbjsKKyAgICBUZXh0T3JpZW50YXRpb24gbV90ZXh0T3JpZW50YXRpb247CisgICAg
Rm9udFJlbmRlclN0eWxlIG1fc3R5bGU7CisgICAgbXV0YWJsZSBSZWZQdHI8SGFyZmJ1enpGYWNl
PiBtX2hhcmZidXp6RmFjZTsKKworICAgIFNrVHlwZWZhY2UqIGhhc2hUYWJsZURlbGV0ZWRGb250
VmFsdWUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFNrVHlwZWZhY2UqPigtMSk7
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIGlmZGVmIEZvbnRQ
bGF0Zm9ybURhdGFIYXJmQnV6el9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjhl
YTYxOTI0NWY4NjZlNWJkMGQ1NzhkMDEwNDg0NDUyNTg0YzJiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNw
cApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIYXJmQnV6
elNraWEuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlNr
Rm9udEhvc3QuaCIKKyNpbmNsdWRlICJTa1BhaW50LmgiCisjaW5jbHVkZSAiU2tQYXRoLmgiCisj
aW5jbHVkZSAiU2tQb2ludC5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrVXRp
bHMuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5
UHRyLmg+CisKK2V4dGVybiAiQyIgeworI2luY2x1ZGUgImhhcmZidXp6LXNoYXBlci5oIgorfQor
CisvLyBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgY2FsbGJhY2tzIHdoaWNoIEhhcmZidXp6IHJl
cXVpcmVzIGJ5IHVzaW5nIFNraWEKKy8vIGNhbGxzLiBTZWUgdGhlIEhhcmZidXp6IHNvdXJjZSBm
b3IgcmVmZXJlbmNlcyBhYm91dCB3aGF0IHRoZXNlIGNhbGxiYWNrcyBkby4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgSEJfRml4ZWQgU2tpYVNjYWxhclRvSGFyZmJ1enpGaXhlZChT
a1NjYWxhciB2YWx1ZSkKK3sKKyAgICAvLyBIQl9GaXhlZCBpcyBhIDI2LjYgZml4ZWQgcG9pbnQg
Zm9ybWF0LgorICAgIHJldHVybiB2YWx1ZSAqIDY0OworfQorCitzdGF0aWMgSEJfQm9vbCBzdHJp
bmdUb0dseXBocyhIQl9Gb250IGhiRm9udCwgY29uc3QgSEJfVUNoYXIxNiogY2hhcmFjdGVycywg
aGJfdWludDMyIGxlbmd0aCwgSEJfR2x5cGgqIGdseXBocywgaGJfdWludDMyKiBnbHlwaHNTaXpl
LCBIQl9Cb29sIGlzUlRMKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWludGVy
cHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihoYkZvbnQtPnVzZXJEYXRhKTsKKyAgICBTa1Bh
aW50IHBhaW50OworCisgICAgZm9udC0+c2V0dXBQYWludCgmcGFpbnQpOworICAgIHBhaW50LnNl
dFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZfVGV4dEVuY29kaW5nKTsKKworICAgIHVuc2ln
bmVkIGNvZGVwb2ludHMgPSAwOworICAgIGZvciAoaGJfdWludDMyIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgaWYgKCFTa1VURjE2X0lzSGlnaFN1cnJvZ2F0ZShjaGFyYWN0ZXJz
W2ldKSkKKyAgICAgICAgICAgIGNvZGVwb2ludHMrKzsKKyAgICAgICAgaWYgKGNvZGVwb2ludHMg
PiAqZ2x5cGhzU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGludCBu
dW1HbHlwaHMgPSBwYWludC50ZXh0VG9HbHlwaHMoY2hhcmFjdGVycywgbGVuZ3RoICogc2l6ZW9m
KHVpbnQxNl90KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGdseXBocykpOworCisgICAg
Ly8gSEJfR2x5cGggaXMgMzItYml0LCBidXQgU2tpYSBvdXRwdXRzIG9ubHkgMTYtYml0IG51bWJl
cnMuIFNvIG91cgorICAgIC8vIHxnbHlwaHN8IGFycmF5IG5lZWRzIHRvIGJlIGNvbnZlcnRlZC4K
KyAgICBmb3IgKGludCBpID0gbnVtR2x5cGhzIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAg
dWludDE2X3QgdmFsdWU7CisgICAgICAgIC8vIFdlIHVzZSBhIG1lbWNweSB0byBhdm9pZCBicmVh
a2luZyBzdHJpY3QgYWxpYXNpbmcgcnVsZXMuCisgICAgICAgIG1lbWNweSgmdmFsdWUsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGdseXBocykgKyBzaXplb2YodWludDE2X3QpICogaSwgc2l6ZW9m
KHVpbnQxNl90KSk7CisgICAgICAgIGdseXBoc1tpXSA9IHZhbHVlOworICAgIH0KKworICAgICpn
bHlwaHNTaXplID0gbnVtR2x5cGhzOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBn
bHlwaHNUb0FkdmFuY2VzKEhCX0ZvbnQgaGJGb250LCBjb25zdCBIQl9HbHlwaCogZ2x5cGhzLCBo
Yl91aW50MzIgbnVtR2x5cGhzLCBIQl9GaXhlZCogYWR2YW5jZXMsIGludCBmbGFncykKK3sKKyAg
ICBGb250UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1E
YXRhKj4oaGJGb250LT51c2VyRGF0YSk7CisgICAgU2tQYWludCBwYWludDsKKworICAgIGZvbnQt
PnNldHVwUGFpbnQoJnBhaW50KTsKKyAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6
a0dseXBoSURfVGV4dEVuY29kaW5nKTsKKworICAgIE93bkFycmF5UHRyPHVpbnQxNl90PiBnbHlw
aHMxNiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQxNl90W251bUdseXBoc10pOworICAgIGlmICgh
Z2x5cGhzMTYuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtR2x5cGhzOyArK2kpCisgICAgICAgIGdseXBoczE2W2ldID0gZ2x5cGhzW2ldOwor
ICAgIHBhaW50LmdldFRleHRXaWR0aHMoZ2x5cGhzMTYuZ2V0KCksIG51bUdseXBocyAqIHNpemVv
Zih1aW50MTZfdCksIHJlaW50ZXJwcmV0X2Nhc3Q8U2tTY2FsYXIqPihhZHZhbmNlcykpOworCisg
ICAgLy8gVGhlIHxhZHZhbmNlc3wgdmFsdWVzIHdoaWNoIFNraWEgb3V0cHV0cyBhcmUgU2tTY2Fs
YXJzLCB3aGljaCBhcmUgZmxvYXRzCisgICAgLy8gaW4gQ2hyb21pdW0uIEhvd2V2ZXIsIEhhcmZi
dXp6IHdhbnRzIHRoZW0gaW4gMjYuNiBmaXhlZCBwb2ludCBmb3JtYXQuCisgICAgLy8gVGhlc2Ug
dHdvIGZvcm1hdHMgYXJlIGJvdGggMzItYml0cyBsb25nLgorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICBmbG9hdCB2YWx1ZTsKKyAgICAgICAg
Ly8gV2UgdXNlIGEgbWVtY3B5IHRvIGF2b2lkIGJyZWFraW5nIHN0cmljdCBhbGlhc2luZyBydWxl
cy4KKyAgICAgICAgbWVtY3B5KCZ2YWx1ZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYWR2YW5j
ZXMpICsgc2l6ZW9mKGZsb2F0KSAqIGksIHNpemVvZihmbG9hdCkpOworICAgICAgICBhZHZhbmNl
c1tpXSA9IFNraWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQodmFsdWUpOworICAgIH0KK30KKworc3Rh
dGljIEhCX0Jvb2wgY2FuUmVuZGVyKEhCX0ZvbnQgaGJGb250LCBjb25zdCBIQl9VQ2hhcjE2KiBj
aGFyYWN0ZXJzLCBoYl91aW50MzIgbGVuZ3RoKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZv
bnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihoYkZvbnQtPnVzZXJEYXRh
KTsKKyAgICBTa1BhaW50IHBhaW50OworCisgICAgZm9udC0+c2V0dXBQYWludCgmcGFpbnQpOwor
ICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZfVGV4dEVuY29kaW5nKTsK
KworICAgIE93bkFycmF5UHRyPHVpbnQxNl90PiBnbHlwaHMxNiA9IGFkb3B0QXJyYXlQdHIobmV3
IHVpbnQxNl90W2xlbmd0aF0pOworICAgIGlmICghZ2x5cGhzMTYuZ2V0KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIGludCBudW1HbHlwaHMgPSBwYWludC50ZXh0VG9HbHlwaHMoY2hhcmFjdGVy
cywgbGVuZ3RoICogc2l6ZW9mKHVpbnQxNl90KSwgZ2x5cGhzMTYuZ2V0KCkpOworCisgICAgYm9v
bCBjYW5SZW5kZXIgPSB0cnVlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyAr
K2kpIHsKKyAgICAgICAgaWYgKCFnbHlwaHMxNltpXSkgeworICAgICAgICAgICAgY2FuUmVuZGVy
ID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBjYW5SZW5kZXI7Cit9CisKK3N0YXRpYyBIQl9FcnJvciBnZXRPdXRsaW5lUG9pbnQoSEJf
Rm9udCBoYkZvbnQsIEhCX0dseXBoIGdseXBoLCBpbnQgZmxhZ3MsIGhiX3VpbnQzMiBwb2ludCwg
SEJfRml4ZWQqIHhQb3MsIEhCX0ZpeGVkKiB5UG9zLCBoYl91aW50MzIqIHJlc3VsdGluZ051bVBv
aW50cykKK3sKKyAgICAvLyBXZSBjYW5ub3QgcHJvdmlkZSB0aGUgcmlnaHQgcG9zaXRpb24gb2Yg
b3V0bGluZSBwb2ludHMgZnJvbSBwb2ludCBpbmRleC4KKyAgICAvLyBKdXN0IHJldHVybiBIQl9F
cnJfT2sgd2l0aCByZXN1bHRpbmdOdW1Qb2ludHMgPSAwIHNvIHRoYXQgaGFyZmJ1enoKKyAgICAv
LyBmYWxscyBiYWNrIG9uIHVzaW5nIGRlc2lnbiBjb29yZGluYXRlIHZhbHVlIHBhaXIuCisgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDA3OSBmb3Ig
bW9yZSBkZXRhaWxzLgorICAgICpyZXN1bHRpbmdOdW1Qb2ludHMgPSAwOworICAgIHJldHVybiBI
Ql9FcnJfT2s7Cit9CisKK3N0YXRpYyB2b2lkIGdldEdseXBoTWV0cmljcyhIQl9Gb250IGhiRm9u
dCwgSEJfR2x5cGggZ2x5cGgsIEhCX0dseXBoTWV0cmljcyogbWV0cmljcykKK3sKKyAgICBGb250
UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4o
aGJGb250LT51c2VyRGF0YSk7CisgICAgU2tQYWludCBwYWludDsKKworICAgIGZvbnQtPnNldHVw
UGFpbnQoJnBhaW50KTsKKyAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a0dseXBo
SURfVGV4dEVuY29kaW5nKTsKKyAgICB1aW50MTZfdCBnbHlwaDE2ID0gZ2x5cGg7CisgICAgU2tT
Y2FsYXIgd2lkdGg7CisgICAgU2tSZWN0IGJvdW5kczsKKyAgICBwYWludC5nZXRUZXh0V2lkdGhz
KCZnbHlwaDE2LCBzaXplb2YoZ2x5cGgxNiksICZ3aWR0aCwgJmJvdW5kcyk7CisKKyAgICBtZXRy
aWNzLT54ID0gU2tpYVNjYWxhclRvSGFyZmJ1enpGaXhlZChib3VuZHMuZkxlZnQpOworICAgIG1l
dHJpY3MtPnkgPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVkKGJvdW5kcy5mVG9wKTsKKyAgICBt
ZXRyaWNzLT53aWR0aCA9IFNraWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQoYm91bmRzLndpZHRoKCkp
OworICAgIG1ldHJpY3MtPmhlaWdodCA9IFNraWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQoYm91bmRz
LmhlaWdodCgpKTsKKworICAgIG1ldHJpY3MtPnhPZmZzZXQgPSBTa2lhU2NhbGFyVG9IYXJmYnV6
ekZpeGVkKHdpZHRoKTsKKyAgICAvLyBXZSBjYW4ndCBhY3R1YWxseSBnZXQgdGhlIHx5fCBjb3Jy
ZWN0IGJlY2F1c2UgU2tpYSBkb2Vzbid0IGV4cG9ydAorICAgIC8vIHRoZSB2ZXJ0aWNhbCBhZHZh
bmNlLiBIb3dldmVyLCBub3Igd2UgZG8gZXZlciByZW5kZXIgdmVydGljYWwgdGV4dCBhdAorICAg
IC8vIHRoZSBtb21lbnQgc28gaXQncyB1bmltcG9ydGFudC4KKyAgICBtZXRyaWNzLT55T2Zmc2V0
ID0gMDsKK30KKworc3RhdGljIEhCX0ZpeGVkIGdldEZvbnRNZXRyaWMoSEJfRm9udCBoYkZvbnQs
IEhCX0ZvbnRNZXRyaWMgbWV0cmljKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSBy
ZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihoYkZvbnQtPnVzZXJEYXRhKTsKKyAg
ICBTa1BhaW50IHBhaW50OworCisgICAgZm9udC0+c2V0dXBQYWludCgmcGFpbnQpOworICAgIFNr
UGFpbnQ6OkZvbnRNZXRyaWNzIHNraWFNZXRyaWNzOworICAgIHBhaW50LmdldEZvbnRNZXRyaWNz
KCZza2lhTWV0cmljcyk7CisKKyAgICBzd2l0Y2ggKG1ldHJpYykgeworICAgIGNhc2UgSEJfRm9u
dEFzY2VudDoKKyAgICAgICAgcmV0dXJuIFNraWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQoLXNraWFN
ZXRyaWNzLmZBc2NlbnQpOworICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZ2V0dGluZyB0aGUgcmVz
dCBvZiB0aGUgbWV0cmljcyBhbmQgSGFyZmJ1enogZG9lc24ndCBzZWVtIHRvIG5lZWQgdGhlbS4K
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0hCX0ZvbnRDbGFz
cyBoYXJmYnV6elNraWFDbGFzcyA9IHsKKyAgICBzdHJpbmdUb0dseXBocywKKyAgICBnbHlwaHNU
b0FkdmFuY2VzLAorICAgIGNhblJlbmRlciwKKyAgICBnZXRPdXRsaW5lUG9pbnQsCisgICAgZ2V0
R2x5cGhNZXRyaWNzLAorICAgIGdldEZvbnRNZXRyaWMsCit9OworCitIQl9Gb250XyogYWxsb2NI
YXJmYnV6ekZvbnQoKQoreworICAgIEhCX0ZvbnRfKiBmb250ID0gcmVpbnRlcnByZXRfY2FzdDxI
Ql9Gb250Xyo+KGZhc3RNYWxsb2Moc2l6ZW9mKEhCX0ZvbnRfKSkpOworICAgIG1lbXNldChmb250
LCAwLCBzaXplb2YoSEJfRm9udF8pKTsKKyAgICBmb250LT5rbGFzcyA9ICZoYXJmYnV6elNraWFD
bGFzczsKKyAgICBmb250LT51c2VyRGF0YSA9IDA7CisKKyAgICByZXR1cm4gZm9udDsKK30KKwor
SEJfRXJyb3IgaGFyZmJ1enpTa2lhR2V0VGFibGUodm9pZCogdm9pZGZhY2UsIGNvbnN0IEhCX1Rh
ZyB0YWcsIEhCX0J5dGUqIGJ1ZmZlciwgSEJfVUludCogbGVuKQoreworICAgIEZvbnRQbGF0Zm9y
bURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih2b2lkZmFj
ZSk7CisKKyAgICBjb25zdCBzaXplX3QgdGFibGVTaXplID0gU2tGb250SG9zdDo6R2V0VGFibGVT
aXplKGZvbnQtPnVuaXF1ZUlEKCksIHRhZyk7CisgICAgaWYgKCF0YWJsZVNpemUpCisgICAgICAg
IHJldHVybiBIQl9FcnJfSW52YWxpZF9Bcmd1bWVudDsKKyAgICAvLyBJZiBIYXJmYnV6eiBzcGVj
aWZpZWQgYSAwIGJ1ZmZlciB0aGVuIGl0J3MgYXNraW5nIGZvciB0aGUgc2l6ZSBvZiB0aGUgdGFi
bGUuCisgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgKmxlbiA9IHRhYmxlU2l6ZTsKKyAgICAg
ICAgcmV0dXJuIEhCX0Vycl9PazsKKyAgICB9CisKKyAgICBpZiAoKmxlbiA8IHRhYmxlU2l6ZSkK
KyAgICAgICAgcmV0dXJuIEhCX0Vycl9JbnZhbGlkX0FyZ3VtZW50OworICAgIFNrRm9udEhvc3Q6
OkdldFRhYmxlRGF0YShmb250LT51bmlxdWVJRCgpLCB0YWcsIDAsIHRhYmxlU2l6ZSwgYnVmZmVy
KTsKKyAgICByZXR1cm4gSEJfRXJyX09rOworfQorCit0eXBlZGVmIHBhaXI8SEJfRmFjZVJlY18q
LCB1bnNpZ25lZD4gRmFjZUNhY2hlRW50cnk7Cit0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQgaW50
LCBGYWNlQ2FjaGVFbnRyeSwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkIGludD4sIFdURjo6VW5zaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQgaW50PiA+IEhhcmZidXp6RmFjZUNhY2hl
Oworc3RhdGljIEhhcmZidXp6RmFjZUNhY2hlKiBnSGFyZmJ1enpGYWNlQ2FjaGUgPSAwOworCitz
dGF0aWMgSEJfRmFjZVJlY18qIGdldENhY2hlZEhhcmZidXp6RmFjZShGb250UGxhdGZvcm1EYXRh
KiBwbGF0Zm9ybURhdGEpCit7CisgICAgaWYgKCFnSGFyZmJ1enpGYWNlQ2FjaGUpCisgICAgICAg
IGdIYXJmYnV6ekZhY2VDYWNoZSA9IG5ldyBIYXJmYnV6ekZhY2VDYWNoZTsKKyAgICBTa0ZvbnRJ
RCB1bmlxdWVJRCA9IHBsYXRmb3JtRGF0YS0+dW5pcXVlSUQoKTsKKyAgICBIYXJmYnV6ekZhY2VD
YWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gZ0hhcmZidXp6RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlE
KTsKKyAgICBpZiAocmVzdWx0ID09IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZW5kKCkpIHsKKyAgICAg
ICAgRmFjZUNhY2hlRW50cnkgZW50cnkoSEJfTmV3RmFjZShwbGF0Zm9ybURhdGEsIGhhcmZidXp6
U2tpYUdldFRhYmxlKSwgMSk7CisgICAgICAgIGdIYXJmYnV6ekZhY2VDYWNoZS0+c2V0KHVuaXF1
ZUlELCBlbnRyeSk7CisgICAgICAgIHJldHVybiBlbnRyeS5maXJzdDsKKyAgICB9CisgICAgKyso
cmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpLT5z
ZWNvbmQuZmlyc3Q7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VDYWNoZWRIYXJmYnV6ekZhY2Uo
U2tGb250SUQgdW5pcXVlSUQpCit7CisgICAgSGFyZmJ1enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJl
c3VsdCA9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1bmlxdWVJRCk7CisgICAgQVNTRVJUKHJl
c3VsdCAhPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgpKTsKKyAgICBBU1NFUlQocmVzdWx0Lmdl
dCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7CisgICAgLS0ocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vj
b25kKTsKKyAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpKSB7CisgICAgICAg
IEhCX0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAgICAgICAgZ0hhcmZi
dXp6RmFjZUNhY2hlLT5yZW1vdmUodW5pcXVlSUQpOworICAgIH0KK30KKworSGFyZmJ1enpGYWNl
OjpIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQorICAgIDogbV91
bmlxdWVJRChwbGF0Zm9ybURhdGEtPnVuaXF1ZUlEKCkpCit7CisgICAgbV9oYXJmYnV6ekZhY2Ug
PSBnZXRDYWNoZWRIYXJmYnV6ekZhY2UocGxhdGZvcm1EYXRhKTsKK30KKworSGFyZmJ1enpGYWNl
Ojp+SGFyZmJ1enpGYWNlKCkKK3sKKyAgICByZWxlYXNlQ2FjaGVkSGFyZmJ1enpGYWNlKG1fdW5p
cXVlSUQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMxNmI0NDNmMTM2NGNhNzQzMTM4MjZmOTUxNjliYmZkMjc1ZGQ5MmQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6elNraWEuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSGFyZkJ1enpTa2lhX2gKKyNkZWZp
bmUgSGFyZkJ1enpTa2lhX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3QgSEJfRmFjZVJlY187CitzdHJ1Y3QgSEJfRm9udF87
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKKworY2xh
c3MgSGFyZmJ1enpGYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SGFyZmJ1enpGYWNlPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SGFyZmJ1enpGYWNlPiBjcmVhdGUoRm9udFBsYXRm
b3JtRGF0YSogcGxhdGZvcm1EYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBIYXJmYnV6ekZhY2UocGxhdGZvcm1EYXRhKSk7CisgICAgfQorCisgICAgfkhhcmZidXp6RmFj
ZSgpOworCisgICAgSEJfRmFjZVJlY18qIGZhY2UoKSBjb25zdCB7IHJldHVybiBtX2hhcmZidXp6
RmFjZTsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEhhcmZidXp6RmFjZShGb250UGxhdGZv
cm1EYXRhKik7CisKKyAgICB1aW50MzJfdCBtX3VuaXF1ZUlEOworICAgIEhCX0ZhY2VSZWNfKiBt
X2hhcmZidXp6RmFjZTsKK307CisKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhc3ltbWV0cmljIGFs
bG9jL2ZyZWUgZnVuY3Rpb24uCisvLyBXZSdsbCByZW1vdmUgdGhpcyBvbmNlIHdlIG1vdmUgdG8g
dGhlIG5ldyBIYXJmYnV6eiBBUEkuCitIQl9Gb250XyogYWxsb2NIYXJmYnV6ekZvbnQoKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L1NpbXBsZUZvbnREYXRhU2tpYS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9TaW1wbGVGb250RGF0YVNr
aWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmQwMmMxMmFkYTIwZDZlZDQyYTYwY2U2Y2FjYzJhNjg0NTc5Yzk0
MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9TaW1wbGVGb250RGF0YVNraWEuY3BwCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYWNo
ZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCisjaW5jbHVkZSAiU2tQYWludC5oIgorI2luY2x1ZGUg
IlNrVGltZS5oIgorI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKKyNpbmNsdWRlICJTa1R5cGVzLmgi
CisjaW5jbHVkZSAiVkRNWFBhcnNlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNt
YWxsY2FwcyB2ZXJzaW9ucyBvZiBmb250cyBhcmUgNzAlIHRoZSBzaXplIG9mIHRoZSBub3JtYWwg
Zm9udC4KK3N0YXRpYyBjb25zdCBmbG9hdCBzbWFsbENhcHNGcmFjdGlvbiA9IDAuN2Y7CitzdGF0
aWMgY29uc3QgZmxvYXQgZW1waGFzaXNNYXJrRnJhY3Rpb24gPSAuNTsKKy8vIFRoaXMgaXMgdGhl
IGxhcmdlc3QgVkRNWCB0YWJsZSB3aGljaCB3ZSdsbCB0cnkgdG8gbG9hZCBhbmQgcGFyc2UuCitz
dGF0aWMgY29uc3Qgc2l6ZV90IG1heFZETVhUYWJsZVNpemUgPSAxMDI0ICogMTAyNDsgLy8gMSBN
QgorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQoreworICAgIGlmICghbV9w
bGF0Zm9ybURhdGEuc2l6ZSgpKSB7CisgICAgICAgIG1fZm9udE1ldHJpY3MucmVzZXQoKTsKKyAg
ICAgICAgbV9hdmdDaGFyV2lkdGggPSAwOworICAgICAgICBtX21heENoYXJXaWR0aCA9IDA7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTa1BhaW50IHBhaW50OworICAgIFNrUGFpbnQ6
OkZvbnRNZXRyaWNzIG1ldHJpY3M7CisKKyAgICBtX3BsYXRmb3JtRGF0YS5zZXR1cFBhaW50KCZw
YWludCk7CisgICAgcGFpbnQuZ2V0Rm9udE1ldHJpY3MoJm1ldHJpY3MpOworICAgIGNvbnN0IFNr
Rm9udElEIGZvbnRJRCA9IG1fcGxhdGZvcm1EYXRhLnVuaXF1ZUlEKCk7CisKKyAgICBzdGF0aWMg
Y29uc3QgdWludDMyX3QgdmRteFRhZyA9IFNrU2V0Rm91ckJ5dGVUYWcoJ1YnLCAnRCcsICdNJywg
J1gnKTsKKyAgICBpbnQgcGl4ZWxTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMC41Owor
ICAgIGludCB2ZG14QXNjZW50LCB2ZG14RGVzY2VudDsKKyAgICBib29sIGlzVkRNWFZhbGlkID0g
ZmFsc2U7CisKKyAgICBzaXplX3QgdmRteFNpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUo
Zm9udElELCB2ZG14VGFnKTsKKyAgICBpZiAodmRteFNpemUgJiYgdmRteFNpemUgPCBtYXhWRE1Y
VGFibGVTaXplKSB7CisgICAgICAgIHVpbnQ4X3QqIHZkbXhUYWJsZSA9ICh1aW50OF90KikgZmFz
dE1hbGxvYyh2ZG14U2l6ZSk7CisgICAgICAgIGlmICh2ZG14VGFibGUKKyAgICAgICAgICAgICYm
IFNrRm9udEhvc3Q6OkdldFRhYmxlRGF0YShmb250SUQsIHZkbXhUYWcsIDAsIHZkbXhTaXplLCB2
ZG14VGFibGUpID09IHZkbXhTaXplCisgICAgICAgICAgICAmJiBwYXJzZVZETVgoJnZkbXhBc2Nl
bnQsICZ2ZG14RGVzY2VudCwgdmRteFRhYmxlLCB2ZG14U2l6ZSwgcGl4ZWxTaXplKSkKKyAgICAg
ICAgICAgIGlzVkRNWFZhbGlkID0gdHJ1ZTsKKyAgICAgICAgZmFzdEZyZWUodmRteFRhYmxlKTsK
KyAgICB9CisKKyAgICBmbG9hdCBhc2NlbnQ7CisgICAgZmxvYXQgZGVzY2VudDsKKworICAgIC8v
IEJld2FyZSB0aG9zZSB3aG8gc3RlcCBoZXJlOiBUaGlzIGNvZGUgaXMgZGVzaWduZWQgdG8gbWF0
Y2ggV2luMzIgZm9udAorICAgIC8vIG1ldHJpY3MgKmV4YWN0bHkqLgorICAgIGlmIChpc1ZETVhW
YWxpZCkgeworICAgICAgICBhc2NlbnQgPSB2ZG14QXNjZW50OworICAgICAgICBkZXNjZW50ID0g
LXZkbXhEZXNjZW50OworICAgIH0gZWxzZSB7CisgICAgICAgIFNrU2NhbGFyIGhlaWdodCA9IC1t
ZXRyaWNzLmZBc2NlbnQgKyBtZXRyaWNzLmZEZXNjZW50ICsgbWV0cmljcy5mTGVhZGluZzsKKyAg
ICAgICAgYXNjZW50ID0gU2tTY2FsYXJSb3VuZCgtbWV0cmljcy5mQXNjZW50KTsKKyAgICAgICAg
ZGVzY2VudCA9IFNrU2NhbGFyUm91bmQoaGVpZ2h0KSAtIGFzY2VudDsKKyAgICB9CisKKyAgICBt
X2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVz
Y2VudChkZXNjZW50KTsKKworICAgIGZsb2F0IHhIZWlnaHQ7CisgICAgaWYgKG1ldHJpY3MuZlhI
ZWlnaHQpCisgICAgICAgIHhIZWlnaHQgPSBtZXRyaWNzLmZYSGVpZ2h0OworICAgIGVsc2Ugewor
ICAgICAgICAvLyBoYWNrIHRha2VuIGZyb20gdGhlIFdpbmRvd3MgcG9ydAorICAgICAgICB4SGVp
Z2h0ID0gYXNjZW50ICogMC41NmY7CisgICAgfQorCisgICAgZmxvYXQgbGluZUdhcCA9IFNrU2Nh
bGFyVG9GbG9hdChtZXRyaWNzLmZMZWFkaW5nKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVH
YXAobGluZUdhcCk7CisgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOworICAg
IG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihk
ZXNjZW50KSArIGxyb3VuZGYobGluZUdhcCkpOworCisgICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkg
eworICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgdmhlYVRhZyA9IFNrU2V0Rm91ckJ5dGVU
YWcoJ3YnLCAnaCcsICdlJywgJ2EnKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHZv
cmdUYWcgPSBTa1NldEZvdXJCeXRlVGFnKCdWJywgJ08nLCAnUicsICdHJyk7CisgICAgICAgIHNp
emVfdCB2aGVhU2l6ZSA9IFNrRm9udEhvc3Q6OkdldFRhYmxlU2l6ZShmb250SUQsIHZoZWFUYWcp
OworICAgICAgICBzaXplX3Qgdm9yZ1NpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9u
dElELCB2b3JnVGFnKTsKKyAgICAgICAgaWYgKCh2aGVhU2l6ZSA+IDApIHx8ICh2b3JnU2l6ZSA+
IDApKQorICAgICAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IHRydWU7CisgICAgfQorCisg
ICAgLy8gSW4gV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
Y3BwLCBtX3NwYWNlV2lkdGggaXMKKyAgICAvLyBjYWxjdWxhdGVkIGZvciB1cywgYnV0IHdlIG5l
ZWQgdG8gY2FsY3VsYXRlIG1fbWF4Q2hhcldpZHRoIGFuZAorICAgIC8vIG1fYXZnQ2hhcldpZHRo
IGluIG9yZGVyIGZvciB0ZXh0IGVudHJ5IHdpZGdldHMgdG8gYmUgc2l6ZWQgY29ycmVjdGx5Lgor
CisgICAgU2tTY2FsYXIgeFJhbmdlID0gbWV0cmljcy5mWE1heCAtIG1ldHJpY3MuZlhNaW47Cisg
ICAgbV9tYXhDaGFyV2lkdGggPSBTa1NjYWxhclJvdW5kKHhSYW5nZSAqIFNrU2NhbGFyUm91bmQo
bV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSk7CisKKyAgICBpZiAobWV0cmljcy5mQXZnQ2hhcldpZHRo
KQorICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IFNrU2NhbGFyUm91bmQobWV0cmljcy5mQXZnQ2hh
cldpZHRoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9hdmdDaGFyV2lkdGggPSB4SGVpZ2h0Owor
CisgICAgICAgIEdseXBoUGFnZSogZ2x5cGhQYWdlWmVybyA9IEdseXBoUGFnZVRyZWVOb2RlOjpn
ZXRSb290Q2hpbGQodGhpcywgMCktPnBhZ2UoKTsKKworICAgICAgICBpZiAoZ2x5cGhQYWdlWmVy
bykgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgeENoYXIgPSAneCc7CisgICAg
ICAgICAgICBjb25zdCBHbHlwaCB4R2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoeENoYXIpLmdseXBoOworCisgICAgICAgICAgICBpZiAoeEdseXBoKQorICAgICAg
ICAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaCh4R2x5cGgpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aElu
aXQoKQoreworICAgIC8vIGNoYXJ3aWR0aHMgYXJlIHNldCBpbiBwbGF0Zm9ybUluaXQuCit9CisK
K3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisKK1Bhc3NPd25Q
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3Ip
IGNvbnN0Cit7CisgICAgY29uc3QgZmxvYXQgc2NhbGVkU2l6ZSA9IGxyb3VuZGYoZm9udERlc2Ny
aXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogc2NhbGVGYWN0b3IpOworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSwgc2Nh
bGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOworfQorCitTaW1wbGVGb250RGF0YSog
U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisg
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0
b21Gb250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKKyAgICAg
ICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZv
bnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRnJhY3Rpb24pOworCisgICAgcmV0dXJuIG1fZGVyaXZl
ZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBTaW1wbGVG
b250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKKyAgICAg
ICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZv
bnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQorICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEo
Zm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGcmFjdGlvbik7CisKKyAgICByZXR1cm4gbV9k
ZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKK30KKworYm9vbCBTaW1wbGVGb250
RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKSBjb25zdAoreworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG1heEJ1ZmZlckNvdW50ID0gNjQ7CisgICAgdWludDE2X3QgZ2x5cGhzW21heEJ1ZmZlckNv
dW50XTsKKworICAgIG1fcGxhdGZvcm1EYXRhLnNldHVwUGFpbnQoJnBhaW50KTsKKyAgICBwYWlu
dC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7CisKKyAgICB3
aGlsZSAobGVuZ3RoID4gMCkgeworICAgICAgICBpbnQgbiA9IFNrTWluMzIobGVuZ3RoLCBTS19B
UlJBWV9DT1VOVChnbHlwaHMpKTsKKworICAgICAgICAvLyB0ZXh0VG9HbHlwaHMgdGFrZXMgYSBi
eXRlIGNvdW50IHNvIHdlIGRvdWJsZSB0aGUgY2hhcmFjdGVyIGNvdW50LgorICAgICAgICBpbnQg
Y291bnQgPSBwYWludC50ZXh0VG9HbHlwaHMoY2hhcmFjdGVycywgbiAqIDIsIGdseXBocyk7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYg
KCFnbHlwaHNbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBtaXNzaW5nIGds
eXBoCisgICAgICAgIH0KKworICAgICAgICBjaGFyYWN0ZXJzICs9IG47CisgICAgICAgIGxlbmd0
aCAtPSBuOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNpbXBsZUZvbnRE
YXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IHBsYXRm
b3JtRGF0YSgpLmlzRml4ZWRQaXRjaCgpOworfQorCitGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZsb2F0
UmVjdCgpOworfQorICAgIAorZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTa0FTU0VSVChzaXplb2YoZ2x5cGgpID09IDIp
OyAvLyBjb21waWxlLXRpbWUgYXNzZXJ0CisKKyAgICBTa1BhaW50IHBhaW50OworCisgICAgbV9w
bGF0Zm9ybURhdGEuc2V0dXBQYWludCgmcGFpbnQpOworCisgICAgcGFpbnQuc2V0VGV4dEVuY29k
aW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgU2tTY2FsYXIgd2lkdGgg
PSBwYWludC5tZWFzdXJlVGV4dCgmZ2x5cGgsIDIpOworCisgICAgLy8gVGhvdWdoIFdlYktpdCBz
dXBwb3J0cyBub24taW50ZWdyYWwgYWR2YW5jZXMsIFNraWEgb25seSBzdXBwb3J0cyB0aGVtCisg
ICAgLy8gZm9yICJzdWJwaXhlbCIgKGRpc3RpbmN0IGZyb20gTENEIHN1YnBpeGVsIGFudGlhbGlh
c2luZykgdGV4dCwgd2hpY2gKKyAgICAvLyB3ZSBkb24ndCB1c2UuCisgICAgcmV0dXJuIHJvdW5k
KFNrU2NhbGFyVG9GbG9hdCh3aWR0aCkpOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjp1cGRh
dGVHbHlwaFdpdGhWYXJpYXRpb25TZWxlY3RvcihVQ2hhcjMyIGNoYXJhY3RlciwgVUNoYXIzMiBz
ZWxlY3RvciwgR2x5cGgmIGdseXBoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQu
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdj
NzUyMTc3MzAwYzlmNDdlODU3NWM2YzA4MmYxMzhhYTg2NWU2NWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3Bw
CkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVk
ZSAiU2tQYWludC5oIgorI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKKyNpbmNsdWRlICJTa1V0aWxz
LmgiCisKKyNpbmNsdWRlIDx1bmljb2RlL2xvY2lkLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250Q2FjaGU6
OnBsYXRmb3JtSW5pdCgpCit7Cit9CisKK2NvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBsZW5ndGgpCit7CisgICAgaWN1OjpMb2NhbGUgbG9jYWxlID0g
aWN1OjpMb2NhbGU6OmdldERlZmF1bHQoKTsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OkZvbnRGYW1p
bHkgZmFtaWx5OworICAgIFBsYXRmb3JtU3VwcG9ydDo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3Rl
cnMoY2hhcmFjdGVycywgbGVuZ3RoLCBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKSwgJmZhbWlseSk7Cisg
ICAgaWYgKGZhbWlseS5uYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBB
dG9taWNTdHJpbmcgYXRvbWljRmFtaWx5KGZhbWlseS5uYW1lKTsKKyAgICAvLyBDaGFuZ2VzIHdl
aWdodCBhbmQvb3IgaXRhbGljIG9mIGdpdmVuIEZvbnREZXNjcmlwdGlvbiBkZXBlbmRzIG9uCisg
ICAgLy8gdGhlIHJlc3VsdCBvZiBmb250Y29uZmlnIHNvIHRoYXQga2VlcGluZyB0aGUgY29ycmVj
dCBmb250IG1hcHBpbmcKKyAgICAvLyBvZiB0aGUgZ2l2ZW4gY2hhcmFjdGVycy4gU2VlIGh0dHA6
Ly9jcmJ1Zy5jb20vMzIxMDkgZm9yIGRldGFpbHMuCisgICAgYm9vbCBzaG91bGRTZXRGYWtlQm9s
ZCA9IGZhbHNlOworICAgIGJvb2wgc2hvdWxkU2V0RmFrZUl0YWxpYyA9IGZhbHNlOworICAgIEZv
bnREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihmb250LmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICBp
ZiAoZmFtaWx5LmlzQm9sZCAmJiBkZXNjcmlwdGlvbi53ZWlnaHQoKSA8IEZvbnRXZWlnaHRCb2xk
KQorICAgICAgICBkZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodEJvbGQpOworICAgIGlm
ICghZmFtaWx5LmlzQm9sZCAmJiBkZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9s
ZCkgeworICAgICAgICBzaG91bGRTZXRGYWtlQm9sZCA9IHRydWU7CisgICAgICAgIGRlc2NyaXB0
aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKKyAgICB9CisgICAgaWYgKGZhbWlseS5p
c0l0YWxpYyAmJiBkZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBGb250SXRhbGljT2ZmKQorICAgICAg
ICBkZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udEl0YWxpY09uKTsKKyAgICBpZiAoIWZhbWlseS5p
c0l0YWxpYyAmJiBkZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBGb250SXRhbGljT24pIHsKKyAgICAg
ICAgc2hvdWxkU2V0RmFrZUl0YWxpYyA9IHRydWU7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEl0
YWxpYyhGb250SXRhbGljT2ZmKTsKKyAgICB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRm
b3JtRGF0YSA9IEZvbnRQbGF0Zm9ybURhdGEoKmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVz
Y3JpcHRpb24sIGF0b21pY0ZhbWlseSwgRG9Ob3RSZXRhaW4pKTsKKyAgICBwbGF0Zm9ybURhdGEu
c2V0RmFrZUJvbGQoc2hvdWxkU2V0RmFrZUJvbGQpOworICAgIHBsYXRmb3JtRGF0YS5zZXRGYWtl
SXRhbGljKHNob3VsZFNldEZha2VJdGFsaWMpOworICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0
YSgmcGxhdGZvcm1EYXRhLCBEb05vdFJldGFpbik7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNv
cnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxk
UmV0YWluIHNob3VsZFJldGFpbikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgc2Fuc1N0ciwgKCJTYW5zIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgQXRvbWljU3RyaW5nLCBzZXJpZlN0ciwgKCJTZXJpZiIpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgbW9ub3NwYWNlU3RyLCAoIk1vbm9zcGFjZSIp
KTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0Zm9ybURhdGEgPSAwOworICAgIHN3
aXRjaCAoZGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKSB7CisgICAgY2FzZSBGb250RGVzY3Jp
cHRpb246OlNlcmlmRmFtaWx5OgorICAgICAgICBmb250UGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVk
Rm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgc2VyaWZTdHIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5OgorICAgICAgICBmb250
UGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgbW9u
b3NwYWNlU3RyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNh
bnNTZXJpZkZhbWlseToKKyAgICBkZWZhdWx0OgorICAgICAgICBmb250UGxhdGZvcm1EYXRhID0g
Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgc2Fuc1N0cik7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVChmb250UGxhdGZvcm1EYXRhKTsKKyAgICByZXR1
cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9udFBsYXRmb3JtRGF0YSwgc2hvdWxkUmV0YWluKTsKK30K
Kwordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dW5z
aWduZWQ+JiB0cmFpdHNNYXNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGb250
UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7
CisgICAgY29uc3QgY2hhciogbmFtZSA9IDA7CisgICAgQ1N0cmluZyBzOworCisgICAgLy8gSWYg
d2UncmUgY3JlYXRpbmcgYSBmYWxsYmFjayBmb250IChlLmcuICItd2Via2l0LW1vbm9zcGFjZSIp
LCBjb252ZXJ0IHRoZSBuYW1lIGludG8KKyAgICAvLyB0aGUgZmFsbGJhY2sgbmFtZSAobGlrZSAi
bW9ub3NwYWNlIikgdGhhdCBmb250Y29uZmlnIHVuZGVyc3RhbmRzLgorICAgIGlmICghZmFtaWx5
Lmxlbmd0aCgpIHx8IGZhbWlseS5zdGFydHNXaXRoKCItd2Via2l0LSIpKSB7CisgICAgICAgIHN0
YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmlj
RmFtaWx5VHlwZSBtVHlwZTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1OYW1lOworICAgICAg
ICB9IGZvbnREZXNjcmlwdGlvbnNbXSA9IHsKKyAgICAgICAgICAgIHsgRm9udERlc2NyaXB0aW9u
OjpTZXJpZkZhbWlseSwgInNlcmlmIiB9LAorICAgICAgICAgICAgeyBGb250RGVzY3JpcHRpb246
OlNhbnNTZXJpZkZhbWlseSwgInNhbnMtc2VyaWYiIH0sCisgICAgICAgICAgICB7IEZvbnREZXNj
cmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5LCAibW9ub3NwYWNlIiB9LAorICAgICAgICAgICAgeyBG
b250RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHksICJjdXJzaXZlIiB9LAorICAgICAgICAgICAg
eyBGb250RGVzY3JpcHRpb246OkZhbnRhc3lGYW1pbHksICJmYW50YXN5IiB9CisgICAgICAgIH07
CisKKyAgICAgICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlwZSB0eXBlID0gZm9u
dERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IFNLX0FSUkFZX0NPVU5UKGZvbnREZXNjcmlwdGlvbnMpOyBpKyspIHsKKyAgICAgICAg
ICAgIGlmICh0eXBlID09IGZvbnREZXNjcmlwdGlvbnNbaV0ubVR5cGUpIHsKKyAgICAgICAgICAg
ICAgICBuYW1lID0gZm9udERlc2NyaXB0aW9uc1tpXS5tTmFtZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIW5hbWUpCisgICAg
ICAgICAgICBuYW1lID0gIiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gY29udmVydCB0aGUg
bmFtZSB0byB1dGY4CisgICAgICAgIHMgPSBmYW1pbHkuc3RyaW5nKCkudXRmOCgpOworICAgICAg
ICBuYW1lID0gcy5kYXRhKCk7CisgICAgfQorCisgICAgaW50IHN0eWxlID0gU2tUeXBlZmFjZTo6
a05vcm1hbDsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHRC
b2xkKQorICAgICAgICBzdHlsZSB8PSBTa1R5cGVmYWNlOjprQm9sZDsKKyAgICBpZiAoZm9udERl
c2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICBzdHlsZSB8PSBTa1R5cGVmYWNlOjprSXRhbGlj
OworCisgICAgU2tUeXBlZmFjZSogdGYgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tTmFtZShuYW1l
LCBzdGF0aWNfY2FzdDxTa1R5cGVmYWNlOjpTdHlsZT4oc3R5bGUpKTsKKyAgICBpZiAoIXRmKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEqIHJlc3VsdCA9CisgICAg
ICAgIG5ldyBGb250UGxhdGZvcm1EYXRhKHRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uY29t
cHV0ZWRTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHlsZSAmIFNrVHlw
ZWZhY2U6OmtCb2xkKSAmJiAhdGYtPmlzQm9sZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3R5bGUgJiBTa1R5cGVmYWNlOjprSXRhbGljKSAmJiAhdGYtPmlzSXRhbGljKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24udGV4dE9yaWVu
dGF0aW9uKCkpOworICAgIHRmLT51bnJlZigpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhLmNwcAppbmRleCA0
MDYxZjc0ZGIxNDY1MzQ1YzEwODhhZTZhZWUwY2NhNzJmNjkwMmFhLi45YTRmZWY2ZDBlOTgzODky
MDYwZTc3MjIzNjIzZWI4YTU3ZTJmMjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRyZWVOb2RlU2tpYS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWEuY3Bw
CkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKIAogI2lu
Y2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJIYXJmYnV6elNraWEuaCIKKyNpbmNsdWRlICJIYXJm
QnV6elNraWEuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCiAjaW5jbHVkZSAiU2tU
ZW1wbGF0ZXMuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120605</attachid>
            <date>2011-12-27 10:35:37 -0800</date>
            <delta_ts>2011-12-27 13:09:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72780-20111227103600.patch</filename>
            <type>text/plain</type>
            <size>190188</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMzMmZmMTdhZDg3NTkz
ZTlhOTY0NTVlMTdkODY4NzQxZTllMGZkMy4uZDRiZmI5ZjIxZGRlMjc3ZjcyOTdhNmRmMWFlMDYy
ODAwZWIzNDU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDExLTEyLTI3ICBUb255
IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTW92ZSBIYXJmQnV6eiBmaWxl
cyBpbnRvIHRoZWlyIG93biBkaXJlY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcyNzgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRm9udENhY2hlTGludXguY3BwIGdvdCBtb3ZlZCB0byBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwIHNpbmNlIGl0IHdhc24ndCBIYXJmQnV6
eiBzcGVjaWZpYy4KKworICAgICAgICBJIHVzZWQgSGFyZkJ1enogaW4gZmlsZW5hbWVzIHNpbmNl
IHRoYXQgc2VlbXMgdG8gYmUgaG93IHRoZSBuYW1lIGlzIGNhcGl0YWxpemVkIG9uIHRoZSBwcm9q
ZWN0IGhvbWUgcGFnZS4KKworICAgICAgICBGaXhlZCBzb21lIHN0eWxlIGVycm9ycyBjYXVnaHQg
YnkgdGhlIHN0eWxlIGNoZWNrZXIuCisKKyAgICAgICAgKiBQbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2U6CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9y
bURhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4
dENvbnRyb2xsZXJIYXJmQnV6ei5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVy
SGFyZkJ1enouaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmguCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6Lmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGlu
dXguaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSGFyZmJ1enpTa2lhLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNraWEuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L1NpbXBsZUZvbnREYXRhU2tpYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNw
cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dENhY2hlTGludXguY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQ
YWdlVHJlZU5vZGVTa2lhLmNwcDoKKwogMjAxMS0xMi0yNyAgQWxleGFuZGVyIFBhdmxvdiAgPGFw
YXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4Y2VwdGlvbiB3
aGVuIHNjcm9sbGluZyBpbiBKYXZhU2NyaXB0T3V0bGluZSBkaWFsb2cgd2l0aCBlbXB0eSBxdWVy
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4IDhiYmQwODg5NTFj
M2U2NWNiZjg1N2EwZDczMDFkZTZkYTYwOTIzZTQuLjY4Y2QzY2NjNDBhOTRhMjU2NDQxMGYxNmY2
NDc3MDY5YmI5OGZmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tC
ZXJyeS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UK
QEAgLTgsNyArOCw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwog
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0Nvb2tpZURhdGFiYXNlQmFj
a2luZ1N0b3JlIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvc2tp
YSIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0iICMgRm9y
IGZvbnQgc3Vic3lzdGVtCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS8i
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEiCkBAIC00MiwxMiArNDIsMTIg
QEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAjIFNraWEgZm9udCBiYWNrZW5kIHNvdXJj
ZXMKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvc2tpYS9QbGF0Zm9ybUJyaWRnZS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250TGludXguY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFBsYXRmb3JtRGF0YUxpbnV4LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hh
cmZidXp6U2tpYS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250
RGF0YUxpbnV4LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0
Q29udHJvbGxlckhhcmZCdXp6LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0Zv
bnRIYXJmQnV6ei5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZv
cm1EYXRhSGFyZkJ1enouY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1
enpTa2lhLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L1NpbXBsZUZvbnREYXRh
SGFyZkJ1enouY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lhLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhLmNwcAog
KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGJhYmNiNzQ5NDkz
OTc4ZDM0YWI2ZWNkY2I4MTY0MWM5ZWYwNDNjZDQuLmIwMzRkOWQwOTA0YTA1OTZlM2VjZWRkYjYx
ZGM1MzA3ZWRjNTY1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBA
IC0yMzEsNiArMjMxLDExIEBACiAgICAgICAgICMgRklYTUU6IEFsc28gZW5hYmxlIHRoaXMgZm9y
IFdpbmRvd3MgYWZ0ZXIgdmVyaWZ5aW5nIG5vIHdhcm5pbmdzCiAgICAgICAgICdjaHJvbWl1bV9j
b2RlJzogMSwKICAgICAgIH1dLAorICAgICAgWyd1c2VfeDExPT0xIG9yIE9TPT0iYW5kcm9pZCIn
LCB7CisgICAgICAgICd3ZWJjb3JlX2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgICAnLi4vcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enonLAorICAgICAgICBdLAorICAgICAgfV0sCiAgICAgICBb
J09TPT0id2luIiBhbmQgYnVpbGR0eXBlPT0iT2ZmaWNpYWwiJywgewogICAgICAgICAjIE9uIHdp
bmRvd3Mgb2ZmaWNpYWwgcmVsZWFzZSBidWlsZHMsIHdlIHRyeSB0byBwcmVzZXJ2ZSBzeW1ib2wg
c3BhY2UuCiAgICAgICAgICdkZXJpdmVkX3NvdXJjZXNfYWdncmVnYXRlX2ZpbGVzJzogWwpAQCAt
MTQ0OCw3ICsxNDUzLDcgQEAKICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtLyddLAogCiAg
ICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHN0b3JlIHRoZXNlIHBhdHRlcm5zIGlu
IGEgdmFyaWFibGUuCi0gICAgICAgIFsnZXhjbHVkZScsICcoY2Fpcm98Y2F8Y2Z8Y2d8Y3VybHxl
Zmx8ZnJlZXR5cGV8Z3N0cmVhbWVyfGd0a3xsaW51eHxtYWN8b3BlbmdsfG9wZW52Z3xvcGVudHlw
ZXxwYW5nb3xwb3NpeHxxdHxzb3VwfHN2Z3xzeW1iaWFufHRleG1hcHxpcGhvbmV8d2lufHdpbmNl
fHd4KS8nXSwKKyAgICAgICAgWydleGNsdWRlJywgJyhjYWlyb3xjYXxjZnxjZ3xjdXJsfGVmbHxm
cmVldHlwZXxnc3RyZWFtZXJ8Z3RrfGhhcmZidXp6fGxpbnV4fG1hY3xvcGVuZ2x8b3BlbnZnfG9w
ZW50eXBlfHBhbmdvfHBvc2l4fHF0fHNvdXB8c3ZnfHN5bWJpYW58dGV4bWFwfGlwaG9uZXx3aW58
d2luY2V8d3gpLyddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnKD88IUNocm9taXVtKShDYWlyb3xD
RnxDR3xDdXJsfEd0a3xKU0N8TGludXh8TWFjfE9wZW5UeXBlfFBPU0lYfFBvc2l4fFF0fFNhZmFy
aXxTb3VwfFN5bWJpYW58V2lufFdpbkNFfFd4KVxcLihjcHB8bW0/KSQnXSwKIAogICAgICAgICBb
J2V4Y2x1ZGUnLCAncGxhdGZvcm0vTGlua0hhc2hcXC5jcHAkJ10sCkBAIC0xNDcwLDExICsxNDc1
LDEwIEBACiAgICAgICAgIFsndXNlX3gxMSA9PSAxJywgewogICAgICAgICAgICdzb3VyY2VzLyc6
IFsKICAgICAgICAgICAgICMgQ2hlcnJ5LXBpY2sgZmlsZXMgZXhjbHVkZWQgYnkgdGhlIGJyb2Fk
ZXIgcmVndWxhciBleHByZXNzaW9ucyBhYm92ZS4KLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eFxcLmNw
cCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2FjaGVMaW51eFxcLmNwcCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXhcXC5jcHAkJ10sCi0gICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxp
bnV4XFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXhcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2lu
Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVy
SGFyZkJ1enpcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6XFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6
elxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9TaW1wbGVGb250RGF0YVNraWFcXC5jcHAkJ10sCiAgICAgICAgICAgXSwKICAgICAg
ICAgfSwgeyAjIHVzZV94MTE9PTAKICAgICAgICAgICAnc291cmNlcy8nOiBbCkBAIC0xNjM5LDYg
KzE2NDMsNyBAQAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ludFNpemVDR1xcLmNwcCQnXSwKICAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtTWFjXFwubW0kJ10sCiAgICAgICAgICAgICBb
J2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWNcXC5tbSQnXSwKKyAgICAg
ICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWFc
XC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HbHlwaFBhZ2VUcmVlTm9kZVNraWFcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUn
LCAncGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1NYWNcXC5jcHAkJ10sCiAgICAg
ICAgICAgXSwKQEAgLTE2NjksNiArMTY3NCw3IEBACiAKICAgICAgICAgICAgICMgVGhlIENocm9t
aXVtIFdpbiBjdXJyZW50bHkgdXNlcyBHbHlwaFBhZ2VUcmVlTm9kZUNocm9taXVtV2luLmNwcCBm
cm9tCiAgICAgICAgICAgICAjIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtLCBpbmNsdWRlZCBi
eSByZWdleCBhYm92ZSwgaW5zdGVhZC4KKyAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWFcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2V4
Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWFcXC5j
cHAkJ10sCiAKICAgICAgICAgICAgICMgU3lzdGVtSW5mby5jcHAgaXMgdXNlZnVsIGFuZCB3ZSBk
b24ndCB3YW50IHRvIGNvcHkgaXQuCkBAIC0xNjc5LDE0ICsxNjg1LDE0IEBACiAgICAgICAgICAg
J3NvdXJjZXMvJzogWwogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtTGludXhcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vY2hyb21pdW0vRmlsZVN5c3RlbUNocm9taXVtTGludXhcXC5jcHAkJ10sCi0g
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxl
eFRleHRDb250cm9sbGVyTGludXhcXC5jcHAkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4XFwuY3BwJCddLAotICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURh
dGFMaW51eFxcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUxpbnV4XFwuY3BwJCddLAotICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYVxc
LmNwcCQnXSwKICAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JY29uQ2hyb21pdW1cXC5jcHAkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eFxcLmNwcCQnXSwKICAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WRE1YUGFy
c2VyXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6XFwuY3BwJCddLAorICAgICAg
ICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6
elxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enpcXC5jcHAkJ10sCisgICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZmJ1enpTa2lhXFwuY3Bw
JCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L1NpbXBsZUZvbnREYXRhU2tpYVxcLmNwcCQnXSwKICAgICAgICAgICBdLAogICAgICAgICB9LCB7
ICMgT1MhPSJhbmRyb2lkIgogICAgICAgICAgICdzb3VyY2VzLyc6IFsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCA2NTM3M2QwOGJkMjY4ZGEyMjcxOTg5OTIwNGMyZTJmMTJjZWJjMjNjLi4wODU3OWRkZmQz
MDQ1NmI2ZjZkZGU2MWE3YjNlNjcwOTNhZTM4YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTEx
LDggKzM1MTEsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVy
TGludXguY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21w
bGV4VGV4dENvbnRyb2xsZXJMaW51eC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgn
LApAQCAtMzUyMSwxNCArMzUxOSwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2lu
LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRm
b3JtRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250
UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uaCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcCcs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0
YUxpbnV4LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRS
ZW5kZXJTdHlsZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250VXRpbHNDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmgnLApAQCAtMzUzOSw4ICszNTMzLDYgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9k
ZUNocm9taXVtV2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW0uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1BbmRyb2lkLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRh
U2tpYS5oJywKQEAgLTM1NzYsNyArMzU2OCw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCi0g
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51
eC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVy
ZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFs
bG9jYXRvci5jcHAnLApAQCAtMzc4Nyw2ICszNzc4LDE0IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ludFBvaW50R3RrLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ludFJlY3RHdGsuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6
ei5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0
Zm9ybURhdGFIYXJmQnV6ei5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuaCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovU2ltcGxlRm9udERhdGFTa2lhLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oJywKQEAg
LTM4OTMsNiArMzg5Miw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9C
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0Zsb2F0UG9pbnRTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9GbG9hdFJlY3RTa2lhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJv
bGxlckxpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwODdjMjMzMDkwMWZlYTZhM2U3ZjE2YzRkM2YwZjc3ZGVmYTM0Ny4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw1NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJDb21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
Ci0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVy
YXRvci5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLQotZXh0ZXJuICJDIiB7Ci0jaW5jbHVkZSAi
aGFyZmJ1enotdW5pY29kZS5oIgotfQotCi0jaW5jbHVkZSA8dW5pY29kZS9ub3JtbHpyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gSGFyZmJ1enogdXNlcyAyNi42IGZpeGVkIHBvaW50
IHZhbHVlcyBmb3IgcGl4ZWwgb2Zmc2V0cy4gSG93ZXZlciwgd2UgZG9uJ3QKLS8vIGhhbmRsZSBz
dWJwaXhlbCBwb3NpdGlvbmluZyBzbyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdHJ1bmNhdGUg
SGFyZmJ1enoKLS8vIHZhbHVlcyB0byBhIG51bWJlciBvZiBwaXhlbHMuCi1zdGF0aWMgaW50IHRy
dW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihIQl9GaXhlZCB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
dmFsdWUgPj4gNjsKLX0KLQotQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRy
b2xsZXIoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgc3RhcnRpbmdYLCBpbnQgc3RhcnRpbmdZLCB1
bnNpZ25lZCB3b3JkU3BhY2luZywgdW5zaWduZWQgbGV0dGVyU3BhY2luZywgdW5zaWduZWQgcGFk
ZGluZywgY29uc3QgRm9udCogZm9udCkKLSAgICA6IG1fZm9udChmb250KQotICAgICwgbV9ydW4o
Z2V0Tm9ybWFsaXplZFRleHRSdW4ocnVuLCBtX25vcm1hbGl6ZWRSdW4sIG1fbm9ybWFsaXplZEJ1
ZmZlcikpCi17Ci0gICAgLy8gRG8gbm90IHVzZSB8cnVufCBpbnNpZGUgdGhpcyBjb25zdHJ1Y3Rv
ci4gVXNlIHxtX3J1bnwgaW5zdGVhZC4KLQotICAgIG1lbXNldCgmbV9pdGVtLCAwLCBzaXplb2Yo
bV9pdGVtKSk7Ci0gICAgLy8gV2UgY2Fubm90IGtub3csIGFoZWFkIG9mIHRpbWUsIGhvdyBtYW55
IGdseXBocyBhIGdpdmVuIHNjcmlwdCBydW4KLSAgICAvLyB3aWxsIHByb2R1Y2UuIFdlIHRha2Ug
YSBndWVzcyB0aGF0IHNjcmlwdCBydW5zIHdpbGwgbm90IHByb2R1Y2UgbW9yZQotICAgIC8vIHRo
YW4gdHdpY2UgYXMgbWFueSBnbHlwaHMgYXMgdGhlcmUgYXJlIGNvZGUgcG9pbnRzIHBsdXMgYSBi
aXQgb2YKLSAgICAvLyBwYWRkaW5nIGFuZCBmYWxsYmFjayBpZiB3ZSBmaW5kIHRoYXQgd2UgYXJl
IHdyb25nLgotICAgIGNyZWF0ZUdseXBoQXJyYXlzKChtX3J1bi5sZW5ndGgoKSArIDIpICogMik7
Ci0KLSAgICBtX2l0ZW0ubG9nX2NsdXN0ZXJzID0gbmV3IHVuc2lnbmVkIHNob3J0W21fcnVuLmxl
bmd0aCgpXTsKLQotICAgIG1faXRlbS5mYWNlID0gMDsKLSAgICBtX2l0ZW0uZm9udCA9IGFsbG9j
SGFyZmJ1enpGb250KCk7Ci0KLSAgICBtX2l0ZW0uaXRlbS5iaWRpTGV2ZWwgPSBtX3J1bi5ydGwo
KTsKLQotICAgIG1faXRlbS5zdHJpbmcgPSBtX3J1bi5jaGFyYWN0ZXJzKCk7Ci0gICAgbV9pdGVt
LnN0cmluZ0xlbmd0aCA9IG1fcnVuLmxlbmd0aCgpOwotCi0gICAgcmVzZXQoc3RhcnRpbmdYKTsK
LSAgICBtX3N0YXJ0aW5nWSA9IHN0YXJ0aW5nWTsKLQotICAgIHNldFdvcmRTcGFjaW5nQWRqdXN0
bWVudCh3b3JkU3BhY2luZyk7Ci0gICAgc2V0TGV0dGVyU3BhY2luZ0FkanVzdG1lbnQobGV0dGVy
U3BhY2luZyk7Ci0gICAgc2V0UGFkZGluZyhwYWRkaW5nKTsKLX0KLQotQ29tcGxleFRleHRDb250
cm9sbGVyOjp+Q29tcGxleFRleHRDb250cm9sbGVyKCkKLXsKLSAgICBmYXN0RnJlZShtX2l0ZW0u
Zm9udCk7Ci0gICAgZGVsZXRlR2x5cGhBcnJheXMoKTsKLSAgICBkZWxldGVbXSBtX2l0ZW0ubG9n
X2NsdXN0ZXJzOwotfQotCi1ib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6aXNXb3JkQnJlYWso
dW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIGluZGV4ICYmIGlzQ29kZXBvaW50U3BhY2Uo
bV9pdGVtLnN0cmluZ1tpbmRleF0pICYmICFpc0NvZGVwb2ludFNwYWNlKG1faXRlbS5zdHJpbmdb
aW5kZXggLSAxXSk7Ci19Ci0KLWludCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmRldGVybWluZVdv
cmRCcmVha1NwYWNpbmcodW5zaWduZWQgbG9nQ2x1c3RlcnNJbmRleCkKLXsKLSAgICBpbnQgd29y
ZEJyZWFrU3BhY2luZyA9IDA7Ci0gICAgLy8gVGhlIGZpcnN0IGhhbGYgb2YgdGhlIGNvbmp1bmN0
aW9uIHdvcmtzIGFyb3VuZCB0aGUgY2FzZSB3aGVyZQotICAgIC8vIG91dHB1dCBnbHlwaHMgYXJl
bid0IGFzc29jaWF0ZWQgd2l0aCBhbnkgY29kZXBvaW50cyBieSB0aGUKLSAgICAvLyBjbHVzdGVy
cyBsb2cuCi0gICAgaWYgKGxvZ0NsdXN0ZXJzSW5kZXggPCBtX2l0ZW0uaXRlbS5sZW5ndGgKLSAg
ICAgICAgJiYgaXNXb3JkQnJlYWsobV9pdGVtLml0ZW0ucG9zICsgbG9nQ2x1c3RlcnNJbmRleCkp
IHsKLSAgICAgICAgd29yZEJyZWFrU3BhY2luZyA9IG1fd29yZFNwYWNpbmdBZGp1c3RtZW50Owot
Ci0gICAgICAgIGlmIChtX3BhZGRpbmcgPiAwKSB7Ci0gICAgICAgICAgICBpbnQgdG9QYWQgPSBy
b3VuZGYobV9wYWRQZXJXb3JkQnJlYWsgKyBtX3BhZEVycm9yKTsKLSAgICAgICAgICAgIG1fcGFk
RXJyb3IgKz0gbV9wYWRQZXJXb3JkQnJlYWsgLSB0b1BhZDsKLQotICAgICAgICAgICAgaWYgKG1f
cGFkZGluZyA8IHRvUGFkKQotICAgICAgICAgICAgICAgIHRvUGFkID0gbV9wYWRkaW5nOwotICAg
ICAgICAgICAgbV9wYWRkaW5nIC09IHRvUGFkOwotICAgICAgICAgICAgd29yZEJyZWFrU3BhY2lu
ZyArPSB0b1BhZDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gd29yZEJyZWFrU3BhY2lu
ZzsKLX0KLQotLy8gc2V0UGFkZGluZyBzZXRzIGEgbnVtYmVyIG9mIHBpeGVscyB0byBiZSBkaXN0
cmlidXRlZCBhY3Jvc3MgdGhlIFRleHRSdW4uCi0vLyBXZWJLaXQgdXNlcyB0aGlzIHRvIGp1c3Rp
ZnkgdGV4dC4KLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXRQYWRkaW5nKGludCBwYWRk
aW5nKQotewotICAgIG1fcGFkZGluZyA9IHBhZGRpbmc7Ci0gICAgbV9wYWRFcnJvciA9IDA7Ci0g
ICAgaWYgKCFtX3BhZGRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlIGhhdmUg
cGFkZGluZyB0byBkaXN0cmlidXRlLCB0aGVuIHdlIHRyeSB0byBnaXZlIGFuIGVxdWFsCi0gICAg
Ly8gYW1vdW50IHRvIGVhY2ggc3BhY2UuIFRoZSBsYXN0IHNwYWNlIGdldHMgdGhlIHNtYWxsZXIg
YW1vdW50LCBpZgotICAgIC8vIGFueS4KLSAgICB1bnNpZ25lZCBudW1Xb3JkQnJlYWtzID0gMDsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2l0ZW0uc3RyaW5nTGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgaWYgKGlzV29yZEJyZWFrKGkpKQotICAgICAgICAgICAgbnVtV29yZEJyZWFr
cysrOwotICAgIH0KLQotICAgIGlmIChudW1Xb3JkQnJlYWtzKQotICAgICAgICBtX3BhZFBlcldv
cmRCcmVhayA9IG1fcGFkZGluZyAvIG51bVdvcmRCcmVha3M7Ci0gICAgZWxzZQotICAgICAgICBt
X3BhZFBlcldvcmRCcmVhayA9IDA7Ci19Ci0KLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpy
ZXNldChpbnQgb2Zmc2V0KQotewotICAgIG1faW5kZXhPZk5leHRTY3JpcHRSdW4gPSAwOwotICAg
IG1fb2Zmc2V0WCA9IG9mZnNldDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNl
dHVwRm9yUlRMKCkKLXsKLSAgICBpbnQgcGFkZGluZyA9IG1fcGFkZGluZzsKLSAgICAvLyBGSVhN
RTogdGhpcyBjYXVzZXMgdXMgdG8gc2hhcGUgdGhlIHRleHQgdHdpY2UgLS0gb25jZSB0byBjb21w
dXRlIHRoZSB3aWR0aCBhbmQgdGhlbiBhZ2FpbgotICAgIC8vIGJlbG93IHdoZW4gYWN0dWFsbHkg
cmVuZGVyaW5nLiBDaGFuZ2UgQ29tcGxleFRleHRDb250cm9sbGVyIHRvIG1hdGNoIHBsYXRmb3Jt
L21hYyBhbmQKLSAgICAvLyBwbGF0Zm9ybS9jaHJvbWl1bS93aW4gYnkgaGF2aW5nIGl0IHN0b3Jl
IHRoZSBzaGFwZWQgcnVucywgc28gd2UgY2FuIHJldXNlIHRoZSByZXN1bHRzLgotICAgIHJlc2V0
KG1fb2Zmc2V0WCArIHdpZHRoT2ZGdWxsUnVuKCkpOwotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRo
ZSBwYWRkaW5nIGFnYWluIGJlY2F1c2UgQ29tcGxleFRleHRDb250cm9sbGVyIGxheW91dCBjb25z
dW1lZCB0aGUgdmFsdWUuCi0gICAgLy8gRml4aW5nIHRoZSBhYm92ZSBwcm9ibGVtIHdvdWxkIGhl
bHAgaGVyZSB0b28uCi0gICAgc2V0UGFkZGluZyhwYWRkaW5nKTsKLX0KLQotLy8gQWR2YW5jZSB0
byB0aGUgbmV4dCBzY3JpcHQgcnVuLCByZXR1cm5pbmcgZmFsc2Ugd2hlbiB0aGUgZW5kIG9mIHRo
ZQotLy8gVGV4dFJ1biBoYXMgYmVlbiByZWFjaGVkLgotYm9vbCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6Om5leHRTY3JpcHRSdW4oKQotewotICAgIC8vIEVuc3VyZSB3ZSdyZSBub3QgcG9pbnRpbmcg
YXQgdGhlIHNtYWxsIGNhcHMgYnVmZmVyLgotICAgIG1faXRlbS5zdHJpbmcgPSBtX3J1bi5jaGFy
YWN0ZXJzKCk7Ci0KLSAgICBpZiAoIWhiX3V0ZjE2X3NjcmlwdF9ydW5fbmV4dCgwLCAmbV9pdGVt
Lml0ZW0sIG1fcnVuLmNoYXJhY3RlcnMoKSwgbV9ydW4ubGVuZ3RoKCksICZtX2luZGV4T2ZOZXh0
U2NyaXB0UnVuKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSXQgaXMgYWN0dWFs
bHkgd3JvbmcgdG8gY29uc2lkZXIgc2NyaXB0IHJ1bnMgYXQgYWxsIGluIHRoaXMgY29kZS4KLSAg
ICAvLyBPdGhlciBXZWJLaXQgY29kZSAoZS5nLiBNYWMpIHNlZ21lbnRzIGNvbXBsZXggdGV4dCBq
dXN0IGJ5IGZpbmRpbmcKLSAgICAvLyB0aGUgbG9uZ2VzdCBzcGFuIG9mIHRleHQgY292ZXJlZCBi
eSBhIHNpbmdsZSBmb250LgotICAgIC8vIEJ1dCB3ZSBjdXJyZW50bHkgbmVlZCB0byBjYWxsIGhi
X3V0ZjE2X3NjcmlwdF9ydW5fbmV4dCBhbnl3YXkgdG8gZmlsbAotICAgIC8vIGluIHRoZSBoYXJm
YnV6eiBkYXRhIHN0cnVjdHVyZXMgdG8gZS5nLiBwaWNrIHRoZSBjb3JyZWN0IHNjcmlwdCdzIHNo
YXBlci4KLSAgICAvLyBTbyB3ZSBhbGxvdyB0aGF0IHRvIHJ1biBmaXJzdCwgdGhlbiBkbyBhIHNl
Y29uZCBwYXNzIG92ZXIgdGhlIHJhbmdlIGl0Ci0gICAgLy8gZm91bmQgYW5kIHRha2UgdGhlIGxh
cmdlc3Qgc3VicmVnaW9uIHRoYXQgc3RheXMgd2l0aGluIGEgc2luZ2xlIGZvbnQuCi0gICAgU3Vy
cm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKHN0YXRpY19jYXN0PGNvbnN0IFVD
aGFyKj4oJm1faXRlbS5zdHJpbmdbbV9pdGVtLml0ZW0ucG9zXSksIDAsIHN0YXRpY19jYXN0PGlu
dD4obV9pdGVtLml0ZW0ubGVuZ3RoKSwgc3RhdGljX2Nhc3Q8aW50PihtX2l0ZW0uaXRlbS5sZW5n
dGgpKTsKLSAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3Ro
ID0gMDsKLSAgICBpZiAoIWl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3Ro
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fY3VycmVudEZvbnREYXRhID0gbV9mb250
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7Ci0gICAg
aXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsKLSAgICB3aGlsZSAoaXRlcmF0b3IuY29u
c3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFy
YWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKLSAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBtX2N1
cnJlbnRGb250RGF0YSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpdGVyYXRvci5hZHZh
bmNlKGNsdXN0ZXJMZW5ndGgpOwotICAgIH0KLSAgICBtX2l0ZW0uaXRlbS5sZW5ndGggPSBpdGVy
YXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7Ci0gICAgbV9pbmRleE9mTmV4dFNjcmlwdFJ1biA9IG1f
aXRlbS5pdGVtLnBvcyArIGl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKTsKLQotICAgIHNldHVw
Rm9udEZvclNjcmlwdFJ1bigpOwotICAgIHNoYXBlR2x5cGhzKCk7Ci0gICAgc2V0R2x5cGhQb3Np
dGlvbnMocnRsKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWZsb2F0IENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6d2lkdGhPZkZ1bGxSdW4oKQotewotICAgIGZsb2F0IHdpZHRoU3VtID0gMDsK
LSAgICB3aGlsZSAobmV4dFNjcmlwdFJ1bigpKQotICAgICAgICB3aWR0aFN1bSArPSB3aWR0aCgp
OwotCi0gICAgcmV0dXJuIHdpZHRoU3VtOwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cEZvbnRGZWF0
dXJlcyhjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBzZXR0aW5ncywgSEJfRmFjZVJlY18qIGhi
RmFjZSkKLXsKLSAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
aGJGYWNlLT5nc3ViKQotICAgICAgICBIQl9HU1VCX0NsZWFyX0ZlYXR1cmVzKGhiRmFjZS0+Z3N1
Yik7Ci0gICAgaWYgKGhiRmFjZS0+Z3BvcykKLSAgICAgICAgSEJfR1BPU19DbGVhcl9GZWF0dXJl
cyhoYkZhY2UtPmdwb3MpOwotCi0gICAgSEJfVVNob3J0IHNjcmlwdEluZGV4ID0gMDsKLSAgICBI
Ql9HU1VCX1NlbGVjdF9TY3JpcHQoaGJGYWNlLT5nc3ViLCBIQl9NQUtFX1RBRygnRCcsICdGJywg
J0wnLCAnVCcpLCAmc2NyaXB0SW5kZXgpOwotICAgIHNpemVfdCBudW1GZWF0dXJlcyA9IHNldHRp
bmdzLT5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1GZWF0dXJlczsgKytp
KSB7Ci0gICAgICAgIGlmICghc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgSEJfVVNob3J0IGZlYXR1cmVJbmRleCA9IDA7Ci0gICAgICAgIGNv
bnN0IFVDaGFyKiB0YWcgPSBzZXR0aW5ncy0+YXQoaSkudGFnKCkuY2hhcmFjdGVycygpOwotICAg
ICAgICBIQl9VSW50IGZlYXR1cmUgPSBIQl9NQUtFX1RBRyh0YWdbMF0sIHRhZ1sxXSwgdGFnWzJd
LCB0YWdbM10pOwotICAgICAgICBpZiAoaGJGYWNlLT5nc3ViICYmIEhCX0dTVUJfU2VsZWN0X0Zl
YXR1cmUoaGJGYWNlLT5nc3ViLCBmZWF0dXJlLCBzY3JpcHRJbmRleCwgMHhmZmZmLCAmZmVhdHVy
ZUluZGV4KSA9PSBIQl9FcnJfT2spCi0gICAgICAgICAgICBIQl9HU1VCX0FkZF9GZWF0dXJlKGhi
RmFjZS0+Z3N1YiwgZmVhdHVyZUluZGV4LCBzZXR0aW5ncy0+YXQoaSkudmFsdWUoKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGhiRmFjZS0+Z3BvcyAmJiBIQl9HUE9TX1NlbGVjdF9GZWF0dXJlKGhiRmFj
ZS0+Z3BvcywgZmVhdHVyZSwgc2NyaXB0SW5kZXgsIDB4ZmZmZiwgJmZlYXR1cmVJbmRleCkgPT0g
SEJfRXJyX09rKQotICAgICAgICAgICAgSEJfR1BPU19BZGRfRmVhdHVyZShoYkZhY2UtPmdwb3Ms
IGZlYXR1cmVJbmRleCwgc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCkpOwotICAgIH0KLX0KLQotc3Rh
dGljIFVDaGFyMzIgc3Vycm9nYXRlUGFpckF3YXJlRmlyc3RDaGFyYWN0ZXIoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAoVTE2X0lTX1NVUlJPR0FU
RShjaGFyYWN0ZXJzWzBdKSkgewotICAgICAgICBpZiAoIVUxNl9JU19TVVJST0dBVEVfTEVBRChj
aGFyYWN0ZXJzWzBdKSB8fCBsZW5ndGggPCAyIHx8ICFVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1sx
XSkpCi0gICAgICAgICAgICByZXR1cm4gJyAnOwotICAgICAgICByZXR1cm4gVTE2X0dFVF9TVVBQ
TEVNRU5UQVJZKGNoYXJhY3RlcnNbMF0sIGNoYXJhY3RlcnNbMV0pOwotICAgIH0KLSAgICByZXR1
cm4gY2hhcmFjdGVyc1swXTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldHVw
Rm9udEZvclNjcmlwdFJ1bigpCi17Ci0gICAgRm9udERhdGFWYXJpYW50IGZvbnREYXRhVmFyaWFu
dCA9IEF1dG9WYXJpYW50OwotICAgIC8vIERldGVybWluZSBpZiB0aGlzIHNjcmlwdCBydW4gbmVl
ZHMgdG8gYmUgY29udmVydGVkIHRvIHNtYWxsIGNhcHMuCi0gICAgLy8gbmV4dFNjcmlwdFJ1bigp
IHdpbGwgYWx3YXlzIHNlbmQgdXMgYSBydW4gb2YgdGhlIHNhbWUgY2FzZSwgYmVjYXVzZSBhCi0g
ICAgLy8gY2FzZSBjaGFuZ2Ugd2hpbGUgaW4gc21hbGwtY2FwcyBtb2RlIGFsd2F5cyByZXN1bHRz
IGluIGRpZmZlcmVudAotICAgIC8vIEZvbnREYXRhLCBzbyB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sg
dGhlIGZpcnN0IGNoYXJhY3RlcidzIGNhc2UuCi0gICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMo
KSAmJiB1X2lzbG93ZXIobV9pdGVtLnN0cmluZ1ttX2l0ZW0uaXRlbS5wb3NdKSkgewotICAgICAg
ICBtX3NtYWxsQ2Fwc1N0cmluZyA9IFN0cmluZyhtX3J1bi5kYXRhKG1faXRlbS5pdGVtLnBvcyks
IG1faXRlbS5pdGVtLmxlbmd0aCk7Ci0gICAgICAgIG1fc21hbGxDYXBzU3RyaW5nLm1ha2VVcHBl
cigpOwotICAgICAgICBtX2l0ZW0uc3RyaW5nID0gbV9zbWFsbENhcHNTdHJpbmcuY2hhcmFjdGVy
cygpOwotICAgICAgICBtX2l0ZW0uaXRlbS5wb3MgPSAwOwotICAgICAgICBmb250RGF0YVZhcmlh
bnQgPSBTbWFsbENhcHNWYXJpYW50OwotICAgIH0KLSAgICBVQ2hhcjMyIGN1cnJlbnQgPSBzdXJy
b2dhdGVQYWlyQXdhcmVGaXJzdENoYXJhY3RlcihzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KCZt
X2l0ZW0uc3RyaW5nW21faXRlbS5pdGVtLnBvc10pLCBtX2l0ZW0uaXRlbS5sZW5ndGggLSBtX2l0
ZW0uaXRlbS5wb3MpOwotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IG1fZm9udC0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGN1cnJlbnQsIGZhbHNlLCBmb250RGF0YVZhcmlhbnQpLmZvbnRE
YXRhOwotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnREYXRh
LT5mb250RGF0YUZvckNoYXJhY3RlcignICcpLT5wbGF0Zm9ybURhdGEoKTsKLSAgICBtX2l0ZW0u
ZmFjZSA9IHBsYXRmb3JtRGF0YS5oYXJmYnV6ekZhY2UoKS0+ZmFjZSgpOwotICAgIC8vIFdlIG9u
bHkgbmVlZCB0byBzZXR1cCBmb250IGZlYXR1cmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1
bi4KLSAgICBpZiAoIW1faXRlbS5pdGVtLnBvcykKLSAgICAgICAgc2V0dXBGb250RmVhdHVyZXMo
bV9mb250LT5mb250RGVzY3JpcHRpb24oKS5mZWF0dXJlU2V0dGluZ3MoKSwgbV9pdGVtLmZhY2Up
OwotICAgIHZvaWQqIG9wYXF1ZVBsYXRmb3JtRGF0YSA9IGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3Jt
RGF0YSo+KCZwbGF0Zm9ybURhdGEpOwotICAgIG1faXRlbS5mb250LT51c2VyRGF0YSA9IG9wYXF1
ZVBsYXRmb3JtRGF0YTsKLQotICAgIGludCBzaXplID0gcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAg
ICBtX2l0ZW0uZm9udC0+eF9wcGVtID0gc2l6ZTsKLSAgICBtX2l0ZW0uZm9udC0+eV9wcGVtID0g
c2l6ZTsKLSAgICAvLyB4XyBhbmQgeV9zY2FsZSBhcmUgdGhlIGNvbnZlcnNpb24gZmFjdG9ycyBm
cm9tIGZvbnQgZGVzaWduIHNwYWNlIChmRW1TaXplKSB0byAxLzY0dGggb2YgZGV2aWNlIHBpeGVs
cyBpbiAxNi4xNiBmb3JtYXQuCi0gICAgY29uc3QgaW50IGRldmljZVBpeGVsRnJhY3Rpb24gPSA2
NDsKLSAgICBjb25zdCBpbnQgbXVsdGlwbHlGb3IxNkRvdDE2ID0gMSA8PCAxNjsKLSAgICBpbnQg
c2NhbGUgPSBkZXZpY2VQaXhlbEZyYWN0aW9uICogc2l6ZSAqIG11bHRpcGx5Rm9yMTZEb3QxNiAv
IHBsYXRmb3JtRGF0YS5lbVNpemVJbkZvbnRVbml0cygpOwotICAgIG1faXRlbS5mb250LT54X3Nj
YWxlID0gc2NhbGU7Ci0gICAgbV9pdGVtLmZvbnQtPnlfc2NhbGUgPSBzY2FsZTsKLX0KLQotdm9p
ZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmRlbGV0ZUdseXBoQXJyYXlzKCkKLXsKLSAgICBkZWxl
dGVbXSBtX2l0ZW0uZ2x5cGhzOwotICAgIGRlbGV0ZVtdIG1faXRlbS5hdHRyaWJ1dGVzOwotICAg
IGRlbGV0ZVtdIG1faXRlbS5hZHZhbmNlczsKLSAgICBkZWxldGVbXSBtX2l0ZW0ub2Zmc2V0czsK
LSAgICBkZWxldGVbXSBtX2dseXBoczE2OwotICAgIGRlbGV0ZVtdIG1fcG9zaXRpb25zOwotfQot
Ci12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y3JlYXRlR2x5cGhBcnJheXMoaW50IHNpemUp
Ci17Ci0gICAgbV9pdGVtLmdseXBocyA9IG5ldyBIQl9HbHlwaFtzaXplXTsKLSAgICBtX2l0ZW0u
YXR0cmlidXRlcyA9IG5ldyBIQl9HbHlwaEF0dHJpYnV0ZXNbc2l6ZV07Ci0gICAgbV9pdGVtLmFk
dmFuY2VzID0gbmV3IEhCX0ZpeGVkW3NpemVdOwotICAgIG1faXRlbS5vZmZzZXRzID0gbmV3IEhC
X0ZpeGVkUG9pbnRbc2l6ZV07Ci0KLSAgICBtX2dseXBoczE2ID0gbmV3IHVpbnQxNl90W3NpemVd
OwotICAgIG1fcG9zaXRpb25zID0gbmV3IFNrUG9pbnRbc2l6ZV07Ci0KLSAgICBtX2l0ZW0ubnVt
X2dseXBocyA9IHNpemU7Ci0gICAgbV9nbHlwaHNBcnJheUNhcGFjaXR5ID0gc2l6ZTsgLy8gU2F2
ZSB0aGUgR2x5cGhBcnJheXMgc2l6ZS4KLSAgICByZXNldEdseXBoQXJyYXlzKCk7Ci19Ci0KLXZv
aWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpyZXNldEdseXBoQXJyYXlzKCkKLXsKLSAgICBpbnQg
c2l6ZSA9IG1faXRlbS5udW1fZ2x5cGhzOwotICAgIC8vIEFsbCB0aGUgdHlwZXMgaGVyZSBkb24n
dCBoYXZlIHBvaW50ZXJzLiBJdCBpcyBzYWZlIHRvIHJlc2V0IHRvCi0gICAgLy8gemVybyB1bmxl
c3MgSGFyZmJ1enogYnJlYWtzIHRoZSBjb21wYXRpYmlsaXR5IGluIHRoZSBmdXR1cmUuCi0gICAg
bWVtc2V0KG1faXRlbS5nbHlwaHMsIDAsIHNpemUgKiBzaXplb2YoSEJfR2x5cGgpKTsKLSAgICBt
ZW1zZXQobV9pdGVtLmF0dHJpYnV0ZXMsIDAsIHNpemUgKiBzaXplb2YoSEJfR2x5cGhBdHRyaWJ1
dGVzKSk7Ci0gICAgbWVtc2V0KG1faXRlbS5hZHZhbmNlcywgMCwgc2l6ZSAqIHNpemVvZihIQl9G
aXhlZCkpOwotICAgIG1lbXNldChtX2l0ZW0ub2Zmc2V0cywgMCwgc2l6ZSAqIHNpemVvZihIQl9G
aXhlZFBvaW50KSk7Ci0gICAgbWVtc2V0KG1fZ2x5cGhzMTYsIDAsIHNpemUgKiBzaXplb2YodWlu
dDE2X3QpKTsKLSAgICBtZW1zZXQobV9wb3NpdGlvbnMsIDAsIHNpemUgKiBzaXplb2YoU2tQb2lu
dCkpOwotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2hhcGVHbHlwaHMoKQotewot
ICAgIC8vIEhCX1NoYXBlSXRlbSgpIHJlc2V0cyBtX2l0ZW0ubnVtX2dseXBocy4gSWYgdGhlIHBy
ZXZpb3VzIGNhbGwgdG8KLSAgICAvLyBIQl9TaGFwZUl0ZW0oKSB1c2VkIGxlc3Mgc3BhY2UgdGhh
biB3YXMgYXZhaWxhYmxlLCB0aGUgY2FwYWNpdHkgb2YKLSAgICAvLyB0aGUgYXJyYXkgbWF5IGJl
IGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IHZhbHVlIG9mIG1faXRlbS5udW1fZ2x5cGhzLgotICAg
IC8vIFNvLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBudW1fZ2x5cGhzIHRvIHRoZSBjYXBhY2l0eSBv
ZiB0aGUgYXJyYXkuCi0gICAgbV9pdGVtLm51bV9nbHlwaHMgPSBtX2dseXBoc0FycmF5Q2FwYWNp
dHk7Ci0gICAgcmVzZXRHbHlwaEFycmF5cygpOwotICAgIHdoaWxlICghSEJfU2hhcGVJdGVtKCZt
X2l0ZW0pKSB7Ci0gICAgICAgIC8vIFdlIG92ZXJmbG93ZWQgb3VyIGFycmF5cy4gUmVzaXplIGFu
ZCByZXRyeS4KLSAgICAgICAgLy8gSEJfU2hhcGVJdGVtIGZpbGxzIGluIG1faXRlbS5udW1fZ2x5
cGhzIHdpdGggdGhlIG5lZWRlZCBzaXplLgotICAgICAgICBkZWxldGVHbHlwaEFycmF5cygpOwot
ICAgICAgICAvLyBUaGUgfCsgMXwgaGVyZSBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEhh
cmZidXp6OiB0aGUgS2htZXIKLSAgICAgICAgLy8gc2hhcGVyIChhdCBsZWFzdCkgY2FuIGZhaWwg
YmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgZ2x5cGggYnVmZmVycwotICAgICAgICAvLyBhbmQgcmVx
dWVzdCAwIGFkZGl0aW9uYWwgZ2x5cGhzOiB0aHJvd2luZyB1cyBpbnRvIGFuIGluZmluaXRlCi0g
ICAgICAgIC8vIGxvb3AuCi0gICAgICAgIGNyZWF0ZUdseXBoQXJyYXlzKG1faXRlbS5udW1fZ2x5
cGhzICsgMSk7Ci0gICAgfQotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0R2x5
cGhQb3NpdGlvbnMoYm9vbCBpc1JUTCkKLXsKLSAgICBjb25zdCBkb3VibGUgcnRsRmxpcCA9IGlz
UlRMID8gLTEgOiAxOwotICAgIGRvdWJsZSBwb3NpdGlvbiA9IDA7Ci0KLSAgICAvLyBsb2dDbHVz
dGVyc0luZGV4IGluZGV4ZXMgbG9nQ2x1c3RlcnMgZm9yIHRoZSBmaXJzdCBjb2RlcG9pbnQgb2Yg
dGhlIGN1cnJlbnQgZ2x5cGguCi0gICAgLy8gRWFjaCB0aW1lIHdlIGFkdmFuY2UgYSBnbHlwaCwg
d2Ugc2tpcCBvdmVyIGFsbCB0aGUgY29kZXBvaW50cyB0aGF0IGNvbnRyaWJ1dGVkIHRvIHRoZSBj
dXJyZW50IGdseXBoLgotICAgIGludCBsb2dDbHVzdGVyc0luZGV4ID0gMDsKLQotICAgIC8vIEl0
ZXJhdGUgdGhyb3VnaCB0aGUgZ2x5cGhzIGluIGxvZ2ljYWwgb3JkZXIsIGZsaXBwaW5nIGZvciBS
VEwgd2hlcmUgbmVjZXNzYXJ5LgotICAgIC8vIEdseXBocyBhcmUgcG9zaXRpb25lZCBzdGFydGlu
ZyBmcm9tIG1fb2Zmc2V0WDsgaW4gUlRMIG1vZGUgdGhleSBnbyBsZWZ0d2FyZHMgZnJvbSB0aGVy
ZS4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbS5udW1fZ2x5cGhzOyArK2kpIHsK
LSAgICAgICAgd2hpbGUgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2dDbHVzdGVyc0luZGV4KSA8
IG1faXRlbS5pdGVtLmxlbmd0aCAmJiBtX2l0ZW0ubG9nX2NsdXN0ZXJzW2xvZ0NsdXN0ZXJzSW5k
ZXhdIDwgaSkKLSAgICAgICAgICAgIGxvZ0NsdXN0ZXJzSW5kZXgrKzsKLQotICAgICAgICAvLyBJ
ZiB0aGUgY3VycmVudCBnbHlwaCBpcyBqdXN0IGFmdGVyIGEgc3BhY2UsIGFkZCBpbiB0aGUgd29y
ZCBzcGFjaW5nLgotICAgICAgICBwb3NpdGlvbiArPSBkZXRlcm1pbmVXb3JkQnJlYWtTcGFjaW5n
KGxvZ0NsdXN0ZXJzSW5kZXgpOwotCi0gICAgICAgIG1fZ2x5cGhzMTZbaV0gPSBtX2l0ZW0uZ2x5
cGhzW2ldOwotICAgICAgICBkb3VibGUgb2Zmc2V0WCA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50
ZWdlcihtX2l0ZW0ub2Zmc2V0c1tpXS54KTsKLSAgICAgICAgZG91YmxlIG9mZnNldFkgPSB0cnVu
Y2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLm9mZnNldHNbaV0ueSk7Ci0gICAgICAgIGRv
dWJsZSBhZHZhbmNlID0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKG1faXRlbS5hZHZhbmNl
c1tpXSk7Ci0gICAgICAgIGlmIChpc1JUTCkKLSAgICAgICAgICAgIG9mZnNldFggLT0gYWR2YW5j
ZTsKLQotICAgICAgICBtX3Bvc2l0aW9uc1tpXS5zZXQobV9vZmZzZXRYICsgKHBvc2l0aW9uICog
cnRsRmxpcCkgKyBvZmZzZXRYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGFydGlu
Z1kgKyBvZmZzZXRZKTsKLQotICAgICAgICBpZiAobV9jdXJyZW50Rm9udERhdGEtPmlzWmVyb1dp
ZHRoU3BhY2VHbHlwaChtX2dseXBoczE2W2ldKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIC8vIEF0IHRoZSBlbmQgb2YgZWFjaCBjbHVzdGVyLCBhZGQgaW4gdGhlIGxldHRlciBz
cGFjaW5nLgotICAgICAgICBpZiAoaSArIDEgPT0gbV9pdGVtLm51bV9nbHlwaHMgfHwgbV9pdGVt
LmF0dHJpYnV0ZXNbaSArIDFdLmNsdXN0ZXJTdGFydCkKLSAgICAgICAgICAgIHBvc2l0aW9uICs9
IG1fbGV0dGVyU3BhY2luZzsKLQotICAgICAgICBwb3NpdGlvbiArPSBhZHZhbmNlOwotICAgIH0K
LSAgICBtX3BpeGVsV2lkdGggPSBzdGQ6Om1heChwb3NpdGlvbiwgMC4wKTsKLSAgICBtX29mZnNl
dFggKz0gbV9waXhlbFdpZHRoICogcnRsRmxpcDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6Om5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNoYXJzKGNvbnN0IFVDaGFyKiBzb3VyY2Us
IGJvb2wgcnRsLCBVQ2hhciogZGVzdGluYXRpb24sIGludCBsZW5ndGgpCi17Ci0gICAgaW50IHBv
c2l0aW9uID0gMDsKLSAgICBib29sIGVycm9yID0gZmFsc2U7Ci0gICAgLy8gSXRlcmF0ZSBjaGFy
YWN0ZXJzIGluIHNvdXJjZSBhbmQgbWlycm9yIGNoYXJhY3RlciBpZiBuZWVkZWQuCi0gICAgd2hp
bGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7Ci0gICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotICAg
ICAgICBpbnQgbmV4dFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgICAgIFUxNl9ORVhUKHNvdXJj
ZSwgbmV4dFBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7Ci0gICAgICAgIGlmIChGb250Ojp0
cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgIGNoYXJhY3RlciA9ICcgJzsKLSAg
ICAgICAgZWxzZSBpZiAoRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCi0g
ICAgICAgICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgZWxzZSBpZiAo
cnRsKQotICAgICAgICAgICAgY2hhcmFjdGVyID0gdV9jaGFyTWlycm9yKGNoYXJhY3Rlcik7Ci0g
ICAgICAgIFUxNl9BUFBFTkQoZGVzdGluYXRpb24sIHBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rl
ciwgZXJyb3IpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAhZXJyb3IpOwotICAgICAg
ICBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKLSAgICB9Ci19Ci0KLWNvbnN0IFRleHRSdW4mIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Z2V0Tm9ybWFsaXplZFRleHRSdW4oY29uc3QgVGV4dFJ1biYg
b3JpZ2luYWxSdW4sIE93blB0cjxUZXh0UnVuPiYgbm9ybWFsaXplZFJ1biwgT3duQXJyYXlQdHI8
VUNoYXI+JiBub3JtYWxpemVkQnVmZmVyKQotewotICAgIC8vIE5vcm1hbGl6ZSB0aGUgdGV4dCBy
dW4gaW4gdGhyZWUgd2F5czoKLSAgICAvLyAxKSBDb252ZXJ0IHRoZSB8b3JpZ2luYWxSdW58IHRv
IE5GQyBub3JtYWxpemVkIGZvcm0gaWYgY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCi0gICAg
Ly8gKFUrMDMwMC4uKSBhcmUgdXNlZCBpbiB0aGUgcnVuLiBUaGlzIGNvbnZlcnNpb24gaXMgbmVj
ZXNzYXJ5IHNpbmNlIG1vc3QgT3BlblR5cGUKLSAgICAvLyBmb250cyAoZS5nLiwgQXJpYWwpIGRv
bid0IGhhdmUgc3Vic3RpdHV0aW9uIHJ1bGVzIGZvciB0aGUgZGlhY3JpdGljYWwgbWFya3MgaW4K
LSAgICAvLyB0aGVpciBHU1VCIHRhYmxlcy4KLSAgICAvLwotICAgIC8vIE5vdGUgdGhhdCB3ZSBk
b24ndCB1c2UgdGhlIGljdTo6Tm9ybWFsaXplcjo6aXNOb3JtYWxpemVkKFVOT1JNX05GQykgQVBJ
IGhlcmUgc2luY2UKLSAgICAvLyB0aGUgQVBJIHJldHVybnMgRkFMU0UgKD0gbm90IG5vcm1hbGl6
ZWQpIGZvciBjb21wbGV4IHJ1bnMgdGhhdCBkb24ndCByZXF1aXJlIE5GQwotICAgIC8vIG5vcm1h
bGl6YXRpb24gKGUuZy4sIEFyYWJpYyB0ZXh0KS4gVW5sZXNzIHRoZSBydW4gY29udGFpbnMgdGhl
IGRpYWNyaXRpY2FsIG1hcmtzLAotICAgIC8vIEhhcmZidXp6IHdpbGwgZG8gdGhlIHNhbWUgdGhp
bmcgZm9yIHVzIHVzaW5nIHRoZSBHU1VCIHRhYmxlLgotICAgIC8vIDIpIENvbnZlcnQgc3BhY2lu
ZyBjaGFyYWN0ZXJzIGludG8gcGxhaW4gc3BhY2VzLCBhcyBzb21lIGZvbnRzIHdpbGwgcHJvdmlk
ZSBnbHlwaHMKLSAgICAvLyBmb3IgY2hhcmFjdGVycyBsaWtlICdcbicgb3RoZXJ3aXNlLgotICAg
IC8vIDMpIENvbnZlcnQgbWlycm9yZWQgY2hhcmFjdGVycyBzdWNoIGFzIHBhcmVudGhlc2lzIGZv
ciBydGwgdGV4dC4KLQotICAgIC8vIENvbnZlcnQgdG8gTkZDIGZvcm0gaWYgdGhlIHRleHQgaGFz
IGRpYWNyaXRpY2FsIG1hcmtzLgotICAgIGljdTo6VW5pY29kZVN0cmluZyBub3JtYWxpemVkU3Ry
aW5nOwotICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG9yaWdpbmFsUnVuLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgVUNoYXIg
Y2ggPSBvcmlnaW5hbFJ1bltpXTsKLSAgICAgICAgaWYgKDo6dWJsb2NrX2dldENvZGUoY2gpID09
IFVCTE9DS19DT01CSU5JTkdfRElBQ1JJVElDQUxfTUFSS1MpIHsKLSAgICAgICAgICAgIGljdTo6
Tm9ybWFsaXplcjo6bm9ybWFsaXplKGljdTo6VW5pY29kZVN0cmluZyhvcmlnaW5hbFJ1bi5jaGFy
YWN0ZXJzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5h
bFJ1bi5sZW5ndGgoKSksIFVOT1JNX05GQywgMCAvKiBubyBvcHRpb25zICovLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFN0cmluZywgZXJyb3IpOwot
ICAgICAgICAgICAgaWYgKFVfRkFJTFVSRShlcnJvcikpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG9yaWdpbmFsUnVuOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBOb3JtYWxpemUgc3BhY2UgYW5kIG1pcnJvciBwYXJlbnRoZXNpcyBmb3IgcnRsIHRleHQu
Ci0gICAgaW50IG5vcm1hbGl6ZWRCdWZmZXJMZW5ndGg7Ci0gICAgY29uc3QgVUNoYXIqIHNvdXJj
ZVRleHQ7Ci0gICAgaWYgKG5vcm1hbGl6ZWRTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG5v
cm1hbGl6ZWRCdWZmZXJMZW5ndGggPSBvcmlnaW5hbFJ1bi5sZW5ndGgoKTsKLSAgICAgICAgc291
cmNlVGV4dCA9IG9yaWdpbmFsUnVuLmNoYXJhY3RlcnMoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBub3JtYWxpemVkQnVmZmVyTGVuZ3RoID0gbm9ybWFsaXplZFN0cmluZy5sZW5ndGgoKTsKLSAg
ICAgICAgc291cmNlVGV4dCA9IG5vcm1hbGl6ZWRTdHJpbmcuZ2V0QnVmZmVyKCk7Ci0gICAgfQot
Ci0gICAgbm9ybWFsaXplZEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IFVDaGFyW25vcm1hbGl6
ZWRCdWZmZXJMZW5ndGggKyAxXSk7Ci0KLSAgICBub3JtYWxpemVTcGFjZXNBbmRNaXJyb3JDaGFy
cyhzb3VyY2VUZXh0LCBvcmlnaW5hbFJ1bi5ydGwoKSwgbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwg
bm9ybWFsaXplZEJ1ZmZlckxlbmd0aCk7Ci0KLSAgICBub3JtYWxpemVkUnVuID0gYWRvcHRQdHIo
bmV3IFRleHRSdW4ob3JpZ2luYWxSdW4pKTsKLSAgICBub3JtYWxpemVkUnVuLT5zZXRUZXh0KG5v
cm1hbGl6ZWRCdWZmZXIuZ2V0KCksIG5vcm1hbGl6ZWRCdWZmZXJMZW5ndGgpOwotICAgIHJldHVy
biAqbm9ybWFsaXplZFJ1bjsKLX0KLQotaW50IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2x5cGhJ
bmRleEZvclhQb3NpdGlvbkluU2NyaXB0UnVuKGludCB0YXJnZXRYKSBjb25zdAotewotICAgIC8v
IEl0ZXJhdGUgdGhyb3VnaCB0aGUgZ2x5cGhzIGluIGxvZ2ljYWwgb3JkZXIsIHNlZWluZyB3aGV0
aGVyIHRhcmdldFggZmFsbHMgYmV0d2VlbiB0aGUgcHJldmlvdXMKLSAgICAvLyBwb3NpdGlvbiBh
bmQgaGFsZndheSB0aHJvdWdoIHRoZSBjdXJyZW50IGdseXBoLgotICAgIC8vIEZJWE1FOiB0aGlz
IGNvZGUgcHJvYmFibHkgYmVsb25ncyBpbiBDb21wbGV4VGV4dENvbnRyb2xsZXIuCi0gICAgaW50
IGxhc3RYID0gb2Zmc2V0WCgpIC0gKHJ0bCgpID8gLW1fcGl4ZWxXaWR0aCA6IG1fcGl4ZWxXaWR0
aCk7Ci0gICAgZm9yIChpbnQgZ2x5cGhJbmRleCA9IDA7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihn
bHlwaEluZGV4KSA8IGxlbmd0aCgpOyArK2dseXBoSW5kZXgpIHsKLSAgICAgICAgaW50IGFkdmFu
Y2UgPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLmFkdmFuY2VzW2dseXBoSW5k
ZXhdKTsKLSAgICAgICAgaW50IG5leHRYID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbnMoKVtn
bHlwaEluZGV4XS54KCkpICsgYWR2YW5jZSAvIDI7Ci0gICAgICAgIGlmIChzdGQ6Om1pbihuZXh0
WCwgbGFzdFgpIDw9IHRhcmdldFggJiYgdGFyZ2V0WCA8PSBzdGQ6Om1heChuZXh0WCwgbGFzdFgp
KQotICAgICAgICAgICAgcmV0dXJuIGdseXBoSW5kZXg7Ci0gICAgICAgIGxhc3RYID0gbmV4dFg7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGxlbmd0aCgpIC0gMTsKLX0KLQotaW50IENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50IHRhcmdldFgpCi17Ci0gICAgdW5zaWdu
ZWQgYmFzZVBvc2l0aW9uID0gMDsKLQotICAgIGludCB4ID0gb2Zmc2V0WCgpOwotICAgIHdoaWxl
IChuZXh0U2NyaXB0UnVuKCkpIHsKLSAgICAgICAgaW50IG5leHRYID0gb2Zmc2V0WCgpOwotCi0g
ICAgICAgIGlmIChzdGQ6Om1pbih4LCBuZXh0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IHN0
ZDo6bWF4KHgsIG5leHRYKSkgewotICAgICAgICAgICAgLy8gVGhlIHggdmFsdWUgaW4gcXVlc3Rp
b24gaXMgd2l0aGluIHRoaXMgc2NyaXB0IHJ1bi4KLSAgICAgICAgICAgIGNvbnN0IGludCBnbHlw
aEluZGV4ID0gZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0UnVuKHRhcmdldFgpOwotCi0g
ICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgZ2x5cGggaW5kZXgsIHdlIGhhdmUgdG8g
dHVybiB0aGF0IGludG8gYQotICAgICAgICAgICAgLy8gY29kZS1wb2ludCBpbmRleC4gQmVjYXVz
ZSBvZiBsaWdhdHVyZXMsIHNldmVyYWwgY29kZS1wb2ludHMgbWF5Ci0gICAgICAgICAgICAvLyBo
YXZlIGdvbmUgaW50byBhIHNpbmdsZSBnbHlwaC4gV2UgaXRlcmF0ZSBvdmVyIHRoZSBjbHVzdGVy
cyBsb2cKLSAgICAgICAgICAgIC8vIGFuZCBmaW5kIHRoZSBmaXJzdCBjb2RlLXBvaW50IHdoaWNo
IGNvbnRyaWJ1dGVkIHRvIHRoZSBnbHlwaC4KLQotICAgICAgICAgICAgLy8gU29tZSBzaGFwZXJz
IChpLmUuIEtobWVyKSB3aWxsIHByb2R1Y2UgY2x1c3RlciBsb2dzIHdoaWNoIHJlcG9ydAotICAg
ICAgICAgICAgLy8gdGhhdCAvbm8vIGNvZGUgcG9pbnRzIGNvbnRyaWJ1dGVkIHRvIGNlcnRhaW4g
Z2x5cGhzLiBCZWNhdXNlIG9mCi0gICAgICAgICAgICAvLyB0aGlzLCB3ZSB0YWtlIGFueSBjb2Rl
IHBvaW50IHdoaWNoIGNvbnRyaWJ1dGVkIHRvIHRoZSBnbHlwaCBpbgotICAgICAgICAgICAgLy8g
cXVlc3Rpb24sIG9yIGFueSBzdWJzZXF1ZW50IGdseXBoLiBJZiB3ZSBydW4gb2ZmIHRoZSBlbmQs
IHRoZW4KLSAgICAgICAgICAgIC8vIHdlIHRha2UgdGhlIGxhc3QgY29kZSBwb2ludC4KLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBudW1Db2RlUG9pbnRzKCk7ICsraikgewot
ICAgICAgICAgICAgICAgIGlmIChtX2l0ZW0ubG9nX2NsdXN0ZXJzW2pdID49IGdseXBoSW5kZXgp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlUG9zaXRpb24gKyBqOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICByZXR1cm4gYmFzZVBvc2l0aW9uICsgbnVtQ29kZVBvaW50cygp
IC0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGJhc2VQb3NpdGlvbiArPSBudW1Db2RlUG9pbnRz
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJhc2VQb3NpdGlvbjsKLX0KLQotRmxvYXRSZWN0IENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6c2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0bykKLXsKLSAgICBpbnQgZnJvbVggPSAtMSwg
dG9YID0gLTE7Ci0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzY3JpcHQgcnVucyBpbiBsb2dp
Y2FsIG9yZGVyLCBzZWFyY2hpbmcgZm9yIHRoZSBydW4gY292ZXJpbmcgdGhlIHBvc2l0aW9ucyBv
ZiBpbnRlcmVzdC4KLSAgICB3aGlsZSAobmV4dFNjcmlwdFJ1bigpICYmIChmcm9tWCA9PSAtMSB8
fCB0b1ggPT0gLTEpKSB7Ci0gICAgICAgIGlmIChmcm9tWCA9PSAtMSAmJiBmcm9tID49IDAgJiYg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb20pIDwgbnVtQ29kZVBvaW50cygpKSB7Ci0gICAgICAg
ICAgICAvLyB8ZnJvbXwgaXMgd2l0aGluIHRoaXMgc2NyaXB0IHJ1bi4gU28gd2UgaW5kZXggdGhl
IGNsdXN0ZXJzIGxvZyB0bwotICAgICAgICAgICAgLy8gZmluZCB3aGljaCBnbHlwaCB0aGlzIGNv
ZGUtcG9pbnQgY29udHJpYnV0ZWQgdG8gYW5kIGZpbmQgaXRzIHgKLSAgICAgICAgICAgIC8vIHBv
c2l0aW9uLgotICAgICAgICAgICAgaW50IGdseXBoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1tmcm9t
XTsKLSAgICAgICAgICAgIGZyb21YID0gcG9zaXRpb25zKClbZ2x5cGhdLngoKTsKLSAgICAgICAg
ICAgIGlmIChydGwoKSkKLSAgICAgICAgICAgICAgICBmcm9tWCArPSB0cnVuY2F0ZUZpeGVkUG9p
bnRUb0ludGVnZXIobV9pdGVtLmFkdmFuY2VzW2dseXBoXSk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgZnJvbSAtPSBudW1Db2RlUG9pbnRzKCk7Ci0KLSAgICAgICAgaWYgKHRvWCA9PSAt
MSAmJiB0byA+PSAwICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgPCBudW1Db2RlUG9pbnRz
KCkpIHsKLSAgICAgICAgICAgIGludCBnbHlwaCA9IG1faXRlbS5sb2dfY2x1c3RlcnNbdG9dOwot
ICAgICAgICAgICAgdG9YID0gcG9zaXRpb25zKClbZ2x5cGhdLngoKTsKLSAgICAgICAgICAgIGlm
IChydGwoKSkKLSAgICAgICAgICAgICAgICB0b1ggKz0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRl
Z2VyKG1faXRlbS5hZHZhbmNlc1tnbHlwaF0pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHRvIC09IG51bUNvZGVQb2ludHMoKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgcG9zaXRpb24gaW4g
cXVlc3Rpb24gbWlnaHQgYmUganVzdCBhZnRlciB0aGUgdGV4dC4KLSAgICBpZiAoZnJvbVggPT0g
LTEpCi0gICAgICAgIGZyb21YID0gb2Zmc2V0WCgpOwotICAgIGlmICh0b1ggPT0gLTEpCi0gICAg
ICAgIHRvWCA9IG9mZnNldFgoKTsKLQotICAgIEFTU0VSVChmcm9tWCAhPSAtMSAmJiB0b1ggIT0g
LTEpOwotCi0gICAgaWYgKGZyb21YIDwgdG9YKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHBv
aW50LngoKSArIGZyb21YLCBwb2ludC55KCksIHRvWCAtIGZyb21YLCBoZWlnaHQpOwotCi0gICAg
cmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyB0b1gsIHBvaW50LnkoKSwgZnJvbVggLSB0b1gs
IGhlaWdodCk7Ci19Ci0KLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpnbHlwaHNGb3JSYW5n
ZShpbnQgZnJvbSwgaW50IHRvLCBpbnQmIGZyb21HbHlwaCwgaW50JiBnbHlwaExlbmd0aCkKLXsK
LSAgICAvLyBDaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gdGhlIGN1cnJlbnQgcnVuLiBUSEVTRSBN
QVkgTk9UIEJFIElOIFJBTkdFIGFuZCBtYXkKLSAgICAvLyBiZSBuZWdhdGl2ZSwgZXRjLiBUaGUg
Y29kZSBiZWxvdyBoYW5kbGVzIHRoaXMuCi0gICAgaW50IGZyb21DaGFyID0gZnJvbSAtIG1faXRl
bS5pdGVtLnBvczsKLSAgICBpbnQgdG9DaGFyID0gdG8gLSBtX2l0ZW0uaXRlbS5wb3M7Ci0KLSAg
ICAvLyBTZWUgaWYgdGhlcmUgYXJlIGFueSBjaGFyYWN0ZXJzIGluIHRoZSBjdXJyZW50IHJ1bi4K
LSAgICBpZiAoIW51bUNvZGVQb2ludHMoKSB8fCBmcm9tQ2hhciA+PSBzdGF0aWNfY2FzdDxpbnQ+
KG51bUNvZGVQb2ludHMoKSkgfHwgdG9DaGFyIDw9IDApIHsKLSAgICAgICAgZnJvbUdseXBoID0g
LTE7Ci0gICAgICAgIGdseXBoTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIENvbXB1dGUgdGhlIHN0YXJ0aW5nIGdseXBoIHdpdGhpbiB0aGlzIHNwYW4uIHxmcm9t
fCBhbmQgfHRvfCBhcmUKLSAgICAvLyBnbG9iYWwgb2Zmc2V0cyB0aGF0IG1heSBpbnRlcnNlY3Qg
YXJiaXRyYXJpbHkgd2l0aCBvdXIgbG9jYWwgcnVuLgotICAgIGZyb21HbHlwaCA9IG1faXRlbS5s
b2dfY2x1c3RlcnNbZnJvbUNoYXIgPCAwID8gMCA6IGZyb21DaGFyXTsKLSAgICBpZiAodG9DaGFy
ID49IHN0YXRpY19jYXN0PGludD4obnVtQ29kZVBvaW50cygpKSkKLSAgICAgICAgZ2x5cGhMZW5n
dGggPSBsZW5ndGgoKSAtIGZyb21HbHlwaDsKLSAgICBlbHNlCi0gICAgICAgIGdseXBoTGVuZ3Ro
ID0gbV9pdGVtLmxvZ19jbHVzdGVyc1t0b0NoYXJdIC0gZnJvbUdseXBoOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXgu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQzZWM5NWVlZTEzNzRlMTVkMzllODIx
YjBjOTliZDMzZGEwMTM2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4
VGV4dENvbnRyb2xsZXJMaW51eC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIENvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4X2gKLSNkZWZpbmUgQ29tcGxleFRleHRDb250
cm9sbGVyTGludXhfaAotCi0jaW5jbHVkZSAiSGFyZmJ1enpTa2lhLmgiCi0jaW5jbHVkZSAiU2tQ
b2ludC5oIgotI2luY2x1ZGUgIlNrU2NhbGFyLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotCi1l
eHRlcm4gIkMiIHsKLSNpbmNsdWRlICJoYXJmYnV6ei1zaGFwZXIuaCIKLX0KLQotI2luY2x1ZGUg
PHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udDsKLWNs
YXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKLQotLy8gQ29tcGxl
eFRleHRDb250cm9sbGVyIHdhbGtzIGEgVGV4dFJ1biBhbmQgcHJlc2VudHMgZWFjaCBzY3JpcHQg
cnVuIGluIHNlcXVlbmNlLiBBCi0vLyBUZXh0UnVuIGlzIGEgc2VxdWVuY2Ugb2YgY29kZS1wb2lu
dHMgd2l0aCB0aGUgc2FtZSBlbWJlZGRpbmcgbGV2ZWwgKGkuZS4gdGhleQotLy8gYXJlIGFsbCBs
ZWZ0LXRvLXJpZ2h0IG9yIHJpZ2h0LXRvLWxlZnQpLiBBIHNjcmlwdCBydW4gaXMgYSBzdWJzZXF1
ZW5jZSB3aGVyZQotLy8gYWxsIHRoZSBjaGFyYWN0ZXJzIGhhdmUgdGhlIHNhbWUgc2NyaXB0IChl
LmcuIEFyYWJpYywgVGhhaSBldGMpLiBTaGFwaW5nIGlzCi0vLyBvbmx5IGV2ZXIgZG9uZSB3aXRo
IHNjcmlwdCBydW5zIHNpbmNlIHRoZSBzaGFwZXJzIG9ubHkga25vdyBob3cgdG8gZGVhbCB3aXRo
Ci0vLyBhIHNpbmdsZSBzY3JpcHQuCi0vLwotLy8gSXRlcmF0aW9uIGlzIGFsd2F5cyBpbiBsb2dp
Y2FsIChha2EgcmVhZGluZykgb3JkZXIuICBGb3IgUlRMIHRleHQgdGhhdCBtZWFucwotLy8gdGhl
IHJpZ2h0bW9zdCBwYXJ0IG9mIHRoZSB0ZXh0IHdpbGwgYmUgZmlyc3QuCi0vLwotLy8gT25jZSB5
b3UgaGF2ZSBzZXR1cCB0aGUgb2JqZWN0LCBjYWxsIHxuZXh0U2NyaXB0UnVufCB0byBnZXQgdGhl
IGZpcnN0IHNjcmlwdAotLy8gcnVuLiBUaGlzIHdpbGwgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGl0
ZXJhdGlvbiBpcyBjb21wbGV0ZS4gQXQgYW55IHRpbWUgeW91Ci0vLyBjYW4gY2FsbCB8cmVzZXR8
IHRvIHN0YXJ0IG92ZXIgYWdhaW4uCi1jbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXIgewotcHVi
bGljOgotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBUZXh0UnVuJiwgaW50IHN0YXJ0
aW5nWCwgaW50IHN0YXJ0aW5nWSwgdW5zaWduZWQgd29yZFNwYWNpbmcsIHVuc2lnbmVkIGxldHRl
clNwYWNpbmcsIHVuc2lnbmVkIHBhZGRpbmcsIGNvbnN0IEZvbnQqKTsKLSAgICB+Q29tcGxleFRl
eHRDb250cm9sbGVyKCk7Ci0KLSAgICBib29sIGlzV29yZEJyZWFrKHVuc2lnbmVkKTsKLSAgICBp
bnQgZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZyh1bnNpZ25lZCk7Ci0gICAgLy8gc2V0UGFkZGlu
ZyBzZXRzIGEgbnVtYmVyIG9mIHBpeGVscyB0byBiZSBkaXN0cmlidXRlZCBhY3Jvc3MgdGhlIFRl
eHRSdW4uCi0gICAgLy8gV2ViS2l0IHVzZXMgdGhpcyB0byBqdXN0aWZ5IHRleHQuCi0gICAgdm9p
ZCBzZXRQYWRkaW5nKGludCk7Ci0gICAgdm9pZCByZXNldChpbnQgb2Zmc2V0KTsKLSAgICAvLyBB
ZHZhbmNlIHRvIHRoZSBuZXh0IHNjcmlwdCBydW4sIHJldHVybmluZyBmYWxzZSB3aGVuIHRoZSBl
bmQgb2YgdGhlCi0gICAgLy8gVGV4dFJ1biBoYXMgYmVlbiByZWFjaGVkLgotICAgIGJvb2wgbmV4
dFNjcmlwdFJ1bigpOwotICAgIGZsb2F0IHdpZHRoT2ZGdWxsUnVuKCk7Ci0KLSAgICAvLyBzZXRX
b3JkU3BhY2luZ0FkanVzdG1lbnQgc2V0cyBhIGRlbHRhIChpbiBwaXhlbHMpIHdoaWNoIGlzIGFw
cGxpZWQgYXQKLSAgICAvLyBlYWNoIHdvcmQgYnJlYWsgaW4gdGhlIFRleHRSdW4uCi0gICAgdm9p
ZCBzZXRXb3JkU3BhY2luZ0FkanVzdG1lbnQoaW50IHdvcmRTcGFjaW5nQWRqdXN0bWVudCkgeyBt
X3dvcmRTcGFjaW5nQWRqdXN0bWVudCA9IHdvcmRTcGFjaW5nQWRqdXN0bWVudDsgfQotCi0gICAg
Ly8gc2V0TGV0dGVyU3BhY2luZ0FkanVzdG1lbnQgc2V0cyBhbiBhZGRpdGlvbmFsIG51bWJlciBv
ZiBwaXhlbHMgdGhhdCBpcwotICAgIC8vIGFkZGVkIHRvIHRoZSBhZHZhbmNlIGFmdGVyIGVhY2gg
b3V0cHV0IGNsdXN0ZXIuIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3VyCi0gICAgLy8gb2YgV2lk
dGhJdGVyYXRvcjo6YWR2YW5jZS4KLSAgICB2b2lkIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50
KGludCBsZXR0ZXJTcGFjaW5nQWRqdXN0bWVudCkgeyBtX2xldHRlclNwYWNpbmcgPSBsZXR0ZXJT
cGFjaW5nQWRqdXN0bWVudDsgfQotICAgIGludCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9sZXR0ZXJTcGFjaW5nOyB9Ci0KLSAgICB2b2lkIHNldHVwRm9yUlRMKCk7Ci0gICAgYm9v
bCBydGwoKSBjb25zdCB7IHJldHVybiBtX3J1bi5ydGwoKTsgfQotICAgIGNvbnN0IHVpbnQxNl90
KiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBoczE2OyB9Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggb2YgZ2x5cGhzIGZvciB0aGUgcmFuZ2UgW2Zyb20s
IHRvKSBpbiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgotICAgIHZvaWQgZ2x5cGhzRm9yUmFuZ2Uo
aW50IGZyb20sIGludCB0bywgaW50JiBmcm9tR2x5cGgsIGludCYgZ2x5cGhMZW5ndGgpOwotCi0g
ICAgLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHJldHVybmVkIGJ5IHxnbHlwaHN8
Ci0gICAgY29uc3QgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLm51bV9n
bHlwaHM7IH0KLQotICAgIC8vIFJldHVybiB0aGUgb2Zmc2V0IGZvciBlYWNoIG9mIHRoZSBnbHlw
aHMuIE5vdGUgdGhhdCB0aGlzIGlzIHRyYW5zbGF0ZWQKLSAgICAvLyBieSB0aGUgY3VycmVudCB4
IG9mZnNldCBhbmQgdGhhdCB0aGUgeCBvZmZzZXQgaXMgdXBkYXRlZCBmb3IgZWFjaCBzY3JpcHQK
LSAgICAvLyBydW4uCi0gICAgY29uc3QgU2tQb2ludCogcG9zaXRpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9wb3NpdGlvbnM7IH0KLQotICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvZGUgcG9p
bnRzIGluIHRoZSBjdXJyZW50IHNjcmlwdCBydW4KLSAgICBjb25zdCB1bnNpZ25lZCBudW1Db2Rl
UG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLml0ZW0ubGVuZ3RoOyB9Ci0KLSAgICAvLyBS
ZXR1cm4gdGhlIGN1cnJlbnQgcGl4ZWwgcG9zaXRpb24gb2YgdGhlIGNvbnRyb2xsZXIuCi0gICAg
Y29uc3QgdW5zaWduZWQgb2Zmc2V0WCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0WDsgfQotCi0g
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YUZvclNjcmlwdFJ1bigp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KG1faXRlbS5mb250
LT51c2VyRGF0YSk7IH0KLQotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQpOwotICAgIEZs
b2F0UmVjdCBzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQg
ZnJvbSAsIGludCB0byk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gUmV0dXJuIHRoZSB3aWR0aCAoaW4g
cHgpIG9mIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCi0gICAgdW5zaWduZWQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3BpeGVsV2lkdGg7IH0KLQotICAgIHZvaWQgc2V0dXBGb250Rm9yU2NyaXB0
UnVuKCk7Ci0gICAgdm9pZCBkZWxldGVHbHlwaEFycmF5cygpOwotICAgIHZvaWQgY3JlYXRlR2x5
cGhBcnJheXMoaW50KTsKLSAgICB2b2lkIHJlc2V0R2x5cGhBcnJheXMoKTsKLSAgICB2b2lkIHNo
YXBlR2x5cGhzKCk7Ci0gICAgdm9pZCBzZXRHbHlwaFBvc2l0aW9ucyhib29sKTsKLQotICAgIHN0
YXRpYyB2b2lkIG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNoYXJzKGNvbnN0IFVDaGFyKiBzb3Vy
Y2UsIGJvb2wgcnRsLCBVQ2hhciogZGVzdGluYXRpb24sIGludCBsZW5ndGgpOwotICAgIHN0YXRp
YyBjb25zdCBUZXh0UnVuJiBnZXROb3JtYWxpemVkVGV4dFJ1bihjb25zdCBUZXh0UnVuJiBvcmln
aW5hbFJ1biwgT3duUHRyPFRleHRSdW4+JiBub3JtYWxpemVkUnVuLCBPd25BcnJheVB0cjxVQ2hh
cj4mIG5vcm1hbGl6ZWRCdWZmZXIpOwotCi0gICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBsb2dpYyBp
biBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWsKLSAgICBzdGF0aWMgYm9vbCBpc0NvZGVw
b2ludFNwYWNlKEhCX1VDaGFyMTYgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnOyB9
Ci0KLSAgICBpbnQgZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0UnVuKGludCB0YXJnZXRY
KSBjb25zdDsKLQotICAgIGNvbnN0IEZvbnQqIGNvbnN0IG1fZm9udDsKLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbV9jdXJyZW50Rm9udERhdGE7Ci0gICAgSEJfU2hhcGVySXRlbSBtX2l0ZW07
Ci0gICAgdWludDE2X3QqIG1fZ2x5cGhzMTY7IC8vIEEgdmVjdG9yIG9mIDE2LWJpdCBnbHlwaCBp
ZHMuCi0gICAgU2tQb2ludCogbV9wb3NpdGlvbnM7IC8vIEEgdmVjdG9yIG9mIHBvc2l0aW9ucyBm
b3IgZWFjaCBnbHlwaC4KLSAgICBzc2l6ZV90IG1faW5kZXhPZk5leHRTY3JpcHRSdW47IC8vIElu
ZGV4ZXMgdGhlIHNjcmlwdCBydW4gaW4gfG1fcnVufC4KLSAgICBpbnQgbV9vZmZzZXRYOyAvLyBP
ZmZzZXQgaW4gcGl4ZWxzIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBzY3JpcHQgcnVuLgotICAg
IGludCBtX3N0YXJ0aW5nWTsgLy8gVGhlIFkgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIHNjcmlwdCBy
dW4uCi0gICAgdW5zaWduZWQgbV9waXhlbFdpZHRoOyAvLyBXaWR0aCAoaW4gcHgpIG9mIHRoZSBj
dXJyZW50IHNjcmlwdCBydW4uCi0gICAgdW5zaWduZWQgbV9nbHlwaHNBcnJheUNhcGFjaXR5OyAv
LyBDdXJyZW50IHNpemUgb2YgYWxsIHRoZSBIYXJmYnV6eiBhcnJheXMuCi0KLSAgICBPd25QdHI8
VGV4dFJ1bj4gbV9ub3JtYWxpemVkUnVuOwotICAgIE93bkFycmF5UHRyPFVDaGFyPiBtX25vcm1h
bGl6ZWRCdWZmZXI7IC8vIEEgYnVmZmVyIGZvciBub3JtYWxpemVkIHJ1bi4KLSAgICBjb25zdCBU
ZXh0UnVuJiBtX3J1bjsKLSAgICBpbnQgbV93b3JkU3BhY2luZ0FkanVzdG1lbnQ7IC8vIGRlbHRh
IGFkanVzdG1lbnQgKHBpeGVscykgZm9yIGVhY2ggd29yZCBicmVhay4KLSAgICBmbG9hdCBtX3Bh
ZGRpbmc7IC8vIHBpeGVscyB0byBiZSBkaXN0cmlidXRlZCBvdmVyIHRoZSBsaW5lIGF0IHdvcmQg
YnJlYWtzLgotICAgIGZsb2F0IG1fcGFkUGVyV29yZEJyZWFrOyAvLyBwaXhlbHMgdG8gYmUgYWRk
ZWQgdG8gZWFjaCB3b3JkIGJyZWFrLgotICAgIGZsb2F0IG1fcGFkRXJyb3I7IC8vIHxtX3BhZFBl
cldvcmRCcmVha3wgbWlnaHQgaGF2ZSBhIGZyYWN0aW9uYWwgY29tcG9uZW50LgotICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNpbmNlIHdlIG9ubHkgYWRkIGEgd2hvbGUgbnVtYmVyIG9mIHBhZGRp
bmcgcGl4ZWxzIGF0Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCB3b3JkIGJyZWFrIHdl
IGFjY3VtdWxhdGUgZXJyb3IuIFRoaXMgaXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgLy8g
bnVtYmVyIG9mIHBpeGVscyB0aGF0IHdlIGFyZSBiZWhpbmQgc28gZmFyLgotICAgIGludCBtX2xl
dHRlclNwYWNpbmc7IC8vIHBpeGVscyB0byBiZSBhZGRlZCBhZnRlciBlYWNoIGdseXBoLgotICAg
IFN0cmluZyBtX3NtYWxsQ2Fwc1N0cmluZzsgLy8gc3Vic3RyaW5nIG9mIG1fcnVuIGNvbnZlcnRl
ZCB0byBzbWFsbCBjYXBzLgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gQ29tcGxleFRleHRDb250cm9sbGVyTGludXhfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXguY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXguY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2FmZDg0NTgwOTYwZTQ1OWU2YzkwNDc5NTJi
ZWUyYjU0ZDY5MTdjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxp
bnV4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotCi0jaW5jbHVk
ZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgotCi0jaW5jbHVkZSAiU2tQYWludC5oIgotI2luY2x1ZGUgIlNrVHlwZWZhY2Uu
aCIKLSNpbmNsdWRlICJTa1V0aWxzLmgiCi0KLSNpbmNsdWRlIDx1bmljb2RlL2xvY2lkLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCi17Ci19Ci0KLWNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
JiBmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpCi17Ci0gICAg
aWN1OjpMb2NhbGUgbG9jYWxlID0gaWN1OjpMb2NhbGU6OmdldERlZmF1bHQoKTsKLSAgICBQbGF0
Zm9ybVN1cHBvcnQ6OkZvbnRGYW1pbHkgZmFtaWx5OwotICAgIFBsYXRmb3JtU3VwcG9ydDo6Z2V0
Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoLCBsb2NhbGUuZ2V0TGFu
Z3VhZ2UoKSwgJmZhbWlseSk7Ci0gICAgaWYgKGZhbWlseS5uYW1lLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBBdG9taWNTdHJpbmcgYXRvbWljRmFtaWx5KGZhbWlseS5uYW1l
KTsKLSAgICAvLyBDaGFuZ2VzIHdlaWdodCBhbmQvb3IgaXRhbGljIG9mIGdpdmVuIEZvbnREZXNj
cmlwdGlvbiBkZXBlbmRzIG9uCi0gICAgLy8gdGhlIHJlc3VsdCBvZiBmb250Y29uZmlnIHNvIHRo
YXQga2VlcGluZyB0aGUgY29ycmVjdCBmb250IG1hcHBpbmcKLSAgICAvLyBvZiB0aGUgZ2l2ZW4g
Y2hhcmFjdGVycy4gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzIxMDkgZm9yIGRldGFpbHMuCi0gICAg
Ym9vbCBzaG91bGRTZXRGYWtlQm9sZCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkU2V0RmFrZUl0
YWxpYyA9IGZhbHNlOwotICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihmb250LmZvbnRE
ZXNjcmlwdGlvbigpKTsKLSAgICBpZiAoZmFtaWx5LmlzQm9sZCAmJiBkZXNjcmlwdGlvbi53ZWln
aHQoKSA8IEZvbnRXZWlnaHRCb2xkKQotICAgICAgICBkZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9u
dFdlaWdodEJvbGQpOwotICAgIGlmICghZmFtaWx5LmlzQm9sZCAmJiBkZXNjcmlwdGlvbi53ZWln
aHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkgewotICAgICAgICBzaG91bGRTZXRGYWtlQm9sZCA9IHRy
dWU7Ci0gICAgICAgIGRlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKLSAg
ICB9Ci0gICAgaWYgKGZhbWlseS5pc0l0YWxpYyAmJiBkZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBG
b250SXRhbGljT2ZmKQotICAgICAgICBkZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udEl0YWxpY09u
KTsKLSAgICBpZiAoIWZhbWlseS5pc0l0YWxpYyAmJiBkZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBG
b250SXRhbGljT24pIHsKLSAgICAgICAgc2hvdWxkU2V0RmFrZUl0YWxpYyA9IHRydWU7Ci0gICAg
ICAgIGRlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250SXRhbGljT2ZmKTsKLSAgICB9Ci0KLSAgICBG
b250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YSA9IEZvbnRQbGF0Zm9ybURhdGEoKmdldENhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIGF0b21pY0ZhbWlseSwgRG9Ob3RSZXRhaW4p
KTsKLSAgICBwbGF0Zm9ybURhdGEuc2V0RmFrZUJvbGQoc2hvdWxkU2V0RmFrZUJvbGQpOwotICAg
IHBsYXRmb3JtRGF0YS5zZXRGYWtlSXRhbGljKHNob3VsZFNldEZha2VJdGFsaWMpOwotICAgIHJl
dHVybiBnZXRDYWNoZWRGb250RGF0YSgmcGxhdGZvcm1EYXRhLCBEb05vdFJldGFpbik7Ci19Ci0K
LVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnQmIGZvbnQpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc2Fuc1N0ciwgKCJTYW5zIikpOwotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBzZXJpZlN0ciwgKCJTZXJp
ZiIpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgbW9ub3Nw
YWNlU3RyLCAoIk1vbm9zcGFjZSIpKTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0
Zm9ybURhdGEgPSAwOwotICAgIHN3aXRjaCAoZGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKSB7
Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgotICAgICAgICBmb250UGxh
dGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgc2VyaWZT
dHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNl
RmFtaWx5OgotICAgICAgICBmb250UGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3Jt
RGF0YShkZXNjcmlwdGlvbiwgbW9ub3NwYWNlU3RyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKLSAgICBkZWZhdWx0OgotICAgICAg
ICBmb250UGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlv
biwgc2Fuc1N0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEFTU0VSVChmb250UGxh
dGZvcm1EYXRhKTsKLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9udFBsYXRmb3JtRGF0
YSwgc2hvdWxkUmV0YWluKTsKLX0KLQotdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5
KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgY29uc3QgY2hhciogbmFtZSA9IDA7Ci0gICAgQ1N0
cmluZyBzOwotCi0gICAgLy8gSWYgd2UncmUgY3JlYXRpbmcgYSBmYWxsYmFjayBmb250IChlLmcu
ICItd2Via2l0LW1vbm9zcGFjZSIpLCBjb252ZXJ0IHRoZSBuYW1lIGludG8KLSAgICAvLyB0aGUg
ZmFsbGJhY2sgbmFtZSAobGlrZSAibW9ub3NwYWNlIikgdGhhdCBmb250Y29uZmlnIHVuZGVyc3Rh
bmRzLgotICAgIGlmICghZmFtaWx5Lmxlbmd0aCgpIHx8IGZhbWlseS5zdGFydHNXaXRoKCItd2Vi
a2l0LSIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewotICAgICAgICAgICAgRm9u
dERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlwZSBtVHlwZTsKLSAgICAgICAgICAgIGNvbnN0
IGNoYXIqIG1OYW1lOwotICAgICAgICB9IGZvbnREZXNjcmlwdGlvbnNbXSA9IHsKLSAgICAgICAg
ICAgIHsgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSwgInNlcmlmIiB9LAotICAgICAgICAg
ICAgeyBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseSwgInNhbnMtc2VyaWYiIH0sCi0g
ICAgICAgICAgICB7IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5LCAibW9ub3NwYWNl
IiB9LAotICAgICAgICAgICAgeyBGb250RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHksICJjdXJz
aXZlIiB9LAotICAgICAgICAgICAgeyBGb250RGVzY3JpcHRpb246OkZhbnRhc3lGYW1pbHksICJm
YW50YXN5IiB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmlj
RmFtaWx5VHlwZSB0eXBlID0gZm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFNLX0FSUkFZX0NPVU5UKGZvbnREZXNjcmlwdGlv
bnMpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IGZvbnREZXNjcmlwdGlvbnNbaV0u
bVR5cGUpIHsKLSAgICAgICAgICAgICAgICBuYW1lID0gZm9udERlc2NyaXB0aW9uc1tpXS5tTmFt
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBpZiAoIW5hbWUpCi0gICAgICAgICAgICBuYW1lID0gIiI7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gY29udmVydCB0aGUgbmFtZSB0byB1dGY4Ci0gICAgICAgIHMgPSBmYW1pbHkuc3Ry
aW5nKCkudXRmOCgpOwotICAgICAgICBuYW1lID0gcy5kYXRhKCk7Ci0gICAgfQotCi0gICAgaW50
IHN0eWxlID0gU2tUeXBlZmFjZTo6a05vcm1hbDsKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLndl
aWdodCgpID49IEZvbnRXZWlnaHRCb2xkKQotICAgICAgICBzdHlsZSB8PSBTa1R5cGVmYWNlOjpr
Qm9sZDsKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKQotICAgICAgICBzdHlsZSB8
PSBTa1R5cGVmYWNlOjprSXRhbGljOwotCi0gICAgU2tUeXBlZmFjZSogdGYgPSBTa1R5cGVmYWNl
OjpDcmVhdGVGcm9tTmFtZShuYW1lLCBzdGF0aWNfY2FzdDxTa1R5cGVmYWNlOjpTdHlsZT4oc3R5
bGUpKTsKLSAgICBpZiAoIXRmKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEZvbnRQbGF0Zm9y
bURhdGEqIHJlc3VsdCA9Ci0gICAgICAgIG5ldyBGb250UGxhdGZvcm1EYXRhKHRmLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzdHlsZSAmIFNrVHlwZWZhY2U6OmtCb2xkKSAmJiAhdGYtPmlzQm9sZCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUgJiBTa1R5cGVmYWNlOjprSXRhbGljKSAm
JiAhdGYtPmlzSXRhbGljKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5vcmllbnRhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkpOwotICAgIHRmLT51bnJlZigpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI2NTVkODIzYWVhOTg5MTc1YTYyYzQ2NjA5
Yjc5M2M3NzgxODA1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXgu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDcsIDIwMDgsIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotCi0jaW5jbHVkZSAiQ29tcGxleFRleHRD
b250cm9sbGVyTGludXguaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhhcmZi
dXp6U2tpYS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRl
ICJTa0NhbnZhcy5oIgotI2luY2x1ZGUgIlNrUGFpbnQuaCIKLSNpbmNsdWRlICJTa1RlbXBsYXRl
cy5oIgotI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKLSNpbmNsdWRlICJTa1V0aWxzLmgiCi0KLSNp
bmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ym9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhz
SW5Db21wbGV4VGV4dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBp
c0NhbnZhc011bHRpTGF5ZXJlZChTa0NhbnZhcyogY2FudmFzKQotewotICAgIFNrQ2FudmFzOjpM
YXllckl0ZXIgbGF5ZXJJdGVyYXRvcihjYW52YXMsIGZhbHNlKTsKLSAgICBsYXllckl0ZXJhdG9y
Lm5leHQoKTsKLSAgICByZXR1cm4gIWxheWVySXRlcmF0b3IuZG9uZSgpOwotfQotCi1zdGF0aWMg
dm9pZCBhZGp1c3RUZXh0UmVuZGVyTW9kZShTa1BhaW50KiBwYWludCwgUGxhdGZvcm1Db250ZXh0
U2tpYSogc2tpYUNvbnRleHQpCi17Ci0gICAgLy8gT3VyIGxheWVycyBvbmx5IGhhdmUgYSBzaW5n
bGUgYWxwaGEgY2hhbm5lbC4gVGhpcyBtZWFucyB0aGF0IHN1YnBpeGVsCi0gICAgLy8gcmVuZGVy
ZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9zaXRpZWQgY29ycmVjdGx5IHdoZW4gdGhlIGxheWVyIGlz
Ci0gICAgLy8gY29sbGFwc2VkLiBUaGVyZWZvcmUsIHN1YnBpeGVsIHRleHQgaXMgZGlzYWJsZWQg
d2hlbiB3ZSBhcmUgZHJhd2luZwotICAgIC8vIG9udG8gYSBsYXllciBvciB3aGVuIHRoZSBjb21w
b3NpdG9yIGlzIGJlaW5nIHVzZWQuCi0gICAgaWYgKGlzQ2FudmFzTXVsdGlMYXllcmVkKHNraWFD
b250ZXh0LT5jYW52YXMoKSkgfHwgc2tpYUNvbnRleHQtPmlzRHJhd2luZ1RvSW1hZ2VCdWZmZXIo
KSkKLSAgICAgICAgcGFpbnQtPnNldExDRFJlbmRlclRleHQoZmFsc2UpOwotfQotCi12b2lkIEZv
bnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsKLSAgICBTa0FTU0VSVChzaXplb2YoR2x5cGhC
dWZmZXJHbHlwaCkgPT0gc2l6ZW9mKHVpbnQxNl90KSk7IC8vIGNvbXBpbGUtdGltZSBhc3NlcnQK
LQotICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGdseXBoQnVmZmVyLmdseXBo
cyhmcm9tKTsKLSAgICBTa1NjYWxhciB4ID0gU2tGbG9hdFRvU2NhbGFyKHBvaW50LngoKSk7Ci0g
ICAgU2tTY2FsYXIgeSA9IFNrRmxvYXRUb1NjYWxhcihwb2ludC55KCkpOwotCi0gICAgLy8gRklY
TUU6IHRleHQgcmVuZGVyaW5nIHNwZWVkOgotICAgIC8vIEFuZHJvaWQgaGFzIGNvZGUgaW4gdGhl
aXIgV2ViQ29yZSBmb3JrIHRvIHNwZWNpYWwgY2FzZSB3aGVuIHRoZQotICAgIC8vIEdseXBoQnVm
ZmVyIGhhcyBubyBhZHZhbmNlcyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0cy4gSW4gdGhhdCBjYXNl
IHRoZQotICAgIC8vIHRleHQgZHJhd2luZyBjYW4gcHJvY2VlZCBmYXN0ZXIuIEhvd2V2ZXIsIGl0
J3MgdW5jbGVhciB3aGVuIHRob3NlCi0gICAgLy8gcGF0Y2hlcyBtYXkgYmUgdXBzdHJlYW1lZCB0
byBXZWJLaXQgc28gd2UgYWx3YXlzIHVzZSB0aGUgc2xvd2VyIHBhdGgKLSAgICAvLyBoZXJlLgot
ICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2ID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
ZnJvbSk7Ci0gICAgU2tBdXRvU1RNYWxsb2M8MzIsIFNrUG9pbnQ+IHN0b3JhZ2UobnVtR2x5cGhz
KSwgc3RvcmFnZTIobnVtR2x5cGhzKSwgc3RvcmFnZTMobnVtR2x5cGhzKTsKLSAgICBTa1BvaW50
KiBwb3MgPSBzdG9yYWdlLmdldCgpOwotICAgIFNrUG9pbnQqIHZQb3NCZWdpbiA9IHN0b3JhZ2Uy
LmdldCgpOwotICAgIFNrUG9pbnQqIHZQb3NFbmQgPSBzdG9yYWdlMy5nZXQoKTsKLQotICAgIGJv
b2wgaXNWZXJ0aWNhbCA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWw7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewotICAgICAg
ICBTa1NjYWxhciBteVdpZHRoID0gU2tGbG9hdFRvU2NhbGFyKGFkdltpXS53aWR0aCgpKTsKLSAg
ICAgICAgcG9zW2ldLnNldCh4LCB5KTsKLSAgICAgICAgaWYgKGlzVmVydGljYWwpIHsKLSAgICAg
ICAgICAgIHZQb3NCZWdpbltpXS5zZXQoeCArIG15V2lkdGgsIHkpOwotICAgICAgICAgICAgdlBv
c0VuZFtpXS5zZXQoeCArIG15V2lkdGgsIHkgLSBteVdpZHRoKTsKLSAgICAgICAgfQotICAgICAg
ICB4ICs9IG15V2lkdGg7Ci0gICAgICAgIHkgKz0gU2tGbG9hdFRvU2NhbGFyKGFkdltpXS5oZWln
aHQoKSk7Ci0gICAgfQotCi0gICAgU2tDYW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCk7Ci0gICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dE1vZGUgPSBnYy0+
cGxhdGZvcm1Db250ZXh0KCktPmdldFRleHREcmF3aW5nTW9kZSgpOwotCi0gICAgLy8gV2UgZHJh
dyB0ZXh0IHVwIHRvIHR3byB0aW1lcyAob25jZSBmb3IgZmlsbCwgb25jZSBmb3Igc3Ryb2tlKS4K
LSAgICBpZiAodGV4dE1vZGUgJiBUZXh0TW9kZUZpbGwpIHsKLSAgICAgICAgU2tQYWludCBwYWlu
dDsKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygm
cGFpbnQpOwotICAgICAgICBmb250LT5wbGF0Zm9ybURhdGEoKS5zZXR1cFBhaW50KCZwYWludCk7
Ci0gICAgICAgIGFkanVzdFRleHRSZW5kZXJNb2RlKCZwYWludCwgZ2MtPnBsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1Rl
eHRFbmNvZGluZyk7Ci0KLSAgICAgICAgaWYgKGlzVmVydGljYWwpIHsKLSAgICAgICAgICAgIFNr
UGF0aCBwYXRoOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsr
aSkgewotICAgICAgICAgICAgICAgIHBhdGgucmVzZXQoKTsKLSAgICAgICAgICAgICAgICBwYXRo
Lm1vdmVUbyh2UG9zQmVnaW5baV0pOwotICAgICAgICAgICAgICAgIHBhdGgubGluZVRvKHZQb3NF
bmRbaV0pOwotICAgICAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1RleHRPblBhdGgoZ2x5cGhzICsg
aSwgMiwgcGF0aCwgMCwgcGFpbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgPDwgMSwgcG9z
LCBwYWludCk7Ci0gICAgfQotCi0gICAgaWYgKCh0ZXh0TW9kZSAmIFRleHRNb2RlU3Ryb2tlKQot
ICAgICAgICAmJiBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0cm9rZVN0eWxlKCkgIT0gTm9T
dHJva2UKLSAgICAgICAgJiYgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VUaGlja25l
c3MoKSA+IDApIHsKLQotICAgICAgICBTa1BhaW50IHBhaW50OwotICAgICAgICBnYy0+cGxhdGZv
cm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwotICAgICAg
ICBmb250LT5wbGF0Zm9ybURhdGEoKS5zZXR1cFBhaW50KCZwYWludCk7Ci0gICAgICAgIGFkanVz
dFRleHRSZW5kZXJNb2RlKCZwYWludCwgZ2MtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAg
cGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7Ci0K
LSAgICAgICAgaWYgKHRleHRNb2RlICYgVGV4dE1vZGVGaWxsKSB7Ci0gICAgICAgICAgICAvLyBJ
ZiB3ZSBhbHNvIGZpbGxlZCwgd2UgZG9uJ3Qgd2FudCB0byBkcmF3IHNoYWRvd3MgdHdpY2UuCi0g
ICAgICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBGb250Q2hyb21pdW1XaW4uY3BwOjpwYWludFNr
aWFUZXh0KCkgZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgICAgICAgIC8vIFNpbmNlIHdlIHVzZSB0
aGUgbG9vcGVyIGZvciBzaGFkb3dzLCB3ZSByZW1vdmUgaXQgKGlmIGFueSkgbm93LgotICAgICAg
ICAgICAgcGFpbnQuc2V0TG9vcGVyKDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzVmVy
dGljYWwpIHsKLSAgICAgICAgICAgIFNrUGF0aCBwYXRoOwotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICAgICAgICAgIHBhdGgucmVzZXQo
KTsKLSAgICAgICAgICAgICAgICBwYXRoLm1vdmVUbyh2UG9zQmVnaW5baV0pOwotICAgICAgICAg
ICAgICAgIHBhdGgubGluZVRvKHZQb3NFbmRbaV0pOwotICAgICAgICAgICAgICAgIGNhbnZhcy0+
ZHJhd1RleHRPblBhdGgoZ2x5cGhzICsgaSwgMiwgcGF0aCwgMCwgcGFpbnQpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5
cGhzLCBudW1HbHlwaHMgPDwgMSwgcG9zLCBwYWludCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCBzZXR1cEZvclRleHRQYWludGluZyhTa1BhaW50KiBwYWludCwgU2tDb2xvciBjb2xvcikKLXsK
LSAgICBwYWludC0+c2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGlu
Zyk7Ci0gICAgcGFpbnQtPnNldENvbG9yKGNvbG9yKTsKLX0KLQotdm9pZCBGb250OjpkcmF3Q29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgVGV4dFJ1biYgcnVuLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0Ci17Ci0gICAgaWYgKCFydW4ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
OwotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRNb2RlID0gZ2MtPnBsYXRmb3JtQ29udGV4
dCgpLT5nZXRUZXh0RHJhd2luZ01vZGUoKTsKLSAgICBib29sIGZpbGwgPSB0ZXh0TW9kZSAmIFRl
eHRNb2RlRmlsbDsKLSAgICBib29sIHN0cm9rZSA9ICh0ZXh0TW9kZSAmIFRleHRNb2RlU3Ryb2tl
KQotICAgICAgICAgICAgICAgJiYgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VTdHls
ZSgpICE9IE5vU3Ryb2tlCi0gICAgICAgICAgICAgICAmJiBnYy0+cGxhdGZvcm1Db250ZXh0KCkt
PmdldFN0cm9rZVRoaWNrbmVzcygpID4gMDsKLQotICAgIGlmICghZmlsbCAmJiAhc3Ryb2tlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBTa1BhaW50IHN0cm9rZVBhaW50LCBmaWxsUGFpbnQ7Ci0g
ICAgaWYgKGZpbGwpIHsKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50
Rm9yRmlsbGluZygmZmlsbFBhaW50KTsKLSAgICAgICAgc2V0dXBGb3JUZXh0UGFpbnRpbmcoJmZp
bGxQYWludCwgZ2MtPmZpbGxDb2xvcigpLnJnYigpKTsKLSAgICB9Ci0gICAgaWYgKHN0cm9rZSkg
ewotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygm
c3Ryb2tlUGFpbnQsIDAsIDApOwotICAgICAgICBzZXR1cEZvclRleHRQYWludGluZygmc3Ryb2tl
UGFpbnQsIGdjLT5zdHJva2VDb2xvcigpLnJnYigpKTsKLSAgICB9Ci0KLSAgICBDb21wbGV4VGV4
dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIHBvaW50LngoKSwgcG9pbnQueSgpLCB3b3JkU3Bh
Y2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNpb24oKSwgdGhpcyk7Ci0KLSAgICBp
ZiAocnVuLnJ0bCgpKQotICAgICAgICBjb250cm9sbGVyLnNldHVwRm9yUlRMKCk7Ci0KLSAgICB3
aGlsZSAoY29udHJvbGxlci5uZXh0U2NyaXB0UnVuKCkpIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlcmUgaXMgYW55IGdseXBoIGZvdW5kIGluIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCi0gICAg
ICAgIGludCBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoOwotICAgICAgICBjb250cm9sbGVyLmdseXBo
c0ZvclJhbmdlKGZyb20sIHRvLCBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoKTsKLSAgICAgICAgaWYg
KGZyb21HbHlwaCA8IDAgfHwgZ2x5cGhMZW5ndGggPD0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGlmIChmaWxsKSB7Ci0gICAgICAgICAgICBjb250cm9sbGVyLmZvbnRQbGF0
Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+c2V0dXBQYWludCgmZmlsbFBhaW50KTsKLSAgICAgICAg
ICAgIGFkanVzdFRleHRSZW5kZXJNb2RlKCZmaWxsUGFpbnQsIGdjLT5wbGF0Zm9ybUNvbnRleHQo
KSk7Ci0gICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGNvbnRyb2xsZXIuZ2x5cGhzKCkg
KyBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoIDw8IDEsIGNvbnRyb2xsZXIucG9zaXRpb25zKCkgKyBm
cm9tR2x5cGgsIGZpbGxQYWludCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3Ryb2tlKSB7
Ci0gICAgICAgICAgICBjb250cm9sbGVyLmZvbnRQbGF0Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+
c2V0dXBQYWludCgmc3Ryb2tlUGFpbnQpOwotICAgICAgICAgICAgYWRqdXN0VGV4dFJlbmRlck1v
ZGUoJnN0cm9rZVBhaW50LCBnYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICAgICAgY2Fu
dmFzLT5kcmF3UG9zVGV4dChjb250cm9sbGVyLmdseXBocygpICsgZnJvbUdseXBoLCBnbHlwaExl
bmd0aCA8PCAxLCBjb250cm9sbGVyLnBvc2l0aW9ucygpICsgZnJvbUdseXBoLCBzdHJva2VQYWlu
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NG
b3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRS
dW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9h
dFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIC8qIGZhbGxiYWNrRm9udHMgKi8sIEdseXBoT3ZlcmZsb3cqIC8qIGdseXBoT3ZlcmZs
b3cgKi8pIGNvbnN0Ci17Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIocnVu
LCAwLCAwLCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNpb24oKSwg
dGhpcyk7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIud2lkdGhPZkZ1bGxSdW4oKTsKLX0KLQotLy8g
UmV0dXJuIHRoZSBjb2RlIHBvaW50IGluZGV4IGZvciB0aGUgZ2l2ZW4gfHh8IG9mZnNldCBpbnRv
IHRoZSB0ZXh0IHJ1bi4KLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9yIEhUTUws
IGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVy
cwotICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1ZyBodHRwOi8vd2Via2l0
Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgotICAgIGludCB0YXJnZXRY
ID0gc3RhdGljX2Nhc3Q8aW50Pih4RmxvYXQpOwotCi0gICAgLy8gKE1hYyBjb2RlIGlnbm9yZXMg
aW5jbHVkZVBhcnRpYWxHbHlwaHMsIGFuZCB0aGV5IGRvbid0IGtub3cgd2hhdCBpdCdzCi0gICAg
Ly8gc3VwcG9zZWQgdG8gZG8sIHNvIHdlIGp1c3QgaWdub3JlIGl0IGFzIHdlbGwuKQotICAgIENv
bXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHJ1biwgMCwgMCwgd29yZFNwYWNpbmcoKSwg
bGV0dGVyU3BhY2luZygpLCBydW4uZXhwYW5zaW9uKCksIHRoaXMpOwotICAgIGlmIChydW4ucnRs
KCkpCi0gICAgICAgIGNvbnRyb2xsZXIuc2V0dXBGb3JSVEwoKTsKLSAgICByZXR1cm4gY29udHJv
bGxlci5vZmZzZXRGb3JQb3NpdGlvbih0YXJnZXRYKTsKLX0KLQotLy8gUmV0dXJuIHRoZSByZWN0
YW5nbGUgZm9yIHNlbGVjdGluZyB0aGUgZ2l2ZW4gcmFuZ2Ugb2YgY29kZS1wb2ludHMgaW4gdGhl
IFRleHRSdW4uCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17
Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIocnVuLCAwLCAwLCB3b3JkU3Bh
Y2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNpb24oKSwgdGhpcyk7Ci0gICAgaWYg
KHJ1bi5ydGwoKSkKLSAgICAgICAgY29udHJvbGxlci5zZXR1cEZvclJUTCgpOwotICAgIHJldHVy
biBjb250cm9sbGVyLnNlbGVjdGlvblJlY3QocG9pbnQsIGhlaWdodCwgZnJvbSwgdG8pOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggOTEx
YjAzNTZhZjYwNmZmMDAwMjUxOWU3N2I0OGZmMDQzN2EyMWYxNy4uZjRmNjM1MjljZmRlNTkzMjE2
MzZlODVmMzcwZWE2N2U3YmQzMjhjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMzQs
NyArMzQsNyBAQAogI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YUNo
cm9taXVtV2luLmgiCiAjZWxpZiBPUyhVTklYKSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgIkZv
bnRQbGF0Zm9ybURhdGFMaW51eC5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6
ei5oIgogI2VuZGlmCiAKICNlbmRpZiAgLy8gRm9udFBsYXRmb3JtRGF0YV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1E
YXRhTGludXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OWY2YWI0N2U5OTMwZmNmMWNhMTFkYmIxMjg4MWZhMjczNzMxNjU2Ny4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKLQotI2luY2x1ZGUgIlNrQWR2YW5jZWRUeXBlZmFjZU1ldHJpY3MuaCIKLSNpbmNsdWRlICJT
a1BhaW50LmgiCi0jaW5jbHVkZSAiU2tUeXBlZmFjZS5oIgotCi0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSW1wbC5oPiAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgU2tQYWludDo6
SGludGluZyBza2lhSGludGluZyA9IFNrUGFpbnQ6OmtOb3JtYWxfSGludGluZzsKLXN0YXRpYyBi
b29sIGlzU2tpYUFudGlBbGlhcyA9IHRydWU7Ci1zdGF0aWMgYm9vbCBpc1NraWFTdWJwaXhlbEds
eXBocyA9IGZhbHNlOwotCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEhpbnRpbmcoU2tQYWlu
dDo6SGludGluZyBoaW50aW5nKQotewotICAgIHNraWFIaW50aW5nID0gaGludGluZzsKLX0KLQot
dm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRBbnRpQWxpYXMoYm9vbCBpc0FudGlBbGlhcykKLXsK
LSAgICBpc1NraWFBbnRpQWxpYXMgPSBpc0FudGlBbGlhczsKLX0KLQotdm9pZCBGb250UGxhdGZv
cm1EYXRhOjpzZXRTdWJwaXhlbEdseXBocyhib29sIGlzU3VicGl4ZWxHbHlwaHMpCi17Ci0gICAg
aXNTa2lhU3VicGl4ZWxHbHlwaHMgPSBpc1N1YnBpeGVsR2x5cGhzOwotfQotCi1Gb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYykKLSAg
ICA6IG1fdHlwZWZhY2Uoc3JjLm1fdHlwZWZhY2UpCi0gICAgLCBtX2ZhbWlseShzcmMubV9mYW1p
bHkpCi0gICAgLCBtX3RleHRTaXplKHNyYy5tX3RleHRTaXplKQotICAgICwgbV9lbVNpemVJbkZv
bnRVbml0cyhzcmMubV9lbVNpemVJbkZvbnRVbml0cykKLSAgICAsIG1fZmFrZUJvbGQoc3JjLm1f
ZmFrZUJvbGQpCi0gICAgLCBtX2Zha2VJdGFsaWMoc3JjLm1fZmFrZUl0YWxpYykKLSAgICAsIG1f
b3JpZW50YXRpb24oc3JjLm1fb3JpZW50YXRpb24pCi0gICAgLCBtX3RleHRPcmllbnRhdGlvbihz
cmMubV90ZXh0T3JpZW50YXRpb24pCi0gICAgLCBtX3N0eWxlKHNyYy5tX3N0eWxlKQotICAgICwg
bV9oYXJmYnV6ekZhY2Uoc3JjLm1faGFyZmJ1enpGYWNlKQotewotICAgIFNrU2FmZVJlZihtX3R5
cGVmYWNlKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShTa1R5cGVm
YWNlKiB0ZiwgY29uc3QgY2hhciogZmFtaWx5LCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBmYWtlQm9s
ZCwgYm9vbCBmYWtlSXRhbGljLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFRleHRPcmll
bnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pCi0gICAgOiBtX3R5cGVmYWNlKHRmKQotICAgICwgbV9m
YW1pbHkoZmFtaWx5KQotICAgICwgbV90ZXh0U2l6ZSh0ZXh0U2l6ZSkKLSAgICAsIG1fZW1TaXpl
SW5Gb250VW5pdHMoMCkKLSAgICAsIG1fZmFrZUJvbGQoZmFrZUJvbGQpCi0gICAgLCBtX2Zha2VJ
dGFsaWMoZmFrZUl0YWxpYykKLSAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCi0gICAg
LCBtX3RleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pCi17Ci0gICAgU2tTYWZlUmVmKG1f
dHlwZWZhY2UpOwotICAgIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKTsKLX0KLQotRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMs
IGZsb2F0IHRleHRTaXplKQotICAgIDogbV90eXBlZmFjZShzcmMubV90eXBlZmFjZSkKLSAgICAs
IG1fZmFtaWx5KHNyYy5tX2ZhbWlseSkKLSAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCi0gICAg
LCBtX2VtU2l6ZUluRm9udFVuaXRzKHNyYy5tX2VtU2l6ZUluRm9udFVuaXRzKQotICAgICwgbV9m
YWtlQm9sZChzcmMubV9mYWtlQm9sZCkKLSAgICAsIG1fZmFrZUl0YWxpYyhzcmMubV9mYWtlSXRh
bGljKQotICAgICwgbV9vcmllbnRhdGlvbihzcmMubV9vcmllbnRhdGlvbikKLSAgICAsIG1fdGV4
dE9yaWVudGF0aW9uKHNyYy5tX3RleHRPcmllbnRhdGlvbikKLSAgICAsIG1faGFyZmJ1enpGYWNl
KHNyYy5tX2hhcmZidXp6RmFjZSkKLXsKLSAgICBTa1NhZmVSZWYobV90eXBlZmFjZSk7Ci0gICAg
cXVlcnlTeXN0ZW1Gb3JSZW5kZXJTdHlsZSgpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjp+Rm9u
dFBsYXRmb3JtRGF0YSgpCi17Ci0gICAgU2tTYWZlVW5yZWYobV90eXBlZmFjZSk7Ci19Ci0KLWlu
dCBGb250UGxhdGZvcm1EYXRhOjplbVNpemVJbkZvbnRVbml0cygpIGNvbnN0Ci17Ci0gICAgaWYg
KG1fZW1TaXplSW5Gb250VW5pdHMpCi0gICAgICAgIHJldHVybiBtX2VtU2l6ZUluRm9udFVuaXRz
OwotCi0gICAgU2tBZHZhbmNlZFR5cGVmYWNlTWV0cmljcyogbWV0cmljcyA9IG1fdHlwZWZhY2Ut
PmdldEFkdmFuY2VkVHlwZWZhY2VNZXRyaWNzKFNrQWR2YW5jZWRUeXBlZmFjZU1ldHJpY3M6OmtO
b19QZXJHbHlwaEluZm8pOwotICAgIG1fZW1TaXplSW5Gb250VW5pdHMgPSBtZXRyaWNzLT5mRW1T
aXplOwotICAgIG1ldHJpY3MtPnVucmVmKCk7Ci0gICAgcmV0dXJuIG1fZW1TaXplSW5Gb250VW5p
dHM7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMpCi17Ci0gICAgU2tSZWZDbnRfU2FmZUFzc2lnbiht
X3R5cGVmYWNlLCBzcmMubV90eXBlZmFjZSk7Ci0KLSAgICBtX2ZhbWlseSA9IHNyYy5tX2ZhbWls
eTsKLSAgICBtX3RleHRTaXplID0gc3JjLm1fdGV4dFNpemU7Ci0gICAgbV9mYWtlQm9sZCA9IHNy
Yy5tX2Zha2VCb2xkOwotICAgIG1fZmFrZUl0YWxpYyA9IHNyYy5tX2Zha2VJdGFsaWM7Ci0gICAg
bV9oYXJmYnV6ekZhY2UgPSBzcmMubV9oYXJmYnV6ekZhY2U7Ci0gICAgbV9vcmllbnRhdGlvbiA9
IHNyYy5tX29yaWVudGF0aW9uOwotICAgIG1fdGV4dE9yaWVudGF0aW9uID0gc3JjLm1fdGV4dE9y
aWVudGF0aW9uOwotICAgIG1fc3R5bGUgPSBzcmMubV9zdHlsZTsKLSAgICBtX2VtU2l6ZUluRm9u
dFVuaXRzID0gc3JjLm1fZW1TaXplSW5Gb250VW5pdHM7Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19
Ci0KLSNpZm5kZWYgTkRFQlVHCi1TdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24o
KSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSNlbmRpZgotCi12b2lkIEZvbnRQ
bGF0Zm9ybURhdGE6OnNldHVwUGFpbnQoU2tQYWludCogcGFpbnQpIGNvbnN0Ci17Ci0gICAgY29u
c3QgZmxvYXQgdHMgPSBtX3RleHRTaXplID49IDAgPyBtX3RleHRTaXplIDogMTI7Ci0KLSAgICBw
YWludC0+c2V0QW50aUFsaWFzKG1fc3R5bGUudXNlQW50aUFsaWFzID09IEZvbnRSZW5kZXJTdHls
ZTo6Tm9QcmVmZXJlbmNlID8gaXNTa2lhQW50aUFsaWFzIDogbV9zdHlsZS51c2VBbnRpQWxpYXMp
OwotICAgIHN3aXRjaCAobV9zdHlsZS51c2VIaW50aW5nKSB7Ci0gICAgY2FzZSBGb250UmVuZGVy
U3R5bGU6Ok5vUHJlZmVyZW5jZToKLSAgICAgICAgcGFpbnQtPnNldEhpbnRpbmcoc2tpYUhpbnRp
bmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDA6Ci0gICAgICAgIHBhaW50LT5zZXRIaW50
aW5nKFNrUGFpbnQ6OmtOb19IaW50aW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcGFpbnQtPnNldEhpbnRpbmcoc3RhdGljX2Nhc3Q8U2tQYWludDo6SGludGluZz4o
bV9zdHlsZS5oaW50U3R5bGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcGFpbnQt
PnNldEVtYmVkZGVkQml0bWFwVGV4dChtX3N0eWxlLnVzZUJpdG1hcHMpOwotICAgIHBhaW50LT5z
ZXRUZXh0U2l6ZShTa0Zsb2F0VG9TY2FsYXIodHMpKTsKLSAgICBwYWludC0+c2V0VHlwZWZhY2Uo
bV90eXBlZmFjZSk7Ci0gICAgcGFpbnQtPnNldEZha2VCb2xkVGV4dChtX2Zha2VCb2xkKTsKLSAg
ICBwYWludC0+c2V0VGV4dFNrZXdYKG1fZmFrZUl0YWxpYyA/IC1TS19TY2FsYXIxIC8gNCA6IDAp
OwotICAgIHBhaW50LT5zZXRBdXRvaGludGVkKG1fc3R5bGUudXNlQXV0b0hpbnQpOwotCi0gICAg
aWYgKG1fc3R5bGUudXNlQW50aUFsaWFzID09IDEgfHwgKG1fc3R5bGUudXNlQW50aUFsaWFzID09
IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlICYmIGlzU2tpYUFudGlBbGlhcykpCi0gICAg
ICAgIHBhaW50LT5zZXRMQ0RSZW5kZXJUZXh0KG1fc3R5bGUudXNlU3VicGl4ZWwgPT0gRm9udFJl
bmRlclN0eWxlOjpOb1ByZWZlcmVuY2UgPyBpc1NraWFTdWJwaXhlbEdseXBocyA6IG1fc3R5bGUu
dXNlU3VicGl4ZWwpOwotfQotCi1Ta0ZvbnRJRCBGb250UGxhdGZvcm1EYXRhOjp1bmlxdWVJRCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHlwZWZhY2UtPnVuaXF1ZUlEKCk7Ci19Ci0KLWJvb2wg
Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBhKSBj
b25zdAotewotICAgIC8vIElmIGVpdGhlciBvZiB0aGUgdHlwZWZhY2UgcG9pbnRlcnMgYXJlIGlu
dmFsaWQgKGVpdGhlciBOVUxMIG9yIHRoZQotICAgIC8vIHNwZWNpYWwgZGVsZXRlZCB2YWx1ZSkg
dGhlbiB3ZSB0ZXN0IGZvciBwb2ludGVyIGVxdWFsaXR5LiBPdGhlcndpc2UsIHdlCi0gICAgLy8g
Y2FsbCBTa1R5cGVmYWNlOjpFcXVhbCBvbiB0aGUgdmFsaWQgcG9pbnRlcnMuCi0gICAgYm9vbCB0
eXBlZmFjZXNFcXVhbDsKLSAgICBpZiAobV90eXBlZmFjZSA9PSBoYXNoVGFibGVEZWxldGVkRm9u
dFZhbHVlKCkKLSAgICAgICAgfHwgYS5tX3R5cGVmYWNlID09IGhhc2hUYWJsZURlbGV0ZWRGb250
VmFsdWUoKQotICAgICAgICB8fCAhbV90eXBlZmFjZQotICAgICAgICB8fCAhYS5tX3R5cGVmYWNl
KQotICAgICAgICB0eXBlZmFjZXNFcXVhbCA9IG1fdHlwZWZhY2UgPT0gYS5tX3R5cGVmYWNlOwot
ICAgIGVsc2UKLSAgICAgICAgdHlwZWZhY2VzRXF1YWwgPSBTa1R5cGVmYWNlOjpFcXVhbChtX3R5
cGVmYWNlLCBhLm1fdHlwZWZhY2UpOwotCi0gICAgcmV0dXJuIHR5cGVmYWNlc0VxdWFsIAotICAg
ICAgICAmJiBtX3RleHRTaXplID09IGEubV90ZXh0U2l6ZQotICAgICAgICAmJiBtX2Zha2VCb2xk
ID09IGEubV9mYWtlQm9sZAotICAgICAgICAmJiBtX2Zha2VJdGFsaWMgPT0gYS5tX2Zha2VJdGFs
aWMKLSAgICAgICAgJiYgbV9vcmllbnRhdGlvbiA9PSBhLm1fb3JpZW50YXRpb24KLSAgICAgICAg
JiYgbV90ZXh0T3JpZW50YXRpb24gPT0gYS5tX3RleHRPcmllbnRhdGlvbgotICAgICAgICAmJiBt
X3N0eWxlID09IGEubV9zdHlsZTsKLX0KLQotdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFz
aCgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgaCA9IFNrVHlwZWZhY2U6OlVuaXF1ZUlEKG1fdHlw
ZWZhY2UpOwotICAgIGggXj0gMHgwMTAxMDEwMSAqICgoc3RhdGljX2Nhc3Q8aW50PihtX3RleHRP
cmllbnRhdGlvbikgPDwgMykgfCAoc3RhdGljX2Nhc3Q8aW50PihtX29yaWVudGF0aW9uKSA8PCAy
KSB8IChzdGF0aWNfY2FzdDxpbnQ+KG1fZmFrZUJvbGQpIDw8IDEpIHwgc3RhdGljX2Nhc3Q8aW50
PihtX2Zha2VJdGFsaWMpKTsKLQotICAgIC8vIFRoaXMgbWVtY3B5IGlzIHRvIGF2b2lkIGEgcmVp
bnRlcnByZXRfY2FzdCB0aGF0IGJyZWFrcyBzdHJpY3QtYWxpYXNpbmcKLSAgICAvLyBydWxlcy4g
TWVtY3B5IGlzIGdlbmVyYWxseSBvcHRpbWl6ZWQgZW5vdWdoIHNvIHRoYXQgcGVyZm9ybWFuY2Ug
ZG9lc24ndAotICAgIC8vIG1hdHRlciBoZXJlLgotICAgIHVpbnQzMl90IHRleHRTaXplQnl0ZXM7
Ci0gICAgbWVtY3B5KCZ0ZXh0U2l6ZUJ5dGVzLCAmbV90ZXh0U2l6ZSwgc2l6ZW9mKHVpbnQzMl90
KSk7Ci0gICAgaCBePSB0ZXh0U2l6ZUJ5dGVzOwotCi0gICAgcmV0dXJuIGg7Ci19Ci0KLWJvb2wg
Rm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSGFyZmJ1enpGYWNlKiBGb250UGxhdGZv
cm1EYXRhOjpoYXJmYnV6ekZhY2UoKSBjb25zdAotewotICAgIGlmICghbV9oYXJmYnV6ekZhY2Up
Ci0gICAgICAgIG1faGFyZmJ1enpGYWNlID0gSGFyZmJ1enpGYWNlOjpjcmVhdGUoY29uc3RfY2Fz
dDxGb250UGxhdGZvcm1EYXRhKj4odGhpcykpOwotCi0gICAgcmV0dXJuIG1faGFyZmJ1enpGYWNl
LmdldCgpOwotfQotCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnF1ZXJ5U3lzdGVtRm9yUmVuZGVy
U3R5bGUoKQotewotICAgIGlmICghbV9mYW1pbHkubGVuZ3RoKCkpIHsKLSAgICAgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSBhIGZhbWlseSBmb3IgdGhpcy4gUHJvYmFibHkgYmVjYXVzZSBpdCdzIGEgd2Vi
Zm9udC4gV2UKLSAgICAgICAgLy8gc2V0IGFsbCB0aGUgdmFsdWVzIHRvICdubyBwcmVmZXJlbmNl
JyBhbmQgdGFrZSB0aGUgZGVmYXVsdHMgcGFzc2VkCi0gICAgICAgIC8vIGluIGZyb20gWFNFVFRJ
TkdTLgotICAgICAgICBtX3N0eWxlLnVzZUJpdG1hcHMgPSBGb250UmVuZGVyU3R5bGU6Ok5vUHJl
ZmVyZW5jZTsKLSAgICAgICAgbV9zdHlsZS51c2VBdXRvSGludCA9IEZvbnRSZW5kZXJTdHlsZTo6
Tm9QcmVmZXJlbmNlOwotICAgICAgICBtX3N0eWxlLnVzZUhpbnRpbmcgPSBGb250UmVuZGVyU3R5
bGU6Ok5vUHJlZmVyZW5jZTsKLSAgICAgICAgbV9zdHlsZS51c2VBbnRpQWxpYXMgPSBGb250UmVu
ZGVyU3R5bGU6Ok5vUHJlZmVyZW5jZTsKLSAgICAgICAgbV9zdHlsZS51c2VTdWJwaXhlbCA9IEZv
bnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgUGxhdGZvcm1TdXBwb3J0OjpnZXRSZW5kZXJTdHlsZUZvclN0cmlrZShtX2ZhbWlseS5kYXRh
KCksICgoKGludCltX3RleHRTaXplKSA8PCAyKSB8IChtX3R5cGVmYWNlLT5zdHlsZSgpICYgMyks
ICZtX3N0eWxlKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFM
aW51eC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBs
YXRmb3JtRGF0YUxpbnV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZGNlOTA1
MDQ1MDU4M2MzNzJhMzQ3NTJlOTMxMDI1NGMzZTEzYTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFMaW51eF9oCi0j
ZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFMaW51eF9oCi0KLSNpbmNsdWRlICJGb250T3JpZW50YXRp
b24uaCIKLSNpbmNsdWRlICJGb250UmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJIYXJmYnV6elNr
aWEuaCIKLSNpbmNsdWRlICJUZXh0T3JpZW50YXRpb24uaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgotI2luY2x1ZGUgPFNrUGFpbnQu
aD4KLQotY2xhc3MgU2tUeXBlZmFjZTsKLXR5cGVkZWYgdWludDMyX3QgU2tGb250SUQ7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udERlc2NyaXB0aW9uOwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gRm9udFBsYXRmb3JtRGF0YSBpcyB0aGUgaGFuZGxlIHdoaWNoIFdl
YktpdCBoYXMgb24gYSBzcGVjaWZpYyBmYWNlLiBBIGZhY2UKLS8vIGlzIHRoZSB0dXBsZSBvZiAo
Zm9udCwgc2l6ZSwgLi4uZXRjKS4gSGVyZSB3ZSBhcmUganVzdCB3cmFwcGluZyBhIFNraWEKLS8v
IFNrVHlwZWZhY2UgcG9pbnRlciBhbmQgZGVhbGluZyB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRp
bmcgZXRjLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGEg
ewotcHVibGljOgotICAgIC8vIFVzZWQgZm9yIGRlbGV0ZWQgdmFsdWVzIGluIHRoZSBmb250IGNh
Y2hlJ3MgaGFzaCB0YWJsZXMuIFRoZSBoYXNoIHRhYmxlCi0gICAgLy8gd2lsbCBjcmVhdGUgdXMg
d2l0aCB0aGlzIHN0cnVjdHVyZSwgYW5kIGl0IHdpbGwgY29tcGFyZSBvdGhlciB2YWx1ZXMKLSAg
ICAvLyB0byB0aGlzICJEZWxldGVkIiBvbmUuIEl0IGV4cGVjdHMgdGhlIERlbGV0ZWQgb25lIHRv
IGJlIGRpZmZlcmVudGlhYmxlCi0gICAgLy8gZnJvbSB0aGUgTlVMTCBvbmUgKGNyZWF0ZWQgd2l0
aCB0aGUgZW1wdHkgY29uc3RydWN0b3IpLCBzbyB3ZSBjYW4ndCBqdXN0Ci0gICAgLy8gc2V0IGV2
ZXJ5dGhpbmcgdG8gTlVMTC4KLSAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX3R5cGVmYWNlKGhhc2hUYWJsZURlbGV0ZWRGb250
VmFsdWUoKSkKLSAgICAgICAgLCBtX3RleHRTaXplKDApCi0gICAgICAgICwgbV9lbVNpemVJbkZv
bnRVbml0cygwKQotICAgICAgICAsIG1fZmFrZUJvbGQoZmFsc2UpCi0gICAgICAgICwgbV9mYWtl
SXRhbGljKGZhbHNlKQotICAgICAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKLSAgICAg
ICAgLCBtX3RleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KQotICAg
ICAgICB7IH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGEoKQotICAgICAgICA6IG1fdHlwZWZhY2Uo
MCkKLSAgICAgICAgLCBtX3RleHRTaXplKDApCi0gICAgICAgICwgbV9lbVNpemVJbkZvbnRVbml0
cygwKQotICAgICAgICAsIG1fZmFrZUJvbGQoZmFsc2UpCi0gICAgICAgICwgbV9mYWtlSXRhbGlj
KGZhbHNlKQotICAgICAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKLSAgICAgICAgLCBt
X3RleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KQotICAgICAgICB7
IH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgdGV4dFNpemUsIGJvb2wgZmFrZUJvbGQs
IGJvb2wgZmFrZUl0YWxpYykKLSAgICAgICAgOiBtX3R5cGVmYWNlKDApCi0gICAgICAgICwgbV90
ZXh0U2l6ZSh0ZXh0U2l6ZSkKLSAgICAgICAgLCBtX2VtU2l6ZUluRm9udFVuaXRzKDApCi0gICAg
ICAgICwgbV9mYWtlQm9sZChmYWtlQm9sZCkKLSAgICAgICAgLCBtX2Zha2VJdGFsaWMoZmFrZUl0
YWxpYykKLSAgICAgICAgLCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCi0gICAgICAgICwgbV90
ZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkKLSAgICAgICAgeyB9
Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBG
b250UGxhdGZvcm1EYXRhKFNrVHlwZWZhY2UqLCBjb25zdCBjaGFyKiBuYW1lLCBmbG9hdCB0ZXh0
U2l6ZSwgYm9vbCBmYWtlQm9sZCwgYm9vbCBmYWtlSXRhbGljLCBGb250T3JpZW50YXRpb24gPSBI
b3Jpem9udGFsLCBUZXh0T3JpZW50YXRpb24gPSBUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0
KTsKLSAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYywgZmxv
YXQgdGV4dFNpemUpOwotICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7Ci0KLSAgICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gICAgLy8gUmV0dXJuIHRydWUgaWZmIHRoaXMgZm9udCBpcyBtb25vc3BhY2Vk
IChpLmUuIGV2ZXJ5IGdseXBoIGhhcyBhbiBlcXVhbCB4Ci0gICAgLy8gYWR2YW5jZSkKLSAgICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKLQotICAg
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBTZXR1cCBhIFNraWEgcGFpbnRpbmcgY29udGV4
dCB0byB1c2UgdGhpcyBmb250LgotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICB2b2lkIHNl
dHVwUGFpbnQoU2tQYWludCopIGNvbnN0OwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
IC8vIFJldHVybiBTa2lhJ3MgdW5pcXVlIGlkIGZvciB0aGlzIGZvbnQuIFRoaXMgZW5jb2RlcyBi
b3RoIHRoZSBzdHlsZSBhbmQKLSAgICAvLyB0aGUgZm9udCdzIGZpbGUgbmFtZSBzbyByZWZlcnMg
dG8gYSBzaW5nbGUgZmFjZS4KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgU2tGb250SUQg
dW5pcXVlSUQoKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLSAgICBmbG9h
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0U2l6ZTsgfQotICAgIGludCBlbVNpemVJbkZv
bnRVbml0cygpIGNvbnN0OwotCi0gICAgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQotICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9u
dE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsg
fQotICAgIHZvaWQgc2V0RmFrZUJvbGQoYm9vbCBmYWtlQm9sZCkgeyBtX2Zha2VCb2xkID0gZmFr
ZUJvbGQ7IH0KLSAgICB2b2lkIHNldEZha2VJdGFsaWMoYm9vbCBmYWtlSXRhbGljKSB7IG1fZmFr
ZUl0YWxpYyA9IGZha2VJdGFsaWM7IH0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYpIGNvbnN0OwotICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25z
dCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZWZhY2UgPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgp
OyB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0j
ZW5kaWYKLQotICAgIEhhcmZidXp6RmFjZSogaGFyZmJ1enpGYWNlKCkgY29uc3Q7Ci0KLSAgICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gR2xvYmFsIGZvbnQgcHJlZmVyZW5jZXMuLi4KLQot
ICAgIHN0YXRpYyB2b2lkIHNldEhpbnRpbmcoU2tQYWludDo6SGludGluZyk7Ci0gICAgc3RhdGlj
IHZvaWQgc2V0QW50aUFsaWFzKGJvb2wgb24pOwotICAgIHN0YXRpYyB2b2lkIHNldFN1YnBpeGVs
R2x5cGhzKGJvb2wgb24pOwotCi1wcml2YXRlOgotICAgIHZvaWQgcXVlcnlTeXN0ZW1Gb3JSZW5k
ZXJTdHlsZSgpOwotCi0gICAgLy8gRklYTUU6IENvdWxkIFNrQXV0b1VucmVmIGJlIHVzZWQgaGVy
ZT8KLSAgICBTa1R5cGVmYWNlKiBtX3R5cGVmYWNlOwotICAgIENTdHJpbmcgbV9mYW1pbHk7Ci0g
ICAgZmxvYXQgbV90ZXh0U2l6ZTsKLSAgICBtdXRhYmxlIGludCBtX2VtU2l6ZUluRm9udFVuaXRz
OwotICAgIGJvb2wgbV9mYWtlQm9sZDsKLSAgICBib29sIG1fZmFrZUl0YWxpYzsKLSAgICBGb250
T3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKLSAgICBUZXh0T3JpZW50YXRpb24gbV90ZXh0T3Jp
ZW50YXRpb247Ci0gICAgRm9udFJlbmRlclN0eWxlIG1fc3R5bGU7Ci0gICAgbXV0YWJsZSBSZWZQ
dHI8SGFyZmJ1enpGYWNlPiBtX2hhcmZidXp6RmFjZTsKLQotICAgIFNrVHlwZWZhY2UqIGhhc2hU
YWJsZURlbGV0ZWRGb250VmFsdWUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFNr
VHlwZWZhY2UqPigtMSk7IH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAgLy8gaWZkZWYgRm9udFBsYXRmb3JtRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhZjE5NWUzY2JhMDVjZGNjNDdhYmNiMWMzZjgxMzlm
Yjk3M2M5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNp
bmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLQotI2luY2x1ZGUgIlNrRm9udEhvc3QuaCIKLSNp
bmNsdWRlICJTa1BhaW50LmgiCi0jaW5jbHVkZSAiU2tQYXRoLmgiCi0jaW5jbHVkZSAiU2tQb2lu
dC5oIgotI2luY2x1ZGUgIlNrUmVjdC5oIgotI2luY2x1ZGUgIlNrVXRpbHMuaCIKLQotZXh0ZXJu
ICJDIiB7Ci0jaW5jbHVkZSAiaGFyZmJ1enotc2hhcGVyLmgiCi19Ci0KLS8vIFRoaXMgZmlsZSBp
bXBsZW1lbnRzIHRoZSBjYWxsYmFja3Mgd2hpY2ggSGFyZmJ1enogcmVxdWlyZXMgYnkgdXNpbmcg
U2tpYQotLy8gY2FsbHMuIFNlZSB0aGUgSGFyZmJ1enogc291cmNlIGZvciByZWZlcmVuY2VzIGFi
b3V0IHdoYXQgdGhlc2UgY2FsbGJhY2tzIGRvLgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBIQl9GaXhlZCBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVkKFNrU2NhbGFyIHZhbHVlKQot
ewotICAgIC8vIEhCX0ZpeGVkIGlzIGEgMjYuNiBmaXhlZCBwb2ludCBmb3JtYXQuCi0gICAgcmV0
dXJuIHZhbHVlICogNjQ7Ci19Ci0KLXN0YXRpYyBIQl9Cb29sIHN0cmluZ1RvR2x5cGhzKEhCX0Zv
bnQgaGJGb250LCBjb25zdCBIQl9VQ2hhcjE2KiBjaGFyYWN0ZXJzLCBoYl91aW50MzIgbGVuZ3Ro
LCBIQl9HbHlwaCogZ2x5cGhzLCBoYl91aW50MzIqIGdseXBoc1NpemUsIEhCX0Jvb2wgaXNSVEwp
Ci17Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBs
YXRmb3JtRGF0YSo+KGhiRm9udC0+dXNlckRhdGEpOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0KLSAg
ICBmb250LT5zZXR1cFBhaW50KCZwYWludCk7Ci0gICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNr
UGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2RpbmcpOwotCi0gICAgdW5zaWduZWQgY29kZXBvaW50cyA9
IDA7Ci0gICAgZm9yIChoYl91aW50MzIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICBpZiAoIVNrVVRGMTZfSXNIaWdoU3Vycm9nYXRlKGNoYXJhY3RlcnNbaV0pKQotICAgICAgICAg
ICAgY29kZXBvaW50cysrOwotICAgICAgICBpZiAoY29kZXBvaW50cyA+ICpnbHlwaHNTaXplKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaW50IG51bUdseXBocyA9IHBhaW50
LnRleHRUb0dseXBocyhjaGFyYWN0ZXJzLCBsZW5ndGggKiBzaXplb2YodWludDE2X3QpLCByZWlu
dGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZ2x5cGhzKSk7Ci0KLSAgICAvLyBIQl9HbHlwaCBpcyAz
Mi1iaXQsIGJ1dCBTa2lhIG91dHB1dHMgb25seSAxNi1iaXQgbnVtYmVycy4gU28gb3VyCi0gICAg
Ly8gfGdseXBoc3wgYXJyYXkgbmVlZHMgdG8gYmUgY29udmVydGVkLgotICAgIGZvciAoaW50IGkg
PSBudW1HbHlwaHMgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICB1aW50MTZfdCB2YWx1ZTsK
LSAgICAgICAgLy8gV2UgdXNlIGEgbWVtY3B5IHRvIGF2b2lkIGJyZWFraW5nIHN0cmljdCBhbGlh
c2luZyBydWxlcy4KLSAgICAgICAgbWVtY3B5KCZ2YWx1ZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oZ2x5cGhzKSArIHNpemVvZih1aW50MTZfdCkgKiBpLCBzaXplb2YodWludDE2X3QpKTsKLSAg
ICAgICAgZ2x5cGhzW2ldID0gdmFsdWU7Ci0gICAgfQotCi0gICAgKmdseXBoc1NpemUgPSBudW1H
bHlwaHM7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGdseXBoc1RvQWR2YW5jZXMo
SEJfRm9udCBoYkZvbnQsIGNvbnN0IEhCX0dseXBoKiBnbHlwaHMsIGhiX3VpbnQzMiBudW1HbHlw
aHMsIEhCX0ZpeGVkKiBhZHZhbmNlcywgaW50IGZsYWdzKQotewotICAgIEZvbnRQbGF0Zm9ybURh
dGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihoYkZvbnQtPnVz
ZXJEYXRhKTsKLSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgZm9udC0+c2V0dXBQYWludCgmcGFp
bnQpOwotICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5j
b2RpbmcpOwotCi0gICAgT3duQXJyYXlQdHI8dWludDE2X3Q+IGdseXBoczE2ID0gYWRvcHRBcnJh
eVB0cihuZXcgdWludDE2X3RbbnVtR2x5cGhzXSk7Ci0gICAgaWYgKCFnbHlwaHMxNi5nZXQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7
ICsraSkKLSAgICAgICAgZ2x5cGhzMTZbaV0gPSBnbHlwaHNbaV07Ci0gICAgcGFpbnQuZ2V0VGV4
dFdpZHRocyhnbHlwaHMxNi5nZXQoKSwgbnVtR2x5cGhzICogc2l6ZW9mKHVpbnQxNl90KSwgcmVp
bnRlcnByZXRfY2FzdDxTa1NjYWxhcio+KGFkdmFuY2VzKSk7Ci0KLSAgICAvLyBUaGUgfGFkdmFu
Y2VzfCB2YWx1ZXMgd2hpY2ggU2tpYSBvdXRwdXRzIGFyZSBTa1NjYWxhcnMsIHdoaWNoIGFyZSBm
bG9hdHMKLSAgICAvLyBpbiBDaHJvbWl1bS4gSG93ZXZlciwgSGFyZmJ1enogd2FudHMgdGhlbSBp
biAyNi42IGZpeGVkIHBvaW50IGZvcm1hdC4KLSAgICAvLyBUaGVzZSB0d28gZm9ybWF0cyBhcmUg
Ym90aCAzMi1iaXRzIGxvbmcuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBo
czsgKytpKSB7Ci0gICAgICAgIGZsb2F0IHZhbHVlOwotICAgICAgICAvLyBXZSB1c2UgYSBtZW1j
cHkgdG8gYXZvaWQgYnJlYWtpbmcgc3RyaWN0IGFsaWFzaW5nIHJ1bGVzLgotICAgICAgICBtZW1j
cHkoJnZhbHVlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihhZHZhbmNlcykgKyBzaXplb2YoZmxv
YXQpICogaSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgIGFkdmFuY2VzW2ldID0gU2tpYVNjYWxh
clRvSGFyZmJ1enpGaXhlZCh2YWx1ZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgSEJfQm9vbCBjYW5S
ZW5kZXIoSEJfRm9udCBoYkZvbnQsIGNvbnN0IEhCX1VDaGFyMTYqIGNoYXJhY3RlcnMsIGhiX3Vp
bnQzMiBsZW5ndGgpCi17Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogZm9udCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGhiRm9udC0+dXNlckRhdGEpOwotICAgIFNrUGFpbnQg
cGFpbnQ7Ci0KLSAgICBmb250LT5zZXR1cFBhaW50KCZwYWludCk7Ci0gICAgcGFpbnQuc2V0VGV4
dEVuY29kaW5nKFNrUGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2RpbmcpOwotCi0gICAgT3duQXJyYXlQ
dHI8dWludDE2X3Q+IGdseXBoczE2ID0gYWRvcHRBcnJheVB0cihuZXcgdWludDE2X3RbbGVuZ3Ro
XSk7Ci0gICAgaWYgKCFnbHlwaHMxNi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaW50
IG51bUdseXBocyA9IHBhaW50LnRleHRUb0dseXBocyhjaGFyYWN0ZXJzLCBsZW5ndGggKiBzaXpl
b2YodWludDE2X3QpLCBnbHlwaHMxNi5nZXQoKSk7Ci0KLSAgICBib29sIGNhblJlbmRlciA9IHRy
dWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICBp
ZiAoIWdseXBoczE2W2ldKSB7Ci0gICAgICAgICAgICBjYW5SZW5kZXIgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNhblJlbmRlcjsK
LX0KLQotc3RhdGljIEhCX0Vycm9yIGdldE91dGxpbmVQb2ludChIQl9Gb250IGhiRm9udCwgSEJf
R2x5cGggZ2x5cGgsIGludCBmbGFncywgaGJfdWludDMyIHBvaW50LCBIQl9GaXhlZCogeFBvcywg
SEJfRml4ZWQqIHlQb3MsIGhiX3VpbnQzMiogcmVzdWx0aW5nTnVtUG9pbnRzKQotewotICAgIC8v
IFdlIGNhbm5vdCBwcm92aWRlIHRoZSByaWdodCBwb3NpdGlvbiBvZiBvdXRsaW5lIHBvaW50cyBm
cm9tIHBvaW50IGluZGV4LgotICAgIC8vIEp1c3QgcmV0dXJuIEhCX0Vycl9PayB3aXRoIHJlc3Vs
dGluZ051bVBvaW50cyA9IDAgc28gdGhhdCBoYXJmYnV6egotICAgIC8vIGZhbGxzIGJhY2sgb24g
dXNpbmcgZGVzaWduIGNvb3JkaW5hdGUgdmFsdWUgcGFpci4KLSAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMDc5IGZvciBtb3JlIGRldGFpbHMuCi0g
ICAgKnJlc3VsdGluZ051bVBvaW50cyA9IDA7Ci0gICAgcmV0dXJuIEhCX0Vycl9PazsKLX0KLQot
c3RhdGljIHZvaWQgZ2V0R2x5cGhNZXRyaWNzKEhCX0ZvbnQgaGJGb250LCBIQl9HbHlwaCBnbHlw
aCwgSEJfR2x5cGhNZXRyaWNzKiBtZXRyaWNzKQotewotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZv
bnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihoYkZvbnQtPnVzZXJEYXRh
KTsKLSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgZm9udC0+c2V0dXBQYWludCgmcGFpbnQpOwot
ICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2Rpbmcp
OwotICAgIHVpbnQxNl90IGdseXBoMTYgPSBnbHlwaDsKLSAgICBTa1NjYWxhciB3aWR0aDsKLSAg
ICBTa1JlY3QgYm91bmRzOwotICAgIHBhaW50LmdldFRleHRXaWR0aHMoJmdseXBoMTYsIHNpemVv
ZihnbHlwaDE2KSwgJndpZHRoLCAmYm91bmRzKTsKLQotICAgIG1ldHJpY3MtPnggPSBTa2lhU2Nh
bGFyVG9IYXJmYnV6ekZpeGVkKGJvdW5kcy5mTGVmdCk7Ci0gICAgbWV0cmljcy0+eSA9IFNraWFT
Y2FsYXJUb0hhcmZidXp6Rml4ZWQoYm91bmRzLmZUb3ApOwotICAgIG1ldHJpY3MtPndpZHRoID0g
U2tpYVNjYWxhclRvSGFyZmJ1enpGaXhlZChib3VuZHMud2lkdGgoKSk7Ci0gICAgbWV0cmljcy0+
aGVpZ2h0ID0gU2tpYVNjYWxhclRvSGFyZmJ1enpGaXhlZChib3VuZHMuaGVpZ2h0KCkpOwotCi0g
ICAgbWV0cmljcy0+eE9mZnNldCA9IFNraWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQod2lkdGgpOwot
ICAgIC8vIFdlIGNhbid0IGFjdHVhbGx5IGdldCB0aGUgfHl8IGNvcnJlY3QgYmVjYXVzZSBTa2lh
IGRvZXNuJ3QgZXhwb3J0Ci0gICAgLy8gdGhlIHZlcnRpY2FsIGFkdmFuY2UuIEhvd2V2ZXIsIG5v
ciB3ZSBkbyBldmVyIHJlbmRlciB2ZXJ0aWNhbCB0ZXh0IGF0Ci0gICAgLy8gdGhlIG1vbWVudCBz
byBpdCdzIHVuaW1wb3J0YW50LgotICAgIG1ldHJpY3MtPnlPZmZzZXQgPSAwOwotfQotCi1zdGF0
aWMgSEJfRml4ZWQgZ2V0Rm9udE1ldHJpYyhIQl9Gb250IGhiRm9udCwgSEJfRm9udE1ldHJpYyBt
ZXRyaWMpCi17Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Rm9udFBsYXRmb3JtRGF0YSo+KGhiRm9udC0+dXNlckRhdGEpOwotICAgIFNrUGFpbnQgcGFpbnQ7
Ci0KLSAgICBmb250LT5zZXR1cFBhaW50KCZwYWludCk7Ci0gICAgU2tQYWludDo6Rm9udE1ldHJp
Y3Mgc2tpYU1ldHJpY3M7Ci0gICAgcGFpbnQuZ2V0Rm9udE1ldHJpY3MoJnNraWFNZXRyaWNzKTsK
LQotICAgIHN3aXRjaCAobWV0cmljKSB7Ci0gICAgY2FzZSBIQl9Gb250QXNjZW50OgotICAgICAg
ICByZXR1cm4gU2tpYVNjYWxhclRvSGFyZmJ1enpGaXhlZCgtc2tpYU1ldHJpY3MuZkFzY2VudCk7
Ci0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBnZXR0aW5nIHRoZSByZXN0IG9mIHRoZSBtZXRyaWNz
IGFuZCBIYXJmYnV6eiBkb2Vzbid0IHNlZW0gdG8gbmVlZCB0aGVtLgotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotSEJfRm9udENsYXNzIGhhcmZidXp6U2tpYUNs
YXNzID0gewotICAgIHN0cmluZ1RvR2x5cGhzLAotICAgIGdseXBoc1RvQWR2YW5jZXMsCi0gICAg
Y2FuUmVuZGVyLAotICAgIGdldE91dGxpbmVQb2ludCwKLSAgICBnZXRHbHlwaE1ldHJpY3MsCi0g
ICAgZ2V0Rm9udE1ldHJpYywKLX07Ci0KLUhCX0ZvbnRfKiBhbGxvY0hhcmZidXp6Rm9udCgpCi17
Ci0gICAgSEJfRm9udF8qIGZvbnQgPSByZWludGVycHJldF9jYXN0PEhCX0ZvbnRfKj4oZmFzdE1h
bGxvYyhzaXplb2YoSEJfRm9udF8pKSk7Ci0gICAgbWVtc2V0KGZvbnQsIDAsIHNpemVvZihIQl9G
b250XykpOwotICAgIGZvbnQtPmtsYXNzID0gJmhhcmZidXp6U2tpYUNsYXNzOwotICAgIGZvbnQt
PnVzZXJEYXRhID0gMDsKLQotICAgIHJldHVybiBmb250OwotfQotCi1IQl9FcnJvciBoYXJmYnV6
elNraWFHZXRUYWJsZSh2b2lkKiB2b2lkZmFjZSwgY29uc3QgSEJfVGFnIHRhZywgSEJfQnl0ZSog
YnVmZmVyLCBIQl9VSW50KiBsZW4pCi17Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogZm9udCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHZvaWRmYWNlKTsKLQotICAgIGNvbnN0
IHNpemVfdCB0YWJsZVNpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udC0+dW5pcXVl
SUQoKSwgdGFnKTsKLSAgICBpZiAoIXRhYmxlU2l6ZSkKLSAgICAgICAgcmV0dXJuIEhCX0Vycl9J
bnZhbGlkX0FyZ3VtZW50OwotICAgIC8vIElmIEhhcmZidXp6IHNwZWNpZmllZCBhIE5VTEwgYnVm
ZmVyIHRoZW4gaXQncyBhc2tpbmcgZm9yIHRoZSBzaXplIG9mIHRoZSB0YWJsZS4KLSAgICBpZiAo
IWJ1ZmZlcikgewotICAgICAgICAqbGVuID0gdGFibGVTaXplOwotICAgICAgICByZXR1cm4gSEJf
RXJyX09rOwotICAgIH0KLQotICAgIGlmICgqbGVuIDwgdGFibGVTaXplKQotICAgICAgICByZXR1
cm4gSEJfRXJyX0ludmFsaWRfQXJndW1lbnQ7Ci0gICAgU2tGb250SG9zdDo6R2V0VGFibGVEYXRh
KGZvbnQtPnVuaXF1ZUlEKCksIHRhZywgMCwgdGFibGVTaXplLCBidWZmZXIpOwotICAgIHJldHVy
biBIQl9FcnJfT2s7Ci19Ci0KLXR5cGVkZWYgcGFpcjxIQl9GYWNlUmVjXyosIHVuc2lnbmVkPiBG
YWNlQ2FjaGVFbnRyeTsKLXR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIEZhY2VDYWNoZUVu
dHJ5LCBXVEY6OkludEhhc2g8dW5zaWduZWQgaW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czx1bnNpZ25lZCBpbnQ+ID4gSGFyZmJ1enpGYWNlQ2FjaGU7Ci1zdGF0aWMgSGFy
ZmJ1enpGYWNlQ2FjaGUqIGdIYXJmYnV6ekZhY2VDYWNoZSA9IDA7Ci0KLXN0YXRpYyBIQl9GYWNl
UmVjXyogZ2V0Q2FjaGVkSGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0
YSkKLXsKLSAgICBpZiAoIWdIYXJmYnV6ekZhY2VDYWNoZSkKLSAgICAgICAgZ0hhcmZidXp6RmFj
ZUNhY2hlID0gbmV3IEhhcmZidXp6RmFjZUNhY2hlOwotICAgIFNrRm9udElEIHVuaXF1ZUlEID0g
cGxhdGZvcm1EYXRhLT51bmlxdWVJRCgpOwotICAgIEhhcmZidXp6RmFjZUNhY2hlOjppdGVyYXRv
ciByZXN1bHQgPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmZpbmQodW5pcXVlSUQpOwotICAgIGlmIChy
ZXN1bHQgPT0gZ0hhcmZidXp6RmFjZUNhY2hlLT5lbmQoKSkgewotICAgICAgICBGYWNlQ2FjaGVF
bnRyeSBlbnRyeShIQl9OZXdGYWNlKHBsYXRmb3JtRGF0YSwgaGFyZmJ1enpTa2lhR2V0VGFibGUp
LCAxKTsKLSAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5zZXQodW5pcXVlSUQsIGVudHJ5KTsK
LSAgICAgICAgcmV0dXJuIGVudHJ5LmZpcnN0OwotICAgIH0KLSAgICArKyhyZXN1bHQuZ2V0KCkt
PnNlY29uZC5zZWNvbmQpOwotICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdDsK
LX0KLQotc3RhdGljIHZvaWQgcmVsZWFzZUNhY2hlZEhhcmZidXp6RmFjZShTa0ZvbnRJRCB1bmlx
dWVJRCkKLXsKLSAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gZ0hhcmZi
dXp6RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlEKTsKLSAgICBBU1NFUlQocmVzdWx0ICE9IGdIYXJm
YnV6ekZhY2VDYWNoZS0+ZW5kKCkpOwotICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnNlY29uZC5z
ZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIGlm
ICghKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkpIHsKLSAgICAgICAgSEJfRnJlZUZhY2Uo
cmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOwotICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUt
PnJlbW92ZSh1bmlxdWVJRCk7Ci0gICAgfQotfQotCi1IYXJmYnV6ekZhY2U6OkhhcmZidXp6RmFj
ZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX3VuaXF1ZUlEKHBsYXRm
b3JtRGF0YS0+dW5pcXVlSUQoKSkKLXsKLSAgICBtX2hhcmZidXp6RmFjZSA9IGdldENhY2hlZEhh
cmZidXp6RmFjZShwbGF0Zm9ybURhdGEpOwotfQotCi1IYXJmYnV6ekZhY2U6On5IYXJmYnV6ekZh
Y2UoKQotewotICAgIHJlbGVhc2VDYWNoZWRIYXJmYnV6ekZhY2UobV91bmlxdWVJRCk7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjNzQzY2MzZjFlZTNiYWIzMzZmYmYzMTNkYmE1MzE0ODFkYzUwOWVhLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEhhcmZidXp6U2tpYV9oCi0jZGVmaW5lIEhhcmZi
dXp6U2tpYV9oCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLQotc3RydWN0IEhCX0ZhY2VSZWNfOwotc3RydWN0IEhCX0ZvbnRfOwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci0KLWNsYXNzIEhhcmZi
dXp6RmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEhhcmZidXp6RmFjZT4gewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhhcmZidXp6RmFjZT4gY3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEq
IHBsYXRmb3JtRGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFyZmJ1
enpGYWNlKHBsYXRmb3JtRGF0YSkpOwotICAgIH0KLQotICAgIH5IYXJmYnV6ekZhY2UoKTsKLQot
ICAgIEhCX0ZhY2VSZWNfKiBmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXJmYnV6ekZhY2U7IH0K
LQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSop
OwotCi0gICAgdWludDMyX3QgbV91bmlxdWVJRDsKLSAgICBIQl9GYWNlUmVjXyogbV9oYXJmYnV6
ekZhY2U7Ci19OwotCi0vLyBGSVhNRTogUmVtb3ZlIHRoaXMgYXN5bW1ldHJpYyBhbGxvYy9mcmVl
IGZ1bmN0aW9uLgotLy8gV2UnbGwgcmVtb3ZlIHRoaXMgb25jZSB3ZSBtb3ZlIHRvIHRoZSBuZXcg
SGFyZmJ1enogQVBJLgotSEJfRm9udF8qIGFsbG9jSGFyZmJ1enpGb250KCk7Ci0KLX0gIC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM0NWNiNjExY2U0ZTNlNmFkMDM1ODI0
Mzk1NTY1NGY0NWU3NzAzMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVG
b250RGF0YUxpbnV4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5j
bHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
LSNpbmNsdWRlICJWRE1YUGFyc2VyLmgiCi0KLSNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCi0jaW5j
bHVkZSAiU2tQYWludC5oIgotI2luY2x1ZGUgIlNrVGltZS5oIgotI2luY2x1ZGUgIlNrVHlwZWZh
Y2UuaCIKLSNpbmNsdWRlICJTa1R5cGVzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8g
U21hbGxjYXBzIHZlcnNpb25zIG9mIGZvbnRzIGFyZSA3MCUgdGhlIHNpemUgb2YgdGhlIG5vcm1h
bCBmb250Lgotc3RhdGljIGNvbnN0IGZsb2F0IHNtYWxsQ2Fwc0ZyYWN0aW9uID0gMC43ZjsKLXN0
YXRpYyBjb25zdCBmbG9hdCBlbXBoYXNpc01hcmtGcmFjdGlvbiA9IC41OwotLy8gVGhpcyBpcyB0
aGUgbGFyZ2VzdCBWRE1YIHRhYmxlIHdoaWNoIHdlJ2xsIHRyeSB0byBsb2FkIGFuZCBwYXJzZS4K
LXN0YXRpYyBjb25zdCBzaXplX3QgbWF4VkRNWFRhYmxlU2l6ZSA9IDEwMjQgKiAxMDI0OyAgLy8g
MSBNQgotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGlmICgh
bV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7Ci0gICAgICAgIG1fZm9udE1ldHJpY3MucmVzZXQoKTsK
LSAgICAgICAgbV9hdmdDaGFyV2lkdGggPSAwOwotICAgICAgICBtX21heENoYXJXaWR0aCA9IDA7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTa1BhaW50IHBhaW50OwotICAgIFNrUGFp
bnQ6OkZvbnRNZXRyaWNzIG1ldHJpY3M7Ci0KLSAgICBtX3BsYXRmb3JtRGF0YS5zZXR1cFBhaW50
KCZwYWludCk7Ci0gICAgcGFpbnQuZ2V0Rm9udE1ldHJpY3MoJm1ldHJpY3MpOwotICAgIGNvbnN0
IFNrRm9udElEIGZvbnRJRCA9IG1fcGxhdGZvcm1EYXRhLnVuaXF1ZUlEKCk7Ci0KLSAgICBzdGF0
aWMgY29uc3QgdWludDMyX3QgdmRteFRhZyA9IFNrU2V0Rm91ckJ5dGVUYWcoJ1YnLCAnRCcsICdN
JywgJ1gnKTsKLSAgICBpbnQgcGl4ZWxTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMC41
OwotICAgIGludCB2ZG14QXNjZW50LCB2ZG14RGVzY2VudDsKLSAgICBib29sIGlzVkRNWFZhbGlk
ID0gZmFsc2U7Ci0KLSAgICBzaXplX3QgdmRteFNpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNp
emUoZm9udElELCB2ZG14VGFnKTsKLSAgICBpZiAodmRteFNpemUgJiYgdmRteFNpemUgPCBtYXhW
RE1YVGFibGVTaXplKSB7Ci0gICAgICAgIHVpbnQ4X3QqIHZkbXhUYWJsZSA9ICh1aW50OF90Kikg
ZmFzdE1hbGxvYyh2ZG14U2l6ZSk7Ci0gICAgICAgIGlmICh2ZG14VGFibGUKLSAgICAgICAgICAg
ICYmIFNrRm9udEhvc3Q6OkdldFRhYmxlRGF0YShmb250SUQsIHZkbXhUYWcsIDAsIHZkbXhTaXpl
LCB2ZG14VGFibGUpID09IHZkbXhTaXplCi0gICAgICAgICAgICAmJiBwYXJzZVZETVgoJnZkbXhB
c2NlbnQsICZ2ZG14RGVzY2VudCwgdmRteFRhYmxlLCB2ZG14U2l6ZSwgcGl4ZWxTaXplKSkKLSAg
ICAgICAgICAgIGlzVkRNWFZhbGlkID0gdHJ1ZTsKLSAgICAgICAgZmFzdEZyZWUodmRteFRhYmxl
KTsKLSAgICB9Ci0KLSAgICBmbG9hdCBhc2NlbnQ7Ci0gICAgZmxvYXQgZGVzY2VudDsKLQotICAg
IC8vIEJld2FyZSB0aG9zZSB3aG8gc3RlcCBoZXJlOiBUaGlzIGNvZGUgaXMgZGVzaWduZWQgdG8g
bWF0Y2ggV2luMzIgZm9udAotICAgIC8vIG1ldHJpY3MgKmV4YWN0bHkqLgotICAgIGlmIChpc1ZE
TVhWYWxpZCkgewotICAgICAgICBhc2NlbnQgPSB2ZG14QXNjZW50OwotICAgICAgICBkZXNjZW50
ID0gLXZkbXhEZXNjZW50OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFNrU2NhbGFyIGhlaWdodCA9
IC1tZXRyaWNzLmZBc2NlbnQgKyBtZXRyaWNzLmZEZXNjZW50ICsgbWV0cmljcy5mTGVhZGluZzsK
LSAgICAgICAgYXNjZW50ID0gU2tTY2FsYXJSb3VuZCgtbWV0cmljcy5mQXNjZW50KTsKLSAgICAg
ICAgZGVzY2VudCA9IFNrU2NhbGFyUm91bmQoaGVpZ2h0KSAtIGFzY2VudDsKLSAgICB9Ci0KLSAg
ICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0
RGVzY2VudChkZXNjZW50KTsKLQotICAgIGZsb2F0IHhIZWlnaHQ7Ci0gICAgaWYgKG1ldHJpY3Mu
ZlhIZWlnaHQpCi0gICAgICAgIHhIZWlnaHQgPSBtZXRyaWNzLmZYSGVpZ2h0OwotICAgIGVsc2Ug
ewotICAgICAgICAvLyBoYWNrIHRha2VuIGZyb20gdGhlIFdpbmRvd3MgcG9ydAotICAgICAgICB4
SGVpZ2h0ID0gYXNjZW50ICogMC41NmY7Ci0gICAgfQotCi0gICAgZmxvYXQgbGluZUdhcCA9IFNr
U2NhbGFyVG9GbG9hdChtZXRyaWNzLmZMZWFkaW5nKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExp
bmVHYXAobGluZUdhcCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwot
ICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobHJvdW5kZihhc2NlbnQpICsgbHJvdW5k
ZihkZXNjZW50KSArIGxyb3VuZGYobGluZUdhcCkpOwotCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgp
Lm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2so
KSkgewotICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgdmhlYVRhZyA9IFNrU2V0Rm91ckJ5
dGVUYWcoJ3YnLCAnaCcsICdlJywgJ2EnKTsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90
IHZvcmdUYWcgPSBTa1NldEZvdXJCeXRlVGFnKCdWJywgJ08nLCAnUicsICdHJyk7Ci0gICAgICAg
IHNpemVfdCB2aGVhU2l6ZSA9IFNrRm9udEhvc3Q6OkdldFRhYmxlU2l6ZShmb250SUQsIHZoZWFU
YWcpOwotICAgICAgICBzaXplX3Qgdm9yZ1NpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUo
Zm9udElELCB2b3JnVGFnKTsKLSAgICAgICAgaWYgKCh2aGVhU2l6ZSA+IDApIHx8ICh2b3JnU2l6
ZSA+IDApKQotICAgICAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IHRydWU7Ci0gICAgfQot
Ci0gICAgLy8gSW4gV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERh
dGEuY3BwLCBtX3NwYWNlV2lkdGggaXMKLSAgICAvLyBjYWxjdWxhdGVkIGZvciB1cywgYnV0IHdl
IG5lZWQgdG8gY2FsY3VsYXRlIG1fbWF4Q2hhcldpZHRoIGFuZAotICAgIC8vIG1fYXZnQ2hhcldp
ZHRoIGluIG9yZGVyIGZvciB0ZXh0IGVudHJ5IHdpZGdldHMgdG8gYmUgc2l6ZWQgY29ycmVjdGx5
LgotCi0gICAgU2tTY2FsYXIgeFJhbmdlID0gbWV0cmljcy5mWE1heCAtIG1ldHJpY3MuZlhNaW47
Ci0gICAgbV9tYXhDaGFyV2lkdGggPSBTa1NjYWxhclJvdW5kKHhSYW5nZSAqIFNrU2NhbGFyUm91
bmQobV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSk7Ci0KLSAgICBpZiAobWV0cmljcy5mQXZnQ2hhcldp
ZHRoKQotICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IFNrU2NhbGFyUm91bmQobWV0cmljcy5mQXZn
Q2hhcldpZHRoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9hdmdDaGFyV2lkdGggPSB4SGVpZ2h0
OwotCi0gICAgICAgIEdseXBoUGFnZSogZ2x5cGhQYWdlWmVybyA9IEdseXBoUGFnZVRyZWVOb2Rl
OjpnZXRSb290Q2hpbGQodGhpcywgMCktPnBhZ2UoKTsKLQotICAgICAgICBpZiAoZ2x5cGhQYWdl
WmVybykgewotICAgICAgICAgICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgeF9jaGFyID0gJ3gnOwot
ICAgICAgICAgICAgY29uc3QgR2x5cGggeEdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKHhfY2hhcikuZ2x5cGg7Ci0KLSAgICAgICAgICAgIGlmICh4R2x5cGgpCi0g
ICAgICAgICAgICAgICAgbV9hdmdDaGFyV2lkdGggPSB3aWR0aEZvckdseXBoKHhHbHlwaCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldp
ZHRoSW5pdCgpCi17Ci0gICAgLy8gY2hhcndpZHRocyBhcmUgc2V0IGluIHBsYXRmb3JtSW5pdC4K
LX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLX0KLQotUGFz
c093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZh
Y3RvcikgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCBzY2FsZWRTaXplID0gbHJvdW5kZihmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0gICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1EYXRh
LCBzY2FsZWRTaXplKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7Ci19Ci0KLVNpbXBsZUZvbnRE
YXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShp
c0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQot
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGcmFjdGlvbik7Ci0KLSAgICByZXR1cm4gbV9k
ZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsKLX0KLQotU2ltcGxlRm9udERhdGEqIFNp
bXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQot
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3Vz
dG9tRm9udCgpKTsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCi0g
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250
RGF0YShmb250RGVzY3JpcHRpb24sIGVtcGhhc2lzTWFya0ZyYWN0aW9uKTsKLQotICAgIHJldHVy
biBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOwotfQotCi1ib29sIFNpbXBs
ZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgU2tQYWludCBwYWludDsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWF4QnVmZmVyQ291bnQgPSA2NDsKLSAgICB1aW50MTZfdCBnbHlwaHNbbWF4QnVm
ZmVyQ291bnRdOwotCi0gICAgbV9wbGF0Zm9ybURhdGEuc2V0dXBQYWludCgmcGFpbnQpOwotICAg
IHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZfVGV4dEVuY29kaW5nKTsKLQot
ICAgIHdoaWxlIChsZW5ndGggPiAwKSB7Ci0gICAgICAgIGludCBuID0gU2tNaW4zMihsZW5ndGgs
IFNLX0FSUkFZX0NPVU5UKGdseXBocykpOwotCi0gICAgICAgIC8vIHRleHRUb0dseXBocyB0YWtl
cyBhIGJ5dGUgY291bnQgc28gd2UgZG91YmxlIHRoZSBjaGFyYWN0ZXIgY291bnQuCi0gICAgICAg
IGludCBjb3VudCA9IHBhaW50LnRleHRUb0dseXBocyhjaGFyYWN0ZXJzLCBuICogMiwgZ2x5cGhz
KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAg
ICBpZiAoMCA9PSBnbHlwaHNbaV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAg
ICAvLyBtaXNzaW5nIGdseXBoCi0gICAgICAgIH0KLQotICAgICAgICBjaGFyYWN0ZXJzICs9IG47
Ci0gICAgICAgIGxlbmd0aCAtPSBuOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCi17Ci0gICAgbV90cmVhdEFzRml4
ZWRQaXRjaCA9IHBsYXRmb3JtRGF0YSgpLmlzRml4ZWRQaXRjaCgpOwotfQotCi1GbG9hdFJlY3Qg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotfQotICAgIAotZmxvYXQgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxh
dGZvcm1EYXRhLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTa0FTU0VSVChzaXpl
b2YoZ2x5cGgpID09IDIpOyAgIC8vIGNvbXBpbGUtdGltZSBhc3NlcnQKLQotICAgIFNrUGFpbnQg
cGFpbnQ7Ci0KLSAgICBtX3BsYXRmb3JtRGF0YS5zZXR1cFBhaW50KCZwYWludCk7Ci0KLSAgICBw
YWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKLSAg
ICBTa1NjYWxhciB3aWR0aCA9IHBhaW50Lm1lYXN1cmVUZXh0KCZnbHlwaCwgMik7Ci0KLSAgICAv
LyBUaG91Z2ggV2ViS2l0IHN1cHBvcnRzIG5vbi1pbnRlZ3JhbCBhZHZhbmNlcywgU2tpYSBvbmx5
IHN1cHBvcnRzIHRoZW0KLSAgICAvLyBmb3IgInN1YnBpeGVsIiAoZGlzdGluY3QgZnJvbSBMQ0Qg
c3VicGl4ZWwgYW50aWFsaWFzaW5nKSB0ZXh0LCB3aGljaAotICAgIC8vIHdlIGRvbid0IHVzZS4K
LSAgICByZXR1cm4gcm91bmQoU2tTY2FsYXJUb0Zsb2F0KHdpZHRoKSk7Ci19Ci0KLXZvaWQgU2lt
cGxlRm9udERhdGE6OnVwZGF0ZUdseXBoV2l0aFZhcmlhdGlvblNlbGVjdG9yKFVDaGFyMzIgY2hh
cmFjdGVyLCBVQ2hhcjMyIHNlbGVjdG9yLCBHbHlwaCYgZ2x5cGgpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudC4KLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0
Q29udHJvbGxlckhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
YTM2MzY1YjQwOWJiMzVmOTA0YmE1MmU1NDE1MjE2Yzk1ZjUyMzg0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRD
b250cm9sbGVySGFyZkJ1enouY3BwCkBAIC0wLDAgKzEsNTcxIEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmgiCisKKyNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiU3Vycm9nYXRlUGFp
ckF3YXJlVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorCitleHRlcm4gIkMi
IHsKKyNpbmNsdWRlICJoYXJmYnV6ei11bmljb2RlLmgiCit9CisKKyNpbmNsdWRlIDx1bmljb2Rl
L25vcm1senIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBIYXJmYnV6eiB1c2VzIDI2
LjYgZml4ZWQgcG9pbnQgdmFsdWVzIGZvciBwaXhlbCBvZmZzZXRzLiBIb3dldmVyLCB3ZSBkb24n
dAorLy8gaGFuZGxlIHN1YnBpeGVsIHBvc2l0aW9uaW5nIHNvIHRoaXMgZnVuY3Rpb24gaXMgdXNl
ZCB0byB0cnVuY2F0ZSBIYXJmYnV6egorLy8gdmFsdWVzIHRvIGEgbnVtYmVyIG9mIHBpeGVscy4K
K3N0YXRpYyBpbnQgdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKEhCX0ZpeGVkIHZhbHVlKQor
eworICAgIHJldHVybiB2YWx1ZSA+PiA2OworfQorCitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNv
bXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBUZXh0UnVuJiBydW4sIGludCBzdGFydGluZ1gsIGlu
dCBzdGFydGluZ1ksIHVuc2lnbmVkIHdvcmRTcGFjaW5nLCB1bnNpZ25lZCBsZXR0ZXJTcGFjaW5n
LCB1bnNpZ25lZCBwYWRkaW5nLCBjb25zdCBGb250KiBmb250KQorICAgIDogbV9mb250KGZvbnQp
CisgICAgLCBtX3J1bihnZXROb3JtYWxpemVkVGV4dFJ1bihydW4sIG1fbm9ybWFsaXplZFJ1biwg
bV9ub3JtYWxpemVkQnVmZmVyKSkKK3sKKyAgICAvLyBEbyBub3QgdXNlIHxydW58IGluc2lkZSB0
aGlzIGNvbnN0cnVjdG9yLiBVc2UgfG1fcnVufCBpbnN0ZWFkLgorCisgICAgbWVtc2V0KCZtX2l0
ZW0sIDAsIHNpemVvZihtX2l0ZW0pKTsKKyAgICAvLyBXZSBjYW5ub3Qga25vdywgYWhlYWQgb2Yg
dGltZSwgaG93IG1hbnkgZ2x5cGhzIGEgZ2l2ZW4gc2NyaXB0IHJ1bgorICAgIC8vIHdpbGwgcHJv
ZHVjZS4gV2UgdGFrZSBhIGd1ZXNzIHRoYXQgc2NyaXB0IHJ1bnMgd2lsbCBub3QgcHJvZHVjZSBt
b3JlCisgICAgLy8gdGhhbiB0d2ljZSBhcyBtYW55IGdseXBocyBhcyB0aGVyZSBhcmUgY29kZSBw
b2ludHMgcGx1cyBhIGJpdCBvZgorICAgIC8vIHBhZGRpbmcgYW5kIGZhbGxiYWNrIGlmIHdlIGZp
bmQgdGhhdCB3ZSBhcmUgd3JvbmcuCisgICAgY3JlYXRlR2x5cGhBcnJheXMoKG1fcnVuLmxlbmd0
aCgpICsgMikgKiAyKTsKKworICAgIG1faXRlbS5sb2dfY2x1c3RlcnMgPSBuZXcgdW5zaWduZWQg
c2hvcnRbbV9ydW4ubGVuZ3RoKCldOworCisgICAgbV9pdGVtLmZhY2UgPSAwOworICAgIG1faXRl
bS5mb250ID0gYWxsb2NIYXJmYnV6ekZvbnQoKTsKKworICAgIG1faXRlbS5pdGVtLmJpZGlMZXZl
bCA9IG1fcnVuLnJ0bCgpOworCisgICAgbV9pdGVtLnN0cmluZyA9IG1fcnVuLmNoYXJhY3RlcnMo
KTsKKyAgICBtX2l0ZW0uc3RyaW5nTGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CisKKyAgICByZXNl
dChzdGFydGluZ1gpOworICAgIG1fc3RhcnRpbmdZID0gc3RhcnRpbmdZOworCisgICAgc2V0V29y
ZFNwYWNpbmdBZGp1c3RtZW50KHdvcmRTcGFjaW5nKTsKKyAgICBzZXRMZXR0ZXJTcGFjaW5nQWRq
dXN0bWVudChsZXR0ZXJTcGFjaW5nKTsKKyAgICBzZXRQYWRkaW5nKHBhZGRpbmcpOworfQorCitD
b21wbGV4VGV4dENvbnRyb2xsZXI6On5Db21wbGV4VGV4dENvbnRyb2xsZXIoKQoreworICAgIGZh
c3RGcmVlKG1faXRlbS5mb250KTsKKyAgICBkZWxldGVHbHlwaEFycmF5cygpOworICAgIGRlbGV0
ZVtdIG1faXRlbS5sb2dfY2x1c3RlcnM7Cit9CisKK2Jvb2wgQ29tcGxleFRleHRDb250cm9sbGVy
Ojppc1dvcmRCcmVhayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gaW5kZXggJiYgaXND
b2RlcG9pbnRTcGFjZShtX2l0ZW0uc3RyaW5nW2luZGV4XSkgJiYgIWlzQ29kZXBvaW50U3BhY2Uo
bV9pdGVtLnN0cmluZ1tpbmRleCAtIDFdKTsKK30KKworaW50IENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6ZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZyh1bnNpZ25lZCBsb2dDbHVzdGVyc0luZGV4KQor
eworICAgIGludCB3b3JkQnJlYWtTcGFjaW5nID0gMDsKKyAgICAvLyBUaGUgZmlyc3QgaGFsZiBv
ZiB0aGUgY29uanVuY3Rpb24gd29ya3MgYXJvdW5kIHRoZSBjYXNlIHdoZXJlCisgICAgLy8gb3V0
cHV0IGdseXBocyBhcmVuJ3QgYXNzb2NpYXRlZCB3aXRoIGFueSBjb2RlcG9pbnRzIGJ5IHRoZQor
ICAgIC8vIGNsdXN0ZXJzIGxvZy4KKyAgICBpZiAobG9nQ2x1c3RlcnNJbmRleCA8IG1faXRlbS5p
dGVtLmxlbmd0aAorICAgICAgICAmJiBpc1dvcmRCcmVhayhtX2l0ZW0uaXRlbS5wb3MgKyBsb2dD
bHVzdGVyc0luZGV4KSkgeworICAgICAgICB3b3JkQnJlYWtTcGFjaW5nID0gbV93b3JkU3BhY2lu
Z0FkanVzdG1lbnQ7CisKKyAgICAgICAgaWYgKG1fcGFkZGluZyA+IDApIHsKKyAgICAgICAgICAg
IGludCB0b1BhZCA9IHJvdW5kZihtX3BhZFBlcldvcmRCcmVhayArIG1fcGFkRXJyb3IpOworICAg
ICAgICAgICAgbV9wYWRFcnJvciArPSBtX3BhZFBlcldvcmRCcmVhayAtIHRvUGFkOworCisgICAg
ICAgICAgICBpZiAobV9wYWRkaW5nIDwgdG9QYWQpCisgICAgICAgICAgICAgICAgdG9QYWQgPSBt
X3BhZGRpbmc7CisgICAgICAgICAgICBtX3BhZGRpbmcgLT0gdG9QYWQ7CisgICAgICAgICAgICB3
b3JkQnJlYWtTcGFjaW5nICs9IHRvUGFkOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB3
b3JkQnJlYWtTcGFjaW5nOworfQorCisvLyBzZXRQYWRkaW5nIHNldHMgYSBudW1iZXIgb2YgcGl4
ZWxzIHRvIGJlIGRpc3RyaWJ1dGVkIGFjcm9zcyB0aGUgVGV4dFJ1bi4KKy8vIFdlYktpdCB1c2Vz
IHRoaXMgdG8ganVzdGlmeSB0ZXh0Lgordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldFBh
ZGRpbmcoaW50IHBhZGRpbmcpCit7CisgICAgbV9wYWRkaW5nID0gcGFkZGluZzsKKyAgICBtX3Bh
ZEVycm9yID0gMDsKKyAgICBpZiAoIW1fcGFkZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gSWYgd2UgaGF2ZSBwYWRkaW5nIHRvIGRpc3RyaWJ1dGUsIHRoZW4gd2UgdHJ5IHRvIGdpdmUg
YW4gZXF1YWwKKyAgICAvLyBhbW91bnQgdG8gZWFjaCBzcGFjZS4gVGhlIGxhc3Qgc3BhY2UgZ2V0
cyB0aGUgc21hbGxlciBhbW91bnQsIGlmCisgICAgLy8gYW55LgorICAgIHVuc2lnbmVkIG51bVdv
cmRCcmVha3MgPSAwOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faXRlbS5zdHJp
bmdMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoaXNXb3JkQnJlYWsoaSkpCisgICAgICAgICAg
ICBudW1Xb3JkQnJlYWtzKys7CisgICAgfQorCisgICAgaWYgKG51bVdvcmRCcmVha3MpCisgICAg
ICAgIG1fcGFkUGVyV29yZEJyZWFrID0gbV9wYWRkaW5nIC8gbnVtV29yZEJyZWFrczsKKyAgICBl
bHNlCisgICAgICAgIG1fcGFkUGVyV29yZEJyZWFrID0gMDsKK30KKwordm9pZCBDb21wbGV4VGV4
dENvbnRyb2xsZXI6OnJlc2V0KGludCBvZmZzZXQpCit7CisgICAgbV9pbmRleE9mTmV4dFNjcmlw
dFJ1biA9IDA7CisgICAgbV9vZmZzZXRYID0gb2Zmc2V0OworfQorCit2b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6c2V0dXBGb3JSVEwoKQoreworICAgIGludCBwYWRkaW5nID0gbV9wYWRkaW5n
OworICAgIC8vIEZJWE1FOiB0aGlzIGNhdXNlcyB1cyB0byBzaGFwZSB0aGUgdGV4dCB0d2ljZSAt
LSBvbmNlIHRvIGNvbXB1dGUgdGhlIHdpZHRoIGFuZCB0aGVuIGFnYWluCisgICAgLy8gYmVsb3cg
d2hlbiBhY3R1YWxseSByZW5kZXJpbmcuIENoYW5nZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgdG8g
bWF0Y2ggcGxhdGZvcm0vbWFjIGFuZAorICAgIC8vIHBsYXRmb3JtL2Nocm9taXVtL3dpbiBieSBo
YXZpbmcgaXQgc3RvcmUgdGhlIHNoYXBlZCBydW5zLCBzbyB3ZSBjYW4gcmV1c2UgdGhlIHJlc3Vs
dHMuCisgICAgcmVzZXQobV9vZmZzZXRYICsgd2lkdGhPZkZ1bGxSdW4oKSk7CisgICAgLy8gV2Ug
bmVlZCB0byBzZXQgdGhlIHBhZGRpbmcgYWdhaW4gYmVjYXVzZSBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgbGF5b3V0IGNvbnN1bWVkIHRoZSB2YWx1ZS4KKyAgICAvLyBGaXhpbmcgdGhlIGFib3ZlIHBy
b2JsZW0gd291bGQgaGVscCBoZXJlIHRvby4KKyAgICBzZXRQYWRkaW5nKHBhZGRpbmcpOworfQor
CisvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHNjcmlwdCBydW4sIHJldHVybmluZyBmYWxzZSB3aGVu
IHRoZSBlbmQgb2YgdGhlCisvLyBUZXh0UnVuIGhhcyBiZWVuIHJlYWNoZWQuCitib29sIENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6bmV4dFNjcmlwdFJ1bigpCit7CisgICAgLy8gRW5zdXJlIHdlJ3Jl
IG5vdCBwb2ludGluZyBhdCB0aGUgc21hbGwgY2FwcyBidWZmZXIuCisgICAgbV9pdGVtLnN0cmlu
ZyA9IG1fcnVuLmNoYXJhY3RlcnMoKTsKKworICAgIGlmICghaGJfdXRmMTZfc2NyaXB0X3J1bl9u
ZXh0KDAsICZtX2l0ZW0uaXRlbSwgbV9ydW4uY2hhcmFjdGVycygpLCBtX3J1bi5sZW5ndGgoKSwg
Jm1faW5kZXhPZk5leHRTY3JpcHRSdW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBJdCBpcyBhY3R1YWxseSB3cm9uZyB0byBjb25zaWRlciBzY3JpcHQgcnVucyBhdCBhbGwgaW4g
dGhpcyBjb2RlLgorICAgIC8vIE90aGVyIFdlYktpdCBjb2RlIChlLmcuIE1hYykgc2VnbWVudHMg
Y29tcGxleCB0ZXh0IGp1c3QgYnkgZmluZGluZworICAgIC8vIHRoZSBsb25nZXN0IHNwYW4gb2Yg
dGV4dCBjb3ZlcmVkIGJ5IGEgc2luZ2xlIGZvbnQuCisgICAgLy8gQnV0IHdlIGN1cnJlbnRseSBu
ZWVkIHRvIGNhbGwgaGJfdXRmMTZfc2NyaXB0X3J1bl9uZXh0IGFueXdheSB0byBmaWxsCisgICAg
Ly8gaW4gdGhlIGhhcmZidXp6IGRhdGEgc3RydWN0dXJlcyB0byBlLmcuIHBpY2sgdGhlIGNvcnJl
Y3Qgc2NyaXB0J3Mgc2hhcGVyLgorICAgIC8vIFNvIHdlIGFsbG93IHRoYXQgdG8gcnVuIGZpcnN0
LCB0aGVuIGRvIGEgc2Vjb25kIHBhc3Mgb3ZlciB0aGUgcmFuZ2UgaXQKKyAgICAvLyBmb3VuZCBh
bmQgdGFrZSB0aGUgbGFyZ2VzdCBzdWJyZWdpb24gdGhhdCBzdGF5cyB3aXRoaW4gYSBzaW5nbGUg
Zm9udC4KKyAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IgaXRlcmF0b3Ioc3RhdGlj
X2Nhc3Q8Y29uc3QgVUNoYXIqPigmbV9pdGVtLnN0cmluZ1ttX2l0ZW0uaXRlbS5wb3NdKSwgMCwg
c3RhdGljX2Nhc3Q8aW50PihtX2l0ZW0uaXRlbS5sZW5ndGgpLCBzdGF0aWNfY2FzdDxpbnQ+KG1f
aXRlbS5pdGVtLmxlbmd0aCkpOworICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgIHVuc2lnbmVk
IGNsdXN0ZXJMZW5ndGggPSAwOworICAgIGlmICghaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIs
IGNsdXN0ZXJMZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jdXJyZW50Rm9u
dERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5m
b250RGF0YTsKKyAgICBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOworICAgIHdoaWxl
IChpdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpIHsKKyAgICAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIG5leHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGNoYXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOworICAgICAgICBpZiAobmV4dEZv
bnREYXRhICE9IG1fY3VycmVudEZvbnREYXRhKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCk7CisgICAgfQorICAgIG1faXRlbS5pdGVt
Lmxlbmd0aCA9IGl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKTsKKyAgICBtX2luZGV4T2ZOZXh0
U2NyaXB0UnVuID0gbV9pdGVtLml0ZW0ucG9zICsgaXRlcmF0b3IuY3VycmVudENoYXJhY3Rlcigp
OworCisgICAgc2V0dXBGb250Rm9yU2NyaXB0UnVuKCk7CisgICAgc2hhcGVHbHlwaHMoKTsKKyAg
ICBzZXRHbHlwaFBvc2l0aW9ucyhydGwoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZmxv
YXQgQ29tcGxleFRleHRDb250cm9sbGVyOjp3aWR0aE9mRnVsbFJ1bigpCit7CisgICAgZmxvYXQg
d2lkdGhTdW0gPSAwOworICAgIHdoaWxlIChuZXh0U2NyaXB0UnVuKCkpCisgICAgICAgIHdpZHRo
U3VtICs9IHdpZHRoKCk7CisKKyAgICByZXR1cm4gd2lkdGhTdW07Cit9CisKK3N0YXRpYyB2b2lk
IHNldHVwRm9udEZlYXR1cmVzKGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIHNldHRpbmdzLCBI
Ql9GYWNlUmVjXyogaGJGYWNlKQoreworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChoYkZhY2UtPmdzdWIpCisgICAgICAgIEhCX0dTVUJfQ2xlYXJfRmVhdHVy
ZXMoaGJGYWNlLT5nc3ViKTsKKyAgICBpZiAoaGJGYWNlLT5ncG9zKQorICAgICAgICBIQl9HUE9T
X0NsZWFyX0ZlYXR1cmVzKGhiRmFjZS0+Z3Bvcyk7CisKKyAgICBIQl9VU2hvcnQgc2NyaXB0SW5k
ZXggPSAwOworICAgIEhCX0dTVUJfU2VsZWN0X1NjcmlwdChoYkZhY2UtPmdzdWIsIEhCX01BS0Vf
VEFHKCdEJywgJ0YnLCAnTCcsICdUJyksICZzY3JpcHRJbmRleCk7CisgICAgc2l6ZV90IG51bUZl
YXR1cmVzID0gc2V0dGluZ3MtPnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bUZlYXR1cmVzOyArK2kpIHsKKyAgICAgICAgaWYgKCFzZXR0aW5ncy0+YXQoaSkudmFsdWUoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBIQl9VU2hvcnQgZmVhdHVyZUluZGV4ID0g
MDsKKyAgICAgICAgY29uc3QgVUNoYXIqIHRhZyA9IHNldHRpbmdzLT5hdChpKS50YWcoKS5jaGFy
YWN0ZXJzKCk7CisgICAgICAgIEhCX1VJbnQgZmVhdHVyZSA9IEhCX01BS0VfVEFHKHRhZ1swXSwg
dGFnWzFdLCB0YWdbMl0sIHRhZ1szXSk7CisgICAgICAgIGlmIChoYkZhY2UtPmdzdWIgJiYgSEJf
R1NVQl9TZWxlY3RfRmVhdHVyZShoYkZhY2UtPmdzdWIsIGZlYXR1cmUsIHNjcmlwdEluZGV4LCAw
eGZmZmYsICZmZWF0dXJlSW5kZXgpID09IEhCX0Vycl9PaykKKyAgICAgICAgICAgIEhCX0dTVUJf
QWRkX0ZlYXR1cmUoaGJGYWNlLT5nc3ViLCBmZWF0dXJlSW5kZXgsIHNldHRpbmdzLT5hdChpKS52
YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAoaGJGYWNlLT5ncG9zICYmIEhCX0dQT1NfU2VsZWN0
X0ZlYXR1cmUoaGJGYWNlLT5ncG9zLCBmZWF0dXJlLCBzY3JpcHRJbmRleCwgMHhmZmZmLCAmZmVh
dHVyZUluZGV4KSA9PSBIQl9FcnJfT2spCisgICAgICAgICAgICBIQl9HUE9TX0FkZF9GZWF0dXJl
KGhiRmFjZS0+Z3BvcywgZmVhdHVyZUluZGV4LCBzZXR0aW5ncy0+YXQoaSkudmFsdWUoKSk7Cisg
ICAgfQorfQorCitzdGF0aWMgVUNoYXIzMiBzdXJyb2dhdGVQYWlyQXdhcmVGaXJzdENoYXJhY3Rl
cihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChV
MTZfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcnNbMF0pKSB7CisgICAgICAgIGlmICghVTE2X0lTX1NV
UlJPR0FURV9MRUFEKGNoYXJhY3RlcnNbMF0pIHx8IGxlbmd0aCA8IDIgfHwgIVUxNl9JU19UUkFJ
TChjaGFyYWN0ZXJzWzFdKSkKKyAgICAgICAgICAgIHJldHVybiAnICc7CisgICAgICAgIHJldHVy
biBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY2hhcmFjdGVyc1swXSwgY2hhcmFjdGVyc1sxXSk7Cisg
ICAgfQorICAgIHJldHVybiBjaGFyYWN0ZXJzWzBdOworfQorCit2b2lkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6c2V0dXBGb250Rm9yU2NyaXB0UnVuKCkKK3sKKyAgICBGb250RGF0YVZhcmlhbnQg
Zm9udERhdGFWYXJpYW50ID0gQXV0b1ZhcmlhbnQ7CisgICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMg
c2NyaXB0IHJ1biBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gc21hbGwgY2Fwcy4KKyAgICAvLyBu
ZXh0U2NyaXB0UnVuKCkgd2lsbCBhbHdheXMgc2VuZCB1cyBhIHJ1biBvZiB0aGUgc2FtZSBjYXNl
LCBiZWNhdXNlIGEKKyAgICAvLyBjYXNlIGNoYW5nZSB3aGlsZSBpbiBzbWFsbC1jYXBzIG1vZGUg
YWx3YXlzIHJlc3VsdHMgaW4gZGlmZmVyZW50CisgICAgLy8gRm9udERhdGEsIHNvIHdlIG9ubHkg
bmVlZCB0byBjaGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyJ3MgY2FzZS4KKyAgICBpZiAobV9mb250
LT5pc1NtYWxsQ2FwcygpICYmIHVfaXNsb3dlcihtX2l0ZW0uc3RyaW5nW21faXRlbS5pdGVtLnBv
c10pKSB7CisgICAgICAgIG1fc21hbGxDYXBzU3RyaW5nID0gU3RyaW5nKG1fcnVuLmRhdGEobV9p
dGVtLml0ZW0ucG9zKSwgbV9pdGVtLml0ZW0ubGVuZ3RoKTsKKyAgICAgICAgbV9zbWFsbENhcHNT
dHJpbmcubWFrZVVwcGVyKCk7CisgICAgICAgIG1faXRlbS5zdHJpbmcgPSBtX3NtYWxsQ2Fwc1N0
cmluZy5jaGFyYWN0ZXJzKCk7CisgICAgICAgIG1faXRlbS5pdGVtLnBvcyA9IDA7CisgICAgICAg
IGZvbnREYXRhVmFyaWFudCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7CisgICAgfQorICAgIFVDaGFyMzIg
Y3VycmVudCA9IHN1cnJvZ2F0ZVBhaXJBd2FyZUZpcnN0Q2hhcmFjdGVyKHN0YXRpY19jYXN0PGNv
bnN0IFVDaGFyKj4oJm1faXRlbS5zdHJpbmdbbV9pdGVtLml0ZW0ucG9zXSksIG1faXRlbS5pdGVt
Lmxlbmd0aCAtIG1faXRlbS5pdGVtLnBvcyk7CisgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRh
ID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY3VycmVudCwgZmFsc2UsIGZvbnREYXRh
VmFyaWFudCkuZm9udERhdGE7CisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1E
YXRhID0gZm9udERhdGEtPmZvbnREYXRhRm9yQ2hhcmFjdGVyKCcgJyktPnBsYXRmb3JtRGF0YSgp
OworICAgIG1faXRlbS5mYWNlID0gcGxhdGZvcm1EYXRhLmhhcmZidXp6RmFjZSgpLT5mYWNlKCk7
CisgICAgLy8gV2Ugb25seSBuZWVkIHRvIHNldHVwIGZvbnQgZmVhdHVyZXMgYXQgdGhlIGJlZ2lu
bmluZyBvZiB0aGUgcnVuLgorICAgIGlmICghbV9pdGVtLml0ZW0ucG9zKQorICAgICAgICBzZXR1
cEZvbnRGZWF0dXJlcyhtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpLmZlYXR1cmVTZXR0aW5ncygp
LCBtX2l0ZW0uZmFjZSk7CisgICAgdm9pZCogb3BhcXVlUGxhdGZvcm1EYXRhID0gY29uc3RfY2Fz
dDxGb250UGxhdGZvcm1EYXRhKj4oJnBsYXRmb3JtRGF0YSk7CisgICAgbV9pdGVtLmZvbnQtPnVz
ZXJEYXRhID0gb3BhcXVlUGxhdGZvcm1EYXRhOworCisgICAgaW50IHNpemUgPSBwbGF0Zm9ybURh
dGEuc2l6ZSgpOworICAgIG1faXRlbS5mb250LT54X3BwZW0gPSBzaXplOworICAgIG1faXRlbS5m
b250LT55X3BwZW0gPSBzaXplOworICAgIC8vIHhfIGFuZCB5X3NjYWxlIGFyZSB0aGUgY29udmVy
c2lvbiBmYWN0b3JzIGZyb20gZm9udCBkZXNpZ24gc3BhY2UgKGZFbVNpemUpIHRvIDEvNjR0aCBv
ZiBkZXZpY2UgcGl4ZWxzIGluIDE2LjE2IGZvcm1hdC4KKyAgICBjb25zdCBpbnQgZGV2aWNlUGl4
ZWxGcmFjdGlvbiA9IDY0OworICAgIGNvbnN0IGludCBtdWx0aXBseUZvcjE2RG90MTYgPSAxIDw8
IDE2OworICAgIGludCBzY2FsZSA9IGRldmljZVBpeGVsRnJhY3Rpb24gKiBzaXplICogbXVsdGlw
bHlGb3IxNkRvdDE2IC8gcGxhdGZvcm1EYXRhLmVtU2l6ZUluRm9udFVuaXRzKCk7CisgICAgbV9p
dGVtLmZvbnQtPnhfc2NhbGUgPSBzY2FsZTsKKyAgICBtX2l0ZW0uZm9udC0+eV9zY2FsZSA9IHNj
YWxlOworfQorCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6ZGVsZXRlR2x5cGhBcnJheXMo
KQoreworICAgIGRlbGV0ZVtdIG1faXRlbS5nbHlwaHM7CisgICAgZGVsZXRlW10gbV9pdGVtLmF0
dHJpYnV0ZXM7CisgICAgZGVsZXRlW10gbV9pdGVtLmFkdmFuY2VzOworICAgIGRlbGV0ZVtdIG1f
aXRlbS5vZmZzZXRzOworICAgIGRlbGV0ZVtdIG1fZ2x5cGhzMTY7CisgICAgZGVsZXRlW10gbV9w
b3NpdGlvbnM7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjcmVhdGVHbHlwaEFy
cmF5cyhpbnQgc2l6ZSkKK3sKKyAgICBtX2l0ZW0uZ2x5cGhzID0gbmV3IEhCX0dseXBoW3NpemVd
OworICAgIG1faXRlbS5hdHRyaWJ1dGVzID0gbmV3IEhCX0dseXBoQXR0cmlidXRlc1tzaXplXTsK
KyAgICBtX2l0ZW0uYWR2YW5jZXMgPSBuZXcgSEJfRml4ZWRbc2l6ZV07CisgICAgbV9pdGVtLm9m
ZnNldHMgPSBuZXcgSEJfRml4ZWRQb2ludFtzaXplXTsKKworICAgIG1fZ2x5cGhzMTYgPSBuZXcg
dWludDE2X3Rbc2l6ZV07CisgICAgbV9wb3NpdGlvbnMgPSBuZXcgU2tQb2ludFtzaXplXTsKKwor
ICAgIG1faXRlbS5udW1fZ2x5cGhzID0gc2l6ZTsKKyAgICBtX2dseXBoc0FycmF5Q2FwYWNpdHkg
PSBzaXplOyAvLyBTYXZlIHRoZSBHbHlwaEFycmF5cyBzaXplLgorICAgIHJlc2V0R2x5cGhBcnJh
eXMoKTsKK30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnJlc2V0R2x5cGhBcnJheXMo
KQoreworICAgIGludCBzaXplID0gbV9pdGVtLm51bV9nbHlwaHM7CisgICAgLy8gQWxsIHRoZSB0
eXBlcyBoZXJlIGRvbid0IGhhdmUgcG9pbnRlcnMuIEl0IGlzIHNhZmUgdG8gcmVzZXQgdG8KKyAg
ICAvLyB6ZXJvIHVubGVzcyBIYXJmYnV6eiBicmVha3MgdGhlIGNvbXBhdGliaWxpdHkgaW4gdGhl
IGZ1dHVyZS4KKyAgICBtZW1zZXQobV9pdGVtLmdseXBocywgMCwgc2l6ZSAqIHNpemVvZihIQl9H
bHlwaCkpOworICAgIG1lbXNldChtX2l0ZW0uYXR0cmlidXRlcywgMCwgc2l6ZSAqIHNpemVvZihI
Ql9HbHlwaEF0dHJpYnV0ZXMpKTsKKyAgICBtZW1zZXQobV9pdGVtLmFkdmFuY2VzLCAwLCBzaXpl
ICogc2l6ZW9mKEhCX0ZpeGVkKSk7CisgICAgbWVtc2V0KG1faXRlbS5vZmZzZXRzLCAwLCBzaXpl
ICogc2l6ZW9mKEhCX0ZpeGVkUG9pbnQpKTsKKyAgICBtZW1zZXQobV9nbHlwaHMxNiwgMCwgc2l6
ZSAqIHNpemVvZih1aW50MTZfdCkpOworICAgIG1lbXNldChtX3Bvc2l0aW9ucywgMCwgc2l6ZSAq
IHNpemVvZihTa1BvaW50KSk7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzaGFw
ZUdseXBocygpCit7CisgICAgLy8gSEJfU2hhcGVJdGVtKCkgcmVzZXRzIG1faXRlbS5udW1fZ2x5
cGhzLiBJZiB0aGUgcHJldmlvdXMgY2FsbCB0bworICAgIC8vIEhCX1NoYXBlSXRlbSgpIHVzZWQg
bGVzcyBzcGFjZSB0aGFuIHdhcyBhdmFpbGFibGUsIHRoZSBjYXBhY2l0eSBvZgorICAgIC8vIHRo
ZSBhcnJheSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgbV9pdGVtLm51
bV9nbHlwaHMuCisgICAgLy8gU28sIHdlIG5lZWQgdG8gcmVzZXQgdGhlIG51bV9nbHlwaHMgdG8g
dGhlIGNhcGFjaXR5IG9mIHRoZSBhcnJheS4KKyAgICBtX2l0ZW0ubnVtX2dseXBocyA9IG1fZ2x5
cGhzQXJyYXlDYXBhY2l0eTsKKyAgICByZXNldEdseXBoQXJyYXlzKCk7CisgICAgd2hpbGUgKCFI
Ql9TaGFwZUl0ZW0oJm1faXRlbSkpIHsKKyAgICAgICAgLy8gV2Ugb3ZlcmZsb3dlZCBvdXIgYXJy
YXlzLiBSZXNpemUgYW5kIHJldHJ5LgorICAgICAgICAvLyBIQl9TaGFwZUl0ZW0gZmlsbHMgaW4g
bV9pdGVtLm51bV9nbHlwaHMgd2l0aCB0aGUgbmVlZGVkIHNpemUuCisgICAgICAgIGRlbGV0ZUds
eXBoQXJyYXlzKCk7CisgICAgICAgIC8vIFRoZSB8KyAxfCBoZXJlIGlzIGEgd29ya2Fyb3VuZCBm
b3IgYSBidWcgaW4gSGFyZmJ1eno6IHRoZSBLaG1lcgorICAgICAgICAvLyBzaGFwZXIgKGF0IGxl
YXN0KSBjYW4gZmFpbCBiZWNhdXNlIG9mIGluc3VmZmljaWVudCBnbHlwaCBidWZmZXJzCisgICAg
ICAgIC8vIGFuZCByZXF1ZXN0IDAgYWRkaXRpb25hbCBnbHlwaHM6IHRocm93aW5nIHVzIGludG8g
YW4gaW5maW5pdGUKKyAgICAgICAgLy8gbG9vcC4KKyAgICAgICAgY3JlYXRlR2x5cGhBcnJheXMo
bV9pdGVtLm51bV9nbHlwaHMgKyAxKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjpzZXRHbHlwaFBvc2l0aW9ucyhib29sIGlzUlRMKQoreworICAgIGNvbnN0IGRvdWJs
ZSBydGxGbGlwID0gaXNSVEwgPyAtMSA6IDE7CisgICAgZG91YmxlIHBvc2l0aW9uID0gMDsKKwor
ICAgIC8vIGxvZ0NsdXN0ZXJzSW5kZXggaW5kZXhlcyBsb2dDbHVzdGVycyBmb3IgdGhlIGZpcnN0
IGNvZGVwb2ludCBvZiB0aGUgY3VycmVudCBnbHlwaC4KKyAgICAvLyBFYWNoIHRpbWUgd2UgYWR2
YW5jZSBhIGdseXBoLCB3ZSBza2lwIG92ZXIgYWxsIHRoZSBjb2RlcG9pbnRzIHRoYXQgY29udHJp
YnV0ZWQgdG8gdGhlIGN1cnJlbnQgZ2x5cGguCisgICAgaW50IGxvZ0NsdXN0ZXJzSW5kZXggPSAw
OworCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBnbHlwaHMgaW4gbG9naWNhbCBvcmRlciwg
ZmxpcHBpbmcgZm9yIFJUTCB3aGVyZSBuZWNlc3NhcnkuCisgICAgLy8gR2x5cGhzIGFyZSBwb3Np
dGlvbmVkIHN0YXJ0aW5nIGZyb20gbV9vZmZzZXRYOyBpbiBSVEwgbW9kZSB0aGV5IGdvIGxlZnR3
YXJkcyBmcm9tIHRoZXJlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtLm51bV9n
bHlwaHM7ICsraSkgeworICAgICAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvZ0Ns
dXN0ZXJzSW5kZXgpIDwgbV9pdGVtLml0ZW0ubGVuZ3RoICYmIG1faXRlbS5sb2dfY2x1c3RlcnNb
bG9nQ2x1c3RlcnNJbmRleF0gPCBpKQorICAgICAgICAgICAgbG9nQ2x1c3RlcnNJbmRleCsrOwor
CisgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGdseXBoIGlzIGp1c3QgYWZ0ZXIgYSBzcGFjZSwg
YWRkIGluIHRoZSB3b3JkIHNwYWNpbmcuCisgICAgICAgIHBvc2l0aW9uICs9IGRldGVybWluZVdv
cmRCcmVha1NwYWNpbmcobG9nQ2x1c3RlcnNJbmRleCk7CisKKyAgICAgICAgbV9nbHlwaHMxNltp
XSA9IG1faXRlbS5nbHlwaHNbaV07CisgICAgICAgIGRvdWJsZSBvZmZzZXRYID0gdHJ1bmNhdGVG
aXhlZFBvaW50VG9JbnRlZ2VyKG1faXRlbS5vZmZzZXRzW2ldLngpOworICAgICAgICBkb3VibGUg
b2Zmc2V0WSA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0ub2Zmc2V0c1tpXS55
KTsKKyAgICAgICAgZG91YmxlIGFkdmFuY2UgPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIo
bV9pdGVtLmFkdmFuY2VzW2ldKTsKKyAgICAgICAgaWYgKGlzUlRMKQorICAgICAgICAgICAgb2Zm
c2V0WCAtPSBhZHZhbmNlOworCisgICAgICAgIG1fcG9zaXRpb25zW2ldLnNldChtX29mZnNldFgg
KyAocG9zaXRpb24gKiBydGxGbGlwKSArIG9mZnNldFgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0YXJ0aW5nWSArIG9mZnNldFkpOworCisgICAgICAgIGlmIChtX2N1cnJlbnRGb250
RGF0YS0+aXNaZXJvV2lkdGhTcGFjZUdseXBoKG1fZ2x5cGhzMTZbaV0pKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgLy8gQXQgdGhlIGVuZCBvZiBlYWNoIGNsdXN0ZXIsIGFkZCBp
biB0aGUgbGV0dGVyIHNwYWNpbmcuCisgICAgICAgIGlmIChpICsgMSA9PSBtX2l0ZW0ubnVtX2ds
eXBocyB8fCBtX2l0ZW0uYXR0cmlidXRlc1tpICsgMV0uY2x1c3RlclN0YXJ0KQorICAgICAgICAg
ICAgcG9zaXRpb24gKz0gbV9sZXR0ZXJTcGFjaW5nOworCisgICAgICAgIHBvc2l0aW9uICs9IGFk
dmFuY2U7CisgICAgfQorICAgIG1fcGl4ZWxXaWR0aCA9IHN0ZDo6bWF4KHBvc2l0aW9uLCAwLjAp
OworICAgIG1fb2Zmc2V0WCArPSBtX3BpeGVsV2lkdGggKiBydGxGbGlwOworfQorCit2b2lkIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6bm9ybWFsaXplU3BhY2VzQW5kTWlycm9yQ2hhcnMoY29uc3Qg
VUNoYXIqIHNvdXJjZSwgYm9vbCBydGwsIFVDaGFyKiBkZXN0aW5hdGlvbiwgaW50IGxlbmd0aCkK
K3sKKyAgICBpbnQgcG9zaXRpb24gPSAwOworICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKKyAgICAv
LyBJdGVyYXRlIGNoYXJhY3RlcnMgaW4gc291cmNlIGFuZCBtaXJyb3IgY2hhcmFjdGVyIGlmIG5l
ZWRlZC4KKyAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsKKyAgICAgICAgVUNoYXIzMiBj
aGFyYWN0ZXI7CisgICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAg
VTE2X05FWFQoc291cmNlLCBuZXh0UG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKKyAgICAg
ICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICAgICAgY2hhcmFj
dGVyID0gJyAnOworICAgICAgICBlbHNlIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2Uo
Y2hhcmFjdGVyKSkKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IHplcm9XaWR0aFNwYWNlOworICAg
ICAgICBlbHNlIGlmIChydGwpCisgICAgICAgICAgICBjaGFyYWN0ZXIgPSB1X2NoYXJNaXJyb3Io
Y2hhcmFjdGVyKTsKKyAgICAgICAgVTE2X0FQUEVORChkZXN0aW5hdGlvbiwgcG9zaXRpb24sIGxl
bmd0aCwgY2hhcmFjdGVyLCBlcnJvcik7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsICFl
cnJvcik7CisgICAgICAgIHBvc2l0aW9uID0gbmV4dFBvc2l0aW9uOworICAgIH0KK30KKworY29u
c3QgVGV4dFJ1biYgQ29tcGxleFRleHRDb250cm9sbGVyOjpnZXROb3JtYWxpemVkVGV4dFJ1bihj
b25zdCBUZXh0UnVuJiBvcmlnaW5hbFJ1biwgT3duUHRyPFRleHRSdW4+JiBub3JtYWxpemVkUnVu
LCBPd25BcnJheVB0cjxVQ2hhcj4mIG5vcm1hbGl6ZWRCdWZmZXIpCit7CisgICAgLy8gTm9ybWFs
aXplIHRoZSB0ZXh0IHJ1biBpbiB0aHJlZSB3YXlzOgorICAgIC8vIDEpIENvbnZlcnQgdGhlIHxv
cmlnaW5hbFJ1bnwgdG8gTkZDIG5vcm1hbGl6ZWQgZm9ybSBpZiBjb21iaW5pbmcgZGlhY3JpdGlj
YWwgbWFya3MKKyAgICAvLyAoVSswMzAwLi4pIGFyZSB1c2VkIGluIHRoZSBydW4uIFRoaXMgY29u
dmVyc2lvbiBpcyBuZWNlc3Nhcnkgc2luY2UgbW9zdCBPcGVuVHlwZQorICAgIC8vIGZvbnRzIChl
LmcuLCBBcmlhbCkgZG9uJ3QgaGF2ZSBzdWJzdGl0dXRpb24gcnVsZXMgZm9yIHRoZSBkaWFjcml0
aWNhbCBtYXJrcyBpbgorICAgIC8vIHRoZWlyIEdTVUIgdGFibGVzLgorICAgIC8vCisgICAgLy8g
Tm90ZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgaWN1OjpOb3JtYWxpemVyOjppc05vcm1hbGl6ZWQo
VU5PUk1fTkZDKSBBUEkgaGVyZSBzaW5jZQorICAgIC8vIHRoZSBBUEkgcmV0dXJucyBGQUxTRSAo
PSBub3Qgbm9ybWFsaXplZCkgZm9yIGNvbXBsZXggcnVucyB0aGF0IGRvbid0IHJlcXVpcmUgTkZD
CisgICAgLy8gbm9ybWFsaXphdGlvbiAoZS5nLiwgQXJhYmljIHRleHQpLiBVbmxlc3MgdGhlIHJ1
biBjb250YWlucyB0aGUgZGlhY3JpdGljYWwgbWFya3MsCisgICAgLy8gSGFyZmJ1enogd2lsbCBk
byB0aGUgc2FtZSB0aGluZyBmb3IgdXMgdXNpbmcgdGhlIEdTVUIgdGFibGUuCisgICAgLy8gMikg
Q29udmVydCBzcGFjaW5nIGNoYXJhY3RlcnMgaW50byBwbGFpbiBzcGFjZXMsIGFzIHNvbWUgZm9u
dHMgd2lsbCBwcm92aWRlIGdseXBocworICAgIC8vIGZvciBjaGFyYWN0ZXJzIGxpa2UgJ1xuJyBv
dGhlcndpc2UuCisgICAgLy8gMykgQ29udmVydCBtaXJyb3JlZCBjaGFyYWN0ZXJzIHN1Y2ggYXMg
cGFyZW50aGVzaXMgZm9yIHJ0bCB0ZXh0LgorCisgICAgLy8gQ29udmVydCB0byBORkMgZm9ybSBp
ZiB0aGUgdGV4dCBoYXMgZGlhY3JpdGljYWwgbWFya3MuCisgICAgaWN1OjpVbmljb2RlU3RyaW5n
IG5vcm1hbGl6ZWRTdHJpbmc7CisgICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsK
KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3JpZ2luYWxSdW4ubGVuZ3RoKCk7ICsraSkgewor
ICAgICAgICBVQ2hhciBjaCA9IG9yaWdpbmFsUnVuW2ldOworICAgICAgICBpZiAoOjp1YmxvY2tf
Z2V0Q29kZShjaCkgPT0gVUJMT0NLX0NPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLUykgeworICAg
ICAgICAgICAgaWN1OjpOb3JtYWxpemVyOjpub3JtYWxpemUoaWN1OjpVbmljb2RlU3RyaW5nKG9y
aWdpbmFsUnVuLmNoYXJhY3RlcnMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9yaWdpbmFsUnVuLmxlbmd0aCgpKSwgVU5PUk1fTkZDLCAwIC8qIG5vIG9wdGlvbnMg
Ki8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkU3Ry
aW5nLCBlcnJvcik7CisgICAgICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3JpZ2luYWxSdW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIE5vcm1hbGl6ZSBzcGFjZSBhbmQgbWlycm9yIHBhcmVudGhlc2lz
IGZvciBydGwgdGV4dC4KKyAgICBpbnQgbm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKKyAgICBjb25z
dCBVQ2hhciogc291cmNlVGV4dDsKKyAgICBpZiAobm9ybWFsaXplZFN0cmluZy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCA9IG9yaWdpbmFsUnVuLmxlbmd0aCgp
OworICAgICAgICBzb3VyY2VUZXh0ID0gb3JpZ2luYWxSdW4uY2hhcmFjdGVycygpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJMZW5ndGggPSBub3JtYWxpemVkU3RyaW5n
Lmxlbmd0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gbm9ybWFsaXplZFN0cmluZy5nZXRCdWZm
ZXIoKTsKKyAgICB9CisKKyAgICBub3JtYWxpemVkQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcg
VUNoYXJbbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCArIDFdKTsKKworICAgIG5vcm1hbGl6ZVNwYWNl
c0FuZE1pcnJvckNoYXJzKHNvdXJjZVRleHQsIG9yaWdpbmFsUnVuLnJ0bCgpLCBub3JtYWxpemVk
QnVmZmVyLmdldCgpLCBub3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsKKworICAgIG5vcm1hbGl6ZWRS
dW4gPSBhZG9wdFB0cihuZXcgVGV4dFJ1bihvcmlnaW5hbFJ1bikpOworICAgIG5vcm1hbGl6ZWRS
dW4tPnNldFRleHQobm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbm9ybWFsaXplZEJ1ZmZlckxlbmd0
aCk7CisgICAgcmV0dXJuICpub3JtYWxpemVkUnVuOworfQorCitpbnQgQ29tcGxleFRleHRDb250
cm9sbGVyOjpnbHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4oaW50IHRhcmdldFgpIGNv
bnN0Cit7CisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBnbHlwaHMgaW4gbG9naWNhbCBvcmRl
ciwgc2VlaW5nIHdoZXRoZXIgdGFyZ2V0WCBmYWxscyBiZXR3ZWVuIHRoZSBwcmV2aW91cworICAg
IC8vIHBvc2l0aW9uIGFuZCBoYWxmd2F5IHRocm91Z2ggdGhlIGN1cnJlbnQgZ2x5cGguCisgICAg
Ly8gRklYTUU6IHRoaXMgY29kZSBwcm9iYWJseSBiZWxvbmdzIGluIENvbXBsZXhUZXh0Q29udHJv
bGxlci4KKyAgICBpbnQgbGFzdFggPSBvZmZzZXRYKCkgLSAocnRsKCkgPyAtbV9waXhlbFdpZHRo
IDogbV9waXhlbFdpZHRoKTsKKyAgICBmb3IgKGludCBnbHlwaEluZGV4ID0gMDsgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGdseXBoSW5kZXgpIDwgbGVuZ3RoKCk7ICsrZ2x5cGhJbmRleCkgeworICAg
ICAgICBpbnQgYWR2YW5jZSA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0uYWR2
YW5jZXNbZ2x5cGhJbmRleF0pOworICAgICAgICBpbnQgbmV4dFggPSBzdGF0aWNfY2FzdDxpbnQ+
KHBvc2l0aW9ucygpW2dseXBoSW5kZXhdLngoKSkgKyBhZHZhbmNlIC8gMjsKKyAgICAgICAgaWYg
KHN0ZDo6bWluKG5leHRYLCBsYXN0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IHN0ZDo6bWF4
KG5leHRYLCBsYXN0WCkpCisgICAgICAgICAgICByZXR1cm4gZ2x5cGhJbmRleDsKKyAgICAgICAg
bGFzdFggPSBuZXh0WDsKKyAgICB9CisKKyAgICByZXR1cm4gbGVuZ3RoKCkgLSAxOworfQorCitp
bnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRGb3JQb3NpdGlvbihpbnQgdGFyZ2V0WCkK
K3sKKyAgICB1bnNpZ25lZCBiYXNlUG9zaXRpb24gPSAwOworCisgICAgaW50IHggPSBvZmZzZXRY
KCk7CisgICAgd2hpbGUgKG5leHRTY3JpcHRSdW4oKSkgeworICAgICAgICBpbnQgbmV4dFggPSBv
ZmZzZXRYKCk7CisKKyAgICAgICAgaWYgKHN0ZDo6bWluKHgsIG5leHRYKSA8PSB0YXJnZXRYICYm
IHRhcmdldFggPD0gc3RkOjptYXgoeCwgbmV4dFgpKSB7CisgICAgICAgICAgICAvLyBUaGUgeCB2
YWx1ZSBpbiBxdWVzdGlvbiBpcyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLgorICAgICAgICAgICAg
Y29uc3QgaW50IGdseXBoSW5kZXggPSBnbHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4o
dGFyZ2V0WCk7CisKKyAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBpbmRl
eCwgd2UgaGF2ZSB0byB0dXJuIHRoYXQgaW50byBhCisgICAgICAgICAgICAvLyBjb2RlLXBvaW50
IGluZGV4LiBCZWNhdXNlIG9mIGxpZ2F0dXJlcywgc2V2ZXJhbCBjb2RlLXBvaW50cyBtYXkKKyAg
ICAgICAgICAgIC8vIGhhdmUgZ29uZSBpbnRvIGEgc2luZ2xlIGdseXBoLiBXZSBpdGVyYXRlIG92
ZXIgdGhlIGNsdXN0ZXJzIGxvZworICAgICAgICAgICAgLy8gYW5kIGZpbmQgdGhlIGZpcnN0IGNv
ZGUtcG9pbnQgd2hpY2ggY29udHJpYnV0ZWQgdG8gdGhlIGdseXBoLgorCisgICAgICAgICAgICAv
LyBTb21lIHNoYXBlcnMgKGkuZS4gS2htZXIpIHdpbGwgcHJvZHVjZSBjbHVzdGVyIGxvZ3Mgd2hp
Y2ggcmVwb3J0CisgICAgICAgICAgICAvLyB0aGF0IC9uby8gY29kZSBwb2ludHMgY29udHJpYnV0
ZWQgdG8gY2VydGFpbiBnbHlwaHMuIEJlY2F1c2Ugb2YKKyAgICAgICAgICAgIC8vIHRoaXMsIHdl
IHRha2UgYW55IGNvZGUgcG9pbnQgd2hpY2ggY29udHJpYnV0ZWQgdG8gdGhlIGdseXBoIGluCisg
ICAgICAgICAgICAvLyBxdWVzdGlvbiwgb3IgYW55IHN1YnNlcXVlbnQgZ2x5cGguIElmIHdlIHJ1
biBvZmYgdGhlIGVuZCwgdGhlbgorICAgICAgICAgICAgLy8gd2UgdGFrZSB0aGUgbGFzdCBjb2Rl
IHBvaW50LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG51bUNvZGVQb2lu
dHMoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG1faXRlbS5sb2dfY2x1c3RlcnNbal0g
Pj0gZ2x5cGhJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VQb3NpdGlvbiAr
IGo7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBiYXNlUG9zaXRpb24gKyBu
dW1Db2RlUG9pbnRzKCkgLSAxOworICAgICAgICB9CisKKyAgICAgICAgYmFzZVBvc2l0aW9uICs9
IG51bUNvZGVQb2ludHMoKTsKKyAgICB9CisKKyAgICByZXR1cm4gYmFzZVBvc2l0aW9uOworfQor
CitGbG9hdFJlY3QgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKQoreworICAgIGlu
dCBmcm9tWCA9IC0xLCB0b1ggPSAtMTsKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlw
dCBydW5zIGluIGxvZ2ljYWwgb3JkZXIsIHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0
aGUgcG9zaXRpb25zIG9mIGludGVyZXN0LgorICAgIHdoaWxlIChuZXh0U2NyaXB0UnVuKCkgJiYg
KGZyb21YID09IC0xIHx8IHRvWCA9PSAtMSkpIHsKKyAgICAgICAgaWYgKGZyb21YID09IC0xICYm
IGZyb20gPj0gMCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbSkgPCBudW1Db2RlUG9pbnRz
KCkpIHsKKyAgICAgICAgICAgIC8vIHxmcm9tfCBpcyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLiBT
byB3ZSBpbmRleCB0aGUgY2x1c3RlcnMgbG9nIHRvCisgICAgICAgICAgICAvLyBmaW5kIHdoaWNo
IGdseXBoIHRoaXMgY29kZS1wb2ludCBjb250cmlidXRlZCB0byBhbmQgZmluZCBpdHMgeAorICAg
ICAgICAgICAgLy8gcG9zaXRpb24uCisgICAgICAgICAgICBpbnQgZ2x5cGggPSBtX2l0ZW0ubG9n
X2NsdXN0ZXJzW2Zyb21dOworICAgICAgICAgICAgZnJvbVggPSBwb3NpdGlvbnMoKVtnbHlwaF0u
eCgpOworICAgICAgICAgICAgaWYgKHJ0bCgpKQorICAgICAgICAgICAgICAgIGZyb21YICs9IHRy
dW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0uYWR2YW5jZXNbZ2x5cGhdKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBmcm9tIC09IG51bUNvZGVQb2ludHMoKTsKKworICAgICAg
ICBpZiAodG9YID09IC0xICYmIHRvID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSA8
IG51bUNvZGVQb2ludHMoKSkgeworICAgICAgICAgICAgaW50IGdseXBoID0gbV9pdGVtLmxvZ19j
bHVzdGVyc1t0b107CisgICAgICAgICAgICB0b1ggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOwor
ICAgICAgICAgICAgaWYgKHJ0bCgpKQorICAgICAgICAgICAgICAgIHRvWCArPSB0cnVuY2F0ZUZp
eGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLmFkdmFuY2VzW2dseXBoXSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgdG8gLT0gbnVtQ29kZVBvaW50cygpOworICAgIH0KKworICAgIC8vIFRo
ZSBwb3NpdGlvbiBpbiBxdWVzdGlvbiBtaWdodCBiZSBqdXN0IGFmdGVyIHRoZSB0ZXh0LgorICAg
IGlmIChmcm9tWCA9PSAtMSkKKyAgICAgICAgZnJvbVggPSBvZmZzZXRYKCk7CisgICAgaWYgKHRv
WCA9PSAtMSkKKyAgICAgICAgdG9YID0gb2Zmc2V0WCgpOworCisgICAgQVNTRVJUKGZyb21YICE9
IC0xICYmIHRvWCAhPSAtMSk7CisKKyAgICBpZiAoZnJvbVggPCB0b1gpCisgICAgICAgIHJldHVy
biBGbG9hdFJlY3QocG9pbnQueCgpICsgZnJvbVgsIHBvaW50LnkoKSwgdG9YIC0gZnJvbVgsIGhl
aWdodCk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIHRvWCwgcG9pbnQueSgp
LCBmcm9tWCAtIHRvWCwgaGVpZ2h0KTsKK30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OmdseXBoc0ZvclJhbmdlKGludCBmcm9tLCBpbnQgdG8sIGludCYgZnJvbUdseXBoLCBpbnQmIGds
eXBoTGVuZ3RoKQoreworICAgIC8vIENoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiB0aGUgY3VycmVu
dCBydW4uIFRIRVNFIE1BWSBOT1QgQkUgSU4gUkFOR0UgYW5kIG1heQorICAgIC8vIGJlIG5lZ2F0
aXZlLCBldGMuIFRoZSBjb2RlIGJlbG93IGhhbmRsZXMgdGhpcy4KKyAgICBpbnQgZnJvbUNoYXIg
PSBmcm9tIC0gbV9pdGVtLml0ZW0ucG9zOworICAgIGludCB0b0NoYXIgPSB0byAtIG1faXRlbS5p
dGVtLnBvczsKKworICAgIC8vIFNlZSBpZiB0aGVyZSBhcmUgYW55IGNoYXJhY3RlcnMgaW4gdGhl
IGN1cnJlbnQgcnVuLgorICAgIGlmICghbnVtQ29kZVBvaW50cygpIHx8IGZyb21DaGFyID49IHN0
YXRpY19jYXN0PGludD4obnVtQ29kZVBvaW50cygpKSB8fCB0b0NoYXIgPD0gMCkgeworICAgICAg
ICBmcm9tR2x5cGggPSAtMTsKKyAgICAgICAgZ2x5cGhMZW5ndGggPSAwOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSB0aGUgc3RhcnRpbmcgZ2x5cGggd2l0aGluIHRo
aXMgc3Bhbi4gfGZyb218IGFuZCB8dG98IGFyZQorICAgIC8vIGdsb2JhbCBvZmZzZXRzIHRoYXQg
bWF5IGludGVyc2VjdCBhcmJpdHJhcmlseSB3aXRoIG91ciBsb2NhbCBydW4uCisgICAgZnJvbUds
eXBoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1tmcm9tQ2hhciA8IDAgPyAwIDogZnJvbUNoYXJdOwor
ICAgIGlmICh0b0NoYXIgPj0gc3RhdGljX2Nhc3Q8aW50PihudW1Db2RlUG9pbnRzKCkpKQorICAg
ICAgICBnbHlwaExlbmd0aCA9IGxlbmd0aCgpIC0gZnJvbUdseXBoOworICAgIGVsc2UKKyAgICAg
ICAgZ2x5cGhMZW5ndGggPSBtX2l0ZW0ubG9nX2NsdXN0ZXJzW3RvQ2hhcl0gLSBmcm9tR2x5cGg7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4
dENvbnRyb2xsZXJIYXJmQnV6ei5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmZjM2ZWJhZGIxMTEyNTVmZjQwNDlh
ZWM2ZTNiMWRhODk0N2NmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5oCkBA
IC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDb21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6el9oCisj
ZGVmaW5lIENvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6X2gKKworI2luY2x1ZGUgIkhhcmZC
dXp6U2tpYS5oIgorI2luY2x1ZGUgIlNrUG9pbnQuaCIKKyNpbmNsdWRlICJTa1NjYWxhci5oIgor
I2luY2x1ZGUgIlRleHRSdW4uaCIKKworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiaGFyZmJ1enot
c2hhcGVyLmgiCit9CisKKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8d3Rm
L093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZvbnQ7CitjbGFzcyBGb250UGxhdGZvcm1EYXRhOworY2xhc3MgU2lt
cGxlRm9udERhdGE7CisKKy8vIENvbXBsZXhUZXh0Q29udHJvbGxlciB3YWxrcyBhIFRleHRSdW4g
YW5kIHByZXNlbnRzIGVhY2ggc2NyaXB0IHJ1biBpbiBzZXF1ZW5jZS4gQQorLy8gVGV4dFJ1biBp
cyBhIHNlcXVlbmNlIG9mIGNvZGUtcG9pbnRzIHdpdGggdGhlIHNhbWUgZW1iZWRkaW5nIGxldmVs
IChpLmUuIHRoZXkKKy8vIGFyZSBhbGwgbGVmdC10by1yaWdodCBvciByaWdodC10by1sZWZ0KS4g
QSBzY3JpcHQgcnVuIGlzIGEgc3Vic2VxdWVuY2Ugd2hlcmUKKy8vIGFsbCB0aGUgY2hhcmFjdGVy
cyBoYXZlIHRoZSBzYW1lIHNjcmlwdCAoZS5nLiBBcmFiaWMsIFRoYWkgZXRjKS4gU2hhcGluZyBp
cworLy8gb25seSBldmVyIGRvbmUgd2l0aCBzY3JpcHQgcnVucyBzaW5jZSB0aGUgc2hhcGVycyBv
bmx5IGtub3cgaG93IHRvIGRlYWwgd2l0aAorLy8gYSBzaW5nbGUgc2NyaXB0LgorLy8KKy8vIEl0
ZXJhdGlvbiBpcyBhbHdheXMgaW4gbG9naWNhbCAoYWthIHJlYWRpbmcpIG9yZGVyLiBGb3IgUlRM
IHRleHQgdGhhdCBtZWFucworLy8gdGhlIHJpZ2h0bW9zdCBwYXJ0IG9mIHRoZSB0ZXh0IHdpbGwg
YmUgZmlyc3QuCisvLworLy8gT25jZSB5b3UgaGF2ZSBzZXR1cCB0aGUgb2JqZWN0LCBjYWxsIHxu
ZXh0U2NyaXB0UnVufCB0byBnZXQgdGhlIGZpcnN0IHNjcmlwdAorLy8gcnVuLiBUaGlzIHdpbGwg
cmV0dXJuIGZhbHNlIHdoZW4gdGhlIGl0ZXJhdGlvbiBpcyBjb21wbGV0ZS4gQXQgYW55IHRpbWUg
eW91CisvLyBjYW4gY2FsbCB8cmVzZXR8IHRvIHN0YXJ0IG92ZXIgYWdhaW4uCitjbGFzcyBDb21w
bGV4VGV4dENvbnRyb2xsZXIgeworcHVibGljOgorICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihj
b25zdCBUZXh0UnVuJiwgaW50IHN0YXJ0aW5nWCwgaW50IHN0YXJ0aW5nWSwgdW5zaWduZWQgd29y
ZFNwYWNpbmcsIHVuc2lnbmVkIGxldHRlclNwYWNpbmcsIHVuc2lnbmVkIHBhZGRpbmcsIGNvbnN0
IEZvbnQqKTsKKyAgICB+Q29tcGxleFRleHRDb250cm9sbGVyKCk7CisKKyAgICBib29sIGlzV29y
ZEJyZWFrKHVuc2lnbmVkKTsKKyAgICBpbnQgZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZyh1bnNp
Z25lZCk7CisgICAgLy8gc2V0UGFkZGluZyBzZXRzIGEgbnVtYmVyIG9mIHBpeGVscyB0byBiZSBk
aXN0cmlidXRlZCBhY3Jvc3MgdGhlIFRleHRSdW4uCisgICAgLy8gV2ViS2l0IHVzZXMgdGhpcyB0
byBqdXN0aWZ5IHRleHQuCisgICAgdm9pZCBzZXRQYWRkaW5nKGludCk7CisgICAgdm9pZCByZXNl
dChpbnQgb2Zmc2V0KTsKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHNjcmlwdCBydW4sIHJl
dHVybmluZyBmYWxzZSB3aGVuIHRoZSBlbmQgb2YgdGhlCisgICAgLy8gVGV4dFJ1biBoYXMgYmVl
biByZWFjaGVkLgorICAgIGJvb2wgbmV4dFNjcmlwdFJ1bigpOworICAgIGZsb2F0IHdpZHRoT2ZG
dWxsUnVuKCk7CisKKyAgICAvLyBzZXRXb3JkU3BhY2luZ0FkanVzdG1lbnQgc2V0cyBhIGRlbHRh
IChpbiBwaXhlbHMpIHdoaWNoIGlzIGFwcGxpZWQgYXQKKyAgICAvLyBlYWNoIHdvcmQgYnJlYWsg
aW4gdGhlIFRleHRSdW4uCisgICAgdm9pZCBzZXRXb3JkU3BhY2luZ0FkanVzdG1lbnQoaW50IHdv
cmRTcGFjaW5nQWRqdXN0bWVudCkgeyBtX3dvcmRTcGFjaW5nQWRqdXN0bWVudCA9IHdvcmRTcGFj
aW5nQWRqdXN0bWVudDsgfQorCisgICAgLy8gc2V0TGV0dGVyU3BhY2luZ0FkanVzdG1lbnQgc2V0
cyBhbiBhZGRpdGlvbmFsIG51bWJlciBvZiBwaXhlbHMgdGhhdCBpcworICAgIC8vIGFkZGVkIHRv
IHRoZSBhZHZhbmNlIGFmdGVyIGVhY2ggb3V0cHV0IGNsdXN0ZXIuIFRoaXMgbWF0Y2hlcyB0aGUg
YmVoYXZpb3VyCisgICAgLy8gb2YgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZS4KKyAgICB2b2lkIHNl
dExldHRlclNwYWNpbmdBZGp1c3RtZW50KGludCBsZXR0ZXJTcGFjaW5nQWRqdXN0bWVudCkgeyBt
X2xldHRlclNwYWNpbmcgPSBsZXR0ZXJTcGFjaW5nQWRqdXN0bWVudDsgfQorICAgIGludCBsZXR0
ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9CisKKyAgICB2b2lk
IHNldHVwRm9yUlRMKCk7CisgICAgYm9vbCBydGwoKSBjb25zdCB7IHJldHVybiBtX3J1bi5ydGwo
KTsgfQorICAgIGNvbnN0IHVpbnQxNl90KiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBo
czE2OyB9CisKKyAgICAvLyBSZXR1cm4gdGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggb2YgZ2x5
cGhzIGZvciB0aGUgcmFuZ2UgW2Zyb20sIHRvKSBpbiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgor
ICAgIHZvaWQgZ2x5cGhzRm9yUmFuZ2UoaW50IGZyb20sIGludCB0bywgaW50JiBmcm9tR2x5cGgs
IGludCYgZ2x5cGhMZW5ndGgpOworCisgICAgLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGFy
cmF5IHJldHVybmVkIGJ5IHxnbHlwaHN8CisgICAgY29uc3QgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9pdGVtLm51bV9nbHlwaHM7IH0KKworICAgIC8vIFJldHVybiB0aGUgb2Zm
c2V0IGZvciBlYWNoIG9mIHRoZSBnbHlwaHMuIE5vdGUgdGhhdCB0aGlzIGlzIHRyYW5zbGF0ZWQK
KyAgICAvLyBieSB0aGUgY3VycmVudCB4IG9mZnNldCBhbmQgdGhhdCB0aGUgeCBvZmZzZXQgaXMg
dXBkYXRlZCBmb3IgZWFjaCBzY3JpcHQKKyAgICAvLyBydW4uCisgICAgY29uc3QgU2tQb2ludCog
cG9zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbnM7IH0KKworICAgIC8vIHJldHVy
biB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIHRoZSBjdXJyZW50IHNjcmlwdCBydW4KKyAg
ICBjb25zdCB1bnNpZ25lZCBudW1Db2RlUG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLml0
ZW0ubGVuZ3RoOyB9CisKKyAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgcGl4ZWwgcG9zaXRpb24g
b2YgdGhlIGNvbnRyb2xsZXIuCisgICAgY29uc3QgdW5zaWduZWQgb2Zmc2V0WCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0WDsgfQorCisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udFBs
YXRmb3JtRGF0YUZvclNjcmlwdFJ1bigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBs
YXRmb3JtRGF0YSo+KG1faXRlbS5mb250LT51c2VyRGF0YSk7IH0KKworICAgIGludCBvZmZzZXRG
b3JQb3NpdGlvbihpbnQpOworICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSAsIGludCB0byk7CisKK3ByaXZhdGU6CisgICAg
Ly8gUmV0dXJuIHRoZSB3aWR0aCAoaW4gcHgpIG9mIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCisg
ICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsV2lkdGg7IH0KKworICAg
IHZvaWQgc2V0dXBGb250Rm9yU2NyaXB0UnVuKCk7CisgICAgdm9pZCBkZWxldGVHbHlwaEFycmF5
cygpOworICAgIHZvaWQgY3JlYXRlR2x5cGhBcnJheXMoaW50KTsKKyAgICB2b2lkIHJlc2V0R2x5
cGhBcnJheXMoKTsKKyAgICB2b2lkIHNoYXBlR2x5cGhzKCk7CisgICAgdm9pZCBzZXRHbHlwaFBv
c2l0aW9ucyhib29sKTsKKworICAgIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJv
ckNoYXJzKGNvbnN0IFVDaGFyKiBzb3VyY2UsIGJvb2wgcnRsLCBVQ2hhciogZGVzdGluYXRpb24s
IGludCBsZW5ndGgpOworICAgIHN0YXRpYyBjb25zdCBUZXh0UnVuJiBnZXROb3JtYWxpemVkVGV4
dFJ1bihjb25zdCBUZXh0UnVuJiBvcmlnaW5hbFJ1biwgT3duUHRyPFRleHRSdW4+JiBub3JtYWxp
emVkUnVuLCBPd25BcnJheVB0cjxVQ2hhcj4mIG5vcm1hbGl6ZWRCdWZmZXIpOworCisgICAgLy8g
VGhpcyBtYXRjaGVzIHRoZSBsb2dpYyBpbiBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWsK
KyAgICBzdGF0aWMgYm9vbCBpc0NvZGVwb2ludFNwYWNlKEhCX1VDaGFyMTYgYykgeyByZXR1cm4g
YyA9PSAnICcgfHwgYyA9PSAnXHQnOyB9CisKKyAgICBpbnQgZ2x5cGhJbmRleEZvclhQb3NpdGlv
bkluU2NyaXB0UnVuKGludCB0YXJnZXRYKSBjb25zdDsKKworICAgIGNvbnN0IEZvbnQqIGNvbnN0
IG1fZm9udDsKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9jdXJyZW50Rm9udERhdGE7Cisg
ICAgSEJfU2hhcGVySXRlbSBtX2l0ZW07CisgICAgdWludDE2X3QqIG1fZ2x5cGhzMTY7IC8vIEEg
dmVjdG9yIG9mIDE2LWJpdCBnbHlwaCBpZHMuCisgICAgU2tQb2ludCogbV9wb3NpdGlvbnM7IC8v
IEEgdmVjdG9yIG9mIHBvc2l0aW9ucyBmb3IgZWFjaCBnbHlwaC4KKyAgICBzc2l6ZV90IG1faW5k
ZXhPZk5leHRTY3JpcHRSdW47IC8vIEluZGV4ZXMgdGhlIHNjcmlwdCBydW4gaW4gfG1fcnVufC4K
KyAgICBpbnQgbV9vZmZzZXRYOyAvLyBPZmZzZXQgaW4gcGl4ZWxzIHRvIHRoZSBzdGFydCBvZiB0
aGUgbmV4dCBzY3JpcHQgcnVuLgorICAgIGludCBtX3N0YXJ0aW5nWTsgLy8gVGhlIFkgc3RhcnRp
bmcgcG9pbnQgb2YgdGhlIHNjcmlwdCBydW4uCisgICAgdW5zaWduZWQgbV9waXhlbFdpZHRoOyAv
LyBXaWR0aCAoaW4gcHgpIG9mIHRoZSBjdXJyZW50IHNjcmlwdCBydW4uCisgICAgdW5zaWduZWQg
bV9nbHlwaHNBcnJheUNhcGFjaXR5OyAvLyBDdXJyZW50IHNpemUgb2YgYWxsIHRoZSBIYXJmYnV6
eiBhcnJheXMuCisKKyAgICBPd25QdHI8VGV4dFJ1bj4gbV9ub3JtYWxpemVkUnVuOworICAgIE93
bkFycmF5UHRyPFVDaGFyPiBtX25vcm1hbGl6ZWRCdWZmZXI7IC8vIEEgYnVmZmVyIGZvciBub3Jt
YWxpemVkIHJ1bi4KKyAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKKyAgICBpbnQgbV93b3JkU3Bh
Y2luZ0FkanVzdG1lbnQ7IC8vIGRlbHRhIGFkanVzdG1lbnQgKHBpeGVscykgZm9yIGVhY2ggd29y
ZCBicmVhay4KKyAgICBmbG9hdCBtX3BhZGRpbmc7IC8vIHBpeGVscyB0byBiZSBkaXN0cmlidXRl
ZCBvdmVyIHRoZSBsaW5lIGF0IHdvcmQgYnJlYWtzLgorICAgIGZsb2F0IG1fcGFkUGVyV29yZEJy
ZWFrOyAvLyBwaXhlbHMgdG8gYmUgYWRkZWQgdG8gZWFjaCB3b3JkIGJyZWFrLgorICAgIGZsb2F0
IG1fcGFkRXJyb3I7IC8vIHxtX3BhZFBlcldvcmRCcmVha3wgbWlnaHQgaGF2ZSBhIGZyYWN0aW9u
YWwgY29tcG9uZW50LgorICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHdlIG9ubHkgYWRk
IGEgd2hvbGUgbnVtYmVyIG9mIHBhZGRpbmcgcGl4ZWxzIGF0CisgICAgICAgICAgICAgICAgICAg
ICAgLy8gZWFjaCB3b3JkIGJyZWFrIHdlIGFjY3VtdWxhdGUgZXJyb3IuIFRoaXMgaXMgdGhlCisg
ICAgICAgICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHBpeGVscyB0aGF0IHdlIGFyZSBiZWhp
bmQgc28gZmFyLgorICAgIGludCBtX2xldHRlclNwYWNpbmc7IC8vIHBpeGVscyB0byBiZSBhZGRl
ZCBhZnRlciBlYWNoIGdseXBoLgorICAgIFN0cmluZyBtX3NtYWxsQ2Fwc1N0cmluZzsgLy8gc3Vi
c3RyaW5nIG9mIG1fcnVuIGNvbnZlcnRlZCB0byBzbWFsbCBjYXBzLgorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enpf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
Rm9udEhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0ZvbnRIYXJmQnV6ei5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmE4YWEyZTdkZDRiZmVkYWNlMzhiMGVk
ZmY1NTdhNjczYWE0YjBmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKQEAgLTAsMCArMSwyNjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDgsIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisj
aW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouaCIKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkhhcmZCdXp6U2tpYS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgIlNrUGFpbnQu
aCIKKyNpbmNsdWRlICJTa1RlbXBsYXRlcy5oIgorI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKKyNp
bmNsdWRlICJTa1V0aWxzLmgiCisKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRz
Rm9yQ29tcGxleFRleHQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGb250Ojpj
YW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgYm9vbCBpc0NhbnZhc011bHRpTGF5ZXJlZChTa0NhbnZhcyogY2Fu
dmFzKQoreworICAgIFNrQ2FudmFzOjpMYXllckl0ZXIgbGF5ZXJJdGVyYXRvcihjYW52YXMsIGZh
bHNlKTsKKyAgICBsYXllckl0ZXJhdG9yLm5leHQoKTsKKyAgICByZXR1cm4gIWxheWVySXRlcmF0
b3IuZG9uZSgpOworfQorCitzdGF0aWMgdm9pZCBhZGp1c3RUZXh0UmVuZGVyTW9kZShTa1BhaW50
KiBwYWludCwgUGxhdGZvcm1Db250ZXh0U2tpYSogc2tpYUNvbnRleHQpCit7CisgICAgLy8gT3Vy
IGxheWVycyBvbmx5IGhhdmUgYSBzaW5nbGUgYWxwaGEgY2hhbm5lbC4gVGhpcyBtZWFucyB0aGF0
IHN1YnBpeGVsCisgICAgLy8gcmVuZGVyZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9zaXRpZWQgY29y
cmVjdGx5IHdoZW4gdGhlIGxheWVyIGlzCisgICAgLy8gY29sbGFwc2VkLiBUaGVyZWZvcmUsIHN1
YnBpeGVsIHRleHQgaXMgZGlzYWJsZWQgd2hlbiB3ZSBhcmUgZHJhd2luZworICAgIC8vIG9udG8g
YSBsYXllciBvciB3aGVuIHRoZSBjb21wb3NpdG9yIGlzIGJlaW5nIHVzZWQuCisgICAgaWYgKGlz
Q2FudmFzTXVsdGlMYXllcmVkKHNraWFDb250ZXh0LT5jYW52YXMoKSkgfHwgc2tpYUNvbnRleHQt
PmlzRHJhd2luZ1RvSW1hZ2VCdWZmZXIoKSkKKyAgICAgICAgcGFpbnQtPnNldExDRFJlbmRlclRl
eHQoZmFsc2UpOworfQorCit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBn
YywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCisg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsKKyAg
ICBTa0FTU0VSVChzaXplb2YoR2x5cGhCdWZmZXJHbHlwaCkgPT0gc2l6ZW9mKHVpbnQxNl90KSk7
IC8vIGNvbXBpbGUtdGltZSBhc3NlcnQKKworICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocyA9IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKKyAgICBTa1NjYWxhciB4ID0gU2tGbG9h
dFRvU2NhbGFyKHBvaW50LngoKSk7CisgICAgU2tTY2FsYXIgeSA9IFNrRmxvYXRUb1NjYWxhcihw
b2ludC55KCkpOworCisgICAgLy8gRklYTUU6IHRleHQgcmVuZGVyaW5nIHNwZWVkOgorICAgIC8v
IEFuZHJvaWQgaGFzIGNvZGUgaW4gdGhlaXIgV2ViQ29yZSBmb3JrIHRvIHNwZWNpYWwgY2FzZSB3
aGVuIHRoZQorICAgIC8vIEdseXBoQnVmZmVyIGhhcyBubyBhZHZhbmNlcyBvdGhlciB0aGFuIHRo
ZSBkZWZhdWx0cy4gSW4gdGhhdCBjYXNlIHRoZQorICAgIC8vIHRleHQgZHJhd2luZyBjYW4gcHJv
Y2VlZCBmYXN0ZXIuIEhvd2V2ZXIsIGl0J3MgdW5jbGVhciB3aGVuIHRob3NlCisgICAgLy8gcGF0
Y2hlcyBtYXkgYmUgdXBzdHJlYW1lZCB0byBXZWJLaXQgc28gd2UgYWx3YXlzIHVzZSB0aGUgc2xv
d2VyIHBhdGgKKyAgICAvLyBoZXJlLgorICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
ID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSk7CisgICAgU2tBdXRvU1RNYWxsb2M8MzIsIFNr
UG9pbnQ+IHN0b3JhZ2UobnVtR2x5cGhzKSwgc3RvcmFnZTIobnVtR2x5cGhzKSwgc3RvcmFnZTMo
bnVtR2x5cGhzKTsKKyAgICBTa1BvaW50KiBwb3MgPSBzdG9yYWdlLmdldCgpOworICAgIFNrUG9p
bnQqIHZQb3NCZWdpbiA9IHN0b3JhZ2UyLmdldCgpOworICAgIFNrUG9pbnQqIHZQb3NFbmQgPSBz
dG9yYWdlMy5nZXQoKTsKKworICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGZvbnQtPnBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWw7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7IGkrKykgeworICAgICAgICBTa1NjYWxhciBteVdpZHRoID0gU2tGbG9hdFRvU2Nh
bGFyKGFkdltpXS53aWR0aCgpKTsKKyAgICAgICAgcG9zW2ldLnNldCh4LCB5KTsKKyAgICAgICAg
aWYgKGlzVmVydGljYWwpIHsKKyAgICAgICAgICAgIHZQb3NCZWdpbltpXS5zZXQoeCArIG15V2lk
dGgsIHkpOworICAgICAgICAgICAgdlBvc0VuZFtpXS5zZXQoeCArIG15V2lkdGgsIHkgLSBteVdp
ZHRoKTsKKyAgICAgICAgfQorICAgICAgICB4ICs9IG15V2lkdGg7CisgICAgICAgIHkgKz0gU2tG
bG9hdFRvU2NhbGFyKGFkdltpXS5oZWlnaHQoKSk7CisgICAgfQorCisgICAgU2tDYW52YXMqIGNh
bnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisgICAgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgdGV4dE1vZGUgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmdldFRleHREcmF3aW5n
TW9kZSgpOworCisgICAgLy8gV2UgZHJhdyB0ZXh0IHVwIHRvIHR3byB0aW1lcyAob25jZSBmb3Ig
ZmlsbCwgb25jZSBmb3Igc3Ryb2tlKS4KKyAgICBpZiAodGV4dE1vZGUgJiBUZXh0TW9kZUZpbGwp
IHsKKyAgICAgICAgU2tQYWludCBwYWludDsKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgp
LT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOworICAgICAgICBmb250LT5wbGF0Zm9ybURh
dGEoKS5zZXR1cFBhaW50KCZwYWludCk7CisgICAgICAgIGFkanVzdFRleHRSZW5kZXJNb2RlKCZw
YWludCwgZ2MtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29k
aW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisKKyAgICAgICAgaWYgKGlzVmVy
dGljYWwpIHsKKyAgICAgICAgICAgIFNrUGF0aCBwYXRoOworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgICAgIHBhdGgucmVzZXQo
KTsKKyAgICAgICAgICAgICAgICBwYXRoLm1vdmVUbyh2UG9zQmVnaW5baV0pOworICAgICAgICAg
ICAgICAgIHBhdGgubGluZVRvKHZQb3NFbmRbaV0pOworICAgICAgICAgICAgICAgIGNhbnZhcy0+
ZHJhd1RleHRPblBhdGgoZ2x5cGhzICsgaSwgMiwgcGF0aCwgMCwgcGFpbnQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5
cGhzLCBudW1HbHlwaHMgPDwgMSwgcG9zLCBwYWludCk7CisgICAgfQorCisgICAgaWYgKCh0ZXh0
TW9kZSAmIFRleHRNb2RlU3Ryb2tlKQorICAgICAgICAmJiBnYy0+cGxhdGZvcm1Db250ZXh0KCkt
PmdldFN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UKKyAgICAgICAgJiYgZ2MtPnBsYXRmb3JtQ29u
dGV4dCgpLT5nZXRTdHJva2VUaGlja25lc3MoKSA+IDApIHsKKworICAgICAgICBTa1BhaW50IHBh
aW50OworICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2lu
ZygmcGFpbnQsIDAsIDApOworICAgICAgICBmb250LT5wbGF0Zm9ybURhdGEoKS5zZXR1cFBhaW50
KCZwYWludCk7CisgICAgICAgIGFkanVzdFRleHRSZW5kZXJNb2RlKCZwYWludCwgZ2MtPnBsYXRm
b3JtQ29udGV4dCgpKTsKKyAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtH
bHlwaElEX1RleHRFbmNvZGluZyk7CisKKyAgICAgICAgaWYgKHRleHRNb2RlICYgVGV4dE1vZGVG
aWxsKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBhbHNvIGZpbGxlZCwgd2UgZG9uJ3Qgd2FudCB0
byBkcmF3IHNoYWRvd3MgdHdpY2UuCisgICAgICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBGb250
Q2hyb21pdW1XaW4uY3BwOjpwYWludFNraWFUZXh0KCkgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAg
ICAgICAgIC8vIFNpbmNlIHdlIHVzZSB0aGUgbG9vcGVyIGZvciBzaGFkb3dzLCB3ZSByZW1vdmUg
aXQgKGlmIGFueSkgbm93LgorICAgICAgICAgICAgcGFpbnQuc2V0TG9vcGVyKDApOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzVmVydGljYWwpIHsKKyAgICAgICAgICAgIFNrUGF0aCBwYXRo
OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAg
ICAgICAgICAgICAgIHBhdGgucmVzZXQoKTsKKyAgICAgICAgICAgICAgICBwYXRoLm1vdmVUbyh2
UG9zQmVnaW5baV0pOworICAgICAgICAgICAgICAgIHBhdGgubGluZVRvKHZQb3NFbmRbaV0pOwor
ICAgICAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1RleHRPblBhdGgoZ2x5cGhzICsgaSwgMiwgcGF0
aCwgMCwgcGFpbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgPDwgMSwgcG9zLCBwYWludCk7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZXR1cEZvclRleHRQYWludGluZyhTa1BhaW50KiBw
YWludCwgU2tDb2xvciBjb2xvcikKK3sKKyAgICBwYWludC0+c2V0VGV4dEVuY29kaW5nKFNrUGFp
bnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgcGFpbnQtPnNldENvbG9yKGNvbG9yKTsK
K30KKwordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29u
c3QgVGV4dFJ1biYgcnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgaWYgKCFydW4ubGVu
Z3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpOworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRN
b2RlID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUZXh0RHJhd2luZ01vZGUoKTsKKyAgICBi
b29sIGZpbGwgPSB0ZXh0TW9kZSAmIFRleHRNb2RlRmlsbDsKKyAgICBib29sIHN0cm9rZSA9ICh0
ZXh0TW9kZSAmIFRleHRNb2RlU3Ryb2tlKQorICAgICAgICAgICAgICAgJiYgZ2MtPnBsYXRmb3Jt
Q29udGV4dCgpLT5nZXRTdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlCisgICAgICAgICAgICAgICAm
JiBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0cm9rZVRoaWNrbmVzcygpID4gMDsKKworICAg
IGlmICghZmlsbCAmJiAhc3Ryb2tlKQorICAgICAgICByZXR1cm47CisKKyAgICBTa1BhaW50IHN0
cm9rZVBhaW50LCBmaWxsUGFpbnQ7CisgICAgaWYgKGZpbGwpIHsKKyAgICAgICAgZ2MtPnBsYXRm
b3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmZmlsbFBhaW50KTsKKyAgICAgICAg
c2V0dXBGb3JUZXh0UGFpbnRpbmcoJmZpbGxQYWludCwgZ2MtPmZpbGxDb2xvcigpLnJnYigpKTsK
KyAgICB9CisgICAgaWYgKHN0cm9rZSkgeworICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCkt
PnNldHVwUGFpbnRGb3JTdHJva2luZygmc3Ryb2tlUGFpbnQsIDAsIDApOworICAgICAgICBzZXR1
cEZvclRleHRQYWludGluZygmc3Ryb2tlUGFpbnQsIGdjLT5zdHJva2VDb2xvcigpLnJnYigpKTsK
KyAgICB9CisKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIHBvaW50
LngoKSwgcG9pbnQueSgpLCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBh
bnNpb24oKSwgdGhpcyk7CisKKyAgICBpZiAocnVuLnJ0bCgpKQorICAgICAgICBjb250cm9sbGVy
LnNldHVwRm9yUlRMKCk7CisKKyAgICB3aGlsZSAoY29udHJvbGxlci5uZXh0U2NyaXB0UnVuKCkp
IHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IGdseXBoIGZvdW5kIGluIHRoZSBj
dXJyZW50IHNjcmlwdCBydW4uCisgICAgICAgIGludCBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoOwor
ICAgICAgICBjb250cm9sbGVyLmdseXBoc0ZvclJhbmdlKGZyb20sIHRvLCBmcm9tR2x5cGgsIGds
eXBoTGVuZ3RoKTsKKyAgICAgICAgaWYgKGZyb21HbHlwaCA8IDAgfHwgZ2x5cGhMZW5ndGggPD0g
MCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChmaWxsKSB7CisgICAgICAg
ICAgICBjb250cm9sbGVyLmZvbnRQbGF0Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+c2V0dXBQYWlu
dCgmZmlsbFBhaW50KTsKKyAgICAgICAgICAgIGFkanVzdFRleHRSZW5kZXJNb2RlKCZmaWxsUGFp
bnQsIGdjLT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NU
ZXh0KGNvbnRyb2xsZXIuZ2x5cGhzKCkgKyBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoIDw8IDEsIGNv
bnRyb2xsZXIucG9zaXRpb25zKCkgKyBmcm9tR2x5cGgsIGZpbGxQYWludCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc3Ryb2tlKSB7CisgICAgICAgICAgICBjb250cm9sbGVyLmZvbnRQbGF0
Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+c2V0dXBQYWludCgmc3Ryb2tlUGFpbnQpOworICAgICAg
ICAgICAgYWRqdXN0VGV4dFJlbmRlck1vZGUoJnN0cm9rZVBhaW50LCBnYy0+cGxhdGZvcm1Db250
ZXh0KCkpOworICAgICAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChjb250cm9sbGVyLmdseXBo
cygpICsgZnJvbUdseXBoLCBnbHlwaExlbmd0aCA8PCAxLCBjb250cm9sbGVyLnBvc2l0aW9ucygp
ICsgZnJvbUdseXBoLCBzdHJva2VQYWludCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8q
IGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5n
JiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20g
Ki8sIGludCAvKiB0byAqLykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitm
bG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIC8qIGZhbGxiYWNrRm9udHMgKi8sIEdseXBo
T3ZlcmZsb3cqIC8qIGdseXBoT3ZlcmZsb3cgKi8pIGNvbnN0Cit7CisgICAgQ29tcGxleFRleHRD
b250cm9sbGVyIGNvbnRyb2xsZXIocnVuLCAwLCAwLCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFj
aW5nKCksIHJ1bi5leHBhbnNpb24oKSwgdGhpcyk7CisgICAgcmV0dXJuIGNvbnRyb2xsZXIud2lk
dGhPZkZ1bGxSdW4oKTsKK30KKworLy8gUmV0dXJuIHRoZSBjb2RlIHBvaW50IGluZGV4IGZvciB0
aGUgZ2l2ZW4gfHh8IG9mZnNldCBpbnRvIHRoZSB0ZXh0IHJ1bi4KK2ludCBGb250OjpvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRl
UGFydGlhbEdseXBocykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlz
IG5vdCBhIHByb2JsZW0gZm9yIEhUTUwsIGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNz
ZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVycworICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0
aW9uKCkuIEJ1ZyBodHRwOi8vd2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBw
cm9ibGVtLgorICAgIGludCB0YXJnZXRYID0gc3RhdGljX2Nhc3Q8aW50Pih4RmxvYXQpOworCisg
ICAgLy8gKE1hYyBjb2RlIGlnbm9yZXMgaW5jbHVkZVBhcnRpYWxHbHlwaHMsIGFuZCB0aGV5IGRv
bid0IGtub3cgd2hhdCBpdCdzCisgICAgLy8gc3VwcG9zZWQgdG8gZG8sIHNvIHdlIGp1c3QgaWdu
b3JlIGl0IGFzIHdlbGwuKQorICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHJ1
biwgMCwgMCwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4uZXhwYW5zaW9uKCks
IHRoaXMpOworICAgIGlmIChydW4ucnRsKCkpCisgICAgICAgIGNvbnRyb2xsZXIuc2V0dXBGb3JS
VEwoKTsKKyAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih0YXJnZXRYKTsK
K30KKworLy8gUmV0dXJuIHRoZSByZWN0YW5nbGUgZm9yIHNlbGVjdGluZyB0aGUgZ2l2ZW4gcmFu
Z2Ugb2YgY29kZS1wb2ludHMgaW4gdGhlIFRleHRSdW4uCitGbG9hdFJlY3QgRm9udDo6c2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGlu
dCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRy
b2xsZXIocnVuLCAwLCAwLCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBh
bnNpb24oKSwgdGhpcyk7CisgICAgaWYgKHJ1bi5ydGwoKSkKKyAgICAgICAgY29udHJvbGxlci5z
ZXR1cEZvclJUTCgpOworICAgIHJldHVybiBjb250cm9sbGVyLnNlbGVjdGlvblJlY3QocG9pbnQs
IGhlaWdodCwgZnJvbSwgdG8pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZv
cm1EYXRhSGFyZkJ1enouY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDQ1ZTEwNzA0
MDhkNTY4MWRmOGJjZTg2NGIxYmYyNzY5MTgyNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZC
dXp6LmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAw
NywgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3VwcG9ydC5oIgorCisjaW5jbHVkZSAiU2tBZHZhbmNlZFR5cGVmYWNlTWV0cmljcy5oIgorI2lu
Y2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdJbXBsLmg+IAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBT
a1BhaW50OjpIaW50aW5nIHNraWFIaW50aW5nID0gU2tQYWludDo6a05vcm1hbF9IaW50aW5nOwor
c3RhdGljIGJvb2wgaXNTa2lhQW50aUFsaWFzID0gdHJ1ZTsKK3N0YXRpYyBib29sIGlzU2tpYVN1
YnBpeGVsR2x5cGhzID0gZmFsc2U7CisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0SGludGlu
ZyhTa1BhaW50OjpIaW50aW5nIGhpbnRpbmcpCit7CisgICAgc2tpYUhpbnRpbmcgPSBoaW50aW5n
OworfQorCit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEFudGlBbGlhcyhib29sIGlzQW50aUFs
aWFzKQoreworICAgIGlzU2tpYUFudGlBbGlhcyA9IGlzQW50aUFsaWFzOworfQorCit2b2lkIEZv
bnRQbGF0Zm9ybURhdGE6OnNldFN1YnBpeGVsR2x5cGhzKGJvb2wgaXNTdWJwaXhlbEdseXBocykK
K3sKKyAgICBpc1NraWFTdWJwaXhlbEdseXBocyA9IGlzU3VicGl4ZWxHbHlwaHM7Cit9CisKK0Zv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
c3JjKQorICAgIDogbV90eXBlZmFjZShzcmMubV90eXBlZmFjZSkKKyAgICAsIG1fZmFtaWx5KHNy
Yy5tX2ZhbWlseSkKKyAgICAsIG1fdGV4dFNpemUoc3JjLm1fdGV4dFNpemUpCisgICAgLCBtX2Vt
U2l6ZUluRm9udFVuaXRzKHNyYy5tX2VtU2l6ZUluRm9udFVuaXRzKQorICAgICwgbV9mYWtlQm9s
ZChzcmMubV9mYWtlQm9sZCkKKyAgICAsIG1fZmFrZUl0YWxpYyhzcmMubV9mYWtlSXRhbGljKQor
ICAgICwgbV9vcmllbnRhdGlvbihzcmMubV9vcmllbnRhdGlvbikKKyAgICAsIG1fdGV4dE9yaWVu
dGF0aW9uKHNyYy5tX3RleHRPcmllbnRhdGlvbikKKyAgICAsIG1fc3R5bGUoc3JjLm1fc3R5bGUp
CisgICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZhY2UpCit7CisgICAgU2tTYWZl
UmVmKG1fdHlwZWZhY2UpOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRh
KFNrVHlwZWZhY2UqIHRmLCBjb25zdCBjaGFyKiBmYW1pbHksIGZsb2F0IHRleHRTaXplLCBib29s
IGZha2VCb2xkLCBib29sIGZha2VJdGFsaWMsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
VGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikKKyAgICA6IG1fdHlwZWZhY2UodGYpCisg
ICAgLCBtX2ZhbWlseShmYW1pbHkpCisgICAgLCBtX3RleHRTaXplKHRleHRTaXplKQorICAgICwg
bV9lbVNpemVJbkZvbnRVbml0cygwKQorICAgICwgbV9mYWtlQm9sZChmYWtlQm9sZCkKKyAgICAs
IG1fZmFrZUl0YWxpYyhmYWtlSXRhbGljKQorICAgICwgbV9vcmllbnRhdGlvbihvcmllbnRhdGlv
bikKKyAgICAsIG1fdGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRhdGlvbikKK3sKKyAgICBTa1Nh
ZmVSZWYobV90eXBlZmFjZSk7CisgICAgcXVlcnlTeXN0ZW1Gb3JSZW5kZXJTdHlsZSgpOworfQor
CitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIHNyYywgZmxvYXQgdGV4dFNpemUpCisgICAgOiBtX3R5cGVmYWNlKHNyYy5tX3R5cGVmYWNl
KQorICAgICwgbV9mYW1pbHkoc3JjLm1fZmFtaWx5KQorICAgICwgbV90ZXh0U2l6ZSh0ZXh0U2l6
ZSkKKyAgICAsIG1fZW1TaXplSW5Gb250VW5pdHMoc3JjLm1fZW1TaXplSW5Gb250VW5pdHMpCisg
ICAgLCBtX2Zha2VCb2xkKHNyYy5tX2Zha2VCb2xkKQorICAgICwgbV9mYWtlSXRhbGljKHNyYy5t
X2Zha2VJdGFsaWMpCisgICAgLCBtX29yaWVudGF0aW9uKHNyYy5tX29yaWVudGF0aW9uKQorICAg
ICwgbV90ZXh0T3JpZW50YXRpb24oc3JjLm1fdGV4dE9yaWVudGF0aW9uKQorICAgICwgbV9oYXJm
YnV6ekZhY2Uoc3JjLm1faGFyZmJ1enpGYWNlKQoreworICAgIFNrU2FmZVJlZihtX3R5cGVmYWNl
KTsKKyAgICBxdWVyeVN5c3RlbUZvclJlbmRlclN0eWxlKCk7Cit9CisKK0ZvbnRQbGF0Zm9ybURh
dGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKKyAgICBTa1NhZmVVbnJlZihtX3R5cGVmYWNlKTsK
K30KKworaW50IEZvbnRQbGF0Zm9ybURhdGE6OmVtU2l6ZUluRm9udFVuaXRzKCkgY29uc3QKK3sK
KyAgICBpZiAobV9lbVNpemVJbkZvbnRVbml0cykKKyAgICAgICAgcmV0dXJuIG1fZW1TaXplSW5G
b250VW5pdHM7CisKKyAgICBTa0FkdmFuY2VkVHlwZWZhY2VNZXRyaWNzKiBtZXRyaWNzID0gbV90
eXBlZmFjZS0+Z2V0QWR2YW5jZWRUeXBlZmFjZU1ldHJpY3MoU2tBZHZhbmNlZFR5cGVmYWNlTWV0
cmljczo6a05vX1BlckdseXBoSW5mbyk7CisgICAgbV9lbVNpemVJbkZvbnRVbml0cyA9IG1ldHJp
Y3MtPmZFbVNpemU7CisgICAgbWV0cmljcy0+dW5yZWYoKTsKKyAgICByZXR1cm4gbV9lbVNpemVJ
bkZvbnRVbml0czsKK30KKworRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3Bl
cmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYykKK3sKKyAgICBTa1JlZkNudF9TYWZl
QXNzaWduKG1fdHlwZWZhY2UsIHNyYy5tX3R5cGVmYWNlKTsKKworICAgIG1fZmFtaWx5ID0gc3Jj
Lm1fZmFtaWx5OworICAgIG1fdGV4dFNpemUgPSBzcmMubV90ZXh0U2l6ZTsKKyAgICBtX2Zha2VC
b2xkID0gc3JjLm1fZmFrZUJvbGQ7CisgICAgbV9mYWtlSXRhbGljID0gc3JjLm1fZmFrZUl0YWxp
YzsKKyAgICBtX2hhcmZidXp6RmFjZSA9IHNyYy5tX2hhcmZidXp6RmFjZTsKKyAgICBtX29yaWVu
dGF0aW9uID0gc3JjLm1fb3JpZW50YXRpb247CisgICAgbV90ZXh0T3JpZW50YXRpb24gPSBzcmMu
bV90ZXh0T3JpZW50YXRpb247CisgICAgbV9zdHlsZSA9IHNyYy5tX3N0eWxlOworICAgIG1fZW1T
aXplSW5Gb250VW5pdHMgPSBzcmMubV9lbVNpemVJbkZvbnRVbml0czsKKworICAgIHJldHVybiAq
dGhpczsKK30KKworI2lmbmRlZiBOREVCVUcKK1N0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNj
cmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorI2VuZGlmCisKK3Zv
aWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0dXBQYWludChTa1BhaW50KiBwYWludCkgY29uc3QKK3sK
KyAgICBjb25zdCBmbG9hdCB0cyA9IG1fdGV4dFNpemUgPj0gMCA/IG1fdGV4dFNpemUgOiAxMjsK
KworICAgIHBhaW50LT5zZXRBbnRpQWxpYXMobV9zdHlsZS51c2VBbnRpQWxpYXMgPT0gRm9udFJl
bmRlclN0eWxlOjpOb1ByZWZlcmVuY2UgPyBpc1NraWFBbnRpQWxpYXMgOiBtX3N0eWxlLnVzZUFu
dGlBbGlhcyk7CisgICAgc3dpdGNoIChtX3N0eWxlLnVzZUhpbnRpbmcpIHsKKyAgICBjYXNlIEZv
bnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlOgorICAgICAgICBwYWludC0+c2V0SGludGluZyhz
a2lhSGludGluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMDoKKyAgICAgICAgcGFpbnQt
PnNldEhpbnRpbmcoU2tQYWludDo6a05vX0hpbnRpbmcpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBwYWludC0+c2V0SGludGluZyhzdGF0aWNfY2FzdDxTa1BhaW50OjpI
aW50aW5nPihtX3N0eWxlLmhpbnRTdHlsZSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBwYWludC0+c2V0RW1iZWRkZWRCaXRtYXBUZXh0KG1fc3R5bGUudXNlQml0bWFwcyk7CisgICAg
cGFpbnQtPnNldFRleHRTaXplKFNrRmxvYXRUb1NjYWxhcih0cykpOworICAgIHBhaW50LT5zZXRU
eXBlZmFjZShtX3R5cGVmYWNlKTsKKyAgICBwYWludC0+c2V0RmFrZUJvbGRUZXh0KG1fZmFrZUJv
bGQpOworICAgIHBhaW50LT5zZXRUZXh0U2tld1gobV9mYWtlSXRhbGljID8gLVNLX1NjYWxhcjEg
LyA0IDogMCk7CisgICAgcGFpbnQtPnNldEF1dG9oaW50ZWQobV9zdHlsZS51c2VBdXRvSGludCk7
CisKKyAgICBpZiAobV9zdHlsZS51c2VBbnRpQWxpYXMgPT0gMSB8fCAobV9zdHlsZS51c2VBbnRp
QWxpYXMgPT0gRm9udFJlbmRlclN0eWxlOjpOb1ByZWZlcmVuY2UgJiYgaXNTa2lhQW50aUFsaWFz
KSkKKyAgICAgICAgcGFpbnQtPnNldExDRFJlbmRlclRleHQobV9zdHlsZS51c2VTdWJwaXhlbCA9
PSBGb250UmVuZGVyU3R5bGU6Ok5vUHJlZmVyZW5jZSA/IGlzU2tpYVN1YnBpeGVsR2x5cGhzIDog
bV9zdHlsZS51c2VTdWJwaXhlbCk7Cit9CisKK1NrRm9udElEIEZvbnRQbGF0Zm9ybURhdGE6OnVu
aXF1ZUlEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBlZmFjZS0+dW5pcXVlSUQoKTsKK30K
KworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGEpIGNvbnN0Cit7CisgICAgLy8gSWYgZWl0aGVyIG9mIHRoZSB0eXBlZmFjZSBwb2ludGVy
cyBhcmUgaW52YWxpZCAoZWl0aGVyIDAgb3IgdGhlCisgICAgLy8gc3BlY2lhbCBkZWxldGVkIHZh
bHVlKSB0aGVuIHdlIHRlc3QgZm9yIHBvaW50ZXIgZXF1YWxpdHkuIE90aGVyd2lzZSwgd2UKKyAg
ICAvLyBjYWxsIFNrVHlwZWZhY2U6OkVxdWFsIG9uIHRoZSB2YWxpZCBwb2ludGVycy4KKyAgICBi
b29sIHR5cGVmYWNlc0VxdWFsOworICAgIGlmIChtX3R5cGVmYWNlID09IGhhc2hUYWJsZURlbGV0
ZWRGb250VmFsdWUoKQorICAgICAgICB8fCBhLm1fdHlwZWZhY2UgPT0gaGFzaFRhYmxlRGVsZXRl
ZEZvbnRWYWx1ZSgpCisgICAgICAgIHx8ICFtX3R5cGVmYWNlCisgICAgICAgIHx8ICFhLm1fdHlw
ZWZhY2UpCisgICAgICAgIHR5cGVmYWNlc0VxdWFsID0gbV90eXBlZmFjZSA9PSBhLm1fdHlwZWZh
Y2U7CisgICAgZWxzZQorICAgICAgICB0eXBlZmFjZXNFcXVhbCA9IFNrVHlwZWZhY2U6OkVxdWFs
KG1fdHlwZWZhY2UsIGEubV90eXBlZmFjZSk7CisKKyAgICByZXR1cm4gdHlwZWZhY2VzRXF1YWwg
CisgICAgICAgICYmIG1fdGV4dFNpemUgPT0gYS5tX3RleHRTaXplCisgICAgICAgICYmIG1fZmFr
ZUJvbGQgPT0gYS5tX2Zha2VCb2xkCisgICAgICAgICYmIG1fZmFrZUl0YWxpYyA9PSBhLm1fZmFr
ZUl0YWxpYworICAgICAgICAmJiBtX29yaWVudGF0aW9uID09IGEubV9vcmllbnRhdGlvbgorICAg
ICAgICAmJiBtX3RleHRPcmllbnRhdGlvbiA9PSBhLm1fdGV4dE9yaWVudGF0aW9uCisgICAgICAg
ICYmIG1fc3R5bGUgPT0gYS5tX3N0eWxlOworfQorCit1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRh
OjpoYXNoKCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBoID0gU2tUeXBlZmFjZTo6VW5pcXVlSUQo
bV90eXBlZmFjZSk7CisgICAgaCBePSAweDAxMDEwMTAxICogKChzdGF0aWNfY2FzdDxpbnQ+KG1f
dGV4dE9yaWVudGF0aW9uKSA8PCAzKSB8IChzdGF0aWNfY2FzdDxpbnQ+KG1fb3JpZW50YXRpb24p
IDw8IDIpIHwgKHN0YXRpY19jYXN0PGludD4obV9mYWtlQm9sZCkgPDwgMSkgfCBzdGF0aWNfY2Fz
dDxpbnQ+KG1fZmFrZUl0YWxpYykpOworCisgICAgLy8gVGhpcyBtZW1jcHkgaXMgdG8gYXZvaWQg
YSByZWludGVycHJldF9jYXN0IHRoYXQgYnJlYWtzIHN0cmljdC1hbGlhc2luZworICAgIC8vIHJ1
bGVzLiBNZW1jcHkgaXMgZ2VuZXJhbGx5IG9wdGltaXplZCBlbm91Z2ggc28gdGhhdCBwZXJmb3Jt
YW5jZSBkb2Vzbid0CisgICAgLy8gbWF0dGVyIGhlcmUuCisgICAgdWludDMyX3QgdGV4dFNpemVC
eXRlczsKKyAgICBtZW1jcHkoJnRleHRTaXplQnl0ZXMsICZtX3RleHRTaXplLCBzaXplb2YodWlu
dDMyX3QpKTsKKyAgICBoIF49IHRleHRTaXplQnl0ZXM7CisKKyAgICByZXR1cm4gaDsKK30KKwor
Ym9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitIYXJmYnV6ekZhY2UqIEZvbnRQ
bGF0Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hhcmZidXp6
RmFjZSkKKyAgICAgICAgbV9oYXJmYnV6ekZhY2UgPSBIYXJmYnV6ekZhY2U6OmNyZWF0ZShjb25z
dF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlzKSk7CisKKyAgICByZXR1cm4gbV9oYXJmYnV6
ekZhY2UuZ2V0KCk7Cit9CisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cXVlcnlTeXN0ZW1Gb3JS
ZW5kZXJTdHlsZSgpCit7CisgICAgaWYgKCFtX2ZhbWlseS5sZW5ndGgoKSkgeworICAgICAgICAv
LyBXZSBkb24ndCBoYXZlIGEgZmFtaWx5IGZvciB0aGlzLiBQcm9iYWJseSBiZWNhdXNlIGl0J3Mg
YSB3ZWJmb250LiBXZQorICAgICAgICAvLyBzZXQgYWxsIHRoZSB2YWx1ZXMgdG8gJ25vIHByZWZl
cmVuY2UnIGFuZCB0YWtlIHRoZSBkZWZhdWx0cyBwYXNzZWQKKyAgICAgICAgLy8gaW4gZnJvbSBY
U0VUVElOR1MuCisgICAgICAgIG1fc3R5bGUudXNlQml0bWFwcyA9IEZvbnRSZW5kZXJTdHlsZTo6
Tm9QcmVmZXJlbmNlOworICAgICAgICBtX3N0eWxlLnVzZUF1dG9IaW50ID0gRm9udFJlbmRlclN0
eWxlOjpOb1ByZWZlcmVuY2U7CisgICAgICAgIG1fc3R5bGUudXNlSGludGluZyA9IEZvbnRSZW5k
ZXJTdHlsZTo6Tm9QcmVmZXJlbmNlOworICAgICAgICBtX3N0eWxlLnVzZUFudGlBbGlhcyA9IEZv
bnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlOworICAgICAgICBtX3N0eWxlLnVzZVN1YnBpeGVs
ID0gRm9udFJlbmRlclN0eWxlOjpOb1ByZWZlcmVuY2U7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKG1fZmFtaWx5
LmRhdGEoKSwgKCgoaW50KW1fdGV4dFNpemUpIDw8IDIpIHwgKG1fdHlwZWZhY2UtPnN0eWxlKCkg
JiAzKSwgJm1fc3R5bGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1E
YXRhSGFyZkJ1enouaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4NzlmMmUyZTU3NzdmNzk3
ZGI3YmE1ZTY0OTRmMTdlYmE1YzE3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouaApA
QCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFI
YXJmQnV6el9oCisjZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6el9oCisKKyNpbmNsdWRl
ICJGb250T3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJGb250UmVuZGVyU3R5bGUuaCIKKyNpbmNs
dWRlICJIYXJmQnV6elNraWEuaCIKKyNpbmNsdWRlICJTa1BhaW50LmgiCisjaW5jbHVkZSAiVGV4
dE9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0ltcGwuaD4KKworY2xhc3MgU2tUeXBlZmFjZTsKK3R5cGVkZWYgdWludDMyX3Qg
U2tGb250SUQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udERlc2NyaXB0aW9u
OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRm9udFBsYXRmb3JtRGF0YSBpcyB0aGUg
aGFuZGxlIHdoaWNoIFdlYktpdCBoYXMgb24gYSBzcGVjaWZpYyBmYWNlLiBBIGZhY2UKKy8vIGlz
IHRoZSB0dXBsZSBvZiAoZm9udCwgc2l6ZSwgLi4uZXRjKS4gSGVyZSB3ZSBhcmUganVzdCB3cmFw
cGluZyBhIFNraWEKKy8vIFNrVHlwZWZhY2UgcG9pbnRlciBhbmQgZGVhbGluZyB3aXRoIHRoZSBy
ZWZlcmVuY2UgY291bnRpbmcgZXRjLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsYXNzIEZv
bnRQbGF0Zm9ybURhdGEgeworcHVibGljOgorICAgIC8vIFVzZWQgZm9yIGRlbGV0ZWQgdmFsdWVz
IGluIHRoZSBmb250IGNhY2hlJ3MgaGFzaCB0YWJsZXMuIFRoZSBoYXNoIHRhYmxlCisgICAgLy8g
d2lsbCBjcmVhdGUgdXMgd2l0aCB0aGlzIHN0cnVjdHVyZSwgYW5kIGl0IHdpbGwgY29tcGFyZSBv
dGhlciB2YWx1ZXMKKyAgICAvLyB0byB0aGlzICJEZWxldGVkIiBvbmUuIEl0IGV4cGVjdHMgdGhl
IERlbGV0ZWQgb25lIHRvIGJlIGRpZmZlcmVudGlhYmxlCisgICAgLy8gZnJvbSB0aGUgMCBvbmUg
KGNyZWF0ZWQgd2l0aCB0aGUgZW1wdHkgY29uc3RydWN0b3IpLCBzbyB3ZSBjYW4ndCBqdXN0Cisg
ICAgLy8gc2V0IGV2ZXJ5dGhpbmcgdG8gMC4KKyAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3R5cGVmYWNlKGhhc2hUYWJsZURl
bGV0ZWRGb250VmFsdWUoKSkKKyAgICAgICAgLCBtX3RleHRTaXplKDApCisgICAgICAgICwgbV9l
bVNpemVJbkZvbnRVbml0cygwKQorICAgICAgICAsIG1fZmFrZUJvbGQoZmFsc2UpCisgICAgICAg
ICwgbV9mYWtlSXRhbGljKGZhbHNlKQorICAgICAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRh
bCkKKyAgICAgICAgLCBtX3RleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJp
Z2h0KQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9ybURhdGEoKQorICAgICAgICA6IG1f
dHlwZWZhY2UoMCkKKyAgICAgICAgLCBtX3RleHRTaXplKDApCisgICAgICAgICwgbV9lbVNpemVJ
bkZvbnRVbml0cygwKQorICAgICAgICAsIG1fZmFrZUJvbGQoZmFsc2UpCisgICAgICAgICwgbV9m
YWtlSXRhbGljKGZhbHNlKQorICAgICAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKKyAg
ICAgICAgLCBtX3RleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KQor
ICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgdGV4dFNpemUsIGJvb2wg
ZmFrZUJvbGQsIGJvb2wgZmFrZUl0YWxpYykKKyAgICAgICAgOiBtX3R5cGVmYWNlKDApCisgICAg
ICAgICwgbV90ZXh0U2l6ZSh0ZXh0U2l6ZSkKKyAgICAgICAgLCBtX2VtU2l6ZUluRm9udFVuaXRz
KDApCisgICAgICAgICwgbV9mYWtlQm9sZChmYWtlQm9sZCkKKyAgICAgICAgLCBtX2Zha2VJdGFs
aWMoZmFrZUl0YWxpYykKKyAgICAgICAgLCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCisgICAg
ICAgICwgbV90ZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkKKyAg
ICAgICAgeyB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
KTsKKyAgICBGb250UGxhdGZvcm1EYXRhKFNrVHlwZWZhY2UqLCBjb25zdCBjaGFyKiBuYW1lLCBm
bG9hdCB0ZXh0U2l6ZSwgYm9vbCBmYWtlQm9sZCwgYm9vbCBmYWtlSXRhbGljLCBGb250T3JpZW50
YXRpb24gPSBIb3Jpem9udGFsLCBUZXh0T3JpZW50YXRpb24gPSBUZXh0T3JpZW50YXRpb25WZXJ0
aWNhbFJpZ2h0KTsKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHNyYywgZmxvYXQgdGV4dFNpemUpOworICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAgICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUmV0dXJuIHRydWUgaWZmIHRoaXMgZm9udCBpcyBt
b25vc3BhY2VkIChpLmUuIGV2ZXJ5IGdseXBoIGhhcyBhbiBlcXVhbCB4CisgICAgLy8gYWR2YW5j
ZSkKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25z
dDsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTZXR1cCBhIFNraWEgcGFpbnRp
bmcgY29udGV4dCB0byB1c2UgdGhpcyBmb250LgorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICB2b2lkIHNldHVwUGFpbnQoU2tQYWludCopIGNvbnN0OworCisgICAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgIC8vIFJldHVybiBTa2lhJ3MgdW5pcXVlIGlkIGZvciB0aGlzIGZvbnQuIFRoaXMg
ZW5jb2RlcyBib3RoIHRoZSBzdHlsZSBhbmQKKyAgICAvLyB0aGUgZm9udCdzIGZpbGUgbmFtZSBz
byByZWZlcnMgdG8gYSBzaW5nbGUgZmFjZS4KKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
U2tGb250SUQgdW5pcXVlSUQoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsK
KyAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0U2l6ZTsgfQorICAgIGludCBl
bVNpemVJbkZvbnRVbml0cygpIGNvbnN0OworCisgICAgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQorICAgIHZvaWQgc2V0T3JpZW50
YXRpb24oRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmll
bnRhdGlvbjsgfQorICAgIHZvaWQgc2V0RmFrZUJvbGQoYm9vbCBmYWtlQm9sZCkgeyBtX2Zha2VC
b2xkID0gZmFrZUJvbGQ7IH0KKyAgICB2b2lkIHNldEZha2VJdGFsaWMoYm9vbCBmYWtlSXRhbGlj
KSB7IG1fZmFrZUl0YWxpYyA9IGZha2VJdGFsaWM7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0OworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJh
dG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZWZhY2UgPT0gaGFzaFRhYmxlRGVsZXRlZEZv
bnRWYWx1ZSgpOyB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkg
Y29uc3Q7CisjZW5kaWYKKworICAgIEhhcmZidXp6RmFjZSogaGFyZmJ1enpGYWNlKCkgY29uc3Q7
CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gR2xvYmFsIGZvbnQgcHJlZmVyZW5j
ZXMuLi4KKworICAgIHN0YXRpYyB2b2lkIHNldEhpbnRpbmcoU2tQYWludDo6SGludGluZyk7Cisg
ICAgc3RhdGljIHZvaWQgc2V0QW50aUFsaWFzKGJvb2wgb24pOworICAgIHN0YXRpYyB2b2lkIHNl
dFN1YnBpeGVsR2x5cGhzKGJvb2wgb24pOworCitwcml2YXRlOgorICAgIHZvaWQgcXVlcnlTeXN0
ZW1Gb3JSZW5kZXJTdHlsZSgpOworCisgICAgLy8gRklYTUU6IENvdWxkIFNrQXV0b1VucmVmIGJl
IHVzZWQgaGVyZT8KKyAgICBTa1R5cGVmYWNlKiBtX3R5cGVmYWNlOworICAgIENTdHJpbmcgbV9m
YW1pbHk7CisgICAgZmxvYXQgbV90ZXh0U2l6ZTsKKyAgICBtdXRhYmxlIGludCBtX2VtU2l6ZUlu
Rm9udFVuaXRzOworICAgIGJvb2wgbV9mYWtlQm9sZDsKKyAgICBib29sIG1fZmFrZUl0YWxpYzsK
KyAgICBGb250T3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKKyAgICBUZXh0T3JpZW50YXRpb24g
bV90ZXh0T3JpZW50YXRpb247CisgICAgRm9udFJlbmRlclN0eWxlIG1fc3R5bGU7CisgICAgbXV0
YWJsZSBSZWZQdHI8SGFyZmJ1enpGYWNlPiBtX2hhcmZidXp6RmFjZTsKKworICAgIFNrVHlwZWZh
Y2UqIGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFNrVHlwZWZhY2UqPigtMSk7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIGlmZGVmIEZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6el9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpT
a2lhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mNjhlYTYxOTI0NWY4NjZlNWJkMGQ1NzhkMDEwNDg0NDUyNTg0
YzJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJIYXJmQnV6elNraWEuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9y
bURhdGEuaCIKKworI2luY2x1ZGUgIlNrRm9udEhvc3QuaCIKKyNpbmNsdWRlICJTa1BhaW50Lmgi
CisjaW5jbHVkZSAiU2tQYXRoLmgiCisjaW5jbHVkZSAiU2tQb2ludC5oIgorI2luY2x1ZGUgIlNr
UmVjdC5oIgorI2luY2x1ZGUgIlNrVXRpbHMuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisKK2V4dGVybiAiQyIgeworI2luY2x1ZGUg
ImhhcmZidXp6LXNoYXBlci5oIgorfQorCisvLyBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgY2Fs
bGJhY2tzIHdoaWNoIEhhcmZidXp6IHJlcXVpcmVzIGJ5IHVzaW5nIFNraWEKKy8vIGNhbGxzLiBT
ZWUgdGhlIEhhcmZidXp6IHNvdXJjZSBmb3IgcmVmZXJlbmNlcyBhYm91dCB3aGF0IHRoZXNlIGNh
bGxiYWNrcyBkby4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgSEJfRml4ZWQgU2tp
YVNjYWxhclRvSGFyZmJ1enpGaXhlZChTa1NjYWxhciB2YWx1ZSkKK3sKKyAgICAvLyBIQl9GaXhl
ZCBpcyBhIDI2LjYgZml4ZWQgcG9pbnQgZm9ybWF0LgorICAgIHJldHVybiB2YWx1ZSAqIDY0Owor
fQorCitzdGF0aWMgSEJfQm9vbCBzdHJpbmdUb0dseXBocyhIQl9Gb250IGhiRm9udCwgY29uc3Qg
SEJfVUNoYXIxNiogY2hhcmFjdGVycywgaGJfdWludDMyIGxlbmd0aCwgSEJfR2x5cGgqIGdseXBo
cywgaGJfdWludDMyKiBnbHlwaHNTaXplLCBIQl9Cb29sIGlzUlRMKQoreworICAgIEZvbnRQbGF0
Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihoYkZv
bnQtPnVzZXJEYXRhKTsKKyAgICBTa1BhaW50IHBhaW50OworCisgICAgZm9udC0+c2V0dXBQYWlu
dCgmcGFpbnQpOworICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZfVGV4
dEVuY29kaW5nKTsKKworICAgIHVuc2lnbmVkIGNvZGVwb2ludHMgPSAwOworICAgIGZvciAoaGJf
dWludDMyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFTa1VURjE2X0lz
SGlnaFN1cnJvZ2F0ZShjaGFyYWN0ZXJzW2ldKSkKKyAgICAgICAgICAgIGNvZGVwb2ludHMrKzsK
KyAgICAgICAgaWYgKGNvZGVwb2ludHMgPiAqZ2x5cGhzU2l6ZSkKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIGludCBudW1HbHlwaHMgPSBwYWludC50ZXh0VG9HbHlwaHMoY2hh
cmFjdGVycywgbGVuZ3RoICogc2l6ZW9mKHVpbnQxNl90KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50
MTZfdCo+KGdseXBocykpOworCisgICAgLy8gSEJfR2x5cGggaXMgMzItYml0LCBidXQgU2tpYSBv
dXRwdXRzIG9ubHkgMTYtYml0IG51bWJlcnMuIFNvIG91cgorICAgIC8vIHxnbHlwaHN8IGFycmF5
IG5lZWRzIHRvIGJlIGNvbnZlcnRlZC4KKyAgICBmb3IgKGludCBpID0gbnVtR2x5cGhzIC0gMTsg
aSA+PSAwOyAtLWkpIHsKKyAgICAgICAgdWludDE2X3QgdmFsdWU7CisgICAgICAgIC8vIFdlIHVz
ZSBhIG1lbWNweSB0byBhdm9pZCBicmVha2luZyBzdHJpY3QgYWxpYXNpbmcgcnVsZXMuCisgICAg
ICAgIG1lbWNweSgmdmFsdWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGdseXBocykgKyBzaXpl
b2YodWludDE2X3QpICogaSwgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgICAgIGdseXBoc1tpXSA9
IHZhbHVlOworICAgIH0KKworICAgICpnbHlwaHNTaXplID0gbnVtR2x5cGhzOworICAgIHJldHVy
biAxOworfQorCitzdGF0aWMgdm9pZCBnbHlwaHNUb0FkdmFuY2VzKEhCX0ZvbnQgaGJGb250LCBj
b25zdCBIQl9HbHlwaCogZ2x5cGhzLCBoYl91aW50MzIgbnVtR2x5cGhzLCBIQl9GaXhlZCogYWR2
YW5jZXMsIGludCBmbGFncykKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRl
cnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oaGJGb250LT51c2VyRGF0YSk7CisgICAgU2tQ
YWludCBwYWludDsKKworICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKKyAgICBwYWludC5z
ZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKKworICAgIE93
bkFycmF5UHRyPHVpbnQxNl90PiBnbHlwaHMxNiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQxNl90
W251bUdseXBoc10pOworICAgIGlmICghZ2x5cGhzMTYuZ2V0KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpCisgICAgICAgIGds
eXBoczE2W2ldID0gZ2x5cGhzW2ldOworICAgIHBhaW50LmdldFRleHRXaWR0aHMoZ2x5cGhzMTYu
Z2V0KCksIG51bUdseXBocyAqIHNpemVvZih1aW50MTZfdCksIHJlaW50ZXJwcmV0X2Nhc3Q8U2tT
Y2FsYXIqPihhZHZhbmNlcykpOworCisgICAgLy8gVGhlIHxhZHZhbmNlc3wgdmFsdWVzIHdoaWNo
IFNraWEgb3V0cHV0cyBhcmUgU2tTY2FsYXJzLCB3aGljaCBhcmUgZmxvYXRzCisgICAgLy8gaW4g
Q2hyb21pdW0uIEhvd2V2ZXIsIEhhcmZidXp6IHdhbnRzIHRoZW0gaW4gMjYuNiBmaXhlZCBwb2lu
dCBmb3JtYXQuCisgICAgLy8gVGhlc2UgdHdvIGZvcm1hdHMgYXJlIGJvdGggMzItYml0cyBsb25n
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAg
ICBmbG9hdCB2YWx1ZTsKKyAgICAgICAgLy8gV2UgdXNlIGEgbWVtY3B5IHRvIGF2b2lkIGJyZWFr
aW5nIHN0cmljdCBhbGlhc2luZyBydWxlcy4KKyAgICAgICAgbWVtY3B5KCZ2YWx1ZSwgcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oYWR2YW5jZXMpICsgc2l6ZW9mKGZsb2F0KSAqIGksIHNpemVvZihm
bG9hdCkpOworICAgICAgICBhZHZhbmNlc1tpXSA9IFNraWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQo
dmFsdWUpOworICAgIH0KK30KKworc3RhdGljIEhCX0Jvb2wgY2FuUmVuZGVyKEhCX0ZvbnQgaGJG
b250LCBjb25zdCBIQl9VQ2hhcjE2KiBjaGFyYWN0ZXJzLCBoYl91aW50MzIgbGVuZ3RoKQorewor
ICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9y
bURhdGEqPihoYkZvbnQtPnVzZXJEYXRhKTsKKyAgICBTa1BhaW50IHBhaW50OworCisgICAgZm9u
dC0+c2V0dXBQYWludCgmcGFpbnQpOworICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50
OjprVVRGMTZfVGV4dEVuY29kaW5nKTsKKworICAgIE93bkFycmF5UHRyPHVpbnQxNl90PiBnbHlw
aHMxNiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQxNl90W2xlbmd0aF0pOworICAgIGlmICghZ2x5
cGhzMTYuZ2V0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGludCBudW1HbHlwaHMgPSBwYWlu
dC50ZXh0VG9HbHlwaHMoY2hhcmFjdGVycywgbGVuZ3RoICogc2l6ZW9mKHVpbnQxNl90KSwgZ2x5
cGhzMTYuZ2V0KCkpOworCisgICAgYm9vbCBjYW5SZW5kZXIgPSB0cnVlOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAgaWYgKCFnbHlwaHMxNltpXSkg
eworICAgICAgICAgICAgY2FuUmVuZGVyID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjYW5SZW5kZXI7Cit9CisKK3N0YXRpYyBIQl9F
cnJvciBnZXRPdXRsaW5lUG9pbnQoSEJfRm9udCBoYkZvbnQsIEhCX0dseXBoIGdseXBoLCBpbnQg
ZmxhZ3MsIGhiX3VpbnQzMiBwb2ludCwgSEJfRml4ZWQqIHhQb3MsIEhCX0ZpeGVkKiB5UG9zLCBo
Yl91aW50MzIqIHJlc3VsdGluZ051bVBvaW50cykKK3sKKyAgICAvLyBXZSBjYW5ub3QgcHJvdmlk
ZSB0aGUgcmlnaHQgcG9zaXRpb24gb2Ygb3V0bGluZSBwb2ludHMgZnJvbSBwb2ludCBpbmRleC4K
KyAgICAvLyBKdXN0IHJldHVybiBIQl9FcnJfT2sgd2l0aCByZXN1bHRpbmdOdW1Qb2ludHMgPSAw
IHNvIHRoYXQgaGFyZmJ1enoKKyAgICAvLyBmYWxscyBiYWNrIG9uIHVzaW5nIGRlc2lnbiBjb29y
ZGluYXRlIHZhbHVlIHBhaXIuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MDA3OSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICpyZXN1bHRpbmdOdW1Q
b2ludHMgPSAwOworICAgIHJldHVybiBIQl9FcnJfT2s7Cit9CisKK3N0YXRpYyB2b2lkIGdldEds
eXBoTWV0cmljcyhIQl9Gb250IGhiRm9udCwgSEJfR2x5cGggZ2x5cGgsIEhCX0dseXBoTWV0cmlj
cyogbWV0cmljcykKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRlcnByZXRf
Y2FzdDxGb250UGxhdGZvcm1EYXRhKj4oaGJGb250LT51c2VyRGF0YSk7CisgICAgU2tQYWludCBw
YWludDsKKworICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKKyAgICBwYWludC5zZXRUZXh0
RW5jb2RpbmcoU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKKyAgICB1aW50MTZfdCBn
bHlwaDE2ID0gZ2x5cGg7CisgICAgU2tTY2FsYXIgd2lkdGg7CisgICAgU2tSZWN0IGJvdW5kczsK
KyAgICBwYWludC5nZXRUZXh0V2lkdGhzKCZnbHlwaDE2LCBzaXplb2YoZ2x5cGgxNiksICZ3aWR0
aCwgJmJvdW5kcyk7CisKKyAgICBtZXRyaWNzLT54ID0gU2tpYVNjYWxhclRvSGFyZmJ1enpGaXhl
ZChib3VuZHMuZkxlZnQpOworICAgIG1ldHJpY3MtPnkgPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZp
eGVkKGJvdW5kcy5mVG9wKTsKKyAgICBtZXRyaWNzLT53aWR0aCA9IFNraWFTY2FsYXJUb0hhcmZi
dXp6Rml4ZWQoYm91bmRzLndpZHRoKCkpOworICAgIG1ldHJpY3MtPmhlaWdodCA9IFNraWFTY2Fs
YXJUb0hhcmZidXp6Rml4ZWQoYm91bmRzLmhlaWdodCgpKTsKKworICAgIG1ldHJpY3MtPnhPZmZz
ZXQgPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVkKHdpZHRoKTsKKyAgICAvLyBXZSBjYW4ndCBh
Y3R1YWxseSBnZXQgdGhlIHx5fCBjb3JyZWN0IGJlY2F1c2UgU2tpYSBkb2Vzbid0IGV4cG9ydAor
ICAgIC8vIHRoZSB2ZXJ0aWNhbCBhZHZhbmNlLiBIb3dldmVyLCBub3Igd2UgZG8gZXZlciByZW5k
ZXIgdmVydGljYWwgdGV4dCBhdAorICAgIC8vIHRoZSBtb21lbnQgc28gaXQncyB1bmltcG9ydGFu
dC4KKyAgICBtZXRyaWNzLT55T2Zmc2V0ID0gMDsKK30KKworc3RhdGljIEhCX0ZpeGVkIGdldEZv
bnRNZXRyaWMoSEJfRm9udCBoYkZvbnQsIEhCX0ZvbnRNZXRyaWMgbWV0cmljKQoreworICAgIEZv
bnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEq
PihoYkZvbnQtPnVzZXJEYXRhKTsKKyAgICBTa1BhaW50IHBhaW50OworCisgICAgZm9udC0+c2V0
dXBQYWludCgmcGFpbnQpOworICAgIFNrUGFpbnQ6OkZvbnRNZXRyaWNzIHNraWFNZXRyaWNzOwor
ICAgIHBhaW50LmdldEZvbnRNZXRyaWNzKCZza2lhTWV0cmljcyk7CisKKyAgICBzd2l0Y2ggKG1l
dHJpYykgeworICAgIGNhc2UgSEJfRm9udEFzY2VudDoKKyAgICAgICAgcmV0dXJuIFNraWFTY2Fs
YXJUb0hhcmZidXp6Rml4ZWQoLXNraWFNZXRyaWNzLmZBc2NlbnQpOworICAgIC8vIFdlIGRvbid0
IHN1cHBvcnQgZ2V0dGluZyB0aGUgcmVzdCBvZiB0aGUgbWV0cmljcyBhbmQgSGFyZmJ1enogZG9l
c24ndCBzZWVtIHRvIG5lZWQgdGhlbS4KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKK0hCX0ZvbnRDbGFzcyBoYXJmYnV6elNraWFDbGFzcyA9IHsKKyAgICBzdHJp
bmdUb0dseXBocywKKyAgICBnbHlwaHNUb0FkdmFuY2VzLAorICAgIGNhblJlbmRlciwKKyAgICBn
ZXRPdXRsaW5lUG9pbnQsCisgICAgZ2V0R2x5cGhNZXRyaWNzLAorICAgIGdldEZvbnRNZXRyaWMs
Cit9OworCitIQl9Gb250XyogYWxsb2NIYXJmYnV6ekZvbnQoKQoreworICAgIEhCX0ZvbnRfKiBm
b250ID0gcmVpbnRlcnByZXRfY2FzdDxIQl9Gb250Xyo+KGZhc3RNYWxsb2Moc2l6ZW9mKEhCX0Zv
bnRfKSkpOworICAgIG1lbXNldChmb250LCAwLCBzaXplb2YoSEJfRm9udF8pKTsKKyAgICBmb250
LT5rbGFzcyA9ICZoYXJmYnV6elNraWFDbGFzczsKKyAgICBmb250LT51c2VyRGF0YSA9IDA7CisK
KyAgICByZXR1cm4gZm9udDsKK30KKworSEJfRXJyb3IgaGFyZmJ1enpTa2lhR2V0VGFibGUodm9p
ZCogdm9pZGZhY2UsIGNvbnN0IEhCX1RhZyB0YWcsIEhCX0J5dGUqIGJ1ZmZlciwgSEJfVUludCog
bGVuKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGEqPih2b2lkZmFjZSk7CisKKyAgICBjb25zdCBzaXplX3QgdGFibGVTaXpl
ID0gU2tGb250SG9zdDo6R2V0VGFibGVTaXplKGZvbnQtPnVuaXF1ZUlEKCksIHRhZyk7CisgICAg
aWYgKCF0YWJsZVNpemUpCisgICAgICAgIHJldHVybiBIQl9FcnJfSW52YWxpZF9Bcmd1bWVudDsK
KyAgICAvLyBJZiBIYXJmYnV6eiBzcGVjaWZpZWQgYSAwIGJ1ZmZlciB0aGVuIGl0J3MgYXNraW5n
IGZvciB0aGUgc2l6ZSBvZiB0aGUgdGFibGUuCisgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAg
KmxlbiA9IHRhYmxlU2l6ZTsKKyAgICAgICAgcmV0dXJuIEhCX0Vycl9PazsKKyAgICB9CisKKyAg
ICBpZiAoKmxlbiA8IHRhYmxlU2l6ZSkKKyAgICAgICAgcmV0dXJuIEhCX0Vycl9JbnZhbGlkX0Fy
Z3VtZW50OworICAgIFNrRm9udEhvc3Q6OkdldFRhYmxlRGF0YShmb250LT51bmlxdWVJRCgpLCB0
YWcsIDAsIHRhYmxlU2l6ZSwgYnVmZmVyKTsKKyAgICByZXR1cm4gSEJfRXJyX09rOworfQorCit0
eXBlZGVmIHBhaXI8SEJfRmFjZVJlY18qLCB1bnNpZ25lZD4gRmFjZUNhY2hlRW50cnk7Cit0eXBl
ZGVmIEhhc2hNYXA8dW5zaWduZWQgaW50LCBGYWNlQ2FjaGVFbnRyeSwgV1RGOjpJbnRIYXNoPHVu
c2lnbmVkIGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQg
aW50PiA+IEhhcmZidXp6RmFjZUNhY2hlOworc3RhdGljIEhhcmZidXp6RmFjZUNhY2hlKiBnSGFy
ZmJ1enpGYWNlQ2FjaGUgPSAwOworCitzdGF0aWMgSEJfRmFjZVJlY18qIGdldENhY2hlZEhhcmZi
dXp6RmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEpCit7CisgICAgaWYgKCFnSGFy
ZmJ1enpGYWNlQ2FjaGUpCisgICAgICAgIGdIYXJmYnV6ekZhY2VDYWNoZSA9IG5ldyBIYXJmYnV6
ekZhY2VDYWNoZTsKKyAgICBTa0ZvbnRJRCB1bmlxdWVJRCA9IHBsYXRmb3JtRGF0YS0+dW5pcXVl
SUQoKTsKKyAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gZ0hhcmZidXp6
RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlEKTsKKyAgICBpZiAocmVzdWx0ID09IGdIYXJmYnV6ekZh
Y2VDYWNoZS0+ZW5kKCkpIHsKKyAgICAgICAgRmFjZUNhY2hlRW50cnkgZW50cnkoSEJfTmV3RmFj
ZShwbGF0Zm9ybURhdGEsIGhhcmZidXp6U2tpYUdldFRhYmxlKSwgMSk7CisgICAgICAgIGdIYXJm
YnV6ekZhY2VDYWNoZS0+c2V0KHVuaXF1ZUlELCBlbnRyeSk7CisgICAgICAgIHJldHVybiBlbnRy
eS5maXJzdDsKKyAgICB9CisgICAgKysocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKKyAg
ICByZXR1cm4gcmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3Q7Cit9CisKK3N0YXRpYyB2b2lkIHJl
bGVhc2VDYWNoZWRIYXJmYnV6ekZhY2UoU2tGb250SUQgdW5pcXVlSUQpCit7CisgICAgSGFyZmJ1
enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1
bmlxdWVJRCk7CisgICAgQVNTRVJUKHJlc3VsdCAhPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgp
KTsKKyAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7CisgICAgLS0o
cmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKKyAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNl
Y29uZC5zZWNvbmQpKSB7CisgICAgICAgIEhCX0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+c2Vjb25k
LmZpcnN0KTsKKyAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5yZW1vdmUodW5pcXVlSUQpOwor
ICAgIH0KK30KKworSGFyZmJ1enpGYWNlOjpIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSog
cGxhdGZvcm1EYXRhKQorICAgIDogbV91bmlxdWVJRChwbGF0Zm9ybURhdGEtPnVuaXF1ZUlEKCkp
Cit7CisgICAgbV9oYXJmYnV6ekZhY2UgPSBnZXRDYWNoZWRIYXJmYnV6ekZhY2UocGxhdGZvcm1E
YXRhKTsKK30KKworSGFyZmJ1enpGYWNlOjp+SGFyZmJ1enpGYWNlKCkKK3sKKyAgICByZWxlYXNl
Q2FjaGVkSGFyZmJ1enpGYWNlKG1fdW5pcXVlSUQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6U2tpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxNmI0NDNmMTM2NGNhNzQzMTM4MjZmOTUx
NjliYmZkMjc1ZGQ5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuaApAQCAtMCwwICsxLDY4IEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSGFyZkJ1enpTa2lhX2gKKyNkZWZpbmUgSGFyZkJ1enpTa2lhX2gKKworI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3QgSEJfRmFj
ZVJlY187CitzdHJ1Y3QgSEJfRm9udF87CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Rm9udFBsYXRmb3JtRGF0YTsKKworY2xhc3MgSGFyZmJ1enpGYWNlIDogcHVibGljIFJlZkNvdW50
ZWQ8SGFyZmJ1enpGYWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SGFyZmJ1
enpGYWNlPiBjcmVhdGUoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIYXJmYnV6ekZhY2UocGxhdGZvcm1EYXRhKSk7Cisg
ICAgfQorCisgICAgfkhhcmZidXp6RmFjZSgpOworCisgICAgSEJfRmFjZVJlY18qIGZhY2UoKSBj
b25zdCB7IHJldHVybiBtX2hhcmZidXp6RmFjZTsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IEhhcmZidXp6RmFjZShGb250UGxhdGZvcm1EYXRhKik7CisKKyAgICB1aW50MzJfdCBtX3VuaXF1
ZUlEOworICAgIEhCX0ZhY2VSZWNfKiBtX2hhcmZidXp6RmFjZTsKK307CisKKy8vIEZJWE1FOiBS
ZW1vdmUgdGhpcyBhc3ltbWV0cmljIGFsbG9jL2ZyZWUgZnVuY3Rpb24uCisvLyBXZSdsbCByZW1v
dmUgdGhpcyBvbmNlIHdlIG1vdmUgdG8gdGhlIG5ldyBIYXJmYnV6eiBBUEkuCitIQl9Gb250Xyog
YWxsb2NIYXJmYnV6ekZvbnQoKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L1Np
bXBsZUZvbnREYXRhU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9TaW1wbGVGb250RGF0YVNraWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwMmMxMmFkYTIwZDZl
ZDQyYTYwY2U2Y2FjYzJhNjg0NTc5Yzk0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9TaW1wbGVGb250RGF0YVNraWEuY3BwCkBA
IC0wLDAgKzEsMjQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9u
dC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCisjaW5jbHVk
ZSAiU2tQYWludC5oIgorI2luY2x1ZGUgIlNrVGltZS5oIgorI2luY2x1ZGUgIlNrVHlwZWZhY2Uu
aCIKKyNpbmNsdWRlICJTa1R5cGVzLmgiCisjaW5jbHVkZSAiVkRNWFBhcnNlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIFNtYWxsY2FwcyB2ZXJzaW9ucyBvZiBmb250cyBhcmUgNzAl
IHRoZSBzaXplIG9mIHRoZSBub3JtYWwgZm9udC4KK3N0YXRpYyBjb25zdCBmbG9hdCBzbWFsbENh
cHNGcmFjdGlvbiA9IDAuN2Y7CitzdGF0aWMgY29uc3QgZmxvYXQgZW1waGFzaXNNYXJrRnJhY3Rp
b24gPSAuNTsKKy8vIFRoaXMgaXMgdGhlIGxhcmdlc3QgVkRNWCB0YWJsZSB3aGljaCB3ZSdsbCB0
cnkgdG8gbG9hZCBhbmQgcGFyc2UuCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFZETVhUYWJsZVNp
emUgPSAxMDI0ICogMTAyNDsgLy8gMSBNQgorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUluaXQoKQoreworICAgIGlmICghbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7CisgICAgICAgIG1f
Zm9udE1ldHJpY3MucmVzZXQoKTsKKyAgICAgICAgbV9hdmdDaGFyV2lkdGggPSAwOworICAgICAg
ICBtX21heENoYXJXaWR0aCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTa1Bh
aW50IHBhaW50OworICAgIFNrUGFpbnQ6OkZvbnRNZXRyaWNzIG1ldHJpY3M7CisKKyAgICBtX3Bs
YXRmb3JtRGF0YS5zZXR1cFBhaW50KCZwYWludCk7CisgICAgcGFpbnQuZ2V0Rm9udE1ldHJpY3Mo
Jm1ldHJpY3MpOworICAgIGNvbnN0IFNrRm9udElEIGZvbnRJRCA9IG1fcGxhdGZvcm1EYXRhLnVu
aXF1ZUlEKCk7CisKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgdmRteFRhZyA9IFNrU2V0Rm91
ckJ5dGVUYWcoJ1YnLCAnRCcsICdNJywgJ1gnKTsKKyAgICBpbnQgcGl4ZWxTaXplID0gbV9wbGF0
Zm9ybURhdGEuc2l6ZSgpICsgMC41OworICAgIGludCB2ZG14QXNjZW50LCB2ZG14RGVzY2VudDsK
KyAgICBib29sIGlzVkRNWFZhbGlkID0gZmFsc2U7CisKKyAgICBzaXplX3QgdmRteFNpemUgPSBT
a0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udElELCB2ZG14VGFnKTsKKyAgICBpZiAodmRteFNp
emUgJiYgdmRteFNpemUgPCBtYXhWRE1YVGFibGVTaXplKSB7CisgICAgICAgIHVpbnQ4X3QqIHZk
bXhUYWJsZSA9ICh1aW50OF90KikgZmFzdE1hbGxvYyh2ZG14U2l6ZSk7CisgICAgICAgIGlmICh2
ZG14VGFibGUKKyAgICAgICAgICAgICYmIFNrRm9udEhvc3Q6OkdldFRhYmxlRGF0YShmb250SUQs
IHZkbXhUYWcsIDAsIHZkbXhTaXplLCB2ZG14VGFibGUpID09IHZkbXhTaXplCisgICAgICAgICAg
ICAmJiBwYXJzZVZETVgoJnZkbXhBc2NlbnQsICZ2ZG14RGVzY2VudCwgdmRteFRhYmxlLCB2ZG14
U2l6ZSwgcGl4ZWxTaXplKSkKKyAgICAgICAgICAgIGlzVkRNWFZhbGlkID0gdHJ1ZTsKKyAgICAg
ICAgZmFzdEZyZWUodmRteFRhYmxlKTsKKyAgICB9CisKKyAgICBmbG9hdCBhc2NlbnQ7CisgICAg
ZmxvYXQgZGVzY2VudDsKKworICAgIC8vIEJld2FyZSB0aG9zZSB3aG8gc3RlcCBoZXJlOiBUaGlz
IGNvZGUgaXMgZGVzaWduZWQgdG8gbWF0Y2ggV2luMzIgZm9udAorICAgIC8vIG1ldHJpY3MgKmV4
YWN0bHkqLgorICAgIGlmIChpc1ZETVhWYWxpZCkgeworICAgICAgICBhc2NlbnQgPSB2ZG14QXNj
ZW50OworICAgICAgICBkZXNjZW50ID0gLXZkbXhEZXNjZW50OworICAgIH0gZWxzZSB7CisgICAg
ICAgIFNrU2NhbGFyIGhlaWdodCA9IC1tZXRyaWNzLmZBc2NlbnQgKyBtZXRyaWNzLmZEZXNjZW50
ICsgbWV0cmljcy5mTGVhZGluZzsKKyAgICAgICAgYXNjZW50ID0gU2tTY2FsYXJSb3VuZCgtbWV0
cmljcy5mQXNjZW50KTsKKyAgICAgICAgZGVzY2VudCA9IFNrU2NhbGFyUm91bmQoaGVpZ2h0KSAt
IGFzY2VudDsKKyAgICB9CisKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwor
ICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKworICAgIGZsb2F0IHhIZWln
aHQ7CisgICAgaWYgKG1ldHJpY3MuZlhIZWlnaHQpCisgICAgICAgIHhIZWlnaHQgPSBtZXRyaWNz
LmZYSGVpZ2h0OworICAgIGVsc2UgeworICAgICAgICAvLyBoYWNrIHRha2VuIGZyb20gdGhlIFdp
bmRvd3MgcG9ydAorICAgICAgICB4SGVpZ2h0ID0gYXNjZW50ICogMC41NmY7CisgICAgfQorCisg
ICAgZmxvYXQgbGluZUdhcCA9IFNrU2NhbGFyVG9GbG9hdChtZXRyaWNzLmZMZWFkaW5nKTsKKyAg
ICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7CisgICAgbV9mb250TWV0cmljcy5z
ZXRYSGVpZ2h0KHhIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobHJv
dW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSArIGxyb3VuZGYobGluZUdhcCkpOworCisg
ICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4
dE9yaWVudGF0aW9uRmFsbGJhY2soKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qg
dmhlYVRhZyA9IFNrU2V0Rm91ckJ5dGVUYWcoJ3YnLCAnaCcsICdlJywgJ2EnKTsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IHZvcmdUYWcgPSBTa1NldEZvdXJCeXRlVGFnKCdWJywgJ08n
LCAnUicsICdHJyk7CisgICAgICAgIHNpemVfdCB2aGVhU2l6ZSA9IFNrRm9udEhvc3Q6OkdldFRh
YmxlU2l6ZShmb250SUQsIHZoZWFUYWcpOworICAgICAgICBzaXplX3Qgdm9yZ1NpemUgPSBTa0Zv
bnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udElELCB2b3JnVGFnKTsKKyAgICAgICAgaWYgKCh2aGVh
U2l6ZSA+IDApIHx8ICh2b3JnU2l6ZSA+IDApKQorICAgICAgICAgICAgbV9oYXNWZXJ0aWNhbEds
eXBocyA9IHRydWU7CisgICAgfQorCisgICAgLy8gSW4gV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwLCBtX3NwYWNlV2lkdGggaXMKKyAgICAvLyBjYWxj
dWxhdGVkIGZvciB1cywgYnV0IHdlIG5lZWQgdG8gY2FsY3VsYXRlIG1fbWF4Q2hhcldpZHRoIGFu
ZAorICAgIC8vIG1fYXZnQ2hhcldpZHRoIGluIG9yZGVyIGZvciB0ZXh0IGVudHJ5IHdpZGdldHMg
dG8gYmUgc2l6ZWQgY29ycmVjdGx5LgorCisgICAgU2tTY2FsYXIgeFJhbmdlID0gbWV0cmljcy5m
WE1heCAtIG1ldHJpY3MuZlhNaW47CisgICAgbV9tYXhDaGFyV2lkdGggPSBTa1NjYWxhclJvdW5k
KHhSYW5nZSAqIFNrU2NhbGFyUm91bmQobV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSk7CisKKyAgICBp
ZiAobWV0cmljcy5mQXZnQ2hhcldpZHRoKQorICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IFNrU2Nh
bGFyUm91bmQobWV0cmljcy5mQXZnQ2hhcldpZHRoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9h
dmdDaGFyV2lkdGggPSB4SGVpZ2h0OworCisgICAgICAgIEdseXBoUGFnZSogZ2x5cGhQYWdlWmVy
byA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodGhpcywgMCktPnBhZ2UoKTsKKwor
ICAgICAgICBpZiAoZ2x5cGhQYWdlWmVybykgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IFVD
aGFyMzIgeENoYXIgPSAneCc7CisgICAgICAgICAgICBjb25zdCBHbHlwaCB4R2x5cGggPSBnbHlw
aFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoeENoYXIpLmdseXBoOworCisgICAgICAg
ICAgICBpZiAoeEdseXBoKQorICAgICAgICAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhG
b3JHbHlwaCh4R2x5cGgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQoreworICAgIC8vIGNoYXJ3aWR0aHMgYXJlIHNl
dCBpbiBwbGF0Zm9ybUluaXQuCit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVz
dHJveSgpCit7Cit9CisKK1Bhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAgY29uc3QgZmxvYXQgc2NhbGVk
U2l6ZSA9IGxyb3VuZGYoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogc2NhbGVGYWN0
b3IpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3Jt
RGF0YShtX3BsYXRmb3JtRGF0YSwgc2NhbGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkp
OworfQorCitTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIGlm
ICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZl
ZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9u
dERhdGEtPnNtYWxsQ2FwcykKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9
IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRnJhY3Rpb24p
OworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7Cit9CisK
K1NpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YSkKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9u
dERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CisgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
ID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGcmFj
dGlvbik7CisKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQo
KTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAoreworICAgIFNrUGFpbnQgcGFpbnQ7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEJ1ZmZlckNvdW50ID0gNjQ7CisgICAgdWlu
dDE2X3QgZ2x5cGhzW21heEJ1ZmZlckNvdW50XTsKKworICAgIG1fcGxhdGZvcm1EYXRhLnNldHVw
UGFpbnQoJnBhaW50KTsKKyAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2
X1RleHRFbmNvZGluZyk7CisKKyAgICB3aGlsZSAobGVuZ3RoID4gMCkgeworICAgICAgICBpbnQg
biA9IFNrTWluMzIobGVuZ3RoLCBTS19BUlJBWV9DT1VOVChnbHlwaHMpKTsKKworICAgICAgICAv
LyB0ZXh0VG9HbHlwaHMgdGFrZXMgYSBieXRlIGNvdW50IHNvIHdlIGRvdWJsZSB0aGUgY2hhcmFj
dGVyIGNvdW50LgorICAgICAgICBpbnQgY291bnQgPSBwYWludC50ZXh0VG9HbHlwaHMoY2hhcmFj
dGVycywgbiAqIDIsIGdseXBocyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgeworICAgICAgICAgICAgaWYgKCFnbHlwaHNbaV0pCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBtaXNzaW5nIGdseXBoCisgICAgICAgIH0KKworICAgICAgICBjaGFyYWN0
ZXJzICs9IG47CisgICAgICAgIGxlbmd0aCAtPSBuOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgbV90
cmVhdEFzRml4ZWRQaXRjaCA9IHBsYXRmb3JtRGF0YSgpLmlzRml4ZWRQaXRjaCgpOworfQorCitG
bG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorICAgIAorZmxvYXQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTa0FT
U0VSVChzaXplb2YoZ2x5cGgpID09IDIpOyAvLyBjb21waWxlLXRpbWUgYXNzZXJ0CisKKyAgICBT
a1BhaW50IHBhaW50OworCisgICAgbV9wbGF0Zm9ybURhdGEuc2V0dXBQYWludCgmcGFpbnQpOwor
CisgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGlu
Zyk7CisgICAgU2tTY2FsYXIgd2lkdGggPSBwYWludC5tZWFzdXJlVGV4dCgmZ2x5cGgsIDIpOwor
CisgICAgLy8gVGhvdWdoIFdlYktpdCBzdXBwb3J0cyBub24taW50ZWdyYWwgYWR2YW5jZXMsIFNr
aWEgb25seSBzdXBwb3J0cyB0aGVtCisgICAgLy8gZm9yICJzdWJwaXhlbCIgKGRpc3RpbmN0IGZy
b20gTENEIHN1YnBpeGVsIGFudGlhbGlhc2luZykgdGV4dCwgd2hpY2gKKyAgICAvLyB3ZSBkb24n
dCB1c2UuCisgICAgcmV0dXJuIHJvdW5kKFNrU2NhbGFyVG9GbG9hdCh3aWR0aCkpOworfQorCit2
b2lkIFNpbXBsZUZvbnREYXRhOjp1cGRhdGVHbHlwaFdpdGhWYXJpYXRpb25TZWxlY3RvcihVQ2hh
cjMyIGNoYXJhY3RlciwgVUNoYXIzMiBzZWxlY3RvciwgR2x5cGgmIGdseXBoKSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hl
U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNo
ZVNraWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjNzUyMTc3MzAwYzlmNDdlODU3NWM2YzA4MmYxMzhhYTg2
NWU2NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICog
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorCisjaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkZv
bnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgorCisjaW5jbHVkZSAiU2tQYWludC5oIgorI2luY2x1ZGUgIlNrVHlwZWZh
Y2UuaCIKKyNpbmNsdWRlICJTa1V0aWxzLmgiCisKKyNpbmNsdWRlIDx1bmljb2RlL2xvY2lkLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCit7Cit9CisKK2NvbnN0IFNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBG
b250JiBmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpCit7Cisg
ICAgaWN1OjpMb2NhbGUgbG9jYWxlID0gaWN1OjpMb2NhbGU6OmdldERlZmF1bHQoKTsKKyAgICBQ
bGF0Zm9ybVN1cHBvcnQ6OkZvbnRGYW1pbHkgZmFtaWx5OworICAgIFBsYXRmb3JtU3VwcG9ydDo6
Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoLCBsb2NhbGUuZ2V0
TGFuZ3VhZ2UoKSwgJmZhbWlseSk7CisgICAgaWYgKGZhbWlseS5uYW1lLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBBdG9taWNTdHJpbmcgYXRvbWljRmFtaWx5KGZhbWlseS5u
YW1lKTsKKyAgICAvLyBDaGFuZ2VzIHdlaWdodCBhbmQvb3IgaXRhbGljIG9mIGdpdmVuIEZvbnRE
ZXNjcmlwdGlvbiBkZXBlbmRzIG9uCisgICAgLy8gdGhlIHJlc3VsdCBvZiBmb250Y29uZmlnIHNv
IHRoYXQga2VlcGluZyB0aGUgY29ycmVjdCBmb250IG1hcHBpbmcKKyAgICAvLyBvZiB0aGUgZ2l2
ZW4gY2hhcmFjdGVycy4gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzIxMDkgZm9yIGRldGFpbHMuCisg
ICAgYm9vbCBzaG91bGRTZXRGYWtlQm9sZCA9IGZhbHNlOworICAgIGJvb2wgc2hvdWxkU2V0RmFr
ZUl0YWxpYyA9IGZhbHNlOworICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihmb250LmZv
bnREZXNjcmlwdGlvbigpKTsKKyAgICBpZiAoZmFtaWx5LmlzQm9sZCAmJiBkZXNjcmlwdGlvbi53
ZWlnaHQoKSA8IEZvbnRXZWlnaHRCb2xkKQorICAgICAgICBkZXNjcmlwdGlvbi5zZXRXZWlnaHQo
Rm9udFdlaWdodEJvbGQpOworICAgIGlmICghZmFtaWx5LmlzQm9sZCAmJiBkZXNjcmlwdGlvbi53
ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkgeworICAgICAgICBzaG91bGRTZXRGYWtlQm9sZCA9
IHRydWU7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsK
KyAgICB9CisgICAgaWYgKGZhbWlseS5pc0l0YWxpYyAmJiBkZXNjcmlwdGlvbi5pdGFsaWMoKSA9
PSBGb250SXRhbGljT2ZmKQorICAgICAgICBkZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udEl0YWxp
Y09uKTsKKyAgICBpZiAoIWZhbWlseS5pc0l0YWxpYyAmJiBkZXNjcmlwdGlvbi5pdGFsaWMoKSA9
PSBGb250SXRhbGljT24pIHsKKyAgICAgICAgc2hvdWxkU2V0RmFrZUl0YWxpYyA9IHRydWU7Cisg
ICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250SXRhbGljT2ZmKTsKKyAgICB9CisKKyAg
ICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YSA9IEZvbnRQbGF0Zm9ybURhdGEoKmdldENh
Y2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIGF0b21pY0ZhbWlseSwgRG9Ob3RSZXRh
aW4pKTsKKyAgICBwbGF0Zm9ybURhdGEuc2V0RmFrZUJvbGQoc2hvdWxkU2V0RmFrZUJvbGQpOwor
ICAgIHBsYXRmb3JtRGF0YS5zZXRGYWtlSXRhbGljKHNob3VsZFNldEZha2VJdGFsaWMpOworICAg
IHJldHVybiBnZXRDYWNoZWRGb250RGF0YSgmcGxhdGZvcm1EYXRhLCBEb05vdFJldGFpbik7Cit9
CisKK1NpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK1NpbXBsZUZvbnREYXRh
KiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc2Fuc1N0ciwgKCJTYW5zIikpOwor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBzZXJpZlN0ciwgKCJT
ZXJpZiIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgbW9u
b3NwYWNlU3RyLCAoIk1vbm9zcGFjZSIpKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQ
bGF0Zm9ybURhdGEgPSAwOworICAgIHN3aXRjaCAoZGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgp
KSB7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgorICAgICAgICBmb250
UGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgc2Vy
aWZTdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6TW9ub3Nw
YWNlRmFtaWx5OgorICAgICAgICBmb250UGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRm
b3JtRGF0YShkZXNjcmlwdGlvbiwgbW9ub3NwYWNlU3RyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKKyAgICBkZWZhdWx0OgorICAg
ICAgICBmb250UGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlw
dGlvbiwgc2Fuc1N0cik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVChmb250
UGxhdGZvcm1EYXRhKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9udFBsYXRmb3Jt
RGF0YSwgc2hvdWxkUmV0YWluKTsKK30KKwordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFt
aWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgY29uc3QgY2hhciogbmFtZSA9IDA7CisgICAg
Q1N0cmluZyBzOworCisgICAgLy8gSWYgd2UncmUgY3JlYXRpbmcgYSBmYWxsYmFjayBmb250IChl
LmcuICItd2Via2l0LW1vbm9zcGFjZSIpLCBjb252ZXJ0IHRoZSBuYW1lIGludG8KKyAgICAvLyB0
aGUgZmFsbGJhY2sgbmFtZSAobGlrZSAibW9ub3NwYWNlIikgdGhhdCBmb250Y29uZmlnIHVuZGVy
c3RhbmRzLgorICAgIGlmICghZmFtaWx5Lmxlbmd0aCgpIHx8IGZhbWlseS5zdGFydHNXaXRoKCIt
d2Via2l0LSIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICAgICAg
Rm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlwZSBtVHlwZTsKKyAgICAgICAgICAgIGNv
bnN0IGNoYXIqIG1OYW1lOworICAgICAgICB9IGZvbnREZXNjcmlwdGlvbnNbXSA9IHsKKyAgICAg
ICAgICAgIHsgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSwgInNlcmlmIiB9LAorICAgICAg
ICAgICAgeyBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseSwgInNhbnMtc2VyaWYiIH0s
CisgICAgICAgICAgICB7IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5LCAibW9ub3Nw
YWNlIiB9LAorICAgICAgICAgICAgeyBGb250RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHksICJj
dXJzaXZlIiB9LAorICAgICAgICAgICAgeyBGb250RGVzY3JpcHRpb246OkZhbnRhc3lGYW1pbHks
ICJmYW50YXN5IiB9CisgICAgICAgIH07CisKKyAgICAgICAgRm9udERlc2NyaXB0aW9uOjpHZW5l
cmljRmFtaWx5VHlwZSB0eXBlID0gZm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFNLX0FSUkFZX0NPVU5UKGZvbnREZXNjcmlw
dGlvbnMpOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh0eXBlID09IGZvbnREZXNjcmlwdGlvbnNb
aV0ubVR5cGUpIHsKKyAgICAgICAgICAgICAgICBuYW1lID0gZm9udERlc2NyaXB0aW9uc1tpXS5t
TmFtZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICBuYW1lID0gIiI7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gY29udmVydCB0aGUgbmFtZSB0byB1dGY4CisgICAgICAgIHMgPSBmYW1pbHku
c3RyaW5nKCkudXRmOCgpOworICAgICAgICBuYW1lID0gcy5kYXRhKCk7CisgICAgfQorCisgICAg
aW50IHN0eWxlID0gU2tUeXBlZmFjZTo6a05vcm1hbDsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9u
LndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xkKQorICAgICAgICBzdHlsZSB8PSBTa1R5cGVmYWNl
OjprQm9sZDsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICBzdHls
ZSB8PSBTa1R5cGVmYWNlOjprSXRhbGljOworCisgICAgU2tUeXBlZmFjZSogdGYgPSBTa1R5cGVm
YWNlOjpDcmVhdGVGcm9tTmFtZShuYW1lLCBzdGF0aWNfY2FzdDxTa1R5cGVmYWNlOjpTdHlsZT4o
c3R5bGUpKTsKKyAgICBpZiAoIXRmKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEZvbnRQbGF0
Zm9ybURhdGEqIHJlc3VsdCA9CisgICAgICAgIG5ldyBGb250UGxhdGZvcm1EYXRhKHRmLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzdHlsZSAmIFNrVHlwZWZhY2U6OmtCb2xkKSAmJiAhdGYtPmlzQm9sZCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUgJiBTa1R5cGVmYWNlOjprSXRhbGlj
KSAmJiAhdGYtPmlzSXRhbGljKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkpOworICAgIHRmLT51bnJlZigpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVT
a2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdl
VHJlZU5vZGVTa2lhLmNwcAppbmRleCA0MDYxZjc0ZGIxNDY1MzQ1YzEwODhhZTZhZWUwY2NhNzJm
NjkwMmFhLi45YTRmZWY2ZDBlOTgzODkyMDYwZTc3MjIzNjIzZWI4YTU3ZTJmMjY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRyZWVO
b2RlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
bHlwaFBhZ2VUcmVlTm9kZVNraWEuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiR2x5
cGhQYWdlVHJlZU5vZGUuaCIKIAogI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJIYXJmYnV6
elNraWEuaCIKKyNpbmNsdWRlICJIYXJmQnV6elNraWEuaCIKICNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgogCiAjaW5jbHVkZSAiU2tUZW1wbGF0ZXMuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120613</attachid>
            <date>2011-12-27 13:09:07 -0800</date>
            <delta_ts>2011-12-27 16:49:45 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-72780-20111227130929.patch</filename>
            <type>text/plain</type>
            <size>190285</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE5NTNhYjRiMTI1MjNm
MzI5NWRjOWIxZmU5YmEzZmYwMWUyMjRmOC4uNzUwYzYxZGRiZThiOTUzOWEzMDBlNDIwMDU1ZTY2
Njk1ZGNhMTYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMzIEBACiAyMDExLTEyLTI3ICBUb255
IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgTW92ZSBIYXJmQnV6eiBmaWxl
cyBpbnRvIHRoZWlyIG93biBkaXJlY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcyNzgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFuaWVsIEJh
dGVzLgorCisgICAgICAgIEZvbnRDYWNoZUxpbnV4LmNwcCBnb3QgbW92ZWQgdG8gcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lhLmNwcCBzaW5jZSBpdCB3YXNuJ3QgSGFyZkJ1enog
c3BlY2lmaWMuCisKKyAgICAgICAgSSB1c2VkIEhhcmZCdXp6IGluIGZpbGVuYW1lcyBzaW5jZSB0
aGF0IHNlZW1zIHRvIGJlIGhvdyB0aGUgbmFtZSBpcyBjYXBpdGFsaXplZCBvbiB0aGUgcHJvamVj
dCBob21lIHBhZ2UuCisKKyAgICAgICAgRml4ZWQgc29tZSBzdHlsZSBlcnJvcnMgY2F1Z2h0IGJ5
IHRoZSBzdHlsZSBjaGVja2VyLgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtl
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1E
YXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRD
b250cm9sbGVySGFyZkJ1enouY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhh
cmZCdXp6Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4
LmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0hhcmZidXp6U2tpYS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpTa2lhLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9TaW1wbGVGb250RGF0YVNraWEuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lhLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRD
YWNoZUxpbnV4LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFn
ZVRyZWVOb2RlU2tpYS5jcHA6CisKKzIwMTEtMTItMjcgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KKwogICAgICAgICBbY2hyb21pdW1dIHJlbW92ZSByZWZlcmVuY2VzIHRvIGZpbGVz
IG5vIGxvbmdlciBpbiB0aGUgdHJlZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzUyNjIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1CbGFja0JlcnJ5LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNt
YWtlCmluZGV4IDhiYmQwODg5NTFjM2U2NWNiZjg1N2EwZDczMDFkZTZkYTYwOTIzZTQuLjY4Y2Qz
Y2NjNDBhOTRhMjU2NDQxMGYxNmY2NDc3MDY5YmI5OGZmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUJsYWNrQmVycnkuY21ha2UKQEAgLTgsNyArOCw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVf
SU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L0Nvb2tpZURhdGFiYXNlQmFja2luZ1N0b3JlIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvc2tpYSIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0iICMgRm9yIGZvbnQgc3Vic3lzdGVtCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Nr
aWEiCkBAIC00MiwxMiArNDIsMTIgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAjIFNr
aWEgZm9udCBiYWNrZW5kIHNvdXJjZXMKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvc2tpYS9QbGF0Zm9ybUJyaWRnZS5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L1NpbXBsZUZvbnREYXRhSGFyZkJ1enouY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9Gb250Q2FjaGVTa2lhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQ
YWdlVHJlZU5vZGVTa2lhLmNwcAogKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCmluZGV4IGJhYmNiNzQ5NDkzOTc4ZDM0YWI2ZWNkY2I4MTY0MWM5ZWYwNDNjZDQuLjdjZDIy
YzI3ODVjZDY1YmI2ZTZmYWRiMzQxYzBhZjM5MjQzMWE0ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0yMzEsNiArMjMxLDExIEBACiAgICAgICAgICMgRklYTUU6
IEFsc28gZW5hYmxlIHRoaXMgZm9yIFdpbmRvd3MgYWZ0ZXIgdmVyaWZ5aW5nIG5vIHdhcm5pbmdz
CiAgICAgICAgICdjaHJvbWl1bV9jb2RlJzogMSwKICAgICAgIH1dLAorICAgICAgWyd1c2VfeDEx
PT0xIG9yIE9TPT0iYW5kcm9pZCInLCB7CisgICAgICAgICd3ZWJjb3JlX2luY2x1ZGVfZGlycyc6
IFsKKyAgICAgICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enonLAorICAgICAgICBd
LAorICAgICAgfV0sCiAgICAgICBbJ09TPT0id2luIiBhbmQgYnVpbGR0eXBlPT0iT2ZmaWNpYWwi
JywgewogICAgICAgICAjIE9uIHdpbmRvd3Mgb2ZmaWNpYWwgcmVsZWFzZSBidWlsZHMsIHdlIHRy
eSB0byBwcmVzZXJ2ZSBzeW1ib2wgc3BhY2UuCiAgICAgICAgICdkZXJpdmVkX3NvdXJjZXNfYWdn
cmVnYXRlX2ZpbGVzJzogWwpAQCAtMTQ0OCw3ICsxNDUzLDcgQEAKICAgICAgICAgWydpbmNsdWRl
JywgJ3BsYXRmb3JtLyddLAogCiAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHN0
b3JlIHRoZXNlIHBhdHRlcm5zIGluIGEgdmFyaWFibGUuCi0gICAgICAgIFsnZXhjbHVkZScsICco
Y2Fpcm98Y2F8Y2Z8Y2d8Y3VybHxlZmx8ZnJlZXR5cGV8Z3N0cmVhbWVyfGd0a3xsaW51eHxtYWN8
b3BlbmdsfG9wZW52Z3xvcGVudHlwZXxwYW5nb3xwb3NpeHxxdHxzb3VwfHN2Z3xzeW1iaWFufHRl
eG1hcHxpcGhvbmV8d2lufHdpbmNlfHd4KS8nXSwKKyAgICAgICAgWydleGNsdWRlJywgJyhjYWly
b3xjYXxjZnxjZ3xjdXJsfGVmbHxmcmVldHlwZXxnc3RyZWFtZXJ8Z3RrfGhhcmZidXp6fGxpbnV4
fG1hY3xvcGVuZ2x8b3BlbnZnfG9wZW50eXBlfHBhbmdvfHBvc2l4fHF0fHNvdXB8c3ZnfHN5bWJp
YW58dGV4bWFwfGlwaG9uZXx3aW58d2luY2V8d3gpLyddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAn
KD88IUNocm9taXVtKShDYWlyb3xDRnxDR3xDdXJsfEd0a3xKU0N8TGludXh8TWFjfE9wZW5UeXBl
fFBPU0lYfFBvc2l4fFF0fFNhZmFyaXxTb3VwfFN5bWJpYW58V2lufFdpbkNFfFd4KVxcLihjcHB8
bW0/KSQnXSwKIAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vTGlua0hhc2hcXC5jcHAk
J10sCkBAIC0xNDcwLDExICsxNDc1LDExIEBACiAgICAgICAgIFsndXNlX3gxMSA9PSAxJywgewog
ICAgICAgICAgICdzb3VyY2VzLyc6IFsKICAgICAgICAgICAgICMgQ2hlcnJ5LXBpY2sgZmlsZXMg
ZXhjbHVkZWQgYnkgdGhlIGJyb2FkZXIgcmVndWxhciBleHByZXNzaW9ucyBhYm92ZS4KLSAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4
dENvbnRyb2xsZXJMaW51eFxcLmNwcCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eFxcLmNwcCQnXSwKLSAgICAgICAg
ICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXhcXC5j
cHAkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4XFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRl
JywgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXhcXC5jcHAk
J10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
Q29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enpcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2lu
Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6XFwuY3BwJCdd
LAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0Zv
bnRQbGF0Zm9ybURhdGFIYXJmQnV6elxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScs
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWFcXC5jcHAkJ10sCisgICAg
ICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovU2ltcGxlRm9u
dERhdGFTa2lhXFwuY3BwJCddLAogICAgICAgICAgIF0sCiAgICAgICAgIH0sIHsgIyB1c2VfeDEx
PT0wCiAgICAgICAgICAgJ3NvdXJjZXMvJzogWwpAQCAtMTYzOSw2ICsxNjQ0LDcgQEAKICAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0dcXC5jcHAk
J10sCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VDaHJvbWl1bU1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250TWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2V4Y2x1ZGUn
LCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lhXFwuY3BwJCddLAogICAgICAg
ICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5v
ZGVTa2lhXFwuY3BwJCddLAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2Nocm9t
aXVtL0RyYWdJbWFnZUNocm9taXVtTWFjXFwuY3BwJCddLAogICAgICAgICAgIF0sCkBAIC0xNjY5
LDYgKzE2NzUsNyBAQAogCiAgICAgICAgICAgICAjIFRoZSBDaHJvbWl1bSBXaW4gY3VycmVudGx5
IHVzZXMgR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAgZnJvbQogICAgICAgICAgICAg
IyBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bSwgaW5jbHVkZWQgYnkgcmVnZXggYWJvdmUsIGlu
c3RlYWQuCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9G
b250Q2FjaGVTa2lhXFwuY3BwJCddLAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhXFwuY3BwJCddLAogCiAgICAgICAg
ICAgICAjIFN5c3RlbUluZm8uY3BwIGlzIHVzZWZ1bCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjb3B5
IGl0LgpAQCAtMTY3OSwxNCArMTY4NiwxNCBAQAogICAgICAgICAgICdzb3VyY2VzLyc6IFsKICAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bUxpbnV4XFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2Nocm9t
aXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bUxpbnV4XFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxp
bnV4XFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZvbnRMaW51eFxcLmNwcCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXhcXC5jcHAkJ10s
CiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5
cGhQYWdlVHJlZU5vZGVMaW51eFxcLmNwcCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWFcXC5jcHAkJ10sCiAgICAgICAg
ICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVt
XFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NpbXBsZUZvbnREYXRhTGludXhcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVkRNWFBhcnNlclxcLmNwcCQnXSwKKyAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4
VGV4dENvbnRyb2xsZXJIYXJmQnV6elxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScs
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enpcXC5jcHAkJ10sCisgICAg
ICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRm
b3JtRGF0YUhhcmZCdXp6XFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYVxcLmNwcCQnXSwKKyAgICAgICAgICAg
IFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9TaW1wbGVGb250RGF0YVNr
aWFcXC5jcHAkJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgfSwgeyAjIE9TIT0iYW5kcm9pZCIK
ICAgICAgICAgICAnc291cmNlcy8nOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMmJkYjlhOTVmNWM0
ZWM0OGE4ZGM3NGYyOWNlMmRhMjE0Nzg2NzBmYy4uNThlNWNjODM0ZTVlYzQzMWFiN2I5OGIzYjE2
YTBiZGZjNGUzMzEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzUxMSw4ICszNTExLDYgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVt
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
VGV4dHVyZVVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVy
TGludXguaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5oJywKQEAgLTM1MjEsMTQgKzM1
MTksMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNp
b25zM0RDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2FjaGVBbmRyb2lkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGEuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9t
aXVtV2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UmVuZGVyU3R5bGUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1X
aW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRp
bHNDaHJvbWl1bVdpbi5oJywKQEAgLTM1MzksOCArMzUzMyw2IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9IYXJmYnV6elNraWEuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSWNvbkNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaCcsCkBAIC0zNTc2
LDcgKzM1NjgsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1No
YWRlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2hhZGVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1
cmVVcGRhdGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwJywKQEAg
LTM3ODcsNiArMzc3OCwxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9J
bWFnZUd0ay5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRQb2lu
dEd0ay5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRSZWN0R3Rr
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRl
eHRDb250cm9sbGVySGFyZkJ1enouY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enou
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZv
cm1EYXRhSGFyZkJ1enouaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTa2lhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovSGFyZkJ1enpTa2lhLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L1NpbXBsZUZvbnREYXRhU2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db2xvck1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCcsCkBAIC0zODkzLDYgKzM4OTIsNyBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVG
cmFtZVNraWEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFBv
aW50U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRS
ZWN0U2tpYS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENh
Y2hlU2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ZvbnRTa2lhLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRy
b2xsZXJMaW51eC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDg3YzIzMzA5
MDFmZWE2YTNlN2YxNmM0ZDNmMGY3N2RlZmEzNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NTcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29tcGxleFRleHRDb250
cm9sbGVyTGludXguaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnQu
aCIKLSNpbmNsdWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRl
ICJUZXh0UnVuLmgiCi0KLWV4dGVybiAiQyIgewotI2luY2x1ZGUgImhhcmZidXp6LXVuaWNvZGUu
aCIKLX0KLQotI2luY2x1ZGUgPHVuaWNvZGUvbm9ybWx6ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIEhhcmZidXp6IHVzZXMgMjYuNiBmaXhlZCBwb2ludCB2YWx1ZXMgZm9yIHBpeGVs
IG9mZnNldHMuIEhvd2V2ZXIsIHdlIGRvbid0Ci0vLyBoYW5kbGUgc3VicGl4ZWwgcG9zaXRpb25p
bmcgc28gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRydW5jYXRlIEhhcmZidXp6Ci0vLyB2YWx1
ZXMgdG8gYSBudW1iZXIgb2YgcGl4ZWxzLgotc3RhdGljIGludCB0cnVuY2F0ZUZpeGVkUG9pbnRU
b0ludGVnZXIoSEJfRml4ZWQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlID4+IDY7Ci19Ci0K
LUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IFRleHRS
dW4mIHJ1biwgaW50IHN0YXJ0aW5nWCwgaW50IHN0YXJ0aW5nWSwgdW5zaWduZWQgd29yZFNwYWNp
bmcsIHVuc2lnbmVkIGxldHRlclNwYWNpbmcsIHVuc2lnbmVkIHBhZGRpbmcsIGNvbnN0IEZvbnQq
IGZvbnQpCi0gICAgOiBtX2ZvbnQoZm9udCkKLSAgICAsIG1fcnVuKGdldE5vcm1hbGl6ZWRUZXh0
UnVuKHJ1biwgbV9ub3JtYWxpemVkUnVuLCBtX25vcm1hbGl6ZWRCdWZmZXIpKQotewotICAgIC8v
IERvIG5vdCB1c2UgfHJ1bnwgaW5zaWRlIHRoaXMgY29uc3RydWN0b3IuIFVzZSB8bV9ydW58IGlu
c3RlYWQuCi0KLSAgICBtZW1zZXQoJm1faXRlbSwgMCwgc2l6ZW9mKG1faXRlbSkpOwotICAgIC8v
IFdlIGNhbm5vdCBrbm93LCBhaGVhZCBvZiB0aW1lLCBob3cgbWFueSBnbHlwaHMgYSBnaXZlbiBz
Y3JpcHQgcnVuCi0gICAgLy8gd2lsbCBwcm9kdWNlLiBXZSB0YWtlIGEgZ3Vlc3MgdGhhdCBzY3Jp
cHQgcnVucyB3aWxsIG5vdCBwcm9kdWNlIG1vcmUKLSAgICAvLyB0aGFuIHR3aWNlIGFzIG1hbnkg
Z2x5cGhzIGFzIHRoZXJlIGFyZSBjb2RlIHBvaW50cyBwbHVzIGEgYml0IG9mCi0gICAgLy8gcGFk
ZGluZyBhbmQgZmFsbGJhY2sgaWYgd2UgZmluZCB0aGF0IHdlIGFyZSB3cm9uZy4KLSAgICBjcmVh
dGVHbHlwaEFycmF5cygobV9ydW4ubGVuZ3RoKCkgKyAyKSAqIDIpOwotCi0gICAgbV9pdGVtLmxv
Z19jbHVzdGVycyA9IG5ldyB1bnNpZ25lZCBzaG9ydFttX3J1bi5sZW5ndGgoKV07Ci0KLSAgICBt
X2l0ZW0uZmFjZSA9IDA7Ci0gICAgbV9pdGVtLmZvbnQgPSBhbGxvY0hhcmZidXp6Rm9udCgpOwot
Ci0gICAgbV9pdGVtLml0ZW0uYmlkaUxldmVsID0gbV9ydW4ucnRsKCk7Ci0KLSAgICBtX2l0ZW0u
c3RyaW5nID0gbV9ydW4uY2hhcmFjdGVycygpOwotICAgIG1faXRlbS5zdHJpbmdMZW5ndGggPSBt
X3J1bi5sZW5ndGgoKTsKLQotICAgIHJlc2V0KHN0YXJ0aW5nWCk7Ci0gICAgbV9zdGFydGluZ1kg
PSBzdGFydGluZ1k7Ci0KLSAgICBzZXRXb3JkU3BhY2luZ0FkanVzdG1lbnQod29yZFNwYWNpbmcp
OwotICAgIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50KGxldHRlclNwYWNpbmcpOwotICAgIHNl
dFBhZGRpbmcocGFkZGluZyk7Ci19Ci0KLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6fkNvbXBsZXhU
ZXh0Q29udHJvbGxlcigpCi17Ci0gICAgZmFzdEZyZWUobV9pdGVtLmZvbnQpOwotICAgIGRlbGV0
ZUdseXBoQXJyYXlzKCk7Ci0gICAgZGVsZXRlW10gbV9pdGVtLmxvZ19jbHVzdGVyczsKLX0KLQot
Ym9vbCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmlzV29yZEJyZWFrKHVuc2lnbmVkIGluZGV4KQot
ewotICAgIHJldHVybiBpbmRleCAmJiBpc0NvZGVwb2ludFNwYWNlKG1faXRlbS5zdHJpbmdbaW5k
ZXhdKSAmJiAhaXNDb2RlcG9pbnRTcGFjZShtX2l0ZW0uc3RyaW5nW2luZGV4IC0gMV0pOwotfQot
Ci1pbnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpkZXRlcm1pbmVXb3JkQnJlYWtTcGFjaW5nKHVu
c2lnbmVkIGxvZ0NsdXN0ZXJzSW5kZXgpCi17Ci0gICAgaW50IHdvcmRCcmVha1NwYWNpbmcgPSAw
OwotICAgIC8vIFRoZSBmaXJzdCBoYWxmIG9mIHRoZSBjb25qdW5jdGlvbiB3b3JrcyBhcm91bmQg
dGhlIGNhc2Ugd2hlcmUKLSAgICAvLyBvdXRwdXQgZ2x5cGhzIGFyZW4ndCBhc3NvY2lhdGVkIHdp
dGggYW55IGNvZGVwb2ludHMgYnkgdGhlCi0gICAgLy8gY2x1c3RlcnMgbG9nLgotICAgIGlmIChs
b2dDbHVzdGVyc0luZGV4IDwgbV9pdGVtLml0ZW0ubGVuZ3RoCi0gICAgICAgICYmIGlzV29yZEJy
ZWFrKG1faXRlbS5pdGVtLnBvcyArIGxvZ0NsdXN0ZXJzSW5kZXgpKSB7Ci0gICAgICAgIHdvcmRC
cmVha1NwYWNpbmcgPSBtX3dvcmRTcGFjaW5nQWRqdXN0bWVudDsKLQotICAgICAgICBpZiAobV9w
YWRkaW5nID4gMCkgewotICAgICAgICAgICAgaW50IHRvUGFkID0gcm91bmRmKG1fcGFkUGVyV29y
ZEJyZWFrICsgbV9wYWRFcnJvcik7Ci0gICAgICAgICAgICBtX3BhZEVycm9yICs9IG1fcGFkUGVy
V29yZEJyZWFrIC0gdG9QYWQ7Ci0KLSAgICAgICAgICAgIGlmIChtX3BhZGRpbmcgPCB0b1BhZCkK
LSAgICAgICAgICAgICAgICB0b1BhZCA9IG1fcGFkZGluZzsKLSAgICAgICAgICAgIG1fcGFkZGlu
ZyAtPSB0b1BhZDsKLSAgICAgICAgICAgIHdvcmRCcmVha1NwYWNpbmcgKz0gdG9QYWQ7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHdvcmRCcmVha1NwYWNpbmc7Ci19Ci0KLS8vIHNldFBh
ZGRpbmcgc2V0cyBhIG51bWJlciBvZiBwaXhlbHMgdG8gYmUgZGlzdHJpYnV0ZWQgYWNyb3NzIHRo
ZSBUZXh0UnVuLgotLy8gV2ViS2l0IHVzZXMgdGhpcyB0byBqdXN0aWZ5IHRleHQuCi12b2lkIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0UGFkZGluZyhpbnQgcGFkZGluZykKLXsKLSAgICBtX3Bh
ZGRpbmcgPSBwYWRkaW5nOwotICAgIG1fcGFkRXJyb3IgPSAwOwotICAgIGlmICghbV9wYWRkaW5n
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIHBhZGRpbmcgdG8gZGlzdHJp
YnV0ZSwgdGhlbiB3ZSB0cnkgdG8gZ2l2ZSBhbiBlcXVhbAotICAgIC8vIGFtb3VudCB0byBlYWNo
IHNwYWNlLiBUaGUgbGFzdCBzcGFjZSBnZXRzIHRoZSBzbWFsbGVyIGFtb3VudCwgaWYKLSAgICAv
LyBhbnkuCi0gICAgdW5zaWduZWQgbnVtV29yZEJyZWFrcyA9IDA7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9pdGVtLnN0cmluZ0xlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChp
c1dvcmRCcmVhayhpKSkKLSAgICAgICAgICAgIG51bVdvcmRCcmVha3MrKzsKLSAgICB9Ci0KLSAg
ICBpZiAobnVtV29yZEJyZWFrcykKLSAgICAgICAgbV9wYWRQZXJXb3JkQnJlYWsgPSBtX3BhZGRp
bmcgLyBudW1Xb3JkQnJlYWtzOwotICAgIGVsc2UKLSAgICAgICAgbV9wYWRQZXJXb3JkQnJlYWsg
PSAwOwotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6cmVzZXQoaW50IG9mZnNldCkK
LXsKLSAgICBtX2luZGV4T2ZOZXh0U2NyaXB0UnVuID0gMDsKLSAgICBtX29mZnNldFggPSBvZmZz
ZXQ7Ci19Ci0KLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvclJUTCgpCi17Ci0g
ICAgaW50IHBhZGRpbmcgPSBtX3BhZGRpbmc7Ci0gICAgLy8gRklYTUU6IHRoaXMgY2F1c2VzIHVz
IHRvIHNoYXBlIHRoZSB0ZXh0IHR3aWNlIC0tIG9uY2UgdG8gY29tcHV0ZSB0aGUgd2lkdGggYW5k
IHRoZW4gYWdhaW4KLSAgICAvLyBiZWxvdyB3aGVuIGFjdHVhbGx5IHJlbmRlcmluZy4gQ2hhbmdl
IENvbXBsZXhUZXh0Q29udHJvbGxlciB0byBtYXRjaCBwbGF0Zm9ybS9tYWMgYW5kCi0gICAgLy8g
cGxhdGZvcm0vY2hyb21pdW0vd2luIGJ5IGhhdmluZyBpdCBzdG9yZSB0aGUgc2hhcGVkIHJ1bnMs
IHNvIHdlIGNhbiByZXVzZSB0aGUgcmVzdWx0cy4KLSAgICByZXNldChtX29mZnNldFggKyB3aWR0
aE9mRnVsbFJ1bigpKTsKLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgcGFkZGluZyBhZ2FpbiBi
ZWNhdXNlIENvbXBsZXhUZXh0Q29udHJvbGxlciBsYXlvdXQgY29uc3VtZWQgdGhlIHZhbHVlLgot
ICAgIC8vIEZpeGluZyB0aGUgYWJvdmUgcHJvYmxlbSB3b3VsZCBoZWxwIGhlcmUgdG9vLgotICAg
IHNldFBhZGRpbmcocGFkZGluZyk7Ci19Ci0KLS8vIEFkdmFuY2UgdG8gdGhlIG5leHQgc2NyaXB0
IHJ1biwgcmV0dXJuaW5nIGZhbHNlIHdoZW4gdGhlIGVuZCBvZiB0aGUKLS8vIFRleHRSdW4gaGFz
IGJlZW4gcmVhY2hlZC4KLWJvb2wgQ29tcGxleFRleHRDb250cm9sbGVyOjpuZXh0U2NyaXB0UnVu
KCkKLXsKLSAgICAvLyBFbnN1cmUgd2UncmUgbm90IHBvaW50aW5nIGF0IHRoZSBzbWFsbCBjYXBz
IGJ1ZmZlci4KLSAgICBtX2l0ZW0uc3RyaW5nID0gbV9ydW4uY2hhcmFjdGVycygpOwotCi0gICAg
aWYgKCFoYl91dGYxNl9zY3JpcHRfcnVuX25leHQoMCwgJm1faXRlbS5pdGVtLCBtX3J1bi5jaGFy
YWN0ZXJzKCksIG1fcnVuLmxlbmd0aCgpLCAmbV9pbmRleE9mTmV4dFNjcmlwdFJ1bikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEl0IGlzIGFjdHVhbGx5IHdyb25nIHRvIGNvbnNp
ZGVyIHNjcmlwdCBydW5zIGF0IGFsbCBpbiB0aGlzIGNvZGUuCi0gICAgLy8gT3RoZXIgV2ViS2l0
IGNvZGUgKGUuZy4gTWFjKSBzZWdtZW50cyBjb21wbGV4IHRleHQganVzdCBieSBmaW5kaW5nCi0g
ICAgLy8gdGhlIGxvbmdlc3Qgc3BhbiBvZiB0ZXh0IGNvdmVyZWQgYnkgYSBzaW5nbGUgZm9udC4K
LSAgICAvLyBCdXQgd2UgY3VycmVudGx5IG5lZWQgdG8gY2FsbCBoYl91dGYxNl9zY3JpcHRfcnVu
X25leHQgYW55d2F5IHRvIGZpbGwKLSAgICAvLyBpbiB0aGUgaGFyZmJ1enogZGF0YSBzdHJ1Y3R1
cmVzIHRvIGUuZy4gcGljayB0aGUgY29ycmVjdCBzY3JpcHQncyBzaGFwZXIuCi0gICAgLy8gU28g
d2UgYWxsb3cgdGhhdCB0byBydW4gZmlyc3QsIHRoZW4gZG8gYSBzZWNvbmQgcGFzcyBvdmVyIHRo
ZSByYW5nZSBpdAotICAgIC8vIGZvdW5kIGFuZCB0YWtlIHRoZSBsYXJnZXN0IHN1YnJlZ2lvbiB0
aGF0IHN0YXlzIHdpdGhpbiBhIHNpbmdsZSBmb250LgotICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRl
eHRJdGVyYXRvciBpdGVyYXRvcihzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KCZtX2l0ZW0uc3Ry
aW5nW21faXRlbS5pdGVtLnBvc10pLCAwLCBzdGF0aWNfY2FzdDxpbnQ+KG1faXRlbS5pdGVtLmxl
bmd0aCksIHN0YXRpY19jYXN0PGludD4obV9pdGVtLml0ZW0ubGVuZ3RoKSk7Ci0gICAgVUNoYXIz
MiBjaGFyYWN0ZXI7Ci0gICAgdW5zaWduZWQgY2x1c3Rlckxlbmd0aCA9IDA7Ci0gICAgaWYgKCFp
dGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX2N1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKGNoYXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOwotICAgIGl0ZXJhdG9yLmFkdmFuY2Uo
Y2x1c3Rlckxlbmd0aCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBj
bHVzdGVyTGVuZ3RoKSkgewotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnRE
YXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9u
dERhdGE7Ci0gICAgICAgIGlmIChuZXh0Rm9udERhdGEgIT0gbV9jdXJyZW50Rm9udERhdGEpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3Ro
KTsKLSAgICB9Ci0gICAgbV9pdGVtLml0ZW0ubGVuZ3RoID0gaXRlcmF0b3IuY3VycmVudENoYXJh
Y3RlcigpOwotICAgIG1faW5kZXhPZk5leHRTY3JpcHRSdW4gPSBtX2l0ZW0uaXRlbS5wb3MgKyBp
dGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7Ci0KLSAgICBzZXR1cEZvbnRGb3JTY3JpcHRSdW4o
KTsKLSAgICBzaGFwZUdseXBocygpOwotICAgIHNldEdseXBoUG9zaXRpb25zKHJ0bCgpKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1mbG9hdCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OndpZHRo
T2ZGdWxsUnVuKCkKLXsKLSAgICBmbG9hdCB3aWR0aFN1bSA9IDA7Ci0gICAgd2hpbGUgKG5leHRT
Y3JpcHRSdW4oKSkKLSAgICAgICAgd2lkdGhTdW0gKz0gd2lkdGgoKTsKLQotICAgIHJldHVybiB3
aWR0aFN1bTsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBGb250RmVhdHVyZXMoY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogc2V0dGluZ3MsIEhCX0ZhY2VSZWNfKiBoYkZhY2UpCi17Ci0gICAgaWYg
KCFzZXR0aW5ncykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhiRmFjZS0+Z3N1YikKLSAg
ICAgICAgSEJfR1NVQl9DbGVhcl9GZWF0dXJlcyhoYkZhY2UtPmdzdWIpOwotICAgIGlmIChoYkZh
Y2UtPmdwb3MpCi0gICAgICAgIEhCX0dQT1NfQ2xlYXJfRmVhdHVyZXMoaGJGYWNlLT5ncG9zKTsK
LQotICAgIEhCX1VTaG9ydCBzY3JpcHRJbmRleCA9IDA7Ci0gICAgSEJfR1NVQl9TZWxlY3RfU2Ny
aXB0KGhiRmFjZS0+Z3N1YiwgSEJfTUFLRV9UQUcoJ0QnLCAnRicsICdMJywgJ1QnKSwgJnNjcmlw
dEluZGV4KTsKLSAgICBzaXplX3QgbnVtRmVhdHVyZXMgPSBzZXR0aW5ncy0+c2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRmVhdHVyZXM7ICsraSkgewotICAgICAgICBpZiAo
IXNldHRpbmdzLT5hdChpKS52YWx1ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IEhCX1VTaG9ydCBmZWF0dXJlSW5kZXggPSAwOwotICAgICAgICBjb25zdCBVQ2hhciogdGFnID0g
c2V0dGluZ3MtPmF0KGkpLnRhZygpLmNoYXJhY3RlcnMoKTsKLSAgICAgICAgSEJfVUludCBmZWF0
dXJlID0gSEJfTUFLRV9UQUcodGFnWzBdLCB0YWdbMV0sIHRhZ1syXSwgdGFnWzNdKTsKLSAgICAg
ICAgaWYgKGhiRmFjZS0+Z3N1YiAmJiBIQl9HU1VCX1NlbGVjdF9GZWF0dXJlKGhiRmFjZS0+Z3N1
YiwgZmVhdHVyZSwgc2NyaXB0SW5kZXgsIDB4ZmZmZiwgJmZlYXR1cmVJbmRleCkgPT0gSEJfRXJy
X09rKQotICAgICAgICAgICAgSEJfR1NVQl9BZGRfRmVhdHVyZShoYkZhY2UtPmdzdWIsIGZlYXR1
cmVJbmRleCwgc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCkpOwotICAgICAgICBlbHNlIGlmIChoYkZh
Y2UtPmdwb3MgJiYgSEJfR1BPU19TZWxlY3RfRmVhdHVyZShoYkZhY2UtPmdwb3MsIGZlYXR1cmUs
IHNjcmlwdEluZGV4LCAweGZmZmYsICZmZWF0dXJlSW5kZXgpID09IEhCX0Vycl9PaykKLSAgICAg
ICAgICAgIEhCX0dQT1NfQWRkX0ZlYXR1cmUoaGJGYWNlLT5ncG9zLCBmZWF0dXJlSW5kZXgsIHNl
dHRpbmdzLT5hdChpKS52YWx1ZSgpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBVQ2hhcjMyIHN1cnJv
Z2F0ZVBhaXJBd2FyZUZpcnN0Q2hhcmFjdGVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKFUxNl9JU19TVVJST0dBVEUoY2hhcmFjdGVyc1swXSkp
IHsKLSAgICAgICAgaWYgKCFVMTZfSVNfU1VSUk9HQVRFX0xFQUQoY2hhcmFjdGVyc1swXSkgfHwg
bGVuZ3RoIDwgMiB8fCAhVTE2X0lTX1RSQUlMKGNoYXJhY3RlcnNbMV0pKQotICAgICAgICAgICAg
cmV0dXJuICcgJzsKLSAgICAgICAgcmV0dXJuIFUxNl9HRVRfU1VQUExFTUVOVEFSWShjaGFyYWN0
ZXJzWzBdLCBjaGFyYWN0ZXJzWzFdKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNbMF07
Ci19Ci0KLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvbnRGb3JTY3JpcHRSdW4o
KQotewotICAgIEZvbnREYXRhVmFyaWFudCBmb250RGF0YVZhcmlhbnQgPSBBdXRvVmFyaWFudDsK
LSAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBzY3JpcHQgcnVuIG5lZWRzIHRvIGJlIGNvbnZlcnRl
ZCB0byBzbWFsbCBjYXBzLgotICAgIC8vIG5leHRTY3JpcHRSdW4oKSB3aWxsIGFsd2F5cyBzZW5k
IHVzIGEgcnVuIG9mIHRoZSBzYW1lIGNhc2UsIGJlY2F1c2UgYQotICAgIC8vIGNhc2UgY2hhbmdl
IHdoaWxlIGluIHNtYWxsLWNhcHMgbW9kZSBhbHdheXMgcmVzdWx0cyBpbiBkaWZmZXJlbnQKLSAg
ICAvLyBGb250RGF0YSwgc28gd2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoZSBmaXJzdCBjaGFyYWN0
ZXIncyBjYXNlLgotICAgIGlmIChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYgdV9pc2xvd2VyKG1f
aXRlbS5zdHJpbmdbbV9pdGVtLml0ZW0ucG9zXSkpIHsKLSAgICAgICAgbV9zbWFsbENhcHNTdHJp
bmcgPSBTdHJpbmcobV9ydW4uZGF0YShtX2l0ZW0uaXRlbS5wb3MpLCBtX2l0ZW0uaXRlbS5sZW5n
dGgpOwotICAgICAgICBtX3NtYWxsQ2Fwc1N0cmluZy5tYWtlVXBwZXIoKTsKLSAgICAgICAgbV9p
dGVtLnN0cmluZyA9IG1fc21hbGxDYXBzU3RyaW5nLmNoYXJhY3RlcnMoKTsKLSAgICAgICAgbV9p
dGVtLml0ZW0ucG9zID0gMDsKLSAgICAgICAgZm9udERhdGFWYXJpYW50ID0gU21hbGxDYXBzVmFy
aWFudDsKLSAgICB9Ci0gICAgVUNoYXIzMiBjdXJyZW50ID0gc3Vycm9nYXRlUGFpckF3YXJlRmly
c3RDaGFyYWN0ZXIoc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPigmbV9pdGVtLnN0cmluZ1ttX2l0
ZW0uaXRlbS5wb3NdKSwgbV9pdGVtLml0ZW0ubGVuZ3RoIC0gbV9pdGVtLml0ZW0ucG9zKTsKLSAg
ICBjb25zdCBGb250RGF0YSogZm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rl
cihjdXJyZW50LCBmYWxzZSwgZm9udERhdGFWYXJpYW50KS5mb250RGF0YTsKLSAgICBjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250RGF0YS0+Zm9udERhdGFGb3JDaGFy
YWN0ZXIoJyAnKS0+cGxhdGZvcm1EYXRhKCk7Ci0gICAgbV9pdGVtLmZhY2UgPSBwbGF0Zm9ybURh
dGEuaGFyZmJ1enpGYWNlKCktPmZhY2UoKTsKLSAgICAvLyBXZSBvbmx5IG5lZWQgdG8gc2V0dXAg
Zm9udCBmZWF0dXJlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydW4uCi0gICAgaWYgKCFtX2l0
ZW0uaXRlbS5wb3MpCi0gICAgICAgIHNldHVwRm9udEZlYXR1cmVzKG1fZm9udC0+Zm9udERlc2Ny
aXB0aW9uKCkuZmVhdHVyZVNldHRpbmdzKCksIG1faXRlbS5mYWNlKTsKLSAgICB2b2lkKiBvcGFx
dWVQbGF0Zm9ybURhdGEgPSBjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmcGxhdGZvcm1E
YXRhKTsKLSAgICBtX2l0ZW0uZm9udC0+dXNlckRhdGEgPSBvcGFxdWVQbGF0Zm9ybURhdGE7Ci0K
LSAgICBpbnQgc2l6ZSA9IHBsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgbV9pdGVtLmZvbnQtPnhf
cHBlbSA9IHNpemU7Ci0gICAgbV9pdGVtLmZvbnQtPnlfcHBlbSA9IHNpemU7Ci0gICAgLy8geF8g
YW5kIHlfc2NhbGUgYXJlIHRoZSBjb252ZXJzaW9uIGZhY3RvcnMgZnJvbSBmb250IGRlc2lnbiBz
cGFjZSAoZkVtU2l6ZSkgdG8gMS82NHRoIG9mIGRldmljZSBwaXhlbHMgaW4gMTYuMTYgZm9ybWF0
LgotICAgIGNvbnN0IGludCBkZXZpY2VQaXhlbEZyYWN0aW9uID0gNjQ7Ci0gICAgY29uc3QgaW50
IG11bHRpcGx5Rm9yMTZEb3QxNiA9IDEgPDwgMTY7Ci0gICAgaW50IHNjYWxlID0gZGV2aWNlUGl4
ZWxGcmFjdGlvbiAqIHNpemUgKiBtdWx0aXBseUZvcjE2RG90MTYgLyBwbGF0Zm9ybURhdGEuZW1T
aXplSW5Gb250VW5pdHMoKTsKLSAgICBtX2l0ZW0uZm9udC0+eF9zY2FsZSA9IHNjYWxlOwotICAg
IG1faXRlbS5mb250LT55X3NjYWxlID0gc2NhbGU7Ci19Ci0KLXZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjpkZWxldGVHbHlwaEFycmF5cygpCi17Ci0gICAgZGVsZXRlW10gbV9pdGVtLmdseXBo
czsKLSAgICBkZWxldGVbXSBtX2l0ZW0uYXR0cmlidXRlczsKLSAgICBkZWxldGVbXSBtX2l0ZW0u
YWR2YW5jZXM7Ci0gICAgZGVsZXRlW10gbV9pdGVtLm9mZnNldHM7Ci0gICAgZGVsZXRlW10gbV9n
bHlwaHMxNjsKLSAgICBkZWxldGVbXSBtX3Bvc2l0aW9uczsKLX0KLQotdm9pZCBDb21wbGV4VGV4
dENvbnRyb2xsZXI6OmNyZWF0ZUdseXBoQXJyYXlzKGludCBzaXplKQotewotICAgIG1faXRlbS5n
bHlwaHMgPSBuZXcgSEJfR2x5cGhbc2l6ZV07Ci0gICAgbV9pdGVtLmF0dHJpYnV0ZXMgPSBuZXcg
SEJfR2x5cGhBdHRyaWJ1dGVzW3NpemVdOwotICAgIG1faXRlbS5hZHZhbmNlcyA9IG5ldyBIQl9G
aXhlZFtzaXplXTsKLSAgICBtX2l0ZW0ub2Zmc2V0cyA9IG5ldyBIQl9GaXhlZFBvaW50W3NpemVd
OwotCi0gICAgbV9nbHlwaHMxNiA9IG5ldyB1aW50MTZfdFtzaXplXTsKLSAgICBtX3Bvc2l0aW9u
cyA9IG5ldyBTa1BvaW50W3NpemVdOwotCi0gICAgbV9pdGVtLm51bV9nbHlwaHMgPSBzaXplOwot
ICAgIG1fZ2x5cGhzQXJyYXlDYXBhY2l0eSA9IHNpemU7IC8vIFNhdmUgdGhlIEdseXBoQXJyYXlz
IHNpemUuCi0gICAgcmVzZXRHbHlwaEFycmF5cygpOwotfQotCi12b2lkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6cmVzZXRHbHlwaEFycmF5cygpCi17Ci0gICAgaW50IHNpemUgPSBtX2l0ZW0ubnVt
X2dseXBoczsKLSAgICAvLyBBbGwgdGhlIHR5cGVzIGhlcmUgZG9uJ3QgaGF2ZSBwb2ludGVycy4g
SXQgaXMgc2FmZSB0byByZXNldCB0bwotICAgIC8vIHplcm8gdW5sZXNzIEhhcmZidXp6IGJyZWFr
cyB0aGUgY29tcGF0aWJpbGl0eSBpbiB0aGUgZnV0dXJlLgotICAgIG1lbXNldChtX2l0ZW0uZ2x5
cGhzLCAwLCBzaXplICogc2l6ZW9mKEhCX0dseXBoKSk7Ci0gICAgbWVtc2V0KG1faXRlbS5hdHRy
aWJ1dGVzLCAwLCBzaXplICogc2l6ZW9mKEhCX0dseXBoQXR0cmlidXRlcykpOwotICAgIG1lbXNl
dChtX2l0ZW0uYWR2YW5jZXMsIDAsIHNpemUgKiBzaXplb2YoSEJfRml4ZWQpKTsKLSAgICBtZW1z
ZXQobV9pdGVtLm9mZnNldHMsIDAsIHNpemUgKiBzaXplb2YoSEJfRml4ZWRQb2ludCkpOwotICAg
IG1lbXNldChtX2dseXBoczE2LCAwLCBzaXplICogc2l6ZW9mKHVpbnQxNl90KSk7Ci0gICAgbWVt
c2V0KG1fcG9zaXRpb25zLCAwLCBzaXplICogc2l6ZW9mKFNrUG9pbnQpKTsKLX0KLQotdm9pZCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OnNoYXBlR2x5cGhzKCkKLXsKLSAgICAvLyBIQl9TaGFwZUl0
ZW0oKSByZXNldHMgbV9pdGVtLm51bV9nbHlwaHMuIElmIHRoZSBwcmV2aW91cyBjYWxsIHRvCi0g
ICAgLy8gSEJfU2hhcGVJdGVtKCkgdXNlZCBsZXNzIHNwYWNlIHRoYW4gd2FzIGF2YWlsYWJsZSwg
dGhlIGNhcGFjaXR5IG9mCi0gICAgLy8gdGhlIGFycmF5IG1heSBiZSBsYXJnZXIgdGhhbiB0aGUg
Y3VycmVudCB2YWx1ZSBvZiBtX2l0ZW0ubnVtX2dseXBocy4KLSAgICAvLyBTbywgd2UgbmVlZCB0
byByZXNldCB0aGUgbnVtX2dseXBocyB0byB0aGUgY2FwYWNpdHkgb2YgdGhlIGFycmF5LgotICAg
IG1faXRlbS5udW1fZ2x5cGhzID0gbV9nbHlwaHNBcnJheUNhcGFjaXR5OwotICAgIHJlc2V0R2x5
cGhBcnJheXMoKTsKLSAgICB3aGlsZSAoIUhCX1NoYXBlSXRlbSgmbV9pdGVtKSkgewotICAgICAg
ICAvLyBXZSBvdmVyZmxvd2VkIG91ciBhcnJheXMuIFJlc2l6ZSBhbmQgcmV0cnkuCi0gICAgICAg
IC8vIEhCX1NoYXBlSXRlbSBmaWxscyBpbiBtX2l0ZW0ubnVtX2dseXBocyB3aXRoIHRoZSBuZWVk
ZWQgc2l6ZS4KLSAgICAgICAgZGVsZXRlR2x5cGhBcnJheXMoKTsKLSAgICAgICAgLy8gVGhlIHwr
IDF8IGhlcmUgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBIYXJmYnV6ejogdGhlIEtobWVy
Ci0gICAgICAgIC8vIHNoYXBlciAoYXQgbGVhc3QpIGNhbiBmYWlsIGJlY2F1c2Ugb2YgaW5zdWZm
aWNpZW50IGdseXBoIGJ1ZmZlcnMKLSAgICAgICAgLy8gYW5kIHJlcXVlc3QgMCBhZGRpdGlvbmFs
IGdseXBoczogdGhyb3dpbmcgdXMgaW50byBhbiBpbmZpbml0ZQotICAgICAgICAvLyBsb29wLgot
ICAgICAgICBjcmVhdGVHbHlwaEFycmF5cyhtX2l0ZW0ubnVtX2dseXBocyArIDEpOwotICAgIH0K
LX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldEdseXBoUG9zaXRpb25zKGJvb2wg
aXNSVEwpCi17Ci0gICAgY29uc3QgZG91YmxlIHJ0bEZsaXAgPSBpc1JUTCA/IC0xIDogMTsKLSAg
ICBkb3VibGUgcG9zaXRpb24gPSAwOwotCi0gICAgLy8gbG9nQ2x1c3RlcnNJbmRleCBpbmRleGVz
IGxvZ0NsdXN0ZXJzIGZvciB0aGUgZmlyc3QgY29kZXBvaW50IG9mIHRoZSBjdXJyZW50IGdseXBo
LgotICAgIC8vIEVhY2ggdGltZSB3ZSBhZHZhbmNlIGEgZ2x5cGgsIHdlIHNraXAgb3ZlciBhbGwg
dGhlIGNvZGVwb2ludHMgdGhhdCBjb250cmlidXRlZCB0byB0aGUgY3VycmVudCBnbHlwaC4KLSAg
ICBpbnQgbG9nQ2x1c3RlcnNJbmRleCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhl
IGdseXBocyBpbiBsb2dpY2FsIG9yZGVyLCBmbGlwcGluZyBmb3IgUlRMIHdoZXJlIG5lY2Vzc2Fy
eS4KLSAgICAvLyBHbHlwaHMgYXJlIHBvc2l0aW9uZWQgc3RhcnRpbmcgZnJvbSBtX29mZnNldFg7
IGluIFJUTCBtb2RlIHRoZXkgZ28gbGVmdHdhcmRzIGZyb20gdGhlcmUuCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2l0ZW0ubnVtX2dseXBoczsgKytpKSB7Ci0gICAgICAgIHdoaWxlIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nQ2x1c3RlcnNJbmRleCkgPCBtX2l0ZW0uaXRlbS5sZW5n
dGggJiYgbV9pdGVtLmxvZ19jbHVzdGVyc1tsb2dDbHVzdGVyc0luZGV4XSA8IGkpCi0gICAgICAg
ICAgICBsb2dDbHVzdGVyc0luZGV4Kys7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZ2x5
cGggaXMganVzdCBhZnRlciBhIHNwYWNlLCBhZGQgaW4gdGhlIHdvcmQgc3BhY2luZy4KLSAgICAg
ICAgcG9zaXRpb24gKz0gZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZyhsb2dDbHVzdGVyc0luZGV4
KTsKLQotICAgICAgICBtX2dseXBoczE2W2ldID0gbV9pdGVtLmdseXBoc1tpXTsKLSAgICAgICAg
ZG91YmxlIG9mZnNldFggPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLm9mZnNl
dHNbaV0ueCk7Ci0gICAgICAgIGRvdWJsZSBvZmZzZXRZID0gdHJ1bmNhdGVGaXhlZFBvaW50VG9J
bnRlZ2VyKG1faXRlbS5vZmZzZXRzW2ldLnkpOwotICAgICAgICBkb3VibGUgYWR2YW5jZSA9IHRy
dW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0uYWR2YW5jZXNbaV0pOwotICAgICAgICBp
ZiAoaXNSVEwpCi0gICAgICAgICAgICBvZmZzZXRYIC09IGFkdmFuY2U7Ci0KLSAgICAgICAgbV9w
b3NpdGlvbnNbaV0uc2V0KG1fb2Zmc2V0WCArIChwb3NpdGlvbiAqIHJ0bEZsaXApICsgb2Zmc2V0
WCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhcnRpbmdZICsgb2Zmc2V0WSk7Ci0K
LSAgICAgICAgaWYgKG1fY3VycmVudEZvbnREYXRhLT5pc1plcm9XaWR0aFNwYWNlR2x5cGgobV9n
bHlwaHMxNltpXSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBBdCB0aGUg
ZW5kIG9mIGVhY2ggY2x1c3RlciwgYWRkIGluIHRoZSBsZXR0ZXIgc3BhY2luZy4KLSAgICAgICAg
aWYgKGkgKyAxID09IG1faXRlbS5udW1fZ2x5cGhzIHx8IG1faXRlbS5hdHRyaWJ1dGVzW2kgKyAx
XS5jbHVzdGVyU3RhcnQpCi0gICAgICAgICAgICBwb3NpdGlvbiArPSBtX2xldHRlclNwYWNpbmc7
Ci0KLSAgICAgICAgcG9zaXRpb24gKz0gYWR2YW5jZTsKLSAgICB9Ci0gICAgbV9waXhlbFdpZHRo
ID0gc3RkOjptYXgocG9zaXRpb24sIDAuMCk7Ci0gICAgbV9vZmZzZXRYICs9IG1fcGl4ZWxXaWR0
aCAqIHJ0bEZsaXA7Ci19Ci0KLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpub3JtYWxpemVT
cGFjZXNBbmRNaXJyb3JDaGFycyhjb25zdCBVQ2hhciogc291cmNlLCBib29sIHJ0bCwgVUNoYXIq
IGRlc3RpbmF0aW9uLCBpbnQgbGVuZ3RoKQotewotICAgIGludCBwb3NpdGlvbiA9IDA7Ci0gICAg
Ym9vbCBlcnJvciA9IGZhbHNlOwotICAgIC8vIEl0ZXJhdGUgY2hhcmFjdGVycyBpbiBzb3VyY2Ug
YW5kIG1pcnJvciBjaGFyYWN0ZXIgaWYgbmVlZGVkLgotICAgIHdoaWxlIChwb3NpdGlvbiA8IGxl
bmd0aCkgewotICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAgICAgICAgaW50IG5leHRQb3Np
dGlvbiA9IHBvc2l0aW9uOwotICAgICAgICBVMTZfTkVYVChzb3VyY2UsIG5leHRQb3NpdGlvbiwg
bGVuZ3RoLCBjaGFyYWN0ZXIpOwotICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJh
Y3RlcikpCi0gICAgICAgICAgICBjaGFyYWN0ZXIgPSAnICc7Ci0gICAgICAgIGVsc2UgaWYgKEZv
bnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIpKQotICAgICAgICAgICAgY2hhcmFj
dGVyID0gemVyb1dpZHRoU3BhY2U7Ci0gICAgICAgIGVsc2UgaWYgKHJ0bCkKLSAgICAgICAgICAg
IGNoYXJhY3RlciA9IHVfY2hhck1pcnJvcihjaGFyYWN0ZXIpOwotICAgICAgICBVMTZfQVBQRU5E
KGRlc3RpbmF0aW9uLCBwb3NpdGlvbiwgbGVuZ3RoLCBjaGFyYWN0ZXIsIGVycm9yKTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVycm9yKTsKLSAgICAgICAgcG9zaXRpb24gPSBuZXh0
UG9zaXRpb247Ci0gICAgfQotfQotCi1jb25zdCBUZXh0UnVuJiBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OmdldE5vcm1hbGl6ZWRUZXh0UnVuKGNvbnN0IFRleHRSdW4mIG9yaWdpbmFsUnVuLCBPd25Q
dHI8VGV4dFJ1bj4mIG5vcm1hbGl6ZWRSdW4sIE93bkFycmF5UHRyPFVDaGFyPiYgbm9ybWFsaXpl
ZEJ1ZmZlcikKLXsKLSAgICAvLyBOb3JtYWxpemUgdGhlIHRleHQgcnVuIGluIHRocmVlIHdheXM6
Ci0gICAgLy8gMSkgQ29udmVydCB0aGUgfG9yaWdpbmFsUnVufCB0byBORkMgbm9ybWFsaXplZCBm
b3JtIGlmIGNvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrcwotICAgIC8vIChVKzAzMDAuLikgYXJl
IHVzZWQgaW4gdGhlIHJ1bi4gVGhpcyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeSBzaW5jZSBtb3N0
IE9wZW5UeXBlCi0gICAgLy8gZm9udHMgKGUuZy4sIEFyaWFsKSBkb24ndCBoYXZlIHN1YnN0aXR1
dGlvbiBydWxlcyBmb3IgdGhlIGRpYWNyaXRpY2FsIG1hcmtzIGluCi0gICAgLy8gdGhlaXIgR1NV
QiB0YWJsZXMuCi0gICAgLy8KLSAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBpY3U6
Ok5vcm1hbGl6ZXI6OmlzTm9ybWFsaXplZChVTk9STV9ORkMpIEFQSSBoZXJlIHNpbmNlCi0gICAg
Ly8gdGhlIEFQSSByZXR1cm5zIEZBTFNFICg9IG5vdCBub3JtYWxpemVkKSBmb3IgY29tcGxleCBy
dW5zIHRoYXQgZG9uJ3QgcmVxdWlyZSBORkMKLSAgICAvLyBub3JtYWxpemF0aW9uIChlLmcuLCBB
cmFiaWMgdGV4dCkuIFVubGVzcyB0aGUgcnVuIGNvbnRhaW5zIHRoZSBkaWFjcml0aWNhbCBtYXJr
cywKLSAgICAvLyBIYXJmYnV6eiB3aWxsIGRvIHRoZSBzYW1lIHRoaW5nIGZvciB1cyB1c2luZyB0
aGUgR1NVQiB0YWJsZS4KLSAgICAvLyAyKSBDb252ZXJ0IHNwYWNpbmcgY2hhcmFjdGVycyBpbnRv
IHBsYWluIHNwYWNlcywgYXMgc29tZSBmb250cyB3aWxsIHByb3ZpZGUgZ2x5cGhzCi0gICAgLy8g
Zm9yIGNoYXJhY3RlcnMgbGlrZSAnXG4nIG90aGVyd2lzZS4KLSAgICAvLyAzKSBDb252ZXJ0IG1p
cnJvcmVkIGNoYXJhY3RlcnMgc3VjaCBhcyBwYXJlbnRoZXNpcyBmb3IgcnRsIHRleHQuCi0KLSAg
ICAvLyBDb252ZXJ0IHRvIE5GQyBmb3JtIGlmIHRoZSB0ZXh0IGhhcyBkaWFjcml0aWNhbCBtYXJr
cy4KLSAgICBpY3U6OlVuaWNvZGVTdHJpbmcgbm9ybWFsaXplZFN0cmluZzsKLSAgICBVRXJyb3JD
b2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcmln
aW5hbFJ1bi5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGNoID0gb3JpZ2luYWxSdW5b
aV07Ci0gICAgICAgIGlmICg6OnVibG9ja19nZXRDb2RlKGNoKSA9PSBVQkxPQ0tfQ09NQklOSU5H
X0RJQUNSSVRJQ0FMX01BUktTKSB7Ci0gICAgICAgICAgICBpY3U6Ok5vcm1hbGl6ZXI6Om5vcm1h
bGl6ZShpY3U6OlVuaWNvZGVTdHJpbmcob3JpZ2luYWxSdW4uY2hhcmFjdGVycygpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxSdW4ubGVuZ3RoKCkpLCBV
Tk9STV9ORkMsIDAgLyogbm8gb3B0aW9ucyAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vcm1hbGl6ZWRTdHJpbmcsIGVycm9yKTsKLSAgICAgICAgICAgIGlmIChV
X0ZBSUxVUkUoZXJyb3IpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFJ1bjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm9ybWFsaXplIHNw
YWNlIGFuZCBtaXJyb3IgcGFyZW50aGVzaXMgZm9yIHJ0bCB0ZXh0LgotICAgIGludCBub3JtYWxp
emVkQnVmZmVyTGVuZ3RoOwotICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VUZXh0OwotICAgIGlmIChu
b3JtYWxpemVkU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBub3JtYWxpemVkQnVmZmVyTGVu
Z3RoID0gb3JpZ2luYWxSdW4ubGVuZ3RoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBvcmlnaW5h
bFJ1bi5jaGFyYWN0ZXJzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbm9ybWFsaXplZEJ1ZmZl
ckxlbmd0aCA9IG5vcm1hbGl6ZWRTdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQg
PSBub3JtYWxpemVkU3RyaW5nLmdldEJ1ZmZlcigpOwotICAgIH0KLQotICAgIG5vcm1hbGl6ZWRC
dWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBVQ2hhcltub3JtYWxpemVkQnVmZmVyTGVuZ3RoICsg
MV0pOwotCi0gICAgbm9ybWFsaXplU3BhY2VzQW5kTWlycm9yQ2hhcnMoc291cmNlVGV4dCwgb3Jp
Z2luYWxSdW4ucnRsKCksIG5vcm1hbGl6ZWRCdWZmZXIuZ2V0KCksIG5vcm1hbGl6ZWRCdWZmZXJM
ZW5ndGgpOwotCi0gICAgbm9ybWFsaXplZFJ1biA9IGFkb3B0UHRyKG5ldyBUZXh0UnVuKG9yaWdp
bmFsUnVuKSk7Ci0gICAgbm9ybWFsaXplZFJ1bi0+c2V0VGV4dChub3JtYWxpemVkQnVmZmVyLmdl
dCgpLCBub3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsKLSAgICByZXR1cm4gKm5vcm1hbGl6ZWRSdW47
Ci19Ci0KLWludCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmdseXBoSW5kZXhGb3JYUG9zaXRpb25J
blNjcmlwdFJ1bihpbnQgdGFyZ2V0WCkgY29uc3QKLXsKLSAgICAvLyBJdGVyYXRlIHRocm91Z2gg
dGhlIGdseXBocyBpbiBsb2dpY2FsIG9yZGVyLCBzZWVpbmcgd2hldGhlciB0YXJnZXRYIGZhbGxz
IGJldHdlZW4gdGhlIHByZXZpb3VzCi0gICAgLy8gcG9zaXRpb24gYW5kIGhhbGZ3YXkgdGhyb3Vn
aCB0aGUgY3VycmVudCBnbHlwaC4KLSAgICAvLyBGSVhNRTogdGhpcyBjb2RlIHByb2JhYmx5IGJl
bG9uZ3MgaW4gQ29tcGxleFRleHRDb250cm9sbGVyLgotICAgIGludCBsYXN0WCA9IG9mZnNldFgo
KSAtIChydGwoKSA/IC1tX3BpeGVsV2lkdGggOiBtX3BpeGVsV2lkdGgpOwotICAgIGZvciAoaW50
IGdseXBoSW5kZXggPSAwOyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ2x5cGhJbmRleCkgPCBsZW5n
dGgoKTsgKytnbHlwaEluZGV4KSB7Ci0gICAgICAgIGludCBhZHZhbmNlID0gdHJ1bmNhdGVGaXhl
ZFBvaW50VG9JbnRlZ2VyKG1faXRlbS5hZHZhbmNlc1tnbHlwaEluZGV4XSk7Ci0gICAgICAgIGlu
dCBuZXh0WCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25zKClbZ2x5cGhJbmRleF0ueCgpKSAr
IGFkdmFuY2UgLyAyOwotICAgICAgICBpZiAoc3RkOjptaW4obmV4dFgsIGxhc3RYKSA8PSB0YXJn
ZXRYICYmIHRhcmdldFggPD0gc3RkOjptYXgobmV4dFgsIGxhc3RYKSkKLSAgICAgICAgICAgIHJl
dHVybiBnbHlwaEluZGV4OwotICAgICAgICBsYXN0WCA9IG5leHRYOwotICAgIH0KLQotICAgIHJl
dHVybiBsZW5ndGgoKSAtIDE7Ci19Ci0KLWludCBDb21wbGV4VGV4dENvbnRyb2xsZXI6Om9mZnNl
dEZvclBvc2l0aW9uKGludCB0YXJnZXRYKQotewotICAgIHVuc2lnbmVkIGJhc2VQb3NpdGlvbiA9
IDA7Ci0KLSAgICBpbnQgeCA9IG9mZnNldFgoKTsKLSAgICB3aGlsZSAobmV4dFNjcmlwdFJ1bigp
KSB7Ci0gICAgICAgIGludCBuZXh0WCA9IG9mZnNldFgoKTsKLQotICAgICAgICBpZiAoc3RkOjpt
aW4oeCwgbmV4dFgpIDw9IHRhcmdldFggJiYgdGFyZ2V0WCA8PSBzdGQ6Om1heCh4LCBuZXh0WCkp
IHsKLSAgICAgICAgICAgIC8vIFRoZSB4IHZhbHVlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiB0aGlz
IHNjcmlwdCBydW4uCi0gICAgICAgICAgICBjb25zdCBpbnQgZ2x5cGhJbmRleCA9IGdseXBoSW5k
ZXhGb3JYUG9zaXRpb25JblNjcmlwdFJ1bih0YXJnZXRYKTsKLQotICAgICAgICAgICAgLy8gTm93
IHRoYXQgd2UgaGF2ZSBhIGdseXBoIGluZGV4LCB3ZSBoYXZlIHRvIHR1cm4gdGhhdCBpbnRvIGEK
LSAgICAgICAgICAgIC8vIGNvZGUtcG9pbnQgaW5kZXguIEJlY2F1c2Ugb2YgbGlnYXR1cmVzLCBz
ZXZlcmFsIGNvZGUtcG9pbnRzIG1heQotICAgICAgICAgICAgLy8gaGF2ZSBnb25lIGludG8gYSBz
aW5nbGUgZ2x5cGguIFdlIGl0ZXJhdGUgb3ZlciB0aGUgY2x1c3RlcnMgbG9nCi0gICAgICAgICAg
ICAvLyBhbmQgZmluZCB0aGUgZmlyc3QgY29kZS1wb2ludCB3aGljaCBjb250cmlidXRlZCB0byB0
aGUgZ2x5cGguCi0KLSAgICAgICAgICAgIC8vIFNvbWUgc2hhcGVycyAoaS5lLiBLaG1lcikgd2ls
bCBwcm9kdWNlIGNsdXN0ZXIgbG9ncyB3aGljaCByZXBvcnQKLSAgICAgICAgICAgIC8vIHRoYXQg
L25vLyBjb2RlIHBvaW50cyBjb250cmlidXRlZCB0byBjZXJ0YWluIGdseXBocy4gQmVjYXVzZSBv
ZgotICAgICAgICAgICAgLy8gdGhpcywgd2UgdGFrZSBhbnkgY29kZSBwb2ludCB3aGljaCBjb250
cmlidXRlZCB0byB0aGUgZ2x5cGggaW4KLSAgICAgICAgICAgIC8vIHF1ZXN0aW9uLCBvciBhbnkg
c3Vic2VxdWVudCBnbHlwaC4gSWYgd2UgcnVuIG9mZiB0aGUgZW5kLCB0aGVuCi0gICAgICAgICAg
ICAvLyB3ZSB0YWtlIHRoZSBsYXN0IGNvZGUgcG9pbnQuCi0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgbnVtQ29kZVBvaW50cygpOyArK2opIHsKLSAgICAgICAgICAgICAgICBp
ZiAobV9pdGVtLmxvZ19jbHVzdGVyc1tqXSA+PSBnbHlwaEluZGV4KQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYmFzZVBvc2l0aW9uICsgajsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIGJhc2VQb3NpdGlvbiArIG51bUNvZGVQb2ludHMoKSAtIDE7Ci0gICAgICAgIH0K
LQotICAgICAgICBiYXNlUG9zaXRpb24gKz0gbnVtQ29kZVBvaW50cygpOwotICAgIH0KLQotICAg
IHJldHVybiBiYXNlUG9zaXRpb247Ci19Ci0KLUZsb2F0UmVjdCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsIGlu
dCBmcm9tLCBpbnQgdG8pCi17Ci0gICAgaW50IGZyb21YID0gLTEsIHRvWCA9IC0xOwotICAgIC8v
IEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2NyaXB0IHJ1bnMgaW4gbG9naWNhbCBvcmRlciwgc2VhcmNo
aW5nIGZvciB0aGUgcnVuIGNvdmVyaW5nIHRoZSBwb3NpdGlvbnMgb2YgaW50ZXJlc3QuCi0gICAg
d2hpbGUgKG5leHRTY3JpcHRSdW4oKSAmJiAoZnJvbVggPT0gLTEgfHwgdG9YID09IC0xKSkgewot
ICAgICAgICBpZiAoZnJvbVggPT0gLTEgJiYgZnJvbSA+PSAwICYmIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihmcm9tKSA8IG51bUNvZGVQb2ludHMoKSkgewotICAgICAgICAgICAgLy8gfGZyb218IGlz
IHdpdGhpbiB0aGlzIHNjcmlwdCBydW4uIFNvIHdlIGluZGV4IHRoZSBjbHVzdGVycyBsb2cgdG8K
LSAgICAgICAgICAgIC8vIGZpbmQgd2hpY2ggZ2x5cGggdGhpcyBjb2RlLXBvaW50IGNvbnRyaWJ1
dGVkIHRvIGFuZCBmaW5kIGl0cyB4Ci0gICAgICAgICAgICAvLyBwb3NpdGlvbi4KLSAgICAgICAg
ICAgIGludCBnbHlwaCA9IG1faXRlbS5sb2dfY2x1c3RlcnNbZnJvbV07Ci0gICAgICAgICAgICBm
cm9tWCA9IHBvc2l0aW9ucygpW2dseXBoXS54KCk7Ci0gICAgICAgICAgICBpZiAocnRsKCkpCi0g
ICAgICAgICAgICAgICAgZnJvbVggKz0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKG1faXRl
bS5hZHZhbmNlc1tnbHlwaF0pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGZyb20gLT0g
bnVtQ29kZVBvaW50cygpOwotCi0gICAgICAgIGlmICh0b1ggPT0gLTEgJiYgdG8gPj0gMCAmJiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odG8pIDwgbnVtQ29kZVBvaW50cygpKSB7Ci0gICAgICAgICAg
ICBpbnQgZ2x5cGggPSBtX2l0ZW0ubG9nX2NsdXN0ZXJzW3RvXTsKLSAgICAgICAgICAgIHRvWCA9
IHBvc2l0aW9ucygpW2dseXBoXS54KCk7Ci0gICAgICAgICAgICBpZiAocnRsKCkpCi0gICAgICAg
ICAgICAgICAgdG9YICs9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0uYWR2YW5j
ZXNbZ2x5cGhdKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0byAtPSBudW1Db2RlUG9p
bnRzKCk7Ci0gICAgfQotCi0gICAgLy8gVGhlIHBvc2l0aW9uIGluIHF1ZXN0aW9uIG1pZ2h0IGJl
IGp1c3QgYWZ0ZXIgdGhlIHRleHQuCi0gICAgaWYgKGZyb21YID09IC0xKQotICAgICAgICBmcm9t
WCA9IG9mZnNldFgoKTsKLSAgICBpZiAodG9YID09IC0xKQotICAgICAgICB0b1ggPSBvZmZzZXRY
KCk7Ci0KLSAgICBBU1NFUlQoZnJvbVggIT0gLTEgJiYgdG9YICE9IC0xKTsKLQotICAgIGlmIChm
cm9tWCA8IHRvWCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmcm9tWCwg
cG9pbnQueSgpLCB0b1ggLSBmcm9tWCwgaGVpZ2h0KTsKLQotICAgIHJldHVybiBGbG9hdFJlY3Qo
cG9pbnQueCgpICsgdG9YLCBwb2ludC55KCksIGZyb21YIC0gdG9YLCBoZWlnaHQpOwotfQotCi12
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2x5cGhzRm9yUmFuZ2UoaW50IGZyb20sIGludCB0
bywgaW50JiBmcm9tR2x5cGgsIGludCYgZ2x5cGhMZW5ndGgpCi17Ci0gICAgLy8gQ2hhcmFjdGVy
IG9mZnNldHMgd2l0aGluIHRoZSBjdXJyZW50IHJ1bi4gVEhFU0UgTUFZIE5PVCBCRSBJTiBSQU5H
RSBhbmQgbWF5Ci0gICAgLy8gYmUgbmVnYXRpdmUsIGV0Yy4gVGhlIGNvZGUgYmVsb3cgaGFuZGxl
cyB0aGlzLgotICAgIGludCBmcm9tQ2hhciA9IGZyb20gLSBtX2l0ZW0uaXRlbS5wb3M7Ci0gICAg
aW50IHRvQ2hhciA9IHRvIC0gbV9pdGVtLml0ZW0ucG9zOwotCi0gICAgLy8gU2VlIGlmIHRoZXJl
IGFyZSBhbnkgY2hhcmFjdGVycyBpbiB0aGUgY3VycmVudCBydW4uCi0gICAgaWYgKCFudW1Db2Rl
UG9pbnRzKCkgfHwgZnJvbUNoYXIgPj0gc3RhdGljX2Nhc3Q8aW50PihudW1Db2RlUG9pbnRzKCkp
IHx8IHRvQ2hhciA8PSAwKSB7Ci0gICAgICAgIGZyb21HbHlwaCA9IC0xOwotICAgICAgICBnbHlw
aExlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDb21wdXRlIHRo
ZSBzdGFydGluZyBnbHlwaCB3aXRoaW4gdGhpcyBzcGFuLiB8ZnJvbXwgYW5kIHx0b3wgYXJlCi0g
ICAgLy8gZ2xvYmFsIG9mZnNldHMgdGhhdCBtYXkgaW50ZXJzZWN0IGFyYml0cmFyaWx5IHdpdGgg
b3VyIGxvY2FsIHJ1bi4KLSAgICBmcm9tR2x5cGggPSBtX2l0ZW0ubG9nX2NsdXN0ZXJzW2Zyb21D
aGFyIDwgMCA/IDAgOiBmcm9tQ2hhcl07Ci0gICAgaWYgKHRvQ2hhciA+PSBzdGF0aWNfY2FzdDxp
bnQ+KG51bUNvZGVQb2ludHMoKSkpCi0gICAgICAgIGdseXBoTGVuZ3RoID0gbGVuZ3RoKCkgLSBm
cm9tR2x5cGg7Ci0gICAgZWxzZQotICAgICAgICBnbHlwaExlbmd0aCA9IG1faXRlbS5sb2dfY2x1
c3RlcnNbdG9DaGFyXSAtIGZyb21HbHlwaDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29t
cGxleFRleHRDb250cm9sbGVyTGludXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDFkM2VjOTVlZWUxMzc0ZTE1ZDM5ZTgyMWIwYzk5YmQzM2RhMDEzNjUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGlu
dXguaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChj
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb21wbGV4VGV4dENv
bnRyb2xsZXJMaW51eF9oCi0jZGVmaW5lIENvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4X2gKLQot
I2luY2x1ZGUgIkhhcmZidXp6U2tpYS5oIgotI2luY2x1ZGUgIlNrUG9pbnQuaCIKLSNpbmNsdWRl
ICJTa1NjYWxhci5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLQotZXh0ZXJuICJDIiB7Ci0jaW5j
bHVkZSAiaGFyZmJ1enotc2hhcGVyLmgiCi19Ci0KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+
Ci0jaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnQ7Ci1jbGFzcyBGb250UGxhdGZvcm1E
YXRhOwotY2xhc3MgU2ltcGxlRm9udERhdGE7Ci0KLS8vIENvbXBsZXhUZXh0Q29udHJvbGxlciB3
YWxrcyBhIFRleHRSdW4gYW5kIHByZXNlbnRzIGVhY2ggc2NyaXB0IHJ1biBpbiBzZXF1ZW5jZS4g
QQotLy8gVGV4dFJ1biBpcyBhIHNlcXVlbmNlIG9mIGNvZGUtcG9pbnRzIHdpdGggdGhlIHNhbWUg
ZW1iZWRkaW5nIGxldmVsIChpLmUuIHRoZXkKLS8vIGFyZSBhbGwgbGVmdC10by1yaWdodCBvciBy
aWdodC10by1sZWZ0KS4gQSBzY3JpcHQgcnVuIGlzIGEgc3Vic2VxdWVuY2Ugd2hlcmUKLS8vIGFs
bCB0aGUgY2hhcmFjdGVycyBoYXZlIHRoZSBzYW1lIHNjcmlwdCAoZS5nLiBBcmFiaWMsIFRoYWkg
ZXRjKS4gU2hhcGluZyBpcwotLy8gb25seSBldmVyIGRvbmUgd2l0aCBzY3JpcHQgcnVucyBzaW5j
ZSB0aGUgc2hhcGVycyBvbmx5IGtub3cgaG93IHRvIGRlYWwgd2l0aAotLy8gYSBzaW5nbGUgc2Ny
aXB0LgotLy8KLS8vIEl0ZXJhdGlvbiBpcyBhbHdheXMgaW4gbG9naWNhbCAoYWthIHJlYWRpbmcp
IG9yZGVyLiAgRm9yIFJUTCB0ZXh0IHRoYXQgbWVhbnMKLS8vIHRoZSByaWdodG1vc3QgcGFydCBv
ZiB0aGUgdGV4dCB3aWxsIGJlIGZpcnN0LgotLy8KLS8vIE9uY2UgeW91IGhhdmUgc2V0dXAgdGhl
IG9iamVjdCwgY2FsbCB8bmV4dFNjcmlwdFJ1bnwgdG8gZ2V0IHRoZSBmaXJzdCBzY3JpcHQKLS8v
IHJ1bi4gVGhpcyB3aWxsIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpdGVyYXRpb24gaXMgY29tcGxl
dGUuIEF0IGFueSB0aW1lIHlvdQotLy8gY2FuIGNhbGwgfHJlc2V0fCB0byBzdGFydCBvdmVyIGFn
YWluLgotY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyIHsKLXB1YmxpYzoKLSAgICBDb21wbGV4
VGV4dENvbnRyb2xsZXIoY29uc3QgVGV4dFJ1biYsIGludCBzdGFydGluZ1gsIGludCBzdGFydGlu
Z1ksIHVuc2lnbmVkIHdvcmRTcGFjaW5nLCB1bnNpZ25lZCBsZXR0ZXJTcGFjaW5nLCB1bnNpZ25l
ZCBwYWRkaW5nLCBjb25zdCBGb250Kik7Ci0gICAgfkNvbXBsZXhUZXh0Q29udHJvbGxlcigpOwot
Ci0gICAgYm9vbCBpc1dvcmRCcmVhayh1bnNpZ25lZCk7Ci0gICAgaW50IGRldGVybWluZVdvcmRC
cmVha1NwYWNpbmcodW5zaWduZWQpOwotICAgIC8vIHNldFBhZGRpbmcgc2V0cyBhIG51bWJlciBv
ZiBwaXhlbHMgdG8gYmUgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBUZXh0UnVuLgotICAgIC8vIFdl
YktpdCB1c2VzIHRoaXMgdG8ganVzdGlmeSB0ZXh0LgotICAgIHZvaWQgc2V0UGFkZGluZyhpbnQp
OwotICAgIHZvaWQgcmVzZXQoaW50IG9mZnNldCk7Ci0gICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4
dCBzY3JpcHQgcnVuLCByZXR1cm5pbmcgZmFsc2Ugd2hlbiB0aGUgZW5kIG9mIHRoZQotICAgIC8v
IFRleHRSdW4gaGFzIGJlZW4gcmVhY2hlZC4KLSAgICBib29sIG5leHRTY3JpcHRSdW4oKTsKLSAg
ICBmbG9hdCB3aWR0aE9mRnVsbFJ1bigpOwotCi0gICAgLy8gc2V0V29yZFNwYWNpbmdBZGp1c3Rt
ZW50IHNldHMgYSBkZWx0YSAoaW4gcGl4ZWxzKSB3aGljaCBpcyBhcHBsaWVkIGF0Ci0gICAgLy8g
ZWFjaCB3b3JkIGJyZWFrIGluIHRoZSBUZXh0UnVuLgotICAgIHZvaWQgc2V0V29yZFNwYWNpbmdB
ZGp1c3RtZW50KGludCB3b3JkU3BhY2luZ0FkanVzdG1lbnQpIHsgbV93b3JkU3BhY2luZ0FkanVz
dG1lbnQgPSB3b3JkU3BhY2luZ0FkanVzdG1lbnQ7IH0KLQotICAgIC8vIHNldExldHRlclNwYWNp
bmdBZGp1c3RtZW50IHNldHMgYW4gYWRkaXRpb25hbCBudW1iZXIgb2YgcGl4ZWxzIHRoYXQgaXMK
LSAgICAvLyBhZGRlZCB0byB0aGUgYWR2YW5jZSBhZnRlciBlYWNoIG91dHB1dCBjbHVzdGVyLiBU
aGlzIG1hdGNoZXMgdGhlIGJlaGF2aW91cgotICAgIC8vIG9mIFdpZHRoSXRlcmF0b3I6OmFkdmFu
Y2UuCi0gICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5nQWRqdXN0bWVudChpbnQgbGV0dGVyU3BhY2lu
Z0FkanVzdG1lbnQpIHsgbV9sZXR0ZXJTcGFjaW5nID0gbGV0dGVyU3BhY2luZ0FkanVzdG1lbnQ7
IH0KLSAgICBpbnQgbGV0dGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fbGV0dGVyU3BhY2lu
ZzsgfQotCi0gICAgdm9pZCBzZXR1cEZvclJUTCgpOwotICAgIGJvb2wgcnRsKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydW4ucnRsKCk7IH0KLSAgICBjb25zdCB1aW50MTZfdCogZ2x5cGhzKCkgY29uc3Qg
eyByZXR1cm4gbV9nbHlwaHMxNjsgfQotCi0gICAgLy8gUmV0dXJuIHRoZSBzdGFydCBpbmRleCBh
bmQgbGVuZ3RoIG9mIGdseXBocyBmb3IgdGhlIHJhbmdlIFtmcm9tLCB0bykgaW4gdGhlIGN1cnJl
bnQgc2NyaXB0IHJ1bi4KLSAgICB2b2lkIGdseXBoc0ZvclJhbmdlKGludCBmcm9tLCBpbnQgdG8s
IGludCYgZnJvbUdseXBoLCBpbnQmIGdseXBoTGVuZ3RoKTsKLQotICAgIC8vIFJldHVybiB0aGUg
bGVuZ3RoIG9mIHRoZSBhcnJheSByZXR1cm5lZCBieSB8Z2x5cGhzfAotICAgIGNvbnN0IHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS5udW1fZ2x5cGhzOyB9Ci0KLSAgICAv
LyBSZXR1cm4gdGhlIG9mZnNldCBmb3IgZWFjaCBvZiB0aGUgZ2x5cGhzLiBOb3RlIHRoYXQgdGhp
cyBpcyB0cmFuc2xhdGVkCi0gICAgLy8gYnkgdGhlIGN1cnJlbnQgeCBvZmZzZXQgYW5kIHRoYXQg
dGhlIHggb2Zmc2V0IGlzIHVwZGF0ZWQgZm9yIGVhY2ggc2NyaXB0Ci0gICAgLy8gcnVuLgotICAg
IGNvbnN0IFNrUG9pbnQqIHBvc2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb25zOyB9
Ci0KLSAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiB0aGUgY3VycmVu
dCBzY3JpcHQgcnVuCi0gICAgY29uc3QgdW5zaWduZWQgbnVtQ29kZVBvaW50cygpIGNvbnN0IHsg
cmV0dXJuIG1faXRlbS5pdGVtLmxlbmd0aDsgfQotCi0gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50
IHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBjb250cm9sbGVyLgotICAgIGNvbnN0IHVuc2lnbmVkIG9m
ZnNldFgoKSBjb25zdCB7IHJldHVybiBtX29mZnNldFg7IH0KLQotICAgIGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEqIGZvbnRQbGF0Zm9ybURhdGFGb3JTY3JpcHRSdW4oKSB7IHJldHVybiByZWludGVy
cHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihtX2l0ZW0uZm9udC0+dXNlckRhdGEpOyB9Ci0K
LSAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oaW50KTsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9u
UmVjdChjb25zdCBGbG9hdFBvaW50JiwgaW50IGhlaWdodCwgaW50IGZyb20gLCBpbnQgdG8pOwot
Ci1wcml2YXRlOgotICAgIC8vIFJldHVybiB0aGUgd2lkdGggKGluIHB4KSBvZiB0aGUgY3VycmVu
dCBzY3JpcHQgcnVuLgotICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9waXhl
bFdpZHRoOyB9Ci0KLSAgICB2b2lkIHNldHVwRm9udEZvclNjcmlwdFJ1bigpOwotICAgIHZvaWQg
ZGVsZXRlR2x5cGhBcnJheXMoKTsKLSAgICB2b2lkIGNyZWF0ZUdseXBoQXJyYXlzKGludCk7Ci0g
ICAgdm9pZCByZXNldEdseXBoQXJyYXlzKCk7Ci0gICAgdm9pZCBzaGFwZUdseXBocygpOwotICAg
IHZvaWQgc2V0R2x5cGhQb3NpdGlvbnMoYm9vbCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBub3JtYWxp
emVTcGFjZXNBbmRNaXJyb3JDaGFycyhjb25zdCBVQ2hhciogc291cmNlLCBib29sIHJ0bCwgVUNo
YXIqIGRlc3RpbmF0aW9uLCBpbnQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgY29uc3QgVGV4dFJ1biYg
Z2V0Tm9ybWFsaXplZFRleHRSdW4oY29uc3QgVGV4dFJ1biYgb3JpZ2luYWxSdW4sIE93blB0cjxU
ZXh0UnVuPiYgbm9ybWFsaXplZFJ1biwgT3duQXJyYXlQdHI8VUNoYXI+JiBub3JtYWxpemVkQnVm
ZmVyKTsKLQotICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgbG9naWMgaW4gUmVuZGVyQmxvY2s6OmZp
bmROZXh0TGluZUJyZWFrCi0gICAgc3RhdGljIGJvb2wgaXNDb2RlcG9pbnRTcGFjZShIQl9VQ2hh
cjE2IGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JzsgfQotCi0gICAgaW50IGdseXBo
SW5kZXhGb3JYUG9zaXRpb25JblNjcmlwdFJ1bihpbnQgdGFyZ2V0WCkgY29uc3Q7Ci0KLSAgICBj
b25zdCBGb250KiBjb25zdCBtX2ZvbnQ7Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fY3Vy
cmVudEZvbnREYXRhOwotICAgIEhCX1NoYXBlckl0ZW0gbV9pdGVtOwotICAgIHVpbnQxNl90KiBt
X2dseXBoczE2OyAvLyBBIHZlY3RvciBvZiAxNi1iaXQgZ2x5cGggaWRzLgotICAgIFNrUG9pbnQq
IG1fcG9zaXRpb25zOyAvLyBBIHZlY3RvciBvZiBwb3NpdGlvbnMgZm9yIGVhY2ggZ2x5cGguCi0g
ICAgc3NpemVfdCBtX2luZGV4T2ZOZXh0U2NyaXB0UnVuOyAvLyBJbmRleGVzIHRoZSBzY3JpcHQg
cnVuIGluIHxtX3J1bnwuCi0gICAgaW50IG1fb2Zmc2V0WDsgLy8gT2Zmc2V0IGluIHBpeGVscyB0
byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc2NyaXB0IHJ1bi4KLSAgICBpbnQgbV9zdGFydGluZ1k7
IC8vIFRoZSBZIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBzY3JpcHQgcnVuLgotICAgIHVuc2lnbmVk
IG1fcGl4ZWxXaWR0aDsgLy8gV2lkdGggKGluIHB4KSBvZiB0aGUgY3VycmVudCBzY3JpcHQgcnVu
LgotICAgIHVuc2lnbmVkIG1fZ2x5cGhzQXJyYXlDYXBhY2l0eTsgLy8gQ3VycmVudCBzaXplIG9m
IGFsbCB0aGUgSGFyZmJ1enogYXJyYXlzLgotCi0gICAgT3duUHRyPFRleHRSdW4+IG1fbm9ybWFs
aXplZFJ1bjsKLSAgICBPd25BcnJheVB0cjxVQ2hhcj4gbV9ub3JtYWxpemVkQnVmZmVyOyAvLyBB
IGJ1ZmZlciBmb3Igbm9ybWFsaXplZCBydW4uCi0gICAgY29uc3QgVGV4dFJ1biYgbV9ydW47Ci0g
ICAgaW50IG1fd29yZFNwYWNpbmdBZGp1c3RtZW50OyAvLyBkZWx0YSBhZGp1c3RtZW50IChwaXhl
bHMpIGZvciBlYWNoIHdvcmQgYnJlYWsuCi0gICAgZmxvYXQgbV9wYWRkaW5nOyAvLyBwaXhlbHMg
dG8gYmUgZGlzdHJpYnV0ZWQgb3ZlciB0aGUgbGluZSBhdCB3b3JkIGJyZWFrcy4KLSAgICBmbG9h
dCBtX3BhZFBlcldvcmRCcmVhazsgLy8gcGl4ZWxzIHRvIGJlIGFkZGVkIHRvIGVhY2ggd29yZCBi
cmVhay4KLSAgICBmbG9hdCBtX3BhZEVycm9yOyAvLyB8bV9wYWRQZXJXb3JkQnJlYWt8IG1pZ2h0
IGhhdmUgYSBmcmFjdGlvbmFsIGNvbXBvbmVudC4KLSAgICAgICAgICAgICAgICAgICAgICAvLyBT
aW5jZSB3ZSBvbmx5IGFkZCBhIHdob2xlIG51bWJlciBvZiBwYWRkaW5nIHBpeGVscyBhdAotICAg
ICAgICAgICAgICAgICAgICAgIC8vIGVhY2ggd29yZCBicmVhayB3ZSBhY2N1bXVsYXRlIGVycm9y
LiBUaGlzIGlzIHRoZQotICAgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciBvZiBwaXhlbHMg
dGhhdCB3ZSBhcmUgYmVoaW5kIHNvIGZhci4KLSAgICBpbnQgbV9sZXR0ZXJTcGFjaW5nOyAvLyBw
aXhlbHMgdG8gYmUgYWRkZWQgYWZ0ZXIgZWFjaCBnbHlwaC4KLSAgICBTdHJpbmcgbV9zbWFsbENh
cHNTdHJpbmc7IC8vIHN1YnN0cmluZyBvZiBtX3J1biBjb252ZXJ0ZWQgdG8gc21hbGwgY2Fwcy4K
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENvbXBsZXhUZXh0Q29u
dHJvbGxlckxpbnV4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjdhZmQ4NDU4MDk2MGU0NTllNmM5MDQ3OTUyYmVlMmI1NGQ2OTE3Yy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNs
dWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0j
aW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdXBwb3J0LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotI2lu
Y2x1ZGUgIlNrUGFpbnQuaCIKLSNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAiU2tV
dGlscy5oIgotCi0jaW5jbHVkZSA8dW5pY29kZS9sb2NpZC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udENh
Y2hlOjpwbGF0Zm9ybUluaXQoKQotewotfQotCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENh
Y2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoKQotewotICAgIGljdTo6TG9jYWxlIGxvY2Fs
ZSA9IGljdTo6TG9jYWxlOjpnZXREZWZhdWx0KCk7Ci0gICAgUGxhdGZvcm1TdXBwb3J0OjpGb250
RmFtaWx5IGZhbWlseTsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6OmdldEZvbnRGYW1pbHlGb3JDaGFy
YWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCwgbG9jYWxlLmdldExhbmd1YWdlKCksICZmYW1pbHkp
OwotICAgIGlmIChmYW1pbHkubmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgQXRvbWljU3RyaW5nIGF0b21pY0ZhbWlseShmYW1pbHkubmFtZSk7Ci0gICAgLy8gQ2hhbmdl
cyB3ZWlnaHQgYW5kL29yIGl0YWxpYyBvZiBnaXZlbiBGb250RGVzY3JpcHRpb24gZGVwZW5kcyBv
bgotICAgIC8vIHRoZSByZXN1bHQgb2YgZm9udGNvbmZpZyBzbyB0aGF0IGtlZXBpbmcgdGhlIGNv
cnJlY3QgZm9udCBtYXBwaW5nCi0gICAgLy8gb2YgdGhlIGdpdmVuIGNoYXJhY3RlcnMuIFNlZSBo
dHRwOi8vY3JidWcuY29tLzMyMTA5IGZvciBkZXRhaWxzLgotICAgIGJvb2wgc2hvdWxkU2V0RmFr
ZUJvbGQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZFNldEZha2VJdGFsaWMgPSBmYWxzZTsKLSAg
ICBGb250RGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZm9udC5mb250RGVzY3JpcHRpb24oKSk7Ci0g
ICAgaWYgKGZhbWlseS5pc0JvbGQgJiYgZGVzY3JpcHRpb24ud2VpZ2h0KCkgPCBGb250V2VpZ2h0
Qm9sZCkKLSAgICAgICAgZGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHRCb2xkKTsKLSAg
ICBpZiAoIWZhbWlseS5pc0JvbGQgJiYgZGVzY3JpcHRpb24ud2VpZ2h0KCkgPj0gRm9udFdlaWdo
dEJvbGQpIHsKLSAgICAgICAgc2hvdWxkU2V0RmFrZUJvbGQgPSB0cnVlOwotICAgICAgICBkZXNj
cmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgfQotICAgIGlmIChmYW1p
bHkuaXNJdGFsaWMgJiYgZGVzY3JpcHRpb24uaXRhbGljKCkgPT0gRm9udEl0YWxpY09mZikKLSAg
ICAgICAgZGVzY3JpcHRpb24uc2V0SXRhbGljKEZvbnRJdGFsaWNPbik7Ci0gICAgaWYgKCFmYW1p
bHkuaXNJdGFsaWMgJiYgZGVzY3JpcHRpb24uaXRhbGljKCkgPT0gRm9udEl0YWxpY09uKSB7Ci0g
ICAgICAgIHNob3VsZFNldEZha2VJdGFsaWMgPSB0cnVlOwotICAgICAgICBkZXNjcmlwdGlvbi5z
ZXRJdGFsaWMoRm9udEl0YWxpY09mZik7Ci0gICAgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YSBw
bGF0Zm9ybURhdGEgPSBGb250UGxhdGZvcm1EYXRhKCpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGRlc2NyaXB0aW9uLCBhdG9taWNGYW1pbHksIERvTm90UmV0YWluKSk7Ci0gICAgcGxhdGZvcm1E
YXRhLnNldEZha2VCb2xkKHNob3VsZFNldEZha2VCb2xkKTsKLSAgICBwbGF0Zm9ybURhdGEuc2V0
RmFrZUl0YWxpYyhzaG91bGRTZXRGYWtlSXRhbGljKTsKLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9u
dERhdGEoJnBsYXRmb3JtRGF0YSwgRG9Ob3RSZXRhaW4pOwotfQotCi1TaW1wbGVGb250RGF0YSog
Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQot
ewotICAgIHJldHVybiAwOwotfQotCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIFNo
b3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIHNhbnNTdHIsICgiU2FucyIpKTsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IEF0b21pY1N0cmluZywgc2VyaWZTdHIsICgiU2VyaWYiKSk7Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIG1vbm9zcGFjZVN0ciwgKCJNb25vc3Bh
Y2UiKSk7Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhID0gMDsKLSAg
ICBzd2l0Y2ggKGRlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSkgewotICAgIGNhc2UgRm9udERl
c2NyaXB0aW9uOjpTZXJpZkZhbWlseToKLSAgICAgICAgZm9udFBsYXRmb3JtRGF0YSA9IGdldENh
Y2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIHNlcmlmU3RyKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKLSAgICAgICAg
Zm9udFBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24s
IG1vbm9zcGFjZVN0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9u
OjpTYW5zU2VyaWZGYW1pbHk6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZm9udFBsYXRmb3JtRGF0
YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIHNhbnNTdHIpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZm9udFBsYXRmb3JtRGF0YSk7Ci0gICAg
cmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGZvbnRQbGF0Zm9ybURhdGEsIHNob3VsZFJldGFpbik7
Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
Rm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
KQotewotICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAwOwotICAgIENTdHJpbmcgczsKLQotICAgIC8v
IElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtpdC1tb25vc3Bh
Y2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRvCi0gICAgLy8gdGhlIGZhbGxiYWNrIG5hbWUgKGxp
a2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KLSAgICBpZiAoIWZh
bWlseS5sZW5ndGgoKSB8fCBmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkgewotICAgICAg
ICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6R2Vu
ZXJpY0ZhbWlseVR5cGUgbVR5cGU7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBtTmFtZTsKLSAg
ICAgICAgfSBmb250RGVzY3JpcHRpb25zW10gPSB7Ci0gICAgICAgICAgICB7IEZvbnREZXNjcmlw
dGlvbjo6U2VyaWZGYW1pbHksICJzZXJpZiIgfSwKLSAgICAgICAgICAgIHsgRm9udERlc2NyaXB0
aW9uOjpTYW5zU2VyaWZGYW1pbHksICJzYW5zLXNlcmlmIiB9LAotICAgICAgICAgICAgeyBGb250
RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSwgIm1vbm9zcGFjZSIgfSwKLSAgICAgICAgICAg
IHsgRm9udERlc2NyaXB0aW9uOjpDdXJzaXZlRmFtaWx5LCAiY3Vyc2l2ZSIgfSwKLSAgICAgICAg
ICAgIHsgRm9udERlc2NyaXB0aW9uOjpGYW50YXN5RmFtaWx5LCAiZmFudGFzeSIgfQotICAgICAg
ICB9OwotCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbjo6R2VuZXJpY0ZhbWlseVR5cGUgdHlwZSA9
IGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBTS19BUlJBWV9DT1VOVChmb250RGVzY3JpcHRpb25zKTsgaSsrKSB7Ci0gICAg
ICAgICAgICBpZiAodHlwZSA9PSBmb250RGVzY3JpcHRpb25zW2ldLm1UeXBlKSB7Ci0gICAgICAg
ICAgICAgICAgbmFtZSA9IGZvbnREZXNjcmlwdGlvbnNbaV0ubU5hbWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFuYW1lKQot
ICAgICAgICAgICAgbmFtZSA9ICIiOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIGNvbnZlcnQg
dGhlIG5hbWUgdG8gdXRmOAotICAgICAgICBzID0gZmFtaWx5LnN0cmluZygpLnV0ZjgoKTsKLSAg
ICAgICAgbmFtZSA9IHMuZGF0YSgpOwotICAgIH0KLQotICAgIGludCBzdHlsZSA9IFNrVHlwZWZh
Y2U6OmtOb3JtYWw7Ci0gICAgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2Vp
Z2h0Qm9sZCkKLSAgICAgICAgc3R5bGUgfD0gU2tUeXBlZmFjZTo6a0JvbGQ7Ci0gICAgaWYgKGZv
bnREZXNjcmlwdGlvbi5pdGFsaWMoKSkKLSAgICAgICAgc3R5bGUgfD0gU2tUeXBlZmFjZTo6a0l0
YWxpYzsKLQotICAgIFNrVHlwZWZhY2UqIHRmID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbU5hbWUo
bmFtZSwgc3RhdGljX2Nhc3Q8U2tUeXBlZmFjZTo6U3R5bGU+KHN0eWxlKSk7Ci0gICAgaWYgKCF0
ZikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPQot
ICAgICAgICBuZXcgRm9udFBsYXRmb3JtRGF0YSh0ZiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkU2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUgJiBT
a1R5cGVmYWNlOjprQm9sZCkgJiYgIXRmLT5pc0JvbGQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHN0eWxlICYgU2tUeXBlZmFjZTo6a0l0YWxpYykgJiYgIXRmLT5pc0l0YWxpYygp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50YXRp
b24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnRleHRP
cmllbnRhdGlvbigpKTsKLSAgICB0Zi0+dW5yZWYoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDkyNjU1ZDgyM2FlYTk4OTE3NWE2MmM0NjYwOWI3OTNjNzc4MTgwNTEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4LCAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4Lmgi
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIYXJmYnV6elNraWEuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIK
LSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAiU2tDYW52YXMuaCIKLSNp
bmNsdWRlICJTa1BhaW50LmgiCi0jaW5jbHVkZSAiU2tUZW1wbGF0ZXMuaCIKLSNpbmNsdWRlICJT
a1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAiU2tVdGlscy5oIgotCi0jaW5jbHVkZSA8d3RmL3VuaWNv
ZGUvVW5pY29kZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgRm9udDo6Y2FuUmV0
dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQot
ewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgaXNDYW52YXNNdWx0aUxheWVy
ZWQoU2tDYW52YXMqIGNhbnZhcykKLXsKLSAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGxheWVySXRl
cmF0b3IoY2FudmFzLCBmYWxzZSk7Ci0gICAgbGF5ZXJJdGVyYXRvci5uZXh0KCk7Ci0gICAgcmV0
dXJuICFsYXllckl0ZXJhdG9yLmRvbmUoKTsKLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0VGV4dFJl
bmRlck1vZGUoU2tQYWludCogcGFpbnQsIFBsYXRmb3JtQ29udGV4dFNraWEqIHNraWFDb250ZXh0
KQotewotICAgIC8vIE91ciBsYXllcnMgb25seSBoYXZlIGEgc2luZ2xlIGFscGhhIGNoYW5uZWwu
IFRoaXMgbWVhbnMgdGhhdCBzdWJwaXhlbAotICAgIC8vIHJlbmRlcmVkIHRleHQgY2Fubm90IGJl
IGNvbXBvc2l0aWVkIGNvcnJlY3RseSB3aGVuIHRoZSBsYXllciBpcwotICAgIC8vIGNvbGxhcHNl
ZC4gVGhlcmVmb3JlLCBzdWJwaXhlbCB0ZXh0IGlzIGRpc2FibGVkIHdoZW4gd2UgYXJlIGRyYXdp
bmcKLSAgICAvLyBvbnRvIGEgbGF5ZXIgb3Igd2hlbiB0aGUgY29tcG9zaXRvciBpcyBiZWluZyB1
c2VkLgotICAgIGlmIChpc0NhbnZhc011bHRpTGF5ZXJlZChza2lhQ29udGV4dC0+Y2FudmFzKCkp
IHx8IHNraWFDb250ZXh0LT5pc0RyYXdpbmdUb0ltYWdlQnVmZmVyKCkpCi0gICAgICAgIHBhaW50
LT5zZXRMQ0RSZW5kZXJUZXh0KGZhbHNlKTsKLX0KLQotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAotICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KSBjb25zdCB7Ci0gICAgU2tBU1NFUlQoc2l6ZW9mKEdseXBoQnVmZmVyR2x5cGgpID09IHNp
emVvZih1aW50MTZfdCkpOyAvLyBjb21waWxlLXRpbWUgYXNzZXJ0Ci0KLSAgICBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSk7Ci0gICAgU2tT
Y2FsYXIgeCA9IFNrRmxvYXRUb1NjYWxhcihwb2ludC54KCkpOwotICAgIFNrU2NhbGFyIHkgPSBT
a0Zsb2F0VG9TY2FsYXIocG9pbnQueSgpKTsKLQotICAgIC8vIEZJWE1FOiB0ZXh0IHJlbmRlcmlu
ZyBzcGVlZDoKLSAgICAvLyBBbmRyb2lkIGhhcyBjb2RlIGluIHRoZWlyIFdlYkNvcmUgZm9yayB0
byBzcGVjaWFsIGNhc2Ugd2hlbiB0aGUKLSAgICAvLyBHbHlwaEJ1ZmZlciBoYXMgbm8gYWR2YW5j
ZXMgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdHMuIEluIHRoYXQgY2FzZSB0aGUKLSAgICAvLyB0ZXh0
IGRyYXdpbmcgY2FuIHByb2NlZWQgZmFzdGVyLiBIb3dldmVyLCBpdCdzIHVuY2xlYXIgd2hlbiB0
aG9zZQotICAgIC8vIHBhdGNoZXMgbWF5IGJlIHVwc3RyZWFtZWQgdG8gV2ViS2l0IHNvIHdlIGFs
d2F5cyB1c2UgdGhlIHNsb3dlciBwYXRoCi0gICAgLy8gaGVyZS4KLSAgICBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdiA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pOwotICAgIFNrQXV0
b1NUTWFsbG9jPDMyLCBTa1BvaW50PiBzdG9yYWdlKG51bUdseXBocyksIHN0b3JhZ2UyKG51bUds
eXBocyksIHN0b3JhZ2UzKG51bUdseXBocyk7Ci0gICAgU2tQb2ludCogcG9zID0gc3RvcmFnZS5n
ZXQoKTsKLSAgICBTa1BvaW50KiB2UG9zQmVnaW4gPSBzdG9yYWdlMi5nZXQoKTsKLSAgICBTa1Bv
aW50KiB2UG9zRW5kID0gc3RvcmFnZTMuZ2V0KCk7Ci0KLSAgICBib29sIGlzVmVydGljYWwgPSBm
b250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyBpKyspIHsKLSAgICAgICAgU2tTY2FsYXIgbXlXaWR0
aCA9IFNrRmxvYXRUb1NjYWxhcihhZHZbaV0ud2lkdGgoKSk7Ci0gICAgICAgIHBvc1tpXS5zZXQo
eCwgeSk7Ci0gICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7Ci0gICAgICAgICAgICB2UG9zQmVnaW5b
aV0uc2V0KHggKyBteVdpZHRoLCB5KTsKLSAgICAgICAgICAgIHZQb3NFbmRbaV0uc2V0KHggKyBt
eVdpZHRoLCB5IC0gbXlXaWR0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgeCArPSBteVdpZHRoOwot
ICAgICAgICB5ICs9IFNrRmxvYXRUb1NjYWxhcihhZHZbaV0uaGVpZ2h0KCkpOwotICAgIH0KLQot
ICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwot
ICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRNb2RlID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgp
LT5nZXRUZXh0RHJhd2luZ01vZGUoKTsKLQotICAgIC8vIFdlIGRyYXcgdGV4dCB1cCB0byB0d28g
dGltZXMgKG9uY2UgZm9yIGZpbGwsIG9uY2UgZm9yIHN0cm9rZSkuCi0gICAgaWYgKHRleHRNb2Rl
ICYgVGV4dE1vZGVGaWxsKSB7Ci0gICAgICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgICAgIGdjLT5w
bGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKLSAgICAgICAg
Zm9udC0+cGxhdGZvcm1EYXRhKCkuc2V0dXBQYWludCgmcGFpbnQpOwotICAgICAgICBhZGp1c3RU
ZXh0UmVuZGVyTW9kZSgmcGFpbnQsIGdjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIHBh
aW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotCi0g
ICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7Ci0gICAgICAgICAgICBTa1BhdGggcGF0aDsKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBwYXRoLnJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgcGF0aC5tb3ZlVG8odlBvc0JlZ2lu
W2ldKTsKLSAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyh2UG9zRW5kW2ldKTsKLSAgICAgICAg
ICAgICAgICBjYW52YXMtPmRyYXdUZXh0T25QYXRoKGdseXBocyArIGksIDIsIHBhdGgsIDAsIHBh
aW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYW52YXMt
PmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzIDw8IDEsIHBvcywgcGFpbnQpOwotICAgIH0K
LQotICAgIGlmICgodGV4dE1vZGUgJiBUZXh0TW9kZVN0cm9rZSkKLSAgICAgICAgJiYgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlCi0gICAgICAgICYm
IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0U3Ryb2tlVGhpY2tuZXNzKCkgPiAwKSB7Ci0KLSAg
ICAgICAgU2tQYWludCBwYWludDsKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXR1
cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsKLSAgICAgICAgZm9udC0+cGxhdGZvcm1E
YXRhKCkuc2V0dXBQYWludCgmcGFpbnQpOwotICAgICAgICBhZGp1c3RUZXh0UmVuZGVyTW9kZSgm
cGFpbnQsIGdjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIHBhaW50LnNldFRleHRFbmNv
ZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotCi0gICAgICAgIGlmICh0ZXh0
TW9kZSAmIFRleHRNb2RlRmlsbCkgewotICAgICAgICAgICAgLy8gSWYgd2UgYWxzbyBmaWxsZWQs
IHdlIGRvbid0IHdhbnQgdG8gZHJhdyBzaGFkb3dzIHR3aWNlLgotICAgICAgICAgICAgLy8gU2Vl
IGNvbW1lbnQgaW4gRm9udENocm9taXVtV2luLmNwcDo6cGFpbnRTa2lhVGV4dCgpIGZvciBtb3Jl
IGRldGFpbHMuCi0gICAgICAgICAgICAvLyBTaW5jZSB3ZSB1c2UgdGhlIGxvb3BlciBmb3Igc2hh
ZG93cywgd2UgcmVtb3ZlIGl0IChpZiBhbnkpIG5vdy4KLSAgICAgICAgICAgIHBhaW50LnNldExv
b3BlcigwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7Ci0gICAgICAg
ICAgICBTa1BhdGggcGF0aDsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5
cGhzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBwYXRoLnJlc2V0KCk7Ci0gICAgICAgICAgICAg
ICAgcGF0aC5tb3ZlVG8odlBvc0JlZ2luW2ldKTsKLSAgICAgICAgICAgICAgICBwYXRoLmxpbmVU
byh2UG9zRW5kW2ldKTsKLSAgICAgICAgICAgICAgICBjYW52YXMtPmRyYXdUZXh0T25QYXRoKGds
eXBocyArIGksIDIsIHBhdGgsIDAsIHBhaW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzIDw8
IDEsIHBvcywgcGFpbnQpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgc2V0dXBGb3JUZXh0UGFp
bnRpbmcoU2tQYWludCogcGFpbnQsIFNrQ29sb3IgY29sb3IpCi17Ci0gICAgcGFpbnQtPnNldFRl
eHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotICAgIHBhaW50LT5z
ZXRDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogZ2MsIGNvbnN0IFRleHRSdW4mIHJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewot
ICAgIGlmICghcnVuLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTa0NhbnZhcyog
Y2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKLSAgICBUZXh0RHJhd2lu
Z01vZGVGbGFncyB0ZXh0TW9kZSA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VGV4dERyYXdp
bmdNb2RlKCk7Ci0gICAgYm9vbCBmaWxsID0gdGV4dE1vZGUgJiBUZXh0TW9kZUZpbGw7Ci0gICAg
Ym9vbCBzdHJva2UgPSAodGV4dE1vZGUgJiBUZXh0TW9kZVN0cm9rZSkKLSAgICAgICAgICAgICAg
ICYmIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0U3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZQot
ICAgICAgICAgICAgICAgJiYgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VUaGlja25l
c3MoKSA+IDA7Ci0KLSAgICBpZiAoIWZpbGwgJiYgIXN0cm9rZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgU2tQYWludCBzdHJva2VQYWludCwgZmlsbFBhaW50OwotICAgIGlmIChmaWxsKSB7Ci0g
ICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJmZpbGxQ
YWludCk7Ci0gICAgICAgIHNldHVwRm9yVGV4dFBhaW50aW5nKCZmaWxsUGFpbnQsIGdjLT5maWxs
Q29sb3IoKS5yZ2IoKSk7Ci0gICAgfQotICAgIGlmIChzdHJva2UpIHsKLSAgICAgICAgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnN0cm9rZVBhaW50LCAwLCAw
KTsKLSAgICAgICAgc2V0dXBGb3JUZXh0UGFpbnRpbmcoJnN0cm9rZVBhaW50LCBnYy0+c3Ryb2tl
Q29sb3IoKS5yZ2IoKSk7Ci0gICAgfQotCi0gICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRy
b2xsZXIocnVuLCBwb2ludC54KCksIHBvaW50LnkoKSwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3Bh
Y2luZygpLCBydW4uZXhwYW5zaW9uKCksIHRoaXMpOwotCi0gICAgaWYgKHJ1bi5ydGwoKSkKLSAg
ICAgICAgY29udHJvbGxlci5zZXR1cEZvclJUTCgpOwotCi0gICAgd2hpbGUgKGNvbnRyb2xsZXIu
bmV4dFNjcmlwdFJ1bigpKSB7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSBnbHlw
aCBmb3VuZCBpbiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgotICAgICAgICBpbnQgZnJvbUdseXBo
LCBnbHlwaExlbmd0aDsKLSAgICAgICAgY29udHJvbGxlci5nbHlwaHNGb3JSYW5nZShmcm9tLCB0
bywgZnJvbUdseXBoLCBnbHlwaExlbmd0aCk7Ci0gICAgICAgIGlmIChmcm9tR2x5cGggPCAwIHx8
IGdseXBoTGVuZ3RoIDw9IDApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAo
ZmlsbCkgewotICAgICAgICAgICAgY29udHJvbGxlci5mb250UGxhdGZvcm1EYXRhRm9yU2NyaXB0
UnVuKCktPnNldHVwUGFpbnQoJmZpbGxQYWludCk7Ci0gICAgICAgICAgICBhZGp1c3RUZXh0UmVu
ZGVyTW9kZSgmZmlsbFBhaW50LCBnYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICAgICAg
Y2FudmFzLT5kcmF3UG9zVGV4dChjb250cm9sbGVyLmdseXBocygpICsgZnJvbUdseXBoLCBnbHlw
aExlbmd0aCA8PCAxLCBjb250cm9sbGVyLnBvc2l0aW9ucygpICsgZnJvbUdseXBoLCBmaWxsUGFp
bnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0cm9rZSkgewotICAgICAgICAgICAgY29u
dHJvbGxlci5mb250UGxhdGZvcm1EYXRhRm9yU2NyaXB0UnVuKCktPnNldHVwUGFpbnQoJnN0cm9r
ZVBhaW50KTsKLSAgICAgICAgICAgIGFkanVzdFRleHRSZW5kZXJNb2RlKCZzdHJva2VQYWludCwg
Z2MtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQo
Y29udHJvbGxlci5nbHlwaHMoKSArIGZyb21HbHlwaCwgZ2x5cGhMZW5ndGggPDwgMSwgY29udHJv
bGxlci5wb3NpdGlvbnMoKSArIGZyb21HbHlwaCwgc3Ryb2tlUGFpbnQpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNv
bnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQg
Ki8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiAvKiBmYWxsYmFj
a0ZvbnRzICovLCBHbHlwaE92ZXJmbG93KiAvKiBnbHlwaE92ZXJmbG93ICovKSBjb25zdAotewot
ICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHJ1biwgMCwgMCwgd29yZFNwYWNp
bmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4uZXhwYW5zaW9uKCksIHRoaXMpOwotICAgIHJldHVy
biBjb250cm9sbGVyLndpZHRoT2ZGdWxsUnVuKCk7Ci19Ci0KLS8vIFJldHVybiB0aGUgY29kZSBw
b2ludCBpbmRleCBmb3IgdGhlIGdpdmVuIHx4fCBvZmZzZXQgaW50byB0aGUgdGV4dCBydW4uCi1p
bnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIGZsb2F0IHhGbG9hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRo
aXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3Rz
IFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMKLSAgICAvLyB0byBGb250
OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80MDY3MyB0cmFj
a3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KLSAgICBpbnQgdGFyZ2V0WCA9IHN0YXRpY19jYXN0PGlu
dD4oeEZsb2F0KTsKLQotICAgIC8vIChNYWMgY29kZSBpZ25vcmVzIGluY2x1ZGVQYXJ0aWFsR2x5
cGhzLCBhbmQgdGhleSBkb24ndCBrbm93IHdoYXQgaXQncwotICAgIC8vIHN1cHBvc2VkIHRvIGRv
LCBzbyB3ZSBqdXN0IGlnbm9yZSBpdCBhcyB3ZWxsLikKLSAgICBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgY29udHJvbGxlcihydW4sIDAsIDAsIHdvcmRTcGFjaW5nKCksIGxldHRlclNwYWNpbmcoKSwg
cnVuLmV4cGFuc2lvbigpLCB0aGlzKTsKLSAgICBpZiAocnVuLnJ0bCgpKQotICAgICAgICBjb250
cm9sbGVyLnNldHVwRm9yUlRMKCk7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9z
aXRpb24odGFyZ2V0WCk7Ci19Ci0KLS8vIFJldHVybiB0aGUgcmVjdGFuZ2xlIGZvciBzZWxlY3Rp
bmcgdGhlIGdpdmVuIHJhbmdlIG9mIGNvZGUtcG9pbnRzIGluIHRoZSBUZXh0UnVuLgotRmxvYXRS
ZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIENvbXBsZXhUZXh0
Q29udHJvbGxlciBjb250cm9sbGVyKHJ1biwgMCwgMCwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3Bh
Y2luZygpLCBydW4uZXhwYW5zaW9uKCksIHRoaXMpOwotICAgIGlmIChydW4ucnRsKCkpCi0gICAg
ICAgIGNvbnRyb2xsZXIuc2V0dXBGb3JSVEwoKTsKLSAgICByZXR1cm4gY29udHJvbGxlci5zZWxl
Y3Rpb25SZWN0KHBvaW50LCBoZWlnaHQsIGZyb20sIHRvKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDkxMWIwMzU2YWY2MDZmZjAwMDI1
MTllNzdiNDhmZjA0MzdhMjFmMTcuLmY0ZjYzNTI5Y2ZkZTU5MzIxNjM2ZTg1ZjM3MGVhNjdlN2Jk
MzI4Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTM0LDcgKzM0LDcgQEAKICNpZiBP
UyhXSU5ET1dTKQogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGFDaHJvbWl1bVdpbi5oIgogI2Vs
aWYgT1MoVU5JWCkgJiYgIU9TKERBUldJTikKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhTGlu
dXguaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhSGFyZkJ1enouaCIKICNlbmRpZgogCiAj
ZW5kaWYgIC8vIEZvbnRQbGF0Zm9ybURhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFM
aW51eC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNmFiNDdlOTkzMGZjZjFj
YTExZGJiMTI4ODFmYTI3MzczMTY1NjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250UGxhdGZv
cm1EYXRhLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtU3VwcG9ydC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0KLSNpbmNsdWRlICJT
a0FkdmFuY2VkVHlwZWZhY2VNZXRyaWNzLmgiCi0jaW5jbHVkZSAiU2tQYWludC5oIgotI2luY2x1
ZGUgIlNrVHlwZWZhY2UuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4gCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFNrUGFpbnQ6OkhpbnRpbmcgc2tpYUhpbnRp
bmcgPSBTa1BhaW50OjprTm9ybWFsX0hpbnRpbmc7Ci1zdGF0aWMgYm9vbCBpc1NraWFBbnRpQWxp
YXMgPSB0cnVlOwotc3RhdGljIGJvb2wgaXNTa2lhU3VicGl4ZWxHbHlwaHMgPSBmYWxzZTsKLQot
dm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRIaW50aW5nKFNrUGFpbnQ6OkhpbnRpbmcgaGludGlu
ZykKLXsKLSAgICBza2lhSGludGluZyA9IGhpbnRpbmc7Ci19Ci0KLXZvaWQgRm9udFBsYXRmb3Jt
RGF0YTo6c2V0QW50aUFsaWFzKGJvb2wgaXNBbnRpQWxpYXMpCi17Ci0gICAgaXNTa2lhQW50aUFs
aWFzID0gaXNBbnRpQWxpYXM7Ci19Ci0KLXZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0U3VicGl4
ZWxHbHlwaHMoYm9vbCBpc1N1YnBpeGVsR2x5cGhzKQotewotICAgIGlzU2tpYVN1YnBpeGVsR2x5
cGhzID0gaXNTdWJwaXhlbEdseXBoczsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMpCi0gICAgOiBtX3R5cGVmYWNlKHNy
Yy5tX3R5cGVmYWNlKQotICAgICwgbV9mYW1pbHkoc3JjLm1fZmFtaWx5KQotICAgICwgbV90ZXh0
U2l6ZShzcmMubV90ZXh0U2l6ZSkKLSAgICAsIG1fZW1TaXplSW5Gb250VW5pdHMoc3JjLm1fZW1T
aXplSW5Gb250VW5pdHMpCi0gICAgLCBtX2Zha2VCb2xkKHNyYy5tX2Zha2VCb2xkKQotICAgICwg
bV9mYWtlSXRhbGljKHNyYy5tX2Zha2VJdGFsaWMpCi0gICAgLCBtX29yaWVudGF0aW9uKHNyYy5t
X29yaWVudGF0aW9uKQotICAgICwgbV90ZXh0T3JpZW50YXRpb24oc3JjLm1fdGV4dE9yaWVudGF0
aW9uKQotICAgICwgbV9zdHlsZShzcmMubV9zdHlsZSkKLSAgICAsIG1faGFyZmJ1enpGYWNlKHNy
Yy5tX2hhcmZidXp6RmFjZSkKLXsKLSAgICBTa1NhZmVSZWYobV90eXBlZmFjZSk7Ci19Ci0KLUZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoU2tUeXBlZmFjZSogdGYsIGNvbnN0IGNo
YXIqIGZhbWlseSwgZmxvYXQgdGV4dFNpemUsIGJvb2wgZmFrZUJvbGQsIGJvb2wgZmFrZUl0YWxp
YywgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVu
dGF0aW9uKQotICAgIDogbV90eXBlZmFjZSh0ZikKLSAgICAsIG1fZmFtaWx5KGZhbWlseSkKLSAg
ICAsIG1fdGV4dFNpemUodGV4dFNpemUpCi0gICAgLCBtX2VtU2l6ZUluRm9udFVuaXRzKDApCi0g
ICAgLCBtX2Zha2VCb2xkKGZha2VCb2xkKQotICAgICwgbV9mYWtlSXRhbGljKGZha2VJdGFsaWMp
Ci0gICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQotICAgICwgbV90ZXh0T3JpZW50YXRp
b24odGV4dE9yaWVudGF0aW9uKQotewotICAgIFNrU2FmZVJlZihtX3R5cGVmYWNlKTsKLSAgICBx
dWVyeVN5c3RlbUZvclJlbmRlclN0eWxlKCk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc3JjLCBmbG9hdCB0ZXh0U2l6ZSkK
LSAgICA6IG1fdHlwZWZhY2Uoc3JjLm1fdHlwZWZhY2UpCi0gICAgLCBtX2ZhbWlseShzcmMubV9m
YW1pbHkpCi0gICAgLCBtX3RleHRTaXplKHRleHRTaXplKQotICAgICwgbV9lbVNpemVJbkZvbnRV
bml0cyhzcmMubV9lbVNpemVJbkZvbnRVbml0cykKLSAgICAsIG1fZmFrZUJvbGQoc3JjLm1fZmFr
ZUJvbGQpCi0gICAgLCBtX2Zha2VJdGFsaWMoc3JjLm1fZmFrZUl0YWxpYykKLSAgICAsIG1fb3Jp
ZW50YXRpb24oc3JjLm1fb3JpZW50YXRpb24pCi0gICAgLCBtX3RleHRPcmllbnRhdGlvbihzcmMu
bV90ZXh0T3JpZW50YXRpb24pCi0gICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZh
Y2UpCi17Ci0gICAgU2tTYWZlUmVmKG1fdHlwZWZhY2UpOwotICAgIHF1ZXJ5U3lzdGVtRm9yUmVu
ZGVyU3R5bGUoKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQot
ewotICAgIFNrU2FmZVVucmVmKG1fdHlwZWZhY2UpOwotfQotCi1pbnQgRm9udFBsYXRmb3JtRGF0
YTo6ZW1TaXplSW5Gb250VW5pdHMoKSBjb25zdAotewotICAgIGlmIChtX2VtU2l6ZUluRm9udFVu
aXRzKQotICAgICAgICByZXR1cm4gbV9lbVNpemVJbkZvbnRVbml0czsKLQotICAgIFNrQWR2YW5j
ZWRUeXBlZmFjZU1ldHJpY3MqIG1ldHJpY3MgPSBtX3R5cGVmYWNlLT5nZXRBZHZhbmNlZFR5cGVm
YWNlTWV0cmljcyhTa0FkdmFuY2VkVHlwZWZhY2VNZXRyaWNzOjprTm9fUGVyR2x5cGhJbmZvKTsK
LSAgICBtX2VtU2l6ZUluRm9udFVuaXRzID0gbWV0cmljcy0+ZkVtU2l6ZTsKLSAgICBtZXRyaWNz
LT51bnJlZigpOwotICAgIHJldHVybiBtX2VtU2l6ZUluRm9udFVuaXRzOwotfQotCi1Gb250UGxh
dGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYgc3JjKQotewotICAgIFNrUmVmQ250X1NhZmVBc3NpZ24obV90eXBlZmFjZSwgc3JjLm1f
dHlwZWZhY2UpOwotCi0gICAgbV9mYW1pbHkgPSBzcmMubV9mYW1pbHk7Ci0gICAgbV90ZXh0U2l6
ZSA9IHNyYy5tX3RleHRTaXplOwotICAgIG1fZmFrZUJvbGQgPSBzcmMubV9mYWtlQm9sZDsKLSAg
ICBtX2Zha2VJdGFsaWMgPSBzcmMubV9mYWtlSXRhbGljOwotICAgIG1faGFyZmJ1enpGYWNlID0g
c3JjLm1faGFyZmJ1enpGYWNlOwotICAgIG1fb3JpZW50YXRpb24gPSBzcmMubV9vcmllbnRhdGlv
bjsKLSAgICBtX3RleHRPcmllbnRhdGlvbiA9IHNyYy5tX3RleHRPcmllbnRhdGlvbjsKLSAgICBt
X3N0eWxlID0gc3JjLm1fc3R5bGU7Ci0gICAgbV9lbVNpemVJbkZvbnRVbml0cyA9IHNyYy5tX2Vt
U2l6ZUluRm9udFVuaXRzOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi0jaWZuZGVmIE5ERUJV
RwotU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXR1
cFBhaW50KFNrUGFpbnQqIHBhaW50KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0IHRzID0gbV90
ZXh0U2l6ZSA+PSAwID8gbV90ZXh0U2l6ZSA6IDEyOwotCi0gICAgcGFpbnQtPnNldEFudGlBbGlh
cyhtX3N0eWxlLnVzZUFudGlBbGlhcyA9PSBGb250UmVuZGVyU3R5bGU6Ok5vUHJlZmVyZW5jZSA/
IGlzU2tpYUFudGlBbGlhcyA6IG1fc3R5bGUudXNlQW50aUFsaWFzKTsKLSAgICBzd2l0Y2ggKG1f
c3R5bGUudXNlSGludGluZykgewotICAgIGNhc2UgRm9udFJlbmRlclN0eWxlOjpOb1ByZWZlcmVu
Y2U6Ci0gICAgICAgIHBhaW50LT5zZXRIaW50aW5nKHNraWFIaW50aW5nKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSAwOgotICAgICAgICBwYWludC0+c2V0SGludGluZyhTa1BhaW50OjprTm9f
SGludGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHBhaW50LT5z
ZXRIaW50aW5nKHN0YXRpY19jYXN0PFNrUGFpbnQ6OkhpbnRpbmc+KG1fc3R5bGUuaGludFN0eWxl
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHBhaW50LT5zZXRFbWJlZGRlZEJpdG1h
cFRleHQobV9zdHlsZS51c2VCaXRtYXBzKTsKLSAgICBwYWludC0+c2V0VGV4dFNpemUoU2tGbG9h
dFRvU2NhbGFyKHRzKSk7Ci0gICAgcGFpbnQtPnNldFR5cGVmYWNlKG1fdHlwZWZhY2UpOwotICAg
IHBhaW50LT5zZXRGYWtlQm9sZFRleHQobV9mYWtlQm9sZCk7Ci0gICAgcGFpbnQtPnNldFRleHRT
a2V3WChtX2Zha2VJdGFsaWMgPyAtU0tfU2NhbGFyMSAvIDQgOiAwKTsKLSAgICBwYWludC0+c2V0
QXV0b2hpbnRlZChtX3N0eWxlLnVzZUF1dG9IaW50KTsKLQotICAgIGlmIChtX3N0eWxlLnVzZUFu
dGlBbGlhcyA9PSAxIHx8IChtX3N0eWxlLnVzZUFudGlBbGlhcyA9PSBGb250UmVuZGVyU3R5bGU6
Ok5vUHJlZmVyZW5jZSAmJiBpc1NraWFBbnRpQWxpYXMpKQotICAgICAgICBwYWludC0+c2V0TENE
UmVuZGVyVGV4dChtX3N0eWxlLnVzZVN1YnBpeGVsID09IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVm
ZXJlbmNlID8gaXNTa2lhU3VicGl4ZWxHbHlwaHMgOiBtX3N0eWxlLnVzZVN1YnBpeGVsKTsKLX0K
LQotU2tGb250SUQgRm9udFBsYXRmb3JtRGF0YTo6dW5pcXVlSUQoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3R5cGVmYWNlLT51bmlxdWVJRCgpOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6
Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgYSkgY29uc3QKLXsKLSAgICAvLyBJ
ZiBlaXRoZXIgb2YgdGhlIHR5cGVmYWNlIHBvaW50ZXJzIGFyZSBpbnZhbGlkIChlaXRoZXIgTlVM
TCBvciB0aGUKLSAgICAvLyBzcGVjaWFsIGRlbGV0ZWQgdmFsdWUpIHRoZW4gd2UgdGVzdCBmb3Ig
cG9pbnRlciBlcXVhbGl0eS4gT3RoZXJ3aXNlLCB3ZQotICAgIC8vIGNhbGwgU2tUeXBlZmFjZTo6
RXF1YWwgb24gdGhlIHZhbGlkIHBvaW50ZXJzLgotICAgIGJvb2wgdHlwZWZhY2VzRXF1YWw7Ci0g
ICAgaWYgKG1fdHlwZWZhY2UgPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpCi0gICAgICAg
IHx8IGEubV90eXBlZmFjZSA9PSBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkKLSAgICAgICAg
fHwgIW1fdHlwZWZhY2UKLSAgICAgICAgfHwgIWEubV90eXBlZmFjZSkKLSAgICAgICAgdHlwZWZh
Y2VzRXF1YWwgPSBtX3R5cGVmYWNlID09IGEubV90eXBlZmFjZTsKLSAgICBlbHNlCi0gICAgICAg
IHR5cGVmYWNlc0VxdWFsID0gU2tUeXBlZmFjZTo6RXF1YWwobV90eXBlZmFjZSwgYS5tX3R5cGVm
YWNlKTsKLQotICAgIHJldHVybiB0eXBlZmFjZXNFcXVhbCAKLSAgICAgICAgJiYgbV90ZXh0U2l6
ZSA9PSBhLm1fdGV4dFNpemUKLSAgICAgICAgJiYgbV9mYWtlQm9sZCA9PSBhLm1fZmFrZUJvbGQK
LSAgICAgICAgJiYgbV9mYWtlSXRhbGljID09IGEubV9mYWtlSXRhbGljCi0gICAgICAgICYmIG1f
b3JpZW50YXRpb24gPT0gYS5tX29yaWVudGF0aW9uCi0gICAgICAgICYmIG1fdGV4dE9yaWVudGF0
aW9uID09IGEubV90ZXh0T3JpZW50YXRpb24KLSAgICAgICAgJiYgbV9zdHlsZSA9PSBhLm1fc3R5
bGU7Ci19Ci0KLXVuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAotewotICAg
IHVuc2lnbmVkIGggPSBTa1R5cGVmYWNlOjpVbmlxdWVJRChtX3R5cGVmYWNlKTsKLSAgICBoIF49
IDB4MDEwMTAxMDEgKiAoKHN0YXRpY19jYXN0PGludD4obV90ZXh0T3JpZW50YXRpb24pIDw8IDMp
IHwgKHN0YXRpY19jYXN0PGludD4obV9vcmllbnRhdGlvbikgPDwgMikgfCAoc3RhdGljX2Nhc3Q8
aW50PihtX2Zha2VCb2xkKSA8PCAxKSB8IHN0YXRpY19jYXN0PGludD4obV9mYWtlSXRhbGljKSk7
Ci0KLSAgICAvLyBUaGlzIG1lbWNweSBpcyB0byBhdm9pZCBhIHJlaW50ZXJwcmV0X2Nhc3QgdGhh
dCBicmVha3Mgc3RyaWN0LWFsaWFzaW5nCi0gICAgLy8gcnVsZXMuIE1lbWNweSBpcyBnZW5lcmFs
bHkgb3B0aW1pemVkIGVub3VnaCBzbyB0aGF0IHBlcmZvcm1hbmNlIGRvZXNuJ3QKLSAgICAvLyBt
YXR0ZXIgaGVyZS4KLSAgICB1aW50MzJfdCB0ZXh0U2l6ZUJ5dGVzOwotICAgIG1lbWNweSgmdGV4
dFNpemVCeXRlcywgJm1fdGV4dFNpemUsIHNpemVvZih1aW50MzJfdCkpOwotICAgIGggXj0gdGV4
dFNpemVCeXRlczsKLQotICAgIHJldHVybiBoOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6
OmlzRml4ZWRQaXRjaCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLUhhcmZidXp6RmFjZSogRm9udFBsYXRmb3JtRGF0YTo6aGFyZmJ1enpG
YWNlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faGFyZmJ1enpGYWNlKQotICAgICAgICBtX2hhcmZi
dXp6RmFjZSA9IEhhcmZidXp6RmFjZTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0
YSo+KHRoaXMpKTsKLQotICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS5nZXQoKTsKLX0KLQotdm9p
ZCBGb250UGxhdGZvcm1EYXRhOjpxdWVyeVN5c3RlbUZvclJlbmRlclN0eWxlKCkKLXsKLSAgICBp
ZiAoIW1fZmFtaWx5Lmxlbmd0aCgpKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBmYW1p
bHkgZm9yIHRoaXMuIFByb2JhYmx5IGJlY2F1c2UgaXQncyBhIHdlYmZvbnQuIFdlCi0gICAgICAg
IC8vIHNldCBhbGwgdGhlIHZhbHVlcyB0byAnbm8gcHJlZmVyZW5jZScgYW5kIHRha2UgdGhlIGRl
ZmF1bHRzIHBhc3NlZAotICAgICAgICAvLyBpbiBmcm9tIFhTRVRUSU5HUy4KLSAgICAgICAgbV9z
dHlsZS51c2VCaXRtYXBzID0gRm9udFJlbmRlclN0eWxlOjpOb1ByZWZlcmVuY2U7Ci0gICAgICAg
IG1fc3R5bGUudXNlQXV0b0hpbnQgPSBGb250UmVuZGVyU3R5bGU6Ok5vUHJlZmVyZW5jZTsKLSAg
ICAgICAgbV9zdHlsZS51c2VIaW50aW5nID0gRm9udFJlbmRlclN0eWxlOjpOb1ByZWZlcmVuY2U7
Ci0gICAgICAgIG1fc3R5bGUudXNlQW50aUFsaWFzID0gRm9udFJlbmRlclN0eWxlOjpOb1ByZWZl
cmVuY2U7Ci0gICAgICAgIG1fc3R5bGUudXNlU3VicGl4ZWwgPSBGb250UmVuZGVyU3R5bGU6Ok5v
UHJlZmVyZW5jZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFBsYXRmb3JtU3VwcG9y
dDo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UobV9mYW1pbHkuZGF0YSgpLCAoKChpbnQpbV90ZXh0
U2l6ZSkgPDwgMikgfCAobV90eXBlZmFjZS0+c3R5bGUoKSAmIDMpLCAmbV9zdHlsZSk7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGRjZTkwNTA0NTA1ODNjMzcyYTM0NzUy
ZTkzMTAyNTRjM2UxM2E1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0
Zm9ybURhdGFMaW51eC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICog
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhTGludXhfaAotI2RlZmluZSBGb250UGxhdGZv
cm1EYXRhTGludXhfaAotCi0jaW5jbHVkZSAiRm9udE9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSAi
Rm9udFJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiSGFyZmJ1enpTa2lhLmgiCi0jaW5jbHVkZSAi
VGV4dE9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0ltcGwuaD4KLSNpbmNsdWRlIDxTa1BhaW50Lmg+Ci0KLWNsYXNzIFNrVHlw
ZWZhY2U7Ci10eXBlZGVmIHVpbnQzMl90IFNrRm9udElEOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IEZvbnRQbGF0Zm9ybURhdGEgaXMgdGhlIGhhbmRsZSB3aGljaCBXZWJLaXQgaGFzIG9uIGEgc3Bl
Y2lmaWMgZmFjZS4gQSBmYWNlCi0vLyBpcyB0aGUgdHVwbGUgb2YgKGZvbnQsIHNpemUsIC4uLmV0
YykuIEhlcmUgd2UgYXJlIGp1c3Qgd3JhcHBpbmcgYSBTa2lhCi0vLyBTa1R5cGVmYWNlIHBvaW50
ZXIgYW5kIGRlYWxpbmcgd2l0aCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGV0Yy4KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhIHsKLXB1YmxpYzoKLSAgICAv
LyBVc2VkIGZvciBkZWxldGVkIHZhbHVlcyBpbiB0aGUgZm9udCBjYWNoZSdzIGhhc2ggdGFibGVz
LiBUaGUgaGFzaCB0YWJsZQotICAgIC8vIHdpbGwgY3JlYXRlIHVzIHdpdGggdGhpcyBzdHJ1Y3R1
cmUsIGFuZCBpdCB3aWxsIGNvbXBhcmUgb3RoZXIgdmFsdWVzCi0gICAgLy8gdG8gdGhpcyAiRGVs
ZXRlZCIgb25lLiBJdCBleHBlY3RzIHRoZSBEZWxldGVkIG9uZSB0byBiZSBkaWZmZXJlbnRpYWJs
ZQotICAgIC8vIGZyb20gdGhlIE5VTEwgb25lIChjcmVhdGVkIHdpdGggdGhlIGVtcHR5IGNvbnN0
cnVjdG9yKSwgc28gd2UgY2FuJ3QganVzdAotICAgIC8vIHNldCBldmVyeXRoaW5nIHRvIE5VTEwu
Ci0gICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0g
ICAgICAgIDogbV90eXBlZmFjZShoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkpCi0gICAgICAg
ICwgbV90ZXh0U2l6ZSgwKQotICAgICAgICAsIG1fZW1TaXplSW5Gb250VW5pdHMoMCkKLSAgICAg
ICAgLCBtX2Zha2VCb2xkKGZhbHNlKQotICAgICAgICAsIG1fZmFrZUl0YWxpYyhmYWxzZSkKLSAg
ICAgICAgLCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCi0gICAgICAgICwgbV90ZXh0T3JpZW50
YXRpb24oVGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkKLSAgICAgICAgeyB9Ci0KLSAgICBG
b250UGxhdGZvcm1EYXRhKCkKLSAgICAgICAgOiBtX3R5cGVmYWNlKDApCi0gICAgICAgICwgbV90
ZXh0U2l6ZSgwKQotICAgICAgICAsIG1fZW1TaXplSW5Gb250VW5pdHMoMCkKLSAgICAgICAgLCBt
X2Zha2VCb2xkKGZhbHNlKQotICAgICAgICAsIG1fZmFrZUl0YWxpYyhmYWxzZSkKLSAgICAgICAg
LCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCi0gICAgICAgICwgbV90ZXh0T3JpZW50YXRpb24o
VGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkKLSAgICAgICAgeyB9Ci0KLSAgICBGb250UGxh
dGZvcm1EYXRhKGZsb2F0IHRleHRTaXplLCBib29sIGZha2VCb2xkLCBib29sIGZha2VJdGFsaWMp
Ci0gICAgICAgIDogbV90eXBlZmFjZSgwKQotICAgICAgICAsIG1fdGV4dFNpemUodGV4dFNpemUp
Ci0gICAgICAgICwgbV9lbVNpemVJbkZvbnRVbml0cygwKQotICAgICAgICAsIG1fZmFrZUJvbGQo
ZmFrZUJvbGQpCi0gICAgICAgICwgbV9mYWtlSXRhbGljKGZha2VJdGFsaWMpCi0gICAgICAgICwg
bV9vcmllbnRhdGlvbihIb3Jpem9udGFsKQotICAgICAgICAsIG1fdGV4dE9yaWVudGF0aW9uKFRl
eHRPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQpCi0gICAgICAgIHsgfQotCi0gICAgRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShT
a1R5cGVmYWNlKiwgY29uc3QgY2hhciogbmFtZSwgZmxvYXQgdGV4dFNpemUsIGJvb2wgZmFrZUJv
bGQsIGJvb2wgZmFrZUl0YWxpYywgRm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbCwgVGV4dE9y
aWVudGF0aW9uID0gVGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodCk7Ci0gICAgRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMsIGZsb2F0IHRleHRTaXplKTsKLSAg
ICB+Rm9udFBsYXRmb3JtRGF0YSgpOwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8v
IFJldHVybiB0cnVlIGlmZiB0aGlzIGZvbnQgaXMgbW9ub3NwYWNlZCAoaS5lLiBldmVyeSBnbHlw
aCBoYXMgYW4gZXF1YWwgeAotICAgIC8vIGFkdmFuY2UpCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICAgIGJvb2wgaXNGaXhlZFBpdGNoKCkgY29uc3Q7Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gICAgLy8gU2V0dXAgYSBTa2lhIHBhaW50aW5nIGNvbnRleHQgdG8gdXNlIHRoaXMgZm9u
dC4KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgdm9pZCBzZXR1cFBhaW50KFNrUGFpbnQq
KSBjb25zdDsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBSZXR1cm4gU2tpYSdz
IHVuaXF1ZSBpZCBmb3IgdGhpcyBmb250LiBUaGlzIGVuY29kZXMgYm90aCB0aGUgc3R5bGUgYW5k
Ci0gICAgLy8gdGhlIGZvbnQncyBmaWxlIG5hbWUgc28gcmVmZXJzIHRvIGEgc2luZ2xlIGZhY2Uu
Ci0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIFNrRm9udElEIHVuaXF1ZUlEKCkgY29uc3Q7
Ci0KLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7Ci0gICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dFNpemU7IH0KLSAgICBpbnQgZW1TaXplSW5Gb250VW5pdHMoKSBjb25zdDsK
LQotICAgIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3Jp
ZW50YXRpb247IH0KLSAgICB2b2lkIHNldE9yaWVudGF0aW9uKEZvbnRPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH0KLSAgICB2b2lkIHNldEZh
a2VCb2xkKGJvb2wgZmFrZUJvbGQpIHsgbV9mYWtlQm9sZCA9IGZha2VCb2xkOyB9Ci0gICAgdm9p
ZCBzZXRGYWtlSXRhbGljKGJvb2wgZmFrZUl0YWxpYykgeyBtX2Zha2VJdGFsaWMgPSBmYWtlSXRh
bGljOyB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25z
dDsKLSAgICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYpOwotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGVmYWNlID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsgfQotCi0jaWZuZGVmIE5E
RUJVRwotICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBIYXJm
YnV6ekZhY2UqIGhhcmZidXp6RmFjZSgpIGNvbnN0OwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICAgIC8vIEdsb2JhbCBmb250IHByZWZlcmVuY2VzLi4uCi0KLSAgICBzdGF0aWMgdm9pZCBz
ZXRIaW50aW5nKFNrUGFpbnQ6OkhpbnRpbmcpOwotICAgIHN0YXRpYyB2b2lkIHNldEFudGlBbGlh
cyhib29sIG9uKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTdWJwaXhlbEdseXBocyhib29sIG9uKTsK
LQotcHJpdmF0ZToKLSAgICB2b2lkIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKTsKLQotICAg
IC8vIEZJWE1FOiBDb3VsZCBTa0F1dG9VbnJlZiBiZSB1c2VkIGhlcmU/Ci0gICAgU2tUeXBlZmFj
ZSogbV90eXBlZmFjZTsKLSAgICBDU3RyaW5nIG1fZmFtaWx5OwotICAgIGZsb2F0IG1fdGV4dFNp
emU7Ci0gICAgbXV0YWJsZSBpbnQgbV9lbVNpemVJbkZvbnRVbml0czsKLSAgICBib29sIG1fZmFr
ZUJvbGQ7Ci0gICAgYm9vbCBtX2Zha2VJdGFsaWM7Ci0gICAgRm9udE9yaWVudGF0aW9uIG1fb3Jp
ZW50YXRpb247Ci0gICAgVGV4dE9yaWVudGF0aW9uIG1fdGV4dE9yaWVudGF0aW9uOwotICAgIEZv
bnRSZW5kZXJTdHlsZSBtX3N0eWxlOwotICAgIG11dGFibGUgUmVmUHRyPEhhcmZidXp6RmFjZT4g
bV9oYXJmYnV6ekZhY2U7Ci0KLSAgICBTa1R5cGVmYWNlKiBoYXNoVGFibGVEZWxldGVkRm9udFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTa1R5cGVmYWNlKj4oLTEpOyB9
Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgIC8vIGlmZGVmIEZvbnRQ
bGF0Zm9ybURhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDIxYWYxOTVlM2NiYTA1Y2RjYzQ3YWJjYjFjM2Y4MTM5ZmI5NzNjOTIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiRm9udFBsYXRm
b3JtRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL093bkFy
cmF5UHRyLmg+Ci0KLSNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCi0jaW5jbHVkZSAiU2tQYWludC5o
IgotI2luY2x1ZGUgIlNrUGF0aC5oIgotI2luY2x1ZGUgIlNrUG9pbnQuaCIKLSNpbmNsdWRlICJT
a1JlY3QuaCIKLSNpbmNsdWRlICJTa1V0aWxzLmgiCi0KLWV4dGVybiAiQyIgewotI2luY2x1ZGUg
ImhhcmZidXp6LXNoYXBlci5oIgotfQotCi0vLyBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgY2Fs
bGJhY2tzIHdoaWNoIEhhcmZidXp6IHJlcXVpcmVzIGJ5IHVzaW5nIFNraWEKLS8vIGNhbGxzLiBT
ZWUgdGhlIEhhcmZidXp6IHNvdXJjZSBmb3IgcmVmZXJlbmNlcyBhYm91dCB3aGF0IHRoZXNlIGNh
bGxiYWNrcyBkby4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSEJfRml4ZWQgU2tp
YVNjYWxhclRvSGFyZmJ1enpGaXhlZChTa1NjYWxhciB2YWx1ZSkKLXsKLSAgICAvLyBIQl9GaXhl
ZCBpcyBhIDI2LjYgZml4ZWQgcG9pbnQgZm9ybWF0LgotICAgIHJldHVybiB2YWx1ZSAqIDY0Owot
fQotCi1zdGF0aWMgSEJfQm9vbCBzdHJpbmdUb0dseXBocyhIQl9Gb250IGhiRm9udCwgY29uc3Qg
SEJfVUNoYXIxNiogY2hhcmFjdGVycywgaGJfdWludDMyIGxlbmd0aCwgSEJfR2x5cGgqIGdseXBo
cywgaGJfdWludDMyKiBnbHlwaHNTaXplLCBIQl9Cb29sIGlzUlRMKQotewotICAgIEZvbnRQbGF0
Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihoYkZv
bnQtPnVzZXJEYXRhKTsKLSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgZm9udC0+c2V0dXBQYWlu
dCgmcGFpbnQpOwotICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZfVGV4
dEVuY29kaW5nKTsKLQotICAgIHVuc2lnbmVkIGNvZGVwb2ludHMgPSAwOwotICAgIGZvciAoaGJf
dWludDMyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKCFTa1VURjE2X0lz
SGlnaFN1cnJvZ2F0ZShjaGFyYWN0ZXJzW2ldKSkKLSAgICAgICAgICAgIGNvZGVwb2ludHMrKzsK
LSAgICAgICAgaWYgKGNvZGVwb2ludHMgPiAqZ2x5cGhzU2l6ZSkKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIGludCBudW1HbHlwaHMgPSBwYWludC50ZXh0VG9HbHlwaHMoY2hh
cmFjdGVycywgbGVuZ3RoICogc2l6ZW9mKHVpbnQxNl90KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50
MTZfdCo+KGdseXBocykpOwotCi0gICAgLy8gSEJfR2x5cGggaXMgMzItYml0LCBidXQgU2tpYSBv
dXRwdXRzIG9ubHkgMTYtYml0IG51bWJlcnMuIFNvIG91cgotICAgIC8vIHxnbHlwaHN8IGFycmF5
IG5lZWRzIHRvIGJlIGNvbnZlcnRlZC4KLSAgICBmb3IgKGludCBpID0gbnVtR2x5cGhzIC0gMTsg
aSA+PSAwOyAtLWkpIHsKLSAgICAgICAgdWludDE2X3QgdmFsdWU7Ci0gICAgICAgIC8vIFdlIHVz
ZSBhIG1lbWNweSB0byBhdm9pZCBicmVha2luZyBzdHJpY3QgYWxpYXNpbmcgcnVsZXMuCi0gICAg
ICAgIG1lbWNweSgmdmFsdWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGdseXBocykgKyBzaXpl
b2YodWludDE2X3QpICogaSwgc2l6ZW9mKHVpbnQxNl90KSk7Ci0gICAgICAgIGdseXBoc1tpXSA9
IHZhbHVlOwotICAgIH0KLQotICAgICpnbHlwaHNTaXplID0gbnVtR2x5cGhzOwotICAgIHJldHVy
biAxOwotfQotCi1zdGF0aWMgdm9pZCBnbHlwaHNUb0FkdmFuY2VzKEhCX0ZvbnQgaGJGb250LCBj
b25zdCBIQl9HbHlwaCogZ2x5cGhzLCBoYl91aW50MzIgbnVtR2x5cGhzLCBIQl9GaXhlZCogYWR2
YW5jZXMsIGludCBmbGFncykKLXsKLSAgICBGb250UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRl
cnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oaGJGb250LT51c2VyRGF0YSk7Ci0gICAgU2tQ
YWludCBwYWludDsKLQotICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKLSAgICBwYWludC5z
ZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKLQotICAgIE93
bkFycmF5UHRyPHVpbnQxNl90PiBnbHlwaHMxNiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQxNl90
W251bUdseXBoc10pOwotICAgIGlmICghZ2x5cGhzMTYuZ2V0KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpCi0gICAgICAgIGds
eXBoczE2W2ldID0gZ2x5cGhzW2ldOwotICAgIHBhaW50LmdldFRleHRXaWR0aHMoZ2x5cGhzMTYu
Z2V0KCksIG51bUdseXBocyAqIHNpemVvZih1aW50MTZfdCksIHJlaW50ZXJwcmV0X2Nhc3Q8U2tT
Y2FsYXIqPihhZHZhbmNlcykpOwotCi0gICAgLy8gVGhlIHxhZHZhbmNlc3wgdmFsdWVzIHdoaWNo
IFNraWEgb3V0cHV0cyBhcmUgU2tTY2FsYXJzLCB3aGljaCBhcmUgZmxvYXRzCi0gICAgLy8gaW4g
Q2hyb21pdW0uIEhvd2V2ZXIsIEhhcmZidXp6IHdhbnRzIHRoZW0gaW4gMjYuNiBmaXhlZCBwb2lu
dCBmb3JtYXQuCi0gICAgLy8gVGhlc2UgdHdvIGZvcm1hdHMgYXJlIGJvdGggMzItYml0cyBsb25n
LgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAg
ICBmbG9hdCB2YWx1ZTsKLSAgICAgICAgLy8gV2UgdXNlIGEgbWVtY3B5IHRvIGF2b2lkIGJyZWFr
aW5nIHN0cmljdCBhbGlhc2luZyBydWxlcy4KLSAgICAgICAgbWVtY3B5KCZ2YWx1ZSwgcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oYWR2YW5jZXMpICsgc2l6ZW9mKGZsb2F0KSAqIGksIHNpemVvZihm
bG9hdCkpOwotICAgICAgICBhZHZhbmNlc1tpXSA9IFNraWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQo
dmFsdWUpOwotICAgIH0KLX0KLQotc3RhdGljIEhCX0Jvb2wgY2FuUmVuZGVyKEhCX0ZvbnQgaGJG
b250LCBjb25zdCBIQl9VQ2hhcjE2KiBjaGFyYWN0ZXJzLCBoYl91aW50MzIgbGVuZ3RoKQotewot
ICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9y
bURhdGEqPihoYkZvbnQtPnVzZXJEYXRhKTsKLSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgZm9u
dC0+c2V0dXBQYWludCgmcGFpbnQpOwotICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50
OjprVVRGMTZfVGV4dEVuY29kaW5nKTsKLQotICAgIE93bkFycmF5UHRyPHVpbnQxNl90PiBnbHlw
aHMxNiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQxNl90W2xlbmd0aF0pOwotICAgIGlmICghZ2x5
cGhzMTYuZ2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGludCBudW1HbHlwaHMgPSBwYWlu
dC50ZXh0VG9HbHlwaHMoY2hhcmFjdGVycywgbGVuZ3RoICogc2l6ZW9mKHVpbnQxNl90KSwgZ2x5
cGhzMTYuZ2V0KCkpOwotCi0gICAgYm9vbCBjYW5SZW5kZXIgPSB0cnVlOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgaWYgKCFnbHlwaHMxNltpXSkg
ewotICAgICAgICAgICAgY2FuUmVuZGVyID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjYW5SZW5kZXI7Ci19Ci0KLXN0YXRpYyBIQl9F
cnJvciBnZXRPdXRsaW5lUG9pbnQoSEJfRm9udCBoYkZvbnQsIEhCX0dseXBoIGdseXBoLCBpbnQg
ZmxhZ3MsIGhiX3VpbnQzMiBwb2ludCwgSEJfRml4ZWQqIHhQb3MsIEhCX0ZpeGVkKiB5UG9zLCBo
Yl91aW50MzIqIHJlc3VsdGluZ051bVBvaW50cykKLXsKLSAgICAvLyBXZSBjYW5ub3QgcHJvdmlk
ZSB0aGUgcmlnaHQgcG9zaXRpb24gb2Ygb3V0bGluZSBwb2ludHMgZnJvbSBwb2ludCBpbmRleC4K
LSAgICAvLyBKdXN0IHJldHVybiBIQl9FcnJfT2sgd2l0aCByZXN1bHRpbmdOdW1Qb2ludHMgPSAw
IHNvIHRoYXQgaGFyZmJ1enoKLSAgICAvLyBmYWxscyBiYWNrIG9uIHVzaW5nIGRlc2lnbiBjb29y
ZGluYXRlIHZhbHVlIHBhaXIuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MDA3OSBmb3IgbW9yZSBkZXRhaWxzLgotICAgICpyZXN1bHRpbmdOdW1Q
b2ludHMgPSAwOwotICAgIHJldHVybiBIQl9FcnJfT2s7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldEds
eXBoTWV0cmljcyhIQl9Gb250IGhiRm9udCwgSEJfR2x5cGggZ2x5cGgsIEhCX0dseXBoTWV0cmlj
cyogbWV0cmljcykKLXsKLSAgICBGb250UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRlcnByZXRf
Y2FzdDxGb250UGxhdGZvcm1EYXRhKj4oaGJGb250LT51c2VyRGF0YSk7Ci0gICAgU2tQYWludCBw
YWludDsKLQotICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKLSAgICBwYWludC5zZXRUZXh0
RW5jb2RpbmcoU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKLSAgICB1aW50MTZfdCBn
bHlwaDE2ID0gZ2x5cGg7Ci0gICAgU2tTY2FsYXIgd2lkdGg7Ci0gICAgU2tSZWN0IGJvdW5kczsK
LSAgICBwYWludC5nZXRUZXh0V2lkdGhzKCZnbHlwaDE2LCBzaXplb2YoZ2x5cGgxNiksICZ3aWR0
aCwgJmJvdW5kcyk7Ci0KLSAgICBtZXRyaWNzLT54ID0gU2tpYVNjYWxhclRvSGFyZmJ1enpGaXhl
ZChib3VuZHMuZkxlZnQpOwotICAgIG1ldHJpY3MtPnkgPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZp
eGVkKGJvdW5kcy5mVG9wKTsKLSAgICBtZXRyaWNzLT53aWR0aCA9IFNraWFTY2FsYXJUb0hhcmZi
dXp6Rml4ZWQoYm91bmRzLndpZHRoKCkpOwotICAgIG1ldHJpY3MtPmhlaWdodCA9IFNraWFTY2Fs
YXJUb0hhcmZidXp6Rml4ZWQoYm91bmRzLmhlaWdodCgpKTsKLQotICAgIG1ldHJpY3MtPnhPZmZz
ZXQgPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVkKHdpZHRoKTsKLSAgICAvLyBXZSBjYW4ndCBh
Y3R1YWxseSBnZXQgdGhlIHx5fCBjb3JyZWN0IGJlY2F1c2UgU2tpYSBkb2Vzbid0IGV4cG9ydAot
ICAgIC8vIHRoZSB2ZXJ0aWNhbCBhZHZhbmNlLiBIb3dldmVyLCBub3Igd2UgZG8gZXZlciByZW5k
ZXIgdmVydGljYWwgdGV4dCBhdAotICAgIC8vIHRoZSBtb21lbnQgc28gaXQncyB1bmltcG9ydGFu
dC4KLSAgICBtZXRyaWNzLT55T2Zmc2V0ID0gMDsKLX0KLQotc3RhdGljIEhCX0ZpeGVkIGdldEZv
bnRNZXRyaWMoSEJfRm9udCBoYkZvbnQsIEhCX0ZvbnRNZXRyaWMgbWV0cmljKQotewotICAgIEZv
bnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEq
PihoYkZvbnQtPnVzZXJEYXRhKTsKLSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgZm9udC0+c2V0
dXBQYWludCgmcGFpbnQpOwotICAgIFNrUGFpbnQ6OkZvbnRNZXRyaWNzIHNraWFNZXRyaWNzOwot
ICAgIHBhaW50LmdldEZvbnRNZXRyaWNzKCZza2lhTWV0cmljcyk7Ci0KLSAgICBzd2l0Y2ggKG1l
dHJpYykgewotICAgIGNhc2UgSEJfRm9udEFzY2VudDoKLSAgICAgICAgcmV0dXJuIFNraWFTY2Fs
YXJUb0hhcmZidXp6Rml4ZWQoLXNraWFNZXRyaWNzLmZBc2NlbnQpOwotICAgIC8vIFdlIGRvbid0
IHN1cHBvcnQgZ2V0dGluZyB0aGUgcmVzdCBvZiB0aGUgbWV0cmljcyBhbmQgSGFyZmJ1enogZG9l
c24ndCBzZWVtIHRvIG5lZWQgdGhlbS4KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci19Ci0KLUhCX0ZvbnRDbGFzcyBoYXJmYnV6elNraWFDbGFzcyA9IHsKLSAgICBzdHJp
bmdUb0dseXBocywKLSAgICBnbHlwaHNUb0FkdmFuY2VzLAotICAgIGNhblJlbmRlciwKLSAgICBn
ZXRPdXRsaW5lUG9pbnQsCi0gICAgZ2V0R2x5cGhNZXRyaWNzLAotICAgIGdldEZvbnRNZXRyaWMs
Ci19OwotCi1IQl9Gb250XyogYWxsb2NIYXJmYnV6ekZvbnQoKQotewotICAgIEhCX0ZvbnRfKiBm
b250ID0gcmVpbnRlcnByZXRfY2FzdDxIQl9Gb250Xyo+KGZhc3RNYWxsb2Moc2l6ZW9mKEhCX0Zv
bnRfKSkpOwotICAgIG1lbXNldChmb250LCAwLCBzaXplb2YoSEJfRm9udF8pKTsKLSAgICBmb250
LT5rbGFzcyA9ICZoYXJmYnV6elNraWFDbGFzczsKLSAgICBmb250LT51c2VyRGF0YSA9IDA7Ci0K
LSAgICByZXR1cm4gZm9udDsKLX0KLQotSEJfRXJyb3IgaGFyZmJ1enpTa2lhR2V0VGFibGUodm9p
ZCogdm9pZGZhY2UsIGNvbnN0IEhCX1RhZyB0YWcsIEhCX0J5dGUqIGJ1ZmZlciwgSEJfVUludCog
bGVuKQotewotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGEqPih2b2lkZmFjZSk7Ci0KLSAgICBjb25zdCBzaXplX3QgdGFibGVTaXpl
ID0gU2tGb250SG9zdDo6R2V0VGFibGVTaXplKGZvbnQtPnVuaXF1ZUlEKCksIHRhZyk7Ci0gICAg
aWYgKCF0YWJsZVNpemUpCi0gICAgICAgIHJldHVybiBIQl9FcnJfSW52YWxpZF9Bcmd1bWVudDsK
LSAgICAvLyBJZiBIYXJmYnV6eiBzcGVjaWZpZWQgYSBOVUxMIGJ1ZmZlciB0aGVuIGl0J3MgYXNr
aW5nIGZvciB0aGUgc2l6ZSBvZiB0aGUgdGFibGUuCi0gICAgaWYgKCFidWZmZXIpIHsKLSAgICAg
ICAgKmxlbiA9IHRhYmxlU2l6ZTsKLSAgICAgICAgcmV0dXJuIEhCX0Vycl9PazsKLSAgICB9Ci0K
LSAgICBpZiAoKmxlbiA8IHRhYmxlU2l6ZSkKLSAgICAgICAgcmV0dXJuIEhCX0Vycl9JbnZhbGlk
X0FyZ3VtZW50OwotICAgIFNrRm9udEhvc3Q6OkdldFRhYmxlRGF0YShmb250LT51bmlxdWVJRCgp
LCB0YWcsIDAsIHRhYmxlU2l6ZSwgYnVmZmVyKTsKLSAgICByZXR1cm4gSEJfRXJyX09rOwotfQot
Ci10eXBlZGVmIHBhaXI8SEJfRmFjZVJlY18qLCB1bnNpZ25lZD4gRmFjZUNhY2hlRW50cnk7Ci10
eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQgaW50LCBGYWNlQ2FjaGVFbnRyeSwgV1RGOjpJbnRIYXNo
PHVuc2lnbmVkIGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWdu
ZWQgaW50PiA+IEhhcmZidXp6RmFjZUNhY2hlOwotc3RhdGljIEhhcmZidXp6RmFjZUNhY2hlKiBn
SGFyZmJ1enpGYWNlQ2FjaGUgPSAwOwotCi1zdGF0aWMgSEJfRmFjZVJlY18qIGdldENhY2hlZEhh
cmZidXp6RmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEpCi17Ci0gICAgaWYgKCFn
SGFyZmJ1enpGYWNlQ2FjaGUpCi0gICAgICAgIGdIYXJmYnV6ekZhY2VDYWNoZSA9IG5ldyBIYXJm
YnV6ekZhY2VDYWNoZTsKLSAgICBTa0ZvbnRJRCB1bmlxdWVJRCA9IHBsYXRmb3JtRGF0YS0+dW5p
cXVlSUQoKTsKLSAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gZ0hhcmZi
dXp6RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlEKTsKLSAgICBpZiAocmVzdWx0ID09IGdIYXJmYnV6
ekZhY2VDYWNoZS0+ZW5kKCkpIHsKLSAgICAgICAgRmFjZUNhY2hlRW50cnkgZW50cnkoSEJfTmV3
RmFjZShwbGF0Zm9ybURhdGEsIGhhcmZidXp6U2tpYUdldFRhYmxlKSwgMSk7Ci0gICAgICAgIGdI
YXJmYnV6ekZhY2VDYWNoZS0+c2V0KHVuaXF1ZUlELCBlbnRyeSk7Ci0gICAgICAgIHJldHVybiBl
bnRyeS5maXJzdDsKLSAgICB9Ci0gICAgKysocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsK
LSAgICByZXR1cm4gcmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3Q7Ci19Ci0KLXN0YXRpYyB2b2lk
IHJlbGVhc2VDYWNoZWRIYXJmYnV6ekZhY2UoU2tGb250SUQgdW5pcXVlSUQpCi17Ci0gICAgSGFy
ZmJ1enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGdIYXJmYnV6ekZhY2VDYWNoZS0+Zmlu
ZCh1bmlxdWVJRCk7Ci0gICAgQVNTRVJUKHJlc3VsdCAhPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmVu
ZCgpKTsKLSAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7Ci0gICAg
LS0ocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIShyZXN1bHQuZ2V0KCkt
PnNlY29uZC5zZWNvbmQpKSB7Ci0gICAgICAgIEhCX0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+c2Vj
b25kLmZpcnN0KTsKLSAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5yZW1vdmUodW5pcXVlSUQp
OwotICAgIH0KLX0KLQotSGFyZmJ1enpGYWNlOjpIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0
YSogcGxhdGZvcm1EYXRhKQotICAgIDogbV91bmlxdWVJRChwbGF0Zm9ybURhdGEtPnVuaXF1ZUlE
KCkpCi17Ci0gICAgbV9oYXJmYnV6ekZhY2UgPSBnZXRDYWNoZWRIYXJmYnV6ekZhY2UocGxhdGZv
cm1EYXRhKTsKLX0KLQotSGFyZmJ1enpGYWNlOjp+SGFyZmJ1enpGYWNlKCkKLXsKLSAgICByZWxl
YXNlQ2FjaGVkSGFyZmJ1enpGYWNlKG1fdW5pcXVlSUQpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSGFyZmJ1enpTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9IYXJmYnV6elNraWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc0
M2NjM2YxZWUzYmFiMzM2ZmJmMzEzZGJhNTMxNDgxZGM1MDllYS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBIYXJmYnV6elNraWFfaAotI2RlZmluZSBIYXJmYnV6elNraWFfaAotCi0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLXN0cnVj
dCBIQl9GYWNlUmVjXzsKLXN0cnVjdCBIQl9Gb250XzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotCi1jbGFzcyBIYXJmYnV6ekZhY2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxIYXJmYnV6ekZhY2U+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIYXJmYnV6ekZhY2U+IGNyZWF0ZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhhcmZidXp6RmFjZShwbGF0Zm9ybURh
dGEpKTsKLSAgICB9Ci0KLSAgICB+SGFyZmJ1enpGYWNlKCk7Ci0KLSAgICBIQl9GYWNlUmVjXyog
ZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFyZmJ1enpGYWNlOyB9Ci0KLXByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgSGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqKTsKLQotICAgIHVpbnQzMl90
IG1fdW5pcXVlSUQ7Ci0gICAgSEJfRmFjZVJlY18qIG1faGFyZmJ1enpGYWNlOwotfTsKLQotLy8g
RklYTUU6IFJlbW92ZSB0aGlzIGFzeW1tZXRyaWMgYWxsb2MvZnJlZSBmdW5jdGlvbi4KLS8vIFdl
J2xsIHJlbW92ZSB0aGlzIG9uY2Ugd2UgbW92ZSB0byB0aGUgbmV3IEhhcmZidXp6IEFQSS4KLUhC
X0ZvbnRfKiBhbGxvY0hhcmZidXp6Rm9udCgpOwotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAzNDVjYjYxMWNlNGUzZTZhZDAzNTgyNDM5NTU2NTRmNDVlNzcwMzMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAw
OCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNp
bmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJG
b250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiVkRNWFBh
cnNlci5oIgotCi0jaW5jbHVkZSAiU2tGb250SG9zdC5oIgotI2luY2x1ZGUgIlNrUGFpbnQuaCIK
LSNpbmNsdWRlICJTa1RpbWUuaCIKLSNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAi
U2tUeXBlcy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFNtYWxsY2FwcyB2ZXJzaW9u
cyBvZiBmb250cyBhcmUgNzAlIHRoZSBzaXplIG9mIHRoZSBub3JtYWwgZm9udC4KLXN0YXRpYyBj
b25zdCBmbG9hdCBzbWFsbENhcHNGcmFjdGlvbiA9IDAuN2Y7Ci1zdGF0aWMgY29uc3QgZmxvYXQg
ZW1waGFzaXNNYXJrRnJhY3Rpb24gPSAuNTsKLS8vIFRoaXMgaXMgdGhlIGxhcmdlc3QgVkRNWCB0
YWJsZSB3aGljaCB3ZSdsbCB0cnkgdG8gbG9hZCBhbmQgcGFyc2UuCi1zdGF0aWMgY29uc3Qgc2l6
ZV90IG1heFZETVhUYWJsZVNpemUgPSAxMDI0ICogMTAyNDsgIC8vIDEgTUIKLQotdm9pZCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnNp
emUoKSkgewotICAgICAgICBtX2ZvbnRNZXRyaWNzLnJlc2V0KCk7Ci0gICAgICAgIG1fYXZnQ2hh
cldpZHRoID0gMDsKLSAgICAgICAgbV9tYXhDaGFyV2lkdGggPSAwOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBTa1BhaW50OjpGb250TWV0cmljcyBt
ZXRyaWNzOwotCi0gICAgbV9wbGF0Zm9ybURhdGEuc2V0dXBQYWludCgmcGFpbnQpOwotICAgIHBh
aW50LmdldEZvbnRNZXRyaWNzKCZtZXRyaWNzKTsKLSAgICBjb25zdCBTa0ZvbnRJRCBmb250SUQg
PSBtX3BsYXRmb3JtRGF0YS51bmlxdWVJRCgpOwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90
IHZkbXhUYWcgPSBTa1NldEZvdXJCeXRlVGFnKCdWJywgJ0QnLCAnTScsICdYJyk7Ci0gICAgaW50
IHBpeGVsU2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSArIDAuNTsKLSAgICBpbnQgdmRteEFz
Y2VudCwgdmRteERlc2NlbnQ7Ci0gICAgYm9vbCBpc1ZETVhWYWxpZCA9IGZhbHNlOwotCi0gICAg
c2l6ZV90IHZkbXhTaXplID0gU2tGb250SG9zdDo6R2V0VGFibGVTaXplKGZvbnRJRCwgdmRteFRh
Zyk7Ci0gICAgaWYgKHZkbXhTaXplICYmIHZkbXhTaXplIDwgbWF4VkRNWFRhYmxlU2l6ZSkgewot
ICAgICAgICB1aW50OF90KiB2ZG14VGFibGUgPSAodWludDhfdCopIGZhc3RNYWxsb2ModmRteFNp
emUpOwotICAgICAgICBpZiAodmRteFRhYmxlCi0gICAgICAgICAgICAmJiBTa0ZvbnRIb3N0OjpH
ZXRUYWJsZURhdGEoZm9udElELCB2ZG14VGFnLCAwLCB2ZG14U2l6ZSwgdmRteFRhYmxlKSA9PSB2
ZG14U2l6ZQotICAgICAgICAgICAgJiYgcGFyc2VWRE1YKCZ2ZG14QXNjZW50LCAmdmRteERlc2Nl
bnQsIHZkbXhUYWJsZSwgdmRteFNpemUsIHBpeGVsU2l6ZSkpCi0gICAgICAgICAgICBpc1ZETVhW
YWxpZCA9IHRydWU7Ci0gICAgICAgIGZhc3RGcmVlKHZkbXhUYWJsZSk7Ci0gICAgfQotCi0gICAg
ZmxvYXQgYXNjZW50OwotICAgIGZsb2F0IGRlc2NlbnQ7Ci0KLSAgICAvLyBCZXdhcmUgdGhvc2Ug
d2hvIHN0ZXAgaGVyZTogVGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIG1hdGNoIFdpbjMyIGZvbnQK
LSAgICAvLyBtZXRyaWNzICpleGFjdGx5Ki4KLSAgICBpZiAoaXNWRE1YVmFsaWQpIHsKLSAgICAg
ICAgYXNjZW50ID0gdmRteEFzY2VudDsKLSAgICAgICAgZGVzY2VudCA9IC12ZG14RGVzY2VudDsK
LSAgICB9IGVsc2UgewotICAgICAgICBTa1NjYWxhciBoZWlnaHQgPSAtbWV0cmljcy5mQXNjZW50
ICsgbWV0cmljcy5mRGVzY2VudCArIG1ldHJpY3MuZkxlYWRpbmc7Ci0gICAgICAgIGFzY2VudCA9
IFNrU2NhbGFyUm91bmQoLW1ldHJpY3MuZkFzY2VudCk7Ci0gICAgICAgIGRlc2NlbnQgPSBTa1Nj
YWxhclJvdW5kKGhlaWdodCkgLSBhc2NlbnQ7Ci0gICAgfQotCi0gICAgbV9mb250TWV0cmljcy5z
ZXRBc2NlbnQoYXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7
Ci0KLSAgICBmbG9hdCB4SGVpZ2h0OwotICAgIGlmIChtZXRyaWNzLmZYSGVpZ2h0KQotICAgICAg
ICB4SGVpZ2h0ID0gbWV0cmljcy5mWEhlaWdodDsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gaGFj
ayB0YWtlbiBmcm9tIHRoZSBXaW5kb3dzIHBvcnQKLSAgICAgICAgeEhlaWdodCA9IGFzY2VudCAq
IDAuNTZmOwotICAgIH0KLQotICAgIGZsb2F0IGxpbmVHYXAgPSBTa1NjYWxhclRvRmxvYXQobWV0
cmljcy5mTGVhZGluZyk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwot
ICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNz
LnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYoZGVzY2VudCkgKyBscm91
bmRmKGxpbmVHYXApKTsKLQotICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IHVpbnQzMl90IHZoZWFUYWcgPSBTa1NldEZvdXJCeXRlVGFnKCd2JywgJ2gnLCAn
ZScsICdhJyk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB2b3JnVGFnID0gU2tTZXRG
b3VyQnl0ZVRhZygnVicsICdPJywgJ1InLCAnRycpOwotICAgICAgICBzaXplX3QgdmhlYVNpemUg
PSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udElELCB2aGVhVGFnKTsKLSAgICAgICAgc2l6
ZV90IHZvcmdTaXplID0gU2tGb250SG9zdDo6R2V0VGFibGVTaXplKGZvbnRJRCwgdm9yZ1RhZyk7
Ci0gICAgICAgIGlmICgodmhlYVNpemUgPiAwKSB8fCAodm9yZ1NpemUgPiAwKSkKLSAgICAgICAg
ICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIEluIFdlYktp
dC9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCwgbV9zcGFjZVdp
ZHRoIGlzCi0gICAgLy8gY2FsY3VsYXRlZCBmb3IgdXMsIGJ1dCB3ZSBuZWVkIHRvIGNhbGN1bGF0
ZSBtX21heENoYXJXaWR0aCBhbmQKLSAgICAvLyBtX2F2Z0NoYXJXaWR0aCBpbiBvcmRlciBmb3Ig
dGV4dCBlbnRyeSB3aWRnZXRzIHRvIGJlIHNpemVkIGNvcnJlY3RseS4KLQotICAgIFNrU2NhbGFy
IHhSYW5nZSA9IG1ldHJpY3MuZlhNYXggLSBtZXRyaWNzLmZYTWluOwotICAgIG1fbWF4Q2hhcldp
ZHRoID0gU2tTY2FsYXJSb3VuZCh4UmFuZ2UgKiBTa1NjYWxhclJvdW5kKG1fcGxhdGZvcm1EYXRh
LnNpemUoKSkpOwotCi0gICAgaWYgKG1ldHJpY3MuZkF2Z0NoYXJXaWR0aCkKLSAgICAgICAgbV9h
dmdDaGFyV2lkdGggPSBTa1NjYWxhclJvdW5kKG1ldHJpY3MuZkF2Z0NoYXJXaWR0aCk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0geEhlaWdodDsKLQotICAgICAgICBHbHlw
aFBhZ2UqIGdseXBoUGFnZVplcm8gPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHRo
aXMsIDApLT5wYWdlKCk7Ci0KLSAgICAgICAgaWYgKGdseXBoUGFnZVplcm8pIHsKLSAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBVQ2hhcjMyIHhfY2hhciA9ICd4JzsKLSAgICAgICAgICAgIGNvbnN0
IEdseXBoIHhHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3Rlcih4X2No
YXIpLmdseXBoOwotCi0gICAgICAgICAgICBpZiAoeEdseXBoKQotICAgICAgICAgICAgICAgIG1f
YXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaCh4R2x5cGgpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQotewotICAg
IC8vIGNoYXJ3aWR0aHMgYXJlIHNldCBpbiBwbGF0Zm9ybUluaXQuCi19Ci0KLXZvaWQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLVBhc3NPd25QdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgZmxvYXQgc2NhbGVkU2l6ZSA9IGxyb3VuZGYoZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkU2l6ZSgpICogc2NhbGVGYWN0b3IpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxl
Rm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSwgc2NhbGVkU2l6ZSksIGlz
Q3VzdG9tRm9udCgpLCBmYWxzZSkpOwotfQotCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERh
dGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKSBjb25zdAotewotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwot
ICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAgbV9kZXJpdmVk
Rm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlv
biwgc21hbGxDYXBzRnJhY3Rpb24pOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5z
bWFsbENhcHMuZ2V0KCk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1w
aGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVk
Rm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7Ci0gICAg
aWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0
aW9uLCBlbXBoYXNpc01hcmtGcmFjdGlvbik7Ci0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKLX0KLQotYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFp
bnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAot
ewotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEJ1ZmZl
ckNvdW50ID0gNjQ7Ci0gICAgdWludDE2X3QgZ2x5cGhzW21heEJ1ZmZlckNvdW50XTsKLQotICAg
IG1fcGxhdGZvcm1EYXRhLnNldHVwUGFpbnQoJnBhaW50KTsKLSAgICBwYWludC5zZXRUZXh0RW5j
b2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7Ci0KLSAgICB3aGlsZSAobGVuZ3Ro
ID4gMCkgewotICAgICAgICBpbnQgbiA9IFNrTWluMzIobGVuZ3RoLCBTS19BUlJBWV9DT1VOVChn
bHlwaHMpKTsKLQotICAgICAgICAvLyB0ZXh0VG9HbHlwaHMgdGFrZXMgYSBieXRlIGNvdW50IHNv
IHdlIGRvdWJsZSB0aGUgY2hhcmFjdGVyIGNvdW50LgotICAgICAgICBpbnQgY291bnQgPSBwYWlu
dC50ZXh0VG9HbHlwaHMoY2hhcmFjdGVycywgbiAqIDIsIGdseXBocyk7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKDAgPT0gZ2x5cGhz
W2ldKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgLy8gbWlzc2luZyBnbHlw
aAotICAgICAgICB9Ci0KLSAgICAgICAgY2hhcmFjdGVycyArPSBuOwotICAgICAgICBsZW5ndGgg
LT0gbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0
YTo6ZGV0ZXJtaW5lUGl0Y2goKQotewotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBwbGF0Zm9y
bURhdGEoKS5pc0ZpeGVkUGl0Y2goKTsKLX0KLQotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAotewotICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKLX0KLSAgICAKLWZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5
cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5zaXplKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgU2tBU1NFUlQoc2l6ZW9mKGdseXBoKSA9PSAyKTsg
ICAvLyBjb21waWxlLXRpbWUgYXNzZXJ0Ci0KLSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgbV9w
bGF0Zm9ybURhdGEuc2V0dXBQYWludCgmcGFpbnQpOwotCi0gICAgcGFpbnQuc2V0VGV4dEVuY29k
aW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7Ci0gICAgU2tTY2FsYXIgd2lkdGgg
PSBwYWludC5tZWFzdXJlVGV4dCgmZ2x5cGgsIDIpOwotCi0gICAgLy8gVGhvdWdoIFdlYktpdCBz
dXBwb3J0cyBub24taW50ZWdyYWwgYWR2YW5jZXMsIFNraWEgb25seSBzdXBwb3J0cyB0aGVtCi0g
ICAgLy8gZm9yICJzdWJwaXhlbCIgKGRpc3RpbmN0IGZyb20gTENEIHN1YnBpeGVsIGFudGlhbGlh
c2luZykgdGV4dCwgd2hpY2gKLSAgICAvLyB3ZSBkb24ndCB1c2UuCi0gICAgcmV0dXJuIHJvdW5k
KFNrU2NhbGFyVG9GbG9hdCh3aWR0aCkpOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjp1cGRh
dGVHbHlwaFdpdGhWYXJpYXRpb25TZWxlY3RvcihVQ2hhcjMyIGNoYXJhY3RlciwgVUNoYXIzMiBz
ZWxlY3RvciwgR2x5cGgmIGdseXBoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQu
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6
ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4
VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEzNjM2NWI0MDliYjM1Zjkw
NGJhNTJlNTQxNTIxNmM5NWY1MjM4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6
LmNwcApAQCAtMCwwICsxLDU3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21w
bGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRv
ci5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiaGFy
ZmJ1enotdW5pY29kZS5oIgorfQorCisjaW5jbHVkZSA8dW5pY29kZS9ub3JtbHpyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gSGFyZmJ1enogdXNlcyAyNi42IGZpeGVkIHBvaW50IHZh
bHVlcyBmb3IgcGl4ZWwgb2Zmc2V0cy4gSG93ZXZlciwgd2UgZG9uJ3QKKy8vIGhhbmRsZSBzdWJw
aXhlbCBwb3NpdGlvbmluZyBzbyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdHJ1bmNhdGUgSGFy
ZmJ1enoKKy8vIHZhbHVlcyB0byBhIG51bWJlciBvZiBwaXhlbHMuCitzdGF0aWMgaW50IHRydW5j
YXRlRml4ZWRQb2ludFRvSW50ZWdlcihIQl9GaXhlZCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFs
dWUgPj4gNjsKK30KKworQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xs
ZXIoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgc3RhcnRpbmdYLCBpbnQgc3RhcnRpbmdZLCB1bnNp
Z25lZCB3b3JkU3BhY2luZywgdW5zaWduZWQgbGV0dGVyU3BhY2luZywgdW5zaWduZWQgcGFkZGlu
ZywgY29uc3QgRm9udCogZm9udCkKKyAgICA6IG1fZm9udChmb250KQorICAgICwgbV9ydW4oZ2V0
Tm9ybWFsaXplZFRleHRSdW4ocnVuLCBtX25vcm1hbGl6ZWRSdW4sIG1fbm9ybWFsaXplZEJ1ZmZl
cikpCit7CisgICAgLy8gRG8gbm90IHVzZSB8cnVufCBpbnNpZGUgdGhpcyBjb25zdHJ1Y3Rvci4g
VXNlIHxtX3J1bnwgaW5zdGVhZC4KKworICAgIG1lbXNldCgmbV9pdGVtLCAwLCBzaXplb2YobV9p
dGVtKSk7CisgICAgLy8gV2UgY2Fubm90IGtub3csIGFoZWFkIG9mIHRpbWUsIGhvdyBtYW55IGds
eXBocyBhIGdpdmVuIHNjcmlwdCBydW4KKyAgICAvLyB3aWxsIHByb2R1Y2UuIFdlIHRha2UgYSBn
dWVzcyB0aGF0IHNjcmlwdCBydW5zIHdpbGwgbm90IHByb2R1Y2UgbW9yZQorICAgIC8vIHRoYW4g
dHdpY2UgYXMgbWFueSBnbHlwaHMgYXMgdGhlcmUgYXJlIGNvZGUgcG9pbnRzIHBsdXMgYSBiaXQg
b2YKKyAgICAvLyBwYWRkaW5nIGFuZCBmYWxsYmFjayBpZiB3ZSBmaW5kIHRoYXQgd2UgYXJlIHdy
b25nLgorICAgIGNyZWF0ZUdseXBoQXJyYXlzKChtX3J1bi5sZW5ndGgoKSArIDIpICogMik7CisK
KyAgICBtX2l0ZW0ubG9nX2NsdXN0ZXJzID0gbmV3IHVuc2lnbmVkIHNob3J0W21fcnVuLmxlbmd0
aCgpXTsKKworICAgIG1faXRlbS5mYWNlID0gMDsKKyAgICBtX2l0ZW0uZm9udCA9IGFsbG9jSGFy
ZmJ1enpGb250KCk7CisKKyAgICBtX2l0ZW0uaXRlbS5iaWRpTGV2ZWwgPSBtX3J1bi5ydGwoKTsK
KworICAgIG1faXRlbS5zdHJpbmcgPSBtX3J1bi5jaGFyYWN0ZXJzKCk7CisgICAgbV9pdGVtLnN0
cmluZ0xlbmd0aCA9IG1fcnVuLmxlbmd0aCgpOworCisgICAgcmVzZXQoc3RhcnRpbmdYKTsKKyAg
ICBtX3N0YXJ0aW5nWSA9IHN0YXJ0aW5nWTsKKworICAgIHNldFdvcmRTcGFjaW5nQWRqdXN0bWVu
dCh3b3JkU3BhY2luZyk7CisgICAgc2V0TGV0dGVyU3BhY2luZ0FkanVzdG1lbnQobGV0dGVyU3Bh
Y2luZyk7CisgICAgc2V0UGFkZGluZyhwYWRkaW5nKTsKK30KKworQ29tcGxleFRleHRDb250cm9s
bGVyOjp+Q29tcGxleFRleHRDb250cm9sbGVyKCkKK3sKKyAgICBmYXN0RnJlZShtX2l0ZW0uZm9u
dCk7CisgICAgZGVsZXRlR2x5cGhBcnJheXMoKTsKKyAgICBkZWxldGVbXSBtX2l0ZW0ubG9nX2Ns
dXN0ZXJzOworfQorCitib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6aXNXb3JkQnJlYWsodW5z
aWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIGluZGV4ICYmIGlzQ29kZXBvaW50U3BhY2UobV9p
dGVtLnN0cmluZ1tpbmRleF0pICYmICFpc0NvZGVwb2ludFNwYWNlKG1faXRlbS5zdHJpbmdbaW5k
ZXggLSAxXSk7Cit9CisKK2ludCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmRldGVybWluZVdvcmRC
cmVha1NwYWNpbmcodW5zaWduZWQgbG9nQ2x1c3RlcnNJbmRleCkKK3sKKyAgICBpbnQgd29yZEJy
ZWFrU3BhY2luZyA9IDA7CisgICAgLy8gVGhlIGZpcnN0IGhhbGYgb2YgdGhlIGNvbmp1bmN0aW9u
IHdvcmtzIGFyb3VuZCB0aGUgY2FzZSB3aGVyZQorICAgIC8vIG91dHB1dCBnbHlwaHMgYXJlbid0
IGFzc29jaWF0ZWQgd2l0aCBhbnkgY29kZXBvaW50cyBieSB0aGUKKyAgICAvLyBjbHVzdGVycyBs
b2cuCisgICAgaWYgKGxvZ0NsdXN0ZXJzSW5kZXggPCBtX2l0ZW0uaXRlbS5sZW5ndGgKKyAgICAg
ICAgJiYgaXNXb3JkQnJlYWsobV9pdGVtLml0ZW0ucG9zICsgbG9nQ2x1c3RlcnNJbmRleCkpIHsK
KyAgICAgICAgd29yZEJyZWFrU3BhY2luZyA9IG1fd29yZFNwYWNpbmdBZGp1c3RtZW50OworCisg
ICAgICAgIGlmIChtX3BhZGRpbmcgPiAwKSB7CisgICAgICAgICAgICBpbnQgdG9QYWQgPSByb3Vu
ZGYobV9wYWRQZXJXb3JkQnJlYWsgKyBtX3BhZEVycm9yKTsKKyAgICAgICAgICAgIG1fcGFkRXJy
b3IgKz0gbV9wYWRQZXJXb3JkQnJlYWsgLSB0b1BhZDsKKworICAgICAgICAgICAgaWYgKG1fcGFk
ZGluZyA8IHRvUGFkKQorICAgICAgICAgICAgICAgIHRvUGFkID0gbV9wYWRkaW5nOworICAgICAg
ICAgICAgbV9wYWRkaW5nIC09IHRvUGFkOworICAgICAgICAgICAgd29yZEJyZWFrU3BhY2luZyAr
PSB0b1BhZDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gd29yZEJyZWFrU3BhY2luZzsK
K30KKworLy8gc2V0UGFkZGluZyBzZXRzIGEgbnVtYmVyIG9mIHBpeGVscyB0byBiZSBkaXN0cmli
dXRlZCBhY3Jvc3MgdGhlIFRleHRSdW4uCisvLyBXZWJLaXQgdXNlcyB0aGlzIHRvIGp1c3RpZnkg
dGV4dC4KK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXRQYWRkaW5nKGludCBwYWRkaW5n
KQoreworICAgIG1fcGFkZGluZyA9IHBhZGRpbmc7CisgICAgbV9wYWRFcnJvciA9IDA7CisgICAg
aWYgKCFtX3BhZGRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHdlIGhhdmUgcGFk
ZGluZyB0byBkaXN0cmlidXRlLCB0aGVuIHdlIHRyeSB0byBnaXZlIGFuIGVxdWFsCisgICAgLy8g
YW1vdW50IHRvIGVhY2ggc3BhY2UuIFRoZSBsYXN0IHNwYWNlIGdldHMgdGhlIHNtYWxsZXIgYW1v
dW50LCBpZgorICAgIC8vIGFueS4KKyAgICB1bnNpZ25lZCBudW1Xb3JkQnJlYWtzID0gMDsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2l0ZW0uc3RyaW5nTGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgaWYgKGlzV29yZEJyZWFrKGkpKQorICAgICAgICAgICAgbnVtV29yZEJyZWFrcysr
OworICAgIH0KKworICAgIGlmIChudW1Xb3JkQnJlYWtzKQorICAgICAgICBtX3BhZFBlcldvcmRC
cmVhayA9IG1fcGFkZGluZyAvIG51bVdvcmRCcmVha3M7CisgICAgZWxzZQorICAgICAgICBtX3Bh
ZFBlcldvcmRCcmVhayA9IDA7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpyZXNl
dChpbnQgb2Zmc2V0KQoreworICAgIG1faW5kZXhPZk5leHRTY3JpcHRSdW4gPSAwOworICAgIG1f
b2Zmc2V0WCA9IG9mZnNldDsKK30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldHVw
Rm9yUlRMKCkKK3sKKyAgICBpbnQgcGFkZGluZyA9IG1fcGFkZGluZzsKKyAgICAvLyBGSVhNRTog
dGhpcyBjYXVzZXMgdXMgdG8gc2hhcGUgdGhlIHRleHQgdHdpY2UgLS0gb25jZSB0byBjb21wdXRl
IHRoZSB3aWR0aCBhbmQgdGhlbiBhZ2FpbgorICAgIC8vIGJlbG93IHdoZW4gYWN0dWFsbHkgcmVu
ZGVyaW5nLiBDaGFuZ2UgQ29tcGxleFRleHRDb250cm9sbGVyIHRvIG1hdGNoIHBsYXRmb3JtL21h
YyBhbmQKKyAgICAvLyBwbGF0Zm9ybS9jaHJvbWl1bS93aW4gYnkgaGF2aW5nIGl0IHN0b3JlIHRo
ZSBzaGFwZWQgcnVucywgc28gd2UgY2FuIHJldXNlIHRoZSByZXN1bHRzLgorICAgIHJlc2V0KG1f
b2Zmc2V0WCArIHdpZHRoT2ZGdWxsUnVuKCkpOworICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBw
YWRkaW5nIGFnYWluIGJlY2F1c2UgQ29tcGxleFRleHRDb250cm9sbGVyIGxheW91dCBjb25zdW1l
ZCB0aGUgdmFsdWUuCisgICAgLy8gRml4aW5nIHRoZSBhYm92ZSBwcm9ibGVtIHdvdWxkIGhlbHAg
aGVyZSB0b28uCisgICAgc2V0UGFkZGluZyhwYWRkaW5nKTsKK30KKworLy8gQWR2YW5jZSB0byB0
aGUgbmV4dCBzY3JpcHQgcnVuLCByZXR1cm5pbmcgZmFsc2Ugd2hlbiB0aGUgZW5kIG9mIHRoZQor
Ly8gVGV4dFJ1biBoYXMgYmVlbiByZWFjaGVkLgorYm9vbCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
Om5leHRTY3JpcHRSdW4oKQoreworICAgIC8vIEVuc3VyZSB3ZSdyZSBub3QgcG9pbnRpbmcgYXQg
dGhlIHNtYWxsIGNhcHMgYnVmZmVyLgorICAgIG1faXRlbS5zdHJpbmcgPSBtX3J1bi5jaGFyYWN0
ZXJzKCk7CisKKyAgICBpZiAoIWhiX3V0ZjE2X3NjcmlwdF9ydW5fbmV4dCgwLCAmbV9pdGVtLml0
ZW0sIG1fcnVuLmNoYXJhY3RlcnMoKSwgbV9ydW4ubGVuZ3RoKCksICZtX2luZGV4T2ZOZXh0U2Ny
aXB0UnVuKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSXQgaXMgYWN0dWFsbHkg
d3JvbmcgdG8gY29uc2lkZXIgc2NyaXB0IHJ1bnMgYXQgYWxsIGluIHRoaXMgY29kZS4KKyAgICAv
LyBPdGhlciBXZWJLaXQgY29kZSAoZS5nLiBNYWMpIHNlZ21lbnRzIGNvbXBsZXggdGV4dCBqdXN0
IGJ5IGZpbmRpbmcKKyAgICAvLyB0aGUgbG9uZ2VzdCBzcGFuIG9mIHRleHQgY292ZXJlZCBieSBh
IHNpbmdsZSBmb250LgorICAgIC8vIEJ1dCB3ZSBjdXJyZW50bHkgbmVlZCB0byBjYWxsIGhiX3V0
ZjE2X3NjcmlwdF9ydW5fbmV4dCBhbnl3YXkgdG8gZmlsbAorICAgIC8vIGluIHRoZSBoYXJmYnV6
eiBkYXRhIHN0cnVjdHVyZXMgdG8gZS5nLiBwaWNrIHRoZSBjb3JyZWN0IHNjcmlwdCdzIHNoYXBl
ci4KKyAgICAvLyBTbyB3ZSBhbGxvdyB0aGF0IHRvIHJ1biBmaXJzdCwgdGhlbiBkbyBhIHNlY29u
ZCBwYXNzIG92ZXIgdGhlIHJhbmdlIGl0CisgICAgLy8gZm91bmQgYW5kIHRha2UgdGhlIGxhcmdl
c3Qgc3VicmVnaW9uIHRoYXQgc3RheXMgd2l0aGluIGEgc2luZ2xlIGZvbnQuCisgICAgU3Vycm9n
YXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKHN0YXRpY19jYXN0PGNvbnN0IFVDaGFy
Kj4oJm1faXRlbS5zdHJpbmdbbV9pdGVtLml0ZW0ucG9zXSksIDAsIHN0YXRpY19jYXN0PGludD4o
bV9pdGVtLml0ZW0ubGVuZ3RoKSwgc3RhdGljX2Nhc3Q8aW50PihtX2l0ZW0uaXRlbS5sZW5ndGgp
KTsKKyAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0g
MDsKKyAgICBpZiAoIWl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fY3VycmVudEZvbnREYXRhID0gbV9mb250LT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7CisgICAgaXRl
cmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsKKyAgICB3aGlsZSAoaXRlcmF0b3IuY29uc3Vt
ZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKSB7CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0
ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBtX2N1cnJl
bnRGb250RGF0YSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpdGVyYXRvci5hZHZhbmNl
KGNsdXN0ZXJMZW5ndGgpOworICAgIH0KKyAgICBtX2l0ZW0uaXRlbS5sZW5ndGggPSBpdGVyYXRv
ci5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgbV9pbmRleE9mTmV4dFNjcmlwdFJ1biA9IG1faXRl
bS5pdGVtLnBvcyArIGl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKTsKKworICAgIHNldHVwRm9u
dEZvclNjcmlwdFJ1bigpOworICAgIHNoYXBlR2x5cGhzKCk7CisgICAgc2V0R2x5cGhQb3NpdGlv
bnMocnRsKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Zsb2F0IENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6d2lkdGhPZkZ1bGxSdW4oKQoreworICAgIGZsb2F0IHdpZHRoU3VtID0gMDsKKyAg
ICB3aGlsZSAobmV4dFNjcmlwdFJ1bigpKQorICAgICAgICB3aWR0aFN1bSArPSB3aWR0aCgpOwor
CisgICAgcmV0dXJuIHdpZHRoU3VtOworfQorCitzdGF0aWMgdm9pZCBzZXR1cEZvbnRGZWF0dXJl
cyhjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBzZXR0aW5ncywgSEJfRmFjZVJlY18qIGhiRmFj
ZSkKK3sKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGJG
YWNlLT5nc3ViKQorICAgICAgICBIQl9HU1VCX0NsZWFyX0ZlYXR1cmVzKGhiRmFjZS0+Z3N1Yik7
CisgICAgaWYgKGhiRmFjZS0+Z3BvcykKKyAgICAgICAgSEJfR1BPU19DbGVhcl9GZWF0dXJlcyho
YkZhY2UtPmdwb3MpOworCisgICAgSEJfVVNob3J0IHNjcmlwdEluZGV4ID0gMDsKKyAgICBIQl9H
U1VCX1NlbGVjdF9TY3JpcHQoaGJGYWNlLT5nc3ViLCBIQl9NQUtFX1RBRygnRCcsICdGJywgJ0wn
LCAnVCcpLCAmc2NyaXB0SW5kZXgpOworICAgIHNpemVfdCBudW1GZWF0dXJlcyA9IHNldHRpbmdz
LT5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1GZWF0dXJlczsgKytpKSB7
CisgICAgICAgIGlmICghc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgSEJfVVNob3J0IGZlYXR1cmVJbmRleCA9IDA7CisgICAgICAgIGNvbnN0
IFVDaGFyKiB0YWcgPSBzZXR0aW5ncy0+YXQoaSkudGFnKCkuY2hhcmFjdGVycygpOworICAgICAg
ICBIQl9VSW50IGZlYXR1cmUgPSBIQl9NQUtFX1RBRyh0YWdbMF0sIHRhZ1sxXSwgdGFnWzJdLCB0
YWdbM10pOworICAgICAgICBpZiAoaGJGYWNlLT5nc3ViICYmIEhCX0dTVUJfU2VsZWN0X0ZlYXR1
cmUoaGJGYWNlLT5nc3ViLCBmZWF0dXJlLCBzY3JpcHRJbmRleCwgMHhmZmZmLCAmZmVhdHVyZUlu
ZGV4KSA9PSBIQl9FcnJfT2spCisgICAgICAgICAgICBIQl9HU1VCX0FkZF9GZWF0dXJlKGhiRmFj
ZS0+Z3N1YiwgZmVhdHVyZUluZGV4LCBzZXR0aW5ncy0+YXQoaSkudmFsdWUoKSk7CisgICAgICAg
IGVsc2UgaWYgKGhiRmFjZS0+Z3BvcyAmJiBIQl9HUE9TX1NlbGVjdF9GZWF0dXJlKGhiRmFjZS0+
Z3BvcywgZmVhdHVyZSwgc2NyaXB0SW5kZXgsIDB4ZmZmZiwgJmZlYXR1cmVJbmRleCkgPT0gSEJf
RXJyX09rKQorICAgICAgICAgICAgSEJfR1BPU19BZGRfRmVhdHVyZShoYkZhY2UtPmdwb3MsIGZl
YXR1cmVJbmRleCwgc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCkpOworICAgIH0KK30KKworc3RhdGlj
IFVDaGFyMzIgc3Vycm9nYXRlUGFpckF3YXJlRmlyc3RDaGFyYWN0ZXIoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoVTE2X0lTX1NVUlJPR0FURShj
aGFyYWN0ZXJzWzBdKSkgeworICAgICAgICBpZiAoIVUxNl9JU19TVVJST0dBVEVfTEVBRChjaGFy
YWN0ZXJzWzBdKSB8fCBsZW5ndGggPCAyIHx8ICFVMTZfSVNfVFJBSUwoY2hhcmFjdGVyc1sxXSkp
CisgICAgICAgICAgICByZXR1cm4gJyAnOworICAgICAgICByZXR1cm4gVTE2X0dFVF9TVVBQTEVN
RU5UQVJZKGNoYXJhY3RlcnNbMF0sIGNoYXJhY3RlcnNbMV0pOworICAgIH0KKyAgICByZXR1cm4g
Y2hhcmFjdGVyc1swXTsKK30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldHVwRm9u
dEZvclNjcmlwdFJ1bigpCit7CisgICAgRm9udERhdGFWYXJpYW50IGZvbnREYXRhVmFyaWFudCA9
IEF1dG9WYXJpYW50OworICAgIC8vIERldGVybWluZSBpZiB0aGlzIHNjcmlwdCBydW4gbmVlZHMg
dG8gYmUgY29udmVydGVkIHRvIHNtYWxsIGNhcHMuCisgICAgLy8gbmV4dFNjcmlwdFJ1bigpIHdp
bGwgYWx3YXlzIHNlbmQgdXMgYSBydW4gb2YgdGhlIHNhbWUgY2FzZSwgYmVjYXVzZSBhCisgICAg
Ly8gY2FzZSBjaGFuZ2Ugd2hpbGUgaW4gc21hbGwtY2FwcyBtb2RlIGFsd2F5cyByZXN1bHRzIGlu
IGRpZmZlcmVudAorICAgIC8vIEZvbnREYXRhLCBzbyB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhl
IGZpcnN0IGNoYXJhY3RlcidzIGNhc2UuCisgICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSAm
JiB1X2lzbG93ZXIobV9pdGVtLnN0cmluZ1ttX2l0ZW0uaXRlbS5wb3NdKSkgeworICAgICAgICBt
X3NtYWxsQ2Fwc1N0cmluZyA9IFN0cmluZyhtX3J1bi5kYXRhKG1faXRlbS5pdGVtLnBvcyksIG1f
aXRlbS5pdGVtLmxlbmd0aCk7CisgICAgICAgIG1fc21hbGxDYXBzU3RyaW5nLm1ha2VVcHBlcigp
OworICAgICAgICBtX2l0ZW0uc3RyaW5nID0gbV9zbWFsbENhcHNTdHJpbmcuY2hhcmFjdGVycygp
OworICAgICAgICBtX2l0ZW0uaXRlbS5wb3MgPSAwOworICAgICAgICBmb250RGF0YVZhcmlhbnQg
PSBTbWFsbENhcHNWYXJpYW50OworICAgIH0KKyAgICBVQ2hhcjMyIGN1cnJlbnQgPSBzdXJyb2dh
dGVQYWlyQXdhcmVGaXJzdENoYXJhY3RlcihzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KCZtX2l0
ZW0uc3RyaW5nW21faXRlbS5pdGVtLnBvc10pLCBtX2l0ZW0uaXRlbS5sZW5ndGggLSBtX2l0ZW0u
aXRlbS5wb3MpOworICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IG1fZm9udC0+Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGN1cnJlbnQsIGZhbHNlLCBmb250RGF0YVZhcmlhbnQpLmZvbnREYXRh
OworICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnREYXRhLT5m
b250RGF0YUZvckNoYXJhY3RlcignICcpLT5wbGF0Zm9ybURhdGEoKTsKKyAgICBtX2l0ZW0uZmFj
ZSA9IHBsYXRmb3JtRGF0YS5oYXJmYnV6ekZhY2UoKS0+ZmFjZSgpOworICAgIC8vIFdlIG9ubHkg
bmVlZCB0byBzZXR1cCBmb250IGZlYXR1cmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1bi4K
KyAgICBpZiAoIW1faXRlbS5pdGVtLnBvcykKKyAgICAgICAgc2V0dXBGb250RmVhdHVyZXMobV9m
b250LT5mb250RGVzY3JpcHRpb24oKS5mZWF0dXJlU2V0dGluZ3MoKSwgbV9pdGVtLmZhY2UpOwor
ICAgIHZvaWQqIG9wYXF1ZVBsYXRmb3JtRGF0YSA9IGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0
YSo+KCZwbGF0Zm9ybURhdGEpOworICAgIG1faXRlbS5mb250LT51c2VyRGF0YSA9IG9wYXF1ZVBs
YXRmb3JtRGF0YTsKKworICAgIGludCBzaXplID0gcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBt
X2l0ZW0uZm9udC0+eF9wcGVtID0gc2l6ZTsKKyAgICBtX2l0ZW0uZm9udC0+eV9wcGVtID0gc2l6
ZTsKKyAgICAvLyB4XyBhbmQgeV9zY2FsZSBhcmUgdGhlIGNvbnZlcnNpb24gZmFjdG9ycyBmcm9t
IGZvbnQgZGVzaWduIHNwYWNlIChmRW1TaXplKSB0byAxLzY0dGggb2YgZGV2aWNlIHBpeGVscyBp
biAxNi4xNiBmb3JtYXQuCisgICAgY29uc3QgaW50IGRldmljZVBpeGVsRnJhY3Rpb24gPSA2NDsK
KyAgICBjb25zdCBpbnQgbXVsdGlwbHlGb3IxNkRvdDE2ID0gMSA8PCAxNjsKKyAgICBpbnQgc2Nh
bGUgPSBkZXZpY2VQaXhlbEZyYWN0aW9uICogc2l6ZSAqIG11bHRpcGx5Rm9yMTZEb3QxNiAvIHBs
YXRmb3JtRGF0YS5lbVNpemVJbkZvbnRVbml0cygpOworICAgIG1faXRlbS5mb250LT54X3NjYWxl
ID0gc2NhbGU7CisgICAgbV9pdGVtLmZvbnQtPnlfc2NhbGUgPSBzY2FsZTsKK30KKwordm9pZCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OmRlbGV0ZUdseXBoQXJyYXlzKCkKK3sKKyAgICBkZWxldGVb
XSBtX2l0ZW0uZ2x5cGhzOworICAgIGRlbGV0ZVtdIG1faXRlbS5hdHRyaWJ1dGVzOworICAgIGRl
bGV0ZVtdIG1faXRlbS5hZHZhbmNlczsKKyAgICBkZWxldGVbXSBtX2l0ZW0ub2Zmc2V0czsKKyAg
ICBkZWxldGVbXSBtX2dseXBoczE2OworICAgIGRlbGV0ZVtdIG1fcG9zaXRpb25zOworfQorCit2
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y3JlYXRlR2x5cGhBcnJheXMoaW50IHNpemUpCit7
CisgICAgbV9pdGVtLmdseXBocyA9IG5ldyBIQl9HbHlwaFtzaXplXTsKKyAgICBtX2l0ZW0uYXR0
cmlidXRlcyA9IG5ldyBIQl9HbHlwaEF0dHJpYnV0ZXNbc2l6ZV07CisgICAgbV9pdGVtLmFkdmFu
Y2VzID0gbmV3IEhCX0ZpeGVkW3NpemVdOworICAgIG1faXRlbS5vZmZzZXRzID0gbmV3IEhCX0Zp
eGVkUG9pbnRbc2l6ZV07CisKKyAgICBtX2dseXBoczE2ID0gbmV3IHVpbnQxNl90W3NpemVdOwor
ICAgIG1fcG9zaXRpb25zID0gbmV3IFNrUG9pbnRbc2l6ZV07CisKKyAgICBtX2l0ZW0ubnVtX2ds
eXBocyA9IHNpemU7CisgICAgbV9nbHlwaHNBcnJheUNhcGFjaXR5ID0gc2l6ZTsgLy8gU2F2ZSB0
aGUgR2x5cGhBcnJheXMgc2l6ZS4KKyAgICByZXNldEdseXBoQXJyYXlzKCk7Cit9CisKK3ZvaWQg
Q29tcGxleFRleHRDb250cm9sbGVyOjpyZXNldEdseXBoQXJyYXlzKCkKK3sKKyAgICBpbnQgc2l6
ZSA9IG1faXRlbS5udW1fZ2x5cGhzOworICAgIC8vIEFsbCB0aGUgdHlwZXMgaGVyZSBkb24ndCBo
YXZlIHBvaW50ZXJzLiBJdCBpcyBzYWZlIHRvIHJlc2V0IHRvCisgICAgLy8gemVybyB1bmxlc3Mg
SGFyZmJ1enogYnJlYWtzIHRoZSBjb21wYXRpYmlsaXR5IGluIHRoZSBmdXR1cmUuCisgICAgbWVt
c2V0KG1faXRlbS5nbHlwaHMsIDAsIHNpemUgKiBzaXplb2YoSEJfR2x5cGgpKTsKKyAgICBtZW1z
ZXQobV9pdGVtLmF0dHJpYnV0ZXMsIDAsIHNpemUgKiBzaXplb2YoSEJfR2x5cGhBdHRyaWJ1dGVz
KSk7CisgICAgbWVtc2V0KG1faXRlbS5hZHZhbmNlcywgMCwgc2l6ZSAqIHNpemVvZihIQl9GaXhl
ZCkpOworICAgIG1lbXNldChtX2l0ZW0ub2Zmc2V0cywgMCwgc2l6ZSAqIHNpemVvZihIQl9GaXhl
ZFBvaW50KSk7CisgICAgbWVtc2V0KG1fZ2x5cGhzMTYsIDAsIHNpemUgKiBzaXplb2YodWludDE2
X3QpKTsKKyAgICBtZW1zZXQobV9wb3NpdGlvbnMsIDAsIHNpemUgKiBzaXplb2YoU2tQb2ludCkp
OworfQorCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2hhcGVHbHlwaHMoKQoreworICAg
IC8vIEhCX1NoYXBlSXRlbSgpIHJlc2V0cyBtX2l0ZW0ubnVtX2dseXBocy4gSWYgdGhlIHByZXZp
b3VzIGNhbGwgdG8KKyAgICAvLyBIQl9TaGFwZUl0ZW0oKSB1c2VkIGxlc3Mgc3BhY2UgdGhhbiB3
YXMgYXZhaWxhYmxlLCB0aGUgY2FwYWNpdHkgb2YKKyAgICAvLyB0aGUgYXJyYXkgbWF5IGJlIGxh
cmdlciB0aGFuIHRoZSBjdXJyZW50IHZhbHVlIG9mIG1faXRlbS5udW1fZ2x5cGhzLgorICAgIC8v
IFNvLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBudW1fZ2x5cGhzIHRvIHRoZSBjYXBhY2l0eSBvZiB0
aGUgYXJyYXkuCisgICAgbV9pdGVtLm51bV9nbHlwaHMgPSBtX2dseXBoc0FycmF5Q2FwYWNpdHk7
CisgICAgcmVzZXRHbHlwaEFycmF5cygpOworICAgIHdoaWxlICghSEJfU2hhcGVJdGVtKCZtX2l0
ZW0pKSB7CisgICAgICAgIC8vIFdlIG92ZXJmbG93ZWQgb3VyIGFycmF5cy4gUmVzaXplIGFuZCBy
ZXRyeS4KKyAgICAgICAgLy8gSEJfU2hhcGVJdGVtIGZpbGxzIGluIG1faXRlbS5udW1fZ2x5cGhz
IHdpdGggdGhlIG5lZWRlZCBzaXplLgorICAgICAgICBkZWxldGVHbHlwaEFycmF5cygpOworICAg
ICAgICAvLyBUaGUgfCsgMXwgaGVyZSBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEhhcmZi
dXp6OiB0aGUgS2htZXIKKyAgICAgICAgLy8gc2hhcGVyIChhdCBsZWFzdCkgY2FuIGZhaWwgYmVj
YXVzZSBvZiBpbnN1ZmZpY2llbnQgZ2x5cGggYnVmZmVycworICAgICAgICAvLyBhbmQgcmVxdWVz
dCAwIGFkZGl0aW9uYWwgZ2x5cGhzOiB0aHJvd2luZyB1cyBpbnRvIGFuIGluZmluaXRlCisgICAg
ICAgIC8vIGxvb3AuCisgICAgICAgIGNyZWF0ZUdseXBoQXJyYXlzKG1faXRlbS5udW1fZ2x5cGhz
ICsgMSk7CisgICAgfQorfQorCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0R2x5cGhQ
b3NpdGlvbnMoYm9vbCBpc1JUTCkKK3sKKyAgICBjb25zdCBkb3VibGUgcnRsRmxpcCA9IGlzUlRM
ID8gLTEgOiAxOworICAgIGRvdWJsZSBwb3NpdGlvbiA9IDA7CisKKyAgICAvLyBsb2dDbHVzdGVy
c0luZGV4IGluZGV4ZXMgbG9nQ2x1c3RlcnMgZm9yIHRoZSBmaXJzdCBjb2RlcG9pbnQgb2YgdGhl
IGN1cnJlbnQgZ2x5cGguCisgICAgLy8gRWFjaCB0aW1lIHdlIGFkdmFuY2UgYSBnbHlwaCwgd2Ug
c2tpcCBvdmVyIGFsbCB0aGUgY29kZXBvaW50cyB0aGF0IGNvbnRyaWJ1dGVkIHRvIHRoZSBjdXJy
ZW50IGdseXBoLgorICAgIGludCBsb2dDbHVzdGVyc0luZGV4ID0gMDsKKworICAgIC8vIEl0ZXJh
dGUgdGhyb3VnaCB0aGUgZ2x5cGhzIGluIGxvZ2ljYWwgb3JkZXIsIGZsaXBwaW5nIGZvciBSVEwg
d2hlcmUgbmVjZXNzYXJ5LgorICAgIC8vIEdseXBocyBhcmUgcG9zaXRpb25lZCBzdGFydGluZyBm
cm9tIG1fb2Zmc2V0WDsgaW4gUlRMIG1vZGUgdGhleSBnbyBsZWZ0d2FyZHMgZnJvbSB0aGVyZS4K
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbS5udW1fZ2x5cGhzOyArK2kpIHsKKyAg
ICAgICAgd2hpbGUgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2dDbHVzdGVyc0luZGV4KSA8IG1f
aXRlbS5pdGVtLmxlbmd0aCAmJiBtX2l0ZW0ubG9nX2NsdXN0ZXJzW2xvZ0NsdXN0ZXJzSW5kZXhd
IDwgaSkKKyAgICAgICAgICAgIGxvZ0NsdXN0ZXJzSW5kZXgrKzsKKworICAgICAgICAvLyBJZiB0
aGUgY3VycmVudCBnbHlwaCBpcyBqdXN0IGFmdGVyIGEgc3BhY2UsIGFkZCBpbiB0aGUgd29yZCBz
cGFjaW5nLgorICAgICAgICBwb3NpdGlvbiArPSBkZXRlcm1pbmVXb3JkQnJlYWtTcGFjaW5nKGxv
Z0NsdXN0ZXJzSW5kZXgpOworCisgICAgICAgIG1fZ2x5cGhzMTZbaV0gPSBtX2l0ZW0uZ2x5cGhz
W2ldOworICAgICAgICBkb3VibGUgb2Zmc2V0WCA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdl
cihtX2l0ZW0ub2Zmc2V0c1tpXS54KTsKKyAgICAgICAgZG91YmxlIG9mZnNldFkgPSB0cnVuY2F0
ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLm9mZnNldHNbaV0ueSk7CisgICAgICAgIGRvdWJs
ZSBhZHZhbmNlID0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKG1faXRlbS5hZHZhbmNlc1tp
XSk7CisgICAgICAgIGlmIChpc1JUTCkKKyAgICAgICAgICAgIG9mZnNldFggLT0gYWR2YW5jZTsK
KworICAgICAgICBtX3Bvc2l0aW9uc1tpXS5zZXQobV9vZmZzZXRYICsgKHBvc2l0aW9uICogcnRs
RmxpcCkgKyBvZmZzZXRYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGFydGluZ1kg
KyBvZmZzZXRZKTsKKworICAgICAgICBpZiAobV9jdXJyZW50Rm9udERhdGEtPmlzWmVyb1dpZHRo
U3BhY2VHbHlwaChtX2dseXBoczE2W2ldKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIC8vIEF0IHRoZSBlbmQgb2YgZWFjaCBjbHVzdGVyLCBhZGQgaW4gdGhlIGxldHRlciBzcGFj
aW5nLgorICAgICAgICBpZiAoaSArIDEgPT0gbV9pdGVtLm51bV9nbHlwaHMgfHwgbV9pdGVtLmF0
dHJpYnV0ZXNbaSArIDFdLmNsdXN0ZXJTdGFydCkKKyAgICAgICAgICAgIHBvc2l0aW9uICs9IG1f
bGV0dGVyU3BhY2luZzsKKworICAgICAgICBwb3NpdGlvbiArPSBhZHZhbmNlOworICAgIH0KKyAg
ICBtX3BpeGVsV2lkdGggPSBzdGQ6Om1heChwb3NpdGlvbiwgMC4wKTsKKyAgICBtX29mZnNldFgg
Kz0gbV9waXhlbFdpZHRoICogcnRsRmxpcDsKK30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6Om5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNoYXJzKGNvbnN0IFVDaGFyKiBzb3VyY2UsIGJv
b2wgcnRsLCBVQ2hhciogZGVzdGluYXRpb24sIGludCBsZW5ndGgpCit7CisgICAgaW50IHBvc2l0
aW9uID0gMDsKKyAgICBib29sIGVycm9yID0gZmFsc2U7CisgICAgLy8gSXRlcmF0ZSBjaGFyYWN0
ZXJzIGluIHNvdXJjZSBhbmQgbWlycm9yIGNoYXJhY3RlciBpZiBuZWVkZWQuCisgICAgd2hpbGUg
KHBvc2l0aW9uIDwgbGVuZ3RoKSB7CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgICAg
ICBpbnQgbmV4dFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgIFUxNl9ORVhUKHNvdXJjZSwg
bmV4dFBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7CisgICAgICAgIGlmIChGb250Ojp0cmVh
dEFzU3BhY2UoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgIGNoYXJhY3RlciA9ICcgJzsKKyAgICAg
ICAgZWxzZSBpZiAoRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3RlcikpCisgICAg
ICAgICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgZWxzZSBpZiAocnRs
KQorICAgICAgICAgICAgY2hhcmFjdGVyID0gdV9jaGFyTWlycm9yKGNoYXJhY3Rlcik7CisgICAg
ICAgIFUxNl9BUFBFTkQoZGVzdGluYXRpb24sIHBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlciwg
ZXJyb3IpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAhZXJyb3IpOworICAgICAgICBw
b3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKKyAgICB9Cit9CisKK2NvbnN0IFRleHRSdW4mIENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6Z2V0Tm9ybWFsaXplZFRleHRSdW4oY29uc3QgVGV4dFJ1biYgb3Jp
Z2luYWxSdW4sIE93blB0cjxUZXh0UnVuPiYgbm9ybWFsaXplZFJ1biwgT3duQXJyYXlQdHI8VUNo
YXI+JiBub3JtYWxpemVkQnVmZmVyKQoreworICAgIC8vIE5vcm1hbGl6ZSB0aGUgdGV4dCBydW4g
aW4gdGhyZWUgd2F5czoKKyAgICAvLyAxKSBDb252ZXJ0IHRoZSB8b3JpZ2luYWxSdW58IHRvIE5G
QyBub3JtYWxpemVkIGZvcm0gaWYgY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCisgICAgLy8g
KFUrMDMwMC4uKSBhcmUgdXNlZCBpbiB0aGUgcnVuLiBUaGlzIGNvbnZlcnNpb24gaXMgbmVjZXNz
YXJ5IHNpbmNlIG1vc3QgT3BlblR5cGUKKyAgICAvLyBmb250cyAoZS5nLiwgQXJpYWwpIGRvbid0
IGhhdmUgc3Vic3RpdHV0aW9uIHJ1bGVzIGZvciB0aGUgZGlhY3JpdGljYWwgbWFya3MgaW4KKyAg
ICAvLyB0aGVpciBHU1VCIHRhYmxlcy4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24n
dCB1c2UgdGhlIGljdTo6Tm9ybWFsaXplcjo6aXNOb3JtYWxpemVkKFVOT1JNX05GQykgQVBJIGhl
cmUgc2luY2UKKyAgICAvLyB0aGUgQVBJIHJldHVybnMgRkFMU0UgKD0gbm90IG5vcm1hbGl6ZWQp
IGZvciBjb21wbGV4IHJ1bnMgdGhhdCBkb24ndCByZXF1aXJlIE5GQworICAgIC8vIG5vcm1hbGl6
YXRpb24gKGUuZy4sIEFyYWJpYyB0ZXh0KS4gVW5sZXNzIHRoZSBydW4gY29udGFpbnMgdGhlIGRp
YWNyaXRpY2FsIG1hcmtzLAorICAgIC8vIEhhcmZidXp6IHdpbGwgZG8gdGhlIHNhbWUgdGhpbmcg
Zm9yIHVzIHVzaW5nIHRoZSBHU1VCIHRhYmxlLgorICAgIC8vIDIpIENvbnZlcnQgc3BhY2luZyBj
aGFyYWN0ZXJzIGludG8gcGxhaW4gc3BhY2VzLCBhcyBzb21lIGZvbnRzIHdpbGwgcHJvdmlkZSBn
bHlwaHMKKyAgICAvLyBmb3IgY2hhcmFjdGVycyBsaWtlICdcbicgb3RoZXJ3aXNlLgorICAgIC8v
IDMpIENvbnZlcnQgbWlycm9yZWQgY2hhcmFjdGVycyBzdWNoIGFzIHBhcmVudGhlc2lzIGZvciBy
dGwgdGV4dC4KKworICAgIC8vIENvbnZlcnQgdG8gTkZDIGZvcm0gaWYgdGhlIHRleHQgaGFzIGRp
YWNyaXRpY2FsIG1hcmtzLgorICAgIGljdTo6VW5pY29kZVN0cmluZyBub3JtYWxpemVkU3RyaW5n
OworICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG9yaWdpbmFsUnVuLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgVUNoYXIgY2gg
PSBvcmlnaW5hbFJ1bltpXTsKKyAgICAgICAgaWYgKDo6dWJsb2NrX2dldENvZGUoY2gpID09IFVC
TE9DS19DT01CSU5JTkdfRElBQ1JJVElDQUxfTUFSS1MpIHsKKyAgICAgICAgICAgIGljdTo6Tm9y
bWFsaXplcjo6bm9ybWFsaXplKGljdTo6VW5pY29kZVN0cmluZyhvcmlnaW5hbFJ1bi5jaGFyYWN0
ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFJ1
bi5sZW5ndGgoKSksIFVOT1JNX05GQywgMCAvKiBubyBvcHRpb25zICovLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFN0cmluZywgZXJyb3IpOworICAg
ICAgICAgICAgaWYgKFVfRkFJTFVSRShlcnJvcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9y
aWdpbmFsUnVuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBOb3JtYWxpemUgc3BhY2UgYW5kIG1pcnJvciBwYXJlbnRoZXNpcyBmb3IgcnRsIHRleHQuCisg
ICAgaW50IG5vcm1hbGl6ZWRCdWZmZXJMZW5ndGg7CisgICAgY29uc3QgVUNoYXIqIHNvdXJjZVRl
eHQ7CisgICAgaWYgKG5vcm1hbGl6ZWRTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIG5vcm1h
bGl6ZWRCdWZmZXJMZW5ndGggPSBvcmlnaW5hbFJ1bi5sZW5ndGgoKTsKKyAgICAgICAgc291cmNl
VGV4dCA9IG9yaWdpbmFsUnVuLmNoYXJhY3RlcnMoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBu
b3JtYWxpemVkQnVmZmVyTGVuZ3RoID0gbm9ybWFsaXplZFN0cmluZy5sZW5ndGgoKTsKKyAgICAg
ICAgc291cmNlVGV4dCA9IG5vcm1hbGl6ZWRTdHJpbmcuZ2V0QnVmZmVyKCk7CisgICAgfQorCisg
ICAgbm9ybWFsaXplZEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IFVDaGFyW25vcm1hbGl6ZWRC
dWZmZXJMZW5ndGggKyAxXSk7CisKKyAgICBub3JtYWxpemVTcGFjZXNBbmRNaXJyb3JDaGFycyhz
b3VyY2VUZXh0LCBvcmlnaW5hbFJ1bi5ydGwoKSwgbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbm9y
bWFsaXplZEJ1ZmZlckxlbmd0aCk7CisKKyAgICBub3JtYWxpemVkUnVuID0gYWRvcHRQdHIobmV3
IFRleHRSdW4ob3JpZ2luYWxSdW4pKTsKKyAgICBub3JtYWxpemVkUnVuLT5zZXRUZXh0KG5vcm1h
bGl6ZWRCdWZmZXIuZ2V0KCksIG5vcm1hbGl6ZWRCdWZmZXJMZW5ndGgpOworICAgIHJldHVybiAq
bm9ybWFsaXplZFJ1bjsKK30KKworaW50IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2x5cGhJbmRl
eEZvclhQb3NpdGlvbkluU2NyaXB0UnVuKGludCB0YXJnZXRYKSBjb25zdAoreworICAgIC8vIEl0
ZXJhdGUgdGhyb3VnaCB0aGUgZ2x5cGhzIGluIGxvZ2ljYWwgb3JkZXIsIHNlZWluZyB3aGV0aGVy
IHRhcmdldFggZmFsbHMgYmV0d2VlbiB0aGUgcHJldmlvdXMKKyAgICAvLyBwb3NpdGlvbiBhbmQg
aGFsZndheSB0aHJvdWdoIHRoZSBjdXJyZW50IGdseXBoLgorICAgIC8vIEZJWE1FOiB0aGlzIGNv
ZGUgcHJvYmFibHkgYmVsb25ncyBpbiBDb21wbGV4VGV4dENvbnRyb2xsZXIuCisgICAgaW50IGxh
c3RYID0gb2Zmc2V0WCgpIC0gKHJ0bCgpID8gLW1fcGl4ZWxXaWR0aCA6IG1fcGl4ZWxXaWR0aCk7
CisgICAgZm9yIChpbnQgZ2x5cGhJbmRleCA9IDA7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihnbHlw
aEluZGV4KSA8IGxlbmd0aCgpOyArK2dseXBoSW5kZXgpIHsKKyAgICAgICAgaW50IGFkdmFuY2Ug
PSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLmFkdmFuY2VzW2dseXBoSW5kZXhd
KTsKKyAgICAgICAgaW50IG5leHRYID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbnMoKVtnbHlw
aEluZGV4XS54KCkpICsgYWR2YW5jZSAvIDI7CisgICAgICAgIGlmIChzdGQ6Om1pbihuZXh0WCwg
bGFzdFgpIDw9IHRhcmdldFggJiYgdGFyZ2V0WCA8PSBzdGQ6Om1heChuZXh0WCwgbGFzdFgpKQor
ICAgICAgICAgICAgcmV0dXJuIGdseXBoSW5kZXg7CisgICAgICAgIGxhc3RYID0gbmV4dFg7Cisg
ICAgfQorCisgICAgcmV0dXJuIGxlbmd0aCgpIC0gMTsKK30KKworaW50IENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50IHRhcmdldFgpCit7CisgICAgdW5zaWduZWQg
YmFzZVBvc2l0aW9uID0gMDsKKworICAgIGludCB4ID0gb2Zmc2V0WCgpOworICAgIHdoaWxlIChu
ZXh0U2NyaXB0UnVuKCkpIHsKKyAgICAgICAgaW50IG5leHRYID0gb2Zmc2V0WCgpOworCisgICAg
ICAgIGlmIChzdGQ6Om1pbih4LCBuZXh0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IHN0ZDo6
bWF4KHgsIG5leHRYKSkgeworICAgICAgICAgICAgLy8gVGhlIHggdmFsdWUgaW4gcXVlc3Rpb24g
aXMgd2l0aGluIHRoaXMgc2NyaXB0IHJ1bi4KKyAgICAgICAgICAgIGNvbnN0IGludCBnbHlwaElu
ZGV4ID0gZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0UnVuKHRhcmdldFgpOworCisgICAg
ICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgZ2x5cGggaW5kZXgsIHdlIGhhdmUgdG8gdHVy
biB0aGF0IGludG8gYQorICAgICAgICAgICAgLy8gY29kZS1wb2ludCBpbmRleC4gQmVjYXVzZSBv
ZiBsaWdhdHVyZXMsIHNldmVyYWwgY29kZS1wb2ludHMgbWF5CisgICAgICAgICAgICAvLyBoYXZl
IGdvbmUgaW50byBhIHNpbmdsZSBnbHlwaC4gV2UgaXRlcmF0ZSBvdmVyIHRoZSBjbHVzdGVycyBs
b2cKKyAgICAgICAgICAgIC8vIGFuZCBmaW5kIHRoZSBmaXJzdCBjb2RlLXBvaW50IHdoaWNoIGNv
bnRyaWJ1dGVkIHRvIHRoZSBnbHlwaC4KKworICAgICAgICAgICAgLy8gU29tZSBzaGFwZXJzIChp
LmUuIEtobWVyKSB3aWxsIHByb2R1Y2UgY2x1c3RlciBsb2dzIHdoaWNoIHJlcG9ydAorICAgICAg
ICAgICAgLy8gdGhhdCAvbm8vIGNvZGUgcG9pbnRzIGNvbnRyaWJ1dGVkIHRvIGNlcnRhaW4gZ2x5
cGhzLiBCZWNhdXNlIG9mCisgICAgICAgICAgICAvLyB0aGlzLCB3ZSB0YWtlIGFueSBjb2RlIHBv
aW50IHdoaWNoIGNvbnRyaWJ1dGVkIHRvIHRoZSBnbHlwaCBpbgorICAgICAgICAgICAgLy8gcXVl
c3Rpb24sIG9yIGFueSBzdWJzZXF1ZW50IGdseXBoLiBJZiB3ZSBydW4gb2ZmIHRoZSBlbmQsIHRo
ZW4KKyAgICAgICAgICAgIC8vIHdlIHRha2UgdGhlIGxhc3QgY29kZSBwb2ludC4KKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBudW1Db2RlUG9pbnRzKCk7ICsraikgeworICAg
ICAgICAgICAgICAgIGlmIChtX2l0ZW0ubG9nX2NsdXN0ZXJzW2pdID49IGdseXBoSW5kZXgpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlUG9zaXRpb24gKyBqOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gYmFzZVBvc2l0aW9uICsgbnVtQ29kZVBvaW50cygpIC0g
MTsKKyAgICAgICAgfQorCisgICAgICAgIGJhc2VQb3NpdGlvbiArPSBudW1Db2RlUG9pbnRzKCk7
CisgICAgfQorCisgICAgcmV0dXJuIGJhc2VQb3NpdGlvbjsKK30KKworRmxvYXRSZWN0IENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6c2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGhlaWdodCwgaW50IGZyb20sIGludCB0bykKK3sKKyAgICBpbnQgZnJvbVggPSAtMSwgdG9Y
ID0gLTE7CisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzY3JpcHQgcnVucyBpbiBsb2dpY2Fs
IG9yZGVyLCBzZWFyY2hpbmcgZm9yIHRoZSBydW4gY292ZXJpbmcgdGhlIHBvc2l0aW9ucyBvZiBp
bnRlcmVzdC4KKyAgICB3aGlsZSAobmV4dFNjcmlwdFJ1bigpICYmIChmcm9tWCA9PSAtMSB8fCB0
b1ggPT0gLTEpKSB7CisgICAgICAgIGlmIChmcm9tWCA9PSAtMSAmJiBmcm9tID49IDAgJiYgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGZyb20pIDwgbnVtQ29kZVBvaW50cygpKSB7CisgICAgICAgICAg
ICAvLyB8ZnJvbXwgaXMgd2l0aGluIHRoaXMgc2NyaXB0IHJ1bi4gU28gd2UgaW5kZXggdGhlIGNs
dXN0ZXJzIGxvZyB0bworICAgICAgICAgICAgLy8gZmluZCB3aGljaCBnbHlwaCB0aGlzIGNvZGUt
cG9pbnQgY29udHJpYnV0ZWQgdG8gYW5kIGZpbmQgaXRzIHgKKyAgICAgICAgICAgIC8vIHBvc2l0
aW9uLgorICAgICAgICAgICAgaW50IGdseXBoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1tmcm9tXTsK
KyAgICAgICAgICAgIGZyb21YID0gcG9zaXRpb25zKClbZ2x5cGhdLngoKTsKKyAgICAgICAgICAg
IGlmIChydGwoKSkKKyAgICAgICAgICAgICAgICBmcm9tWCArPSB0cnVuY2F0ZUZpeGVkUG9pbnRU
b0ludGVnZXIobV9pdGVtLmFkdmFuY2VzW2dseXBoXSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZnJvbSAtPSBudW1Db2RlUG9pbnRzKCk7CisKKyAgICAgICAgaWYgKHRvWCA9PSAtMSAm
JiB0byA+PSAwICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgPCBudW1Db2RlUG9pbnRzKCkp
IHsKKyAgICAgICAgICAgIGludCBnbHlwaCA9IG1faXRlbS5sb2dfY2x1c3RlcnNbdG9dOworICAg
ICAgICAgICAgdG9YID0gcG9zaXRpb25zKClbZ2x5cGhdLngoKTsKKyAgICAgICAgICAgIGlmIChy
dGwoKSkKKyAgICAgICAgICAgICAgICB0b1ggKz0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2Vy
KG1faXRlbS5hZHZhbmNlc1tnbHlwaF0pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRv
IC09IG51bUNvZGVQb2ludHMoKTsKKyAgICB9CisKKyAgICAvLyBUaGUgcG9zaXRpb24gaW4gcXVl
c3Rpb24gbWlnaHQgYmUganVzdCBhZnRlciB0aGUgdGV4dC4KKyAgICBpZiAoZnJvbVggPT0gLTEp
CisgICAgICAgIGZyb21YID0gb2Zmc2V0WCgpOworICAgIGlmICh0b1ggPT0gLTEpCisgICAgICAg
IHRvWCA9IG9mZnNldFgoKTsKKworICAgIEFTU0VSVChmcm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEp
OworCisgICAgaWYgKGZyb21YIDwgdG9YKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50
LngoKSArIGZyb21YLCBwb2ludC55KCksIHRvWCAtIGZyb21YLCBoZWlnaHQpOworCisgICAgcmV0
dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyB0b1gsIHBvaW50LnkoKSwgZnJvbVggLSB0b1gsIGhl
aWdodCk7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpnbHlwaHNGb3JSYW5nZShp
bnQgZnJvbSwgaW50IHRvLCBpbnQmIGZyb21HbHlwaCwgaW50JiBnbHlwaExlbmd0aCkKK3sKKyAg
ICAvLyBDaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gdGhlIGN1cnJlbnQgcnVuLiBUSEVTRSBNQVkg
Tk9UIEJFIElOIFJBTkdFIGFuZCBtYXkKKyAgICAvLyBiZSBuZWdhdGl2ZSwgZXRjLiBUaGUgY29k
ZSBiZWxvdyBoYW5kbGVzIHRoaXMuCisgICAgaW50IGZyb21DaGFyID0gZnJvbSAtIG1faXRlbS5p
dGVtLnBvczsKKyAgICBpbnQgdG9DaGFyID0gdG8gLSBtX2l0ZW0uaXRlbS5wb3M7CisKKyAgICAv
LyBTZWUgaWYgdGhlcmUgYXJlIGFueSBjaGFyYWN0ZXJzIGluIHRoZSBjdXJyZW50IHJ1bi4KKyAg
ICBpZiAoIW51bUNvZGVQb2ludHMoKSB8fCBmcm9tQ2hhciA+PSBzdGF0aWNfY2FzdDxpbnQ+KG51
bUNvZGVQb2ludHMoKSkgfHwgdG9DaGFyIDw9IDApIHsKKyAgICAgICAgZnJvbUdseXBoID0gLTE7
CisgICAgICAgIGdseXBoTGVuZ3RoID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIENvbXB1dGUgdGhlIHN0YXJ0aW5nIGdseXBoIHdpdGhpbiB0aGlzIHNwYW4uIHxmcm9tfCBh
bmQgfHRvfCBhcmUKKyAgICAvLyBnbG9iYWwgb2Zmc2V0cyB0aGF0IG1heSBpbnRlcnNlY3QgYXJi
aXRyYXJpbHkgd2l0aCBvdXIgbG9jYWwgcnVuLgorICAgIGZyb21HbHlwaCA9IG1faXRlbS5sb2df
Y2x1c3RlcnNbZnJvbUNoYXIgPCAwID8gMCA6IGZyb21DaGFyXTsKKyAgICBpZiAodG9DaGFyID49
IHN0YXRpY19jYXN0PGludD4obnVtQ29kZVBvaW50cygpKSkKKyAgICAgICAgZ2x5cGhMZW5ndGgg
PSBsZW5ndGgoKSAtIGZyb21HbHlwaDsKKyAgICBlbHNlCisgICAgICAgIGdseXBoTGVuZ3RoID0g
bV9pdGVtLmxvZ19jbHVzdGVyc1t0b0NoYXJdIC0gZnJvbUdseXBoOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1
enouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mZmYzNmViYWRiMTExMjU1ZmY0MDQ5YWVjNmUzYjFkYTg5NDdjZmRh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouaApAQCAtMCwwICsxLDE2NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enpfaAorI2RlZmluZSBDb21wbGV4VGV4
dENvbnRyb2xsZXJIYXJmQnV6el9oCisKKyNpbmNsdWRlICJIYXJmQnV6elNraWEuaCIKKyNpbmNs
dWRlICJTa1BvaW50LmgiCisjaW5jbHVkZSAiU2tTY2FsYXIuaCIKKyNpbmNsdWRlICJUZXh0UnVu
LmgiCisKK2V4dGVybiAiQyIgeworI2luY2x1ZGUgImhhcmZidXp6LXNoYXBlci5oIgorfQorCisj
aW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
b250OworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIFNpbXBsZUZvbnREYXRhOworCisv
LyBDb21wbGV4VGV4dENvbnRyb2xsZXIgd2Fsa3MgYSBUZXh0UnVuIGFuZCBwcmVzZW50cyBlYWNo
IHNjcmlwdCBydW4gaW4gc2VxdWVuY2UuIEEKKy8vIFRleHRSdW4gaXMgYSBzZXF1ZW5jZSBvZiBj
b2RlLXBvaW50cyB3aXRoIHRoZSBzYW1lIGVtYmVkZGluZyBsZXZlbCAoaS5lLiB0aGV5CisvLyBh
cmUgYWxsIGxlZnQtdG8tcmlnaHQgb3IgcmlnaHQtdG8tbGVmdCkuIEEgc2NyaXB0IHJ1biBpcyBh
IHN1YnNlcXVlbmNlIHdoZXJlCisvLyBhbGwgdGhlIGNoYXJhY3RlcnMgaGF2ZSB0aGUgc2FtZSBz
Y3JpcHQgKGUuZy4gQXJhYmljLCBUaGFpIGV0YykuIFNoYXBpbmcgaXMKKy8vIG9ubHkgZXZlciBk
b25lIHdpdGggc2NyaXB0IHJ1bnMgc2luY2UgdGhlIHNoYXBlcnMgb25seSBrbm93IGhvdyB0byBk
ZWFsIHdpdGgKKy8vIGEgc2luZ2xlIHNjcmlwdC4KKy8vCisvLyBJdGVyYXRpb24gaXMgYWx3YXlz
IGluIGxvZ2ljYWwgKGFrYSByZWFkaW5nKSBvcmRlci4gRm9yIFJUTCB0ZXh0IHRoYXQgbWVhbnMK
Ky8vIHRoZSByaWdodG1vc3QgcGFydCBvZiB0aGUgdGV4dCB3aWxsIGJlIGZpcnN0LgorLy8KKy8v
IE9uY2UgeW91IGhhdmUgc2V0dXAgdGhlIG9iamVjdCwgY2FsbCB8bmV4dFNjcmlwdFJ1bnwgdG8g
Z2V0IHRoZSBmaXJzdCBzY3JpcHQKKy8vIHJ1bi4gVGhpcyB3aWxsIHJldHVybiBmYWxzZSB3aGVu
IHRoZSBpdGVyYXRpb24gaXMgY29tcGxldGUuIEF0IGFueSB0aW1lIHlvdQorLy8gY2FuIGNhbGwg
fHJlc2V0fCB0byBzdGFydCBvdmVyIGFnYWluLgorY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVy
IHsKK3B1YmxpYzoKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgVGV4dFJ1biYsIGlu
dCBzdGFydGluZ1gsIGludCBzdGFydGluZ1ksIHVuc2lnbmVkIHdvcmRTcGFjaW5nLCB1bnNpZ25l
ZCBsZXR0ZXJTcGFjaW5nLCB1bnNpZ25lZCBwYWRkaW5nLCBjb25zdCBGb250Kik7CisgICAgfkNv
bXBsZXhUZXh0Q29udHJvbGxlcigpOworCisgICAgYm9vbCBpc1dvcmRCcmVhayh1bnNpZ25lZCk7
CisgICAgaW50IGRldGVybWluZVdvcmRCcmVha1NwYWNpbmcodW5zaWduZWQpOworICAgIC8vIHNl
dFBhZGRpbmcgc2V0cyBhIG51bWJlciBvZiBwaXhlbHMgdG8gYmUgZGlzdHJpYnV0ZWQgYWNyb3Nz
IHRoZSBUZXh0UnVuLgorICAgIC8vIFdlYktpdCB1c2VzIHRoaXMgdG8ganVzdGlmeSB0ZXh0Lgor
ICAgIHZvaWQgc2V0UGFkZGluZyhpbnQpOworICAgIHZvaWQgcmVzZXQoaW50IG9mZnNldCk7Cisg
ICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCBzY3JpcHQgcnVuLCByZXR1cm5pbmcgZmFsc2Ugd2hl
biB0aGUgZW5kIG9mIHRoZQorICAgIC8vIFRleHRSdW4gaGFzIGJlZW4gcmVhY2hlZC4KKyAgICBi
b29sIG5leHRTY3JpcHRSdW4oKTsKKyAgICBmbG9hdCB3aWR0aE9mRnVsbFJ1bigpOworCisgICAg
Ly8gc2V0V29yZFNwYWNpbmdBZGp1c3RtZW50IHNldHMgYSBkZWx0YSAoaW4gcGl4ZWxzKSB3aGlj
aCBpcyBhcHBsaWVkIGF0CisgICAgLy8gZWFjaCB3b3JkIGJyZWFrIGluIHRoZSBUZXh0UnVuLgor
ICAgIHZvaWQgc2V0V29yZFNwYWNpbmdBZGp1c3RtZW50KGludCB3b3JkU3BhY2luZ0FkanVzdG1l
bnQpIHsgbV93b3JkU3BhY2luZ0FkanVzdG1lbnQgPSB3b3JkU3BhY2luZ0FkanVzdG1lbnQ7IH0K
KworICAgIC8vIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50IHNldHMgYW4gYWRkaXRpb25hbCBu
dW1iZXIgb2YgcGl4ZWxzIHRoYXQgaXMKKyAgICAvLyBhZGRlZCB0byB0aGUgYWR2YW5jZSBhZnRl
ciBlYWNoIG91dHB1dCBjbHVzdGVyLiBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW91cgorICAgIC8v
IG9mIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UuCisgICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5nQWRq
dXN0bWVudChpbnQgbGV0dGVyU3BhY2luZ0FkanVzdG1lbnQpIHsgbV9sZXR0ZXJTcGFjaW5nID0g
bGV0dGVyU3BhY2luZ0FkanVzdG1lbnQ7IH0KKyAgICBpbnQgbGV0dGVyU3BhY2luZygpIGNvbnN0
IHsgcmV0dXJuIG1fbGV0dGVyU3BhY2luZzsgfQorCisgICAgdm9pZCBzZXR1cEZvclJUTCgpOwor
ICAgIGJvb2wgcnRsKCkgY29uc3QgeyByZXR1cm4gbV9ydW4ucnRsKCk7IH0KKyAgICBjb25zdCB1
aW50MTZfdCogZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMxNjsgfQorCisgICAgLy8g
UmV0dXJuIHRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG9mIGdseXBocyBmb3IgdGhlIHJhbmdl
IFtmcm9tLCB0bykgaW4gdGhlIGN1cnJlbnQgc2NyaXB0IHJ1bi4KKyAgICB2b2lkIGdseXBoc0Zv
clJhbmdlKGludCBmcm9tLCBpbnQgdG8sIGludCYgZnJvbUdseXBoLCBpbnQmIGdseXBoTGVuZ3Ro
KTsKKworICAgIC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSByZXR1cm5lZCBieSB8
Z2x5cGhzfAorICAgIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1faXRl
bS5udW1fZ2x5cGhzOyB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG9mZnNldCBmb3IgZWFjaCBvZiB0
aGUgZ2x5cGhzLiBOb3RlIHRoYXQgdGhpcyBpcyB0cmFuc2xhdGVkCisgICAgLy8gYnkgdGhlIGN1
cnJlbnQgeCBvZmZzZXQgYW5kIHRoYXQgdGhlIHggb2Zmc2V0IGlzIHVwZGF0ZWQgZm9yIGVhY2gg
c2NyaXB0CisgICAgLy8gcnVuLgorICAgIGNvbnN0IFNrUG9pbnQqIHBvc2l0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1fcG9zaXRpb25zOyB9CisKKyAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBj
b2RlIHBvaW50cyBpbiB0aGUgY3VycmVudCBzY3JpcHQgcnVuCisgICAgY29uc3QgdW5zaWduZWQg
bnVtQ29kZVBvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS5pdGVtLmxlbmd0aDsgfQorCisg
ICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBjb250cm9sbGVy
LgorICAgIGNvbnN0IHVuc2lnbmVkIG9mZnNldFgoKSBjb25zdCB7IHJldHVybiBtX29mZnNldFg7
IH0KKworICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0Zm9ybURhdGFGb3JTY3Jp
cHRSdW4oKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihtX2l0
ZW0uZm9udC0+dXNlckRhdGEpOyB9CisKKyAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oaW50KTsK
KyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiwgaW50IGhlaWdo
dCwgaW50IGZyb20gLCBpbnQgdG8pOworCitwcml2YXRlOgorICAgIC8vIFJldHVybiB0aGUgd2lk
dGggKGluIHB4KSBvZiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgorICAgIHVuc2lnbmVkIHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbFdpZHRoOyB9CisKKyAgICB2b2lkIHNldHVwRm9udEZv
clNjcmlwdFJ1bigpOworICAgIHZvaWQgZGVsZXRlR2x5cGhBcnJheXMoKTsKKyAgICB2b2lkIGNy
ZWF0ZUdseXBoQXJyYXlzKGludCk7CisgICAgdm9pZCByZXNldEdseXBoQXJyYXlzKCk7CisgICAg
dm9pZCBzaGFwZUdseXBocygpOworICAgIHZvaWQgc2V0R2x5cGhQb3NpdGlvbnMoYm9vbCk7CisK
KyAgICBzdGF0aWMgdm9pZCBub3JtYWxpemVTcGFjZXNBbmRNaXJyb3JDaGFycyhjb25zdCBVQ2hh
ciogc291cmNlLCBib29sIHJ0bCwgVUNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgbGVuZ3RoKTsKKyAg
ICBzdGF0aWMgY29uc3QgVGV4dFJ1biYgZ2V0Tm9ybWFsaXplZFRleHRSdW4oY29uc3QgVGV4dFJ1
biYgb3JpZ2luYWxSdW4sIE93blB0cjxUZXh0UnVuPiYgbm9ybWFsaXplZFJ1biwgT3duQXJyYXlQ
dHI8VUNoYXI+JiBub3JtYWxpemVkQnVmZmVyKTsKKworICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUg
bG9naWMgaW4gUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrCisgICAgc3RhdGljIGJvb2wg
aXNDb2RlcG9pbnRTcGFjZShIQl9VQ2hhcjE2IGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0g
J1x0JzsgfQorCisgICAgaW50IGdseXBoSW5kZXhGb3JYUG9zaXRpb25JblNjcmlwdFJ1bihpbnQg
dGFyZ2V0WCkgY29uc3Q7CisKKyAgICBjb25zdCBGb250KiBjb25zdCBtX2ZvbnQ7CisgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIG1fY3VycmVudEZvbnREYXRhOworICAgIEhCX1NoYXBlckl0ZW0g
bV9pdGVtOworICAgIHVpbnQxNl90KiBtX2dseXBoczE2OyAvLyBBIHZlY3RvciBvZiAxNi1iaXQg
Z2x5cGggaWRzLgorICAgIFNrUG9pbnQqIG1fcG9zaXRpb25zOyAvLyBBIHZlY3RvciBvZiBwb3Np
dGlvbnMgZm9yIGVhY2ggZ2x5cGguCisgICAgc3NpemVfdCBtX2luZGV4T2ZOZXh0U2NyaXB0UnVu
OyAvLyBJbmRleGVzIHRoZSBzY3JpcHQgcnVuIGluIHxtX3J1bnwuCisgICAgaW50IG1fb2Zmc2V0
WDsgLy8gT2Zmc2V0IGluIHBpeGVscyB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc2NyaXB0IHJ1
bi4KKyAgICBpbnQgbV9zdGFydGluZ1k7IC8vIFRoZSBZIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBz
Y3JpcHQgcnVuLgorICAgIHVuc2lnbmVkIG1fcGl4ZWxXaWR0aDsgLy8gV2lkdGggKGluIHB4KSBv
ZiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgorICAgIHVuc2lnbmVkIG1fZ2x5cGhzQXJyYXlDYXBh
Y2l0eTsgLy8gQ3VycmVudCBzaXplIG9mIGFsbCB0aGUgSGFyZmJ1enogYXJyYXlzLgorCisgICAg
T3duUHRyPFRleHRSdW4+IG1fbm9ybWFsaXplZFJ1bjsKKyAgICBPd25BcnJheVB0cjxVQ2hhcj4g
bV9ub3JtYWxpemVkQnVmZmVyOyAvLyBBIGJ1ZmZlciBmb3Igbm9ybWFsaXplZCBydW4uCisgICAg
Y29uc3QgVGV4dFJ1biYgbV9ydW47CisgICAgaW50IG1fd29yZFNwYWNpbmdBZGp1c3RtZW50OyAv
LyBkZWx0YSBhZGp1c3RtZW50IChwaXhlbHMpIGZvciBlYWNoIHdvcmQgYnJlYWsuCisgICAgZmxv
YXQgbV9wYWRkaW5nOyAvLyBwaXhlbHMgdG8gYmUgZGlzdHJpYnV0ZWQgb3ZlciB0aGUgbGluZSBh
dCB3b3JkIGJyZWFrcy4KKyAgICBmbG9hdCBtX3BhZFBlcldvcmRCcmVhazsgLy8gcGl4ZWxzIHRv
IGJlIGFkZGVkIHRvIGVhY2ggd29yZCBicmVhay4KKyAgICBmbG9hdCBtX3BhZEVycm9yOyAvLyB8
bV9wYWRQZXJXb3JkQnJlYWt8IG1pZ2h0IGhhdmUgYSBmcmFjdGlvbmFsIGNvbXBvbmVudC4KKyAg
ICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBvbmx5IGFkZCBhIHdob2xlIG51bWJlciBv
ZiBwYWRkaW5nIHBpeGVscyBhdAorICAgICAgICAgICAgICAgICAgICAgIC8vIGVhY2ggd29yZCBi
cmVhayB3ZSBhY2N1bXVsYXRlIGVycm9yLiBUaGlzIGlzIHRoZQorICAgICAgICAgICAgICAgICAg
ICAgIC8vIG51bWJlciBvZiBwaXhlbHMgdGhhdCB3ZSBhcmUgYmVoaW5kIHNvIGZhci4KKyAgICBp
bnQgbV9sZXR0ZXJTcGFjaW5nOyAvLyBwaXhlbHMgdG8gYmUgYWRkZWQgYWZ0ZXIgZWFjaCBnbHlw
aC4KKyAgICBTdHJpbmcgbV9zbWFsbENhcHNTdHJpbmc7IC8vIHN1YnN0cmluZyBvZiBtX3J1biBj
b252ZXJ0ZWQgdG8gc21hbGwgY2Fwcy4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIENvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enou
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJhOGFhMmU3ZGQ0YmZlZGFjZTM4YjBlZGZmNTU3YTY3M2FhNGIwZjEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9Gb250SGFyZkJ1enouY3BwCkBAIC0wLDAgKzEsMjYyIEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDA3LCAyMDA4LCAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkNvbXBsZXhU
ZXh0Q29udHJvbGxlckhhcmZCdXp6LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJIYXJmQnV6elNraWEuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisj
aW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa1BhaW50LmgiCisjaW5jbHVkZSAiU2tU
ZW1wbGF0ZXMuaCIKKyNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCisjaW5jbHVkZSAiU2tVdGlscy5o
IgorCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRl
b2dyYXBoc0luQ29tcGxleFRleHQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IGJvb2wgaXNDYW52YXNNdWx0aUxheWVyZWQoU2tDYW52YXMqIGNhbnZhcykKK3sKKyAgICBTa0Nh
bnZhczo6TGF5ZXJJdGVyIGxheWVySXRlcmF0b3IoY2FudmFzLCBmYWxzZSk7CisgICAgbGF5ZXJJ
dGVyYXRvci5uZXh0KCk7CisgICAgcmV0dXJuICFsYXllckl0ZXJhdG9yLmRvbmUoKTsKK30KKwor
c3RhdGljIHZvaWQgYWRqdXN0VGV4dFJlbmRlck1vZGUoU2tQYWludCogcGFpbnQsIFBsYXRmb3Jt
Q29udGV4dFNraWEqIHNraWFDb250ZXh0KQoreworICAgIC8vIE91ciBsYXllcnMgb25seSBoYXZl
IGEgc2luZ2xlIGFscGhhIGNoYW5uZWwuIFRoaXMgbWVhbnMgdGhhdCBzdWJwaXhlbAorICAgIC8v
IHJlbmRlcmVkIHRleHQgY2Fubm90IGJlIGNvbXBvc2l0aWVkIGNvcnJlY3RseSB3aGVuIHRoZSBs
YXllciBpcworICAgIC8vIGNvbGxhcHNlZC4gVGhlcmVmb3JlLCBzdWJwaXhlbCB0ZXh0IGlzIGRp
c2FibGVkIHdoZW4gd2UgYXJlIGRyYXdpbmcKKyAgICAvLyBvbnRvIGEgbGF5ZXIgb3Igd2hlbiB0
aGUgY29tcG9zaXRvciBpcyBiZWluZyB1c2VkLgorICAgIGlmIChpc0NhbnZhc011bHRpTGF5ZXJl
ZChza2lhQ29udGV4dC0+Y2FudmFzKCkpIHx8IHNraWFDb250ZXh0LT5pc0RyYXdpbmdUb0ltYWdl
QnVmZmVyKCkpCisgICAgICAgIHBhaW50LT5zZXRMQ0RSZW5kZXJUZXh0KGZhbHNlKTsKK30KKwor
dm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLAorICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdCB7CisgICAgU2tBU1NFUlQoc2l6ZW9m
KEdseXBoQnVmZmVyR2x5cGgpID09IHNpemVvZih1aW50MTZfdCkpOyAvLyBjb21waWxlLXRpbWUg
YXNzZXJ0CisKKyAgICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMgPSBnbHlwaEJ1ZmZl
ci5nbHlwaHMoZnJvbSk7CisgICAgU2tTY2FsYXIgeCA9IFNrRmxvYXRUb1NjYWxhcihwb2ludC54
KCkpOworICAgIFNrU2NhbGFyIHkgPSBTa0Zsb2F0VG9TY2FsYXIocG9pbnQueSgpKTsKKworICAg
IC8vIEZJWE1FOiB0ZXh0IHJlbmRlcmluZyBzcGVlZDoKKyAgICAvLyBBbmRyb2lkIGhhcyBjb2Rl
IGluIHRoZWlyIFdlYkNvcmUgZm9yayB0byBzcGVjaWFsIGNhc2Ugd2hlbiB0aGUKKyAgICAvLyBH
bHlwaEJ1ZmZlciBoYXMgbm8gYWR2YW5jZXMgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdHMuIEluIHRo
YXQgY2FzZSB0aGUKKyAgICAvLyB0ZXh0IGRyYXdpbmcgY2FuIHByb2NlZWQgZmFzdGVyLiBIb3dl
dmVyLCBpdCdzIHVuY2xlYXIgd2hlbiB0aG9zZQorICAgIC8vIHBhdGNoZXMgbWF5IGJlIHVwc3Ry
ZWFtZWQgdG8gV2ViS2l0IHNvIHdlIGFsd2F5cyB1c2UgdGhlIHNsb3dlciBwYXRoCisgICAgLy8g
aGVyZS4KKyAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdiA9IGdseXBoQnVmZmVyLmFk
dmFuY2VzKGZyb20pOworICAgIFNrQXV0b1NUTWFsbG9jPDMyLCBTa1BvaW50PiBzdG9yYWdlKG51
bUdseXBocyksIHN0b3JhZ2UyKG51bUdseXBocyksIHN0b3JhZ2UzKG51bUdseXBocyk7CisgICAg
U2tQb2ludCogcG9zID0gc3RvcmFnZS5nZXQoKTsKKyAgICBTa1BvaW50KiB2UG9zQmVnaW4gPSBz
dG9yYWdlMi5nZXQoKTsKKyAgICBTa1BvaW50KiB2UG9zRW5kID0gc3RvcmFnZTMuZ2V0KCk7CisK
KyAgICBib29sIGlzVmVydGljYWwgPSBmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyBpKyspIHsK
KyAgICAgICAgU2tTY2FsYXIgbXlXaWR0aCA9IFNrRmxvYXRUb1NjYWxhcihhZHZbaV0ud2lkdGgo
KSk7CisgICAgICAgIHBvc1tpXS5zZXQoeCwgeSk7CisgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7
CisgICAgICAgICAgICB2UG9zQmVnaW5baV0uc2V0KHggKyBteVdpZHRoLCB5KTsKKyAgICAgICAg
ICAgIHZQb3NFbmRbaV0uc2V0KHggKyBteVdpZHRoLCB5IC0gbXlXaWR0aCk7CisgICAgICAgIH0K
KyAgICAgICAgeCArPSBteVdpZHRoOworICAgICAgICB5ICs9IFNrRmxvYXRUb1NjYWxhcihhZHZb
aV0uaGVpZ2h0KCkpOworICAgIH0KKworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpOworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRNb2Rl
ID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUZXh0RHJhd2luZ01vZGUoKTsKKworICAgIC8v
IFdlIGRyYXcgdGV4dCB1cCB0byB0d28gdGltZXMgKG9uY2UgZm9yIGZpbGwsIG9uY2UgZm9yIHN0
cm9rZSkuCisgICAgaWYgKHRleHRNb2RlICYgVGV4dE1vZGVGaWxsKSB7CisgICAgICAgIFNrUGFp
bnQgcGFpbnQ7CisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZp
bGxpbmcoJnBhaW50KTsKKyAgICAgICAgZm9udC0+cGxhdGZvcm1EYXRhKCkuc2V0dXBQYWludCgm
cGFpbnQpOworICAgICAgICBhZGp1c3RUZXh0UmVuZGVyTW9kZSgmcGFpbnQsIGdjLT5wbGF0Zm9y
bUNvbnRleHQoKSk7CisgICAgICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5
cGhJRF9UZXh0RW5jb2RpbmcpOworCisgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7CisgICAgICAg
ICAgICBTa1BhdGggcGF0aDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5
cGhzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBwYXRoLnJlc2V0KCk7CisgICAgICAgICAgICAg
ICAgcGF0aC5tb3ZlVG8odlBvc0JlZ2luW2ldKTsKKyAgICAgICAgICAgICAgICBwYXRoLmxpbmVU
byh2UG9zRW5kW2ldKTsKKyAgICAgICAgICAgICAgICBjYW52YXMtPmRyYXdUZXh0T25QYXRoKGds
eXBocyArIGksIDIsIHBhdGgsIDAsIHBhaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzIDw8
IDEsIHBvcywgcGFpbnQpOworICAgIH0KKworICAgIGlmICgodGV4dE1vZGUgJiBUZXh0TW9kZVN0
cm9rZSkKKyAgICAgICAgJiYgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VTdHlsZSgp
ICE9IE5vU3Ryb2tlCisgICAgICAgICYmIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0U3Ryb2tl
VGhpY2tuZXNzKCkgPiAwKSB7CisKKyAgICAgICAgU2tQYWludCBwYWludDsKKyAgICAgICAgZ2Mt
PnBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsK
KyAgICAgICAgZm9udC0+cGxhdGZvcm1EYXRhKCkuc2V0dXBQYWludCgmcGFpbnQpOworICAgICAg
ICBhZGp1c3RUZXh0UmVuZGVyTW9kZSgmcGFpbnQsIGdjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2Rp
bmcpOworCisgICAgICAgIGlmICh0ZXh0TW9kZSAmIFRleHRNb2RlRmlsbCkgeworICAgICAgICAg
ICAgLy8gSWYgd2UgYWxzbyBmaWxsZWQsIHdlIGRvbid0IHdhbnQgdG8gZHJhdyBzaGFkb3dzIHR3
aWNlLgorICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gRm9udENocm9taXVtV2luLmNwcDo6
cGFpbnRTa2lhVGV4dCgpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgICAgICAvLyBTaW5jZSB3
ZSB1c2UgdGhlIGxvb3BlciBmb3Igc2hhZG93cywgd2UgcmVtb3ZlIGl0IChpZiBhbnkpIG5vdy4K
KyAgICAgICAgICAgIHBhaW50LnNldExvb3BlcigwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChpc1ZlcnRpY2FsKSB7CisgICAgICAgICAgICBTa1BhdGggcGF0aDsKKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBwYXRo
LnJlc2V0KCk7CisgICAgICAgICAgICAgICAgcGF0aC5tb3ZlVG8odlBvc0JlZ2luW2ldKTsKKyAg
ICAgICAgICAgICAgICBwYXRoLmxpbmVUbyh2UG9zRW5kW2ldKTsKKyAgICAgICAgICAgICAgICBj
YW52YXMtPmRyYXdUZXh0T25QYXRoKGdseXBocyArIGksIDIsIHBhdGgsIDAsIHBhaW50KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NU
ZXh0KGdseXBocywgbnVtR2x5cGhzIDw8IDEsIHBvcywgcGFpbnQpOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgc2V0dXBGb3JUZXh0UGFpbnRpbmcoU2tQYWludCogcGFpbnQsIFNrQ29sb3IgY29s
b3IpCit7CisgICAgcGFpbnQtPnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0
RW5jb2RpbmcpOworICAgIHBhaW50LT5zZXRDb2xvcihjb2xvcik7Cit9CisKK3ZvaWQgRm9udDo6
ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFRleHRSdW4mIHJ1biwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIGlmICghcnVuLmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBTa0NhbnZhcyogY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKTsKKyAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0TW9kZSA9IGdjLT5wbGF0Zm9y
bUNvbnRleHQoKS0+Z2V0VGV4dERyYXdpbmdNb2RlKCk7CisgICAgYm9vbCBmaWxsID0gdGV4dE1v
ZGUgJiBUZXh0TW9kZUZpbGw7CisgICAgYm9vbCBzdHJva2UgPSAodGV4dE1vZGUgJiBUZXh0TW9k
ZVN0cm9rZSkKKyAgICAgICAgICAgICAgICYmIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0U3Ry
b2tlU3R5bGUoKSAhPSBOb1N0cm9rZQorICAgICAgICAgICAgICAgJiYgZ2MtPnBsYXRmb3JtQ29u
dGV4dCgpLT5nZXRTdHJva2VUaGlja25lc3MoKSA+IDA7CisKKyAgICBpZiAoIWZpbGwgJiYgIXN0
cm9rZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2tQYWludCBzdHJva2VQYWludCwgZmlsbFBh
aW50OworICAgIGlmIChmaWxsKSB7CisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0
dXBQYWludEZvckZpbGxpbmcoJmZpbGxQYWludCk7CisgICAgICAgIHNldHVwRm9yVGV4dFBhaW50
aW5nKCZmaWxsUGFpbnQsIGdjLT5maWxsQ29sb3IoKS5yZ2IoKSk7CisgICAgfQorICAgIGlmIChz
dHJva2UpIHsKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ry
b2tpbmcoJnN0cm9rZVBhaW50LCAwLCAwKTsKKyAgICAgICAgc2V0dXBGb3JUZXh0UGFpbnRpbmco
JnN0cm9rZVBhaW50LCBnYy0+c3Ryb2tlQ29sb3IoKS5yZ2IoKSk7CisgICAgfQorCisgICAgQ29t
cGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIocnVuLCBwb2ludC54KCksIHBvaW50LnkoKSwg
d29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4uZXhwYW5zaW9uKCksIHRoaXMpOwor
CisgICAgaWYgKHJ1bi5ydGwoKSkKKyAgICAgICAgY29udHJvbGxlci5zZXR1cEZvclJUTCgpOwor
CisgICAgd2hpbGUgKGNvbnRyb2xsZXIubmV4dFNjcmlwdFJ1bigpKSB7CisgICAgICAgIC8vIENo
ZWNrIGlmIHRoZXJlIGlzIGFueSBnbHlwaCBmb3VuZCBpbiB0aGUgY3VycmVudCBzY3JpcHQgcnVu
LgorICAgICAgICBpbnQgZnJvbUdseXBoLCBnbHlwaExlbmd0aDsKKyAgICAgICAgY29udHJvbGxl
ci5nbHlwaHNGb3JSYW5nZShmcm9tLCB0bywgZnJvbUdseXBoLCBnbHlwaExlbmd0aCk7CisgICAg
ICAgIGlmIChmcm9tR2x5cGggPCAwIHx8IGdseXBoTGVuZ3RoIDw9IDApCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBpZiAoZmlsbCkgeworICAgICAgICAgICAgY29udHJvbGxlci5m
b250UGxhdGZvcm1EYXRhRm9yU2NyaXB0UnVuKCktPnNldHVwUGFpbnQoJmZpbGxQYWludCk7Cisg
ICAgICAgICAgICBhZGp1c3RUZXh0UmVuZGVyTW9kZSgmZmlsbFBhaW50LCBnYy0+cGxhdGZvcm1D
b250ZXh0KCkpOworICAgICAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChjb250cm9sbGVyLmds
eXBocygpICsgZnJvbUdseXBoLCBnbHlwaExlbmd0aCA8PCAxLCBjb250cm9sbGVyLnBvc2l0aW9u
cygpICsgZnJvbUdseXBoLCBmaWxsUGFpbnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0
cm9rZSkgeworICAgICAgICAgICAgY29udHJvbGxlci5mb250UGxhdGZvcm1EYXRhRm9yU2NyaXB0
UnVuKCktPnNldHVwUGFpbnQoJnN0cm9rZVBhaW50KTsKKyAgICAgICAgICAgIGFkanVzdFRleHRS
ZW5kZXJNb2RlKCZzdHJva2VQYWludCwgZ2MtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAg
ICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoY29udHJvbGxlci5nbHlwaHMoKSArIGZyb21HbHlwaCwg
Z2x5cGhMZW5ndGggPDwgMSwgY29udHJvbGxlci5wb3NpdGlvbnMoKSArIGZyb21HbHlwaCwgc3Ry
b2tlUGFpbnQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25z
dCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29u
c3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8p
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworZmxvYXQgRm9udDo6ZmxvYXRX
aWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiAvKiBmYWxsYmFja0ZvbnRzICovLCBHbHlwaE92ZXJmbG93KiAvKiBnbHlw
aE92ZXJmbG93ICovKSBjb25zdAoreworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9s
bGVyKHJ1biwgMCwgMCwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4uZXhwYW5z
aW9uKCksIHRoaXMpOworICAgIHJldHVybiBjb250cm9sbGVyLndpZHRoT2ZGdWxsUnVuKCk7Cit9
CisKKy8vIFJldHVybiB0aGUgY29kZSBwb2ludCBpbmRleCBmb3IgdGhlIGdpdmVuIHx4fCBvZmZz
ZXQgaW50byB0aGUgdGV4dCBydW4uCitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZv
ciBIVE1MLCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50
IG51bWJlcnMKKyAgICAvLyB0byBGb250OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDov
L3dlYmtpdC5vcmcvYi80MDY3MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KKyAgICBpbnQg
dGFyZ2V0WCA9IHN0YXRpY19jYXN0PGludD4oeEZsb2F0KTsKKworICAgIC8vIChNYWMgY29kZSBp
Z25vcmVzIGluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBhbmQgdGhleSBkb24ndCBrbm93IHdoYXQgaXQn
cworICAgIC8vIHN1cHBvc2VkIHRvIGRvLCBzbyB3ZSBqdXN0IGlnbm9yZSBpdCBhcyB3ZWxsLikK
KyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIDAsIDAsIHdvcmRTcGFj
aW5nKCksIGxldHRlclNwYWNpbmcoKSwgcnVuLmV4cGFuc2lvbigpLCB0aGlzKTsKKyAgICBpZiAo
cnVuLnJ0bCgpKQorICAgICAgICBjb250cm9sbGVyLnNldHVwRm9yUlRMKCk7CisgICAgcmV0dXJu
IGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24odGFyZ2V0WCk7Cit9CisKKy8vIFJldHVybiB0
aGUgcmVjdGFuZ2xlIGZvciBzZWxlY3RpbmcgdGhlIGdpdmVuIHJhbmdlIG9mIGNvZGUtcG9pbnRz
IGluIHRoZSBUZXh0UnVuLgorRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAoreworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHJ1biwgMCwgMCwg
d29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4uZXhwYW5zaW9uKCksIHRoaXMpOwor
ICAgIGlmIChydW4ucnRsKCkpCisgICAgICAgIGNvbnRyb2xsZXIuc2V0dXBGb3JSVEwoKTsKKyAg
ICByZXR1cm4gY29udHJvbGxlci5zZWxlY3Rpb25SZWN0KHBvaW50LCBoZWlnaHQsIGZyb20sIHRv
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9y
bURhdGFIYXJmQnV6ei5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTA0NWUxMDcwNDA4ZDU2ODFkZjhiY2U4NjRi
MWJmMjc2OTE4MjQyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5jcHAKQEAgLTAsMCAr
MSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZv
bnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKKworI2lu
Y2x1ZGUgIlNrQWR2YW5jZWRUeXBlZmFjZU1ldHJpY3MuaCIKKyNpbmNsdWRlICJTa1BhaW50Lmgi
CisjaW5jbHVkZSAiU2tUeXBlZmFjZS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1w
bC5oPiAKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgU2tQYWludDo6SGludGluZyBz
a2lhSGludGluZyA9IFNrUGFpbnQ6OmtOb3JtYWxfSGludGluZzsKK3N0YXRpYyBib29sIGlzU2tp
YUFudGlBbGlhcyA9IHRydWU7CitzdGF0aWMgYm9vbCBpc1NraWFTdWJwaXhlbEdseXBocyA9IGZh
bHNlOworCit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEhpbnRpbmcoU2tQYWludDo6SGludGlu
ZyBoaW50aW5nKQoreworICAgIHNraWFIaW50aW5nID0gaGludGluZzsKK30KKwordm9pZCBGb250
UGxhdGZvcm1EYXRhOjpzZXRBbnRpQWxpYXMoYm9vbCBpc0FudGlBbGlhcykKK3sKKyAgICBpc1Nr
aWFBbnRpQWxpYXMgPSBpc0FudGlBbGlhczsKK30KKwordm9pZCBGb250UGxhdGZvcm1EYXRhOjpz
ZXRTdWJwaXhlbEdseXBocyhib29sIGlzU3VicGl4ZWxHbHlwaHMpCit7CisgICAgaXNTa2lhU3Vi
cGl4ZWxHbHlwaHMgPSBpc1N1YnBpeGVsR2x5cGhzOworfQorCitGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYykKKyAgICA6IG1fdHlw
ZWZhY2Uoc3JjLm1fdHlwZWZhY2UpCisgICAgLCBtX2ZhbWlseShzcmMubV9mYW1pbHkpCisgICAg
LCBtX3RleHRTaXplKHNyYy5tX3RleHRTaXplKQorICAgICwgbV9lbVNpemVJbkZvbnRVbml0cyhz
cmMubV9lbVNpemVJbkZvbnRVbml0cykKKyAgICAsIG1fZmFrZUJvbGQoc3JjLm1fZmFrZUJvbGQp
CisgICAgLCBtX2Zha2VJdGFsaWMoc3JjLm1fZmFrZUl0YWxpYykKKyAgICAsIG1fb3JpZW50YXRp
b24oc3JjLm1fb3JpZW50YXRpb24pCisgICAgLCBtX3RleHRPcmllbnRhdGlvbihzcmMubV90ZXh0
T3JpZW50YXRpb24pCisgICAgLCBtX3N0eWxlKHNyYy5tX3N0eWxlKQorICAgICwgbV9oYXJmYnV6
ekZhY2Uoc3JjLm1faGFyZmJ1enpGYWNlKQoreworICAgIFNrU2FmZVJlZihtX3R5cGVmYWNlKTsK
K30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShTa1R5cGVmYWNlKiB0Ziwg
Y29uc3QgY2hhciogZmFtaWx5LCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBmYWtlQm9sZCwgYm9vbCBm
YWtlSXRhbGljLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFRleHRPcmllbnRhdGlvbiB0
ZXh0T3JpZW50YXRpb24pCisgICAgOiBtX3R5cGVmYWNlKHRmKQorICAgICwgbV9mYW1pbHkoZmFt
aWx5KQorICAgICwgbV90ZXh0U2l6ZSh0ZXh0U2l6ZSkKKyAgICAsIG1fZW1TaXplSW5Gb250VW5p
dHMoMCkKKyAgICAsIG1fZmFrZUJvbGQoZmFrZUJvbGQpCisgICAgLCBtX2Zha2VJdGFsaWMoZmFr
ZUl0YWxpYykKKyAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCisgICAgLCBtX3RleHRP
cmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pCit7CisgICAgU2tTYWZlUmVmKG1fdHlwZWZhY2Up
OworICAgIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKTsKK30KKworRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMsIGZsb2F0IHRl
eHRTaXplKQorICAgIDogbV90eXBlZmFjZShzcmMubV90eXBlZmFjZSkKKyAgICAsIG1fZmFtaWx5
KHNyYy5tX2ZhbWlseSkKKyAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCisgICAgLCBtX2VtU2l6
ZUluRm9udFVuaXRzKHNyYy5tX2VtU2l6ZUluRm9udFVuaXRzKQorICAgICwgbV9mYWtlQm9sZChz
cmMubV9mYWtlQm9sZCkKKyAgICAsIG1fZmFrZUl0YWxpYyhzcmMubV9mYWtlSXRhbGljKQorICAg
ICwgbV9vcmllbnRhdGlvbihzcmMubV9vcmllbnRhdGlvbikKKyAgICAsIG1fdGV4dE9yaWVudGF0
aW9uKHNyYy5tX3RleHRPcmllbnRhdGlvbikKKyAgICAsIG1faGFyZmJ1enpGYWNlKHNyYy5tX2hh
cmZidXp6RmFjZSkKK3sKKyAgICBTa1NhZmVSZWYobV90eXBlZmFjZSk7CisgICAgcXVlcnlTeXN0
ZW1Gb3JSZW5kZXJTdHlsZSgpOworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3Jt
RGF0YSgpCit7CisgICAgU2tTYWZlVW5yZWYobV90eXBlZmFjZSk7Cit9CisKK2ludCBGb250UGxh
dGZvcm1EYXRhOjplbVNpemVJbkZvbnRVbml0cygpIGNvbnN0Cit7CisgICAgaWYgKG1fZW1TaXpl
SW5Gb250VW5pdHMpCisgICAgICAgIHJldHVybiBtX2VtU2l6ZUluRm9udFVuaXRzOworCisgICAg
U2tBZHZhbmNlZFR5cGVmYWNlTWV0cmljcyogbWV0cmljcyA9IG1fdHlwZWZhY2UtPmdldEFkdmFu
Y2VkVHlwZWZhY2VNZXRyaWNzKFNrQWR2YW5jZWRUeXBlZmFjZU1ldHJpY3M6OmtOb19QZXJHbHlw
aEluZm8pOworICAgIG1fZW1TaXplSW5Gb250VW5pdHMgPSBtZXRyaWNzLT5mRW1TaXplOworICAg
IG1ldHJpY3MtPnVucmVmKCk7CisgICAgcmV0dXJuIG1fZW1TaXplSW5Gb250VW5pdHM7Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBzcmMpCit7CisgICAgU2tSZWZDbnRfU2FmZUFzc2lnbihtX3R5cGVmYWNl
LCBzcmMubV90eXBlZmFjZSk7CisKKyAgICBtX2ZhbWlseSA9IHNyYy5tX2ZhbWlseTsKKyAgICBt
X3RleHRTaXplID0gc3JjLm1fdGV4dFNpemU7CisgICAgbV9mYWtlQm9sZCA9IHNyYy5tX2Zha2VC
b2xkOworICAgIG1fZmFrZUl0YWxpYyA9IHNyYy5tX2Zha2VJdGFsaWM7CisgICAgbV9oYXJmYnV6
ekZhY2UgPSBzcmMubV9oYXJmYnV6ekZhY2U7CisgICAgbV9vcmllbnRhdGlvbiA9IHNyYy5tX29y
aWVudGF0aW9uOworICAgIG1fdGV4dE9yaWVudGF0aW9uID0gc3JjLm1fdGV4dE9yaWVudGF0aW9u
OworICAgIG1fc3R5bGUgPSBzcmMubV9zdHlsZTsKKyAgICBtX2VtU2l6ZUluRm9udFVuaXRzID0g
c3JjLm1fZW1TaXplSW5Gb250VW5pdHM7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKKyNpZm5k
ZWYgTkRFQlVHCitTdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAor
eworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyNlbmRpZgorCit2b2lkIEZvbnRQbGF0Zm9ybURh
dGE6OnNldHVwUGFpbnQoU2tQYWludCogcGFpbnQpIGNvbnN0Cit7CisgICAgY29uc3QgZmxvYXQg
dHMgPSBtX3RleHRTaXplID49IDAgPyBtX3RleHRTaXplIDogMTI7CisKKyAgICBwYWludC0+c2V0
QW50aUFsaWFzKG1fc3R5bGUudXNlQW50aUFsaWFzID09IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVm
ZXJlbmNlID8gaXNTa2lhQW50aUFsaWFzIDogbV9zdHlsZS51c2VBbnRpQWxpYXMpOworICAgIHN3
aXRjaCAobV9zdHlsZS51c2VIaW50aW5nKSB7CisgICAgY2FzZSBGb250UmVuZGVyU3R5bGU6Ok5v
UHJlZmVyZW5jZToKKyAgICAgICAgcGFpbnQtPnNldEhpbnRpbmcoc2tpYUhpbnRpbmcpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIDA6CisgICAgICAgIHBhaW50LT5zZXRIaW50aW5nKFNrUGFp
bnQ6OmtOb19IaW50aW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cGFpbnQtPnNldEhpbnRpbmcoc3RhdGljX2Nhc3Q8U2tQYWludDo6SGludGluZz4obV9zdHlsZS5o
aW50U3R5bGUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcGFpbnQtPnNldEVtYmVk
ZGVkQml0bWFwVGV4dChtX3N0eWxlLnVzZUJpdG1hcHMpOworICAgIHBhaW50LT5zZXRUZXh0U2l6
ZShTa0Zsb2F0VG9TY2FsYXIodHMpKTsKKyAgICBwYWludC0+c2V0VHlwZWZhY2UobV90eXBlZmFj
ZSk7CisgICAgcGFpbnQtPnNldEZha2VCb2xkVGV4dChtX2Zha2VCb2xkKTsKKyAgICBwYWludC0+
c2V0VGV4dFNrZXdYKG1fZmFrZUl0YWxpYyA/IC1TS19TY2FsYXIxIC8gNCA6IDApOworICAgIHBh
aW50LT5zZXRBdXRvaGludGVkKG1fc3R5bGUudXNlQXV0b0hpbnQpOworCisgICAgaWYgKG1fc3R5
bGUudXNlQW50aUFsaWFzID09IDEgfHwgKG1fc3R5bGUudXNlQW50aUFsaWFzID09IEZvbnRSZW5k
ZXJTdHlsZTo6Tm9QcmVmZXJlbmNlICYmIGlzU2tpYUFudGlBbGlhcykpCisgICAgICAgIHBhaW50
LT5zZXRMQ0RSZW5kZXJUZXh0KG1fc3R5bGUudXNlU3VicGl4ZWwgPT0gRm9udFJlbmRlclN0eWxl
OjpOb1ByZWZlcmVuY2UgPyBpc1NraWFTdWJwaXhlbEdseXBocyA6IG1fc3R5bGUudXNlU3VicGl4
ZWwpOworfQorCitTa0ZvbnRJRCBGb250UGxhdGZvcm1EYXRhOjp1bmlxdWVJRCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fdHlwZWZhY2UtPnVuaXF1ZUlEKCk7Cit9CisKK2Jvb2wgRm9udFBsYXRm
b3JtRGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBhKSBjb25zdAorewor
ICAgIC8vIElmIGVpdGhlciBvZiB0aGUgdHlwZWZhY2UgcG9pbnRlcnMgYXJlIGludmFsaWQgKGVp
dGhlciAwIG9yIHRoZQorICAgIC8vIHNwZWNpYWwgZGVsZXRlZCB2YWx1ZSkgdGhlbiB3ZSB0ZXN0
IGZvciBwb2ludGVyIGVxdWFsaXR5LiBPdGhlcndpc2UsIHdlCisgICAgLy8gY2FsbCBTa1R5cGVm
YWNlOjpFcXVhbCBvbiB0aGUgdmFsaWQgcG9pbnRlcnMuCisgICAgYm9vbCB0eXBlZmFjZXNFcXVh
bDsKKyAgICBpZiAobV90eXBlZmFjZSA9PSBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkKKyAg
ICAgICAgfHwgYS5tX3R5cGVmYWNlID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKQorICAg
ICAgICB8fCAhbV90eXBlZmFjZQorICAgICAgICB8fCAhYS5tX3R5cGVmYWNlKQorICAgICAgICB0
eXBlZmFjZXNFcXVhbCA9IG1fdHlwZWZhY2UgPT0gYS5tX3R5cGVmYWNlOworICAgIGVsc2UKKyAg
ICAgICAgdHlwZWZhY2VzRXF1YWwgPSBTa1R5cGVmYWNlOjpFcXVhbChtX3R5cGVmYWNlLCBhLm1f
dHlwZWZhY2UpOworCisgICAgcmV0dXJuIHR5cGVmYWNlc0VxdWFsIAorICAgICAgICAmJiBtX3Rl
eHRTaXplID09IGEubV90ZXh0U2l6ZQorICAgICAgICAmJiBtX2Zha2VCb2xkID09IGEubV9mYWtl
Qm9sZAorICAgICAgICAmJiBtX2Zha2VJdGFsaWMgPT0gYS5tX2Zha2VJdGFsaWMKKyAgICAgICAg
JiYgbV9vcmllbnRhdGlvbiA9PSBhLm1fb3JpZW50YXRpb24KKyAgICAgICAgJiYgbV90ZXh0T3Jp
ZW50YXRpb24gPT0gYS5tX3RleHRPcmllbnRhdGlvbgorICAgICAgICAmJiBtX3N0eWxlID09IGEu
bV9zdHlsZTsKK30KKwordW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0Cit7
CisgICAgdW5zaWduZWQgaCA9IFNrVHlwZWZhY2U6OlVuaXF1ZUlEKG1fdHlwZWZhY2UpOworICAg
IGggXj0gMHgwMTAxMDEwMSAqICgoc3RhdGljX2Nhc3Q8aW50PihtX3RleHRPcmllbnRhdGlvbikg
PDwgMykgfCAoc3RhdGljX2Nhc3Q8aW50PihtX29yaWVudGF0aW9uKSA8PCAyKSB8IChzdGF0aWNf
Y2FzdDxpbnQ+KG1fZmFrZUJvbGQpIDw8IDEpIHwgc3RhdGljX2Nhc3Q8aW50PihtX2Zha2VJdGFs
aWMpKTsKKworICAgIC8vIFRoaXMgbWVtY3B5IGlzIHRvIGF2b2lkIGEgcmVpbnRlcnByZXRfY2Fz
dCB0aGF0IGJyZWFrcyBzdHJpY3QtYWxpYXNpbmcKKyAgICAvLyBydWxlcy4gTWVtY3B5IGlzIGdl
bmVyYWxseSBvcHRpbWl6ZWQgZW5vdWdoIHNvIHRoYXQgcGVyZm9ybWFuY2UgZG9lc24ndAorICAg
IC8vIG1hdHRlciBoZXJlLgorICAgIHVpbnQzMl90IHRleHRTaXplQnl0ZXM7CisgICAgbWVtY3B5
KCZ0ZXh0U2l6ZUJ5dGVzLCAmbV90ZXh0U2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgaCBe
PSB0ZXh0U2l6ZUJ5dGVzOworCisgICAgcmV0dXJuIGg7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3Jt
RGF0YTo6aXNGaXhlZFBpdGNoKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworSGFyZmJ1enpGYWNlKiBGb250UGxhdGZvcm1EYXRhOjpoYXJm
YnV6ekZhY2UoKSBjb25zdAoreworICAgIGlmICghbV9oYXJmYnV6ekZhY2UpCisgICAgICAgIG1f
aGFyZmJ1enpGYWNlID0gSGFyZmJ1enpGYWNlOjpjcmVhdGUoY29uc3RfY2FzdDxGb250UGxhdGZv
cm1EYXRhKj4odGhpcykpOworCisgICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdldCgpOworfQor
Cit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKQorewor
ICAgIGlmICghbV9mYW1pbHkubGVuZ3RoKCkpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBh
IGZhbWlseSBmb3IgdGhpcy4gUHJvYmFibHkgYmVjYXVzZSBpdCdzIGEgd2ViZm9udC4gV2UKKyAg
ICAgICAgLy8gc2V0IGFsbCB0aGUgdmFsdWVzIHRvICdubyBwcmVmZXJlbmNlJyBhbmQgdGFrZSB0
aGUgZGVmYXVsdHMgcGFzc2VkCisgICAgICAgIC8vIGluIGZyb20gWFNFVFRJTkdTLgorICAgICAg
ICBtX3N0eWxlLnVzZUJpdG1hcHMgPSBGb250UmVuZGVyU3R5bGU6Ok5vUHJlZmVyZW5jZTsKKyAg
ICAgICAgbV9zdHlsZS51c2VBdXRvSGludCA9IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNl
OworICAgICAgICBtX3N0eWxlLnVzZUhpbnRpbmcgPSBGb250UmVuZGVyU3R5bGU6Ok5vUHJlZmVy
ZW5jZTsKKyAgICAgICAgbV9zdHlsZS51c2VBbnRpQWxpYXMgPSBGb250UmVuZGVyU3R5bGU6Ok5v
UHJlZmVyZW5jZTsKKyAgICAgICAgbV9zdHlsZS51c2VTdWJwaXhlbCA9IEZvbnRSZW5kZXJTdHls
ZTo6Tm9QcmVmZXJlbmNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUGxhdGZvcm1T
dXBwb3J0OjpnZXRSZW5kZXJTdHlsZUZvclN0cmlrZShtX2ZhbWlseS5kYXRhKCksICgoKGludClt
X3RleHRTaXplKSA8PCAyKSB8IChtX3R5cGVmYWNlLT5zdHlsZSgpICYgMyksICZtX3N0eWxlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRh
SGFyZkJ1enouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODc5ZjJlMmU1Nzc3Zjc5N2RiN2JhNWU2NDk0ZjE3ZWJh
NWMxNzFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgKQEAgLTAsMCArMSwxNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhSGFyZkJ1enpfaAorI2RlZmlu
ZSBGb250UGxhdGZvcm1EYXRhSGFyZkJ1enpfaAorCisjaW5jbHVkZSAiRm9udE9yaWVudGF0aW9u
LmgiCisjaW5jbHVkZSAiRm9udFJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiSGFyZkJ1enpTa2lh
LmgiCisjaW5jbHVkZSAiU2tQYWludC5oIgorI2luY2x1ZGUgIlRleHRPcmllbnRhdGlvbi5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+
CisKK2NsYXNzIFNrVHlwZWZhY2U7Cit0eXBlZGVmIHVpbnQzMl90IFNrRm9udElEOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnREZXNjcmlwdGlvbjsKKworLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIEZvbnRQbGF0Zm9ybURhdGEgaXMgdGhlIGhhbmRsZSB3aGljaCBXZWJL
aXQgaGFzIG9uIGEgc3BlY2lmaWMgZmFjZS4gQSBmYWNlCisvLyBpcyB0aGUgdHVwbGUgb2YgKGZv
bnQsIHNpemUsIC4uLmV0YykuIEhlcmUgd2UgYXJlIGp1c3Qgd3JhcHBpbmcgYSBTa2lhCisvLyBT
a1R5cGVmYWNlIHBvaW50ZXIgYW5kIGRlYWxpbmcgd2l0aCB0aGUgcmVmZXJlbmNlIGNvdW50aW5n
IGV0Yy4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjbGFzcyBGb250UGxhdGZvcm1EYXRhIHsK
K3B1YmxpYzoKKyAgICAvLyBVc2VkIGZvciBkZWxldGVkIHZhbHVlcyBpbiB0aGUgZm9udCBjYWNo
ZSdzIGhhc2ggdGFibGVzLiBUaGUgaGFzaCB0YWJsZQorICAgIC8vIHdpbGwgY3JlYXRlIHVzIHdp
dGggdGhpcyBzdHJ1Y3R1cmUsIGFuZCBpdCB3aWxsIGNvbXBhcmUgb3RoZXIgdmFsdWVzCisgICAg
Ly8gdG8gdGhpcyAiRGVsZXRlZCIgb25lLiBJdCBleHBlY3RzIHRoZSBEZWxldGVkIG9uZSB0byBi
ZSBkaWZmZXJlbnRpYWJsZQorICAgIC8vIGZyb20gdGhlIDAgb25lIChjcmVhdGVkIHdpdGggdGhl
IGVtcHR5IGNvbnN0cnVjdG9yKSwgc28gd2UgY2FuJ3QganVzdAorICAgIC8vIHNldCBldmVyeXRo
aW5nIHRvIDAuCisgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCisgICAgICAgIDogbV90eXBlZmFjZShoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkp
CisgICAgICAgICwgbV90ZXh0U2l6ZSgwKQorICAgICAgICAsIG1fZW1TaXplSW5Gb250VW5pdHMo
MCkKKyAgICAgICAgLCBtX2Zha2VCb2xkKGZhbHNlKQorICAgICAgICAsIG1fZmFrZUl0YWxpYyhm
YWxzZSkKKyAgICAgICAgLCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCisgICAgICAgICwgbV90
ZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkKKyAgICAgICAgeyB9
CisKKyAgICBGb250UGxhdGZvcm1EYXRhKCkKKyAgICAgICAgOiBtX3R5cGVmYWNlKDApCisgICAg
ICAgICwgbV90ZXh0U2l6ZSgwKQorICAgICAgICAsIG1fZW1TaXplSW5Gb250VW5pdHMoMCkKKyAg
ICAgICAgLCBtX2Zha2VCb2xkKGZhbHNlKQorICAgICAgICAsIG1fZmFrZUl0YWxpYyhmYWxzZSkK
KyAgICAgICAgLCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCisgICAgICAgICwgbV90ZXh0T3Jp
ZW50YXRpb24oVGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkKKyAgICAgICAgeyB9CisKKyAg
ICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHRleHRTaXplLCBib29sIGZha2VCb2xkLCBib29sIGZh
a2VJdGFsaWMpCisgICAgICAgIDogbV90eXBlZmFjZSgwKQorICAgICAgICAsIG1fdGV4dFNpemUo
dGV4dFNpemUpCisgICAgICAgICwgbV9lbVNpemVJbkZvbnRVbml0cygwKQorICAgICAgICAsIG1f
ZmFrZUJvbGQoZmFrZUJvbGQpCisgICAgICAgICwgbV9mYWtlSXRhbGljKGZha2VJdGFsaWMpCisg
ICAgICAgICwgbV9vcmllbnRhdGlvbihIb3Jpem9udGFsKQorICAgICAgICAsIG1fdGV4dE9yaWVu
dGF0aW9uKFRleHRPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQpCisgICAgICAgIHsgfQorCisgICAg
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgRm9udFBsYXRm
b3JtRGF0YShTa1R5cGVmYWNlKiwgY29uc3QgY2hhciogbmFtZSwgZmxvYXQgdGV4dFNpemUsIGJv
b2wgZmFrZUJvbGQsIGJvb2wgZmFrZUl0YWxpYywgRm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRh
bCwgVGV4dE9yaWVudGF0aW9uID0gVGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodCk7CisgICAg
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMsIGZsb2F0IHRleHRT
aXplKTsKKyAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIC8vIFJldHVybiB0cnVlIGlmZiB0aGlzIGZvbnQgaXMgbW9ub3NwYWNlZCAoaS5lLiBl
dmVyeSBnbHlwaCBoYXMgYW4gZXF1YWwgeAorICAgIC8vIGFkdmFuY2UpCisgICAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIGJvb2wgaXNGaXhlZFBpdGNoKCkgY29uc3Q7CisKKyAgICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgLy8gU2V0dXAgYSBTa2lhIHBhaW50aW5nIGNvbnRleHQgdG8gdXNl
IHRoaXMgZm9udC4KKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdm9pZCBzZXR1cFBhaW50
KFNrUGFpbnQqKSBjb25zdDsKKworICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBSZXR1
cm4gU2tpYSdzIHVuaXF1ZSBpZCBmb3IgdGhpcyBmb250LiBUaGlzIGVuY29kZXMgYm90aCB0aGUg
c3R5bGUgYW5kCisgICAgLy8gdGhlIGZvbnQncyBmaWxlIG5hbWUgc28gcmVmZXJzIHRvIGEgc2lu
Z2xlIGZhY2UuCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNrRm9udElEIHVuaXF1ZUlE
KCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgZmxvYXQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dFNpemU7IH0KKyAgICBpbnQgZW1TaXplSW5Gb250VW5pdHMo
KSBjb25zdDsKKworICAgIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZW50YXRpb247IH0KKyAgICB2b2lkIHNldE9yaWVudGF0aW9uKEZvbnRPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH0KKyAgICB2
b2lkIHNldEZha2VCb2xkKGJvb2wgZmFrZUJvbGQpIHsgbV9mYWtlQm9sZCA9IGZha2VCb2xkOyB9
CisgICAgdm9pZCBzZXRGYWtlSXRhbGljKGJvb2wgZmFrZUl0YWxpYykgeyBtX2Zha2VJdGFsaWMg
PSBmYWtlSXRhbGljOyB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmKSBjb25zdDsKKyAgICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYpOworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGVmYWNlID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsgfQorCisj
aWZuZGVmIE5ERUJVRworICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworI2VuZGlmCisK
KyAgICBIYXJmYnV6ekZhY2UqIGhhcmZidXp6RmFjZSgpIGNvbnN0OworCisgICAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIEdsb2JhbCBmb250IHByZWZlcmVuY2VzLi4uCisKKyAgICBzdGF0
aWMgdm9pZCBzZXRIaW50aW5nKFNrUGFpbnQ6OkhpbnRpbmcpOworICAgIHN0YXRpYyB2b2lkIHNl
dEFudGlBbGlhcyhib29sIG9uKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTdWJwaXhlbEdseXBocyhi
b29sIG9uKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUo
KTsKKworICAgIC8vIEZJWE1FOiBDb3VsZCBTa0F1dG9VbnJlZiBiZSB1c2VkIGhlcmU/CisgICAg
U2tUeXBlZmFjZSogbV90eXBlZmFjZTsKKyAgICBDU3RyaW5nIG1fZmFtaWx5OworICAgIGZsb2F0
IG1fdGV4dFNpemU7CisgICAgbXV0YWJsZSBpbnQgbV9lbVNpemVJbkZvbnRVbml0czsKKyAgICBi
b29sIG1fZmFrZUJvbGQ7CisgICAgYm9vbCBtX2Zha2VJdGFsaWM7CisgICAgRm9udE9yaWVudGF0
aW9uIG1fb3JpZW50YXRpb247CisgICAgVGV4dE9yaWVudGF0aW9uIG1fdGV4dE9yaWVudGF0aW9u
OworICAgIEZvbnRSZW5kZXJTdHlsZSBtX3N0eWxlOworICAgIG11dGFibGUgUmVmUHRyPEhhcmZi
dXp6RmFjZT4gbV9oYXJmYnV6ekZhY2U7CisKKyAgICBTa1R5cGVmYWNlKiBoYXNoVGFibGVEZWxl
dGVkRm9udFZhbHVlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTa1R5cGVmYWNl
Kj4oLTEpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBpZmRl
ZiBGb250UGxhdGZvcm1EYXRhSGFyZkJ1enpfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjY4ZWE2MTkyNDVmODY2ZTViZDBkNTc4ZDAxMDQ4NDQ1MjU4NGMyYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2tpYS5jcHAKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SGFyZkJ1enpTa2lhLmgiCisKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNs
dWRlICJTa0ZvbnRIb3N0LmgiCisjaW5jbHVkZSAiU2tQYWludC5oIgorI2luY2x1ZGUgIlNrUGF0
aC5oIgorI2luY2x1ZGUgIlNrUG9pbnQuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRl
ICJTa1V0aWxzLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9P
d25BcnJheVB0ci5oPgorCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJoYXJmYnV6ei1zaGFwZXIu
aCIKK30KKworLy8gVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGNhbGxiYWNrcyB3aGljaCBIYXJm
YnV6eiByZXF1aXJlcyBieSB1c2luZyBTa2lhCisvLyBjYWxscy4gU2VlIHRoZSBIYXJmYnV6eiBz
b3VyY2UgZm9yIHJlZmVyZW5jZXMgYWJvdXQgd2hhdCB0aGVzZSBjYWxsYmFja3MgZG8uCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEhCX0ZpeGVkIFNraWFTY2FsYXJUb0hhcmZidXp6
Rml4ZWQoU2tTY2FsYXIgdmFsdWUpCit7CisgICAgLy8gSEJfRml4ZWQgaXMgYSAyNi42IGZpeGVk
IHBvaW50IGZvcm1hdC4KKyAgICByZXR1cm4gdmFsdWUgKiA2NDsKK30KKworc3RhdGljIEhCX0Jv
b2wgc3RyaW5nVG9HbHlwaHMoSEJfRm9udCBoYkZvbnQsIGNvbnN0IEhCX1VDaGFyMTYqIGNoYXJh
Y3RlcnMsIGhiX3VpbnQzMiBsZW5ndGgsIEhCX0dseXBoKiBnbHlwaHMsIGhiX3VpbnQzMiogZ2x5
cGhzU2l6ZSwgSEJfQm9vbCBpc1JUTCkKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhKiBmb250ID0g
cmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oaGJGb250LT51c2VyRGF0YSk7Cisg
ICAgU2tQYWludCBwYWludDsKKworICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKKyAgICBw
YWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7CisKKyAg
ICB1bnNpZ25lZCBjb2RlcG9pbnRzID0gMDsKKyAgICBmb3IgKGhiX3VpbnQzMiBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICghU2tVVEYxNl9Jc0hpZ2hTdXJyb2dhdGUoY2hh
cmFjdGVyc1tpXSkpCisgICAgICAgICAgICBjb2RlcG9pbnRzKys7CisgICAgICAgIGlmIChjb2Rl
cG9pbnRzID4gKmdseXBoc1NpemUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBpbnQgbnVtR2x5cGhzID0gcGFpbnQudGV4dFRvR2x5cGhzKGNoYXJhY3RlcnMsIGxlbmd0aCAq
IHNpemVvZih1aW50MTZfdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihnbHlwaHMpKTsK
KworICAgIC8vIEhCX0dseXBoIGlzIDMyLWJpdCwgYnV0IFNraWEgb3V0cHV0cyBvbmx5IDE2LWJp
dCBudW1iZXJzLiBTbyBvdXIKKyAgICAvLyB8Z2x5cGhzfCBhcnJheSBuZWVkcyB0byBiZSBjb252
ZXJ0ZWQuCisgICAgZm9yIChpbnQgaSA9IG51bUdseXBocyAtIDE7IGkgPj0gMDsgLS1pKSB7Cisg
ICAgICAgIHVpbnQxNl90IHZhbHVlOworICAgICAgICAvLyBXZSB1c2UgYSBtZW1jcHkgdG8gYXZv
aWQgYnJlYWtpbmcgc3RyaWN0IGFsaWFzaW5nIHJ1bGVzLgorICAgICAgICBtZW1jcHkoJnZhbHVl
LCByZWludGVycHJldF9jYXN0PGNoYXIqPihnbHlwaHMpICsgc2l6ZW9mKHVpbnQxNl90KSAqIGks
IHNpemVvZih1aW50MTZfdCkpOworICAgICAgICBnbHlwaHNbaV0gPSB2YWx1ZTsKKyAgICB9CisK
KyAgICAqZ2x5cGhzU2l6ZSA9IG51bUdseXBoczsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGlj
IHZvaWQgZ2x5cGhzVG9BZHZhbmNlcyhIQl9Gb250IGhiRm9udCwgY29uc3QgSEJfR2x5cGgqIGds
eXBocywgaGJfdWludDMyIG51bUdseXBocywgSEJfRml4ZWQqIGFkdmFuY2VzLCBpbnQgZmxhZ3Mp
Cit7CisgICAgRm9udFBsYXRmb3JtRGF0YSogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBs
YXRmb3JtRGF0YSo+KGhiRm9udC0+dXNlckRhdGEpOworICAgIFNrUGFpbnQgcGFpbnQ7CisKKyAg
ICBmb250LT5zZXR1cFBhaW50KCZwYWludCk7CisgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNr
UGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisKKyAgICBPd25BcnJheVB0cjx1aW50MTZf
dD4gZ2x5cGhzMTYgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50MTZfdFtudW1HbHlwaHNdKTsKKyAg
ICBpZiAoIWdseXBoczE2LmdldCgpKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKQorICAgICAgICBnbHlwaHMxNltpXSA9IGdseXBo
c1tpXTsKKyAgICBwYWludC5nZXRUZXh0V2lkdGhzKGdseXBoczE2LmdldCgpLCBudW1HbHlwaHMg
KiBzaXplb2YodWludDE2X3QpLCByZWludGVycHJldF9jYXN0PFNrU2NhbGFyKj4oYWR2YW5jZXMp
KTsKKworICAgIC8vIFRoZSB8YWR2YW5jZXN8IHZhbHVlcyB3aGljaCBTa2lhIG91dHB1dHMgYXJl
IFNrU2NhbGFycywgd2hpY2ggYXJlIGZsb2F0cworICAgIC8vIGluIENocm9taXVtLiBIb3dldmVy
LCBIYXJmYnV6eiB3YW50cyB0aGVtIGluIDI2LjYgZml4ZWQgcG9pbnQgZm9ybWF0LgorICAgIC8v
IFRoZXNlIHR3byBmb3JtYXRzIGFyZSBib3RoIDMyLWJpdHMgbG9uZy4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAgZmxvYXQgdmFsdWU7Cisg
ICAgICAgIC8vIFdlIHVzZSBhIG1lbWNweSB0byBhdm9pZCBicmVha2luZyBzdHJpY3QgYWxpYXNp
bmcgcnVsZXMuCisgICAgICAgIG1lbWNweSgmdmFsdWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGFkdmFuY2VzKSArIHNpemVvZihmbG9hdCkgKiBpLCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAg
YWR2YW5jZXNbaV0gPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVkKHZhbHVlKTsKKyAgICB9Cit9
CisKK3N0YXRpYyBIQl9Cb29sIGNhblJlbmRlcihIQl9Gb250IGhiRm9udCwgY29uc3QgSEJfVUNo
YXIxNiogY2hhcmFjdGVycywgaGJfdWludDMyIGxlbmd0aCkKK3sKKyAgICBGb250UGxhdGZvcm1E
YXRhKiBmb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oaGJGb250LT51
c2VyRGF0YSk7CisgICAgU2tQYWludCBwYWludDsKKworICAgIGZvbnQtPnNldHVwUGFpbnQoJnBh
aW50KTsKKyAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNv
ZGluZyk7CisKKyAgICBPd25BcnJheVB0cjx1aW50MTZfdD4gZ2x5cGhzMTYgPSBhZG9wdEFycmF5
UHRyKG5ldyB1aW50MTZfdFtsZW5ndGhdKTsKKyAgICBpZiAoIWdseXBoczE2LmdldCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBpbnQgbnVtR2x5cGhzID0gcGFpbnQudGV4dFRvR2x5cGhzKGNo
YXJhY3RlcnMsIGxlbmd0aCAqIHNpemVvZih1aW50MTZfdCksIGdseXBoczE2LmdldCgpKTsKKwor
ICAgIGJvb2wgY2FuUmVuZGVyID0gdHJ1ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUds
eXBoczsgKytpKSB7CisgICAgICAgIGlmICghZ2x5cGhzMTZbaV0pIHsKKyAgICAgICAgICAgIGNh
blJlbmRlciA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gY2FuUmVuZGVyOworfQorCitzdGF0aWMgSEJfRXJyb3IgZ2V0T3V0bGluZVBv
aW50KEhCX0ZvbnQgaGJGb250LCBIQl9HbHlwaCBnbHlwaCwgaW50IGZsYWdzLCBoYl91aW50MzIg
cG9pbnQsIEhCX0ZpeGVkKiB4UG9zLCBIQl9GaXhlZCogeVBvcywgaGJfdWludDMyKiByZXN1bHRp
bmdOdW1Qb2ludHMpCit7CisgICAgLy8gV2UgY2Fubm90IHByb3ZpZGUgdGhlIHJpZ2h0IHBvc2l0
aW9uIG9mIG91dGxpbmUgcG9pbnRzIGZyb20gcG9pbnQgaW5kZXguCisgICAgLy8gSnVzdCByZXR1
cm4gSEJfRXJyX09rIHdpdGggcmVzdWx0aW5nTnVtUG9pbnRzID0gMCBzbyB0aGF0IGhhcmZidXp6
CisgICAgLy8gZmFsbHMgYmFjayBvbiB1c2luZyBkZXNpZ24gY29vcmRpbmF0ZSB2YWx1ZSBwYWly
LgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAw
NzkgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAqcmVzdWx0aW5nTnVtUG9pbnRzID0gMDsKKyAgICBy
ZXR1cm4gSEJfRXJyX09rOworfQorCitzdGF0aWMgdm9pZCBnZXRHbHlwaE1ldHJpY3MoSEJfRm9u
dCBoYkZvbnQsIEhCX0dseXBoIGdseXBoLCBIQl9HbHlwaE1ldHJpY3MqIG1ldHJpY3MpCit7Cisg
ICAgRm9udFBsYXRmb3JtRGF0YSogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3Jt
RGF0YSo+KGhiRm9udC0+dXNlckRhdGEpOworICAgIFNrUGFpbnQgcGFpbnQ7CisKKyAgICBmb250
LT5zZXR1cFBhaW50KCZwYWludCk7CisgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6
OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgdWludDE2X3QgZ2x5cGgxNiA9IGdseXBoOwor
ICAgIFNrU2NhbGFyIHdpZHRoOworICAgIFNrUmVjdCBib3VuZHM7CisgICAgcGFpbnQuZ2V0VGV4
dFdpZHRocygmZ2x5cGgxNiwgc2l6ZW9mKGdseXBoMTYpLCAmd2lkdGgsICZib3VuZHMpOworCisg
ICAgbWV0cmljcy0+eCA9IFNraWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQoYm91bmRzLmZMZWZ0KTsK
KyAgICBtZXRyaWNzLT55ID0gU2tpYVNjYWxhclRvSGFyZmJ1enpGaXhlZChib3VuZHMuZlRvcCk7
CisgICAgbWV0cmljcy0+d2lkdGggPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVkKGJvdW5kcy53
aWR0aCgpKTsKKyAgICBtZXRyaWNzLT5oZWlnaHQgPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVk
KGJvdW5kcy5oZWlnaHQoKSk7CisKKyAgICBtZXRyaWNzLT54T2Zmc2V0ID0gU2tpYVNjYWxhclRv
SGFyZmJ1enpGaXhlZCh3aWR0aCk7CisgICAgLy8gV2UgY2FuJ3QgYWN0dWFsbHkgZ2V0IHRoZSB8
eXwgY29ycmVjdCBiZWNhdXNlIFNraWEgZG9lc24ndCBleHBvcnQKKyAgICAvLyB0aGUgdmVydGlj
YWwgYWR2YW5jZS4gSG93ZXZlciwgbm9yIHdlIGRvIGV2ZXIgcmVuZGVyIHZlcnRpY2FsIHRleHQg
YXQKKyAgICAvLyB0aGUgbW9tZW50IHNvIGl0J3MgdW5pbXBvcnRhbnQuCisgICAgbWV0cmljcy0+
eU9mZnNldCA9IDA7Cit9CisKK3N0YXRpYyBIQl9GaXhlZCBnZXRGb250TWV0cmljKEhCX0ZvbnQg
aGJGb250LCBIQl9Gb250TWV0cmljIG1ldHJpYykKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhKiBm
b250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oaGJGb250LT51c2VyRGF0
YSk7CisgICAgU2tQYWludCBwYWludDsKKworICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsK
KyAgICBTa1BhaW50OjpGb250TWV0cmljcyBza2lhTWV0cmljczsKKyAgICBwYWludC5nZXRGb250
TWV0cmljcygmc2tpYU1ldHJpY3MpOworCisgICAgc3dpdGNoIChtZXRyaWMpIHsKKyAgICBjYXNl
IEhCX0ZvbnRBc2NlbnQ6CisgICAgICAgIHJldHVybiBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVk
KC1za2lhTWV0cmljcy5mQXNjZW50KTsKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGdldHRpbmcg
dGhlIHJlc3Qgb2YgdGhlIG1ldHJpY3MgYW5kIEhhcmZidXp6IGRvZXNuJ3Qgc2VlbSB0byBuZWVk
IHRoZW0uCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitIQl9G
b250Q2xhc3MgaGFyZmJ1enpTa2lhQ2xhc3MgPSB7CisgICAgc3RyaW5nVG9HbHlwaHMsCisgICAg
Z2x5cGhzVG9BZHZhbmNlcywKKyAgICBjYW5SZW5kZXIsCisgICAgZ2V0T3V0bGluZVBvaW50LAor
ICAgIGdldEdseXBoTWV0cmljcywKKyAgICBnZXRGb250TWV0cmljLAorfTsKKworSEJfRm9udF8q
IGFsbG9jSGFyZmJ1enpGb250KCkKK3sKKyAgICBIQl9Gb250XyogZm9udCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SEJfRm9udF8qPihmYXN0TWFsbG9jKHNpemVvZihIQl9Gb250XykpKTsKKyAgICBtZW1z
ZXQoZm9udCwgMCwgc2l6ZW9mKEhCX0ZvbnRfKSk7CisgICAgZm9udC0+a2xhc3MgPSAmaGFyZmJ1
enpTa2lhQ2xhc3M7CisgICAgZm9udC0+dXNlckRhdGEgPSAwOworCisgICAgcmV0dXJuIGZvbnQ7
Cit9CisKK0hCX0Vycm9yIGhhcmZidXp6U2tpYUdldFRhYmxlKHZvaWQqIHZvaWRmYWNlLCBjb25z
dCBIQl9UYWcgdGFnLCBIQl9CeXRlKiBidWZmZXIsIEhCX1VJbnQqIGxlbikKK3sKKyAgICBGb250
UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4o
dm9pZGZhY2UpOworCisgICAgY29uc3Qgc2l6ZV90IHRhYmxlU2l6ZSA9IFNrRm9udEhvc3Q6Okdl
dFRhYmxlU2l6ZShmb250LT51bmlxdWVJRCgpLCB0YWcpOworICAgIGlmICghdGFibGVTaXplKQor
ICAgICAgICByZXR1cm4gSEJfRXJyX0ludmFsaWRfQXJndW1lbnQ7CisgICAgLy8gSWYgSGFyZmJ1
enogc3BlY2lmaWVkIGEgMCBidWZmZXIgdGhlbiBpdCdzIGFza2luZyBmb3IgdGhlIHNpemUgb2Yg
dGhlIHRhYmxlLgorICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICpsZW4gPSB0YWJsZVNpemU7
CisgICAgICAgIHJldHVybiBIQl9FcnJfT2s7CisgICAgfQorCisgICAgaWYgKCpsZW4gPCB0YWJs
ZVNpemUpCisgICAgICAgIHJldHVybiBIQl9FcnJfSW52YWxpZF9Bcmd1bWVudDsKKyAgICBTa0Zv
bnRIb3N0OjpHZXRUYWJsZURhdGEoZm9udC0+dW5pcXVlSUQoKSwgdGFnLCAwLCB0YWJsZVNpemUs
IGJ1ZmZlcik7CisgICAgcmV0dXJuIEhCX0Vycl9PazsKK30KKwordHlwZWRlZiBwYWlyPEhCX0Zh
Y2VSZWNfKiwgdW5zaWduZWQ+IEZhY2VDYWNoZUVudHJ5OwordHlwZWRlZiBIYXNoTWFwPHVuc2ln
bmVkIGludCwgRmFjZUNhY2hlRW50cnksIFdURjo6SW50SGFzaDx1bnNpZ25lZCBpbnQ+LCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkIGludD4gPiBIYXJmYnV6ekZh
Y2VDYWNoZTsKK3N0YXRpYyBIYXJmYnV6ekZhY2VDYWNoZSogZ0hhcmZidXp6RmFjZUNhY2hlID0g
MDsKKworc3RhdGljIEhCX0ZhY2VSZWNfKiBnZXRDYWNoZWRIYXJmYnV6ekZhY2UoRm9udFBsYXRm
b3JtRGF0YSogcGxhdGZvcm1EYXRhKQoreworICAgIGlmICghZ0hhcmZidXp6RmFjZUNhY2hlKQor
ICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUgPSBuZXcgSGFyZmJ1enpGYWNlQ2FjaGU7CisgICAg
U2tGb250SUQgdW5pcXVlSUQgPSBwbGF0Zm9ybURhdGEtPnVuaXF1ZUlEKCk7CisgICAgSGFyZmJ1
enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1
bmlxdWVJRCk7CisgICAgaWYgKHJlc3VsdCA9PSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgpKSB7
CisgICAgICAgIEZhY2VDYWNoZUVudHJ5IGVudHJ5KEhCX05ld0ZhY2UocGxhdGZvcm1EYXRhLCBo
YXJmYnV6elNraWFHZXRUYWJsZSksIDEpOworICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnNl
dCh1bmlxdWVJRCwgZW50cnkpOworICAgICAgICByZXR1cm4gZW50cnkuZmlyc3Q7CisgICAgfQor
ICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7CisgICAgcmV0dXJuIHJlc3VsdC5n
ZXQoKS0+c2Vjb25kLmZpcnN0OworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlQ2FjaGVkSGFyZmJ1
enpGYWNlKFNrRm9udElEIHVuaXF1ZUlEKQoreworICAgIEhhcmZidXp6RmFjZUNhY2hlOjppdGVy
YXRvciByZXN1bHQgPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmZpbmQodW5pcXVlSUQpOworICAgIEFT
U0VSVChyZXN1bHQgIT0gZ0hhcmZidXp6RmFjZUNhY2hlLT5lbmQoKSk7CisgICAgQVNTRVJUKHJl
c3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCA+IDApOworICAgIC0tKHJlc3VsdC5nZXQoKS0+c2Vj
b25kLnNlY29uZCk7CisgICAgaWYgKCEocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSkgewor
ICAgICAgICBIQl9GcmVlRmFjZShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgICAg
IGdIYXJmYnV6ekZhY2VDYWNoZS0+cmVtb3ZlKHVuaXF1ZUlEKTsKKyAgICB9Cit9CisKK0hhcmZi
dXp6RmFjZTo6SGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKKyAg
ICA6IG1fdW5pcXVlSUQocGxhdGZvcm1EYXRhLT51bmlxdWVJRCgpKQoreworICAgIG1faGFyZmJ1
enpGYWNlID0gZ2V0Q2FjaGVkSGFyZmJ1enpGYWNlKHBsYXRmb3JtRGF0YSk7Cit9CisKK0hhcmZi
dXp6RmFjZTo6fkhhcmZidXp6RmFjZSgpCit7CisgICAgcmVsZWFzZUNhY2hlZEhhcmZidXp6RmFj
ZShtX3VuaXF1ZUlEKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zMTZiNDQzZjEzNjRjYTc0MzEzODI2Zjk1MTY5YmJmZDI3NWRkOTJkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTa2lhLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEhhcmZCdXp6U2tpYV9o
CisjZGVmaW5lIEhhcmZCdXp6U2tpYV9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworc3RydWN0IEhCX0ZhY2VSZWNfOworc3RydWN0IEhC
X0ZvbnRfOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7
CisKK2NsYXNzIEhhcmZidXp6RmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEhhcmZidXp6RmFjZT4g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhhcmZidXp6RmFjZT4gY3JlYXRlKEZv
bnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSGFyZmJ1enpGYWNlKHBsYXRmb3JtRGF0YSkpOworICAgIH0KKworICAgIH5IYXJm
YnV6ekZhY2UoKTsKKworICAgIEhCX0ZhY2VSZWNfKiBmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9o
YXJmYnV6ekZhY2U7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBIYXJmYnV6ekZhY2UoRm9u
dFBsYXRmb3JtRGF0YSopOworCisgICAgdWludDMyX3QgbV91bmlxdWVJRDsKKyAgICBIQl9GYWNl
UmVjXyogbV9oYXJmYnV6ekZhY2U7Cit9OworCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgYXN5bW1l
dHJpYyBhbGxvYy9mcmVlIGZ1bmN0aW9uLgorLy8gV2UnbGwgcmVtb3ZlIHRoaXMgb25jZSB3ZSBt
b3ZlIHRvIHRoZSBuZXcgSGFyZmJ1enogQVBJLgorSEJfRm9udF8qIGFsbG9jSGFyZmJ1enpGb250
KCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9TaW1wbGVGb250RGF0YVNraWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovU2ltcGxlRm9u
dERhdGFTa2lhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDJjMTJhZGEyMGQ2ZWQ0MmE2MGNlNmNhY2MyYTY4
NDU3OWM5NDFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovU2ltcGxlRm9udERhdGFTa2lhLmNwcApAQCAtMCwwICsxLDI0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIK
KworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJG
b250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiU2tGb250SG9zdC5oIgorI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNp
bmNsdWRlICJTa1RpbWUuaCIKKyNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCisjaW5jbHVkZSAiU2tU
eXBlcy5oIgorI2luY2x1ZGUgIlZETVhQYXJzZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBTbWFsbGNhcHMgdmVyc2lvbnMgb2YgZm9udHMgYXJlIDcwJSB0aGUgc2l6ZSBvZiB0aGUg
bm9ybWFsIGZvbnQuCitzdGF0aWMgY29uc3QgZmxvYXQgc21hbGxDYXBzRnJhY3Rpb24gPSAwLjdm
Oworc3RhdGljIGNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0ZyYWN0aW9uID0gLjU7CisvLyBUaGlz
IGlzIHRoZSBsYXJnZXN0IFZETVggdGFibGUgd2hpY2ggd2UnbGwgdHJ5IHRvIGxvYWQgYW5kIHBh
cnNlLgorc3RhdGljIGNvbnN0IHNpemVfdCBtYXhWRE1YVGFibGVTaXplID0gMTAyNCAqIDEwMjQ7
IC8vIDEgTUIKKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBp
ZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUoKSkgeworICAgICAgICBtX2ZvbnRNZXRyaWNzLnJlc2V0
KCk7CisgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKKyAgICAgICAgbV9tYXhDaGFyV2lkdGgg
PSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU2tQYWludCBwYWludDsKKyAgICBT
a1BhaW50OjpGb250TWV0cmljcyBtZXRyaWNzOworCisgICAgbV9wbGF0Zm9ybURhdGEuc2V0dXBQ
YWludCgmcGFpbnQpOworICAgIHBhaW50LmdldEZvbnRNZXRyaWNzKCZtZXRyaWNzKTsKKyAgICBj
b25zdCBTa0ZvbnRJRCBmb250SUQgPSBtX3BsYXRmb3JtRGF0YS51bmlxdWVJRCgpOworCisgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IHZkbXhUYWcgPSBTa1NldEZvdXJCeXRlVGFnKCdWJywgJ0Qn
LCAnTScsICdYJyk7CisgICAgaW50IHBpeGVsU2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAr
IDAuNTsKKyAgICBpbnQgdmRteEFzY2VudCwgdmRteERlc2NlbnQ7CisgICAgYm9vbCBpc1ZETVhW
YWxpZCA9IGZhbHNlOworCisgICAgc2l6ZV90IHZkbXhTaXplID0gU2tGb250SG9zdDo6R2V0VGFi
bGVTaXplKGZvbnRJRCwgdmRteFRhZyk7CisgICAgaWYgKHZkbXhTaXplICYmIHZkbXhTaXplIDwg
bWF4VkRNWFRhYmxlU2l6ZSkgeworICAgICAgICB1aW50OF90KiB2ZG14VGFibGUgPSAodWludDhf
dCopIGZhc3RNYWxsb2ModmRteFNpemUpOworICAgICAgICBpZiAodmRteFRhYmxlCisgICAgICAg
ICAgICAmJiBTa0ZvbnRIb3N0OjpHZXRUYWJsZURhdGEoZm9udElELCB2ZG14VGFnLCAwLCB2ZG14
U2l6ZSwgdmRteFRhYmxlKSA9PSB2ZG14U2l6ZQorICAgICAgICAgICAgJiYgcGFyc2VWRE1YKCZ2
ZG14QXNjZW50LCAmdmRteERlc2NlbnQsIHZkbXhUYWJsZSwgdmRteFNpemUsIHBpeGVsU2l6ZSkp
CisgICAgICAgICAgICBpc1ZETVhWYWxpZCA9IHRydWU7CisgICAgICAgIGZhc3RGcmVlKHZkbXhU
YWJsZSk7CisgICAgfQorCisgICAgZmxvYXQgYXNjZW50OworICAgIGZsb2F0IGRlc2NlbnQ7CisK
KyAgICAvLyBCZXdhcmUgdGhvc2Ugd2hvIHN0ZXAgaGVyZTogVGhpcyBjb2RlIGlzIGRlc2lnbmVk
IHRvIG1hdGNoIFdpbjMyIGZvbnQKKyAgICAvLyBtZXRyaWNzICpleGFjdGx5Ki4KKyAgICBpZiAo
aXNWRE1YVmFsaWQpIHsKKyAgICAgICAgYXNjZW50ID0gdmRteEFzY2VudDsKKyAgICAgICAgZGVz
Y2VudCA9IC12ZG14RGVzY2VudDsKKyAgICB9IGVsc2UgeworICAgICAgICBTa1NjYWxhciBoZWln
aHQgPSAtbWV0cmljcy5mQXNjZW50ICsgbWV0cmljcy5mRGVzY2VudCArIG1ldHJpY3MuZkxlYWRp
bmc7CisgICAgICAgIGFzY2VudCA9IFNrU2NhbGFyUm91bmQoLW1ldHJpY3MuZkFzY2VudCk7Cisg
ICAgICAgIGRlc2NlbnQgPSBTa1NjYWxhclJvdW5kKGhlaWdodCkgLSBhc2NlbnQ7CisgICAgfQor
CisgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNz
LnNldERlc2NlbnQoZGVzY2VudCk7CisKKyAgICBmbG9hdCB4SGVpZ2h0OworICAgIGlmIChtZXRy
aWNzLmZYSGVpZ2h0KQorICAgICAgICB4SGVpZ2h0ID0gbWV0cmljcy5mWEhlaWdodDsKKyAgICBl
bHNlIHsKKyAgICAgICAgLy8gaGFjayB0YWtlbiBmcm9tIHRoZSBXaW5kb3dzIHBvcnQKKyAgICAg
ICAgeEhlaWdodCA9IGFzY2VudCAqIDAuNTZmOworICAgIH0KKworICAgIGZsb2F0IGxpbmVHYXAg
PSBTa1NjYWxhclRvRmxvYXQobWV0cmljcy5mTGVhZGluZyk7CisgICAgbV9mb250TWV0cmljcy5z
ZXRMaW5lR2FwKGxpbmVHYXApOworICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0
KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxy
b3VuZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApKTsKKworICAgIGlmIChwbGF0Zm9ybURh
dGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrKCkpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHZoZWFUYWcgPSBTa1NldEZv
dXJCeXRlVGFnKCd2JywgJ2gnLCAnZScsICdhJyk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50
MzJfdCB2b3JnVGFnID0gU2tTZXRGb3VyQnl0ZVRhZygnVicsICdPJywgJ1InLCAnRycpOworICAg
ICAgICBzaXplX3QgdmhlYVNpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udElELCB2
aGVhVGFnKTsKKyAgICAgICAgc2l6ZV90IHZvcmdTaXplID0gU2tGb250SG9zdDo6R2V0VGFibGVT
aXplKGZvbnRJRCwgdm9yZ1RhZyk7CisgICAgICAgIGlmICgodmhlYVNpemUgPiAwKSB8fCAodm9y
Z1NpemUgPiAwKSkKKyAgICAgICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSB0cnVlOworICAg
IH0KKworICAgIC8vIEluIFdlYktpdC9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmNwcCwgbV9zcGFjZVdpZHRoIGlzCisgICAgLy8gY2FsY3VsYXRlZCBmb3IgdXMsIGJ1
dCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBtX21heENoYXJXaWR0aCBhbmQKKyAgICAvLyBtX2F2Z0No
YXJXaWR0aCBpbiBvcmRlciBmb3IgdGV4dCBlbnRyeSB3aWRnZXRzIHRvIGJlIHNpemVkIGNvcnJl
Y3RseS4KKworICAgIFNrU2NhbGFyIHhSYW5nZSA9IG1ldHJpY3MuZlhNYXggLSBtZXRyaWNzLmZY
TWluOworICAgIG1fbWF4Q2hhcldpZHRoID0gU2tTY2FsYXJSb3VuZCh4UmFuZ2UgKiBTa1NjYWxh
clJvdW5kKG1fcGxhdGZvcm1EYXRhLnNpemUoKSkpOworCisgICAgaWYgKG1ldHJpY3MuZkF2Z0No
YXJXaWR0aCkKKyAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBTa1NjYWxhclJvdW5kKG1ldHJpY3Mu
ZkF2Z0NoYXJXaWR0aCk7CisgICAgZWxzZSB7CisgICAgICAgIG1fYXZnQ2hhcldpZHRoID0geEhl
aWdodDsKKworICAgICAgICBHbHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBHbHlwaFBhZ2VUcmVl
Tm9kZTo6Z2V0Um9vdENoaWxkKHRoaXMsIDApLT5wYWdlKCk7CisKKyAgICAgICAgaWYgKGdseXBo
UGFnZVplcm8pIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBVQ2hhcjMyIHhDaGFyID0gJ3gn
OworICAgICAgICAgICAgY29uc3QgR2x5cGggeEdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKHhDaGFyKS5nbHlwaDsKKworICAgICAgICAgICAgaWYgKHhHbHlwaCkK
KyAgICAgICAgICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHdpZHRoRm9yR2x5cGgoeEdseXBoKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFy
V2lkdGhJbml0KCkKK3sKKyAgICAvLyBjaGFyd2lkdGhzIGFyZSBzZXQgaW4gcGxhdGZvcm1Jbml0
LgorfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQoreworfQorCitQ
YXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAoreworICAgIGNvbnN0IGZsb2F0IHNjYWxlZFNpemUgPSBscm91bmRmKGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHNjYWxlRmFjdG9yKTsKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURh
dGEsIHNjYWxlZFNpemUpLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKK30KKworU2ltcGxlRm9u
dERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRl
KGlzQ3VzdG9tRm9udCgpKTsKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMp
CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250
RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZyYWN0aW9uKTsKKworICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpOworfQorCitTaW1wbGVGb250RGF0YSog
U2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEp
CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXND
dXN0b21Gb250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykK
KyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRnJhY3Rpb24pOworCisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7Cit9CisKK2Jvb2wgU2lt
cGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCkgY29uc3QKK3sKKyAgICBTa1BhaW50IHBhaW50OworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtYXhCdWZmZXJDb3VudCA9IDY0OworICAgIHVpbnQxNl90IGdseXBoc1ttYXhC
dWZmZXJDb3VudF07CisKKyAgICBtX3BsYXRmb3JtRGF0YS5zZXR1cFBhaW50KCZwYWludCk7Cisg
ICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2RpbmcpOwor
CisgICAgd2hpbGUgKGxlbmd0aCA+IDApIHsKKyAgICAgICAgaW50IG4gPSBTa01pbjMyKGxlbmd0
aCwgU0tfQVJSQVlfQ09VTlQoZ2x5cGhzKSk7CisKKyAgICAgICAgLy8gdGV4dFRvR2x5cGhzIHRh
a2VzIGEgYnl0ZSBjb3VudCBzbyB3ZSBkb3VibGUgdGhlIGNoYXJhY3RlciBjb3VudC4KKyAgICAg
ICAgaW50IGNvdW50ID0gcGFpbnQudGV4dFRvR2x5cGhzKGNoYXJhY3RlcnMsIG4gKiAyLCBnbHlw
aHMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAg
ICAgIGlmICghZ2x5cGhzW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gbWlz
c2luZyBnbHlwaAorICAgICAgICB9CisKKyAgICAgICAgY2hhcmFjdGVycyArPSBuOworICAgICAg
ICBsZW5ndGggLT0gbjsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1w
bGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2gg
PSBwbGF0Zm9ybURhdGEoKS5pc0ZpeGVkUGl0Y2goKTsKK30KKworRmxvYXRSZWN0IFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAoreworICAgIHJldHVy
biBGbG9hdFJlY3QoKTsKK30KKyAgICAKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdp
ZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsYXRmb3JtRGF0
YS5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU2tBU1NFUlQoc2l6ZW9mKGdseXBo
KSA9PSAyKTsgLy8gY29tcGlsZS10aW1lIGFzc2VydAorCisgICAgU2tQYWludCBwYWludDsKKwor
ICAgIG1fcGxhdGZvcm1EYXRhLnNldHVwUGFpbnQoJnBhaW50KTsKKworICAgIHBhaW50LnNldFRl
eHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOworICAgIFNrU2NhbGFy
IHdpZHRoID0gcGFpbnQubWVhc3VyZVRleHQoJmdseXBoLCAyKTsKKworICAgIC8vIFRob3VnaCBX
ZWJLaXQgc3VwcG9ydHMgbm9uLWludGVncmFsIGFkdmFuY2VzLCBTa2lhIG9ubHkgc3VwcG9ydHMg
dGhlbQorICAgIC8vIGZvciAic3VicGl4ZWwiIChkaXN0aW5jdCBmcm9tIExDRCBzdWJwaXhlbCBh
bnRpYWxpYXNpbmcpIHRleHQsIHdoaWNoCisgICAgLy8gd2UgZG9uJ3QgdXNlLgorICAgIHJldHVy
biByb3VuZChTa1NjYWxhclRvRmxvYXQod2lkdGgpKTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0
YTo6dXBkYXRlR2x5cGhXaXRoVmFyaWF0aW9uU2VsZWN0b3IoVUNoYXIzMiBjaGFyYWN0ZXIsIFVD
aGFyMzIgc2VsZWN0b3IsIEdseXBoJiBnbHlwaCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lhLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43Yzc1MjE3NzMwMGM5ZjQ3ZTg1NzVjNmMwODJmMTM4YWE4NjVlNjVkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVT
a2lhLmNwcApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNp
bmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKwor
I2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCisjaW5jbHVkZSAi
U2tVdGlscy5oIgorCisjaW5jbHVkZSA8dW5pY29kZS9sb2NpZC5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9u
dENhY2hlOjpwbGF0Zm9ybUluaXQoKQoreworfQorCitjb25zdCBTaW1wbGVGb250RGF0YSogRm9u
dENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoKQoreworICAgIGljdTo6TG9jYWxlIGxv
Y2FsZSA9IGljdTo6TG9jYWxlOjpnZXREZWZhdWx0KCk7CisgICAgUGxhdGZvcm1TdXBwb3J0OjpG
b250RmFtaWx5IGZhbWlseTsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OmdldEZvbnRGYW1pbHlGb3JD
aGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCwgbG9jYWxlLmdldExhbmd1YWdlKCksICZmYW1p
bHkpOworICAgIGlmIChmYW1pbHkubmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgQXRvbWljU3RyaW5nIGF0b21pY0ZhbWlseShmYW1pbHkubmFtZSk7CisgICAgLy8gQ2hh
bmdlcyB3ZWlnaHQgYW5kL29yIGl0YWxpYyBvZiBnaXZlbiBGb250RGVzY3JpcHRpb24gZGVwZW5k
cyBvbgorICAgIC8vIHRoZSByZXN1bHQgb2YgZm9udGNvbmZpZyBzbyB0aGF0IGtlZXBpbmcgdGhl
IGNvcnJlY3QgZm9udCBtYXBwaW5nCisgICAgLy8gb2YgdGhlIGdpdmVuIGNoYXJhY3RlcnMuIFNl
ZSBodHRwOi8vY3JidWcuY29tLzMyMTA5IGZvciBkZXRhaWxzLgorICAgIGJvb2wgc2hvdWxkU2V0
RmFrZUJvbGQgPSBmYWxzZTsKKyAgICBib29sIHNob3VsZFNldEZha2VJdGFsaWMgPSBmYWxzZTsK
KyAgICBGb250RGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZm9udC5mb250RGVzY3JpcHRpb24oKSk7
CisgICAgaWYgKGZhbWlseS5pc0JvbGQgJiYgZGVzY3JpcHRpb24ud2VpZ2h0KCkgPCBGb250V2Vp
Z2h0Qm9sZCkKKyAgICAgICAgZGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHRCb2xkKTsK
KyAgICBpZiAoIWZhbWlseS5pc0JvbGQgJiYgZGVzY3JpcHRpb24ud2VpZ2h0KCkgPj0gRm9udFdl
aWdodEJvbGQpIHsKKyAgICAgICAgc2hvdWxkU2V0RmFrZUJvbGQgPSB0cnVlOworICAgICAgICBk
ZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7CisgICAgfQorICAgIGlmIChm
YW1pbHkuaXNJdGFsaWMgJiYgZGVzY3JpcHRpb24uaXRhbGljKCkgPT0gRm9udEl0YWxpY09mZikK
KyAgICAgICAgZGVzY3JpcHRpb24uc2V0SXRhbGljKEZvbnRJdGFsaWNPbik7CisgICAgaWYgKCFm
YW1pbHkuaXNJdGFsaWMgJiYgZGVzY3JpcHRpb24uaXRhbGljKCkgPT0gRm9udEl0YWxpY09uKSB7
CisgICAgICAgIHNob3VsZFNldEZha2VJdGFsaWMgPSB0cnVlOworICAgICAgICBkZXNjcmlwdGlv
bi5zZXRJdGFsaWMoRm9udEl0YWxpY09mZik7CisgICAgfQorCisgICAgRm9udFBsYXRmb3JtRGF0
YSBwbGF0Zm9ybURhdGEgPSBGb250UGxhdGZvcm1EYXRhKCpnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKGRlc2NyaXB0aW9uLCBhdG9taWNGYW1pbHksIERvTm90UmV0YWluKSk7CisgICAgcGxhdGZv
cm1EYXRhLnNldEZha2VCb2xkKHNob3VsZFNldEZha2VCb2xkKTsKKyAgICBwbGF0Zm9ybURhdGEu
c2V0RmFrZUl0YWxpYyhzaG91bGRTZXRGYWtlSXRhbGljKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVk
Rm9udERhdGEoJnBsYXRmb3JtRGF0YSwgRG9Ob3RSZXRhaW4pOworfQorCitTaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250
KQoreworICAgIHJldHVybiAwOworfQorCitTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRM
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIHNhbnNTdHIsICgiU2FucyIpKTsKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc2VyaWZTdHIsICgiU2VyaWYiKSk7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIG1vbm9zcGFjZVN0ciwgKCJNb25v
c3BhY2UiKSk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhID0gMDsK
KyAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSkgeworICAgIGNhc2UgRm9u
dERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKKyAgICAgICAgZm9udFBsYXRmb3JtRGF0YSA9IGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIHNlcmlmU3RyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKKyAgICAg
ICAgZm9udFBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRp
b24sIG1vbm9zcGFjZVN0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpTYW5zU2VyaWZGYW1pbHk6CisgICAgZGVmYXVsdDoKKyAgICAgICAgZm9udFBsYXRmb3Jt
RGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIHNhbnNTdHIpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlQoZm9udFBsYXRmb3JtRGF0YSk7Cisg
ICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGZvbnRQbGF0Zm9ybURhdGEsIHNob3VsZFJldGFp
bik7Cit9CisKK3ZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVj
dG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5KQoreworICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAwOworICAgIENTdHJpbmcgczsKKworICAg
IC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtpdC1tb25v
c3BhY2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRvCisgICAgLy8gdGhlIGZhbGxiYWNrIG5hbWUg
KGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KKyAgICBpZiAo
IWZhbWlseS5sZW5ndGgoKSB8fCBmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkgeworICAg
ICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6
R2VuZXJpY0ZhbWlseVR5cGUgbVR5cGU7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBtTmFtZTsK
KyAgICAgICAgfSBmb250RGVzY3JpcHRpb25zW10gPSB7CisgICAgICAgICAgICB7IEZvbnREZXNj
cmlwdGlvbjo6U2VyaWZGYW1pbHksICJzZXJpZiIgfSwKKyAgICAgICAgICAgIHsgRm9udERlc2Ny
aXB0aW9uOjpTYW5zU2VyaWZGYW1pbHksICJzYW5zLXNlcmlmIiB9LAorICAgICAgICAgICAgeyBG
b250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSwgIm1vbm9zcGFjZSIgfSwKKyAgICAgICAg
ICAgIHsgRm9udERlc2NyaXB0aW9uOjpDdXJzaXZlRmFtaWx5LCAiY3Vyc2l2ZSIgfSwKKyAgICAg
ICAgICAgIHsgRm9udERlc2NyaXB0aW9uOjpGYW50YXN5RmFtaWx5LCAiZmFudGFzeSIgfQorICAg
ICAgICB9OworCisgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6R2VuZXJpY0ZhbWlseVR5cGUgdHlw
ZSA9IGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBTS19BUlJBWV9DT1VOVChmb250RGVzY3JpcHRpb25zKTsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAodHlwZSA9PSBmb250RGVzY3JpcHRpb25zW2ldLm1UeXBlKSB7CisgICAg
ICAgICAgICAgICAgbmFtZSA9IGZvbnREZXNjcmlwdGlvbnNbaV0ubU5hbWU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFuYW1l
KQorICAgICAgICAgICAgbmFtZSA9ICIiOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGNvbnZl
cnQgdGhlIG5hbWUgdG8gdXRmOAorICAgICAgICBzID0gZmFtaWx5LnN0cmluZygpLnV0ZjgoKTsK
KyAgICAgICAgbmFtZSA9IHMuZGF0YSgpOworICAgIH0KKworICAgIGludCBzdHlsZSA9IFNrVHlw
ZWZhY2U6OmtOb3JtYWw7CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250
V2VpZ2h0Qm9sZCkKKyAgICAgICAgc3R5bGUgfD0gU2tUeXBlZmFjZTo6a0JvbGQ7CisgICAgaWYg
KGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSkKKyAgICAgICAgc3R5bGUgfD0gU2tUeXBlZmFjZTo6
a0l0YWxpYzsKKworICAgIFNrVHlwZWZhY2UqIHRmID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbU5h
bWUobmFtZSwgc3RhdGljX2Nhc3Q8U2tUeXBlZmFjZTo6U3R5bGU+KHN0eWxlKSk7CisgICAgaWYg
KCF0ZikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQg
PQorICAgICAgICBuZXcgRm9udFBsYXRmb3JtRGF0YSh0ZiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkU2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUg
JiBTa1R5cGVmYWNlOjprQm9sZCkgJiYgIXRmLT5pc0JvbGQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0eWxlICYgU2tUeXBlZmFjZTo6a0l0YWxpYykgJiYgIXRmLT5pc0l0YWxp
YygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50
YXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnRl
eHRPcmllbnRhdGlvbigpKTsKKyAgICB0Zi0+dW5yZWYoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRyZWVOb2RlU2tpYS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRyZWVOb2RlU2tpYS5jcHAK
aW5kZXggNDA2MWY3NGRiMTQ2NTM0NWMxMDg4YWU2YWVlMGNjYTcyZjY5MDJhYS4uOWE0ZmVmNmQw
ZTk4Mzg5MjA2MGU3NzIyMzYyM2ViOGE1N2UyZjI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVT
a2lhLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgi
CiAKICNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiSGFyZmJ1enpTa2lhLmgiCisjaW5jbHVk
ZSAiSGFyZkJ1enpTa2lhLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAogI2luY2x1
ZGUgIlNrVGVtcGxhdGVzLmgiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>