<?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>108077</bug_id>
          
          <creation_ts>2013-01-28 06:02:48 -0800</creation_ts>
          <short_desc>[HarfBuzz] Remove the HarfBuzz-old code</short_desc>
          <delta_ts>2013-01-30 02:47:37 -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>
          
          <blocked>108170</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dominik Röttsches (drott)">d-r</reporter>
          <assigned_to name="Dominik Röttsches (drott)">d-r</assigned_to>
          <cc>bashi</cc>
    
    <cc>efidler</cc>
    
    <cc>eric</cc>
    
    <cc>fujisawa.jun</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>junov</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>senorblanco</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>817714</commentid>
    <comment_count>0</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-28 06:02:48 -0800</bug_when>
    <thetext>As discussed in https://bugs.webkit.org/show_bug.cgi?id=37984#c26 it seems that no port needs the harfbuzz-old code any more.
If there are no objections, let&apos;s remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817759</commentid>
    <comment_count>1</comment_count>
      <attachid>184984</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-28 07:57:08 -0800</bug_when>
    <thetext>Created attachment 184984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818182</commentid>
    <comment_count>2</comment_count>
      <attachid>184984</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-28 15:22:24 -0800</bug_when>
    <thetext>Comment on attachment 184984
Patch

Eli, is that okay for the Blackberry port?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818687</commentid>
    <comment_count>3</comment_count>
      <attachid>184984</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-29 01:04:55 -0800</bug_when>
    <thetext>Comment on attachment 184984
Patch

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

Thanks for cleaning WebCore!

Please give some time for responses on webkit-dev before landing, EWS do not cover everyone unfortunately.

&gt; Source/WebCore/ChangeLog:17
&gt; +        (FontPlatformData): Removing USE(HARFBUZZ_NG) ifdef&apos;s.

&quot;ifdef&apos;s&quot;?
I have the feeling &quot;ifdefs&quot; is a more common notation(?).

Ditto * 4.

&gt; Source/WebCore/platform/graphics/freetype/FontPlatformData.h:68
&gt;      HarfBuzzNGFace* harfbuzzFace() const;

Shouldn&apos;t this be harfBuzzFace()?

&gt; Source/WebCore/platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp:-43
&gt; -#if USE(HARFBUZZ_NG)
&gt;  #include &quot;HarfBuzzNGFace.h&quot;
&gt; -#else

You keep that header unsorted?

&gt; Source/WebCore/platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h:51
&gt;  class FontDescription;
&gt;  
&gt; -#if USE(HARFBUZZ_NG)
&gt;  class HarfBuzzNGFace;

Move the declarations together.

&gt; Source/WebCore/platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h:111
&gt;      HarfBuzzNGFace* harfbuzzFace() const;

Shouldn&apos;t this be harfBuzzFace()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818722</commentid>
    <comment_count>4</comment_count>
      <attachid>185199</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-29 01:39:38 -0800</bug_when>
    <thetext>Created attachment 185199
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818726</commentid>
    <comment_count>5</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-29 01:47:51 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 184984 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184984&amp;action=review

Thanks for the review, Benjamin.

&gt; &gt; Source/WebCore/ChangeLog:17
&gt; &gt; +        (FontPlatformData): Removing USE(HARFBUZZ_NG) ifdef&apos;s.
&gt; 
&gt; &quot;ifdef&apos;s&quot;?
&gt; I have the feeling &quot;ifdefs&quot; is a more common notation(?).
&gt; 
&gt; Ditto * 4.

Changed to ifdefs.

&gt; &gt; Source/WebCore/platform/graphics/freetype/FontPlatformData.h:68
&gt; &gt;      HarfBuzzNGFace* harfbuzzFace() const;
&gt; 
&gt; Shouldn&apos;t this be harfBuzzFace()?

It should - but when looking at this, I found a couple of other naming inconsistencies so that I would like to address those in a separate patch once we know there are no objections to in fact removing the code. I filed bug 108170 for the renames.

&gt; &gt; Source/WebCore/platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp:-43
&gt; &gt; -#if USE(HARFBUZZ_NG)
&gt; &gt;  #include &quot;HarfBuzzNGFace.h&quot;
&gt; &gt; -#else
&gt; 
&gt; You keep that header unsorted?

Merged and sorted with the other ones.

&gt; &gt; Source/WebCore/platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h:51
&gt; &gt;  class FontDescription;
&gt; &gt;  
&gt; &gt; -#if USE(HARFBUZZ_NG)
&gt; &gt;  class HarfBuzzNGFace;
&gt; 
&gt; Move the declarations together.

Yes, empty line removed.

&gt; &gt; Source/WebCore/platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h:111
&gt; &gt;      HarfBuzzNGFace* harfbuzzFace() const;
&gt; 
&gt; Shouldn&apos;t this be harfBuzzFace()?

See above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818954</commentid>
    <comment_count>6</comment_count>
    <who name="Eli Fidler">efidler</who>
    <bug_when>2013-01-29 08:06:00 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 184984 [details])
&gt; Eli, is that okay for the Blackberry port?

Yes, it&apos;s fine with us. We&apos;ve moved to HarfbuzzNG. We can remove the CMakeLists stuff for BlackBerry/Harfbuzz (not-NG) later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819159</commentid>
    <comment_count>7</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2013-01-29 12:01:42 -0800</bug_when>
    <thetext>This looks great, thanks for doing this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819163</commentid>
    <comment_count>8</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2013-01-29 12:03:32 -0800</bug_when>
    <thetext>In a follow up patch, we should move the files out of the ng subdirectory and remove NG from the filenames.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819925</commentid>
    <comment_count>9</comment_count>
      <attachid>185426</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-30 01:15:13 -0800</bug_when>
    <thetext>Created attachment 185426
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819929</commentid>
    <comment_count>10</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-30 01:16:45 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=185426) [details]
&gt; Patch

Rebased, one more &quot;ifdef&apos;s&quot; replaced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819984</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-30 02:20:59 -0800</bug_when>
    <thetext>And a great choir of angles descended from the heavens and sang forth praises throughout the land!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819985</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-30 02:21:17 -0800</bug_when>
    <thetext>(Thank you.) :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820008</commentid>
    <comment_count>13</comment_count>
      <attachid>185426</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-30 02:47:31 -0800</bug_when>
    <thetext>Comment on attachment 185426
Patch

Clearing flags on attachment: 185426

Committed r141241: &lt;http://trac.webkit.org/changeset/141241&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820010</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-30 02:47:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184984</attachid>
            <date>2013-01-28 07:57:08 -0800</date>
            <delta_ts>2013-01-29 01:39:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108077-20130128175353.patch</filename>
            <type>text/plain</type>
            <size>59504</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZmNjhhYmY1NTU5ZjQy
MTYyODc4OTZkN2EzNzI2NWNhYTNkOTg0NS4uNzYzN2ZiODhhMDdmY2FlMWUxYzg0ZWE3MTI5MThk
OGZkNzk1OGJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEzLTAxLTI4ICBEb21p
bmlrIFLDtnR0c2NoZXMgIDxkb21pbmlrLnJvdHRzY2hlc0BpbnRlbC5jb20+CisKKyAgICAgICAg
W0hhcmZCdXp6XSBSZW1vdmUgdGhlIEhhcmZCdXp6LW9sZCBjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgwNzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmluZyB1bnVzZWQgb2xkIHZhcmlh
bnQgb2YgdGhlIEhhcmZCdXp6IGNvZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFu
Z2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBSZW5hbWUg
V1RGX1VTRV9IQVJGQlVaWl9ORyB0byBXVEZfVVNFX0hBUkZCVVpaCisgICAgICAgICogV2ViQ29y
ZS5neXBpOiBSZW1vdmluZyBDb21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6eiogYW5kIEhhcmZC
dXp6U2tpYSogZmlsZXMsIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmg6CisgICAgICAgIChTaW1wbGVGb250RGF0YSk6IFVTRShIQVJGQlVaWl9ORykgcmVuYW1l
ZCB0byBVU0UoSEFSRkJVWlopLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGEpOiBSZW1vdmlu
ZyBVU0UoSEFSRkJVWlpfTkcpIGlmZGVmJ3MuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDogUmVtb3ZpbmcgVVNFKEhBUkZC
VVpaX05HKSBpZmRlZidzLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZy
ZWVUeXBlLmNwcDogVVNFKEhBUkZCVVpaX05HKSByZW5hbWVkIHRvIFVTRShIQVJGQlVaWikuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9D
b21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1
enouY3BwOiBSZW1vdmluZyBVU0UoSEFSRkJVWlpfTkcpIGlmZGVmJ3MuCisgICAgICAgIChXZWJD
b3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Zmxv
YXRXaWR0aEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZv
clBvc2l0aW9uRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouY3BwOiBSZW1vdmluZyBVU0UoSEFSRkJVWlpf
TkcpIGlmZGVmJ3MuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6
ekZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9y
bURhdGFIYXJmQnV6ei5oOiBSZW1vdmluZyBVU0UoSEFSRkJVWlpfTkcpIGlmZGVmJ3MuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3Bw
OiBVU0UoSEFSRkJVWlpfTkcpIHJlbmFtZWQgdG8gVVNFKEhBUkZCVVpaKS4KKyAgICAgICAgKFdl
YkNvcmUpOgorCiAyMDEzLTAxLTI4ICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtSZWdyZXNzaW9uXSBTZWFyY2ggYWxsIHNv
dXJjZXMgc2hvdWxkIG5vdCBzZWFyY2ggYWNyb3NzIHNlcnZpY2UgcHJvamVjdHMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDU3MmRlYmI5YjFhMDdkYmIwNDQ0MDY4NmRlYTY3YTY3Yzgx
ZWQ3ZDEuLjc4ODk5YjVkOGVmZmJlYjIwMTYxMDMyY2MwNGNlMzcwZTRhNGU1MmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDEtMjggIERvbWluaWsg
UsO2dHRzY2hlcyAgPGRvbWluaWsucm90dHNjaGVzQGludGVsLmNvbT4KKworICAgICAgICBbSGFy
ZkJ1enpdIFJlbW92ZSB0aGUgSGFyZkJ1enotb2xkIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODA3NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBXVEZfVVNFX0hBUkZCVVpaX05HIHRv
IFdURl9VU0VfSEFSRkJVWlogc2luY2UgdGhlcmUKKyAgICAgICAgd29uJ3QgYmUgYSBkaXN0aW5j
dGlvbiBiZXR3ZWVuIG5nIGFuZCBub24tbmcgSGFyZkJ1enogYWZ0ZXIKKyAgICAgICAgcmVtb3Zp
bmcgdGhlIG9sZCBjb2RlLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMy0wMS0y
OCAgTWFyamEgSMO2bHR0w6QgIDxtYXJqYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGFu
IEFQSSBmb3IgcmV0cmlldmluZyBuYXRpdmUgbWVtb3J5IGluZm9ybWF0aW9uIHdpdGhvdXQgZ29p
bmcgdGhyb3VnaCB0aGUgcmVtb3RlIGluc3BlY3RpbmcgcHJvdG9jb2wKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KaW5kZXggOTVhMjNlZDU0YmM1NDM4OWVjZTc5OTJlZGNhMjVkMTQxZjFlMDI1OC4uN2E3Mjlm
NWQ4ZTUzYmNhNjI3ODU3M2QxYTIzN2RmYjc5ODUwNzk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
QEAgLTYsNyArNiw3IEBAIFdFQkNPUkVfQ1NTX1ZBTFVFX0tFWVdPUkRTIDo9ICQoV2ViQ29yZSkv
Y3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4KIAogd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLURXVEZf
VVNFX0ZSRUVUWVBFPTEgXAotCS1EV1RGX1VTRV9IQVJGQlVaWl9ORz0xIFwKKwktRFdURl9VU0Vf
SEFSRkJVWlo9MSBcCiAJLURXVEZfVVNFX1dFQlA9MSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBkNTRlOGRhMWE1NmI4ZjQ2MDY2ZWVjYTM2
ZTcxZjllNWY3ZTgwMzQxLi5lNDMzOGNlOGMxMGFjOGZjNTMwNWU3ZTBkOTkwMGZiNWM2NDhlMzY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC00MDQxLDEzICs0MDQxLDkgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmNwcCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFy
ZkJ1enouaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhh
cmZCdXp6LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9u
dFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2Uu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpO
R0ZhY2VDb3JlVGV4dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmgKaW5kZXggNDFmODAxNWQxM2UyZTU0ZTY5ODYwMjEwMzMyNjQ1
YjlhODJlMzAyOS4uOTdlYTVhMjAxOTBiZGY4YzQxMTY2NDQ1NmZkZjg2MWRhYjViZTk0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5o
CkBAIC0xOTUsNyArMTk1LDcgQEAgcHVibGljOgogICAgIENGRGljdGlvbmFyeVJlZiBnZXRDRlN0
cmluZ0F0dHJpYnV0ZXMoVHlwZXNldHRpbmdGZWF0dXJlcywgRm9udE9yaWVudGF0aW9uKSBjb25z
dDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYm
IE9TKERBUldJTikpIHx8IChQTEFURk9STShXWCkgJiYgT1MoREFSV0lOKSkgfHwgVVNFKEhBUkZC
VVpaX05HKQorI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhE
QVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJTikpIHx8IFVTRShIQVJGQlVaWikK
ICAgICBib29sIGNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFy
Kiwgc2l6ZV90KSBjb25zdDsKICNlbmRpZgogCkBAIC0zMTcsNyArMzE3LDcgQEAgcHJpdmF0ZToK
ICAgICBtdXRhYmxlIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
ID4gbV9DRlN0cmluZ0F0dHJpYnV0ZXM7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykgfHwg
KFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9T
KERBUldJTikpIHx8IFVTRShIQVJGQlVaWl9ORykKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFU
Rk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBMQVRGT1JNKFdYKSAmJiBPUyhEQVJX
SU4pKSB8fCBVU0UoSEFSRkJVWlopCiAgICAgbXV0YWJsZSBPd25QdHI8SGFzaE1hcDxTdHJpbmcs
IGJvb2w+ID4gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQ7CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDZhNjJjNmM3Y2M0NWM4OWNiZDViZTIxZWJlMDFm
NDQxMTk5NTU4NzQuLjhmZTcwNjEyNDg5N2YzMGQ3N2I2ZjliNGRmZDYzOGY2MjY0ZWZkNGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQ
bGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTI5LDkgKzI5LDcgQEAKICNpbmNsdWRlICJGb250
RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJGb250T3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJH
bHlwaEJ1ZmZlci5oIgotI2lmIFVTRShIQVJGQlVaWl9ORykKICNpbmNsdWRlICJIYXJmQnV6ek5H
RmFjZS5oIgotI2VuZGlmCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CkBAIC02Nyw5ICs2NSw3
IEBAIHB1YmxpYzoKIAogICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CiAKLSNpZiBVU0UoSEFSRkJV
WlpfTkcpCiAgICAgSGFyZkJ1enpOR0ZhY2UqIGhhcmZidXp6RmFjZSgpIGNvbnN0OwotI2VuZGlm
CiAKICAgICBib29sIGlzRml4ZWRQaXRjaCgpOwogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KQEAgLTEwNiw5ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX3N5
bnRoZXRpY09ibGlxdWU7CiAgICAgYm9vbCBtX2ZpeGVkV2lkdGg7CiAgICAgY2Fpcm9fc2NhbGVk
X2ZvbnRfdCogbV9zY2FsZWRGb250OwotI2lmIFVTRShIQVJGQlVaWl9ORykKICAgICBtdXRhYmxl
IFJlZlB0cjxIYXJmQnV6ek5HRmFjZT4gbV9oYXJmYnV6ekZhY2U7Ci0jZW5kaWYKIAogcHJpdmF0
ZToKICAgICB2b2lkIGluaXRpYWxpemVXaXRoRm9udEZhY2UoY2Fpcm9fZm9udF9mYWNlX3QqLCBj
b25zdCBGb250RGVzY3JpcHRpb24mID0gRm9udERlc2NyaXB0aW9uKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0
YUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKaW5kZXggMzdmNWQzNTRjNDBjNDE4MTQyZGNi
YmMxZWI5Mjc0MTU3NDYwMzBjMS4uODE2NTA2NTY5MmRjYzYyNWQ5ZjUwZGUwNWYyODkyYzU4NTVm
ZmU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCkBAIC0x
ODYsOSArMTg2LDcgQEAgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0
b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQogICAgICAgICBjYWlyb19zY2FsZWRf
Zm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7CiAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2Nh
bGVkX2ZvbnRfcmVmZXJlbmNlKG90aGVyLm1fc2NhbGVkRm9udCk7CiAKLSNpZiBVU0UoSEFSRkJV
WlpfTkcpCiAgICAgbV9oYXJmYnV6ekZhY2UgPSBvdGhlci5tX2hhcmZidXp6RmFjZTsKLSNlbmRp
ZgogCiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTk2LDE3ICsxOTQsMTMgQEAgRm9udFBsYXRm
b3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIG90aGVyKQogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBvdGhlcikKICAgICA6IG1fZmFsbGJhY2tzKDApCiAgICAgLCBtX3NjYWxl
ZEZvbnQoMCkKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiAgICAgLCBtX2hhcmZidXp6RmFjZShvdGhl
ci5tX2hhcmZidXp6RmFjZSkKLSNlbmRpZgogewogICAgICp0aGlzID0gb3RoZXI7CiB9CiAKIEZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
b3RoZXIsIGZsb2F0IHNpemUpCi0jaWYgVVNFKEhBUkZCVVpaX05HKQogICAgIDogbV9oYXJmYnV6
ekZhY2Uob3RoZXIubV9oYXJmYnV6ekZhY2UpCi0jZW5kaWYKIHsKICAgICAqdGhpcyA9IG90aGVy
OwogCkBAIC0yMjcsNyArMjIxLDYgQEAgRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURh
dGEoKQogICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7CiB9
CiAKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiBIYXJmQnV6ek5HRmFjZSogRm9udFBsYXRmb3JtRGF0
YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKIHsKICAgICBpZiAoIW1faGFyZmJ1enpGYWNlKQpAQCAt
MjM1LDcgKzIyOCw2IEBAIEhhcmZCdXp6TkdGYWNlKiBGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6
ekZhY2UoKSBjb25zdAogCiAgICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdldCgpOwogfQotI2Vu
ZGlmCiAKIGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnRE
YXRhRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKaW5kZXggZTgwMjBmYTBkNTJkODQ5NTFhNmM2
MTkxYzM3ODBmYWE5MjFkMDRjMC4uNTk0MmZiMmQwMzBkZDQyZmQxYTQ1M2E4OTc4ZTQ1ZmVmOGQz
MDQyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKQEAgLTE1Niw3
ICsxNTYsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiB3OyAgICAKIH0KIAotI2lmIFVTRShIQVJGQlVa
Wl9ORykKKyNpZiBVU0UoSEFSRkJVWlopCiBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCkgY29uc3QKIHsKICAgICBpZiAoIW1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VT
dXBwb3J0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enou
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTRkODcyMGM0MzdlNjBjMDE5YzRi
NjZjNmU5OTM1NmZjZDE3ZjFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBs
ZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxMCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
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
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlckhh
cmZCdXp6LmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250LmgiCi0j
aW5jbHVkZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVGV4
dFJ1bi5oIgotCi0jaWYgT1MoQU5EUk9JRCkKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNs
dWRlICJTa1R5cGVmYWNlX2FuZHJvaWQuaCIKLSNlbmRpZgotCi1leHRlcm4gIkMiIHsKLSNpbmNs
dWRlICJoYXJmYnV6ei11bmljb2RlLmgiCi19Ci0KLSNpbmNsdWRlIDx1bmljb2RlL25vcm1senIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBIYXJmYnV6eiB1c2VzIDI2LjYgZml4ZWQg
cG9pbnQgdmFsdWVzIGZvciBwaXhlbCBvZmZzZXRzLiBIb3dldmVyLCB3ZSBkb24ndAotLy8gaGFu
ZGxlIHN1YnBpeGVsIHBvc2l0aW9uaW5nIHNvIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0cnVu
Y2F0ZSBIYXJmYnV6egotLy8gdmFsdWVzIHRvIGEgbnVtYmVyIG9mIHBpeGVscy4KLXN0YXRpYyBp
bnQgdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKEhCX0ZpeGVkIHZhbHVlKQotewotICAgIHJl
dHVybiB2YWx1ZSA+PiA2OwotfQotCi1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0
Q29udHJvbGxlcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCBzdGFy
dGluZ1gsIGludCBzdGFydGluZ1kpCi0gICAgOiBIYXJmQnV6elNoYXBlckJhc2UoZm9udCwgcnVu
KQotewotICAgIE5vcm1hbGl6ZU1vZGUgbW9kZSA9IG1fcnVuLnJ0bCgpID8gTm9ybWFsaXplTWly
cm9yQ2hhcnMgOiBEb05vdE5vcm1hbGl6ZU1pcnJvckNoYXJzOwotICAgIHNldE5vcm1hbGl6ZWRC
dWZmZXIobW9kZSk7Ci0KLSAgICBtZW1zZXQoJm1faXRlbSwgMCwgc2l6ZW9mKG1faXRlbSkpOwot
ICAgIC8vIFdlIGNhbm5vdCBrbm93LCBhaGVhZCBvZiB0aW1lLCBob3cgbWFueSBnbHlwaHMgYSBn
aXZlbiBzY3JpcHQgcnVuCi0gICAgLy8gd2lsbCBwcm9kdWNlLiBXZSB0YWtlIGEgZ3Vlc3MgdGhh
dCBzY3JpcHQgcnVucyB3aWxsIG5vdCBwcm9kdWNlIG1vcmUKLSAgICAvLyB0aGFuIHR3aWNlIGFz
IG1hbnkgZ2x5cGhzIGFzIHRoZXJlIGFyZSBjb2RlIHBvaW50cyBwbHVzIGEgYml0IG9mCi0gICAg
Ly8gcGFkZGluZyBhbmQgZmFsbGJhY2sgaWYgd2UgZmluZCB0aGF0IHdlIGFyZSB3cm9uZy4KLSAg
ICBjcmVhdGVHbHlwaEFycmF5cygobV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoICsgMikgKiAyKTsK
LQotICAgIG1faXRlbS5mYWNlID0gMDsKLSAgICBtX2l0ZW0uZm9udCA9IGFsbG9jSGFyZmJ1enpG
b250KCk7Ci0KLSAgICBtX2l0ZW0uaXRlbS5iaWRpTGV2ZWwgPSBtX3J1bi5ydGwoKTsKLQotICAg
IG1faXRlbS5zdHJpbmcgPSBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCk7Ci0gICAgbV9pdGVtLnN0
cmluZ0xlbmd0aCA9IG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKLQotICAgIHJlc2V0KHN0YXJ0
aW5nWCk7Ci0gICAgbV9zdGFydGluZ1kgPSBzdGFydGluZ1k7Ci0KLSAgICBzZXRQYWRkaW5nKG1f
cnVuLmV4cGFuc2lvbigpKTsKLX0KLQotQ29tcGxleFRleHRDb250cm9sbGVyOjp+Q29tcGxleFRl
eHRDb250cm9sbGVyKCkKLXsKLSAgICBmYXN0RnJlZShtX2l0ZW0uZm9udCk7Ci0gICAgZGVsZXRl
R2x5cGhBcnJheXMoKTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnJlc2V0KGlu
dCBvZmZzZXQpCi17Ci0gICAgbV9pbmRleE9mTmV4dFNjcmlwdFJ1biA9IDA7Ci0gICAgbV9vZmZz
ZXRYID0gb2Zmc2V0OwotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0dXBGb3JS
VEwoKQotewotICAgIGludCBwYWRkaW5nID0gbV9wYWRkaW5nOwotICAgIC8vIEZJWE1FOiB0aGlz
IGNhdXNlcyB1cyB0byBzaGFwZSB0aGUgdGV4dCB0d2ljZSAtLSBvbmNlIHRvIGNvbXB1dGUgdGhl
IHdpZHRoIGFuZCB0aGVuIGFnYWluCi0gICAgLy8gYmVsb3cgd2hlbiBhY3R1YWxseSByZW5kZXJp
bmcuIENoYW5nZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgdG8gbWF0Y2ggcGxhdGZvcm0vbWFjIGFu
ZAotICAgIC8vIHBsYXRmb3JtL2Nocm9taXVtL3dpbiBieSBoYXZpbmcgaXQgc3RvcmUgdGhlIHNo
YXBlZCBydW5zLCBzbyB3ZSBjYW4gcmV1c2UgdGhlIHJlc3VsdHMuCi0gICAgcmVzZXQobV9vZmZz
ZXRYICsgd2lkdGhPZkZ1bGxSdW4oKSk7Ci0gICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHBhZGRp
bmcgYWdhaW4gYmVjYXVzZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgbGF5b3V0IGNvbnN1bWVkIHRo
ZSB2YWx1ZS4KLSAgICAvLyBGaXhpbmcgdGhlIGFib3ZlIHByb2JsZW0gd291bGQgaGVscCBoZXJl
IHRvby4KLSAgICBzZXRQYWRkaW5nKHBhZGRpbmcpOwotfQotCi0vLyBBZHZhbmNlIHRvIHRoZSBu
ZXh0IHNjcmlwdCBydW4sIHJldHVybmluZyBmYWxzZSB3aGVuIHRoZSBlbmQgb2YgdGhlCi0vLyBU
ZXh0UnVuIGhhcyBiZWVuIHJlYWNoZWQuCi1ib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6bmV4
dFNjcmlwdFJ1bigpCi17Ci0gICAgLy8gRW5zdXJlIHdlJ3JlIG5vdCBwb2ludGluZyBhdCB0aGUg
c21hbGwgY2FwcyBidWZmZXIuCi0gICAgbV9pdGVtLnN0cmluZyA9IG1fbm9ybWFsaXplZEJ1ZmZl
ci5nZXQoKTsKLQotICAgIGlmICghaGJfdXRmMTZfc2NyaXB0X3J1bl9uZXh0KDAsICZtX2l0ZW0u
aXRlbSwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgs
ICZtX2luZGV4T2ZOZXh0U2NyaXB0UnVuKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gSXQgaXMgYWN0dWFsbHkgd3JvbmcgdG8gY29uc2lkZXIgc2NyaXB0IHJ1bnMgYXQgYWxsIGlu
IHRoaXMgY29kZS4KLSAgICAvLyBPdGhlciBXZWJLaXQgY29kZSAoZS5nLiBNYWMpIHNlZ21lbnRz
IGNvbXBsZXggdGV4dCBqdXN0IGJ5IGZpbmRpbmcKLSAgICAvLyB0aGUgbG9uZ2VzdCBzcGFuIG9m
IHRleHQgY292ZXJlZCBieSBhIHNpbmdsZSBmb250LgotICAgIC8vIEJ1dCB3ZSBjdXJyZW50bHkg
bmVlZCB0byBjYWxsIGhiX3V0ZjE2X3NjcmlwdF9ydW5fbmV4dCBhbnl3YXkgdG8gZmlsbAotICAg
IC8vIGluIHRoZSBoYXJmYnV6eiBkYXRhIHN0cnVjdHVyZXMgdG8gZS5nLiBwaWNrIHRoZSBjb3Jy
ZWN0IHNjcmlwdCdzIHNoYXBlci4KLSAgICAvLyBTbyB3ZSBhbGxvdyB0aGF0IHRvIHJ1biBmaXJz
dCwgdGhlbiBkbyBhIHNlY29uZCBwYXNzIG92ZXIgdGhlIHJhbmdlIGl0Ci0gICAgLy8gZm91bmQg
YW5kIHRha2UgdGhlIGxhcmdlc3Qgc3VicmVnaW9uIHRoYXQgc3RheXMgd2l0aGluIGEgc2luZ2xl
IGZvbnQuCi0gICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKHN0YXRp
Y19jYXN0PGNvbnN0IFVDaGFyKj4oJm1faXRlbS5zdHJpbmdbbV9pdGVtLml0ZW0ucG9zXSksIDAs
IHN0YXRpY19jYXN0PGludD4obV9pdGVtLml0ZW0ubGVuZ3RoKSwgc3RhdGljX2Nhc3Q8aW50Piht
X2l0ZW0uaXRlbS5sZW5ndGgpKTsKLSAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAgICB1bnNpZ25l
ZCBjbHVzdGVyTGVuZ3RoID0gMDsKLSAgICBpZiAoIWl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVy
LCBjbHVzdGVyTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fY3VycmVudEZv
bnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSku
Zm9udERhdGE7Ci0gICAgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsKLSAgICB3aGls
ZSAoaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKSB7Ci0gICAgICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZv
ckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKLSAgICAgICAgaWYgKG5leHRG
b250RGF0YSAhPSBtX2N1cnJlbnRGb250RGF0YSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOwotICAgIH0KLSAgICBtX2l0ZW0uaXRl
bS5sZW5ndGggPSBpdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7Ci0gICAgbV9pbmRleE9mTmV4
dFNjcmlwdFJ1biA9IG1faXRlbS5pdGVtLnBvcyArIGl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIo
KTsKLQotICAgIHNldHVwRm9udEZvclNjcmlwdFJ1bigpOwotICAgIHNoYXBlR2x5cGhzKCk7Ci0g
ICAgc2V0R2x5cGhQb3NpdGlvbnMocnRsKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWZs
b2F0IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6d2lkdGhPZkZ1bGxSdW4oKQotewotICAgIGZsb2F0
IHdpZHRoU3VtID0gMDsKLSAgICB3aGlsZSAobmV4dFNjcmlwdFJ1bigpKQotICAgICAgICB3aWR0
aFN1bSArPSB3aWR0aCgpOwotCi0gICAgcmV0dXJuIHdpZHRoU3VtOwotfQotCi1zdGF0aWMgdm9p
ZCBzZXR1cEZvbnRGZWF0dXJlcyhjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBzZXR0aW5ncywg
SEJfRmFjZVJlY18qIGhiRmFjZSkKLXsKLSAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaGJGYWNlLT5nc3ViKQotICAgICAgICBIQl9HU1VCX0NsZWFyX0ZlYXR1
cmVzKGhiRmFjZS0+Z3N1Yik7Ci0gICAgaWYgKGhiRmFjZS0+Z3BvcykKLSAgICAgICAgSEJfR1BP
U19DbGVhcl9GZWF0dXJlcyhoYkZhY2UtPmdwb3MpOwotCi0gICAgSEJfVVNob3J0IHNjcmlwdElu
ZGV4ID0gMDsKLSAgICBIQl9HU1VCX1NlbGVjdF9TY3JpcHQoaGJGYWNlLT5nc3ViLCBIQl9NQUtF
X1RBRygnRCcsICdGJywgJ0wnLCAnVCcpLCAmc2NyaXB0SW5kZXgpOwotICAgIHNpemVfdCBudW1G
ZWF0dXJlcyA9IHNldHRpbmdzLT5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1GZWF0dXJlczsgKytpKSB7Ci0gICAgICAgIGlmICghc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSEJfVVNob3J0IGZlYXR1cmVJbmRleCA9
IDA7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiB0YWcgPSBzZXR0aW5ncy0+YXQoaSkudGFnKCkuY2hh
cmFjdGVycygpOwotICAgICAgICBIQl9VSW50IGZlYXR1cmUgPSBIQl9NQUtFX1RBRyh0YWdbMF0s
IHRhZ1sxXSwgdGFnWzJdLCB0YWdbM10pOwotICAgICAgICBpZiAoaGJGYWNlLT5nc3ViICYmIEhC
X0dTVUJfU2VsZWN0X0ZlYXR1cmUoaGJGYWNlLT5nc3ViLCBmZWF0dXJlLCBzY3JpcHRJbmRleCwg
MHhmZmZmLCAmZmVhdHVyZUluZGV4KSA9PSBIQl9FcnJfT2spCi0gICAgICAgICAgICBIQl9HU1VC
X0FkZF9GZWF0dXJlKGhiRmFjZS0+Z3N1YiwgZmVhdHVyZUluZGV4LCBzZXR0aW5ncy0+YXQoaSku
dmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGhiRmFjZS0+Z3BvcyAmJiBIQl9HUE9TX1NlbGVj
dF9GZWF0dXJlKGhiRmFjZS0+Z3BvcywgZmVhdHVyZSwgc2NyaXB0SW5kZXgsIDB4ZmZmZiwgJmZl
YXR1cmVJbmRleCkgPT0gSEJfRXJyX09rKQotICAgICAgICAgICAgSEJfR1BPU19BZGRfRmVhdHVy
ZShoYkZhY2UtPmdwb3MsIGZlYXR1cmVJbmRleCwgc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCkpOwot
ICAgIH0KLX0KLQotc3RhdGljIFVDaGFyMzIgc3Vycm9nYXRlUGFpckF3YXJlRmlyc3RDaGFyYWN0
ZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAo
VTE2X0lTX1NVUlJPR0FURShjaGFyYWN0ZXJzWzBdKSkgewotICAgICAgICBpZiAoIVUxNl9JU19T
VVJST0dBVEVfTEVBRChjaGFyYWN0ZXJzWzBdKSB8fCBsZW5ndGggPCAyIHx8ICFVMTZfSVNfVFJB
SUwoY2hhcmFjdGVyc1sxXSkpCi0gICAgICAgICAgICByZXR1cm4gJyAnOwotICAgICAgICByZXR1
cm4gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNbMF0sIGNoYXJhY3RlcnNbMV0pOwot
ICAgIH0KLSAgICByZXR1cm4gY2hhcmFjdGVyc1swXTsKLX0KLQotY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSogQ29tcGxleFRleHRDb250cm9sbGVyOjpnZXRDb21wbGV4Rm9udFBsYXRmb3JtRGF0YSgp
Ci17Ci0jaWYgT1MoQU5EUk9JRCkKLSAgICAvLyBUaGVyZSBhcmUgMiBraW5kcyBvZiBmb250IG9u
IEFuZHJvaWQ6IHN5c3RlbSBmb250cyBhbmQgZmFsbGJhY2sgZm9udHMuCi0gICAgLy8gU3lzdGVt
IGZvbnRzIGhhdmUgYSBuYW1lLCBhbmQgYXJlIGFjY2Vzc2libGUgaW4gRm9udFBsYXRmb3JtRGF0
YS4KLSAgICAvLyBGYWxsYmFjayBmb250cyBkbyBub3QgaGF2ZSBzcGVjaWZpYyBuYW1lcywgc28g
dGhleSBhcmUgbm90IGFjY2Vzc2libGUKLSAgICAvLyBmcm9tIFdlYktpdCBkaXJlY3RseS4gVG8g
ZmVlZCBIYXJmYnV6eiwgdXNlIGEgdHJpY2sgdG8gZ2V0IGNvcnJlY3QKLSAgICAvLyBTa1R5cGVm
YWNlIGJhc2VkIG9uIHNjcmlwdC4KLSAgICBGYWxsYmFja1NjcmlwdHMgZmFsbGJhY2tTY3JpcHQg
PSBrRmFsbGJhY2tTY3JpcHROdW1iZXI7IC8vIGludmFsaWQgc2NyaXB0IHZhbHVlLgotICAgIHN3
aXRjaCAobV9pdGVtLml0ZW0uc2NyaXB0KSB7Ci0gICAgY2FzZSBIQl9TY3JpcHRfQXJhYmljOgot
ICAgICAgICBmYWxsYmFja1NjcmlwdCA9IGtBcmFiaWNfRmFsbGJhY2tTY3JpcHQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSEJfU2NyaXB0X0FybWVuaWFuOgotICAgICAgICBmYWxsYmFja1Nj
cmlwdCA9IGtBcm1lbmlhbl9GYWxsYmFja1NjcmlwdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBIQl9TY3JpcHRfQmVuZ2FsaToKLSAgICAgICAgZmFsbGJhY2tTY3JpcHQgPSBrQmVuZ2FsaV9G
YWxsYmFja1NjcmlwdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQl9TY3JpcHRfRGV2YW5h
Z2FyaToKLSAgICAgICAgZmFsbGJhY2tTY3JpcHQgPSBrRGV2YW5hZ2FyaV9GYWxsYmFja1Njcmlw
dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQl9TY3JpcHRfR2VvcmdpYW46Ci0gICAgICAg
IGZhbGxiYWNrU2NyaXB0ID0ga0dlb3JnaWFuX0ZhbGxiYWNrU2NyaXB0OwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEhCX1NjcmlwdF9IZWJyZXc6Ci0gICAgICAgIGlmIChtX2ZvbnQtPmZvbnRE
ZXNjcmlwdGlvbigpLndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xkKQotICAgICAgICAgICAgZmFs
bGJhY2tTY3JpcHQgPSBrSGVicmV3Qm9sZF9GYWxsYmFja1NjcmlwdDsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZmFsbGJhY2tTY3JpcHQgPSBrSGVicmV3UmVndWxhcl9GYWxsYmFja1Njcmlw
dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQl9TY3JpcHRfS2FubmFkYToKLSAgICAgICAg
ZmFsbGJhY2tTY3JpcHQgPSBrS2FubmFkYV9GYWxsYmFja1NjcmlwdDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBIQl9TY3JpcHRfTWFsYXlhbGFtOgotICAgICAgICBmYWxsYmFja1NjcmlwdCA9
IGtNYWxheWFsYW1fRmFsbGJhY2tTY3JpcHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSEJf
U2NyaXB0X1RhbWlsOgotICAgICAgICBpZiAobV9mb250LT5mb250RGVzY3JpcHRpb24oKS53ZWln
aHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkKLSAgICAgICAgICAgIGZhbGxiYWNrU2NyaXB0ID0ga1Rh
bWlsQm9sZF9GYWxsYmFja1NjcmlwdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFsbGJh
Y2tTY3JpcHQgPSBrVGFtaWxSZWd1bGFyX0ZhbGxiYWNrU2NyaXB0OwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEhCX1NjcmlwdF9UZWx1Z3U6Ci0gICAgICAgIGZhbGxiYWNrU2NyaXB0ID0ga1Rl
bHVndV9GYWxsYmFja1NjcmlwdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQl9TY3JpcHRf
VGhhaToKLSAgICAgICAgZmFsbGJhY2tTY3JpcHQgPSBrVGhhaV9GYWxsYmFja1NjcmlwdDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
IHJldHVybiBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShtX2ZvbnQtPmZv
bnREZXNjcmlwdGlvbigpLCBTa0dldEZhbGxiYWNrU2NyaXB0SUQoZmFsbGJhY2tTY3JpcHQpLCB0
cnVlKTsKLSNlbHNlCi0gICAgLy8gT25seSBBbmRyb2lkIG5lZWRzIHRoZSBleHRyYSBsb2dpYy4K
LSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6
c2V0dXBGb250Rm9yU2NyaXB0UnVuKCkKLXsKLSAgICBGb250RGF0YVZhcmlhbnQgZm9udERhdGFW
YXJpYW50ID0gQXV0b1ZhcmlhbnQ7Ci0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgc2NyaXB0IHJ1
biBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gc21hbGwgY2Fwcy4KLSAgICAvLyBuZXh0U2NyaXB0
UnVuKCkgd2lsbCBhbHdheXMgc2VuZCB1cyBhIHJ1biBvZiB0aGUgc2FtZSBjYXNlLCBiZWNhdXNl
IGEKLSAgICAvLyBjYXNlIGNoYW5nZSB3aGlsZSBpbiBzbWFsbC1jYXBzIG1vZGUgYWx3YXlzIHJl
c3VsdHMgaW4gZGlmZmVyZW50Ci0gICAgLy8gRm9udERhdGEsIHNvIHdlIG9ubHkgbmVlZCB0byBj
aGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyJ3MgY2FzZS4KLSAgICBpZiAobV9mb250LT5pc1NtYWxs
Q2FwcygpICYmIHVfaXNsb3dlcihtX2l0ZW0uc3RyaW5nW21faXRlbS5pdGVtLnBvc10pKSB7Ci0g
ICAgICAgIG1fc21hbGxDYXBzU3RyaW5nID0gU3RyaW5nKG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQo
KSArIG1faXRlbS5pdGVtLnBvcywgbV9pdGVtLml0ZW0ubGVuZ3RoKTsKLSAgICAgICAgbV9zbWFs
bENhcHNTdHJpbmcubWFrZVVwcGVyKCk7Ci0gICAgICAgIG1faXRlbS5zdHJpbmcgPSBtX3NtYWxs
Q2Fwc1N0cmluZy5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIG1faXRlbS5pdGVtLnBvcyA9IDA7Ci0g
ICAgICAgIGZvbnREYXRhVmFyaWFudCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7Ci0gICAgfQotICAgIGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdldENvbXBsZXhGb250UGxhdGZv
cm1EYXRhKCk7Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEpIHsKLSAgICAgICAgVUNoYXIzMiBjdXJy
ZW50ID0gc3Vycm9nYXRlUGFpckF3YXJlRmlyc3RDaGFyYWN0ZXIoc3RhdGljX2Nhc3Q8Y29uc3Qg
VUNoYXIqPigmbV9pdGVtLnN0cmluZ1ttX2l0ZW0uaXRlbS5wb3NdKSwgbV9pdGVtLml0ZW0ubGVu
Z3RoIC0gbV9pdGVtLml0ZW0ucG9zKTsKLSAgICAgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRh
ID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY3VycmVudCwgZmFsc2UsIGZvbnREYXRh
VmFyaWFudCkuZm9udERhdGE7Ci0gICAgICAgIHBsYXRmb3JtRGF0YSA9ICZmb250RGF0YS0+Zm9u
dERhdGFGb3JDaGFyYWN0ZXIoJyAnKS0+cGxhdGZvcm1EYXRhKCk7Ci0gICAgfQotICAgIG1faXRl
bS5mYWNlID0gcGxhdGZvcm1EYXRhLT5oYXJmYnV6ekZhY2UoKS0+ZmFjZSgpOwotICAgIC8vIFdl
IG9ubHkgbmVlZCB0byBzZXR1cCBmb250IGZlYXR1cmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl
IHJ1bi4KLSAgICBpZiAoIW1faXRlbS5pdGVtLnBvcykKLSAgICAgICAgc2V0dXBGb250RmVhdHVy
ZXMobV9mb250LT5mb250RGVzY3JpcHRpb24oKS5mZWF0dXJlU2V0dGluZ3MoKSwgbV9pdGVtLmZh
Y2UpOwotICAgIHZvaWQqIG9wYXF1ZVBsYXRmb3JtRGF0YSA9IGNvbnN0X2Nhc3Q8Rm9udFBsYXRm
b3JtRGF0YSo+KHBsYXRmb3JtRGF0YSk7Ci0gICAgbV9pdGVtLmZvbnQtPnVzZXJEYXRhID0gb3Bh
cXVlUGxhdGZvcm1EYXRhOwotCi0gICAgaW50IHNpemUgPSBwbGF0Zm9ybURhdGEtPnNpemUoKTsK
LSAgICBtX2l0ZW0uZm9udC0+eF9wcGVtID0gc2l6ZTsKLSAgICBtX2l0ZW0uZm9udC0+eV9wcGVt
ID0gc2l6ZTsKLSAgICAvLyB4XyBhbmQgeV9zY2FsZSBhcmUgdGhlIGNvbnZlcnNpb24gZmFjdG9y
cyBmcm9tIGZvbnQgZGVzaWduIHNwYWNlIChmRW1TaXplKSB0byAxLzY0dGggb2YgZGV2aWNlIHBp
eGVscyBpbiAxNi4xNiBmb3JtYXQuCi0gICAgY29uc3QgaW50IGRldmljZVBpeGVsRnJhY3Rpb24g
PSA2NDsKLSAgICBjb25zdCBpbnQgbXVsdGlwbHlGb3IxNkRvdDE2ID0gMSA8PCAxNjsKLSAgICBp
bnQgc2NhbGUgPSBkZXZpY2VQaXhlbEZyYWN0aW9uICogc2l6ZSAqIG11bHRpcGx5Rm9yMTZEb3Qx
NiAvIHBsYXRmb3JtRGF0YS0+ZW1TaXplSW5Gb250VW5pdHMoKTsKLSAgICBtX2l0ZW0uZm9udC0+
eF9zY2FsZSA9IHNjYWxlOwotICAgIG1faXRlbS5mb250LT55X3NjYWxlID0gc2NhbGU7Ci19Ci0K
LXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpkZWxldGVHbHlwaEFycmF5cygpCi17Ci0gICAg
ZGVsZXRlW10gbV9pdGVtLmdseXBoczsKLSAgICBkZWxldGVbXSBtX2l0ZW0uYXR0cmlidXRlczsK
LSAgICBkZWxldGVbXSBtX2l0ZW0uYWR2YW5jZXM7Ci0gICAgZGVsZXRlW10gbV9pdGVtLm9mZnNl
dHM7Ci0gICAgZGVsZXRlW10gbV9pdGVtLmxvZ19jbHVzdGVyczsKLSAgICBkZWxldGVbXSBtX2ds
eXBoczE2OwotICAgIGRlbGV0ZVtdIG1fcG9zaXRpb25zOwotfQotCi12b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Y3JlYXRlR2x5cGhBcnJheXMoaW50IHNpemUpCi17Ci0gICAgbV9pdGVtLmds
eXBocyA9IG5ldyBIQl9HbHlwaFtzaXplXTsKLSAgICBtX2l0ZW0uYXR0cmlidXRlcyA9IG5ldyBI
Ql9HbHlwaEF0dHJpYnV0ZXNbc2l6ZV07Ci0gICAgbV9pdGVtLmFkdmFuY2VzID0gbmV3IEhCX0Zp
eGVkW3NpemVdOwotICAgIG1faXRlbS5vZmZzZXRzID0gbmV3IEhCX0ZpeGVkUG9pbnRbc2l6ZV07
Ci0gICAgbV9pdGVtLmxvZ19jbHVzdGVycyA9IG5ldyB1bnNpZ25lZCBzaG9ydFtzaXplXTsKLQot
ICAgIG1fZ2x5cGhzMTYgPSBuZXcgdWludDE2X3Rbc2l6ZV07Ci0gICAgbV9wb3NpdGlvbnMgPSBu
ZXcgU2tQb2ludFtzaXplXTsKLQotICAgIG1faXRlbS5udW1fZ2x5cGhzID0gc2l6ZTsKLSAgICBt
X2dseXBoc0FycmF5Q2FwYWNpdHkgPSBzaXplOyAvLyBTYXZlIHRoZSBHbHlwaEFycmF5cyBzaXpl
LgotICAgIHJlc2V0R2x5cGhBcnJheXMoKTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OnJlc2V0R2x5cGhBcnJheXMoKQotewotICAgIGludCBzaXplID0gbV9pdGVtLm51bV9nbHlw
aHM7Ci0gICAgLy8gQWxsIHRoZSB0eXBlcyBoZXJlIGRvbid0IGhhdmUgcG9pbnRlcnMuIEl0IGlz
IHNhZmUgdG8gcmVzZXQgdG8KLSAgICAvLyB6ZXJvIHVubGVzcyBIYXJmYnV6eiBicmVha3MgdGhl
IGNvbXBhdGliaWxpdHkgaW4gdGhlIGZ1dHVyZS4KLSAgICBtZW1zZXQobV9pdGVtLmdseXBocywg
MCwgc2l6ZSAqIHNpemVvZihIQl9HbHlwaCkpOwotICAgIG1lbXNldChtX2l0ZW0uYXR0cmlidXRl
cywgMCwgc2l6ZSAqIHNpemVvZihIQl9HbHlwaEF0dHJpYnV0ZXMpKTsKLSAgICBtZW1zZXQobV9p
dGVtLmFkdmFuY2VzLCAwLCBzaXplICogc2l6ZW9mKEhCX0ZpeGVkKSk7Ci0gICAgbWVtc2V0KG1f
aXRlbS5vZmZzZXRzLCAwLCBzaXplICogc2l6ZW9mKEhCX0ZpeGVkUG9pbnQpKTsKLSAgICBtZW1z
ZXQobV9nbHlwaHMxNiwgMCwgc2l6ZSAqIHNpemVvZih1aW50MTZfdCkpOwotICAgIG1lbXNldCht
X3Bvc2l0aW9ucywgMCwgc2l6ZSAqIHNpemVvZihTa1BvaW50KSk7Ci19Ci0KLXZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpzaGFwZUdseXBocygpCi17Ci0gICAgLy8gSEJfU2hhcGVJdGVtKCkg
cmVzZXRzIG1faXRlbS5udW1fZ2x5cGhzLiBJZiB0aGUgcHJldmlvdXMgY2FsbCB0bwotICAgIC8v
IEhCX1NoYXBlSXRlbSgpIHVzZWQgbGVzcyBzcGFjZSB0aGFuIHdhcyBhdmFpbGFibGUsIHRoZSBj
YXBhY2l0eSBvZgotICAgIC8vIHRoZSBhcnJheSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGN1cnJl
bnQgdmFsdWUgb2YgbV9pdGVtLm51bV9nbHlwaHMuCi0gICAgLy8gU28sIHdlIG5lZWQgdG8gcmVz
ZXQgdGhlIG51bV9nbHlwaHMgdG8gdGhlIGNhcGFjaXR5IG9mIHRoZSBhcnJheS4KLSAgICBtX2l0
ZW0ubnVtX2dseXBocyA9IG1fZ2x5cGhzQXJyYXlDYXBhY2l0eTsKLSAgICByZXNldEdseXBoQXJy
YXlzKCk7Ci0gICAgd2hpbGUgKCFIQl9TaGFwZUl0ZW0oJm1faXRlbSkpIHsKLSAgICAgICAgLy8g
V2Ugb3ZlcmZsb3dlZCBvdXIgYXJyYXlzLiBSZXNpemUgYW5kIHJldHJ5LgotICAgICAgICAvLyBI
Ql9TaGFwZUl0ZW0gZmlsbHMgaW4gbV9pdGVtLm51bV9nbHlwaHMgd2l0aCB0aGUgbmVlZGVkIHNp
emUuCi0gICAgICAgIGRlbGV0ZUdseXBoQXJyYXlzKCk7Ci0gICAgICAgIC8vIFRoZSB8KyAxfCBo
ZXJlIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gSGFyZmJ1eno6IHRoZSBLaG1lcgotICAg
ICAgICAvLyBzaGFwZXIgKGF0IGxlYXN0KSBjYW4gZmFpbCBiZWNhdXNlIG9mIGluc3VmZmljaWVu
dCBnbHlwaCBidWZmZXJzCi0gICAgICAgIC8vIGFuZCByZXF1ZXN0IDAgYWRkaXRpb25hbCBnbHlw
aHM6IHRocm93aW5nIHVzIGludG8gYW4gaW5maW5pdGUKLSAgICAgICAgLy8gbG9vcC4KLSAgICAg
ICAgY3JlYXRlR2x5cGhBcnJheXMobV9pdGVtLm51bV9nbHlwaHMgKyAxKTsKLSAgICB9Ci19Ci0K
LXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXRHbHlwaFBvc2l0aW9ucyhib29sIGlzUlRM
KQotewotICAgIGNvbnN0IGRvdWJsZSBydGxGbGlwID0gaXNSVEwgPyAtMSA6IDE7Ci0gICAgZG91
YmxlIHBvc2l0aW9uID0gMDsKLQotICAgIC8vIGxvZ0NsdXN0ZXJzSW5kZXggaW5kZXhlcyBsb2dD
bHVzdGVycyBmb3IgdGhlIGZpcnN0IGNvZGVwb2ludCBvZiB0aGUgY3VycmVudCBnbHlwaC4KLSAg
ICAvLyBFYWNoIHRpbWUgd2UgYWR2YW5jZSBhIGdseXBoLCB3ZSBza2lwIG92ZXIgYWxsIHRoZSBj
b2RlcG9pbnRzIHRoYXQgY29udHJpYnV0ZWQgdG8gdGhlIGN1cnJlbnQgZ2x5cGguCi0gICAgc2l6
ZV90IGxvZ0NsdXN0ZXJzSW5kZXggPSAwOwotCi0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBn
bHlwaHMgaW4gbG9naWNhbCBvcmRlciwgZmxpcHBpbmcgZm9yIFJUTCB3aGVyZSBuZWNlc3Nhcnku
Ci0gICAgLy8gR2x5cGhzIGFyZSBwb3NpdGlvbmVkIHN0YXJ0aW5nIGZyb20gbV9vZmZzZXRYOyBp
biBSVEwgbW9kZSB0aGV5IGdvIGxlZnR3YXJkcyBmcm9tIHRoZXJlLgotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9pdGVtLm51bV9nbHlwaHM7ICsraSkgewotICAgICAgICB3aGlsZSAobG9n
Q2x1c3RlcnNJbmRleCA8IG1faXRlbS5pdGVtLmxlbmd0aCAmJiBtX2l0ZW0ubG9nX2NsdXN0ZXJz
W2xvZ0NsdXN0ZXJzSW5kZXhdIDwgaSkKLSAgICAgICAgICAgIGxvZ0NsdXN0ZXJzSW5kZXgrKzsK
LQotICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBnbHlwaCBpcyBqdXN0IGFmdGVyIGEgc3BhY2Us
IGFkZCBpbiB0aGUgd29yZCBzcGFjaW5nLgotICAgICAgICBpZiAobG9nQ2x1c3RlcnNJbmRleCA8
IG1faXRlbS5pdGVtLmxlbmd0aCAmJiBpc1dvcmRFbmQobV9pdGVtLml0ZW0ucG9zICsgbG9nQ2x1
c3RlcnNJbmRleCkpCi0gICAgICAgICAgICBwb3NpdGlvbiArPSBkZXRlcm1pbmVXb3JkQnJlYWtT
cGFjaW5nKCk7Ci0KLSAgICAgICAgbV9nbHlwaHMxNltpXSA9IG1faXRlbS5nbHlwaHNbaV07Ci0g
ICAgICAgIGRvdWJsZSBvZmZzZXRYID0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKG1faXRl
bS5vZmZzZXRzW2ldLngpOwotICAgICAgICBkb3VibGUgb2Zmc2V0WSA9IHRydW5jYXRlRml4ZWRQ
b2ludFRvSW50ZWdlcihtX2l0ZW0ub2Zmc2V0c1tpXS55KTsKLSAgICAgICAgZG91YmxlIGFkdmFu
Y2UgPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLmFkdmFuY2VzW2ldKTsKLSAg
ICAgICAgaWYgKGlzUlRMKQotICAgICAgICAgICAgb2Zmc2V0WCAtPSBhZHZhbmNlOwotCi0gICAg
ICAgIG1fcG9zaXRpb25zW2ldLnNldChtX29mZnNldFggKyAocG9zaXRpb24gKiBydGxGbGlwKSAr
IG9mZnNldFgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0aW5nWSArIG9mZnNl
dFkpOwotCi0gICAgICAgIGlmIChtX2N1cnJlbnRGb250RGF0YS0+aXNaZXJvV2lkdGhTcGFjZUds
eXBoKG1fZ2x5cGhzMTZbaV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8g
QXQgdGhlIGVuZCBvZiBlYWNoIGNsdXN0ZXIsIGFkZCBpbiB0aGUgbGV0dGVyIHNwYWNpbmcuCi0g
ICAgICAgIGlmIChpICsgMSA9PSBtX2l0ZW0ubnVtX2dseXBocyB8fCBtX2l0ZW0uYXR0cmlidXRl
c1tpICsgMV0uY2x1c3RlclN0YXJ0KQotICAgICAgICAgICAgcG9zaXRpb24gKz0gbV9sZXR0ZXJT
cGFjaW5nOwotCi0gICAgICAgIHBvc2l0aW9uICs9IGFkdmFuY2U7Ci0gICAgfQotICAgIG1fcGl4
ZWxXaWR0aCA9IHN0ZDo6bWF4KHBvc2l0aW9uLCAwLjApOwotICAgIG1fb2Zmc2V0WCArPSBtX3Bp
eGVsV2lkdGggKiBydGxGbGlwOwotfQotCi1pbnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpnbHlw
aEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4oaW50IHRhcmdldFgpIGNvbnN0Ci17Ci0gICAg
Ly8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBnbHlwaHMgaW4gbG9naWNhbCBvcmRlciwgc2VlaW5nIHdo
ZXRoZXIgdGFyZ2V0WCBmYWxscyBiZXR3ZWVuIHRoZSBwcmV2aW91cwotICAgIC8vIHBvc2l0aW9u
IGFuZCBoYWxmd2F5IHRocm91Z2ggdGhlIGN1cnJlbnQgZ2x5cGguCi0gICAgLy8gRklYTUU6IHRo
aXMgY29kZSBwcm9iYWJseSBiZWxvbmdzIGluIENvbXBsZXhUZXh0Q29udHJvbGxlci4KLSAgICBp
bnQgbGFzdFggPSBvZmZzZXRYKCkgLSAocnRsKCkgPyAtbV9waXhlbFdpZHRoIDogbV9waXhlbFdp
ZHRoKTsKLSAgICBmb3IgKGludCBnbHlwaEluZGV4ID0gMDsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGdseXBoSW5kZXgpIDwgbGVuZ3RoKCk7ICsrZ2x5cGhJbmRleCkgewotICAgICAgICBpbnQgYWR2
YW5jZSA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0uYWR2YW5jZXNbZ2x5cGhJ
bmRleF0pOwotICAgICAgICBpbnQgbmV4dFggPSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9ucygp
W2dseXBoSW5kZXhdLngoKSkgKyBhZHZhbmNlIC8gMjsKLSAgICAgICAgaWYgKHN0ZDo6bWluKG5l
eHRYLCBsYXN0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IHN0ZDo6bWF4KG5leHRYLCBsYXN0
WCkpCi0gICAgICAgICAgICByZXR1cm4gZ2x5cGhJbmRleDsKLSAgICAgICAgbGFzdFggPSBuZXh0
WDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGVuZ3RoKCkgLSAxOwotfQotCi1pbnQgQ29tcGxleFRl
eHRDb250cm9sbGVyOjpvZmZzZXRGb3JQb3NpdGlvbihpbnQgdGFyZ2V0WCkKLXsKLSAgICB1bnNp
Z25lZCBiYXNlUG9zaXRpb24gPSAwOwotCi0gICAgaW50IHggPSBvZmZzZXRYKCk7Ci0gICAgd2hp
bGUgKG5leHRTY3JpcHRSdW4oKSkgewotICAgICAgICBpbnQgbmV4dFggPSBvZmZzZXRYKCk7Ci0K
LSAgICAgICAgaWYgKHN0ZDo6bWluKHgsIG5leHRYKSA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0g
c3RkOjptYXgoeCwgbmV4dFgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgeCB2YWx1ZSBpbiBxdWVz
dGlvbiBpcyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLgotICAgICAgICAgICAgY29uc3QgaW50IGds
eXBoSW5kZXggPSBnbHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4odGFyZ2V0WCk7Ci0K
LSAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBpbmRleCwgd2UgaGF2ZSB0
byB0dXJuIHRoYXQgaW50byBhCi0gICAgICAgICAgICAvLyBjb2RlLXBvaW50IGluZGV4LiBCZWNh
dXNlIG9mIGxpZ2F0dXJlcywgc2V2ZXJhbCBjb2RlLXBvaW50cyBtYXkKLSAgICAgICAgICAgIC8v
IGhhdmUgZ29uZSBpbnRvIGEgc2luZ2xlIGdseXBoLiBXZSBpdGVyYXRlIG92ZXIgdGhlIGNsdXN0
ZXJzIGxvZwotICAgICAgICAgICAgLy8gYW5kIGZpbmQgdGhlIGZpcnN0IGNvZGUtcG9pbnQgd2hp
Y2ggY29udHJpYnV0ZWQgdG8gdGhlIGdseXBoLgotCi0gICAgICAgICAgICAvLyBTb21lIHNoYXBl
cnMgKGkuZS4gS2htZXIpIHdpbGwgcHJvZHVjZSBjbHVzdGVyIGxvZ3Mgd2hpY2ggcmVwb3J0Ci0g
ICAgICAgICAgICAvLyB0aGF0IC9uby8gY29kZSBwb2ludHMgY29udHJpYnV0ZWQgdG8gY2VydGFp
biBnbHlwaHMuIEJlY2F1c2Ugb2YKLSAgICAgICAgICAgIC8vIHRoaXMsIHdlIHRha2UgYW55IGNv
ZGUgcG9pbnQgd2hpY2ggY29udHJpYnV0ZWQgdG8gdGhlIGdseXBoIGluCi0gICAgICAgICAgICAv
LyBxdWVzdGlvbiwgb3IgYW55IHN1YnNlcXVlbnQgZ2x5cGguIElmIHdlIHJ1biBvZmYgdGhlIGVu
ZCwgdGhlbgotICAgICAgICAgICAgLy8gd2UgdGFrZSB0aGUgbGFzdCBjb2RlIHBvaW50LgotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG51bUNvZGVQb2ludHMoKTsgKytqKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKG1faXRlbS5sb2dfY2x1c3RlcnNbal0gPj0gZ2x5cGhJbmRl
eCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VQb3NpdGlvbiArIGo7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBiYXNlUG9zaXRpb24gKyBudW1Db2RlUG9pbnRz
KCkgLSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgYmFzZVBvc2l0aW9uICs9IG51bUNvZGVQb2lu
dHMoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYmFzZVBvc2l0aW9uOwotfQotCi1GbG9hdFJlY3Qg
Q29tcGxleFRleHRDb250cm9sbGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKQotewotICAgIGludCBmcm9tWCA9IC0x
LCB0b1ggPSAtMTsKLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxv
Z2ljYWwgb3JkZXIsIHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25z
IG9mIGludGVyZXN0LgotICAgIHdoaWxlIChuZXh0U2NyaXB0UnVuKCkgJiYgKGZyb21YID09IC0x
IHx8IHRvWCA9PSAtMSkpIHsKLSAgICAgICAgaWYgKGZyb21YID09IC0xICYmIGZyb20gPj0gMCAm
JiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbSkgPCBudW1Db2RlUG9pbnRzKCkpIHsKLSAgICAg
ICAgICAgIC8vIHxmcm9tfCBpcyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLiBTbyB3ZSBpbmRleCB0
aGUgY2x1c3RlcnMgbG9nIHRvCi0gICAgICAgICAgICAvLyBmaW5kIHdoaWNoIGdseXBoIHRoaXMg
Y29kZS1wb2ludCBjb250cmlidXRlZCB0byBhbmQgZmluZCBpdHMgeAotICAgICAgICAgICAgLy8g
cG9zaXRpb24uCi0gICAgICAgICAgICBpbnQgZ2x5cGggPSBtX2l0ZW0ubG9nX2NsdXN0ZXJzW2Zy
b21dOwotICAgICAgICAgICAgZnJvbVggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOwotICAgICAg
ICAgICAgaWYgKHJ0bCgpKQotICAgICAgICAgICAgICAgIGZyb21YICs9IHRydW5jYXRlRml4ZWRQ
b2ludFRvSW50ZWdlcihtX2l0ZW0uYWR2YW5jZXNbZ2x5cGhdKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBmcm9tIC09IG51bUNvZGVQb2ludHMoKTsKLQotICAgICAgICBpZiAodG9YID09
IC0xICYmIHRvID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSA8IG51bUNvZGVQb2lu
dHMoKSkgewotICAgICAgICAgICAgaW50IGdseXBoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1t0b107
Ci0gICAgICAgICAgICB0b1ggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOwotICAgICAgICAgICAg
aWYgKHJ0bCgpKQotICAgICAgICAgICAgICAgIHRvWCArPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0lu
dGVnZXIobV9pdGVtLmFkdmFuY2VzW2dseXBoXSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgdG8gLT0gbnVtQ29kZVBvaW50cygpOwotICAgIH0KLQotICAgIC8vIFRoZSBwb3NpdGlvbiBp
biBxdWVzdGlvbiBtaWdodCBiZSBqdXN0IGFmdGVyIHRoZSB0ZXh0LgotICAgIGlmIChmcm9tWCA9
PSAtMSkKLSAgICAgICAgZnJvbVggPSBvZmZzZXRYKCk7Ci0gICAgaWYgKHRvWCA9PSAtMSkKLSAg
ICAgICAgdG9YID0gb2Zmc2V0WCgpOwotCi0gICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAh
PSAtMSk7Ci0KLSAgICBpZiAoZnJvbVggPCB0b1gpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
cG9pbnQueCgpICsgZnJvbVgsIHBvaW50LnkoKSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7Ci0KLSAg
ICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIHRvWCwgcG9pbnQueSgpLCBmcm9tWCAtIHRv
WCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmdseXBoc0ZvclJh
bmdlKGludCBmcm9tLCBpbnQgdG8sIGludCYgZnJvbUdseXBoLCBpbnQmIGdseXBoTGVuZ3RoKQot
ewotICAgIC8vIENoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiB0aGUgY3VycmVudCBydW4uIFRIRVNF
IE1BWSBOT1QgQkUgSU4gUkFOR0UgYW5kIG1heQotICAgIC8vIGJlIG5lZ2F0aXZlLCBldGMuIFRo
ZSBjb2RlIGJlbG93IGhhbmRsZXMgdGhpcy4KLSAgICBpbnQgZnJvbUNoYXIgPSBmcm9tIC0gbV9p
dGVtLml0ZW0ucG9zOwotICAgIGludCB0b0NoYXIgPSB0byAtIG1faXRlbS5pdGVtLnBvczsKLQot
ICAgIC8vIFNlZSBpZiB0aGVyZSBhcmUgYW55IGNoYXJhY3RlcnMgaW4gdGhlIGN1cnJlbnQgcnVu
LgotICAgIGlmICghbnVtQ29kZVBvaW50cygpIHx8IGZyb21DaGFyID49IHN0YXRpY19jYXN0PGlu
dD4obnVtQ29kZVBvaW50cygpKSB8fCB0b0NoYXIgPD0gMCkgewotICAgICAgICBmcm9tR2x5cGgg
PSAtMTsKLSAgICAgICAgZ2x5cGhMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gQ29tcHV0ZSB0aGUgc3RhcnRpbmcgZ2x5cGggd2l0aGluIHRoaXMgc3Bhbi4gfGZy
b218IGFuZCB8dG98IGFyZQotICAgIC8vIGdsb2JhbCBvZmZzZXRzIHRoYXQgbWF5IGludGVyc2Vj
dCBhcmJpdHJhcmlseSB3aXRoIG91ciBsb2NhbCBydW4uCi0gICAgZnJvbUdseXBoID0gbV9pdGVt
LmxvZ19jbHVzdGVyc1tmcm9tQ2hhciA8IDAgPyAwIDogZnJvbUNoYXJdOwotICAgIGlmICh0b0No
YXIgPj0gc3RhdGljX2Nhc3Q8aW50PihudW1Db2RlUG9pbnRzKCkpKQotICAgICAgICBnbHlwaExl
bmd0aCA9IGxlbmd0aCgpIC0gZnJvbUdseXBoOwotICAgIGVsc2UKLSAgICAgICAgZ2x5cGhMZW5n
dGggPSBtX2l0ZW0ubG9nX2NsdXN0ZXJzW3RvQ2hhcl0gLSBmcm9tR2x5cGg7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJI
YXJmQnV6ei5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzU4YTNjYWJiYmRlZjcy
ZTdlMzVmNzJhZWFmNzY5MDI3ZjM5ODg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enpfaAotI2RlZmluZSBD
b21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6el9oCi0KLSNpbmNsdWRlICJIYXJmQnV6elNoYXBl
ckJhc2UuaCIKLSNpbmNsdWRlICJIYXJmQnV6elNraWEuaCIKLSNpbmNsdWRlICJTa1BvaW50Lmgi
Ci0jaW5jbHVkZSAiU2tTY2FsYXIuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0KLWV4dGVybiAi
QyIgewotI2luY2x1ZGUgImhhcmZidXp6LXNoYXBlci5oIgotfQotCi0jaW5jbHVkZSA8dW5pY29k
ZS91Y2hhci5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250OwotY2xhc3MgRm9u
dFBsYXRmb3JtRGF0YTsKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwotCi0vLyBDb21wbGV4VGV4dENv
bnRyb2xsZXIgd2Fsa3MgYSBUZXh0UnVuIGFuZCBwcmVzZW50cyBlYWNoIHNjcmlwdCBydW4gaW4g
c2VxdWVuY2UuIEEKLS8vIFRleHRSdW4gaXMgYSBzZXF1ZW5jZSBvZiBjb2RlLXBvaW50cyB3aXRo
IHRoZSBzYW1lIGVtYmVkZGluZyBsZXZlbCAoaS5lLiB0aGV5Ci0vLyBhcmUgYWxsIGxlZnQtdG8t
cmlnaHQgb3IgcmlnaHQtdG8tbGVmdCkuIEEgc2NyaXB0IHJ1biBpcyBhIHN1YnNlcXVlbmNlIHdo
ZXJlCi0vLyBhbGwgdGhlIGNoYXJhY3RlcnMgaGF2ZSB0aGUgc2FtZSBzY3JpcHQgKGUuZy4gQXJh
YmljLCBUaGFpIGV0YykuIFNoYXBpbmcgaXMKLS8vIG9ubHkgZXZlciBkb25lIHdpdGggc2NyaXB0
IHJ1bnMgc2luY2UgdGhlIHNoYXBlcnMgb25seSBrbm93IGhvdyB0byBkZWFsIHdpdGgKLS8vIGEg
c2luZ2xlIHNjcmlwdC4KLS8vCi0vLyBJdGVyYXRpb24gaXMgYWx3YXlzIGluIGxvZ2ljYWwgKGFr
YSByZWFkaW5nKSBvcmRlci4gRm9yIFJUTCB0ZXh0IHRoYXQgbWVhbnMKLS8vIHRoZSByaWdodG1v
c3QgcGFydCBvZiB0aGUgdGV4dCB3aWxsIGJlIGZpcnN0LgotLy8KLS8vIE9uY2UgeW91IGhhdmUg
c2V0dXAgdGhlIG9iamVjdCwgY2FsbCB8bmV4dFNjcmlwdFJ1bnwgdG8gZ2V0IHRoZSBmaXJzdCBz
Y3JpcHQKLS8vIHJ1bi4gVGhpcyB3aWxsIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpdGVyYXRpb24g
aXMgY29tcGxldGUuIEF0IGFueSB0aW1lIHlvdQotLy8gY2FuIGNhbGwgfHJlc2V0fCB0byBzdGFy
dCBvdmVyIGFnYWluLgotY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyIDogcHVibGljIEhhcmZC
dXp6U2hhcGVyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0
IEZvbnQqLCBjb25zdCBUZXh0UnVuJiwgaW50IHN0YXJ0aW5nWCwgaW50IHN0YXJ0aW5nWSk7Ci0g
ICAgdmlydHVhbCB+Q29tcGxleFRleHRDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIHJlc2V0KGlu
dCBvZmZzZXQpOwotICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgc2NyaXB0IHJ1biwgcmV0dXJu
aW5nIGZhbHNlIHdoZW4gdGhlIGVuZCBvZiB0aGUKLSAgICAvLyBUZXh0UnVuIGhhcyBiZWVuIHJl
YWNoZWQuCi0gICAgYm9vbCBuZXh0U2NyaXB0UnVuKCk7Ci0gICAgZmxvYXQgd2lkdGhPZkZ1bGxS
dW4oKTsKLQotICAgIHZvaWQgc2V0dXBGb3JSVEwoKTsKLSAgICBib29sIHJ0bCgpIGNvbnN0IHsg
cmV0dXJuIG1fcnVuLnJ0bCgpOyB9Ci0gICAgY29uc3QgdWludDE2X3QqIGdseXBocygpIGNvbnN0
IHsgcmV0dXJuIG1fZ2x5cGhzMTY7IH0KLQotICAgIC8vIFJldHVybiB0aGUgc3RhcnQgaW5kZXgg
YW5kIGxlbmd0aCBvZiBnbHlwaHMgZm9yIHRoZSByYW5nZSBbZnJvbSwgdG8pIGluIHRoZSBjdXJy
ZW50IHNjcmlwdCBydW4uCi0gICAgdm9pZCBnbHlwaHNGb3JSYW5nZShpbnQgZnJvbSwgaW50IHRv
LCBpbnQmIGZyb21HbHlwaCwgaW50JiBnbHlwaExlbmd0aCk7Ci0KLSAgICAvLyBSZXR1cm4gdGhl
IGxlbmd0aCBvZiB0aGUgYXJyYXkgcmV0dXJuZWQgYnkgfGdseXBoc3wKLSAgICB1bnNpZ25lZCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2l0ZW0ubnVtX2dseXBoczsgfQotCi0gICAgLy8gUmV0
dXJuIHRoZSBvZmZzZXQgZm9yIGVhY2ggb2YgdGhlIGdseXBocy4gTm90ZSB0aGF0IHRoaXMgaXMg
dHJhbnNsYXRlZAotICAgIC8vIGJ5IHRoZSBjdXJyZW50IHggb2Zmc2V0IGFuZCB0aGF0IHRoZSB4
IG9mZnNldCBpcyB1cGRhdGVkIGZvciBlYWNoIHNjcmlwdAotICAgIC8vIHJ1bi4KLSAgICBjb25z
dCBTa1BvaW50KiBwb3NpdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uczsgfQotCi0g
ICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gdGhlIGN1cnJlbnQgc2Ny
aXB0IHJ1bgotICAgIHVuc2lnbmVkIG51bUNvZGVQb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2l0
ZW0uaXRlbS5sZW5ndGg7IH0KLQotICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBwaXhlbCBwb3Np
dGlvbiBvZiB0aGUgY29udHJvbGxlci4KLSAgICB1bnNpZ25lZCBvZmZzZXRYKCkgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXRYOyB9Ci0KLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhKiBmb250UGxh
dGZvcm1EYXRhRm9yU2NyaXB0UnVuKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxGb250UGxh
dGZvcm1EYXRhKj4obV9pdGVtLmZvbnQtPnVzZXJEYXRhKTsgfQotCi0gICAgaW50IG9mZnNldEZv
clBvc2l0aW9uKGludCk7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQ
b2ludCYsIGludCBoZWlnaHQsIGludCBmcm9tICwgaW50IHRvKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBSZXR1cm4gdGhlIHdpZHRoIChpbiBweCkgb2YgdGhlIGN1cnJlbnQgc2NyaXB0IHJ1bi4KLSAg
ICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxXaWR0aDsgfQotCi0gICAg
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q29tcGxleEZvbnRQbGF0Zm9ybURhdGEoKTsKLSAg
ICB2b2lkIHNldHVwRm9udEZvclNjcmlwdFJ1bigpOwotICAgIHZvaWQgZGVsZXRlR2x5cGhBcnJh
eXMoKTsKLSAgICB2b2lkIGNyZWF0ZUdseXBoQXJyYXlzKGludCk7Ci0gICAgdm9pZCByZXNldEds
eXBoQXJyYXlzKCk7Ci0gICAgdm9pZCBzaGFwZUdseXBocygpOwotICAgIHZvaWQgc2V0R2x5cGhQ
b3NpdGlvbnMoYm9vbCk7Ci0KLSAgICBpbnQgZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0
UnVuKGludCB0YXJnZXRYKSBjb25zdDsKLQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2N1
cnJlbnRGb250RGF0YTsKLSAgICBIQl9TaGFwZXJJdGVtIG1faXRlbTsKLSAgICB1aW50MTZfdCog
bV9nbHlwaHMxNjsgLy8gQSB2ZWN0b3Igb2YgMTYtYml0IGdseXBoIGlkcy4KLSAgICBTa1BvaW50
KiBtX3Bvc2l0aW9uczsgLy8gQSB2ZWN0b3Igb2YgcG9zaXRpb25zIGZvciBlYWNoIGdseXBoLgot
ICAgIHNzaXplX3QgbV9pbmRleE9mTmV4dFNjcmlwdFJ1bjsgLy8gSW5kZXhlcyB0aGUgc2NyaXB0
IHJ1biBpbiB8bV9ydW58LgotICAgIGludCBtX29mZnNldFg7IC8vIE9mZnNldCBpbiBwaXhlbHMg
dG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHNjcmlwdCBydW4uCi0gICAgaW50IG1fc3RhcnRpbmdZ
OyAvLyBUaGUgWSBzdGFydGluZyBwb2ludCBvZiB0aGUgc2NyaXB0IHJ1bi4KLSAgICB1bnNpZ25l
ZCBtX3BpeGVsV2lkdGg7IC8vIFdpZHRoIChpbiBweCkgb2YgdGhlIGN1cnJlbnQgc2NyaXB0IHJ1
bi4KLSAgICB1bnNpZ25lZCBtX2dseXBoc0FycmF5Q2FwYWNpdHk7IC8vIEN1cnJlbnQgc2l6ZSBv
ZiBhbGwgdGhlIEhhcmZidXp6IGFycmF5cy4KLQotICAgIFN0cmluZyBtX3NtYWxsQ2Fwc1N0cmlu
ZzsgLy8gc3Vic3RyaW5nIG9mIG1fcnVuIGNvbnZlcnRlZCB0byBzbWFsbCBjYXBzLgotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ29tcGxleFRleHRDb250cm9sbGVy
SGFyZkJ1enpfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKaW5kZXggNWM3OTAwNDg4ZDAyYmJjYjQxNzc2
NTc4MGFkNGU2OTNiNjdlN2RiNC4uZWI3MDllMzIxODM1NzFiYTc0YzRlMGZlNDhkMWQzOTRmYmFk
YzQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovRm9udEhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCkBAIC0zMSwxNiArMzEsMTAgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGb250LmgiCiAKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCi0j
aW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKLSNlbHNlCi0jaW5jbHVkZSAiQ29tcGxleFRleHRD
b250cm9sbGVySGFyZkJ1enouaCIKLSNpbmNsdWRlICJIYXJmQnV6elNraWEuaCIKLSNlbmRpZgot
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5o
IgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCkBAIC0xODIsNyArMTc2LDYgQEAgdm9pZCBG
b250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgVGV4dFJ1biYg
cnVuLAogICAgICAgICBzZXR1cEZvclRleHRQYWludGluZygmc3Ryb2tlUGFpbnQsIGdjLT5zdHJv
a2VDb2xvcigpLnJnYigpKTsKICAgICB9CiAKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiAgICAgR2x5
cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1
bik7CiAgICAgc2hhcGVyLnNldERyYXdSYW5nZShmcm9tLCB0byk7CkBAIC0xOTAsMzIgKzE4Myw2
IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0
IFRleHRSdW4mIHJ1biwKICAgICAgICAgcmV0dXJuOwogICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQ
b2ludCA9IHNoYXBlci5hZGp1c3RTdGFydFBvaW50KHBvaW50KTsKICAgICBkcmF3R2x5cGhCdWZm
ZXIoZ2MsIHJ1biwgZ2x5cGhCdWZmZXIsIGFkanVzdGVkUG9pbnQpOwotI2Vsc2UKLSAgICBQbGF0
Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCBwb2ludC54
KCksIHBvaW50LnkoKSk7Ci0gICAgaWYgKHJ1bi5ydGwoKSkKLSAgICAgICAgY29udHJvbGxlci5z
ZXR1cEZvclJUTCgpOwotCi0gICAgd2hpbGUgKGNvbnRyb2xsZXIubmV4dFNjcmlwdFJ1bigpKSB7
Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSBnbHlwaCBmb3VuZCBpbiB0aGUgY3Vy
cmVudCBzY3JpcHQgcnVuLgotICAgICAgICBpbnQgZnJvbUdseXBoLCBnbHlwaExlbmd0aDsKLSAg
ICAgICAgY29udHJvbGxlci5nbHlwaHNGb3JSYW5nZShmcm9tLCB0bywgZnJvbUdseXBoLCBnbHlw
aExlbmd0aCk7Ci0gICAgICAgIGlmIChmcm9tR2x5cGggPCAwIHx8IGdseXBoTGVuZ3RoIDw9IDAp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoZmlsbCkgewotICAgICAgICAg
ICAgY29udHJvbGxlci5mb250UGxhdGZvcm1EYXRhRm9yU2NyaXB0UnVuKCktPnNldHVwUGFpbnQo
JmZpbGxQYWludCk7Ci0gICAgICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmFkanVzdFRl
eHRSZW5kZXJNb2RlKCZmaWxsUGFpbnQpOwotICAgICAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5k
cmF3UG9zVGV4dChjb250cm9sbGVyLmdseXBocygpICsgZnJvbUdseXBoLCBnbHlwaExlbmd0aCA8
PCAxLCBjb250cm9sbGVyLnBvc2l0aW9ucygpICsgZnJvbUdseXBoLCBmaWxsUGFpbnQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHN0cm9rZSkgewotICAgICAgICAgICAgY29udHJvbGxlci5m
b250UGxhdGZvcm1EYXRhRm9yU2NyaXB0UnVuKCktPnNldHVwUGFpbnQoJnN0cm9rZVBhaW50KTsK
LSAgICAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRqdXN0VGV4dFJlbmRlck1vZGUo
JnN0cm9rZVBhaW50KTsKLSAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1Bvc1RleHQo
Y29udHJvbGxlci5nbHlwaHMoKSArIGZyb21HbHlwaCwgZ2x5cGhMZW5ndGggPDwgMSwgY29udHJv
bGxlci5wb3NpdGlvbnMoKSArIGZyb21HbHlwaCwgc3Ryb2tlUGFpbnQpOwotICAgICAgICB9Ci0g
ICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1
biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAv
KiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKQEAgLTIyNSwx
NSArMTkyLDEwIEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChH
cmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0CiAKIGZsb2F0IEZvbnQ6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogLyogZmFsbGJhY2tGb250cyAqLywgR2x5cGhPdmVyZmxvdyogLyogZ2x5
cGhPdmVyZmxvdyAqLykgY29uc3QKIHsKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiAgICAgSGFyZkJ1
enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CiAgICAgaWYgKCFzaGFwZXIuc2hhcGUoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNoYXBlci50b3RhbFdpZHRoKCk7Ci0jZWxzZQot
ICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgMCwgMCk7Ci0g
ICAgcmV0dXJuIGNvbnRyb2xsZXIud2lkdGhPZkZ1bGxSdW4oKTsKLSNlbmRpZgogfQogCiAvLyBS
ZXR1cm4gdGhlIGNvZGUgcG9pbnQgaW5kZXggZm9yIHRoZSBnaXZlbiB8eHwgb2Zmc2V0IGludG8g
dGhlIHRleHQgcnVuLgpAQCAtMjQ0LDE5ICsyMDYsMTAgQEAgaW50IEZvbnQ6Om9mZnNldEZvclBv
c2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsCiAg
ICAgLy8gdG8gRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4gQnVnIGh0dHA6Ly93ZWJraXQub3Jn
L2IvNDA2NzMgdHJhY2tzIGZpeGluZyB0aGlzIHByb2JsZW0uCiAgICAgaW50IHRhcmdldFggPSBz
dGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7CiAKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiAgICAgSGFy
ZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CiAgICAgaWYgKCFzaGFwZXIuc2hhcGUoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNoYXBlci5vZmZzZXRGb3JQb3NpdGlvbih0
YXJnZXRYKTsKLSNlbHNlCi0gICAgLy8gKE1hYyBjb2RlIGlnbm9yZXMgaW5jbHVkZVBhcnRpYWxH
bHlwaHMsIGFuZCB0aGV5IGRvbid0IGtub3cgd2hhdCBpdCdzCi0gICAgLy8gc3VwcG9zZWQgdG8g
ZG8sIHNvIHdlIGp1c3QgaWdub3JlIGl0IGFzIHdlbGwuKQotICAgIENvbXBsZXhUZXh0Q29udHJv
bGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgMCwgMCk7Ci0gICAgaWYgKHJ1bi5ydGwoKSkKLSAg
ICAgICAgY29udHJvbGxlci5zZXR1cEZvclJUTCgpOwotICAgIHJldHVybiBjb250cm9sbGVyLm9m
ZnNldEZvclBvc2l0aW9uKHRhcmdldFgpOwotI2VuZGlmCiB9CiAKIC8vIFJldHVybiB0aGUgcmVj
dGFuZ2xlIGZvciBzZWxlY3RpbmcgdGhlIGdpdmVuIHJhbmdlIG9mIGNvZGUtcG9pbnRzIGluIHRo
ZSBUZXh0UnVuLgpAQCAtMjY0LDE3ICsyMTcsMTAgQEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAogewotI2lmIFVTRShIQVJGQlVaWl9ORykKICAgICBIYXJmQnV6
elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoIXNoYXBlci5zaGFwZSgpKQogICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAgICAgcmV0dXJuIHNoYXBlci5zZWxlY3Rpb25SZWN0
KHBvaW50LCBoZWlnaHQsIGZyb20sIHRvKTsKLSNlbHNlCi0gICAgQ29tcGxleFRleHRDb250cm9s
bGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCAwLCAwKTsKLSAgICBpZiAocnVuLnJ0bCgpKQotICAg
ICAgICBjb250cm9sbGVyLnNldHVwRm9yUlRMKCk7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIuc2Vs
ZWN0aW9uUmVjdChwb2ludCwgaGVpZ2h0LCBmcm9tLCB0byk7Ci0jZW5kaWYKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5j
cHAKaW5kZXggZDEwNjExYTlmOTA0ODU0ZDNlM2Q0NDc5OWFiYmQ0NjBjY2M1ZDdhNS4uY2VmODNh
MjI2MjUzMjhhODkwOWM5OWY5MGFmNmNlMjYwY2RmOGZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250
UGxhdGZvcm1EYXRhSGFyZkJ1enouY3BwCkBAIC0zOCwxMSArMzgsNyBAQAogI2luY2x1ZGUgIlNr
UGFpbnQuaCIKICNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCiAKLSNpZiBVU0UoSEFSRkJVWlpfTkcp
CiAjaW5jbHVkZSAiSGFyZkJ1enpOR0ZhY2UuaCIKLSNlbHNlCi0jaW5jbHVkZSAiSGFyZkJ1enpT
a2lhLmgiCi0jZW5kaWYKIAogI2luY2x1ZGUgPHB1YmxpYy9saW51eC9XZWJGb250SW5mby5oPgog
I2luY2x1ZGUgPHB1YmxpYy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuaD4KQEAgLTI3Myw3ICsy
NjksNiBAQCBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpIGNvbnN0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi0jaWYgVVNFKEhBUkZCVVpaX05HKQogSGFyZkJ1enpOR0ZhY2Uq
IEZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hh
cmZidXp6RmFjZSkKQEAgLTI4MSwxNSArMjc2LDYgQEAgSGFyZkJ1enpOR0ZhY2UqIEZvbnRQbGF0
Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpIGNvbnN0CiAKICAgICByZXR1cm4gbV9oYXJmYnV6ekZh
Y2UuZ2V0KCk7CiB9Ci0jZWxzZQotSGFyZmJ1enpGYWNlKiBGb250UGxhdGZvcm1EYXRhOjpoYXJm
YnV6ekZhY2UoKSBjb25zdAotewotICAgIGlmICghbV9oYXJmYnV6ekZhY2UpCi0gICAgICAgIG1f
aGFyZmJ1enpGYWNlID0gSGFyZmJ1enpGYWNlOjpjcmVhdGUoY29uc3RfY2FzdDxGb250UGxhdGZv
cm1EYXRhKj4odGhpcykpOwotCi0gICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdldCgpOwotfQot
I2VuZGlmCiAKIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2Uo
Y29uc3QgY2hhciogZm9udCwgaW50IHNpemVBbmRTdHlsZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJm
QnV6ei5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBs
YXRmb3JtRGF0YUhhcmZCdXp6LmgKaW5kZXggY2ViOGQyMjlhM2E3YTNlOGQ1MTU5MjgwZDhhZWY2
MmZiNTQzOTBhMy4uNmZjZjY1YWQ1NGFiZTExZDU0NzNiYjQ0YTlmNzc1OTQ1MDVjNmIwOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBs
YXRmb3JtRGF0YUhhcmZCdXp6LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgKQEAgLTQ4LDExICs0OCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udERlc2NyaXB0aW9uOwogCi0jaWYgVVNF
KEhBUkZCVVpaX05HKQogY2xhc3MgSGFyZkJ1enpOR0ZhY2U7Ci0jZWxzZQotY2xhc3MgSGFyZmJ1
enpGYWNlOwotI2VuZGlmCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBGb250UGxhdGZv
cm1EYXRhIGlzIHRoZSBoYW5kbGUgd2hpY2ggV2ViS2l0IGhhcyBvbiBhIHNwZWNpZmljIGZhY2Uu
IEEgZmFjZQpAQCAtMTEyLDExICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGRlc2NyaXB0
aW9uKCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFVTRShIQVJGQlVaWl9ORykKICAgICBIYXJmQnV6
ek5HRmFjZSogaGFyZmJ1enpGYWNlKCkgY29uc3Q7Ci0jZWxzZQotICAgIEhhcmZidXp6RmFjZSog
aGFyZmJ1enpGYWNlKCkgY29uc3Q7Ci0jZW5kaWYKIAogICAgIC8vIFRoZSByZXR1cm5lZCBzdHls
ZXMgYXJlIGFsbCBhY3R1YWwgc3R5bGVzIHdpdGhvdXQgRm9udFJlbmRlclN0eWxlOjpOb1ByZWZl
cmVuY2UuCiAgICAgY29uc3QgRm9udFJlbmRlclN0eWxlJiBmb250UmVuZGVyU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlOyB9CkBAIC0xNDQsMTEgKzEzNiw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2Zha2VJdGFsaWM7CiAgICAgRm9udE9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CiAg
ICAgRm9udFJlbmRlclN0eWxlIG1fc3R5bGU7Ci0jaWYgVVNFKEhBUkZCVVpaX05HKQogICAgIG11
dGFibGUgUmVmUHRyPEhhcmZCdXp6TkdGYWNlPiBtX2hhcmZidXp6RmFjZTsKLSNlbHNlCi0gICAg
bXV0YWJsZSBSZWZQdHI8SGFyZmJ1enpGYWNlPiBtX2hhcmZidXp6RmFjZTsKLSNlbmRpZgogCiAg
ICAgU2tUeXBlZmFjZSogaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8U2tUeXBlZmFjZSo+KC0xKTsgfQogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTg4NjdiYjc1N2YyMjQyZThmNDk2
MmY4NzViMWJkZjdhZTk5MTJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZC
dXp6U2tpYS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJIYXJmQnV6elNraWEuaCIKLQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9y
bURhdGEuaCIKLQotI2luY2x1ZGUgIlNrRm9udEhvc3QuaCIKLSNpbmNsdWRlICJTa1BhaW50Lmgi
Ci0jaW5jbHVkZSAiU2tQYXRoLmgiCi0jaW5jbHVkZSAiU2tQb2ludC5oIgotI2luY2x1ZGUgIlNr
UmVjdC5oIgotI2luY2x1ZGUgIlNrVXRpbHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+Ci0KLWV4dGVybiAiQyIgewotI2luY2x1ZGUg
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
LSAgICAvLyBJZiBIYXJmYnV6eiBzcGVjaWZpZWQgYSAwIGJ1ZmZlciB0aGVuIGl0J3MgYXNraW5n
IGZvciB0aGUgc2l6ZSBvZiB0aGUgdGFibGUuCi0gICAgaWYgKCFidWZmZXIpIHsKLSAgICAgICAg
KmxlbiA9IHRhYmxlU2l6ZTsKLSAgICAgICAgcmV0dXJuIEhCX0Vycl9PazsKLSAgICB9Ci0KLSAg
ICBpZiAoKmxlbiA8IHRhYmxlU2l6ZSkKLSAgICAgICAgcmV0dXJuIEhCX0Vycl9JbnZhbGlkX0Fy
Z3VtZW50OwotICAgIFNrRm9udEhvc3Q6OkdldFRhYmxlRGF0YShmb250LT51bmlxdWVJRCgpLCB0
YWcsIDAsIHRhYmxlU2l6ZSwgYnVmZmVyKTsKLSAgICByZXR1cm4gSEJfRXJyX09rOwotfQotCi10
eXBlZGVmIHBhaXI8SEJfRmFjZVJlY18qLCB1bnNpZ25lZD4gRmFjZUNhY2hlRW50cnk7Ci10eXBl
ZGVmIEhhc2hNYXA8dW5zaWduZWQgaW50LCBGYWNlQ2FjaGVFbnRyeSwgV1RGOjpJbnRIYXNoPHVu
c2lnbmVkIGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQg
aW50PiA+IEhhcmZidXp6RmFjZUNhY2hlOwotc3RhdGljIEhhcmZidXp6RmFjZUNhY2hlKiBnSGFy
ZmJ1enpGYWNlQ2FjaGUgPSAwOwotCi1zdGF0aWMgSEJfRmFjZVJlY18qIGdldENhY2hlZEhhcmZi
dXp6RmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEpCi17Ci0gICAgaWYgKCFnSGFy
ZmJ1enpGYWNlQ2FjaGUpCi0gICAgICAgIGdIYXJmYnV6ekZhY2VDYWNoZSA9IG5ldyBIYXJmYnV6
ekZhY2VDYWNoZTsKLSAgICBTa0ZvbnRJRCB1bmlxdWVJRCA9IHBsYXRmb3JtRGF0YS0+dW5pcXVl
SUQoKTsKLSAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gZ0hhcmZidXp6
RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlEKTsKLSAgICBpZiAocmVzdWx0ID09IGdIYXJmYnV6ekZh
Y2VDYWNoZS0+ZW5kKCkpIHsKLSAgICAgICAgRmFjZUNhY2hlRW50cnkgZW50cnkoSEJfTmV3RmFj
ZShwbGF0Zm9ybURhdGEsIGhhcmZidXp6U2tpYUdldFRhYmxlKSwgMSk7Ci0gICAgICAgIGdIYXJm
YnV6ekZhY2VDYWNoZS0+c2V0KHVuaXF1ZUlELCBlbnRyeSk7Ci0gICAgICAgIHJldHVybiBlbnRy
eS5maXJzdDsKLSAgICB9Ci0gICAgKysocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpOwotICAg
IHJldHVybiByZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0OwotfQotCi1zdGF0aWMgdm9pZCByZWxl
YXNlQ2FjaGVkSGFyZmJ1enpGYWNlKFNrRm9udElEIHVuaXF1ZUlEKQotewotICAgIEhhcmZidXp6
RmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmZpbmQodW5p
cXVlSUQpOwotICAgIEFTU0VSVChyZXN1bHQgIT0gZ0hhcmZidXp6RmFjZUNhY2hlLT5lbmQoKSk7
Ci0gICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kID4gMCk7Ci0gICAgLS0ocmVz
dWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+dmFsdWUu
c2Vjb25kKSkgewotICAgICAgICBIQl9GcmVlRmFjZShyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0
KTsKLSAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5yZW1vdmUodW5pcXVlSUQpOwotICAgIH0K
LX0KLQotSGFyZmJ1enpGYWNlOjpIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZv
cm1EYXRhKQotICAgIDogbV91bmlxdWVJRChwbGF0Zm9ybURhdGEtPnVuaXF1ZUlEKCkpCi17Ci0g
ICAgbV9oYXJmYnV6ekZhY2UgPSBnZXRDYWNoZWRIYXJmYnV6ekZhY2UocGxhdGZvcm1EYXRhKTsK
LX0KLQotSGFyZmJ1enpGYWNlOjp+SGFyZmJ1enpGYWNlKCkKLXsKLSAgICByZWxlYXNlQ2FjaGVk
SGFyZmJ1enpGYWNlKG1fdW5pcXVlSUQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6elNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2tpYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTZiNDQzZjEzNjRj
YTc0MzEzODI2Zjk1MTY5YmJmZDI3NWRkOTJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6U2tpYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IEhhcmZCdXp6U2tpYV9oCi0jZGVmaW5lIEhhcmZCdXp6U2tpYV9oCi0KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotc3RydWN0IEhCX0ZhY2VS
ZWNfOwotc3RydWN0IEhCX0ZvbnRfOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZv
bnRQbGF0Zm9ybURhdGE7Ci0KLWNsYXNzIEhhcmZidXp6RmFjZSA6IHB1YmxpYyBSZWZDb3VudGVk
PEhhcmZidXp6RmFjZT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhhcmZidXp6
RmFjZT4gY3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFyZmJ1enpGYWNlKHBsYXRmb3JtRGF0YSkpOwotICAg
IH0KLQotICAgIH5IYXJmYnV6ekZhY2UoKTsKLQotICAgIEhCX0ZhY2VSZWNfKiBmYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9oYXJmYnV6ekZhY2U7IH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBI
YXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSopOwotCi0gICAgdWludDMyX3QgbV91bmlxdWVJ
RDsKLSAgICBIQl9GYWNlUmVjXyogbV9oYXJmYnV6ekZhY2U7Ci19OwotCi0vLyBGSVhNRTogUmVt
b3ZlIHRoaXMgYXN5bW1ldHJpYyBhbGxvYy9mcmVlIGZ1bmN0aW9uLgotLy8gV2UnbGwgcmVtb3Zl
IHRoaXMgb25jZSB3ZSBtb3ZlIHRvIHRoZSBuZXcgSGFyZmJ1enogQVBJLgotSEJfRm9udF8qIGFs
bG9jSGFyZmJ1enpGb250KCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZv
bnREYXRhU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Np
bXBsZUZvbnREYXRhU2tpYS5jcHAKaW5kZXggNGZjMDk4MTI0ODllOGJhM2ZmN2ZmMDNlMDY5ZDcy
ZTk4YzY1YjY5OC4uNDU2YTM2ZjQ4NDg4ZmIxNDUxZmY2NjVlMmU2M2MxYTBiZjEzMWEzZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250
RGF0YVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
U2ltcGxlRm9udERhdGFTa2lhLmNwcApAQCAtMjUxLDcgKzI1MSw3IEBAIGZsb2F0IFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAgICAgcmV0
dXJuIFNrU2NhbGFyVG9GbG9hdCh3aWR0aCk7CiB9CiAKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCisj
aWYgVVNFKEhBUkZCVVpaKQogYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5n
Q2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCAxNzFhZjFiMzQzZWJkNjQyNjNm
NzBmYmJkMTM1M2IzOTNjYzVmNzk0Li5jZDE1YWExOWYwZDhjYWZjMjRlMzIyNzBhY2NmOWUxZjdl
ODAyZjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC0yNDAsNyArMjQw
LDcgQEAKICAgICAgIH1dLAogICAgICAgWyd1c2VfeDExPT0xIG9yIE9TPT0iYW5kcm9pZCInLCB7
CiAgICAgICAgICdmZWF0dXJlX2RlZmluZXMnOiBbCi0gICAgICAgICAgJ1dURl9VU0VfSEFSRkJV
WlpfTkc9MScsCisgICAgICAgICAgJ1dURl9VU0VfSEFSRkJVWlo9MScsCiAgICAgICAgIF0sCiAg
ICAgICB9XSwKICAgICAgIFsnY2hyb21lb3M9PTEnLCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21h
a2UvT3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmluZGV4
IGNiNmRlZTJmZmMxMTA3OThjZWUyOTAzZWRhZjc4OWQyYTBmYzQ1NzIuLjMxZmFhNjUxNjc3OTBm
YTcyMTY3YjYwOWQyNmIyZTI1ODYxNDJjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBAIC0xMzks
NyArMTM5LDcgQEAgZW5kaWYgKCkKIGZpbmRfcGFja2FnZShGcmVldHlwZSAyLjQuMiBSRVFVSVJF
RCkKIGZpbmRfcGFja2FnZShIYXJmQnV6eiAwLjkuMiBSRVFVSVJFRCkKIGFkZF9kZWZpbml0aW9u
cygtRFdURl9VU0VfRlJFRVRZUEU9MSkKLWFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfSEFSRkJV
WlpfTkc9MSkKK2FkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfSEFSRkJVWlo9MSkKIAogaWYgKEVO
QUJMRV9XRUJLSVQyIEFORCBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBzZXQoRU5B
QkxFX1BMVUdJTl9QUk9DRVNTIDEpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cK
aW5kZXggNjNiYTg0YmVjNGEzYTg3NGJjNmU4OTFjNWEyZDExZjg5ODc4N2E1Ni4uMzhiZDY1YzQ2
ZGVhMjk3YmM0NDk0YTkxOTEwNjcxMzRjNDdmYjZjMCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisr
KyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAxLTI4ICBEb21pbmlrIFLDtnR0
c2NoZXMgIDxkb21pbmlrLnJvdHRzY2hlc0BpbnRlbC5jb20+CisKKyAgICAgICAgW0hhcmZCdXp6
XSBSZW1vdmUgdGhlIEhhcmZCdXp6LW9sZCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgwNzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgV1RGX1VTRV9IQVJGQlVaWl9ORyB0byBXVEZf
VVNFX0hBUkZCVVpaIHNpbmNlIHRoZXJlCisgICAgICAgIHdvbid0IGJlIGEgZGlzdGluY3Rpb24g
YmV0d2VlbiBuZyBhbmQgbm9uLW5nIEhhcmZCdXp6IGFmdGVyCisgICAgICAgIHJlbW92aW5nIHRo
ZSBvbGQgY29kZS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlOgor
CiAyMDEzLTAxLTI4ICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBbV0syXSBQdXR0aW5nIFF0V2ViUHJvY2VzcyBpbnRvIGEgY2hyb290ZWQgc2FuZGJveAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185199</attachid>
            <date>2013-01-29 01:39:38 -0800</date>
            <delta_ts>2013-01-30 01:15:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108077-20130129113623.patch</filename>
            <type>text/plain</type>
            <size>59768</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZmNjhhYmY1NTU5ZjQy
MTYyODc4OTZkN2EzNzI2NWNhYTNkOTg0NS4uNGJlZjBjZTExYTkxYjdlOGE5MDQyZjM1ZmI2NGJi
Y2MzMGMzY2U0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEzLTAxLTI5ICBEb21p
bmlrIFLDtnR0c2NoZXMgIDxkb21pbmlrLnJvdHRzY2hlc0BpbnRlbC5jb20+CisKKyAgICAgICAg
W0hhcmZCdXp6XSBSZW1vdmUgdGhlIEhhcmZCdXp6LW9sZCBjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgwNzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIFJlbW92aW5nIHVudXNlZCBvbGQgdmFy
aWFudCBvZiB0aGUgSGFyZkJ1enogY29kZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNo
YW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IFJlbmFt
ZSBXVEZfVVNFX0hBUkZCVVpaX05HIHRvIFdURl9VU0VfSEFSRkJVWloKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6IFJlbW92aW5nIENvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6KiBhbmQgSGFy
ZkJ1enpTa2lhKiBmaWxlcywgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuaDoKKyAgICAgICAgKFNpbXBsZUZvbnREYXRhKTogVVNFKEhBUkZCVVpaX05HKSByZW5h
bWVkIHRvIFVTRShIQVJGQlVaWikuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YSk6IFJlbW92
aW5nIFVTRShIQVJGQlVaWl9ORykgaWZkZWYncy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwOiBSZW1vdmluZyBVU0UoSEFS
RkJVWlpfTkcpIGlmZGVmcy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFj
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFG
cmVlVHlwZS5jcHA6IFVTRShIQVJGQlVaWl9ORykgcmVuYW1lZCB0byBVU0UoSEFSRkJVWlopLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
Q29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6Lmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZC
dXp6LmNwcDogUmVtb3ZpbmcgVVNFKEhBUkZCVVpaX05HKSBpZmRlZnMuCisgICAgICAgIChXZWJD
b3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Zmxv
YXRXaWR0aEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZv
clBvc2l0aW9uRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouY3BwOiBSZW1vdmluZyBVU0UoSEFSRkJVWlpf
TkcpIGlmZGVmcy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6
RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3Jt
RGF0YUhhcmZCdXp6Lmg6IFJlbW92aW5nIFVTRShIQVJGQlVaWl9ORykgaWZkZWZzLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcDog
VVNFKEhBUkZCVVpaX05HKSByZW5hbWVkIHRvIFVTRShIQVJGQlVaWikuCisgICAgICAgIChXZWJD
b3JlKToKKwogMjAxMy0wMS0yOCAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbUmVncmVzc2lvbl0gU2VhcmNoIGFsbCBzb3Vy
Y2VzIHNob3VsZCBub3Qgc2VhcmNoIGFjcm9zcyBzZXJ2aWNlIHByb2plY3RzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCA1NzJkZWJiOWIxYTA3ZGJiMDQ0NDA2ODZkZWE2N2E2N2M4MWVk
N2QxLi41MDFkZWUwZTBjZDljYmE1MDNkMzJkNGZiOWYwYmJlNzhiZWYxYjBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAxLTI5ICBEb21pbmlrIFLD
tnR0c2NoZXMgIDxkb21pbmlrLnJvdHRzY2hlc0BpbnRlbC5jb20+CisKKyAgICAgICAgW0hhcmZC
dXp6XSBSZW1vdmUgdGhlIEhhcmZCdXp6LW9sZCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgwNzcKKworICAgICAgICBSZXZpZXdlZCBieSBC
ZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIFJlbmFtZSBXVEZfVVNFX0hBUkZCVVpaX05HIHRv
IFdURl9VU0VfSEFSRkJVWlogc2luY2UgdGhlcmUKKyAgICAgICAgd29uJ3QgYmUgYSBkaXN0aW5j
dGlvbiBiZXR3ZWVuIG5nIGFuZCBub24tbmcgSGFyZkJ1enogYWZ0ZXIKKyAgICAgICAgcmVtb3Zp
bmcgdGhlIG9sZCBjb2RlLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMy0wMS0y
OCAgTWFyamEgSMO2bHR0w6QgIDxtYXJqYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGFu
IEFQSSBmb3IgcmV0cmlldmluZyBuYXRpdmUgbWVtb3J5IGluZm9ybWF0aW9uIHdpdGhvdXQgZ29p
bmcgdGhyb3VnaCB0aGUgcmVtb3RlIGluc3BlY3RpbmcgcHJvdG9jb2wKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KaW5kZXggOTVhMjNlZDU0YmM1NDM4OWVjZTc5OTJlZGNhMjVkMTQxZjFlMDI1OC4uN2E3Mjlm
NWQ4ZTUzYmNhNjI3ODU3M2QxYTIzN2RmYjc5ODUwNzk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
QEAgLTYsNyArNiw3IEBAIFdFQkNPUkVfQ1NTX1ZBTFVFX0tFWVdPUkRTIDo9ICQoV2ViQ29yZSkv
Y3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4KIAogd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLURXVEZf
VVNFX0ZSRUVUWVBFPTEgXAotCS1EV1RGX1VTRV9IQVJGQlVaWl9ORz0xIFwKKwktRFdURl9VU0Vf
SEFSRkJVWlo9MSBcCiAJLURXVEZfVVNFX1dFQlA9MSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBkNTRlOGRhMWE1NmI4ZjQ2MDY2ZWVjYTM2
ZTcxZjllNWY3ZTgwMzQxLi5lNDMzOGNlOGMxMGFjOGZjNTMwNWU3ZTBkOTkwMGZiNWM2NDhlMzY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC00MDQxLDEzICs0MDQxLDkgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmNwcCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFy
ZkJ1enouaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhh
cmZCdXp6LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9u
dFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2Uu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpO
R0ZhY2VDb3JlVGV4dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmgKaW5kZXggNDFmODAxNWQxM2UyZTU0ZTY5ODYwMjEwMzMyNjQ1
YjlhODJlMzAyOS4uOTdlYTVhMjAxOTBiZGY4YzQxMTY2NDQ1NmZkZjg2MWRhYjViZTk0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5o
CkBAIC0xOTUsNyArMTk1LDcgQEAgcHVibGljOgogICAgIENGRGljdGlvbmFyeVJlZiBnZXRDRlN0
cmluZ0F0dHJpYnV0ZXMoVHlwZXNldHRpbmdGZWF0dXJlcywgRm9udE9yaWVudGF0aW9uKSBjb25z
dDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYm
IE9TKERBUldJTikpIHx8IChQTEFURk9STShXWCkgJiYgT1MoREFSV0lOKSkgfHwgVVNFKEhBUkZC
VVpaX05HKQorI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhE
QVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJTikpIHx8IFVTRShIQVJGQlVaWikK
ICAgICBib29sIGNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFy
Kiwgc2l6ZV90KSBjb25zdDsKICNlbmRpZgogCkBAIC0zMTcsNyArMzE3LDcgQEAgcHJpdmF0ZToK
ICAgICBtdXRhYmxlIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
ID4gbV9DRlN0cmluZ0F0dHJpYnV0ZXM7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykgfHwg
KFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9T
KERBUldJTikpIHx8IFVTRShIQVJGQlVaWl9ORykKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFU
Rk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBMQVRGT1JNKFdYKSAmJiBPUyhEQVJX
SU4pKSB8fCBVU0UoSEFSRkJVWlopCiAgICAgbXV0YWJsZSBPd25QdHI8SGFzaE1hcDxTdHJpbmcs
IGJvb2w+ID4gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQ7CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDZhNjJjNmM3Y2M0NWM4OWNiZDViZTIxZWJlMDFm
NDQxMTk5NTU4NzQuLjhmZTcwNjEyNDg5N2YzMGQ3N2I2ZjliNGRmZDYzOGY2MjY0ZWZkNGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQ
bGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTI5LDkgKzI5LDcgQEAKICNpbmNsdWRlICJGb250
RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJGb250T3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJH
bHlwaEJ1ZmZlci5oIgotI2lmIFVTRShIQVJGQlVaWl9ORykKICNpbmNsdWRlICJIYXJmQnV6ek5H
RmFjZS5oIgotI2VuZGlmCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CkBAIC02Nyw5ICs2NSw3
IEBAIHB1YmxpYzoKIAogICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CiAKLSNpZiBVU0UoSEFSRkJV
WlpfTkcpCiAgICAgSGFyZkJ1enpOR0ZhY2UqIGhhcmZidXp6RmFjZSgpIGNvbnN0OwotI2VuZGlm
CiAKICAgICBib29sIGlzRml4ZWRQaXRjaCgpOwogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KQEAgLTEwNiw5ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX3N5
bnRoZXRpY09ibGlxdWU7CiAgICAgYm9vbCBtX2ZpeGVkV2lkdGg7CiAgICAgY2Fpcm9fc2NhbGVk
X2ZvbnRfdCogbV9zY2FsZWRGb250OwotI2lmIFVTRShIQVJGQlVaWl9ORykKICAgICBtdXRhYmxl
IFJlZlB0cjxIYXJmQnV6ek5HRmFjZT4gbV9oYXJmYnV6ekZhY2U7Ci0jZW5kaWYKIAogcHJpdmF0
ZToKICAgICB2b2lkIGluaXRpYWxpemVXaXRoRm9udEZhY2UoY2Fpcm9fZm9udF9mYWNlX3QqLCBj
b25zdCBGb250RGVzY3JpcHRpb24mID0gRm9udERlc2NyaXB0aW9uKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0
YUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKaW5kZXggMzdmNWQzNTRjNDBjNDE4MTQyZGNi
YmMxZWI5Mjc0MTU3NDYwMzBjMS4uODE2NTA2NTY5MmRjYzYyNWQ5ZjUwZGUwNWYyODkyYzU4NTVm
ZmU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCkBAIC0x
ODYsOSArMTg2LDcgQEAgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0
b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQogICAgICAgICBjYWlyb19zY2FsZWRf
Zm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7CiAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2Nh
bGVkX2ZvbnRfcmVmZXJlbmNlKG90aGVyLm1fc2NhbGVkRm9udCk7CiAKLSNpZiBVU0UoSEFSRkJV
WlpfTkcpCiAgICAgbV9oYXJmYnV6ekZhY2UgPSBvdGhlci5tX2hhcmZidXp6RmFjZTsKLSNlbmRp
ZgogCiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTk2LDE3ICsxOTQsMTMgQEAgRm9udFBsYXRm
b3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIG90aGVyKQogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBvdGhlcikKICAgICA6IG1fZmFsbGJhY2tzKDApCiAgICAgLCBtX3NjYWxl
ZEZvbnQoMCkKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiAgICAgLCBtX2hhcmZidXp6RmFjZShvdGhl
ci5tX2hhcmZidXp6RmFjZSkKLSNlbmRpZgogewogICAgICp0aGlzID0gb3RoZXI7CiB9CiAKIEZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
b3RoZXIsIGZsb2F0IHNpemUpCi0jaWYgVVNFKEhBUkZCVVpaX05HKQogICAgIDogbV9oYXJmYnV6
ekZhY2Uob3RoZXIubV9oYXJmYnV6ekZhY2UpCi0jZW5kaWYKIHsKICAgICAqdGhpcyA9IG90aGVy
OwogCkBAIC0yMjcsNyArMjIxLDYgQEAgRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURh
dGEoKQogICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7CiB9
CiAKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiBIYXJmQnV6ek5HRmFjZSogRm9udFBsYXRmb3JtRGF0
YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKIHsKICAgICBpZiAoIW1faGFyZmJ1enpGYWNlKQpAQCAt
MjM1LDcgKzIyOCw2IEBAIEhhcmZCdXp6TkdGYWNlKiBGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6
ekZhY2UoKSBjb25zdAogCiAgICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdldCgpOwogfQotI2Vu
ZGlmCiAKIGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnRE
YXRhRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKaW5kZXggZTgwMjBmYTBkNTJkODQ5NTFhNmM2
MTkxYzM3ODBmYWE5MjFkMDRjMC4uNTk0MmZiMmQwMzBkZDQyZmQxYTQ1M2E4OTc4ZTQ1ZmVmOGQz
MDQyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKQEAgLTE1Niw3
ICsxNTYsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiB3OyAgICAKIH0KIAotI2lmIFVTRShIQVJGQlVa
Wl9ORykKKyNpZiBVU0UoSEFSRkJVWlopCiBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCkgY29uc3QKIHsKICAgICBpZiAoIW1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VT
dXBwb3J0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enouY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enou
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTRkODcyMGM0MzdlNjBjMDE5YzRi
NjZjNmU5OTM1NmZjZDE3ZjFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBs
ZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxMCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
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
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlckhh
cmZCdXp6LmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250LmgiCi0j
aW5jbHVkZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVGV4
dFJ1bi5oIgotCi0jaWYgT1MoQU5EUk9JRCkKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNs
dWRlICJTa1R5cGVmYWNlX2FuZHJvaWQuaCIKLSNlbmRpZgotCi1leHRlcm4gIkMiIHsKLSNpbmNs
dWRlICJoYXJmYnV6ei11bmljb2RlLmgiCi19Ci0KLSNpbmNsdWRlIDx1bmljb2RlL25vcm1senIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBIYXJmYnV6eiB1c2VzIDI2LjYgZml4ZWQg
cG9pbnQgdmFsdWVzIGZvciBwaXhlbCBvZmZzZXRzLiBIb3dldmVyLCB3ZSBkb24ndAotLy8gaGFu
ZGxlIHN1YnBpeGVsIHBvc2l0aW9uaW5nIHNvIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0cnVu
Y2F0ZSBIYXJmYnV6egotLy8gdmFsdWVzIHRvIGEgbnVtYmVyIG9mIHBpeGVscy4KLXN0YXRpYyBp
bnQgdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKEhCX0ZpeGVkIHZhbHVlKQotewotICAgIHJl
dHVybiB2YWx1ZSA+PiA2OwotfQotCi1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0
Q29udHJvbGxlcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCBzdGFy
dGluZ1gsIGludCBzdGFydGluZ1kpCi0gICAgOiBIYXJmQnV6elNoYXBlckJhc2UoZm9udCwgcnVu
KQotewotICAgIE5vcm1hbGl6ZU1vZGUgbW9kZSA9IG1fcnVuLnJ0bCgpID8gTm9ybWFsaXplTWly
cm9yQ2hhcnMgOiBEb05vdE5vcm1hbGl6ZU1pcnJvckNoYXJzOwotICAgIHNldE5vcm1hbGl6ZWRC
dWZmZXIobW9kZSk7Ci0KLSAgICBtZW1zZXQoJm1faXRlbSwgMCwgc2l6ZW9mKG1faXRlbSkpOwot
ICAgIC8vIFdlIGNhbm5vdCBrbm93LCBhaGVhZCBvZiB0aW1lLCBob3cgbWFueSBnbHlwaHMgYSBn
aXZlbiBzY3JpcHQgcnVuCi0gICAgLy8gd2lsbCBwcm9kdWNlLiBXZSB0YWtlIGEgZ3Vlc3MgdGhh
dCBzY3JpcHQgcnVucyB3aWxsIG5vdCBwcm9kdWNlIG1vcmUKLSAgICAvLyB0aGFuIHR3aWNlIGFz
IG1hbnkgZ2x5cGhzIGFzIHRoZXJlIGFyZSBjb2RlIHBvaW50cyBwbHVzIGEgYml0IG9mCi0gICAg
Ly8gcGFkZGluZyBhbmQgZmFsbGJhY2sgaWYgd2UgZmluZCB0aGF0IHdlIGFyZSB3cm9uZy4KLSAg
ICBjcmVhdGVHbHlwaEFycmF5cygobV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoICsgMikgKiAyKTsK
LQotICAgIG1faXRlbS5mYWNlID0gMDsKLSAgICBtX2l0ZW0uZm9udCA9IGFsbG9jSGFyZmJ1enpG
b250KCk7Ci0KLSAgICBtX2l0ZW0uaXRlbS5iaWRpTGV2ZWwgPSBtX3J1bi5ydGwoKTsKLQotICAg
IG1faXRlbS5zdHJpbmcgPSBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCk7Ci0gICAgbV9pdGVtLnN0
cmluZ0xlbmd0aCA9IG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKLQotICAgIHJlc2V0KHN0YXJ0
aW5nWCk7Ci0gICAgbV9zdGFydGluZ1kgPSBzdGFydGluZ1k7Ci0KLSAgICBzZXRQYWRkaW5nKG1f
cnVuLmV4cGFuc2lvbigpKTsKLX0KLQotQ29tcGxleFRleHRDb250cm9sbGVyOjp+Q29tcGxleFRl
eHRDb250cm9sbGVyKCkKLXsKLSAgICBmYXN0RnJlZShtX2l0ZW0uZm9udCk7Ci0gICAgZGVsZXRl
R2x5cGhBcnJheXMoKTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnJlc2V0KGlu
dCBvZmZzZXQpCi17Ci0gICAgbV9pbmRleE9mTmV4dFNjcmlwdFJ1biA9IDA7Ci0gICAgbV9vZmZz
ZXRYID0gb2Zmc2V0OwotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0dXBGb3JS
VEwoKQotewotICAgIGludCBwYWRkaW5nID0gbV9wYWRkaW5nOwotICAgIC8vIEZJWE1FOiB0aGlz
IGNhdXNlcyB1cyB0byBzaGFwZSB0aGUgdGV4dCB0d2ljZSAtLSBvbmNlIHRvIGNvbXB1dGUgdGhl
IHdpZHRoIGFuZCB0aGVuIGFnYWluCi0gICAgLy8gYmVsb3cgd2hlbiBhY3R1YWxseSByZW5kZXJp
bmcuIENoYW5nZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgdG8gbWF0Y2ggcGxhdGZvcm0vbWFjIGFu
ZAotICAgIC8vIHBsYXRmb3JtL2Nocm9taXVtL3dpbiBieSBoYXZpbmcgaXQgc3RvcmUgdGhlIHNo
YXBlZCBydW5zLCBzbyB3ZSBjYW4gcmV1c2UgdGhlIHJlc3VsdHMuCi0gICAgcmVzZXQobV9vZmZz
ZXRYICsgd2lkdGhPZkZ1bGxSdW4oKSk7Ci0gICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHBhZGRp
bmcgYWdhaW4gYmVjYXVzZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgbGF5b3V0IGNvbnN1bWVkIHRo
ZSB2YWx1ZS4KLSAgICAvLyBGaXhpbmcgdGhlIGFib3ZlIHByb2JsZW0gd291bGQgaGVscCBoZXJl
IHRvby4KLSAgICBzZXRQYWRkaW5nKHBhZGRpbmcpOwotfQotCi0vLyBBZHZhbmNlIHRvIHRoZSBu
ZXh0IHNjcmlwdCBydW4sIHJldHVybmluZyBmYWxzZSB3aGVuIHRoZSBlbmQgb2YgdGhlCi0vLyBU
ZXh0UnVuIGhhcyBiZWVuIHJlYWNoZWQuCi1ib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6bmV4
dFNjcmlwdFJ1bigpCi17Ci0gICAgLy8gRW5zdXJlIHdlJ3JlIG5vdCBwb2ludGluZyBhdCB0aGUg
c21hbGwgY2FwcyBidWZmZXIuCi0gICAgbV9pdGVtLnN0cmluZyA9IG1fbm9ybWFsaXplZEJ1ZmZl
ci5nZXQoKTsKLQotICAgIGlmICghaGJfdXRmMTZfc2NyaXB0X3J1bl9uZXh0KDAsICZtX2l0ZW0u
aXRlbSwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgs
ICZtX2luZGV4T2ZOZXh0U2NyaXB0UnVuKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gSXQgaXMgYWN0dWFsbHkgd3JvbmcgdG8gY29uc2lkZXIgc2NyaXB0IHJ1bnMgYXQgYWxsIGlu
IHRoaXMgY29kZS4KLSAgICAvLyBPdGhlciBXZWJLaXQgY29kZSAoZS5nLiBNYWMpIHNlZ21lbnRz
IGNvbXBsZXggdGV4dCBqdXN0IGJ5IGZpbmRpbmcKLSAgICAvLyB0aGUgbG9uZ2VzdCBzcGFuIG9m
IHRleHQgY292ZXJlZCBieSBhIHNpbmdsZSBmb250LgotICAgIC8vIEJ1dCB3ZSBjdXJyZW50bHkg
bmVlZCB0byBjYWxsIGhiX3V0ZjE2X3NjcmlwdF9ydW5fbmV4dCBhbnl3YXkgdG8gZmlsbAotICAg
IC8vIGluIHRoZSBoYXJmYnV6eiBkYXRhIHN0cnVjdHVyZXMgdG8gZS5nLiBwaWNrIHRoZSBjb3Jy
ZWN0IHNjcmlwdCdzIHNoYXBlci4KLSAgICAvLyBTbyB3ZSBhbGxvdyB0aGF0IHRvIHJ1biBmaXJz
dCwgdGhlbiBkbyBhIHNlY29uZCBwYXNzIG92ZXIgdGhlIHJhbmdlIGl0Ci0gICAgLy8gZm91bmQg
YW5kIHRha2UgdGhlIGxhcmdlc3Qgc3VicmVnaW9uIHRoYXQgc3RheXMgd2l0aGluIGEgc2luZ2xl
IGZvbnQuCi0gICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKHN0YXRp
Y19jYXN0PGNvbnN0IFVDaGFyKj4oJm1faXRlbS5zdHJpbmdbbV9pdGVtLml0ZW0ucG9zXSksIDAs
IHN0YXRpY19jYXN0PGludD4obV9pdGVtLml0ZW0ubGVuZ3RoKSwgc3RhdGljX2Nhc3Q8aW50Piht
X2l0ZW0uaXRlbS5sZW5ndGgpKTsKLSAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAgICB1bnNpZ25l
ZCBjbHVzdGVyTGVuZ3RoID0gMDsKLSAgICBpZiAoIWl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVy
LCBjbHVzdGVyTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fY3VycmVudEZv
bnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSku
Zm9udERhdGE7Ci0gICAgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsKLSAgICB3aGls
ZSAoaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKSB7Ci0gICAgICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZv
ckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKLSAgICAgICAgaWYgKG5leHRG
b250RGF0YSAhPSBtX2N1cnJlbnRGb250RGF0YSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOwotICAgIH0KLSAgICBtX2l0ZW0uaXRl
bS5sZW5ndGggPSBpdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7Ci0gICAgbV9pbmRleE9mTmV4
dFNjcmlwdFJ1biA9IG1faXRlbS5pdGVtLnBvcyArIGl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIo
KTsKLQotICAgIHNldHVwRm9udEZvclNjcmlwdFJ1bigpOwotICAgIHNoYXBlR2x5cGhzKCk7Ci0g
ICAgc2V0R2x5cGhQb3NpdGlvbnMocnRsKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWZs
b2F0IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6d2lkdGhPZkZ1bGxSdW4oKQotewotICAgIGZsb2F0
IHdpZHRoU3VtID0gMDsKLSAgICB3aGlsZSAobmV4dFNjcmlwdFJ1bigpKQotICAgICAgICB3aWR0
aFN1bSArPSB3aWR0aCgpOwotCi0gICAgcmV0dXJuIHdpZHRoU3VtOwotfQotCi1zdGF0aWMgdm9p
ZCBzZXR1cEZvbnRGZWF0dXJlcyhjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBzZXR0aW5ncywg
SEJfRmFjZVJlY18qIGhiRmFjZSkKLXsKLSAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaGJGYWNlLT5nc3ViKQotICAgICAgICBIQl9HU1VCX0NsZWFyX0ZlYXR1
cmVzKGhiRmFjZS0+Z3N1Yik7Ci0gICAgaWYgKGhiRmFjZS0+Z3BvcykKLSAgICAgICAgSEJfR1BP
U19DbGVhcl9GZWF0dXJlcyhoYkZhY2UtPmdwb3MpOwotCi0gICAgSEJfVVNob3J0IHNjcmlwdElu
ZGV4ID0gMDsKLSAgICBIQl9HU1VCX1NlbGVjdF9TY3JpcHQoaGJGYWNlLT5nc3ViLCBIQl9NQUtF
X1RBRygnRCcsICdGJywgJ0wnLCAnVCcpLCAmc2NyaXB0SW5kZXgpOwotICAgIHNpemVfdCBudW1G
ZWF0dXJlcyA9IHNldHRpbmdzLT5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1GZWF0dXJlczsgKytpKSB7Ci0gICAgICAgIGlmICghc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSEJfVVNob3J0IGZlYXR1cmVJbmRleCA9
IDA7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiB0YWcgPSBzZXR0aW5ncy0+YXQoaSkudGFnKCkuY2hh
cmFjdGVycygpOwotICAgICAgICBIQl9VSW50IGZlYXR1cmUgPSBIQl9NQUtFX1RBRyh0YWdbMF0s
IHRhZ1sxXSwgdGFnWzJdLCB0YWdbM10pOwotICAgICAgICBpZiAoaGJGYWNlLT5nc3ViICYmIEhC
X0dTVUJfU2VsZWN0X0ZlYXR1cmUoaGJGYWNlLT5nc3ViLCBmZWF0dXJlLCBzY3JpcHRJbmRleCwg
MHhmZmZmLCAmZmVhdHVyZUluZGV4KSA9PSBIQl9FcnJfT2spCi0gICAgICAgICAgICBIQl9HU1VC
X0FkZF9GZWF0dXJlKGhiRmFjZS0+Z3N1YiwgZmVhdHVyZUluZGV4LCBzZXR0aW5ncy0+YXQoaSku
dmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGhiRmFjZS0+Z3BvcyAmJiBIQl9HUE9TX1NlbGVj
dF9GZWF0dXJlKGhiRmFjZS0+Z3BvcywgZmVhdHVyZSwgc2NyaXB0SW5kZXgsIDB4ZmZmZiwgJmZl
YXR1cmVJbmRleCkgPT0gSEJfRXJyX09rKQotICAgICAgICAgICAgSEJfR1BPU19BZGRfRmVhdHVy
ZShoYkZhY2UtPmdwb3MsIGZlYXR1cmVJbmRleCwgc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCkpOwot
ICAgIH0KLX0KLQotc3RhdGljIFVDaGFyMzIgc3Vycm9nYXRlUGFpckF3YXJlRmlyc3RDaGFyYWN0
ZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAo
VTE2X0lTX1NVUlJPR0FURShjaGFyYWN0ZXJzWzBdKSkgewotICAgICAgICBpZiAoIVUxNl9JU19T
VVJST0dBVEVfTEVBRChjaGFyYWN0ZXJzWzBdKSB8fCBsZW5ndGggPCAyIHx8ICFVMTZfSVNfVFJB
SUwoY2hhcmFjdGVyc1sxXSkpCi0gICAgICAgICAgICByZXR1cm4gJyAnOwotICAgICAgICByZXR1
cm4gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGNoYXJhY3RlcnNbMF0sIGNoYXJhY3RlcnNbMV0pOwot
ICAgIH0KLSAgICByZXR1cm4gY2hhcmFjdGVyc1swXTsKLX0KLQotY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSogQ29tcGxleFRleHRDb250cm9sbGVyOjpnZXRDb21wbGV4Rm9udFBsYXRmb3JtRGF0YSgp
Ci17Ci0jaWYgT1MoQU5EUk9JRCkKLSAgICAvLyBUaGVyZSBhcmUgMiBraW5kcyBvZiBmb250IG9u
IEFuZHJvaWQ6IHN5c3RlbSBmb250cyBhbmQgZmFsbGJhY2sgZm9udHMuCi0gICAgLy8gU3lzdGVt
IGZvbnRzIGhhdmUgYSBuYW1lLCBhbmQgYXJlIGFjY2Vzc2libGUgaW4gRm9udFBsYXRmb3JtRGF0
YS4KLSAgICAvLyBGYWxsYmFjayBmb250cyBkbyBub3QgaGF2ZSBzcGVjaWZpYyBuYW1lcywgc28g
dGhleSBhcmUgbm90IGFjY2Vzc2libGUKLSAgICAvLyBmcm9tIFdlYktpdCBkaXJlY3RseS4gVG8g
ZmVlZCBIYXJmYnV6eiwgdXNlIGEgdHJpY2sgdG8gZ2V0IGNvcnJlY3QKLSAgICAvLyBTa1R5cGVm
YWNlIGJhc2VkIG9uIHNjcmlwdC4KLSAgICBGYWxsYmFja1NjcmlwdHMgZmFsbGJhY2tTY3JpcHQg
PSBrRmFsbGJhY2tTY3JpcHROdW1iZXI7IC8vIGludmFsaWQgc2NyaXB0IHZhbHVlLgotICAgIHN3
aXRjaCAobV9pdGVtLml0ZW0uc2NyaXB0KSB7Ci0gICAgY2FzZSBIQl9TY3JpcHRfQXJhYmljOgot
ICAgICAgICBmYWxsYmFja1NjcmlwdCA9IGtBcmFiaWNfRmFsbGJhY2tTY3JpcHQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSEJfU2NyaXB0X0FybWVuaWFuOgotICAgICAgICBmYWxsYmFja1Nj
cmlwdCA9IGtBcm1lbmlhbl9GYWxsYmFja1NjcmlwdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBIQl9TY3JpcHRfQmVuZ2FsaToKLSAgICAgICAgZmFsbGJhY2tTY3JpcHQgPSBrQmVuZ2FsaV9G
YWxsYmFja1NjcmlwdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQl9TY3JpcHRfRGV2YW5h
Z2FyaToKLSAgICAgICAgZmFsbGJhY2tTY3JpcHQgPSBrRGV2YW5hZ2FyaV9GYWxsYmFja1Njcmlw
dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQl9TY3JpcHRfR2VvcmdpYW46Ci0gICAgICAg
IGZhbGxiYWNrU2NyaXB0ID0ga0dlb3JnaWFuX0ZhbGxiYWNrU2NyaXB0OwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEhCX1NjcmlwdF9IZWJyZXc6Ci0gICAgICAgIGlmIChtX2ZvbnQtPmZvbnRE
ZXNjcmlwdGlvbigpLndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xkKQotICAgICAgICAgICAgZmFs
bGJhY2tTY3JpcHQgPSBrSGVicmV3Qm9sZF9GYWxsYmFja1NjcmlwdDsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZmFsbGJhY2tTY3JpcHQgPSBrSGVicmV3UmVndWxhcl9GYWxsYmFja1Njcmlw
dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQl9TY3JpcHRfS2FubmFkYToKLSAgICAgICAg
ZmFsbGJhY2tTY3JpcHQgPSBrS2FubmFkYV9GYWxsYmFja1NjcmlwdDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBIQl9TY3JpcHRfTWFsYXlhbGFtOgotICAgICAgICBmYWxsYmFja1NjcmlwdCA9
IGtNYWxheWFsYW1fRmFsbGJhY2tTY3JpcHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSEJf
U2NyaXB0X1RhbWlsOgotICAgICAgICBpZiAobV9mb250LT5mb250RGVzY3JpcHRpb24oKS53ZWln
aHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkKLSAgICAgICAgICAgIGZhbGxiYWNrU2NyaXB0ID0ga1Rh
bWlsQm9sZF9GYWxsYmFja1NjcmlwdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFsbGJh
Y2tTY3JpcHQgPSBrVGFtaWxSZWd1bGFyX0ZhbGxiYWNrU2NyaXB0OwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEhCX1NjcmlwdF9UZWx1Z3U6Ci0gICAgICAgIGZhbGxiYWNrU2NyaXB0ID0ga1Rl
bHVndV9GYWxsYmFja1NjcmlwdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQl9TY3JpcHRf
VGhhaToKLSAgICAgICAgZmFsbGJhY2tTY3JpcHQgPSBrVGhhaV9GYWxsYmFja1NjcmlwdDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
IHJldHVybiBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShtX2ZvbnQtPmZv
bnREZXNjcmlwdGlvbigpLCBTa0dldEZhbGxiYWNrU2NyaXB0SUQoZmFsbGJhY2tTY3JpcHQpLCB0
cnVlKTsKLSNlbHNlCi0gICAgLy8gT25seSBBbmRyb2lkIG5lZWRzIHRoZSBleHRyYSBsb2dpYy4K
LSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6
c2V0dXBGb250Rm9yU2NyaXB0UnVuKCkKLXsKLSAgICBGb250RGF0YVZhcmlhbnQgZm9udERhdGFW
YXJpYW50ID0gQXV0b1ZhcmlhbnQ7Ci0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgc2NyaXB0IHJ1
biBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gc21hbGwgY2Fwcy4KLSAgICAvLyBuZXh0U2NyaXB0
UnVuKCkgd2lsbCBhbHdheXMgc2VuZCB1cyBhIHJ1biBvZiB0aGUgc2FtZSBjYXNlLCBiZWNhdXNl
IGEKLSAgICAvLyBjYXNlIGNoYW5nZSB3aGlsZSBpbiBzbWFsbC1jYXBzIG1vZGUgYWx3YXlzIHJl
c3VsdHMgaW4gZGlmZmVyZW50Ci0gICAgLy8gRm9udERhdGEsIHNvIHdlIG9ubHkgbmVlZCB0byBj
aGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyJ3MgY2FzZS4KLSAgICBpZiAobV9mb250LT5pc1NtYWxs
Q2FwcygpICYmIHVfaXNsb3dlcihtX2l0ZW0uc3RyaW5nW21faXRlbS5pdGVtLnBvc10pKSB7Ci0g
ICAgICAgIG1fc21hbGxDYXBzU3RyaW5nID0gU3RyaW5nKG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQo
KSArIG1faXRlbS5pdGVtLnBvcywgbV9pdGVtLml0ZW0ubGVuZ3RoKTsKLSAgICAgICAgbV9zbWFs
bENhcHNTdHJpbmcubWFrZVVwcGVyKCk7Ci0gICAgICAgIG1faXRlbS5zdHJpbmcgPSBtX3NtYWxs
Q2Fwc1N0cmluZy5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIG1faXRlbS5pdGVtLnBvcyA9IDA7Ci0g
ICAgICAgIGZvbnREYXRhVmFyaWFudCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7Ci0gICAgfQotICAgIGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdldENvbXBsZXhGb250UGxhdGZv
cm1EYXRhKCk7Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEpIHsKLSAgICAgICAgVUNoYXIzMiBjdXJy
ZW50ID0gc3Vycm9nYXRlUGFpckF3YXJlRmlyc3RDaGFyYWN0ZXIoc3RhdGljX2Nhc3Q8Y29uc3Qg
VUNoYXIqPigmbV9pdGVtLnN0cmluZ1ttX2l0ZW0uaXRlbS5wb3NdKSwgbV9pdGVtLml0ZW0ubGVu
Z3RoIC0gbV9pdGVtLml0ZW0ucG9zKTsKLSAgICAgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRh
ID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY3VycmVudCwgZmFsc2UsIGZvbnREYXRh
VmFyaWFudCkuZm9udERhdGE7Ci0gICAgICAgIHBsYXRmb3JtRGF0YSA9ICZmb250RGF0YS0+Zm9u
dERhdGFGb3JDaGFyYWN0ZXIoJyAnKS0+cGxhdGZvcm1EYXRhKCk7Ci0gICAgfQotICAgIG1faXRl
bS5mYWNlID0gcGxhdGZvcm1EYXRhLT5oYXJmYnV6ekZhY2UoKS0+ZmFjZSgpOwotICAgIC8vIFdl
IG9ubHkgbmVlZCB0byBzZXR1cCBmb250IGZlYXR1cmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl
IHJ1bi4KLSAgICBpZiAoIW1faXRlbS5pdGVtLnBvcykKLSAgICAgICAgc2V0dXBGb250RmVhdHVy
ZXMobV9mb250LT5mb250RGVzY3JpcHRpb24oKS5mZWF0dXJlU2V0dGluZ3MoKSwgbV9pdGVtLmZh
Y2UpOwotICAgIHZvaWQqIG9wYXF1ZVBsYXRmb3JtRGF0YSA9IGNvbnN0X2Nhc3Q8Rm9udFBsYXRm
b3JtRGF0YSo+KHBsYXRmb3JtRGF0YSk7Ci0gICAgbV9pdGVtLmZvbnQtPnVzZXJEYXRhID0gb3Bh
cXVlUGxhdGZvcm1EYXRhOwotCi0gICAgaW50IHNpemUgPSBwbGF0Zm9ybURhdGEtPnNpemUoKTsK
LSAgICBtX2l0ZW0uZm9udC0+eF9wcGVtID0gc2l6ZTsKLSAgICBtX2l0ZW0uZm9udC0+eV9wcGVt
ID0gc2l6ZTsKLSAgICAvLyB4XyBhbmQgeV9zY2FsZSBhcmUgdGhlIGNvbnZlcnNpb24gZmFjdG9y
cyBmcm9tIGZvbnQgZGVzaWduIHNwYWNlIChmRW1TaXplKSB0byAxLzY0dGggb2YgZGV2aWNlIHBp
eGVscyBpbiAxNi4xNiBmb3JtYXQuCi0gICAgY29uc3QgaW50IGRldmljZVBpeGVsRnJhY3Rpb24g
PSA2NDsKLSAgICBjb25zdCBpbnQgbXVsdGlwbHlGb3IxNkRvdDE2ID0gMSA8PCAxNjsKLSAgICBp
bnQgc2NhbGUgPSBkZXZpY2VQaXhlbEZyYWN0aW9uICogc2l6ZSAqIG11bHRpcGx5Rm9yMTZEb3Qx
NiAvIHBsYXRmb3JtRGF0YS0+ZW1TaXplSW5Gb250VW5pdHMoKTsKLSAgICBtX2l0ZW0uZm9udC0+
eF9zY2FsZSA9IHNjYWxlOwotICAgIG1faXRlbS5mb250LT55X3NjYWxlID0gc2NhbGU7Ci19Ci0K
LXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpkZWxldGVHbHlwaEFycmF5cygpCi17Ci0gICAg
ZGVsZXRlW10gbV9pdGVtLmdseXBoczsKLSAgICBkZWxldGVbXSBtX2l0ZW0uYXR0cmlidXRlczsK
LSAgICBkZWxldGVbXSBtX2l0ZW0uYWR2YW5jZXM7Ci0gICAgZGVsZXRlW10gbV9pdGVtLm9mZnNl
dHM7Ci0gICAgZGVsZXRlW10gbV9pdGVtLmxvZ19jbHVzdGVyczsKLSAgICBkZWxldGVbXSBtX2ds
eXBoczE2OwotICAgIGRlbGV0ZVtdIG1fcG9zaXRpb25zOwotfQotCi12b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Y3JlYXRlR2x5cGhBcnJheXMoaW50IHNpemUpCi17Ci0gICAgbV9pdGVtLmds
eXBocyA9IG5ldyBIQl9HbHlwaFtzaXplXTsKLSAgICBtX2l0ZW0uYXR0cmlidXRlcyA9IG5ldyBI
Ql9HbHlwaEF0dHJpYnV0ZXNbc2l6ZV07Ci0gICAgbV9pdGVtLmFkdmFuY2VzID0gbmV3IEhCX0Zp
eGVkW3NpemVdOwotICAgIG1faXRlbS5vZmZzZXRzID0gbmV3IEhCX0ZpeGVkUG9pbnRbc2l6ZV07
Ci0gICAgbV9pdGVtLmxvZ19jbHVzdGVycyA9IG5ldyB1bnNpZ25lZCBzaG9ydFtzaXplXTsKLQot
ICAgIG1fZ2x5cGhzMTYgPSBuZXcgdWludDE2X3Rbc2l6ZV07Ci0gICAgbV9wb3NpdGlvbnMgPSBu
ZXcgU2tQb2ludFtzaXplXTsKLQotICAgIG1faXRlbS5udW1fZ2x5cGhzID0gc2l6ZTsKLSAgICBt
X2dseXBoc0FycmF5Q2FwYWNpdHkgPSBzaXplOyAvLyBTYXZlIHRoZSBHbHlwaEFycmF5cyBzaXpl
LgotICAgIHJlc2V0R2x5cGhBcnJheXMoKTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OnJlc2V0R2x5cGhBcnJheXMoKQotewotICAgIGludCBzaXplID0gbV9pdGVtLm51bV9nbHlw
aHM7Ci0gICAgLy8gQWxsIHRoZSB0eXBlcyBoZXJlIGRvbid0IGhhdmUgcG9pbnRlcnMuIEl0IGlz
IHNhZmUgdG8gcmVzZXQgdG8KLSAgICAvLyB6ZXJvIHVubGVzcyBIYXJmYnV6eiBicmVha3MgdGhl
IGNvbXBhdGliaWxpdHkgaW4gdGhlIGZ1dHVyZS4KLSAgICBtZW1zZXQobV9pdGVtLmdseXBocywg
MCwgc2l6ZSAqIHNpemVvZihIQl9HbHlwaCkpOwotICAgIG1lbXNldChtX2l0ZW0uYXR0cmlidXRl
cywgMCwgc2l6ZSAqIHNpemVvZihIQl9HbHlwaEF0dHJpYnV0ZXMpKTsKLSAgICBtZW1zZXQobV9p
dGVtLmFkdmFuY2VzLCAwLCBzaXplICogc2l6ZW9mKEhCX0ZpeGVkKSk7Ci0gICAgbWVtc2V0KG1f
aXRlbS5vZmZzZXRzLCAwLCBzaXplICogc2l6ZW9mKEhCX0ZpeGVkUG9pbnQpKTsKLSAgICBtZW1z
ZXQobV9nbHlwaHMxNiwgMCwgc2l6ZSAqIHNpemVvZih1aW50MTZfdCkpOwotICAgIG1lbXNldCht
X3Bvc2l0aW9ucywgMCwgc2l6ZSAqIHNpemVvZihTa1BvaW50KSk7Ci19Ci0KLXZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpzaGFwZUdseXBocygpCi17Ci0gICAgLy8gSEJfU2hhcGVJdGVtKCkg
cmVzZXRzIG1faXRlbS5udW1fZ2x5cGhzLiBJZiB0aGUgcHJldmlvdXMgY2FsbCB0bwotICAgIC8v
IEhCX1NoYXBlSXRlbSgpIHVzZWQgbGVzcyBzcGFjZSB0aGFuIHdhcyBhdmFpbGFibGUsIHRoZSBj
YXBhY2l0eSBvZgotICAgIC8vIHRoZSBhcnJheSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGN1cnJl
bnQgdmFsdWUgb2YgbV9pdGVtLm51bV9nbHlwaHMuCi0gICAgLy8gU28sIHdlIG5lZWQgdG8gcmVz
ZXQgdGhlIG51bV9nbHlwaHMgdG8gdGhlIGNhcGFjaXR5IG9mIHRoZSBhcnJheS4KLSAgICBtX2l0
ZW0ubnVtX2dseXBocyA9IG1fZ2x5cGhzQXJyYXlDYXBhY2l0eTsKLSAgICByZXNldEdseXBoQXJy
YXlzKCk7Ci0gICAgd2hpbGUgKCFIQl9TaGFwZUl0ZW0oJm1faXRlbSkpIHsKLSAgICAgICAgLy8g
V2Ugb3ZlcmZsb3dlZCBvdXIgYXJyYXlzLiBSZXNpemUgYW5kIHJldHJ5LgotICAgICAgICAvLyBI
Ql9TaGFwZUl0ZW0gZmlsbHMgaW4gbV9pdGVtLm51bV9nbHlwaHMgd2l0aCB0aGUgbmVlZGVkIHNp
emUuCi0gICAgICAgIGRlbGV0ZUdseXBoQXJyYXlzKCk7Ci0gICAgICAgIC8vIFRoZSB8KyAxfCBo
ZXJlIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gSGFyZmJ1eno6IHRoZSBLaG1lcgotICAg
ICAgICAvLyBzaGFwZXIgKGF0IGxlYXN0KSBjYW4gZmFpbCBiZWNhdXNlIG9mIGluc3VmZmljaWVu
dCBnbHlwaCBidWZmZXJzCi0gICAgICAgIC8vIGFuZCByZXF1ZXN0IDAgYWRkaXRpb25hbCBnbHlw
aHM6IHRocm93aW5nIHVzIGludG8gYW4gaW5maW5pdGUKLSAgICAgICAgLy8gbG9vcC4KLSAgICAg
ICAgY3JlYXRlR2x5cGhBcnJheXMobV9pdGVtLm51bV9nbHlwaHMgKyAxKTsKLSAgICB9Ci19Ci0K
LXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXRHbHlwaFBvc2l0aW9ucyhib29sIGlzUlRM
KQotewotICAgIGNvbnN0IGRvdWJsZSBydGxGbGlwID0gaXNSVEwgPyAtMSA6IDE7Ci0gICAgZG91
YmxlIHBvc2l0aW9uID0gMDsKLQotICAgIC8vIGxvZ0NsdXN0ZXJzSW5kZXggaW5kZXhlcyBsb2dD
bHVzdGVycyBmb3IgdGhlIGZpcnN0IGNvZGVwb2ludCBvZiB0aGUgY3VycmVudCBnbHlwaC4KLSAg
ICAvLyBFYWNoIHRpbWUgd2UgYWR2YW5jZSBhIGdseXBoLCB3ZSBza2lwIG92ZXIgYWxsIHRoZSBj
b2RlcG9pbnRzIHRoYXQgY29udHJpYnV0ZWQgdG8gdGhlIGN1cnJlbnQgZ2x5cGguCi0gICAgc2l6
ZV90IGxvZ0NsdXN0ZXJzSW5kZXggPSAwOwotCi0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBn
bHlwaHMgaW4gbG9naWNhbCBvcmRlciwgZmxpcHBpbmcgZm9yIFJUTCB3aGVyZSBuZWNlc3Nhcnku
Ci0gICAgLy8gR2x5cGhzIGFyZSBwb3NpdGlvbmVkIHN0YXJ0aW5nIGZyb20gbV9vZmZzZXRYOyBp
biBSVEwgbW9kZSB0aGV5IGdvIGxlZnR3YXJkcyBmcm9tIHRoZXJlLgotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9pdGVtLm51bV9nbHlwaHM7ICsraSkgewotICAgICAgICB3aGlsZSAobG9n
Q2x1c3RlcnNJbmRleCA8IG1faXRlbS5pdGVtLmxlbmd0aCAmJiBtX2l0ZW0ubG9nX2NsdXN0ZXJz
W2xvZ0NsdXN0ZXJzSW5kZXhdIDwgaSkKLSAgICAgICAgICAgIGxvZ0NsdXN0ZXJzSW5kZXgrKzsK
LQotICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBnbHlwaCBpcyBqdXN0IGFmdGVyIGEgc3BhY2Us
IGFkZCBpbiB0aGUgd29yZCBzcGFjaW5nLgotICAgICAgICBpZiAobG9nQ2x1c3RlcnNJbmRleCA8
IG1faXRlbS5pdGVtLmxlbmd0aCAmJiBpc1dvcmRFbmQobV9pdGVtLml0ZW0ucG9zICsgbG9nQ2x1
c3RlcnNJbmRleCkpCi0gICAgICAgICAgICBwb3NpdGlvbiArPSBkZXRlcm1pbmVXb3JkQnJlYWtT
cGFjaW5nKCk7Ci0KLSAgICAgICAgbV9nbHlwaHMxNltpXSA9IG1faXRlbS5nbHlwaHNbaV07Ci0g
ICAgICAgIGRvdWJsZSBvZmZzZXRYID0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKG1faXRl
bS5vZmZzZXRzW2ldLngpOwotICAgICAgICBkb3VibGUgb2Zmc2V0WSA9IHRydW5jYXRlRml4ZWRQ
b2ludFRvSW50ZWdlcihtX2l0ZW0ub2Zmc2V0c1tpXS55KTsKLSAgICAgICAgZG91YmxlIGFkdmFu
Y2UgPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLmFkdmFuY2VzW2ldKTsKLSAg
ICAgICAgaWYgKGlzUlRMKQotICAgICAgICAgICAgb2Zmc2V0WCAtPSBhZHZhbmNlOwotCi0gICAg
ICAgIG1fcG9zaXRpb25zW2ldLnNldChtX29mZnNldFggKyAocG9zaXRpb24gKiBydGxGbGlwKSAr
IG9mZnNldFgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0aW5nWSArIG9mZnNl
dFkpOwotCi0gICAgICAgIGlmIChtX2N1cnJlbnRGb250RGF0YS0+aXNaZXJvV2lkdGhTcGFjZUds
eXBoKG1fZ2x5cGhzMTZbaV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8g
QXQgdGhlIGVuZCBvZiBlYWNoIGNsdXN0ZXIsIGFkZCBpbiB0aGUgbGV0dGVyIHNwYWNpbmcuCi0g
ICAgICAgIGlmIChpICsgMSA9PSBtX2l0ZW0ubnVtX2dseXBocyB8fCBtX2l0ZW0uYXR0cmlidXRl
c1tpICsgMV0uY2x1c3RlclN0YXJ0KQotICAgICAgICAgICAgcG9zaXRpb24gKz0gbV9sZXR0ZXJT
cGFjaW5nOwotCi0gICAgICAgIHBvc2l0aW9uICs9IGFkdmFuY2U7Ci0gICAgfQotICAgIG1fcGl4
ZWxXaWR0aCA9IHN0ZDo6bWF4KHBvc2l0aW9uLCAwLjApOwotICAgIG1fb2Zmc2V0WCArPSBtX3Bp
eGVsV2lkdGggKiBydGxGbGlwOwotfQotCi1pbnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpnbHlw
aEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4oaW50IHRhcmdldFgpIGNvbnN0Ci17Ci0gICAg
Ly8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBnbHlwaHMgaW4gbG9naWNhbCBvcmRlciwgc2VlaW5nIHdo
ZXRoZXIgdGFyZ2V0WCBmYWxscyBiZXR3ZWVuIHRoZSBwcmV2aW91cwotICAgIC8vIHBvc2l0aW9u
IGFuZCBoYWxmd2F5IHRocm91Z2ggdGhlIGN1cnJlbnQgZ2x5cGguCi0gICAgLy8gRklYTUU6IHRo
aXMgY29kZSBwcm9iYWJseSBiZWxvbmdzIGluIENvbXBsZXhUZXh0Q29udHJvbGxlci4KLSAgICBp
bnQgbGFzdFggPSBvZmZzZXRYKCkgLSAocnRsKCkgPyAtbV9waXhlbFdpZHRoIDogbV9waXhlbFdp
ZHRoKTsKLSAgICBmb3IgKGludCBnbHlwaEluZGV4ID0gMDsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGdseXBoSW5kZXgpIDwgbGVuZ3RoKCk7ICsrZ2x5cGhJbmRleCkgewotICAgICAgICBpbnQgYWR2
YW5jZSA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0uYWR2YW5jZXNbZ2x5cGhJ
bmRleF0pOwotICAgICAgICBpbnQgbmV4dFggPSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9ucygp
W2dseXBoSW5kZXhdLngoKSkgKyBhZHZhbmNlIC8gMjsKLSAgICAgICAgaWYgKHN0ZDo6bWluKG5l
eHRYLCBsYXN0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IHN0ZDo6bWF4KG5leHRYLCBsYXN0
WCkpCi0gICAgICAgICAgICByZXR1cm4gZ2x5cGhJbmRleDsKLSAgICAgICAgbGFzdFggPSBuZXh0
WDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGVuZ3RoKCkgLSAxOwotfQotCi1pbnQgQ29tcGxleFRl
eHRDb250cm9sbGVyOjpvZmZzZXRGb3JQb3NpdGlvbihpbnQgdGFyZ2V0WCkKLXsKLSAgICB1bnNp
Z25lZCBiYXNlUG9zaXRpb24gPSAwOwotCi0gICAgaW50IHggPSBvZmZzZXRYKCk7Ci0gICAgd2hp
bGUgKG5leHRTY3JpcHRSdW4oKSkgewotICAgICAgICBpbnQgbmV4dFggPSBvZmZzZXRYKCk7Ci0K
LSAgICAgICAgaWYgKHN0ZDo6bWluKHgsIG5leHRYKSA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0g
c3RkOjptYXgoeCwgbmV4dFgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgeCB2YWx1ZSBpbiBxdWVz
dGlvbiBpcyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLgotICAgICAgICAgICAgY29uc3QgaW50IGds
eXBoSW5kZXggPSBnbHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4odGFyZ2V0WCk7Ci0K
LSAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBpbmRleCwgd2UgaGF2ZSB0
byB0dXJuIHRoYXQgaW50byBhCi0gICAgICAgICAgICAvLyBjb2RlLXBvaW50IGluZGV4LiBCZWNh
dXNlIG9mIGxpZ2F0dXJlcywgc2V2ZXJhbCBjb2RlLXBvaW50cyBtYXkKLSAgICAgICAgICAgIC8v
IGhhdmUgZ29uZSBpbnRvIGEgc2luZ2xlIGdseXBoLiBXZSBpdGVyYXRlIG92ZXIgdGhlIGNsdXN0
ZXJzIGxvZwotICAgICAgICAgICAgLy8gYW5kIGZpbmQgdGhlIGZpcnN0IGNvZGUtcG9pbnQgd2hp
Y2ggY29udHJpYnV0ZWQgdG8gdGhlIGdseXBoLgotCi0gICAgICAgICAgICAvLyBTb21lIHNoYXBl
cnMgKGkuZS4gS2htZXIpIHdpbGwgcHJvZHVjZSBjbHVzdGVyIGxvZ3Mgd2hpY2ggcmVwb3J0Ci0g
ICAgICAgICAgICAvLyB0aGF0IC9uby8gY29kZSBwb2ludHMgY29udHJpYnV0ZWQgdG8gY2VydGFp
biBnbHlwaHMuIEJlY2F1c2Ugb2YKLSAgICAgICAgICAgIC8vIHRoaXMsIHdlIHRha2UgYW55IGNv
ZGUgcG9pbnQgd2hpY2ggY29udHJpYnV0ZWQgdG8gdGhlIGdseXBoIGluCi0gICAgICAgICAgICAv
LyBxdWVzdGlvbiwgb3IgYW55IHN1YnNlcXVlbnQgZ2x5cGguIElmIHdlIHJ1biBvZmYgdGhlIGVu
ZCwgdGhlbgotICAgICAgICAgICAgLy8gd2UgdGFrZSB0aGUgbGFzdCBjb2RlIHBvaW50LgotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG51bUNvZGVQb2ludHMoKTsgKytqKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKG1faXRlbS5sb2dfY2x1c3RlcnNbal0gPj0gZ2x5cGhJbmRl
eCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VQb3NpdGlvbiArIGo7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBiYXNlUG9zaXRpb24gKyBudW1Db2RlUG9pbnRz
KCkgLSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgYmFzZVBvc2l0aW9uICs9IG51bUNvZGVQb2lu
dHMoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYmFzZVBvc2l0aW9uOwotfQotCi1GbG9hdFJlY3Qg
Q29tcGxleFRleHRDb250cm9sbGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKQotewotICAgIGludCBmcm9tWCA9IC0x
LCB0b1ggPSAtMTsKLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxv
Z2ljYWwgb3JkZXIsIHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25z
IG9mIGludGVyZXN0LgotICAgIHdoaWxlIChuZXh0U2NyaXB0UnVuKCkgJiYgKGZyb21YID09IC0x
IHx8IHRvWCA9PSAtMSkpIHsKLSAgICAgICAgaWYgKGZyb21YID09IC0xICYmIGZyb20gPj0gMCAm
JiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbSkgPCBudW1Db2RlUG9pbnRzKCkpIHsKLSAgICAg
ICAgICAgIC8vIHxmcm9tfCBpcyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLiBTbyB3ZSBpbmRleCB0
aGUgY2x1c3RlcnMgbG9nIHRvCi0gICAgICAgICAgICAvLyBmaW5kIHdoaWNoIGdseXBoIHRoaXMg
Y29kZS1wb2ludCBjb250cmlidXRlZCB0byBhbmQgZmluZCBpdHMgeAotICAgICAgICAgICAgLy8g
cG9zaXRpb24uCi0gICAgICAgICAgICBpbnQgZ2x5cGggPSBtX2l0ZW0ubG9nX2NsdXN0ZXJzW2Zy
b21dOwotICAgICAgICAgICAgZnJvbVggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOwotICAgICAg
ICAgICAgaWYgKHJ0bCgpKQotICAgICAgICAgICAgICAgIGZyb21YICs9IHRydW5jYXRlRml4ZWRQ
b2ludFRvSW50ZWdlcihtX2l0ZW0uYWR2YW5jZXNbZ2x5cGhdKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBmcm9tIC09IG51bUNvZGVQb2ludHMoKTsKLQotICAgICAgICBpZiAodG9YID09
IC0xICYmIHRvID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSA8IG51bUNvZGVQb2lu
dHMoKSkgewotICAgICAgICAgICAgaW50IGdseXBoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1t0b107
Ci0gICAgICAgICAgICB0b1ggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOwotICAgICAgICAgICAg
aWYgKHJ0bCgpKQotICAgICAgICAgICAgICAgIHRvWCArPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0lu
dGVnZXIobV9pdGVtLmFkdmFuY2VzW2dseXBoXSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgdG8gLT0gbnVtQ29kZVBvaW50cygpOwotICAgIH0KLQotICAgIC8vIFRoZSBwb3NpdGlvbiBp
biBxdWVzdGlvbiBtaWdodCBiZSBqdXN0IGFmdGVyIHRoZSB0ZXh0LgotICAgIGlmIChmcm9tWCA9
PSAtMSkKLSAgICAgICAgZnJvbVggPSBvZmZzZXRYKCk7Ci0gICAgaWYgKHRvWCA9PSAtMSkKLSAg
ICAgICAgdG9YID0gb2Zmc2V0WCgpOwotCi0gICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAh
PSAtMSk7Ci0KLSAgICBpZiAoZnJvbVggPCB0b1gpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
cG9pbnQueCgpICsgZnJvbVgsIHBvaW50LnkoKSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7Ci0KLSAg
ICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIHRvWCwgcG9pbnQueSgpLCBmcm9tWCAtIHRv
WCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmdseXBoc0ZvclJh
bmdlKGludCBmcm9tLCBpbnQgdG8sIGludCYgZnJvbUdseXBoLCBpbnQmIGdseXBoTGVuZ3RoKQot
ewotICAgIC8vIENoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiB0aGUgY3VycmVudCBydW4uIFRIRVNF
IE1BWSBOT1QgQkUgSU4gUkFOR0UgYW5kIG1heQotICAgIC8vIGJlIG5lZ2F0aXZlLCBldGMuIFRo
ZSBjb2RlIGJlbG93IGhhbmRsZXMgdGhpcy4KLSAgICBpbnQgZnJvbUNoYXIgPSBmcm9tIC0gbV9p
dGVtLml0ZW0ucG9zOwotICAgIGludCB0b0NoYXIgPSB0byAtIG1faXRlbS5pdGVtLnBvczsKLQot
ICAgIC8vIFNlZSBpZiB0aGVyZSBhcmUgYW55IGNoYXJhY3RlcnMgaW4gdGhlIGN1cnJlbnQgcnVu
LgotICAgIGlmICghbnVtQ29kZVBvaW50cygpIHx8IGZyb21DaGFyID49IHN0YXRpY19jYXN0PGlu
dD4obnVtQ29kZVBvaW50cygpKSB8fCB0b0NoYXIgPD0gMCkgewotICAgICAgICBmcm9tR2x5cGgg
PSAtMTsKLSAgICAgICAgZ2x5cGhMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gQ29tcHV0ZSB0aGUgc3RhcnRpbmcgZ2x5cGggd2l0aGluIHRoaXMgc3Bhbi4gfGZy
b218IGFuZCB8dG98IGFyZQotICAgIC8vIGdsb2JhbCBvZmZzZXRzIHRoYXQgbWF5IGludGVyc2Vj
dCBhcmJpdHJhcmlseSB3aXRoIG91ciBsb2NhbCBydW4uCi0gICAgZnJvbUdseXBoID0gbV9pdGVt
LmxvZ19jbHVzdGVyc1tmcm9tQ2hhciA8IDAgPyAwIDogZnJvbUNoYXJdOwotICAgIGlmICh0b0No
YXIgPj0gc3RhdGljX2Nhc3Q8aW50PihudW1Db2RlUG9pbnRzKCkpKQotICAgICAgICBnbHlwaExl
bmd0aCA9IGxlbmd0aCgpIC0gZnJvbUdseXBoOwotICAgIGVsc2UKLSAgICAgICAgZ2x5cGhMZW5n
dGggPSBtX2l0ZW0ubG9nX2NsdXN0ZXJzW3RvQ2hhcl0gLSBmcm9tR2x5cGg7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJI
YXJmQnV6ei5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzU4YTNjYWJiYmRlZjcy
ZTdlMzVmNzJhZWFmNzY5MDI3ZjM5ODg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enpfaAotI2RlZmluZSBD
b21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6el9oCi0KLSNpbmNsdWRlICJIYXJmQnV6elNoYXBl
ckJhc2UuaCIKLSNpbmNsdWRlICJIYXJmQnV6elNraWEuaCIKLSNpbmNsdWRlICJTa1BvaW50Lmgi
Ci0jaW5jbHVkZSAiU2tTY2FsYXIuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0KLWV4dGVybiAi
QyIgewotI2luY2x1ZGUgImhhcmZidXp6LXNoYXBlci5oIgotfQotCi0jaW5jbHVkZSA8dW5pY29k
ZS91Y2hhci5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250OwotY2xhc3MgRm9u
dFBsYXRmb3JtRGF0YTsKLWNsYXNzIFNpbXBsZUZvbnREYXRhOwotCi0vLyBDb21wbGV4VGV4dENv
bnRyb2xsZXIgd2Fsa3MgYSBUZXh0UnVuIGFuZCBwcmVzZW50cyBlYWNoIHNjcmlwdCBydW4gaW4g
c2VxdWVuY2UuIEEKLS8vIFRleHRSdW4gaXMgYSBzZXF1ZW5jZSBvZiBjb2RlLXBvaW50cyB3aXRo
IHRoZSBzYW1lIGVtYmVkZGluZyBsZXZlbCAoaS5lLiB0aGV5Ci0vLyBhcmUgYWxsIGxlZnQtdG8t
cmlnaHQgb3IgcmlnaHQtdG8tbGVmdCkuIEEgc2NyaXB0IHJ1biBpcyBhIHN1YnNlcXVlbmNlIHdo
ZXJlCi0vLyBhbGwgdGhlIGNoYXJhY3RlcnMgaGF2ZSB0aGUgc2FtZSBzY3JpcHQgKGUuZy4gQXJh
YmljLCBUaGFpIGV0YykuIFNoYXBpbmcgaXMKLS8vIG9ubHkgZXZlciBkb25lIHdpdGggc2NyaXB0
IHJ1bnMgc2luY2UgdGhlIHNoYXBlcnMgb25seSBrbm93IGhvdyB0byBkZWFsIHdpdGgKLS8vIGEg
c2luZ2xlIHNjcmlwdC4KLS8vCi0vLyBJdGVyYXRpb24gaXMgYWx3YXlzIGluIGxvZ2ljYWwgKGFr
YSByZWFkaW5nKSBvcmRlci4gRm9yIFJUTCB0ZXh0IHRoYXQgbWVhbnMKLS8vIHRoZSByaWdodG1v
c3QgcGFydCBvZiB0aGUgdGV4dCB3aWxsIGJlIGZpcnN0LgotLy8KLS8vIE9uY2UgeW91IGhhdmUg
c2V0dXAgdGhlIG9iamVjdCwgY2FsbCB8bmV4dFNjcmlwdFJ1bnwgdG8gZ2V0IHRoZSBmaXJzdCBz
Y3JpcHQKLS8vIHJ1bi4gVGhpcyB3aWxsIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpdGVyYXRpb24g
aXMgY29tcGxldGUuIEF0IGFueSB0aW1lIHlvdQotLy8gY2FuIGNhbGwgfHJlc2V0fCB0byBzdGFy
dCBvdmVyIGFnYWluLgotY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyIDogcHVibGljIEhhcmZC
dXp6U2hhcGVyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0
IEZvbnQqLCBjb25zdCBUZXh0UnVuJiwgaW50IHN0YXJ0aW5nWCwgaW50IHN0YXJ0aW5nWSk7Ci0g
ICAgdmlydHVhbCB+Q29tcGxleFRleHRDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIHJlc2V0KGlu
dCBvZmZzZXQpOwotICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgc2NyaXB0IHJ1biwgcmV0dXJu
aW5nIGZhbHNlIHdoZW4gdGhlIGVuZCBvZiB0aGUKLSAgICAvLyBUZXh0UnVuIGhhcyBiZWVuIHJl
YWNoZWQuCi0gICAgYm9vbCBuZXh0U2NyaXB0UnVuKCk7Ci0gICAgZmxvYXQgd2lkdGhPZkZ1bGxS
dW4oKTsKLQotICAgIHZvaWQgc2V0dXBGb3JSVEwoKTsKLSAgICBib29sIHJ0bCgpIGNvbnN0IHsg
cmV0dXJuIG1fcnVuLnJ0bCgpOyB9Ci0gICAgY29uc3QgdWludDE2X3QqIGdseXBocygpIGNvbnN0
IHsgcmV0dXJuIG1fZ2x5cGhzMTY7IH0KLQotICAgIC8vIFJldHVybiB0aGUgc3RhcnQgaW5kZXgg
YW5kIGxlbmd0aCBvZiBnbHlwaHMgZm9yIHRoZSByYW5nZSBbZnJvbSwgdG8pIGluIHRoZSBjdXJy
ZW50IHNjcmlwdCBydW4uCi0gICAgdm9pZCBnbHlwaHNGb3JSYW5nZShpbnQgZnJvbSwgaW50IHRv
LCBpbnQmIGZyb21HbHlwaCwgaW50JiBnbHlwaExlbmd0aCk7Ci0KLSAgICAvLyBSZXR1cm4gdGhl
IGxlbmd0aCBvZiB0aGUgYXJyYXkgcmV0dXJuZWQgYnkgfGdseXBoc3wKLSAgICB1bnNpZ25lZCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2l0ZW0ubnVtX2dseXBoczsgfQotCi0gICAgLy8gUmV0
dXJuIHRoZSBvZmZzZXQgZm9yIGVhY2ggb2YgdGhlIGdseXBocy4gTm90ZSB0aGF0IHRoaXMgaXMg
dHJhbnNsYXRlZAotICAgIC8vIGJ5IHRoZSBjdXJyZW50IHggb2Zmc2V0IGFuZCB0aGF0IHRoZSB4
IG9mZnNldCBpcyB1cGRhdGVkIGZvciBlYWNoIHNjcmlwdAotICAgIC8vIHJ1bi4KLSAgICBjb25z
dCBTa1BvaW50KiBwb3NpdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uczsgfQotCi0g
ICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gdGhlIGN1cnJlbnQgc2Ny
aXB0IHJ1bgotICAgIHVuc2lnbmVkIG51bUNvZGVQb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2l0
ZW0uaXRlbS5sZW5ndGg7IH0KLQotICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBwaXhlbCBwb3Np
dGlvbiBvZiB0aGUgY29udHJvbGxlci4KLSAgICB1bnNpZ25lZCBvZmZzZXRYKCkgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXRYOyB9Ci0KLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhKiBmb250UGxh
dGZvcm1EYXRhRm9yU2NyaXB0UnVuKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxGb250UGxh
dGZvcm1EYXRhKj4obV9pdGVtLmZvbnQtPnVzZXJEYXRhKTsgfQotCi0gICAgaW50IG9mZnNldEZv
clBvc2l0aW9uKGludCk7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQ
b2ludCYsIGludCBoZWlnaHQsIGludCBmcm9tICwgaW50IHRvKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBSZXR1cm4gdGhlIHdpZHRoIChpbiBweCkgb2YgdGhlIGN1cnJlbnQgc2NyaXB0IHJ1bi4KLSAg
ICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxXaWR0aDsgfQotCi0gICAg
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q29tcGxleEZvbnRQbGF0Zm9ybURhdGEoKTsKLSAg
ICB2b2lkIHNldHVwRm9udEZvclNjcmlwdFJ1bigpOwotICAgIHZvaWQgZGVsZXRlR2x5cGhBcnJh
eXMoKTsKLSAgICB2b2lkIGNyZWF0ZUdseXBoQXJyYXlzKGludCk7Ci0gICAgdm9pZCByZXNldEds
eXBoQXJyYXlzKCk7Ci0gICAgdm9pZCBzaGFwZUdseXBocygpOwotICAgIHZvaWQgc2V0R2x5cGhQ
b3NpdGlvbnMoYm9vbCk7Ci0KLSAgICBpbnQgZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0
UnVuKGludCB0YXJnZXRYKSBjb25zdDsKLQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2N1
cnJlbnRGb250RGF0YTsKLSAgICBIQl9TaGFwZXJJdGVtIG1faXRlbTsKLSAgICB1aW50MTZfdCog
bV9nbHlwaHMxNjsgLy8gQSB2ZWN0b3Igb2YgMTYtYml0IGdseXBoIGlkcy4KLSAgICBTa1BvaW50
KiBtX3Bvc2l0aW9uczsgLy8gQSB2ZWN0b3Igb2YgcG9zaXRpb25zIGZvciBlYWNoIGdseXBoLgot
ICAgIHNzaXplX3QgbV9pbmRleE9mTmV4dFNjcmlwdFJ1bjsgLy8gSW5kZXhlcyB0aGUgc2NyaXB0
IHJ1biBpbiB8bV9ydW58LgotICAgIGludCBtX29mZnNldFg7IC8vIE9mZnNldCBpbiBwaXhlbHMg
dG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHNjcmlwdCBydW4uCi0gICAgaW50IG1fc3RhcnRpbmdZ
OyAvLyBUaGUgWSBzdGFydGluZyBwb2ludCBvZiB0aGUgc2NyaXB0IHJ1bi4KLSAgICB1bnNpZ25l
ZCBtX3BpeGVsV2lkdGg7IC8vIFdpZHRoIChpbiBweCkgb2YgdGhlIGN1cnJlbnQgc2NyaXB0IHJ1
bi4KLSAgICB1bnNpZ25lZCBtX2dseXBoc0FycmF5Q2FwYWNpdHk7IC8vIEN1cnJlbnQgc2l6ZSBv
ZiBhbGwgdGhlIEhhcmZidXp6IGFycmF5cy4KLQotICAgIFN0cmluZyBtX3NtYWxsQ2Fwc1N0cmlu
ZzsgLy8gc3Vic3RyaW5nIG9mIG1fcnVuIGNvbnZlcnRlZCB0byBzbWFsbCBjYXBzLgotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ29tcGxleFRleHRDb250cm9sbGVy
SGFyZkJ1enpfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKaW5kZXggNWM3OTAwNDg4ZDAyYmJjYjQxNzc2
NTc4MGFkNGU2OTNiNjdlN2RiNC4uZWI3MDllMzIxODM1NzFiYTc0YzRlMGZlNDhkMWQzOTRmYmFk
YzQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovRm9udEhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCkBAIC0zMSwxNiArMzEsMTAgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGb250LmgiCiAKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCi0j
aW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKLSNlbHNlCi0jaW5jbHVkZSAiQ29tcGxleFRleHRD
b250cm9sbGVySGFyZkJ1enouaCIKLSNpbmNsdWRlICJIYXJmQnV6elNraWEuaCIKLSNlbmRpZgot
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5o
IgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCkBAIC0xODIsNyArMTc2LDYgQEAgdm9pZCBG
b250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgVGV4dFJ1biYg
cnVuLAogICAgICAgICBzZXR1cEZvclRleHRQYWludGluZygmc3Ryb2tlUGFpbnQsIGdjLT5zdHJv
a2VDb2xvcigpLnJnYigpKTsKICAgICB9CiAKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiAgICAgR2x5
cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1
bik7CiAgICAgc2hhcGVyLnNldERyYXdSYW5nZShmcm9tLCB0byk7CkBAIC0xOTAsMzIgKzE4Myw2
IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0
IFRleHRSdW4mIHJ1biwKICAgICAgICAgcmV0dXJuOwogICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQ
b2ludCA9IHNoYXBlci5hZGp1c3RTdGFydFBvaW50KHBvaW50KTsKICAgICBkcmF3R2x5cGhCdWZm
ZXIoZ2MsIHJ1biwgZ2x5cGhCdWZmZXIsIGFkanVzdGVkUG9pbnQpOwotI2Vsc2UKLSAgICBQbGF0
Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCBwb2ludC54
KCksIHBvaW50LnkoKSk7Ci0gICAgaWYgKHJ1bi5ydGwoKSkKLSAgICAgICAgY29udHJvbGxlci5z
ZXR1cEZvclJUTCgpOwotCi0gICAgd2hpbGUgKGNvbnRyb2xsZXIubmV4dFNjcmlwdFJ1bigpKSB7
Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSBnbHlwaCBmb3VuZCBpbiB0aGUgY3Vy
cmVudCBzY3JpcHQgcnVuLgotICAgICAgICBpbnQgZnJvbUdseXBoLCBnbHlwaExlbmd0aDsKLSAg
ICAgICAgY29udHJvbGxlci5nbHlwaHNGb3JSYW5nZShmcm9tLCB0bywgZnJvbUdseXBoLCBnbHlw
aExlbmd0aCk7Ci0gICAgICAgIGlmIChmcm9tR2x5cGggPCAwIHx8IGdseXBoTGVuZ3RoIDw9IDAp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoZmlsbCkgewotICAgICAgICAg
ICAgY29udHJvbGxlci5mb250UGxhdGZvcm1EYXRhRm9yU2NyaXB0UnVuKCktPnNldHVwUGFpbnQo
JmZpbGxQYWludCk7Ci0gICAgICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmFkanVzdFRl
eHRSZW5kZXJNb2RlKCZmaWxsUGFpbnQpOwotICAgICAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5k
cmF3UG9zVGV4dChjb250cm9sbGVyLmdseXBocygpICsgZnJvbUdseXBoLCBnbHlwaExlbmd0aCA8
PCAxLCBjb250cm9sbGVyLnBvc2l0aW9ucygpICsgZnJvbUdseXBoLCBmaWxsUGFpbnQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHN0cm9rZSkgewotICAgICAgICAgICAgY29udHJvbGxlci5m
b250UGxhdGZvcm1EYXRhRm9yU2NyaXB0UnVuKCktPnNldHVwUGFpbnQoJnN0cm9rZVBhaW50KTsK
LSAgICAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRqdXN0VGV4dFJlbmRlck1vZGUo
JnN0cm9rZVBhaW50KTsKLSAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1Bvc1RleHQo
Y29udHJvbGxlci5nbHlwaHMoKSArIGZyb21HbHlwaCwgZ2x5cGhMZW5ndGggPDwgMSwgY29udHJv
bGxlci5wb3NpdGlvbnMoKSArIGZyb21HbHlwaCwgc3Ryb2tlUGFpbnQpOwotICAgICAgICB9Ci0g
ICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1
biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAv
KiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKQEAgLTIyNSwx
NSArMTkyLDEwIEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChH
cmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0CiAKIGZsb2F0IEZvbnQ6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogLyogZmFsbGJhY2tGb250cyAqLywgR2x5cGhPdmVyZmxvdyogLyogZ2x5
cGhPdmVyZmxvdyAqLykgY29uc3QKIHsKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiAgICAgSGFyZkJ1
enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CiAgICAgaWYgKCFzaGFwZXIuc2hhcGUoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNoYXBlci50b3RhbFdpZHRoKCk7Ci0jZWxzZQot
ICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgMCwgMCk7Ci0g
ICAgcmV0dXJuIGNvbnRyb2xsZXIud2lkdGhPZkZ1bGxSdW4oKTsKLSNlbmRpZgogfQogCiAvLyBS
ZXR1cm4gdGhlIGNvZGUgcG9pbnQgaW5kZXggZm9yIHRoZSBnaXZlbiB8eHwgb2Zmc2V0IGludG8g
dGhlIHRleHQgcnVuLgpAQCAtMjQ0LDE5ICsyMDYsMTAgQEAgaW50IEZvbnQ6Om9mZnNldEZvclBv
c2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsCiAg
ICAgLy8gdG8gRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4gQnVnIGh0dHA6Ly93ZWJraXQub3Jn
L2IvNDA2NzMgdHJhY2tzIGZpeGluZyB0aGlzIHByb2JsZW0uCiAgICAgaW50IHRhcmdldFggPSBz
dGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7CiAKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiAgICAgSGFy
ZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CiAgICAgaWYgKCFzaGFwZXIuc2hhcGUoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNoYXBlci5vZmZzZXRGb3JQb3NpdGlvbih0
YXJnZXRYKTsKLSNlbHNlCi0gICAgLy8gKE1hYyBjb2RlIGlnbm9yZXMgaW5jbHVkZVBhcnRpYWxH
bHlwaHMsIGFuZCB0aGV5IGRvbid0IGtub3cgd2hhdCBpdCdzCi0gICAgLy8gc3VwcG9zZWQgdG8g
ZG8sIHNvIHdlIGp1c3QgaWdub3JlIGl0IGFzIHdlbGwuKQotICAgIENvbXBsZXhUZXh0Q29udHJv
bGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgMCwgMCk7Ci0gICAgaWYgKHJ1bi5ydGwoKSkKLSAg
ICAgICAgY29udHJvbGxlci5zZXR1cEZvclJUTCgpOwotICAgIHJldHVybiBjb250cm9sbGVyLm9m
ZnNldEZvclBvc2l0aW9uKHRhcmdldFgpOwotI2VuZGlmCiB9CiAKIC8vIFJldHVybiB0aGUgcmVj
dGFuZ2xlIGZvciBzZWxlY3RpbmcgdGhlIGdpdmVuIHJhbmdlIG9mIGNvZGUtcG9pbnRzIGluIHRo
ZSBUZXh0UnVuLgpAQCAtMjY0LDE3ICsyMTcsMTAgQEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAogewotI2lmIFVTRShIQVJGQlVaWl9ORykKICAgICBIYXJmQnV6
elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoIXNoYXBlci5zaGFwZSgpKQogICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAgICAgcmV0dXJuIHNoYXBlci5zZWxlY3Rpb25SZWN0
KHBvaW50LCBoZWlnaHQsIGZyb20sIHRvKTsKLSNlbHNlCi0gICAgQ29tcGxleFRleHRDb250cm9s
bGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCAwLCAwKTsKLSAgICBpZiAocnVuLnJ0bCgpKQotICAg
ICAgICBjb250cm9sbGVyLnNldHVwRm9yUlRMKCk7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIuc2Vs
ZWN0aW9uUmVjdChwb2ludCwgaGVpZ2h0LCBmcm9tLCB0byk7Ci0jZW5kaWYKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5j
cHAKaW5kZXggZDEwNjExYTlmOTA0ODU0ZDNlM2Q0NDc5OWFiYmQ0NjBjY2M1ZDdhNS4uNDBlNTY1
MjcyOGQ2NTg3MGJhZjgyNTc2ZmJlOThkZTZmMjE1MDUxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250
UGxhdGZvcm1EYXRhSGFyZkJ1enouY3BwCkBAIC0zMiwxOCArMzIsMTMgQEAKICNpbmNsdWRlICJG
b250UGxhdGZvcm1EYXRhSGFyZkJ1enouaCIKIAogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2lu
Y2x1ZGUgIkhhcmZCdXp6TkdGYWNlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bmNsdWRlICJTa0FkdmFuY2VkVHlwZWZhY2VNZXRyaWNzLmgiCiAjaW5jbHVkZSAiU2tGb250SG9z
dC5oIgogI2luY2x1ZGUgIlNrUGFpbnQuaCIKICNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCiAKLSNp
ZiBVU0UoSEFSRkJVWlpfTkcpCi0jaW5jbHVkZSAiSGFyZkJ1enpOR0ZhY2UuaCIKLSNlbHNlCi0j
aW5jbHVkZSAiSGFyZkJ1enpTa2lhLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgPHB1YmxpYy9saW51
eC9XZWJGb250SW5mby5oPgogI2luY2x1ZGUgPHB1YmxpYy9saW51eC9XZWJGb250UmVuZGVyU3R5
bGUuaD4KICNpbmNsdWRlIDxwdWJsaWMvbGludXgvV2ViU2FuZGJveFN1cHBvcnQuaD4KQEAgLTI3
Myw3ICsyNjgsNiBAQCBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpIGNvbnN0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0jaWYgVVNFKEhBUkZCVVpaX05HKQogSGFyZkJ1enpO
R0ZhY2UqIEZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX2hhcmZidXp6RmFjZSkKQEAgLTI4MSwxNSArMjc1LDYgQEAgSGFyZkJ1enpOR0ZhY2UqIEZv
bnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpIGNvbnN0CiAKICAgICByZXR1cm4gbV9oYXJm
YnV6ekZhY2UuZ2V0KCk7CiB9Ci0jZWxzZQotSGFyZmJ1enpGYWNlKiBGb250UGxhdGZvcm1EYXRh
OjpoYXJmYnV6ekZhY2UoKSBjb25zdAotewotICAgIGlmICghbV9oYXJmYnV6ekZhY2UpCi0gICAg
ICAgIG1faGFyZmJ1enpGYWNlID0gSGFyZmJ1enpGYWNlOjpjcmVhdGUoY29uc3RfY2FzdDxGb250
UGxhdGZvcm1EYXRhKj4odGhpcykpOwotCi0gICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdldCgp
OwotfQotI2VuZGlmCiAKIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6Z2V0UmVuZGVyU3R5bGVGb3JT
dHJpa2UoY29uc3QgY2hhciogZm9udCwgaW50IHNpemVBbmRTdHlsZSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURh
dGFIYXJmQnV6ei5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
Rm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgKaW5kZXggY2ViOGQyMjlhM2E3YTNlOGQ1MTU5Mjgw
ZDhhZWY2MmZiNTQzOTBhMy4uOGZlYTE1NGRhZjViMWEyMDJjZDBiMDBlOGUxZGNiZDAzOTYyOGU1
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
Rm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgKQEAgLTQ3LDEyICs0
Nyw3IEBAIHR5cGVkZWYgdWludDMyX3QgU2tGb250SUQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLQotI2lmIFVTRShIQVJGQlVaWl9ORykKIGNsYXNzIEhh
cmZCdXp6TkdGYWNlOwotI2Vsc2UKLWNsYXNzIEhhcmZidXp6RmFjZTsKLSNlbmRpZgogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRm9udFBsYXRmb3JtRGF0YSBpcyB0aGUgaGFuZGxlIHdo
aWNoIFdlYktpdCBoYXMgb24gYSBzcGVjaWZpYyBmYWNlLiBBIGZhY2UKQEAgLTExMiwxMSArMTA3
LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogI2VuZGlmCiAK
LSNpZiBVU0UoSEFSRkJVWlpfTkcpCiAgICAgSGFyZkJ1enpOR0ZhY2UqIGhhcmZidXp6RmFjZSgp
IGNvbnN0OwotI2Vsc2UKLSAgICBIYXJmYnV6ekZhY2UqIGhhcmZidXp6RmFjZSgpIGNvbnN0Owot
I2VuZGlmCiAKICAgICAvLyBUaGUgcmV0dXJuZWQgc3R5bGVzIGFyZSBhbGwgYWN0dWFsIHN0eWxl
cyB3aXRob3V0IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlLgogICAgIGNvbnN0IEZvbnRS
ZW5kZXJTdHlsZSYgZm9udFJlbmRlclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQpA
QCAtMTQ0LDExICsxMzUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9mYWtlSXRhbGljOwogICAg
IEZvbnRPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOwogICAgIEZvbnRSZW5kZXJTdHlsZSBtX3N0
eWxlOwotI2lmIFVTRShIQVJGQlVaWl9ORykKICAgICBtdXRhYmxlIFJlZlB0cjxIYXJmQnV6ek5H
RmFjZT4gbV9oYXJmYnV6ekZhY2U7Ci0jZWxzZQotICAgIG11dGFibGUgUmVmUHRyPEhhcmZidXp6
RmFjZT4gbV9oYXJmYnV6ekZhY2U7Ci0jZW5kaWYKIAogICAgIFNrVHlwZWZhY2UqIGhhc2hUYWJs
ZURlbGV0ZWRGb250VmFsdWUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFNrVHlw
ZWZhY2UqPigtMSk7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMWU4ODY3YmI3NTdmMjI0MmU4ZjQ5NjJmODc1YjFiZGY3YWU5OTEyZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgR29vZ2xlIElu
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
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSGFyZkJ1
enpTa2lhLmgiCi0KLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0KLSNpbmNsdWRlICJT
a0ZvbnRIb3N0LmgiCi0jaW5jbHVkZSAiU2tQYWludC5oIgotI2luY2x1ZGUgIlNrUGF0aC5oIgot
I2luY2x1ZGUgIlNrUG9pbnQuaCIKLSNpbmNsdWRlICJTa1JlY3QuaCIKLSNpbmNsdWRlICJTa1V0
aWxzLmgiCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgotCi1leHRlcm4gIkMiIHsKLSNpbmNsdWRlICJoYXJmYnV6ei1zaGFwZXIuaCIKLX0K
LQotLy8gVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGNhbGxiYWNrcyB3aGljaCBIYXJmYnV6eiBy
ZXF1aXJlcyBieSB1c2luZyBTa2lhCi0vLyBjYWxscy4gU2VlIHRoZSBIYXJmYnV6eiBzb3VyY2Ug
Zm9yIHJlZmVyZW5jZXMgYWJvdXQgd2hhdCB0aGVzZSBjYWxsYmFja3MgZG8uCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIEhCX0ZpeGVkIFNraWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQo
U2tTY2FsYXIgdmFsdWUpCi17Ci0gICAgLy8gSEJfRml4ZWQgaXMgYSAyNi42IGZpeGVkIHBvaW50
IGZvcm1hdC4KLSAgICByZXR1cm4gdmFsdWUgKiA2NDsKLX0KLQotc3RhdGljIEhCX0Jvb2wgc3Ry
aW5nVG9HbHlwaHMoSEJfRm9udCBoYkZvbnQsIGNvbnN0IEhCX1VDaGFyMTYqIGNoYXJhY3RlcnMs
IGhiX3VpbnQzMiBsZW5ndGgsIEhCX0dseXBoKiBnbHlwaHMsIGhiX3VpbnQzMiogZ2x5cGhzU2l6
ZSwgSEJfQm9vbCBpc1JUTCkKLXsKLSAgICBGb250UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRl
cnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oaGJGb250LT51c2VyRGF0YSk7Ci0gICAgU2tQ
YWludCBwYWludDsKLQotICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKLSAgICBwYWludC5z
ZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7Ci0KLSAgICB1bnNp
Z25lZCBjb2RlcG9pbnRzID0gMDsKLSAgICBmb3IgKGhiX3VpbnQzMiBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgIGlmICghU2tVVEYxNl9Jc0hpZ2hTdXJyb2dhdGUoY2hhcmFjdGVy
c1tpXSkpCi0gICAgICAgICAgICBjb2RlcG9pbnRzKys7Ci0gICAgICAgIGlmIChjb2RlcG9pbnRz
ID4gKmdseXBoc1NpemUpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpbnQg
bnVtR2x5cGhzID0gcGFpbnQudGV4dFRvR2x5cGhzKGNoYXJhY3RlcnMsIGxlbmd0aCAqIHNpemVv
Zih1aW50MTZfdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihnbHlwaHMpKTsKLQotICAg
IC8vIEhCX0dseXBoIGlzIDMyLWJpdCwgYnV0IFNraWEgb3V0cHV0cyBvbmx5IDE2LWJpdCBudW1i
ZXJzLiBTbyBvdXIKLSAgICAvLyB8Z2x5cGhzfCBhcnJheSBuZWVkcyB0byBiZSBjb252ZXJ0ZWQu
Ci0gICAgZm9yIChpbnQgaSA9IG51bUdseXBocyAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAg
IHVpbnQxNl90IHZhbHVlOwotICAgICAgICAvLyBXZSB1c2UgYSBtZW1jcHkgdG8gYXZvaWQgYnJl
YWtpbmcgc3RyaWN0IGFsaWFzaW5nIHJ1bGVzLgotICAgICAgICBtZW1jcHkoJnZhbHVlLCByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihnbHlwaHMpICsgc2l6ZW9mKHVpbnQxNl90KSAqIGksIHNpemVv
Zih1aW50MTZfdCkpOwotICAgICAgICBnbHlwaHNbaV0gPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICAq
Z2x5cGhzU2l6ZSA9IG51bUdseXBoczsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQg
Z2x5cGhzVG9BZHZhbmNlcyhIQl9Gb250IGhiRm9udCwgY29uc3QgSEJfR2x5cGgqIGdseXBocywg
aGJfdWludDMyIG51bUdseXBocywgSEJfRml4ZWQqIGFkdmFuY2VzLCBpbnQgZmxhZ3MpCi17Ci0g
ICAgRm9udFBsYXRmb3JtRGF0YSogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3Jt
RGF0YSo+KGhiRm9udC0+dXNlckRhdGEpOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0KLSAgICBmb250
LT5zZXR1cFBhaW50KCZwYWludCk7Ci0gICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6
OmtHbHlwaElEX1RleHRFbmNvZGluZyk7Ci0KLSAgICBPd25BcnJheVB0cjx1aW50MTZfdD4gZ2x5
cGhzMTYgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50MTZfdFtudW1HbHlwaHNdKTsKLSAgICBpZiAo
IWdseXBoczE2LmdldCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bUdseXBoczsgKytpKQotICAgICAgICBnbHlwaHMxNltpXSA9IGdseXBoc1tpXTsK
LSAgICBwYWludC5nZXRUZXh0V2lkdGhzKGdseXBoczE2LmdldCgpLCBudW1HbHlwaHMgKiBzaXpl
b2YodWludDE2X3QpLCByZWludGVycHJldF9jYXN0PFNrU2NhbGFyKj4oYWR2YW5jZXMpKTsKLQot
ICAgIC8vIFRoZSB8YWR2YW5jZXN8IHZhbHVlcyB3aGljaCBTa2lhIG91dHB1dHMgYXJlIFNrU2Nh
bGFycywgd2hpY2ggYXJlIGZsb2F0cwotICAgIC8vIGluIENocm9taXVtLiBIb3dldmVyLCBIYXJm
YnV6eiB3YW50cyB0aGVtIGluIDI2LjYgZml4ZWQgcG9pbnQgZm9ybWF0LgotICAgIC8vIFRoZXNl
IHR3byBmb3JtYXRzIGFyZSBib3RoIDMyLWJpdHMgbG9uZy4KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgZmxvYXQgdmFsdWU7Ci0gICAgICAg
IC8vIFdlIHVzZSBhIG1lbWNweSB0byBhdm9pZCBicmVha2luZyBzdHJpY3QgYWxpYXNpbmcgcnVs
ZXMuCi0gICAgICAgIG1lbWNweSgmdmFsdWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkdmFu
Y2VzKSArIHNpemVvZihmbG9hdCkgKiBpLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgYWR2YW5j
ZXNbaV0gPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVkKHZhbHVlKTsKLSAgICB9Ci19Ci0KLXN0
YXRpYyBIQl9Cb29sIGNhblJlbmRlcihIQl9Gb250IGhiRm9udCwgY29uc3QgSEJfVUNoYXIxNiog
Y2hhcmFjdGVycywgaGJfdWludDMyIGxlbmd0aCkKLXsKLSAgICBGb250UGxhdGZvcm1EYXRhKiBm
b250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oaGJGb250LT51c2VyRGF0
YSk7Ci0gICAgU2tQYWludCBwYWludDsKLQotICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsK
LSAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7
Ci0KLSAgICBPd25BcnJheVB0cjx1aW50MTZfdD4gZ2x5cGhzMTYgPSBhZG9wdEFycmF5UHRyKG5l
dyB1aW50MTZfdFtsZW5ndGhdKTsKLSAgICBpZiAoIWdseXBoczE2LmdldCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpbnQgbnVtR2x5cGhzID0gcGFpbnQudGV4dFRvR2x5cGhzKGNoYXJhY3Rl
cnMsIGxlbmd0aCAqIHNpemVvZih1aW50MTZfdCksIGdseXBoczE2LmdldCgpKTsKLQotICAgIGJv
b2wgY2FuUmVuZGVyID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsg
KytpKSB7Ci0gICAgICAgIGlmICghZ2x5cGhzMTZbaV0pIHsKLSAgICAgICAgICAgIGNhblJlbmRl
ciA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gY2FuUmVuZGVyOwotfQotCi1zdGF0aWMgSEJfRXJyb3IgZ2V0T3V0bGluZVBvaW50KEhC
X0ZvbnQgaGJGb250LCBIQl9HbHlwaCBnbHlwaCwgaW50IGZsYWdzLCBoYl91aW50MzIgcG9pbnQs
IEhCX0ZpeGVkKiB4UG9zLCBIQl9GaXhlZCogeVBvcywgaGJfdWludDMyKiByZXN1bHRpbmdOdW1Q
b2ludHMpCi17Ci0gICAgLy8gV2UgY2Fubm90IHByb3ZpZGUgdGhlIHJpZ2h0IHBvc2l0aW9uIG9m
IG91dGxpbmUgcG9pbnRzIGZyb20gcG9pbnQgaW5kZXguCi0gICAgLy8gSnVzdCByZXR1cm4gSEJf
RXJyX09rIHdpdGggcmVzdWx0aW5nTnVtUG9pbnRzID0gMCBzbyB0aGF0IGhhcmZidXp6Ci0gICAg
Ly8gZmFsbHMgYmFjayBvbiB1c2luZyBkZXNpZ24gY29vcmRpbmF0ZSB2YWx1ZSBwYWlyLgotICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAwNzkgZm9y
IG1vcmUgZGV0YWlscy4KLSAgICAqcmVzdWx0aW5nTnVtUG9pbnRzID0gMDsKLSAgICByZXR1cm4g
SEJfRXJyX09rOwotfQotCi1zdGF0aWMgdm9pZCBnZXRHbHlwaE1ldHJpY3MoSEJfRm9udCBoYkZv
bnQsIEhCX0dseXBoIGdseXBoLCBIQl9HbHlwaE1ldHJpY3MqIG1ldHJpY3MpCi17Ci0gICAgRm9u
dFBsYXRmb3JtRGF0YSogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+
KGhiRm9udC0+dXNlckRhdGEpOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0KLSAgICBmb250LT5zZXR1
cFBhaW50KCZwYWludCk7Ci0gICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlw
aElEX1RleHRFbmNvZGluZyk7Ci0gICAgdWludDE2X3QgZ2x5cGgxNiA9IGdseXBoOwotICAgIFNr
U2NhbGFyIHdpZHRoOwotICAgIFNrUmVjdCBib3VuZHM7Ci0gICAgcGFpbnQuZ2V0VGV4dFdpZHRo
cygmZ2x5cGgxNiwgc2l6ZW9mKGdseXBoMTYpLCAmd2lkdGgsICZib3VuZHMpOwotCi0gICAgbWV0
cmljcy0+eCA9IFNraWFTY2FsYXJUb0hhcmZidXp6Rml4ZWQoYm91bmRzLmZMZWZ0KTsKLSAgICBt
ZXRyaWNzLT55ID0gU2tpYVNjYWxhclRvSGFyZmJ1enpGaXhlZChib3VuZHMuZlRvcCk7Ci0gICAg
bWV0cmljcy0+d2lkdGggPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVkKGJvdW5kcy53aWR0aCgp
KTsKLSAgICBtZXRyaWNzLT5oZWlnaHQgPSBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVkKGJvdW5k
cy5oZWlnaHQoKSk7Ci0KLSAgICBtZXRyaWNzLT54T2Zmc2V0ID0gU2tpYVNjYWxhclRvSGFyZmJ1
enpGaXhlZCh3aWR0aCk7Ci0gICAgLy8gV2UgY2FuJ3QgYWN0dWFsbHkgZ2V0IHRoZSB8eXwgY29y
cmVjdCBiZWNhdXNlIFNraWEgZG9lc24ndCBleHBvcnQKLSAgICAvLyB0aGUgdmVydGljYWwgYWR2
YW5jZS4gSG93ZXZlciwgbm9yIHdlIGRvIGV2ZXIgcmVuZGVyIHZlcnRpY2FsIHRleHQgYXQKLSAg
ICAvLyB0aGUgbW9tZW50IHNvIGl0J3MgdW5pbXBvcnRhbnQuCi0gICAgbWV0cmljcy0+eU9mZnNl
dCA9IDA7Ci19Ci0KLXN0YXRpYyBIQl9GaXhlZCBnZXRGb250TWV0cmljKEhCX0ZvbnQgaGJGb250
LCBIQl9Gb250TWV0cmljIG1ldHJpYykKLXsKLSAgICBGb250UGxhdGZvcm1EYXRhKiBmb250ID0g
cmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oaGJGb250LT51c2VyRGF0YSk7Ci0g
ICAgU2tQYWludCBwYWludDsKLQotICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKLSAgICBT
a1BhaW50OjpGb250TWV0cmljcyBza2lhTWV0cmljczsKLSAgICBwYWludC5nZXRGb250TWV0cmlj
cygmc2tpYU1ldHJpY3MpOwotCi0gICAgc3dpdGNoIChtZXRyaWMpIHsKLSAgICBjYXNlIEhCX0Zv
bnRBc2NlbnQ6Ci0gICAgICAgIHJldHVybiBTa2lhU2NhbGFyVG9IYXJmYnV6ekZpeGVkKC1za2lh
TWV0cmljcy5mQXNjZW50KTsKLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGdldHRpbmcgdGhlIHJl
c3Qgb2YgdGhlIG1ldHJpY3MgYW5kIEhhcmZidXp6IGRvZXNuJ3Qgc2VlbSB0byBuZWVkIHRoZW0u
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1IQl9Gb250Q2xh
c3MgaGFyZmJ1enpTa2lhQ2xhc3MgPSB7Ci0gICAgc3RyaW5nVG9HbHlwaHMsCi0gICAgZ2x5cGhz
VG9BZHZhbmNlcywKLSAgICBjYW5SZW5kZXIsCi0gICAgZ2V0T3V0bGluZVBvaW50LAotICAgIGdl
dEdseXBoTWV0cmljcywKLSAgICBnZXRGb250TWV0cmljLAotfTsKLQotSEJfRm9udF8qIGFsbG9j
SGFyZmJ1enpGb250KCkKLXsKLSAgICBIQl9Gb250XyogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
SEJfRm9udF8qPihmYXN0TWFsbG9jKHNpemVvZihIQl9Gb250XykpKTsKLSAgICBtZW1zZXQoZm9u
dCwgMCwgc2l6ZW9mKEhCX0ZvbnRfKSk7Ci0gICAgZm9udC0+a2xhc3MgPSAmaGFyZmJ1enpTa2lh
Q2xhc3M7Ci0gICAgZm9udC0+dXNlckRhdGEgPSAwOwotCi0gICAgcmV0dXJuIGZvbnQ7Ci19Ci0K
LUhCX0Vycm9yIGhhcmZidXp6U2tpYUdldFRhYmxlKHZvaWQqIHZvaWRmYWNlLCBjb25zdCBIQl9U
YWcgdGFnLCBIQl9CeXRlKiBidWZmZXIsIEhCX1VJbnQqIGxlbikKLXsKLSAgICBGb250UGxhdGZv
cm1EYXRhKiBmb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odm9pZGZh
Y2UpOwotCi0gICAgY29uc3Qgc2l6ZV90IHRhYmxlU2l6ZSA9IFNrRm9udEhvc3Q6OkdldFRhYmxl
U2l6ZShmb250LT51bmlxdWVJRCgpLCB0YWcpOwotICAgIGlmICghdGFibGVTaXplKQotICAgICAg
ICByZXR1cm4gSEJfRXJyX0ludmFsaWRfQXJndW1lbnQ7Ci0gICAgLy8gSWYgSGFyZmJ1enogc3Bl
Y2lmaWVkIGEgMCBidWZmZXIgdGhlbiBpdCdzIGFza2luZyBmb3IgdGhlIHNpemUgb2YgdGhlIHRh
YmxlLgotICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAgICpsZW4gPSB0YWJsZVNpemU7Ci0gICAg
ICAgIHJldHVybiBIQl9FcnJfT2s7Ci0gICAgfQotCi0gICAgaWYgKCpsZW4gPCB0YWJsZVNpemUp
Ci0gICAgICAgIHJldHVybiBIQl9FcnJfSW52YWxpZF9Bcmd1bWVudDsKLSAgICBTa0ZvbnRIb3N0
OjpHZXRUYWJsZURhdGEoZm9udC0+dW5pcXVlSUQoKSwgdGFnLCAwLCB0YWJsZVNpemUsIGJ1ZmZl
cik7Ci0gICAgcmV0dXJuIEhCX0Vycl9PazsKLX0KLQotdHlwZWRlZiBwYWlyPEhCX0ZhY2VSZWNf
KiwgdW5zaWduZWQ+IEZhY2VDYWNoZUVudHJ5OwotdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGlu
dCwgRmFjZUNhY2hlRW50cnksIFdURjo6SW50SGFzaDx1bnNpZ25lZCBpbnQ+LCBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkIGludD4gPiBIYXJmYnV6ekZhY2VDYWNo
ZTsKLXN0YXRpYyBIYXJmYnV6ekZhY2VDYWNoZSogZ0hhcmZidXp6RmFjZUNhY2hlID0gMDsKLQot
c3RhdGljIEhCX0ZhY2VSZWNfKiBnZXRDYWNoZWRIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0
YSogcGxhdGZvcm1EYXRhKQotewotICAgIGlmICghZ0hhcmZidXp6RmFjZUNhY2hlKQotICAgICAg
ICBnSGFyZmJ1enpGYWNlQ2FjaGUgPSBuZXcgSGFyZmJ1enpGYWNlQ2FjaGU7Ci0gICAgU2tGb250
SUQgdW5pcXVlSUQgPSBwbGF0Zm9ybURhdGEtPnVuaXF1ZUlEKCk7Ci0gICAgSGFyZmJ1enpGYWNl
Q2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1bmlxdWVJ
RCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgpKSB7Ci0gICAg
ICAgIEZhY2VDYWNoZUVudHJ5IGVudHJ5KEhCX05ld0ZhY2UocGxhdGZvcm1EYXRhLCBoYXJmYnV6
elNraWFHZXRUYWJsZSksIDEpOwotICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnNldCh1bmlx
dWVJRCwgZW50cnkpOwotICAgICAgICByZXR1cm4gZW50cnkuZmlyc3Q7Ci0gICAgfQotICAgICsr
KHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKTsKLSAgICByZXR1cm4gcmVzdWx0LmdldCgpLT52
YWx1ZS5maXJzdDsKLX0KLQotc3RhdGljIHZvaWQgcmVsZWFzZUNhY2hlZEhhcmZidXp6RmFjZShT
a0ZvbnRJRCB1bmlxdWVJRCkKLXsKLSAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVz
dWx0ID0gZ0hhcmZidXp6RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlEKTsKLSAgICBBU1NFUlQocmVz
dWx0ICE9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZW5kKCkpOwotICAgIEFTU0VSVChyZXN1bHQuZ2V0
KCktPnZhbHVlLnNlY29uZCA+IDApOwotICAgIC0tKHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25k
KTsKLSAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkpIHsKLSAgICAgICAgSEJf
RnJlZUZhY2UocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7Ci0gICAgICAgIGdIYXJmYnV6ekZh
Y2VDYWNoZS0+cmVtb3ZlKHVuaXF1ZUlEKTsKLSAgICB9Ci19Ci0KLUhhcmZidXp6RmFjZTo6SGFy
ZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKLSAgICA6IG1fdW5pcXVl
SUQocGxhdGZvcm1EYXRhLT51bmlxdWVJRCgpKQotewotICAgIG1faGFyZmJ1enpGYWNlID0gZ2V0
Q2FjaGVkSGFyZmJ1enpGYWNlKHBsYXRmb3JtRGF0YSk7Ci19Ci0KLUhhcmZidXp6RmFjZTo6fkhh
cmZidXp6RmFjZSgpCi17Ci0gICAgcmVsZWFzZUNhY2hlZEhhcmZidXp6RmFjZShtX3VuaXF1ZUlE
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzE2YjQ0M2YxMzY0Y2E3NDMxMzgyNmY5NTE2OWJiZmQyNzVk
ZDkyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuaAorKysg
L2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBIYXJmQnV6elNraWFfaAotI2RlZmlu
ZSBIYXJmQnV6elNraWFfaAotCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0KLXN0cnVjdCBIQl9GYWNlUmVjXzsKLXN0cnVjdCBIQl9Gb250XzsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotCi1jbGFz
cyBIYXJmYnV6ekZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxIYXJmYnV6ekZhY2U+IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIYXJmYnV6ekZhY2U+IGNyZWF0ZShGb250UGxhdGZv
cm1EYXRhKiBwbGF0Zm9ybURhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhhcmZidXp6RmFjZShwbGF0Zm9ybURhdGEpKTsKLSAgICB9Ci0KLSAgICB+SGFyZmJ1enpGYWNl
KCk7Ci0KLSAgICBIQl9GYWNlUmVjXyogZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFyZmJ1enpG
YWNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgSGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9y
bURhdGEqKTsKLQotICAgIHVpbnQzMl90IG1fdW5pcXVlSUQ7Ci0gICAgSEJfRmFjZVJlY18qIG1f
aGFyZmJ1enpGYWNlOwotfTsKLQotLy8gRklYTUU6IFJlbW92ZSB0aGlzIGFzeW1tZXRyaWMgYWxs
b2MvZnJlZSBmdW5jdGlvbi4KLS8vIFdlJ2xsIHJlbW92ZSB0aGlzIG9uY2Ugd2UgbW92ZSB0byB0
aGUgbmV3IEhhcmZidXp6IEFQSS4KLUhCX0ZvbnRfKiBhbGxvY0hhcmZidXp6Rm9udCgpOwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3BwCmlu
ZGV4IDRmYzA5ODEyNDg5ZThiYTNmZjdmZjAzZTA2OWQ3MmU5OGM2NWI2OTguLjQ1NmEzNmY0ODQ4
OGZiMTQ1MWZmNjY1ZTJlNjNjMWEwYmYxMzFhM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAK
QEAgLTI1MSw3ICsyNTEsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiBTa1NjYWxhclRvRmxvYXQod2lk
dGgpOwogfQogCi0jaWYgVVNFKEhBUkZCVVpaX05HKQorI2lmIFVTRShIQVJGQlVaWikKIGJvb2wg
U2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAogewogICAgIGlmICghbV9j
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1
cmVzLmd5cGkKaW5kZXggMTcxYWYxYjM0M2ViZDY0MjYzZjcwZmJiZDEzNTNiMzkzY2M1Zjc5NC4u
Y2QxNWFhMTlmMGQ4Y2FmYzI0ZTMyMjcwYWNjZjllMWY3ZTgwMmY4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICB9XSwKICAgICAg
IFsndXNlX3gxMT09MSBvciBPUz09ImFuZHJvaWQiJywgewogICAgICAgICAnZmVhdHVyZV9kZWZp
bmVzJzogWwotICAgICAgICAgICdXVEZfVVNFX0hBUkZCVVpaX05HPTEnLAorICAgICAgICAgICdX
VEZfVVNFX0hBUkZCVVpaPTEnLAogICAgICAgICBdLAogICAgICAgfV0sCiAgICAgICBbJ2Nocm9t
ZW9zPT0xJywgewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9T
b3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCBjYjZkZWUyZmZjMTEwNzk4Y2VlMjkw
M2VkYWY3ODlkMmEwZmM0NTcyLi4zMWZhYTY1MTY3NzkwZmE3MjE2N2I2MDlkMjZiMmUyNTg2MTQy
YzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAtMTM5LDcgKzEzOSw3IEBAIGVuZGlmICgpCiBm
aW5kX3BhY2thZ2UoRnJlZXR5cGUgMi40LjIgUkVRVUlSRUQpCiBmaW5kX3BhY2thZ2UoSGFyZkJ1
enogMC45LjIgUkVRVUlSRUQpCiBhZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNFX0ZSRUVUWVBFPTEp
Ci1hZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNFX0hBUkZCVVpaX05HPTEpCithZGRfZGVmaW5pdGlv
bnMoLURXVEZfVVNFX0hBUkZCVVpaPTEpCiAKIGlmIChFTkFCTEVfV0VCS0lUMiBBTkQgRU5BQkxF
X05FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgc2V0KEVOQUJMRV9QTFVHSU5fUFJPQ0VTUyAxKQpk
aWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDYzYmE4NGJlYzRhM2E4NzRi
YzZlODkxYzVhMmQxMWY4OTg3ODdhNTYuLjA0YmY1MjA3OTMyMTFiZjQwOWNiMGQ1ZGNmNDhjYWJj
ZjViMTk1NTcgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNiBAQAorMjAxMy0wMS0yOSAgRG9taW5payBSw7Z0dHNjaGVzICA8ZG9taW5pay5yb3R0c2No
ZXNAaW50ZWwuY29tPgorCisgICAgICAgIFtIYXJmQnV6el0gUmVtb3ZlIHRoZSBIYXJmQnV6ei1v
bGQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA4MDc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQmVuamFtaW4gUG91bGFpbi4KKworICAgICAg
ICBSZW5hbWUgV1RGX1VTRV9IQVJGQlVaWl9ORyB0byBXVEZfVVNFX0hBUkZCVVpaIHNpbmNlIHRo
ZXJlCisgICAgICAgIHdvbid0IGJlIGEgZGlzdGluY3Rpb24gYmV0d2VlbiBuZyBhbmQgbm9uLW5n
IEhhcmZCdXp6IGFmdGVyCisgICAgICAgIHJlbW92aW5nIHRoZSBvbGQgY29kZS4KKworICAgICAg
ICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlOgorCiAyMDEzLTAxLTI4ICBSZW5hdGEg
SG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KIAogICAgICAgICBbV0syXSBQdXR0aW5nIFF0V2Vi
UHJvY2VzcyBpbnRvIGEgY2hyb290ZWQgc2FuZGJveAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185426</attachid>
            <date>2013-01-30 01:15:13 -0800</date>
            <delta_ts>2013-01-30 02:47:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108077-20130130111156.patch</filename>
            <type>text/plain</type>
            <size>59719</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2M2NGRkM2YwYmQ4YWEy
ZDc3Y2E2MGFkMWE2YTZiNmFlZTA5Nzk1OS4uYzY3ODk5ZGYyYTE2YWE5ZWU3NzE5NTQwNWYyZTc2
YTdmMGRjYmIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEzLTAxLTMwICBEb21p
bmlrIFLDtnR0c2NoZXMgIDxkb21pbmlrLnJvdHRzY2hlc0BpbnRlbC5jb20+CisKKyAgICAgICAg
W0hhcmZCdXp6XSBSZW1vdmUgdGhlIEhhcmZCdXp6LW9sZCBjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgwNzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIFJlbW92aW5nIHVudXNlZCBvbGQgdmFy
aWFudCBvZiB0aGUgSGFyZkJ1enogY29kZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNo
YW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IFJlbmFt
ZSBXVEZfVVNFX0hBUkZCVVpaX05HIHRvIFdURl9VU0VfSEFSRkJVWloKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6IFJlbW92aW5nIENvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6KiBhbmQgSGFy
ZkJ1enpTa2lhKiBmaWxlcywKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5oOgorICAgICAgICAoU2ltcGxlRm9udERhdGEpOiBVU0UoSEFSRkJVWlpfTkcpIHJlbmFt
ZWQgdG8gVVNFKEhBUkZCVVpaKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgIChGb250UGxhdGZvcm1EYXRhKTogUmVtb3Zp
bmcgVVNFKEhBUkZCVVpaX05HKSBpZmRlZnMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDogUmVtb3ZpbmcgVVNFKEhBUkZC
VVpaX05HKSBpZmRlZnMuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVy
YXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJl
ZVR5cGUuY3BwOiBVU0UoSEFSRkJVWlpfTkcpIHJlbmFtZWQgdG8gVVNFKEhBUkZCVVpaKS4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0Nv
bXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6
ei5jcHA6IFJlbW92aW5nIFVTRShIQVJGQlVaWl9ORykgaWZkZWZzLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQ
b3NpdGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcDogUmVtb3ZpbmcgVVNFKEhBUkZCVVpaX05H
KSBpZmRlZnMuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZh
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURh
dGFIYXJmQnV6ei5oOiBSZW1vdmluZyBVU0UoSEFSRkJVWlpfTkcpIGlmZGVmcy4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHA6IFVT
RShIQVJGQlVaWl9ORykgcmVuYW1lZCB0byBVU0UoSEFSRkJVWlopLgorICAgICAgICAoV2ViQ29y
ZSk6CisKIDIwMTMtMDEtMzAgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CiAKICAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IFJlbW92ZSBtX3BlbmRpbmdTeW5j
QmFja2luZ1N0b3JlcyBpbiBMYXllclRyZWVSZW5kZXJlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggMjA2MjBkNjA5YTQ0MmVkN2RhMjcxZDZmNmM5NmFkZGNjZWM0ZDU5Zi4uMDg5NzMz
ZWVmNTU4ZWE5YjhhMGM2ZGRkNDQzM2ZjNzEzMmY0YmRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0wMS0zMCAgRG9taW5payBSw7Z0dHNjaGVzICA8
ZG9taW5pay5yb3R0c2NoZXNAaW50ZWwuY29tPgorCisgICAgICAgIFtIYXJmQnV6el0gUmVtb3Zl
IHRoZSBIYXJmQnV6ei1vbGQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA4MDc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQmVuamFtaW4gUG91
bGFpbi4KKworICAgICAgICBSZW5hbWUgV1RGX1VTRV9IQVJGQlVaWl9ORyB0byBXVEZfVVNFX0hB
UkZCVVpaIHNpbmNlIHRoZXJlCisgICAgICAgIHdvbid0IGJlIGEgZGlzdGluY3Rpb24gYmV0d2Vl
biBuZyBhbmQgbm9uLW5nIEhhcmZCdXp6IGFmdGVyCisgICAgICAgIHJlbW92aW5nIHRoZSBvbGQg
Y29kZS4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisKIDIwMTMtMDEtMzAgIFhpYW56aHUg
V2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIENv
cnJlY3Qgem9vbSBmb3IgZm9jdXNlZCBub2RlIHdoZW4gdXNpbmcgY29tcG9zaXRvciBzY2FsaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGQzNDYzY2E0NzcwZTFjNjQzMzQzYTFjNzEwZmNhOTM5
OTM4NzIyMzAuLjBhNGFjMjU5NGY4MjIxZWY0N2MwYTgxYmJjMGQ1Y2Y2ZTIxMTRkYmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCkBAIC02LDcgKzYsNyBAQCBXRUJDT1JFX0NTU19WQUxVRV9LRVlXT1JE
UyA6PSAkKFdlYkNvcmUpL2Nzcy9DU1NWYWx1ZUtleXdvcmRzLmluCiAKIHdlYmNvcmVfY3BwZmxh
Z3MgKz0gXAogCS1EV1RGX1VTRV9GUkVFVFlQRT0xIFwKLQktRFdURl9VU0VfSEFSRkJVWlpfTkc9
MSBcCisJLURXVEZfVVNFX0hBUkZCVVpaPTEgXAogCS1EV1RGX1VTRV9XRUJQPTEgXAogCS1JJChz
cmNkaXIpL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYyBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjUzOGQ0NzU5
NDMzOTdlNDQxNjY3YzQ3OWFjMmJmZjg2ZTVkMTE0Yy4uMzJiZGY5YmFmM2JmY2U2MjdlMmU4ZTNj
ZDQ5Y2VkNTE0ZGZkZWU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDA0MCwxMyArNDA0MCw5IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFBvaW50R3RrLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsuY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6
ei5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhU
ZXh0Q29udHJvbGxlckhhcmZCdXp6LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oJywK
LSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuY3Bw
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFw
ZXJCYXNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFy
ZkJ1enpTaGFwZXJCYXNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L25nL0hhcmZCdXp6TkdGYWNlQ29yZVRleHQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IDQxZjgwMTVkMTNlMmU1
NGU2OTg2MDIxMDMzMjY0NWI5YTgyZTMwMjkuLjk3ZWE1YTIwMTkwYmRmOGM0MTE2NjQ0NTZmZGY4
NjFkYWI1YmU5NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUZvbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlRm9udERhdGEuaApAQCAtMTk1LDcgKzE5NSw3IEBAIHB1YmxpYzoKICAgICBDRkRpY3Rp
b25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRP
cmllbnRhdGlvbikgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRG
T1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJ
TikpIHx8IFVTRShIQVJGQlVaWl9ORykKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShD
SFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBMQVRGT1JNKFdYKSAmJiBPUyhEQVJXSU4pKSB8
fCBVU0UoSEFSRkJVWlopCiAgICAgYm9vbCBjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCkgY29uc3Q7CiAjZW5kaWYKIApAQCAtMzE3LDcgKzMx
Nyw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiA+IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzOwogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBM
QVRGT1JNKFdYKSAmJiBPUyhEQVJXSU4pKSB8fCBVU0UoSEFSRkJVWlpfTkcpCisjaWYgUExBVEZP
Uk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpIHx8IChQTEFURk9S
TShXWCkgJiYgT1MoREFSV0lOKSkgfHwgVVNFKEhBUkZCVVpaKQogICAgIG11dGFibGUgT3duUHRy
PEhhc2hNYXA8U3RyaW5nLCBib29sPiA+IG1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBw
b3J0OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA2YTYyYzZjN2NjNDVj
ODljYmQ1YmUyMWViZTAxZjQ0MTE5OTU1ODc0Li44ZmU3MDYxMjQ4OTdmMzBkNzdiNmY5YjRkZmQ2
MzhmNjI2NGVmZDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0yOSw5ICsyOSw3IEBA
CiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udE9yaWVudGF0aW9u
LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiAjaW5j
bHVkZSAiSGFyZkJ1enpOR0ZhY2UuaCIKLSNlbmRpZgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgi
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5o
PgpAQCAtNjcsOSArNjUsNyBAQCBwdWJsaWM6CiAKICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwog
Ci0jaWYgVVNFKEhBUkZCVVpaX05HKQogICAgIEhhcmZCdXp6TkdGYWNlKiBoYXJmYnV6ekZhY2Uo
KSBjb25zdDsKLSNlbmRpZgogCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKICAgICBmbG9hdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CkBAIC0xMDYsOSArMTAyLDcgQEAgcHVibGlj
OgogICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlOwogICAgIGJvb2wgbV9maXhlZFdpZHRoOwog
ICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKLSNpZiBVU0UoSEFSRkJVWlpf
TkcpCiAgICAgbXV0YWJsZSBSZWZQdHI8SGFyZkJ1enpOR0ZhY2U+IG1faGFyZmJ1enpGYWNlOwot
I2VuZGlmCiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGNhaXJv
X2ZvbnRfZmFjZV90KiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiA9IEZvbnREZXNjcmlwdGlvbigp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCmluZGV4IGEyMWQ1
OTY1ZDk3ZjFkNmRlYWE4YzNiMjk1NDVlMzM5YzVkZjc0MzYuLmY3MmQ5YzBiYjYwY2QyMDRjOTI0
NDUwZTljODkyZDkwY2NlYTgxZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZy
ZWVUeXBlLmNwcApAQCAtMTkxLDkgKzE5MSw3IEBAIEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0
Zm9ybURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKICAgICAg
ICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX3NjYWxlZEZvbnQpOwogICAgIG1fc2NhbGVk
Rm9udCA9IGNhaXJvX3NjYWxlZF9mb250X3JlZmVyZW5jZShvdGhlci5tX3NjYWxlZEZvbnQpOwog
Ci0jaWYgVVNFKEhBUkZCVVpaX05HKQogICAgIG1faGFyZmJ1enpGYWNlID0gb3RoZXIubV9oYXJm
YnV6ekZhY2U7Ci0jZW5kaWYKIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTIwMSwxNyArMTk5
LDEzIEBAIEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCiAgICAgOiBtX2ZhbGxiYWNrcygw
KQogICAgICwgbV9zY2FsZWRGb250KDApCi0jaWYgVVNFKEhBUkZCVVpaX05HKQogICAgICwgbV9o
YXJmYnV6ekZhY2Uob3RoZXIubV9oYXJmYnV6ekZhY2UpCi0jZW5kaWYKIHsKICAgICAqdGhpcyA9
IG90aGVyOwogfQogCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIG90aGVyLCBmbG9hdCBzaXplKQotI2lmIFVTRShIQVJGQlVaWl9ORykK
ICAgICA6IG1faGFyZmJ1enpGYWNlKG90aGVyLm1faGFyZmJ1enpGYWNlKQotI2VuZGlmCiB7CiAg
ICAgKnRoaXMgPSBvdGhlcjsKIApAQCAtMjMyLDcgKzIyNiw2IEBAIEZvbnRQbGF0Zm9ybURhdGE6
On5Gb250UGxhdGZvcm1EYXRhKCkKICAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveSht
X3NjYWxlZEZvbnQpOwogfQogCi0jaWYgVVNFKEhBUkZCVVpaX05HKQogSGFyZkJ1enpOR0ZhY2Uq
IEZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hh
cmZidXp6RmFjZSkKQEAgLTI0MCw3ICsyMzMsNiBAQCBIYXJmQnV6ek5HRmFjZSogRm9udFBsYXRm
b3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKIAogICAgIHJldHVybiBtX2hhcmZidXp6RmFj
ZS5nZXQoKTsKIH0KLSNlbmRpZgogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRj
aCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCmluZGV4IDg3ZTY2
NjM3NGIwZGI5MGFlMzYyNjQ0OGI1YzJhNmFjNjE4OTVkN2EuLjIxZWVmYjdlNjgwYWE0MmUzZDk4
Y2JlNmRmMWYzMjYyZDNmZTBhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5
cGUuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
V2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICByZXR1cm4gdzsgICAgCiB9CiAK
LSNpZiBVU0UoSEFSRkJVWlpfTkcpCisjaWYgVVNFKEhBUkZCVVpaKQogYm9vbCBTaW1wbGVGb250
RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlU3VwcG9ydCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0NvbXBsZXhUZXh0Q29u
dHJvbGxlckhhcmZCdXp6LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE0ZDg3
MjBjNDM3ZTYwYzAxOWM0YjY2YzZlOTkzNTZmY2QxN2YxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw1MTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb21wbGV4
VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5j
bHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5o
IgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLQotI2lmIE9TKEFORFJPSUQpCi0jaW5jbHVkZSAiRm9u
dENhY2hlLmgiCi0jaW5jbHVkZSAiU2tUeXBlZmFjZV9hbmRyb2lkLmgiCi0jZW5kaWYKLQotZXh0
ZXJuICJDIiB7Ci0jaW5jbHVkZSAiaGFyZmJ1enotdW5pY29kZS5oIgotfQotCi0jaW5jbHVkZSA8
dW5pY29kZS9ub3JtbHpyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gSGFyZmJ1enog
dXNlcyAyNi42IGZpeGVkIHBvaW50IHZhbHVlcyBmb3IgcGl4ZWwgb2Zmc2V0cy4gSG93ZXZlciwg
d2UgZG9uJ3QKLS8vIGhhbmRsZSBzdWJwaXhlbCBwb3NpdGlvbmluZyBzbyB0aGlzIGZ1bmN0aW9u
IGlzIHVzZWQgdG8gdHJ1bmNhdGUgSGFyZmJ1enoKLS8vIHZhbHVlcyB0byBhIG51bWJlciBvZiBw
aXhlbHMuCi1zdGF0aWMgaW50IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihIQl9GaXhlZCB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUgPj4gNjsKLX0KLQotQ29tcGxleFRleHRDb250cm9s
bGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBpbnQgc3RhcnRpbmdYLCBpbnQgc3RhcnRpbmdZKQotICAgIDogSGFyZkJ1enpTaGFw
ZXJCYXNlKGZvbnQsIHJ1bikKLXsKLSAgICBOb3JtYWxpemVNb2RlIG1vZGUgPSBtX3J1bi5ydGwo
KSA/IE5vcm1hbGl6ZU1pcnJvckNoYXJzIDogRG9Ob3ROb3JtYWxpemVNaXJyb3JDaGFyczsKLSAg
ICBzZXROb3JtYWxpemVkQnVmZmVyKG1vZGUpOwotCi0gICAgbWVtc2V0KCZtX2l0ZW0sIDAsIHNp
emVvZihtX2l0ZW0pKTsKLSAgICAvLyBXZSBjYW5ub3Qga25vdywgYWhlYWQgb2YgdGltZSwgaG93
IG1hbnkgZ2x5cGhzIGEgZ2l2ZW4gc2NyaXB0IHJ1bgotICAgIC8vIHdpbGwgcHJvZHVjZS4gV2Ug
dGFrZSBhIGd1ZXNzIHRoYXQgc2NyaXB0IHJ1bnMgd2lsbCBub3QgcHJvZHVjZSBtb3JlCi0gICAg
Ly8gdGhhbiB0d2ljZSBhcyBtYW55IGdseXBocyBhcyB0aGVyZSBhcmUgY29kZSBwb2ludHMgcGx1
cyBhIGJpdCBvZgotICAgIC8vIHBhZGRpbmcgYW5kIGZhbGxiYWNrIGlmIHdlIGZpbmQgdGhhdCB3
ZSBhcmUgd3JvbmcuCi0gICAgY3JlYXRlR2x5cGhBcnJheXMoKG1fbm9ybWFsaXplZEJ1ZmZlckxl
bmd0aCArIDIpICogMik7Ci0KLSAgICBtX2l0ZW0uZmFjZSA9IDA7Ci0gICAgbV9pdGVtLmZvbnQg
PSBhbGxvY0hhcmZidXp6Rm9udCgpOwotCi0gICAgbV9pdGVtLml0ZW0uYmlkaUxldmVsID0gbV9y
dW4ucnRsKCk7Ci0KLSAgICBtX2l0ZW0uc3RyaW5nID0gbV9ub3JtYWxpemVkQnVmZmVyLmdldCgp
OwotICAgIG1faXRlbS5zdHJpbmdMZW5ndGggPSBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGg7Ci0K
LSAgICByZXNldChzdGFydGluZ1gpOwotICAgIG1fc3RhcnRpbmdZID0gc3RhcnRpbmdZOwotCi0g
ICAgc2V0UGFkZGluZyhtX3J1bi5leHBhbnNpb24oKSk7Ci19Ci0KLUNvbXBsZXhUZXh0Q29udHJv
bGxlcjo6fkNvbXBsZXhUZXh0Q29udHJvbGxlcigpCi17Ci0gICAgZmFzdEZyZWUobV9pdGVtLmZv
bnQpOwotICAgIGRlbGV0ZUdseXBoQXJyYXlzKCk7Ci19Ci0KLXZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjpyZXNldChpbnQgb2Zmc2V0KQotewotICAgIG1faW5kZXhPZk5leHRTY3JpcHRSdW4g
PSAwOwotICAgIG1fb2Zmc2V0WCA9IG9mZnNldDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OnNldHVwRm9yUlRMKCkKLXsKLSAgICBpbnQgcGFkZGluZyA9IG1fcGFkZGluZzsKLSAg
ICAvLyBGSVhNRTogdGhpcyBjYXVzZXMgdXMgdG8gc2hhcGUgdGhlIHRleHQgdHdpY2UgLS0gb25j
ZSB0byBjb21wdXRlIHRoZSB3aWR0aCBhbmQgdGhlbiBhZ2FpbgotICAgIC8vIGJlbG93IHdoZW4g
YWN0dWFsbHkgcmVuZGVyaW5nLiBDaGFuZ2UgQ29tcGxleFRleHRDb250cm9sbGVyIHRvIG1hdGNo
IHBsYXRmb3JtL21hYyBhbmQKLSAgICAvLyBwbGF0Zm9ybS9jaHJvbWl1bS93aW4gYnkgaGF2aW5n
IGl0IHN0b3JlIHRoZSBzaGFwZWQgcnVucywgc28gd2UgY2FuIHJldXNlIHRoZSByZXN1bHRzLgot
ICAgIHJlc2V0KG1fb2Zmc2V0WCArIHdpZHRoT2ZGdWxsUnVuKCkpOwotICAgIC8vIFdlIG5lZWQg
dG8gc2V0IHRoZSBwYWRkaW5nIGFnYWluIGJlY2F1c2UgQ29tcGxleFRleHRDb250cm9sbGVyIGxh
eW91dCBjb25zdW1lZCB0aGUgdmFsdWUuCi0gICAgLy8gRml4aW5nIHRoZSBhYm92ZSBwcm9ibGVt
IHdvdWxkIGhlbHAgaGVyZSB0b28uCi0gICAgc2V0UGFkZGluZyhwYWRkaW5nKTsKLX0KLQotLy8g
QWR2YW5jZSB0byB0aGUgbmV4dCBzY3JpcHQgcnVuLCByZXR1cm5pbmcgZmFsc2Ugd2hlbiB0aGUg
ZW5kIG9mIHRoZQotLy8gVGV4dFJ1biBoYXMgYmVlbiByZWFjaGVkLgotYm9vbCBDb21wbGV4VGV4
dENvbnRyb2xsZXI6Om5leHRTY3JpcHRSdW4oKQotewotICAgIC8vIEVuc3VyZSB3ZSdyZSBub3Qg
cG9pbnRpbmcgYXQgdGhlIHNtYWxsIGNhcHMgYnVmZmVyLgotICAgIG1faXRlbS5zdHJpbmcgPSBt
X25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCk7Ci0KLSAgICBpZiAoIWhiX3V0ZjE2X3NjcmlwdF9ydW5f
bmV4dCgwLCAmbV9pdGVtLml0ZW0sIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbV9ub3JtYWxp
emVkQnVmZmVyTGVuZ3RoLCAmbV9pbmRleE9mTmV4dFNjcmlwdFJ1bikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIEl0IGlzIGFjdHVhbGx5IHdyb25nIHRvIGNvbnNpZGVyIHNjcmlw
dCBydW5zIGF0IGFsbCBpbiB0aGlzIGNvZGUuCi0gICAgLy8gT3RoZXIgV2ViS2l0IGNvZGUgKGUu
Zy4gTWFjKSBzZWdtZW50cyBjb21wbGV4IHRleHQganVzdCBieSBmaW5kaW5nCi0gICAgLy8gdGhl
IGxvbmdlc3Qgc3BhbiBvZiB0ZXh0IGNvdmVyZWQgYnkgYSBzaW5nbGUgZm9udC4KLSAgICAvLyBC
dXQgd2UgY3VycmVudGx5IG5lZWQgdG8gY2FsbCBoYl91dGYxNl9zY3JpcHRfcnVuX25leHQgYW55
d2F5IHRvIGZpbGwKLSAgICAvLyBpbiB0aGUgaGFyZmJ1enogZGF0YSBzdHJ1Y3R1cmVzIHRvIGUu
Zy4gcGljayB0aGUgY29ycmVjdCBzY3JpcHQncyBzaGFwZXIuCi0gICAgLy8gU28gd2UgYWxsb3cg
dGhhdCB0byBydW4gZmlyc3QsIHRoZW4gZG8gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSByYW5nZSBp
dAotICAgIC8vIGZvdW5kIGFuZCB0YWtlIHRoZSBsYXJnZXN0IHN1YnJlZ2lvbiB0aGF0IHN0YXlz
IHdpdGhpbiBhIHNpbmdsZSBmb250LgotICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRv
ciBpdGVyYXRvcihzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KCZtX2l0ZW0uc3RyaW5nW21faXRl
bS5pdGVtLnBvc10pLCAwLCBzdGF0aWNfY2FzdDxpbnQ+KG1faXRlbS5pdGVtLmxlbmd0aCksIHN0
YXRpY19jYXN0PGludD4obV9pdGVtLml0ZW0ubGVuZ3RoKSk7Ci0gICAgVUNoYXIzMiBjaGFyYWN0
ZXI7Ci0gICAgdW5zaWduZWQgY2x1c3Rlckxlbmd0aCA9IDA7Ci0gICAgaWYgKCFpdGVyYXRvci5j
b25zdW1lKGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX2N1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOwotICAgIGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxl
bmd0aCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVu
Z3RoKSkgewotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnREYXRhID0gbV9m
b250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7Ci0g
ICAgICAgIGlmIChuZXh0Rm9udERhdGEgIT0gbV9jdXJyZW50Rm9udERhdGEpCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsKLSAgICB9
Ci0gICAgbV9pdGVtLml0ZW0ubGVuZ3RoID0gaXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpOwot
ICAgIG1faW5kZXhPZk5leHRTY3JpcHRSdW4gPSBtX2l0ZW0uaXRlbS5wb3MgKyBpdGVyYXRvci5j
dXJyZW50Q2hhcmFjdGVyKCk7Ci0KLSAgICBzZXR1cEZvbnRGb3JTY3JpcHRSdW4oKTsKLSAgICBz
aGFwZUdseXBocygpOwotICAgIHNldEdseXBoUG9zaXRpb25zKHJ0bCgpKTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1mbG9hdCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OndpZHRoT2ZGdWxsUnVu
KCkKLXsKLSAgICBmbG9hdCB3aWR0aFN1bSA9IDA7Ci0gICAgd2hpbGUgKG5leHRTY3JpcHRSdW4o
KSkKLSAgICAgICAgd2lkdGhTdW0gKz0gd2lkdGgoKTsKLQotICAgIHJldHVybiB3aWR0aFN1bTsK
LX0KLQotc3RhdGljIHZvaWQgc2V0dXBGb250RmVhdHVyZXMoY29uc3QgRm9udEZlYXR1cmVTZXR0
aW5ncyogc2V0dGluZ3MsIEhCX0ZhY2VSZWNfKiBoYkZhY2UpCi17Ci0gICAgaWYgKCFzZXR0aW5n
cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhiRmFjZS0+Z3N1YikKLSAgICAgICAgSEJf
R1NVQl9DbGVhcl9GZWF0dXJlcyhoYkZhY2UtPmdzdWIpOwotICAgIGlmIChoYkZhY2UtPmdwb3Mp
Ci0gICAgICAgIEhCX0dQT1NfQ2xlYXJfRmVhdHVyZXMoaGJGYWNlLT5ncG9zKTsKLQotICAgIEhC
X1VTaG9ydCBzY3JpcHRJbmRleCA9IDA7Ci0gICAgSEJfR1NVQl9TZWxlY3RfU2NyaXB0KGhiRmFj
ZS0+Z3N1YiwgSEJfTUFLRV9UQUcoJ0QnLCAnRicsICdMJywgJ1QnKSwgJnNjcmlwdEluZGV4KTsK
LSAgICBzaXplX3QgbnVtRmVhdHVyZXMgPSBzZXR0aW5ncy0+c2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtRmVhdHVyZXM7ICsraSkgewotICAgICAgICBpZiAoIXNldHRpbmdz
LT5hdChpKS52YWx1ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEhCX1VTaG9y
dCBmZWF0dXJlSW5kZXggPSAwOwotICAgICAgICBjb25zdCBVQ2hhciogdGFnID0gc2V0dGluZ3Mt
PmF0KGkpLnRhZygpLmNoYXJhY3RlcnMoKTsKLSAgICAgICAgSEJfVUludCBmZWF0dXJlID0gSEJf
TUFLRV9UQUcodGFnWzBdLCB0YWdbMV0sIHRhZ1syXSwgdGFnWzNdKTsKLSAgICAgICAgaWYgKGhi
RmFjZS0+Z3N1YiAmJiBIQl9HU1VCX1NlbGVjdF9GZWF0dXJlKGhiRmFjZS0+Z3N1YiwgZmVhdHVy
ZSwgc2NyaXB0SW5kZXgsIDB4ZmZmZiwgJmZlYXR1cmVJbmRleCkgPT0gSEJfRXJyX09rKQotICAg
ICAgICAgICAgSEJfR1NVQl9BZGRfRmVhdHVyZShoYkZhY2UtPmdzdWIsIGZlYXR1cmVJbmRleCwg
c2V0dGluZ3MtPmF0KGkpLnZhbHVlKCkpOwotICAgICAgICBlbHNlIGlmIChoYkZhY2UtPmdwb3Mg
JiYgSEJfR1BPU19TZWxlY3RfRmVhdHVyZShoYkZhY2UtPmdwb3MsIGZlYXR1cmUsIHNjcmlwdElu
ZGV4LCAweGZmZmYsICZmZWF0dXJlSW5kZXgpID09IEhCX0Vycl9PaykKLSAgICAgICAgICAgIEhC
X0dQT1NfQWRkX0ZlYXR1cmUoaGJGYWNlLT5ncG9zLCBmZWF0dXJlSW5kZXgsIHNldHRpbmdzLT5h
dChpKS52YWx1ZSgpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBVQ2hhcjMyIHN1cnJvZ2F0ZVBhaXJB
d2FyZUZpcnN0Q2hhcmFjdGVyKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgaWYgKFUxNl9JU19TVVJST0dBVEUoY2hhcmFjdGVyc1swXSkpIHsKLSAgICAg
ICAgaWYgKCFVMTZfSVNfU1VSUk9HQVRFX0xFQUQoY2hhcmFjdGVyc1swXSkgfHwgbGVuZ3RoIDwg
MiB8fCAhVTE2X0lTX1RSQUlMKGNoYXJhY3RlcnNbMV0pKQotICAgICAgICAgICAgcmV0dXJuICcg
JzsKLSAgICAgICAgcmV0dXJuIFUxNl9HRVRfU1VQUExFTUVOVEFSWShjaGFyYWN0ZXJzWzBdLCBj
aGFyYWN0ZXJzWzFdKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNbMF07Ci19Ci0KLWNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEqIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2V0Q29tcGxleEZv
bnRQbGF0Zm9ybURhdGEoKQotewotI2lmIE9TKEFORFJPSUQpCi0gICAgLy8gVGhlcmUgYXJlIDIg
a2luZHMgb2YgZm9udCBvbiBBbmRyb2lkOiBzeXN0ZW0gZm9udHMgYW5kIGZhbGxiYWNrIGZvbnRz
LgotICAgIC8vIFN5c3RlbSBmb250cyBoYXZlIGEgbmFtZSwgYW5kIGFyZSBhY2Nlc3NpYmxlIGlu
IEZvbnRQbGF0Zm9ybURhdGEuCi0gICAgLy8gRmFsbGJhY2sgZm9udHMgZG8gbm90IGhhdmUgc3Bl
Y2lmaWMgbmFtZXMsIHNvIHRoZXkgYXJlIG5vdCBhY2Nlc3NpYmxlCi0gICAgLy8gZnJvbSBXZWJL
aXQgZGlyZWN0bHkuIFRvIGZlZWQgSGFyZmJ1enosIHVzZSBhIHRyaWNrIHRvIGdldCBjb3JyZWN0
Ci0gICAgLy8gU2tUeXBlZmFjZSBiYXNlZCBvbiBzY3JpcHQuCi0gICAgRmFsbGJhY2tTY3JpcHRz
IGZhbGxiYWNrU2NyaXB0ID0ga0ZhbGxiYWNrU2NyaXB0TnVtYmVyOyAvLyBpbnZhbGlkIHNjcmlw
dCB2YWx1ZS4KLSAgICBzd2l0Y2ggKG1faXRlbS5pdGVtLnNjcmlwdCkgewotICAgIGNhc2UgSEJf
U2NyaXB0X0FyYWJpYzoKLSAgICAgICAgZmFsbGJhY2tTY3JpcHQgPSBrQXJhYmljX0ZhbGxiYWNr
U2NyaXB0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEhCX1NjcmlwdF9Bcm1lbmlhbjoKLSAg
ICAgICAgZmFsbGJhY2tTY3JpcHQgPSBrQXJtZW5pYW5fRmFsbGJhY2tTY3JpcHQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSEJfU2NyaXB0X0JlbmdhbGk6Ci0gICAgICAgIGZhbGxiYWNrU2Ny
aXB0ID0ga0JlbmdhbGlfRmFsbGJhY2tTY3JpcHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SEJfU2NyaXB0X0RldmFuYWdhcmk6Ci0gICAgICAgIGZhbGxiYWNrU2NyaXB0ID0ga0RldmFuYWdh
cmlfRmFsbGJhY2tTY3JpcHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSEJfU2NyaXB0X0dl
b3JnaWFuOgotICAgICAgICBmYWxsYmFja1NjcmlwdCA9IGtHZW9yZ2lhbl9GYWxsYmFja1Njcmlw
dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQl9TY3JpcHRfSGVicmV3OgotICAgICAgICBp
ZiAobV9mb250LT5mb250RGVzY3JpcHRpb24oKS53ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkK
LSAgICAgICAgICAgIGZhbGxiYWNrU2NyaXB0ID0ga0hlYnJld0JvbGRfRmFsbGJhY2tTY3JpcHQ7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhbGxiYWNrU2NyaXB0ID0ga0hlYnJld1JlZ3Vs
YXJfRmFsbGJhY2tTY3JpcHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSEJfU2NyaXB0X0th
bm5hZGE6Ci0gICAgICAgIGZhbGxiYWNrU2NyaXB0ID0ga0thbm5hZGFfRmFsbGJhY2tTY3JpcHQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSEJfU2NyaXB0X01hbGF5YWxhbToKLSAgICAgICAg
ZmFsbGJhY2tTY3JpcHQgPSBrTWFsYXlhbGFtX0ZhbGxiYWNrU2NyaXB0OwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEhCX1NjcmlwdF9UYW1pbDoKLSAgICAgICAgaWYgKG1fZm9udC0+Zm9udERl
c2NyaXB0aW9uKCkud2VpZ2h0KCkgPj0gRm9udFdlaWdodEJvbGQpCi0gICAgICAgICAgICBmYWxs
YmFja1NjcmlwdCA9IGtUYW1pbEJvbGRfRmFsbGJhY2tTY3JpcHQ7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGZhbGxiYWNrU2NyaXB0ID0ga1RhbWlsUmVndWxhcl9GYWxsYmFja1NjcmlwdDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQl9TY3JpcHRfVGVsdWd1OgotICAgICAgICBmYWxs
YmFja1NjcmlwdCA9IGtUZWx1Z3VfRmFsbGJhY2tTY3JpcHQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSEJfU2NyaXB0X1RoYWk6Ci0gICAgICAgIGZhbGxiYWNrU2NyaXB0ID0ga1RoYWlfRmFs
bGJhY2tTY3JpcHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICByZXR1cm4gZm9udENhY2hlKCktPmdldENhY2hlZEZvbnRQbGF0Zm9y
bURhdGEobV9mb250LT5mb250RGVzY3JpcHRpb24oKSwgU2tHZXRGYWxsYmFja1NjcmlwdElEKGZh
bGxiYWNrU2NyaXB0KSwgdHJ1ZSk7Ci0jZWxzZQotICAgIC8vIE9ubHkgQW5kcm9pZCBuZWVkcyB0
aGUgZXh0cmEgbG9naWMuCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb21wbGV4
VGV4dENvbnRyb2xsZXI6OnNldHVwRm9udEZvclNjcmlwdFJ1bigpCi17Ci0gICAgRm9udERhdGFW
YXJpYW50IGZvbnREYXRhVmFyaWFudCA9IEF1dG9WYXJpYW50OwotICAgIC8vIERldGVybWluZSBp
ZiB0aGlzIHNjcmlwdCBydW4gbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIHNtYWxsIGNhcHMuCi0g
ICAgLy8gbmV4dFNjcmlwdFJ1bigpIHdpbGwgYWx3YXlzIHNlbmQgdXMgYSBydW4gb2YgdGhlIHNh
bWUgY2FzZSwgYmVjYXVzZSBhCi0gICAgLy8gY2FzZSBjaGFuZ2Ugd2hpbGUgaW4gc21hbGwtY2Fw
cyBtb2RlIGFsd2F5cyByZXN1bHRzIGluIGRpZmZlcmVudAotICAgIC8vIEZvbnREYXRhLCBzbyB3
ZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhlIGZpcnN0IGNoYXJhY3RlcidzIGNhc2UuCi0gICAgaWYg
KG1fZm9udC0+aXNTbWFsbENhcHMoKSAmJiB1X2lzbG93ZXIobV9pdGVtLnN0cmluZ1ttX2l0ZW0u
aXRlbS5wb3NdKSkgewotICAgICAgICBtX3NtYWxsQ2Fwc1N0cmluZyA9IFN0cmluZyhtX25vcm1h
bGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX2l0ZW0uaXRlbS5wb3MsIG1faXRlbS5pdGVtLmxlbmd0aCk7
Ci0gICAgICAgIG1fc21hbGxDYXBzU3RyaW5nLm1ha2VVcHBlcigpOwotICAgICAgICBtX2l0ZW0u
c3RyaW5nID0gbV9zbWFsbENhcHNTdHJpbmcuY2hhcmFjdGVycygpOwotICAgICAgICBtX2l0ZW0u
aXRlbS5wb3MgPSAwOwotICAgICAgICBmb250RGF0YVZhcmlhbnQgPSBTbWFsbENhcHNWYXJpYW50
OwotICAgIH0KLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSBnZXRD
b21wbGV4Rm9udFBsYXRmb3JtRGF0YSgpOwotICAgIGlmICghcGxhdGZvcm1EYXRhKSB7Ci0gICAg
ICAgIFVDaGFyMzIgY3VycmVudCA9IHN1cnJvZ2F0ZVBhaXJBd2FyZUZpcnN0Q2hhcmFjdGVyKHN0
YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4oJm1faXRlbS5zdHJpbmdbbV9pdGVtLml0ZW0ucG9zXSks
IG1faXRlbS5pdGVtLmxlbmd0aCAtIG1faXRlbS5pdGVtLnBvcyk7Ci0gICAgICAgIGNvbnN0IEZv
bnREYXRhKiBmb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGN1cnJlbnQs
IGZhbHNlLCBmb250RGF0YVZhcmlhbnQpLmZvbnREYXRhOwotICAgICAgICBwbGF0Zm9ybURhdGEg
PSAmZm9udERhdGEtPmZvbnREYXRhRm9yQ2hhcmFjdGVyKCcgJyktPnBsYXRmb3JtRGF0YSgpOwot
ICAgIH0KLSAgICBtX2l0ZW0uZmFjZSA9IHBsYXRmb3JtRGF0YS0+aGFyZmJ1enpGYWNlKCktPmZh
Y2UoKTsKLSAgICAvLyBXZSBvbmx5IG5lZWQgdG8gc2V0dXAgZm9udCBmZWF0dXJlcyBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBydW4uCi0gICAgaWYgKCFtX2l0ZW0uaXRlbS5wb3MpCi0gICAgICAg
IHNldHVwRm9udEZlYXR1cmVzKG1fZm9udC0+Zm9udERlc2NyaXB0aW9uKCkuZmVhdHVyZVNldHRp
bmdzKCksIG1faXRlbS5mYWNlKTsKLSAgICB2b2lkKiBvcGFxdWVQbGF0Zm9ybURhdGEgPSBjb25z
dF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihwbGF0Zm9ybURhdGEpOwotICAgIG1faXRlbS5mb250
LT51c2VyRGF0YSA9IG9wYXF1ZVBsYXRmb3JtRGF0YTsKLQotICAgIGludCBzaXplID0gcGxhdGZv
cm1EYXRhLT5zaXplKCk7Ci0gICAgbV9pdGVtLmZvbnQtPnhfcHBlbSA9IHNpemU7Ci0gICAgbV9p
dGVtLmZvbnQtPnlfcHBlbSA9IHNpemU7Ci0gICAgLy8geF8gYW5kIHlfc2NhbGUgYXJlIHRoZSBj
b252ZXJzaW9uIGZhY3RvcnMgZnJvbSBmb250IGRlc2lnbiBzcGFjZSAoZkVtU2l6ZSkgdG8gMS82
NHRoIG9mIGRldmljZSBwaXhlbHMgaW4gMTYuMTYgZm9ybWF0LgotICAgIGNvbnN0IGludCBkZXZp
Y2VQaXhlbEZyYWN0aW9uID0gNjQ7Ci0gICAgY29uc3QgaW50IG11bHRpcGx5Rm9yMTZEb3QxNiA9
IDEgPDwgMTY7Ci0gICAgaW50IHNjYWxlID0gZGV2aWNlUGl4ZWxGcmFjdGlvbiAqIHNpemUgKiBt
dWx0aXBseUZvcjE2RG90MTYgLyBwbGF0Zm9ybURhdGEtPmVtU2l6ZUluRm9udFVuaXRzKCk7Ci0g
ICAgbV9pdGVtLmZvbnQtPnhfc2NhbGUgPSBzY2FsZTsKLSAgICBtX2l0ZW0uZm9udC0+eV9zY2Fs
ZSA9IHNjYWxlOwotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6ZGVsZXRlR2x5cGhB
cnJheXMoKQotewotICAgIGRlbGV0ZVtdIG1faXRlbS5nbHlwaHM7Ci0gICAgZGVsZXRlW10gbV9p
dGVtLmF0dHJpYnV0ZXM7Ci0gICAgZGVsZXRlW10gbV9pdGVtLmFkdmFuY2VzOwotICAgIGRlbGV0
ZVtdIG1faXRlbS5vZmZzZXRzOwotICAgIGRlbGV0ZVtdIG1faXRlbS5sb2dfY2x1c3RlcnM7Ci0g
ICAgZGVsZXRlW10gbV9nbHlwaHMxNjsKLSAgICBkZWxldGVbXSBtX3Bvc2l0aW9uczsKLX0KLQot
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNyZWF0ZUdseXBoQXJyYXlzKGludCBzaXplKQot
ewotICAgIG1faXRlbS5nbHlwaHMgPSBuZXcgSEJfR2x5cGhbc2l6ZV07Ci0gICAgbV9pdGVtLmF0
dHJpYnV0ZXMgPSBuZXcgSEJfR2x5cGhBdHRyaWJ1dGVzW3NpemVdOwotICAgIG1faXRlbS5hZHZh
bmNlcyA9IG5ldyBIQl9GaXhlZFtzaXplXTsKLSAgICBtX2l0ZW0ub2Zmc2V0cyA9IG5ldyBIQl9G
aXhlZFBvaW50W3NpemVdOwotICAgIG1faXRlbS5sb2dfY2x1c3RlcnMgPSBuZXcgdW5zaWduZWQg
c2hvcnRbc2l6ZV07Ci0KLSAgICBtX2dseXBoczE2ID0gbmV3IHVpbnQxNl90W3NpemVdOwotICAg
IG1fcG9zaXRpb25zID0gbmV3IFNrUG9pbnRbc2l6ZV07Ci0KLSAgICBtX2l0ZW0ubnVtX2dseXBo
cyA9IHNpemU7Ci0gICAgbV9nbHlwaHNBcnJheUNhcGFjaXR5ID0gc2l6ZTsgLy8gU2F2ZSB0aGUg
R2x5cGhBcnJheXMgc2l6ZS4KLSAgICByZXNldEdseXBoQXJyYXlzKCk7Ci19Ci0KLXZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjpyZXNldEdseXBoQXJyYXlzKCkKLXsKLSAgICBpbnQgc2l6ZSA9
IG1faXRlbS5udW1fZ2x5cGhzOwotICAgIC8vIEFsbCB0aGUgdHlwZXMgaGVyZSBkb24ndCBoYXZl
IHBvaW50ZXJzLiBJdCBpcyBzYWZlIHRvIHJlc2V0IHRvCi0gICAgLy8gemVybyB1bmxlc3MgSGFy
ZmJ1enogYnJlYWtzIHRoZSBjb21wYXRpYmlsaXR5IGluIHRoZSBmdXR1cmUuCi0gICAgbWVtc2V0
KG1faXRlbS5nbHlwaHMsIDAsIHNpemUgKiBzaXplb2YoSEJfR2x5cGgpKTsKLSAgICBtZW1zZXQo
bV9pdGVtLmF0dHJpYnV0ZXMsIDAsIHNpemUgKiBzaXplb2YoSEJfR2x5cGhBdHRyaWJ1dGVzKSk7
Ci0gICAgbWVtc2V0KG1faXRlbS5hZHZhbmNlcywgMCwgc2l6ZSAqIHNpemVvZihIQl9GaXhlZCkp
OwotICAgIG1lbXNldChtX2l0ZW0ub2Zmc2V0cywgMCwgc2l6ZSAqIHNpemVvZihIQl9GaXhlZFBv
aW50KSk7Ci0gICAgbWVtc2V0KG1fZ2x5cGhzMTYsIDAsIHNpemUgKiBzaXplb2YodWludDE2X3Qp
KTsKLSAgICBtZW1zZXQobV9wb3NpdGlvbnMsIDAsIHNpemUgKiBzaXplb2YoU2tQb2ludCkpOwot
fQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2hhcGVHbHlwaHMoKQotewotICAgIC8v
IEhCX1NoYXBlSXRlbSgpIHJlc2V0cyBtX2l0ZW0ubnVtX2dseXBocy4gSWYgdGhlIHByZXZpb3Vz
IGNhbGwgdG8KLSAgICAvLyBIQl9TaGFwZUl0ZW0oKSB1c2VkIGxlc3Mgc3BhY2UgdGhhbiB3YXMg
YXZhaWxhYmxlLCB0aGUgY2FwYWNpdHkgb2YKLSAgICAvLyB0aGUgYXJyYXkgbWF5IGJlIGxhcmdl
ciB0aGFuIHRoZSBjdXJyZW50IHZhbHVlIG9mIG1faXRlbS5udW1fZ2x5cGhzLgotICAgIC8vIFNv
LCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBudW1fZ2x5cGhzIHRvIHRoZSBjYXBhY2l0eSBvZiB0aGUg
YXJyYXkuCi0gICAgbV9pdGVtLm51bV9nbHlwaHMgPSBtX2dseXBoc0FycmF5Q2FwYWNpdHk7Ci0g
ICAgcmVzZXRHbHlwaEFycmF5cygpOwotICAgIHdoaWxlICghSEJfU2hhcGVJdGVtKCZtX2l0ZW0p
KSB7Ci0gICAgICAgIC8vIFdlIG92ZXJmbG93ZWQgb3VyIGFycmF5cy4gUmVzaXplIGFuZCByZXRy
eS4KLSAgICAgICAgLy8gSEJfU2hhcGVJdGVtIGZpbGxzIGluIG1faXRlbS5udW1fZ2x5cGhzIHdp
dGggdGhlIG5lZWRlZCBzaXplLgotICAgICAgICBkZWxldGVHbHlwaEFycmF5cygpOwotICAgICAg
ICAvLyBUaGUgfCsgMXwgaGVyZSBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEhhcmZidXp6
OiB0aGUgS2htZXIKLSAgICAgICAgLy8gc2hhcGVyIChhdCBsZWFzdCkgY2FuIGZhaWwgYmVjYXVz
ZSBvZiBpbnN1ZmZpY2llbnQgZ2x5cGggYnVmZmVycwotICAgICAgICAvLyBhbmQgcmVxdWVzdCAw
IGFkZGl0aW9uYWwgZ2x5cGhzOiB0aHJvd2luZyB1cyBpbnRvIGFuIGluZmluaXRlCi0gICAgICAg
IC8vIGxvb3AuCi0gICAgICAgIGNyZWF0ZUdseXBoQXJyYXlzKG1faXRlbS5udW1fZ2x5cGhzICsg
MSk7Ci0gICAgfQotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0R2x5cGhQb3Np
dGlvbnMoYm9vbCBpc1JUTCkKLXsKLSAgICBjb25zdCBkb3VibGUgcnRsRmxpcCA9IGlzUlRMID8g
LTEgOiAxOwotICAgIGRvdWJsZSBwb3NpdGlvbiA9IDA7Ci0KLSAgICAvLyBsb2dDbHVzdGVyc0lu
ZGV4IGluZGV4ZXMgbG9nQ2x1c3RlcnMgZm9yIHRoZSBmaXJzdCBjb2RlcG9pbnQgb2YgdGhlIGN1
cnJlbnQgZ2x5cGguCi0gICAgLy8gRWFjaCB0aW1lIHdlIGFkdmFuY2UgYSBnbHlwaCwgd2Ugc2tp
cCBvdmVyIGFsbCB0aGUgY29kZXBvaW50cyB0aGF0IGNvbnRyaWJ1dGVkIHRvIHRoZSBjdXJyZW50
IGdseXBoLgotICAgIHNpemVfdCBsb2dDbHVzdGVyc0luZGV4ID0gMDsKLQotICAgIC8vIEl0ZXJh
dGUgdGhyb3VnaCB0aGUgZ2x5cGhzIGluIGxvZ2ljYWwgb3JkZXIsIGZsaXBwaW5nIGZvciBSVEwg
d2hlcmUgbmVjZXNzYXJ5LgotICAgIC8vIEdseXBocyBhcmUgcG9zaXRpb25lZCBzdGFydGluZyBm
cm9tIG1fb2Zmc2V0WDsgaW4gUlRMIG1vZGUgdGhleSBnbyBsZWZ0d2FyZHMgZnJvbSB0aGVyZS4K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbS5udW1fZ2x5cGhzOyArK2kpIHsKLSAg
ICAgICAgd2hpbGUgKGxvZ0NsdXN0ZXJzSW5kZXggPCBtX2l0ZW0uaXRlbS5sZW5ndGggJiYgbV9p
dGVtLmxvZ19jbHVzdGVyc1tsb2dDbHVzdGVyc0luZGV4XSA8IGkpCi0gICAgICAgICAgICBsb2dD
bHVzdGVyc0luZGV4Kys7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZ2x5cGggaXMganVz
dCBhZnRlciBhIHNwYWNlLCBhZGQgaW4gdGhlIHdvcmQgc3BhY2luZy4KLSAgICAgICAgaWYgKGxv
Z0NsdXN0ZXJzSW5kZXggPCBtX2l0ZW0uaXRlbS5sZW5ndGggJiYgaXNXb3JkRW5kKG1faXRlbS5p
dGVtLnBvcyArIGxvZ0NsdXN0ZXJzSW5kZXgpKQotICAgICAgICAgICAgcG9zaXRpb24gKz0gZGV0
ZXJtaW5lV29yZEJyZWFrU3BhY2luZygpOwotCi0gICAgICAgIG1fZ2x5cGhzMTZbaV0gPSBtX2l0
ZW0uZ2x5cGhzW2ldOwotICAgICAgICBkb3VibGUgb2Zmc2V0WCA9IHRydW5jYXRlRml4ZWRQb2lu
dFRvSW50ZWdlcihtX2l0ZW0ub2Zmc2V0c1tpXS54KTsKLSAgICAgICAgZG91YmxlIG9mZnNldFkg
PSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLm9mZnNldHNbaV0ueSk7Ci0gICAg
ICAgIGRvdWJsZSBhZHZhbmNlID0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKG1faXRlbS5h
ZHZhbmNlc1tpXSk7Ci0gICAgICAgIGlmIChpc1JUTCkKLSAgICAgICAgICAgIG9mZnNldFggLT0g
YWR2YW5jZTsKLQotICAgICAgICBtX3Bvc2l0aW9uc1tpXS5zZXQobV9vZmZzZXRYICsgKHBvc2l0
aW9uICogcnRsRmxpcCkgKyBvZmZzZXRYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9z
dGFydGluZ1kgKyBvZmZzZXRZKTsKLQotICAgICAgICBpZiAobV9jdXJyZW50Rm9udERhdGEtPmlz
WmVyb1dpZHRoU3BhY2VHbHlwaChtX2dseXBoczE2W2ldKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIC8vIEF0IHRoZSBlbmQgb2YgZWFjaCBjbHVzdGVyLCBhZGQgaW4gdGhlIGxl
dHRlciBzcGFjaW5nLgotICAgICAgICBpZiAoaSArIDEgPT0gbV9pdGVtLm51bV9nbHlwaHMgfHwg
bV9pdGVtLmF0dHJpYnV0ZXNbaSArIDFdLmNsdXN0ZXJTdGFydCkKLSAgICAgICAgICAgIHBvc2l0
aW9uICs9IG1fbGV0dGVyU3BhY2luZzsKLQotICAgICAgICBwb3NpdGlvbiArPSBhZHZhbmNlOwot
ICAgIH0KLSAgICBtX3BpeGVsV2lkdGggPSBzdGQ6Om1heChwb3NpdGlvbiwgMC4wKTsKLSAgICBt
X29mZnNldFggKz0gbV9waXhlbFdpZHRoICogcnRsRmxpcDsKLX0KLQotaW50IENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Z2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0UnVuKGludCB0YXJnZXRY
KSBjb25zdAotewotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZ2x5cGhzIGluIGxvZ2ljYWwg
b3JkZXIsIHNlZWluZyB3aGV0aGVyIHRhcmdldFggZmFsbHMgYmV0d2VlbiB0aGUgcHJldmlvdXMK
LSAgICAvLyBwb3NpdGlvbiBhbmQgaGFsZndheSB0aHJvdWdoIHRoZSBjdXJyZW50IGdseXBoLgot
ICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgcHJvYmFibHkgYmVsb25ncyBpbiBDb21wbGV4VGV4dENv
bnRyb2xsZXIuCi0gICAgaW50IGxhc3RYID0gb2Zmc2V0WCgpIC0gKHJ0bCgpID8gLW1fcGl4ZWxX
aWR0aCA6IG1fcGl4ZWxXaWR0aCk7Ci0gICAgZm9yIChpbnQgZ2x5cGhJbmRleCA9IDA7IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihnbHlwaEluZGV4KSA8IGxlbmd0aCgpOyArK2dseXBoSW5kZXgpIHsK
LSAgICAgICAgaW50IGFkdmFuY2UgPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVt
LmFkdmFuY2VzW2dseXBoSW5kZXhdKTsKLSAgICAgICAgaW50IG5leHRYID0gc3RhdGljX2Nhc3Q8
aW50Pihwb3NpdGlvbnMoKVtnbHlwaEluZGV4XS54KCkpICsgYWR2YW5jZSAvIDI7Ci0gICAgICAg
IGlmIChzdGQ6Om1pbihuZXh0WCwgbGFzdFgpIDw9IHRhcmdldFggJiYgdGFyZ2V0WCA8PSBzdGQ6
Om1heChuZXh0WCwgbGFzdFgpKQotICAgICAgICAgICAgcmV0dXJuIGdseXBoSW5kZXg7Ci0gICAg
ICAgIGxhc3RYID0gbmV4dFg7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxlbmd0aCgpIC0gMTsKLX0K
LQotaW50IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50IHRhcmdl
dFgpCi17Ci0gICAgdW5zaWduZWQgYmFzZVBvc2l0aW9uID0gMDsKLQotICAgIGludCB4ID0gb2Zm
c2V0WCgpOwotICAgIHdoaWxlIChuZXh0U2NyaXB0UnVuKCkpIHsKLSAgICAgICAgaW50IG5leHRY
ID0gb2Zmc2V0WCgpOwotCi0gICAgICAgIGlmIChzdGQ6Om1pbih4LCBuZXh0WCkgPD0gdGFyZ2V0
WCAmJiB0YXJnZXRYIDw9IHN0ZDo6bWF4KHgsIG5leHRYKSkgewotICAgICAgICAgICAgLy8gVGhl
IHggdmFsdWUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIHRoaXMgc2NyaXB0IHJ1bi4KLSAgICAgICAg
ICAgIGNvbnN0IGludCBnbHlwaEluZGV4ID0gZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0
UnVuKHRhcmdldFgpOwotCi0gICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgZ2x5cGgg
aW5kZXgsIHdlIGhhdmUgdG8gdHVybiB0aGF0IGludG8gYQotICAgICAgICAgICAgLy8gY29kZS1w
b2ludCBpbmRleC4gQmVjYXVzZSBvZiBsaWdhdHVyZXMsIHNldmVyYWwgY29kZS1wb2ludHMgbWF5
Ci0gICAgICAgICAgICAvLyBoYXZlIGdvbmUgaW50byBhIHNpbmdsZSBnbHlwaC4gV2UgaXRlcmF0
ZSBvdmVyIHRoZSBjbHVzdGVycyBsb2cKLSAgICAgICAgICAgIC8vIGFuZCBmaW5kIHRoZSBmaXJz
dCBjb2RlLXBvaW50IHdoaWNoIGNvbnRyaWJ1dGVkIHRvIHRoZSBnbHlwaC4KLQotICAgICAgICAg
ICAgLy8gU29tZSBzaGFwZXJzIChpLmUuIEtobWVyKSB3aWxsIHByb2R1Y2UgY2x1c3RlciBsb2dz
IHdoaWNoIHJlcG9ydAotICAgICAgICAgICAgLy8gdGhhdCAvbm8vIGNvZGUgcG9pbnRzIGNvbnRy
aWJ1dGVkIHRvIGNlcnRhaW4gZ2x5cGhzLiBCZWNhdXNlIG9mCi0gICAgICAgICAgICAvLyB0aGlz
LCB3ZSB0YWtlIGFueSBjb2RlIHBvaW50IHdoaWNoIGNvbnRyaWJ1dGVkIHRvIHRoZSBnbHlwaCBp
bgotICAgICAgICAgICAgLy8gcXVlc3Rpb24sIG9yIGFueSBzdWJzZXF1ZW50IGdseXBoLiBJZiB3
ZSBydW4gb2ZmIHRoZSBlbmQsIHRoZW4KLSAgICAgICAgICAgIC8vIHdlIHRha2UgdGhlIGxhc3Qg
Y29kZSBwb2ludC4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBudW1Db2Rl
UG9pbnRzKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChtX2l0ZW0ubG9nX2NsdXN0ZXJz
W2pdID49IGdseXBoSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlUG9zaXRp
b24gKyBqOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gYmFzZVBvc2l0aW9u
ICsgbnVtQ29kZVBvaW50cygpIC0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGJhc2VQb3NpdGlv
biArPSBudW1Db2RlUG9pbnRzKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJhc2VQb3NpdGlvbjsK
LX0KLQotRmxvYXRSZWN0IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2VsZWN0aW9uUmVjdChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0bykKLXsKLSAg
ICBpbnQgZnJvbVggPSAtMSwgdG9YID0gLTE7Ci0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBz
Y3JpcHQgcnVucyBpbiBsb2dpY2FsIG9yZGVyLCBzZWFyY2hpbmcgZm9yIHRoZSBydW4gY292ZXJp
bmcgdGhlIHBvc2l0aW9ucyBvZiBpbnRlcmVzdC4KLSAgICB3aGlsZSAobmV4dFNjcmlwdFJ1bigp
ICYmIChmcm9tWCA9PSAtMSB8fCB0b1ggPT0gLTEpKSB7Ci0gICAgICAgIGlmIChmcm9tWCA9PSAt
MSAmJiBmcm9tID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb20pIDwgbnVtQ29kZVBv
aW50cygpKSB7Ci0gICAgICAgICAgICAvLyB8ZnJvbXwgaXMgd2l0aGluIHRoaXMgc2NyaXB0IHJ1
bi4gU28gd2UgaW5kZXggdGhlIGNsdXN0ZXJzIGxvZyB0bwotICAgICAgICAgICAgLy8gZmluZCB3
aGljaCBnbHlwaCB0aGlzIGNvZGUtcG9pbnQgY29udHJpYnV0ZWQgdG8gYW5kIGZpbmQgaXRzIHgK
LSAgICAgICAgICAgIC8vIHBvc2l0aW9uLgotICAgICAgICAgICAgaW50IGdseXBoID0gbV9pdGVt
LmxvZ19jbHVzdGVyc1tmcm9tXTsKLSAgICAgICAgICAgIGZyb21YID0gcG9zaXRpb25zKClbZ2x5
cGhdLngoKTsKLSAgICAgICAgICAgIGlmIChydGwoKSkKLSAgICAgICAgICAgICAgICBmcm9tWCAr
PSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLmFkdmFuY2VzW2dseXBoXSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZnJvbSAtPSBudW1Db2RlUG9pbnRzKCk7Ci0KLSAg
ICAgICAgaWYgKHRvWCA9PSAtMSAmJiB0byA+PSAwICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
bykgPCBudW1Db2RlUG9pbnRzKCkpIHsKLSAgICAgICAgICAgIGludCBnbHlwaCA9IG1faXRlbS5s
b2dfY2x1c3RlcnNbdG9dOwotICAgICAgICAgICAgdG9YID0gcG9zaXRpb25zKClbZ2x5cGhdLngo
KTsKLSAgICAgICAgICAgIGlmIChydGwoKSkKLSAgICAgICAgICAgICAgICB0b1ggKz0gdHJ1bmNh
dGVGaXhlZFBvaW50VG9JbnRlZ2VyKG1faXRlbS5hZHZhbmNlc1tnbHlwaF0pOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHRvIC09IG51bUNvZGVQb2ludHMoKTsKLSAgICB9Ci0KLSAgICAv
LyBUaGUgcG9zaXRpb24gaW4gcXVlc3Rpb24gbWlnaHQgYmUganVzdCBhZnRlciB0aGUgdGV4dC4K
LSAgICBpZiAoZnJvbVggPT0gLTEpCi0gICAgICAgIGZyb21YID0gb2Zmc2V0WCgpOwotICAgIGlm
ICh0b1ggPT0gLTEpCi0gICAgICAgIHRvWCA9IG9mZnNldFgoKTsKLQotICAgIEFTU0VSVChmcm9t
WCAhPSAtMSAmJiB0b1ggIT0gLTEpOwotCi0gICAgaWYgKGZyb21YIDwgdG9YKQotICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIGZyb21YLCBwb2ludC55KCksIHRvWCAtIGZyb21Y
LCBoZWlnaHQpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyB0b1gsIHBvaW50
LnkoKSwgZnJvbVggLSB0b1gsIGhlaWdodCk7Ci19Ci0KLXZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjpnbHlwaHNGb3JSYW5nZShpbnQgZnJvbSwgaW50IHRvLCBpbnQmIGZyb21HbHlwaCwgaW50
JiBnbHlwaExlbmd0aCkKLXsKLSAgICAvLyBDaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gdGhlIGN1
cnJlbnQgcnVuLiBUSEVTRSBNQVkgTk9UIEJFIElOIFJBTkdFIGFuZCBtYXkKLSAgICAvLyBiZSBu
ZWdhdGl2ZSwgZXRjLiBUaGUgY29kZSBiZWxvdyBoYW5kbGVzIHRoaXMuCi0gICAgaW50IGZyb21D
aGFyID0gZnJvbSAtIG1faXRlbS5pdGVtLnBvczsKLSAgICBpbnQgdG9DaGFyID0gdG8gLSBtX2l0
ZW0uaXRlbS5wb3M7Ci0KLSAgICAvLyBTZWUgaWYgdGhlcmUgYXJlIGFueSBjaGFyYWN0ZXJzIGlu
IHRoZSBjdXJyZW50IHJ1bi4KLSAgICBpZiAoIW51bUNvZGVQb2ludHMoKSB8fCBmcm9tQ2hhciA+
PSBzdGF0aWNfY2FzdDxpbnQ+KG51bUNvZGVQb2ludHMoKSkgfHwgdG9DaGFyIDw9IDApIHsKLSAg
ICAgICAgZnJvbUdseXBoID0gLTE7Ci0gICAgICAgIGdseXBoTGVuZ3RoID0gMDsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIENvbXB1dGUgdGhlIHN0YXJ0aW5nIGdseXBoIHdpdGhp
biB0aGlzIHNwYW4uIHxmcm9tfCBhbmQgfHRvfCBhcmUKLSAgICAvLyBnbG9iYWwgb2Zmc2V0cyB0
aGF0IG1heSBpbnRlcnNlY3QgYXJiaXRyYXJpbHkgd2l0aCBvdXIgbG9jYWwgcnVuLgotICAgIGZy
b21HbHlwaCA9IG1faXRlbS5sb2dfY2x1c3RlcnNbZnJvbUNoYXIgPCAwID8gMCA6IGZyb21DaGFy
XTsKLSAgICBpZiAodG9DaGFyID49IHN0YXRpY19jYXN0PGludD4obnVtQ29kZVBvaW50cygpKSkK
LSAgICAgICAgZ2x5cGhMZW5ndGggPSBsZW5ndGgoKSAtIGZyb21HbHlwaDsKLSAgICBlbHNlCi0g
ICAgICAgIGdseXBoTGVuZ3RoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1t0b0NoYXJdIC0gZnJvbUds
eXBoOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJm
QnV6ei5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxl
eFRleHRDb250cm9sbGVySGFyZkJ1enouaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MTc1OGEzY2FiYmJkZWY3MmU3ZTM1ZjcyYWVhZjc2OTAyN2YzOTg4Ni4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZC
dXp6X2gKLSNkZWZpbmUgQ29tcGxleFRleHRDb250cm9sbGVySGFyZkJ1enpfaAotCi0jaW5jbHVk
ZSAiSGFyZkJ1enpTaGFwZXJCYXNlLmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpTa2lhLmgiCi0jaW5j
bHVkZSAiU2tQb2ludC5oIgotI2luY2x1ZGUgIlNrU2NhbGFyLmgiCi0jaW5jbHVkZSAiVGV4dFJ1
bi5oIgotCi1leHRlcm4gIkMiIHsKLSNpbmNsdWRlICJoYXJmYnV6ei1zaGFwZXIuaCIKLX0KLQot
I2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
Rm9udDsKLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci1jbGFzcyBTaW1wbGVGb250RGF0YTsKLQot
Ly8gQ29tcGxleFRleHRDb250cm9sbGVyIHdhbGtzIGEgVGV4dFJ1biBhbmQgcHJlc2VudHMgZWFj
aCBzY3JpcHQgcnVuIGluIHNlcXVlbmNlLiBBCi0vLyBUZXh0UnVuIGlzIGEgc2VxdWVuY2Ugb2Yg
Y29kZS1wb2ludHMgd2l0aCB0aGUgc2FtZSBlbWJlZGRpbmcgbGV2ZWwgKGkuZS4gdGhleQotLy8g
YXJlIGFsbCBsZWZ0LXRvLXJpZ2h0IG9yIHJpZ2h0LXRvLWxlZnQpLiBBIHNjcmlwdCBydW4gaXMg
YSBzdWJzZXF1ZW5jZSB3aGVyZQotLy8gYWxsIHRoZSBjaGFyYWN0ZXJzIGhhdmUgdGhlIHNhbWUg
c2NyaXB0IChlLmcuIEFyYWJpYywgVGhhaSBldGMpLiBTaGFwaW5nIGlzCi0vLyBvbmx5IGV2ZXIg
ZG9uZSB3aXRoIHNjcmlwdCBydW5zIHNpbmNlIHRoZSBzaGFwZXJzIG9ubHkga25vdyBob3cgdG8g
ZGVhbCB3aXRoCi0vLyBhIHNpbmdsZSBzY3JpcHQuCi0vLwotLy8gSXRlcmF0aW9uIGlzIGFsd2F5
cyBpbiBsb2dpY2FsIChha2EgcmVhZGluZykgb3JkZXIuIEZvciBSVEwgdGV4dCB0aGF0IG1lYW5z
Ci0vLyB0aGUgcmlnaHRtb3N0IHBhcnQgb2YgdGhlIHRleHQgd2lsbCBiZSBmaXJzdC4KLS8vCi0v
LyBPbmNlIHlvdSBoYXZlIHNldHVwIHRoZSBvYmplY3QsIGNhbGwgfG5leHRTY3JpcHRSdW58IHRv
IGdldCB0aGUgZmlyc3Qgc2NyaXB0Ci0vLyBydW4uIFRoaXMgd2lsbCByZXR1cm4gZmFsc2Ugd2hl
biB0aGUgaXRlcmF0aW9uIGlzIGNvbXBsZXRlLiBBdCBhbnkgdGltZSB5b3UKLS8vIGNhbiBjYWxs
IHxyZXNldHwgdG8gc3RhcnQgb3ZlciBhZ2Fpbi4KLWNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxl
ciA6IHB1YmxpYyBIYXJmQnV6elNoYXBlckJhc2UgewotcHVibGljOgotICAgIENvbXBsZXhUZXh0
Q29udHJvbGxlcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIGludCBzdGFydGluZ1gsIGlu
dCBzdGFydGluZ1kpOwotICAgIHZpcnR1YWwgfkNvbXBsZXhUZXh0Q29udHJvbGxlcigpOwotCi0g
ICAgdm9pZCByZXNldChpbnQgb2Zmc2V0KTsKLSAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHNj
cmlwdCBydW4sIHJldHVybmluZyBmYWxzZSB3aGVuIHRoZSBlbmQgb2YgdGhlCi0gICAgLy8gVGV4
dFJ1biBoYXMgYmVlbiByZWFjaGVkLgotICAgIGJvb2wgbmV4dFNjcmlwdFJ1bigpOwotICAgIGZs
b2F0IHdpZHRoT2ZGdWxsUnVuKCk7Ci0KLSAgICB2b2lkIHNldHVwRm9yUlRMKCk7Ci0gICAgYm9v
bCBydGwoKSBjb25zdCB7IHJldHVybiBtX3J1bi5ydGwoKTsgfQotICAgIGNvbnN0IHVpbnQxNl90
KiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBoczE2OyB9Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggb2YgZ2x5cGhzIGZvciB0aGUgcmFuZ2UgW2Zyb20s
IHRvKSBpbiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgotICAgIHZvaWQgZ2x5cGhzRm9yUmFuZ2Uo
aW50IGZyb20sIGludCB0bywgaW50JiBmcm9tR2x5cGgsIGludCYgZ2x5cGhMZW5ndGgpOwotCi0g
ICAgLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHJldHVybmVkIGJ5IHxnbHlwaHN8
Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLm51bV9nbHlwaHM7
IH0KLQotICAgIC8vIFJldHVybiB0aGUgb2Zmc2V0IGZvciBlYWNoIG9mIHRoZSBnbHlwaHMuIE5v
dGUgdGhhdCB0aGlzIGlzIHRyYW5zbGF0ZWQKLSAgICAvLyBieSB0aGUgY3VycmVudCB4IG9mZnNl
dCBhbmQgdGhhdCB0aGUgeCBvZmZzZXQgaXMgdXBkYXRlZCBmb3IgZWFjaCBzY3JpcHQKLSAgICAv
LyBydW4uCi0gICAgY29uc3QgU2tQb2ludCogcG9zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9w
b3NpdGlvbnM7IH0KLQotICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGlu
IHRoZSBjdXJyZW50IHNjcmlwdCBydW4KLSAgICB1bnNpZ25lZCBudW1Db2RlUG9pbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9pdGVtLml0ZW0ubGVuZ3RoOyB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGN1
cnJlbnQgcGl4ZWwgcG9zaXRpb24gb2YgdGhlIGNvbnRyb2xsZXIuCi0gICAgdW5zaWduZWQgb2Zm
c2V0WCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0WDsgfQotCi0gICAgY29uc3QgRm9udFBsYXRm
b3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YUZvclNjcmlwdFJ1bigpIHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KG1faXRlbS5mb250LT51c2VyRGF0YSk7IH0KLQot
ICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQpOwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25S
ZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSAsIGludCB0byk7Ci0K
LXByaXZhdGU6Ci0gICAgLy8gUmV0dXJuIHRoZSB3aWR0aCAoaW4gcHgpIG9mIHRoZSBjdXJyZW50
IHNjcmlwdCBydW4uCi0gICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3BpeGVs
V2lkdGg7IH0KLQotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIGdldENvbXBsZXhGb250UGxh
dGZvcm1EYXRhKCk7Ci0gICAgdm9pZCBzZXR1cEZvbnRGb3JTY3JpcHRSdW4oKTsKLSAgICB2b2lk
IGRlbGV0ZUdseXBoQXJyYXlzKCk7Ci0gICAgdm9pZCBjcmVhdGVHbHlwaEFycmF5cyhpbnQpOwot
ICAgIHZvaWQgcmVzZXRHbHlwaEFycmF5cygpOwotICAgIHZvaWQgc2hhcGVHbHlwaHMoKTsKLSAg
ICB2b2lkIHNldEdseXBoUG9zaXRpb25zKGJvb2wpOwotCi0gICAgaW50IGdseXBoSW5kZXhGb3JY
UG9zaXRpb25JblNjcmlwdFJ1bihpbnQgdGFyZ2V0WCkgY29uc3Q7Ci0KLSAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogbV9jdXJyZW50Rm9udERhdGE7Ci0gICAgSEJfU2hhcGVySXRlbSBtX2l0ZW07
Ci0gICAgdWludDE2X3QqIG1fZ2x5cGhzMTY7IC8vIEEgdmVjdG9yIG9mIDE2LWJpdCBnbHlwaCBp
ZHMuCi0gICAgU2tQb2ludCogbV9wb3NpdGlvbnM7IC8vIEEgdmVjdG9yIG9mIHBvc2l0aW9ucyBm
b3IgZWFjaCBnbHlwaC4KLSAgICBzc2l6ZV90IG1faW5kZXhPZk5leHRTY3JpcHRSdW47IC8vIElu
ZGV4ZXMgdGhlIHNjcmlwdCBydW4gaW4gfG1fcnVufC4KLSAgICBpbnQgbV9vZmZzZXRYOyAvLyBP
ZmZzZXQgaW4gcGl4ZWxzIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBzY3JpcHQgcnVuLgotICAg
IGludCBtX3N0YXJ0aW5nWTsgLy8gVGhlIFkgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIHNjcmlwdCBy
dW4uCi0gICAgdW5zaWduZWQgbV9waXhlbFdpZHRoOyAvLyBXaWR0aCAoaW4gcHgpIG9mIHRoZSBj
dXJyZW50IHNjcmlwdCBydW4uCi0gICAgdW5zaWduZWQgbV9nbHlwaHNBcnJheUNhcGFjaXR5OyAv
LyBDdXJyZW50IHNpemUgb2YgYWxsIHRoZSBIYXJmYnV6eiBhcnJheXMuCi0KLSAgICBTdHJpbmcg
bV9zbWFsbENhcHNTdHJpbmc7IC8vIHN1YnN0cmluZyBvZiBtX3J1biBjb252ZXJ0ZWQgdG8gc21h
bGwgY2Fwcy4KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENvbXBs
ZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCmluZGV4IDVjNzkw
MDQ4OGQwMmJiY2I0MTc3NjU3ODBhZDRlNjkzYjY3ZTdkYjQuLmViNzA5ZTMyMTgzNTcxYmE3NGM0
ZTBmZTQ4ZDFkMzk0ZmJhZGM0MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcApAQCAtMzEsMTYgKzMx
LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogCi0jaWYgVVNF
KEhBUkZCVVpaX05HKQotI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCi0jZWxzZQotI2luY2x1
ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlckhhcmZCdXp6LmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpT
a2lhLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGFyZkJ1
enpTaGFwZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgpAQCAtMTgyLDcg
KzE3Niw2IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2Ms
IGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAgc2V0dXBGb3JUZXh0UGFpbnRpbmcoJnN0cm9r
ZVBhaW50LCBnYy0+c3Ryb2tlQ29sb3IoKS5yZ2IoKSk7CiAgICAgfQogCi0jaWYgVVNFKEhBUkZC
VVpaX05HKQogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIEhhcmZCdXp6U2hhcGVy
IHNoYXBlcih0aGlzLCBydW4pOwogICAgIHNoYXBlci5zZXREcmF3UmFuZ2UoZnJvbSwgdG8pOwpA
QCAtMTkwLDMyICsxODMsNiBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRleHQqIGdjLCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgICAgIHJldHVybjsKICAgICBGbG9h
dFBvaW50IGFkanVzdGVkUG9pbnQgPSBzaGFwZXIuYWRqdXN0U3RhcnRQb2ludChwb2ludCk7CiAg
ICAgZHJhd0dseXBoQnVmZmVyKGdjLCBydW4sIGdseXBoQnVmZmVyLCBhZGp1c3RlZFBvaW50KTsK
LSNlbHNlCi0gICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0ID0gZ2MtPnBs
YXRmb3JtQ29udGV4dCgpOwotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRo
aXMsIHJ1biwgcG9pbnQueCgpLCBwb2ludC55KCkpOwotICAgIGlmIChydW4ucnRsKCkpCi0gICAg
ICAgIGNvbnRyb2xsZXIuc2V0dXBGb3JSVEwoKTsKLQotICAgIHdoaWxlIChjb250cm9sbGVyLm5l
eHRTY3JpcHRSdW4oKSkgewotICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgZ2x5cGgg
Zm91bmQgaW4gdGhlIGN1cnJlbnQgc2NyaXB0IHJ1bi4KLSAgICAgICAgaW50IGZyb21HbHlwaCwg
Z2x5cGhMZW5ndGg7Ci0gICAgICAgIGNvbnRyb2xsZXIuZ2x5cGhzRm9yUmFuZ2UoZnJvbSwgdG8s
IGZyb21HbHlwaCwgZ2x5cGhMZW5ndGgpOwotICAgICAgICBpZiAoZnJvbUdseXBoIDwgMCB8fCBn
bHlwaExlbmd0aCA8PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGZp
bGwpIHsKLSAgICAgICAgICAgIGNvbnRyb2xsZXIuZm9udFBsYXRmb3JtRGF0YUZvclNjcmlwdFJ1
bigpLT5zZXR1cFBhaW50KCZmaWxsUGFpbnQpOwotICAgICAgICAgICAgZ2MtPnBsYXRmb3JtQ29u
dGV4dCgpLT5hZGp1c3RUZXh0UmVuZGVyTW9kZSgmZmlsbFBhaW50KTsKLSAgICAgICAgICAgIHBs
YXRmb3JtQ29udGV4dC0+ZHJhd1Bvc1RleHQoY29udHJvbGxlci5nbHlwaHMoKSArIGZyb21HbHlw
aCwgZ2x5cGhMZW5ndGggPDwgMSwgY29udHJvbGxlci5wb3NpdGlvbnMoKSArIGZyb21HbHlwaCwg
ZmlsbFBhaW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdHJva2UpIHsKLSAgICAgICAg
ICAgIGNvbnRyb2xsZXIuZm9udFBsYXRmb3JtRGF0YUZvclNjcmlwdFJ1bigpLT5zZXR1cFBhaW50
KCZzdHJva2VQYWludCk7Ci0gICAgICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmFkanVz
dFRleHRSZW5kZXJNb2RlKCZzdHJva2VQYWludCk7Ci0gICAgICAgICAgICBwbGF0Zm9ybUNvbnRl
eHQtPmRyYXdQb3NUZXh0KGNvbnRyb2xsZXIuZ2x5cGhzKCkgKyBmcm9tR2x5cGgsIGdseXBoTGVu
Z3RoIDw8IDEsIGNvbnRyb2xsZXIucG9zaXRpb25zKCkgKyBmcm9tR2x5cGgsIHN0cm9rZVBhaW50
KTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25z
dCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29u
c3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8p
IGNvbnN0CkBAIC0yMjUsMTUgKzE5MiwxMCBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdAogCiBm
bG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIC8qIGZhbGxiYWNrRm9udHMgKi8sIEdseXBo
T3ZlcmZsb3cqIC8qIGdseXBoT3ZlcmZsb3cgKi8pIGNvbnN0CiB7Ci0jaWYgVVNFKEhBUkZCVVpa
X05HKQogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwogICAgIGlmICghc2hh
cGVyLnNoYXBlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzaGFwZXIudG90YWxX
aWR0aCgpOwotI2Vsc2UKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlz
LCBydW4sIDAsIDApOwotICAgIHJldHVybiBjb250cm9sbGVyLndpZHRoT2ZGdWxsUnVuKCk7Ci0j
ZW5kaWYKIH0KIAogLy8gUmV0dXJuIHRoZSBjb2RlIHBvaW50IGluZGV4IGZvciB0aGUgZ2l2ZW4g
fHh8IG9mZnNldCBpbnRvIHRoZSB0ZXh0IHJ1bi4KQEAgLTI0NCwxOSArMjA2LDEwIEBAIGludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeEZsb2F0LAogICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1ZyBo
dHRwOi8vd2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgogICAg
IGludCB0YXJnZXRYID0gc3RhdGljX2Nhc3Q8aW50Pih4RmxvYXQpOwogCi0jaWYgVVNFKEhBUkZC
VVpaX05HKQogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwogICAgIGlmICgh
c2hhcGVyLnNoYXBlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzaGFwZXIub2Zm
c2V0Rm9yUG9zaXRpb24odGFyZ2V0WCk7Ci0jZWxzZQotICAgIC8vIChNYWMgY29kZSBpZ25vcmVz
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBhbmQgdGhleSBkb24ndCBrbm93IHdoYXQgaXQncwotICAg
IC8vIHN1cHBvc2VkIHRvIGRvLCBzbyB3ZSBqdXN0IGlnbm9yZSBpdCBhcyB3ZWxsLikKLSAgICBD
b21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIDAsIDApOwotICAgIGlm
IChydW4ucnRsKCkpCi0gICAgICAgIGNvbnRyb2xsZXIuc2V0dXBGb3JSVEwoKTsKLSAgICByZXR1
cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih0YXJnZXRYKTsKLSNlbmRpZgogfQogCiAv
LyBSZXR1cm4gdGhlIHJlY3RhbmdsZSBmb3Igc2VsZWN0aW5nIHRoZSBnaXZlbiByYW5nZSBvZiBj
b2RlLXBvaW50cyBpbiB0aGUgVGV4dFJ1bi4KQEAgLTI2NCwxNyArMjE3LDEwIEBAIEZsb2F0UmVj
dCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKLSNpZiBVU0UoSEFSRkJVWlpf
TkcpCiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CiAgICAgaWYgKCFzaGFw
ZXIuc2hhcGUoKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogICAgIHJldHVybiBzaGFw
ZXIuc2VsZWN0aW9uUmVjdChwb2ludCwgaGVpZ2h0LCBmcm9tLCB0byk7Ci0jZWxzZQotICAgIENv
bXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgMCwgMCk7Ci0gICAgaWYg
KHJ1bi5ydGwoKSkKLSAgICAgICAgY29udHJvbGxlci5zZXR1cEZvclJUTCgpOwotICAgIHJldHVy
biBjb250cm9sbGVyLnNlbGVjdGlvblJlY3QocG9pbnQsIGhlaWdodCwgZnJvbSwgdG8pOwotI2Vu
ZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZv
cm1EYXRhSGFyZkJ1enouY3BwCmluZGV4IGQxMDYxMWE5ZjkwNDg1NGQzZTNkNDQ3OTlhYmJkNDYw
Y2NjNWQ3YTUuLjQwZTU2NTI3MjhkNjU4NzBiYWY4MjU3NmZiZTk4ZGU2ZjIxNTA1MWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0
Zm9ybURhdGFIYXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcApAQCAtMzIsMTggKzMyLDEz
IEBACiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgiCiAKICNpbmNsdWRlICJG
b250Q2FjaGUuaCIKKyNpbmNsdWRlICJIYXJmQnV6ek5HRmFjZS5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiU2tBZHZhbmNlZFR5cGVmYWNlTWV0cmljcy5oIgogI2lu
Y2x1ZGUgIlNrRm9udEhvc3QuaCIKICNpbmNsdWRlICJTa1BhaW50LmgiCiAjaW5jbHVkZSAiU2tU
eXBlZmFjZS5oIgogCi0jaWYgVVNFKEhBUkZCVVpaX05HKQotI2luY2x1ZGUgIkhhcmZCdXp6TkdG
YWNlLmgiCi0jZWxzZQotI2luY2x1ZGUgIkhhcmZCdXp6U2tpYS5oIgotI2VuZGlmCi0KICNpbmNs
dWRlIDxwdWJsaWMvbGludXgvV2ViRm9udEluZm8uaD4KICNpbmNsdWRlIDxwdWJsaWMvbGludXgv
V2ViRm9udFJlbmRlclN0eWxlLmg+CiAjaW5jbHVkZSA8cHVibGljL2xpbnV4L1dlYlNhbmRib3hT
dXBwb3J0Lmg+CkBAIC0yNzMsNyArMjY4LDYgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0Zp
eGVkUGl0Y2goKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotI2lmIFVTRShIQVJGQlVa
Wl9ORykKIEhhcmZCdXp6TkdGYWNlKiBGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKSBj
b25zdAogewogICAgIGlmICghbV9oYXJmYnV6ekZhY2UpCkBAIC0yODEsMTUgKzI3NSw2IEBAIEhh
cmZCdXp6TkdGYWNlKiBGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKSBjb25zdAogCiAg
ICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdldCgpOwogfQotI2Vsc2UKLUhhcmZidXp6RmFjZSog
Rm9udFBsYXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faGFy
ZmJ1enpGYWNlKQotICAgICAgICBtX2hhcmZidXp6RmFjZSA9IEhhcmZidXp6RmFjZTo6Y3JlYXRl
KGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpKTsKLQotICAgIHJldHVybiBtX2hh
cmZidXp6RmFjZS5nZXQoKTsKLX0KLSNlbmRpZgogCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6Omdl
dFJlbmRlclN0eWxlRm9yU3RyaWtlKGNvbnN0IGNoYXIqIGZvbnQsIGludCBzaXplQW5kU3R5bGUp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oCmluZGV4IGNlYjhkMjI5
YTNhN2EzZThkNTE1OTI4MGQ4YWVmNjJmYjU0MzkwYTMuLjhmZWExNTRkYWY1YjFhMjAyY2QwYjAw
ZThlMWRjYmQwMzk2MjhlNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6
ei5oCkBAIC00NywxMiArNDcsNyBAQCB0eXBlZGVmIHVpbnQzMl90IFNrRm9udElEOwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250RGVzY3JpcHRpb247Ci0KLSNpZiBVU0UoSEFSRkJV
WlpfTkcpCiBjbGFzcyBIYXJmQnV6ek5HRmFjZTsKLSNlbHNlCi1jbGFzcyBIYXJmYnV6ekZhY2U7
Ci0jZW5kaWYKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZvbnRQbGF0Zm9ybURhdGEg
aXMgdGhlIGhhbmRsZSB3aGljaCBXZWJLaXQgaGFzIG9uIGEgc3BlY2lmaWMgZmFjZS4gQSBmYWNl
CkBAIC0xMTIsMTEgKzEwNyw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBj
b25zdDsKICNlbmRpZgogCi0jaWYgVVNFKEhBUkZCVVpaX05HKQogICAgIEhhcmZCdXp6TkdGYWNl
KiBoYXJmYnV6ekZhY2UoKSBjb25zdDsKLSNlbHNlCi0gICAgSGFyZmJ1enpGYWNlKiBoYXJmYnV6
ekZhY2UoKSBjb25zdDsKLSNlbmRpZgogCiAgICAgLy8gVGhlIHJldHVybmVkIHN0eWxlcyBhcmUg
YWxsIGFjdHVhbCBzdHlsZXMgd2l0aG91dCBGb250UmVuZGVyU3R5bGU6Ok5vUHJlZmVyZW5jZS4K
ICAgICBjb25zdCBGb250UmVuZGVyU3R5bGUmIGZvbnRSZW5kZXJTdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGU7IH0KQEAgLTE0NCwxMSArMTM1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
ZmFrZUl0YWxpYzsKICAgICBGb250T3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKICAgICBGb250
UmVuZGVyU3R5bGUgbV9zdHlsZTsKLSNpZiBVU0UoSEFSRkJVWlpfTkcpCiAgICAgbXV0YWJsZSBS
ZWZQdHI8SGFyZkJ1enpOR0ZhY2U+IG1faGFyZmJ1enpGYWNlOwotI2Vsc2UKLSAgICBtdXRhYmxl
IFJlZlB0cjxIYXJmYnV6ekZhY2U+IG1faGFyZmJ1enpGYWNlOwotI2VuZGlmCiAKICAgICBTa1R5
cGVmYWNlKiBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxTa1R5cGVmYWNlKj4oLTEpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlODg2N2JiNzU3ZjIyNDJlOGY0OTYyZjg3NWIx
YmRmN2FlOTkxMmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lh
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChj
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
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
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkhhcmZCdXp6U2tpYS5oIgotCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5o
IgotCi0jaW5jbHVkZSAiU2tGb250SG9zdC5oIgotI2luY2x1ZGUgIlNrUGFpbnQuaCIKLSNpbmNs
dWRlICJTa1BhdGguaCIKLSNpbmNsdWRlICJTa1BvaW50LmgiCi0jaW5jbHVkZSAiU2tSZWN0Lmgi
Ci0jaW5jbHVkZSAiU2tVdGlscy5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLQotZXh0ZXJuICJDIiB7Ci0jaW5jbHVkZSAiaGFyZmJ1
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
IElmIEhhcmZidXp6IHNwZWNpZmllZCBhIDAgYnVmZmVyIHRoZW4gaXQncyBhc2tpbmcgZm9yIHRo
ZSBzaXplIG9mIHRoZSB0YWJsZS4KLSAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICAqbGVuID0g
dGFibGVTaXplOwotICAgICAgICByZXR1cm4gSEJfRXJyX09rOwotICAgIH0KLQotICAgIGlmICgq
bGVuIDwgdGFibGVTaXplKQotICAgICAgICByZXR1cm4gSEJfRXJyX0ludmFsaWRfQXJndW1lbnQ7
Ci0gICAgU2tGb250SG9zdDo6R2V0VGFibGVEYXRhKGZvbnQtPnVuaXF1ZUlEKCksIHRhZywgMCwg
dGFibGVTaXplLCBidWZmZXIpOwotICAgIHJldHVybiBIQl9FcnJfT2s7Ci19Ci0KLXR5cGVkZWYg
cGFpcjxIQl9GYWNlUmVjXyosIHVuc2lnbmVkPiBGYWNlQ2FjaGVFbnRyeTsKLXR5cGVkZWYgSGFz
aE1hcDx1bnNpZ25lZCBpbnQsIEZhY2VDYWNoZUVudHJ5LCBXVEY6OkludEhhc2g8dW5zaWduZWQg
aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZCBpbnQ+ID4g
SGFyZmJ1enpGYWNlQ2FjaGU7Ci1zdGF0aWMgSGFyZmJ1enpGYWNlQ2FjaGUqIGdIYXJmYnV6ekZh
Y2VDYWNoZSA9IDA7Ci0KLXN0YXRpYyBIQl9GYWNlUmVjXyogZ2V0Q2FjaGVkSGFyZmJ1enpGYWNl
KEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKLXsKLSAgICBpZiAoIWdIYXJmYnV6ekZh
Y2VDYWNoZSkKLSAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlID0gbmV3IEhhcmZidXp6RmFjZUNh
Y2hlOwotICAgIFNrRm9udElEIHVuaXF1ZUlEID0gcGxhdGZvcm1EYXRhLT51bmlxdWVJRCgpOwot
ICAgIEhhcmZidXp6RmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBnSGFyZmJ1enpGYWNlQ2Fj
aGUtPmZpbmQodW5pcXVlSUQpOwotICAgIGlmIChyZXN1bHQgPT0gZ0hhcmZidXp6RmFjZUNhY2hl
LT5lbmQoKSkgewotICAgICAgICBGYWNlQ2FjaGVFbnRyeSBlbnRyeShIQl9OZXdGYWNlKHBsYXRm
b3JtRGF0YSwgaGFyZmJ1enpTa2lhR2V0VGFibGUpLCAxKTsKLSAgICAgICAgZ0hhcmZidXp6RmFj
ZUNhY2hlLT5zZXQodW5pcXVlSUQsIGVudHJ5KTsKLSAgICAgICAgcmV0dXJuIGVudHJ5LmZpcnN0
OwotICAgIH0KLSAgICArKyhyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCk7Ci0gICAgcmV0dXJu
IHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbGVhc2VDYWNo
ZWRIYXJmYnV6ekZhY2UoU2tGb250SUQgdW5pcXVlSUQpCi17Ci0gICAgSGFyZmJ1enpGYWNlQ2Fj
aGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1bmlxdWVJRCk7
Ci0gICAgQVNTRVJUKHJlc3VsdCAhPSBnSGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgpKTsKLSAgICBB
U1NFUlQocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1bHQuZ2V0
KCktPnZhbHVlLnNlY29uZCk7Ci0gICAgaWYgKCEocmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQp
KSB7Ci0gICAgICAgIEhCX0ZyZWVGYWNlKHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3QpOwotICAg
ICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnJlbW92ZSh1bmlxdWVJRCk7Ci0gICAgfQotfQotCi1I
YXJmYnV6ekZhY2U6OkhhcmZidXp6RmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEp
Ci0gICAgOiBtX3VuaXF1ZUlEKHBsYXRmb3JtRGF0YS0+dW5pcXVlSUQoKSkKLXsKLSAgICBtX2hh
cmZidXp6RmFjZSA9IGdldENhY2hlZEhhcmZidXp6RmFjZShwbGF0Zm9ybURhdGEpOwotfQotCi1I
YXJmYnV6ekZhY2U6On5IYXJmYnV6ekZhY2UoKQotewotICAgIHJlbGVhc2VDYWNoZWRIYXJmYnV6
ekZhY2UobV91bmlxdWVJRCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tp
YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpT
a2lhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNmI0NDNmMTM2NGNhNzQzMTM4
MjZmOTUxNjliYmZkMjc1ZGQ5MmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFy
ZkJ1enpTa2lhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSGFyZkJ1
enpTa2lhX2gKLSNkZWZpbmUgSGFyZkJ1enpTa2lhX2gKLQotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1zdHJ1Y3QgSEJfRmFjZVJlY187Ci1z
dHJ1Y3QgSEJfRm9udF87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udFBsYXRm
b3JtRGF0YTsKLQotY2xhc3MgSGFyZmJ1enpGYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SGFyZmJ1
enpGYWNlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SGFyZmJ1enpGYWNlPiBj
cmVhdGUoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBIYXJmYnV6ekZhY2UocGxhdGZvcm1EYXRhKSk7Ci0gICAgfQotCi0g
ICAgfkhhcmZidXp6RmFjZSgpOwotCi0gICAgSEJfRmFjZVJlY18qIGZhY2UoKSBjb25zdCB7IHJl
dHVybiBtX2hhcmZidXp6RmFjZTsgfQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IEhhcmZidXp6
RmFjZShGb250UGxhdGZvcm1EYXRhKik7Ci0KLSAgICB1aW50MzJfdCBtX3VuaXF1ZUlEOwotICAg
IEhCX0ZhY2VSZWNfKiBtX2hhcmZidXp6RmFjZTsKLX07Ci0KLS8vIEZJWE1FOiBSZW1vdmUgdGhp
cyBhc3ltbWV0cmljIGFsbG9jL2ZyZWUgZnVuY3Rpb24uCi0vLyBXZSdsbCByZW1vdmUgdGhpcyBv
bmNlIHdlIG1vdmUgdG8gdGhlIG5ldyBIYXJmYnV6eiBBUEkuCi1IQl9Gb250XyogYWxsb2NIYXJm
YnV6ekZvbnQoKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFT
a2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9u
dERhdGFTa2lhLmNwcAppbmRleCA0ZmMwOTgxMjQ4OWU4YmEzZmY3ZmYwM2UwNjlkNzJlOThjNjVi
Njk4Li40NTZhMzZmNDg0ODhmYjE0NTFmZjY2NWUyZTYzYzFhMGJmMTMxYTNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tp
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVG
b250RGF0YVNraWEuY3BwCkBAIC0yNTEsNyArMjUxLDcgQEAgZmxvYXQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICByZXR1cm4gU2tT
Y2FsYXJUb0Zsb2F0KHdpZHRoKTsKIH0KIAotI2lmIFVTRShIQVJGQlVaWl9ORykKKyNpZiBVU0Uo
SEFSRkJVWlopCiBib29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0
ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QK
IHsKICAgICBpZiAoIW1fY29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCmluZGV4IGMyNDRhZDlkMWY4NzkzOTdkZDZkNzEyODA2
NTk2NjM2NWQ0NTI5OGEuLjFkZjRkYjE3NmUxNDk5YTcxNWIzMjY5NThkOGY5YTkyNTQ5MWY0ZWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTI0OSw3ICsyNDksNyBAQAog
ICAgICAgfV0sCiAgICAgICBbJ3VzZV94MTE9PTEgb3IgT1M9PSJhbmRyb2lkIicsIHsKICAgICAg
ICAgJ2ZlYXR1cmVfZGVmaW5lcyc6IFsKLSAgICAgICAgICAnV1RGX1VTRV9IQVJGQlVaWl9ORz0x
JywKKyAgICAgICAgICAnV1RGX1VTRV9IQVJGQlVaWj0xJywKICAgICAgICAgXSwKICAgICAgIH1d
LAogICAgICAgWydjaHJvbWVvcz09MScsIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggZmY2M2I1
MmRhZjk1OTQ0NmQ2Y2JmMDdmYTI3Y2Q4ZWRkNTQyYzZhNy4uMWEzOTdiNmJiODY3Nzk3MzVlMDEz
MmY0YjAzMmVkNzJhMGM4NjZkNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwu
Y21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTE0Miw3ICsxNDIs
NyBAQCBlbmRpZiAoKQogZmluZF9wYWNrYWdlKEZyZWV0eXBlIDIuNC4yIFJFUVVJUkVEKQogZmlu
ZF9wYWNrYWdlKEhhcmZCdXp6IDAuOS4yIFJFUVVJUkVEKQogYWRkX2RlZmluaXRpb25zKC1EV1RG
X1VTRV9GUkVFVFlQRT0xKQotYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9IQVJGQlVaWl9ORz0x
KQorYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9IQVJGQlVaWj0xKQogCiBpZiAoRU5BQkxFX1dF
QktJVDIgQU5EIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIHNldChFTkFCTEVfUExV
R0lOX1BST0NFU1MgMSkKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBh
NjY2Y2E3MGMyODdiNTU3Y2JhMzNkODJhOWQ3YzdmMTg2MzNjZmI4Li5jMmI5OWQ1ZDRhODM1M2Q3
NmIyNjA3Mjc3NDRkNjM0ZDIzNzcxMzU0IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDEtMzAgIERvbWluaWsgUsO2dHRzY2hlcyAg
PGRvbWluaWsucm90dHNjaGVzQGludGVsLmNvbT4KKworICAgICAgICBbSGFyZkJ1enpdIFJlbW92
ZSB0aGUgSGFyZkJ1enotb2xkIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwODA3NworCisgICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWluIFBv
dWxhaW4uCisKKyAgICAgICAgUmVuYW1lIFdURl9VU0VfSEFSRkJVWlpfTkcgdG8gV1RGX1VTRV9I
QVJGQlVaWiBzaW5jZSB0aGVyZQorICAgICAgICB3b24ndCBiZSBhIGRpc3RpbmN0aW9uIGJldHdl
ZW4gbmcgYW5kIG5vbi1uZyBIYXJmQnV6eiBhZnRlcgorICAgICAgICByZW1vdmluZyB0aGUgb2xk
IGNvZGUuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZToKKwogMjAx
My0wMS0yOSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCBHVEsgYnVpbGQgZml4IGFmdGVyIHIxNDExNzUuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>