<?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>16880</bug_id>
          
          <creation_ts>2008-01-15 06:20:35 -0800</creation_ts>
          <short_desc>SVGCSSFontFace should die, instead integrate within the FontCache.</short_desc>
          <delta_ts>2008-01-22 18:12:46 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>eric</cc>
    
    <cc>mitz</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>67286</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-15 06:20:35 -0800</bug_when>
    <thetext>The summary says it all: SVGCSSFontFace is obsolete, and we should rather integrate within the existing CSSFontFaceSource/FontCache concept. Patch is in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67788</commentid>
    <comment_count>1</comment_count>
      <attachid>18567</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-20 13:04:33 -0800</bug_when>
    <thetext>Created attachment 18567
Work in progress patch

Not ready for review yet, just for mitz to check :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67804</commentid>
    <comment_count>2</comment_count>
      <attachid>18571</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-20 16:57:20 -0800</bug_when>
    <thetext>Created attachment 18571
Initial patch

No regressions, fixes this and 16784. Adds missing-glyph element handling, as well as the framework for external SVG Fonts. Updated all build systems, and add code to support SVG Fonts on mac/gtk/win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67806</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-20 16:57:55 -0800</bug_when>
    <thetext>*** Bug 16784 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67807</commentid>
    <comment_count>4</comment_count>
      <attachid>18571</attachid>
    <who name="">mitz</who>
    <bug_when>2008-01-20 17:37:14 -0800</bug_when>
    <thetext>Comment on attachment 18571
Initial patch

createSVGFontCustomPlatformData is not a good name for a function that, unlike createFontCustomPlatformData, does not return a pointer to an object that needs to be freed. It does not even return a FontCustomPlatformData, so I am not sure what &quot;custom&quot; is doing in the name and what the function is doing in that file.

I am also not sure it makes sense to have the derived class SVGFontData if SimpleFontData instances need to check m_isSVGFont.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67808</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-20 17:46:53 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 18571 [edit])
&gt; createSVGFontCustomPlatformData is not a good name for a function that, unlike
&gt; createFontCustomPlatformData, does not return a pointer to an object that needs
&gt; to be freed. It does not even return a FontCustomPlatformData, so I am not sure
&gt; what &quot;custom&quot; is doing in the name and what the function is doing in that file.
Okay, changed to &apos;fontPlatformDataForSVGFont&apos;.
 
&gt; I am also not sure it makes sense to have the derived class SVGFontData if
&gt; SimpleFontData instances need to check m_isSVGFont.
Well if it&apos;s no problem to add some floats to SimpleFontData, then I&apos;d
add the data there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67809</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-20 17:49:09 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; I am also not sure it makes sense to have the derived class SVGFontData if
&gt; &gt; SimpleFontData instances need to check m_isSVGFont.
&gt; Well if it&apos;s no problem to add some floats to SimpleFontData, then I&apos;d
&gt; add the data there?

Hm, got a better idea. Holding an OwnPtr&lt;SVGFontData&gt; in SimpleFontData, when
SVG Fonts are enabled.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67810</commentid>
    <comment_count>7</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-01-20 17:50:20 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Hm, got a better idea. Holding an OwnPtr&lt;SVGFontData&gt; in SimpleFontData, when
&gt; SVG Fonts are enabled.

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67814</commentid>
    <comment_count>8</comment_count>
      <attachid>18572</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-20 18:53:37 -0800</bug_when>
    <thetext>Created attachment 18572
Updated patch

Incorporated comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67832</commentid>
    <comment_count>9</comment_count>
      <attachid>18572</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-21 02:59:38 -0800</bug_when>
    <thetext>Comment on attachment 18572
Updated patch

We talked about naming m_fontFaceElement m_svgFontFaceElement to match the accessor name.

Personally I&apos;m more a fan of fontData = new than fontData.set(, but I I&apos;m not gonna pick on you too much about it. :)

Maybe foundLocalSVGFont should be &quot;foundInlineSVGFont&quot; since local seems to mean &quot;local to this computer&quot;.  I&apos;m not sure &quot;inline&quot; is actually better, but it occurred to me when reading it that we use &quot;local&quot; to use two different things.

+	, m_isCustomFont(customFont)

uses a tab! :)

if (m_unitsPerEm)
scale /= m_unitsPerEm;

might be more clear.

It&apos;s kinda icky to have such a large if in a constructor.  But a shared init() routine might be more icky.

+    : m_syntheticBold(b), m_syntheticOblique(o), m_cgFont(0), m_atsuFontID(0), m_size(s), m_font(0)

should be one per line, as per the style docs
: bar(foo)
, bar2(foo2)
, etc.

Wrong spacing in:
+float SVGFontFaceElement::verticalAdvanceY() const
?

+        return descent &lt; 0 ? -descent : descent;

That deserves a comment, explaining why we take the absolute value.  Why it&apos;s correct to do that, and not allow authors to intentionally specify a negative decent (And thus break some broken test cases).

There are still lots of unecessary hasAttribute/getAttribute pairs.

element-&gt;hasAttribute(vert_origin_yAttr)
, etc.


+    String language = getAttribute(XMLNames::langAttr);
+    if (language.isEmpty()) // SVG defines a non-xml prefixed &quot;lang&quot; propert for &lt;glyph&gt; it seems.
+        language = getAttribute(&quot;lang&quot;);

We need to land a test for this fallback, and make sure we agree with other browsers.  :lang is mentioned for &lt;glyph&gt;, I&apos;m not sure xml:lang actually makes any sense for &lt;glyph&gt; even though test cases use it.  We should probably prefer lang over xml:lang in any case.

The patch is fine.  I&apos;m tempted to r+ it, but I think we really should land a simple test case for lang vs. xml:lang and which wins when different.  That, combined with little has/get issues, I guess are enough to make this an r-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67858</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-21 10:49:49 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 18572 [edit])
&gt; We talked about naming m_fontFaceElement m_svgFontFaceElement to match the
&gt; accessor name.
Fixed.
 
&gt; Personally I&apos;m more a fan of fontData = new than fontData.set(, but I I&apos;m not
&gt; gonna pick on you too much about it. :)
I love this style to differentiate between RefPtr/OwnPtr by just reading. Okay, it only works for code I wrote, as I&apos;m probably the only one using that convention :-)
 
&gt; Maybe foundLocalSVGFont should be &quot;foundInlineSVGFont&quot; since local seems to
&gt; mean &quot;local to this computer&quot;.  I&apos;m not sure &quot;inline&quot; is actually better, but
&gt; it occurred to me when reading it that we use &quot;local&quot; to use two different
&gt; things.
How about &apos;foundInDocumentSVGFont&apos; - more verbose, but clear. Going to fix.

&gt; 
&gt; +       , m_isCustomFont(customFont)
&gt; 
&gt; uses a tab! :)
Ough ouch :-)
 
&gt; if (m_unitsPerEm)
&gt; scale /= m_unitsPerEm;
&gt; 
&gt; might be more clear.
Fixed.
 
&gt; It&apos;s kinda icky to have such a large if in a constructor.  But a shared init()
&gt; routine might be more icky.
&gt; 
&gt; +    : m_syntheticBold(b), m_syntheticOblique(o), m_cgFont(0), m_atsuFontID(0),
&gt; m_size(s), m_font(0)
&gt; 
&gt; should be one per line, as per the style docs
&gt; : bar(foo)
&gt; , bar2(foo2)
&gt; , etc.
It looks icky to fix that single case, as the whole file uses wrong indention. Follow-up style cleanup patch from you, might fix it as well :-) Honestly, I know we shouldn&apos;t check in wrong indented, code - so I&apos;m fixing my new code.

 
&gt; Wrong spacing in:
&gt; +float SVGFontFaceElement::verticalAdvanceY() const
&gt; ?
&gt; 
&gt; +        return descent &lt; 0 ? -descent : descent;
&gt; 
&gt; That deserves a comment, explaining why we take the absolute value.  Why it&apos;s
&gt; correct to do that, and not allow authors to intentionally specify a negative
&gt; decent (And thus break some broken test cases).
Actually I haven&apos;t investigated a lot so far in this issue, the only thing I know that some W3C testcases use negative descent, where decent - as a _length_ value - only has meaning behind it for positive values. I&apos;d prefer to leave it as is, with a comment though.

&gt; 
&gt; There are still lots of unecessary hasAttribute/getAttribute pairs.
&gt; 
&gt; element-&gt;hasAttribute(vert_origin_yAttr)
&gt; , etc.
Oh going to fix.
  
&gt; +    String language = getAttribute(XMLNames::langAttr);
&gt; +    if (language.isEmpty()) // SVG defines a non-xml prefixed &quot;lang&quot; propert
&gt; for &lt;glyph&gt; it seems.
&gt; +        language = getAttribute(&quot;lang&quot;);
&gt; 
&gt; We need to land a test for this fallback, and make sure we agree with other
&gt; browsers.  :lang is mentioned for &lt;glyph&gt;, I&apos;m not sure xml:lang actually makes
&gt; any sense for &lt;glyph&gt; even though test cases use it.  We should probably prefer
&gt; lang over xml:lang in any case.
I don&apos;t think any other browser implements &apos;lang&apos; based glyph detection. Going to check now, and post a report.
 
&gt; The patch is fine.  I&apos;m tempted to r+ it, but I think we really should land a
&gt; simple test case for lang vs. xml:lang and which wins when different.  That,
&gt; combined with little has/get issues, I guess are enough to make this an r-.
Yeah, r- is good, going to fix all issues first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67862</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-21 12:04:45 -0800</bug_when>
    <thetext>Even if you decide that no other browser implements :lang or xml:lang for &lt;glyph&gt; we should still have a test to make sure it&apos;s clear what our behavior is, and clear were we ever to change it.  Such a test is also useful for other browser venders.  Honestly, I would have probably ignored xml:lang (since it makes no sense to me) but if the W3C tests depend on them, we should 1.  file a bug with the W3c, and 2.  probably support it for now.

lang = &quot;%LanguageCodes;&quot;
The attribute value is a comma-separated list of language names as defined in [RFC3066]. The glyph can be used if the xml:lang attribute exactly matches one of the languages given in the value of this parameter, or if the xml:lang attribute exactly equals a prefix of one of the languages given in the value of this parameter such that the first tag character following the prefix is &quot;-&quot;.
Animatable: no.

xml:lang is a single value.  :lang can be multiple.  (If I&apos;m reading this correct).  lang specifies what xml:lang values the glyph is used for, xml:lang on a glyph would make little sense, but I could see it meaning (at least for the w3c tests) &quot;this is one language this glyph is valid for&quot;, and being respected *after* any :lang values.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67863</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-21 12:08:13 -0800</bug_when>
    <thetext>I just grepped the w3c test suite, I don&apos;t see a single use of xml:lang with &lt;glyph&gt; so I think your code is just wrong.

fonts-glyph-03-t.svg:        &lt;glyph unicode=&quot;a&quot; glyph-name=&quot;upward-triangle&quot; lang=&quot;en&quot; d=&quot;M0 0L500 0L250 900Z&quot;/&gt;
fonts-glyph-03-t.svg:        &lt;glyph unicode=&quot;a&quot; glyph-name=&quot;square&quot; lang=&quot;fr&quot; d=&quot;M0 250L500 250L500 750L0 750Z&quot;/&gt;


were the only instances of lang and &lt;glyph&gt; I saw.  I don&apos;t think we should support xml:lang on a glyph element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67864</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-21 12:13:15 -0800</bug_when>
    <thetext>Also, I grepped for a negative descent, and yes several are used.  However I think that a negative descent can make sense in a font.  A negative descent would mean that the lowest point any glyph draws at is actually above the baseline.

http://www.w3.org/TR/REC-CSS2/fonts.html#descent

grep -r &quot;descent=\&quot;-&quot; * 

will show you the examples in the w3c directory.  If you believe those examples should actually have used positive values, then we should file a bug with the w3c, but I think a negative value can make sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67879</commentid>
    <comment_count>14</comment_count>
      <attachid>18587</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-21 14:05:33 -0800</bug_when>
    <thetext>Created attachment 18587
Updated patch v2

Includes new layout test testing glyph-selection based on lang / xml:lang attributes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67880</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-21 14:08:45 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Also, I grepped for a negative descent, and yes several are used.  However I
&gt; think that a negative descent can make sense in a font.  A negative descent
&gt; would mean that the lowest point any glyph draws at is actually above the
&gt; baseline.
The real reason we need positive descent values, is that we&apos;re calculating the height of a glyph for system fonts using font.ascent() + font.descent(), negative values break that aspect.

Try running layout tests w/o that fix.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67881</commentid>
    <comment_count>16</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-21 14:09:57 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; were the only instances of lang and &lt;glyph&gt; I saw.  I don&apos;t think we should
&gt; support xml:lang on a glyph element.

Okay, I agree on that, as you see my new layout test doesn&apos;t test this behaviour.
I still allow xml:lang on &lt;glyph&gt; as I&apos;ve seen some SVG Fonts which used that. ASV3 allows it :(

Greetings,
Niko 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67888</commentid>
    <comment_count>17</comment_count>
      <attachid>18593</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-21 14:30:26 -0800</bug_when>
    <thetext>Created attachment 18593
Updated patch v3

After discussion with Eric regarding xml:lang :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67890</commentid>
    <comment_count>18</comment_count>
      <attachid>18593</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-21 14:44:14 -0800</bug_when>
    <thetext>Comment on attachment 18593
Updated patch v3

We discussed further changes over IRC.  on the whole, this looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67894</commentid>
    <comment_count>19</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-21 14:58:29 -0800</bug_when>
    <thetext>Landed in r29700.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68001</commentid>
    <comment_count>20</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-22 18:12:46 -0800</bug_when>
    <thetext>*** Bug 16904 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18567</attachid>
            <date>2008-01-20 13:04:33 -0800</date>
            <delta_ts>2008-01-20 16:57:20 -0800</delta_ts>
            <desc>Work in progress patch</desc>
            <filename>SVGFontsWorkInProgressPatch.diff</filename>
            <type>text/plain</type>
            <size>76958</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAyOTY3NikKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMzLDcg
KzE2MzMsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvY3NzL1NWR0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgXAogCVdlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAg
XAogCVdlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIFwKLQlXZWJDb3JlL2Nzcy9T
VkdDU1NGb250RmFjZS5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN0eWxlLmNw
cCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBcCiAJV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgXApAQCAtMTY5NCw2ICsxNjkzLDcg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMuY3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3Bw
IFwKIAlXZWJDb3JlL3N2Zy9TVkdGb250LmNwcCBcCisJV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEu
Y3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAgXAogCVdlYkNvcmUvc3ZnL1NW
R0ZvbnRGYWNlRWxlbWVudC5jcHAgXAogCVdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRm9ybWF0RWxl
bWVudC5jcHAgXApJbmRleDogV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS5wcm8J
KHJldmlzaW9uIDI5Njc2KQorKysgV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNjYs
NyArMTM2Niw2IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICBj
c3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBcCiAgICAgICAgIGNzcy9TVkdD
U1NQYXJzZXIuY3BwIFwKICAgICAgICAgY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIFwKLSAg
ICAgICAgY3NzL1NWR0NTU0ZvbnRGYWNlLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9TVkdSZW5k
ZXJTdHlsZS5jcHAgXAogICAgICAgICByZW5kZXJpbmcvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBc
CiAgICAgICAgIGJpbmRpbmdzL2pzL0pTU1ZHTGF6eUV2ZW50TGlzdGVuZXIuY3BwIFwKQEAgLTE0
MjcsNiArMTQyNiw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAg
ICBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBcCiAgICAgICAg
IHN2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwIFwKICAgICAgICAgc3ZnL1NWR0ZvbnQuY3BwIFwKKyAg
ICAgICAgc3ZnL1NWR0ZvbnREYXRhLmNwcCBcCiAgICAgICAgIHN2Zy9TVkdGb250RWxlbWVudC5j
cHAgXAogICAgICAgICBzdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcCBcCiAgICAgICAgIHN2Zy9T
VkdGb250RmFjZUZvcm1hdEVsZW1lbnQuY3BwIFwKSW5kZXg6IFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShy
ZXZpc2lvbiAyOTY3NikKKysrIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC00ODk0LDEwICs0ODk0LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFNWR0NTU0ZvbnRGYWNlLmNwcCINCi0JCQkJ
Pg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTVkdD
U1NQYXJzZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTg0MDUsNiArODQwMSwxNCBA
QAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxz
dmdcU1ZHRm9udERhdGEuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cc3ZnXFNWR0ZvbnREYXRhLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHRm9udEVsZW1lbnQuY3Bw
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDI5Njc2KQorKysgV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yODI5LDYgKzI4MjksOCBAQAogCQlCMjIzNjIyRjBDM0FGMDcxMDAw
OENBOUIgLyogRE9NU1ZHVGV4dFBhdGhFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjM2MjJDMEMzQUYwNzEwMDA4Q0E5QiAv
KiBET01TVkdUZXh0UGF0aEVsZW1lbnRJbnRlcm5hbC5oICovOyB9OwogCQlCMjM1NDBGMjBEMDA3
ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMzU0MEYwMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJp
bmdUcnVuY2F0b3IuY3BwICovOyB9OwogCQlCMjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEgLyogU3Ry
aW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjIzN0M4QTcwRDM0
NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMzdDOEE1MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250
RGF0YS5jcHAgKi87IH07CisJCUIyMzdDOEE4MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIzN0M4
QTYwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmggKi87IH07CiAJCUIyNDA1NTY1MEI1
QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI0MDU1NjMwQjVCRTY0MDAw
MkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUludGVybmFsLmggKi87IH07CiAJCUIyNDA1
NTY2MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0SW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNDA1NTY0
MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0SW50ZXJuYWwuaCAq
LzsgfTsKIAkJQjI1NTk5MkMwRDAwRDhCQTAwQkI4MjVDIC8qIENnU3VwcG9ydC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5MDBEMDBEOEI4
MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmNwcCAqLzsgfTsKQEAgLTMxNTUsOCArMzE1Nyw2IEBACiAJ
CUIyQ0I5MjY0MEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQjkyNjAw
QjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QubW0gKi87IH07CiAJ
CUIyQ0NFQzQ3MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNDRUM0
NTBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwICovOyB9
OwogCQlCMkNDRUM0ODBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0NF
QzQ2MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oICovOyB9
OwotCQlCMkQxOUE0ODBDRUY5REMxMDAwRTAzM0IgLyogU1ZHQ1NTRm9udEZhY2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJEMTlBNDYwQ0VGOURD
MTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmNwcCAqLzsgfTsKLQkJQjJEMTlBNDkwQ0VGOURD
MTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQxOUE0NzBDRUY5REMxMDAwRTAzM0IgLyogU1ZHQ1NTRm9u
dEZhY2UuaCAqLzsgfTsKIAkJQjJEM0ZDOEEwQzIyMTJDQjAwQ0YzNjE4IC8qIEpTU1ZHVHJhbnNm
b3JtTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMkQzRkM4OTBDMjIxMkNCMDBDRjM2MTggLyogSlNTVkdUcmFuc2Zvcm1MaXN0Q3Vz
dG9tLmNwcCAqLzsgfTsKIAkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQz
RC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUy
N0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCAqLzsgfTsKIAkJQjJFMjdD
QTAwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFMjdDOUUwQjBGMkIwOTAwRjE3QzdCIC8qIEZs
b2F0UG9pbnQzRC5oICovOyB9OwpAQCAtNjg5Myw2ICs2ODkzLDggQEAKIAkJQjIyMzYyMkMwQzNB
RjA3MTAwMDhDQTlCIC8qIERPTVNWR1RleHRQYXRoRWxlbWVudEludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdUZXh0UGF0aEVsZW1lbnRJbnRlcm5hbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEg
LyogU3RyaW5nVHJ1bmNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTdHJpbmdUcnVuY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdUcnVuY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQjIzN0M4QTUwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyMzdDOEE2MEQzNDREMTEwMDEzRjcwNyAv
KiBTVkdGb250RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9u
dERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI0MDU1NjMwQjVCRTY0MDAw
MkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VJbnRlcm5hbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjQwNTU2NDBCNUJFNjQwMDAyQTI4QzAgLyogRE9N
U1ZHRWxlbWVudEluc3RhbmNlTGlzdEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0SW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTAwRDAwRDhCODAwQkI4MjVDIC8qIENnU3VwcG9y
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2dTdXBwb3J0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyMjMsOCArNzIyNSw2IEBACiAJCUIy
Q0I5MjYwMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVNWR0VsZW1lbnRJbnN0
YW5jZUxpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQ0NFQzQ1MEM2Q0E5
RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNDRUM0NjBDNkNBOUYxMDA2QTU0MjQg
LyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUIyRDE5QTQ2MENFRjlEQzEwMDBFMDMzQiAvKiBTVkdDU1NGb250RmFjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHQ1NTRm9udEZhY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkQxOUE0NzBDRUY5REMxMDAwRTAz
M0IgLyogU1ZHQ1NTRm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0NTU0ZvbnRGYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRDNGQzg5
MEMyMjEyQ0IwMENGMzYxOCAvKiBKU1NWR1RyYW5zZm9ybUxpc3RDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3
QiAvKiBGbG9hdFBvaW50M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZsb2F0UG9pbnQzRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTI3
QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTA3NDIsNiArMTA3NDIsOCBAQAogCQkJCUIyMjI3ODdDMEQwMEJGMjAwMDcxQjc4MiAv
KiBTVkdGaXRUb1ZpZXdCb3guaCAqLywKIAkJCQlCMjIyNzg3RDBEMDBCRjIwMDA3MUI3ODIgLyog
U1ZHRml0VG9WaWV3Qm94LmlkbCAqLywKIAkJCQlCMjYyQjgwMzBEMUYzMkQwMDAxNThGMDkgLyog
U1ZHRm9udC5jcHAgKi8sCisJCQkJQjIzN0M4QTUwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnRE
YXRhLmNwcCAqLywKKwkJCQlCMjM3QzhBNjBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEu
aCAqLywKIAkJCQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3Bw
ICovLAogCQkJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICov
LAogCQkJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwgKi8s
CkBAIC0xMTk1Miw4ICsxMTk1NCw2IEBACiAJCQkJOTNDQTRDQTIwOURGOTNGQTAwREY4Njc3IC8q
IHN2Zy5jc3MgKi8sCiAJCQkJQjIyMjdCMDAwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8sCiAJCQkJQjIyMjdCMDEwRDAwQkZGMTAwNzFCNzgy
IC8qIFNWR0NTU1BhcnNlci5jcHAgKi8sCi0JCQkJQjJEMTlBNDYwQ0VGOURDMTAwMEUwMzNCIC8q
IFNWR0NTU0ZvbnRGYWNlLmNwcCAqLywKLQkJCQlCMkQxOUE0NzBDRUY5REMxMDAwRTAzM0IgLyog
U1ZHQ1NTRm9udEZhY2UuaCAqLywKIAkJCQlCMjIyN0IwMjBEMDBCRkYxMDA3MUI3ODIgLyogU1ZH
Q1NTUHJvcGVydHlOYW1lcy5pbiAqLywKIAkJCQlCMjIyN0IwMzBEMDBCRkYxMDA3MUI3ODIgLyog
U1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgKi8sCiAJCQkJQjIyMjdCMDQwRDAwQkZGMTAwNzFCNzgy
IC8qIFNWR0NTU1ZhbHVlS2V5d29yZHMuaW4gKi8sCkBAIC0xNDE3MCw3ICsxNDE3MCw2IEBACiAJ
CQkJQjI3QjI4M0QwQ0VGMEMzNjAwRDM5RDU0IC8qIERPTVNWR0dseXBoRWxlbWVudEludGVybmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjdCMjgzRTBDRUYwQzM2MDBEMzlENTQgLyogRE9NU1ZH
TWlzc2luZ0dseXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3QjI4NDAwQ0VGMEMz
NjAwRDM5RDU0IC8qIERPTVNWR01pc3NpbmdHbHlwaEVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQjJEMTlBNDkwQ0VGOURDMTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0EzNzkxNTBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2NhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMzc5M0YwRDE2NDdFMDAwQjc5M0Q2IC8qIEpTTG9j
YXRpb24ubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMwQUMg
LyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE0MTk2LDYgKzE0MTk1LDcgQEAK
IAkJCQkzNzFGNTFBMTBEMjYyRkEwMDBFQ0UwRDUgLyogQ1NTU2VnbWVudGVkRm9udEZhY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTM3MUY1M0U5MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2Rl
UmFuZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUJGRTdFMTMwRDMyRkFGNjAwNjZGNEQy
IC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjM3QzhBODBE
MzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0RUVG
RkM5MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzOUIzRTRFMEQzQzFFODQwMEI0QTkyQiAvKiBTdHJpbmdCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKQEAgLTE0MjM2LDcgKzE0MjM2LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4
RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsK
IAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKLQkJ
CWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNTY2FubmVkRm9yRW5j
b2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMTU3NzAs
NyArMTU3NjksNiBAQAogCQkJCUIyN0IyODM5MENFRjBDMzYwMEQzOUQ1NCAvKiBET01TVkdGb250
RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyN0IyODNDMENFRjBDMzYwMEQzOUQ1NCAv
KiBET01TVkdHbHlwaEVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMjdCMjgzRjBDRUYw
QzM2MDBEMzlENTQgLyogRE9NU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5tbSBpbiBTb3VyY2VzICov
LAotCQkJCUIyRDE5QTQ4MENFRjlEQzEwMDBFMDMzQiAvKiBTVkdDU1NGb250RmFjZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjYyQjgwNDBEMUYzMkQwMDAxNThGMDkgLyogU1ZHRm9udC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzdGQTYyMDBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05v
ZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0ZBNjJFMEQxRjBFRkYwMERCMjJBOSAv
KiBTdGF0aWNOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE1Nzg3LDYgKzE1Nzg1LDcg
QEAKIAkJCQkzNzFGNTFBMjBEMjYyRkEwMDBFQ0UwRDUgLyogQ1NTU2VnbWVudGVkRm9udEZhY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcxRjUzRUEwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1Vu
aWNvZGVSYW5nZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFCRkU3RTEyMEQzMkZBRjYw
MDY2RjREMiAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
MjM3QzhBNzBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTRFRUZGQzgwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKSW5kZXg6IGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Y3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkocmV2aXNpb24gMjk2NzYpCisrKyBjc3MvQ1NTRm9u
dEZhY2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NGb250RmFjZVNvdXJjZS5oIgotCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIiAvLyBGSVhNRSEKICNpbmNsdWRlICJDYWNoZWRGb250LmgiCiAjaW5jbHVk
ZSAiQ1NTRm9udEZhY2UuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKQEAgLTg4LDEw
ICs4OCwyMCBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvCiAgICAg
aWYgKCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFtX2ZvbnQpCi0g
ICAgICAgIC8vIFdlJ3JlIGxvY2FsLiAgSnVzdCByZXR1cm4gYSBTaW1wbGVGb250RGF0YSBmcm9t
IHRoZSBub3JtYWwgY2FjaGUuCi0gICAgICAgIHJldHVybiBGb250Q2FjaGU6OmdldENhY2hlZEZv
bnREYXRhKEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRp
b24sIG1fc3RyaW5nKSk7Ci0gICAgCisgICAgaWYgKCFtX2ZvbnQpIHsKKyNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQorCQkvL2ZwcmludGYoc3RkZXJyLCAiU1RSSU5HOiAlc1xuIiwgbV9zdHJpbmcuZG9t
U3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogZGF0
YSA9IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24s
IG1fc3RyaW5nLCBmYWxzZSwgbV9mb250RmFjZUVsZW1lbnQpOworICAgICAgICBTaW1wbGVGb250
RGF0YSogZm9udERhdGEgPSBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGRhdGEsIG1fZm9u
dEZhY2VFbGVtZW50LmdldCgpKTsKKyNlbHNlCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIGRh
dGEgPSBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9u
LCBtX3N0cmluZyk7CisgICAgICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IEZvbnRDYWNo
ZTo6Z2V0Q2FjaGVkRm9udERhdGEoZGF0YSk7CisjZW5kaWYKKworICAgICAgICAvLyBXZSdyZSBs
b2NhbC4gSnVzdCByZXR1cm4gYSBTaW1wbGVGb250RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUu
CisgICAgICAgIHJldHVybiBmb250RGF0YTsKKyAgICB9CisKICAgICAvLyBTZWUgaWYgd2UgaGF2
ZSBhIG1hcHBpbmcgaW4gb3VyIEZvbnREYXRhIGNhY2hlLgogICAgIFNpbXBsZUZvbnREYXRhKiBj
YWNoZWREYXRhID0gbV9mb250RGF0YVRhYmxlLmdldChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQ
aXhlbFNpemUoKSk7CiAgICAgaWYgKGNhY2hlZERhdGEpCkBAIC0xMDMsNiArMTEzLDcgQEAgU2lt
cGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogICAgICAgICBpZiAoIW1fZm9u
dC0+ZW5zdXJlQ3VzdG9tRm9udERhdGEoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICBjYWNoZWREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKG1fZm9udC0+cGxhdGZvcm1EYXRhRnJv
bUN1c3RvbURhdGEoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRp
Y0JvbGQsIHN5bnRoZXRpY0l0YWxpYyksIHRydWUsIGZhbHNlKTsKKyAgICAgICAgY2FjaGVkRGF0
YS0+aW5pdGlhbGl6ZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEtpY2sgb2ZmIHRoZSBs
b2FkIG5vdy4KICAgICAgICAgbV9mb250LT5iZWdpbkxvYWRJZk5lZWRlZChmb250U2VsZWN0b3It
PmRvY0xvYWRlcigpKTsKQEAgLTExMSw2ICsxMjIsNyBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9u
dEZhY2VTb3VyY2U6OmdldEZvCiAgICAgICAgIGlmICghdGVtcERhdGEpCiAgICAgICAgICAgICB0
ZW1wRGF0YSA9IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3Jp
cHRpb24pOwogICAgICAgICBjYWNoZWREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCp0ZW1wRGF0
YSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIGNhY2hlZERhdGEtPmluaXRpYWxpemUoKTsKICAgICB9
CiAKICAgICBtX2ZvbnREYXRhVGFibGUuc2V0KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVs
U2l6ZSgpLCBjYWNoZWREYXRhKTsKSW5kZXg6IGNzcy9DU1NGb250RmFjZVNvdXJjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGNzcy9DU1NGb250RmFjZVNvdXJjZS5oCShyZXZpc2lvbiAyOTY3NikKKysrIGNz
cy9DU1NGb250RmFjZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVu
dC5oIgorI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU2LDExICs1NywyMCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBwcnVuZVRhYmxlKCk7CiAKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQor
ICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9mb250RmFjZUVsZW1lbnQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNWR0ZvbnRGYWNlRWxl
bWVudChTVkdGb250RmFjZUVsZW1lbnQqIGVsZW1lbnQpIHsgbV9mb250RmFjZUVsZW1lbnQgPSBl
bGVtZW50OyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9zdHJpbmc7
IC8vIFVSSSBmb3IgcmVtb3RlLCBidWlsdC1pbiBmb250IG5hbWUgZm9yIGxvY2FsLgogICAgIENh
Y2hlZEZvbnQqIG1fZm9udDsgLy8gRm9yIHJlbW90ZSBmb250cywgYSBwb2ludGVyIHRvIG91ciBj
YWNoZWQgcmVzb3VyY2UuCiAgICAgQ1NTRm9udEZhY2UqIG1fZmFjZTsgLy8gT3VyIG93bmluZyBm
b250IGZhY2UuCiAgICAgSGFzaE1hcDxpbnQsIFNpbXBsZUZvbnREYXRhKj4gbV9mb250RGF0YVRh
YmxlOyAvLyBBIGNhY2hlIG9mIEZvbnREYXRhcyBmb3IgdmFyaW91cyBwaXhlbCBzaXplcy4KKwor
I2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgUmVmUHRyPFNWR0ZvbnRGYWNlRWxlbWVudD4gbV9m
b250RmFjZUVsZW1lbnQ7CisjZW5kaWYKIH07CiAKIH0KSW5kZXg6IGNzcy9DU1NGb250RmFjZVNy
Y1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAkocmV2aXNp
b24gMjk2NzYpCisrKyBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwyMCArMjgsMTYgQEAKIAogI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7Ci0KIGNsYXNzIENTU0Zv
bnRGYWNlU3JjVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgogICAgIENTU0ZvbnRG
YWNlU3JjVmFsdWUoY29uc3QgU3RyaW5nJiByZXNvdXJjZSwgYm9vbCBsb2NhbCkKICAgICA6bV9y
ZXNvdXJjZShyZXNvdXJjZSksIG1faXNMb2NhbChsb2NhbCkKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQotICAgICwgbV9mb250RmFjZUVsZW1lbnQoMCkKLSNlbmRpZiAgICAKICAgICB7fQotICAgIHZp
cnR1YWwgfkNTU0ZvbnRGYWNlU3JjVmFsdWUoKSB7fTsKKyAgICB2aXJ0dWFsIH5DU1NGb250RmFj
ZVNyY1ZhbHVlKCkge30KIAogICAgIGNvbnN0IFN0cmluZyYgcmVzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc291cmNlOyB9CiAgICAgY29uc3QgU3RyaW5nJiBmb3JtYXQoKSBjb25zdCB7IHJl
dHVybiBtX2Zvcm1hdDsgfQpAQCAtNTIsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N1
cHBvcnRlZEZvcm1hdCgpIGNvbnN0OwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBTVkdG
b250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dEZhY2VFbGVtZW50OyB9CisgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBzdmdGb250RmFjZUVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlRWxlbWVudC5nZXQoKTsgfQogICAgIHZvaWQg
c2V0U1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCogZWxlbWVudCkgeyBtX2Zv
bnRGYWNlRWxlbWVudCA9IGVsZW1lbnQ7IH0KICNlbmRpZgogCkBAIC02Miw4ICs1OCw5IEBAIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fcmVzb3VyY2U7CiAgICAgU3RyaW5nIG1fZm9ybWF0OwogICAg
IGJvb2wgbV9pc0xvY2FsOworCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBTVkdGb250RmFj
ZUVsZW1lbnQqIG1fZm9udEZhY2VFbGVtZW50OworICAgIFJlZlB0cjxTVkdGb250RmFjZUVsZW1l
bnQ+IG1fZm9udEZhY2VFbGVtZW50OwogI2VuZGlmCiB9OwogCkluZGV4OiBjc3MvQ1NTRm9udFNl
bGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkocmV2aXNp
b24gMjk2NzYpCisrKyBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksMTAgKzQ5LDEwIEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIlNWR0ZvbnRG
YWNlRWxlbWVudC5oIgogCisvLyBQb3J0cyB3aGljaCBkb24ndCB1c2UgU1ZHLCBkb24ndCBnZW5l
cmF0ZSBTVkdOYW1lcy5oCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdDU1NGb250RmFj
ZS5oIgotI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjZW5kaWYKIApAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjph
ZGRGb250RmFjZVJ1bGUoY28KICAgICBib29sIGZvdW5kTG9jYWwgPSBmYWxzZTsKIAogI2lmIEVO
QUJMRShTVkdfRk9OVFMpCi0gICAgU1ZHRm9udEZhY2VFbGVtZW50KiBzdmdGb250RmFjZUVsZW1l
bnQgPSAwOworICAgIGJvb2wgZm91bmRMb2NhbFNWR0ZvbnQgPSBmYWxzZTsKICNlbmRpZgogCiAg
ICAgZm9yIChpID0gMDsgaSA8IHNyY0xlbmd0aDsgaSsrKSB7CkBAIC0xNTksMzMgKzE1OSwyNyBA
QCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvCiAgICAgICAgICAgICBT
dHJpbmcgZmFtaWx5ID0gaXRlbS0+cmVzb3VyY2UoKTsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMp
Ci0gICAgICAgICAgICAvLyBTVkcgRm9udHMgc3VwcG9ydCAoaW50ZXJuYWwgZm9udHMsIGxpdmlu
ZyB3aXRoaW4gdGhlIGRvY3VtZW50KQotICAgICAgICAgICAgc3ZnRm9udEZhY2VFbGVtZW50ID0g
aXRlbS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoc3ZnRm9udEZhY2VF
bGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElmIGZvbnRGYWNlIGlzIG5vdCAw
LCBpdCBtZWFucyB0aGF0IGl0IGlzIGEgQ1NTRm9udEZhY2UgcmF0aGVyIHRoYW4gYSBTVkdDU1NG
b250RmFjZQotICAgICAgICAgICAgICAgIC8vIGFuZCB0aGVyZWZvcmUgZG9lcyBub3Qgc3VwcG9y
dCBTVkcgZm9udC1mYWNlIGVsZW1lbnRzLCBzbyB3ZSBqdXN0IHNraXAgdGhpcyBpdGVtLgotICAg
ICAgICAgICAgICAgIGlmIChmb250RmFjZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgZm91bmRMb2NhbCA9IHRydWU7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBmb3VuZExvY2FsU1ZHRm9udCA9IGl0ZW0tPnN2Z0ZvbnRGYWNlRWxlbWVudCgpICE9
IDA7CiAjZW5kaWYKLQorCQkJaWYgKGZvdW5kTG9jYWxTVkdGb250KQorCQkJZnByaW50ZihzdGRl
cnIsICJDUkVBVEUgQ1NTIEZPTlQgRkFDRSBTT1VSQ0UgIEZPUiBGQU1JTFkgJyVzJ1xuIiwgZmFt
aWx5LmxhdGluMSgpLmRhdGEoKSk7CiAgICAgICAgICAgICAvLyBUZXN0IHRoZSB2YWxpZGl0eSBv
ZiB0aGUgbG9jYWwgZm9udCBub3cuICBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhpcyBmb250
IGlmIGl0IGRvZXMgbm90IGV4aXN0CiAgICAgICAgICAgICAvLyBvbiB0aGUgc3lzdGVtLiAgSWYg
aXQgKmRvZXMqIGV4aXN0IG9uIHRoZSBzeXN0ZW0sIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBsb29r
IGFueSBmdXJ0aGVyLgotICAgICAgICAgICAgaWYgKEZvbnRDYWNoZTo6Zm9udEV4aXN0cyhmb250
RGVzY3JpcHRpb24sIGZhbWlseSkgJiYgIWZvdW5kTG9jYWwpIHsKKyAgICAgICAgICAgIGlmIChG
b250Q2FjaGU6OmZvbnRFeGlzdHMoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpCisjaWYgRU5BQkxF
KFNWR19GT05UUykgICAgCisgICAgICAgICAgICAgICAgfHwgZm91bmRMb2NhbFNWR0ZvbnQKKyNl
bmRpZgorICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgc291cmNlID0gbmV3IENT
U0ZvbnRGYWNlU291cmNlKGZhbWlseSk7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAgICAg
ICAgICAgICBzb3VyY2UtPnNldFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLT5zdmdGb250RmFjZUVs
ZW1lbnQoKSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBmb3VuZExvY2FsID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICghZm9udEZhY2UpIHsKLSNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICAgICAgaWYgKHN2Z0ZvbnRGYWNlRWxlbWVudCkKLSAg
ICAgICAgICAgICAgICBmb250RmFjZSA9IG5ldyBTVkdDU1NGb250RmFjZShzdmdGb250RmFjZUVs
ZW1lbnQpOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAgICAgZm9udEZh
Y2UgPSBuZXcgQ1NTRm9udEZhY2UoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWZvbnRGYWNl
KQorICAgICAgICAgICAgZm9udEZhY2UgPSBuZXcgQ1NTRm9udEZhY2UoKTsKIAogICAgICAgICBp
ZiAoc291cmNlKQogICAgICAgICAgICAgZm9udEZhY2UtPmFkZFNvdXJjZShzb3VyY2UpOwpAQCAt
MjQwLDcgKzIzNCw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY28K
ICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICAvLyBTVkcgYWxsb3dzIHNldmVyYWwgPGZv
bnQ+IGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgZm9udC1mYW1pbHksIGRpZmZlcmluZyBvbmx5CiAg
ICAgICAgIC8vIGluIGllLiBmb250LXZhcmlhbnQuIEJlIHN1cmUgdG8gcGljayB1cCB0aGUgcmln
aHQgb25lIC0gaW4gZ2V0Rm9udERhdGEgYmVsb3cuCi0gICAgICAgIGlmIChzdmdGb250RmFjZUVs
ZW1lbnQgJiYgZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpKQorICAgICAgICBpZiAoZm91bmRM
b2NhbFNWR0ZvbnQgJiYgZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpKQogICAgICAgICAgICAg
ZmFtaWx5TmFtZSArPSAiLXdlYmtpdC1zdmctc21hbGwtY2FwcyI7CiAjZW5kaWYKICAgICAgICAg
U3RyaW5nIGhhc2ggPSBoYXNoRm9yRm9udChmYW1pbHlOYW1lLmxvd2VyKCksIGZvbnREZXNjcmlw
dGlvbi5ib2xkKCksIGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSk7CkluZGV4OiBjc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NTZWdtZW50ZWRGb250RmFj
ZS5jcHAJKHJldmlzaW9uIDI5Njc2KQorKysgY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIEZvbnREYXRhKiBDU1NTZWdtZW50ZWRG
b250RmFjZTo6Z2V0Rm9udEQKICAgICAgICAgcmV0dXJuIGZvbnREYXRhOwogCiAgICAgZm9udERh
dGEgPSBuZXcgU2VnbWVudGVkRm9udERhdGEoKTsKLQorCWZwcmludGYoc3RkZXJyLCAiTkVXIFNF
R01FTkVURUQhICVwXG4iLCBmb250RGF0YSk7CiAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFuZ2Vz
LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAg
ICAgIGlmIChjb25zdCBGb250RGF0YSogcmFuZ2VGb250RGF0YSA9IG1fcmFuZ2VzW2ldLmZvbnRG
YWNlKCktPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhl
dGljSXRhbGljKSkgewpAQCAtMTI3LDggKzEyNyw4IEBAIEZvbnREYXRhKiBDU1NTZWdtZW50ZWRG
b250RmFjZTo6Z2V0Rm9udEQKICAgICAgICAgICAgIGZvbnREYXRhLT5hcHBlbmRSYW5nZShGb250
RGF0YVJhbmdlKG1fcmFuZ2VzW2ldLmZyb20oKSwgbV9yYW5nZXNbaV0udG8oKSwgc3RhdGljX2Nh
c3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihyYW5nZUZvbnREYXRhKSkpOwogICAgICAgICB9CiAg
ICAgfQotICAgIGlmIChmb250RGF0YS0+bnVtUmFuZ2VzKCkpCi0gICAgICAgIG1fZm9udERhdGFU
YWJsZS5zZXQoaGFzaEtleSwgZm9udERhdGEpOworICAgIGlmIChmb250RGF0YS0+bnVtUmFuZ2Vz
KCkpIHsgZnByaW50ZihzdGRlcnIsICJIQVMgUkFOR0VTISEhIVxuIik7CisgICAgICAgIG1fZm9u
dERhdGFUYWJsZS5zZXQoaGFzaEtleSwgZm9udERhdGEpOyB9CiAgICAgZWxzZSB7CiAgICAgICAg
IGRlbGV0ZSBmb250RGF0YTsKICAgICAgICAgZm9udERhdGEgPSAwOwpJbmRleDogY3NzL1NWR0NT
U0ZvbnRGYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvU1ZHQ1NTRm9udEZhY2UuY3BwCShyZXZp
c2lvbiAyOTY3NikKKysrIGNzcy9TVkdDU1NGb250RmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFNWR19GT05UUykKLSNpbmNsdWRlICJTVkdDU1NGb250RmFjZS5oIgotCi0jaW5j
bHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1T
VkdDU1NGb250RmFjZTo6U1ZHQ1NTRm9udEZhY2UoU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFj
ZSkKLSAgICA6IENTU0ZvbnRGYWNlKCkKLSAgICAsIG1fZm9udEZhY2VFbGVtZW50KGZvbnRGYWNl
KQotewotICAgIEFTU0VSVChmb250RmFjZSk7Ci19Ci0KLVNWR0NTU0ZvbnRGYWNlOjp+U1ZHQ1NT
Rm9udEZhY2UoKQotewotfQotCi1ib29sIFNWR0NTU0ZvbnRGYWNlOjppc1ZhbGlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLXZvaWQgU1ZHQ1NTRm9udEZhY2U6OmFkZFNv
dXJjZShDU1NGb250RmFjZVNvdXJjZSopCi17Ci0gICAgLy8gbm8tb3AKLX0KLQotU2ltcGxlRm9u
dERhdGEqIFNWR0NTU0ZvbnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxp
YykKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBU
T0RPOiBFdmVudHVhbGx5IHdlJ2xsIHN3aXRjaCB0byBDU1NGb250RmFjZVNvdXJjZSBoZXJlLCB3
aGljaCBoYW5kbGVzIHRoZSBjYWNoaW5nIGZvciB1cy4KLSAgICAvLyAoV2hlbiBpbXBsZW1lbnRp
bmcgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgU1ZHIEZvbnRzIHRoaXMgd2UnbGwgZGVjaWRlIGFib3V0
IHRoYXQuKQotICAgIGlmICghbV9mb250RGF0YSkKLSAgICAgICAgbV9mb250RGF0YS5zZXQobV9m
b250RmFjZUVsZW1lbnQtPmNyZWF0ZUZvbnREYXRhKGZvbnREZXNjcmlwdGlvbikpOwotCi0gICAg
cmV0dXJuIG1fZm9udERhdGEuZ2V0KCk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBjc3MvU1ZH
Q1NTRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvU1ZHQ1NTRm9udEZhY2UuaAkocmV2aXNp
b24gMjk2NzYpCisrKyBjc3MvU1ZHQ1NTRm9udEZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNWR0NTU0ZvbnRGYWNlX2gKLSNk
ZWZpbmUgU1ZHQ1NTRm9udEZhY2VfaAotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSNpbmNsdWRl
ICJDU1NGb250RmFjZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7Ci0KLWNsYXNzIFNWR0NTU0ZvbnRG
YWNlIDogcHVibGljIENTU0ZvbnRGYWNlIHsKLXB1YmxpYzoKLSAgICBTVkdDU1NGb250RmFjZShT
VkdGb250RmFjZUVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5TVkdDU1NGb250RmFjZSgpOwotCi0g
ICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkU291
cmNlKENTU0ZvbnRGYWNlU291cmNlKik7Ci0KLSAgICB2aXJ0dWFsIFNpbXBsZUZvbnREYXRhKiBn
ZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljSXRhbGljKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8U1ZHRm9udEZhY2VF
bGVtZW50PiBtX2ZvbnRGYWNlRWxlbWVudDsKLSAgICBPd25QdHI8U2ltcGxlRm9udERhdGE+IG1f
Zm9udERhdGE7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHX0ZPTlRTKQotI2VuZGlm
CkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24gMjk2NzYpCisrKyBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA3LDIyICs1MDcsMjIgQEAgaW50IEZvbnQ6
OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29ucwogCiBpbnQgRm9udDo6YXNjZW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+YXNjZW50KHNpemUoKSk7CisgICAgcmV0
dXJuIHByaW1hcnlGb250KCktPmFzY2VudCgpOwogfQogCiBpbnQgRm9udDo6ZGVzY2VudCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHByaW1hcnlGb250KCktPmRlc2NlbnQoc2l6ZSgpKTsKKyAgICBy
ZXR1cm4gcHJpbWFyeUZvbnQoKS0+ZGVzY2VudCgpOwogfQogCiBpbnQgRm9udDo6bGluZVNwYWNp
bmcoKSBjb25zdAogewotICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT5saW5lU3BhY2luZyhzaXpl
KCkpOworICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT5saW5lU3BhY2luZygpOwogfQogCiBmbG9h
dCBGb250Ojp4SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+eEhl
aWdodChzaXplKCkpOworICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT54SGVpZ2h0KCk7CiB9CiAK
IHVuc2lnbmVkIEZvbnQ6OnVuaXRzUGVyRW0oKSBjb25zdApAQCAtNjc3LDYgKzY3Nyw3IEBAIHZv
aWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb24KICAgICB0byA9ICh0byA9PSAt
MSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgZnBy
aW50ZihzdGRlcnIsICJ0aGlzPSVwIC0+IERSQVcgVEVYVCwgaXMgU1ZHPyAlaSAocHRyOiAlcClc
biIsIHRoaXMsIHByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpLCBwcmltYXJ5Rm9udCgpKTsKICAg
ICBpZiAocHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCkpIHsKICAgICAgICAgZHJhd1RleHRVc2lu
Z1NWR0ZvbnQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogICAgICAgICByZXR1cm47
CkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJldmlzaW9uIDI5Njc2KQorKysgcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDE0
IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLQorI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIgLy8gRklYTUUgUkVNT1ZFIQogI2luY2x1ZGUgIkZvbnQuaCIKICNp
bmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5o
IgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNp
bmNsdWRlICJTVkdGb250RGF0YS5oIgorI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEzNyw4
ICsxMzksMTAgQEAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0ZXJuYXRlRmFtaQogCiBG
b250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGlzU1ZHRm9udExvb2t1cCkKIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkdF
VCBDQUNIRUQgT0ZOVCBQTEFURk9STSBEQVRBICMjIyMjIyMjIGZhbWlseU5hbWU6ICVzLCBpc1NW
R0ZvbnRMb29rdXA6ICVpXG4iLCBmYW1pbHlOYW1lLmRvbVN0cmluZygpLmxhdGluMSgpLmRhdGEo
KSwgaXNTVkdGb250TG9va3VwKTsKICAgICBpZiAoIWdGb250UGxhdGZvcm1EYXRhQ2FjaGUpIHsK
ICAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSA9IG5ldyBGb250UGxhdGZvcm1EYXRhQ2Fj
aGU7CiAgICAgICAgIHBsYXRmb3JtSW5pdCgpOwpAQCAtMTUwLDcgKzE1NCwxNCBAQCBGb250UGxh
dGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvCiAgICAgYm9vbCBmb3VuZFJlc3VsdDsK
ICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnRQbGF0Zm9ybURh
dGFDYWNoZS0+ZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBnRm9udFBsYXRmb3JtRGF0YUNhY2hl
LT5lbmQoKSkgewotICAgICAgICByZXN1bHQgPSBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAgICAg
aWYgKGlzU1ZHRm9udExvb2t1cCkKKyAgICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZVNWR0ZvbnRQ
bGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKKyNlbmRpZgorCisgICAg
ICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmVzdWx0ID0gY3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOworCiAgICAgICAgIGdGb250UGxhdGZv
cm1EYXRhQ2FjaGUtPnNldChrZXksIHJlc3VsdCk7CiAgICAgICAgIGZvdW5kUmVzdWx0ID0gcmVz
dWx0OwogICAgIH0gZWxzZSB7CkBAIC0yMDQsMTcgKzIxNSwzNSBAQCB0eXBlZGVmIEhhc2hNYXA8
Rm9udFBsYXRmb3JtRGF0YSwgU2ltcGxlCiAKIHN0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERh
dGFDYWNoZSA9IDA7CiAKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZv
cm1EYXRhLCBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCkKKyNlbHNlCiBTaW1w
bGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhKiBwbGF0Zm9ybURhdGEpCisjZW5kaWYKIHsKICAgICBpZiAoIXBsYXRmb3JtRGF0YSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIWdGb250RGF0YUNhY2hlKQogICAgICAgICBn
Rm9udERhdGFDYWNoZSA9IG5ldyBGb250RGF0YUNhY2hlOwotICAgIAorCiAgICAgU2ltcGxlRm9u
dERhdGEqIHJlc3VsdCA9IGdGb250RGF0YUNhY2hlLT5nZXQoKnBsYXRmb3JtRGF0YSk7CitmcHJp
bnRmKHN0ZGVyciwgIkxPT0tFRCBVUCAlcCwgZm9yIHBsYXRmb3JtIGRhdGE6ICVwXG4iLCByZXN1
bHQsIHBsYXRmb3JtRGF0YSk7CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmVzdWx0ID0g
bmV3IFNpbXBsZUZvbnREYXRhKCpwbGF0Zm9ybURhdGEpOworI2lmIEVOQUJMRShTVkdfRk9OVFMp
CisgICAgICAgIGlmIChmb250RmFjZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQkVGT1JFIVxuIik7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgU1ZHRm9udERhdGEo
Zm9udEZhY2VFbGVtZW50LCAqcGxhdGZvcm1EYXRhKTsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ1JFQVRFRCBORVcgU1ZHRk9OVERBVEEgT0JKRUNUICVwIGZvciBDQUNIRUQgUExBVEZP
Uk0gREFUQTogJXAgKEZPTlQgRkFDRSBFTEVNRU5UOiAlcClcbiIsIHJlc3VsdCwgcGxhdGZvcm1E
YXRhLCBmb250RmFjZUVsZW1lbnQpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTaW1wbGVGb250RGF0YSgqcGxhdGZv
cm1EYXRhKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmVzdWx0LT5pbml0
aWFsaXplKCk7CisKICAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPnNldCgqcGxhdGZvcm1EYXRhLCBy
ZXN1bHQpOwogICAgIH0KICAgICAgICAgCkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkocmV2aXNp
b24gMjk2NzYpCisrKyBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsOCArMzUsNyBAQAogI2luY2x1ZGUgPG1sYW5nLmg+CiAjZW5kaWYKIAotbmFtZXNw
YWNlIFdlYkNvcmUKLXsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXRvbWljU3RyaW5n
OwogY2xhc3MgRm9udDsKQEAgLTQ1LDYgKzQ0LDcgQEAgY2xhc3MgRm9udERhdGE7CiBjbGFzcyBG
b250RGVzY3JpcHRpb247CiBjbGFzcyBGb250U2VsZWN0b3I7CiBjbGFzcyBTaW1wbGVGb250RGF0
YTsKK2NsYXNzIFNWR0ZvbnRGYWNlRWxlbWVudDsKIAogY2xhc3MgRm9udENhY2hlIHsKIHB1Ymxp
YzoKQEAgLTYyLDggKzYyLDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGZvbnRFeGlz
dHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOwog
Ci0gICAgc3RhdGljIEZvbnRQbGF0Zm9ybURhdGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wg
Y2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOworICAgIHN0YXRpYyBGb250UGxhdGZvcm1E
YXRhKiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZh
bHNlLCBib29sIGlzU1ZHRm9udExvb2t1cCA9IGZhbHNlKTsKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQorICAgIHN0YXRpYyBTaW1wbGVGb250RGF0YSogZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSosIFNWR0ZvbnRGYWNlRWxlbWVudCogPSAwKTsKKyNlbHNlCiAgICAgc3Rh
dGljIFNpbXBsZUZvbnREYXRhKiBnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1E
YXRhKik7CisjZW5kaWYKICAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSogZ2V0TGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKICAgICAKIHByaXZhdGU6CkBA
IC03MSw2ICs3NSwxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhKiBn
ZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250Jik7CiAgICAgc3RhdGljIEZvbnRQ
bGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOwogCisjaWYgRU5BQkxFKFNWR19GT05UUykK
KyAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSogY3JlYXRlU1ZHRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CisjZW5k
aWYKKwogICAgIGZyaWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsKICAgICBmcmllbmQgY2xhc3Mg
Rm9udEZhbGxiYWNrTGlzdDsKIH07CkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmgJKHJldmlzaW9uIDI5
Njc2KQorKysgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNiArMzksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGb250KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBpc0N1c3RvbUZvbnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGlu
ZygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWdtZW50ZWQoKSBjb25zdCA9IDA7
CkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCShyZXZpc2lvbiAy
OTY3NikKKysrIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQCBHbHlwaFBhZ2VUcmVlTm9kZSogR2x5cGhQYWdlVHJl
ZU5vZGU6OmdlCiAKIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OnBydW5lVHJlZUN1c3RvbUZvbnRE
YXRhKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKIHsKKwlmcHJpbnRmKHN0ZGVyciwgIlBSVU5F
OiAlcFxuIiwgZm9udERhdGEpOwogICAgIC8vIEVudW1lcmF0ZSBhbGwgdGhlIHJvb3RzIGFuZCBw
cnVuZSBhbnkgdHJlZSB0aGF0IGNvbnRhaW5zIG91ciBjdXN0b20gZm9udCBkYXRhLgogICAgIGlm
IChyb290cykgewogICAgICAgICBIYXNoTWFwPGludCwgR2x5cGhQYWdlVHJlZU5vZGUqPjo6aXRl
cmF0b3IgZW5kID0gcm9vdHMtPmVuZCgpOwpJbmRleDogcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVu
dGVkRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRl
ZEZvbnREYXRhLmNwcAkocmV2aXNpb24gMjk2NzYpCisrKyBwbGF0Zm9ybS9ncmFwaGljcy9TZWdt
ZW50ZWRGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDE2IEBAIGJvb2wg
U2VnbWVudGVkRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGUKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6aXNTVkdG
b250KCkgY29uc3QKK3sKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHNlZ21lbnRzIHN2ZyBmb250
cyBhdCB0aGUgbW9tZW50LgorCisJZnByaW50ZihzdGRlcnIsICJJUyBTVkcgRk9OVCwgbm8hISEh
IVxuIik7CisJcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIGJvb2wgU2VnbWVudGVkRm9udERh
dGE6OmlzQ3VzdG9tRm9udCgpIGNvbnN0CiB7CiAgICAgLy8gQWxsIHNlZ21lbnRlZCBmb250cyBh
cmUgY3VzdG9tIGZvbnRzLgpJbmRleDogcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5o
CShyZXZpc2lvbiAyOTY3NikKKysrIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCBp
bnQgbGVuZ3RoKSBjb25zdDsKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgdmlydHVhbCBi
b29sIGlzU1ZHRm9udCgpIGNvbnN0OworI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0
b21Gb250KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc1NlZ21lbnRlZCgpIGNvbnN0OwpJbmRleDogcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUZvbnREYXRhLmNwcAkocmV2aXNpb24gMjk2NzYpCisrKyBwbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDQ3ICszMiwzOCBAQAogCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0jaW5j
bHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLS8vIERvbid0IGltcGxlbWVudCBjb25zdHJ1Y3Rv
ciBpbiB0aGUgaGVhZGVyIHRvIHNhdmUgYSBTVkdGb250RmFjZUVsZW1lbnQuaCBpbmNsdWRlLgot
U1ZHRm9udERhdGE6OlNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVudCogZWxlbWVudCkKLSAg
ICA6IGZvbnRGYWNlRWxlbWVudChlbGVtZW50KQotICAgICwgaG9yaXpvbnRhbE9yaWdpblgoMC4w
ZikKLSAgICAsIGhvcml6b250YWxPcmlnaW5ZKDAuMGYpCi0gICAgLCBob3Jpem9udGFsQWR2YW5j
ZVgoMC4wZikKLSAgICAsIHZlcnRpY2FsT3JpZ2luWCgwLjBmKQotICAgICwgdmVydGljYWxPcmln
aW5ZKDAuMGYpCi0gICAgLCB2ZXJ0aWNhbEFkdmFuY2VZKDAuMGYpCitTaW1wbGVGb250RGF0YTo6
U2ltcGxlRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZiwgYm9vbCBjdXN0b21Gb250
LCBib29sIGxvYWRpbmcsIGJvb2wgaXNTVkdGb250KQorICAgIDogbV9mb250KGYpCisgICAgLCBt
X3RyZWF0QXNGaXhlZFBpdGNoKGZhbHNlKQorICAgICwgbV9pc1NWR0ZvbnQoaXNTVkdGb250KQor
ICAgICwgbV9pc0N1c3RvbUZvbnQoY3VzdG9tRm9udCkKKyAgICAsIG1faXNMb2FkaW5nKGxvYWRp
bmcpCisgICAgLCBtX3NtYWxsQ2Fwc0ZvbnREYXRhKDApCiB7CisgICAgLy8gRG8gbm90IGNhbGwg
aW5pdGlhbGl6ZSgpIGZyb20gdGhlIGNvbnN0cnVjdG9yLCBhcyBwbGF0Zm9ybUluaXQoKSB3YW50
cyB0byBjaGVjaworICAgIC8vIHRoZSByZXN1bHQgb2YgImlzU1ZHRm9udCgpIiB3aGljaCBpcyBh
IHZpcnR1YWwgZnVuY3Rpb24gYW5kIGZhaWxzIGlmIHdlIGNhbGwKKyAgICAvLyBwbGF0Zm9ybUlu
aXQoKSBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KIH0KIAotZmxvYXQgU1ZHRm9udERhdGE6OmNvbnZl
cnRFbVVuaXRUb1BpeGVsKGZsb2F0IGZvbnRTaXplLCBmbG9hdCB1bml0c1BlckVtLCBmbG9hdCB2
YWx1ZSkKK3ZvaWQgU2ltcGxlRm9udERhdGE6OmluaXRpYWxpemUoKQogewotICAgIEFTU0VSVCh1
bml0c1BlckVtID4gMC4wZik7Ci0gICAgcmV0dXJuIHZhbHVlICogZm9udFNpemUgLyB1bml0c1Bl
ckVtOwotfQotI2VuZGlmCisgICAgcGxhdGZvcm1Jbml0KCk7CisKKyAgICBHbHlwaFBhZ2UqIGds
eXBoUGFnZVplcm8gPSAwOwogCi1TaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZiwgYm9vbCBjdXN0b21Gb250LCBib29sIGxvYWRpbmcpCi0gICAg
OiBtX2ZvbnQoZikKLSAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2UpCiAjaWYgRU5BQkxF
KFNWR19GT05UUykKLSAgICAsIG1fc3ZnRm9udERhdGEoMCkKKyAgICBpZiAoIW1faXNTVkdGb250
KQogI2VuZGlmCi0gICAgLCBtX2lzQ3VzdG9tRm9udChjdXN0b21Gb250KQotICAgICwgbV9pc0xv
YWRpbmcobG9hZGluZykKLSAgICAsIG1fc21hbGxDYXBzRm9udERhdGEoMCkKLXsgICAgCi0gICAg
cGxhdGZvcm1Jbml0KCk7Ci0gICAgCi0gICAgR2x5cGhQYWdlKiBnbHlwaFBhZ2VaZXJvID0gR2x5
cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh0aGlzLCAwKS0+cGFnZSgpOworICAgICAgICBn
bHlwaFBhZ2VaZXJvID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh0aGlzLCAwKS0+
cGFnZSgpOworCiAgICAgaWYgKCFnbHlwaFBhZ2VaZXJvKSB7Ci0gICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGdldCBnbHlwaCBwYWdlIHplcm8uIik7CisjaWYgRU5BQkxFKFNWR19GT05UUykK
KyAgICAgICAgaWYgKCFtX2lzU1ZHRm9udCkKKyNlbmRpZgorICAgICAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gZ2V0IGdseXBoIHBhZ2UgemVyby4iKTsKKwogICAgICAgICBtX3NwYWNlR2x5
cGggPSAwOwogICAgICAgICBtX3NwYWNlV2lkdGggPSAwOwogICAgICAgICBtX2FkanVzdGVkU3Bh
Y2VXaWR0aCA9IDA7CkBAIC0xMTYsNTYgKzEwNyw2IEBAIFNpbXBsZUZvbnREYXRhOjp+U2ltcGxl
Rm9udERhdGEoKQogICAgIC8vIGl0IHdpbGwgYmUgZGVsZXRlZCB0aGVuLCBzbyB3ZSBkb24ndCBu
ZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuCiB9CiAKLWludCBTaW1wbGVGb250RGF0YTo6YXNjZW50
KGZsb2F0IGZvbnRTaXplKSBjb25zdAotewotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYg
KG1fc3ZnRm9udERhdGEpCi0gICAgICAgIHJldHVybiBTVkdGb250RGF0YTo6Y29udmVydEVtVW5p
dFRvUGl4ZWwoZm9udFNpemUsIG1fdW5pdHNQZXJFbSwgbV9hc2NlbnQpOwotI2VuZGlmCi0KLSAg
ICByZXR1cm4gbV9hc2NlbnQ7Ci19Ci0KLWludCBTaW1wbGVGb250RGF0YTo6ZGVzY2VudChmbG9h
dCBmb250U2l6ZSkgY29uc3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChtX3N2
Z0ZvbnREYXRhKQotICAgICAgICByZXR1cm4gU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1Bp
eGVsKGZvbnRTaXplLCBtX3VuaXRzUGVyRW0sIG1fZGVzY2VudCk7Ci0jZW5kaWYKLQotICAgIHJl
dHVybiBtX2Rlc2NlbnQ7Ci19Ci0KLWludCBTaW1wbGVGb250RGF0YTo6bGluZVNwYWNpbmcoZmxv
YXQgZm9udFNpemUpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAobV9z
dmdGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIChpbnQpIGNlaWxmKFNWR0ZvbnREYXRhOjpjb252
ZXJ0RW1Vbml0VG9QaXhlbChmb250U2l6ZSwgbV91bml0c1BlckVtLCBtX2xpbmVTcGFjaW5nKSk7
Ci0jZW5kaWYKLQotICAgIHJldHVybiBtX2xpbmVTcGFjaW5nOwotfQotCi1pbnQgU2ltcGxlRm9u
dERhdGE6OmxpbmVHYXAoZmxvYXQgZm9udFNpemUpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWR19G
T05UUykKLSAgICBpZiAobV9zdmdGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIFNWR0ZvbnREYXRh
Ojpjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250U2l6ZSwgbV91bml0c1BlckVtLCBtX2xpbmVHYXAp
OwotI2VuZGlmCi0KLSAgICByZXR1cm4gbV9saW5lR2FwOwotfQotCi1mbG9hdCBTaW1wbGVGb250
RGF0YTo6eEhlaWdodChmbG9hdCBmb250U2l6ZSkgY29uc3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQotICAgIGlmIChtX3N2Z0ZvbnREYXRhKQotICAgICAgICByZXR1cm4gU1ZHRm9udERhdGE6
OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnRTaXplLCBtX3VuaXRzUGVyRW0sIG1feEhlaWdodCk7
Ci0jZW5kaWYKLQotICAgIHJldHVybiBtX3hIZWlnaHQ7Ci19Ci0KIGZsb2F0IFNpbXBsZUZvbnRE
YXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGZsb2F0IHdpZHRo
ID0gbV9nbHlwaFRvV2lkdGhNYXAud2lkdGhGb3JHbHlwaChnbHlwaCk7CkluZGV4OiBwbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmgJKHJldmlzaW9uIDI5Njc2KQorKysgcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCiAjaW5jbHVkZSAiR2x5cGhXaWR0aE1hcC5oIgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwogI2lmIFBMQVRGT1JNKE1BQykKIHR5cGVkZWYgc3Ry
dWN0IE9wYXF1ZUFUU1VTdHlsZSogQVRTVVN0eWxlOwogI2VuZGlmCkBAIC00Myw0NiArNDQsMjYg
QEAgY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFdp
ZHRoTWFwOwogCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLWNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVu
dDsKLQotc3RydWN0IFNWR0ZvbnREYXRhIHsKLSAgICBTVkdGb250RGF0YShTVkdGb250RmFjZUVs
ZW1lbnQqKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbgotICAgIHN0YXRpYyBmbG9hdCBjb252
ZXJ0RW1Vbml0VG9QaXhlbChmbG9hdCBmb250U2l6ZSwgZmxvYXQgdW5pdHNQZXJFbSwgZmxvYXQg
dmFsdWUpOwotCi0gICAgLy8gSG9sZCBwb2ludGVyIHRvIG91ciBjcmVhdG9yCi0gICAgUmVmUHRy
PFNWR0ZvbnRGYWNlRWxlbWVudD4gZm9udEZhY2VFbGVtZW50OwotCi0gICAgLy8gU1ZHIEZvbnQg
c3BlY2lmaWMgbWV0cmljcwotICAgIGZsb2F0IGhvcml6b250YWxPcmlnaW5YOwotICAgIGZsb2F0
IGhvcml6b250YWxPcmlnaW5ZOwotICAgIGZsb2F0IGhvcml6b250YWxBZHZhbmNlWDsKLQotICAg
IGZsb2F0IHZlcnRpY2FsT3JpZ2luWDsKLSAgICBmbG9hdCB2ZXJ0aWNhbE9yaWdpblk7Ci0gICAg
ZmxvYXQgdmVydGljYWxBZHZhbmNlWTsKLX07Ci0jZW5kaWYKLQogZW51bSBQaXRjaCB7IFVua25v
d25QaXRjaCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQaXRjaCB9OwogCiBjbGFzcyBTaW1wbGVGb250
RGF0YSA6IHB1YmxpYyBGb250RGF0YSB7CiBwdWJsaWM6Ci0gICAgU2ltcGxlRm9udERhdGEoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgY3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGxvYWRp
bmcgPSBmYWxzZSk7CisgICAgU2ltcGxlRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYs
IGJvb2wgY3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGxvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1NW
R0ZvbnQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB+U2ltcGxlRm9udERhdGEoKTsKIAorICAgIC8v
IEltbWVkaWF0ZWx5IGNhbGwgdGhpcyBhZnRlciBjb25zdHJ1Y3RpbmcgYSBuZXcgU2ltcGxlRm9u
dERhdGEgb3IgU1ZHRm9udERhdGEgb2JqZWN0LgorICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXpl
KCk7CisKIHB1YmxpYzoKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KICAgICBTaW1wbGVGb250RGF0YSogc21hbGxDYXBz
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Owog
CiAgICAgLy8gdmVydGljYWwgbWV0cmljcwotICAgIGludCBhc2NlbnQoZmxvYXQgZm9udFNpemUp
IGNvbnN0OwotICAgIGludCBkZXNjZW50KGZsb2F0IGZvbnRTaXplKSBjb25zdDsKLSAgICBpbnQg
bGluZVNwYWNpbmcoZmxvYXQgZm9udFNpemUpIGNvbnN0OwotICAgIGludCBsaW5lR2FwKGZsb2F0
IGZvbnRTaXplKSBjb25zdDsKLSAgICBmbG9hdCB4SGVpZ2h0KGZsb2F0IGZvbnRTaXplKSBjb25z
dDsKKyAgICBpbnQgYXNjZW50KCkgY29uc3QgeyByZXR1cm4gbV9hc2NlbnQ7IH0KKyAgICBpbnQg
ZGVzY2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VudDsgfQorICAgIGludCBsaW5lU3BhY2lu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVNwYWNpbmc7IH0KKyAgICBpbnQgbGluZUdhcCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZUdhcDsgfQorICAgIGZsb2F0IHhIZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX3hIZWlnaHQ7IH0KICAgICB1bnNpZ25lZCB1bml0c1BlckVtKCkgY29uc3QgeyByZXR1
cm4gbV91bml0c1BlckVtOyB9CiAKICAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBoKSBjb25z
dDsKQEAgLTk0LDExICs3NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGVybWluZVBpdGNoKCk7
CiAgICAgUGl0Y2ggcGl0Y2goKSBjb25zdCB7IHJldHVybiBtX3RyZWF0QXNGaXhlZFBpdGNoID8g
Rml4ZWRQaXRjaCA6IFZhcmlhYmxlUGl0Y2g7IH0KIAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0g
ICAgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3N2Z0ZvbnREYXRhOyB9Ci0gICAg
U1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RGF0YS5n
ZXQoKTsgfQotI2VuZGlmCi0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1NWR0ZvbnQ7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21Gb250KCkgY29u
c3QgeyByZXR1cm4gbV9pc0N1c3RvbUZvbnQ7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9pc0xvYWRpbmc7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTZWdt
ZW50ZWQoKSBjb25zdDsKQEAgLTE1MiwxMCArMTI5LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBt
X3RyZWF0QXNGaXhlZFBpdGNoOwogCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBPd25QdHI8
U1ZHRm9udERhdGE+IG1fc3ZnRm9udERhdGE7Ci0jZW5kaWYKLQorICAgIGJvb2wgbV9pc1NWR0Zv
bnQ7CiAgICAgYm9vbCBtX2lzQ3VzdG9tRm9udDsgIC8vIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBj
dXN0b20gZm9udCBsb2FkZWQgdmlhIEBmb250LWZhY2UKICAgICBib29sIG1faXNMb2FkaW5nOyAv
LyBXaGV0aGVyIG9yIG5vdCB0aGlzIGN1c3RvbSBmb250IGlzIHN0aWxsIGluIHRoZSBhY3Qgb2Yg
bG9hZGluZy4KIApJbmRleDogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDYWNoZUd0ay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDYWNoZUd0ay5jcHAJKHJl
dmlzaW9uIDI5Njc2KQorKysgcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDYWNoZUd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDkgQEAgdm9pZCBGb250Q2FjaGU6OnBsYXRmb3Jt
SW5pdCgpCiAKIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkKIHsKLSAgICByZXR1cm4gbmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURh
dGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSkpOworICAg
IFNpbXBsZUZvbnREYXRhKiBkYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURh
dGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSkpOworCWRh
dGEtPmluaXRpYWxpemUoKTsKKwlyZXR1cm4gZGF0YTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YSog
Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQpJ
bmRleDogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCShyZXZp
c2lvbiAyOTY3NikKKysrIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAgU2ltcGxlRm9udERhdGEqIFNpbXBs
ZUZvbnREYXRhOjpzbWFsbENhcAogICAgICAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoMC43MGYq
Zm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKICAgICAgICAgY29uc3QgRm9udFBsYXRm
b3JtRGF0YSogcGRhdGEgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShkZXNjLCBkZXNjLmZhbWlseSgp
LmZhbWlseSgpKTsKICAgICAgICAgbV9zbWFsbENhcHNGb250RGF0YSA9IG5ldyBTaW1wbGVGb250
RGF0YSgqcGRhdGEpOworICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhLT5pbml0aWFsaXplKCk7
CiAgICAgfQogICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnREYXRhOwogfQpJbmRleDogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCShyZXZpc2lvbiAyOTY3NikKKysrIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1OSw0ICsy
NTksMTEgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlU1ZH
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSogZGF0
YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhOworCWRhdGEtPm1fc2l6ZSA9IGZvbnREZXNjcmlwdGlv
bi5zcGVjaWZpZWRTaXplKCk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMu
bW0JKHJldmlzaW9uIDI5Njc2KQorKysgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnRE
YXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMyArNTYsMTggQEAgc3RhdGljIGlubGlu
ZSBmbG9hdCBzY2FsZUVtVG9Vbml0cyhmbG9hdAogCiBib29sIGluaXRGb250RGF0YShTaW1wbGVG
b250RGF0YSogZm9udERhdGEpCiB7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBpZiAoZm9u
dERhdGEtPmlzU1ZHRm9udCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgIAog
ICAgIGlmICghZm9udERhdGEtPm1fZm9udC5tX2NnRm9udCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgQVRTVVN0eWxlIGZvbnRTdHlsZTsKICAgICBpZiAoQVRTVUNyZWF0ZVN0eWxlKCZm
b250U3R5bGUpICE9IG5vRXJyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisgCiAgICAg
QVRTVUZvbnRJRCBmb250SWQgPSBmb250RGF0YS0+bV9mb250Lm1fYXRzdUZvbnRJRDsKICAgICBp
ZiAoIWZvbnRJZCkgewogICAgICAgICBBVFNVRGlzcG9zZVN0eWxlKGZvbnRTdHlsZSk7CkBAIC0x
MDgsNiArMTEzLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICAK
ICAgICBib29sIGZhaWxlZFNldHVwID0gZmFsc2U7CiAgICAgaWYgKCFpbml0Rm9udERhdGEodGhp
cykpIHsKKwogICAgICAgICAvLyBBY2shIFNvbWV0aGluZyB2ZXJ5IGJhZCBoYXBwZW5lZCwgbGlr
ZSBhIGNvcnJ1cHQgZm9udC4KICAgICAgICAgLy8gVHJ5IGxvb2tpbmcgZm9yIGFuIGFsdGVybmF0
ZSAnYmFzZScgZm9udCBmb3IgdGhpcyByZW5kZXJlci4KIApAQCAtMTYxLDcgKzE2NywxMiBAQCB2
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgICAgICBMT0dfRVJST1IoImZh
aWxlZCB0byBzZXQgdXAgZm9udCwgdXNpbmcgc3lzdGVtIGZvbnQgJXMiLCBtX2ZvbnQuZm9udCgp
KTsKICAgICAgICAgaW5pdEZvbnREYXRhKHRoaXMpOwogICAgIH0KLSAgICAKKworI2lmIEVOQUJM
RShTVkdfRk9OVFMpCisgICAgaWYgKGlzU1ZHRm9udCgpKQorICAgICAgICByZXR1cm47CisjZW5k
aWYKKwogICAgIGludCBpQXNjZW50OwogICAgIGludCBpRGVzY2VudDsKICAgICBpbnQgaUxpbmVH
YXA7CkBAIC0yMjMsNiArMjM0LDcgQEAgU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpz
bWFsbENhcAogICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzbWFsbENhcHNGb250RGF0YSht
X2ZvbnQpOwogICAgICAgICAgICAgc21hbGxDYXBzRm9udERhdGEubV9zaXplID0gc21hbGxDYXBz
Rm9udERhdGEubV9zaXplICogc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyOwogICAgICAgICAg
ICAgbV9zbWFsbENhcHNGb250RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0YShzbWFsbENhcHNGb250
RGF0YSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgbV9zbWFsbENhcHNGb250RGF0YS0+aW5p
dGlhbGl6ZSgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IFttX2ZvbnQuZm9udCgpIHBv
aW50U2l6ZV0gKiBzbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXI7CkluZGV4OiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHJldmlzaW9uIDI5Njc2KQorKysg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY4LDEyICsxNjgsMTQgQEAgU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpz
bWFsbENhcAogICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzbWFsbENhcHNGb250RGF0YSht
X2ZvbnQpOwogICAgICAgICAgICAgc21hbGxDYXBzRm9udERhdGEuc2V0U2l6ZShzbWFsbENhcHNI
ZWlnaHQpOwogICAgICAgICAgICAgbV9zbWFsbENhcHNGb250RGF0YSA9IG5ldyBTaW1wbGVGb250
RGF0YShzbWFsbENhcHNGb250RGF0YSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgbV9zbWFs
bENhcHNGb250RGF0YS0+aW5pdGFsaXplKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBMT0dGT05UIHdpbmZvbnQ7CiAgICAgICAgICAgICBHZXRPYmplY3QobV9mb250Lmhmb250KCks
IHNpemVvZihMT0dGT05UKSwgJndpbmZvbnQpOwogICAgICAgICAgICAgd2luZm9udC5sZkhlaWdo
dCA9IC1scm91bmRmKHNtYWxsQ2Fwc0hlaWdodCAqIChtX2ZvbnQudXNlR0RJKCkgPyAxIDogMzIp
KTsKICAgICAgICAgICAgIEhGT05UIGhmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KCZ3aW5mb250
KTsKICAgICAgICAgICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSBuZXcgU2ltcGxlRm9udERhdGEo
Rm9udFBsYXRmb3JtRGF0YShoZm9udCwgc21hbGxDYXBzSGVpZ2h0LCBmb250RGVzY3JpcHRpb24u
Ym9sZCgpLCBmb250RGVzY3JpcHRpb24uaXRhbGljKCksIG1fZm9udC51c2VHREkoKSkpOworICAg
ICAgICAgICAgbV9zbWFsbENhcHNGb250RGF0YS0+aW5pdGlhbGl6ZSgpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnREYXRhOwpJbmRleDogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvRm9udENhY2hlV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNz
L3d4L0ZvbnRDYWNoZVd4LmNwcAkocmV2aXNpb24gMjk2NzYpCisrKyBwbGF0Zm9ybS9ncmFwaGlj
cy93eC9Gb250Q2FjaGVXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAgdm9p
ZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiAKIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKLSAgICBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEgPSAwOwotICAgIGZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9y
bURhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSkpOwor
ICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0YShGb250UGxh
dGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnQuZmFtaWx5KCkuZmFtaWx5KCkp
KTsKKyAgICBmb250RGF0YS0+aW5pdGlhbGl6ZSgpOwogICAgIHJldHVybiBmb250RGF0YTsKIH0K
IApJbmRleDogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHAJKHJldmlz
aW9uIDI5Njc2KQorKysgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAgU2ltcGxlRm9udERhdGEqIFNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcAogICAgICAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoMC43MGYqZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKICAgICAgICAgY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSogcGRhdGEgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShkZXNjLCBkZXNjLmZhbWlseSgpLmZh
bWlseSgpKTsKICAgICAgICAgbV9zbWFsbENhcHNGb250RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0
YSgqcGRhdGEpOworICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhLT5pbml0aWFsaXplKCk7CiAg
ICAgfQogICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnREYXRhOwogfQpJbmRleDogcmVuZGVyaW5n
L1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0
LmNwcAkocmV2aXNpb24gMjk2NzYpCisrKyByZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6
cmVsYXRpdmVCQm94KGJvCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICAgICAgY29uc3QgRm9u
dCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKICAgICAgICAgaWYgKGZvbnQucHJpbWFyeUZvbnQo
KS0+aXNTVkdGb250KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gU1ZHRm9udERhdGE6
OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnQuc2l6ZSgpLCBmb250LnVuaXRzUGVyRW0oKSwgMS4w
Zik7CisgICAgICAgICAgICBmbG9hdCBzY2FsZSA9IGZvbnQudW5pdHNQZXJFbSgpID4gMCA/IGZv
bnQuc2l6ZSgpIC8gZm9udC51bml0c1BlckVtKCkgOiAwLjBmOwogCiAgICAgICAgICAgICBpZiAo
c2NhbGUgIT0gMC4wZikKICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aCAvPSBzY2FsZTsKSW5k
ZXg6IHN2Zy9TVkdGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHRm9udC5jcHAJKHJldmlz
aW9uIDI5Njc2KQorKysgc3ZnL1NWR0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiU1ZHRm9u
dERhdGEuaCIKICNpbmNsdWRlICJTVkdHbHlwaEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGb250
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgpAQCAtMzYsNiArMzYs
MTQgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnRFbVVuaXRUb1BpeGVsKGZsb2F0IGZvbnRT
aXplLCBmbG9hdCB1bml0c1BlckVtLCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAodW5pdHNQZXJF
bSA9PSAwLjBmKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIHJldHVybiB2YWx1ZSAqIGZv
bnRTaXplIC8gdW5pdHNQZXJFbTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGlzVmVydGljYWxX
cml0aW5nTW9kZShjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgcmV0dXJuIHN0
eWxlLT53cml0aW5nTW9kZSgpID09IFdNX1RCUkwgfHwgc3R5bGUtPndyaXRpbmdNb2RlKCkgPT0g
V01fVEI7IApAQCAtMTg4LDE1ICsxOTYsMTQgQEAgc3RhdGljIGlubGluZSBib29sIGlzQ29tcGF0
aWJsZUdseXBoKGNvbgogICAgIHJldHVybiBpc0NvbXBhdGlibGVBcmFiaWNGb3JtKGlkZW50aWZp
ZXIsIGNoYXJzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxlbWVudComIGZvbnRGYWNl
LCBTVkdGb250RWxlbWVudComIGZvbnQpCitzdGF0aWMgaW5saW5lIGNvbnN0IFNWR0ZvbnREYXRh
KiBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhLCBTVkdGb250RmFjZUVsZW1lbnQqJiBmb250RmFjZSwgU1ZHRm9udEVsZW1l
bnQqJiBmb250KQogewotICAgIEFTU0VSVCghZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKKyAg
ICAvL0FTU0VSVCghZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKICAgICBBU1NFUlQoZm9udERh
dGEtPmlzU1ZHRm9udCgpKTsKIAotICAgIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IGZvbnRE
YXRhLT5zdmdGb250RGF0YSgpOwotICAgIEFTU0VSVChzdmdGb250RGF0YSk7CisgICAgY29uc3Qg
U1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEq
Pihmb250RGF0YSk7CiAKLSAgICBmb250RmFjZSA9IHN2Z0ZvbnREYXRhLT5mb250RmFjZUVsZW1l
bnQuZ2V0KCk7CisgICAgZm9udEZhY2UgPSBzdmdGb250RGF0YS0+Zm9udEZhY2VFbGVtZW50KCk7
CiAgICAgQVNTRVJUKGZvbnRGYWNlKTsKIAogICAgIGZvbnQgPSBmb250RmFjZS0+YXNzb2NpYXRl
ZEZvbnRFbGVtZW50KCk7CkBAIC0yMTAsNyArMjE3LDcgQEAgc3RydWN0IFNWR1RleHRSdW5XYWxr
ZXIgewogICAgIHR5cGVkZWYgYm9vbCAoKlNWR1RleHRSdW5XYWxrZXJDYWxsYmFjaykoY29uc3Qg
U1ZHR2x5cGhJZGVudGlmaWVyJiwgU1ZHVGV4dFJ1bkRhdGEmKTsKICAgICB0eXBlZGVmIHZvaWQg
KCpTVkdUZXh0UnVuV2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2spKGNvbnN0IFRleHRSdW4mLCB1
bnNpZ25lZCBpbnQsIFNWR1RleHRSdW5EYXRhJik7CiAKLSAgICBTVkdUZXh0UnVuV2Fsa2VyKFNW
R0ZvbnREYXRhKiBmb250RGF0YSwgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBTVkdUZXh0
UnVuRGF0YSYgZGF0YSwKKyAgICBTVkdUZXh0UnVuV2Fsa2VyKGNvbnN0IFNWR0ZvbnREYXRhKiBm
b250RGF0YSwgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBTVkdUZXh0UnVuRGF0YSYgZGF0
YSwKICAgICAgICAgICAgICAgICAgICAgIFNWR1RleHRSdW5XYWxrZXJDYWxsYmFjayBjYWxsYmFj
aywgU1ZHVGV4dFJ1bldhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrIG1pc3NpbmdHbHlwaENhbGxi
YWNrKQogICAgICAgICA6IG1fZm9udERhdGEoZm9udERhdGEpCiAgICAgICAgICwgbV9mb250RWxl
bWVudChmb250RWxlbWVudCkKQEAgLTI3OSw3ICsyODYsNyBAQCBzdHJ1Y3QgU1ZHVGV4dFJ1bldh
bGtlciB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFNWR0ZvbnREYXRhKiBtX2ZvbnREYXRhOwor
ICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBtX2ZvbnREYXRhOwogICAgIFNWR0ZvbnRFbGVtZW50KiBt
X2ZvbnRFbGVtZW50OwogICAgIFNWR1RleHRSdW5EYXRhJiBtX3dhbGtlckRhdGE7CiAgICAgU1ZH
VGV4dFJ1bldhbGtlckNhbGxiYWNrIG1fd2Fsa2VyQ2FsbGJhY2s7CkBAIC0yOTIsMTYgKzI5OSwx
NSBAQCBzdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0CiAgICAgaW50IGZy
b207CiAgICAgaW50IHRvOwogCisgICAgZmxvYXQgc2NhbGU7CiAgICAgZmxvYXQgbGVuZ3RoOwot
ICAgIGZsb2F0IGZvbnRTaXplOwotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW07CiAgICAgY29uc3Qg
Rm9udCogZm9udDsKIH07CiAKIGJvb2wgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udENhbGxiYWNrKGNv
bnN0IFNWR0dseXBoSWRlbnRpZmllciYgaWRlbnRpZmllciwgU1ZHVGV4dFJ1bldhbGtlck1lYXN1
cmVkTGVuZ3RoRGF0YSYgZGF0YSkKIHsKICAgICBpZiAoZGF0YS5hdCA+PSBkYXRhLmZyb20gJiYg
ZGF0YS5hdCA8IGRhdGEudG8pCi0gICAgICAgIGRhdGEubGVuZ3RoICs9IFNWR0ZvbnREYXRhOjpj
b252ZXJ0RW1Vbml0VG9QaXhlbChkYXRhLmZvbnRTaXplLCBkYXRhLnVuaXRzUGVyRW0sIGlkZW50
aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYKTsKKyAgICAgICAgZGF0YS5sZW5ndGggKz0gaWRlbnRp
Zmllci5ob3Jpem9udGFsQWR2YW5jZVggKiBkYXRhLnNjYWxlOwogCiAgICAgZGF0YS5hdCsrOwog
ICAgIHJldHVybiBkYXRhLmF0IDwgZGF0YS50bzsKQEAgLTMwOSw2ICszMTUsOSBAQCBib29sIGZs
b2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxsYmFjayhjb25zCiAKIHZvaWQgZmxvYXRXaWR0aE1pc3Np
bmdHbHlwaENhbGxiYWNrKGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgaW50IHBvc2l0aW9u
LCBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhJiBkYXRhKQogeworICAgIHJldHVy
bjsKKworICAgIC8qCiAgICAgLy8gQ29uc3RydWN0IGEgY29weSBvZiB0aGUgY3VycmVudCBTVkcg
Rm9udCB0aGF0IGluIGlzIHVzZS4gRGlzYWJsZSB0aGUgU1ZHIEZvbnQgZnVuY3Rpb25hbGl0eQog
ICAgIC8vIGluIHRoYXQgY29weSBvZiB0aGUgRm9udCBvYmplY3QsIHNvIGRyYXdUZXh0L2Zsb2F0
V2lkdGggZW5kIHVwIGluIHRoZSAic2ltcGxlIiBjb2RlIHBhdGhzLgogICAgIFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSA9IGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPihkYXRhLmZvbnQtPnBy
aW1hcnlGb250KCkpOwpAQCAtMzIyLDYgKzMzMSw3IEBAIHZvaWQgZmxvYXRXaWR0aE1pc3NpbmdH
bHlwaENhbGxiYWNrKGNvbnMKIAogICAgIC8vIFN3aXRjaCBiYWNrIHRvIFNWRyBGb250IGNvZGUg
cGF0aAogICAgIGZvbnREYXRhLT5tX3N2Z0ZvbnREYXRhLnNldChzdmdGb250RGF0YSk7CisgICAg
Ki8KIH0KIAogc3RhdGljIGZsb2F0IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udChj
b25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8pCkBA
IC0zMzUsNyArMzQ1LDcgQEAgc3RhdGljIGZsb2F0IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5n
UwogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7CiAgICAgU1ZHRm9udEZhY2VF
bGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwogCi0gICAgaWYgKFNWR0ZvbnREYXRhKiBmb250
RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250LT5wcmltYXJ5
Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgeworICAgIGlmIChjb25zdCBT
VkdGb250RGF0YSogZm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERh
dGEoZm9udC0+cHJpbWFyeUZvbnQoKSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCkpIHsK
ICAgICAgICAgaWYgKCFmb250RWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiAwLjBmOwogCkBA
IC0zNDUsMTAgKzM1NSw5IEBAIHN0YXRpYyBmbG9hdCBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2lu
Z1MKICAgICAgICAgZGF0YS5hdCA9IGZyb207CiAgICAgICAgIGRhdGEuZnJvbSA9IGZyb207CiAg
ICAgICAgIGRhdGEudG8gPSB0bzsKKyAgICAgICAgZGF0YS5zY2FsZSA9IGNvbnZlcnRFbVVuaXRU
b1BpeGVsKGZvbnQtPnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCksIDEuMGYp
OwogICAgICAgICBkYXRhLmxlbmd0aCA9IDAuMGY7Ci0gICAgICAgIGRhdGEuZm9udFNpemUgPSBm
b250LT5zaXplKCk7Ci0gICAgICAgIGRhdGEudW5pdHNQZXJFbSA9IGZvbnRGYWNlRWxlbWVudC0+
dW5pdHNQZXJFbSgpOwotCisgICAgICAKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkpIHsKICAgICAgICAgICAgIGJv
b2wgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocmVuZGVyT2JqZWN0LT5z
dHlsZSgpLT5zdmdTdHlsZSgpKTsKIApAQCAtMzczLDkgKzM4Miw3IEBAIGZsb2F0IEZvbnQ6OmZs
b2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QKIAogLy8gQ2FsbGJhY2sgJiBkYXRhIHN0cnVjdHVy
ZXMgdG8gZHJhdyB0ZXh0IHVzaW5nIFNWRyBGb250cwogc3RydWN0IFNWR1RleHRSdW5XYWxrZXJE
cmF3VGV4dERhdGEgewotICAgIGZsb2F0IGZvbnRTaXplOwogICAgIGZsb2F0IHNjYWxlOwotICAg
IHVuc2lnbmVkIHVuaXRzUGVyRW07CiAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dDsKIAogICAgIGZs
b2F0IHhTdGFydE9mZnNldDsKQEAgLTM5MCwxMyArMzk3LDE0IEBAIHN0cnVjdCBTVkdUZXh0UnVu
V2Fsa2VyRHJhd1RleHREYXRhIHsKIAogYm9vbCBkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxiYWNr
KGNvbnN0IFNWR0dseXBoSWRlbnRpZmllciYgaWRlbnRpZmllciwgU1ZHVGV4dFJ1bldhbGtlckRy
YXdUZXh0RGF0YSYgZGF0YSkKIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiAtPiBjYWxsYmFjayFcbiIp
OwogICAgIC8vIFRPRE86IFN1cHBvcnQgYXJiaXRhcnkgU1ZHIGNvbnRlbnQgYXMgZ2x5cGggKGN1
cnJlbnRseSBsaW1pdGVkIHRvIDxnbHlwaCBkPSIuLi4iPiBzaXR1YXRpb25zKQogICAgIGlmICgh
aWRlbnRpZmllci5wYXRoRGF0YS5pc0VtcHR5KCkpIHsKICAgICAgICAgZGF0YS5jb250ZXh0LT5z
YXZlKCk7CiAKICAgICAgICAgaWYgKGRhdGEuaXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgICAg
IGRhdGEuZ2x5cGhPcmlnaW4uc2V0WChTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwo
ZGF0YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2lu
WCkpOwotICAgICAgICAgICAgZGF0YS5nbHlwaE9yaWdpbi5zZXRZKFNWR0ZvbnREYXRhOjpjb252
ZXJ0RW1Vbml0VG9QaXhlbChkYXRhLmZvbnRTaXplLCBkYXRhLnVuaXRzUGVyRW0sIGlkZW50aWZp
ZXIudmVydGljYWxPcmlnaW5ZKSk7CisgICAgICAgICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFgo
aWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblggKiBkYXRhLnNjYWxlKTsKKyAgICAgICAgICAgIGRh
dGEuZ2x5cGhPcmlnaW4uc2V0WShpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSAqIGRhdGEuc2Nh
bGUpOwogICAgICAgICB9CiAKICAgICAgICAgZGF0YS5jb250ZXh0LT50cmFuc2xhdGUoZGF0YS54
U3RhcnRPZmZzZXQgKyBkYXRhLmN1cnJlbnRQb2ludC54KCkgKyBkYXRhLmdseXBoT3JpZ2luLngo
KSwgZGF0YS5jdXJyZW50UG9pbnQueSgpICsgZGF0YS5nbHlwaE9yaWdpbi55KCkpOwpAQCAtNDIx
LDE1ICs0MjksMTggQEAgYm9vbCBkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxiYWNrKGNvbnN0IAog
ICAgIH0KIAogICAgIGlmIChkYXRhLmlzVmVydGljYWxUZXh0KQotICAgICAgICBkYXRhLmN1cnJl
bnRQb2ludC5tb3ZlKDAuMGYsIFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChkYXRh
LmZvbnRTaXplLCBkYXRhLnVuaXRzUGVyRW0sIGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSkp
OworICAgICAgICBkYXRhLmN1cnJlbnRQb2ludC5tb3ZlKDAuMGYsIGlkZW50aWZpZXIudmVydGlj
YWxBZHZhbmNlWSAqIGRhdGEuc2NhbGUpOwogICAgIGVsc2UKLSAgICAgICAgZGF0YS5jdXJyZW50
UG9pbnQubW92ZShTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6
ZSwgZGF0YS51bml0c1BlckVtLCBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCksIDAuMGYp
OworICAgICAgICBkYXRhLmN1cnJlbnRQb2ludC5tb3ZlKGlkZW50aWZpZXIuaG9yaXpvbnRhbEFk
dmFuY2VYICogZGF0YS5zY2FsZSwgMC4wZik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9p
ZCBkcmF3VGV4dE1pc3NpbmdHbHlwaENhbGxiYWNrKGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWdu
ZWQgaW50IHBvc2l0aW9uLCBTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhJiBkYXRhKQogewor
ICAgIHJldHVybjsKKworICAgIC8qCiAgICAgLy8gQ29uc3RydWN0IGEgY29weSBvZiB0aGUgY3Vy
cmVudCBTVkcgRm9udCB0aGF0IGluIGlzIHVzZS4gRGlzYWJsZSB0aGUgU1ZHIEZvbnQgZnVuY3Rp
b25hbGl0eQogICAgIC8vIGluIHRoYXQgY29weSBvZiB0aGUgRm9udCBvYmplY3QsIHNvIGRyYXdU
ZXh0L2Zsb2F0V2lkdGggZW5kIHVwIGluIHRoZSAic2ltcGxlIiBjb2RlIHBhdGhzLgogICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBkYXRhLmNvbnRleHQtPmZvbnQoKTsKQEAgLTQ1MCw2ICs0NjEsNyBA
QCB2b2lkIGRyYXdUZXh0TWlzc2luZ0dseXBoQ2FsbGJhY2soY29uc3QgCiAKICAgICAvLyBTd2l0
Y2ggYmFjayB0byBTVkcgRm9udCBjb2RlIHBhdGgKICAgICBmb250RGF0YS0+bV9zdmdGb250RGF0
YS5zZXQoc3ZnRm9udERhdGEpOworICAgICovCiB9CiAKIHZvaWQgRm9udDo6ZHJhd1RleHRVc2lu
Z1NWR0ZvbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIApA
QCAtNDU4LDkgKzQ3MCw5IEBAIHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhp
Y3MKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOwogICAgIFNWR0ZvbnRGYWNl
RWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKIAotICAgIGlmIChTVkdGb250RGF0YSogZm9u
dERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEocHJpbWFyeUZvbnQo
KSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCkpIHsKLSAgICAgICAgaWYgKCFmb250RWxl
bWVudCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoY29uc3QgU1ZHRm9udERhdGEqIGZv
bnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKHByaW1hcnlGb250
KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7CisgICAgICAgIGlmICghZm9udEVs
ZW1lbnQpIHsgZnByaW50ZihzdGRlcnIsICJGQUlMIVxuIik7CisgICAgICAgICAgICByZXR1cm47
IH0KIAogICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhIGRhdGE7CiAKQEAgLTQ3
MCw5ICs0ODIsNyBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KEdyYXBoaWNzCiAg
ICAgICAgIGRhdGEuYWN0aXZlUGFpbnRTZXJ2ZXIgPSBydW4uYWN0aXZlUGFpbnRTZXJ2ZXIoKTsK
ICAgICAgICAgQVNTRVJUKGRhdGEuYWN0aXZlUGFpbnRTZXJ2ZXIpOwogCi0gICAgICAgIGRhdGEu
Zm9udFNpemUgPSBzaXplKCk7Ci0gICAgICAgIGRhdGEudW5pdHNQZXJFbSA9IGZvbnRGYWNlRWxl
bWVudC0+dW5pdHNQZXJFbSgpOwotICAgICAgICBkYXRhLnNjYWxlID0gU1ZHRm9udERhdGE6OmNv
bnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgMS4wZik7
CisgICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChzaXplKCksIGZvbnRG
YWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsKICAgICAgICAgZGF0YS5pc1ZlcnRpY2Fs
VGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShkYXRhLnJlbmRlck9iamVjdC0+c3R5bGUoKS0+
c3ZnU3R5bGUoKSk7ICAgIAogICAgICAgICBkYXRhLnhTdGFydE9mZnNldCA9IGZsb2F0V2lkdGhP
ZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIHJ1bi5ydGwoKSA/IHRvIDogMCwgcnVu
LnJ0bCgpID8gcnVuLmxlbmd0aCgpIDogZnJvbSk7CiAgICAgICAgIGRhdGEuY3VycmVudFBvaW50
ID0gcG9pbnQ7CkBAIC00ODQsMTAgKzQ5NCwxMCBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdT
VkdGb250KEdyYXBoaWNzCiAgICAgICAgICAgICBsYW5ndWFnZSA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihkYXRhLnJlbmRlck9iamVjdC0+ZWxlbWVudCgpKS0+Z2V0QXR0cmlidXRlKFhNTE5hbWVz
OjpsYW5nQXR0cik7CiAKICAgICAgICAgaWYgKCFkYXRhLmlzVmVydGljYWxUZXh0KSB7Ci0gICAg
ICAgICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFgoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRU
b1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgZm9udERhdGEtPmhvcml6b250
YWxPcmlnaW5YKSk7Ci0gICAgICAgICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFkoU1ZHRm9udERh
dGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwg
Zm9udERhdGEtPmhvcml6b250YWxPcmlnaW5ZKSk7CisgICAgICAgICAgICBkYXRhLmdseXBoT3Jp
Z2luLnNldFgoZm9udERhdGEtPmhvcml6b250YWxPcmlnaW5YKCkpOworICAgICAgICAgICAgZGF0
YS5nbHlwaE9yaWdpbi5zZXRZKGZvbnREYXRhLT5ob3Jpem9udGFsT3JpZ2luWSgpKTsKICAgICAg
ICAgfQotICAgIAorICAgZnByaW50ZihzdGRlcnIsICJTVEFSVCBUVU4hXG4iKTsgCiAgICAgICAg
IFNWR1RleHRSdW5XYWxrZXI8U1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YT4gcnVuV2Fsa2Vy
KGZvbnREYXRhLCBmb250RWxlbWVudCwgZGF0YSwgZHJhd1RleHRVc2luZ1NWR0ZvbnRDYWxsYmFj
aywgZHJhd1RleHRNaXNzaW5nR2x5cGhDYWxsYmFjayk7CiAgICAgICAgIHJ1bldhbGtlci53YWxr
KHJ1biwgZGF0YS5pc1ZlcnRpY2FsVGV4dCwgbGFuZ3VhZ2UsIGZyb20sIHRvKTsKICAgICB9Cklu
ZGV4OiBzdmcvU1ZHRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdGb250RGF0YS5j
cHAJKHJldmlzaW9uIDApCisrKyBzdmcvU1ZHRm9udERhdGEuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJTVkdGb250RGF0YS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1NWR0ZvbnREYXRhOjpTVkdGb250RGF0YShTVkdGb250RmFjZUVsZW1lbnQqIGZv
bnRGYWNlRWxlbWVudCwgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29s
IGN1c3RvbUZvbnQsIGJvb2wgbG9hZGluZykKKyAgICA6IFNpbXBsZUZvbnREYXRhKHBsYXRmb3Jt
RGF0YSwgdHJ1ZSwgbG9hZGluZywgdHJ1ZSkKKyAgICAsIG1fZm9udEZhY2VFbGVtZW50KGZvbnRG
YWNlRWxlbWVudCkKKyAgICAsIG1faG9yaXpvbnRhbE9yaWdpblgoMC4wZikKKyAgICAsIG1faG9y
aXpvbnRhbE9yaWdpblkoMC4wZikKKyAgICAsIG1faG9yaXpvbnRhbEFkdmFuY2VYKDAuMGYpCisg
ICAgLCBtX3ZlcnRpY2FsT3JpZ2luWCgwLjBmKQorICAgICwgbV92ZXJ0aWNhbE9yaWdpblkoMC4w
ZikKKyAgICAsIG1fdmVydGljYWxBZHZhbmNlWSgwLjBmKQoreworICAgIEFTU0VSVChmb250RmFj
ZUVsZW1lbnQpOworfQorCitTVkdGb250RGF0YTo6flNWR0ZvbnREYXRhKCkKK3sKK30KKwordm9p
ZCBTVkdGb250RGF0YTo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV94SGVpZ2h0ID0gbV9mb250RmFj
ZUVsZW1lbnQtPnhIZWlnaHQoKTsKKyAgICBtX3VuaXRzUGVyRW0gPSBtX2ZvbnRGYWNlRWxlbWVu
dC0+dW5pdHNQZXJFbSgpOworCisgICAgZmxvYXQgc2NhbGUgPSAwLjBmOworCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIHNjYWxlID0gcGxhdGZvcm1EYXRhKCkubV9zaXplOworI2VsaWYgUExBVEZP
Uk0oR1RLKQorICAgIHNjYWxlID0gcGxhdGZvcm1EYXRhKCkubV9mb250RGVzY3JpcHRpb24uc3Bl
Y2lmaWVkU2l6ZSgpOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIHNjYWxlID0gcGxhdGZvcm1E
YXRhKCkuc2l6ZSgpOworI2VuZGlmCisgICAgLy8gVE9ETzogUXQgc3VwcG9ydCBmb3IgU1ZHIEZv
bnRzCisKKyAgICBzY2FsZSAvPSBtX3VuaXRzUGVyRW0gIT0gMCA/IG1fdW5pdHNQZXJFbSA6IDE7
CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNDQUxFOiAlZlxuIiwgc2NhbGUpOworCisgICAgbV9o
b3Jpem9udGFsT3JpZ2luWCA9IG1fZm9udEZhY2VFbGVtZW50LT5ob3Jpem9udGFsT3JpZ2luWCgp
ICogc2NhbGU7CisgICAgbV9ob3Jpem9udGFsT3JpZ2luWSA9IG1fZm9udEZhY2VFbGVtZW50LT5o
b3Jpem9udGFsT3JpZ2luWSgpICogc2NhbGU7CisgICAgbV9ob3Jpem9udGFsQWR2YW5jZVggPSBt
X2ZvbnRGYWNlRWxlbWVudC0+aG9yaXpvbnRhbEFkdmFuY2VYKCkgKiBzY2FsZTsKKyAgICBtX3Zl
cnRpY2FsT3JpZ2luWCA9IG1fZm9udEZhY2VFbGVtZW50LT52ZXJ0aWNhbE9yaWdpblgoKSAqIHNj
YWxlOworICAgIG1fdmVydGljYWxPcmlnaW5ZID0gbV9mb250RmFjZUVsZW1lbnQtPnZlcnRpY2Fs
T3JpZ2luWSgpICogc2NhbGU7CisgICAgbV92ZXJ0aWNhbEFkdmFuY2VZID0gbV9mb250RmFjZUVs
ZW1lbnQtPnZlcnRpY2FsQWR2YW5jZVkoKSAqIHNjYWxlOworCisgICAgbV9hc2NlbnQgPSBtX2Zv
bnRGYWNlRWxlbWVudC0+YXNjZW50KCkgKiBzY2FsZTsKKyAgICBtX2Rlc2NlbnQgPSBtX2ZvbnRG
YWNlRWxlbWVudC0+ZGVzY2VudCgpICogc2NhbGU7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgImhv
ciBvcmlnIHg6ICVmLCBob3Igb3JpZyB5OiAlZiwgaG9yIGFkdiB4OiAlZlxuIiwgIG1faG9yaXpv
bnRhbE9yaWdpblgsIG1faG9yaXpvbnRhbE9yaWdpblksIG1faG9yaXpvbnRhbEFkdmFuY2VYKTsK
KyAgICBmcHJpbnRmKHN0ZGVyciwgInZlciBvcmlnIHg6ICVmLCB2ZXIgb3JpZyB5OiAlZiwgdmVy
IGFkdiB4OiAlZlxuIiwgIG1fdmVydGljYWxPcmlnaW5YLCBtX3ZlcnRpY2FsT3JpZ2luWSwgbV92
ZXJ0aWNhbEFkdmFuY2VZKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImFzY2VudDogJWksIGRlc2Nl
bnQ6ICVpIHhIZWlnaHQ6ICVmLCB1bml0c1BlckVtOiAlaVxuIiwgbV9hc2NlbnQsIG1fZGVzY2Vu
dCwgbV94SGVpZ2h0LCBtX3VuaXRzUGVyRW0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpJbmRleDogc3ZnL1NWR0ZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NW
R0ZvbnREYXRhLmgJKHJldmlzaW9uIDApCisrKyBzdmcvU1ZHRm9udERhdGEuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU1ZHRm9udERhdGFfaAor
I2RlZmluZSBTVkdGb250RGF0YV9oCisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRm9udERhdGEgOiBwdWJsaWMgU2ltcGxlRm9u
dERhdGEgeworcHVibGljOgorICAgIFNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVudCosIGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGN1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBsb2Fk
aW5nID0gZmFsc2UpOworICAgIHZpcnR1YWwgflNWR0ZvbnREYXRhKCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlRWxlbWVudC5nZXQoKTsgfQorCisgICAg
ZmxvYXQgaG9yaXpvbnRhbE9yaWdpblgoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxPcmln
aW5YOyB9CisgICAgZmxvYXQgaG9yaXpvbnRhbE9yaWdpblkoKSBjb25zdCB7IHJldHVybiBtX2hv
cml6b250YWxPcmlnaW5ZOyB9CisgICAgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2VYKCkgY29uc3Qg
eyByZXR1cm4gbV9ob3Jpem9udGFsQWR2YW5jZVg7IH0KKworICAgIGZsb2F0IHZlcnRpY2FsT3Jp
Z2luWCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxPcmlnaW5YOyB9CisgICAgZmxvYXQgdmVy
dGljYWxPcmlnaW5ZKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbE9yaWdpblk7IH0KKyAgICBm
bG9hdCB2ZXJ0aWNhbEFkdmFuY2VZKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbEFkdmFuY2VZ
OyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFNWR0ZvbnRGYWNlRWxlbWVudD4gbV9mb250RmFj
ZUVsZW1lbnQ7CisKKyAgICBmbG9hdCBtX2hvcml6b250YWxPcmlnaW5YOworICAgIGZsb2F0IG1f
aG9yaXpvbnRhbE9yaWdpblk7CisgICAgZmxvYXQgbV9ob3Jpem9udGFsQWR2YW5jZVg7CisKKyAg
ICBmbG9hdCBtX3ZlcnRpY2FsT3JpZ2luWDsKKyAgICBmbG9hdCBtX3ZlcnRpY2FsT3JpZ2luWTsK
KyAgICBmbG9hdCBtX3ZlcnRpY2FsQWR2YW5jZVk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgorI2VuZGlmIC8vIFNWR0ZvbnREYXRhX2gKSW5kZXg6IHN2Zy9TVkdGb250
RmFjZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyOTY3NikKKysrIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogI2luY2x1
ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgotCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1
ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU3JjVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgpAQCAtMTQ0LDEwMiArMTQ0LDE0OCBAQCB1bnNpZ25l
ZCBTVkdGb250RmFjZUVsZW1lbnQ6OnVuaXRzUGVyRW0oCiAgICAgcmV0dXJuIDEwMDA7CiB9CiAK
LVN0cmluZyBTVkdGb250RmFjZUVsZW1lbnQ6OmZvbnRGYW1pbHkoKSBjb25zdAoraW50IFNWR0Zv
bnRGYWNlRWxlbWVudDo6eEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc3R5bGVEZWNs
YXJhdGlvbi0+Z2V0UHJvcGVydHlWYWx1ZShDU1NfUFJPUF9GT05UX0ZBTUlMWSk7CisgICAgaWYg
KGhhc0F0dHJpYnV0ZSh4X2hlaWdodEF0dHIpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihjZWlsZihnZXRBdHRyaWJ1dGUoeF9oZWlnaHRBdHRyKS50b0Zsb2F0KCkpKTsKKworICAg
IHJldHVybiAwOwogfQogCi1TaW1wbGVGb250RGF0YSogU1ZHRm9udEZhY2VFbGVtZW50OjpjcmVh
dGVGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QK
K2Zsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbE9yaWdpblgoKSBjb25zdAogewot
ICAgIC8vIFdlIG9ubHkgZXhwZWN0IHRvIGhhdmUgdGhpcyBtZXRob2QgY2FsbGVkIGJ5IGEgcGFy
ZW50IGZvbnQgZWxlbWVudAotICAgIEFTU0VSVChwYXJlbnROb2RlKCkpOwotICAgIEFTU0VSVChw
YXJlbnROb2RlKCktPmhhc1RhZ05hbWUoZm9udFRhZykpOwotICAgIFNWR0ZvbnRFbGVtZW50KiBm
b250RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZvbnRFbGVtZW50Kj4ocGFyZW50Tm9kZSgpKTsK
LQotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGNhY2hlZFBsYXRmb3JtRGF0YSA9IEZvbnRDYWNoZTo6
Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwotICAgIGlmICghY2Fj
aGVkUGxhdGZvcm1EYXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE93blB0cjxTaW1wbGVG
b250RGF0YT4gZm9udERhdGEobmV3IFNpbXBsZUZvbnREYXRhKCpjYWNoZWRQbGF0Zm9ybURhdGEp
KTsKLQotICAgIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IG5ldyBTVkdGb250RGF0YShjb25z
dF9jYXN0PFNWR0ZvbnRGYWNlRWxlbWVudCo+KHRoaXMpKTsKLSAgICBmb250RGF0YS0+bV9zdmdG
b250RGF0YS5zZXQoc3ZnRm9udERhdGEpOwotCi0gICAgZm9udERhdGEtPm1feEhlaWdodCA9IGZv
bnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoeF9oZWlnaHRBdHRyKS50b0Zsb2F0KCk7Ci0gICAgZm9u
dERhdGEtPm1fdW5pdHNQZXJFbSA9IHVuaXRzUGVyRW0oKTsKKyAgICBpZiAoIW1fZm9udEVsZW1l
bnQpCisgICAgICAgIHJldHVybiAwLjBmOwogCiAgICAgLy8gU3BlYzogVGhlIFgtY29vcmRpbmF0
ZSBpbiB0aGUgZm9udCBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgb3JpZ2luIG9mIGEgZ2x5cGgg
dG8gYmUgdXNlZCB3aGVuCiAgICAgLy8gZHJhd2luZyBob3Jpem9udGFsbHkgb3JpZW50ZWQgdGV4
dC4gKE5vdGUgdGhhdCB0aGUgb3JpZ2luIGFwcGxpZXMgdG8gYWxsIGdseXBocyBpbiB0aGUgZm9u
dC4pCiAgICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0
IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAiIHdlcmUgc3BlY2lmaWVkLgotICAgIGlmIChmb250RWxl
bWVudC0+aGFzQXR0cmlidXRlKGhvcml6X29yaWdpbl94QXR0cikpCi0gICAgICAgIHN2Z0ZvbnRE
YXRhLT5ob3Jpem9udGFsT3JpZ2luWCA9IGZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoaG9yaXpf
b3JpZ2luX3hBdHRyKS50b0Zsb2F0KCk7CisgICAgaWYgKG1fZm9udEVsZW1lbnQtPmhhc0F0dHJp
YnV0ZShob3Jpel9vcmlnaW5feEF0dHIpKQorICAgICAgICByZXR1cm4gbV9mb250RWxlbWVudC0+
Z2V0QXR0cmlidXRlKGhvcml6X29yaWdpbl94QXR0cikudG9GbG9hdCgpOworCisgICAgcmV0dXJu
IDAuMGY7Cit9CisKK2Zsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbE9yaWdpblko
KSBjb25zdAoreworICAgIGlmICghbV9mb250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDAuMGY7
CiAKICAgICAvLyBTcGVjOiBUaGUgWS1jb29yZGluYXRlIGluIHRoZSBmb250IGNvb3JkaW5hdGUg
c3lzdGVtIG9mIHRoZSBvcmlnaW4gb2YgYSBnbHlwaCB0byBiZSB1c2VkIHdoZW4KICAgICAvLyBk
cmF3aW5nIGhvcml6b250YWxseSBvcmllbnRlZCB0ZXh0LiAoTm90ZSB0aGF0IHRoZSBvcmlnaW4g
YXBwbGllcyB0byBhbGwgZ2x5cGhzIGluIHRoZSBmb250LikKICAgICAvLyBJZiB0aGUgYXR0cmli
dXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCIg
d2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKGZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUoaG9yaXpf
b3JpZ2luX3lBdHRyKSkKLSAgICAgICAgc3ZnRm9udERhdGEtPmhvcml6b250YWxPcmlnaW5ZID0g
Zm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZShob3Jpel9vcmlnaW5feUF0dHIpLnRvRmxvYXQoKTsK
KyAgICBpZiAobV9mb250RWxlbWVudC0+aGFzQXR0cmlidXRlKGhvcml6X29yaWdpbl95QXR0cikp
CisgICAgICAgIHJldHVybiBtX2ZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoaG9yaXpfb3JpZ2lu
X3lBdHRyKS50b0Zsb2F0KCk7CisKKyAgICByZXR1cm4gMC4wZjsKK30KKworZmxvYXQgU1ZHRm9u
dEZhY2VFbGVtZW50Ojpob3Jpem9udGFsQWR2YW5jZVgoKSBjb25zdAoreworICAgIGlmICghbV9m
b250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAgICAvLyBTcGVjOiBUaGUgZGVm
YXVsdCBob3Jpem9udGFsIGFkdmFuY2UgYWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5cGggaW4gaG9yaXpv
bnRhbCBvcmllbnRhdGlvbi4gR2x5cGgKICAgICAvLyB3aWR0aHMgYXJlIHJlcXVpcmVkIHRvIGJl
IG5vbi1uZWdhdGl2ZSwgZXZlbiBpZiB0aGUgZ2x5cGggaXMgdHlwaWNhbGx5IHJlbmRlcmVkIHJp
Z2h0LXRvLWxlZnQsCiAgICAgLy8gYXMgaW4gSGVicmV3IGFuZCBBcmFiaWMgc2NyaXB0cy4KLSAg
ICBpZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZShob3Jpel9hZHZfeEF0dHIpKSB7Ci0gICAg
ICAgIGZsb2F0IGFkdmFuY2UgPSBmb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKGhvcml6X2Fkdl94
QXR0cikudG9GbG9hdCgpOworICAgIGlmIChtX2ZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUoaG9y
aXpfYWR2X3hBdHRyKSkKKyAgICAgICAgcmV0dXJuIG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0
ZShob3Jpel9hZHZfeEF0dHIpLnRvRmxvYXQoKTsKIAotICAgICAgICAvLyBUT0RPOiBSZXBvcnQg
ZXJyb3JzLCBpbnN0ZWFkIG9mIHNpbGVudCBpZ25vcmU/Ci0gICAgICAgIGlmIChhZHZhbmNlID49
IDAuMCkKLSAgICAgICAgICAgIHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2YW5jZVggPSBhZHZh
bmNlOwotICAgIH0KKyAgICByZXR1cm4gMC4wZjsKK30KKworZmxvYXQgU1ZHRm9udEZhY2VFbGVt
ZW50Ojp2ZXJ0aWNhbE9yaWdpblgoKSBjb25zdAoreworICAgIGlmICghbV9mb250RWxlbWVudCkK
KyAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAgICAvLyBTcGVjOiBUaGUgZGVmYXVsdCBYLWNvb3Jk
aW5hdGUgaW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9yaWdpbiBvZiBhIGds
eXBoIHRvIGJlIHVzZWQgd2hlbgogICAgIC8vIGRyYXdpbmcgdmVydGljYWxseSBvcmllbnRlZCB0
ZXh0LiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMg
aWYgdGhlIGF0dHJpYnV0ZQogICAgIC8vIHdlcmUgc2V0IHRvIGhhbGYgb2YgdGhlIGVmZmVjdGl2
ZSB2YWx1ZSBvZiBhdHRyaWJ1dGUgaG9yaXotYWR2LXguCi0gICAgaWYgKGZvbnRFbGVtZW50LT5o
YXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feEF0dHIpKQotICAgICAgICBzdmdGb250RGF0YS0+dmVy
dGljYWxPcmlnaW5YID0gZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl94QXR0
cikudG9GbG9hdCgpOwotICAgIGVsc2UKLSAgICAgICAgc3ZnRm9udERhdGEtPnZlcnRpY2FsT3Jp
Z2luWCA9IHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2YW5jZVggLyAyLjBmOworICAgIGlmICht
X2ZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feEF0dHIpKQorICAgICAgICBy
ZXR1cm4gbV9mb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRfb3JpZ2luX3hBdHRyKS50b0Zs
b2F0KCk7CisKKyAgICByZXR1cm4gaG9yaXpvbnRhbEFkdmFuY2VYKCkgLyAyLjBmOworfQorCitm
bG9hdCBTVkdGb250RmFjZUVsZW1lbnQ6OnZlcnRpY2FsT3JpZ2luWSgpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2ZvbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgIC8vIFNwZWM6
IFRoZSBkZWZhdWx0IFktY29vcmRpbmF0ZSBpbiB0aGUgZm9udCBjb29yZGluYXRlIHN5c3RlbSBv
ZiB0aGUgb3JpZ2luIG9mIGEgZ2x5cGggdG8gYmUgdXNlZCB3aGVuCiAgICAgLy8gZHJhd2luZyB2
ZXJ0aWNhbGx5IG9yaWVudGVkIHRleHQuIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmll
ZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiB0aGUgYXR0cmlidXRlCiAgICAgLy8gd2VyZSBzZXQgdG8g
dGhlIHBvc2l0aW9uIHNwZWNpZmllZCBieSB0aGUgZm9udCdzIGFzY2VudCBhdHRyaWJ1dGUuICAg
ICAgICAgICAgIAotICAgIGlmIChmb250RWxlbWVudC0+aGFzQXR0cmlidXRlKHZlcnRfb3JpZ2lu
X3lBdHRyKSkKLSAgICAgICAgc3ZnRm9udERhdGEtPnZlcnRpY2FsT3JpZ2luWSA9IGZvbnRFbGVt
ZW50LT5nZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpLnRvRmxvYXQoKTsKLSAgICBlbHNl
Ci0gICAgICAgIHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbE9yaWdpblkgPSBmb250RWxlbWVudC0+Z2V0
QXR0cmlidXRlKGFzY2VudEF0dHIpLnRvRmxvYXQoKTsKKyAgICBpZiAobV9mb250RWxlbWVudC0+
aGFzQXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKSkKKyAgICAgICAgcmV0dXJuIG1fZm9udEVs
ZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikudG9GbG9hdCgpOworCisgICAg
aWYgKG1fZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZShhc2NlbnRBdHRyKSkKKyAgICAgICAgcmV0
dXJuIG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZShhc2NlbnRBdHRyKS50b0Zsb2F0KCk7CisK
KyAgICByZXR1cm4gMC4wZjsKK30KKworZmxvYXQgU1ZHRm9udEZhY2VFbGVtZW50Ojp2ZXJ0aWNh
bEFkdmFuY2VZKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZm9udEVsZW1lbnQpCisgICAgICAgIHJl
dHVybiAwLjBmOwogCiAgICAgLy8gU3BlYzogVGhlIGRlZmF1bHQgdmVydGljYWwgYWR2YW5jZSBh
ZnRlciByZW5kZXJpbmcgYSBnbHlwaCBpbiB2ZXJ0aWNhbCBvcmllbnRhdGlvbi4gSWYgdGhlIGF0
dHJpYnV0ZSBpcwogICAgIC8vIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2
YWx1ZSBlcXVpdmFsZW50IG9mIG9uZSBlbSB3ZXJlIHNwZWNpZmllZCAoc2VlIHVuaXRzLXBlci1l
bSkuICAgICAgICAgICAgICAgICAgICAKLSAgICBpZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0
ZSh2ZXJ0X2Fkdl95QXR0cikpCi0gICAgICAgIHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbEFkdmFuY2VZ
ID0gZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X2Fkdl95QXR0cikudG9GbG9hdCgpOwot
ICAgIGVsc2UKLSAgICAgICAgc3ZnRm9udERhdGEtPnZlcnRpY2FsQWR2YW5jZVkgPSAxLjBmOwor
ICAgIGlmIChtX2ZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVydF9hZHZfeUF0dHIpKQorICAg
ICAgICByZXR1cm4gbV9mb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRfYWR2X3lBdHRyKS50
b0Zsb2F0KCk7CisKKyAgICByZXR1cm4gMS4wZjsKK30KKworaW50IFNWR0ZvbnRGYWNlRWxlbWVu
dDo6YXNjZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZm9udEVsZW1lbnQpCisgICAgICAgIHJl
dHVybiAwLjBmOwogCiAgICAgLy8gU3BlYzogU2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcyB0
aGUgJ2FzY2VudCcgZGVzY3JpcHRvciB3aXRoaW4gYW4gQGZvbnQtZmFjZSBydWxlLiBUaGUgbWF4
aW11bQogICAgIC8vIHVuYWNjZW50ZWQgaGVpZ2h0IG9mIHRoZSBmb250IHdpdGhpbiB0aGUgZm9u
dCBjb29yZGluYXRlIHN5c3RlbS4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLAog
ICAgIC8vIHRoZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUg
ZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bml0cy1wZXItZW0gdmFsdWUgYW5kIHRoZQogICAgIC8v
IHZlcnQtb3JpZ2luLXkgdmFsdWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZvbnQuCiAgICAgaWYg
KGhhc0F0dHJpYnV0ZShhc2NlbnRBdHRyKSkKLSAgICAgICAgZm9udERhdGEtPm1fYXNjZW50ID0g
c3RhdGljX2Nhc3Q8aW50PihjZWlsZihnZXRBdHRyaWJ1dGUoYXNjZW50QXR0cikudG9GbG9hdCgp
KSk7Ci0gICAgZWxzZSBpZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95
QXR0cikpCi0gICAgICAgIGZvbnREYXRhLT5tX2FzY2VudCA9IGZvbnREYXRhLT5tX3VuaXRzUGVy
RW0gLSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUodmVy
dF9vcmlnaW5feUF0dHIpLnRvRmxvYXQoKSkpOwotICAgIGVsc2UgLy8gTWF0Y2ggQmF0aWsncyBk
ZWZhdWx0IHZhbHVlLgotICAgICAgICBmb250RGF0YS0+bV9hc2NlbnQgPSBmb250RGF0YS0+bV91
bml0c1BlckVtICogMC44ZjsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYo
Z2V0QXR0cmlidXRlKGFzY2VudEF0dHIpLnRvRmxvYXQoKSkpOworCisgICAgaWYgKG1fZm9udEVs
ZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikpCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHVuaXRzUGVyRW0oKSkgLSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG1f
Zm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikudG9GbG9hdCgpKSk7
CisKKyAgICAvLyBNYXRjaCBCYXRpa3MgZGVmYXVsdCB2YWx1ZQorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KGNlaWxmKHVuaXRzUGVyRW0oKSAqIDAuOGYpKTsKK30KKworaW50IFNWR0ZvbnRG
YWNlRWxlbWVudDo6ZGVzY2VudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZvbnRFbGVtZW50KQor
ICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgIC8vIFNwZWM6IFNhbWUgc3ludGF4IGFuZCBzZW1h
bnRpY3MgYXMgdGhlICdkZXNjZW50JyBkZXNjcmlwdG9yIHdpdGhpbiBhbiBAZm9udC1mYWNlIHJ1
bGUuIFRoZSBtYXhpbXVtCiAgICAgLy8gdW5hY2NlbnRlZCBkZXB0aCBvZiB0aGUgZm9udCB3aXRo
aW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0uIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNw
ZWNpZmllZCwKICAgICAvLyB0aGUgZWZmZWN0IGlzIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBz
ZXQgdG8gdGhlIHZlcnQtb3JpZ2luLXkgdmFsdWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZvbnQu
CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShkZXNjZW50QXR0cikpIHsKLSAgICAgICAgZm9udERhdGEt
Pm1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoZ2V0QXR0cmlidXRlKGRlc2NlbnRB
dHRyKS50b0Zsb2F0KCkpKTsKLQogICAgICAgICAvLyBTb21lIHRlc3RjYXNlcyB1c2UgYSBuZWdh
dGl2ZSBkZXNjZW50IHZhbHVlLCB3aGVyZSBhIHBvc2l0aXZlIHdhcyBtZWFudCB0byBiZSB1c2Vk
IDooCi0gICAgICAgIGlmIChmb250RGF0YS0+bV9kZXNjZW50IDwgMCkKLSAgICAgICAgICAgIGZv
bnREYXRhLT5tX2Rlc2NlbnQgPSAtZm9udERhdGEtPm1fZGVzY2VudDsKLSAgICB9IGVsc2UgaWYg
KGZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpKQotICAgICAgICBm
b250RGF0YS0+bV9kZXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihmb250RWxlbWVudC0+
Z2V0QXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKS50b0Zsb2F0KCkpKTsKLSAgICBlbHNlIC8v
IE1hdGNoIEJhdGlrJ3MgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgZm9udERhdGEtPm1fZGVzY2Vu
dCA9IGZvbnREYXRhLT5tX3VuaXRzUGVyRW0gKiAwLjJmOworICAgICAgICBpbnQgZGVzY2VudCA9
IHN0YXRpY19jYXN0PGludD4oY2VpbGYoZ2V0QXR0cmlidXRlKGRlc2NlbnRBdHRyKS50b0Zsb2F0
KCkpKTsKKyAgICAgICAgcmV0dXJuIGRlc2NlbnQgPCAwID8gLWRlc2NlbnQgOiBkZXNjZW50Owor
ICAgIH0KIAotICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CisgICAgaWYgKG1fZm9udEVs
ZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikpCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29y
aWdpbl95QXR0cikudG9GbG9hdCgpKSk7CisKKyAgICAvLyBNYXRjaCBCYXRpa3MgZGVmYXVsdCB2
YWx1ZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHVuaXRzUGVyRW0oKSAqIDAu
MmYpKTsKK30KKworU3RyaW5nIFNWR0ZvbnRGYWNlRWxlbWVudDo6Zm9udEZhbWlseSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlWYWx1ZShDU1Nf
UFJPUF9GT05UX0ZBTUlMWSk7Cit9CisKK1NWR0ZvbnRFbGVtZW50KiBTVkdGb250RmFjZUVsZW1l
bnQ6OmFzc29jaWF0ZWRGb250RWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udEVs
ZW1lbnQuZ2V0KCk7CiB9CiAKIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZWJ1aWxkRm9udEZh
Y2UoKQpAQCAtMjUyLDcgKzI5OCw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZWJ1aWxk
Rm9udEZhY2UKICAgICBpZiAocGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+aGFzVGFnTmFt
ZShmb250VGFnKSkgewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gbmV3IENT
U1ZhbHVlTGlzdDsKIAotICAgICAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gc3JjID0g
bmV3IENTU0ZvbnRGYWNlU3JjVmFsdWUoU3RyaW5nSW1wbDo6ZW1wdHkoKSwgdHJ1ZSAvKiBpc0xv
Y2FsICovKTsKKyAgICAgICAgUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+IHNyYyA9IG5ldyBD
U1NGb250RmFjZVNyY1ZhbHVlKGZvbnRGYW1pbHkoKSwgdHJ1ZSAvKiBpc0xvY2FsICovKTsKICAg
ICAgICAgc3JjLT5zZXRTVkdGb250RmFjZUVsZW1lbnQodGhpcyk7CiAgICAgICAgIGxpc3QtPmFw
cGVuZChzcmMpOwogCkBAIC0yNjAsNiArMzA2LDcgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6
OnJlYnVpbGRGb250RmFjZQogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSogc3JjUHJvcGVydHlS
ZWYgPSAmc3JjUHJvcGVydHk7CiAgICAgICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+YWRkUGFyc2Vk
UHJvcGVydGllcygmc3JjUHJvcGVydHlSZWYsIDEpOwogCisgICAgICAgIG1fZm9udEVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KHBhcmVudE5vZGUoKSk7CiAgICAgICAgIGRv
Y3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTMwNCwyMCArMzUxLDYgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OmNoaWxkcmVuQ2hh
bmdlZAogICAgIHJlYnVpbGRGb250RmFjZSgpOwogfQogCi1TVkdGb250RWxlbWVudCogU1ZHRm9u
dEZhY2VFbGVtZW50Ojphc3NvY2lhdGVkRm9udEVsZW1lbnQoKSBjb25zdAotewotICAgIGlmIChO
b2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFn
TmFtZShmb250VGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdGb250RWxl
bWVudCo+KHBhcmVudCk7Ci0gICAgICAgIGVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShkZWZz
VGFnKSkgewotICAgICAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBleHRlcm5hbCBTVkcgZm9udHMh
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAw
OwotfQotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHX0ZPTlRTKQpJbmRleDogc3ZnL1NWR0Zv
bnRGYWNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuaAko
cmV2aXNpb24gMjk2NzYpCisrKyBzdmcvU1ZHRm9udEZhY2VFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDggKzI4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ1NT
Rm9udEZhY2VSdWxlOwogICAgIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotICAg
IGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLSAgICBjbGFzcyBTaW1wbGVGb250RGF0YTsKICAgICBj
bGFzcyBTVkdGb250RWxlbWVudDsKIAogICAgIGNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVudCA6IHB1
YmxpYyBTVkdFbGVtZW50IHsKQEAgLTQzLDE4ICs0MSwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogCiAgICAgICAg
IHVuc2lnbmVkIHVuaXRzUGVyRW0oKSBjb25zdDsKKyAgICAgICAgaW50IHhIZWlnaHQoKSBjb25z
dDsKKyAgICAgICAgZmxvYXQgaG9yaXpvbnRhbE9yaWdpblgoKSBjb25zdDsKKyAgICAgICAgZmxv
YXQgaG9yaXpvbnRhbE9yaWdpblkoKSBjb25zdDsKKyAgICAgICAgZmxvYXQgaG9yaXpvbnRhbEFk
dmFuY2VYKCkgY29uc3Q7CisgICAgICAgIGZsb2F0IHZlcnRpY2FsT3JpZ2luWCgpIGNvbnN0Owor
ICAgICAgICBmbG9hdCB2ZXJ0aWNhbE9yaWdpblkoKSBjb25zdDsKKyAgICAgICAgZmxvYXQgdmVy
dGljYWxBZHZhbmNlWSgpIGNvbnN0OworICAgICAgICBpbnQgYXNjZW50KCkgY29uc3Q7CisgICAg
ICAgIGludCBkZXNjZW50KCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBmb250RmFtaWx5KCkgY29u
c3Q7CiAKLSAgICAgICAgdm9pZCByZWJ1aWxkRm9udEZhY2UoKTsKLSAgICAgICAgU2ltcGxlRm9u
dERhdGEqIGNyZWF0ZUZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotCi0g
ICAgICAgIC8vIElmIG91ciBwYXJlbnQgZWxlbWVudCBpcyA8Zm9udD4sIGl0IHdpbGwgYmUgcmV0
dXJuZWQuICh0aGlzIGlzIHRoZSBjYXNlIGZvciBhIFNWRyBGb250IGRlc2NyaWJlZCBpbiB0aGUg
c2FtZSBkb2N1bWVudCkKLSAgICAgICAgLy8gT3RoZXJ3aGlzZSBpdCB3aWxsIHJldHVybiB0aGUg
PGZvbnQ+IGVsZW1lbnQgdGhhdCBpcyByZWZlcmVuY2VkIGJ5IHRoZSBmaXJzdCB2YWxpZCA8Zm9u
dC1mYWNlLXNyYz4gZWxlbWVudC4KICAgICAgICAgU1ZHRm9udEVsZW1lbnQqIGFzc29jaWF0ZWRG
b250RWxlbWVudCgpIGNvbnN0OworICAgICAgICB2b2lkIHJlYnVpbGRGb250RmFjZSgpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4gbV9mb250RmFjZVJ1
bGU7CiAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZURl
Y2xhcmF0aW9uOworCisgICAgICAgIFJlZlB0cjxTVkdGb250RWxlbWVudD4gbV9mb250RWxlbWVu
dDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBzdmcvU1ZHR2x5cGhF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkocmV2aXNp
b24gMjk2NzYpCisrKyBzdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJT
VkdGb250RmFjZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGb250RGF0YS5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
U2ltcGxlRm9udERhdGEuaCIKQEAgLTkzLDE5ICs5NCwxOSBAQCBzdGF0aWMgaW5saW5lIFBhdGgg
cGFyc2VQYXRoRGF0YShjb25zdCBBCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTVkdH
bHlwaEVsZW1lbnQ6OmluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVudGlm
aWVyJiBpZGVudGlmaWVyLCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEpCit2b2lkIFNWR0dseXBo
RWxlbWVudDo6aW5oZXJpdFVuc3BlY2lmaWVkQXR0cmlidXRlcyhTVkdHbHlwaElkZW50aWZpZXIm
IGlkZW50aWZpZXIsIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSkKIHsKICAgICBpZiAo
aWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVggPT0gU1ZHR2x5cGhJZGVudGlmaWVyOjppbmhl
cml0ZWRWYWx1ZSgpKQotICAgICAgICBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCA9IHN2
Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2YW5jZVg7CisgICAgICAgIGlkZW50aWZpZXIuaG9yaXpv
bnRhbEFkdmFuY2VYID0gc3ZnRm9udERhdGEtPmhvcml6b250YWxBZHZhbmNlWCgpOwogCiAgICAg
aWYgKGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YID09IFNWR0dseXBoSWRlbnRpZmllcjo6aW5o
ZXJpdGVkVmFsdWUoKSkKLSAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblggPSBzdmdG
b250RGF0YS0+dmVydGljYWxPcmlnaW5YOworICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3Jp
Z2luWCA9IHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbE9yaWdpblgoKTsKIAogICAgIGlmIChpZGVudGlm
aWVyLnZlcnRpY2FsT3JpZ2luWSA9PSBTVkdHbHlwaElkZW50aWZpZXI6OmluaGVyaXRlZFZhbHVl
KCkpCi0gICAgICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5ZID0gc3ZnRm9udERhdGEtPnZl
cnRpY2FsT3JpZ2luWTsKKyAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkgPSBzdmdG
b250RGF0YS0+dmVydGljYWxPcmlnaW5ZKCk7CiAKICAgICBpZiAoaWRlbnRpZmllci52ZXJ0aWNh
bEFkdmFuY2VZID09IFNWR0dseXBoSWRlbnRpZmllcjo6aW5oZXJpdGVkVmFsdWUoKSkKLSAgICAg
ICAgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID0gc3ZnRm9udERhdGEtPnZlcnRpY2FsQWR2
YW5jZVk7CisgICAgICAgIGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSA9IHN2Z0ZvbnREYXRh
LT52ZXJ0aWNhbEFkdmFuY2VZKCk7CiB9CiAKIFNWR0dseXBoSWRlbnRpZmllciBTVkdHbHlwaEVs
ZW1lbnQ6OmJ1aWxkR2x5cGhJZGVudGlmaWVyKCkgY29uc3QKSW5kZXg6IHN2Zy9TVkdHbHlwaEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHR2x5cGhFbGVtZW50LmgJKHJldmlzaW9uIDI5
Njc2KQorKysgc3ZnL1NWR0dseXBoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyAr
MTA2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVy
ZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgU1ZH
R2x5cGhJZGVudGlmaWVyIGJ1aWxkR2x5cGhJZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVudGlmaWVy
JiwgU1ZHRm9udERhdGEqKTsKKyAgICAgICAgc3RhdGljIHZvaWQgaW5oZXJpdFVuc3BlY2lmaWVk
QXR0cmlidXRlcyhTVkdHbHlwaElkZW50aWZpZXImLCBjb25zdCBTVkdGb250RGF0YSopOwogICAg
IH07CiAKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18571</attachid>
            <date>2008-01-20 16:57:20 -0800</date>
            <delta_ts>2008-01-20 18:53:37 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>SVGFontsPatch.diff</filename>
            <type>text/plain</type>
            <size>83143</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTY3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTEwIEBACisyMDA4LTAxLTIwICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4ZXM6IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODgw
IChTVkdDU1NGb250RmFjZSBzaG91bGQgZGllLCBpbnN0ZWFkIGludGVncmF0ZSB3aXRoaW4gdGhl
IEZvbnRDYWNoZS4pCisgICAgICAgIEZpeGVzOiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjc4NCAoSW4tZG9jdW1lbnQgZm9udHMgd29yayBvbmx5IGFzIHRoZSBmaXJz
dCBjaGlsZCB0byBmb250LWZhY2Utc3JjKQorCisgICAgICAgIFByb3BlciBpbnRlZ3JhdGlvbiBv
ZiBTVkcgRm9udHMgd2l0aGluIHRoZSBleGlzdGluZyBjdXN0b20gZm9udCBjb25jZXB0LCByZW1v
dmluZyB0aGUgbmVlZCBmb3IgYSBjdXN0b20gU1ZHQ1NTRm9udEZhY2UuCisgICAgICAgIEludGVn
cmF0ZSB3aXRoaW4gdGhlIENTU0ZvbnRGYWNlU291cmNlIGxvZ2ljIGZvciBjYWNoaW5nIHN1cHBv
cnQsIGFzIHdlbGwgYXMgdGhlIGZyYW1ld29yayBmb3IgZXh0ZXJuYWwgU1ZHIEZvbnRzLgorCisg
ICAgICAgIFByb3BlciBoYW5kbGluZyBvZiBtaXNzaW5nIGdseXBocywgdXNpbmcgPG1pc3Npbmct
Z2x5cGg+IGVsZW1lbnQuIElmIHRoYXQgaXMgbm90IHNwZWNpZmllZCBpbiBhIGZvbnQsIGZhbGxi
YWNrIHRvIG5vbi1TVkcgZm9udCByZW5kZXJpbmcuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6c3ZnRm9u
dEZhY2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpzZXRT
VkdGb250RmFjZUVsZW1lbnQpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmg6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNyY1ZhbHVlOjptX2lzTG9jYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1ZTo6fkNTU0ZvbnRGYWNlU3JjVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1ZTo6c3ZnRm9udEZhY2VFbGVt
ZW50KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKiBjc3MvU1ZH
Q1NTRm9udEZhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9TVkdDU1NGb250RmFjZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6YXNjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRlc2Nl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6bGluZVNwYWNpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6eEhlaWdodCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERh
dGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6aXNTVkdGb250KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjph
c2NlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmRlc2NlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmxpbmVTcGFjaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjpsaW5lR2FwKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjp4SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpp
c1NWR0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6
On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZH
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTVkdGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnJlbGF0aXZlQkJveCk6CisgICAg
ICAgICogc3ZnL1NWR0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEVtVW5pdFRv
UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6c3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZv
bnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5XYWxrZXI6OlNWR1RleHRSdW5X
YWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFJ1bldhbGtlcjo6d2Fsayk6CisgICAg
ICAgIChXZWJDb3JlOjpmbG9hdFdpZHRoVXNpbmdTVkdGb250Q2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6ZmxvYXRXaWR0aE1pc3NpbmdHbHlwaENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OmZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCk6CisgICAgICAgIChXZWJDb3Jl
OjpkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdU
ZXh0TWlzc2luZ0dseXBoQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1Rl
eHRVc2luZ1NWR0ZvbnQpOgorICAgICAgICAqIHN2Zy9TVkdGb250RGF0YS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OlNWR0ZvbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZvbnREYXRhOjp+U1ZHRm9udERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdGb250
RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpmb250RmFjZUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6Omhvcml6b250YWxPcmlnaW5Y
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpob3Jpem9udGFsT3JpZ2luWSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGb250RGF0YTo6aG9yaXpvbnRhbEFkdmFuY2VYKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjp2ZXJ0aWNhbE9yaWdpblgpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRm9udERhdGE6OnZlcnRpY2FsT3JpZ2luWSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGb250RGF0YTo6dmVydGljYWxBZHZhbmNlWSk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNl
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnhIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50Ojpob3Jpem9udGFsT3Jp
Z2luWCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6Omhvcml6b250YWxP
cmlnaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRh
bEFkdmFuY2VYKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGlj
YWxPcmlnaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGlj
YWxPcmlnaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGlj
YWxBZHZhbmNlWSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OmFzY2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OmRlc2NlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50Ojpmb250RmFtaWx5KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6YXNzb2NpYXRlZEZvbnRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRGYWNlKToKKyAg
ICAgICAgKiBzdmcvU1ZHRm9udEZhY2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0dseXBo
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1lbnQ6OmluaGVyaXRV
bnNwZWNpZmllZEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR2x5cGhFbGVtZW50
OjpidWlsZEdlbmVyaWNHbHlwaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR2x5
cGhFbGVtZW50OjpidWlsZEdseXBoSWRlbnRpZmllcik6CisgICAgICAgICogc3ZnL1NWR0dseXBo
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdNaXNzaW5nR2x5cGhFbGVtZW50LmNwcDoKKwog
MjAwOC0wMS0yMCAgQ29sbGluIEphY2tzb24gIDx3ZWJraXRAY29sbGluamFja3Nvbi5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZp
bGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMjk2
NzYpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMzLDcg
KzE2MzMsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvY3NzL1NWR0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgXAogCVdlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAg
XAogCVdlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIFwKLQlXZWJDb3JlL2Nzcy9T
VkdDU1NGb250RmFjZS5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN0eWxlLmNw
cCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBcCiAJV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgXApAQCAtMTY5NCw2ICsxNjkzLDcg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMuY3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3Bw
IFwKIAlXZWJDb3JlL3N2Zy9TVkdGb250LmNwcCBcCisJV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEu
Y3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAgXAogCVdlYkNvcmUvc3ZnL1NW
R0ZvbnRGYWNlRWxlbWVudC5jcHAgXAogCVdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRm9ybWF0RWxl
bWVudC5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyOTY3NikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTEzNjYsNyArMTM2Niw2IEBAIGNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9TVkc9MSkgewogICAgICAgICBjc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcCBcCiAgICAgICAgIGNzcy9TVkdDU1NQYXJzZXIuY3BwIFwKICAgICAgICAgY3NzL1NWR0NT
U1N0eWxlU2VsZWN0b3IuY3BwIFwKLSAgICAgICAgY3NzL1NWR0NTU0ZvbnRGYWNlLmNwcCBcCiAg
ICAgICAgIHJlbmRlcmluZy9TVkdSZW5kZXJTdHlsZS5jcHAgXAogICAgICAgICByZW5kZXJpbmcv
U1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTU1ZHTGF6eUV2
ZW50TGlzdGVuZXIuY3BwIFwKQEAgLTE0MjcsNiArMTQyNiw3IEBAIGNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9TVkc9MSkgewogICAgICAgICBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmNwcCBcCiAgICAgICAgIHN2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwIFwKICAgICAg
ICAgc3ZnL1NWR0ZvbnQuY3BwIFwKKyAgICAgICAgc3ZnL1NWR0ZvbnREYXRhLmNwcCBcCiAgICAg
ICAgIHN2Zy9TVkdGb250RWxlbWVudC5jcHAgXAogICAgICAgICBzdmcvU1ZHRm9udEZhY2VFbGVt
ZW50LmNwcCBcCiAgICAgICAgIHN2Zy9TVkdGb250RmFjZUZvcm1hdEVsZW1lbnQuY3BwIFwKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMjk2NzYpCisr
KyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00ODk0LDEwICs0ODk0LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cY3NzXFNWR0NTU0ZvbnRGYWNlLmNwcCINCi0JCQkJPg0KLQkJCTwv
RmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTVkdDU1NQYXJzZXIu
Y3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTg0MDUsNiArODQwMSwxNCBAQAogCQkJCT4N
CiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHRm9u
dERhdGEuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cc3ZnXFNWR0ZvbnREYXRhLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHRm9udEVsZW1lbnQuY3BwIg0KIAkJCQk+
DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyOTY3NikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODI5LDYgKzI4MjksOCBAQAogCQlCMjIz
NjIyRjBDM0FGMDcxMDAwOENBOUIgLyogRE9NU1ZHVGV4dFBhdGhFbGVtZW50SW50ZXJuYWwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjM2MjJDMEMz
QUYwNzEwMDA4Q0E5QiAvKiBET01TVkdUZXh0UGF0aEVsZW1lbnRJbnRlcm5hbC5oICovOyB9Owog
CQlCMjM1NDBGMjBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMzU0MEYwMEQwMDc4MkUw
MDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwICovOyB9OwogCQlCMjM1NDBGMzBEMDA3ODJF
MDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1
bmNhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQjIzN0M4QTcwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMzdDOEE1MEQzNDREMTEwMDEz
RjcwNyAvKiBTVkdGb250RGF0YS5jcHAgKi87IH07CisJCUIyMzdDOEE4MEQzNDREMTEwMDEzRjcw
NyAvKiBTVkdGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjIzN0M4QTYwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmggKi87IH07
CiAJCUIyNDA1NTY1MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI0
MDU1NjMwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUludGVybmFsLmgg
Ki87IH07CiAJCUIyNDA1NTY2MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFu
Y2VMaXN0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNDA1NTY0MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VM
aXN0SW50ZXJuYWwuaCAqLzsgfTsKIAkJQjI1NTk5MkMwRDAwRDhCQTAwQkI4MjVDIC8qIENnU3Vw
cG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MjU1OTg5MDBEMDBEOEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmNwcCAqLzsgfTsKQEAgLTMxNTUs
OCArMzE1Nyw2IEBACiAJCUIyQ0I5MjY0MEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50
SW5zdGFuY2VMaXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJDQjkyNjAwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxp
c3QubW0gKi87IH07CiAJCUIyQ0NFQzQ3MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMkNDRUM0NTBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250
YWluZXIuY3BwICovOyB9OwogCQlCMkNDRUM0ODBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQ0NFQzQ2MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lci5oICovOyB9OwotCQlCMkQxOUE0ODBDRUY5REMxMDAwRTAzM0IgLyogU1ZHQ1NTRm9u
dEZhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJEMTlBNDYwQ0VGOURDMTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmNwcCAqLzsgfTsKLQkJ
QjJEMTlBNDkwQ0VGOURDMTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQxOUE0NzBDRUY5REMxMDAwRTAz
M0IgLyogU1ZHQ1NTRm9udEZhY2UuaCAqLzsgfTsKIAkJQjJEM0ZDOEEwQzIyMTJDQjAwQ0YzNjE4
IC8qIEpTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQzRkM4OTBDMjIxMkNCMDBDRjM2MTggLyogSlNTVkdU
cmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdC
IC8qIEZsb2F0UG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCAq
LzsgfTsKIAkJQjJFMjdDQTAwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFMjdDOUUwQjBGMkIw
OTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oICovOyB9OwpAQCAtNjg5Myw2ICs2ODkzLDggQEAK
IAkJQjIyMzYyMkMwQzNBRjA3MTAwMDhDQTlCIC8qIERPTVNWR1RleHRQYXRoRWxlbWVudEludGVy
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdUZXh0UGF0aEVs
ZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjM1NDBGMDBE
MDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdUcnVuY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdUcnVuY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjIzN0M4QTUwRDM0NEQxMTAwMTNGNzA3IC8q
IFNWR0ZvbnREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdGb250RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyMzdDOEE2MEQz
NDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHRm9udERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI0
MDU1NjMwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUludGVybmFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VJ
bnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjQwNTU2NDBCNUJFNjQw
MDAyQTI4QzAgLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdEludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0SW50ZXJu
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTAwRDAwRDhCODAwQkI4
MjVDIC8qIENnU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2dTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyMjMsOCAr
NzIyNSw2IEBACiAJCUIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5z
dGFuY2VMaXN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERP
TVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQ0NFQzQ1MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNDRUM0NjBD
NkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyRDE5QTQ2MENFRjlEQzEwMDBFMDMzQiAvKiBT
VkdDU1NGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHQ1NTRm9udEZhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkQxOUE0
NzBDRUY5REMxMDAwRTAzM0IgLyogU1ZHQ1NTRm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR0NTU0ZvbnRGYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyRDNGQzg5MEMyMjEyQ0IwMENGMzYxOCAvKiBKU1NWR1RyYW5zZm9ybUxpc3RDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHVHJhbnNm
b3JtTGlzdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTI3QzlE
MEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTA3NDIsNiArMTA3NDIsOCBAQAogCQkJCUIyMjI3ODdDMEQw
MEJGMjAwMDcxQjc4MiAvKiBTVkdGaXRUb1ZpZXdCb3guaCAqLywKIAkJCQlCMjIyNzg3RDBEMDBC
RjIwMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94LmlkbCAqLywKIAkJCQlCMjYyQjgwMzBEMUYz
MkQwMDAxNThGMDkgLyogU1ZHRm9udC5jcHAgKi8sCisJCQkJQjIzN0M4QTUwRDM0NEQxMTAwMTNG
NzA3IC8qIFNWR0ZvbnREYXRhLmNwcCAqLywKKwkJCQlCMjM3QzhBNjBEMzQ0RDExMDAxM0Y3MDcg
LyogU1ZHRm9udERhdGEuaCAqLywKIAkJCQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZH
Rm9udEVsZW1lbnQuY3BwICovLAogCQkJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdG
b250RWxlbWVudC5oICovLAogCQkJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250
RWxlbWVudC5pZGwgKi8sCkBAIC0xMTk1Miw4ICsxMTk1NCw2IEBACiAJCQkJOTNDQTRDQTIwOURG
OTNGQTAwREY4Njc3IC8qIHN2Zy5jc3MgKi8sCiAJCQkJQjIyMjdCMDAwRDAwQkZGMTAwNzFCNzgy
IC8qIFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8sCiAJCQkJQjIyMjdCMDEw
RDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNlci5jcHAgKi8sCi0JCQkJQjJEMTlBNDYwQ0VG
OURDMTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmNwcCAqLywKLQkJCQlCMkQxOUE0NzBDRUY5
REMxMDAwRTAzM0IgLyogU1ZHQ1NTRm9udEZhY2UuaCAqLywKIAkJCQlCMjIyN0IwMjBEMDBCRkYx
MDA3MUI3ODIgLyogU1ZHQ1NTUHJvcGVydHlOYW1lcy5pbiAqLywKIAkJCQlCMjIyN0IwMzBEMDBC
RkYxMDA3MUI3ODIgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgKi8sCiAJCQkJQjIyMjdCMDQw
RDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1ZhbHVlS2V5d29yZHMuaW4gKi8sCkBAIC0xNDE3MCw3
ICsxNDE3MCw2IEBACiAJCQkJQjI3QjI4M0QwQ0VGMEMzNjAwRDM5RDU0IC8qIERPTVNWR0dseXBo
RWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjdCMjgzRTBDRUYwQzM2MDBE
MzlENTQgLyogRE9NU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjI3QjI4NDAwQ0VGMEMzNjAwRDM5RDU0IC8qIERPTVNWR01pc3NpbmdHbHlwaEVsZW1lbnRJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjJEMTlBNDkwQ0VGOURDMTAwMEUwMzNCIC8qIFNW
R0NTU0ZvbnRGYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EzNzkxNTBEMTYzRTU1MDBCNzkz
RDYgLyogSlNMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMzc5M0YwRDE2NDdFMDAw
Qjc5M0Q2IC8qIEpTTG9jYXRpb24ubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTc5M0U4NDBE
MENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE0MTk2
LDYgKzE0MTk1LDcgQEAKIAkJCQkzNzFGNTFBMTBEMjYyRkEwMDBFQ0UwRDUgLyogQ1NTU2VnbWVu
dGVkRm9udEZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MUY1M0U5MEQyNzA0RjkwMEVDRTBE
NSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUJGRTdFMTMw
RDMyRkFGNjAwNjZGNEQyIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLywK
KwkJCQlCMjM3QzhBODBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU0RUVGRkM5MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzOUIzRTRFMEQzQzFFODQwMEI0QTkyQiAvKiBTdHJpbmdC
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAgLTE0MjM2LDcgKzE0MjM2LDYgQEAKIAkJ
MDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNh
ID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAy
QjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJX
ZWJDb3JlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQlo
YXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmds
aXNoLApAQCAtMTU3NzAsNyArMTU3NjksNiBAQAogCQkJCUIyN0IyODM5MENFRjBDMzYwMEQzOUQ1
NCAvKiBET01TVkdGb250RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyN0IyODNDMENF
RjBDMzYwMEQzOUQ1NCAvKiBET01TVkdHbHlwaEVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlCMjdCMjgzRjBDRUYwQzM2MDBEMzlENTQgLyogRE9NU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5t
bSBpbiBTb3VyY2VzICovLAotCQkJCUIyRDE5QTQ4MENFRjlEQzEwMDBFMDMzQiAvKiBTVkdDU1NG
b250RmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjYyQjgwNDBEMUYzMkQwMDAxNThGMDkg
LyogU1ZHRm9udC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdGQTYyMDBEMUYwQ0JEMDBEQjIy
QTkgLyogRHluYW1pY05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0ZBNjJFMEQx
RjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE1
Nzg3LDYgKzE1Nzg1LDcgQEAKIAkJCQkzNzFGNTFBMjBEMjYyRkEwMDBFQ0UwRDUgLyogQ1NTU2Vn
bWVudGVkRm9udEZhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcxRjUzRUEwRDI3MDRGOTAw
RUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFC
RkU3RTEyMEQzMkZBRjYwMDY2RjREMiAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlCMjM3QzhBNzBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTRFRUZGQzgwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9D
b25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291
cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJ
KHJldmlzaW9uIDI5Njc2KQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxNCBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAj
aW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgorCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJTVkdGb250RGF0YS5oIgorI2lu
Y2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIgCisjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC04OCwyMSArOTMsMzkgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNl
U291cmNlOjpnZXRGbwogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIGlmICghbV9mb250KQotICAgICAgICAvLyBXZSdyZSBsb2NhbC4gIEp1c3QgcmV0dXJuIGEg
U2ltcGxlRm9udERhdGEgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgotICAgICAgICByZXR1cm4gRm9u
dENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9y
bURhdGEoZm9udERlc2NyaXB0aW9uLCBtX3N0cmluZykpOwotICAgIAorI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCisgICAgaWYgKCFtX2ZvbnQgJiYgIW1fZm9udEZhY2VFbGVtZW50KSB7CisjZWxzZQor
ICAgIGlmICghbV9mb250KSB7CisjZW5kaWYKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogZGF0
YSA9IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24s
IG1fc3RyaW5nKTsKKyAgICAgICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gRm9udENhY2hl
OjpnZXRDYWNoZWRGb250RGF0YShkYXRhKTsKKworICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVz
dCByZXR1cm4gYSBTaW1wbGVGb250RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUuCisgICAgICAg
IHJldHVybiBmb250RGF0YTsKKyAgICB9CisKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIG1hcHBp
bmcgaW4gb3VyIEZvbnREYXRhIGNhY2hlLgogICAgIFNpbXBsZUZvbnREYXRhKiBjYWNoZWREYXRh
ID0gbV9mb250RGF0YVRhYmxlLmdldChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUo
KSk7CiAgICAgaWYgKGNhY2hlZERhdGEpCiAgICAgICAgIHJldHVybiBjYWNoZWREYXRhOwotICAg
IAorCiAgICAgLy8gSWYgd2UgYXJlIHN0aWxsIGxvYWRpbmcsIHRoZW4gd2UgbGV0IHRoZSBzeXN0
ZW0gcGljayBhIGZvbnQuCiAgICAgaWYgKGlzTG9hZGVkKCkpIHsKLSAgICAgICAgLy8gQ3JlYXRl
IG5ldyBGb250UGxhdGZvcm1EYXRhIGZyb20gb3VyIENHRm9udFJlZiwgcG9pbnQgc2l6ZSBhbmQg
QVRTRm9udFJlZi4KLSAgICAgICAgaWYgKCFtX2ZvbnQtPmVuc3VyZUN1c3RvbUZvbnREYXRhKCkp
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FjaGVkRGF0YSA9IG5ldyBTaW1wbGVG
b250RGF0YShtX2ZvbnQtPnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpLCB0
cnVlLCBmYWxzZSk7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgaWYgKG1fZm9udEZh
Y2VFbGVtZW50KQorICAgICAgICAgICAgY2FjaGVkRGF0YSA9IG5ldyBTVkdGb250RGF0YShtX2Zv
bnRGYWNlRWxlbWVudC5nZXQoKSwgY3JlYXRlU1ZHRm9udEN1c3RvbVBsYXRmb3JtRGF0YShmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljKSk7CisjZW5kaWYKKworICAgICAgICBpZiAoIWNhY2hlZERhdGEpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2ZvbnQpOworCisgICAgICAgICAgICAvLyBDcmVhdGUgbmV3IEZvbnRQbGF0
Zm9ybURhdGEgZnJvbSBvdXIgQ0dGb250UmVmLCBwb2ludCBzaXplIGFuZCBBVFNGb250UmVmLgor
ICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmVuc3VyZUN1c3RvbUZvbnREYXRhKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGNhY2hlZERhdGEgPSBuZXcgU2ltcGxl
Rm9udERhdGEobV9mb250LT5wbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSwg
dHJ1ZSwgZmFsc2UpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gS2ljayBv
ZmYgdGhlIGxvYWQgbm93LgogICAgICAgICBtX2ZvbnQtPmJlZ2luTG9hZElmTmVlZGVkKGZvbnRT
ZWxlY3Rvci0+ZG9jTG9hZGVyKCkpOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCShyZXZp
c2lvbiAyOTY3NikKKysrIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVt
ZW50LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNTYsMTEgKzU3LDIwIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHBydW5lVGFibGUoKTsK
IAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBzdmdGb250
RmFjZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlRWxlbWVudC5nZXQoKTsgfQor
ICAgIHZvaWQgc2V0U1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCogZWxlbWVu
dCkgeyBtX2ZvbnRGYWNlRWxlbWVudCA9IGVsZW1lbnQ7IH0KKyNlbmRpZgorCiBwcml2YXRlOgog
ICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0LWluIGZv
bnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkRm9udCogbV9mb250OyAvLyBGb3IgcmVtb3Rl
IGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hlZCByZXNvdXJjZS4KICAgICBDU1NGb250RmFj
ZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQgZmFjZS4KICAgICBIYXNoTWFwPGludCwgU2lt
cGxlRm9udERhdGEqPiBtX2ZvbnREYXRhVGFibGU7IC8vIEEgY2FjaGUgb2YgRm9udERhdGFzIGZv
ciB2YXJpb3VzIHBpeGVsIHNpemVzLgorCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBSZWZQ
dHI8U1ZHRm9udEZhY2VFbGVtZW50PiBtX2ZvbnRGYWNlRWxlbWVudDsKKyNlbmRpZgogfTsKIAog
fQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAkocmV2aXNpb24gMjk2NzYpCisrKyBX
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIw
ICsyOCwxNiBAQAogCiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVudDsKLQogY2xhc3MgQ1NTRm9udEZhY2VT
cmNWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZSB7CiBwdWJsaWM6CiAgICAgQ1NTRm9udEZhY2VTcmNW
YWx1ZShjb25zdCBTdHJpbmcmIHJlc291cmNlLCBib29sIGxvY2FsKQogICAgIDptX3Jlc291cmNl
KHJlc291cmNlKSwgbV9pc0xvY2FsKGxvY2FsKQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAg
LCBtX2ZvbnRGYWNlRWxlbWVudCgwKQotI2VuZGlmICAgIAogICAgIHt9Ci0gICAgdmlydHVhbCB+
Q1NTRm9udEZhY2VTcmNWYWx1ZSgpIHt9OworICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlU3JjVmFs
dWUoKSB7fQogCiAgICAgY29uc3QgU3RyaW5nJiByZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVzb3VyY2U7IH0KICAgICBjb25zdCBTdHJpbmcmIGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9ybWF0OyB9CkBAIC01Miw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3VwcG9ydGVk
Rm9ybWF0KCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIFNWR0ZvbnRGYWNl
RWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9mb250RmFjZUVs
ZW1lbnQ7IH0KKyAgICBTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZm9udEZhY2VFbGVtZW50LmdldCgpOyB9CiAgICAgdm9pZCBzZXRTVkdG
b250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50KiBlbGVtZW50KSB7IG1fZm9udEZhY2VF
bGVtZW50ID0gZWxlbWVudDsgfQogI2VuZGlmCiAKQEAgLTYyLDggKzU4LDkgQEAgcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV9yZXNvdXJjZTsKICAgICBTdHJpbmcgbV9mb3JtYXQ7CiAgICAgYm9vbCBt
X2lzTG9jYWw7CisKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIFNWR0ZvbnRGYWNlRWxlbWVu
dCogbV9mb250RmFjZUVsZW1lbnQ7CisgICAgUmVmUHRyPFNWR0ZvbnRGYWNlRWxlbWVudD4gbV9m
b250RmFjZUVsZW1lbnQ7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ZvbnRT
ZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNw
cAkocmV2aXNpb24gMjk2NzYpCisrKyBXZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OSwxMCArNDksMTAgQEAKICNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisj
aW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAKKy8vIFBvcnRzIHdoaWNoIGRvbid0IHVz
ZSBTVkcsIGRvbid0IGdlbmVyYXRlIFNWR05hbWVzLmgKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1
ZGUgIlNWR0NTU0ZvbnRGYWNlLmgiCi0jaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNlbmRpZgogCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBD
U1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjbwogICAgIGJvb2wgZm91bmRMb2NhbCA9
IGZhbHNlOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBTVkdGb250RmFjZUVsZW1lbnQq
IHN2Z0ZvbnRGYWNlRWxlbWVudCA9IDA7CisgICAgYm9vbCBmb3VuZExvY2FsU1ZHRm9udCA9IGZh
bHNlOwogI2VuZGlmCiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc3JjTGVuZ3RoOyBpKyspIHsKQEAg
LTE1OSwzMyArMTU5LDI2IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUo
Y28KICAgICAgICAgICAgIFN0cmluZyBmYW1pbHkgPSBpdGVtLT5yZXNvdXJjZSgpOwogCiAjaWYg
RU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgICAgIC8vIFNWRyBGb250cyBzdXBwb3J0IChpbnRl
cm5hbCBmb250cywgbGl2aW5nIHdpdGhpbiB0aGUgZG9jdW1lbnQpCi0gICAgICAgICAgICBzdmdG
b250RmFjZUVsZW1lbnQgPSBpdGVtLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKLSAgICAgICAgICAg
IGlmIChzdmdGb250RmFjZUVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYg
Zm9udEZhY2UgaXMgbm90IDAsIGl0IG1lYW5zIHRoYXQgaXQgaXMgYSBDU1NGb250RmFjZSByYXRo
ZXIgdGhhbiBhIFNWR0NTU0ZvbnRGYWNlCi0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZXJlZm9y
ZSBkb2VzIG5vdCBzdXBwb3J0IFNWRyBmb250LWZhY2UgZWxlbWVudHMsIHNvIHdlIGp1c3Qgc2tp
cCB0aGlzIGl0ZW0uCi0gICAgICAgICAgICAgICAgaWYgKGZvbnRGYWNlKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBmb3VuZExvY2FsID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvdW5kTG9jYWxTVkdGb250ID0gaXRlbS0+c3ZnRm9u
dEZhY2VFbGVtZW50KCkgIT0gMDsKICNlbmRpZgogCiAgICAgICAgICAgICAvLyBUZXN0IHRoZSB2
YWxpZGl0eSBvZiB0aGUgbG9jYWwgZm9udCBub3cuICBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUg
dGhpcyBmb250IGlmIGl0IGRvZXMgbm90IGV4aXN0CiAgICAgICAgICAgICAvLyBvbiB0aGUgc3lz
dGVtLiAgSWYgaXQgKmRvZXMqIGV4aXN0IG9uIHRoZSBzeXN0ZW0sIHRoZW4gd2UgZG9uJ3QgbmVl
ZCB0byBsb29rIGFueSBmdXJ0aGVyLgotICAgICAgICAgICAgaWYgKEZvbnRDYWNoZTo6Zm9udEV4
aXN0cyhmb250RGVzY3JpcHRpb24sIGZhbWlseSkgJiYgIWZvdW5kTG9jYWwpIHsKKyAgICAgICAg
ICAgIGlmIChGb250Q2FjaGU6OmZvbnRFeGlzdHMoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpCisj
aWYgRU5BQkxFKFNWR19GT05UUykgICAgCisgICAgICAgICAgICAgICAgfHwgZm91bmRMb2NhbFNW
R0ZvbnQKKyNlbmRpZgorICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgc291cmNl
ID0gbmV3IENTU0ZvbnRGYWNlU291cmNlKGZhbWlseSk7CisjaWYgRU5BQkxFKFNWR19GT05UUykK
KyAgICAgICAgICAgICAgICBzb3VyY2UtPnNldFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLT5zdmdG
b250RmFjZUVsZW1lbnQoKSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBmb3VuZExvY2FsID0g
dHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICghZm9udEZhY2Up
IHsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICAgICAgaWYgKHN2Z0ZvbnRGYWNlRWxl
bWVudCkKLSAgICAgICAgICAgICAgICBmb250RmFjZSA9IG5ldyBTVkdDU1NGb250RmFjZShzdmdG
b250RmFjZUVsZW1lbnQpOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAg
ICAgZm9udEZhY2UgPSBuZXcgQ1NTRm9udEZhY2UoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
IWZvbnRGYWNlKQorICAgICAgICAgICAgZm9udEZhY2UgPSBuZXcgQ1NTRm9udEZhY2UoKTsKIAog
ICAgICAgICBpZiAoc291cmNlKQogICAgICAgICAgICAgZm9udEZhY2UtPmFkZFNvdXJjZShzb3Vy
Y2UpOwpAQCAtMjQwLDcgKzIzMyw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFj
ZVJ1bGUoY28KICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICAvLyBTVkcgYWxsb3dzIHNl
dmVyYWwgPGZvbnQ+IGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgZm9udC1mYW1pbHksIGRpZmZlcmlu
ZyBvbmx5CiAgICAgICAgIC8vIGluIGllLiBmb250LXZhcmlhbnQuIEJlIHN1cmUgdG8gcGljayB1
cCB0aGUgcmlnaHQgb25lIC0gaW4gZ2V0Rm9udERhdGEgYmVsb3cuCi0gICAgICAgIGlmIChzdmdG
b250RmFjZUVsZW1lbnQgJiYgZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpKQorICAgICAgICBp
ZiAoZm91bmRMb2NhbFNWR0ZvbnQgJiYgZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpKQogICAg
ICAgICAgICAgZmFtaWx5TmFtZSArPSAiLXdlYmtpdC1zdmctc21hbGwtY2FwcyI7CiAjZW5kaWYK
ICAgICAgICAgU3RyaW5nIGhhc2ggPSBoYXNoRm9yRm9udChmYW1pbHlOYW1lLmxvd2VyKCksIGZv
bnREZXNjcmlwdGlvbi5ib2xkKCksIGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSk7CkluZGV4OiBX
ZWJDb3JlL2Nzcy9TVkdDU1NGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
U1ZHQ1NTRm9udEZhY2UuY3BwCShyZXZpc2lvbiAyOTY3NikKKysrIFdlYkNvcmUvY3NzL1NWR0NT
U0ZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotI2lu
Y2x1ZGUgIlNWR0NTU0ZvbnRGYWNlLmgiCi0KLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIK
LSNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNWR0NTU0ZvbnRGYWNlOjpTVkdDU1NGb250
RmFjZShTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlKQotICAgIDogQ1NTRm9udEZhY2UoKQot
ICAgICwgbV9mb250RmFjZUVsZW1lbnQoZm9udEZhY2UpCi17Ci0gICAgQVNTRVJUKGZvbnRGYWNl
KTsKLX0KLQotU1ZHQ1NTRm9udEZhY2U6On5TVkdDU1NGb250RmFjZSgpCi17Ci19Ci0KLWJvb2wg
U1ZHQ1NTRm9udEZhY2U6OmlzVmFsaWQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQot
ICAgIAotdm9pZCBTVkdDU1NGb250RmFjZTo6YWRkU291cmNlKENTU0ZvbnRGYWNlU291cmNlKikK
LXsKLSAgICAvLyBuby1vcAotfQotCi1TaW1wbGVGb250RGF0YSogU1ZHQ1NTRm9udEZhY2U6Omdl
dEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQotewotICAgIGlmICghaXNWYWxpZCgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIFRPRE86IEV2ZW50dWFsbHkgd2UnbGwgc3dp
dGNoIHRvIENTU0ZvbnRGYWNlU291cmNlIGhlcmUsIHdoaWNoIGhhbmRsZXMgdGhlIGNhY2hpbmcg
Zm9yIHVzLgotICAgIC8vIChXaGVuIGltcGxlbWVudGluZyBzdXBwb3J0IGZvciBleHRlcm5hbCBT
VkcgRm9udHMgdGhpcyB3ZSdsbCBkZWNpZGUgYWJvdXQgdGhhdC4pCi0gICAgaWYgKCFtX2ZvbnRE
YXRhKQotICAgICAgICBtX2ZvbnREYXRhLnNldChtX2ZvbnRGYWNlRWxlbWVudC0+Y3JlYXRlRm9u
dERhdGEoZm9udERlc2NyaXB0aW9uKSk7Ci0KLSAgICByZXR1cm4gbV9mb250RGF0YS5nZXQoKTsK
LX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvY3NzL1NWR0NTU0ZvbnRGYWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvU1ZHQ1NTRm9udEZhY2UuaAkocmV2aXNpb24gMjk2NzYp
CisrKyBXZWJDb3JlL2Nzcy9TVkdDU1NGb250RmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU1ZHQ1NTRm9udEZhY2VfaAotI2Rl
ZmluZSBTVkdDU1NGb250RmFjZV9oCi0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotI2luY2x1ZGUg
IkNTU0ZvbnRGYWNlLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVudDsKLQotY2xhc3MgU1ZHQ1NTRm9udEZh
Y2UgOiBwdWJsaWMgQ1NTRm9udEZhY2UgewotcHVibGljOgotICAgIFNWR0NTU0ZvbnRGYWNlKFNW
R0ZvbnRGYWNlRWxlbWVudCopOwotICAgIHZpcnR1YWwgflNWR0NTU0ZvbnRGYWNlKCk7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGRTb3Vy
Y2UoQ1NTRm9udEZhY2VTb3VyY2UqKTsKLQotICAgIHZpcnR1YWwgU2ltcGxlRm9udERhdGEqIGdl
dEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNJdGFsaWMpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxTVkdGb250RmFjZUVs
ZW1lbnQ+IG1fZm9udEZhY2VFbGVtZW50OwotICAgIE93blB0cjxTaW1wbGVGb250RGF0YT4gbV9m
b250RGF0YTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkdfRk9OVFMpCi0jZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24gMjk2NzYpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDcs
MjIgKzUwNywyMiBAQCBpbnQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuKSBjb25zCiAK
IGludCBGb250Ojphc2NlbnQoKSBjb25zdAogewotICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT5h
c2NlbnQoc2l6ZSgpKTsKKyAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+YXNjZW50KCk7CiB9CiAK
IGludCBGb250OjpkZXNjZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+
ZGVzY2VudChzaXplKCkpOworICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT5kZXNjZW50KCk7CiB9
CiAKIGludCBGb250OjpsaW5lU3BhY2luZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHByaW1hcnlG
b250KCktPmxpbmVTcGFjaW5nKHNpemUoKSk7CisgICAgcmV0dXJuIHByaW1hcnlGb250KCktPmxp
bmVTcGFjaW5nKCk7CiB9CiAKIGZsb2F0IEZvbnQ6OnhIZWlnaHQoKSBjb25zdAogewotICAgIHJl
dHVybiBwcmltYXJ5Rm9udCgpLT54SGVpZ2h0KHNpemUoKSk7CisgICAgcmV0dXJuIHByaW1hcnlG
b250KCktPnhIZWlnaHQoKTsKIH0KIAogdW5zaWduZWQgRm9udDo6dW5pdHNQZXJFbSgpIGNvbnN0
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oCShyZXZpc2lvbiAyOTY3NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBib29sIGNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGb250KCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBpc0N1c3RvbUZvbnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzTG9h
ZGluZygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWdtZW50ZWQoKSBjb25zdCA9
IDA7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnRE
YXRhLmNwcAkocmV2aXNpb24gMjk2NzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nl
Z21lbnRlZEZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTQgQEAgYm9v
bCBTZWdtZW50ZWRGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCitib29sIFNlZ21lbnRlZEZvbnREYXRhOjppc1NW
R0ZvbnQoKSBjb25zdAoreworICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgc2VnbWVudHMgc3ZnIGZv
bnRzIGF0IHRoZSBtb21lbnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIGJvb2wg
U2VnbWVudGVkRm9udERhdGE6OmlzQ3VzdG9tRm9udCgpIGNvbnN0CiB7CiAgICAgLy8gQWxsIHNl
Z21lbnRlZCBmb250cyBhcmUgY3VzdG9tIGZvbnRzLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuaAkocmV2aXNpb24gMjk2NzYpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDYgKzU3LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKSBjb25zdDsK
KworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgdmlydHVhbCBib29sIGlzU1ZHRm9udCgpIGNv
bnN0OworI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1Nl
Z21lbnRlZCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVGb250RGF0YS5jcHAJKHJldmlzaW9uIDI5Njc2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDQ3ICszMiwyMyBA
QAogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmIEVOQUJMRShTVkdfRk9OVFMp
Ci0jaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLS8vIERvbid0IGltcGxlbWVudCBjb25z
dHJ1Y3RvciBpbiB0aGUgaGVhZGVyIHRvIHNhdmUgYSBTVkdGb250RmFjZUVsZW1lbnQuaCBpbmNs
dWRlLgotU1ZHRm9udERhdGE6OlNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVudCogZWxlbWVu
dCkKLSAgICA6IGZvbnRGYWNlRWxlbWVudChlbGVtZW50KQotICAgICwgaG9yaXpvbnRhbE9yaWdp
blgoMC4wZikKLSAgICAsIGhvcml6b250YWxPcmlnaW5ZKDAuMGYpCi0gICAgLCBob3Jpem9udGFs
QWR2YW5jZVgoMC4wZikKLSAgICAsIHZlcnRpY2FsT3JpZ2luWCgwLjBmKQotICAgICwgdmVydGlj
YWxPcmlnaW5ZKDAuMGYpCi0gICAgLCB2ZXJ0aWNhbEFkdmFuY2VZKDAuMGYpCi17Ci19Ci0KLWZs
b2F0IFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChmbG9hdCBmb250U2l6ZSwgZmxv
YXQgdW5pdHNQZXJFbSwgZmxvYXQgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHVuaXRzUGVyRW0gPiAw
LjBmKTsKLSAgICByZXR1cm4gdmFsdWUgKiBmb250U2l6ZSAvIHVuaXRzUGVyRW07Ci19Ci0jZW5k
aWYKLQotU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGYsIGJvb2wgY3VzdG9tRm9udCwgYm9vbCBsb2FkaW5nKQorU2ltcGxlRm9udERhdGE6OlNp
bXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYsIGJvb2wgY3VzdG9tRm9udCwg
Ym9vbCBsb2FkaW5nLCBib29sIGlzU1ZHRm9udCkKICAgICA6IG1fZm9udChmKQogICAgICwgbV90
cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICwgbV9z
dmdGb250RGF0YSgwKQotI2VuZGlmCisgICAgLCBtX2lzU1ZHRm9udChpc1NWR0ZvbnQpCiAgICAg
LCBtX2lzQ3VzdG9tRm9udChjdXN0b21Gb250KQogICAgICwgbV9pc0xvYWRpbmcobG9hZGluZykK
ICAgICAsIG1fc21hbGxDYXBzRm9udERhdGEoMCkKLXsgICAgCit7CiAgICAgcGxhdGZvcm1Jbml0
KCk7Ci0gICAgCi0gICAgR2x5cGhQYWdlKiBnbHlwaFBhZ2VaZXJvID0gR2x5cGhQYWdlVHJlZU5v
ZGU6OmdldFJvb3RDaGlsZCh0aGlzLCAwKS0+cGFnZSgpOworCisgICAgR2x5cGhQYWdlKiBnbHlw
aFBhZ2VaZXJvID0gaXNTVkdGb250ID8gMCA6IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hp
bGQodGhpcywgMCktPnBhZ2UoKTsKICAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGdseXBoIHBhZ2UgemVyby4iKTsKKwkJaWYgKCFpc1NW
R0ZvbnQpCisJCQlMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgZ2x5cGggcGFnZSB6ZXJvLiIpOwor
CiAgICAgICAgIG1fc3BhY2VHbHlwaCA9IDA7CiAgICAgICAgIG1fc3BhY2VXaWR0aCA9IDA7CiAg
ICAgICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gMDsKQEAgLTExNiw1NiArOTIsNiBAQCBTaW1w
bGVGb250RGF0YTo6flNpbXBsZUZvbnREYXRhKCkKICAgICAvLyBpdCB3aWxsIGJlIGRlbGV0ZWQg
dGhlbiwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLgogfQogCi1pbnQgU2lt
cGxlRm9udERhdGE6OmFzY2VudChmbG9hdCBmb250U2l6ZSkgY29uc3QKLXsKLSNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKQotICAgIGlmIChtX3N2Z0ZvbnREYXRhKQotICAgICAgICByZXR1cm4gU1ZHRm9u
dERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnRTaXplLCBtX3VuaXRzUGVyRW0sIG1fYXNj
ZW50KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIG1fYXNjZW50OwotfQotCi1pbnQgU2ltcGxlRm9u
dERhdGE6OmRlc2NlbnQoZmxvYXQgZm9udFNpemUpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWR19G
T05UUykKLSAgICBpZiAobV9zdmdGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIFNWR0ZvbnREYXRh
Ojpjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250U2l6ZSwgbV91bml0c1BlckVtLCBtX2Rlc2NlbnQp
OwotI2VuZGlmCi0KLSAgICByZXR1cm4gbV9kZXNjZW50OwotfQotCi1pbnQgU2ltcGxlRm9udERh
dGE6OmxpbmVTcGFjaW5nKGZsb2F0IGZvbnRTaXplKSBjb25zdAotewotI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCi0gICAgaWYgKG1fc3ZnRm9udERhdGEpCi0gICAgICAgIHJldHVybiAoaW50KSBjZWls
ZihTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZm9udFNpemUsIG1fdW5pdHNQZXJF
bSwgbV9saW5lU3BhY2luZykpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gbV9saW5lU3BhY2luZzsK
LX0KLQotaW50IFNpbXBsZUZvbnREYXRhOjpsaW5lR2FwKGZsb2F0IGZvbnRTaXplKSBjb25zdAot
ewotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKG1fc3ZnRm9udERhdGEpCi0gICAgICAg
IHJldHVybiBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZm9udFNpemUsIG1fdW5p
dHNQZXJFbSwgbV9saW5lR2FwKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIG1fbGluZUdhcDsKLX0K
LQotZmxvYXQgU2ltcGxlRm9udERhdGE6OnhIZWlnaHQoZmxvYXQgZm9udFNpemUpIGNvbnN0Ci17
Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAobV9zdmdGb250RGF0YSkKLSAgICAgICAg
cmV0dXJuIFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250U2l6ZSwgbV91bml0
c1BlckVtLCBtX3hIZWlnaHQpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gbV94SGVpZ2h0OwotfQot
CiBmbG9hdCBTaW1wbGVGb250RGF0YTo6d2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QK
IHsKICAgICBmbG9hdCB3aWR0aCA9IG1fZ2x5cGhUb1dpZHRoTWFwLndpZHRoRm9yR2x5cGgoZ2x5
cGgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAko
cmV2aXNpb24gMjk2NzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJHbHlwaFBh
Z2VUcmVlTm9kZS5oIgogI2luY2x1ZGUgIkdseXBoV2lkdGhNYXAuaCIKICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisKICNpZiBQTEFURk9STShNQUMpCiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVBVFNV
U3R5bGUqIEFUU1VTdHlsZTsKICNlbmRpZgpAQCAtNDMsMzQgKzQ0LDExIEBAIGNsYXNzIEZvbnRQ
bGF0Zm9ybURhdGE7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBXaWR0aE1hcDsKIAotI2lm
IEVOQUJMRShTVkdfRk9OVFMpCi1jbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7Ci0KLXN0cnVjdCBT
VkdGb250RGF0YSB7Ci0gICAgU1ZHRm9udERhdGEoU1ZHRm9udEZhY2VFbGVtZW50Kik7Ci0KLSAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydEVtVW5pdFRvUGl4
ZWwoZmxvYXQgZm9udFNpemUsIGZsb2F0IHVuaXRzUGVyRW0sIGZsb2F0IHZhbHVlKTsKLQotICAg
IC8vIEhvbGQgcG9pbnRlciB0byBvdXIgY3JlYXRvcgotICAgIFJlZlB0cjxTVkdGb250RmFjZUVs
ZW1lbnQ+IGZvbnRGYWNlRWxlbWVudDsKLQotICAgIC8vIFNWRyBGb250IHNwZWNpZmljIG1ldHJp
Y3MKLSAgICBmbG9hdCBob3Jpem9udGFsT3JpZ2luWDsKLSAgICBmbG9hdCBob3Jpem9udGFsT3Jp
Z2luWTsKLSAgICBmbG9hdCBob3Jpem9udGFsQWR2YW5jZVg7Ci0KLSAgICBmbG9hdCB2ZXJ0aWNh
bE9yaWdpblg7Ci0gICAgZmxvYXQgdmVydGljYWxPcmlnaW5ZOwotICAgIGZsb2F0IHZlcnRpY2Fs
QWR2YW5jZVk7Ci19OwotI2VuZGlmCi0KIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVk
UGl0Y2gsIFZhcmlhYmxlUGl0Y2ggfTsKIAogY2xhc3MgU2ltcGxlRm9udERhdGEgOiBwdWJsaWMg
Rm9udERhdGEgewogcHVibGljOgotICAgIFNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmLCBib29sIGN1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBsb2FkaW5nID0gZmFsc2UpOwor
ICAgIFNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGN1c3RvbUZv
bnQgPSBmYWxzZSwgYm9vbCBsb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNTVkdGb250ID0gZmFsc2Up
OwogICAgIHZpcnR1YWwgflNpbXBsZUZvbnREYXRhKCk7CiAKIHB1YmxpYzoKQEAgLTc4LDExICs1
NiwxMSBAQCBwdWJsaWM6CiAgICAgU2ltcGxlRm9udERhdGEqIHNtYWxsQ2Fwc0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdDsKIAogICAgIC8vIHZl
cnRpY2FsIG1ldHJpY3MKLSAgICBpbnQgYXNjZW50KGZsb2F0IGZvbnRTaXplKSBjb25zdDsKLSAg
ICBpbnQgZGVzY2VudChmbG9hdCBmb250U2l6ZSkgY29uc3Q7Ci0gICAgaW50IGxpbmVTcGFjaW5n
KGZsb2F0IGZvbnRTaXplKSBjb25zdDsKLSAgICBpbnQgbGluZUdhcChmbG9hdCBmb250U2l6ZSkg
Y29uc3Q7Ci0gICAgZmxvYXQgeEhlaWdodChmbG9hdCBmb250U2l6ZSkgY29uc3Q7CisgICAgaW50
IGFzY2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXNjZW50OyB9CisgICAgaW50IGRlc2NlbnQoKSBj
b25zdCB7IHJldHVybiBtX2Rlc2NlbnQ7IH0KKyAgICBpbnQgbGluZVNwYWNpbmcoKSBjb25zdCB7
IHJldHVybiBtX2xpbmVTcGFjaW5nOyB9CisgICAgaW50IGxpbmVHYXAoKSBjb25zdCB7IHJldHVy
biBtX2xpbmVHYXA7IH0KKyAgICBmbG9hdCB4SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV94SGVp
Z2h0OyB9CiAgICAgdW5zaWduZWQgdW5pdHNQZXJFbSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pdHNQ
ZXJFbTsgfQogCiAgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CkBAIC05NCwx
MSArNzIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRlcm1pbmVQaXRjaCgpOwogICAgIFBpdGNo
IHBpdGNoKCkgY29uc3QgeyByZXR1cm4gbV90cmVhdEFzRml4ZWRQaXRjaCA/IEZpeGVkUGl0Y2gg
OiBWYXJpYWJsZVBpdGNoOyB9CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGJvb2wgaXNT
VkdGb250KCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RGF0YTsgfQotICAgIFNWR0ZvbnREYXRh
KiBzdmdGb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRm9udERhdGEuZ2V0KCk7IH0KLSNl
bmRpZgotCisgICAgdmlydHVhbCBib29sIGlzU1ZHRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNT
VkdGb250OyB9CiAgICAgdmlydHVhbCBib29sIGlzQ3VzdG9tRm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNDdXN0b21Gb250OyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0IHsg
cmV0dXJuIG1faXNMb2FkaW5nOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2VnbWVudGVkKCkgY29u
c3Q7CkBAIC0xNTIsMTAgKzEyNiw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbV90cmVhdEFzRml4
ZWRQaXRjaDsKIAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgT3duUHRyPFNWR0ZvbnREYXRh
PiBtX3N2Z0ZvbnREYXRhOwotI2VuZGlmCi0KKyAgICBib29sIG1faXNTVkdGb250OwogICAgIGJv
b2wgbV9pc0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQg
bG9hZGVkIHZpYSBAZm9udC1mYWNlCiAgICAgYm9vbCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBv
ciBub3QgdGhpcyBjdXN0b20gZm9udCBpcyBzdGlsbCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyOTY3NikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEN1c3RvbVBsYXRm
b3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKQogewotICAgIGNhaXJvX2ZvbnRfZmFj
ZV9kZXN0cm95KG1fZm9udEZhY2UpOworICAgIGlmIChtX2ZvbnRGYWNlKQorICAgICAgICBjYWly
b19mb250X2ZhY2VfZGVzdHJveShtX2ZvbnRGYWNlKTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YSBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJv
bGQsIGJvb2wgaXRhbGljKQpAQCAtNjgsNCArNjksOSBAQCBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KiBjcmVhdGVGb250Q3VzdG9tCiAgICAgcmV0dXJuIG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KGZvbnRGYWNlKTsKIH0KIAorRm9udFBsYXRmb3JtRGF0YSBjcmVhdGVTVkdGb250Q3VzdG9tUGxh
dGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCit7CisgICAgcmV0
dXJuIEZvbnRQbGF0Zm9ybURhdGEoMCwgKGludCkgbHJvdW5kZihzaXplKSwgYm9sZCwgaXRhbGlj
KTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gMjk2NzYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDYgKzQzLDcgQEAgc3RydWN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgOiBO
b25jb3B5YQogfTsKIAogRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBs
YXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcik7CitGb250UGxhdGZvcm1EYXRhIGNyZWF0
ZVNWR0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0
YWxpYyk7CiAKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDI5Njc2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc5LDQgKzc5LDEwIEBAIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEq
IGNyZWF0ZUZvbnRDdXN0b20KICAgICByZXR1cm4gbmV3IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEo
Y29udGFpbmVyUmVmLCBmb250UmVmLCBjZ0ZvbnRSZWYpOwogfQogCitGb250UGxhdGZvcm1EYXRh
IGNyZWF0ZVNWR0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIGl0YWxpYykKK3sKKyAgICAvLyBUT0RPOiBTdXBwb3J0IGZsb2F0aW5nIHBvaW50IHNpemVz
CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoMCwgMCwgKGludCkgbHJvdW5kZihzaXplKSwg
Ym9sZCwgaXRhbGljKTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gMjk2NzYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgc3RydWN0IEZvbnRDdXN0b21QbGF0
Zm9ybURhdGEgOiBOb25jb3B5YQogfTsKIAogRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRl
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcik7CitGb250UGxhdGZv
cm1EYXRhIGNyZWF0ZVNWR0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYyk7CiAKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJldmlzaW9uIDI5Njc2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUluaXQoKQogICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fZm9udC5tX3N5bnRoZXRpY0Jv
bGQgPyAxLjBmIDogMC5mOwogICAgIAogICAgIGJvb2wgZmFpbGVkU2V0dXAgPSBmYWxzZTsKLSAg
ICBpZiAoIWluaXRGb250RGF0YSh0aGlzKSkgeworICAgIGlmICghaW5pdEZvbnREYXRhKHRoaXMp
ICYmICFtX2lzU1ZHRm9udCkgewogICAgICAgICAvLyBBY2shIFNvbWV0aGluZyB2ZXJ5IGJhZCBo
YXBwZW5lZCwgbGlrZSBhIGNvcnJ1cHQgZm9udC4KICAgICAgICAgLy8gVHJ5IGxvb2tpbmcgZm9y
IGFuIGFsdGVybmF0ZSAnYmFzZScgZm9udCBmb3IgdGhpcyByZW5kZXJlci4KIApAQCAtMTYxLDcg
KzE2MSwxMCBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgICAgICBM
T0dfRVJST1IoImZhaWxlZCB0byBzZXQgdXAgZm9udCwgdXNpbmcgc3lzdGVtIGZvbnQgJXMiLCBt
X2ZvbnQuZm9udCgpKTsKICAgICAgICAgaW5pdEZvbnREYXRhKHRoaXMpOwogICAgIH0KLSAgICAK
KworICAgIGlmIChtX2lzU1ZHRm9udCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaW50IGlBc2Nl
bnQ7CiAgICAgaW50IGlEZXNjZW50OwogICAgIGludCBpTGluZUdhcDsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmNwcAkocmV2aXNpb24gMjk2NzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw1ICs1MCwxMSBA
QCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tCiAgICAgcmV0dXJuIGRh
dGE7CiB9CiAKK0ZvbnRQbGF0Zm9ybURhdGEgY3JlYXRlU1ZHRm9udEN1c3RvbVBsYXRmb3JtRGF0
YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQoreworICAgIC8vIFRPRE86IFNW
RyBGb250cyBub3Qgc3VwcG9ydGVkIGZvciBRdAorICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRh
KCk7Cit9CisKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDI5Njc2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDcgQEAgc3RydWN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgOiBO
b25jb3B5YQogfTsKIAogRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBs
YXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcik7CitGb250UGxhdGZvcm1EYXRhIGNyZWF0
ZVNWR0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0
YWxpYyk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJ
KHJldmlzaW9uIDI5Njc2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDQgKzcxLDkgQEAgRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbQogICAgIHJldHVybiBuZXcgRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YShjZ0ZvbnQpOwogfQogCitGb250UGxhdGZvcm1EYXRhIGNyZWF0
ZVNWR0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0
YWxpYykKK3sKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YSgwLCBzaXplLCBib2xkLCBpdGFs
aWMpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiAyOTY3NikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBzdHJ1Y3QgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSA6
IE5vbmNvcHlhCiB9OwogCiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9t
UGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKTsKK0ZvbnRQbGF0Zm9ybURhdGEgY3Jl
YXRlU1ZHRm9udEN1c3RvbVBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wg
aXRhbGljKTsKIAogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2
aXNpb24gMjk2NzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0Ojpy
ZWxhdGl2ZUJCb3goYm8KICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICBjb25zdCBGb250
JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwogICAgICAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgp
LT5pc1NWR0ZvbnQoKSkgewotICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBTVkdGb250RGF0YTo6
Y29udmVydEVtVW5pdFRvUGl4ZWwoZm9udC5zaXplKCksIGZvbnQudW5pdHNQZXJFbSgpLCAxLjBm
KTsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gZm9udC51bml0c1BlckVtKCkgPiAwID8gZm9u
dC5zaXplKCkgLyBmb250LnVuaXRzUGVyRW0oKSA6IDAuMGY7CiAKICAgICAgICAgICAgIGlmIChz
Y2FsZSAhPSAwLjBmKQogICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoIC89IHNjYWxlOwpJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
Rm9udC5jcHAJKHJldmlzaW9uIDI5Njc2KQorKysgV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTAgKzI1LDExIEBACiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgorI2luY2x1ZGUgIlNWR0ZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU1ZHR2x5cGhFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGb250RmFj
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdNaXNzaW5nR2x5cGhFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogCkBAIC0zNiw2ICsz
NywxNCBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK3N0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydEVtVW5pdFRvUGl4ZWwoZmxvYXQgZm9u
dFNpemUsIGZsb2F0IHVuaXRzUGVyRW0sIGZsb2F0IHZhbHVlKQoreworICAgIGlmICh1bml0c1Bl
ckVtID09IDAuMGYpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgcmV0dXJuIHZhbHVlICog
Zm9udFNpemUgLyB1bml0c1BlckVtOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNWZXJ0aWNh
bFdyaXRpbmdNb2RlKGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICByZXR1cm4g
c3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gV01fVEJSTCB8fCBzdHlsZS0+d3JpdGluZ01vZGUoKSA9
PSBXTV9UQjsgCkBAIC0xODgsMTUgKzE5NywxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21w
YXRpYmxlR2x5cGgoY29uCiAgICAgcmV0dXJuIGlzQ29tcGF0aWJsZUFyYWJpY0Zvcm0oaWRlbnRp
ZmllciwgY2hhcnMsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIH0KIAotc3RhdGljIGlu
bGluZSBTVkdGb250RGF0YSogc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgU1ZHRm9udEZhY2VFbGVtZW50KiYgZm9udEZh
Y2UsIFNWR0ZvbnRFbGVtZW50KiYgZm9udCkKK3N0YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9udERh
dGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxlbWVudComIGZvbnRGYWNlLCBTVkdGb250RWxl
bWVudComIGZvbnQpCiB7Ci0gICAgQVNTRVJUKCFmb250RGF0YS0+aXNDdXN0b21Gb250KCkpOwor
ICAgIEFTU0VSVChmb250RGF0YS0+aXNDdXN0b21Gb250KCkpOwogICAgIEFTU0VSVChmb250RGF0
YS0+aXNTVkdGb250KCkpOwogCi0gICAgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhID0gZm9udERh
dGEtPnN2Z0ZvbnREYXRhKCk7Ci0gICAgQVNTRVJUKHN2Z0ZvbnREYXRhKTsKKyAgICBjb25zdCBT
VkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+
KGZvbnREYXRhKTsKIAotICAgIGZvbnRGYWNlID0gc3ZnRm9udERhdGEtPmZvbnRGYWNlRWxlbWVu
dC5nZXQoKTsKKyAgICBmb250RmFjZSA9IHN2Z0ZvbnREYXRhLT5mb250RmFjZUVsZW1lbnQoKTsK
ICAgICBBU1NFUlQoZm9udEZhY2UpOwogCiAgICAgZm9udCA9IGZvbnRGYWNlLT5hc3NvY2lhdGVk
Rm9udEVsZW1lbnQoKTsKQEAgLTIxMCw3ICsyMTgsNyBAQCBzdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtl
ciB7CiAgICAgdHlwZWRlZiBib29sICgqU1ZHVGV4dFJ1bldhbGtlckNhbGxiYWNrKShjb25zdCBT
VkdHbHlwaElkZW50aWZpZXImLCBTVkdUZXh0UnVuRGF0YSYpOwogICAgIHR5cGVkZWYgdm9pZCAo
KlNWR1RleHRSdW5XYWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjaykoY29uc3QgVGV4dFJ1biYsIHVu
c2lnbmVkIGludCwgU1ZHVGV4dFJ1bkRhdGEmKTsKIAotICAgIFNWR1RleHRSdW5XYWxrZXIoU1ZH
Rm9udERhdGEqIGZvbnREYXRhLCBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIFNWR1RleHRS
dW5EYXRhJiBkYXRhLAorICAgIFNWR1RleHRSdW5XYWxrZXIoY29uc3QgU1ZHRm9udERhdGEqIGZv
bnREYXRhLCBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIFNWR1RleHRSdW5EYXRhJiBkYXRh
LAogICAgICAgICAgICAgICAgICAgICAgU1ZHVGV4dFJ1bldhbGtlckNhbGxiYWNrIGNhbGxiYWNr
LCBTVkdUZXh0UnVuV2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2sgbWlzc2luZ0dseXBoQ2FsbGJh
Y2spCiAgICAgICAgIDogbV9mb250RGF0YShmb250RGF0YSkKICAgICAgICAgLCBtX2ZvbnRFbGVt
ZW50KGZvbnRFbGVtZW50KQpAQCAtMjY3LDggKzI3NSwxNSBAQCBzdHJ1Y3QgU1ZHVGV4dFJ1bldh
bGtlciB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghZm91bmRHbHlwaCkgewot
ICAgICAgICAgICAgICAgICgqbV93YWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjaykocnVuLCBpLCBt
X3dhbGtlckRhdGEpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGlmIChTVkdNaXNzaW5nR2x5cGhFbGVtZW50KiBlbGVtZW50ID0gbV9mb250RWxlbWVudC0+Zmly
c3RNaXNzaW5nR2x5cGhFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gPG1pc3Np
bmctZ2x5cGg+IGVsZW1lbnQgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVy
ID0gU1ZHR2x5cGhFbGVtZW50OjpidWlsZEdlbmVyaWNHbHlwaElkZW50aWZpZXIoZWxlbWVudCk7
CisgICAgICAgICAgICAgICAgICAgIFNWR0dseXBoRWxlbWVudDo6aW5oZXJpdFVuc3BlY2lmaWVk
QXR0cmlidXRlcyhpZGVudGlmaWVyLCBtX2ZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBub24tU1ZHIEZvbnQKKyAg
ICAgICAgICAgICAgICAgICAgKCptX3dhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrKShydW4sIGks
IG1fd2Fsa2VyRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCEoKm1fd2Fsa2VyQ2Fs
bGJhY2spKGlkZW50aWZpZXIsIG1fd2Fsa2VyRGF0YSkpCkBAIC0yNzksNyArMjk0LDcgQEAgc3Ry
dWN0IFNWR1RleHRSdW5XYWxrZXIgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTVkdGb250RGF0
YSogbV9mb250RGF0YTsKKyAgICBjb25zdCBTVkdGb250RGF0YSogbV9mb250RGF0YTsKICAgICBT
VkdGb250RWxlbWVudCogbV9mb250RWxlbWVudDsKICAgICBTVkdUZXh0UnVuRGF0YSYgbV93YWxr
ZXJEYXRhOwogICAgIFNWR1RleHRSdW5XYWxrZXJDYWxsYmFjayBtX3dhbGtlckNhbGxiYWNrOwpA
QCAtMjkyLDE2ICszMDcsMTUgQEAgc3RydWN0IFNWR1RleHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0
aERhdAogICAgIGludCBmcm9tOwogICAgIGludCB0bzsKIAorICAgIGZsb2F0IHNjYWxlOwogICAg
IGZsb2F0IGxlbmd0aDsKLSAgICBmbG9hdCBmb250U2l6ZTsKLSAgICB1bnNpZ25lZCB1bml0c1Bl
ckVtOwogICAgIGNvbnN0IEZvbnQqIGZvbnQ7CiB9OwogCiBib29sIGZsb2F0V2lkdGhVc2luZ1NW
R0ZvbnRDYWxsYmFjayhjb25zdCBTVkdHbHlwaElkZW50aWZpZXImIGlkZW50aWZpZXIsIFNWR1Rl
eHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0aERhdGEmIGRhdGEpCiB7CiAgICAgaWYgKGRhdGEuYXQg
Pj0gZGF0YS5mcm9tICYmIGRhdGEuYXQgPCBkYXRhLnRvKQotICAgICAgICBkYXRhLmxlbmd0aCAr
PSBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6ZSwgZGF0YS51
bml0c1BlckVtLCBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCk7CisgICAgICAgIGRhdGEu
bGVuZ3RoICs9IGlkZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYICogZGF0YS5zY2FsZTsKIAog
ICAgIGRhdGEuYXQrKzsKICAgICByZXR1cm4gZGF0YS5hdCA8IGRhdGEudG87CkBAIC0zMTIsNyAr
MzI2LDcgQEAgdm9pZCBmbG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhY2soY29ucwogICAgIC8v
IENvbnN0cnVjdCBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgU1ZHIEZvbnQgdGhhdCBpbiBpcyB1c2Uu
IERpc2FibGUgdGhlIFNWRyBGb250IGZ1bmN0aW9uYWxpdHkKICAgICAvLyBpbiB0aGF0IGNvcHkg
b2YgdGhlIEZvbnQgb2JqZWN0LCBzbyBkcmF3VGV4dC9mbG9hdFdpZHRoIGVuZCB1cCBpbiB0aGUg
InNpbXBsZSIgY29kZSBwYXRocy4KICAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBjb25z
dF9jYXN0PFNpbXBsZUZvbnREYXRhKj4oZGF0YS5mb250LT5wcmltYXJ5Rm9udCgpKTsKLSAgICBT
VkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBmb250RGF0YS0+bV9zdmdGb250RGF0YS5yZWxlYXNl
KCk7CisgICAgZm9udERhdGEtPm1faXNTVkdGb250ID0gZmFsc2U7CiAKICAgICAvLyBIYW5kbGUg
c3lzdGVtIGZvbnQgZmFsbGJhY2sKICAgICBUZXh0UnVuIHN1YlJ1bihydW4pOwpAQCAtMzIxLDcg
KzMzNSw3IEBAIHZvaWQgZmxvYXRXaWR0aE1pc3NpbmdHbHlwaENhbGxiYWNrKGNvbnMKICAgICBk
YXRhLmxlbmd0aCArPSBkYXRhLmZvbnQtPmZsb2F0V2lkdGgoc3ViUnVuKTsKIAogICAgIC8vIFN3
aXRjaCBiYWNrIHRvIFNWRyBGb250IGNvZGUgcGF0aAotICAgIGZvbnREYXRhLT5tX3N2Z0ZvbnRE
YXRhLnNldChzdmdGb250RGF0YSk7CisgICAgZm9udERhdGEtPm1faXNTVkdGb250ID0gdHJ1ZTsK
IH0KIAogc3RhdGljIGZsb2F0IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udChjb25z
dCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8pCkBAIC0z
MzUsNyArMzQ5LDcgQEAgc3RhdGljIGZsb2F0IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nUwog
ICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7CiAgICAgU1ZHRm9udEZhY2VFbGVt
ZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwogCi0gICAgaWYgKFNWR0ZvbnREYXRhKiBmb250RGF0
YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250LT5wcmltYXJ5Rm9u
dCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgeworICAgIGlmIChjb25zdCBTVkdG
b250RGF0YSogZm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEo
Zm9udC0+cHJpbWFyeUZvbnQoKSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCkpIHsKICAg
ICAgICAgaWYgKCFmb250RWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiAwLjBmOwogCkBAIC0z
NDUsMTAgKzM1OSw5IEBAIHN0YXRpYyBmbG9hdCBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1MK
ICAgICAgICAgZGF0YS5hdCA9IGZyb207CiAgICAgICAgIGRhdGEuZnJvbSA9IGZyb207CiAgICAg
ICAgIGRhdGEudG8gPSB0bzsKKyAgICAgICAgZGF0YS5zY2FsZSA9IGNvbnZlcnRFbVVuaXRUb1Bp
eGVsKGZvbnQtPnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCksIDEuMGYpOwog
ICAgICAgICBkYXRhLmxlbmd0aCA9IDAuMGY7Ci0gICAgICAgIGRhdGEuZm9udFNpemUgPSBmb250
LT5zaXplKCk7Ci0gICAgICAgIGRhdGEudW5pdHNQZXJFbSA9IGZvbnRGYWNlRWxlbWVudC0+dW5p
dHNQZXJFbSgpOwotCisgICAgICAKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkpIHsKICAgICAgICAgICAgIGJvb2wg
aXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocmVuZGVyT2JqZWN0LT5zdHls
ZSgpLT5zdmdTdHlsZSgpKTsKIApAQCAtMzczLDkgKzM4Niw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0
V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QKIAogLy8gQ2FsbGJhY2sgJiBkYXRhIHN0cnVjdHVyZXMg
dG8gZHJhdyB0ZXh0IHVzaW5nIFNWRyBGb250cwogc3RydWN0IFNWR1RleHRSdW5XYWxrZXJEcmF3
VGV4dERhdGEgewotICAgIGZsb2F0IGZvbnRTaXplOwogICAgIGZsb2F0IHNjYWxlOwotICAgIHVu
c2lnbmVkIHVuaXRzUGVyRW07CiAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dDsKIAogICAgIGZsb2F0
IHhTdGFydE9mZnNldDsKQEAgLTM5NSw4ICs0MDYsOCBAQCBib29sIGRyYXdUZXh0VXNpbmdTVkdG
b250Q2FsbGJhY2soY29uc3QgCiAgICAgICAgIGRhdGEuY29udGV4dC0+c2F2ZSgpOwogCiAgICAg
ICAgIGlmIChkYXRhLmlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAgICBkYXRhLmdseXBoT3Jp
Z2luLnNldFgoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUs
IGRhdGEudW5pdHNQZXJFbSwgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblgpKTsKLSAgICAgICAg
ICAgIGRhdGEuZ2x5cGhPcmlnaW4uc2V0WShTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4
ZWwoZGF0YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCBpZGVudGlmaWVyLnZlcnRpY2FsT3Jp
Z2luWSkpOworICAgICAgICAgICAgZGF0YS5nbHlwaE9yaWdpbi5zZXRYKGlkZW50aWZpZXIudmVy
dGljYWxPcmlnaW5YICogZGF0YS5zY2FsZSk7CisgICAgICAgICAgICBkYXRhLmdseXBoT3JpZ2lu
LnNldFkoaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkgKiBkYXRhLnNjYWxlKTsKICAgICAgICAg
fQogCiAgICAgICAgIGRhdGEuY29udGV4dC0+dHJhbnNsYXRlKGRhdGEueFN0YXJ0T2Zmc2V0ICsg
ZGF0YS5jdXJyZW50UG9pbnQueCgpICsgZGF0YS5nbHlwaE9yaWdpbi54KCksIGRhdGEuY3VycmVu
dFBvaW50LnkoKSArIGRhdGEuZ2x5cGhPcmlnaW4ueSgpKTsKQEAgLTQyMSwyMSArNDMyLDE5IEBA
IGJvb2wgZHJhd1RleHRVc2luZ1NWR0ZvbnRDYWxsYmFjayhjb25zdCAKICAgICB9CiAKICAgICBp
ZiAoZGF0YS5pc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQubW92ZSgw
LjBmLCBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6ZSwgZGF0
YS51bml0c1BlckVtLCBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5jZVkpKTsKKyAgICAgICAgZGF0
YS5jdXJyZW50UG9pbnQubW92ZSgwLjBmLCBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5jZVkgKiBk
YXRhLnNjYWxlKTsKICAgICBlbHNlCi0gICAgICAgIGRhdGEuY3VycmVudFBvaW50Lm1vdmUoU1ZH
Rm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQ
ZXJFbSwgaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVgpLCAwLjBmKTsKKyAgICAgICAgZGF0
YS5jdXJyZW50UG9pbnQubW92ZShpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCAqIGRhdGEu
c2NhbGUsIDAuMGYpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgZHJhd1RleHRNaXNz
aW5nR2x5cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGludCBwb3NpdGlv
biwgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSYgZGF0YSkKIHsKLSAgICAvLyBDb25zdHJ1
Y3QgYSBjb3B5IG9mIHRoZSBjdXJyZW50IFNWRyBGb250IHRoYXQgaW4gaXMgdXNlLiBEaXNhYmxl
IHRoZSBTVkcgRm9udCBmdW5jdGlvbmFsaXR5Ci0gICAgLy8gaW4gdGhhdCBjb3B5IG9mIHRoZSBG
b250IG9iamVjdCwgc28gZHJhd1RleHQvZmxvYXRXaWR0aCBlbmQgdXAgaW4gdGhlICJzaW1wbGUi
IGNvZGUgcGF0aHMuCiAgICAgY29uc3QgRm9udCYgZm9udCA9IGRhdGEuY29udGV4dC0+Zm9udCgp
OwogCiAgICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gY29uc3RfY2FzdDxTaW1wbGVGb250
RGF0YSo+KGZvbnQucHJpbWFyeUZvbnQoKSk7Ci0gICAgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRh
ID0gZm9udERhdGEtPm1fc3ZnRm9udERhdGEucmVsZWFzZSgpOworICAgIGZvbnREYXRhLT5tX2lz
U1ZHRm9udCA9IGZhbHNlOwogCiAgICAgLy8gSGFuZGxlIHN5c3RlbSBmb250IGZhbGxiYWNrCiAg
ICAgVGV4dFJ1biBzdWJSdW4ocnVuKTsKQEAgLTQ0NCwxMiArNDUzLDEyIEBAIHZvaWQgZHJhd1Rl
eHRNaXNzaW5nR2x5cGhDYWxsYmFjayhjb25zdCAKICAgICBmb250LmRyYXdUZXh0KGRhdGEuY29u
dGV4dCwgc3ViUnVuLCBkYXRhLmN1cnJlbnRQb2ludCk7CiAKICAgICBpZiAoZGF0YS5pc1ZlcnRp
Y2FsVGV4dCkKLSAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQubW92ZSgwLjBmLCBkYXRhLmNvbnRl
eHQtPmZvbnQoKS5mbG9hdFdpZHRoKHN1YlJ1bikpOworICAgICAgICBkYXRhLmN1cnJlbnRQb2lu
dC5tb3ZlKDAuMGYsIGZvbnQuZmxvYXRXaWR0aChzdWJSdW4pKTsKICAgICBlbHNlCi0gICAgICAg
IGRhdGEuY3VycmVudFBvaW50Lm1vdmUoZGF0YS5jb250ZXh0LT5mb250KCkuZmxvYXRXaWR0aChz
dWJSdW4pLCAwLjBmKTsKKyAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQubW92ZShmb250LmZsb2F0
V2lkdGgoc3ViUnVuKSwgMC4wZik7CiAKICAgICAvLyBTd2l0Y2ggYmFjayB0byBTVkcgRm9udCBj
b2RlIHBhdGgKLSAgICBmb250RGF0YS0+bV9zdmdGb250RGF0YS5zZXQoc3ZnRm9udERhdGEpOwor
ICAgIGZvbnREYXRhLT5tX2lzU1ZHRm9udCA9IHRydWU7CiB9CiAKIHZvaWQgRm9udDo6ZHJhd1Rl
eHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIApAQCAtNDU4LDcgKzQ2Nyw3IEBAIHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQo
R3JhcGhpY3MKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOwogICAgIFNWR0Zv
bnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKIAotICAgIGlmIChTVkdGb250RGF0
YSogZm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEocHJpbWFy
eUZvbnQoKSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCkpIHsKKyAgICBpZiAoY29uc3Qg
U1ZHRm9udERhdGEqIGZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnRE
YXRhKHByaW1hcnlGb250KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7CiAgICAg
ICAgIGlmICghZm9udEVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTQ3MCw5ICs0
NzksNyBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KEdyYXBoaWNzCiAgICAgICAg
IGRhdGEuYWN0aXZlUGFpbnRTZXJ2ZXIgPSBydW4uYWN0aXZlUGFpbnRTZXJ2ZXIoKTsKICAgICAg
ICAgQVNTRVJUKGRhdGEuYWN0aXZlUGFpbnRTZXJ2ZXIpOwogCi0gICAgICAgIGRhdGEuZm9udFNp
emUgPSBzaXplKCk7Ci0gICAgICAgIGRhdGEudW5pdHNQZXJFbSA9IGZvbnRGYWNlRWxlbWVudC0+
dW5pdHNQZXJFbSgpOwotICAgICAgICBkYXRhLnNjYWxlID0gU1ZHRm9udERhdGE6OmNvbnZlcnRF
bVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgMS4wZik7CisgICAg
ICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChzaXplKCksIGZvbnRGYWNlRWxl
bWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsKICAgICAgICAgZGF0YS5pc1ZlcnRpY2FsVGV4dCA9
IGlzVmVydGljYWxXcml0aW5nTW9kZShkYXRhLnJlbmRlck9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5
bGUoKSk7ICAgIAogICAgICAgICBkYXRhLnhTdGFydE9mZnNldCA9IGZsb2F0V2lkdGhPZlN1YlN0
cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIHJ1bi5ydGwoKSA/IHRvIDogMCwgcnVuLnJ0bCgp
ID8gcnVuLmxlbmd0aCgpIDogZnJvbSk7CiAgICAgICAgIGRhdGEuY3VycmVudFBvaW50ID0gcG9p
bnQ7CkBAIC00ODQsMTAgKzQ5MSwxMCBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250
KEdyYXBoaWNzCiAgICAgICAgICAgICBsYW5ndWFnZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihk
YXRhLnJlbmRlck9iamVjdC0+ZWxlbWVudCgpKS0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5n
QXR0cik7CiAKICAgICAgICAgaWYgKCFkYXRhLmlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAg
ICBkYXRhLmdseXBoT3JpZ2luLnNldFgoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVs
KGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgZm9udERhdGEtPmhvcml6b250YWxPcmln
aW5YKSk7Ci0gICAgICAgICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFkoU1ZHRm9udERhdGE6OmNv
bnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgZm9udERh
dGEtPmhvcml6b250YWxPcmlnaW5ZKSk7CisgICAgICAgICAgICBkYXRhLmdseXBoT3JpZ2luLnNl
dFgoZm9udERhdGEtPmhvcml6b250YWxPcmlnaW5YKCkgKiBkYXRhLnNjYWxlKTsKKyAgICAgICAg
ICAgIGRhdGEuZ2x5cGhPcmlnaW4uc2V0WShmb250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblkoKSAq
IGRhdGEuc2NhbGUpOwogICAgICAgICB9Ci0gICAgCisKICAgICAgICAgU1ZHVGV4dFJ1bldhbGtl
cjxTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhPiBydW5XYWxrZXIoZm9udERhdGEsIGZvbnRF
bGVtZW50LCBkYXRhLCBkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxiYWNrLCBkcmF3VGV4dE1pc3Np
bmdHbHlwaENhbGxiYWNrKTsKICAgICAgICAgcnVuV2Fsa2VyLndhbGsocnVuLCBkYXRhLmlzVmVy
dGljYWxUZXh0LCBsYW5ndWFnZSwgZnJvbSwgdG8pOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorI2luY2x1ZGUgIlNWR0ZvbnREYXRhLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworU1ZHRm9udERhdGE6OlNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxl
bWVudCogZm9udEZhY2VFbGVtZW50LCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEsIGJvb2wgbG9hZGluZykKKyAgICA6IFNpbXBsZUZvbnREYXRhKHBsYXRmb3JtRGF0YSwgdHJ1
ZSwgbG9hZGluZywgdHJ1ZSkKKyAgICAsIG1fZm9udEZhY2VFbGVtZW50KGZvbnRGYWNlRWxlbWVu
dCkKKyAgICAsIG1faG9yaXpvbnRhbE9yaWdpblgoMC4wZikKKyAgICAsIG1faG9yaXpvbnRhbE9y
aWdpblkoMC4wZikKKyAgICAsIG1faG9yaXpvbnRhbEFkdmFuY2VYKDAuMGYpCisgICAgLCBtX3Zl
cnRpY2FsT3JpZ2luWCgwLjBmKQorICAgICwgbV92ZXJ0aWNhbE9yaWdpblkoMC4wZikKKyAgICAs
IG1fdmVydGljYWxBZHZhbmNlWSgwLjBmKQoreworICAgIEFTU0VSVChtX2ZvbnRGYWNlRWxlbWVu
dCk7CisKKyAgICBtX3VuaXRzUGVyRW0gPSBtX2ZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgp
OworCisgICAgZmxvYXQgc2NhbGUgPSAwLjBmOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHNj
YWxlID0gcGxhdGZvcm1EYXRhLm1fc2l6ZTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBzY2Fs
ZSA9IHBsYXRmb3JtRGF0YS5tX2ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCk7CisjZWxp
ZiBQTEFURk9STShXSU4pCisgICAgc2NhbGUgPSBwbGF0Zm9ybURhdGEuc2l6ZSgpOworI2VuZGlm
CisgICAgLy8gVE9ETzogUXQgc3VwcG9ydCBmb3IgU1ZHIEZvbnRzCisKKyAgICAvLyBPbmx5IGFz
Y2VudC9kZXNjZW50IHdpbGwgYmUgc2NhbGVkIQorICAgIHNjYWxlIC89IG1fdW5pdHNQZXJFbSAh
PSAwID8gbV91bml0c1BlckVtIDogMTsKKworICAgIG1fYXNjZW50ID0gbV9mb250RmFjZUVsZW1l
bnQtPmFzY2VudCgpICogc2NhbGU7CisgICAgbV9kZXNjZW50ID0gbV9mb250RmFjZUVsZW1lbnQt
PmRlc2NlbnQoKSAqIHNjYWxlOworICAgIG1feEhlaWdodCA9IG1fZm9udEZhY2VFbGVtZW50LT54
SGVpZ2h0KCkgKiBzY2FsZTsKKworICAgIG1faG9yaXpvbnRhbE9yaWdpblggPSBtX2ZvbnRGYWNl
RWxlbWVudC0+aG9yaXpvbnRhbE9yaWdpblgoKTsKKyAgICBtX2hvcml6b250YWxPcmlnaW5ZID0g
bV9mb250RmFjZUVsZW1lbnQtPmhvcml6b250YWxPcmlnaW5ZKCk7CisgICAgbV9ob3Jpem9udGFs
QWR2YW5jZVggPSBtX2ZvbnRGYWNlRWxlbWVudC0+aG9yaXpvbnRhbEFkdmFuY2VYKCk7CisgICAg
bV92ZXJ0aWNhbE9yaWdpblggPSBtX2ZvbnRGYWNlRWxlbWVudC0+dmVydGljYWxPcmlnaW5YKCk7
CisgICAgbV92ZXJ0aWNhbE9yaWdpblkgPSBtX2ZvbnRGYWNlRWxlbWVudC0+dmVydGljYWxPcmln
aW5ZKCk7CisgICAgbV92ZXJ0aWNhbEFkdmFuY2VZID0gbV9mb250RmFjZUVsZW1lbnQtPnZlcnRp
Y2FsQWR2YW5jZVkoKTsKK30KKworU1ZHRm9udERhdGE6On5TVkdGb250RGF0YSgpCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdG
b250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdGb250RGF0YV9oCisjZGVmaW5lIFNW
R0ZvbnREYXRhX2gKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKKyNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTVkdGb250RGF0YSA6IHB1YmxpYyBTaW1wbGVGb250RGF0YSB7Citw
dWJsaWM6CisgICAgU1ZHRm9udERhdGEoU1ZHRm9udEZhY2VFbGVtZW50KiwgY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYsIGJvb2wgbG9hZGluZyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIH5TVkdGb250
RGF0YSgpOworCisgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnRGYWNlRWxlbWVudC5nZXQoKTsgfQorCisgICAgZmxvYXQgaG9yaXpv
bnRhbE9yaWdpblgoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxPcmlnaW5YOyB9CisgICAg
ZmxvYXQgaG9yaXpvbnRhbE9yaWdpblkoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxPcmln
aW5ZOyB9CisgICAgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2VYKCkgY29uc3QgeyByZXR1cm4gbV9o
b3Jpem9udGFsQWR2YW5jZVg7IH0KKworICAgIGZsb2F0IHZlcnRpY2FsT3JpZ2luWCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmVydGljYWxPcmlnaW5YOyB9CisgICAgZmxvYXQgdmVydGljYWxPcmlnaW5Z
KCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbE9yaWdpblk7IH0KKyAgICBmbG9hdCB2ZXJ0aWNh
bEFkdmFuY2VZKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbEFkdmFuY2VZOyB9CisKK3ByaXZh
dGU6CisgICAgUmVmUHRyPFNWR0ZvbnRGYWNlRWxlbWVudD4gbV9mb250RmFjZUVsZW1lbnQ7CisK
KyAgICBmbG9hdCBtX2hvcml6b250YWxPcmlnaW5YOworICAgIGZsb2F0IG1faG9yaXpvbnRhbE9y
aWdpblk7CisgICAgZmxvYXQgbV9ob3Jpem9udGFsQWR2YW5jZVg7CisKKyAgICBmbG9hdCBtX3Zl
cnRpY2FsT3JpZ2luWDsKKyAgICBmbG9hdCBtX3ZlcnRpY2FsT3JpZ2luWTsKKyAgICBmbG9hdCBt
X3ZlcnRpY2FsQWR2YW5jZVk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgorI2VuZGlmIC8vIFNWR0ZvbnREYXRhX2gKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmNwcAkocmV2aXNpb24gMjk2NzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgotCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNl
U3JjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgpAQCAtMTQ0LDEwMiArMTQ0LDE0
OCBAQCB1bnNpZ25lZCBTVkdGb250RmFjZUVsZW1lbnQ6OnVuaXRzUGVyRW0oCiAgICAgcmV0dXJu
IDEwMDA7CiB9CiAKLVN0cmluZyBTVkdGb250RmFjZUVsZW1lbnQ6OmZvbnRGYW1pbHkoKSBjb25z
dAoraW50IFNWR0ZvbnRGYWNlRWxlbWVudDo6eEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlWYWx1ZShDU1NfUFJPUF9GT05UX0ZBTUlM
WSk7CisgICAgaWYgKGhhc0F0dHJpYnV0ZSh4X2hlaWdodEF0dHIpKQorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihjZWlsZihnZXRBdHRyaWJ1dGUoeF9oZWlnaHRBdHRyKS50b0Zsb2F0
KCkpKTsKKworICAgIHJldHVybiAwOwogfQogCi1TaW1wbGVGb250RGF0YSogU1ZHRm9udEZhY2VF
bGVtZW50OjpjcmVhdGVGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKK2Zsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbE9yaWdpblgo
KSBjb25zdAogewotICAgIC8vIFdlIG9ubHkgZXhwZWN0IHRvIGhhdmUgdGhpcyBtZXRob2QgY2Fs
bGVkIGJ5IGEgcGFyZW50IGZvbnQgZWxlbWVudAotICAgIEFTU0VSVChwYXJlbnROb2RlKCkpOwot
ICAgIEFTU0VSVChwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoZm9udFRhZykpOwotICAgIFNWR0Zv
bnRFbGVtZW50KiBmb250RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZvbnRFbGVtZW50Kj4ocGFy
ZW50Tm9kZSgpKTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGNhY2hlZFBsYXRmb3JtRGF0YSA9
IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwot
ICAgIGlmICghY2FjaGVkUGxhdGZvcm1EYXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIE93
blB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGEobmV3IFNpbXBsZUZvbnREYXRhKCpjYWNoZWRQ
bGF0Zm9ybURhdGEpKTsKLQotICAgIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IG5ldyBTVkdG
b250RGF0YShjb25zdF9jYXN0PFNWR0ZvbnRGYWNlRWxlbWVudCo+KHRoaXMpKTsKLSAgICBmb250
RGF0YS0+bV9zdmdGb250RGF0YS5zZXQoc3ZnRm9udERhdGEpOwotCi0gICAgZm9udERhdGEtPm1f
eEhlaWdodCA9IGZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoeF9oZWlnaHRBdHRyKS50b0Zsb2F0
KCk7Ci0gICAgZm9udERhdGEtPm1fdW5pdHNQZXJFbSA9IHVuaXRzUGVyRW0oKTsKKyAgICBpZiAo
IW1fZm9udEVsZW1lbnQpCisgICAgICAgIHJldHVybiAwLjBmOwogCiAgICAgLy8gU3BlYzogVGhl
IFgtY29vcmRpbmF0ZSBpbiB0aGUgZm9udCBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgb3JpZ2lu
IG9mIGEgZ2x5cGggdG8gYmUgdXNlZCB3aGVuCiAgICAgLy8gZHJhd2luZyBob3Jpem9udGFsbHkg
b3JpZW50ZWQgdGV4dC4gKE5vdGUgdGhhdCB0aGUgb3JpZ2luIGFwcGxpZXMgdG8gYWxsIGdseXBo
cyBpbiB0aGUgZm9udC4pCiAgICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVk
LCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAiIHdlcmUgc3BlY2lmaWVkLgotICAg
IGlmIChmb250RWxlbWVudC0+aGFzQXR0cmlidXRlKGhvcml6X29yaWdpbl94QXR0cikpCi0gICAg
ICAgIHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsT3JpZ2luWCA9IGZvbnRFbGVtZW50LT5nZXRBdHRy
aWJ1dGUoaG9yaXpfb3JpZ2luX3hBdHRyKS50b0Zsb2F0KCk7CisgICAgaWYgKG1fZm9udEVsZW1l
bnQtPmhhc0F0dHJpYnV0ZShob3Jpel9vcmlnaW5feEF0dHIpKQorICAgICAgICByZXR1cm4gbV9m
b250RWxlbWVudC0+Z2V0QXR0cmlidXRlKGhvcml6X29yaWdpbl94QXR0cikudG9GbG9hdCgpOwor
CisgICAgcmV0dXJuIDAuMGY7Cit9CisKK2Zsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpv
bnRhbE9yaWdpblkoKSBjb25zdAoreworICAgIGlmICghbV9mb250RWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIDAuMGY7CiAKICAgICAvLyBTcGVjOiBUaGUgWS1jb29yZGluYXRlIGluIHRoZSBmb250
IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBvcmlnaW4gb2YgYSBnbHlwaCB0byBiZSB1c2VkIHdo
ZW4KICAgICAvLyBkcmF3aW5nIGhvcml6b250YWxseSBvcmllbnRlZCB0ZXh0LiAoTm90ZSB0aGF0
IHRoZSBvcmlnaW4gYXBwbGllcyB0byBhbGwgZ2x5cGhzIGluIHRoZSBmb250LikKICAgICAvLyBJ
ZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2
YWx1ZSBvZiAiMCIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKGZvbnRFbGVtZW50LT5oYXNBdHRy
aWJ1dGUoaG9yaXpfb3JpZ2luX3lBdHRyKSkKLSAgICAgICAgc3ZnRm9udERhdGEtPmhvcml6b250
YWxPcmlnaW5ZID0gZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZShob3Jpel9vcmlnaW5feUF0dHIp
LnRvRmxvYXQoKTsKKyAgICBpZiAobV9mb250RWxlbWVudC0+aGFzQXR0cmlidXRlKGhvcml6X29y
aWdpbl95QXR0cikpCisgICAgICAgIHJldHVybiBtX2ZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUo
aG9yaXpfb3JpZ2luX3lBdHRyKS50b0Zsb2F0KCk7CisKKyAgICByZXR1cm4gMC4wZjsKK30KKwor
ZmxvYXQgU1ZHRm9udEZhY2VFbGVtZW50Ojpob3Jpem9udGFsQWR2YW5jZVgoKSBjb25zdAorewor
ICAgIGlmICghbV9mb250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAgICAvLyBT
cGVjOiBUaGUgZGVmYXVsdCBob3Jpem9udGFsIGFkdmFuY2UgYWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5
cGggaW4gaG9yaXpvbnRhbCBvcmllbnRhdGlvbi4gR2x5cGgKICAgICAvLyB3aWR0aHMgYXJlIHJl
cXVpcmVkIHRvIGJlIG5vbi1uZWdhdGl2ZSwgZXZlbiBpZiB0aGUgZ2x5cGggaXMgdHlwaWNhbGx5
IHJlbmRlcmVkIHJpZ2h0LXRvLWxlZnQsCiAgICAgLy8gYXMgaW4gSGVicmV3IGFuZCBBcmFiaWMg
c2NyaXB0cy4KLSAgICBpZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZShob3Jpel9hZHZfeEF0
dHIpKSB7Ci0gICAgICAgIGZsb2F0IGFkdmFuY2UgPSBmb250RWxlbWVudC0+Z2V0QXR0cmlidXRl
KGhvcml6X2Fkdl94QXR0cikudG9GbG9hdCgpOworICAgIGlmIChtX2ZvbnRFbGVtZW50LT5oYXNB
dHRyaWJ1dGUoaG9yaXpfYWR2X3hBdHRyKSkKKyAgICAgICAgcmV0dXJuIG1fZm9udEVsZW1lbnQt
PmdldEF0dHJpYnV0ZShob3Jpel9hZHZfeEF0dHIpLnRvRmxvYXQoKTsKIAotICAgICAgICAvLyBU
T0RPOiBSZXBvcnQgZXJyb3JzLCBpbnN0ZWFkIG9mIHNpbGVudCBpZ25vcmU/Ci0gICAgICAgIGlm
IChhZHZhbmNlID49IDAuMCkKLSAgICAgICAgICAgIHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2
YW5jZVggPSBhZHZhbmNlOwotICAgIH0KKyAgICByZXR1cm4gMC4wZjsKK30KKworZmxvYXQgU1ZH
Rm9udEZhY2VFbGVtZW50Ojp2ZXJ0aWNhbE9yaWdpblgoKSBjb25zdAoreworICAgIGlmICghbV9m
b250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAgICAvLyBTcGVjOiBUaGUgZGVm
YXVsdCBYLWNvb3JkaW5hdGUgaW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9y
aWdpbiBvZiBhIGdseXBoIHRvIGJlIHVzZWQgd2hlbgogICAgIC8vIGRyYXdpbmcgdmVydGljYWxs
eSBvcmllbnRlZCB0ZXh0LiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBl
ZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZQogICAgIC8vIHdlcmUgc2V0IHRvIGhhbGYgb2Yg
dGhlIGVmZmVjdGl2ZSB2YWx1ZSBvZiBhdHRyaWJ1dGUgaG9yaXotYWR2LXguCi0gICAgaWYgKGZv
bnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feEF0dHIpKQotICAgICAgICBzdmdG
b250RGF0YS0+dmVydGljYWxPcmlnaW5YID0gZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0
X29yaWdpbl94QXR0cikudG9GbG9hdCgpOwotICAgIGVsc2UKLSAgICAgICAgc3ZnRm9udERhdGEt
PnZlcnRpY2FsT3JpZ2luWCA9IHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2YW5jZVggLyAyLjBm
OworICAgIGlmIChtX2ZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feEF0dHIp
KQorICAgICAgICByZXR1cm4gbV9mb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRfb3JpZ2lu
X3hBdHRyKS50b0Zsb2F0KCk7CisKKyAgICByZXR1cm4gaG9yaXpvbnRhbEFkdmFuY2VYKCkgLyAy
LjBmOworfQorCitmbG9hdCBTVkdGb250RmFjZUVsZW1lbnQ6OnZlcnRpY2FsT3JpZ2luWSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2ZvbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gMC4wZjsKIAog
ICAgIC8vIFNwZWM6IFRoZSBkZWZhdWx0IFktY29vcmRpbmF0ZSBpbiB0aGUgZm9udCBjb29yZGlu
YXRlIHN5c3RlbSBvZiB0aGUgb3JpZ2luIG9mIGEgZ2x5cGggdG8gYmUgdXNlZCB3aGVuCiAgICAg
Ly8gZHJhd2luZyB2ZXJ0aWNhbGx5IG9yaWVudGVkIHRleHQuIElmIHRoZSBhdHRyaWJ1dGUgaXMg
bm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiB0aGUgYXR0cmlidXRlCiAgICAgLy8g
d2VyZSBzZXQgdG8gdGhlIHBvc2l0aW9uIHNwZWNpZmllZCBieSB0aGUgZm9udCdzIGFzY2VudCBh
dHRyaWJ1dGUuICAgICAgICAgICAgIAotICAgIGlmIChmb250RWxlbWVudC0+aGFzQXR0cmlidXRl
KHZlcnRfb3JpZ2luX3lBdHRyKSkKLSAgICAgICAgc3ZnRm9udERhdGEtPnZlcnRpY2FsT3JpZ2lu
WSA9IGZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpLnRvRmxvYXQo
KTsKLSAgICBlbHNlCi0gICAgICAgIHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbE9yaWdpblkgPSBmb250
RWxlbWVudC0+Z2V0QXR0cmlidXRlKGFzY2VudEF0dHIpLnRvRmxvYXQoKTsKKyAgICBpZiAobV9m
b250RWxlbWVudC0+aGFzQXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKSkKKyAgICAgICAgcmV0
dXJuIG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikudG9GbG9h
dCgpOworCisgICAgaWYgKG1fZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZShhc2NlbnRBdHRyKSkK
KyAgICAgICAgcmV0dXJuIG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZShhc2NlbnRBdHRyKS50
b0Zsb2F0KCk7CisKKyAgICByZXR1cm4gMC4wZjsKK30KKworZmxvYXQgU1ZHRm9udEZhY2VFbGVt
ZW50Ojp2ZXJ0aWNhbEFkdmFuY2VZKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZm9udEVsZW1lbnQp
CisgICAgICAgIHJldHVybiAwLjBmOwogCiAgICAgLy8gU3BlYzogVGhlIGRlZmF1bHQgdmVydGlj
YWwgYWR2YW5jZSBhZnRlciByZW5kZXJpbmcgYSBnbHlwaCBpbiB2ZXJ0aWNhbCBvcmllbnRhdGlv
bi4gSWYgdGhlIGF0dHJpYnV0ZSBpcwogICAgIC8vIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3Qg
aXMgYXMgaWYgYSB2YWx1ZSBlcXVpdmFsZW50IG9mIG9uZSBlbSB3ZXJlIHNwZWNpZmllZCAoc2Vl
IHVuaXRzLXBlci1lbSkuICAgICAgICAgICAgICAgICAgICAKLSAgICBpZiAoZm9udEVsZW1lbnQt
Pmhhc0F0dHJpYnV0ZSh2ZXJ0X2Fkdl95QXR0cikpCi0gICAgICAgIHN2Z0ZvbnREYXRhLT52ZXJ0
aWNhbEFkdmFuY2VZID0gZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X2Fkdl95QXR0ciku
dG9GbG9hdCgpOwotICAgIGVsc2UKLSAgICAgICAgc3ZnRm9udERhdGEtPnZlcnRpY2FsQWR2YW5j
ZVkgPSAxLjBmOworICAgIGlmIChtX2ZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVydF9hZHZf
eUF0dHIpKQorICAgICAgICByZXR1cm4gbV9mb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRf
YWR2X3lBdHRyKS50b0Zsb2F0KCk7CisKKyAgICByZXR1cm4gMS4wZjsKK30KKworaW50IFNWR0Zv
bnRGYWNlRWxlbWVudDo6YXNjZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZm9udEVsZW1lbnQp
CisgICAgICAgIHJldHVybiAwLjBmOwogCiAgICAgLy8gU3BlYzogU2FtZSBzeW50YXggYW5kIHNl
bWFudGljcyBhcyB0aGUgJ2FzY2VudCcgZGVzY3JpcHRvciB3aXRoaW4gYW4gQGZvbnQtZmFjZSBy
dWxlLiBUaGUgbWF4aW11bQogICAgIC8vIHVuYWNjZW50ZWQgaGVpZ2h0IG9mIHRoZSBmb250IHdp
dGhpbiB0aGUgZm9udCBjb29yZGluYXRlIHN5c3RlbS4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qg
c3BlY2lmaWVkLAogICAgIC8vIHRoZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJl
IHNldCB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bml0cy1wZXItZW0gdmFsdWUgYW5k
IHRoZQogICAgIC8vIHZlcnQtb3JpZ2luLXkgdmFsdWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZv
bnQuCiAgICAgaWYgKGhhc0F0dHJpYnV0ZShhc2NlbnRBdHRyKSkKLSAgICAgICAgZm9udERhdGEt
Pm1fYXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihnZXRBdHRyaWJ1dGUoYXNjZW50QXR0
cikudG9GbG9hdCgpKSk7Ci0gICAgZWxzZSBpZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2
ZXJ0X29yaWdpbl95QXR0cikpCi0gICAgICAgIGZvbnREYXRhLT5tX2FzY2VudCA9IGZvbnREYXRh
LT5tX3VuaXRzUGVyRW0gLSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGZvbnRFbGVtZW50LT5nZXRB
dHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpLnRvRmxvYXQoKSkpOwotICAgIGVsc2UgLy8gTWF0
Y2ggQmF0aWsncyBkZWZhdWx0IHZhbHVlLgotICAgICAgICBmb250RGF0YS0+bV9hc2NlbnQgPSBm
b250RGF0YS0+bV91bml0c1BlckVtICogMC44ZjsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4oY2VpbGYoZ2V0QXR0cmlidXRlKGFzY2VudEF0dHIpLnRvRmxvYXQoKSkpOworCisgICAg
aWYgKG1fZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikpCisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHVuaXRzUGVyRW0oKSkgLSBzdGF0aWNfY2FzdDxp
bnQ+KGNlaWxmKG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0ciku
dG9GbG9hdCgpKSk7CisKKyAgICAvLyBNYXRjaCBCYXRpa3MgZGVmYXVsdCB2YWx1ZQorICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHVuaXRzUGVyRW0oKSAqIDAuOGYpKTsKK30KKwor
aW50IFNWR0ZvbnRGYWNlRWxlbWVudDo6ZGVzY2VudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Zv
bnRFbGVtZW50KQorICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgIC8vIFNwZWM6IFNhbWUgc3lu
dGF4IGFuZCBzZW1hbnRpY3MgYXMgdGhlICdkZXNjZW50JyBkZXNjcmlwdG9yIHdpdGhpbiBhbiBA
Zm9udC1mYWNlIHJ1bGUuIFRoZSBtYXhpbXVtCiAgICAgLy8gdW5hY2NlbnRlZCBkZXB0aCBvZiB0
aGUgZm9udCB3aXRoaW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0uIElmIHRoZSBhdHRyaWJ1
dGUgaXMgbm90IHNwZWNpZmllZCwKICAgICAvLyB0aGUgZWZmZWN0IGlzIGFzIGlmIHRoZSBhdHRy
aWJ1dGUgd2VyZSBzZXQgdG8gdGhlIHZlcnQtb3JpZ2luLXkgdmFsdWUgZm9yIHRoZSBjb3JyZXNw
b25kaW5nIGZvbnQuCiAgICAgaWYgKGhhc0F0dHJpYnV0ZShkZXNjZW50QXR0cikpIHsKLSAgICAg
ICAgZm9udERhdGEtPm1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoZ2V0QXR0cmli
dXRlKGRlc2NlbnRBdHRyKS50b0Zsb2F0KCkpKTsKLQogICAgICAgICAvLyBTb21lIHRlc3RjYXNl
cyB1c2UgYSBuZWdhdGl2ZSBkZXNjZW50IHZhbHVlLCB3aGVyZSBhIHBvc2l0aXZlIHdhcyBtZWFu
dCB0byBiZSB1c2VkIDooCi0gICAgICAgIGlmIChmb250RGF0YS0+bV9kZXNjZW50IDwgMCkKLSAg
ICAgICAgICAgIGZvbnREYXRhLT5tX2Rlc2NlbnQgPSAtZm9udERhdGEtPm1fZGVzY2VudDsKLSAg
ICB9IGVsc2UgaWYgKGZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIp
KQotICAgICAgICBmb250RGF0YS0+bV9kZXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihm
b250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKS50b0Zsb2F0KCkpKTsK
LSAgICBlbHNlIC8vIE1hdGNoIEJhdGlrJ3MgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgZm9udERh
dGEtPm1fZGVzY2VudCA9IGZvbnREYXRhLT5tX3VuaXRzUGVyRW0gKiAwLjJmOworICAgICAgICBp
bnQgZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoZ2V0QXR0cmlidXRlKGRlc2NlbnRB
dHRyKS50b0Zsb2F0KCkpKTsKKyAgICAgICAgcmV0dXJuIGRlc2NlbnQgPCAwID8gLWRlc2NlbnQg
OiBkZXNjZW50OworICAgIH0KIAotICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CisgICAg
aWYgKG1fZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikpCisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG1fZm9udEVsZW1lbnQtPmdldEF0dHJp
YnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikudG9GbG9hdCgpKSk7CisKKyAgICAvLyBNYXRjaCBCYXRp
a3MgZGVmYXVsdCB2YWx1ZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHVuaXRz
UGVyRW0oKSAqIDAuMmYpKTsKK30KKworU3RyaW5nIFNWR0ZvbnRGYWNlRWxlbWVudDo6Zm9udEZh
bWlseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVy
dHlWYWx1ZShDU1NfUFJPUF9GT05UX0ZBTUlMWSk7Cit9CisKK1NWR0ZvbnRFbGVtZW50KiBTVkdG
b250RmFjZUVsZW1lbnQ6OmFzc29jaWF0ZWRGb250RWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZm9udEVsZW1lbnQuZ2V0KCk7CiB9CiAKIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50Ojpy
ZWJ1aWxkRm9udEZhY2UoKQpAQCAtMjUyLDcgKzI5OCw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVt
ZW50OjpyZWJ1aWxkRm9udEZhY2UKICAgICBpZiAocGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUo
KS0+aGFzVGFnTmFtZShmb250VGFnKSkgewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBs
aXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKIAotICAgICAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNW
YWx1ZT4gc3JjID0gbmV3IENTU0ZvbnRGYWNlU3JjVmFsdWUoU3RyaW5nSW1wbDo6ZW1wdHkoKSwg
dHJ1ZSAvKiBpc0xvY2FsICovKTsKKyAgICAgICAgUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+
IHNyYyA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKGZvbnRGYW1pbHkoKSwgdHJ1ZSAvKiBpc0xv
Y2FsICovKTsKICAgICAgICAgc3JjLT5zZXRTVkdGb250RmFjZUVsZW1lbnQodGhpcyk7CiAgICAg
ICAgIGxpc3QtPmFwcGVuZChzcmMpOwogCkBAIC0yNjAsNiArMzA2LDcgQEAgdm9pZCBTVkdGb250
RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZQogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSog
c3JjUHJvcGVydHlSZWYgPSAmc3JjUHJvcGVydHk7CiAgICAgICAgIG1fc3R5bGVEZWNsYXJhdGlv
bi0+YWRkUGFyc2VkUHJvcGVydGllcygmc3JjUHJvcGVydHlSZWYsIDEpOwogCisgICAgICAgIG1f
Zm9udEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KHBhcmVudE5vZGUoKSk7
CiAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTMwNCwyMCArMzUxLDYgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6
OmNoaWxkcmVuQ2hhbmdlZAogICAgIHJlYnVpbGRGb250RmFjZSgpOwogfQogCi1TVkdGb250RWxl
bWVudCogU1ZHRm9udEZhY2VFbGVtZW50Ojphc3NvY2lhdGVkRm9udEVsZW1lbnQoKSBjb25zdAot
ewotICAgIGlmIChOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKHBh
cmVudC0+aGFzVGFnTmFtZShmb250VGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTVkdGb250RWxlbWVudCo+KHBhcmVudCk7Ci0gICAgICAgIGVsc2UgaWYgKHBhcmVudC0+aGFz
VGFnTmFtZShkZWZzVGFnKSkgewotICAgICAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBleHRlcm5h
bCBTVkcgZm9udHMhCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiAwOwotfQotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHX0ZPTlRTKQpJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmgJKHJldmlzaW9uIDI5Njc2KQorKysgV2ViQ29yZS9z
dmcvU1ZHRm9udEZhY2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ1NTRm9udEZhY2VSdWxlOwogICAgIGNs
YXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotICAgIGNsYXNzIEZvbnREZXNjcmlwdGlv
bjsKLSAgICBjbGFzcyBTaW1wbGVGb250RGF0YTsKICAgICBjbGFzcyBTVkdGb250RWxlbWVudDsK
IAogICAgIGNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50IHsKQEAg
LTQzLDE4ICs0MSwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogCiAgICAgICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0o
KSBjb25zdDsKKyAgICAgICAgaW50IHhIZWlnaHQoKSBjb25zdDsKKyAgICAgICAgZmxvYXQgaG9y
aXpvbnRhbE9yaWdpblgoKSBjb25zdDsKKyAgICAgICAgZmxvYXQgaG9yaXpvbnRhbE9yaWdpblko
KSBjb25zdDsKKyAgICAgICAgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2VYKCkgY29uc3Q7CisgICAg
ICAgIGZsb2F0IHZlcnRpY2FsT3JpZ2luWCgpIGNvbnN0OworICAgICAgICBmbG9hdCB2ZXJ0aWNh
bE9yaWdpblkoKSBjb25zdDsKKyAgICAgICAgZmxvYXQgdmVydGljYWxBZHZhbmNlWSgpIGNvbnN0
OworICAgICAgICBpbnQgYXNjZW50KCkgY29uc3Q7CisgICAgICAgIGludCBkZXNjZW50KCkgY29u
c3Q7CiAgICAgICAgIFN0cmluZyBmb250RmFtaWx5KCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBy
ZWJ1aWxkRm9udEZhY2UoKTsKLSAgICAgICAgU2ltcGxlRm9udERhdGEqIGNyZWF0ZUZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotCi0gICAgICAgIC8vIElmIG91ciBwYXJl
bnQgZWxlbWVudCBpcyA8Zm9udD4sIGl0IHdpbGwgYmUgcmV0dXJuZWQuICh0aGlzIGlzIHRoZSBj
YXNlIGZvciBhIFNWRyBGb250IGRlc2NyaWJlZCBpbiB0aGUgc2FtZSBkb2N1bWVudCkKLSAgICAg
ICAgLy8gT3RoZXJ3aGlzZSBpdCB3aWxsIHJldHVybiB0aGUgPGZvbnQ+IGVsZW1lbnQgdGhhdCBp
cyByZWZlcmVuY2VkIGJ5IHRoZSBmaXJzdCB2YWxpZCA8Zm9udC1mYWNlLXNyYz4gZWxlbWVudC4K
ICAgICAgICAgU1ZHRm9udEVsZW1lbnQqIGFzc29jaWF0ZWRGb250RWxlbWVudCgpIGNvbnN0Owor
ICAgICAgICB2b2lkIHJlYnVpbGRGb250RmFjZSgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
UmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4gbV9mb250RmFjZVJ1bGU7CiAgICAgICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZURlY2xhcmF0aW9uOworCisgICAgICAg
IFJlZlB0cjxTVkdGb250RWxlbWVudD4gbV9mb250RWxlbWVudDsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAJKHJldmlzaW9uIDI5
Njc2KQorKysgV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdGb250RmFjZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGb250RGF0YS5oIgogI2luY2x1
ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiU2ltcGxlRm9udERhdGEuaCIKQEAgLTkzLDcxICs5NCw3NyBAQCBzdGF0aWMgaW5saW5lIFBh
dGggcGFyc2VQYXRoRGF0YShjb25zdCBBCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBT
VkdHbHlwaEVsZW1lbnQ6OmluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEpCit2b2lkIFNWR0ds
eXBoRWxlbWVudDo6aW5oZXJpdFVuc3BlY2lmaWVkQXR0cmlidXRlcyhTVkdHbHlwaElkZW50aWZp
ZXImIGlkZW50aWZpZXIsIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSkKIHsKICAgICBp
ZiAoaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVggPT0gU1ZHR2x5cGhJZGVudGlmaWVyOjpp
bmhlcml0ZWRWYWx1ZSgpKQotICAgICAgICBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCA9
IHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2YW5jZVg7CisgICAgICAgIGlkZW50aWZpZXIuaG9y
aXpvbnRhbEFkdmFuY2VYID0gc3ZnRm9udERhdGEtPmhvcml6b250YWxBZHZhbmNlWCgpOwogCiAg
ICAgaWYgKGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YID09IFNWR0dseXBoSWRlbnRpZmllcjo6
aW5oZXJpdGVkVmFsdWUoKSkKLSAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblggPSBz
dmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5YOworICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2Fs
T3JpZ2luWCA9IHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbE9yaWdpblgoKTsKIAogICAgIGlmIChpZGVu
dGlmaWVyLnZlcnRpY2FsT3JpZ2luWSA9PSBTVkdHbHlwaElkZW50aWZpZXI6OmluaGVyaXRlZFZh
bHVlKCkpCi0gICAgICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5ZID0gc3ZnRm9udERhdGEt
PnZlcnRpY2FsT3JpZ2luWTsKKyAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkgPSBz
dmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5ZKCk7CiAKICAgICBpZiAoaWRlbnRpZmllci52ZXJ0
aWNhbEFkdmFuY2VZID09IFNWR0dseXBoSWRlbnRpZmllcjo6aW5oZXJpdGVkVmFsdWUoKSkKLSAg
ICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID0gc3ZnRm9udERhdGEtPnZlcnRpY2Fs
QWR2YW5jZVk7CisgICAgICAgIGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSA9IHN2Z0ZvbnRE
YXRhLT52ZXJ0aWNhbEFkdmFuY2VZKCk7CiB9CiAKLVNWR0dseXBoSWRlbnRpZmllciBTVkdHbHlw
aEVsZW1lbnQ6OmJ1aWxkR2x5cGhJZGVudGlmaWVyKCkgY29uc3QKK1NWR0dseXBoSWRlbnRpZmll
ciBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2VuZXJpY0dseXBoSWRlbnRpZmllcihjb25zdCBTVkdF
bGVtZW50KiBlbGVtZW50KQogewogICAgIFNWR0dseXBoSWRlbnRpZmllciBpZGVudGlmaWVyOwot
ICAgIGlkZW50aWZpZXIuZ2x5cGhOYW1lID0gZ2V0QXR0cmlidXRlKGdseXBoX25hbWVBdHRyKTsK
LSAgICBpZGVudGlmaWVyLm9yaWVudGF0aW9uID0gcGFyc2VPcmllbnRhdGlvbihnZXRBdHRyaWJ1
dGUob3JpZW50YXRpb25BdHRyKSk7Ci0gICAgaWRlbnRpZmllci5hcmFiaWNGb3JtID0gcGFyc2VB
cmFiaWNGb3JtKGdldEF0dHJpYnV0ZShhcmFiaWNfZm9ybUF0dHIpKTsKLSAgICBpZGVudGlmaWVy
LnBhdGhEYXRhID0gcGFyc2VQYXRoRGF0YShnZXRBdHRyaWJ1dGUoZEF0dHIpKTsKLQotICAgIFN0
cmluZyBsYW5ndWFnZSA9IGdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOwotICAgIGlm
IChsYW5ndWFnZS5pc0VtcHR5KCkpIC8vIFNWRyBkZWZpbmVzIGEgbm9uLXhtbCBwcmVmaXhlZCAi
bGFuZyIgcHJvcGVydCBmb3IgPGdseXBoPiBpdCBzZWVtcy4KLSAgICAgICAgbGFuZ3VhZ2UgPSBn
ZXRBdHRyaWJ1dGUoImxhbmciKTsKLQotICAgIGlkZW50aWZpZXIubGFuZ3VhZ2VzID0gcGFyc2VE
ZWxpbWl0ZWRTdHJpbmcobGFuZ3VhZ2UsICcsJyk7CisgICAgaWRlbnRpZmllci5wYXRoRGF0YSA9
IHBhcnNlUGF0aERhdGEoZWxlbWVudC0+Z2V0QXR0cmlidXRlKGRBdHRyKSk7CiAKICAgICAvLyBT
cGVjOiBUaGUgaG9yaXpvbnRhbCBhZHZhbmNlIGFmdGVyIHJlbmRlcmluZyB0aGUgZ2x5cGggaW4g
aG9yaXpvbnRhbCBvcmllbnRhdGlvbi4KICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBz
cGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0
aGUKICAgICAvLyB2YWx1ZSBvZiB0aGUgZm9udCdzIGhvcml6LWFkdi14IGF0dHJpYnV0ZS4gR2x5
cGggd2lkdGhzIGFyZSByZXF1aXJlZCB0byBiZSBub24tbmVnYXRpdmUsCiAgICAgLy8gZXZlbiBp
ZiB0aGUgZ2x5cGggaXMgdHlwaWNhbGx5IHJlbmRlcmVkIHJpZ2h0LXRvLWxlZnQsIGFzIGluIEhl
YnJldyBhbmQgQXJhYmljIHNjcmlwdHMuCi0gICAgaWYgKGhhc0F0dHJpYnV0ZShob3Jpel9hZHZf
eEF0dHIpKQotICAgICAgICBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCA9IGdldEF0dHJp
YnV0ZShob3Jpel9hZHZfeEF0dHIpLnRvRmxvYXQoKTsKKyAgICBpZiAoZWxlbWVudC0+aGFzQXR0
cmlidXRlKGhvcml6X2Fkdl94QXR0cikpCisgICAgICAgIGlkZW50aWZpZXIuaG9yaXpvbnRhbEFk
dmFuY2VYID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGhvcml6X2Fkdl94QXR0cikudG9GbG9hdCgp
OwogICAgIGVsc2UKICAgICAgICAgaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVggPSBTVkdH
bHlwaElkZW50aWZpZXI6OmluaGVyaXRlZFZhbHVlKCk7CiAKICAgICAvLyBTcGVjOiBUaGUgWC1j
b29yZGluYXRlIGluIHRoZSBmb250IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBvcmlnaW4gb2Yg
dGhlIGdseXBoIHRvIGJlCiAgICAgLy8gdXNlZCB3aGVuIGRyYXdpbmcgdmVydGljYWxseSBvcmll
bnRlZCB0ZXh0LiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QK
ICAgICAvLyBpcyBhcyBpZiB0aGUgYXR0cmlidXRlIHdlcmUgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0
aGUgZm9udCdzIHZlcnQtb3JpZ2luLXggYXR0cmlidXRlLgotICAgIGlmIChoYXNBdHRyaWJ1dGUo
dmVydF9vcmlnaW5feEF0dHIpKQotICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9
IGdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl94QXR0cikudG9GbG9hdCgpOworICAgIGlmIChlbGVt
ZW50LT5oYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feEF0dHIpKQorICAgICAgICBpZGVudGlmaWVy
LnZlcnRpY2FsT3JpZ2luWCA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl94QXR0
cikudG9GbG9hdCgpOwogICAgIGVsc2UKICAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdp
blggPSBTVkdHbHlwaElkZW50aWZpZXI6OmluaGVyaXRlZFZhbHVlKCk7CiAKICAgICAvLyBTcGVj
OiBUaGUgWS1jb29yZGluYXRlIGluIHRoZSBmb250IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBv
cmlnaW4gb2YgYSBnbHlwaCB0byBiZQogICAgIC8vIHVzZWQgd2hlbiBkcmF3aW5nIHZlcnRpY2Fs
bHkgb3JpZW50ZWQgdGV4dC4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUg
ZWZmZWN0CiAgICAgLy8gaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUgdmFs
dWUgb2YgdGhlIGZvbnQncyB2ZXJ0LW9yaWdpbi15IGF0dHJpYnV0ZS4KLSAgICBpZiAoaGFzQXR0
cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKSkKLSAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbE9y
aWdpblkgPSBnZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpLnRvRmxvYXQoKTsKKyAgICBp
ZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKSkKKyAgICAgICAgaWRl
bnRpZmllci52ZXJ0aWNhbE9yaWdpblkgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUodmVydF9vcmln
aW5feUF0dHIpLnRvRmxvYXQoKTsKICAgICBlbHNlCiAgICAgICAgIGlkZW50aWZpZXIudmVydGlj
YWxPcmlnaW5ZID0gU1ZHR2x5cGhJZGVudGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpOwogCiAgICAg
Ly8gU3BlYzogVGhlIHZlcnRpY2FsIGFkdmFuY2UgYWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5cGggaW4g
dmVydGljYWwgb3JpZW50YXRpb24uCiAgICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3Bl
Y2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhl
CiAgICAgLy8gdmFsdWUgb2YgdGhlIGZvbnQncyB2ZXJ0LWFkdi15IGF0dHJpYnV0ZS4KLSAgICBp
ZiAoaGFzQXR0cmlidXRlKHZlcnRfYWR2X3lBdHRyKSkKLSAgICAgICAgaWRlbnRpZmllci52ZXJ0
aWNhbEFkdmFuY2VZID0gZ2V0QXR0cmlidXRlKHZlcnRfYWR2X3lBdHRyKS50b0Zsb2F0KCk7Cisg
ICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X2Fkdl95QXR0cikpCisgICAgICAgIGlk
ZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X2Fk
dl95QXR0cikudG9GbG9hdCgpOwogICAgIGVsc2UKICAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNh
bEFkdmFuY2VZID0gU1ZHR2x5cGhJZGVudGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpOwogCiAgICAg
cmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKK1NWR0dseXBoSWRlbnRpZmllciBTVkdHbHlwaEVsZW1l
bnQ6OmJ1aWxkR2x5cGhJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBTVkdHbHlwaElkZW50aWZp
ZXIgaWRlbnRpZmllcihidWlsZEdlbmVyaWNHbHlwaElkZW50aWZpZXIodGhpcykpOworICAgIGlk
ZW50aWZpZXIuZ2x5cGhOYW1lID0gZ2V0QXR0cmlidXRlKGdseXBoX25hbWVBdHRyKTsKKyAgICBp
ZGVudGlmaWVyLm9yaWVudGF0aW9uID0gcGFyc2VPcmllbnRhdGlvbihnZXRBdHRyaWJ1dGUob3Jp
ZW50YXRpb25BdHRyKSk7CisgICAgaWRlbnRpZmllci5hcmFiaWNGb3JtID0gcGFyc2VBcmFiaWNG
b3JtKGdldEF0dHJpYnV0ZShhcmFiaWNfZm9ybUF0dHIpKTsKKworICAgIFN0cmluZyBsYW5ndWFn
ZSA9IGdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAgIGlmIChsYW5ndWFnZS5p
c0VtcHR5KCkpIC8vIFNWRyBkZWZpbmVzIGEgbm9uLXhtbCBwcmVmaXhlZCAibGFuZyIgcHJvcGVy
dCBmb3IgPGdseXBoPiBpdCBzZWVtcy4KKyAgICAgICAgbGFuZ3VhZ2UgPSBnZXRBdHRyaWJ1dGUo
ImxhbmciKTsKKworICAgIGlkZW50aWZpZXIubGFuZ3VhZ2VzID0gcGFyc2VEZWxpbWl0ZWRTdHJp
bmcobGFuZ3VhZ2UsICcsJyk7CisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShTVkdfRk9OVFMpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuaAkocmV2aXNp
b24gMjk2NzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBB
dG9taWNTdHJpbmc7CiAgICAgc3RydWN0IFNWR0ZvbnREYXRhOwogCiAgICAgLy8gRGVzY3JpYmUg
YSBTVkcgPGdseXBoPiBlbGVtZW50CkBAIC0xMDYsOSArMTA3LDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUq
KSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIFNWR0dseXBoSWRlbnRpZmllciBidWlsZEds
eXBoSWRlbnRpZmllcigpIGNvbnN0OwotICAgICAgICBzdGF0aWMgdm9pZCBpbmhlcml0VW5zcGVj
aWZpZWRBdHRyaWJ1dGVzKFNWR0dseXBoSWRlbnRpZmllciYsIFNWR0ZvbnREYXRhKik7Ci0gICAg
fTsKIAorICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBTVkdGb250CisgICAgICAg
IHN0YXRpYyB2b2lkIGluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVudGlm
aWVyJiwgY29uc3QgU1ZHRm9udERhdGEqKTsKKworICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
c2hhcmVkIGJldHdlZW4gU1ZHR2x5cGhFbGVtZW50ICYgU1ZHTWlzc2luZ0dseXBoRWxlbWVudAor
ICAgICAgICBzdGF0aWMgU1ZHR2x5cGhJZGVudGlmaWVyIGJ1aWxkR2VuZXJpY0dseXBoSWRlbnRp
Zmllcihjb25zdCBTVkdFbGVtZW50Kik7CisgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdNaXNzaW5nR2x5cGhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdNaXNzaW5nR2x5cGhFbGVtZW50LmNwcAkocmV2aXNpb24g
Mjk2NzYpCisrKyBXZWJDb3JlL3N2Zy9TVkdNaXNzaW5nR2x5cGhFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsMTIgKzIyLDggQEAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogI2luY2x1
ZGUgIlNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwotCiBTVkdN
aXNzaW5nR2x5cGhFbGVtZW50OjpTVkdNaXNzaW5nR2x5cGhFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdTdHlsZWRFbGVtZW50KHRh
Z05hbWUsIGRvYykKIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5Njc4KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMDgtMDEtMjAgIE5p
a29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm4ja2RlLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgbGF5b3V0IHRlc3QgcmVzdWx0
cyBhZnRlciBhZGRpbmcgbWlzc2luZy1nbHlwaCBzdXBwb3J0LgorCisgICAgICAgICogcGxhdGZv
cm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1nbHlwaC0wMy10LWV4cGVjdGVkLmNoZWNrc3Vt
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZ2x5cGgtMDMt
dC1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9m
b250cy1nbHlwaC0wMy10LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3Zn
L1czQy1TVkctMS4xL2ZvbnRzLWdseXBoLTA0LXQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvdGV4dC10ZXh0LTA2LXQtZXhwZWN0ZWQuY2hlY2tz
dW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDYt
dC1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS90
ZXh0LXRleHQtMDYtdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9i
YXRpay90ZXh0L3RleHRFZmZlY3QtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZv
cm0vbWFjL3N2Zy9iYXRpay90ZXh0L3RleHRFZmZlY3QtZXhwZWN0ZWQucG5nOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9zdmcvYmF0aWsvdGV4dC90ZXh0RWZmZWN0LWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2JhdGlrL3RleHQvdGV4dEVmZmVjdDMtZXhwZWN0ZWQu
Y2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9iYXRpay90ZXh0L3RleHRFZmZl
Y3QzLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2JhdGlrL3RleHQv
dGV4dEVmZmVjdDMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvY3Vz
dG9tL2RvbWluYW50LWJhc2VsaW5lLWhhbmdpbmctZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vZG9taW5hbnQtYmFzZWxpbmUtaGFuZ2luZy1leHBl
Y3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vdXNlLW9uLWctY29u
dGFpbmluZy1mb3JlaWduT2JqZWN0LWFuZC1pbWFnZS1leHBlY3RlZC5jaGVja3N1bToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS91c2Utb24tZy1jb250YWluaW5nLWZvcmVpZ25P
YmplY3QtYW5kLWltYWdlLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3Zn
L2hpeGllL21peGVkLzAwOC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvc3ZnL2hpeGllL21peGVkLzAwOC1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL3N2Zy9oaXhpZS9taXhlZC8wMDktZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxh
dGZvcm0vbWFjL3N2Zy9oaXhpZS9taXhlZC8wMDktZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9zdmcvaGl4aWUvdmlld2JveC9wcmVzZXJ2ZUFzcGVjdFJhdGlvLzAwMS1leHBl
Y3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2hpeGllL3ZpZXdib3gv
cHJlc2VydmVBc3BlY3RSYXRpby8wMDEtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9zdmcvdGV4dC90ZXh0LXRleHQtMDYtdC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC10ZXh0LTA2LXQtZXhwZWN0ZWQucG5nOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9zdmcvdGV4dC90ZXh0LXRleHQtMDYtdC1leHBlY3RlZC50eHQ6
CisKIDIwMDgtMDEtMjAgIENvbGxpbiBKYWNrc29uICA8d2Via2l0QGNvbGxpbmphY2tzb24uY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18572</attachid>
            <date>2008-01-20 18:53:37 -0800</date>
            <delta_ts>2008-01-21 14:05:33 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>SVGFontsPatch.diff</filename>
            <type>text/plain</type>
            <size>83341</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTY3OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA5IEBACisyMDA4LTAxLTIwICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4ZXM6IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODgw
IChTVkdDU1NGb250RmFjZSBzaG91bGQgZGllLCBpbnN0ZWFkIGludGVncmF0ZSB3aXRoaW4gdGhl
IEZvbnRDYWNoZS4pCisgICAgICAgIEZpeGVzOiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjc4NCAoSW4tZG9jdW1lbnQgZm9udHMgd29yayBvbmx5IGFzIHRoZSBmaXJz
dCBjaGlsZCB0byBmb250LWZhY2Utc3JjKQorCisgICAgICAgIFByb3BlciBpbnRlZ3JhdGlvbiBv
ZiBTVkcgRm9udHMgd2l0aGluIHRoZSBleGlzdGluZyBjdXN0b20gZm9udCBjb25jZXB0LCByZW1v
dmluZyB0aGUgbmVlZCBmb3IgYSBjdXN0b20gU1ZHQ1NTRm9udEZhY2UuCisgICAgICAgIEludGVn
cmF0ZSB3aXRoaW4gdGhlIENTU0ZvbnRGYWNlU291cmNlIGxvZ2ljIGZvciBjYWNoaW5nIHN1cHBv
cnQsIGFzIHdlbGwgYXMgdGhlIGZyYW1ld29yayBmb3IgZXh0ZXJuYWwgU1ZHIEZvbnRzLgorCisg
ICAgICAgIFByb3BlciBoYW5kbGluZyBvZiBtaXNzaW5nIGdseXBocywgdXNpbmcgPG1pc3Npbmct
Z2x5cGg+IGVsZW1lbnQuIElmIHRoYXQgaXMgbm90IHNwZWNpZmllZCBpbiBhIGZvbnQsIGZhbGxi
YWNrIHRvIG5vbi1TVkcgZm9udCByZW5kZXJpbmcuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6c3ZnRm9u
dEZhY2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpzZXRT
VkdGb250RmFjZUVsZW1lbnQpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmg6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNyY1ZhbHVlOjptX2lzTG9jYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1ZTo6fkNTU0ZvbnRGYWNlU3JjVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1ZTo6c3ZnRm9udEZhY2VFbGVt
ZW50KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKiBjc3MvU1ZH
Q1NTRm9udEZhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9TVkdDU1NGb250RmFjZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6YXNjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRlc2Nl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6bGluZVNwYWNpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6eEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpmb250U2VsZWN0
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Nl
Z21lbnRlZEZvbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRh
Ojppc1NWR0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnRE
YXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmFzY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6ZGVzY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6bGluZVNw
YWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmxpbmVHYXApOgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnhIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmlzU1ZHRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6c3ZnRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpz
aXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YUd0
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpzaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250UGxhdGZvcm1EYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnJlbGF0aXZlQkJveCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEVtVW5p
dFRvUGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6c3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZv
ckZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5XYWxrZXI6OlNWR1RleHRS
dW5XYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFJ1bldhbGtlcjo6d2Fsayk6Cisg
ICAgICAgIChXZWJDb3JlOjpmbG9hdFdpZHRoVXNpbmdTVkdGb250Q2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6ZmxvYXRXaWR0aE1pc3NpbmdHbHlwaENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OmZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmRy
YXdUZXh0TWlzc2luZ0dseXBoQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d1RleHRVc2luZ1NWR0ZvbnQpOgorICAgICAgICAqIHN2Zy9TVkdGb250RGF0YS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OlNWR0ZvbnREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZvbnREYXRhOjp+U1ZHRm9udERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdG
b250RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpmb250RmFj
ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6Omhvcml6b250YWxPcmln
aW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpob3Jpem9udGFsT3JpZ2luWSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RGF0YTo6aG9yaXpvbnRhbEFkdmFuY2VYKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjp2ZXJ0aWNhbE9yaWdpblgpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRm9udERhdGE6OnZlcnRpY2FsT3JpZ2luWSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGb250RGF0YTo6dmVydGljYWxBZHZhbmNlWSk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRG
YWNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnVu
aXRzUGVyRW0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50Ojp4SGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbE9yaWdp
blgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50Ojpob3Jpem9udGFsT3Jp
Z2luWSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6Omhvcml6b250YWxB
ZHZhbmNlWCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnZlcnRpY2Fs
T3JpZ2luWCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnZlcnRpY2Fs
T3JpZ2luWSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnZlcnRpY2Fs
QWR2YW5jZVkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50Ojphc2NlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50OjpkZXNjZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6Zm9udEZhbWlseSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OmFzc29jaWF0ZWRGb250RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6CisgICAg
ICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdHbHlwaEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR2x5cGhFbGVtZW50Ojppbmhlcml0VW5z
cGVjaWZpZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBoRWxlbWVudDo6
YnVpbGRHZW5lcmljR2x5cGhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBo
RWxlbWVudDo6YnVpbGRHbHlwaElkZW50aWZpZXIpOgorICAgICAgICAqIHN2Zy9TVkdHbHlwaEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5jcHA6CisKIDIw
MDgtMDEtMjAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMjk2NzgpCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMzLDcgKzE2MzMsNiBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAgXAogCVdlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAgXAogCVdlYkNvcmUv
Y3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIFwKLQlXZWJDb3JlL2Nzcy9TVkdDU1NGb250RmFj
ZS5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN0eWxlLmNwcCBcCiAJV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgXApAQCAtMTY5NCw2ICsxNjkzLDcgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlXZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMuY3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwIFwKIAlXZWJDb3Jl
L3N2Zy9TVkdGb250LmNwcCBcCisJV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwIFwKIAlXZWJD
b3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAgXAogCVdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxl
bWVudC5jcHAgXAogCVdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRm9ybWF0RWxlbWVudC5jcHAgXApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiAyOTY3OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTEzNjYsNyArMTM2Niw2IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkg
ewogICAgICAgICBjc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBcCiAgICAg
ICAgIGNzcy9TVkdDU1NQYXJzZXIuY3BwIFwKICAgICAgICAgY3NzL1NWR0NTU1N0eWxlU2VsZWN0
b3IuY3BwIFwKLSAgICAgICAgY3NzL1NWR0NTU0ZvbnRGYWNlLmNwcCBcCiAgICAgICAgIHJlbmRl
cmluZy9TVkdSZW5kZXJTdHlsZS5jcHAgXAogICAgICAgICByZW5kZXJpbmcvU1ZHUmVuZGVyU3R5
bGVEZWZzLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTU1ZHTGF6eUV2ZW50TGlzdGVuZXIu
Y3BwIFwKQEAgLTE0MjcsNiArMTQyNiw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9
MSkgewogICAgICAgICBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNw
cCBcCiAgICAgICAgIHN2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwIFwKICAgICAgICAgc3ZnL1NWR0Zv
bnQuY3BwIFwKKyAgICAgICAgc3ZnL1NWR0ZvbnREYXRhLmNwcCBcCiAgICAgICAgIHN2Zy9TVkdG
b250RWxlbWVudC5jcHAgXAogICAgICAgICBzdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcCBcCiAg
ICAgICAgIHN2Zy9TVkdGb250RmFjZUZvcm1hdEVsZW1lbnQuY3BwIFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMjk2NzgpCisrKyBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00ODk0LDEwICs0
ODk0LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5cY3NzXFNWR0NTU0ZvbnRGYWNlLmNwcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8
RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTVkdDU1NQYXJzZXIuY3BwIg0KIAkJCQk+
DQogCQkJPC9GaWxlPg0KQEAgLTg0MDUsNiArODQwMSwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHRm9udERhdGEuY3BwIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3Zn
XFNWR0ZvbnREYXRhLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxzdmdcU1ZHRm9udEVsZW1lbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxl
Pg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyOTY3OCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yODI5LDYgKzI4MjksOCBAQAogCQlCMjIzNjIyRjBDM0FGMDcx
MDAwOENBOUIgLyogRE9NU1ZHVGV4dFBhdGhFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjM2MjJDMEMzQUYwNzEwMDA4Q0E5
QiAvKiBET01TVkdUZXh0UGF0aEVsZW1lbnRJbnRlcm5hbC5oICovOyB9OwogCQlCMjM1NDBGMjBE
MDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMzU0MEYwMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuY3BwICovOyB9OwogCQlCMjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEgLyog
U3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjIzN0M4QTcw
RDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMzdDOEE1MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdG
b250RGF0YS5jcHAgKi87IH07CisJCUIyMzdDOEE4MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIz
N0M4QTYwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmggKi87IH07CiAJCUIyNDA1NTY1
MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI0MDU1NjMwQjVCRTY0
MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUludGVybmFsLmggKi87IH07CiAJCUIy
NDA1NTY2MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNDA1
NTY0MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0SW50ZXJuYWwu
aCAqLzsgfTsKIAkJQjI1NTk5MkMwRDAwRDhCQTAwQkI4MjVDIC8qIENnU3VwcG9ydC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTg5MDBEMDBE
OEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmNwcCAqLzsgfTsKQEAgLTMxNTUsOCArMzE1Nyw2IEBA
CiAJCUIyQ0I5MjY0MEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQjky
NjAwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QubW0gKi87IH07
CiAJCUIyQ0NFQzQ3MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkND
RUM0NTBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwICov
OyB9OwogCQlCMkNDRUM0ODBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250
YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
Q0NFQzQ2MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oICov
OyB9OwotCQlCMkQxOUE0ODBDRUY5REMxMDAwRTAzM0IgLyogU1ZHQ1NTRm9udEZhY2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJEMTlBNDYwQ0VG
OURDMTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmNwcCAqLzsgfTsKLQkJQjJEMTlBNDkwQ0VG
OURDMTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQxOUE0NzBDRUY5REMxMDAwRTAzM0IgLyogU1ZHQ1NT
Rm9udEZhY2UuaCAqLzsgfTsKIAkJQjJEM0ZDOEEwQzIyMTJDQjAwQ0YzNjE4IC8qIEpTU1ZHVHJh
bnNmb3JtTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMkQzRkM4OTBDMjIxMkNCMDBDRjM2MTggLyogSlNTVkdUcmFuc2Zvcm1MaXN0
Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9p
bnQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCAqLzsgfTsKIAkJQjJF
MjdDQTAwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFMjdDOUUwQjBGMkIwOTAwRjE3QzdCIC8q
IEZsb2F0UG9pbnQzRC5oICovOyB9OwpAQCAtNjg5Myw2ICs2ODkzLDggQEAKIAkJQjIyMzYyMkMw
QzNBRjA3MTAwMDhDQTlCIC8qIERPTVNWR1RleHRQYXRoRWxlbWVudEludGVybmFsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdUZXh0UGF0aEVsZW1lbnRJbnRlcm5h
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgy
RkEgLyogU3RyaW5nVHJ1bmNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTdHJpbmdUcnVuY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdUcnVuY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQjIzN0M4QTUwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RGF0YS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyMzdDOEE2MEQzNDREMTEwMDEzRjcw
NyAvKiBTVkdGb250RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
Rm9udERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI0MDU1NjMwQjVCRTY0
MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUludGVybmFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjQwNTU2NDBCNUJFNjQwMDAyQTI4QzAgLyog
RE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0SW50ZXJuYWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4OTAwRDAwRDhCODAwQkI4MjVDIC8qIENnU3Vw
cG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2dTdXBwb3J0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyMjMsOCArNzIyNSw2IEBACiAJ
CUIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVNWR0VsZW1lbnRJ
bnN0YW5jZUxpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQ0NFQzQ1MEM2
Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNDRUM0NjBDNkNBOUYxMDA2QTU0
MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUIyRDE5QTQ2MENFRjlEQzEwMDBFMDMzQiAvKiBTVkdDU1NGb250RmFj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHQ1NTRm9udEZh
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkQxOUE0NzBDRUY5REMxMDAw
RTAzM0IgLyogU1ZHQ1NTRm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR0NTU0ZvbnRGYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRDNG
Qzg5MEMyMjEyQ0IwMENGMzYxOCAvKiBKU1NWR1RyYW5zZm9ybUxpc3RDdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHVHJhbnNmb3JtTGlzdEN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTI3QzlEMEIwRjJCMDkwMEYx
N0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZsb2F0UG9pbnQzRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
RTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTA3NDIsNiArMTA3NDIsOCBAQAogCQkJCUIyMjI3ODdDMEQwMEJGMjAwMDcxQjc4
MiAvKiBTVkdGaXRUb1ZpZXdCb3guaCAqLywKIAkJCQlCMjIyNzg3RDBEMDBCRjIwMDA3MUI3ODIg
LyogU1ZHRml0VG9WaWV3Qm94LmlkbCAqLywKIAkJCQlCMjYyQjgwMzBEMUYzMkQwMDAxNThGMDkg
LyogU1ZHRm9udC5jcHAgKi8sCisJCQkJQjIzN0M4QTUwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0Zv
bnREYXRhLmNwcCAqLywKKwkJCQlCMjM3QzhBNjBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERh
dGEuaCAqLywKIAkJCQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQu
Y3BwICovLAogCQkJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5o
ICovLAogCQkJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwg
Ki8sCkBAIC0xMTk1Miw4ICsxMTk1NCw2IEBACiAJCQkJOTNDQTRDQTIwOURGOTNGQTAwREY4Njc3
IC8qIHN2Zy5jc3MgKi8sCiAJCQkJQjIyMjdCMDAwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8sCiAJCQkJQjIyMjdCMDEwRDAwQkZGMTAwNzFC
NzgyIC8qIFNWR0NTU1BhcnNlci5jcHAgKi8sCi0JCQkJQjJEMTlBNDYwQ0VGOURDMTAwMEUwMzNC
IC8qIFNWR0NTU0ZvbnRGYWNlLmNwcCAqLywKLQkJCQlCMkQxOUE0NzBDRUY5REMxMDAwRTAzM0Ig
LyogU1ZHQ1NTRm9udEZhY2UuaCAqLywKIAkJCQlCMjIyN0IwMjBEMDBCRkYxMDA3MUI3ODIgLyog
U1ZHQ1NTUHJvcGVydHlOYW1lcy5pbiAqLywKIAkJCQlCMjIyN0IwMzBEMDBCRkYxMDA3MUI3ODIg
LyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgKi8sCiAJCQkJQjIyMjdCMDQwRDAwQkZGMTAwNzFC
NzgyIC8qIFNWR0NTU1ZhbHVlS2V5d29yZHMuaW4gKi8sCkBAIC0xNDE3MCw3ICsxNDE3MCw2IEBA
CiAJCQkJQjI3QjI4M0QwQ0VGMEMzNjAwRDM5RDU0IC8qIERPTVNWR0dseXBoRWxlbWVudEludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjdCMjgzRTBDRUYwQzM2MDBEMzlENTQgLyogRE9N
U1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3QjI4NDAwQ0VG
MEMzNjAwRDM5RDU0IC8qIERPTVNWR01pc3NpbmdHbHlwaEVsZW1lbnRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQjJEMTlBNDkwQ0VGOURDMTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EzNzkxNTBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2Nh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMzc5M0YwRDE2NDdFMDAwQjc5M0Q2IC8qIEpT
TG9jYXRpb24ubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMw
QUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE0MTk2LDYgKzE0MTk1LDcg
QEAKIAkJCQkzNzFGNTFBMTBEMjYyRkEwMDBFQ0UwRDUgLyogQ1NTU2VnbWVudGVkRm9udEZhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTM3MUY1M0U5MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmlj
b2RlUmFuZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUJGRTdFMTMwRDMyRkFGNjAwNjZG
NEQyIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjM3QzhB
ODBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
RUVGRkM5MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzOUIzRTRFMEQzQzFFODQwMEI0QTkyQiAvKiBTdHJpbmdCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKQEAgLTE0MjM2LDcgKzE0MjM2LDYgQEAKIAkJMDg2N0Q2OTBGRTg0
MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVj
dDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsK
LQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNTY2FubmVkRm9y
RW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMTU3
NzAsNyArMTU3NjksNiBAQAogCQkJCUIyN0IyODM5MENFRjBDMzYwMEQzOUQ1NCAvKiBET01TVkdG
b250RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyN0IyODNDMENFRjBDMzYwMEQzOUQ1
NCAvKiBET01TVkdHbHlwaEVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMjdCMjgzRjBD
RUYwQzM2MDBEMzlENTQgLyogRE9NU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCUIyRDE5QTQ4MENFRjlEQzEwMDBFMDMzQiAvKiBTVkdDU1NGb250RmFjZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMjYyQjgwNDBEMUYzMkQwMDAxNThGMDkgLyogU1ZHRm9udC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdGQTYyMDBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1p
Y05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0ZBNjJFMEQxRjBFRkYwMERCMjJB
OSAvKiBTdGF0aWNOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE1Nzg3LDYgKzE1Nzg1
LDcgQEAKIAkJCQkzNzFGNTFBMjBEMjYyRkEwMDBFQ0UwRDUgLyogQ1NTU2VnbWVudGVkRm9udEZh
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcxRjUzRUEwRDI3MDRGOTAwRUNFMEQ1IC8qIENT
U1VuaWNvZGVSYW5nZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFCRkU3RTEyMEQzMkZB
RjYwMDY2RjREMiAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlCMjM3QzhBNzBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTRFRUZGQzgwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDI5
Njc4KQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw5ICszMSwxNCBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR2x5
cGhQYWdlVHJlZU5vZGUuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaWYgRU5B
QkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJTVkdGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaCIgCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC04OCwyMSArOTMsNDEgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRG
bwogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmICghbV9m
b250KQotICAgICAgICAvLyBXZSdyZSBsb2NhbC4gIEp1c3QgcmV0dXJuIGEgU2ltcGxlRm9udERh
dGEgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgotICAgICAgICByZXR1cm4gRm9udENhY2hlOjpnZXRD
YWNoZWRGb250RGF0YShGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERl
c2NyaXB0aW9uLCBtX3N0cmluZykpOwotICAgIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAg
aWYgKCFtX2ZvbnQgJiYgIW1fZm9udEZhY2VFbGVtZW50KSB7CisjZWxzZQorICAgIGlmICghbV9m
b250KSB7CisjZW5kaWYKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogZGF0YSA9IEZvbnRDYWNo
ZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIG1fc3RyaW5nKTsK
KyAgICAgICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gRm9udENhY2hlOjpnZXRDYWNoZWRG
b250RGF0YShkYXRhKTsKKworICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4gYSBT
aW1wbGVGb250RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUuCisgICAgICAgIHJldHVybiBmb250
RGF0YTsKKyAgICB9CisKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIG1hcHBpbmcgaW4gb3VyIEZv
bnREYXRhIGNhY2hlLgotICAgIFNpbXBsZUZvbnREYXRhKiBjYWNoZWREYXRhID0gbV9mb250RGF0
YVRhYmxlLmdldChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSk7Ci0gICAgaWYg
KGNhY2hlZERhdGEpCisgICAgaWYgKFNpbXBsZUZvbnREYXRhKiBjYWNoZWREYXRhID0gbV9mb250
RGF0YVRhYmxlLmdldChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkpCiAgICAg
ICAgIHJldHVybiBjYWNoZWREYXRhOwotICAgIAorCisgICAgT3duUHRyPFNpbXBsZUZvbnREYXRh
PiBmb250RGF0YTsKKwogICAgIC8vIElmIHdlIGFyZSBzdGlsbCBsb2FkaW5nLCB0aGVuIHdlIGxl
dCB0aGUgc3lzdGVtIHBpY2sgYSBmb250LgogICAgIGlmIChpc0xvYWRlZCgpKSB7Ci0gICAgICAg
IC8vIENyZWF0ZSBuZXcgRm9udFBsYXRmb3JtRGF0YSBmcm9tIG91ciBDR0ZvbnRSZWYsIHBvaW50
IHNpemUgYW5kIEFUU0ZvbnRSZWYuCi0gICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21G
b250RGF0YSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhY2hlZERhdGEgPSBu
ZXcgU2ltcGxlRm9udERhdGEobV9mb250LT5wbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljKSwgdHJ1ZSwgZmFsc2UpOworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgIGlm
IChtX2ZvbnRGYWNlRWxlbWVudCkKKyAgICAgICAgICAgIGZvbnREYXRhLnNldChuZXcgU2ltcGxl
Rm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNp
emUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgZmFsc2UsIG5ldyBTVkdGb250RGF0YSht
X2ZvbnRGYWNlRWxlbWVudC5nZXQoKSkpKTsKKyNlbmRpZgorCisgICAgICAgIGlmICghZm9udERh
dGEpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2ZvbnQpOworCisgICAgICAgICAgICAvLyBDcmVh
dGUgbmV3IEZvbnRQbGF0Zm9ybURhdGEgZnJvbSBvdXIgQ0dGb250UmVmLCBwb2ludCBzaXplIGFu
ZCBBVFNGb250UmVmLgorICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmVuc3VyZUN1c3RvbUZvbnRE
YXRhKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGZvbnREYXRh
LnNldChuZXcgU2ltcGxlRm9udERhdGEobV9mb250LT5wbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0
YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljKSwgdHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAg
ICAgICAgIC8vIEtpY2sgb2ZmIHRoZSBsb2FkIG5vdy4KICAgICAgICAgbV9mb250LT5iZWdpbkxv
YWRJZk5lZWRlZChmb250U2VsZWN0b3ItPmRvY0xvYWRlcigpKTsKQEAgLTExMCwxMiArMTM1LDEx
IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICAgICAgRm9u
dFBsYXRmb3JtRGF0YSogdGVtcERhdGEgPSBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9y
bURhdGEoZm9udERlc2NyaXB0aW9uLCBtX3N0cmluZyk7CiAgICAgICAgIGlmICghdGVtcERhdGEp
CiAgICAgICAgICAgICB0ZW1wRGF0YSA9IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udChmb250RGVzY3JpcHRpb24pOwotICAgICAgICBjYWNoZWREYXRhID0gbmV3IFNpbXBsZUZv
bnREYXRhKCp0ZW1wRGF0YSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIGZvbnREYXRhLnNldChuZXcg
U2ltcGxlRm9udERhdGEoKnRlbXBEYXRhLCB0cnVlLCB0cnVlKSk7CiAgICAgfQogCi0gICAgbV9m
b250RGF0YVRhYmxlLnNldChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgY2Fj
aGVkRGF0YSk7Ci0KLSAgICByZXR1cm4gY2FjaGVkRGF0YTsKKyAgICBtX2ZvbnREYXRhVGFibGUu
c2V0KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBmb250RGF0YS5nZXQoKSk7
CisgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNvdXJjZS5oCShyZXZpc2lvbiAyOTY3OCkKKysrIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkF0
b21pY1N0cmluZy5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVk
ZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNTYsMTEgKzU3LDIwIEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIHBydW5lVGFibGUoKTsKIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgU1ZHRm9udEZh
Y2VFbGVtZW50KiBzdmdGb250RmFjZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNl
RWxlbWVudC5nZXQoKTsgfQorICAgIHZvaWQgc2V0U1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRG
YWNlRWxlbWVudCogZWxlbWVudCkgeyBtX2ZvbnRGYWNlRWxlbWVudCA9IGVsZW1lbnQ7IH0KKyNl
bmRpZgorCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciBy
ZW1vdGUsIGJ1aWx0LWluIGZvbnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkRm9udCogbV9m
b250OyAvLyBGb3IgcmVtb3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hlZCByZXNvdXJj
ZS4KICAgICBDU1NGb250RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQgZmFjZS4KICAg
ICBIYXNoTWFwPGludCwgU2ltcGxlRm9udERhdGEqPiBtX2ZvbnREYXRhVGFibGU7IC8vIEEgY2Fj
aGUgb2YgRm9udERhdGFzIGZvciB2YXJpb3VzIHBpeGVsIHNpemVzLgorCisjaWYgRU5BQkxFKFNW
R19GT05UUykKKyAgICBSZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50PiBtX2ZvbnRGYWNlRWxlbWVu
dDsKKyNlbmRpZgogfTsKIAogfQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAkocmV2
aXNpb24gMjk2NzgpCisrKyBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDIwICsyOCwxNiBAQAogCiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVudDsKLQog
Y2xhc3MgQ1NTRm9udEZhY2VTcmNWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZSB7CiBwdWJsaWM6CiAg
ICAgQ1NTRm9udEZhY2VTcmNWYWx1ZShjb25zdCBTdHJpbmcmIHJlc291cmNlLCBib29sIGxvY2Fs
KQogICAgIDptX3Jlc291cmNlKHJlc291cmNlKSwgbV9pc0xvY2FsKGxvY2FsKQotI2lmIEVOQUJM
RShTVkdfRk9OVFMpCi0gICAgLCBtX2ZvbnRGYWNlRWxlbWVudCgwKQotI2VuZGlmICAgIAogICAg
IHt9Ci0gICAgdmlydHVhbCB+Q1NTRm9udEZhY2VTcmNWYWx1ZSgpIHt9OworICAgIHZpcnR1YWwg
fkNTU0ZvbnRGYWNlU3JjVmFsdWUoKSB7fQogCiAgICAgY29uc3QgU3RyaW5nJiByZXNvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2U7IH0KICAgICBjb25zdCBTdHJpbmcmIGZvcm1hdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9CkBAIC01Miw3ICs0OCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzU3VwcG9ydGVkRm9ybWF0KCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQotICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250RmFjZUVsZW1lbnQ7IH0KKyAgICBTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0Zv
bnRGYWNlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udEZhY2VFbGVtZW50LmdldCgpOyB9
CiAgICAgdm9pZCBzZXRTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50KiBlbGVt
ZW50KSB7IG1fZm9udEZhY2VFbGVtZW50ID0gZWxlbWVudDsgfQogI2VuZGlmCiAKQEAgLTYyLDgg
KzU4LDkgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9yZXNvdXJjZTsKICAgICBTdHJpbmcgbV9m
b3JtYXQ7CiAgICAgYm9vbCBtX2lzTG9jYWw7CisKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAg
IFNWR0ZvbnRGYWNlRWxlbWVudCogbV9mb250RmFjZUVsZW1lbnQ7CisgICAgUmVmUHRyPFNWR0Zv
bnRGYWNlRWxlbWVudD4gbV9mb250RmFjZUVsZW1lbnQ7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMjk2NzgpCisrKyBXZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMCArNDksMTAgQEAKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAKKy8vIFBv
cnRzIHdoaWNoIGRvbid0IHVzZSBTVkcsIGRvbid0IGdlbmVyYXRlIFNWR05hbWVzLmgKICNpZiBF
TkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR0NTU0ZvbnRGYWNlLmgiCi0jaW5jbHVkZSAiU1ZHRm9u
dEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNlbmRpZgogCkBAIC0xNDEs
NyArMTQxLDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjbwogICAg
IGJvb2wgZm91bmRMb2NhbCA9IGZhbHNlOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBT
VkdGb250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlRWxlbWVudCA9IDA7CisgICAgYm9vbCBmb3Vu
ZExvY2FsU1ZHRm9udCA9IGZhbHNlOwogI2VuZGlmCiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc3Jj
TGVuZ3RoOyBpKyspIHsKQEAgLTE1OSwzMyArMTU5LDI2IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9y
OjphZGRGb250RmFjZVJ1bGUoY28KICAgICAgICAgICAgIFN0cmluZyBmYW1pbHkgPSBpdGVtLT5y
ZXNvdXJjZSgpOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgICAgIC8vIFNWRyBG
b250cyBzdXBwb3J0IChpbnRlcm5hbCBmb250cywgbGl2aW5nIHdpdGhpbiB0aGUgZG9jdW1lbnQp
Ci0gICAgICAgICAgICBzdmdGb250RmFjZUVsZW1lbnQgPSBpdGVtLT5zdmdGb250RmFjZUVsZW1l
bnQoKTsKLSAgICAgICAgICAgIGlmIChzdmdGb250RmFjZUVsZW1lbnQpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSWYgZm9udEZhY2UgaXMgbm90IDAsIGl0IG1lYW5zIHRoYXQgaXQgaXMg
YSBDU1NGb250RmFjZSByYXRoZXIgdGhhbiBhIFNWR0NTU0ZvbnRGYWNlCi0gICAgICAgICAgICAg
ICAgLy8gYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBzdXBwb3J0IFNWRyBmb250LWZhY2UgZWxlbWVu
dHMsIHNvIHdlIGp1c3Qgc2tpcCB0aGlzIGl0ZW0uCi0gICAgICAgICAgICAgICAgaWYgKGZvbnRG
YWNlKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBmb3Vu
ZExvY2FsID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvdW5kTG9jYWxTVkdG
b250ID0gaXRlbS0+c3ZnRm9udEZhY2VFbGVtZW50KCkgIT0gMDsKICNlbmRpZgogCiAgICAgICAg
ICAgICAvLyBUZXN0IHRoZSB2YWxpZGl0eSBvZiB0aGUgbG9jYWwgZm9udCBub3cuICBXZSBkb24n
dCB3YW50IHRvIGluY2x1ZGUgdGhpcyBmb250IGlmIGl0IGRvZXMgbm90IGV4aXN0CiAgICAgICAg
ICAgICAvLyBvbiB0aGUgc3lzdGVtLiAgSWYgaXQgKmRvZXMqIGV4aXN0IG9uIHRoZSBzeXN0ZW0s
IHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBsb29rIGFueSBmdXJ0aGVyLgotICAgICAgICAgICAgaWYg
KEZvbnRDYWNoZTo6Zm9udEV4aXN0cyhmb250RGVzY3JpcHRpb24sIGZhbWlseSkgJiYgIWZvdW5k
TG9jYWwpIHsKKyAgICAgICAgICAgIGlmIChGb250Q2FjaGU6OmZvbnRFeGlzdHMoZm9udERlc2Ny
aXB0aW9uLCBmYW1pbHkpCisjaWYgRU5BQkxFKFNWR19GT05UUykgICAgCisgICAgICAgICAgICAg
ICAgfHwgZm91bmRMb2NhbFNWR0ZvbnQKKyNlbmRpZgorICAgICAgICAgICAgICAgKSB7CiAgICAg
ICAgICAgICAgICAgc291cmNlID0gbmV3IENTU0ZvbnRGYWNlU291cmNlKGZhbWlseSk7CisjaWYg
RU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgICAgICAgICBzb3VyY2UtPnNldFNWR0ZvbnRGYWNl
RWxlbWVudChpdGVtLT5zdmdGb250RmFjZUVsZW1lbnQoKSk7CisjZW5kaWYKICAgICAgICAgICAg
ICAgICBmb3VuZExvY2FsID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghZm9udEZhY2UpIHsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICAgICAg
aWYgKHN2Z0ZvbnRGYWNlRWxlbWVudCkKLSAgICAgICAgICAgICAgICBmb250RmFjZSA9IG5ldyBT
VkdDU1NGb250RmFjZShzdmdGb250RmFjZUVsZW1lbnQpOwotICAgICAgICAgICAgZWxzZQotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgZm9udEZhY2UgPSBuZXcgQ1NTRm9udEZhY2UoKTsKLSAgICAg
ICAgfQorICAgICAgICBpZiAoIWZvbnRGYWNlKQorICAgICAgICAgICAgZm9udEZhY2UgPSBuZXcg
Q1NTRm9udEZhY2UoKTsKIAogICAgICAgICBpZiAoc291cmNlKQogICAgICAgICAgICAgZm9udEZh
Y2UtPmFkZFNvdXJjZShzb3VyY2UpOwpAQCAtMjQwLDcgKzIzMyw3IEBAIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY28KICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAg
ICAvLyBTVkcgYWxsb3dzIHNldmVyYWwgPGZvbnQ+IGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgZm9u
dC1mYW1pbHksIGRpZmZlcmluZyBvbmx5CiAgICAgICAgIC8vIGluIGllLiBmb250LXZhcmlhbnQu
IEJlIHN1cmUgdG8gcGljayB1cCB0aGUgcmlnaHQgb25lIC0gaW4gZ2V0Rm9udERhdGEgYmVsb3cu
Ci0gICAgICAgIGlmIChzdmdGb250RmFjZUVsZW1lbnQgJiYgZm9udERlc2NyaXB0aW9uLnNtYWxs
Q2FwcygpKQorICAgICAgICBpZiAoZm91bmRMb2NhbFNWR0ZvbnQgJiYgZm9udERlc2NyaXB0aW9u
LnNtYWxsQ2FwcygpKQogICAgICAgICAgICAgZmFtaWx5TmFtZSArPSAiLXdlYmtpdC1zdmctc21h
bGwtY2FwcyI7CiAjZW5kaWYKICAgICAgICAgU3RyaW5nIGhhc2ggPSBoYXNoRm9yRm9udChmYW1p
bHlOYW1lLmxvd2VyKCksIGZvbnREZXNjcmlwdGlvbi5ib2xkKCksIGZvbnREZXNjcmlwdGlvbi5p
dGFsaWMoKSk7CkluZGV4OiBXZWJDb3JlL2Nzcy9TVkdDU1NGb250RmFjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9jc3MvU1ZHQ1NTRm9udEZhY2UuY3BwCShyZXZpc2lvbiAyOTY3OCkKKysr
IFdlYkNvcmUvY3NzL1NWR0NTU0ZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoU1ZHX0ZPTlRTKQotI2luY2x1ZGUgIlNWR0NTU0ZvbnRGYWNlLmgiCi0KLSNpbmNsdWRlICJG
b250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNWR0NTU0Zv
bnRGYWNlOjpTVkdDU1NGb250RmFjZShTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlKQotICAg
IDogQ1NTRm9udEZhY2UoKQotICAgICwgbV9mb250RmFjZUVsZW1lbnQoZm9udEZhY2UpCi17Ci0g
ICAgQVNTRVJUKGZvbnRGYWNlKTsKLX0KLQotU1ZHQ1NTRm9udEZhY2U6On5TVkdDU1NGb250RmFj
ZSgpCi17Ci19Ci0KLWJvb2wgU1ZHQ1NTRm9udEZhY2U6OmlzVmFsaWQoKSBjb25zdAotewotICAg
IHJldHVybiB0cnVlOwotfQotICAgIAotdm9pZCBTVkdDU1NGb250RmFjZTo6YWRkU291cmNlKENT
U0ZvbnRGYWNlU291cmNlKikKLXsKLSAgICAvLyBuby1vcAotfQotCi1TaW1wbGVGb250RGF0YSog
U1ZHQ1NTRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQotewot
ICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIFRPRE86IEV2
ZW50dWFsbHkgd2UnbGwgc3dpdGNoIHRvIENTU0ZvbnRGYWNlU291cmNlIGhlcmUsIHdoaWNoIGhh
bmRsZXMgdGhlIGNhY2hpbmcgZm9yIHVzLgotICAgIC8vIChXaGVuIGltcGxlbWVudGluZyBzdXBw
b3J0IGZvciBleHRlcm5hbCBTVkcgRm9udHMgdGhpcyB3ZSdsbCBkZWNpZGUgYWJvdXQgdGhhdC4p
Ci0gICAgaWYgKCFtX2ZvbnREYXRhKQotICAgICAgICBtX2ZvbnREYXRhLnNldChtX2ZvbnRGYWNl
RWxlbWVudC0+Y3JlYXRlRm9udERhdGEoZm9udERlc2NyaXB0aW9uKSk7Ci0KLSAgICByZXR1cm4g
bV9mb250RGF0YS5nZXQoKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvY3NzL1NW
R0NTU0ZvbnRGYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvU1ZHQ1NTRm9udEZhY2Uu
aAkocmV2aXNpb24gMjk2NzgpCisrKyBXZWJDb3JlL2Nzcy9TVkdDU1NGb250RmFjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU1ZH
Q1NTRm9udEZhY2VfaAotI2RlZmluZSBTVkdDU1NGb250RmFjZV9oCi0KLSNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQotI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVudDsKLQot
Y2xhc3MgU1ZHQ1NTRm9udEZhY2UgOiBwdWJsaWMgQ1NTRm9udEZhY2UgewotcHVibGljOgotICAg
IFNWR0NTU0ZvbnRGYWNlKFNWR0ZvbnRGYWNlRWxlbWVudCopOwotICAgIHZpcnR1YWwgflNWR0NT
U0ZvbnRGYWNlKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCBhZGRTb3VyY2UoQ1NTRm9udEZhY2VTb3VyY2UqKTsKLQotICAgIHZpcnR1YWwg
U2ltcGxlRm9udERhdGEqIGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wg
c3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwotCi1wcml2YXRlOgotICAgIFJl
ZlB0cjxTVkdGb250RmFjZUVsZW1lbnQ+IG1fZm9udEZhY2VFbGVtZW50OwotICAgIE93blB0cjxT
aW1wbGVGb250RGF0YT4gbV9mb250RGF0YTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShT
VkdfRk9OVFMpCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2
aXNpb24gMjk2NzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDcsMjIgKzUwNywyMiBAQCBpbnQgRm9udDo6d2lkdGgoY29uc3QgVGV4
dFJ1biYgcnVuKSBjb25zCiAKIGludCBGb250Ojphc2NlbnQoKSBjb25zdAogewotICAgIHJldHVy
biBwcmltYXJ5Rm9udCgpLT5hc2NlbnQoc2l6ZSgpKTsKKyAgICByZXR1cm4gcHJpbWFyeUZvbnQo
KS0+YXNjZW50KCk7CiB9CiAKIGludCBGb250OjpkZXNjZW50KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gcHJpbWFyeUZvbnQoKS0+ZGVzY2VudChzaXplKCkpOworICAgIHJldHVybiBwcmltYXJ5Rm9u
dCgpLT5kZXNjZW50KCk7CiB9CiAKIGludCBGb250OjpsaW5lU3BhY2luZygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIHByaW1hcnlGb250KCktPmxpbmVTcGFjaW5nKHNpemUoKSk7CisgICAgcmV0dXJu
IHByaW1hcnlGb250KCktPmxpbmVTcGFjaW5nKCk7CiB9CiAKIGZsb2F0IEZvbnQ6OnhIZWlnaHQo
KSBjb25zdAogewotICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT54SGVpZ2h0KHNpemUoKSk7Cisg
ICAgcmV0dXJuIHByaW1hcnlGb250KCktPnhIZWlnaHQoKTsKIH0KIAogdW5zaWduZWQgRm9udDo6
dW5pdHNQZXJFbSgpIGNvbnN0CkBAIC03ODksNCArNzg5LDkgQEAgaW50IEZvbnQ6Om9mZnNldEZv
clBvc2l0aW9uRm9yU2ltcGxlVGV4dAogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKK0ZvbnRTZWxl
Y3RvciogRm9udDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250TGlz
dCA/IG1fZm9udExpc3QtPmZvbnRTZWxlY3RvcigpIDogMDsKK30KKwogfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDI5Njc4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw2ICsyNTEsOCBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICByZXR1cm4gKCgoYyAmIH4weEZGKSA9PSAwICYmIGdSb3VuZGluZ0hh
Y2tDaGFyYWN0ZXJUYWJsZVtjXSkpOyAKICAgICB9CisKKyAgICBGb250U2VsZWN0b3IqIGZvbnRT
ZWxlY3RvcigpIGNvbnN0OwogI2VuZGlmCiAgICAgc3RhdGljIGJvb2wgdHJlYXRBc1NwYWNlKFVD
aGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9
PSAweDAwQTA7IH0KICAgICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UoVUNoYXIg
YykgeyByZXR1cm4gYyA8IDB4MjAgfHwgKGMgPj0gMHg3RiAmJiBjIDwgMHhBMCkgfHwgYyA9PSAw
eDIwMGUgfHwgYyA9PSAweDIwMGYgfHwgYyA+PSAweDIwMmEgJiYgYyA8PSAweDIwMmU7IH0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmgJKHJldmlzaW9uIDI5Njc4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw2ICszOSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgY29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGlzQ3VzdG9tRm9udCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5n
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1NlZ21lbnRlZCgpIGNvbnN0ID0gMDsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEu
Y3BwCShyZXZpc2lvbiAyOTY3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVu
dGVkRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxNCBAQCBib29sIFNl
Z21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CisjaWYgRU5BQkxFKFNWR19GT05UUykKK2Jvb2wgU2VnbWVudGVkRm9udERhdGE6OmlzU1ZHRm9u
dCgpIGNvbnN0Cit7CisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBzZWdtZW50ZWQgc3ZnIGZvbnRz
IGF0IHRoZSBtb21lbnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIGJvb2wgU2Vn
bWVudGVkRm9udERhdGE6OmlzQ3VzdG9tRm9udCgpIGNvbnN0CiB7CiAgICAgLy8gQWxsIHNlZ21l
bnRlZCBmb250cyBhcmUgY3VzdG9tIGZvbnRzLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TZWdtZW50ZWRGb250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuaAkocmV2aXNpb24gMjk2NzgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDYgKzU3LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKSBjb25zdDsKKwor
I2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgdmlydHVhbCBib29sIGlzU1ZHRm9udCgpIGNvbnN0
OworI2VuZGlmCisKICAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1NlZ21l
bnRlZCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5jcHAJKHJldmlzaW9uIDI5Njc4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDQ2ICszMCw0NSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKLSNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCiAjaWYgRU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRl
ICJTVkdGb250RGF0YS5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2VuZGlm
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0vLyBEb24n
dCBpbXBsZW1lbnQgY29uc3RydWN0b3IgaW4gdGhlIGhlYWRlciB0byBzYXZlIGEgU1ZHRm9udEZh
Y2VFbGVtZW50LmggaW5jbHVkZS4KLVNWR0ZvbnREYXRhOjpTVkdGb250RGF0YShTVkdGb250RmFj
ZUVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBmb250RmFjZUVsZW1lbnQoZWxlbWVudCkKLSAgICAs
IGhvcml6b250YWxPcmlnaW5YKDAuMGYpCi0gICAgLCBob3Jpem9udGFsT3JpZ2luWSgwLjBmKQot
ICAgICwgaG9yaXpvbnRhbEFkdmFuY2VYKDAuMGYpCi0gICAgLCB2ZXJ0aWNhbE9yaWdpblgoMC4w
ZikKLSAgICAsIHZlcnRpY2FsT3JpZ2luWSgwLjBmKQotICAgICwgdmVydGljYWxBZHZhbmNlWSgw
LjBmKQotewotfQorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLWZsb2F0IFNWR0ZvbnRE
YXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChmbG9hdCBmb250U2l6ZSwgZmxvYXQgdW5pdHNQZXJF
bSwgZmxvYXQgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHVuaXRzUGVyRW0gPiAwLjBmKTsKLSAgICBy
ZXR1cm4gdmFsdWUgKiBmb250U2l6ZSAvIHVuaXRzUGVyRW07Ci19Ci0jZW5kaWYKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIGYsIGJvb2wgY3VzdG9tRm9udCwgYm9vbCBsb2FkaW5nKQorU2ltcGxlRm9u
dERhdGE6OlNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYsIGJvb2wgY3Vz
dG9tRm9udCwgYm9vbCBsb2FkaW5nLCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEpCiAgICAgOiBt
X2ZvbnQoZikKICAgICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2UpCi0jaWYgRU5BQkxFKFNW
R19GT05UUykKLSAgICAsIG1fc3ZnRm9udERhdGEoMCkKLSNlbmRpZgotICAgICwgbV9pc0N1c3Rv
bUZvbnQoY3VzdG9tRm9udCkKKyAgICAsIG1fc3ZnRm9udERhdGEoc3ZnRm9udERhdGEpCisJLCBt
X2lzQ3VzdG9tRm9udChjdXN0b21Gb250KQogICAgICwgbV9pc0xvYWRpbmcobG9hZGluZykKICAg
ICAsIG1fc21hbGxDYXBzRm9udERhdGEoMCkKLXsgICAgCit7CisjaWYgRU5BQkxFKFNWR19GT05U
UykgJiYgIVBMQVRGT1JNKFFUKQorICAgIGlmIChTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNl
RWxlbWVudCA9IHN2Z0ZvbnREYXRhID8gc3ZnRm9udERhdGEtPmZvbnRGYWNlRWxlbWVudCgpIDog
MCkgeworICAgICAgICBmbG9hdCBzY2FsZSA9IGYuc2l6ZSgpOworICAgICAgICBtX3VuaXRzUGVy
RW0gPSBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKTsKKyAgICAgICAgc2NhbGUgLz0gbV91
bml0c1BlckVtICE9IDAgPyBtX3VuaXRzUGVyRW0gOiAxOworCisgICAgICAgIG1fYXNjZW50ID0g
Zm9udEZhY2VFbGVtZW50LT5hc2NlbnQoKSAqIHNjYWxlOworICAgICAgICBtX2Rlc2NlbnQgPSBm
b250RmFjZUVsZW1lbnQtPmRlc2NlbnQoKSAqIHNjYWxlOworICAgICAgICBtX3hIZWlnaHQgPSBm
b250RmFjZUVsZW1lbnQtPnhIZWlnaHQoKSAqIHNjYWxlOworCisgICAgICAgIG1fc3BhY2VHbHlw
aCA9IDA7CisgICAgICAgIG1fc3BhY2VXaWR0aCA9IDA7CisgICAgICAgIG1fYWRqdXN0ZWRTcGFj
ZVdpZHRoID0gMDsKKyAgICAgICAgZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICAgICAgbV9taXNzaW5n
R2x5cGhEYXRhLmZvbnREYXRhID0gdGhpczsKKyAgICAgICAgbV9taXNzaW5nR2x5cGhEYXRhLmds
eXBoID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAgICAgcGxhdGZvcm1J
bml0KCk7Ci0gICAgCisKICAgICBHbHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBHbHlwaFBhZ2VU
cmVlTm9kZTo6Z2V0Um9vdENoaWxkKHRoaXMsIDApLT5wYWdlKCk7CiAgICAgaWYgKCFnbHlwaFBh
Z2VaZXJvKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBnbHlwaCBwYWdlIHpl
cm8uIik7CkBAIC0xMTYsNTYgKzExNSw2IEBAIFNpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERh
dGEoKQogICAgIC8vIGl0IHdpbGwgYmUgZGVsZXRlZCB0aGVuLCBzbyB3ZSBkb24ndCBuZWVkIHRv
IGRvIGFueXRoaW5nIGhlcmUuCiB9CiAKLWludCBTaW1wbGVGb250RGF0YTo6YXNjZW50KGZsb2F0
IGZvbnRTaXplKSBjb25zdAotewotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKG1fc3Zn
Rm9udERhdGEpCi0gICAgICAgIHJldHVybiBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4
ZWwoZm9udFNpemUsIG1fdW5pdHNQZXJFbSwgbV9hc2NlbnQpOwotI2VuZGlmCi0KLSAgICByZXR1
cm4gbV9hc2NlbnQ7Ci19Ci0KLWludCBTaW1wbGVGb250RGF0YTo6ZGVzY2VudChmbG9hdCBmb250
U2l6ZSkgY29uc3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChtX3N2Z0ZvbnRE
YXRhKQotICAgICAgICByZXR1cm4gU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZv
bnRTaXplLCBtX3VuaXRzUGVyRW0sIG1fZGVzY2VudCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBt
X2Rlc2NlbnQ7Ci19Ci0KLWludCBTaW1wbGVGb250RGF0YTo6bGluZVNwYWNpbmcoZmxvYXQgZm9u
dFNpemUpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAobV9zdmdGb250
RGF0YSkKLSAgICAgICAgcmV0dXJuIChpbnQpIGNlaWxmKFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1V
bml0VG9QaXhlbChmb250U2l6ZSwgbV91bml0c1BlckVtLCBtX2xpbmVTcGFjaW5nKSk7Ci0jZW5k
aWYKLQotICAgIHJldHVybiBtX2xpbmVTcGFjaW5nOwotfQotCi1pbnQgU2ltcGxlRm9udERhdGE6
OmxpbmVHYXAoZmxvYXQgZm9udFNpemUpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykK
LSAgICBpZiAobV9zdmdGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIFNWR0ZvbnREYXRhOjpjb252
ZXJ0RW1Vbml0VG9QaXhlbChmb250U2l6ZSwgbV91bml0c1BlckVtLCBtX2xpbmVHYXApOwotI2Vu
ZGlmCi0KLSAgICByZXR1cm4gbV9saW5lR2FwOwotfQotCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6
eEhlaWdodChmbG9hdCBmb250U2l6ZSkgY29uc3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQot
ICAgIGlmIChtX3N2Z0ZvbnREYXRhKQotICAgICAgICByZXR1cm4gU1ZHRm9udERhdGE6OmNvbnZl
cnRFbVVuaXRUb1BpeGVsKGZvbnRTaXplLCBtX3VuaXRzUGVyRW0sIG1feEhlaWdodCk7Ci0jZW5k
aWYKLQotICAgIHJldHVybiBtX3hIZWlnaHQ7Ci19Ci0KIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3
aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGZsb2F0IHdpZHRoID0gbV9n
bHlwaFRvV2lkdGhNYXAud2lkdGhGb3JHbHlwaChnbHlwaCk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAyOTY3OCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCiAjaW5jbHVkZSAi
R2x5cGhXaWR0aE1hcC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwogI2lmIFBMQVRGT1JN
KE1BQykKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUFUU1VTdHlsZSogQVRTVVN0eWxlOwogI2VuZGlm
CkBAIC00MSwzNiArNDIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRm9udERlc2Ny
aXB0aW9uOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKK2Ns
YXNzIFNWR0ZvbnREYXRhOwogY2xhc3MgV2lkdGhNYXA7CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQotY2xhc3MgU1ZHRm9udEZhY2VFbGVtZW50OwotCi1zdHJ1Y3QgU1ZHRm9udERhdGEgewotICAg
IFNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVudCopOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0
aW9uCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnRFbVVuaXRUb1BpeGVsKGZsb2F0IGZvbnRTaXpl
LCBmbG9hdCB1bml0c1BlckVtLCBmbG9hdCB2YWx1ZSk7Ci0KLSAgICAvLyBIb2xkIHBvaW50ZXIg
dG8gb3VyIGNyZWF0b3IKLSAgICBSZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50PiBmb250RmFjZUVs
ZW1lbnQ7Ci0KLSAgICAvLyBTVkcgRm9udCBzcGVjaWZpYyBtZXRyaWNzCi0gICAgZmxvYXQgaG9y
aXpvbnRhbE9yaWdpblg7Ci0gICAgZmxvYXQgaG9yaXpvbnRhbE9yaWdpblk7Ci0gICAgZmxvYXQg
aG9yaXpvbnRhbEFkdmFuY2VYOwotCi0gICAgZmxvYXQgdmVydGljYWxPcmlnaW5YOwotICAgIGZs
b2F0IHZlcnRpY2FsT3JpZ2luWTsKLSAgICBmbG9hdCB2ZXJ0aWNhbEFkdmFuY2VZOwotfTsKLSNl
bmRpZgotCiBlbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBp
dGNoIH07CiAKIGNsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIEZvbnREYXRhIHsKIHB1Ymxp
YzoKLSAgICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBjdXN0
b21Gb250ID0gZmFsc2UsIGJvb2wgbG9hZGluZyA9IGZhbHNlKTsKKyAgICBTaW1wbGVGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBjdXN0b21Gb250ID0gZmFsc2UsIGJvb2wg
bG9hZGluZyA9IGZhbHNlLCBTVkdGb250RGF0YSogZGF0YSA9IDApOwogICAgIHZpcnR1YWwgflNp
bXBsZUZvbnREYXRhKCk7CiAKIHB1YmxpYzoKQEAgLTc4LDExICs1NywxMSBAQCBwdWJsaWM6CiAg
ICAgU2ltcGxlRm9udERhdGEqIHNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uKSBjb25zdDsKIAogICAgIC8vIHZlcnRpY2FsIG1ldHJpY3MKLSAg
ICBpbnQgYXNjZW50KGZsb2F0IGZvbnRTaXplKSBjb25zdDsKLSAgICBpbnQgZGVzY2VudChmbG9h
dCBmb250U2l6ZSkgY29uc3Q7Ci0gICAgaW50IGxpbmVTcGFjaW5nKGZsb2F0IGZvbnRTaXplKSBj
b25zdDsKLSAgICBpbnQgbGluZUdhcChmbG9hdCBmb250U2l6ZSkgY29uc3Q7Ci0gICAgZmxvYXQg
eEhlaWdodChmbG9hdCBmb250U2l6ZSkgY29uc3Q7CisgICAgaW50IGFzY2VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fYXNjZW50OyB9CisgICAgaW50IGRlc2NlbnQoKSBjb25zdCB7IHJldHVybiBtX2Rl
c2NlbnQ7IH0KKyAgICBpbnQgbGluZVNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2xpbmVTcGFj
aW5nOyB9CisgICAgaW50IGxpbmVHYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVHYXA7IH0KKyAg
ICBmbG9hdCB4SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV94SGVpZ2h0OyB9CiAgICAgdW5zaWdu
ZWQgdW5pdHNQZXJFbSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pdHNQZXJFbTsgfQogCiAgICAgZmxv
YXQgd2lkdGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CkBAIC05NCwxNyArNzMsMTcgQEAgcHVibGlj
OgogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKTsKICAgICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRjaDsg
fQogCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBib29sIGlzU1ZHRm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3ZnRm9udERhdGE7IH0KLSAgICBTVkdGb250RGF0YSogc3ZnRm9udERhdGEoKSBj
b25zdCB7IHJldHVybiBtX3N2Z0ZvbnREYXRhLmdldCgpOyB9Ci0jZW5kaWYKLQorICAgIHZpcnR1
YWwgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3N2Z0ZvbnREYXRhOyB9CiAgICAg
dmlydHVhbCBib29sIGlzQ3VzdG9tRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDdXN0b21Gb250
OyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2Fk
aW5nOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2VnbWVudGVkKCkgY29uc3Q7CiAKICAgICBjb25z
dCBHbHlwaERhdGEmIG1pc3NpbmdHbHlwaERhdGEoKSBjb25zdCB7IHJldHVybiBtX21pc3NpbmdH
bHlwaERhdGE7IH0KIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgU1ZHRm9udERhdGEqIHN2
Z0ZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RGF0YS5nZXQoKTsgfQorI2VuZGlm
CisKICNpZiBQTEFURk9STShNQUMpCiAgICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJl
dHVybiBtX2ZvbnQuZm9udCgpOyB9CiAgICAgdm9pZCBjaGVja1NoYXBlc0FyYWJpYygpIGNvbnN0
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9y
bURhdGEuaAkocmV2aXNpb24gMjk2NzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgcHVi
bGljOgogCiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKKyAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNp
emUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9f
Zm9udF9mYWNlX3QqIGZvbnRGYWNlLCBpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7
CiAKICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwpAQCAtNTcsNiArNTgsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGJvb2wgaW5pdCgpOwogCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKKyAgICBm
bG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6
ZSgpOyB9CiAKICAgICB2b2lkIHNldEZvbnQoY2Fpcm9fdCopIGNvbnN0OwogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3Rr
LmNwcAkocmV2aXNpb24gMjk2NzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250UGxhdGZvcm1EYXRhR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywxMyBA
QCBmcmVlUGF0dGVybjoKICAgICBGY1BhdHRlcm5EZXN0cm95KHBhdHRlcm4pOwogfQogCitGb250
UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBt
X3BhdHRlcm4oMCkKKyAgICAsIG1fZm9udERlc2NyaXB0aW9uKCkKKyAgICAsIG1fc2NhbGVkRm9u
dCgwKQoreworfQorCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNhaXJvX2Zv
bnRfZmFjZV90KiBmb250RmFjZSwgaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCiAg
ICAgOiBtX3BhdHRlcm4oMCkKICAgICAsIG1fZm9udERlc2NyaXB0aW9uKCkKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlz
aW9uIDI5Njc4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udFBsYXRmb3Jt
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMSBAQCBzdHJ1Y3QgRm9udFBsYXRm
b3JtRGF0YSB7CiAgICAgOiBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpLCBtX3N5bnRoZXRpY09ibGlx
dWUoZmFsc2UpLCBtX2NnRm9udCgwKSwgbV9hdHN1Rm9udElEKDApLCBtX3NpemUoMCksIG1fZm9u
dCgoTlNGb250KiktMSkKICAgICB7fQogCisgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzLCBi
b29sIGIsIGJvb2wgbykKKyAgICA6IG1fc3ludGhldGljQm9sZChiKSwgbV9zeW50aGV0aWNPYmxp
cXVlKG8pLCBtX2NnRm9udCgwKSwgbV9hdHN1Rm9udElEKDApLCBtX3NpemUocyksIG1fZm9udCgw
KQorICAgIHsKKyAgICB9CisKICAgICBGb250UGxhdGZvcm1EYXRhKE5TRm9udCogZiA9IDAsIGJv
b2wgYiA9IGZhbHNlLCBib29sIG8gPSBmYWxzZSk7CiAgICAgCiAgICAgRm9udFBsYXRmb3JtRGF0
YShDR0ZvbnRSZWYgZiwgQVRTVUZvbnRJRCBmb250SUQsIGZsb2F0IHMsIGJvb2wgYiAsIGJvb2wg
bykKQEAgLTU4LDYgKzYzLDggQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGEgewogICAgIAogICAg
IH5Gb250UGxhdGZvcm1EYXRhKCk7CiAKKyAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CisKICAgICBib29sIG1fc3ludGhldGljQm9sZDsKICAgICBib29sIG1fc3ludGhl
dGljT2JsaXF1ZTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDI5Njc4KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICB7fQogCiAgICAgRm9udFBsYXRmb3JtRGF0YShIRk9O
VCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKTsKKyAg
ICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKTsK
ICAgICBGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIG9ibGlxdWUpOwogICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3Bw
CShyZXZpc2lvbiAyOTY3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQ
bGF0Zm9ybURhdGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNiArMTk3LDE2IEBAIEZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoSEZPTlQKICAgICBSZWxlYXNlREMoMCwg
aGRjKTsKIH0KIAorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9udCgwKQorICAgICwgbV9zaXpl
KHNpemUpCisgICAgLCBtX2NnRm9udCgwKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisg
ICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKKyAgICAsIG1fdXNlR0RJKGZhbHNlKQor
eworfQorCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBmb250
LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKICAgICA6IG1fZm9udCgwKQog
ICAgICwgbV9zaXplKHNpemUpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAko
cmV2aXNpb24gMjk2NzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0
OjpyZWxhdGl2ZUJCb3goYm8KICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICBjb25zdCBG
b250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwogICAgICAgICBpZiAoZm9udC5wcmltYXJ5Rm9u
dCgpLT5pc1NWR0ZvbnQoKSkgewotICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBTVkdGb250RGF0
YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZm9udC5zaXplKCksIGZvbnQudW5pdHNQZXJFbSgpLCAx
LjBmKTsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gZm9udC51bml0c1BlckVtKCkgPiAwID8g
Zm9udC5zaXplKCkgLyBmb250LnVuaXRzUGVyRW0oKSA6IDAuMGY7CiAKICAgICAgICAgICAgIGlm
IChzY2FsZSAhPSAwLjBmKQogICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoIC89IHNjYWxlOwpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHRm9udC5jcHAJKHJldmlzaW9uIDI5Njc4KQorKysgV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTIgKzIzLDE1IEBACiAjaWYgRU5BQkxFKFNWR19GT05U
UykKICNpbmNsdWRlICJGb250LmgiCiAKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIlNWR0ZvbnREYXRhLmgiCiAjaW5j
bHVkZSAiU1ZHR2x5cGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdNaXNzaW5nR2x5cGhF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKICNpbmNsdWRlICJYTUxOYW1l
cy5oIgogCkBAIC0zNiw2ICszOSwxNCBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydEVtVW5p
dFRvUGl4ZWwoZmxvYXQgZm9udFNpemUsIGZsb2F0IHVuaXRzUGVyRW0sIGZsb2F0IHZhbHVlKQor
eworICAgIGlmICh1bml0c1BlckVtID09IDAuMGYpCisgICAgICAgIHJldHVybiAwLjBmOworCisg
ICAgcmV0dXJuIHZhbHVlICogZm9udFNpemUgLyB1bml0c1BlckVtOworfQorCiBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHls
ZSkKIHsKICAgICByZXR1cm4gc3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gV01fVEJSTCB8fCBzdHls
ZS0+d3JpdGluZ01vZGUoKSA9PSBXTV9UQjsgCkBAIC0xODgsMTUgKzE5OSwxNCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgaXNDb21wYXRpYmxlR2x5cGgoY29uCiAgICAgcmV0dXJuIGlzQ29tcGF0aWJs
ZUFyYWJpY0Zvcm0oaWRlbnRpZmllciwgY2hhcnMsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KTsKIH0KIAotc3RhdGljIGlubGluZSBTVkdGb250RGF0YSogc3ZnRm9udEFuZEZvbnRGYWNlRWxl
bWVudEZvckZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgU1ZHRm9udEZh
Y2VFbGVtZW50KiYgZm9udEZhY2UsIFNWR0ZvbnRFbGVtZW50KiYgZm9udCkKK3N0YXRpYyBpbmxp
bmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0
YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxlbWVudComIGZv
bnRGYWNlLCBTVkdGb250RWxlbWVudComIGZvbnQpCiB7Ci0gICAgQVNTRVJUKCFmb250RGF0YS0+
aXNDdXN0b21Gb250KCkpOworICAgIEFTU0VSVChmb250RGF0YS0+aXNDdXN0b21Gb250KCkpOwog
ICAgIEFTU0VSVChmb250RGF0YS0+aXNTVkdGb250KCkpOwogCi0gICAgU1ZHRm9udERhdGEqIHN2
Z0ZvbnREYXRhID0gZm9udERhdGEtPnN2Z0ZvbnREYXRhKCk7Ci0gICAgQVNTRVJUKHN2Z0ZvbnRE
YXRhKTsKKyAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxj
b25zdCBTVkdGb250RGF0YSo+KGZvbnREYXRhLT5zdmdGb250RGF0YSgpKTsKIAotICAgIGZvbnRG
YWNlID0gc3ZnRm9udERhdGEtPmZvbnRGYWNlRWxlbWVudC5nZXQoKTsKKyAgICBmb250RmFjZSA9
IHN2Z0ZvbnREYXRhLT5mb250RmFjZUVsZW1lbnQoKTsKICAgICBBU1NFUlQoZm9udEZhY2UpOwog
CiAgICAgZm9udCA9IGZvbnRGYWNlLT5hc3NvY2lhdGVkRm9udEVsZW1lbnQoKTsKQEAgLTIwOCw5
ICsyMTgsOSBAQCBzdGF0aWMgaW5saW5lIFNWR0ZvbnREYXRhKiBzdmdGb250QW5kRm9uCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBTVkdUZXh0UnVuRGF0YT4KIHN0cnVjdCBTVkdUZXh0UnVuV2Fsa2VyIHsK
ICAgICB0eXBlZGVmIGJvb2wgKCpTVkdUZXh0UnVuV2Fsa2VyQ2FsbGJhY2spKGNvbnN0IFNWR0ds
eXBoSWRlbnRpZmllciYsIFNWR1RleHRSdW5EYXRhJik7Ci0gICAgdHlwZWRlZiB2b2lkICgqU1ZH
VGV4dFJ1bldhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrKShjb25zdCBUZXh0UnVuJiwgdW5zaWdu
ZWQgaW50LCBTVkdUZXh0UnVuRGF0YSYpOworICAgIHR5cGVkZWYgdm9pZCAoKlNWR1RleHRSdW5X
YWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjaykoY29uc3QgVGV4dFJ1biYsIFNWR1RleHRSdW5EYXRh
Jik7CiAKLSAgICBTVkdUZXh0UnVuV2Fsa2VyKFNWR0ZvbnREYXRhKiBmb250RGF0YSwgU1ZHRm9u
dEVsZW1lbnQqIGZvbnRFbGVtZW50LCBTVkdUZXh0UnVuRGF0YSYgZGF0YSwKKyAgICBTVkdUZXh0
UnVuV2Fsa2VyKGNvbnN0IFNWR0ZvbnREYXRhKiBmb250RGF0YSwgU1ZHRm9udEVsZW1lbnQqIGZv
bnRFbGVtZW50LCBTVkdUZXh0UnVuRGF0YSYgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIFNW
R1RleHRSdW5XYWxrZXJDYWxsYmFjayBjYWxsYmFjaywgU1ZHVGV4dFJ1bldhbGtlck1pc3NpbmdH
bHlwaENhbGxiYWNrIG1pc3NpbmdHbHlwaENhbGxiYWNrKQogICAgICAgICA6IG1fZm9udERhdGEo
Zm9udERhdGEpCiAgICAgICAgICwgbV9mb250RWxlbWVudChmb250RWxlbWVudCkKQEAgLTI2Nyw4
ICsyNzcsMTggQEAgc3RydWN0IFNWR1RleHRSdW5XYWxrZXIgewogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBpZiAoIWZvdW5kR2x5cGgpIHsKLSAgICAgICAgICAgICAgICAoKm1fd2Fsa2Vy
TWlzc2luZ0dseXBoQ2FsbGJhY2spKHJ1biwgaSwgbV93YWxrZXJEYXRhKTsKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoU1ZHTWlzc2luZ0dseXBoRWxlbWVu
dCogZWxlbWVudCA9IG1fZm9udEVsZW1lbnQtPmZpcnN0TWlzc2luZ0dseXBoRWxlbWVudCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIDxtaXNzaW5nLWdseXBoPiBlbGVtZW50IHN1cHBvcnQK
KyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IFNWR0dseXBoRWxlbWVudDo6YnVpbGRH
ZW5lcmljR2x5cGhJZGVudGlmaWVyKGVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBTVkdH
bHlwaEVsZW1lbnQ6OmluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoaWRlbnRpZmllciwgbV9m
b250RGF0YSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRmFsbGJhY2sgdG8gc3lzdGVtIGZvbnQgZmFsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAg
VGV4dFJ1biBzdWJSdW4ocnVuKTsKKyAgICAgICAgICAgICAgICAgICAgc3ViUnVuLnNldFRleHQo
c3ViUnVuLmRhdGEoaSksIDEpOworCisgICAgICAgICAgICAgICAgICAgICgqbV93YWxrZXJNaXNz
aW5nR2x5cGhDYWxsYmFjaykoc3ViUnVuLCBtX3dhbGtlckRhdGEpOworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGlmICghKCptX3dhbGtlckNhbGxiYWNrKShpZGVudGlmaWVyLCBtX3dhbGtlckRhdGEp
KQpAQCAtMjc5LDcgKzI5OSw3IEBAIHN0cnVjdCBTVkdUZXh0UnVuV2Fsa2VyIHsKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgU1ZHRm9udERhdGEqIG1fZm9udERhdGE7CisgICAgY29uc3QgU1ZHRm9u
dERhdGEqIG1fZm9udERhdGE7CiAgICAgU1ZHRm9udEVsZW1lbnQqIG1fZm9udEVsZW1lbnQ7CiAg
ICAgU1ZHVGV4dFJ1bkRhdGEmIG1fd2Fsa2VyRGF0YTsKICAgICBTVkdUZXh0UnVuV2Fsa2VyQ2Fs
bGJhY2sgbV93YWxrZXJDYWxsYmFjazsKQEAgLTI5MiwzNiArMzEyLDI3IEBAIHN0cnVjdCBTVkdU
ZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXQKICAgICBpbnQgZnJvbTsKICAgICBpbnQgdG87
CiAKKyAgICBmbG9hdCBzY2FsZTsKICAgICBmbG9hdCBsZW5ndGg7Ci0gICAgZmxvYXQgZm9udFNp
emU7Ci0gICAgdW5zaWduZWQgdW5pdHNQZXJFbTsKICAgICBjb25zdCBGb250KiBmb250OwogfTsK
IAogYm9vbCBmbG9hdFdpZHRoVXNpbmdTVkdGb250Q2FsbGJhY2soY29uc3QgU1ZHR2x5cGhJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhJiBk
YXRhKQogewogICAgIGlmIChkYXRhLmF0ID49IGRhdGEuZnJvbSAmJiBkYXRhLmF0IDwgZGF0YS50
bykKLSAgICAgICAgZGF0YS5sZW5ndGggKz0gU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1Bp
eGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgaWRlbnRpZmllci5ob3Jpem9udGFs
QWR2YW5jZVgpOworICAgICAgICBkYXRhLmxlbmd0aCArPSBpZGVudGlmaWVyLmhvcml6b250YWxB
ZHZhbmNlWCAqIGRhdGEuc2NhbGU7CiAKICAgICBkYXRhLmF0Kys7CiAgICAgcmV0dXJuIGRhdGEu
YXQgPCBkYXRhLnRvOwogfQogCi12b2lkIGZsb2F0V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFjayhj
b25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGludCBwb3NpdGlvbiwgU1ZHVGV4dFJ1bldhbGtl
ck1lYXN1cmVkTGVuZ3RoRGF0YSYgZGF0YSkKK3ZvaWQgZmxvYXRXaWR0aE1pc3NpbmdHbHlwaENh
bGxiYWNrKGNvbnN0IFRleHRSdW4mIHJ1biwgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3Ro
RGF0YSYgZGF0YSkKIHsKLSAgICAvLyBDb25zdHJ1Y3QgYSBjb3B5IG9mIHRoZSBjdXJyZW50IFNW
RyBGb250IHRoYXQgaW4gaXMgdXNlLiBEaXNhYmxlIHRoZSBTVkcgRm9udCBmdW5jdGlvbmFsaXR5
Ci0gICAgLy8gaW4gdGhhdCBjb3B5IG9mIHRoZSBGb250IG9iamVjdCwgc28gZHJhd1RleHQvZmxv
YXRXaWR0aCBlbmQgdXAgaW4gdGhlICJzaW1wbGUiIGNvZGUgcGF0aHMuCi0gICAgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhID0gY29uc3RfY2FzdDxTaW1wbGVGb250RGF0YSo+KGRhdGEuZm9udC0+
cHJpbWFyeUZvbnQoKSk7Ci0gICAgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhID0gZm9udERhdGEt
Pm1fc3ZnRm9udERhdGEucmVsZWFzZSgpOwotCiAgICAgLy8gSGFuZGxlIHN5c3RlbSBmb250IGZh
bGxiYWNrCi0gICAgVGV4dFJ1biBzdWJSdW4ocnVuKTsKLSAgICBzdWJSdW4uc2V0VGV4dChzdWJS
dW4uZGF0YShwb3NpdGlvbiksIDEpOwotCi0gICAgZGF0YS5sZW5ndGggKz0gZGF0YS5mb250LT5m
bG9hdFdpZHRoKHN1YlJ1bik7CisgICAgRm9udCBmb250KEZvbnREZXNjcmlwdGlvbigpLCAwLCAw
KTsgLy8gc3BhY2luZyBoYW5kbGVkIGJ5IFNWRyB0ZXh0IGNvZGUuCisgICAgZm9udC51cGRhdGUo
ZGF0YS5mb250LT5mb250U2VsZWN0b3IoKSk7CiAKLSAgICAvLyBTd2l0Y2ggYmFjayB0byBTVkcg
Rm9udCBjb2RlIHBhdGgKLSAgICBmb250RGF0YS0+bV9zdmdGb250RGF0YS5zZXQoc3ZnRm9udERh
dGEpOworICAgIGRhdGEubGVuZ3RoICs9IGZvbnQuZmxvYXRXaWR0aChydW4pOwogfQogCiBzdGF0
aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KGNvbnN0IEZvbnQqIGZv
bnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bykKQEAgLTMzNSw3ICszNDYs
NyBAQCBzdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTCiAgICAgU1ZHRm9u
dEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gMDsKICAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRG
YWNlRWxlbWVudCA9IDA7CiAKLSAgICBpZiAoU1ZHRm9udERhdGEqIGZvbnREYXRhID0gc3ZnRm9u
dEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQtPnByaW1hcnlGb250KCksIGZvbnRG
YWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7CisgICAgaWYgKGNvbnN0IFNWR0ZvbnREYXRhKiBm
b250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250LT5wcmlt
YXJ5Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgewogICAgICAgICBpZiAo
IWZvbnRFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIDAuMGY7CiAKQEAgLTM0NSw5ICszNTYs
OCBAQCBzdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTCiAgICAgICAgIGRh
dGEuYXQgPSBmcm9tOwogICAgICAgICBkYXRhLmZyb20gPSBmcm9tOwogICAgICAgICBkYXRhLnRv
ID0gdG87CisgICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250LT5z
aXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsKICAgICAgICAgZGF0
YS5sZW5ndGggPSAwLjBmOwotICAgICAgICBkYXRhLmZvbnRTaXplID0gZm9udC0+c2l6ZSgpOwot
ICAgICAgICBkYXRhLnVuaXRzUGVyRW0gPSBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKTsK
IAogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSBydW4ucmVmZXJlbmNp
bmdSZW5kZXJPYmplY3QoKSkgewogICAgICAgICAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGlz
VmVydGljYWxXcml0aW5nTW9kZShyZW5kZXJPYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCkpOwpA
QCAtMzczLDkgKzM4Myw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29u
c3QKIAogLy8gQ2FsbGJhY2sgJiBkYXRhIHN0cnVjdHVyZXMgdG8gZHJhdyB0ZXh0IHVzaW5nIFNW
RyBGb250cwogc3RydWN0IFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEgewotICAgIGZsb2F0
IGZvbnRTaXplOwogICAgIGZsb2F0IHNjYWxlOwotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW07CiAg
ICAgYm9vbCBpc1ZlcnRpY2FsVGV4dDsKIAogICAgIGZsb2F0IHhTdGFydE9mZnNldDsKQEAgLTM5
NSw4ICs0MDMsOCBAQCBib29sIGRyYXdUZXh0VXNpbmdTVkdGb250Q2FsbGJhY2soY29uc3QgCiAg
ICAgICAgIGRhdGEuY29udGV4dC0+c2F2ZSgpOwogCiAgICAgICAgIGlmIChkYXRhLmlzVmVydGlj
YWxUZXh0KSB7Ci0gICAgICAgICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFgoU1ZHRm9udERhdGE6
OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgaWRl
bnRpZmllci52ZXJ0aWNhbE9yaWdpblgpKTsKLSAgICAgICAgICAgIGRhdGEuZ2x5cGhPcmlnaW4u
c2V0WShTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6ZSwgZGF0
YS51bml0c1BlckVtLCBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSkpOworICAgICAgICAgICAg
ZGF0YS5nbHlwaE9yaWdpbi5zZXRYKGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YICogZGF0YS5z
Y2FsZSk7CisgICAgICAgICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFkoaWRlbnRpZmllci52ZXJ0
aWNhbE9yaWdpblkgKiBkYXRhLnNjYWxlKTsKICAgICAgICAgfQogCiAgICAgICAgIGRhdGEuY29u
dGV4dC0+dHJhbnNsYXRlKGRhdGEueFN0YXJ0T2Zmc2V0ICsgZGF0YS5jdXJyZW50UG9pbnQueCgp
ICsgZGF0YS5nbHlwaE9yaWdpbi54KCksIGRhdGEuY3VycmVudFBvaW50LnkoKSArIGRhdGEuZ2x5
cGhPcmlnaW4ueSgpKTsKQEAgLTQyMSwzNSArNDI5LDI1IEBAIGJvb2wgZHJhd1RleHRVc2luZ1NW
R0ZvbnRDYWxsYmFjayhjb25zdCAKICAgICB9CiAKICAgICBpZiAoZGF0YS5pc1ZlcnRpY2FsVGV4
dCkKLSAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQubW92ZSgwLjBmLCBTVkdGb250RGF0YTo6Y29u
dmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCBpZGVudGlm
aWVyLnZlcnRpY2FsQWR2YW5jZVkpKTsKKyAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQubW92ZSgw
LjBmLCBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5jZVkgKiBkYXRhLnNjYWxlKTsKICAgICBlbHNl
Ci0gICAgICAgIGRhdGEuY3VycmVudFBvaW50Lm1vdmUoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVu
aXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgaWRlbnRpZmllci5ob3Jp
em9udGFsQWR2YW5jZVgpLCAwLjBmKTsKKyAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQubW92ZShp
ZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCAqIGRhdGEuc2NhbGUsIDAuMGYpOwogCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZHJhd1RleHRNaXNzaW5nR2x5cGhDYWxsYmFjayhjb25z
dCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGludCBwb3NpdGlvbiwgU1ZHVGV4dFJ1bldhbGtlckRy
YXdUZXh0RGF0YSYgZGF0YSkKK3ZvaWQgZHJhd1RleHRNaXNzaW5nR2x5cGhDYWxsYmFjayhjb25z
dCBUZXh0UnVuJiBydW4sIFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEmIGRhdGEpCiB7Ci0g
ICAgLy8gQ29uc3RydWN0IGEgY29weSBvZiB0aGUgY3VycmVudCBTVkcgRm9udCB0aGF0IGluIGlz
IHVzZS4gRGlzYWJsZSB0aGUgU1ZHIEZvbnQgZnVuY3Rpb25hbGl0eQotICAgIC8vIGluIHRoYXQg
Y29weSBvZiB0aGUgRm9udCBvYmplY3QsIHNvIGRyYXdUZXh0L2Zsb2F0V2lkdGggZW5kIHVwIGlu
IHRoZSAic2ltcGxlIiBjb2RlIHBhdGhzLgotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBkYXRhLmNv
bnRleHQtPmZvbnQoKTsKLQotICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGNvbnN0X2Nh
c3Q8U2ltcGxlRm9udERhdGEqPihmb250LnByaW1hcnlGb250KCkpOwotICAgIFNWR0ZvbnREYXRh
KiBzdmdGb250RGF0YSA9IGZvbnREYXRhLT5tX3N2Z0ZvbnREYXRhLnJlbGVhc2UoKTsKLQogICAg
IC8vIEhhbmRsZSBzeXN0ZW0gZm9udCBmYWxsYmFjawotICAgIFRleHRSdW4gc3ViUnVuKHJ1bik7
Ci0gICAgc3ViUnVuLnNldFRleHQoc3ViUnVuLmRhdGEocG9zaXRpb24pLCAxKTsKKyAgICBGb250
IGZvbnQoRm9udERlc2NyaXB0aW9uKCksIDAsIDApOyAvLyBzcGFjaW5nIGhhbmRsZWQgYnkgU1ZH
IHRleHQgY29kZS4KKyAgICBmb250LnVwZGF0ZShkYXRhLmNvbnRleHQtPmZvbnQoKS5mb250U2Vs
ZWN0b3IoKSk7CiAKLSAgICBmb250LmRyYXdUZXh0KGRhdGEuY29udGV4dCwgc3ViUnVuLCBkYXRh
LmN1cnJlbnRQb2ludCk7CisgICAgZm9udC5kcmF3VGV4dChkYXRhLmNvbnRleHQsIHJ1biwgZGF0
YS5jdXJyZW50UG9pbnQpOwogCiAgICAgaWYgKGRhdGEuaXNWZXJ0aWNhbFRleHQpCi0gICAgICAg
IGRhdGEuY3VycmVudFBvaW50Lm1vdmUoMC4wZiwgZGF0YS5jb250ZXh0LT5mb250KCkuZmxvYXRX
aWR0aChzdWJSdW4pKTsKKyAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQubW92ZSgwLjBmLCBmb250
LmZsb2F0V2lkdGgocnVuKSk7CiAgICAgZWxzZQotICAgICAgICBkYXRhLmN1cnJlbnRQb2ludC5t
b3ZlKGRhdGEuY29udGV4dC0+Zm9udCgpLmZsb2F0V2lkdGgoc3ViUnVuKSwgMC4wZik7Ci0KLSAg
ICAvLyBTd2l0Y2ggYmFjayB0byBTVkcgRm9udCBjb2RlIHBhdGgKLSAgICBmb250RGF0YS0+bV9z
dmdGb250RGF0YS5zZXQoc3ZnRm9udERhdGEpOworICAgICAgICBkYXRhLmN1cnJlbnRQb2ludC5t
b3ZlKGZvbnQuZmxvYXRXaWR0aChydW4pLCAwLjBmKTsKIH0KIAogdm9pZCBGb250OjpkcmF3VGV4
dFVzaW5nU1ZHRm9udChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgCkBAIC00NTgsNyArNDU2LDcgQEAgdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChH
cmFwaGljcwogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7CiAgICAgU1ZHRm9u
dEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwogCi0gICAgaWYgKFNWR0ZvbnREYXRh
KiBmb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShwcmltYXJ5
Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgeworICAgIGlmIChjb25zdCBT
VkdGb250RGF0YSogZm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERh
dGEocHJpbWFyeUZvbnQoKSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCkpIHsKICAgICAg
ICAgaWYgKCFmb250RWxlbWVudCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNDcwLDkgKzQ2
OCw3IEBAIHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3MKICAgICAgICAg
ZGF0YS5hY3RpdmVQYWludFNlcnZlciA9IHJ1bi5hY3RpdmVQYWludFNlcnZlcigpOwogICAgICAg
ICBBU1NFUlQoZGF0YS5hY3RpdmVQYWludFNlcnZlcik7CiAKLSAgICAgICAgZGF0YS5mb250U2l6
ZSA9IHNpemUoKTsKLSAgICAgICAgZGF0YS51bml0c1BlckVtID0gZm9udEZhY2VFbGVtZW50LT51
bml0c1BlckVtKCk7Ci0gICAgICAgIGRhdGEuc2NhbGUgPSBTVkdGb250RGF0YTo6Y29udmVydEVt
VW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCAxLjBmKTsKKyAgICAg
ICAgZGF0YS5zY2FsZSA9IGNvbnZlcnRFbVVuaXRUb1BpeGVsKHNpemUoKSwgZm9udEZhY2VFbGVt
ZW50LT51bml0c1BlckVtKCksIDEuMGYpOwogICAgICAgICBkYXRhLmlzVmVydGljYWxUZXh0ID0g
aXNWZXJ0aWNhbFdyaXRpbmdNb2RlKGRhdGEucmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5zdmdTdHls
ZSgpKTsgICAgCiAgICAgICAgIGRhdGEueFN0YXJ0T2Zmc2V0ID0gZmxvYXRXaWR0aE9mU3ViU3Ry
aW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgcnVuLnJ0bCgpID8gdG8gOiAwLCBydW4ucnRsKCkg
PyBydW4ubGVuZ3RoKCkgOiBmcm9tKTsKICAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQgPSBwb2lu
dDsKQEAgLTQ4NCwxMCArNDgwLDEwIEBAIHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQo
R3JhcGhpY3MKICAgICAgICAgICAgIGxhbmd1YWdlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGRh
dGEucmVuZGVyT2JqZWN0LT5lbGVtZW50KCkpLT5nZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdB
dHRyKTsKIAogICAgICAgICBpZiAoIWRhdGEuaXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgICAg
IGRhdGEuZ2x5cGhPcmlnaW4uc2V0WChTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwo
ZGF0YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCBmb250RGF0YS0+aG9yaXpvbnRhbE9yaWdp
blgpKTsKLSAgICAgICAgICAgIGRhdGEuZ2x5cGhPcmlnaW4uc2V0WShTVkdGb250RGF0YTo6Y29u
dmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCBmb250RGF0
YS0+aG9yaXpvbnRhbE9yaWdpblkpKTsKKyAgICAgICAgICAgIGRhdGEuZ2x5cGhPcmlnaW4uc2V0
WChmb250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblgoKSAqIGRhdGEuc2NhbGUpOworICAgICAgICAg
ICAgZGF0YS5nbHlwaE9yaWdpbi5zZXRZKGZvbnREYXRhLT5ob3Jpem9udGFsT3JpZ2luWSgpICog
ZGF0YS5zY2FsZSk7CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICBTVkdUZXh0UnVuV2Fsa2Vy
PFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGE+IHJ1bldhbGtlcihmb250RGF0YSwgZm9udEVs
ZW1lbnQsIGRhdGEsIGRyYXdUZXh0VXNpbmdTVkdGb250Q2FsbGJhY2ssIGRyYXdUZXh0TWlzc2lu
Z0dseXBoQ2FsbGJhY2spOwogICAgICAgICBydW5XYWxrZXIud2FsayhydW4sIGRhdGEuaXNWZXJ0
aWNhbFRleHQsIGxhbmd1YWdlLCBmcm9tLCB0byk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiU1ZHRm9udERhdGEuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitTVkdGb250RGF0YTo6U1ZHRm9udERhdGEoU1ZHRm9udEZhY2VFbGVt
ZW50KiBmb250RmFjZUVsZW1lbnQpCisgICAgOiBtX2ZvbnRGYWNlRWxlbWVudChmb250RmFjZUVs
ZW1lbnQpCisgICAgLCBtX2hvcml6b250YWxPcmlnaW5YKGZvbnRGYWNlRWxlbWVudC0+aG9yaXpv
bnRhbE9yaWdpblgoKSkKKyAgICAsIG1faG9yaXpvbnRhbE9yaWdpblkoZm9udEZhY2VFbGVtZW50
LT5ob3Jpem9udGFsT3JpZ2luWSgpKQorICAgICwgbV9ob3Jpem9udGFsQWR2YW5jZVgoZm9udEZh
Y2VFbGVtZW50LT5ob3Jpem9udGFsQWR2YW5jZVgoKSkKKyAgICAsIG1fdmVydGljYWxPcmlnaW5Y
KGZvbnRGYWNlRWxlbWVudC0+dmVydGljYWxPcmlnaW5YKCkpCisgICAgLCBtX3ZlcnRpY2FsT3Jp
Z2luWShmb250RmFjZUVsZW1lbnQtPnZlcnRpY2FsT3JpZ2luWSgpKQorICAgICwgbV92ZXJ0aWNh
bEFkdmFuY2VZKGZvbnRGYWNlRWxlbWVudC0+dmVydGljYWxBZHZhbmNlWSgpKQoreworfQorCitT
VkdGb250RGF0YTo6flNWR0ZvbnREYXRhKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3Zn
L1NWR0ZvbnREYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIFNWR0ZvbnREYXRhX2gKKyNkZWZpbmUgU1ZHRm9udERhdGFfaAorCisjaWYgRU5B
QkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdGb250RGF0YSB7CitwdWJsaWM6CisgICAgU1ZHRm9u
dERhdGEoU1ZHRm9udEZhY2VFbGVtZW50Kik7CisgICAgdmlydHVhbCB+U1ZHRm9udERhdGEoKTsK
KworICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9mb250RmFjZUVsZW1lbnQuZ2V0KCk7IH0KKworICAgIGZsb2F0IGhvcml6b250YWxPcmln
aW5YKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsT3JpZ2luWDsgfQorICAgIGZsb2F0IGhv
cml6b250YWxPcmlnaW5ZKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsT3JpZ2luWTsgfQor
ICAgIGZsb2F0IGhvcml6b250YWxBZHZhbmNlWCgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRh
bEFkdmFuY2VYOyB9CisKKyAgICBmbG9hdCB2ZXJ0aWNhbE9yaWdpblgoKSBjb25zdCB7IHJldHVy
biBtX3ZlcnRpY2FsT3JpZ2luWDsgfQorICAgIGZsb2F0IHZlcnRpY2FsT3JpZ2luWSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmVydGljYWxPcmlnaW5ZOyB9CisgICAgZmxvYXQgdmVydGljYWxBZHZhbmNl
WSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxBZHZhbmNlWTsgfQorCitwcml2YXRlOgorICAg
IFJlZlB0cjxTVkdGb250RmFjZUVsZW1lbnQ+IG1fZm9udEZhY2VFbGVtZW50OworCisgICAgZmxv
YXQgbV9ob3Jpem9udGFsT3JpZ2luWDsKKyAgICBmbG9hdCBtX2hvcml6b250YWxPcmlnaW5ZOwor
ICAgIGZsb2F0IG1faG9yaXpvbnRhbEFkdmFuY2VYOworCisgICAgZmxvYXQgbV92ZXJ0aWNhbE9y
aWdpblg7CisgICAgZmxvYXQgbV92ZXJ0aWNhbE9yaWdpblk7CisgICAgZmxvYXQgbV92ZXJ0aWNh
bEFkdmFuY2VZOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRp
ZiAvLyBTVkdGb250RGF0YV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDI5Njc4KQorKysgV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICNp
bmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKLQorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNp
bmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NGb250RmFjZVNyY1ZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHkuaCIKQEAgLTEzOCwxMDggKzEzOCwxNjMgQEAgdm9p
ZCBTVkdGb250RmFjZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cgogCiB1bnNpZ25lZCBTVkdGb250
RmFjZUVsZW1lbnQ6OnVuaXRzUGVyRW0oKSBjb25zdAogewotICAgIGlmIChoYXNBdHRyaWJ1dGUo
dW5pdHNfcGVyX2VtQXR0cikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxm
KGdldEF0dHJpYnV0ZSh1bml0c19wZXJfZW1BdHRyKS50b0Zsb2F0KCkpKTsKLQotICAgIHJldHVy
biAxMDAwOwotfQorICAgIEF0b21pY1N0cmluZyB2YWx1ZShnZXRBdHRyaWJ1dGUodW5pdHNfcGVy
X2VtQXR0cikpOworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAxMDAw
OwogCi1TdHJpbmcgU1ZHRm9udEZhY2VFbGVtZW50Ojpmb250RmFtaWx5KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9zdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eVZhbHVlKENTU19QUk9QX0ZP
TlRfRkFNSUxZKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlaWxmKHZhbHVl
LnRvRmxvYXQoKSkpOwogfQogCi1TaW1wbGVGb250RGF0YSogU1ZHRm9udEZhY2VFbGVtZW50Ojpj
cmVhdGVGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29u
c3QKK2ludCBTVkdGb250RmFjZUVsZW1lbnQ6OnhIZWlnaHQoKSBjb25zdAogewotICAgIC8vIFdl
IG9ubHkgZXhwZWN0IHRvIGhhdmUgdGhpcyBtZXRob2QgY2FsbGVkIGJ5IGEgcGFyZW50IGZvbnQg
ZWxlbWVudAotICAgIEFTU0VSVChwYXJlbnROb2RlKCkpOwotICAgIEFTU0VSVChwYXJlbnROb2Rl
KCktPmhhc1RhZ05hbWUoZm9udFRhZykpOwotICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR0ZvbnRFbGVtZW50Kj4ocGFyZW50Tm9kZSgpKTsKLQotICAgIEZv
bnRQbGF0Zm9ybURhdGEqIGNhY2hlZFBsYXRmb3JtRGF0YSA9IEZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwotICAgIGlmICghY2FjaGVkUGxhdGZv
cm1EYXRhKQorICAgIEF0b21pY1N0cmluZyB2YWx1ZShnZXRBdHRyaWJ1dGUoeF9oZWlnaHRBdHRy
KSk7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBP
d25QdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhKG5ldyBTaW1wbGVGb250RGF0YSgqY2FjaGVk
UGxhdGZvcm1EYXRhKSk7Ci0KLSAgICBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBuZXcgU1ZH
Rm9udERhdGEoY29uc3RfY2FzdDxTVkdGb250RmFjZUVsZW1lbnQqPih0aGlzKSk7Ci0gICAgZm9u
dERhdGEtPm1fc3ZnRm9udERhdGEuc2V0KHN2Z0ZvbnREYXRhKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihjZWlsZih2YWx1ZS50b0Zsb2F0KCkpKTsKK30KIAotICAgIGZvbnREYXRhLT5t
X3hIZWlnaHQgPSBmb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHhfaGVpZ2h0QXR0cikudG9GbG9h
dCgpOwotICAgIGZvbnREYXRhLT5tX3VuaXRzUGVyRW0gPSB1bml0c1BlckVtKCk7CitmbG9hdCBT
VkdGb250RmFjZUVsZW1lbnQ6Omhvcml6b250YWxPcmlnaW5YKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fZm9udEVsZW1lbnQpCisgICAgICAgIHJldHVybiAwLjBmOwogCiAgICAgLy8gU3BlYzogVGhl
IFgtY29vcmRpbmF0ZSBpbiB0aGUgZm9udCBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgb3JpZ2lu
IG9mIGEgZ2x5cGggdG8gYmUgdXNlZCB3aGVuCiAgICAgLy8gZHJhd2luZyBob3Jpem9udGFsbHkg
b3JpZW50ZWQgdGV4dC4gKE5vdGUgdGhhdCB0aGUgb3JpZ2luIGFwcGxpZXMgdG8gYWxsIGdseXBo
cyBpbiB0aGUgZm9udC4pCiAgICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVk
LCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAiIHdlcmUgc3BlY2lmaWVkLgotICAg
IGlmIChmb250RWxlbWVudC0+aGFzQXR0cmlidXRlKGhvcml6X29yaWdpbl94QXR0cikpCi0gICAg
ICAgIHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsT3JpZ2luWCA9IGZvbnRFbGVtZW50LT5nZXRBdHRy
aWJ1dGUoaG9yaXpfb3JpZ2luX3hBdHRyKS50b0Zsb2F0KCk7CisgICAgQXRvbWljU3RyaW5nIHZh
bHVlKG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZShob3Jpel9vcmlnaW5feEF0dHIpKTsKKyAg
ICBpZiAodmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIHJldHVy
biB2YWx1ZS50b0Zsb2F0KCk7Cit9CisKK2Zsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpv
bnRhbE9yaWdpblkoKSBjb25zdAoreworICAgIGlmICghbV9mb250RWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIDAuMGY7CiAKICAgICAvLyBTcGVjOiBUaGUgWS1jb29yZGluYXRlIGluIHRoZSBmb250
IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBvcmlnaW4gb2YgYSBnbHlwaCB0byBiZSB1c2VkIHdo
ZW4KICAgICAvLyBkcmF3aW5nIGhvcml6b250YWxseSBvcmllbnRlZCB0ZXh0LiAoTm90ZSB0aGF0
IHRoZSBvcmlnaW4gYXBwbGllcyB0byBhbGwgZ2x5cGhzIGluIHRoZSBmb250LikKICAgICAvLyBJ
ZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2
YWx1ZSBvZiAiMCIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKGZvbnRFbGVtZW50LT5oYXNBdHRy
aWJ1dGUoaG9yaXpfb3JpZ2luX3lBdHRyKSkKLSAgICAgICAgc3ZnRm9udERhdGEtPmhvcml6b250
YWxPcmlnaW5ZID0gZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZShob3Jpel9vcmlnaW5feUF0dHIp
LnRvRmxvYXQoKTsKKyAgICBBdG9taWNTdHJpbmcgdmFsdWUobV9mb250RWxlbWVudC0+Z2V0QXR0
cmlidXRlKGhvcml6X29yaWdpbl95QXR0cikpOworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiAwLjBmOworCisgICAgcmV0dXJuIHZhbHVlLnRvRmxvYXQoKTsKK30KKwor
ZmxvYXQgU1ZHRm9udEZhY2VFbGVtZW50Ojpob3Jpem9udGFsQWR2YW5jZVgoKSBjb25zdAorewor
ICAgIGlmICghbV9mb250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAgICAvLyBT
cGVjOiBUaGUgZGVmYXVsdCBob3Jpem9udGFsIGFkdmFuY2UgYWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5
cGggaW4gaG9yaXpvbnRhbCBvcmllbnRhdGlvbi4gR2x5cGgKICAgICAvLyB3aWR0aHMgYXJlIHJl
cXVpcmVkIHRvIGJlIG5vbi1uZWdhdGl2ZSwgZXZlbiBpZiB0aGUgZ2x5cGggaXMgdHlwaWNhbGx5
IHJlbmRlcmVkIHJpZ2h0LXRvLWxlZnQsCiAgICAgLy8gYXMgaW4gSGVicmV3IGFuZCBBcmFiaWMg
c2NyaXB0cy4KLSAgICBpZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZShob3Jpel9hZHZfeEF0
dHIpKSB7Ci0gICAgICAgIGZsb2F0IGFkdmFuY2UgPSBmb250RWxlbWVudC0+Z2V0QXR0cmlidXRl
KGhvcml6X2Fkdl94QXR0cikudG9GbG9hdCgpOworICAgIEF0b21pY1N0cmluZyB2YWx1ZShtX2Zv
bnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoaG9yaXpfYWR2X3hBdHRyKSk7CisgICAgaWYgKHZhbHVl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CiAKLSAgICAgICAgLy8gVE9ETzogUmVw
b3J0IGVycm9ycywgaW5zdGVhZCBvZiBzaWxlbnQgaWdub3JlPwotICAgICAgICBpZiAoYWR2YW5j
ZSA+PSAwLjApCi0gICAgICAgICAgICBzdmdGb250RGF0YS0+aG9yaXpvbnRhbEFkdmFuY2VYID0g
YWR2YW5jZTsKLSAgICB9CisgICAgcmV0dXJuIHZhbHVlLnRvRmxvYXQoKTsKK30KKworZmxvYXQg
U1ZHRm9udEZhY2VFbGVtZW50Ojp2ZXJ0aWNhbE9yaWdpblgoKSBjb25zdAoreworICAgIGlmICgh
bV9mb250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAgICAvLyBTcGVjOiBUaGUg
ZGVmYXVsdCBYLWNvb3JkaW5hdGUgaW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhl
IG9yaWdpbiBvZiBhIGdseXBoIHRvIGJlIHVzZWQgd2hlbgogICAgIC8vIGRyYXdpbmcgdmVydGlj
YWxseSBvcmllbnRlZCB0ZXh0LiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRo
ZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZQogICAgIC8vIHdlcmUgc2V0IHRvIGhhbGYg
b2YgdGhlIGVmZmVjdGl2ZSB2YWx1ZSBvZiBhdHRyaWJ1dGUgaG9yaXotYWR2LXguCi0gICAgaWYg
KGZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feEF0dHIpKQotICAgICAgICBz
dmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5YID0gZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2
ZXJ0X29yaWdpbl94QXR0cikudG9GbG9hdCgpOwotICAgIGVsc2UKLSAgICAgICAgc3ZnRm9udERh
dGEtPnZlcnRpY2FsT3JpZ2luWCA9IHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2YW5jZVggLyAy
LjBmOworICAgIEF0b21pY1N0cmluZyB2YWx1ZShtX2ZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUo
dmVydF9vcmlnaW5feEF0dHIpKTsKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gaG9yaXpvbnRhbEFkdmFuY2VYKCkgLyAyLjBmOworCisgICAgcmV0dXJuIHZhbHVlLnRv
RmxvYXQoKTsKK30KKworZmxvYXQgU1ZHRm9udEZhY2VFbGVtZW50Ojp2ZXJ0aWNhbE9yaWdpblko
KSBjb25zdAoreworICAgIGlmICghbV9mb250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDAuMGY7
CiAKICAgICAvLyBTcGVjOiBUaGUgZGVmYXVsdCBZLWNvb3JkaW5hdGUgaW4gdGhlIGZvbnQgY29v
cmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9yaWdpbiBvZiBhIGdseXBoIHRvIGJlIHVzZWQgd2hlbgog
ICAgIC8vIGRyYXdpbmcgdmVydGljYWxseSBvcmllbnRlZCB0ZXh0LiBJZiB0aGUgYXR0cmlidXRl
IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZQogICAg
IC8vIHdlcmUgc2V0IHRvIHRoZSBwb3NpdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGZvbnQncyBhc2Nl
bnQgYXR0cmlidXRlLiAgICAgICAgICAgICAKLSAgICBpZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJp
YnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikpCi0gICAgICAgIHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbE9y
aWdpblkgPSBmb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKS50b0Zs
b2F0KCk7Ci0gICAgZWxzZQotICAgICAgICBzdmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5ZID0g
Zm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZShhc2NlbnRBdHRyKS50b0Zsb2F0KCk7CisgICAgQXRv
bWljU3RyaW5nIHZhbHVlKG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95
QXR0cikpOworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBhc2NlbnQo
KTsKKworICAgIHJldHVybiB2YWx1ZS50b0Zsb2F0KCk7Cit9CisKK2Zsb2F0IFNWR0ZvbnRGYWNl
RWxlbWVudDo6dmVydGljYWxBZHZhbmNlWSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZvbnRFbGVt
ZW50KQorICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgIC8vIFNwZWM6IFRoZSBkZWZhdWx0IHZl
cnRpY2FsIGFkdmFuY2UgYWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5cGggaW4gdmVydGljYWwgb3JpZW50
YXRpb24uIElmIHRoZSBhdHRyaWJ1dGUgaXMKICAgICAvLyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZm
ZWN0IGlzIGFzIGlmIGEgdmFsdWUgZXF1aXZhbGVudCBvZiBvbmUgZW0gd2VyZSBzcGVjaWZpZWQg
KHNlZSB1bml0cy1wZXItZW0pLiAgICAgICAgICAgICAgICAgICAgCi0gICAgaWYgKGZvbnRFbGVt
ZW50LT5oYXNBdHRyaWJ1dGUodmVydF9hZHZfeUF0dHIpKQotICAgICAgICBzdmdGb250RGF0YS0+
dmVydGljYWxBZHZhbmNlWSA9IGZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUodmVydF9hZHZfeUF0
dHIpLnRvRmxvYXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbEFk
dmFuY2VZID0gMS4wZjsKKyAgICBBdG9taWNTdHJpbmcgdmFsdWUobV9mb250RWxlbWVudC0+Z2V0
QXR0cmlidXRlKHZlcnRfYWR2X3lBdHRyKSk7CisgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIDEuMGY7CisKKyAgICByZXR1cm4gdmFsdWUudG9GbG9hdCgpOworfQor
CitpbnQgU1ZHRm9udEZhY2VFbGVtZW50Ojphc2NlbnQoKSBjb25zdAoreworICAgIGlmICghbV9m
b250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAgICAvLyBTcGVjOiBTYW1lIHN5
bnRheCBhbmQgc2VtYW50aWNzIGFzIHRoZSAnYXNjZW50JyBkZXNjcmlwdG9yIHdpdGhpbiBhbiBA
Zm9udC1mYWNlIHJ1bGUuIFRoZSBtYXhpbXVtCiAgICAgLy8gdW5hY2NlbnRlZCBoZWlnaHQgb2Yg
dGhlIGZvbnQgd2l0aGluIHRoZSBmb250IGNvb3JkaW5hdGUgc3lzdGVtLiBJZiB0aGUgYXR0cmli
dXRlIGlzIG5vdCBzcGVjaWZpZWQsCiAgICAgLy8gdGhlIGVmZmVjdCBpcyBhcyBpZiB0aGUgYXR0
cmlidXRlIHdlcmUgc2V0IHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuaXRzLXBlci1l
bSB2YWx1ZSBhbmQgdGhlCiAgICAgLy8gdmVydC1vcmlnaW4teSB2YWx1ZSBmb3IgdGhlIGNvcnJl
c3BvbmRpbmcgZm9udC4KLSAgICBpZiAoaGFzQXR0cmlidXRlKGFzY2VudEF0dHIpKQotICAgICAg
ICBmb250RGF0YS0+bV9hc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGdldEF0dHJpYnV0
ZShhc2NlbnRBdHRyKS50b0Zsb2F0KCkpKTsKLSAgICBlbHNlIGlmIChmb250RWxlbWVudC0+aGFz
QXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKSkKLSAgICAgICAgZm9udERhdGEtPm1fYXNjZW50
ID0gZm9udERhdGEtPm1fdW5pdHNQZXJFbSAtIHN0YXRpY19jYXN0PGludD4oY2VpbGYoZm9udEVs
ZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikudG9GbG9hdCgpKSk7Ci0gICAg
ZWxzZSAvLyBNYXRjaCBCYXRpaydzIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIGZvbnREYXRhLT5t
X2FzY2VudCA9IGZvbnREYXRhLT5tX3VuaXRzUGVyRW0gKiAwLjhmOworICAgIEF0b21pY1N0cmlu
ZyB2YWx1ZShtX2ZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXNjZW50QXR0cikpOworICAgIGlm
ICghdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjZWls
Zih2YWx1ZS50b0Zsb2F0KCkpKTsKKworICAgIHZhbHVlID0gbV9mb250RWxlbWVudC0+Z2V0QXR0
cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKTsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odW5pdHNQZXJFbSgpKSAtIHN0YXRpY19jYXN0
PGludD4oY2VpbGYodmFsdWUudG9GbG9hdCgpKSk7CisKKyAgICAvLyBNYXRjaCBCYXRpa3MgZGVm
YXVsdCB2YWx1ZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHVuaXRzUGVyRW0o
KSAqIDAuOGYpKTsKK30KKworaW50IFNWR0ZvbnRGYWNlRWxlbWVudDo6ZGVzY2VudCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2ZvbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gMC4wZjsKIAogICAg
IC8vIFNwZWM6IFNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMgdGhlICdkZXNjZW50JyBkZXNj
cmlwdG9yIHdpdGhpbiBhbiBAZm9udC1mYWNlIHJ1bGUuIFRoZSBtYXhpbXVtCiAgICAgLy8gdW5h
Y2NlbnRlZCBkZXB0aCBvZiB0aGUgZm9udCB3aXRoaW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0
ZW0uIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwKICAgICAvLyB0aGUgZWZmZWN0
IGlzIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhlIHZlcnQtb3JpZ2luLXkgdmFs
dWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZvbnQuCi0gICAgaWYgKGhhc0F0dHJpYnV0ZShkZXNj
ZW50QXR0cikpIHsKLSAgICAgICAgZm9udERhdGEtPm1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGlu
dD4oY2VpbGYoZ2V0QXR0cmlidXRlKGRlc2NlbnRBdHRyKS50b0Zsb2F0KCkpKTsKLQorICAgIEF0
b21pY1N0cmluZyB2YWx1ZShtX2ZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoZGVzY2VudEF0dHIp
KTsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBTb21lIHRlc3RjYXNl
cyB1c2UgYSBuZWdhdGl2ZSBkZXNjZW50IHZhbHVlLCB3aGVyZSBhIHBvc2l0aXZlIHdhcyBtZWFu
dCB0byBiZSB1c2VkIDooCi0gICAgICAgIGlmIChmb250RGF0YS0+bV9kZXNjZW50IDwgMCkKLSAg
ICAgICAgICAgIGZvbnREYXRhLT5tX2Rlc2NlbnQgPSAtZm9udERhdGEtPm1fZGVzY2VudDsKLSAg
ICB9IGVsc2UgaWYgKGZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIp
KQotICAgICAgICBmb250RGF0YS0+bV9kZXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihm
b250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKS50b0Zsb2F0KCkpKTsK
LSAgICBlbHNlIC8vIE1hdGNoIEJhdGlrJ3MgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgZm9udERh
dGEtPm1fZGVzY2VudCA9IGZvbnREYXRhLT5tX3VuaXRzUGVyRW0gKiAwLjJmOworICAgICAgICBp
bnQgZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYodmFsdWUudG9GbG9hdCgpKSk7Cisg
ICAgICAgIHJldHVybiBkZXNjZW50IDwgMCA/IC1kZXNjZW50IDogZGVzY2VudDsKKyAgICB9CisK
KyAgICB2YWx1ZSA9IG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0
cik7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KGNlaWxmKHZhbHVlLnRvRmxvYXQoKSkpOworCisgICAgLy8gTWF0Y2ggQmF0aWtzIGRl
ZmF1bHQgdmFsdWUKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjZWlsZih1bml0c1BlckVt
KCkgKiAwLjJmKSk7Cit9CiAKLSAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOworU3RyaW5n
IFNWR0ZvbnRGYWNlRWxlbWVudDo6Zm9udEZhbWlseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlWYWx1ZShDU1NfUFJPUF9GT05UX0ZBTUlMWSk7
Cit9CisKK1NWR0ZvbnRFbGVtZW50KiBTVkdGb250RmFjZUVsZW1lbnQ6OmFzc29jaWF0ZWRGb250
RWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udEVsZW1lbnQuZ2V0KCk7CiB9CiAK
IHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZWJ1aWxkRm9udEZhY2UoKQpAQCAtMjUyLDcgKzMw
Nyw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZWJ1aWxkRm9udEZhY2UKICAgICBpZiAo
cGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShmb250VGFnKSkgewogICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKIAotICAg
ICAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gc3JjID0gbmV3IENTU0ZvbnRGYWNlU3Jj
VmFsdWUoU3RyaW5nSW1wbDo6ZW1wdHkoKSwgdHJ1ZSAvKiBpc0xvY2FsICovKTsKKyAgICAgICAg
UmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+IHNyYyA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVl
KGZvbnRGYW1pbHkoKSwgdHJ1ZSAvKiBpc0xvY2FsICovKTsKICAgICAgICAgc3JjLT5zZXRTVkdG
b250RmFjZUVsZW1lbnQodGhpcyk7CiAgICAgICAgIGxpc3QtPmFwcGVuZChzcmMpOwogCkBAIC0y
NjAsNiArMzE1LDcgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZQog
ICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSogc3JjUHJvcGVydHlSZWYgPSAmc3JjUHJvcGVydHk7
CiAgICAgICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydGllcygmc3JjUHJv
cGVydHlSZWYsIDEpOwogCisgICAgICAgIG1fZm9udEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdG
b250RWxlbWVudCo+KHBhcmVudE5vZGUoKSk7CiAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0
eWxlU2VsZWN0b3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMwNCwyMCArMzYwLDYg
QEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZAogICAgIHJlYnVpbGRG
b250RmFjZSgpOwogfQogCi1TVkdGb250RWxlbWVudCogU1ZHRm9udEZhY2VFbGVtZW50Ojphc3Nv
Y2lhdGVkRm9udEVsZW1lbnQoKSBjb25zdAotewotICAgIGlmIChOb2RlKiBwYXJlbnQgPSBwYXJl
bnROb2RlKCkpIHsKLSAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShmb250VGFnKSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KHBhcmVudCk7Ci0g
ICAgICAgIGVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShkZWZzVGFnKSkgewotICAgICAgICAg
ICAgLy8gVE9ETzogU3VwcG9ydCBleHRlcm5hbCBTVkcgZm9udHMhCi0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoU1ZHX0ZPTlRTKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmgJKHJl
dmlzaW9uIDI5Njc4KQorKysgV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDggKzI4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgQ1NTRm9udEZhY2VSdWxlOwogICAgIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OwotICAgIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLSAgICBjbGFzcyBTaW1wbGVGb250RGF0YTsK
ICAgICBjbGFzcyBTVkdGb250RWxlbWVudDsKIAogICAgIGNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVu
dCA6IHB1YmxpYyBTVkdFbGVtZW50IHsKQEAgLTQzLDE4ICs0MSwyNSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogCiAg
ICAgICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0oKSBjb25zdDsKKyAgICAgICAgaW50IHhIZWlnaHQo
KSBjb25zdDsKKyAgICAgICAgZmxvYXQgaG9yaXpvbnRhbE9yaWdpblgoKSBjb25zdDsKKyAgICAg
ICAgZmxvYXQgaG9yaXpvbnRhbE9yaWdpblkoKSBjb25zdDsKKyAgICAgICAgZmxvYXQgaG9yaXpv
bnRhbEFkdmFuY2VYKCkgY29uc3Q7CisgICAgICAgIGZsb2F0IHZlcnRpY2FsT3JpZ2luWCgpIGNv
bnN0OworICAgICAgICBmbG9hdCB2ZXJ0aWNhbE9yaWdpblkoKSBjb25zdDsKKyAgICAgICAgZmxv
YXQgdmVydGljYWxBZHZhbmNlWSgpIGNvbnN0OworICAgICAgICBpbnQgYXNjZW50KCkgY29uc3Q7
CisgICAgICAgIGludCBkZXNjZW50KCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBmb250RmFtaWx5
KCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCByZWJ1aWxkRm9udEZhY2UoKTsKLSAgICAgICAgU2lt
cGxlRm9udERhdGEqIGNyZWF0ZUZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0
OwotCi0gICAgICAgIC8vIElmIG91ciBwYXJlbnQgZWxlbWVudCBpcyA8Zm9udD4sIGl0IHdpbGwg
YmUgcmV0dXJuZWQuICh0aGlzIGlzIHRoZSBjYXNlIGZvciBhIFNWRyBGb250IGRlc2NyaWJlZCBp
biB0aGUgc2FtZSBkb2N1bWVudCkKLSAgICAgICAgLy8gT3RoZXJ3aGlzZSBpdCB3aWxsIHJldHVy
biB0aGUgPGZvbnQ+IGVsZW1lbnQgdGhhdCBpcyByZWZlcmVuY2VkIGJ5IHRoZSBmaXJzdCB2YWxp
ZCA8Zm9udC1mYWNlLXNyYz4gZWxlbWVudC4KICAgICAgICAgU1ZHRm9udEVsZW1lbnQqIGFzc29j
aWF0ZWRGb250RWxlbWVudCgpIGNvbnN0OworICAgICAgICB2b2lkIHJlYnVpbGRGb250RmFjZSgp
OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4gbV9mb250
RmFjZVJ1bGU7CiAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9z
dHlsZURlY2xhcmF0aW9uOworCisgICAgICAgIFJlZlB0cjxTVkdGb250RWxlbWVudD4gbV9mb250
RWxlbWVudDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdHbHlwaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ds
eXBoRWxlbWVudC5jcHAJKHJldmlzaW9uIDI5Njc4KQorKysgV2ViQ29yZS9zdmcvU1ZHR2x5cGhF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAi
U1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJTVkdGb250RGF0YS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZH
UGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKQEAgLTkzLDcx
ICs5NCw3NyBAQCBzdGF0aWMgaW5saW5lIFBhdGggcGFyc2VQYXRoRGF0YShjb25zdCBBCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTVkdHbHlwaEVsZW1lbnQ6OmluaGVyaXRVbnNwZWNp
ZmllZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBTVkdGb250RGF0
YSogc3ZnRm9udERhdGEpCit2b2lkIFNWR0dseXBoRWxlbWVudDo6aW5oZXJpdFVuc3BlY2lmaWVk
QXR0cmlidXRlcyhTVkdHbHlwaElkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFNWR0ZvbnRE
YXRhKiBzdmdGb250RGF0YSkKIHsKICAgICBpZiAoaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5j
ZVggPT0gU1ZHR2x5cGhJZGVudGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpKQotICAgICAgICBpZGVu
dGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCA9IHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2YW5j
ZVg7CisgICAgICAgIGlkZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYID0gc3ZnRm9udERhdGEt
Pmhvcml6b250YWxBZHZhbmNlWCgpOwogCiAgICAgaWYgKGlkZW50aWZpZXIudmVydGljYWxPcmln
aW5YID09IFNWR0dseXBoSWRlbnRpZmllcjo6aW5oZXJpdGVkVmFsdWUoKSkKLSAgICAgICAgaWRl
bnRpZmllci52ZXJ0aWNhbE9yaWdpblggPSBzdmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5YOwor
ICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9IHN2Z0ZvbnREYXRhLT52ZXJ0aWNh
bE9yaWdpblgoKTsKIAogICAgIGlmIChpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSA9PSBTVkdH
bHlwaElkZW50aWZpZXI6OmluaGVyaXRlZFZhbHVlKCkpCi0gICAgICAgIGlkZW50aWZpZXIudmVy
dGljYWxPcmlnaW5ZID0gc3ZnRm9udERhdGEtPnZlcnRpY2FsT3JpZ2luWTsKKyAgICAgICAgaWRl
bnRpZmllci52ZXJ0aWNhbE9yaWdpblkgPSBzdmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5ZKCk7
CiAKICAgICBpZiAoaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID09IFNWR0dseXBoSWRlbnRp
Zmllcjo6aW5oZXJpdGVkVmFsdWUoKSkKLSAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFu
Y2VZID0gc3ZnRm9udERhdGEtPnZlcnRpY2FsQWR2YW5jZVk7CisgICAgICAgIGlkZW50aWZpZXIu
dmVydGljYWxBZHZhbmNlWSA9IHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbEFkdmFuY2VZKCk7CiB9CiAK
LVNWR0dseXBoSWRlbnRpZmllciBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2x5cGhJZGVudGlmaWVy
KCkgY29uc3QKK1NWR0dseXBoSWRlbnRpZmllciBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2VuZXJp
Y0dseXBoSWRlbnRpZmllcihjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50KQogewogICAgIFNWR0ds
eXBoSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgIGlkZW50aWZpZXIuZ2x5cGhOYW1lID0gZ2V0
QXR0cmlidXRlKGdseXBoX25hbWVBdHRyKTsKLSAgICBpZGVudGlmaWVyLm9yaWVudGF0aW9uID0g
cGFyc2VPcmllbnRhdGlvbihnZXRBdHRyaWJ1dGUob3JpZW50YXRpb25BdHRyKSk7Ci0gICAgaWRl
bnRpZmllci5hcmFiaWNGb3JtID0gcGFyc2VBcmFiaWNGb3JtKGdldEF0dHJpYnV0ZShhcmFiaWNf
Zm9ybUF0dHIpKTsKLSAgICBpZGVudGlmaWVyLnBhdGhEYXRhID0gcGFyc2VQYXRoRGF0YShnZXRB
dHRyaWJ1dGUoZEF0dHIpKTsKLQotICAgIFN0cmluZyBsYW5ndWFnZSA9IGdldEF0dHJpYnV0ZShY
TUxOYW1lczo6bGFuZ0F0dHIpOwotICAgIGlmIChsYW5ndWFnZS5pc0VtcHR5KCkpIC8vIFNWRyBk
ZWZpbmVzIGEgbm9uLXhtbCBwcmVmaXhlZCAibGFuZyIgcHJvcGVydCBmb3IgPGdseXBoPiBpdCBz
ZWVtcy4KLSAgICAgICAgbGFuZ3VhZ2UgPSBnZXRBdHRyaWJ1dGUoImxhbmciKTsKLQotICAgIGlk
ZW50aWZpZXIubGFuZ3VhZ2VzID0gcGFyc2VEZWxpbWl0ZWRTdHJpbmcobGFuZ3VhZ2UsICcsJyk7
CisgICAgaWRlbnRpZmllci5wYXRoRGF0YSA9IHBhcnNlUGF0aERhdGEoZWxlbWVudC0+Z2V0QXR0
cmlidXRlKGRBdHRyKSk7CiAKICAgICAvLyBTcGVjOiBUaGUgaG9yaXpvbnRhbCBhZHZhbmNlIGFm
dGVyIHJlbmRlcmluZyB0aGUgZ2x5cGggaW4gaG9yaXpvbnRhbCBvcmllbnRhdGlvbi4KICAgICAv
LyBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYg
dGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUKICAgICAvLyB2YWx1ZSBvZiB0aGUgZm9udCdz
IGhvcml6LWFkdi14IGF0dHJpYnV0ZS4gR2x5cGggd2lkdGhzIGFyZSByZXF1aXJlZCB0byBiZSBu
b24tbmVnYXRpdmUsCiAgICAgLy8gZXZlbiBpZiB0aGUgZ2x5cGggaXMgdHlwaWNhbGx5IHJlbmRl
cmVkIHJpZ2h0LXRvLWxlZnQsIGFzIGluIEhlYnJldyBhbmQgQXJhYmljIHNjcmlwdHMuCi0gICAg
aWYgKGhhc0F0dHJpYnV0ZShob3Jpel9hZHZfeEF0dHIpKQotICAgICAgICBpZGVudGlmaWVyLmhv
cml6b250YWxBZHZhbmNlWCA9IGdldEF0dHJpYnV0ZShob3Jpel9hZHZfeEF0dHIpLnRvRmxvYXQo
KTsKKyAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlKGhvcml6X2Fkdl94QXR0cikpCisgICAg
ICAgIGlkZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYID0gZWxlbWVudC0+Z2V0QXR0cmlidXRl
KGhvcml6X2Fkdl94QXR0cikudG9GbG9hdCgpOwogICAgIGVsc2UKICAgICAgICAgaWRlbnRpZmll
ci5ob3Jpem9udGFsQWR2YW5jZVggPSBTVkdHbHlwaElkZW50aWZpZXI6OmluaGVyaXRlZFZhbHVl
KCk7CiAKICAgICAvLyBTcGVjOiBUaGUgWC1jb29yZGluYXRlIGluIHRoZSBmb250IGNvb3JkaW5h
dGUgc3lzdGVtIG9mIHRoZSBvcmlnaW4gb2YgdGhlIGdseXBoIHRvIGJlCiAgICAgLy8gdXNlZCB3
aGVuIGRyYXdpbmcgdmVydGljYWxseSBvcmllbnRlZCB0ZXh0LiBJZiB0aGUgYXR0cmlidXRlIGlz
IG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QKICAgICAvLyBpcyBhcyBpZiB0aGUgYXR0cmlidXRl
IHdlcmUgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgZm9udCdzIHZlcnQtb3JpZ2luLXggYXR0cmli
dXRlLgotICAgIGlmIChoYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feEF0dHIpKQotICAgICAgICBp
ZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9IGdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl94QXR0
cikudG9GbG9hdCgpOworICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5f
eEF0dHIpKQorICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9IGVsZW1lbnQtPmdl
dEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl94QXR0cikudG9GbG9hdCgpOwogICAgIGVsc2UKICAgICAg
ICAgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblggPSBTVkdHbHlwaElkZW50aWZpZXI6OmluaGVy
aXRlZFZhbHVlKCk7CiAKICAgICAvLyBTcGVjOiBUaGUgWS1jb29yZGluYXRlIGluIHRoZSBmb250
IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBvcmlnaW4gb2YgYSBnbHlwaCB0byBiZQogICAgIC8v
IHVzZWQgd2hlbiBkcmF3aW5nIHZlcnRpY2FsbHkgb3JpZW50ZWQgdGV4dC4gSWYgdGhlIGF0dHJp
YnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0CiAgICAgLy8gaXMgYXMgaWYgdGhlIGF0
dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGZvbnQncyB2ZXJ0LW9yaWdpbi15
IGF0dHJpYnV0ZS4KLSAgICBpZiAoaGFzQXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKSkKLSAg
ICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkgPSBnZXRBdHRyaWJ1dGUodmVydF9vcmln
aW5feUF0dHIpLnRvRmxvYXQoKTsKKyAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlKHZlcnRf
b3JpZ2luX3lBdHRyKSkKKyAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkgPSBlbGVt
ZW50LT5nZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpLnRvRmxvYXQoKTsKICAgICBlbHNl
CiAgICAgICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5ZID0gU1ZHR2x5cGhJZGVudGlmaWVy
Ojppbmhlcml0ZWRWYWx1ZSgpOwogCiAgICAgLy8gU3BlYzogVGhlIHZlcnRpY2FsIGFkdmFuY2Ug
YWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5cGggaW4gdmVydGljYWwgb3JpZW50YXRpb24uCiAgICAgLy8g
SWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIHRo
ZSBhdHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhlCiAgICAgLy8gdmFsdWUgb2YgdGhlIGZvbnQncyB2
ZXJ0LWFkdi15IGF0dHJpYnV0ZS4KLSAgICBpZiAoaGFzQXR0cmlidXRlKHZlcnRfYWR2X3lBdHRy
KSkKLSAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID0gZ2V0QXR0cmlidXRlKHZl
cnRfYWR2X3lBdHRyKS50b0Zsb2F0KCk7CisgICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2
ZXJ0X2Fkdl95QXR0cikpCisgICAgICAgIGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSA9IGVs
ZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X2Fkdl95QXR0cikudG9GbG9hdCgpOwogICAgIGVsc2UK
ICAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID0gU1ZHR2x5cGhJZGVudGlmaWVy
Ojppbmhlcml0ZWRWYWx1ZSgpOwogCiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKK1NWR0ds
eXBoSWRlbnRpZmllciBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2x5cGhJZGVudGlmaWVyKCkgY29u
c3QKK3sKKyAgICBTVkdHbHlwaElkZW50aWZpZXIgaWRlbnRpZmllcihidWlsZEdlbmVyaWNHbHlw
aElkZW50aWZpZXIodGhpcykpOworICAgIGlkZW50aWZpZXIuZ2x5cGhOYW1lID0gZ2V0QXR0cmli
dXRlKGdseXBoX25hbWVBdHRyKTsKKyAgICBpZGVudGlmaWVyLm9yaWVudGF0aW9uID0gcGFyc2VP
cmllbnRhdGlvbihnZXRBdHRyaWJ1dGUob3JpZW50YXRpb25BdHRyKSk7CisgICAgaWRlbnRpZmll
ci5hcmFiaWNGb3JtID0gcGFyc2VBcmFiaWNGb3JtKGdldEF0dHJpYnV0ZShhcmFiaWNfZm9ybUF0
dHIpKTsKKworICAgIFN0cmluZyBsYW5ndWFnZSA9IGdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFu
Z0F0dHIpOworICAgIGlmIChsYW5ndWFnZS5pc0VtcHR5KCkpIC8vIFNWRyBkZWZpbmVzIGEgbm9u
LXhtbCBwcmVmaXhlZCAibGFuZyIgcHJvcGVydCBmb3IgPGdseXBoPiBpdCBzZWVtcy4KKyAgICAg
ICAgbGFuZ3VhZ2UgPSBnZXRBdHRyaWJ1dGUoImxhbmciKTsKKworICAgIGlkZW50aWZpZXIubGFu
Z3VhZ2VzID0gcGFyc2VEZWxpbWl0ZWRTdHJpbmcobGFuZ3VhZ2UsICcsJyk7CisgICAgcmV0dXJu
IGlkZW50aWZpZXI7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkdfRk9OVFMpCkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdHbHlwaEVsZW1lbnQuaAkocmV2aXNpb24gMjk2NzgpCisrKyBXZWJDb3JlL3N2Zy9TVkdH
bHlwaEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CiAgICAgc3RydWN0IFNWR0Zv
bnREYXRhOwogCiAgICAgLy8gRGVzY3JpYmUgYSBTVkcgPGdseXBoPiBlbGVtZW50CkBAIC0xMDYs
OSArMTA3LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHJl
bmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAg
IFNWR0dseXBoSWRlbnRpZmllciBidWlsZEdseXBoSWRlbnRpZmllcigpIGNvbnN0OwotICAgICAg
ICBzdGF0aWMgdm9pZCBpbmhlcml0VW5zcGVjaWZpZWRBdHRyaWJ1dGVzKFNWR0dseXBoSWRlbnRp
ZmllciYsIFNWR0ZvbnREYXRhKik7Ci0gICAgfTsKIAorICAgICAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdXNlZCBieSBTVkdGb250CisgICAgICAgIHN0YXRpYyB2b2lkIGluaGVyaXRVbnNwZWNpZmll
ZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVudGlmaWVyJiwgY29uc3QgU1ZHRm9udERhdGEqKTsKKwor
ICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gc2hhcmVkIGJldHdlZW4gU1ZHR2x5cGhFbGVtZW50
ICYgU1ZHTWlzc2luZ0dseXBoRWxlbWVudAorICAgICAgICBzdGF0aWMgU1ZHR2x5cGhJZGVudGlm
aWVyIGJ1aWxkR2VuZXJpY0dseXBoSWRlbnRpZmllcihjb25zdCBTVkdFbGVtZW50Kik7CisgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdNaXNz
aW5nR2x5cGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdNaXNzaW5n
R2x5cGhFbGVtZW50LmNwcAkocmV2aXNpb24gMjk2NzgpCisrKyBXZWJDb3JlL3N2Zy9TVkdNaXNz
aW5nR2x5cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTIgKzIyLDggQEAKICNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQogI2luY2x1ZGUgIlNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCIK
IAotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcg
bmFtZXNwYWNlIFNWR05hbWVzOwotCiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50OjpTVkdNaXNzaW5n
R2x5cGhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2Mp
CiAgICAgOiBTVkdTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykKIHsKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI5Njc4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzYgQEAKKzIwMDgtMDEtMjAgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm4j
a2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVcGRhdGUgbGF5b3V0IHRlc3QgcmVzdWx0cyBhZnRlciBhZGRpbmcgbWlzc2luZy1nbHlwaCBz
dXBwb3J0LgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1n
bHlwaC0wMy10LWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcv
VzNDLVNWRy0xLjEvZm9udHMtZ2x5cGgtMDMtdC1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1nbHlwaC0wMy10LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWdseXBoLTA0LXQt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvdGV4
dC10ZXh0LTA2LXQtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2
Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDYtdC1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDYtdC1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9iYXRpay90ZXh0L3RleHRFZmZlY3QtZXhwZWN0ZWQu
Y2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9iYXRpay90ZXh0L3RleHRFZmZl
Y3QtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvYmF0aWsvdGV4dC90
ZXh0RWZmZWN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2JhdGlr
L3RleHQvdGV4dEVmZmVjdDMtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0v
bWFjL3N2Zy9iYXRpay90ZXh0L3RleHRFZmZlY3QzLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvc3ZnL2JhdGlrL3RleHQvdGV4dEVmZmVjdDMtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9zdmcvY3VzdG9tL2RvbWluYW50LWJhc2VsaW5lLWhhbmdpbmct
ZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vZG9t
aW5hbnQtYmFzZWxpbmUtaGFuZ2luZy1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL3N2Zy9jdXN0b20vdXNlLW9uLWctY29udGFpbmluZy1mb3JlaWduT2JqZWN0LWFuZC1pbWFn
ZS1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS91
c2Utb24tZy1jb250YWluaW5nLWZvcmVpZ25PYmplY3QtYW5kLWltYWdlLWV4cGVjdGVkLnBuZzoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2hpeGllL21peGVkLzAwOC1leHBlY3RlZC5jaGVj
a3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2hpeGllL21peGVkLzAwOC1leHBlY3Rl
ZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9oaXhpZS9taXhlZC8wMDktZXhwZWN0
ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9oaXhpZS9taXhlZC8wMDkt
ZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvaGl4aWUvdmlld2JveC9w
cmVzZXJ2ZUFzcGVjdFJhdGlvLzAwMS1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvc3ZnL2hpeGllL3ZpZXdib3gvcHJlc2VydmVBc3BlY3RSYXRpby8wMDEtZXhwZWN0
ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvdGV4dC90ZXh0LXRleHQtMDYtdC1l
eHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC10
ZXh0LTA2LXQtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvdGV4dC90
ZXh0LXRleHQtMDYtdC1leHBlY3RlZC50eHQ6CisKIDIwMDgtMDEtMjAgIENvbGxpbiBKYWNrc29u
ICA8d2Via2l0QGNvbGxpbmphY2tzb24uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBX
ZWluaWcuCg==
</data>
<flag name="review"
          id="8126"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18587</attachid>
            <date>2008-01-21 14:05:33 -0800</date>
            <delta_ts>2008-01-21 14:30:26 -0800</delta_ts>
            <desc>Updated patch v2</desc>
            <filename>SVGFontsPatch.diff</filename>
            <type>text/plain</type>
            <size>90686</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTY5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE0IEBACisyMDA4LTAxLTIxICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYy4gT2xkZXIgcGFydHMgcmV2
aWV3ZWQgYnkgRGFuLgorCisgICAgICAgIEZpeGVzOiBodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjg4MCAoU1ZHQ1NTRm9udEZhY2Ugc2hvdWxkIGRpZSwgaW5zdGVhZCBp
bnRlZ3JhdGUgd2l0aGluIHRoZSBGb250Q2FjaGUuKQorICAgICAgICBGaXhlczogaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3ODQgKEluLWRvY3VtZW50IGZvbnRzIHdv
cmsgb25seSBhcyB0aGUgZmlyc3QgY2hpbGQgdG8gZm9udC1mYWNlLXNyYykKKworICAgICAgICBQ
cm9wZXIgaW50ZWdyYXRpb24gb2YgU1ZHIEZvbnRzIHdpdGhpbiB0aGUgZXhpc3RpbmcgY3VzdG9t
IGZvbnQgY29uY2VwdCwgcmVtb3ZpbmcgdGhlIG5lZWQgZm9yIGEgY3VzdG9tIFNWR0NTU0ZvbnRG
YWNlLgorICAgICAgICBJbnRlZ3JhdGUgd2l0aGluIHRoZSBDU1NGb250RmFjZVNvdXJjZSBsb2dp
YyBmb3IgY2FjaGluZyBzdXBwb3J0LCBhcyB3ZWxsIGFzIHRoZSBmcmFtZXdvcmsgZm9yIGV4dGVy
bmFsIFNWRyBGb250cy4KKworICAgICAgICBQcm9wZXIgaGFuZGxpbmcgb2YgbWlzc2luZyBnbHlw
aHMsIHVzaW5nIDxtaXNzaW5nLWdseXBoPiBlbGVtZW50LiBJZiB0aGF0IGlzIG5vdCBzcGVjaWZp
ZWQgaW4gYSBmb250LCBmYWxsYmFjayB0byBub24tU1ZHIGZvbnQgcmVuZGVyaW5nLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOgorICAg
ICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9u
dEZhY2VTb3VyY2U6OnN2Z0ZvbnRGYWNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
b250RmFjZVNvdXJjZTo6c2V0U1ZHRm9udEZhY2VFbGVtZW50KToKKyAgICAgICAgKiBjc3MvQ1NT
Rm9udEZhY2VTcmNWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1
ZTo6bV9pc0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU3JjVmFsdWU6On5D
U1NGb250RmFjZVNyY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU3JjVmFs
dWU6OnN2Z0ZvbnRGYWNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNy
Y1ZhbHVlOjpzZXRTVkdGb250RmFjZUVsZW1lbnQpOgorICAgICAgICAqIGNzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFj
ZVJ1bGUpOgorICAgICAgICAqIGNzcy9TVkdDU1NGb250RmFjZS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogY3NzL1NWR0NTU0ZvbnRGYWNlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojphc2NlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZGVzY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojps
aW5lU3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp4SGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmZvbnRTZWxlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmlzU1ZHRm9udCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6U2ltcGxlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6YXNjZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpkZXNjZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpsaW5lU3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6bGluZUdhcCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
eEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6aXNTVkdGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzdmdGb250RGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250UGxhdGZv
cm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNpemUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHVGV4dDo6cmVsYXRpdmVCQm94KToKKyAgICAgICAgKiBzdmcvU1ZHRm9udC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb252ZXJ0RW1Vbml0VG9QaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpp
c0NvbXBhdGlibGVHbHlwaCk6CisgICAgICAgIChXZWJDb3JlOjpzdmdGb250QW5kRm9udEZhY2VF
bGVtZW50Rm9yRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFJ1bldhbGtlcjo6
U1ZHVGV4dFJ1bldhbGtlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuV2Fsa2VyOjp3
YWxrKToKKyAgICAgICAgKFdlYkNvcmU6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpmbG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6ZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KToKKyAgICAg
ICAgKFdlYkNvcmU6OmRyYXdUZXh0VXNpbmdTVkdGb250Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6ZHJhd1RleHRNaXNzaW5nR2x5cGhDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udCk6CisgICAgICAgICogc3ZnL1NWR0ZvbnREYXRhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RGF0YTo6U1ZHRm9udERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6On5TVkdGb250RGF0YSk6CisgICAgICAgICog
c3ZnL1NWR0ZvbnREYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6
OnN2Z0ZvbnRGYWNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RGF0YTo6aG9y
aXpvbnRhbE9yaWdpblgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6Omhvcml6b250
YWxPcmlnaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpob3Jpem9udGFsQWR2
YW5jZVgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OnZlcnRpY2FsT3JpZ2luWCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RGF0YTo6dmVydGljYWxPcmlnaW5ZKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjp2ZXJ0aWNhbEFkdmFuY2VZKToKKyAgICAgICAgKiBz
dmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNl
RWxlbWVudDo6dW5pdHNQZXJFbSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1l
bnQ6OnhIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50Ojpob3Jp
em9udGFsT3JpZ2luWCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6Omhv
cml6b250YWxPcmlnaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6
aG9yaXpvbnRhbEFkdmFuY2VYKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVu
dDo6dmVydGljYWxPcmlnaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVu
dDo6dmVydGljYWxPcmlnaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVu
dDo6dmVydGljYWxBZHZhbmNlWSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1l
bnQ6OmFzY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OmRlc2Nl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50Ojpmb250RmFtaWx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6YXNzb2NpYXRlZEZvbnRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRG
YWNlKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udEZhY2VFbGVtZW50Lmg6CisgICAgICAgICogc3Zn
L1NWR0dseXBoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1lbnQ6
OmluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VT
VkdHbHlwaEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1lbnQ6OmJ1
aWxkR2VuZXJpY0dseXBoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVs
ZW1lbnQ6OnF1ZXJ5U1ZHRm9udExhbmd1YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBo
RWxlbWVudDo6YnVpbGRHbHlwaElkZW50aWZpZXIpOgorICAgICAgICAqIHN2Zy9TVkdHbHlwaEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5jcHA6CisgICAg
ICAgICogc3ZnL3N2Z2F0dHJzLmluOgorCiAyMDA4LTAxLTIxICBEYXZpZCBIeWF0dCAgPGh5YXR0
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggZm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2OTM1CkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDI5Njk3KQorKysgV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTYzMyw3ICsxNjMzLDYgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2Nzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwIFwKIAlXZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwIFwKIAlXZWJDb3JlL2Nz
cy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBcCi0JV2ViQ29yZS9jc3MvU1ZHQ1NTRm9udEZhY2Uu
Y3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdHlsZS5jcHAgXAogCVdlYkNvcmUv
cmVuZGVyaW5nL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwIFwKQEAgLTE2OTQsNiArMTY5Myw3IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmNwcCBcCiAJV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcCBcCiAJV2ViQ29yZS9z
dmcvU1ZHRm9udC5jcHAgXAorCVdlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcCBcCiAJV2ViQ29y
ZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1l
bnQuY3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUZvcm1hdEVsZW1lbnQuY3BwIFwKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBy
bwkocmV2aXNpb24gMjk2OTcpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzY2LDcgKzEzNjYsNiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsK
ICAgICAgICAgY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgXAogICAgICAg
ICBjc3MvU1ZHQ1NTUGFyc2VyLmNwcCBcCiAgICAgICAgIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9y
LmNwcCBcCi0gICAgICAgIGNzcy9TVkdDU1NGb250RmFjZS5jcHAgXAogICAgICAgICByZW5kZXJp
bmcvU1ZHUmVuZGVyU3R5bGUuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1NWR1JlbmRlclN0eWxl
RGVmcy5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9KU1NWR0xhenlFdmVudExpc3RlbmVyLmNw
cCBcCkBAIC0xNDI3LDYgKzE0MjYsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEp
IHsKICAgICAgICAgc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAg
XAogICAgICAgICBzdmcvU1ZHRml0VG9WaWV3Qm94LmNwcCBcCiAgICAgICAgIHN2Zy9TVkdGb250
LmNwcCBcCisgICAgICAgIHN2Zy9TVkdGb250RGF0YS5jcHAgXAogICAgICAgICBzdmcvU1ZHRm9u
dEVsZW1lbnQuY3BwIFwKICAgICAgICAgc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAgXAogICAg
ICAgICBzdmcvU1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDI5Njk3KQorKysgV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDg5NCwxMCArNDg5
NCw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGNzc1xTVkdDU1NGb250RmFjZS5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcU1ZHQ1NTUGFyc2VyLmNwcCINCiAJCQkJPg0K
IAkJCTwvRmlsZT4NCkBAIC04NDA1LDYgKzg0MDEsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXFNWR0ZvbnREYXRhLmNwcCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xT
VkdGb250RGF0YS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3ZnXFNWR0ZvbnRFbGVtZW50LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjk2OTcpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjgyOSw2ICsyODI5LDggQEAKIAkJQjIyMzYyMkYwQzNBRjA3MTAw
MDhDQTlCIC8qIERPTVNWR1RleHRQYXRoRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIzNjIyQzBDM0FGMDcxMDAwOENBOUIg
LyogRE9NU1ZHVGV4dFBhdGhFbGVtZW50SW50ZXJuYWwuaCAqLzsgfTsKIAkJQjIzNTQwRjIwRDAw
NzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3Ry
aW5nVHJ1bmNhdG9yLmNwcCAqLzsgfTsKIAkJQjIzNTQwRjMwRDAwNzgyRTAwMjM4MkZBIC8qIFN0
cmluZ1RydW5jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjIzNTQwRjEwRDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUIyMzdDOEE3MEQz
NDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjM3QzhBNTBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9u
dERhdGEuY3BwICovOyB9OworCQlCMjM3QzhBODBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMzdD
OEE2MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5oICovOyB9OwogCQlCMjQwNTU2NTBC
NUJFNjQwMDAyQTI4QzAgLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlSW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNDA1NTYzMEI1QkU2NDAw
MDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VJbnRlcm5hbC5oICovOyB9OwogCQlCMjQw
NTU2NjBCNUJFNjQwMDAyQTI4QzAgLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdEludGVybmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjQwNTU2
NDBCNUJFNjQwMDAyQTI4QzAgLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdEludGVybmFsLmgg
Ki87IH07CiAJCUIyNTU5OTJDMEQwMEQ4QkEwMEJCODI1QyAvKiBDZ1N1cHBvcnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4OTAwRDAwRDhC
ODAwQkI4MjVDIC8qIENnU3VwcG9ydC5jcHAgKi87IH07CkBAIC0zMTU1LDggKzMxNTcsNiBAQAog
CQlCMkNCOTI2NDBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjYw
MEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tICovOyB9Owog
CQlCMkNDRUM0NzBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQ0VD
NDUwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCAqLzsg
fTsKIAkJQjJDQ0VDNDgwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkND
RUM0NjBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCAqLzsg
fTsKLQkJQjJEMTlBNDgwQ0VGOURDMTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRDE5QTQ2MENFRjlE
QzEwMDBFMDMzQiAvKiBTVkdDU1NGb250RmFjZS5jcHAgKi87IH07Ci0JCUIyRDE5QTQ5MENFRjlE
QzEwMDBFMDMzQiAvKiBTVkdDU1NGb250RmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJEMTlBNDcwQ0VGOURDMTAwMEUwMzNCIC8qIFNWR0NTU0Zv
bnRGYWNlLmggKi87IH07CiAJCUIyRDNGQzhBMEMyMjEyQ0IwMENGMzYxOCAvKiBKU1NWR1RyYW5z
Zm9ybUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJEM0ZDODkwQzIyMTJDQjAwQ0YzNjE4IC8qIEpTU1ZHVHJhbnNmb3JtTGlzdEN1
c3RvbS5jcHAgKi87IH07CiAJCUIyRTI3QzlGMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50
M0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJF
MjdDOUQwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgKi87IH07CiAJCUIyRTI3
Q0EwMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBG
bG9hdFBvaW50M0QuaCAqLzsgfTsKQEAgLTY4OTMsNiArNjg5Myw4IEBACiAJCUIyMjM2MjJDMEMz
QUYwNzEwMDA4Q0E5QiAvKiBET01TVkdUZXh0UGF0aEVsZW1lbnRJbnRlcm5hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHVGV4dFBhdGhFbGVtZW50SW50ZXJuYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjIzNTQwRjAwRDAwNzgyRTAwMjM4MkZB
IC8qIFN0cmluZ1RydW5jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3RyaW5nVHJ1bmNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjIzNTQwRjEwRDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nVHJ1bmNhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUIyMzdDOEE1MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRm9udERhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjM3QzhBNjBEMzQ0RDExMDAxM0Y3MDcg
LyogU1ZHRm9udERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Zv
bnREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNDA1NTYzMEI1QkU2NDAw
MDJBMjhDMCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRWxlbWVudEluc3RhbmNlSW50ZXJuYWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI0MDU1NjQwQjVCRTY0MDAwMkEyOEMwIC8qIERP
TVNWR0VsZW1lbnRJbnN0YW5jZUxpc3RJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdEludGVybmFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5ODkwMEQwMEQ4QjgwMEJCODI1QyAvKiBDZ1N1cHBv
cnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENnU3VwcG9ydC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MjIzLDggKzcyMjUsNiBAQAogCQlC
MkNCOTI2MDBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdFbGVtZW50SW5z
dGFuY2VMaXN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNDRUM0NTBDNkNB
OUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDQ0VDNDYwQzZDQTlGMTAwNkE1NDI0
IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCMkQxOUE0NjBDRUY5REMxMDAwRTAzM0IgLyogU1ZHQ1NTRm9udEZhY2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0NTU0ZvbnRGYWNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJEMTlBNDcwQ0VGOURDMTAwMEUw
MzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdDU1NGb250RmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkQzRkM4
OTBDMjIxMkNCMDBDRjM2MTggLyogSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR1RyYW5zZm9ybUxpc3RDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkUyN0M5RDBCMEYyQjA5MDBGMTdD
N0IgLyogRmxvYXRQb2ludDNELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGbG9hdFBvaW50M0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkUy
N0M5RTBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGbG9hdFBvaW50M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEwNzQyLDYgKzEwNzQyLDggQEAKIAkJCQlCMjIyNzg3QzBEMDBCRjIwMDA3MUI3ODIg
LyogU1ZHRml0VG9WaWV3Qm94LmggKi8sCiAJCQkJQjIyMjc4N0QwRDAwQkYyMDAwNzFCNzgyIC8q
IFNWR0ZpdFRvVmlld0JveC5pZGwgKi8sCiAJCQkJQjI2MkI4MDMwRDFGMzJEMDAwMTU4RjA5IC8q
IFNWR0ZvbnQuY3BwICovLAorCQkJCUIyMzdDOEE1MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250
RGF0YS5jcHAgKi8sCisJCQkJQjIzN0M4QTYwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRh
LmggKi8sCiAJCQkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNw
cCAqLywKIAkJCQlCMkExRjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAq
LywKIAkJCQlCMkExRjJBMzBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaWRsICov
LApAQCAtMTE5NTIsOCArMTE5NTQsNiBAQAogCQkJCTkzQ0E0Q0EyMDlERjkzRkEwMERGODY3NyAv
KiBzdmcuY3NzICovLAogCQkJCUIyMjI3QjAwMEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwICovLAogCQkJCUIyMjI3QjAxMEQwMEJGRjEwMDcxQjc4
MiAvKiBTVkdDU1NQYXJzZXIuY3BwICovLAotCQkJCUIyRDE5QTQ2MENFRjlEQzEwMDBFMDMzQiAv
KiBTVkdDU1NGb250RmFjZS5jcHAgKi8sCi0JCQkJQjJEMTlBNDcwQ0VGOURDMTAwMEUwMzNCIC8q
IFNWR0NTU0ZvbnRGYWNlLmggKi8sCiAJCQkJQjIyMjdCMDIwRDAwQkZGMTAwNzFCNzgyIC8qIFNW
R0NTU1Byb3BlcnR5TmFtZXMuaW4gKi8sCiAJCQkJQjIyMjdCMDMwRDAwQkZGMTAwNzFCNzgyIC8q
IFNWR0NTU1N0eWxlU2VsZWN0b3IuY3BwICovLAogCQkJCUIyMjI3QjA0MEQwMEJGRjEwMDcxQjc4
MiAvKiBTVkdDU1NWYWx1ZUtleXdvcmRzLmluICovLApAQCAtMTQxNzAsNyArMTQxNzAsNiBAQAog
CQkJCUIyN0IyODNEMENFRjBDMzYwMEQzOUQ1NCAvKiBET01TVkdHbHlwaEVsZW1lbnRJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3QjI4M0UwQ0VGMEMzNjAwRDM5RDU0IC8qIERPTVNW
R01pc3NpbmdHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyN0IyODQwMENFRjBD
MzYwMEQzOUQ1NCAvKiBET01TVkdNaXNzaW5nR2x5cGhFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUIyRDE5QTQ5MENFRjlEQzEwMDBFMDMzQiAvKiBTVkdDU1NGb250RmFjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMzc5MTUwRDE2M0U1NTAwQjc5M0Q2IC8qIEpTTG9jYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQTM3OTNGMEQxNjQ3RTAwMEI3OTNENiAvKiBKU0xv
Y2F0aW9uLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzU3OTNFODQwRDBDRTBCMzAwN0ZDMEFD
IC8qIE1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNDE5Niw2ICsxNDE5NSw3IEBA
CiAJCQkJMzcxRjUxQTEwRDI2MkZBMDAwRUNFMEQ1IC8qIENTU1NlZ21lbnRlZEZvbnRGYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzNzFGNTNFOTBEMjcwNEY5MDBFQ0UwRDUgLyogQ1NTVW5pY29k
ZVJhbmdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCRkU3RTEzMEQzMkZBRjYwMDY2RjRE
MiAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjIzN0M4QTgw
RDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEVF
RkZDOTBEMzQ1NTBDMDA0NjlBNTggLyogSlNBdWRpb0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzlCM0U0RTBEM0MxRTg0MDBCNEE5MkIgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CkBAIC0xNDIzNiw3ICsxNDIzNiw2IEBACiAJCTA4NjdENjkwRkU4NDAy
OEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7
CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87Ci0J
CQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwogCQkJaGFzU2Nhbm5lZEZvckVu
Y29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTE1Nzcw
LDcgKzE1NzY5LDYgQEAKIAkJCQlCMjdCMjgzOTBDRUYwQzM2MDBEMzlENTQgLyogRE9NU1ZHRm9u
dEVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMjdCMjgzQzBDRUYwQzM2MDBEMzlENTQg
LyogRE9NU1ZHR2x5cGhFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3QjI4M0YwQ0VG
MEMzNjAwRDM5RDU0IC8qIERPTVNWR01pc3NpbmdHbHlwaEVsZW1lbnQubW0gaW4gU291cmNlcyAq
LywKLQkJCQlCMkQxOUE0ODBDRUY5REMxMDAwRTAzM0IgLyogU1ZHQ1NTRm9udEZhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjI2MkI4MDQwRDFGMzJEMDAwMTU4RjA5IC8qIFNWR0ZvbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3RkE2MjAwRDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNO
b2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdGQTYyRTBEMUYwRUZGMDBEQjIyQTkg
LyogU3RhdGljTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTc4Nyw2ICsxNTc4NSw3
IEBACiAJCQkJMzcxRjUxQTIwRDI2MkZBMDAwRUNFMEQ1IC8qIENTU1NlZ21lbnRlZEZvbnRGYWNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3MUY1M0VBMEQyNzA0RjkwMEVDRTBENSAvKiBDU1NV
bmljb2RlUmFuZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQkZFN0UxMjBEMzJGQUY2
MDA2NkY0RDIgLyogTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QjIzN0M4QTcwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUU0RUVGRkM4MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCShyZXZpc2lvbiAyOTY5
NykKKysrIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOSArMzEsMTQgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkdseXBo
UGFnZVRyZWVOb2RlLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2lmIEVOQUJM
RShTVkdfRk9OVFMpCisjaW5jbHVkZSAiU1ZHRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmgiIAorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
ODgsMjEgKzkzLDQxIEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8K
ICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoIW1fZm9u
dCkKLSAgICAgICAgLy8gV2UncmUgbG9jYWwuICBKdXN0IHJldHVybiBhIFNpbXBsZUZvbnREYXRh
IGZyb20gdGhlIG5vcm1hbCBjYWNoZS4KLSAgICAgICAgcmV0dXJuIEZvbnRDYWNoZTo6Z2V0Q2Fj
aGVkRm9udERhdGEoRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNj
cmlwdGlvbiwgbV9zdHJpbmcpKTsKLSAgICAKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlm
ICghbV9mb250ICYmICFtX3N2Z0ZvbnRGYWNlRWxlbWVudCkgeworI2Vsc2UKKyAgICBpZiAoIW1f
Zm9udCkgeworI2VuZGlmCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIGRhdGEgPSBGb250Q2Fj
aGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBtX3N0cmluZyk7
CisgICAgICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IEZvbnRDYWNoZTo6Z2V0Q2FjaGVk
Rm9udERhdGEoZGF0YSk7CisKKyAgICAgICAgLy8gV2UncmUgbG9jYWwuIEp1c3QgcmV0dXJuIGEg
U2ltcGxlRm9udERhdGEgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgorICAgICAgICByZXR1cm4gZm9u
dERhdGE7CisgICAgfQorCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBtYXBwaW5nIGluIG91ciBG
b250RGF0YSBjYWNoZS4KLSAgICBTaW1wbGVGb250RGF0YSogY2FjaGVkRGF0YSA9IG1fZm9udERh
dGFUYWJsZS5nZXQoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpOwotICAgIGlm
IChjYWNoZWREYXRhKQorICAgIGlmIChTaW1wbGVGb250RGF0YSogY2FjaGVkRGF0YSA9IG1fZm9u
dERhdGFUYWJsZS5nZXQoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpKQogICAg
ICAgICByZXR1cm4gY2FjaGVkRGF0YTsKLSAgICAKKworICAgIE93blB0cjxTaW1wbGVGb250RGF0
YT4gZm9udERhdGE7CisKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwgbG9hZGluZywgdGhlbiB3ZSBs
ZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNMb2FkZWQoKSkgewotICAgICAg
ICAvLyBDcmVhdGUgbmV3IEZvbnRQbGF0Zm9ybURhdGEgZnJvbSBvdXIgQ0dGb250UmVmLCBwb2lu
dCBzaXplIGFuZCBBVFNGb250UmVmLgotICAgICAgICBpZiAoIW1fZm9udC0+ZW5zdXJlQ3VzdG9t
Rm9udERhdGEoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYWNoZWREYXRhID0g
bmV3IFNpbXBsZUZvbnREYXRhKG1fZm9udC0+cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYyksIHRydWUsIGZhbHNlKTsKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgICAgICBp
ZiAobV9zdmdGb250RmFjZUVsZW1lbnQpCisgICAgICAgICAgICBmb250RGF0YS5zZXQobmV3IFNp
bXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGZhbHNlLCBuZXcgU1ZHRm9udERh
dGEobV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCkpKSk7CisjZW5kaWYKKworICAgICAgICBpZiAo
IWZvbnREYXRhKSB7CisgICAgICAgICAgICBBU1NFUlQobV9mb250KTsKKworICAgICAgICAgICAg
Ly8gQ3JlYXRlIG5ldyBGb250UGxhdGZvcm1EYXRhIGZyb20gb3VyIENHRm9udFJlZiwgcG9pbnQg
c2l6ZSBhbmQgQVRTRm9udFJlZi4KKyAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0
b21Gb250RGF0YSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBm
b250RGF0YS5zZXQobmV3IFNpbXBsZUZvbnREYXRhKG1fZm9udC0+cGxhdGZvcm1EYXRhRnJvbUN1
c3RvbURhdGEoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0Jv
bGQsIHN5bnRoZXRpY0l0YWxpYyksIHRydWUsIGZhbHNlKSk7CisgICAgICAgIH0KICAgICB9IGVs
c2UgewogICAgICAgICAvLyBLaWNrIG9mZiB0aGUgbG9hZCBub3cuCiAgICAgICAgIG1fZm9udC0+
YmVnaW5Mb2FkSWZOZWVkZWQoZm9udFNlbGVjdG9yLT5kb2NMb2FkZXIoKSk7CkBAIC0xMTAsMTIg
KzEzNSwxMSBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvCiAgICAg
ICAgIEZvbnRQbGF0Zm9ybURhdGEqIHRlbXBEYXRhID0gRm9udENhY2hlOjpnZXRDYWNoZWRGb250
UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcpOwogICAgICAgICBpZiAoIXRl
bXBEYXRhKQogICAgICAgICAgICAgdGVtcERhdGEgPSBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgY2FjaGVkRGF0YSA9IG5ldyBT
aW1wbGVGb250RGF0YSgqdGVtcERhdGEsIHRydWUsIHRydWUpOworICAgICAgICBmb250RGF0YS5z
ZXQobmV3IFNpbXBsZUZvbnREYXRhKCp0ZW1wRGF0YSwgdHJ1ZSwgdHJ1ZSkpOwogICAgIH0KIAot
ICAgIG1fZm9udERhdGFUYWJsZS5zZXQoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXpl
KCksIGNhY2hlZERhdGEpOwotCi0gICAgcmV0dXJuIGNhY2hlZERhdGE7CisgICAgbV9mb250RGF0
YVRhYmxlLnNldChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgZm9udERhdGEu
Z2V0KCkpOworICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CiB9CiAKIH0KSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
Q1NTRm9udEZhY2VTb3VyY2UuaAkocmV2aXNpb24gMjk2OTcpCisrKyBXZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgor
I2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU2LDExICs1NywyMCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBwcnVuZVRhYmxlKCk7CiAKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIFNW
R0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9z
dmdGb250RmFjZUVsZW1lbnQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNWR0ZvbnRGYWNlRWxlbWVu
dChTVkdGb250RmFjZUVsZW1lbnQqIGVsZW1lbnQpIHsgbV9zdmdGb250RmFjZUVsZW1lbnQgPSBl
bGVtZW50OyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9zdHJpbmc7
IC8vIFVSSSBmb3IgcmVtb3RlLCBidWlsdC1pbiBmb250IG5hbWUgZm9yIGxvY2FsLgogICAgIENh
Y2hlZEZvbnQqIG1fZm9udDsgLy8gRm9yIHJlbW90ZSBmb250cywgYSBwb2ludGVyIHRvIG91ciBj
YWNoZWQgcmVzb3VyY2UuCiAgICAgQ1NTRm9udEZhY2UqIG1fZmFjZTsgLy8gT3VyIG93bmluZyBm
b250IGZhY2UuCiAgICAgSGFzaE1hcDxpbnQsIFNpbXBsZUZvbnREYXRhKj4gbV9mb250RGF0YVRh
YmxlOyAvLyBBIGNhY2hlIG9mIEZvbnREYXRhcyBmb3IgdmFyaW91cyBwaXhlbCBzaXplcy4KKwor
I2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgUmVmUHRyPFNWR0ZvbnRGYWNlRWxlbWVudD4gbV9z
dmdGb250RmFjZUVsZW1lbnQ7CisjZW5kaWYKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlU3JjVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVNyY1ZhbHVlLmgJKHJldmlzaW9uIDI5Njk3KQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
cmNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyMCArMjgsMTYgQEAKIAogI2luY2x1ZGUg
IkNTU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdG
b250RmFjZUVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTVkdGb250
RmFjZUVsZW1lbnQ7Ci0KIGNsYXNzIENTU0ZvbnRGYWNlU3JjVmFsdWUgOiBwdWJsaWMgQ1NTVmFs
dWUgewogcHVibGljOgogICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUoY29uc3QgU3RyaW5nJiByZXNv
dXJjZSwgYm9vbCBsb2NhbCkKICAgICA6bV9yZXNvdXJjZShyZXNvdXJjZSksIG1faXNMb2NhbChs
b2NhbCkKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICwgbV9mb250RmFjZUVsZW1lbnQoMCkK
LSNlbmRpZiAgICAKICAgICB7fQotICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlU3JjVmFsdWUoKSB7
fTsKKyAgICB2aXJ0dWFsIH5DU1NGb250RmFjZVNyY1ZhbHVlKCkge30KIAogICAgIGNvbnN0IFN0
cmluZyYgcmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlOyB9CiAgICAgY29uc3Qg
U3RyaW5nJiBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQpAQCAtNTIsOCArNDgs
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N1cHBvcnRlZEZvcm1hdCgpIGNvbnN0OwogCiAjaWYg
RU5BQkxFKFNWR19GT05UUykKLSAgICBTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlRWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udEZhY2VFbGVtZW50OyB9Ci0gICAgdm9pZCBzZXRT
VkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50KiBlbGVtZW50KSB7IG1fZm9udEZh
Y2VFbGVtZW50ID0gZWxlbWVudDsgfQorICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZh
Y2VFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCk7IH0K
KyAgICB2b2lkIHNldFNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQqIGVsZW1l
bnQpIHsgbV9zdmdGb250RmFjZUVsZW1lbnQgPSBlbGVtZW50OyB9CiAjZW5kaWYKIAogICAgIHZp
cnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKQEAgLTYyLDggKzU4LDkgQEAgcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV9yZXNvdXJjZTsKICAgICBTdHJpbmcgbV9mb3JtYXQ7CiAgICAgYm9vbCBt
X2lzTG9jYWw7CisKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIFNWR0ZvbnRGYWNlRWxlbWVu
dCogbV9mb250RmFjZUVsZW1lbnQ7CisgICAgUmVmUHRyPFNWR0ZvbnRGYWNlRWxlbWVudD4gbV9z
dmdGb250RmFjZUVsZW1lbnQ7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcAkocmV2aXNpb24gMjk2OTcpCisrKyBXZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMCArNDksMTAgQEAKICNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgi
CisjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAKKy8vIFBvcnRzIHdoaWNoIGRvbid0
IHVzZSBTVkcsIGRvbid0IGdlbmVyYXRlIFNWR05hbWVzLmgKICNpZiBFTkFCTEUoU1ZHKQotI2lu
Y2x1ZGUgIlNWR0NTU0ZvbnRGYWNlLmgiCi0jaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNlbmRpZgogCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9p
ZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjbwogICAgIGJvb2wgZm91bmRMb2Nh
bCA9IGZhbHNlOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBTVkdGb250RmFjZUVsZW1l
bnQqIHN2Z0ZvbnRGYWNlRWxlbWVudCA9IDA7CisgICAgYm9vbCBmb3VuZEluRG9jdW1lbnRTVkdG
b250ID0gZmFsc2U7CiAjZW5kaWYKIAogICAgIGZvciAoaSA9IDA7IGkgPCBzcmNMZW5ndGg7IGkr
KykgewpAQCAtMTU5LDMzICsxNTksMjYgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRG
YWNlUnVsZShjbwogICAgICAgICAgICAgU3RyaW5nIGZhbWlseSA9IGl0ZW0tPnJlc291cmNlKCk7
CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICAgICAgLy8gU1ZHIEZvbnRzIHN1cHBv
cnQgKGludGVybmFsIGZvbnRzLCBsaXZpbmcgd2l0aGluIHRoZSBkb2N1bWVudCkKLSAgICAgICAg
ICAgIHN2Z0ZvbnRGYWNlRWxlbWVudCA9IGl0ZW0tPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwotICAg
ICAgICAgICAgaWYgKHN2Z0ZvbnRGYWNlRWxlbWVudCkgewotICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBJZiBmb250RmFjZSBpcyBub3QgMCwgaXQgbWVhbnMgdGhhdCBpdCBpcyBhIENTU0ZvbnRG
YWNlIHJhdGhlciB0aGFuIGEgU1ZHQ1NTRm9udEZhY2UKLSAgICAgICAgICAgICAgICAvLyBhbmQg
dGhlcmVmb3JlIGRvZXMgbm90IHN1cHBvcnQgU1ZHIGZvbnQtZmFjZSBlbGVtZW50cywgc28gd2Ug
anVzdCBza2lwIHRoaXMgaXRlbS4KLSAgICAgICAgICAgICAgICBpZiAoZm9udEZhY2UpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGZvdW5kTG9jYWwgPSB0
cnVlOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZm91bmRJbkRvY3VtZW50U1ZHRm9udCA9
IGl0ZW0tPnN2Z0ZvbnRGYWNlRWxlbWVudCgpICE9IDA7CiAjZW5kaWYKIAogICAgICAgICAgICAg
Ly8gVGVzdCB0aGUgdmFsaWRpdHkgb2YgdGhlIGxvY2FsIGZvbnQgbm93LiAgV2UgZG9uJ3Qgd2Fu
dCB0byBpbmNsdWRlIHRoaXMgZm9udCBpZiBpdCBkb2VzIG5vdCBleGlzdAogICAgICAgICAgICAg
Ly8gb24gdGhlIHN5c3RlbS4gIElmIGl0ICpkb2VzKiBleGlzdCBvbiB0aGUgc3lzdGVtLCB0aGVu
IHdlIGRvbid0IG5lZWQgdG8gbG9vayBhbnkgZnVydGhlci4KLSAgICAgICAgICAgIGlmIChGb250
Q2FjaGU6OmZvbnRFeGlzdHMoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpICYmICFmb3VuZExvY2Fs
KSB7CisgICAgICAgICAgICBpZiAoRm9udENhY2hlOjpmb250RXhpc3RzKGZvbnREZXNjcmlwdGlv
biwgZmFtaWx5KQorI2lmIEVOQUJMRShTVkdfRk9OVFMpICAgIAorICAgICAgICAgICAgICAgIHx8
IGZvdW5kSW5Eb2N1bWVudFNWR0ZvbnQKKyNlbmRpZgorICAgICAgICAgICAgICAgKSB7CiAgICAg
ICAgICAgICAgICAgc291cmNlID0gbmV3IENTU0ZvbnRGYWNlU291cmNlKGZhbWlseSk7CisjaWYg
RU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgICAgICAgICBzb3VyY2UtPnNldFNWR0ZvbnRGYWNl
RWxlbWVudChpdGVtLT5zdmdGb250RmFjZUVsZW1lbnQoKSk7CisjZW5kaWYKICAgICAgICAgICAg
ICAgICBmb3VuZExvY2FsID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghZm9udEZhY2UpIHsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICAgICAg
aWYgKHN2Z0ZvbnRGYWNlRWxlbWVudCkKLSAgICAgICAgICAgICAgICBmb250RmFjZSA9IG5ldyBT
VkdDU1NGb250RmFjZShzdmdGb250RmFjZUVsZW1lbnQpOwotICAgICAgICAgICAgZWxzZQotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgZm9udEZhY2UgPSBuZXcgQ1NTRm9udEZhY2UoKTsKLSAgICAg
ICAgfQorICAgICAgICBpZiAoIWZvbnRGYWNlKQorICAgICAgICAgICAgZm9udEZhY2UgPSBuZXcg
Q1NTRm9udEZhY2UoKTsKIAogICAgICAgICBpZiAoc291cmNlKQogICAgICAgICAgICAgZm9udEZh
Y2UtPmFkZFNvdXJjZShzb3VyY2UpOwpAQCAtMjQwLDcgKzIzMyw3IEBAIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY28KICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAg
ICAvLyBTVkcgYWxsb3dzIHNldmVyYWwgPGZvbnQ+IGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgZm9u
dC1mYW1pbHksIGRpZmZlcmluZyBvbmx5CiAgICAgICAgIC8vIGluIGllLiBmb250LXZhcmlhbnQu
IEJlIHN1cmUgdG8gcGljayB1cCB0aGUgcmlnaHQgb25lIC0gaW4gZ2V0Rm9udERhdGEgYmVsb3cu
Ci0gICAgICAgIGlmIChzdmdGb250RmFjZUVsZW1lbnQgJiYgZm9udERlc2NyaXB0aW9uLnNtYWxs
Q2FwcygpKQorICAgICAgICBpZiAoZm91bmRJbkRvY3VtZW50U1ZHRm9udCAmJiBmb250RGVzY3Jp
cHRpb24uc21hbGxDYXBzKCkpCiAgICAgICAgICAgICBmYW1pbHlOYW1lICs9ICItd2Via2l0LXN2
Zy1zbWFsbC1jYXBzIjsKICNlbmRpZgogICAgICAgICBTdHJpbmcgaGFzaCA9IGhhc2hGb3JGb250
KGZhbWlseU5hbWUubG93ZXIoKSwgZm9udERlc2NyaXB0aW9uLmJvbGQoKSwgZm9udERlc2NyaXB0
aW9uLml0YWxpYygpKTsKSW5kZXg6IFdlYkNvcmUvY3NzL1NWR0NTU0ZvbnRGYWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TVkdDU1NGb250RmFjZS5jcHAJKHJldmlzaW9uIDI5Njk3
KQorKysgV2ViQ29yZS9jc3MvU1ZHQ1NTRm9udEZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShTVkdfRk9OVFMpCi0jaW5jbHVkZSAiU1ZHQ1NTRm9udEZhY2UuaCIKLQotI2luY2x1
ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU1ZH
Q1NTRm9udEZhY2U6OlNWR0NTU0ZvbnRGYWNlKFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2Up
Ci0gICAgOiBDU1NGb250RmFjZSgpCi0gICAgLCBtX2ZvbnRGYWNlRWxlbWVudChmb250RmFjZSkK
LXsKLSAgICBBU1NFUlQoZm9udEZhY2UpOwotfQotCi1TVkdDU1NGb250RmFjZTo6flNWR0NTU0Zv
bnRGYWNlKCkKLXsKLX0KLQotYm9vbCBTVkdDU1NGb250RmFjZTo6aXNWYWxpZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCi12b2lkIFNWR0NTU0ZvbnRGYWNlOjphZGRTb3Vy
Y2UoQ1NTRm9udEZhY2VTb3VyY2UqKQotewotICAgIC8vIG5vLW9wCi19Ci0KLVNpbXBsZUZvbnRE
YXRhKiBTVkdDU1NGb250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMp
Ci17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gVE9E
TzogRXZlbnR1YWxseSB3ZSdsbCBzd2l0Y2ggdG8gQ1NTRm9udEZhY2VTb3VyY2UgaGVyZSwgd2hp
Y2ggaGFuZGxlcyB0aGUgY2FjaGluZyBmb3IgdXMuCi0gICAgLy8gKFdoZW4gaW1wbGVtZW50aW5n
IHN1cHBvcnQgZm9yIGV4dGVybmFsIFNWRyBGb250cyB0aGlzIHdlJ2xsIGRlY2lkZSBhYm91dCB0
aGF0LikKLSAgICBpZiAoIW1fZm9udERhdGEpCi0gICAgICAgIG1fZm9udERhdGEuc2V0KG1fZm9u
dEZhY2VFbGVtZW50LT5jcmVhdGVGb250RGF0YShmb250RGVzY3JpcHRpb24pKTsKLQotICAgIHJl
dHVybiBtX2ZvbnREYXRhLmdldCgpOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9j
c3MvU1ZHQ1NTRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TVkdDU1NGb250
RmFjZS5oCShyZXZpc2lvbiAyOTY5NykKKysrIFdlYkNvcmUvY3NzL1NWR0NTU0ZvbnRGYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBTVkdDU1NGb250RmFjZV9oCi0jZGVmaW5lIFNWR0NTU0ZvbnRGYWNlX2gKLQotI2lmIEVOQUJM
RShTVkdfRk9OVFMpCi0jaW5jbHVkZSAiQ1NTRm9udEZhY2UuaCIKLSNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU1ZHRm9udEZhY2VFbGVtZW50
OwotCi1jbGFzcyBTVkdDU1NGb250RmFjZSA6IHB1YmxpYyBDU1NGb250RmFjZSB7Ci1wdWJsaWM6
Ci0gICAgU1ZHQ1NTRm9udEZhY2UoU1ZHRm9udEZhY2VFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+
U1ZHQ1NTRm9udEZhY2UoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIGFkZFNvdXJjZShDU1NGb250RmFjZVNvdXJjZSopOwotCi0gICAgdmly
dHVhbCBTaW1wbGVGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Ym9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7Ci0KLXByaXZhdGU6Ci0g
ICAgUmVmUHRyPFNWR0ZvbnRGYWNlRWxlbWVudD4gbV9mb250RmFjZUVsZW1lbnQ7Ci0gICAgT3du
UHRyPFNpbXBsZUZvbnREYXRhPiBtX2ZvbnREYXRhOwotfTsKLQotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKFNWR19GT05UUykKLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CShyZXZpc2lvbiAyOTY5NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwNywyMiArNTA3LDIyIEBAIGludCBGb250Ojp3aWR0aChjb25z
dCBUZXh0UnVuJiBydW4pIGNvbnMKIAogaW50IEZvbnQ6OmFzY2VudCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHByaW1hcnlGb250KCktPmFzY2VudChzaXplKCkpOworICAgIHJldHVybiBwcmltYXJ5
Rm9udCgpLT5hc2NlbnQoKTsKIH0KIAogaW50IEZvbnQ6OmRlc2NlbnQoKSBjb25zdAogewotICAg
IHJldHVybiBwcmltYXJ5Rm9udCgpLT5kZXNjZW50KHNpemUoKSk7CisgICAgcmV0dXJuIHByaW1h
cnlGb250KCktPmRlc2NlbnQoKTsKIH0KIAogaW50IEZvbnQ6OmxpbmVTcGFjaW5nKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+bGluZVNwYWNpbmcoc2l6ZSgpKTsKKyAgICBy
ZXR1cm4gcHJpbWFyeUZvbnQoKS0+bGluZVNwYWNpbmcoKTsKIH0KIAogZmxvYXQgRm9udDo6eEhl
aWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHByaW1hcnlGb250KCktPnhIZWlnaHQoc2l6ZSgp
KTsKKyAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+eEhlaWdodCgpOwogfQogCiB1bnNpZ25lZCBG
b250Ojp1bml0c1BlckVtKCkgY29uc3QKQEAgLTc4OSw0ICs3ODksOSBAQCBpbnQgRm9udDo6b2Zm
c2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0CiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAorRm9u
dFNlbGVjdG9yKiBGb250Ojpmb250U2VsZWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2Zv
bnRMaXN0ID8gbV9mb250TGlzdC0+Zm9udFNlbGVjdG9yKCkgOiAwOworfQorCiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gMjk2OTcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSw4IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiAoKChjICYgfjB4RkYpID09IDAgJiYgZ1JvdW5k
aW5nSGFja0NoYXJhY3RlclRhYmxlW2NdKSk7IAogICAgIH0KKworICAgIEZvbnRTZWxlY3Rvciog
Zm9udFNlbGVjdG9yKCkgY29uc3Q7CiAjZW5kaWYKICAgICBzdGF0aWMgYm9vbCB0cmVhdEFzU3Bh
Y2UoVUNoYXIgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8
fCBjID09IDB4MDBBMDsgfQogICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZShV
Q2hhciBjKSB7IHJldHVybiBjIDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBj
ID09IDB4MjAwZSB8fCBjID09IDB4MjAwZiB8fCBjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZTsg
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuaAkocmV2aXNpb24gMjk2OTcp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU1ZHRm9udCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0xv
YWRpbmcoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzU2VnbWVudGVkKCkgY29uc3Qg
PSAwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250
RGF0YS5jcHAJKHJldmlzaW9uIDI5Njk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
ZWdtZW50ZWRGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDE0IEBAIGJv
b2wgU2VnbWVudGVkRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGUKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6aXNT
VkdGb250KCkgY29uc3QKK3sKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHNlZ21lbnRlZCBzdmcg
Zm9udHMgYXQgdGhlIG1vbWVudC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogYm9v
bCBTZWdtZW50ZWRGb250RGF0YTo6aXNDdXN0b21Gb250KCkgY29uc3QKIHsKICAgICAvLyBBbGwg
c2VnbWVudGVkIGZvbnRzIGFyZSBjdXN0b20gZm9udHMuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oCShyZXZpc2lvbiAyOTY5NykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNiArNTcsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgpIGNvbnN0
OworCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGb250KCkg
Y29uc3Q7CisjZW5kaWYKKwogICAgIHZpcnR1YWwgYm9vbCBpc0N1c3RvbUZvbnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
U2VnbWVudGVkKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUZvbnREYXRhLmNwcAkocmV2aXNpb24gMjk2OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNDYgKzMwLDQ3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorI2lu
Y2x1ZGUgIlNWR0ZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAj
ZW5kaWYKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLS8v
IERvbid0IGltcGxlbWVudCBjb25zdHJ1Y3RvciBpbiB0aGUgaGVhZGVyIHRvIHNhdmUgYSBTVkdG
b250RmFjZUVsZW1lbnQuaCBpbmNsdWRlLgotU1ZHRm9udERhdGE6OlNWR0ZvbnREYXRhKFNWR0Zv
bnRGYWNlRWxlbWVudCogZWxlbWVudCkKLSAgICA6IGZvbnRGYWNlRWxlbWVudChlbGVtZW50KQot
ICAgICwgaG9yaXpvbnRhbE9yaWdpblgoMC4wZikKLSAgICAsIGhvcml6b250YWxPcmlnaW5ZKDAu
MGYpCi0gICAgLCBob3Jpem9udGFsQWR2YW5jZVgoMC4wZikKLSAgICAsIHZlcnRpY2FsT3JpZ2lu
WCgwLjBmKQotICAgICwgdmVydGljYWxPcmlnaW5ZKDAuMGYpCi0gICAgLCB2ZXJ0aWNhbEFkdmFu
Y2VZKDAuMGYpCi17Ci19CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotZmxvYXQgU1ZH
Rm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZsb2F0IGZvbnRTaXplLCBmbG9hdCB1bml0
c1BlckVtLCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQodW5pdHNQZXJFbSA+IDAuMGYpOwot
ICAgIHJldHVybiB2YWx1ZSAqIGZvbnRTaXplIC8gdW5pdHNQZXJFbTsKLX0KLSNlbmRpZgorbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1TaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgZiwgYm9vbCBjdXN0b21Gb250LCBib29sIGxvYWRpbmcpCitTaW1w
bGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZiwgYm9v
bCBjdXN0b21Gb250LCBib29sIGxvYWRpbmcsIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSkKICAg
ICA6IG1fZm9udChmKQogICAgICwgbV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKLSNpZiBFTkFC
TEUoU1ZHX0ZPTlRTKQotICAgICwgbV9zdmdGb250RGF0YSgwKQotI2VuZGlmCisgICAgLCBtX3N2
Z0ZvbnREYXRhKHN2Z0ZvbnREYXRhKQogICAgICwgbV9pc0N1c3RvbUZvbnQoY3VzdG9tRm9udCkK
ICAgICAsIG1faXNMb2FkaW5nKGxvYWRpbmcpCiAgICAgLCBtX3NtYWxsQ2Fwc0ZvbnREYXRhKDAp
Ci17ICAgIAoreworI2lmIEVOQUJMRShTVkdfRk9OVFMpICYmICFQTEFURk9STShRVCkKKyAgICBp
ZiAoU1ZHRm9udEZhY2VFbGVtZW50KiBzdmdGb250RmFjZUVsZW1lbnQgPSBzdmdGb250RGF0YSA/
IHN2Z0ZvbnREYXRhLT5zdmdGb250RmFjZUVsZW1lbnQoKSA6IDApIHsKKyAgICAgICBtX3VuaXRz
UGVyRW0gPSBzdmdGb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKTsKKworICAgICAgIGZsb2F0
IHNjYWxlID0gZi5zaXplKCk7CisgICAgICAgaWYgKG1fdW5pdHNQZXJFbSkKKyAgICAgICAgICAg
c2NhbGUgLz0gbV91bml0c1BlckVtOworCisgICAgICAgIG1fYXNjZW50ID0gc3ZnRm9udEZhY2VF
bGVtZW50LT5hc2NlbnQoKSAqIHNjYWxlOworICAgICAgICBtX2Rlc2NlbnQgPSBzdmdGb250RmFj
ZUVsZW1lbnQtPmRlc2NlbnQoKSAqIHNjYWxlOworICAgICAgICBtX3hIZWlnaHQgPSBzdmdGb250
RmFjZUVsZW1lbnQtPnhIZWlnaHQoKSAqIHNjYWxlOworCisgICAgICAgIG1fc3BhY2VHbHlwaCA9
IDA7CisgICAgICAgIG1fc3BhY2VXaWR0aCA9IDA7CisgICAgICAgIG1fYWRqdXN0ZWRTcGFjZVdp
ZHRoID0gMDsKKyAgICAgICAgZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICAgICAgbV9taXNzaW5nR2x5
cGhEYXRhLmZvbnREYXRhID0gdGhpczsKKyAgICAgICAgbV9taXNzaW5nR2x5cGhEYXRhLmdseXBo
ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAgICAgcGxhdGZvcm1Jbml0
KCk7Ci0gICAgCisKICAgICBHbHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBHbHlwaFBhZ2VUcmVl
Tm9kZTo6Z2V0Um9vdENoaWxkKHRoaXMsIDApLT5wYWdlKCk7CiAgICAgaWYgKCFnbHlwaFBhZ2Va
ZXJvKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBnbHlwaCBwYWdlIHplcm8u
Iik7CkBAIC0xMTYsNTYgKzExNyw2IEBAIFNpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEo
KQogICAgIC8vIGl0IHdpbGwgYmUgZGVsZXRlZCB0aGVuLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRv
IGFueXRoaW5nIGhlcmUuCiB9CiAKLWludCBTaW1wbGVGb250RGF0YTo6YXNjZW50KGZsb2F0IGZv
bnRTaXplKSBjb25zdAotewotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKG1fc3ZnRm9u
dERhdGEpCi0gICAgICAgIHJldHVybiBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwo
Zm9udFNpemUsIG1fdW5pdHNQZXJFbSwgbV9hc2NlbnQpOwotI2VuZGlmCi0KLSAgICByZXR1cm4g
bV9hc2NlbnQ7Ci19Ci0KLWludCBTaW1wbGVGb250RGF0YTo6ZGVzY2VudChmbG9hdCBmb250U2l6
ZSkgY29uc3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChtX3N2Z0ZvbnREYXRh
KQotICAgICAgICByZXR1cm4gU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnRT
aXplLCBtX3VuaXRzUGVyRW0sIG1fZGVzY2VudCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBtX2Rl
c2NlbnQ7Ci19Ci0KLWludCBTaW1wbGVGb250RGF0YTo6bGluZVNwYWNpbmcoZmxvYXQgZm9udFNp
emUpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAobV9zdmdGb250RGF0
YSkKLSAgICAgICAgcmV0dXJuIChpbnQpIGNlaWxmKFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1Vbml0
VG9QaXhlbChmb250U2l6ZSwgbV91bml0c1BlckVtLCBtX2xpbmVTcGFjaW5nKSk7Ci0jZW5kaWYK
LQotICAgIHJldHVybiBtX2xpbmVTcGFjaW5nOwotfQotCi1pbnQgU2ltcGxlRm9udERhdGE6Omxp
bmVHYXAoZmxvYXQgZm9udFNpemUpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAg
ICBpZiAobV9zdmdGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIFNWR0ZvbnREYXRhOjpjb252ZXJ0
RW1Vbml0VG9QaXhlbChmb250U2l6ZSwgbV91bml0c1BlckVtLCBtX2xpbmVHYXApOwotI2VuZGlm
Ci0KLSAgICByZXR1cm4gbV9saW5lR2FwOwotfQotCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6eEhl
aWdodChmbG9hdCBmb250U2l6ZSkgY29uc3QKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAg
IGlmIChtX3N2Z0ZvbnREYXRhKQotICAgICAgICByZXR1cm4gU1ZHRm9udERhdGE6OmNvbnZlcnRF
bVVuaXRUb1BpeGVsKGZvbnRTaXplLCBtX3VuaXRzUGVyRW0sIG1feEhlaWdodCk7Ci0jZW5kaWYK
LQotICAgIHJldHVybiBtX3hIZWlnaHQ7Ci19Ci0KIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0
aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGZsb2F0IHdpZHRoID0gbV9nbHlw
aFRvV2lkdGhNYXAud2lkdGhGb3JHbHlwaChnbHlwaCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAyOTY5NykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCiAjaW5jbHVkZSAiR2x5
cGhXaWR0aE1hcC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwogI2lmIFBMQVRGT1JNKE1B
QykKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUFUU1VTdHlsZSogQVRTVVN0eWxlOwogI2VuZGlmCkBA
IC00MSwzNiArNDIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRm9udERlc2NyaXB0
aW9uOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKK2NsYXNz
IFNWR0ZvbnREYXRhOwogY2xhc3MgV2lkdGhNYXA7CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQot
Y2xhc3MgU1ZHRm9udEZhY2VFbGVtZW50OwotCi1zdHJ1Y3QgU1ZHRm9udERhdGEgewotICAgIFNW
R0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVudCopOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
Ci0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnRFbVVuaXRUb1BpeGVsKGZsb2F0IGZvbnRTaXplLCBm
bG9hdCB1bml0c1BlckVtLCBmbG9hdCB2YWx1ZSk7Ci0KLSAgICAvLyBIb2xkIHBvaW50ZXIgdG8g
b3VyIGNyZWF0b3IKLSAgICBSZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50PiBmb250RmFjZUVsZW1l
bnQ7Ci0KLSAgICAvLyBTVkcgRm9udCBzcGVjaWZpYyBtZXRyaWNzCi0gICAgZmxvYXQgaG9yaXpv
bnRhbE9yaWdpblg7Ci0gICAgZmxvYXQgaG9yaXpvbnRhbE9yaWdpblk7Ci0gICAgZmxvYXQgaG9y
aXpvbnRhbEFkdmFuY2VYOwotCi0gICAgZmxvYXQgdmVydGljYWxPcmlnaW5YOwotICAgIGZsb2F0
IHZlcnRpY2FsT3JpZ2luWTsKLSAgICBmbG9hdCB2ZXJ0aWNhbEFkdmFuY2VZOwotfTsKLSNlbmRp
ZgotCiBlbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNo
IH07CiAKIGNsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIEZvbnREYXRhIHsKIHB1YmxpYzoK
LSAgICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBjdXN0b21G
b250ID0gZmFsc2UsIGJvb2wgbG9hZGluZyA9IGZhbHNlKTsKKyAgICBTaW1wbGVGb250RGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBjdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgbG9h
ZGluZyA9IGZhbHNlLCBTVkdGb250RGF0YSogZGF0YSA9IDApOwogICAgIHZpcnR1YWwgflNpbXBs
ZUZvbnREYXRhKCk7CiAKIHB1YmxpYzoKQEAgLTc4LDExICs1NywxMSBAQCBwdWJsaWM6CiAgICAg
U2ltcGxlRm9udERhdGEqIHNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSBjb25zdDsKIAogICAgIC8vIHZlcnRpY2FsIG1ldHJpY3MKLSAgICBp
bnQgYXNjZW50KGZsb2F0IGZvbnRTaXplKSBjb25zdDsKLSAgICBpbnQgZGVzY2VudChmbG9hdCBm
b250U2l6ZSkgY29uc3Q7Ci0gICAgaW50IGxpbmVTcGFjaW5nKGZsb2F0IGZvbnRTaXplKSBjb25z
dDsKLSAgICBpbnQgbGluZUdhcChmbG9hdCBmb250U2l6ZSkgY29uc3Q7Ci0gICAgZmxvYXQgeEhl
aWdodChmbG9hdCBmb250U2l6ZSkgY29uc3Q7CisgICAgaW50IGFzY2VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fYXNjZW50OyB9CisgICAgaW50IGRlc2NlbnQoKSBjb25zdCB7IHJldHVybiBtX2Rlc2Nl
bnQ7IH0KKyAgICBpbnQgbGluZVNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2xpbmVTcGFjaW5n
OyB9CisgICAgaW50IGxpbmVHYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVHYXA7IH0KKyAgICBm
bG9hdCB4SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV94SGVpZ2h0OyB9CiAgICAgdW5zaWduZWQg
dW5pdHNQZXJFbSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pdHNQZXJFbTsgfQogCiAgICAgZmxvYXQg
d2lkdGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CkBAIC05NCwxNyArNzMsMTcgQEAgcHVibGljOgog
ICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKTsKICAgICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRjaDsgfQog
Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBib29sIGlzU1ZHRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3ZnRm9udERhdGE7IH0KLSAgICBTVkdGb250RGF0YSogc3ZnRm9udERhdGEoKSBjb25z
dCB7IHJldHVybiBtX3N2Z0ZvbnREYXRhLmdldCgpOyB9Ci0jZW5kaWYKLQorICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3N2Z0ZvbnREYXRhOyB9CiAgICAgdmly
dHVhbCBib29sIGlzQ3VzdG9tRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDdXN0b21Gb250OyB9
CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2FkaW5n
OyB9CiAgICAgdmlydHVhbCBib29sIGlzU2VnbWVudGVkKCkgY29uc3Q7CiAKICAgICBjb25zdCBH
bHlwaERhdGEmIG1pc3NpbmdHbHlwaERhdGEoKSBjb25zdCB7IHJldHVybiBtX21pc3NpbmdHbHlw
aERhdGE7IH0KIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgU1ZHRm9udERhdGEqIHN2Z0Zv
bnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RGF0YS5nZXQoKTsgfQorI2VuZGlmCisK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnQuZm9udCgpOyB9CiAgICAgdm9pZCBjaGVja1NoYXBlc0FyYWJpYygpIGNvbnN0OwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURh
dGEuaAkocmV2aXNpb24gMjk2OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGlj
OgogCiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSk7CiAKKyAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9u
dF9mYWNlX3QqIGZvbnRGYWNlLCBpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CiAK
ICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwpAQCAtNTcsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGJvb2wgaW5pdCgpOwogCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKKyAgICBmbG9h
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgp
OyB9CiAKICAgICB2b2lkIHNldEZvbnQoY2Fpcm9fdCopIGNvbnN0OwogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNw
cAkocmV2aXNpb24gMjk2OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250
UGxhdGZvcm1EYXRhR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywxMyBAQCBm
cmVlUGF0dGVybjoKICAgICBGY1BhdHRlcm5EZXN0cm95KHBhdHRlcm4pOwogfQogCitGb250UGxh
dGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBtX3Bh
dHRlcm4oMCkKKyAgICAsIG1fZm9udERlc2NyaXB0aW9uKCkKKyAgICAsIG1fc2NhbGVkRm9udCgw
KQoreworfQorCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRf
ZmFjZV90KiBmb250RmFjZSwgaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCiAgICAg
OiBtX3BhdHRlcm4oMCkKICAgICAsIG1fZm9udERlc2NyaXB0aW9uKCkKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9u
IDI5Njk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udFBsYXRmb3JtRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxNiBAQCBzdHJ1Y3QgRm9udFBsYXRmb3Jt
RGF0YSB7CiAgICAgOiBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpLCBtX3N5bnRoZXRpY09ibGlxdWUo
ZmFsc2UpLCBtX2NnRm9udCgwKSwgbV9hdHN1Rm9udElEKDApLCBtX3NpemUoMCksIG1fZm9udCgo
TlNGb250KiktMSkKICAgICB7fQogCisgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzLCBib29s
IGIsIGJvb2wgbykKKyAgICAgICAgOiBtX3N5bnRoZXRpY0JvbGQoYikKKyAgICAgICAgLCBtX3N5
bnRoZXRpY09ibGlxdWUobykKKyAgICAgICAgLCBtX2NnRm9udCgwKQorICAgICAgICAsIG1fYXRz
dUZvbnRJRCgwKQorICAgICAgICAsIG1fc2l6ZShzKQorICAgICAgICAsIG1fZm9udCgwKQorICAg
IHsKKyAgICB9CisKICAgICBGb250UGxhdGZvcm1EYXRhKE5TRm9udCogZiA9IDAsIGJvb2wgYiA9
IGZhbHNlLCBib29sIG8gPSBmYWxzZSk7CiAgICAgCiAgICAgRm9udFBsYXRmb3JtRGF0YShDR0Zv
bnRSZWYgZiwgQVRTVUZvbnRJRCBmb250SUQsIGZsb2F0IHMsIGJvb2wgYiAsIGJvb2wgbykKQEAg
LTU4LDYgKzY4LDggQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGEgewogICAgIAogICAgIH5Gb250
UGxhdGZvcm1EYXRhKCk7CiAKKyAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CisKICAgICBib29sIG1fc3ludGhldGljQm9sZDsKICAgICBib29sIG1fc3ludGhldGljT2Js
aXF1ZTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0
Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDI5Njk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1
OCw3IEBAIHB1YmxpYzoKICAgICB7fQogCiAgICAgRm9udFBsYXRmb3JtRGF0YShIRk9OVCwgZmxv
YXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKTsKKyAgICBGb250
UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKTsKICAgICBG
b250UGxhdGZvcm1EYXRhKENHRm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9i
bGlxdWUpOwogICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCShyZXZp
c2lvbiAyOTY5NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNiArMTk3LDE2IEBAIEZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoSEZPTlQKICAgICBSZWxlYXNlREMoMCwgaGRjKTsK
IH0KIAorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29s
IGJvbGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9udCgwKQorICAgICwgbV9zaXplKHNpemUp
CisgICAgLCBtX2NnRm9udCgwKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBt
X3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKKyAgICAsIG1fdXNlR0RJKGZhbHNlKQoreworfQor
CiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBmb250LCBmbG9h
dCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKICAgICA6IG1fZm9udCgwKQogICAgICwg
bV9zaXplKHNpemUpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNp
b24gMjk2OTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpyZWxh
dGl2ZUJCb3goYm8KICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICBjb25zdCBGb250JiBm
b250ID0gc3R5bGUoKS0+Zm9udCgpOwogICAgICAgICBpZiAoZm9udC5wcmltYXJ5Rm9udCgpLT5p
c1NWR0ZvbnQoKSkgewotICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBTVkdGb250RGF0YTo6Y29u
dmVydEVtVW5pdFRvUGl4ZWwoZm9udC5zaXplKCksIGZvbnQudW5pdHNQZXJFbSgpLCAxLjBmKTsK
KyAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gZm9udC51bml0c1BlckVtKCkgPiAwID8gZm9udC5z
aXplKCkgLyBmb250LnVuaXRzUGVyRW0oKSA6IDAuMGY7CiAKICAgICAgICAgICAgIGlmIChzY2Fs
ZSAhPSAwLjBmKQogICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoIC89IHNjYWxlOwpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9u
dC5jcHAJKHJldmlzaW9uIDI5Njk3KQorKysgV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjMsMTIgKzIzLDE1IEBACiAjaWYgRU5BQkxFKFNWR19GT05UUykKICNp
bmNsdWRlICJGb250LmgiCiAKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIlNWR0ZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
U1ZHR2x5cGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdGb250RmFjZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdNaXNzaW5nR2x5cGhFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgog
CkBAIC0zNiw2ICszOSwxNCBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydEVtVW5pdFRvUGl4
ZWwoZmxvYXQgZm9udFNpemUsIGZsb2F0IHVuaXRzUGVyRW0sIGZsb2F0IHZhbHVlKQoreworICAg
IGlmICh1bml0c1BlckVtID09IDAuMGYpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgcmV0
dXJuIHZhbHVlICogZm9udFNpemUgLyB1bml0c1BlckVtOworfQorCiBzdGF0aWMgaW5saW5lIGJv
b2wgaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSkKIHsK
ICAgICByZXR1cm4gc3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gV01fVEJSTCB8fCBzdHlsZS0+d3Jp
dGluZ01vZGUoKSA9PSBXTV9UQjsgCkBAIC0xNTksNyArMTcwLDEyIEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc0NvbXBhdGlibGVHbHlwaChjb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ly8gQ2hlY2sgd2hldGVyIGxhbmd1YWdlcyBhcmUgY29tcGF0aWJsZQotICAgIGlmICghbGFuZ3Vh
Z2UuaXNFbXB0eSgpICYmICFpZGVudGlmaWVyLmxhbmd1YWdlcy5pc0VtcHR5KCkpIHsKKyAgICBp
ZiAoIWlkZW50aWZpZXIubGFuZ3VhZ2VzLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBUaGlzIGds
eXBoIGV4aXN0cyBvbmx5IGluIGNlcnRhaW4gbGFuZ3VhZ2VzLCBpZiB3ZSdyZSBub3Qgc3BlY2lm
eWluZyBhCisgICAgICAgIC8vIGxhbmd1YWdlIG9uIHRoZSByZWZlcmVuY2luZyBlbGVtZW50IHdl
J3JlIHVuYWJsZSB0byB1c2UgdGhpcyBnbHlwaC4KKyAgICAgICAgaWYgKGxhbmd1YWdlLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICAvLyBTcGxpdCBzdWJj
b2RlIGZyb20gbGFuZ3VhZ2UsIGlmIGV4aXN0YW50LgogICAgICAgICBTdHJpbmcgbGFuZ3VhZ2VQ
cmVmaXg7CiAKQEAgLTE4OCwxNSArMjA0LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbXBh
dGlibGVHbHlwaChjb24KICAgICByZXR1cm4gaXNDb21wYXRpYmxlQXJhYmljRm9ybShpZGVudGlm
aWVyLCBjaGFycywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogfQogCi1zdGF0aWMgaW5s
aW5lIFNWR0ZvbnREYXRhKiBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBTVkdGb250RmFjZUVsZW1lbnQqJiBmb250RmFj
ZSwgU1ZHRm9udEVsZW1lbnQqJiBmb250KQorc3RhdGljIGlubGluZSBjb25zdCBTVkdGb250RGF0
YSogc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSwgU1ZHRm9udEZhY2VFbGVtZW50KiYgZm9udEZhY2UsIFNWR0ZvbnRFbGVt
ZW50KiYgZm9udCkKIHsKLSAgICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Cisg
ICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7CiAgICAgQVNTRVJUKGZvbnREYXRh
LT5pc1NWR0ZvbnQoKSk7CiAKLSAgICBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBmb250RGF0
YS0+c3ZnRm9udERhdGEoKTsKLSAgICBBU1NFUlQoc3ZnRm9udERhdGEpOworICAgIGNvbnN0IFNW
R0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4o
Zm9udERhdGEtPnN2Z0ZvbnREYXRhKCkpOwogCi0gICAgZm9udEZhY2UgPSBzdmdGb250RGF0YS0+
Zm9udEZhY2VFbGVtZW50LmdldCgpOworICAgIGZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2Z0Zv
bnRGYWNlRWxlbWVudCgpOwogICAgIEFTU0VSVChmb250RmFjZSk7CiAKICAgICBmb250ID0gZm9u
dEZhY2UtPmFzc29jaWF0ZWRGb250RWxlbWVudCgpOwpAQCAtMjA4LDkgKzIyMyw5IEBAIHN0YXRp
YyBpbmxpbmUgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb24KIHRlbXBsYXRlPHR5cGVuYW1lIFNW
R1RleHRSdW5EYXRhPgogc3RydWN0IFNWR1RleHRSdW5XYWxrZXIgewogICAgIHR5cGVkZWYgYm9v
bCAoKlNWR1RleHRSdW5XYWxrZXJDYWxsYmFjaykoY29uc3QgU1ZHR2x5cGhJZGVudGlmaWVyJiwg
U1ZHVGV4dFJ1bkRhdGEmKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpTVkdUZXh0UnVuV2Fsa2VyTWlz
c2luZ0dseXBoQ2FsbGJhY2spKGNvbnN0IFRleHRSdW4mLCB1bnNpZ25lZCBpbnQsIFNWR1RleHRS
dW5EYXRhJik7CisgICAgdHlwZWRlZiB2b2lkICgqU1ZHVGV4dFJ1bldhbGtlck1pc3NpbmdHbHlw
aENhbGxiYWNrKShjb25zdCBUZXh0UnVuJiwgU1ZHVGV4dFJ1bkRhdGEmKTsKIAotICAgIFNWR1Rl
eHRSdW5XYWxrZXIoU1ZHRm9udERhdGEqIGZvbnREYXRhLCBTVkdGb250RWxlbWVudCogZm9udEVs
ZW1lbnQsIFNWR1RleHRSdW5EYXRhJiBkYXRhLAorICAgIFNWR1RleHRSdW5XYWxrZXIoY29uc3Qg
U1ZHRm9udERhdGEqIGZvbnREYXRhLCBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIFNWR1Rl
eHRSdW5EYXRhJiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgU1ZHVGV4dFJ1bldhbGtlckNh
bGxiYWNrIGNhbGxiYWNrLCBTVkdUZXh0UnVuV2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2sgbWlz
c2luZ0dseXBoQ2FsbGJhY2spCiAgICAgICAgIDogbV9mb250RGF0YShmb250RGF0YSkKICAgICAg
ICAgLCBtX2ZvbnRFbGVtZW50KGZvbnRFbGVtZW50KQpAQCAtMjY3LDggKzI4MiwxOCBAQCBzdHJ1
Y3QgU1ZHVGV4dFJ1bldhbGtlciB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgh
Zm91bmRHbHlwaCkgewotICAgICAgICAgICAgICAgICgqbV93YWxrZXJNaXNzaW5nR2x5cGhDYWxs
YmFjaykocnVuLCBpLCBtX3dhbGtlckRhdGEpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGlmIChTVkdNaXNzaW5nR2x5cGhFbGVtZW50KiBlbGVtZW50ID0gbV9m
b250RWxlbWVudC0+Zmlyc3RNaXNzaW5nR2x5cGhFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gPG1pc3NpbmctZ2x5cGg+IGVsZW1lbnQgc3VwcG9ydAorICAgICAgICAgICAgICAg
ICAgICBpZGVudGlmaWVyID0gU1ZHR2x5cGhFbGVtZW50OjpidWlsZEdlbmVyaWNHbHlwaElkZW50
aWZpZXIoZWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgIFNWR0dseXBoRWxlbWVudDo6aW5o
ZXJpdFVuc3BlY2lmaWVkQXR0cmlidXRlcyhpZGVudGlmaWVyLCBtX2ZvbnREYXRhKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBz
eXN0ZW0gZm9udCBmYWxsYmFjaworICAgICAgICAgICAgICAgICAgICBUZXh0UnVuIHN1YlJ1bihy
dW4pOworICAgICAgICAgICAgICAgICAgICBzdWJSdW4uc2V0VGV4dChzdWJSdW4uZGF0YShpKSwg
MSk7CisKKyAgICAgICAgICAgICAgICAgICAgKCptX3dhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNr
KShzdWJSdW4sIG1fd2Fsa2VyRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCEoKm1f
d2Fsa2VyQ2FsbGJhY2spKGlkZW50aWZpZXIsIG1fd2Fsa2VyRGF0YSkpCkBAIC0yNzksNyArMzA0
LDcgQEAgc3RydWN0IFNWR1RleHRSdW5XYWxrZXIgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBT
VkdGb250RGF0YSogbV9mb250RGF0YTsKKyAgICBjb25zdCBTVkdGb250RGF0YSogbV9mb250RGF0
YTsKICAgICBTVkdGb250RWxlbWVudCogbV9mb250RWxlbWVudDsKICAgICBTVkdUZXh0UnVuRGF0
YSYgbV93YWxrZXJEYXRhOwogICAgIFNWR1RleHRSdW5XYWxrZXJDYWxsYmFjayBtX3dhbGtlckNh
bGxiYWNrOwpAQCAtMjkyLDM2ICszMTcsMjcgQEAgc3RydWN0IFNWR1RleHRSdW5XYWxrZXJNZWFz
dXJlZExlbmd0aERhdAogICAgIGludCBmcm9tOwogICAgIGludCB0bzsKIAorICAgIGZsb2F0IHNj
YWxlOwogICAgIGZsb2F0IGxlbmd0aDsKLSAgICBmbG9hdCBmb250U2l6ZTsKLSAgICB1bnNpZ25l
ZCB1bml0c1BlckVtOwogICAgIGNvbnN0IEZvbnQqIGZvbnQ7CiB9OwogCiBib29sIGZsb2F0V2lk
dGhVc2luZ1NWR0ZvbnRDYWxsYmFjayhjb25zdCBTVkdHbHlwaElkZW50aWZpZXImIGlkZW50aWZp
ZXIsIFNWR1RleHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0aERhdGEmIGRhdGEpCiB7CiAgICAgaWYg
KGRhdGEuYXQgPj0gZGF0YS5mcm9tICYmIGRhdGEuYXQgPCBkYXRhLnRvKQotICAgICAgICBkYXRh
Lmxlbmd0aCArPSBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6
ZSwgZGF0YS51bml0c1BlckVtLCBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCk7CisgICAg
ICAgIGRhdGEubGVuZ3RoICs9IGlkZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYICogZGF0YS5z
Y2FsZTsKIAogICAgIGRhdGEuYXQrKzsKICAgICByZXR1cm4gZGF0YS5hdCA8IGRhdGEudG87CiB9
CiAKLXZvaWQgZmxvYXRXaWR0aE1pc3NpbmdHbHlwaENhbGxiYWNrKGNvbnN0IFRleHRSdW4mIHJ1
biwgdW5zaWduZWQgaW50IHBvc2l0aW9uLCBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhE
YXRhJiBkYXRhKQordm9pZCBmbG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhY2soY29uc3QgVGV4
dFJ1biYgcnVuLCBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhJiBkYXRhKQogewot
ICAgIC8vIENvbnN0cnVjdCBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgU1ZHIEZvbnQgdGhhdCBpbiBp
cyB1c2UuIERpc2FibGUgdGhlIFNWRyBGb250IGZ1bmN0aW9uYWxpdHkKLSAgICAvLyBpbiB0aGF0
IGNvcHkgb2YgdGhlIEZvbnQgb2JqZWN0LCBzbyBkcmF3VGV4dC9mbG9hdFdpZHRoIGVuZCB1cCBp
biB0aGUgInNpbXBsZSIgY29kZSBwYXRocy4KLSAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGEg
PSBjb25zdF9jYXN0PFNpbXBsZUZvbnREYXRhKj4oZGF0YS5mb250LT5wcmltYXJ5Rm9udCgpKTsK
LSAgICBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBmb250RGF0YS0+bV9zdmdGb250RGF0YS5y
ZWxlYXNlKCk7Ci0KICAgICAvLyBIYW5kbGUgc3lzdGVtIGZvbnQgZmFsbGJhY2sKLSAgICBUZXh0
UnVuIHN1YlJ1bihydW4pOwotICAgIHN1YlJ1bi5zZXRUZXh0KHN1YlJ1bi5kYXRhKHBvc2l0aW9u
KSwgMSk7CisgICAgRm9udCBmb250KEZvbnREZXNjcmlwdGlvbigpLCAwLCAwKTsgLy8gc3BhY2lu
ZyBoYW5kbGVkIGJ5IFNWRyB0ZXh0IGNvZGUuCisgICAgZm9udC51cGRhdGUoZGF0YS5mb250LT5m
b250U2VsZWN0b3IoKSk7CiAKLSAgICBkYXRhLmxlbmd0aCArPSBkYXRhLmZvbnQtPmZsb2F0V2lk
dGgoc3ViUnVuKTsKLQotICAgIC8vIFN3aXRjaCBiYWNrIHRvIFNWRyBGb250IGNvZGUgcGF0aAot
ICAgIGZvbnREYXRhLT5tX3N2Z0ZvbnREYXRhLnNldChzdmdGb250RGF0YSk7CisgICAgZGF0YS5s
ZW5ndGggKz0gZm9udC5mbG9hdFdpZHRoKHJ1bik7CiB9CiAKIHN0YXRpYyBmbG9hdCBmbG9hdFdp
ZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvKQpAQCAtMzM1LDcgKzM1MSw3IEBAIHN0YXRpYyBmbG9h
dCBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1MKICAgICBTVkdGb250RWxlbWVudCogZm9udEVs
ZW1lbnQgPSAwOwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsK
IAotICAgIGlmIChTVkdGb250RGF0YSogZm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVt
ZW50Rm9yRm9udERhdGEoZm9udC0+cHJpbWFyeUZvbnQoKSwgZm9udEZhY2VFbGVtZW50LCBmb250
RWxlbWVudCkpIHsKKyAgICBpZiAoY29uc3QgU1ZHRm9udERhdGEqIGZvbnREYXRhID0gc3ZnRm9u
dEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQtPnByaW1hcnlGb250KCksIGZvbnRG
YWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7CiAgICAgICAgIGlmICghZm9udEVsZW1lbnQpCiAg
ICAgICAgICAgICByZXR1cm4gMC4wZjsKIApAQCAtMzQ1LDE2ICszNjEsMTUgQEAgc3RhdGljIGZs
b2F0IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nUwogICAgICAgICBkYXRhLmF0ID0gZnJvbTsK
ICAgICAgICAgZGF0YS5mcm9tID0gZnJvbTsKICAgICAgICAgZGF0YS50byA9IHRvOworICAgICAg
ICBkYXRhLnNjYWxlID0gY29udmVydEVtVW5pdFRvUGl4ZWwoZm9udC0+c2l6ZSgpLCBmb250RmFj
ZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSwgMS4wZik7CiAgICAgICAgIGRhdGEubGVuZ3RoID0gMC4w
ZjsKLSAgICAgICAgZGF0YS5mb250U2l6ZSA9IGZvbnQtPnNpemUoKTsKLSAgICAgICAgZGF0YS51
bml0c1BlckVtID0gZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCk7CiAKICAgICAgICAgaWYg
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0
KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGlu
Z01vZGUocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsKIAogICAgICAgICAgICAg
U3RyaW5nIGxhbmd1YWdlOwotICAgICAgICAgICAgaWYgKHJlbmRlck9iamVjdC0+ZWxlbWVudCgp
KQotICAgICAgICAgICAgICAgIGxhbmd1YWdlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHJlbmRl
ck9iamVjdC0+ZWxlbWVudCgpKS0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cik7Cisg
ICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1l
bnQqPihyZW5kZXJPYmplY3QtPmVsZW1lbnQoKSkpCisgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ug
PSBTVkdHbHlwaEVsZW1lbnQ6OnF1ZXJ5U1ZHRm9udExhbmd1YWdlKGVsZW1lbnQpOwogCiAgICAg
ICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyPFNWR1RleHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0aERh
dGE+IHJ1bldhbGtlcihmb250RGF0YSwgZm9udEVsZW1lbnQsIGRhdGEsIGZsb2F0V2lkdGhVc2lu
Z1NWR0ZvbnRDYWxsYmFjaywgZmxvYXRXaWR0aE1pc3NpbmdHbHlwaENhbGxiYWNrKTsKICAgICAg
ICAgICAgIHJ1bldhbGtlci53YWxrKHJ1biwgaXNWZXJ0aWNhbFRleHQsIGxhbmd1YWdlLCAwLCBy
dW4ubGVuZ3RoKCkpOwpAQCAtMzczLDkgKzM4OCw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhV
c2luZ1NWR0ZvbnQoY29uc3QKIAogLy8gQ2FsbGJhY2sgJiBkYXRhIHN0cnVjdHVyZXMgdG8gZHJh
dyB0ZXh0IHVzaW5nIFNWRyBGb250cwogc3RydWN0IFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERh
dGEgewotICAgIGZsb2F0IGZvbnRTaXplOwogICAgIGZsb2F0IHNjYWxlOwotICAgIHVuc2lnbmVk
IHVuaXRzUGVyRW07CiAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dDsKIAogICAgIGZsb2F0IHhTdGFy
dE9mZnNldDsKQEAgLTM5NSw4ICs0MDgsOCBAQCBib29sIGRyYXdUZXh0VXNpbmdTVkdGb250Q2Fs
bGJhY2soY29uc3QgCiAgICAgICAgIGRhdGEuY29udGV4dC0+c2F2ZSgpOwogCiAgICAgICAgIGlm
IChkYXRhLmlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAgICBkYXRhLmdseXBoT3JpZ2luLnNl
dFgoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEu
dW5pdHNQZXJFbSwgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblgpKTsKLSAgICAgICAgICAgIGRh
dGEuZ2x5cGhPcmlnaW4uc2V0WShTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0
YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSkp
OworICAgICAgICAgICAgZGF0YS5nbHlwaE9yaWdpbi5zZXRYKGlkZW50aWZpZXIudmVydGljYWxP
cmlnaW5YICogZGF0YS5zY2FsZSk7CisgICAgICAgICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFko
aWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkgKiBkYXRhLnNjYWxlKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGRhdGEuY29udGV4dC0+dHJhbnNsYXRlKGRhdGEueFN0YXJ0T2Zmc2V0ICsgZGF0YS5j
dXJyZW50UG9pbnQueCgpICsgZGF0YS5nbHlwaE9yaWdpbi54KCksIGRhdGEuY3VycmVudFBvaW50
LnkoKSArIGRhdGEuZ2x5cGhPcmlnaW4ueSgpKTsKQEAgLTQyMSwzNSArNDM0LDI1IEBAIGJvb2wg
ZHJhd1RleHRVc2luZ1NWR0ZvbnRDYWxsYmFjayhjb25zdCAKICAgICB9CiAKICAgICBpZiAoZGF0
YS5pc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQubW92ZSgwLjBmLCBT
VkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6ZSwgZGF0YS51bml0
c1BlckVtLCBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5jZVkpKTsKKyAgICAgICAgZGF0YS5jdXJy
ZW50UG9pbnQubW92ZSgwLjBmLCBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5jZVkgKiBkYXRhLnNj
YWxlKTsKICAgICBlbHNlCi0gICAgICAgIGRhdGEuY3VycmVudFBvaW50Lm1vdmUoU1ZHRm9udERh
dGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwg
aWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVgpLCAwLjBmKTsKKyAgICAgICAgZGF0YS5jdXJy
ZW50UG9pbnQubW92ZShpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCAqIGRhdGEuc2NhbGUs
IDAuMGYpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZHJhd1RleHRNaXNzaW5nR2x5
cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGludCBwb3NpdGlvbiwgU1ZH
VGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSYgZGF0YSkKK3ZvaWQgZHJhd1RleHRNaXNzaW5nR2x5
cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERh
dGEmIGRhdGEpCiB7Ci0gICAgLy8gQ29uc3RydWN0IGEgY29weSBvZiB0aGUgY3VycmVudCBTVkcg
Rm9udCB0aGF0IGluIGlzIHVzZS4gRGlzYWJsZSB0aGUgU1ZHIEZvbnQgZnVuY3Rpb25hbGl0eQot
ICAgIC8vIGluIHRoYXQgY29weSBvZiB0aGUgRm9udCBvYmplY3QsIHNvIGRyYXdUZXh0L2Zsb2F0
V2lkdGggZW5kIHVwIGluIHRoZSAic2ltcGxlIiBjb2RlIHBhdGhzLgotICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBkYXRhLmNvbnRleHQtPmZvbnQoKTsKLQotICAgIFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YSA9IGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEqPihmb250LnByaW1hcnlGb250KCkpOwot
ICAgIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IGZvbnREYXRhLT5tX3N2Z0ZvbnREYXRhLnJl
bGVhc2UoKTsKLQogICAgIC8vIEhhbmRsZSBzeXN0ZW0gZm9udCBmYWxsYmFjawotICAgIFRleHRS
dW4gc3ViUnVuKHJ1bik7Ci0gICAgc3ViUnVuLnNldFRleHQoc3ViUnVuLmRhdGEocG9zaXRpb24p
LCAxKTsKKyAgICBGb250IGZvbnQoRm9udERlc2NyaXB0aW9uKCksIDAsIDApOyAvLyBzcGFjaW5n
IGhhbmRsZWQgYnkgU1ZHIHRleHQgY29kZS4KKyAgICBmb250LnVwZGF0ZShkYXRhLmNvbnRleHQt
PmZvbnQoKS5mb250U2VsZWN0b3IoKSk7CiAKLSAgICBmb250LmRyYXdUZXh0KGRhdGEuY29udGV4
dCwgc3ViUnVuLCBkYXRhLmN1cnJlbnRQb2ludCk7CisgICAgZm9udC5kcmF3VGV4dChkYXRhLmNv
bnRleHQsIHJ1biwgZGF0YS5jdXJyZW50UG9pbnQpOwogCiAgICAgaWYgKGRhdGEuaXNWZXJ0aWNh
bFRleHQpCi0gICAgICAgIGRhdGEuY3VycmVudFBvaW50Lm1vdmUoMC4wZiwgZGF0YS5jb250ZXh0
LT5mb250KCkuZmxvYXRXaWR0aChzdWJSdW4pKTsKKyAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQu
bW92ZSgwLjBmLCBmb250LmZsb2F0V2lkdGgocnVuKSk7CiAgICAgZWxzZQotICAgICAgICBkYXRh
LmN1cnJlbnRQb2ludC5tb3ZlKGRhdGEuY29udGV4dC0+Zm9udCgpLmZsb2F0V2lkdGgoc3ViUnVu
KSwgMC4wZik7Ci0KLSAgICAvLyBTd2l0Y2ggYmFjayB0byBTVkcgRm9udCBjb2RlIHBhdGgKLSAg
ICBmb250RGF0YS0+bV9zdmdGb250RGF0YS5zZXQoc3ZnRm9udERhdGEpOworICAgICAgICBkYXRh
LmN1cnJlbnRQb2ludC5tb3ZlKGZvbnQuZmxvYXRXaWR0aChydW4pLCAwLjBmKTsKIH0KIAogdm9p
ZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgCkBAIC00NTgsNyArNDYxLDcgQEAgdm9pZCBGb250OjpkcmF3VGV4
dFVzaW5nU1ZHRm9udChHcmFwaGljcwogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9
IDA7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwogCi0gICAg
aWYgKFNWR0ZvbnREYXRhKiBmb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JG
b250RGF0YShwcmltYXJ5Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgewor
ICAgIGlmIChjb25zdCBTVkdGb250RGF0YSogZm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VF
bGVtZW50Rm9yRm9udERhdGEocHJpbWFyeUZvbnQoKSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxl
bWVudCkpIHsKICAgICAgICAgaWYgKCFmb250RWxlbWVudCkKICAgICAgICAgICAgIHJldHVybjsK
IApAQCAtNDcwLDkgKzQ3Myw3IEBAIHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3Jh
cGhpY3MKICAgICAgICAgZGF0YS5hY3RpdmVQYWludFNlcnZlciA9IHJ1bi5hY3RpdmVQYWludFNl
cnZlcigpOwogICAgICAgICBBU1NFUlQoZGF0YS5hY3RpdmVQYWludFNlcnZlcik7CiAKLSAgICAg
ICAgZGF0YS5mb250U2l6ZSA9IHNpemUoKTsKLSAgICAgICAgZGF0YS51bml0c1BlckVtID0gZm9u
dEZhY2VFbGVtZW50LT51bml0c1BlckVtKCk7Ci0gICAgICAgIGRhdGEuc2NhbGUgPSBTVkdGb250
RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVt
LCAxLjBmKTsKKyAgICAgICAgZGF0YS5zY2FsZSA9IGNvbnZlcnRFbVVuaXRUb1BpeGVsKHNpemUo
KSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCksIDEuMGYpOwogICAgICAgICBkYXRhLmlz
VmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKGRhdGEucmVuZGVyT2JqZWN0LT5z
dHlsZSgpLT5zdmdTdHlsZSgpKTsgICAgCiAgICAgICAgIGRhdGEueFN0YXJ0T2Zmc2V0ID0gZmxv
YXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgcnVuLnJ0bCgpID8gdG8g
OiAwLCBydW4ucnRsKCkgPyBydW4ubGVuZ3RoKCkgOiBmcm9tKTsKICAgICAgICAgZGF0YS5jdXJy
ZW50UG9pbnQgPSBwb2ludDsKQEAgLTQ4MCwxNCArNDgxLDE0IEBAIHZvaWQgRm9udDo6ZHJhd1Rl
eHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3MKICAgICAgICAgZGF0YS5jb250ZXh0ID0gY29udGV4dDsK
IAogICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7Ci0gICAgICAgIGlmIChkYXRhLnJlbmRlck9iamVj
dC0+ZWxlbWVudCgpKQotICAgICAgICAgICAgbGFuZ3VhZ2UgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4oZGF0YS5yZW5kZXJPYmplY3QtPmVsZW1lbnQoKSktPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6
bGFuZ0F0dHIpOworICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihkYXRhLnJlbmRlck9iamVjdC0+ZWxlbWVudCgpKSkKKyAgICAgICAgICAg
IGxhbmd1YWdlID0gU1ZHR2x5cGhFbGVtZW50OjpxdWVyeVNWR0ZvbnRMYW5ndWFnZShlbGVtZW50
KTsKIAogICAgICAgICBpZiAoIWRhdGEuaXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgICAgIGRh
dGEuZ2x5cGhPcmlnaW4uc2V0WChTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0
YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCBmb250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblgp
KTsKLSAgICAgICAgICAgIGRhdGEuZ2x5cGhPcmlnaW4uc2V0WShTVkdGb250RGF0YTo6Y29udmVy
dEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCBmb250RGF0YS0+
aG9yaXpvbnRhbE9yaWdpblkpKTsKKyAgICAgICAgICAgIGRhdGEuZ2x5cGhPcmlnaW4uc2V0WChm
b250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblgoKSAqIGRhdGEuc2NhbGUpOworICAgICAgICAgICAg
ZGF0YS5nbHlwaE9yaWdpbi5zZXRZKGZvbnREYXRhLT5ob3Jpem9udGFsT3JpZ2luWSgpICogZGF0
YS5zY2FsZSk7CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyPFNW
R1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGE+IHJ1bldhbGtlcihmb250RGF0YSwgZm9udEVsZW1l
bnQsIGRhdGEsIGRyYXdUZXh0VXNpbmdTVkdGb250Q2FsbGJhY2ssIGRyYXdUZXh0TWlzc2luZ0ds
eXBoQ2FsbGJhY2spOwogICAgICAgICBydW5XYWxrZXIud2FsayhydW4sIGRhdGEuaXNWZXJ0aWNh
bFRleHQsIGxhbmd1YWdlLCBmcm9tLCB0byk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZH
Rm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiU1ZHRm9udERhdGEuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitTVkdGb250RGF0YTo6U1ZHRm9udERhdGEoU1ZHRm9udEZhY2VFbGVtZW50
KiBmb250RmFjZUVsZW1lbnQpCisgICAgOiBtX3N2Z0ZvbnRGYWNlRWxlbWVudChmb250RmFjZUVs
ZW1lbnQpCisgICAgLCBtX2hvcml6b250YWxPcmlnaW5YKGZvbnRGYWNlRWxlbWVudC0+aG9yaXpv
bnRhbE9yaWdpblgoKSkKKyAgICAsIG1faG9yaXpvbnRhbE9yaWdpblkoZm9udEZhY2VFbGVtZW50
LT5ob3Jpem9udGFsT3JpZ2luWSgpKQorICAgICwgbV9ob3Jpem9udGFsQWR2YW5jZVgoZm9udEZh
Y2VFbGVtZW50LT5ob3Jpem9udGFsQWR2YW5jZVgoKSkKKyAgICAsIG1fdmVydGljYWxPcmlnaW5Y
KGZvbnRGYWNlRWxlbWVudC0+dmVydGljYWxPcmlnaW5YKCkpCisgICAgLCBtX3ZlcnRpY2FsT3Jp
Z2luWShmb250RmFjZUVsZW1lbnQtPnZlcnRpY2FsT3JpZ2luWSgpKQorICAgICwgbV92ZXJ0aWNh
bEFkdmFuY2VZKGZvbnRGYWNlRWxlbWVudC0+dmVydGljYWxBZHZhbmNlWSgpKQoreworfQorCitT
VkdGb250RGF0YTo6flNWR0ZvbnREYXRhKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3Zn
L1NWR0ZvbnREYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIFNWR0ZvbnREYXRhX2gKKyNkZWZpbmUgU1ZHRm9udERhdGFfaAorCisjaWYgRU5B
QkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdGb250RGF0YSB7CitwdWJsaWM6CisgICAgU1ZHRm9u
dERhdGEoU1ZHRm9udEZhY2VFbGVtZW50Kik7CisgICAgdmlydHVhbCB+U1ZHRm9udERhdGEoKTsK
KworICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCk7IH0KKworICAgIGZsb2F0IGhvcml6b250
YWxPcmlnaW5YKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsT3JpZ2luWDsgfQorICAgIGZs
b2F0IGhvcml6b250YWxPcmlnaW5ZKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsT3JpZ2lu
WTsgfQorICAgIGZsb2F0IGhvcml6b250YWxBZHZhbmNlWCgpIGNvbnN0IHsgcmV0dXJuIG1faG9y
aXpvbnRhbEFkdmFuY2VYOyB9CisKKyAgICBmbG9hdCB2ZXJ0aWNhbE9yaWdpblgoKSBjb25zdCB7
IHJldHVybiBtX3ZlcnRpY2FsT3JpZ2luWDsgfQorICAgIGZsb2F0IHZlcnRpY2FsT3JpZ2luWSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxPcmlnaW5ZOyB9CisgICAgZmxvYXQgdmVydGljYWxB
ZHZhbmNlWSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxBZHZhbmNlWTsgfQorCitwcml2YXRl
OgorICAgIFJlZlB0cjxTVkdGb250RmFjZUVsZW1lbnQ+IG1fc3ZnRm9udEZhY2VFbGVtZW50Owor
CisgICAgZmxvYXQgbV9ob3Jpem9udGFsT3JpZ2luWDsKKyAgICBmbG9hdCBtX2hvcml6b250YWxP
cmlnaW5ZOworICAgIGZsb2F0IG1faG9yaXpvbnRhbEFkdmFuY2VYOworCisgICAgZmxvYXQgbV92
ZXJ0aWNhbE9yaWdpblg7CisgICAgZmxvYXQgbV92ZXJ0aWNhbE9yaWdpblk7CisgICAgZmxvYXQg
bV92ZXJ0aWNhbEFkdmFuY2VZOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKyNlbmRpZiAvLyBTVkdGb250RGF0YV9oCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250RmFj
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDI5Njk3KQorKysgV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICBDb3B5cmlnaHQgKEMp
IDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAgIENvcHlyaWdodCAoQykgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAgIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAg
ICAKICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgotCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNl
U3JjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgpAQCAtMTM4LDEwOCArMTM4LDE2
MyBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyCiAKIHVuc2lnbmVk
IFNWR0ZvbnRGYWNlRWxlbWVudDo6dW5pdHNQZXJFbSgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc0F0
dHJpYnV0ZSh1bml0c19wZXJfZW1BdHRyKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4oY2VpbGYoZ2V0QXR0cmlidXRlKHVuaXRzX3Blcl9lbUF0dHIpLnRvRmxvYXQoKSkpOwotCi0g
ICAgcmV0dXJuIDEwMDA7Ci19CisgICAgQXRvbWljU3RyaW5nIHZhbHVlKGdldEF0dHJpYnV0ZSh1
bml0c19wZXJfZW1BdHRyKSk7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIDEwMDA7CiAKLVN0cmluZyBTVkdGb250RmFjZUVsZW1lbnQ6OmZvbnRGYW1pbHkoKSBjb25z
dAotewotICAgIHJldHVybiBtX3N0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5VmFsdWUoQ1NT
X1BST1BfRk9OVF9GQU1JTFkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2Vp
bGYodmFsdWUudG9GbG9hdCgpKSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTVkdGb250RmFjZUVs
ZW1lbnQ6OmNyZWF0ZUZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKSBjb25zdAoraW50IFNWR0ZvbnRGYWNlRWxlbWVudDo6eEhlaWdodCgpIGNvbnN0CiB7Ci0g
ICAgLy8gV2Ugb25seSBleHBlY3QgdG8gaGF2ZSB0aGlzIG1ldGhvZCBjYWxsZWQgYnkgYSBwYXJl
bnQgZm9udCBlbGVtZW50Ci0gICAgQVNTRVJUKHBhcmVudE5vZGUoKSk7Ci0gICAgQVNTRVJUKHBh
cmVudE5vZGUoKS0+aGFzVGFnTmFtZShmb250VGFnKSk7Ci0gICAgU1ZHRm9udEVsZW1lbnQqIGZv
bnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRm9udEVsZW1lbnQqPihwYXJlbnROb2RlKCkpOwot
Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogY2FjaGVkUGxhdGZvcm1EYXRhID0gRm9udENhY2hlOjpn
ZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgaWYgKCFjYWNo
ZWRQbGF0Zm9ybURhdGEpCisgICAgQXRvbWljU3RyaW5nIHZhbHVlKGdldEF0dHJpYnV0ZSh4X2hl
aWdodEF0dHIpKTsKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIE93blB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGEobmV3IFNpbXBsZUZvbnREYXRh
KCpjYWNoZWRQbGF0Zm9ybURhdGEpKTsKLQotICAgIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9
IG5ldyBTVkdGb250RGF0YShjb25zdF9jYXN0PFNWR0ZvbnRGYWNlRWxlbWVudCo+KHRoaXMpKTsK
LSAgICBmb250RGF0YS0+bV9zdmdGb250RGF0YS5zZXQoc3ZnRm9udERhdGEpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHZhbHVlLnRvRmxvYXQoKSkpOworfQogCi0gICAgZm9u
dERhdGEtPm1feEhlaWdodCA9IGZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoeF9oZWlnaHRBdHRy
KS50b0Zsb2F0KCk7Ci0gICAgZm9udERhdGEtPm1fdW5pdHNQZXJFbSA9IHVuaXRzUGVyRW0oKTsK
K2Zsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbE9yaWdpblgoKSBjb25zdAorewor
ICAgIGlmICghbV9mb250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAgICAvLyBT
cGVjOiBUaGUgWC1jb29yZGluYXRlIGluIHRoZSBmb250IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRo
ZSBvcmlnaW4gb2YgYSBnbHlwaCB0byBiZSB1c2VkIHdoZW4KICAgICAvLyBkcmF3aW5nIGhvcml6
b250YWxseSBvcmllbnRlZCB0ZXh0LiAoTm90ZSB0aGF0IHRoZSBvcmlnaW4gYXBwbGllcyB0byBh
bGwgZ2x5cGhzIGluIHRoZSBmb250LikKICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBz
cGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCIgd2VyZSBzcGVjaWZp
ZWQuCi0gICAgaWYgKGZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUoaG9yaXpfb3JpZ2luX3hBdHRy
KSkKLSAgICAgICAgc3ZnRm9udERhdGEtPmhvcml6b250YWxPcmlnaW5YID0gZm9udEVsZW1lbnQt
PmdldEF0dHJpYnV0ZShob3Jpel9vcmlnaW5feEF0dHIpLnRvRmxvYXQoKTsKKyAgICBBdG9taWNT
dHJpbmcgdmFsdWUobV9mb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKGhvcml6X29yaWdpbl94QXR0
cikpOworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisg
ICAgcmV0dXJuIHZhbHVlLnRvRmxvYXQoKTsKK30KKworZmxvYXQgU1ZHRm9udEZhY2VFbGVtZW50
Ojpob3Jpem9udGFsT3JpZ2luWSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZvbnRFbGVtZW50KQor
ICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgIC8vIFNwZWM6IFRoZSBZLWNvb3JkaW5hdGUgaW4g
dGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9yaWdpbiBvZiBhIGdseXBoIHRvIGJl
IHVzZWQgd2hlbgogICAgIC8vIGRyYXdpbmcgaG9yaXpvbnRhbGx5IG9yaWVudGVkIHRleHQuIChO
b3RlIHRoYXQgdGhlIG9yaWdpbiBhcHBsaWVzIHRvIGFsbCBnbHlwaHMgaW4gdGhlIGZvbnQuKQog
ICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBh
cyBpZiBhIHZhbHVlIG9mICIwIiB3ZXJlIHNwZWNpZmllZC4KLSAgICBpZiAoZm9udEVsZW1lbnQt
Pmhhc0F0dHJpYnV0ZShob3Jpel9vcmlnaW5feUF0dHIpKQotICAgICAgICBzdmdGb250RGF0YS0+
aG9yaXpvbnRhbE9yaWdpblkgPSBmb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKGhvcml6X29yaWdp
bl95QXR0cikudG9GbG9hdCgpOworICAgIEF0b21pY1N0cmluZyB2YWx1ZShtX2ZvbnRFbGVtZW50
LT5nZXRBdHRyaWJ1dGUoaG9yaXpfb3JpZ2luX3lBdHRyKSk7CisgICAgaWYgKHZhbHVlLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICByZXR1cm4gdmFsdWUudG9GbG9hdCgp
OworfQorCitmbG9hdCBTVkdGb250RmFjZUVsZW1lbnQ6Omhvcml6b250YWxBZHZhbmNlWCgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2ZvbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gMC4wZjsKIAog
ICAgIC8vIFNwZWM6IFRoZSBkZWZhdWx0IGhvcml6b250YWwgYWR2YW5jZSBhZnRlciByZW5kZXJp
bmcgYSBnbHlwaCBpbiBob3Jpem9udGFsIG9yaWVudGF0aW9uLiBHbHlwaAogICAgIC8vIHdpZHRo
cyBhcmUgcmVxdWlyZWQgdG8gYmUgbm9uLW5lZ2F0aXZlLCBldmVuIGlmIHRoZSBnbHlwaCBpcyB0
eXBpY2FsbHkgcmVuZGVyZWQgcmlnaHQtdG8tbGVmdCwKICAgICAvLyBhcyBpbiBIZWJyZXcgYW5k
IEFyYWJpYyBzY3JpcHRzLgotICAgIGlmIChmb250RWxlbWVudC0+aGFzQXR0cmlidXRlKGhvcml6
X2Fkdl94QXR0cikpIHsKLSAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGZvbnRFbGVtZW50LT5nZXRB
dHRyaWJ1dGUoaG9yaXpfYWR2X3hBdHRyKS50b0Zsb2F0KCk7CisgICAgQXRvbWljU3RyaW5nIHZh
bHVlKG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZShob3Jpel9hZHZfeEF0dHIpKTsKKyAgICBp
ZiAodmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMC4wZjsKIAotICAgICAgICAvLyBU
T0RPOiBSZXBvcnQgZXJyb3JzLCBpbnN0ZWFkIG9mIHNpbGVudCBpZ25vcmU/Ci0gICAgICAgIGlm
IChhZHZhbmNlID49IDAuMCkKLSAgICAgICAgICAgIHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2
YW5jZVggPSBhZHZhbmNlOwotICAgIH0KKyAgICByZXR1cm4gdmFsdWUudG9GbG9hdCgpOworfQor
CitmbG9hdCBTVkdGb250RmFjZUVsZW1lbnQ6OnZlcnRpY2FsT3JpZ2luWCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2ZvbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgIC8vIFNw
ZWM6IFRoZSBkZWZhdWx0IFgtY29vcmRpbmF0ZSBpbiB0aGUgZm9udCBjb29yZGluYXRlIHN5c3Rl
bSBvZiB0aGUgb3JpZ2luIG9mIGEgZ2x5cGggdG8gYmUgdXNlZCB3aGVuCiAgICAgLy8gZHJhd2lu
ZyB2ZXJ0aWNhbGx5IG9yaWVudGVkIHRleHQuIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNp
ZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiB0aGUgYXR0cmlidXRlCiAgICAgLy8gd2VyZSBzZXQg
dG8gaGFsZiBvZiB0aGUgZWZmZWN0aXZlIHZhbHVlIG9mIGF0dHJpYnV0ZSBob3Jpei1hZHYteC4K
LSAgICBpZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X29yaWdpbl94QXR0cikpCi0g
ICAgICAgIHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbE9yaWdpblggPSBmb250RWxlbWVudC0+Z2V0QXR0
cmlidXRlKHZlcnRfb3JpZ2luX3hBdHRyKS50b0Zsb2F0KCk7Ci0gICAgZWxzZQotICAgICAgICBz
dmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5YID0gc3ZnRm9udERhdGEtPmhvcml6b250YWxBZHZh
bmNlWCAvIDIuMGY7CisgICAgQXRvbWljU3RyaW5nIHZhbHVlKG1fZm9udEVsZW1lbnQtPmdldEF0
dHJpYnV0ZSh2ZXJ0X29yaWdpbl94QXR0cikpOworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBob3Jpem9udGFsQWR2YW5jZVgoKSAvIDIuMGY7CisKKyAgICByZXR1cm4g
dmFsdWUudG9GbG9hdCgpOworfQorCitmbG9hdCBTVkdGb250RmFjZUVsZW1lbnQ6OnZlcnRpY2Fs
T3JpZ2luWSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZvbnRFbGVtZW50KQorICAgICAgICByZXR1
cm4gMC4wZjsKIAogICAgIC8vIFNwZWM6IFRoZSBkZWZhdWx0IFktY29vcmRpbmF0ZSBpbiB0aGUg
Zm9udCBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgb3JpZ2luIG9mIGEgZ2x5cGggdG8gYmUgdXNl
ZCB3aGVuCiAgICAgLy8gZHJhd2luZyB2ZXJ0aWNhbGx5IG9yaWVudGVkIHRleHQuIElmIHRoZSBh
dHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiB0aGUgYXR0cmli
dXRlCiAgICAgLy8gd2VyZSBzZXQgdG8gdGhlIHBvc2l0aW9uIHNwZWNpZmllZCBieSB0aGUgZm9u
dCdzIGFzY2VudCBhdHRyaWJ1dGUuICAgICAgICAgICAgIAotICAgIGlmIChmb250RWxlbWVudC0+
aGFzQXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKSkKLSAgICAgICAgc3ZnRm9udERhdGEtPnZl
cnRpY2FsT3JpZ2luWSA9IGZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0
dHIpLnRvRmxvYXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbE9y
aWdpblkgPSBmb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKGFzY2VudEF0dHIpLnRvRmxvYXQoKTsK
KyAgICBBdG9taWNTdHJpbmcgdmFsdWUobV9mb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRf
b3JpZ2luX3lBdHRyKSk7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGFzY2VudCgpOworCisgICAgcmV0dXJuIHZhbHVlLnRvRmxvYXQoKTsKK30KKworZmxvYXQgU1ZH
Rm9udEZhY2VFbGVtZW50Ojp2ZXJ0aWNhbEFkdmFuY2VZKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
Zm9udEVsZW1lbnQpCisgICAgICAgIHJldHVybiAwLjBmOwogCiAgICAgLy8gU3BlYzogVGhlIGRl
ZmF1bHQgdmVydGljYWwgYWR2YW5jZSBhZnRlciByZW5kZXJpbmcgYSBnbHlwaCBpbiB2ZXJ0aWNh
bCBvcmllbnRhdGlvbi4gSWYgdGhlIGF0dHJpYnV0ZSBpcwogICAgIC8vIG5vdCBzcGVjaWZpZWQs
IHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBlcXVpdmFsZW50IG9mIG9uZSBlbSB3ZXJlIHNw
ZWNpZmllZCAoc2VlIHVuaXRzLXBlci1lbSkuICAgICAgICAgICAgICAgICAgICAKLSAgICBpZiAo
Zm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X2Fkdl95QXR0cikpCi0gICAgICAgIHN2Z0Zv
bnREYXRhLT52ZXJ0aWNhbEFkdmFuY2VZID0gZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0
X2Fkdl95QXR0cikudG9GbG9hdCgpOwotICAgIGVsc2UKLSAgICAgICAgc3ZnRm9udERhdGEtPnZl
cnRpY2FsQWR2YW5jZVkgPSAxLjBmOworICAgIEF0b21pY1N0cmluZyB2YWx1ZShtX2ZvbnRFbGVt
ZW50LT5nZXRBdHRyaWJ1dGUodmVydF9hZHZfeUF0dHIpKTsKKyAgICAgICBpZiAodmFsdWUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gMS4wZjsKKworICAgIHJldHVybiB2YWx1ZS50b0Zsb2F0
KCk7Cit9CisKK2ludCBTVkdGb250RmFjZUVsZW1lbnQ6OmFzY2VudCgpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2ZvbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgIC8vIFNwZWM6
IFNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMgdGhlICdhc2NlbnQnIGRlc2NyaXB0b3Igd2l0
aGluIGFuIEBmb250LWZhY2UgcnVsZS4gVGhlIG1heGltdW0KICAgICAvLyB1bmFjY2VudGVkIGhl
aWdodCBvZiB0aGUgZm9udCB3aXRoaW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0uIElmIHRo
ZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwKICAgICAvLyB0aGUgZWZmZWN0IGlzIGFzIGlm
IHRoZSBhdHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5p
dHMtcGVyLWVtIHZhbHVlIGFuZCB0aGUKICAgICAvLyB2ZXJ0LW9yaWdpbi15IHZhbHVlIGZvciB0
aGUgY29ycmVzcG9uZGluZyBmb250LgotICAgIGlmIChoYXNBdHRyaWJ1dGUoYXNjZW50QXR0cikp
Ci0gICAgICAgIGZvbnREYXRhLT5tX2FzY2VudCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoZ2V0
QXR0cmlidXRlKGFzY2VudEF0dHIpLnRvRmxvYXQoKSkpOwotICAgIGVsc2UgaWYgKGZvbnRFbGVt
ZW50LT5oYXNBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpKQotICAgICAgICBmb250RGF0YS0+
bV9hc2NlbnQgPSBmb250RGF0YS0+bV91bml0c1BlckVtIC0gc3RhdGljX2Nhc3Q8aW50PihjZWls
Zihmb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKS50b0Zsb2F0KCkp
KTsKLSAgICBlbHNlIC8vIE1hdGNoIEJhdGlrJ3MgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgZm9u
dERhdGEtPm1fYXNjZW50ID0gZm9udERhdGEtPm1fdW5pdHNQZXJFbSAqIDAuOGY7CisgICAgQXRv
bWljU3RyaW5nIHZhbHVlKG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZShhc2NlbnRBdHRyKSk7
CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KGNlaWxmKHZhbHVlLnRvRmxvYXQoKSkpOworCisgICAgdmFsdWUgPSBtX2ZvbnRFbGVtZW50
LT5nZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpOworICAgIGlmICghdmFsdWUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih1bml0c1BlckVtKCkpIC0gc3Rh
dGljX2Nhc3Q8aW50PihjZWlsZih2YWx1ZS50b0Zsb2F0KCkpKTsKKworICAgIC8vIE1hdGNoIEJh
dGlrcyBkZWZhdWx0IHZhbHVlCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYodW5p
dHNQZXJFbSgpICogMC44ZikpOworfQorCitpbnQgU1ZHRm9udEZhY2VFbGVtZW50OjpkZXNjZW50
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZm9udEVsZW1lbnQpCisgICAgICAgIHJldHVybiAwLjBm
OwogCiAgICAgLy8gU3BlYzogU2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcyB0aGUgJ2Rlc2Nl
bnQnIGRlc2NyaXB0b3Igd2l0aGluIGFuIEBmb250LWZhY2UgcnVsZS4gVGhlIG1heGltdW0KICAg
ICAvLyB1bmFjY2VudGVkIGRlcHRoIG9mIHRoZSBmb250IHdpdGhpbiB0aGUgZm9udCBjb29yZGlu
YXRlIHN5c3RlbS4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLAogICAgIC8vIHRo
ZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUgdmVydC1vcmln
aW4teSB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZm9udC4KLSAgICBpZiAoaGFzQXR0cmli
dXRlKGRlc2NlbnRBdHRyKSkgewotICAgICAgICBmb250RGF0YS0+bV9kZXNjZW50ID0gc3RhdGlj
X2Nhc3Q8aW50PihjZWlsZihnZXRBdHRyaWJ1dGUoZGVzY2VudEF0dHIpLnRvRmxvYXQoKSkpOwot
CisgICAgQXRvbWljU3RyaW5nIHZhbHVlKG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZShkZXNj
ZW50QXR0cikpOworICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFNvbWUg
dGVzdGNhc2VzIHVzZSBhIG5lZ2F0aXZlIGRlc2NlbnQgdmFsdWUsIHdoZXJlIGEgcG9zaXRpdmUg
d2FzIG1lYW50IHRvIGJlIHVzZWQgOigKLSAgICAgICAgaWYgKGZvbnREYXRhLT5tX2Rlc2NlbnQg
PCAwKQotICAgICAgICAgICAgZm9udERhdGEtPm1fZGVzY2VudCA9IC1mb250RGF0YS0+bV9kZXNj
ZW50OwotICAgIH0gZWxzZSBpZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X29yaWdp
bl95QXR0cikpCi0gICAgICAgIGZvbnREYXRhLT5tX2Rlc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+
KGNlaWxmKGZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpLnRvRmxv
YXQoKSkpOwotICAgIGVsc2UgLy8gTWF0Y2ggQmF0aWsncyBkZWZhdWx0IHZhbHVlLgotICAgICAg
ICBmb250RGF0YS0+bV9kZXNjZW50ID0gZm9udERhdGEtPm1fdW5pdHNQZXJFbSAqIDAuMmY7Cisg
ICAgICAgIGludCBkZXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZih2YWx1ZS50b0Zsb2F0
KCkpKTsKKyAgICAgICAgcmV0dXJuIGRlc2NlbnQgPCAwID8gLWRlc2NlbnQgOiBkZXNjZW50Owor
ICAgIH0KKworICAgIHZhbHVlID0gbV9mb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRfb3Jp
Z2luX3lBdHRyKTsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4oY2VpbGYodmFsdWUudG9GbG9hdCgpKSk7CisKKyAgICAvLyBNYXRjaCBC
YXRpa3MgZGVmYXVsdCB2YWx1ZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHVu
aXRzUGVyRW0oKSAqIDAuMmYpKTsKK30KIAotICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7
CitTdHJpbmcgU1ZHRm9udEZhY2VFbGVtZW50Ojpmb250RmFtaWx5KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eVZhbHVlKENTU19QUk9QX0ZPTlRf
RkFNSUxZKTsKK30KKworU1ZHRm9udEVsZW1lbnQqIFNWR0ZvbnRGYWNlRWxlbWVudDo6YXNzb2Np
YXRlZEZvbnRFbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250RWxlbWVudC5nZXQo
KTsKIH0KIAogdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSgpCkBAIC0y
NTIsNyArMzA3LDcgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZQog
ICAgIGlmIChwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcp
KSB7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0
OwogCi0gICAgICAgIFJlZlB0cjxDU1NGb250RmFjZVNyY1ZhbHVlPiBzcmMgPSBuZXcgQ1NTRm9u
dEZhY2VTcmNWYWx1ZShTdHJpbmdJbXBsOjplbXB0eSgpLCB0cnVlIC8qIGlzTG9jYWwgKi8pOwor
ICAgICAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gc3JjID0gbmV3IENTU0ZvbnRGYWNl
U3JjVmFsdWUoZm9udEZhbWlseSgpLCB0cnVlIC8qIGlzTG9jYWwgKi8pOwogICAgICAgICBzcmMt
PnNldFNWR0ZvbnRGYWNlRWxlbWVudCh0aGlzKTsKICAgICAgICAgbGlzdC0+YXBwZW5kKHNyYyk7
CiAKQEAgLTI2MCw2ICszMTUsNyBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZv
bnRGYWNlCiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5KiBzcmNQcm9wZXJ0eVJlZiA9ICZzcmNQ
cm9wZXJ0eTsKICAgICAgICAgbV9zdHlsZURlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0aWVz
KCZzcmNQcm9wZXJ0eVJlZiwgMSk7CiAKKyAgICAgICAgbV9mb250RWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0ZvbnRFbGVtZW50Kj4ocGFyZW50Tm9kZSgpKTsKICAgICAgICAgZG9jdW1lbnQoKS0+
dXBkYXRlU3R5bGVTZWxlY3RvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzA0LDIw
ICszNjAsNiBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkCiAgICAg
cmVidWlsZEZvbnRGYWNlKCk7CiB9CiAKLVNWR0ZvbnRFbGVtZW50KiBTVkdGb250RmFjZUVsZW1l
bnQ6OmFzc29jaWF0ZWRGb250RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKE5vZGUqIHBhcmVu
dCA9IHBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGZvbnRU
YWcpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0ZvbnRFbGVtZW50Kj4ocGFy
ZW50KTsKLSAgICAgICAgZWxzZSBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGRlZnNUYWcpKSB7Ci0g
ICAgICAgICAgICAvLyBUT0RPOiBTdXBwb3J0IGV4dGVybmFsIFNWRyBmb250cyEKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShTVkdfRk9OVFMpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250
RmFjZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1l
bnQuaAkocmV2aXNpb24gMjk2OTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBDU1NGb250RmFjZVJ1bGU7CiAgICAgY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb247Ci0gICAgY2xhc3MgRm9udERlc2NyaXB0aW9uOwotICAgIGNsYXNzIFNpbXBsZUZv
bnREYXRhOwogICAgIGNsYXNzIFNWR0ZvbnRFbGVtZW50OwogCiAgICAgY2xhc3MgU1ZHRm9udEZh
Y2VFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQgewpAQCAtNDMsMTggKzQxLDI1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50
KCk7CiAKICAgICAgICAgdW5zaWduZWQgdW5pdHNQZXJFbSgpIGNvbnN0OworICAgICAgICBpbnQg
eEhlaWdodCgpIGNvbnN0OworICAgICAgICBmbG9hdCBob3Jpem9udGFsT3JpZ2luWCgpIGNvbnN0
OworICAgICAgICBmbG9hdCBob3Jpem9udGFsT3JpZ2luWSgpIGNvbnN0OworICAgICAgICBmbG9h
dCBob3Jpem9udGFsQWR2YW5jZVgoKSBjb25zdDsKKyAgICAgICAgZmxvYXQgdmVydGljYWxPcmln
aW5YKCkgY29uc3Q7CisgICAgICAgIGZsb2F0IHZlcnRpY2FsT3JpZ2luWSgpIGNvbnN0OworICAg
ICAgICBmbG9hdCB2ZXJ0aWNhbEFkdmFuY2VZKCkgY29uc3Q7CisgICAgICAgIGludCBhc2NlbnQo
KSBjb25zdDsKKyAgICAgICAgaW50IGRlc2NlbnQoKSBjb25zdDsKICAgICAgICAgU3RyaW5nIGZv
bnRGYW1pbHkoKSBjb25zdDsKIAotICAgICAgICB2b2lkIHJlYnVpbGRGb250RmFjZSgpOwotICAg
ICAgICBTaW1wbGVGb250RGF0YSogY3JlYXRlRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JikgY29uc3Q7Ci0KLSAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBlbGVtZW50IGlzIDxmb250Piwg
aXQgd2lsbCBiZSByZXR1cm5lZC4gKHRoaXMgaXMgdGhlIGNhc2UgZm9yIGEgU1ZHIEZvbnQgZGVz
Y3JpYmVkIGluIHRoZSBzYW1lIGRvY3VtZW50KQotICAgICAgICAvLyBPdGhlcndoaXNlIGl0IHdp
bGwgcmV0dXJuIHRoZSA8Zm9udD4gZWxlbWVudCB0aGF0IGlzIHJlZmVyZW5jZWQgYnkgdGhlIGZp
cnN0IHZhbGlkIDxmb250LWZhY2Utc3JjPiBlbGVtZW50LgogICAgICAgICBTVkdGb250RWxlbWVu
dCogYXNzb2NpYXRlZEZvbnRFbGVtZW50KCkgY29uc3Q7CisgICAgICAgIHZvaWQgcmVidWlsZEZv
bnRGYWNlKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8Q1NTRm9udEZhY2VSdWxl
PiBtX2ZvbnRGYWNlUnVsZTsKICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBtX3N0eWxlRGVjbGFyYXRpb247CisKKyAgICAgICAgUmVmUHRyPFNWR0ZvbnRFbGVtZW50
PiBtX2ZvbnRFbGVtZW50OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkocmV2aXNpb24gMjk2OTcpCisrKyBXZWJDb3JlL3N2Zy9T
VkdHbHlwaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAg
IENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICAgQ29w
eXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVk
ZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTVkdGb250RGF0YS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAi
U1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKQEAgLTkz
LDY3ICs5NCw3OCBAQCBzdGF0aWMgaW5saW5lIFBhdGggcGFyc2VQYXRoRGF0YShjb25zdCBBCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTVkdHbHlwaEVsZW1lbnQ6OmluaGVyaXRVbnNw
ZWNpZmllZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBTVkdGb250
RGF0YSogc3ZnRm9udERhdGEpCit2b2lkIFNWR0dseXBoRWxlbWVudDo6aW5oZXJpdFVuc3BlY2lm
aWVkQXR0cmlidXRlcyhTVkdHbHlwaElkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFNWR0Zv
bnREYXRhKiBzdmdGb250RGF0YSkKIHsKICAgICBpZiAoaWRlbnRpZmllci5ob3Jpem9udGFsQWR2
YW5jZVggPT0gU1ZHR2x5cGhJZGVudGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpKQotICAgICAgICBp
ZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCA9IHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2
YW5jZVg7CisgICAgICAgIGlkZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYID0gc3ZnRm9udERh
dGEtPmhvcml6b250YWxBZHZhbmNlWCgpOwogCiAgICAgaWYgKGlkZW50aWZpZXIudmVydGljYWxP
cmlnaW5YID09IFNWR0dseXBoSWRlbnRpZmllcjo6aW5oZXJpdGVkVmFsdWUoKSkKLSAgICAgICAg
aWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblggPSBzdmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5Y
OworICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9IHN2Z0ZvbnREYXRhLT52ZXJ0
aWNhbE9yaWdpblgoKTsKIAogICAgIGlmIChpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSA9PSBT
VkdHbHlwaElkZW50aWZpZXI6OmluaGVyaXRlZFZhbHVlKCkpCi0gICAgICAgIGlkZW50aWZpZXIu
dmVydGljYWxPcmlnaW5ZID0gc3ZnRm9udERhdGEtPnZlcnRpY2FsT3JpZ2luWTsKKyAgICAgICAg
aWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkgPSBzdmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5Z
KCk7CiAKICAgICBpZiAoaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID09IFNWR0dseXBoSWRl
bnRpZmllcjo6aW5oZXJpdGVkVmFsdWUoKSkKLSAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbEFk
dmFuY2VZID0gc3ZnRm9udERhdGEtPnZlcnRpY2FsQWR2YW5jZVk7CisgICAgICAgIGlkZW50aWZp
ZXIudmVydGljYWxBZHZhbmNlWSA9IHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbEFkdmFuY2VZKCk7CiB9
CiAKLVNWR0dseXBoSWRlbnRpZmllciBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2x5cGhJZGVudGlm
aWVyKCkgY29uc3QKK3N0YXRpYyBpbmxpbmUgZmxvYXQgcGFyc2VTVkdHbHlwaEF0dHJpYnV0ZShj
b25zdCBTVkdFbGVtZW50KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJiBu
YW1lKQogewotICAgIFNWR0dseXBoSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgIGlkZW50aWZp
ZXIuZ2x5cGhOYW1lID0gZ2V0QXR0cmlidXRlKGdseXBoX25hbWVBdHRyKTsKLSAgICBpZGVudGlm
aWVyLm9yaWVudGF0aW9uID0gcGFyc2VPcmllbnRhdGlvbihnZXRBdHRyaWJ1dGUob3JpZW50YXRp
b25BdHRyKSk7Ci0gICAgaWRlbnRpZmllci5hcmFiaWNGb3JtID0gcGFyc2VBcmFiaWNGb3JtKGdl
dEF0dHJpYnV0ZShhcmFiaWNfZm9ybUF0dHIpKTsKLSAgICBpZGVudGlmaWVyLnBhdGhEYXRhID0g
cGFyc2VQYXRoRGF0YShnZXRBdHRyaWJ1dGUoZEF0dHIpKTsKLQotICAgIFN0cmluZyBsYW5ndWFn
ZSA9IGdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOwotICAgIGlmIChsYW5ndWFnZS5p
c0VtcHR5KCkpIC8vIFNWRyBkZWZpbmVzIGEgbm9uLXhtbCBwcmVmaXhlZCAibGFuZyIgcHJvcGVy
dCBmb3IgPGdseXBoPiBpdCBzZWVtcy4KLSAgICAgICAgbGFuZ3VhZ2UgPSBnZXRBdHRyaWJ1dGUo
ImxhbmciKTsKKyAgICBBdG9taWNTdHJpbmcgdmFsdWUoZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5h
bWUpKTsKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU1ZHR2x5cGhJ
ZGVudGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpOwogCi0gICAgaWRlbnRpZmllci5sYW5ndWFnZXMg
PSBwYXJzZURlbGltaXRlZFN0cmluZyhsYW5ndWFnZSwgJywnKTsKKyAgICByZXR1cm4gdmFsdWUu
dG9GbG9hdCgpOworfQogCitTVkdHbHlwaElkZW50aWZpZXIgU1ZHR2x5cGhFbGVtZW50OjpidWls
ZEdlbmVyaWNHbHlwaElkZW50aWZpZXIoY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCkKK3sKKyAg
ICBTVkdHbHlwaElkZW50aWZpZXIgaWRlbnRpZmllcjsKKyAgICBpZGVudGlmaWVyLnBhdGhEYXRh
ID0gcGFyc2VQYXRoRGF0YShlbGVtZW50LT5nZXRBdHRyaWJ1dGUoZEF0dHIpKTsKKyAKICAgICAv
LyBTcGVjOiBUaGUgaG9yaXpvbnRhbCBhZHZhbmNlIGFmdGVyIHJlbmRlcmluZyB0aGUgZ2x5cGgg
aW4gaG9yaXpvbnRhbCBvcmllbnRhdGlvbi4KICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIG5v
dCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0
byB0aGUKICAgICAvLyB2YWx1ZSBvZiB0aGUgZm9udCdzIGhvcml6LWFkdi14IGF0dHJpYnV0ZS4g
R2x5cGggd2lkdGhzIGFyZSByZXF1aXJlZCB0byBiZSBub24tbmVnYXRpdmUsCiAgICAgLy8gZXZl
biBpZiB0aGUgZ2x5cGggaXMgdHlwaWNhbGx5IHJlbmRlcmVkIHJpZ2h0LXRvLWxlZnQsIGFzIGlu
IEhlYnJldyBhbmQgQXJhYmljIHNjcmlwdHMuCi0gICAgaWYgKGhhc0F0dHJpYnV0ZShob3Jpel9h
ZHZfeEF0dHIpKQotICAgICAgICBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCA9IGdldEF0
dHJpYnV0ZShob3Jpel9hZHZfeEF0dHIpLnRvRmxvYXQoKTsKLSAgICBlbHNlCi0gICAgICAgIGlk
ZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYID0gU1ZHR2x5cGhJZGVudGlmaWVyOjppbmhlcml0
ZWRWYWx1ZSgpOworICAgIGlkZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYID0gcGFyc2VTVkdH
bHlwaEF0dHJpYnV0ZShlbGVtZW50LCBob3Jpel9hZHZfeEF0dHIpOwogCiAgICAgLy8gU3BlYzog
VGhlIFgtY29vcmRpbmF0ZSBpbiB0aGUgZm9udCBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgb3Jp
Z2luIG9mIHRoZSBnbHlwaCB0byBiZQogICAgIC8vIHVzZWQgd2hlbiBkcmF3aW5nIHZlcnRpY2Fs
bHkgb3JpZW50ZWQgdGV4dC4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUg
ZWZmZWN0CiAgICAgLy8gaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUgdmFs
dWUgb2YgdGhlIGZvbnQncyB2ZXJ0LW9yaWdpbi14IGF0dHJpYnV0ZS4KLSAgICBpZiAoaGFzQXR0
cmlidXRlKHZlcnRfb3JpZ2luX3hBdHRyKSkKLSAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbE9y
aWdpblggPSBnZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feEF0dHIpLnRvRmxvYXQoKTsKLSAgICBl
bHNlCi0gICAgICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YID0gU1ZHR2x5cGhJZGVudGlm
aWVyOjppbmhlcml0ZWRWYWx1ZSgpOworICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YID0g
cGFyc2VTVkdHbHlwaEF0dHJpYnV0ZShlbGVtZW50LCB2ZXJ0X29yaWdpbl94QXR0cik7CiAKICAg
ICAvLyBTcGVjOiBUaGUgWS1jb29yZGluYXRlIGluIHRoZSBmb250IGNvb3JkaW5hdGUgc3lzdGVt
IG9mIHRoZSBvcmlnaW4gb2YgYSBnbHlwaCB0byBiZQogICAgIC8vIHVzZWQgd2hlbiBkcmF3aW5n
IHZlcnRpY2FsbHkgb3JpZW50ZWQgdGV4dC4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lm
aWVkLCB0aGUgZWZmZWN0CiAgICAgLy8gaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0
byB0aGUgdmFsdWUgb2YgdGhlIGZvbnQncyB2ZXJ0LW9yaWdpbi15IGF0dHJpYnV0ZS4KLSAgICBp
ZiAoaGFzQXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKSkKLSAgICAgICAgaWRlbnRpZmllci52
ZXJ0aWNhbE9yaWdpblkgPSBnZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpLnRvRmxvYXQo
KTsKLSAgICBlbHNlCi0gICAgICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5ZID0gU1ZHR2x5
cGhJZGVudGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpOworICAgIGlkZW50aWZpZXIudmVydGljYWxP
cmlnaW5ZID0gcGFyc2VTVkdHbHlwaEF0dHJpYnV0ZShlbGVtZW50LCB2ZXJ0X29yaWdpbl95QXR0
cik7CiAKICAgICAvLyBTcGVjOiBUaGUgdmVydGljYWwgYWR2YW5jZSBhZnRlciByZW5kZXJpbmcg
YSBnbHlwaCBpbiB2ZXJ0aWNhbCBvcmllbnRhdGlvbi4KICAgICAvLyBJZiB0aGUgYXR0cmlidXRl
IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJl
IHNldCB0byB0aGUKICAgICAvLyB2YWx1ZSBvZiB0aGUgZm9udCdzIHZlcnQtYWR2LXkgYXR0cmli
dXRlLgotICAgIGlmIChoYXNBdHRyaWJ1dGUodmVydF9hZHZfeUF0dHIpKQotICAgICAgICBpZGVu
dGlmaWVyLnZlcnRpY2FsQWR2YW5jZVkgPSBnZXRBdHRyaWJ1dGUodmVydF9hZHZfeUF0dHIpLnRv
RmxvYXQoKTsKLSAgICBlbHNlCi0gICAgICAgIGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSA9
IFNWR0dseXBoSWRlbnRpZmllcjo6aW5oZXJpdGVkVmFsdWUoKTsKKyAgICBpZGVudGlmaWVyLnZl
cnRpY2FsQWR2YW5jZVkgPSBwYXJzZVNWR0dseXBoQXR0cmlidXRlKGVsZW1lbnQsIHZlcnRfYWR2
X3lBdHRyKTsKKworICAgIHJldHVybiBpZGVudGlmaWVyOworfQorCitTdHJpbmcgU1ZHR2x5cGhF
bGVtZW50OjpxdWVyeVNWR0ZvbnRMYW5ndWFnZShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50KQor
eworICAgIFN0cmluZyBsYW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6
bGFuZ0F0dHIpOworICAgIGlmIChsYW5ndWFnZS5pc0VtcHR5KCkpIC8vIEZhbGxiYWNrIHRvIFNW
RyBsYW5nIGF0dHJpYnV0ZS4gTm90IHN1cmUgd2h5IGl0IGV4aXN0cyBhdCBhbGwuCisgICAgICAg
IGxhbmd1YWdlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGxhbmdBdHRyKTsKKworICAgIHJldHVy
biBsYW5ndWFnZTsKK30KKworU1ZHR2x5cGhJZGVudGlmaWVyIFNWR0dseXBoRWxlbWVudDo6YnVp
bGRHbHlwaElkZW50aWZpZXIoKSBjb25zdAoreworICAgIFNWR0dseXBoSWRlbnRpZmllciBpZGVu
dGlmaWVyKGJ1aWxkR2VuZXJpY0dseXBoSWRlbnRpZmllcih0aGlzKSk7CisgICAgaWRlbnRpZmll
ci5nbHlwaE5hbWUgPSBnZXRBdHRyaWJ1dGUoZ2x5cGhfbmFtZUF0dHIpOworICAgIGlkZW50aWZp
ZXIub3JpZW50YXRpb24gPSBwYXJzZU9yaWVudGF0aW9uKGdldEF0dHJpYnV0ZShvcmllbnRhdGlv
bkF0dHIpKTsKKyAgICBpZGVudGlmaWVyLmFyYWJpY0Zvcm0gPSBwYXJzZUFyYWJpY0Zvcm0oZ2V0
QXR0cmlidXRlKGFyYWJpY19mb3JtQXR0cikpOworCisgICAgU3RyaW5nIGxhbmd1YWdlID0gcXVl
cnlTVkdGb250TGFuZ3VhZ2UodGhpcyk7CisgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkpCisg
ICAgICAgIGlkZW50aWZpZXIubGFuZ3VhZ2VzID0gcGFyc2VEZWxpbWl0ZWRTdHJpbmcobGFuZ3Vh
Z2UsICcsJyk7CiAKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR0dseXBoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0dseXBoRWxl
bWVudC5oCShyZXZpc2lvbiAyOTY5NykKKysrIFdlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorICAgIGNsYXNzIEF0b21pY1N0cmluZzsKICAgICBzdHJ1Y3QgU1ZHRm9udERhdGE7CiAKICAg
ICAvLyBEZXNjcmliZSBhIFNWRyA8Z2x5cGg+IGVsZW1lbnQKQEAgLTEwNiw5ICsxMDcsMTQgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgU1ZHR2x5cGhJZGVu
dGlmaWVyIGJ1aWxkR2x5cGhJZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgICAgIHN0YXRpYyB2b2lk
IGluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVudGlmaWVyJiwgU1ZHRm9u
dERhdGEqKTsKLSAgICB9OwogCisgICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IFNW
R0ZvbnQKKyAgICAgICAgc3RhdGljIHZvaWQgaW5oZXJpdFVuc3BlY2lmaWVkQXR0cmlidXRlcyhT
VkdHbHlwaElkZW50aWZpZXImLCBjb25zdCBTVkdGb250RGF0YSopOworICAgICAgICBzdGF0aWMg
U3RyaW5nIHF1ZXJ5U1ZHRm9udExhbmd1YWdlKGNvbnN0IFNWR0VsZW1lbnQqKTsKKworICAgICAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gc2hhcmVkIGJldHdlZW4gU1ZHR2x5cGhFbGVtZW50ICYgU1ZH
TWlzc2luZ0dseXBoRWxlbWVudAorICAgICAgICBzdGF0aWMgU1ZHR2x5cGhJZGVudGlmaWVyIGJ1
aWxkR2VuZXJpY0dseXBoSWRlbnRpZmllcihjb25zdCBTVkdFbGVtZW50Kik7CisgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdNaXNzaW5nR2x5
cGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdNaXNzaW5nR2x5cGhF
bGVtZW50LmNwcAkocmV2aXNpb24gMjk2OTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdNaXNzaW5nR2x5
cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTIgKzIyLDggQEAKICNpZiBFTkFC
TEUoU1ZHX0ZPTlRTKQogI2luY2x1ZGUgIlNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCIKIAotI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNw
YWNlIFNWR05hbWVzOwotCiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50OjpTVkdNaXNzaW5nR2x5cGhF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAg
OiBTVkdTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykKIHsKSW5kZXg6IFdlYkNvcmUvc3ZnL3N2
Z2F0dHJzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL3N2Z2F0dHJzLmluCShyZXZpc2lv
biAyOTY5NykKKysrIFdlYkNvcmUvc3ZnL3N2Z2F0dHJzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDIsNiArMTAyLDcgQEAga2VybmluZwoga2V5UG9pbnRzCiBrZXlTcGxpbmVzCiBrZXlUaW1lcwor
bGFuZwogbGVuZ3RoQWRqdXN0CiBsZXR0ZXItc3BhY2luZwogbGlnaHRpbmctY29sb3IKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI5Njk3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNzEgQEAKKzIwMDgtMDEtMjEgIE5pa29sYXMgWmltbWVybWFubiAgPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBFcmljLgorCisgICAgICAg
IFVwZGF0ZSBsYXlvdXQgdGVzdCByZXN1bHRzIGFmdGVyIGFkZGluZyBtaXNzaW5nLWdseXBoIHN1
cHBvcnQuCisgICAgICAgIEFkZCBuZXcgbGF5b3V0IHRlc3Qgc3ZnL2N1c3RvbS9nbHlwaC1zZWxl
Y3Rpb24tbGFuZy1hdHRyaWJ1dGUuc3ZnLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9X
M0MtU1ZHLTEuMS9hbmltYXRlLWVsZW0tMjQtdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTAxLXQtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wMi10LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRz
LWVsZW0tMDUtdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0Mt
U1ZHLTEuMS9mb250cy1lbGVtLTA2LXQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZ2x5cGgtMDItdC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1nbHlwaC0wMy10LWV4cGVj
dGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9u
dHMtZ2x5cGgtMDMtdC1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9X
M0MtU1ZHLTEuMS9mb250cy1nbHlwaC0wMy10LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWdseXBoLTA0LXQtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMta2Vybi0wMS10LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL21hc2tp
bmctbWFzay0wMS1iLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1cz
Qy1TVkctMS4xL3BzZXJ2ZXJzLWdyYWQtMDgtYi1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL3BzZXJ2ZXJzLWdyYWQtMDgtYi1leHBlY3Rl
ZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9wc2VydmVycy1n
cmFkLTA4LWItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNW
Ry0xLjEvcmVuZGVyLWVsZW1zLTA2LXQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9zdmcvVzNDLVNWRy0xLjEvcmVuZGVyLWVsZW1zLTA3LXQtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvcmVuZGVyLWVsZW1zLTA4LXQtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvcmVuZGVy
LWdyb3Vwcy0wMS1iLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1cz
Qy1TVkctMS4xL3JlbmRlci1ncm91cHMtMDMtdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS90ZXh0LWFsdGdseXBoLTAxLWItZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvdGV4dC10ZXh0LTA0LXQt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvdGV4
dC10ZXh0LTA1LXQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzND
LVNWRy0xLjEvdGV4dC10ZXh0LTA2LXQtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxh
dGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDYtdC1leHBlY3RlZC5wbmc6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDYtdC1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9iYXRpay90ZXh0L3RleHRFZmZl
Y3QtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9iYXRpay90
ZXh0L3RleHRFZmZlY3QtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcv
YmF0aWsvdGV4dC90ZXh0RWZmZWN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvc3ZnL2JhdGlrL3RleHQvdGV4dEVmZmVjdDMtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3N2Zy9iYXRpay90ZXh0L3RleHRFZmZlY3QzLWV4cGVjdGVkLnBuZzoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2JhdGlrL3RleHQvdGV4dEVmZmVjdDMtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvYmF0aWsvdGV4dC90ZXh0UG9zaXRp
b24yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS9kb21p
bmFudC1iYXNlbGluZS1oYW5naW5nLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9zdmcvY3VzdG9tL2RvbWluYW50LWJhc2VsaW5lLWhhbmdpbmctZXhwZWN0ZWQucG5n
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvY3VzdG9tL2dseXBoLXNlbGVjdGlvbi1sYW5n
LWF0dHJpYnV0ZS1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWFjL3N2Zy9jdXN0b20vZ2x5cGgtc2VsZWN0aW9uLWxhbmctYXR0cmlidXRlLWV4cGVjdGVkLnBu
ZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vZ2x5cGgtc2VsZWN0
aW9uLWxhbmctYXR0cmlidXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWFjL3N2Zy9jdXN0b20vc2Nyb2xsaW5nLWVtYmVkZGVkLXN2Zy1maWxlLWltYWdlLXJlcGFp
bnQtcHJvYmxlbS1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9jdXN0
b20vdXNlLW9uLWctY29udGFpbmluZy1mb3JlaWduT2JqZWN0LWFuZC1pbWFnZS1leHBlY3RlZC5j
aGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS91c2Utb24tZy1jb250
YWluaW5nLWZvcmVpZ25PYmplY3QtYW5kLWltYWdlLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvc3ZnL2hpeGllL21peGVkLzAwOC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2hpeGllL21peGVkLzAwOC1leHBlY3RlZC5wbmc6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL3N2Zy9oaXhpZS9taXhlZC8wMDktZXhwZWN0ZWQuY2hlY2tzdW06
CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9oaXhpZS9taXhlZC8wMDktZXhwZWN0ZWQucG5n
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvaGl4aWUvdmlld2JveC9wcmVzZXJ2ZUFzcGVj
dFJhdGlvLzAwMS1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3Zn
L2hpeGllL3ZpZXdib3gvcHJlc2VydmVBc3BlY3RSYXRpby8wMDEtZXhwZWN0ZWQucG5nOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9zdmcvdGV4dC90ZXh0LWFsdGdseXBoLTAxLWItZXhwZWN0ZWQu
Y2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQtYWx0Z2x5cGgt
MDEtYi1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQt
YWx0Z2x5cGgtMDEtYi1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy90
ZXh0L3RleHQtdGV4dC0wNC10LWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9zdmcvdGV4dC90ZXh0LXRleHQtMDQtdC1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQtdGV4dC0wNC10LWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC10ZXh0LTA1LXQtZXhwZWN0ZWQuY2hlY2tzdW06
CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQtdGV4dC0wNS10LWV4cGVjdGVk
LnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC10ZXh0LTA1LXQtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvdGV4dC90ZXh0LXRleHQtMDYt
dC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4
dC10ZXh0LTA2LXQtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvdGV4
dC90ZXh0LXRleHQtMDYtdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3ZnL2N1c3RvbS9nbHlw
aC1zZWxlY3Rpb24tbGFuZy1hdHRyaWJ1dGUuc3ZnOiBBZGRlZC4KKwogMjAwOC0wMS0yMSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8emltbWVybWFubkBrZGUub3JnPgogCiAgICAgICAgIFJ1YmJlciBz
dGFtcGVkIGJ5IE9saXZlci4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vZ2x5cGgtc2Vs
ZWN0aW9uLWxhbmctYXR0cmlidXRlLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcv
Y3VzdG9tL2dseXBoLXNlbGVjdGlvbi1sYW5nLWF0dHJpYnV0ZS5zdmcJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2dseXBoLXNlbGVjdGlvbi1sYW5nLWF0dHJpYnV0ZS5z
dmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5j
b2Rpbmc9IlVURi04Ij8+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
d2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDQ4MCAzNjAiPgorPGRlZnM+
CisgICAgPGZvbnQgaG9yaXotYWR2LXg9IjUwMCI+CisgICAgICAgIDxmb250LWZhY2UgZm9udC1m
YW1pbHk9IlNWR0ZvbnQiIHVuaXRzLXBlci1lbT0iMTAwMCIgYXNjZW50PSI4MDAiIGRlc2NlbnQ9
IjIwMCIgYWxwaGFiZXRpYz0iMjAwIi8+CisgICAgICAgIDxtaXNzaW5nLWdseXBoIGhvcml6LWFk
di14PSI1MDAiIGQ9Ik0wIDBMNTAwIDBMNTAwIDEwMDBMMCAxMDAwTTUwIDUwTDUwIDk1MEw0NTAg
OTUwTDQ1MCA1MFoiLz4KKyAgICAgICAgPGdseXBoIHVuaWNvZGU9IiAiIGdseXBoLW5hbWU9InNw
YWNlIi8+CisgICAgICAgIDxnbHlwaCB1bmljb2RlPSJhIiBnbHlwaC1uYW1lPSJ1cHdhcmQtdHJp
YW5nbGUiIGxhbmc9ImVuIiBkPSJNMCAwTDUwMCAwTDI1MCA5MDBaIi8+CisgICAgICAgIDxnbHlw
aCB1bmljb2RlPSJhIiBnbHlwaC1uYW1lPSJzcXVhcmUiIGxhbmc9ImZyIiBkPSJNMCAyNTBMNTAw
IDI1MEw1MDAgNzUwTDAgNzUwWiIvPgorICAgIDwvZm9udD4KKzwvZGVmcz4KKworPGcgZm9udC1m
YW1pbHk9IlNWR0ZvbnQiIGZvbnQtc2l6ZT0iNTAiPgorICAgIDwhLS0gU2hvdWxkIHByb2R1Y2Ug
YW4gdXB3YXJkIHBvaW50aW5nIHRyaWFuZ2xlIC0tPgorICAgIDx0ZXh0IHg9IjUwIiB5PSI1MCIg
bGFuZz0iZnIiIHhtbDpsYW5nPSJlbiI+YTwvdGV4dD4KKworICAgIDwhLS0gU2hvdWxkIHByb2R1
Y2UgYSBzcXVhcmUgLS0+CisgICAgPHRleHQgeD0iNTAiIHk9IjEyMCIgbGFuZz0iZW4iIHhtbDps
YW5nPSJmciI+YTwvdGV4dD4KKworICAgIDwhLS0gU2hvdWxkIHByb2R1Y2UgYW4gdXB3YXJkIHBv
aW50aW5nIHRyaWFuZ2xlIC0tPgorICAgIDx0ZXh0IHg9IjUwIiB5PSIxOTAiIGxhbmc9ImVuIj5h
PC90ZXh0PgorCisgICAgPCEtLSBTaG91bGQgcHJvZHVjZSBhIHNxdWFyZSAtLT4KKyAgICA8dGV4
dCB4PSI1MCIgeT0iMjYwIiBsYW5nPSJmciI+YTwvdGV4dD4KKworICAgIDwhLS0gU2hvdWxkIHBy
b2R1Y2UgbWlzc2luZyBnbHlwaCAtLT4KKyAgICA8dGV4dCB4PSI1MCIgeT0iMzMwIiBsYW5nPSIi
IHhtbDpsYW5nPSIiPmE8L3RleHQ+Cis8L2c+CisKKzxyZWN0IHg9IjEiIHk9IjEiIHdpZHRoPSI0
NzgiIGhlaWdodD0iMzU4IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiLz4KKzwvc3ZnPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18593</attachid>
            <date>2008-01-21 14:30:26 -0800</date>
            <delta_ts>2008-01-21 14:44:14 -0800</delta_ts>
            <desc>Updated patch v3</desc>
            <filename>SVGFontsPatch.diff</filename>
            <type>text/plain</type>
            <size>91397</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTY5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTEzIEBACisyMDA4LTAxLTIxICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYy4gT2xkZXIgcGFydHMgcmV2
aWV3ZWQgYnkgRGFuLgorCisgICAgICAgIEZpeGVzOiBodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjg4MCAoU1ZHQ1NTRm9udEZhY2Ugc2hvdWxkIGRpZSwgaW5zdGVhZCBp
bnRlZ3JhdGUgd2l0aGluIHRoZSBGb250Q2FjaGUuKQorICAgICAgICBGaXhlczogaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3ODQgKEluLWRvY3VtZW50IGZvbnRzIHdv
cmsgb25seSBhcyB0aGUgZmlyc3QgY2hpbGQgdG8gZm9udC1mYWNlLXNyYykKKworICAgICAgICBQ
cm9wZXIgaW50ZWdyYXRpb24gb2YgU1ZHIEZvbnRzIHdpdGhpbiB0aGUgZXhpc3RpbmcgY3VzdG9t
IGZvbnQgY29uY2VwdCwgcmVtb3ZpbmcgdGhlIG5lZWQgZm9yIGEgY3VzdG9tIFNWR0NTU0ZvbnRG
YWNlLgorICAgICAgICBJbnRlZ3JhdGUgd2l0aGluIHRoZSBDU1NGb250RmFjZVNvdXJjZSBsb2dp
YyBmb3IgY2FjaGluZyBzdXBwb3J0LCBhcyB3ZWxsIGFzIHRoZSBmcmFtZXdvcmsgZm9yIGV4dGVy
bmFsIFNWRyBGb250cy4KKworICAgICAgICBQcm9wZXIgaGFuZGxpbmcgb2YgbWlzc2luZyBnbHlw
aHMsIHVzaW5nIDxtaXNzaW5nLWdseXBoPiBlbGVtZW50LiBJZiB0aGF0IGlzIG5vdCBzcGVjaWZp
ZWQgaW4gYSBmb250LCBmYWxsYmFjayB0byBub24tU1ZHIGZvbnQgcmVuZGVyaW5nLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOgorICAg
ICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9u
dEZhY2VTb3VyY2U6OnN2Z0ZvbnRGYWNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
b250RmFjZVNvdXJjZTo6c2V0U1ZHRm9udEZhY2VFbGVtZW50KToKKyAgICAgICAgKiBjc3MvQ1NT
Rm9udEZhY2VTcmNWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1
ZTo6bV9pc0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU3JjVmFsdWU6On5D
U1NGb250RmFjZVNyY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU3JjVmFs
dWU6OnN2Z0ZvbnRGYWNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNy
Y1ZhbHVlOjpzZXRTVkdGb250RmFjZUVsZW1lbnQpOgorICAgICAgICAqIGNzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFj
ZVJ1bGUpOgorICAgICAgICAqIGNzcy9TVkdDU1NGb250RmFjZS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogY3NzL1NWR0NTU0ZvbnRGYWNlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojphc2NlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZGVzY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojps
aW5lU3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp4SGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmZvbnRTZWxlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmlzU1ZHRm9udCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6U2ltcGxlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6YXNjZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpkZXNjZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpsaW5lU3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6bGluZUdhcCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
eEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6aXNTVkdGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzdmdGb250RGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250UGxhdGZv
cm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNpemUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHVGV4dDo6cmVsYXRpdmVCQm94KToKKyAgICAgICAgKiBzdmcvU1ZHRm9udC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb252ZXJ0RW1Vbml0VG9QaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpp
c0NvbXBhdGlibGVHbHlwaCk6CisgICAgICAgIChXZWJDb3JlOjpzdmdGb250QW5kRm9udEZhY2VF
bGVtZW50Rm9yRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFJ1bldhbGtlcjo6
U1ZHVGV4dFJ1bldhbGtlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuV2Fsa2VyOjp3
YWxrKToKKyAgICAgICAgKFdlYkNvcmU6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpmbG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6ZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KToKKyAgICAg
ICAgKFdlYkNvcmU6OmRyYXdUZXh0VXNpbmdTVkdGb250Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6ZHJhd1RleHRNaXNzaW5nR2x5cGhDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udCk6CisgICAgICAgICogc3ZnL1NWR0ZvbnREYXRhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RGF0YTo6U1ZHRm9udERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6On5TVkdGb250RGF0YSk6CisgICAgICAgICog
c3ZnL1NWR0ZvbnREYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6
OnN2Z0ZvbnRGYWNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RGF0YTo6aG9y
aXpvbnRhbE9yaWdpblgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6Omhvcml6b250
YWxPcmlnaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpob3Jpem9udGFsQWR2
YW5jZVgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OnZlcnRpY2FsT3JpZ2luWCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RGF0YTo6dmVydGljYWxPcmlnaW5ZKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjp2ZXJ0aWNhbEFkdmFuY2VZKToKKyAgICAgICAgKiBz
dmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNl
RWxlbWVudDo6dW5pdHNQZXJFbSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1l
bnQ6OnhIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50Ojpob3Jp
em9udGFsT3JpZ2luWCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6Omhv
cml6b250YWxPcmlnaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6
aG9yaXpvbnRhbEFkdmFuY2VYKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVu
dDo6dmVydGljYWxPcmlnaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVu
dDo6dmVydGljYWxPcmlnaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVu
dDo6dmVydGljYWxBZHZhbmNlWSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1l
bnQ6OmFzY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OmRlc2Nl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50Ojpmb250RmFtaWx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6YXNzb2NpYXRlZEZvbnRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRG
YWNlKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udEZhY2VFbGVtZW50Lmg6CisgICAgICAgICogc3Zn
L1NWR0dseXBoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1lbnQ6
OmluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VT
VkdHbHlwaEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1lbnQ6OmJ1
aWxkR2VuZXJpY0dseXBoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVs
ZW1lbnQ6OmJ1aWxkR2x5cGhJZGVudGlmaWVyKToKKyAgICAgICAgKiBzdmcvU1ZHR2x5cGhFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR01pc3NpbmdHbHlwaEVsZW1lbnQuY3BwOgorICAgICAg
ICAqIHN2Zy9zdmdhdHRycy5pbjoKKwogMjAwOC0wMS0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KSW5kZXg6IFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQkocmV2aXNpb24gMjk2OTgpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjMzLDcgKzE2MzMsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUv
Y3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgXAogCVdlYkNvcmUvY3NzL1NW
R0NTU1BhcnNlci5jcHAgXAogCVdlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIFwK
LQlXZWJDb3JlL2Nzcy9TVkdDU1NGb250RmFjZS5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NW
R1JlbmRlclN0eWxlLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3R5bGVEZWZz
LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgXApAQCAt
MTY5NCw2ICsxNjkzLDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N2Zy9TVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdG
aXRUb1ZpZXdCb3guY3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdGb250LmNwcCBcCisJV2ViQ29yZS9z
dmcvU1ZHRm9udERhdGEuY3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAgXAog
CVdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAgXAogCVdlYkNvcmUvc3ZnL1NWR0Zv
bnRGYWNlRm9ybWF0RWxlbWVudC5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyOTY5OCkKKysrIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNjYsNyArMTM2Niw2IEBAIGNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICBjc3MvU1ZHQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmNwcCBcCiAgICAgICAgIGNzcy9TVkdDU1NQYXJzZXIuY3BwIFwKICAg
ICAgICAgY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIFwKLSAgICAgICAgY3NzL1NWR0NTU0Zv
bnRGYWNlLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9TVkdSZW5kZXJTdHlsZS5jcHAgXAogICAg
ICAgICByZW5kZXJpbmcvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBcCiAgICAgICAgIGJpbmRpbmdz
L2pzL0pTU1ZHTGF6eUV2ZW50TGlzdGVuZXIuY3BwIFwKQEAgLTE0MjcsNiArMTQyNiw3IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICBzdmcvU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBcCiAgICAgICAgIHN2Zy9TVkdGaXRUb1ZpZXdC
b3guY3BwIFwKICAgICAgICAgc3ZnL1NWR0ZvbnQuY3BwIFwKKyAgICAgICAgc3ZnL1NWR0ZvbnRE
YXRhLmNwcCBcCiAgICAgICAgIHN2Zy9TVkdGb250RWxlbWVudC5jcHAgXAogICAgICAgICBzdmcv
U1ZHRm9udEZhY2VFbGVtZW50LmNwcCBcCiAgICAgICAgIHN2Zy9TVkdGb250RmFjZUZvcm1hdEVs
ZW1lbnQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2
aXNpb24gMjk2OTgpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC00ODk0LDEwICs0ODk0LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFNWR0NTU0ZvbnRGYWNlLmNwcCIN
Ci0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNz
c1xTVkdDU1NQYXJzZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTg0MDUsNiArODQw
MSwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzdmdcU1ZHRm9udERhdGEuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXFNWR0ZvbnREYXRhLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHRm9udEVsZW1l
bnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyOTY5OCkKKysrIFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODI5LDYgKzI4
MjksOCBAQAogCQlCMjIzNjIyRjBDM0FGMDcxMDAwOENBOUIgLyogRE9NU1ZHVGV4dFBhdGhFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyMjM2MjJDMEMzQUYwNzEwMDA4Q0E5QiAvKiBET01TVkdUZXh0UGF0aEVsZW1lbnRJbnRl
cm5hbC5oICovOyB9OwogCQlCMjM1NDBGMjBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
MzU0MEYwMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwICovOyB9OwogCQlC
MjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjM1NDBGMTBEMDA3ODJFMDAyMzgy
RkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQjIzN0M4QTcwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMzdD
OEE1MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5jcHAgKi87IH07CisJCUIyMzdDOEE4
MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIzN0M4QTYwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0Zv
bnREYXRhLmggKi87IH07CiAJCUIyNDA1NTY1MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVt
ZW50SW5zdGFuY2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjI0MDU1NjMwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0
YW5jZUludGVybmFsLmggKi87IH07CiAJCUIyNDA1NTY2MEI1QkU2NDAwMDJBMjhDMCAvKiBET01T
VkdFbGVtZW50SW5zdGFuY2VMaXN0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNDA1NTY0MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdF
bGVtZW50SW5zdGFuY2VMaXN0SW50ZXJuYWwuaCAqLzsgfTsKIAkJQjI1NTk5MkMwRDAwRDhCQTAw
QkI4MjVDIC8qIENnU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjU1OTg5MDBEMDBEOEI4MDBCQjgyNUMgLyogQ2dTdXBwb3J0LmNwcCAq
LzsgfTsKQEAgLTMxNTUsOCArMzE1Nyw2IEBACiAJCUIyQ0I5MjY0MEI1QkRBMDIwMDlCQUE3OCAv
KiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQjkyNjAwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0Vs
ZW1lbnRJbnN0YW5jZUxpc3QubW0gKi87IH07CiAJCUIyQ0NFQzQ3MEM2Q0E5RjEwMDZBNTQyNCAv
KiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNDRUM0NTBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuY3BwICovOyB9OwogCQlCMkNDRUM0ODBDNkNBOUYxMDA2QTU0
MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0NFQzQ2MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oICovOyB9OwotCQlCMkQxOUE0ODBDRUY5REMxMDAwRTAz
M0IgLyogU1ZHQ1NTRm9udEZhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJEMTlBNDYwQ0VGOURDMTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNl
LmNwcCAqLzsgfTsKLQkJQjJEMTlBNDkwQ0VGOURDMTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQxOUE0
NzBDRUY5REMxMDAwRTAzM0IgLyogU1ZHQ1NTRm9udEZhY2UuaCAqLzsgfTsKIAkJQjJEM0ZDOEEw
QzIyMTJDQjAwQ0YzNjE4IC8qIEpTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQzRkM4OTBDMjIxMkNCMDBD
RjM2MTggLyogSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQjJFMjdDOUYw
QjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxv
YXRQb2ludDNELmNwcCAqLzsgfTsKIAkJQjJFMjdDQTAwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0
UG9pbnQzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJFMjdDOUUwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oICovOyB9OwpAQCAtNjg5
Myw2ICs2ODkzLDggQEAKIAkJQjIyMzYyMkMwQzNBRjA3MTAwMDhDQTlCIC8qIERPTVNWR1RleHRQ
YXRoRWxlbWVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
T01TVkdUZXh0UGF0aEVsZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMjM1NDBGMDBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdUcnVuY2F0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyog
U3RyaW5nVHJ1bmNhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJp
bmdUcnVuY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjIzN0M4QTUwRDM0
NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdGb250RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUIyMzdDOEE2MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjI0MDU1NjMwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0
YW5jZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdF
bGVtZW50SW5zdGFuY2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MjQwNTU2NDBCNUJFNjQwMDAyQTI4QzAgLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdEludGVy
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdFbGVtZW50SW5z
dGFuY2VMaXN0SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk4
OTAwRDAwRDhCODAwQkI4MjVDIC8qIENnU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ2dTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTcyMjMsOCArNzIyNSw2IEBACiAJCUIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3OCAvKiBE
T01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQ0NFQzQ1MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMkNDRUM0NjBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1ZpZXdwb3J0
Q29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyRDE5QTQ2MENFRjlE
QzEwMDBFMDMzQiAvKiBTVkdDU1NGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU1ZHQ1NTRm9udEZhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMkQxOUE0NzBDRUY5REMxMDAwRTAzM0IgLyogU1ZHQ1NTRm9udEZhY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0NTU0ZvbnRGYWNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRDNGQzg5MEMyMjEyQ0IwMENGMzYxOCAvKiBKU1NWR1Ry
YW5zZm9ybUxpc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9h
dFBvaW50M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9pbnQz
RC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA3NDIsNiArMTA3NDIsOCBAQAog
CQkJCUIyMjI3ODdDMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdGaXRUb1ZpZXdCb3guaCAqLywKIAkJ
CQlCMjIyNzg3RDBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94LmlkbCAqLywKIAkJ
CQlCMjYyQjgwMzBEMUYzMkQwMDAxNThGMDkgLyogU1ZHRm9udC5jcHAgKi8sCisJCQkJQjIzN0M4
QTUwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmNwcCAqLywKKwkJCQlCMjM3QzhBNjBE
MzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuaCAqLywKIAkJCQlCMkExRjJBMTBDRUYwQUJG
MDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwICovLAogCQkJCUIyQTFGMkEyMENFRjBBQkYw
MDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovLAogCQkJCUIyQTFGMkEzMENFRjBBQkYwMDQ0
MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwgKi8sCkBAIC0xMTk1Miw4ICsxMTk1NCw2IEBACiAJ
CQkJOTNDQTRDQTIwOURGOTNGQTAwREY4Njc3IC8qIHN2Zy5jc3MgKi8sCiAJCQkJQjIyMjdCMDAw
RDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8s
CiAJCQkJQjIyMjdCMDEwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNlci5jcHAgKi8sCi0J
CQkJQjJEMTlBNDYwQ0VGOURDMTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmNwcCAqLywKLQkJ
CQlCMkQxOUE0NzBDRUY5REMxMDAwRTAzM0IgLyogU1ZHQ1NTRm9udEZhY2UuaCAqLywKIAkJCQlC
MjIyN0IwMjBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTUHJvcGVydHlOYW1lcy5pbiAqLywKIAkJ
CQlCMjIyN0IwMzBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgKi8s
CiAJCQkJQjIyMjdCMDQwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1ZhbHVlS2V5d29yZHMuaW4g
Ki8sCkBAIC0xNDE3MCw3ICsxNDE3MCw2IEBACiAJCQkJQjI3QjI4M0QwQ0VGMEMzNjAwRDM5RDU0
IC8qIERPTVNWR0dseXBoRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjdC
MjgzRTBDRUYwQzM2MDBEMzlENTQgLyogRE9NU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjI3QjI4NDAwQ0VGMEMzNjAwRDM5RDU0IC8qIERPTVNWR01pc3NpbmdH
bHlwaEVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjJEMTlBNDkwQ0VGOURD
MTAwMEUwMzNCIC8qIFNWR0NTU0ZvbnRGYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EzNzkx
NTBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNB
Mzc5M0YwRDE2NDdFMDAwQjc5M0Q2IC8qIEpTTG9jYXRpb24ubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTE0MTk2LDYgKzE0MTk1LDcgQEAKIAkJCQkzNzFGNTFBMTBEMjYyRkEwMDBFQ0Uw
RDUgLyogQ1NTU2VnbWVudGVkRm9udEZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MUY1M0U5
MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQUJGRTdFMTMwRDMyRkFGNjAwNjZGNEQyIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCMjM3QzhBODBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0RUVGRkM5MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1
ZGlvQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOUIzRTRFMEQzQzFFODQwMEI0
QTkyQiAvKiBTdHJpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAgLTE0MjM2LDcg
KzE0MjM2LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0
ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3Qg
PSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZv
ciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhj
b2RlIDIuNCI7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9u
cyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMTU3NzAsNyArMTU3NjksNiBAQAogCQkJCUIyN0IyODM5
MENFRjBDMzYwMEQzOUQ1NCAvKiBET01TVkdGb250RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUIyN0IyODNDMENFRjBDMzYwMEQzOUQ1NCAvKiBET01TVkdHbHlwaEVsZW1lbnQubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCMjdCMjgzRjBDRUYwQzM2MDBEMzlENTQgLyogRE9NU1ZHTWlzc2lu
Z0dseXBoRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAotCQkJCUIyRDE5QTQ4MENFRjlEQzEwMDBF
MDMzQiAvKiBTVkdDU1NGb250RmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjYyQjgwNDBE
MUYzMkQwMDAxNThGMDkgLyogU1ZHRm9udC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdGQTYy
MDBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDN0ZBNjJFMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTE1Nzg3LDYgKzE1Nzg1LDcgQEAKIAkJCQkzNzFGNTFBMjBEMjYyRkEwMDBF
Q0UwRDUgLyogQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcx
RjUzRUEwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUFCRkU3RTEyMEQzMkZBRjYwMDY2RjREMiAvKiBNZWRpYUNvbnRyb2xFbGVt
ZW50cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjM3QzhBNzBEMzQ0RDExMDAxM0Y3MDcgLyog
U1ZHRm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRFRUZGQzgwRDM0NTUwQzAwNDY5
QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKSW5kZXg6IFdlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDI5Njk4KQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxNCBAQAogI2luY2x1ZGUg
IkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZv
bnRDYWNoZS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKKyNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgorCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJTVkdG
b250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIgCisjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04OCwyMSArOTMsNDEgQEAgU2ltcGxlRm9udERh
dGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIGlmICghbV9mb250KQotICAgICAgICAvLyBXZSdyZSBsb2NhbC4g
IEp1c3QgcmV0dXJuIGEgU2ltcGxlRm9udERhdGEgZnJvbSB0aGUgbm9ybWFsIGNhY2hlLgotICAg
ICAgICByZXR1cm4gRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShGb250Q2FjaGU6OmdldENh
Y2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBtX3N0cmluZykpOwotICAgIAor
I2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgaWYgKCFtX2ZvbnQgJiYgIW1fc3ZnRm9udEZhY2VF
bGVtZW50KSB7CisjZWxzZQorICAgIGlmICghbV9mb250KSB7CisjZW5kaWYKKyAgICAgICAgRm9u
dFBsYXRmb3JtRGF0YSogZGF0YSA9IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShmb250RGVzY3JpcHRpb24sIG1fc3RyaW5nKTsKKyAgICAgICAgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhID0gRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShkYXRhKTsKKworICAgICAgICAv
LyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4gYSBTaW1wbGVGb250RGF0YSBmcm9tIHRoZSBub3Jt
YWwgY2FjaGUuCisgICAgICAgIHJldHVybiBmb250RGF0YTsKKyAgICB9CisKICAgICAvLyBTZWUg
aWYgd2UgaGF2ZSBhIG1hcHBpbmcgaW4gb3VyIEZvbnREYXRhIGNhY2hlLgotICAgIFNpbXBsZUZv
bnREYXRhKiBjYWNoZWREYXRhID0gbV9mb250RGF0YVRhYmxlLmdldChmb250RGVzY3JpcHRpb24u
Y29tcHV0ZWRQaXhlbFNpemUoKSk7Ci0gICAgaWYgKGNhY2hlZERhdGEpCisgICAgaWYgKFNpbXBs
ZUZvbnREYXRhKiBjYWNoZWREYXRhID0gbV9mb250RGF0YVRhYmxlLmdldChmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRQaXhlbFNpemUoKSkpCiAgICAgICAgIHJldHVybiBjYWNoZWREYXRhOwotICAg
IAorCisgICAgT3duUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YTsKKwogICAgIC8vIElmIHdl
IGFyZSBzdGlsbCBsb2FkaW5nLCB0aGVuIHdlIGxldCB0aGUgc3lzdGVtIHBpY2sgYSBmb250Lgog
ICAgIGlmIChpc0xvYWRlZCgpKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBuZXcgRm9udFBsYXRmb3Jt
RGF0YSBmcm9tIG91ciBDR0ZvbnRSZWYsIHBvaW50IHNpemUgYW5kIEFUU0ZvbnRSZWYuCi0gICAg
ICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21Gb250RGF0YSgpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIGNhY2hlZERhdGEgPSBuZXcgU2ltcGxlRm9udERhdGEobV9mb250LT5w
bGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNp
emUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSwgdHJ1ZSwgZmFsc2UpOworI2lm
IEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgIGlmIChtX3N2Z0ZvbnRGYWNlRWxlbWVudCkKKyAg
ICAgICAgICAgIGZvbnREYXRhLnNldChuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0
YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSwgZmFsc2UsIG5ldyBTVkdGb250RGF0YShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQo
KSkpKTsKKyNlbmRpZgorCisgICAgICAgIGlmICghZm9udERhdGEpIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX2ZvbnQpOworCisgICAgICAgICAgICAvLyBDcmVhdGUgbmV3IEZvbnRQbGF0Zm9ybURh
dGEgZnJvbSBvdXIgQ0dGb250UmVmLCBwb2ludCBzaXplIGFuZCBBVFNGb250UmVmLgorICAgICAg
ICAgICAgaWYgKCFtX2ZvbnQtPmVuc3VyZUN1c3RvbUZvbnREYXRhKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGZvbnREYXRhLnNldChuZXcgU2ltcGxlRm9udERh
dGEobV9mb250LT5wbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRpb24uY29t
cHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSwgdHJ1ZSwg
ZmFsc2UpKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEtpY2sgb2ZmIHRo
ZSBsb2FkIG5vdy4KICAgICAgICAgbV9mb250LT5iZWdpbkxvYWRJZk5lZWRlZChmb250U2VsZWN0
b3ItPmRvY0xvYWRlcigpKTsKQEAgLTExMCwxMiArMTM1LDExIEBAIFNpbXBsZUZvbnREYXRhKiBD
U1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogdGVtcERh
dGEgPSBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9u
LCBtX3N0cmluZyk7CiAgICAgICAgIGlmICghdGVtcERhdGEpCiAgICAgICAgICAgICB0ZW1wRGF0
YSA9IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24p
OwotICAgICAgICBjYWNoZWREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCp0ZW1wRGF0YSwgdHJ1
ZSwgdHJ1ZSk7CisgICAgICAgIGZvbnREYXRhLnNldChuZXcgU2ltcGxlRm9udERhdGEoKnRlbXBE
YXRhLCB0cnVlLCB0cnVlKSk7CiAgICAgfQogCi0gICAgbV9mb250RGF0YVRhYmxlLnNldChmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgY2FjaGVkRGF0YSk7Ci0KLSAgICByZXR1
cm4gY2FjaGVkRGF0YTsKKyAgICBtX2ZvbnREYXRhVGFibGUuc2V0KGZvbnREZXNjcmlwdGlvbi5j
b21wdXRlZFBpeGVsU2l6ZSgpLCBmb250RGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIGZvbnREYXRh
LnJlbGVhc2UoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCShyZXZpc2lv
biAyOTY5OCkKKysrIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NTYsMTEgKzU3LDIwIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHBydW5lVGFibGUoKTsKIAor
I2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBzdmdGb250RmFj
ZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKTsgfQor
ICAgIHZvaWQgc2V0U1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCogZWxlbWVu
dCkgeyBtX3N2Z0ZvbnRGYWNlRWxlbWVudCA9IGVsZW1lbnQ7IH0KKyNlbmRpZgorCiBwcml2YXRl
OgogICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0LWlu
IGZvbnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkRm9udCogbV9mb250OyAvLyBGb3IgcmVt
b3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hlZCByZXNvdXJjZS4KICAgICBDU1NGb250
RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQgZmFjZS4KICAgICBIYXNoTWFwPGludCwg
U2ltcGxlRm9udERhdGEqPiBtX2ZvbnREYXRhVGFibGU7IC8vIEEgY2FjaGUgb2YgRm9udERhdGFz
IGZvciB2YXJpb3VzIHBpeGVsIHNpemVzLgorCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBS
ZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50PiBtX3N2Z0ZvbnRGYWNlRWxlbWVudDsKKyNlbmRpZgog
fTsKIAogfQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAkocmV2aXNpb24gMjk2OTgp
CisrKyBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDIwICsyOCwxNiBAQAogCiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVudDsKLQogY2xhc3MgQ1NTRm9u
dEZhY2VTcmNWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZSB7CiBwdWJsaWM6CiAgICAgQ1NTRm9udEZh
Y2VTcmNWYWx1ZShjb25zdCBTdHJpbmcmIHJlc291cmNlLCBib29sIGxvY2FsKQogICAgIDptX3Jl
c291cmNlKHJlc291cmNlKSwgbV9pc0xvY2FsKGxvY2FsKQotI2lmIEVOQUJMRShTVkdfRk9OVFMp
Ci0gICAgLCBtX2ZvbnRGYWNlRWxlbWVudCgwKQotI2VuZGlmICAgIAogICAgIHt9Ci0gICAgdmly
dHVhbCB+Q1NTRm9udEZhY2VTcmNWYWx1ZSgpIHt9OworICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNl
U3JjVmFsdWUoKSB7fQogCiAgICAgY29uc3QgU3RyaW5nJiByZXNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzb3VyY2U7IH0KICAgICBjb25zdCBTdHJpbmcmIGZvcm1hdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9ybWF0OyB9CkBAIC01Miw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3Vw
cG9ydGVkRm9ybWF0KCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIFNWR0Zv
bnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9mb250
RmFjZUVsZW1lbnQ7IH0KLSAgICB2b2lkIHNldFNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFj
ZUVsZW1lbnQqIGVsZW1lbnQpIHsgbV9mb250RmFjZUVsZW1lbnQgPSBlbGVtZW50OyB9CisgICAg
U1ZHRm9udEZhY2VFbGVtZW50KiBzdmdGb250RmFjZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKTsgfQorICAgIHZvaWQgc2V0U1ZHRm9udEZhY2VFbGVt
ZW50KFNWR0ZvbnRGYWNlRWxlbWVudCogZWxlbWVudCkgeyBtX3N2Z0ZvbnRGYWNlRWxlbWVudCA9
IGVsZW1lbnQ7IH0KICNlbmRpZgogCiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwpAQCAtNjIsOCArNTgsOSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3Jlc291cmNlOwogICAg
IFN0cmluZyBtX2Zvcm1hdDsKICAgICBib29sIG1faXNMb2NhbDsKKwogI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCi0gICAgU1ZHRm9udEZhY2VFbGVtZW50KiBtX2ZvbnRGYWNlRWxlbWVudDsKKyAgICBS
ZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50PiBtX3N2Z0ZvbnRGYWNlRWxlbWVudDsKICNlbmRpZgog
fTsKIApJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCShyZXZpc2lvbiAyOTY5OCkKKysrIFdl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEwICs0
OSwxMCBAQAogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1l
bnQuaCIKIAorLy8gUG9ydHMgd2hpY2ggZG9uJ3QgdXNlIFNWRywgZG9uJ3QgZ2VuZXJhdGUgU1ZH
TmFtZXMuaAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHQ1NTRm9udEZhY2UuaCIKLSNp
bmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2Vu
ZGlmCiAKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZh
Y2VSdWxlKGNvCiAgICAgYm9vbCBmb3VuZExvY2FsID0gZmFsc2U7CiAKICNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQotICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50ID0gMDsK
KyAgICBib29sIGZvdW5kSW5Eb2N1bWVudFNWR0ZvbnQgPSBmYWxzZTsKICNlbmRpZgogCiAgICAg
Zm9yIChpID0gMDsgaSA8IHNyY0xlbmd0aDsgaSsrKSB7CkBAIC0xNTksMzMgKzE1OSwyNiBAQCB2
b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvCiAgICAgICAgICAgICBTdHJp
bmcgZmFtaWx5ID0gaXRlbS0+cmVzb3VyY2UoKTsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0g
ICAgICAgICAgICAvLyBTVkcgRm9udHMgc3VwcG9ydCAoaW50ZXJuYWwgZm9udHMsIGxpdmluZyB3
aXRoaW4gdGhlIGRvY3VtZW50KQotICAgICAgICAgICAgc3ZnRm9udEZhY2VFbGVtZW50ID0gaXRl
bS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7Ci0gICAgICAgICAgICBpZiAoc3ZnRm9udEZhY2VFbGVt
ZW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElmIGZvbnRGYWNlIGlzIG5vdCAwLCBp
dCBtZWFucyB0aGF0IGl0IGlzIGEgQ1NTRm9udEZhY2UgcmF0aGVyIHRoYW4gYSBTVkdDU1NGb250
RmFjZQotICAgICAgICAgICAgICAgIC8vIGFuZCB0aGVyZWZvcmUgZG9lcyBub3Qgc3VwcG9ydCBT
VkcgZm9udC1mYWNlIGVsZW1lbnRzLCBzbyB3ZSBqdXN0IHNraXAgdGhpcyBpdGVtLgotICAgICAg
ICAgICAgICAgIGlmIChmb250RmFjZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgZm91bmRMb2NhbCA9IHRydWU7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBmb3VuZEluRG9jdW1lbnRTVkdGb250ID0gaXRlbS0+c3ZnRm9udEZhY2VFbGVtZW50KCkg
IT0gMDsKICNlbmRpZgogCiAgICAgICAgICAgICAvLyBUZXN0IHRoZSB2YWxpZGl0eSBvZiB0aGUg
bG9jYWwgZm9udCBub3cuICBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhpcyBmb250IGlmIGl0
IGRvZXMgbm90IGV4aXN0CiAgICAgICAgICAgICAvLyBvbiB0aGUgc3lzdGVtLiAgSWYgaXQgKmRv
ZXMqIGV4aXN0IG9uIHRoZSBzeXN0ZW0sIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBsb29rIGFueSBm
dXJ0aGVyLgotICAgICAgICAgICAgaWYgKEZvbnRDYWNoZTo6Zm9udEV4aXN0cyhmb250RGVzY3Jp
cHRpb24sIGZhbWlseSkgJiYgIWZvdW5kTG9jYWwpIHsKKyAgICAgICAgICAgIGlmIChGb250Q2Fj
aGU6OmZvbnRFeGlzdHMoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpCisjaWYgRU5BQkxFKFNWR19G
T05UUykgICAgCisgICAgICAgICAgICAgICAgfHwgZm91bmRJbkRvY3VtZW50U1ZHRm9udAorI2Vu
ZGlmCisgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICBzb3VyY2UgPSBuZXcgQ1NT
Rm9udEZhY2VTb3VyY2UoZmFtaWx5KTsKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgICAgICAg
ICAgICAgIHNvdXJjZS0+c2V0U1ZHRm9udEZhY2VFbGVtZW50KGl0ZW0tPnN2Z0ZvbnRGYWNlRWxl
bWVudCgpKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIGZvdW5kTG9jYWwgPSB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmb250RmFjZSkgewotI2lmIEVO
QUJMRShTVkdfRk9OVFMpCi0gICAgICAgICAgICBpZiAoc3ZnRm9udEZhY2VFbGVtZW50KQotICAg
ICAgICAgICAgICAgIGZvbnRGYWNlID0gbmV3IFNWR0NTU0ZvbnRGYWNlKHN2Z0ZvbnRGYWNlRWxl
bWVudCk7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgICAgICBmb250RmFj
ZSA9IG5ldyBDU1NGb250RmFjZSgpOwotICAgICAgICB9CisgICAgICAgIGlmICghZm9udEZhY2Up
CisgICAgICAgICAgICBmb250RmFjZSA9IG5ldyBDU1NGb250RmFjZSgpOwogCiAgICAgICAgIGlm
IChzb3VyY2UpCiAgICAgICAgICAgICBmb250RmFjZS0+YWRkU291cmNlKHNvdXJjZSk7CkBAIC0y
NDAsNyArMjMzLDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjbwog
I2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAgIC8vIFNWRyBhbGxvd3Mgc2V2ZXJhbCA8Zm9u
dD4gZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBmb250LWZhbWlseSwgZGlmZmVyaW5nIG9ubHkKICAg
ICAgICAgLy8gaW4gaWUuIGZvbnQtdmFyaWFudC4gQmUgc3VyZSB0byBwaWNrIHVwIHRoZSByaWdo
dCBvbmUgLSBpbiBnZXRGb250RGF0YSBiZWxvdy4KLSAgICAgICAgaWYgKHN2Z0ZvbnRGYWNlRWxl
bWVudCAmJiBmb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkpCisgICAgICAgIGlmIChmb3VuZElu
RG9jdW1lbnRTVkdGb250ICYmIGZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSkKICAgICAgICAg
ICAgIGZhbWlseU5hbWUgKz0gIi13ZWJraXQtc3ZnLXNtYWxsLWNhcHMiOwogI2VuZGlmCiAgICAg
ICAgIFN0cmluZyBoYXNoID0gaGFzaEZvckZvbnQoZmFtaWx5TmFtZS5sb3dlcigpLCBmb250RGVz
Y3JpcHRpb24uYm9sZCgpLCBmb250RGVzY3JpcHRpb24uaXRhbGljKCkpOwpJbmRleDogV2ViQ29y
ZS9jc3MvU1ZHQ1NTRm9udEZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1NWR0NT
U0ZvbnRGYWNlLmNwcAkocmV2aXNpb24gMjk2OTgpCisrKyBXZWJDb3JlL2Nzcy9TVkdDU1NGb250
RmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSNpbmNsdWRl
ICJTVkdDU1NGb250RmFjZS5oIgotCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5j
bHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TVkdDU1NGb250RmFjZTo6U1ZHQ1NTRm9udEZhY2Uo
U1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZSkKLSAgICA6IENTU0ZvbnRGYWNlKCkKLSAgICAs
IG1fZm9udEZhY2VFbGVtZW50KGZvbnRGYWNlKQotewotICAgIEFTU0VSVChmb250RmFjZSk7Ci19
Ci0KLVNWR0NTU0ZvbnRGYWNlOjp+U1ZHQ1NTRm9udEZhY2UoKQotewotfQotCi1ib29sIFNWR0NT
U0ZvbnRGYWNlOjppc1ZhbGlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAK
LXZvaWQgU1ZHQ1NTRm9udEZhY2U6OmFkZFNvdXJjZShDU1NGb250RmFjZVNvdXJjZSopCi17Ci0g
ICAgLy8gbm8tb3AKLX0KLQotU2ltcGxlRm9udERhdGEqIFNWR0NTU0ZvbnRGYWNlOjpnZXRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0
aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBUT0RPOiBFdmVudHVhbGx5IHdlJ2xsIHN3aXRjaCB0
byBDU1NGb250RmFjZVNvdXJjZSBoZXJlLCB3aGljaCBoYW5kbGVzIHRoZSBjYWNoaW5nIGZvciB1
cy4KLSAgICAvLyAoV2hlbiBpbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgU1ZHIEZv
bnRzIHRoaXMgd2UnbGwgZGVjaWRlIGFib3V0IHRoYXQuKQotICAgIGlmICghbV9mb250RGF0YSkK
LSAgICAgICAgbV9mb250RGF0YS5zZXQobV9mb250RmFjZUVsZW1lbnQtPmNyZWF0ZUZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbikpOwotCi0gICAgcmV0dXJuIG1fZm9udERhdGEuZ2V0KCk7Ci19Ci0K
LX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2Nzcy9TVkdDU1NGb250RmFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL1NWR0NTU0ZvbnRGYWNlLmgJKHJldmlzaW9uIDI5Njk4KQorKysg
V2ViQ29yZS9jc3MvU1ZHQ1NTRm9udEZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNWR0NTU0ZvbnRGYWNlX2gKLSNkZWZpbmUg
U1ZHQ1NTRm9udEZhY2VfaAotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSNpbmNsdWRlICJDU1NG
b250RmFjZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7Ci0KLWNsYXNzIFNWR0NTU0ZvbnRGYWNlIDog
cHVibGljIENTU0ZvbnRGYWNlIHsKLXB1YmxpYzoKLSAgICBTVkdDU1NGb250RmFjZShTVkdGb250
RmFjZUVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5TVkdDU1NGb250RmFjZSgpOwotCi0gICAgdmly
dHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkU291cmNlKENT
U0ZvbnRGYWNlU291cmNlKik7Ci0KLSAgICB2aXJ0dWFsIFNpbXBsZUZvbnREYXRhKiBnZXRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50
PiBtX2ZvbnRGYWNlRWxlbWVudDsKLSAgICBPd25QdHI8U2ltcGxlRm9udERhdGE+IG1fZm9udERh
dGE7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHX0ZPTlRTKQotI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHJldmlzaW9uIDI5Njk4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA3LDIyICs1
MDcsMjIgQEAgaW50IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29ucwogCiBpbnQg
Rm9udDo6YXNjZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+YXNjZW50
KHNpemUoKSk7CisgICAgcmV0dXJuIHByaW1hcnlGb250KCktPmFzY2VudCgpOwogfQogCiBpbnQg
Rm9udDo6ZGVzY2VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHByaW1hcnlGb250KCktPmRlc2Nl
bnQoc2l6ZSgpKTsKKyAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+ZGVzY2VudCgpOwogfQogCiBp
bnQgRm9udDo6bGluZVNwYWNpbmcoKSBjb25zdAogewotICAgIHJldHVybiBwcmltYXJ5Rm9udCgp
LT5saW5lU3BhY2luZyhzaXplKCkpOworICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT5saW5lU3Bh
Y2luZygpOwogfQogCiBmbG9hdCBGb250Ojp4SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
cHJpbWFyeUZvbnQoKS0+eEhlaWdodChzaXplKCkpOworICAgIHJldHVybiBwcmltYXJ5Rm9udCgp
LT54SGVpZ2h0KCk7CiB9CiAKIHVuc2lnbmVkIEZvbnQ6OnVuaXRzUGVyRW0oKSBjb25zdApAQCAt
Nzg5LDQgKzc4OSw5IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQK
ICAgICByZXR1cm4gb2Zmc2V0OwogfQogCitGb250U2VsZWN0b3IqIEZvbnQ6OmZvbnRTZWxlY3Rv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udExpc3QgPyBtX2ZvbnRMaXN0LT5mb250U2Vs
ZWN0b3IoKSA6IDA7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZp
c2lvbiAyOTY5OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTEsNiArMjUxLDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
ICgoKGMgJiB+MHhGRikgPT0gMCAmJiBnUm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbY10pKTsg
CiAgICAgfQorCisgICAgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdDsKICNlbmRp
ZgogICAgIHN0YXRpYyBib29sIHRyZWF0QXNTcGFjZShVQ2hhciBjKSB7IHJldHVybiBjID09ICcg
JyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gMHgwMEEwOyB9CiAgICAgc3RhdGlj
IGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8
IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8IGMgPT0gMHgyMDBlIHx8IGMgPT0gMHgyMDBmIHx8
IGMgPj0gMHgyMDJhICYmIGMgPD0gMHgyMDJlOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RGF0YS5oCShyZXZpc2lvbiAyOTY5OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zQ2hhcmFjdGVycyhj
b25zdCBVQ2hhciosIGludCBsZW5ndGgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNT
VkdGb250KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0N1c3RvbUZvbnQoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgaXNTZWdtZW50ZWQoKSBjb25zdCA9IDA7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcAkocmV2aXNpb24gMjk2OTgpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNiArNTUsMTQgQEAgYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6Y29udGFp
bnNDaGFyYWN0ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmIEVOQUJMRShTVkdfRk9OVFMp
Citib29sIFNlZ21lbnRlZEZvbnREYXRhOjppc1NWR0ZvbnQoKSBjb25zdAoreworICAgIC8vIFdl
IGRvbid0IHN1cHBvcnQgc2VnbWVudGVkIHN2ZyBmb250cyBhdCB0aGUgbW9tZW50LgorICAgIHJl
dHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiBib29sIFNlZ21lbnRlZEZvbnREYXRhOjppc0N1c3Rv
bUZvbnQoKSBjb25zdAogewogICAgIC8vIEFsbCBzZWdtZW50ZWQgZm9udHMgYXJlIGN1c3RvbSBm
b250cy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnRE
YXRhLmgJKHJldmlzaW9uIDI5Njk4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdt
ZW50ZWRGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMSBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNDaGFyYWN0ZXJzKGNv
bnN0IFVDaGFyKiwgaW50IGxlbmd0aCkgY29uc3Q7CisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQor
ICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgdmlydHVh
bCBib29sIGlzQ3VzdG9tRm9udCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmco
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWdtZW50ZWQoKSBjb25zdDsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAy
OTY5OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw0NiArMzAsNDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LQogI2lmIEVOQUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiU1ZHRm9udERhdGEuaCIKICNpbmNs
dWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKICNlbmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotLy8gRG9uJ3QgaW1wbGVtZW50IGNvbnN0cnVjdG9y
IGluIHRoZSBoZWFkZXIgdG8gc2F2ZSBhIFNWR0ZvbnRGYWNlRWxlbWVudC5oIGluY2x1ZGUuCi1T
VkdGb250RGF0YTo6U1ZHRm9udERhdGEoU1ZHRm9udEZhY2VFbGVtZW50KiBlbGVtZW50KQotICAg
IDogZm9udEZhY2VFbGVtZW50KGVsZW1lbnQpCi0gICAgLCBob3Jpem9udGFsT3JpZ2luWCgwLjBm
KQotICAgICwgaG9yaXpvbnRhbE9yaWdpblkoMC4wZikKLSAgICAsIGhvcml6b250YWxBZHZhbmNl
WCgwLjBmKQotICAgICwgdmVydGljYWxPcmlnaW5YKDAuMGYpCi0gICAgLCB2ZXJ0aWNhbE9yaWdp
blkoMC4wZikKLSAgICAsIHZlcnRpY2FsQWR2YW5jZVkoMC4wZikKLXsKLX0KKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogCi1mbG9hdCBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4
ZWwoZmxvYXQgZm9udFNpemUsIGZsb2F0IHVuaXRzUGVyRW0sIGZsb2F0IHZhbHVlKQotewotICAg
IEFTU0VSVCh1bml0c1BlckVtID4gMC4wZik7Ci0gICAgcmV0dXJuIHZhbHVlICogZm9udFNpemUg
LyB1bml0c1BlckVtOwotfQotI2VuZGlmCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNpbXBsZUZv
bnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmLCBib29sIGN1
c3RvbUZvbnQsIGJvb2wgbG9hZGluZykKK1NpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBmLCBib29sIGN1c3RvbUZvbnQsIGJvb2wgbG9hZGluZywg
U1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhKQogICAgIDogbV9mb250KGYpCiAgICAgLCBtX3RyZWF0
QXNGaXhlZFBpdGNoKGZhbHNlKQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgLCBtX3N2Z0Zv
bnREYXRhKDApCi0jZW5kaWYKKyAgICAsIG1fc3ZnRm9udERhdGEoc3ZnRm9udERhdGEpCiAgICAg
LCBtX2lzQ3VzdG9tRm9udChjdXN0b21Gb250KQogICAgICwgbV9pc0xvYWRpbmcobG9hZGluZykK
ICAgICAsIG1fc21hbGxDYXBzRm9udERhdGEoMCkKLXsgICAgCit7CisjaWYgRU5BQkxFKFNWR19G
T05UUykgJiYgIVBMQVRGT1JNKFFUKQorICAgIGlmIChTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0Zv
bnRGYWNlRWxlbWVudCA9IHN2Z0ZvbnREYXRhID8gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxl
bWVudCgpIDogMCkgeworICAgICAgIG1fdW5pdHNQZXJFbSA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+
dW5pdHNQZXJFbSgpOworCisgICAgICAgZmxvYXQgc2NhbGUgPSBmLnNpemUoKTsKKyAgICAgICBp
ZiAobV91bml0c1BlckVtKQorICAgICAgICAgICBzY2FsZSAvPSBtX3VuaXRzUGVyRW07CisKKyAg
ICAgICAgbV9hc2NlbnQgPSBzdmdGb250RmFjZUVsZW1lbnQtPmFzY2VudCgpICogc2NhbGU7Cisg
ICAgICAgIG1fZGVzY2VudCA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+ZGVzY2VudCgpICogc2NhbGU7
CisgICAgICAgIG1feEhlaWdodCA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+eEhlaWdodCgpICogc2Nh
bGU7CisKKyAgICAgICAgbV9zcGFjZUdseXBoID0gMDsKKyAgICAgICAgbV9zcGFjZVdpZHRoID0g
MDsKKyAgICAgICAgbV9hZGp1c3RlZFNwYWNlV2lkdGggPSAwOworICAgICAgICBkZXRlcm1pbmVQ
aXRjaCgpOworICAgICAgICBtX21pc3NpbmdHbHlwaERhdGEuZm9udERhdGEgPSB0aGlzOworICAg
ICAgICBtX21pc3NpbmdHbHlwaERhdGEuZ2x5cGggPSAwOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmCisKICAgICBwbGF0Zm9ybUluaXQoKTsKLSAgICAKKwogICAgIEdseXBoUGFnZSog
Z2x5cGhQYWdlWmVybyA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodGhpcywgMCkt
PnBhZ2UoKTsKICAgICBpZiAoIWdseXBoUGFnZVplcm8pIHsKICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gZ2V0IGdseXBoIHBhZ2UgemVyby4iKTsKQEAgLTExNiw1NiArMTE3LDYgQEAgU2lt
cGxlRm9udERhdGE6On5TaW1wbGVGb250RGF0YSgpCiAgICAgLy8gaXQgd2lsbCBiZSBkZWxldGVk
IHRoZW4sIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4KIH0KIAotaW50IFNp
bXBsZUZvbnREYXRhOjphc2NlbnQoZmxvYXQgZm9udFNpemUpIGNvbnN0Ci17Ci0jaWYgRU5BQkxF
KFNWR19GT05UUykKLSAgICBpZiAobV9zdmdGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIFNWR0Zv
bnREYXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250U2l6ZSwgbV91bml0c1BlckVtLCBtX2Fz
Y2VudCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBtX2FzY2VudDsKLX0KLQotaW50IFNpbXBsZUZv
bnREYXRhOjpkZXNjZW50KGZsb2F0IGZvbnRTaXplKSBjb25zdAotewotI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCi0gICAgaWYgKG1fc3ZnRm9udERhdGEpCi0gICAgICAgIHJldHVybiBTVkdGb250RGF0
YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZm9udFNpemUsIG1fdW5pdHNQZXJFbSwgbV9kZXNjZW50
KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIG1fZGVzY2VudDsKLX0KLQotaW50IFNpbXBsZUZvbnRE
YXRhOjpsaW5lU3BhY2luZyhmbG9hdCBmb250U2l6ZSkgY29uc3QKLXsKLSNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQotICAgIGlmIChtX3N2Z0ZvbnREYXRhKQotICAgICAgICByZXR1cm4gKGludCkgY2Vp
bGYoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnRTaXplLCBtX3VuaXRzUGVy
RW0sIG1fbGluZVNwYWNpbmcpKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIG1fbGluZVNwYWNpbmc7
Ci19Ci0KLWludCBTaW1wbGVGb250RGF0YTo6bGluZUdhcChmbG9hdCBmb250U2l6ZSkgY29uc3QK
LXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChtX3N2Z0ZvbnREYXRhKQotICAgICAg
ICByZXR1cm4gU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnRTaXplLCBtX3Vu
aXRzUGVyRW0sIG1fbGluZUdhcCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBtX2xpbmVHYXA7Ci19
Ci0KLWZsb2F0IFNpbXBsZUZvbnREYXRhOjp4SGVpZ2h0KGZsb2F0IGZvbnRTaXplKSBjb25zdAot
ewotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKG1fc3ZnRm9udERhdGEpCi0gICAgICAg
IHJldHVybiBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZm9udFNpemUsIG1fdW5p
dHNQZXJFbSwgbV94SGVpZ2h0KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIG1feEhlaWdodDsKLX0K
LQogZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CiB7CiAgICAgZmxvYXQgd2lkdGggPSBtX2dseXBoVG9XaWR0aE1hcC53aWR0aEZvckdseXBoKGds
eXBoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJ
KHJldmlzaW9uIDI5Njk4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiR2x5cGhQ
YWdlVHJlZU5vZGUuaCIKICNpbmNsdWRlICJHbHlwaFdpZHRoTWFwLmgiCiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorCiAjaWYgUExBVEZPUk0oTUFDKQogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQVRT
VVN0eWxlKiBBVFNVU3R5bGU7CiAjZW5kaWYKQEAgLTQxLDM2ICs0MiwxNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBGb250UGxhdGZvcm1EYXRh
OwogY2xhc3MgU2hhcmVkQnVmZmVyOworY2xhc3MgU1ZHRm9udERhdGE7CiBjbGFzcyBXaWR0aE1h
cDsKIAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi1jbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7Ci0K
LXN0cnVjdCBTVkdGb250RGF0YSB7Ci0gICAgU1ZHRm9udERhdGEoU1ZHRm9udEZhY2VFbGVtZW50
Kik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydEVt
VW5pdFRvUGl4ZWwoZmxvYXQgZm9udFNpemUsIGZsb2F0IHVuaXRzUGVyRW0sIGZsb2F0IHZhbHVl
KTsKLQotICAgIC8vIEhvbGQgcG9pbnRlciB0byBvdXIgY3JlYXRvcgotICAgIFJlZlB0cjxTVkdG
b250RmFjZUVsZW1lbnQ+IGZvbnRGYWNlRWxlbWVudDsKLQotICAgIC8vIFNWRyBGb250IHNwZWNp
ZmljIG1ldHJpY3MKLSAgICBmbG9hdCBob3Jpem9udGFsT3JpZ2luWDsKLSAgICBmbG9hdCBob3Jp
em9udGFsT3JpZ2luWTsKLSAgICBmbG9hdCBob3Jpem9udGFsQWR2YW5jZVg7Ci0KLSAgICBmbG9h
dCB2ZXJ0aWNhbE9yaWdpblg7Ci0gICAgZmxvYXQgdmVydGljYWxPcmlnaW5ZOwotICAgIGZsb2F0
IHZlcnRpY2FsQWR2YW5jZVk7Ci19OwotI2VuZGlmCi0KIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0
Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxlUGl0Y2ggfTsKIAogY2xhc3MgU2ltcGxlRm9udERhdGEg
OiBwdWJsaWMgRm9udERhdGEgewogcHVibGljOgotICAgIFNpbXBsZUZvbnREYXRhKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmLCBib29sIGN1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBsb2FkaW5nID0g
ZmFsc2UpOworICAgIFNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29s
IGN1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBsb2FkaW5nID0gZmFsc2UsIFNWR0ZvbnREYXRhKiBk
YXRhID0gMCk7CiAgICAgdmlydHVhbCB+U2ltcGxlRm9udERhdGEoKTsKIAogcHVibGljOgpAQCAt
NzgsMTEgKzU3LDExIEBAIHB1YmxpYzoKICAgICBTaW1wbGVGb250RGF0YSogc21hbGxDYXBzRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0OwogCiAg
ICAgLy8gdmVydGljYWwgbWV0cmljcwotICAgIGludCBhc2NlbnQoZmxvYXQgZm9udFNpemUpIGNv
bnN0OwotICAgIGludCBkZXNjZW50KGZsb2F0IGZvbnRTaXplKSBjb25zdDsKLSAgICBpbnQgbGlu
ZVNwYWNpbmcoZmxvYXQgZm9udFNpemUpIGNvbnN0OwotICAgIGludCBsaW5lR2FwKGZsb2F0IGZv
bnRTaXplKSBjb25zdDsKLSAgICBmbG9hdCB4SGVpZ2h0KGZsb2F0IGZvbnRTaXplKSBjb25zdDsK
KyAgICBpbnQgYXNjZW50KCkgY29uc3QgeyByZXR1cm4gbV9hc2NlbnQ7IH0KKyAgICBpbnQgZGVz
Y2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VudDsgfQorICAgIGludCBsaW5lU3BhY2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fbGluZVNwYWNpbmc7IH0KKyAgICBpbnQgbGluZUdhcCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZUdhcDsgfQorICAgIGZsb2F0IHhIZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX3hIZWlnaHQ7IH0KICAgICB1bnNpZ25lZCB1bml0c1BlckVtKCkgY29uc3QgeyByZXR1cm4g
bV91bml0c1BlckVtOyB9CiAKICAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsK
QEAgLTk0LDE3ICs3MywxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRlcm1pbmVQaXRjaCgpOwog
ICAgIFBpdGNoIHBpdGNoKCkgY29uc3QgeyByZXR1cm4gbV90cmVhdEFzRml4ZWRQaXRjaCA/IEZp
eGVkUGl0Y2ggOiBWYXJpYWJsZVBpdGNoOyB9CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAg
IGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RGF0YTsgfQotICAgIFNW
R0ZvbnREYXRhKiBzdmdGb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRm9udERhdGEuZ2V0
KCk7IH0KLSNlbmRpZgotCisgICAgdmlydHVhbCBib29sIGlzU1ZHRm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3ZnRm9udERhdGE7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21Gb250KCkgY29u
c3QgeyByZXR1cm4gbV9pc0N1c3RvbUZvbnQ7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9pc0xvYWRpbmc7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTZWdt
ZW50ZWQoKSBjb25zdDsKIAogICAgIGNvbnN0IEdseXBoRGF0YSYgbWlzc2luZ0dseXBoRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWlzc2luZ0dseXBoRGF0YTsgfQogCisjaWYgRU5BQkxFKFNWR19G
T05UUykKKyAgICBTVkdGb250RGF0YSogc3ZnRm9udERhdGEoKSBjb25zdCB7IHJldHVybiBtX3N2
Z0ZvbnREYXRhLmdldCgpOyB9CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBOU0Zv
bnQqIGdldE5TRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5mb250KCk7IH0KICAgICB2b2lk
IGNoZWNrU2hhcGVzQXJhYmljKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiAyOTY5OCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAKICAgICBGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKIAorICAg
IEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CiAg
ICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGludCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsKIAogICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CkBA
IC01Nyw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpbml0KCk7CiAKICAgICBi
b29sIGlzRml4ZWRQaXRjaCgpOworICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Zv
bnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCk7IH0KIAogICAgIHZvaWQgc2V0Rm9udChjYWly
b190KikgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQ
bGF0Zm9ybURhdGFHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCShyZXZpc2lvbiAyOTY5OCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTcsNiArMTE3LDEzIEBAIGZyZWVQYXR0ZXJuOgogICAgIEZjUGF0dGVybkRl
c3Ryb3kocGF0dGVybik7CiB9CiAKK0ZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYykKKyAgICA6IG1fcGF0dGVybigwKQorICAgICwgbV9mb250RGVzY3Jp
cHRpb24oKQorICAgICwgbV9zY2FsZWRGb250KDApCit7Cit9CisKIEZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlLCBpbnQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIGl0YWxpYykKICAgICA6IG1fcGF0dGVybigwKQogICAgICwgbV9mb250
RGVzY3JpcHRpb24oKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udFBs
YXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gMjk2OTgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYg
KzQ3LDE2IEBAIHN0cnVjdCBGb250UGxhdGZvcm1EYXRhIHsKICAgICA6IG1fc3ludGhldGljQm9s
ZChmYWxzZSksIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSksIG1fY2dGb250KDApLCBtX2F0c3VG
b250SUQoMCksIG1fc2l6ZSgwKSwgbV9mb250KChOU0ZvbnQqKS0xKQogICAgIHt9CiAKKyAgICBG
b250UGxhdGZvcm1EYXRhKGZsb2F0IHMsIGJvb2wgYiwgYm9vbCBvKQorICAgICAgICA6IG1fc3lu
dGhldGljQm9sZChiKQorICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvKQorICAgICAgICAs
IG1fY2dGb250KDApCisgICAgICAgICwgbV9hdHN1Rm9udElEKDApCisgICAgICAgICwgbV9zaXpl
KHMpCisgICAgICAgICwgbV9mb250KDApCisgICAgeworICAgIH0KKwogICAgIEZvbnRQbGF0Zm9y
bURhdGEoTlNGb250KiBmID0gMCwgYm9vbCBiID0gZmFsc2UsIGJvb2wgbyA9IGZhbHNlKTsKICAg
ICAKICAgICBGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBmLCBBVFNVRm9udElEIGZvbnRJRCwg
ZmxvYXQgcywgYm9vbCBiICwgYm9vbCBvKQpAQCAtNTgsNiArNjgsOCBAQCBzdHJ1Y3QgRm9udFBs
YXRmb3JtRGF0YSB7CiAgICAgCiAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKIAorICAgIGZsb2F0
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKwogICAgIGJvb2wgbV9zeW50aGV0aWNC
b2xkOwogICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlOwogICAgIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24g
Mjk2OTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgIHt9CiAKICAg
ICBGb250UGxhdGZvcm1EYXRhKEhGT05ULCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2Js
aXF1ZSwgYm9vbCB1c2VHREkpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIG9ibGlxdWUpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoQ0dGb250UmVmLCBm
bG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7CiAgICAgfkZvbnRQbGF0Zm9ybURh
dGEoKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3Jt
RGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YVdpbi5jcHAJKHJldmlzaW9uIDI5Njk4KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5Nyw2ICsxOTcsMTYgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShI
Rk9OVAogICAgIFJlbGVhc2VEQygwLCBoZGMpOwogfQogCitGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQorICAgIDog
bV9mb250KDApCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fY2dGb250KDApCisgICAgLCBt
X3N5bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQor
ICAgICwgbV91c2VHREkoZmFsc2UpCit7Cit9CisKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoQ0dGb250UmVmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxp
cXVlKQogICAgIDogbV9mb250KDApCiAgICAgLCBtX3NpemUoc2l6ZSkKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAyOTY5OCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAg
RmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6OnJlbGF0aXZlQkJveChibwogI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCiAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAgICAg
ICAgIGlmIChmb250LnByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKSB7Ci0gICAgICAgICAgICBm
bG9hdCBzY2FsZSA9IFNWR0ZvbnREYXRhOjpjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250LnNpemUo
KSwgZm9udC51bml0c1BlckVtKCksIDEuMGYpOworICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBm
b250LnVuaXRzUGVyRW0oKSA+IDAgPyBmb250LnNpemUoKSAvIGZvbnQudW5pdHNQZXJFbSgpIDog
MC4wZjsKIAogICAgICAgICAgICAgaWYgKHNjYWxlICE9IDAuMGYpCiAgICAgICAgICAgICAgICAg
c3Ryb2tlV2lkdGggLz0gc2NhbGU7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGb250LmNwcAkocmV2aXNpb24gMjk2OTgpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdGb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMiArMjMsMTUg
QEAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogI2luY2x1ZGUgIkZvbnQuaCIKIAorI2luY2x1ZGUg
IkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVk
ZSAiU1ZHRm9udERhdGEuaCIKICNpbmNsdWRlICJTVkdHbHlwaEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdGb250RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdQYWludFNlcnZl
ci5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAKQEAgLTM2LDYgKzM5LDE0IEBAIHVzaW5nIG5h
bWVzcGFjZSBXVEY6OlVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGlu
bGluZSBmbG9hdCBjb252ZXJ0RW1Vbml0VG9QaXhlbChmbG9hdCBmb250U2l6ZSwgZmxvYXQgdW5p
dHNQZXJFbSwgZmxvYXQgdmFsdWUpCit7CisgICAgaWYgKHVuaXRzUGVyRW0gPT0gMC4wZikKKyAg
ICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICByZXR1cm4gdmFsdWUgKiBmb250U2l6ZSAvIHVuaXRz
UGVyRW07Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoY29u
c3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHJldHVybiBzdHlsZS0+d3JpdGluZ01v
ZGUoKSA9PSBXTV9UQlJMIHx8IHN0eWxlLT53cml0aW5nTW9kZSgpID09IFdNX1RCOyAKQEAgLTE1
OSw3ICsxNzAsMTIgQEAgc3RhdGljIGlubGluZSBib29sIGlzQ29tcGF0aWJsZUdseXBoKGNvbgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayB3aGV0ZXIgbGFuZ3VhZ2VzIGFy
ZSBjb21wYXRpYmxlCi0gICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkgJiYgIWlkZW50aWZpZXIu
bGFuZ3VhZ2VzLmlzRW1wdHkoKSkgeworICAgIGlmICghaWRlbnRpZmllci5sYW5ndWFnZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIC8vIFRoaXMgZ2x5cGggZXhpc3RzIG9ubHkgaW4gY2VydGFpbiBs
YW5ndWFnZXMsIGlmIHdlJ3JlIG5vdCBzcGVjaWZ5aW5nIGEKKyAgICAgICAgLy8gbGFuZ3VhZ2Ug
b24gdGhlIHJlZmVyZW5jaW5nIGVsZW1lbnQgd2UncmUgdW5hYmxlIHRvIHVzZSB0aGlzIGdseXBo
LgorICAgICAgICBpZiAobGFuZ3VhZ2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCiAgICAgICAgIC8vIFNwbGl0IHN1YmNvZGUgZnJvbSBsYW5ndWFnZSwgaWYgZXhpc3Rh
bnQuCiAgICAgICAgIFN0cmluZyBsYW5ndWFnZVByZWZpeDsKIApAQCAtMTg4LDE1ICsyMDQsMTQg
QEAgc3RhdGljIGlubGluZSBib29sIGlzQ29tcGF0aWJsZUdseXBoKGNvbgogICAgIHJldHVybiBp
c0NvbXBhdGlibGVBcmFiaWNGb3JtKGlkZW50aWZpZXIsIGNoYXJzLCBzdGFydFBvc2l0aW9uLCBl
bmRQb3NpdGlvbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRG
b250RmFjZUVsZW1lbnRGb3JGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEs
IFNWR0ZvbnRGYWNlRWxlbWVudComIGZvbnRGYWNlLCBTVkdGb250RWxlbWVudComIGZvbnQpCitz
dGF0aWMgaW5saW5lIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50
Rm9yRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBTVkdGb250RmFjZUVs
ZW1lbnQqJiBmb250RmFjZSwgU1ZHRm9udEVsZW1lbnQqJiBmb250KQogewotICAgIEFTU0VSVCgh
Zm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKKyAgICBBU1NFUlQoZm9udERhdGEtPmlzQ3VzdG9t
Rm9udCgpKTsKICAgICBBU1NFUlQoZm9udERhdGEtPmlzU1ZHRm9udCgpKTsKIAotICAgIFNWR0Zv
bnREYXRhKiBzdmdGb250RGF0YSA9IGZvbnREYXRhLT5zdmdGb250RGF0YSgpOwotICAgIEFTU0VS
VChzdmdGb250RGF0YSk7CisgICAgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250RGF0YS0+c3ZnRm9udERhdGEoKSk7CiAK
LSAgICBmb250RmFjZSA9IHN2Z0ZvbnREYXRhLT5mb250RmFjZUVsZW1lbnQuZ2V0KCk7CisgICAg
Zm9udEZhY2UgPSBzdmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJU
KGZvbnRGYWNlKTsKIAogICAgIGZvbnQgPSBmb250RmFjZS0+YXNzb2NpYXRlZEZvbnRFbGVtZW50
KCk7CkBAIC0yMDgsOSArMjIzLDkgQEAgc3RhdGljIGlubGluZSBTVkdGb250RGF0YSogc3ZnRm9u
dEFuZEZvbgogdGVtcGxhdGU8dHlwZW5hbWUgU1ZHVGV4dFJ1bkRhdGE+CiBzdHJ1Y3QgU1ZHVGV4
dFJ1bldhbGtlciB7CiAgICAgdHlwZWRlZiBib29sICgqU1ZHVGV4dFJ1bldhbGtlckNhbGxiYWNr
KShjb25zdCBTVkdHbHlwaElkZW50aWZpZXImLCBTVkdUZXh0UnVuRGF0YSYpOwotICAgIHR5cGVk
ZWYgdm9pZCAoKlNWR1RleHRSdW5XYWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjaykoY29uc3QgVGV4
dFJ1biYsIHVuc2lnbmVkIGludCwgU1ZHVGV4dFJ1bkRhdGEmKTsKKyAgICB0eXBlZGVmIHZvaWQg
KCpTVkdUZXh0UnVuV2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2spKGNvbnN0IFRleHRSdW4mLCBT
VkdUZXh0UnVuRGF0YSYpOwogCi0gICAgU1ZHVGV4dFJ1bldhbGtlcihTVkdGb250RGF0YSogZm9u
dERhdGEsIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwgU1ZHVGV4dFJ1bkRhdGEmIGRhdGEs
CisgICAgU1ZHVGV4dFJ1bldhbGtlcihjb25zdCBTVkdGb250RGF0YSogZm9udERhdGEsIFNWR0Zv
bnRFbGVtZW50KiBmb250RWxlbWVudCwgU1ZHVGV4dFJ1bkRhdGEmIGRhdGEsCiAgICAgICAgICAg
ICAgICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyQ2FsbGJhY2sgY2FsbGJhY2ssIFNWR1RleHRSdW5X
YWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjayBtaXNzaW5nR2x5cGhDYWxsYmFjaykKICAgICAgICAg
OiBtX2ZvbnREYXRhKGZvbnREYXRhKQogICAgICAgICAsIG1fZm9udEVsZW1lbnQoZm9udEVsZW1l
bnQpCkBAIC0yNjcsOCArMjgyLDE4IEBAIHN0cnVjdCBTVkdUZXh0UnVuV2Fsa2VyIHsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFmb3VuZEdseXBoKSB7Ci0gICAgICAgICAgICAg
ICAgKCptX3dhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrKShydW4sIGksIG1fd2Fsa2VyRGF0YSk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKFNWR01pc3Np
bmdHbHlwaEVsZW1lbnQqIGVsZW1lbnQgPSBtX2ZvbnRFbGVtZW50LT5maXJzdE1pc3NpbmdHbHlw
aEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyA8bWlzc2luZy1nbHlwaD4gZWxl
bWVudCBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBTVkdHbHlwaEVs
ZW1lbnQ6OmJ1aWxkR2VuZXJpY0dseXBoSWRlbnRpZmllcihlbGVtZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgU1ZHR2x5cGhFbGVtZW50Ojppbmhlcml0VW5zcGVjaWZpZWRBdHRyaWJ1dGVzKGlk
ZW50aWZpZXIsIG1fZm9udERhdGEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHN5c3RlbSBmb250IGZhbGxiYWNrCisgICAgICAg
ICAgICAgICAgICAgIFRleHRSdW4gc3ViUnVuKHJ1bik7CisgICAgICAgICAgICAgICAgICAgIHN1
YlJ1bi5zZXRUZXh0KHN1YlJ1bi5kYXRhKGkpLCAxKTsKKworICAgICAgICAgICAgICAgICAgICAo
Km1fd2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2spKHN1YlJ1biwgbV93YWxrZXJEYXRhKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAoISgqbV93YWxrZXJDYWxsYmFjaykoaWRlbnRpZmllciwg
bV93YWxrZXJEYXRhKSkKQEAgLTI3OSw3ICszMDQsNyBAQCBzdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtl
ciB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFNWR0ZvbnREYXRhKiBtX2ZvbnREYXRhOworICAg
IGNvbnN0IFNWR0ZvbnREYXRhKiBtX2ZvbnREYXRhOwogICAgIFNWR0ZvbnRFbGVtZW50KiBtX2Zv
bnRFbGVtZW50OwogICAgIFNWR1RleHRSdW5EYXRhJiBtX3dhbGtlckRhdGE7CiAgICAgU1ZHVGV4
dFJ1bldhbGtlckNhbGxiYWNrIG1fd2Fsa2VyQ2FsbGJhY2s7CkBAIC0yOTIsMzYgKzMxNywyNyBA
QCBzdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0CiAgICAgaW50IGZyb207
CiAgICAgaW50IHRvOwogCisgICAgZmxvYXQgc2NhbGU7CiAgICAgZmxvYXQgbGVuZ3RoOwotICAg
IGZsb2F0IGZvbnRTaXplOwotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW07CiAgICAgY29uc3QgRm9u
dCogZm9udDsKIH07CiAKIGJvb2wgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udENhbGxiYWNrKGNvbnN0
IFNWR0dseXBoSWRlbnRpZmllciYgaWRlbnRpZmllciwgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVk
TGVuZ3RoRGF0YSYgZGF0YSkKIHsKICAgICBpZiAoZGF0YS5hdCA+PSBkYXRhLmZyb20gJiYgZGF0
YS5hdCA8IGRhdGEudG8pCi0gICAgICAgIGRhdGEubGVuZ3RoICs9IFNWR0ZvbnREYXRhOjpjb252
ZXJ0RW1Vbml0VG9QaXhlbChkYXRhLmZvbnRTaXplLCBkYXRhLnVuaXRzUGVyRW0sIGlkZW50aWZp
ZXIuaG9yaXpvbnRhbEFkdmFuY2VYKTsKKyAgICAgICAgZGF0YS5sZW5ndGggKz0gaWRlbnRpZmll
ci5ob3Jpem9udGFsQWR2YW5jZVggKiBkYXRhLnNjYWxlOwogCiAgICAgZGF0YS5hdCsrOwogICAg
IHJldHVybiBkYXRhLmF0IDwgZGF0YS50bzsKIH0KIAotdm9pZCBmbG9hdFdpZHRoTWlzc2luZ0ds
eXBoQ2FsbGJhY2soY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBpbnQgcG9zaXRpb24sIFNW
R1RleHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0aERhdGEmIGRhdGEpCit2b2lkIGZsb2F0V2lkdGhN
aXNzaW5nR2x5cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIFNWR1RleHRSdW5XYWxrZXJN
ZWFzdXJlZExlbmd0aERhdGEmIGRhdGEpCiB7Ci0gICAgLy8gQ29uc3RydWN0IGEgY29weSBvZiB0
aGUgY3VycmVudCBTVkcgRm9udCB0aGF0IGluIGlzIHVzZS4gRGlzYWJsZSB0aGUgU1ZHIEZvbnQg
ZnVuY3Rpb25hbGl0eQotICAgIC8vIGluIHRoYXQgY29weSBvZiB0aGUgRm9udCBvYmplY3QsIHNv
IGRyYXdUZXh0L2Zsb2F0V2lkdGggZW5kIHVwIGluIHRoZSAic2ltcGxlIiBjb2RlIHBhdGhzLgot
ICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEq
PihkYXRhLmZvbnQtPnByaW1hcnlGb250KCkpOwotICAgIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0
YSA9IGZvbnREYXRhLT5tX3N2Z0ZvbnREYXRhLnJlbGVhc2UoKTsKLQogICAgIC8vIEhhbmRsZSBz
eXN0ZW0gZm9udCBmYWxsYmFjawotICAgIFRleHRSdW4gc3ViUnVuKHJ1bik7Ci0gICAgc3ViUnVu
LnNldFRleHQoc3ViUnVuLmRhdGEocG9zaXRpb24pLCAxKTsKKyAgICBGb250IGZvbnQoRm9udERl
c2NyaXB0aW9uKCksIDAsIDApOyAvLyBzcGFjaW5nIGhhbmRsZWQgYnkgU1ZHIHRleHQgY29kZS4K
KyAgICBmb250LnVwZGF0ZShkYXRhLmZvbnQtPmZvbnRTZWxlY3RvcigpKTsKIAotICAgIGRhdGEu
bGVuZ3RoICs9IGRhdGEuZm9udC0+ZmxvYXRXaWR0aChzdWJSdW4pOwotCi0gICAgLy8gU3dpdGNo
IGJhY2sgdG8gU1ZHIEZvbnQgY29kZSBwYXRoCi0gICAgZm9udERhdGEtPm1fc3ZnRm9udERhdGEu
c2V0KHN2Z0ZvbnREYXRhKTsKKyAgICBkYXRhLmxlbmd0aCArPSBmb250LmZsb2F0V2lkdGgocnVu
KTsKIH0KIAogc3RhdGljIGZsb2F0IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udChj
b25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8pCkBA
IC0zMzUsNyArMzUxLDcgQEAgc3RhdGljIGZsb2F0IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5n
UwogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7CiAgICAgU1ZHRm9udEZhY2VF
bGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwogCi0gICAgaWYgKFNWR0ZvbnREYXRhKiBmb250
RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250LT5wcmltYXJ5
Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgeworICAgIGlmIChjb25zdCBT
VkdGb250RGF0YSogZm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERh
dGEoZm9udC0+cHJpbWFyeUZvbnQoKSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCkpIHsK
ICAgICAgICAgaWYgKCFmb250RWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiAwLjBmOwogCkBA
IC0zNDUsMTYgKzM2MSwxNSBAQCBzdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNp
bmdTCiAgICAgICAgIGRhdGEuYXQgPSBmcm9tOwogICAgICAgICBkYXRhLmZyb20gPSBmcm9tOwog
ICAgICAgICBkYXRhLnRvID0gdG87CisgICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0
VG9QaXhlbChmb250LT5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBm
KTsKICAgICAgICAgZGF0YS5sZW5ndGggPSAwLjBmOwotICAgICAgICBkYXRhLmZvbnRTaXplID0g
Zm9udC0+c2l6ZSgpOwotICAgICAgICBkYXRhLnVuaXRzUGVyRW0gPSBmb250RmFjZUVsZW1lbnQt
PnVuaXRzUGVyRW0oKTsKIAogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qg
PSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgewogICAgICAgICAgICAgYm9vbCBpc1Zl
cnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShyZW5kZXJPYmplY3QtPnN0eWxlKCkt
PnN2Z1N0eWxlKCkpOwogCiAgICAgICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7Ci0gICAgICAgICAg
ICBpZiAocmVuZGVyT2JqZWN0LT5lbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgbGFuZ3VhZ2Ug
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocmVuZGVyT2JqZWN0LT5lbGVtZW50KCkpLT5nZXRBdHRy
aWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKKyAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHJlbmRlck9iamVjdC0+ZWxlbWVudCgp
KSkKKyAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxO
YW1lczo6bGFuZ0F0dHIpOwogCiAgICAgICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyPFNWR1RleHRS
dW5XYWxrZXJNZWFzdXJlZExlbmd0aERhdGE+IHJ1bldhbGtlcihmb250RGF0YSwgZm9udEVsZW1l
bnQsIGRhdGEsIGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxsYmFjaywgZmxvYXRXaWR0aE1pc3Np
bmdHbHlwaENhbGxiYWNrKTsKICAgICAgICAgICAgIHJ1bldhbGtlci53YWxrKHJ1biwgaXNWZXJ0
aWNhbFRleHQsIGxhbmd1YWdlLCAwLCBydW4ubGVuZ3RoKCkpOwpAQCAtMzczLDkgKzM4OCw3IEBA
IGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QKIAogLy8gQ2FsbGJhY2sg
JiBkYXRhIHN0cnVjdHVyZXMgdG8gZHJhdyB0ZXh0IHVzaW5nIFNWRyBGb250cwogc3RydWN0IFNW
R1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEgewotICAgIGZsb2F0IGZvbnRTaXplOwogICAgIGZs
b2F0IHNjYWxlOwotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW07CiAgICAgYm9vbCBpc1ZlcnRpY2Fs
VGV4dDsKIAogICAgIGZsb2F0IHhTdGFydE9mZnNldDsKQEAgLTM5NSw4ICs0MDgsOCBAQCBib29s
IGRyYXdUZXh0VXNpbmdTVkdGb250Q2FsbGJhY2soY29uc3QgCiAgICAgICAgIGRhdGEuY29udGV4
dC0+c2F2ZSgpOwogCiAgICAgICAgIGlmIChkYXRhLmlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAg
ICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFgoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1Bp
eGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgaWRlbnRpZmllci52ZXJ0aWNhbE9y
aWdpblgpKTsKLSAgICAgICAgICAgIGRhdGEuZ2x5cGhPcmlnaW4uc2V0WShTVkdGb250RGF0YTo6
Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCBpZGVu
dGlmaWVyLnZlcnRpY2FsT3JpZ2luWSkpOworICAgICAgICAgICAgZGF0YS5nbHlwaE9yaWdpbi5z
ZXRYKGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YICogZGF0YS5zY2FsZSk7CisgICAgICAgICAg
ICBkYXRhLmdseXBoT3JpZ2luLnNldFkoaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkgKiBkYXRh
LnNjYWxlKTsKICAgICAgICAgfQogCiAgICAgICAgIGRhdGEuY29udGV4dC0+dHJhbnNsYXRlKGRh
dGEueFN0YXJ0T2Zmc2V0ICsgZGF0YS5jdXJyZW50UG9pbnQueCgpICsgZGF0YS5nbHlwaE9yaWdp
bi54KCksIGRhdGEuY3VycmVudFBvaW50LnkoKSArIGRhdGEuZ2x5cGhPcmlnaW4ueSgpKTsKQEAg
LTQyMSwzNSArNDM0LDI1IEBAIGJvb2wgZHJhd1RleHRVc2luZ1NWR0ZvbnRDYWxsYmFjayhjb25z
dCAKICAgICB9CiAKICAgICBpZiAoZGF0YS5pc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgZGF0YS5j
dXJyZW50UG9pbnQubW92ZSgwLjBmLCBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwo
ZGF0YS5mb250U2l6ZSwgZGF0YS51bml0c1BlckVtLCBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5j
ZVkpKTsKKyAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQubW92ZSgwLjBmLCBpZGVudGlmaWVyLnZl
cnRpY2FsQWR2YW5jZVkgKiBkYXRhLnNjYWxlKTsKICAgICBlbHNlCi0gICAgICAgIGRhdGEuY3Vy
cmVudFBvaW50Lm1vdmUoU1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9u
dFNpemUsIGRhdGEudW5pdHNQZXJFbSwgaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVgpLCAw
LjBmKTsKKyAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQubW92ZShpZGVudGlmaWVyLmhvcml6b250
YWxBZHZhbmNlWCAqIGRhdGEuc2NhbGUsIDAuMGYpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgZHJhd1RleHRNaXNzaW5nR2x5cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIHVu
c2lnbmVkIGludCBwb3NpdGlvbiwgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSYgZGF0YSkK
K3ZvaWQgZHJhd1RleHRNaXNzaW5nR2x5cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIFNW
R1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEmIGRhdGEpCiB7Ci0gICAgLy8gQ29uc3RydWN0IGEg
Y29weSBvZiB0aGUgY3VycmVudCBTVkcgRm9udCB0aGF0IGluIGlzIHVzZS4gRGlzYWJsZSB0aGUg
U1ZHIEZvbnQgZnVuY3Rpb25hbGl0eQotICAgIC8vIGluIHRoYXQgY29weSBvZiB0aGUgRm9udCBv
YmplY3QsIHNvIGRyYXdUZXh0L2Zsb2F0V2lkdGggZW5kIHVwIGluIHRoZSAic2ltcGxlIiBjb2Rl
IHBhdGhzLgotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBkYXRhLmNvbnRleHQtPmZvbnQoKTsKLQot
ICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERhdGEq
Pihmb250LnByaW1hcnlGb250KCkpOwotICAgIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IGZv
bnREYXRhLT5tX3N2Z0ZvbnREYXRhLnJlbGVhc2UoKTsKLQogICAgIC8vIEhhbmRsZSBzeXN0ZW0g
Zm9udCBmYWxsYmFjawotICAgIFRleHRSdW4gc3ViUnVuKHJ1bik7Ci0gICAgc3ViUnVuLnNldFRl
eHQoc3ViUnVuLmRhdGEocG9zaXRpb24pLCAxKTsKKyAgICBGb250IGZvbnQoRm9udERlc2NyaXB0
aW9uKCksIDAsIDApOyAvLyBzcGFjaW5nIGhhbmRsZWQgYnkgU1ZHIHRleHQgY29kZS4KKyAgICBm
b250LnVwZGF0ZShkYXRhLmNvbnRleHQtPmZvbnQoKS5mb250U2VsZWN0b3IoKSk7CiAKLSAgICBm
b250LmRyYXdUZXh0KGRhdGEuY29udGV4dCwgc3ViUnVuLCBkYXRhLmN1cnJlbnRQb2ludCk7Cisg
ICAgZm9udC5kcmF3VGV4dChkYXRhLmNvbnRleHQsIHJ1biwgZGF0YS5jdXJyZW50UG9pbnQpOwog
CiAgICAgaWYgKGRhdGEuaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgIGRhdGEuY3VycmVudFBvaW50
Lm1vdmUoMC4wZiwgZGF0YS5jb250ZXh0LT5mb250KCkuZmxvYXRXaWR0aChzdWJSdW4pKTsKKyAg
ICAgICAgZGF0YS5jdXJyZW50UG9pbnQubW92ZSgwLjBmLCBmb250LmZsb2F0V2lkdGgocnVuKSk7
CiAgICAgZWxzZQotICAgICAgICBkYXRhLmN1cnJlbnRQb2ludC5tb3ZlKGRhdGEuY29udGV4dC0+
Zm9udCgpLmZsb2F0V2lkdGgoc3ViUnVuKSwgMC4wZik7Ci0KLSAgICAvLyBTd2l0Y2ggYmFjayB0
byBTVkcgRm9udCBjb2RlIHBhdGgKLSAgICBmb250RGF0YS0+bV9zdmdGb250RGF0YS5zZXQoc3Zn
Rm9udERhdGEpOworICAgICAgICBkYXRhLmN1cnJlbnRQb2ludC5tb3ZlKGZvbnQuZmxvYXRXaWR0
aChydW4pLCAwLjBmKTsKIH0KIAogdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgCkBAIC00NTgsNyArNDYx
LDcgQEAgdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljcwogICAgIFNWR0Zv
bnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250
RmFjZUVsZW1lbnQgPSAwOwogCi0gICAgaWYgKFNWR0ZvbnREYXRhKiBmb250RGF0YSA9IHN2Z0Zv
bnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShwcmltYXJ5Rm9udCgpLCBmb250RmFjZUVs
ZW1lbnQsIGZvbnRFbGVtZW50KSkgeworICAgIGlmIChjb25zdCBTVkdGb250RGF0YSogZm9udERh
dGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEocHJpbWFyeUZvbnQoKSwg
Zm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCkpIHsKICAgICAgICAgaWYgKCFmb250RWxlbWVu
dCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNDcwLDkgKzQ3Myw3IEBAIHZvaWQgRm9udDo6
ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3MKICAgICAgICAgZGF0YS5hY3RpdmVQYWludFNl
cnZlciA9IHJ1bi5hY3RpdmVQYWludFNlcnZlcigpOwogICAgICAgICBBU1NFUlQoZGF0YS5hY3Rp
dmVQYWludFNlcnZlcik7CiAKLSAgICAgICAgZGF0YS5mb250U2l6ZSA9IHNpemUoKTsKLSAgICAg
ICAgZGF0YS51bml0c1BlckVtID0gZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCk7Ci0gICAg
ICAgIGRhdGEuc2NhbGUgPSBTVkdGb250RGF0YTo6Y29udmVydEVtVW5pdFRvUGl4ZWwoZGF0YS5m
b250U2l6ZSwgZGF0YS51bml0c1BlckVtLCAxLjBmKTsKKyAgICAgICAgZGF0YS5zY2FsZSA9IGNv
bnZlcnRFbVVuaXRUb1BpeGVsKHNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCks
IDEuMGYpOwogICAgICAgICBkYXRhLmlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdN
b2RlKGRhdGEucmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsgICAgCiAgICAgICAg
IGRhdGEueFN0YXJ0T2Zmc2V0ID0gZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRo
aXMsIHJ1biwgcnVuLnJ0bCgpID8gdG8gOiAwLCBydW4ucnRsKCkgPyBydW4ubGVuZ3RoKCkgOiBm
cm9tKTsKICAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQgPSBwb2ludDsKQEAgLTQ4MCwxNCArNDgx
LDE0IEBAIHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3MKICAgICAgICAg
ZGF0YS5jb250ZXh0ID0gY29udGV4dDsKIAogICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7Ci0gICAg
ICAgIGlmIChkYXRhLnJlbmRlck9iamVjdC0+ZWxlbWVudCgpKQotICAgICAgICAgICAgbGFuZ3Vh
Z2UgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZGF0YS5yZW5kZXJPYmplY3QtPmVsZW1lbnQoKSkt
PmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAgICAgICBpZiAoU1ZHRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihkYXRhLnJlbmRlck9iamVjdC0+
ZWxlbWVudCgpKSkKKyAgICAgICAgICAgIGxhbmd1YWdlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRl
KFhNTE5hbWVzOjpsYW5nQXR0cik7CiAKICAgICAgICAgaWYgKCFkYXRhLmlzVmVydGljYWxUZXh0
KSB7Ci0gICAgICAgICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFgoU1ZHRm9udERhdGE6OmNvbnZl
cnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5pdHNQZXJFbSwgZm9udERhdGEt
Pmhvcml6b250YWxPcmlnaW5YKSk7Ci0gICAgICAgICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFko
U1ZHRm9udERhdGE6OmNvbnZlcnRFbVVuaXRUb1BpeGVsKGRhdGEuZm9udFNpemUsIGRhdGEudW5p
dHNQZXJFbSwgZm9udERhdGEtPmhvcml6b250YWxPcmlnaW5ZKSk7CisgICAgICAgICAgICBkYXRh
LmdseXBoT3JpZ2luLnNldFgoZm9udERhdGEtPmhvcml6b250YWxPcmlnaW5YKCkgKiBkYXRhLnNj
YWxlKTsKKyAgICAgICAgICAgIGRhdGEuZ2x5cGhPcmlnaW4uc2V0WShmb250RGF0YS0+aG9yaXpv
bnRhbE9yaWdpblkoKSAqIGRhdGEuc2NhbGUpOwogICAgICAgICB9Ci0gICAgCisKICAgICAgICAg
U1ZHVGV4dFJ1bldhbGtlcjxTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhPiBydW5XYWxrZXIo
Zm9udERhdGEsIGZvbnRFbGVtZW50LCBkYXRhLCBkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxiYWNr
LCBkcmF3VGV4dE1pc3NpbmdHbHlwaENhbGxiYWNrKTsKICAgICAgICAgcnVuV2Fsa2VyLndhbGso
cnVuLCBkYXRhLmlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgZnJvbSwgdG8pOwogICAgIH0KSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdGb250RGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RGF0
YS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorI2luY2x1ZGUgIlNWR0ZvbnRE
YXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1ZHRm9udERhdGE6OlNWR0ZvbnREYXRh
KFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50KQorICAgIDogbV9zdmdGb250RmFj
ZUVsZW1lbnQoZm9udEZhY2VFbGVtZW50KQorICAgICwgbV9ob3Jpem9udGFsT3JpZ2luWChmb250
RmFjZUVsZW1lbnQtPmhvcml6b250YWxPcmlnaW5YKCkpCisgICAgLCBtX2hvcml6b250YWxPcmln
aW5ZKGZvbnRGYWNlRWxlbWVudC0+aG9yaXpvbnRhbE9yaWdpblkoKSkKKyAgICAsIG1faG9yaXpv
bnRhbEFkdmFuY2VYKGZvbnRGYWNlRWxlbWVudC0+aG9yaXpvbnRhbEFkdmFuY2VYKCkpCisgICAg
LCBtX3ZlcnRpY2FsT3JpZ2luWChmb250RmFjZUVsZW1lbnQtPnZlcnRpY2FsT3JpZ2luWCgpKQor
ICAgICwgbV92ZXJ0aWNhbE9yaWdpblkoZm9udEZhY2VFbGVtZW50LT52ZXJ0aWNhbE9yaWdpblko
KSkKKyAgICAsIG1fdmVydGljYWxBZHZhbmNlWShmb250RmFjZUVsZW1lbnQtPnZlcnRpY2FsQWR2
YW5jZVkoKSkKK3sKK30KKworU1ZHRm9udERhdGE6On5TVkdGb250RGF0YSgpCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTVkdGb250RGF0YV9oCisjZGVmaW5lIFNWR0Zv
bnREYXRhX2gKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiU1ZHRm9udEZhY2VF
bGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRm9udERhdGEgewor
cHVibGljOgorICAgIFNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVudCopOworICAgIHZpcnR1
YWwgflNWR0ZvbnREYXRhKCk7CisKKyAgICBTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNl
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpOyB9CisK
KyAgICBmbG9hdCBob3Jpem9udGFsT3JpZ2luWCgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRh
bE9yaWdpblg7IH0KKyAgICBmbG9hdCBob3Jpem9udGFsT3JpZ2luWSgpIGNvbnN0IHsgcmV0dXJu
IG1faG9yaXpvbnRhbE9yaWdpblk7IH0KKyAgICBmbG9hdCBob3Jpem9udGFsQWR2YW5jZVgoKSBj
b25zdCB7IHJldHVybiBtX2hvcml6b250YWxBZHZhbmNlWDsgfQorCisgICAgZmxvYXQgdmVydGlj
YWxPcmlnaW5YKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbE9yaWdpblg7IH0KKyAgICBmbG9h
dCB2ZXJ0aWNhbE9yaWdpblkoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsT3JpZ2luWTsgfQor
ICAgIGZsb2F0IHZlcnRpY2FsQWR2YW5jZVkoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsQWR2
YW5jZVk7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50PiBtX3N2
Z0ZvbnRGYWNlRWxlbWVudDsKKworICAgIGZsb2F0IG1faG9yaXpvbnRhbE9yaWdpblg7CisgICAg
ZmxvYXQgbV9ob3Jpem9udGFsT3JpZ2luWTsKKyAgICBmbG9hdCBtX2hvcml6b250YWxBZHZhbmNl
WDsKKworICAgIGZsb2F0IG1fdmVydGljYWxPcmlnaW5YOworICAgIGZsb2F0IG1fdmVydGljYWxP
cmlnaW5ZOworICAgIGZsb2F0IG1fdmVydGljYWxBZHZhbmNlWTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYgLy8gU1ZHRm9udERhdGFfaApJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyOTY5OCkKKysrIFdlYkNvcmUvc3Zn
L1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0g
ICBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgICAgCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNyArMjIsNyBAQAog
CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIK
LQorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKICNp
bmNsdWRlICJDU1NGb250RmFjZVNyY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHkuaCIK
QEAgLTEzOCwxMDggKzEzOCwxNjMgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cgogCiB1bnNpZ25lZCBTVkdGb250RmFjZUVsZW1lbnQ6OnVuaXRzUGVyRW0oKSBjb25z
dAogewotICAgIGlmIChoYXNBdHRyaWJ1dGUodW5pdHNfcGVyX2VtQXR0cikpCi0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGdldEF0dHJpYnV0ZSh1bml0c19wZXJfZW1BdHRy
KS50b0Zsb2F0KCkpKTsKLQotICAgIHJldHVybiAxMDAwOwotfQorICAgIEF0b21pY1N0cmluZyB2
YWx1ZShnZXRBdHRyaWJ1dGUodW5pdHNfcGVyX2VtQXR0cikpOworICAgIGlmICh2YWx1ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiAxMDAwOwogCi1TdHJpbmcgU1ZHRm9udEZhY2VFbGVtZW50
Ojpmb250RmFtaWx5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdHlsZURlY2xhcmF0aW9uLT5n
ZXRQcm9wZXJ0eVZhbHVlKENTU19QUk9QX0ZPTlRfRkFNSUxZKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNlaWxmKHZhbHVlLnRvRmxvYXQoKSkpOwogfQogCi1TaW1wbGVGb250
RGF0YSogU1ZHRm9udEZhY2VFbGVtZW50OjpjcmVhdGVGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK2ludCBTVkdGb250RmFjZUVsZW1lbnQ6OnhI
ZWlnaHQoKSBjb25zdAogewotICAgIC8vIFdlIG9ubHkgZXhwZWN0IHRvIGhhdmUgdGhpcyBtZXRo
b2QgY2FsbGVkIGJ5IGEgcGFyZW50IGZvbnQgZWxlbWVudAotICAgIEFTU0VSVChwYXJlbnROb2Rl
KCkpOwotICAgIEFTU0VSVChwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoZm9udFRhZykpOwotICAg
IFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZvbnRFbGVtZW50
Kj4ocGFyZW50Tm9kZSgpKTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGNhY2hlZFBsYXRmb3Jt
RGF0YSA9IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRp
b24pOwotICAgIGlmICghY2FjaGVkUGxhdGZvcm1EYXRhKQorICAgIEF0b21pY1N0cmluZyB2YWx1
ZShnZXRBdHRyaWJ1dGUoeF9oZWlnaHRBdHRyKSk7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBPd25QdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRh
KG5ldyBTaW1wbGVGb250RGF0YSgqY2FjaGVkUGxhdGZvcm1EYXRhKSk7Ci0KLSAgICBTVkdGb250
RGF0YSogc3ZnRm9udERhdGEgPSBuZXcgU1ZHRm9udERhdGEoY29uc3RfY2FzdDxTVkdGb250RmFj
ZUVsZW1lbnQqPih0aGlzKSk7Ci0gICAgZm9udERhdGEtPm1fc3ZnRm9udERhdGEuc2V0KHN2Z0Zv
bnREYXRhKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjZWlsZih2YWx1ZS50b0Zsb2F0
KCkpKTsKK30KIAotICAgIGZvbnREYXRhLT5tX3hIZWlnaHQgPSBmb250RWxlbWVudC0+Z2V0QXR0
cmlidXRlKHhfaGVpZ2h0QXR0cikudG9GbG9hdCgpOwotICAgIGZvbnREYXRhLT5tX3VuaXRzUGVy
RW0gPSB1bml0c1BlckVtKCk7CitmbG9hdCBTVkdGb250RmFjZUVsZW1lbnQ6Omhvcml6b250YWxP
cmlnaW5YKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZm9udEVsZW1lbnQpCisgICAgICAgIHJldHVy
biAwLjBmOwogCiAgICAgLy8gU3BlYzogVGhlIFgtY29vcmRpbmF0ZSBpbiB0aGUgZm9udCBjb29y
ZGluYXRlIHN5c3RlbSBvZiB0aGUgb3JpZ2luIG9mIGEgZ2x5cGggdG8gYmUgdXNlZCB3aGVuCiAg
ICAgLy8gZHJhd2luZyBob3Jpem9udGFsbHkgb3JpZW50ZWQgdGV4dC4gKE5vdGUgdGhhdCB0aGUg
b3JpZ2luIGFwcGxpZXMgdG8gYWxsIGdseXBocyBpbiB0aGUgZm9udC4pCiAgICAgLy8gSWYgdGhl
IGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUg
b2YgIjAiIHdlcmUgc3BlY2lmaWVkLgotICAgIGlmIChmb250RWxlbWVudC0+aGFzQXR0cmlidXRl
KGhvcml6X29yaWdpbl94QXR0cikpCi0gICAgICAgIHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsT3Jp
Z2luWCA9IGZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoaG9yaXpfb3JpZ2luX3hBdHRyKS50b0Zs
b2F0KCk7CisgICAgQXRvbWljU3RyaW5nIHZhbHVlKG1fZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0
ZShob3Jpel9vcmlnaW5feEF0dHIpKTsKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gMC4wZjsKKworICAgIHJldHVybiB2YWx1ZS50b0Zsb2F0KCk7Cit9CisKK2Zsb2F0
IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbE9yaWdpblkoKSBjb25zdAoreworICAgIGlm
ICghbV9mb250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAgICAvLyBTcGVjOiBU
aGUgWS1jb29yZGluYXRlIGluIHRoZSBmb250IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBvcmln
aW4gb2YgYSBnbHlwaCB0byBiZSB1c2VkIHdoZW4KICAgICAvLyBkcmF3aW5nIGhvcml6b250YWxs
eSBvcmllbnRlZCB0ZXh0LiAoTm90ZSB0aGF0IHRoZSBvcmlnaW4gYXBwbGllcyB0byBhbGwgZ2x5
cGhzIGluIHRoZSBmb250LikKICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZp
ZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCIgd2VyZSBzcGVjaWZpZWQuCi0g
ICAgaWYgKGZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUoaG9yaXpfb3JpZ2luX3lBdHRyKSkKLSAg
ICAgICAgc3ZnRm9udERhdGEtPmhvcml6b250YWxPcmlnaW5ZID0gZm9udEVsZW1lbnQtPmdldEF0
dHJpYnV0ZShob3Jpel9vcmlnaW5feUF0dHIpLnRvRmxvYXQoKTsKKyAgICBBdG9taWNTdHJpbmcg
dmFsdWUobV9mb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKGhvcml6X29yaWdpbl95QXR0cikpOwor
ICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgcmV0
dXJuIHZhbHVlLnRvRmxvYXQoKTsKK30KKworZmxvYXQgU1ZHRm9udEZhY2VFbGVtZW50Ojpob3Jp
em9udGFsQWR2YW5jZVgoKSBjb25zdAoreworICAgIGlmICghbV9mb250RWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuIDAuMGY7CiAKICAgICAvLyBTcGVjOiBUaGUgZGVmYXVsdCBob3Jpem9udGFsIGFk
dmFuY2UgYWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5cGggaW4gaG9yaXpvbnRhbCBvcmllbnRhdGlvbi4g
R2x5cGgKICAgICAvLyB3aWR0aHMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vbi1uZWdhdGl2ZSwgZXZl
biBpZiB0aGUgZ2x5cGggaXMgdHlwaWNhbGx5IHJlbmRlcmVkIHJpZ2h0LXRvLWxlZnQsCiAgICAg
Ly8gYXMgaW4gSGVicmV3IGFuZCBBcmFiaWMgc2NyaXB0cy4KLSAgICBpZiAoZm9udEVsZW1lbnQt
Pmhhc0F0dHJpYnV0ZShob3Jpel9hZHZfeEF0dHIpKSB7Ci0gICAgICAgIGZsb2F0IGFkdmFuY2Ug
PSBmb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKGhvcml6X2Fkdl94QXR0cikudG9GbG9hdCgpOwor
ICAgIEF0b21pY1N0cmluZyB2YWx1ZShtX2ZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoaG9yaXpf
YWR2X3hBdHRyKSk7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDAu
MGY7CiAKLSAgICAgICAgLy8gVE9ETzogUmVwb3J0IGVycm9ycywgaW5zdGVhZCBvZiBzaWxlbnQg
aWdub3JlPwotICAgICAgICBpZiAoYWR2YW5jZSA+PSAwLjApCi0gICAgICAgICAgICBzdmdGb250
RGF0YS0+aG9yaXpvbnRhbEFkdmFuY2VYID0gYWR2YW5jZTsKLSAgICB9CisgICAgcmV0dXJuIHZh
bHVlLnRvRmxvYXQoKTsKK30KKworZmxvYXQgU1ZHRm9udEZhY2VFbGVtZW50Ojp2ZXJ0aWNhbE9y
aWdpblgoKSBjb25zdAoreworICAgIGlmICghbV9mb250RWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IDAuMGY7CiAKICAgICAvLyBTcGVjOiBUaGUgZGVmYXVsdCBYLWNvb3JkaW5hdGUgaW4gdGhlIGZv
bnQgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9yaWdpbiBvZiBhIGdseXBoIHRvIGJlIHVzZWQg
d2hlbgogICAgIC8vIGRyYXdpbmcgdmVydGljYWxseSBvcmllbnRlZCB0ZXh0LiBJZiB0aGUgYXR0
cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0
ZQogICAgIC8vIHdlcmUgc2V0IHRvIGhhbGYgb2YgdGhlIGVmZmVjdGl2ZSB2YWx1ZSBvZiBhdHRy
aWJ1dGUgaG9yaXotYWR2LXguCi0gICAgaWYgKGZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVy
dF9vcmlnaW5feEF0dHIpKQotICAgICAgICBzdmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5YID0g
Zm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl94QXR0cikudG9GbG9hdCgpOwot
ICAgIGVsc2UKLSAgICAgICAgc3ZnRm9udERhdGEtPnZlcnRpY2FsT3JpZ2luWCA9IHN2Z0ZvbnRE
YXRhLT5ob3Jpem9udGFsQWR2YW5jZVggLyAyLjBmOworICAgIEF0b21pY1N0cmluZyB2YWx1ZSht
X2ZvbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feEF0dHIpKTsKKyAgICBpZiAo
dmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gaG9yaXpvbnRhbEFkdmFuY2VYKCkgLyAy
LjBmOworCisgICAgcmV0dXJuIHZhbHVlLnRvRmxvYXQoKTsKK30KKworZmxvYXQgU1ZHRm9udEZh
Y2VFbGVtZW50Ojp2ZXJ0aWNhbE9yaWdpblkoKSBjb25zdAoreworICAgIGlmICghbV9mb250RWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAgICAvLyBTcGVjOiBUaGUgZGVmYXVsdCBZ
LWNvb3JkaW5hdGUgaW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9yaWdpbiBv
ZiBhIGdseXBoIHRvIGJlIHVzZWQgd2hlbgogICAgIC8vIGRyYXdpbmcgdmVydGljYWxseSBvcmll
bnRlZCB0ZXh0LiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3Qg
aXMgYXMgaWYgdGhlIGF0dHJpYnV0ZQogICAgIC8vIHdlcmUgc2V0IHRvIHRoZSBwb3NpdGlvbiBz
cGVjaWZpZWQgYnkgdGhlIGZvbnQncyBhc2NlbnQgYXR0cmlidXRlLiAgICAgICAgICAgICAKLSAg
ICBpZiAoZm9udEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikpCi0gICAg
ICAgIHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbE9yaWdpblkgPSBmb250RWxlbWVudC0+Z2V0QXR0cmli
dXRlKHZlcnRfb3JpZ2luX3lBdHRyKS50b0Zsb2F0KCk7Ci0gICAgZWxzZQotICAgICAgICBzdmdG
b250RGF0YS0+dmVydGljYWxPcmlnaW5ZID0gZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZShhc2Nl
bnRBdHRyKS50b0Zsb2F0KCk7CisgICAgQXRvbWljU3RyaW5nIHZhbHVlKG1fZm9udEVsZW1lbnQt
PmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikpOworICAgIGlmICh2YWx1ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBhc2NlbnQoKTsKKworICAgIHJldHVybiB2YWx1ZS50b0Zsb2F0
KCk7Cit9CisKK2Zsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGljYWxBZHZhbmNlWSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2ZvbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gMC4wZjsKIAog
ICAgIC8vIFNwZWM6IFRoZSBkZWZhdWx0IHZlcnRpY2FsIGFkdmFuY2UgYWZ0ZXIgcmVuZGVyaW5n
IGEgZ2x5cGggaW4gdmVydGljYWwgb3JpZW50YXRpb24uIElmIHRoZSBhdHRyaWJ1dGUgaXMKICAg
ICAvLyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgZXF1aXZhbGVu
dCBvZiBvbmUgZW0gd2VyZSBzcGVjaWZpZWQgKHNlZSB1bml0cy1wZXItZW0pLiAgICAgICAgICAg
ICAgICAgICAgCi0gICAgaWYgKGZvbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUodmVydF9hZHZfeUF0
dHIpKQotICAgICAgICBzdmdGb250RGF0YS0+dmVydGljYWxBZHZhbmNlWSA9IGZvbnRFbGVtZW50
LT5nZXRBdHRyaWJ1dGUodmVydF9hZHZfeUF0dHIpLnRvRmxvYXQoKTsKLSAgICBlbHNlCi0gICAg
ICAgIHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbEFkdmFuY2VZID0gMS4wZjsKKyAgICBBdG9taWNTdHJp
bmcgdmFsdWUobV9mb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRfYWR2X3lBdHRyKSk7Cisg
ICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDEuMGY7CisKKyAgICBy
ZXR1cm4gdmFsdWUudG9GbG9hdCgpOworfQorCitpbnQgU1ZHRm9udEZhY2VFbGVtZW50Ojphc2Nl
bnQoKSBjb25zdAoreworICAgIGlmICghbV9mb250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDAu
MGY7CiAKICAgICAvLyBTcGVjOiBTYW1lIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzIHRoZSAnYXNj
ZW50JyBkZXNjcmlwdG9yIHdpdGhpbiBhbiBAZm9udC1mYWNlIHJ1bGUuIFRoZSBtYXhpbXVtCiAg
ICAgLy8gdW5hY2NlbnRlZCBoZWlnaHQgb2YgdGhlIGZvbnQgd2l0aGluIHRoZSBmb250IGNvb3Jk
aW5hdGUgc3lzdGVtLiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsCiAgICAgLy8g
dGhlIGVmZmVjdCBpcyBhcyBpZiB0aGUgYXR0cmlidXRlIHdlcmUgc2V0IHRvIHRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gdGhlIHVuaXRzLXBlci1lbSB2YWx1ZSBhbmQgdGhlCiAgICAgLy8gdmVydC1v
cmlnaW4teSB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZm9udC4KLSAgICBpZiAoaGFzQXR0
cmlidXRlKGFzY2VudEF0dHIpKQotICAgICAgICBmb250RGF0YS0+bV9hc2NlbnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGNlaWxmKGdldEF0dHJpYnV0ZShhc2NlbnRBdHRyKS50b0Zsb2F0KCkpKTsKLSAg
ICBlbHNlIGlmIChmb250RWxlbWVudC0+aGFzQXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKSkK
LSAgICAgICAgZm9udERhdGEtPm1fYXNjZW50ID0gZm9udERhdGEtPm1fdW5pdHNQZXJFbSAtIHN0
YXRpY19jYXN0PGludD4oY2VpbGYoZm9udEVsZW1lbnQtPmdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdp
bl95QXR0cikudG9GbG9hdCgpKSk7Ci0gICAgZWxzZSAvLyBNYXRjaCBCYXRpaydzIGRlZmF1bHQg
dmFsdWUuCi0gICAgICAgIGZvbnREYXRhLT5tX2FzY2VudCA9IGZvbnREYXRhLT5tX3VuaXRzUGVy
RW0gKiAwLjhmOworICAgIEF0b21pY1N0cmluZyB2YWx1ZShtX2ZvbnRFbGVtZW50LT5nZXRBdHRy
aWJ1dGUoYXNjZW50QXR0cikpOworICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjZWlsZih2YWx1ZS50b0Zsb2F0KCkpKTsKKworICAgIHZh
bHVlID0gbV9mb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRfb3JpZ2luX3lBdHRyKTsKKyAg
ICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
dW5pdHNQZXJFbSgpKSAtIHN0YXRpY19jYXN0PGludD4oY2VpbGYodmFsdWUudG9GbG9hdCgpKSk7
CisKKyAgICAvLyBNYXRjaCBCYXRpa3MgZGVmYXVsdCB2YWx1ZQorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KGNlaWxmKHVuaXRzUGVyRW0oKSAqIDAuOGYpKTsKK30KKworaW50IFNWR0ZvbnRG
YWNlRWxlbWVudDo6ZGVzY2VudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZvbnRFbGVtZW50KQor
ICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgIC8vIFNwZWM6IFNhbWUgc3ludGF4IGFuZCBzZW1h
bnRpY3MgYXMgdGhlICdkZXNjZW50JyBkZXNjcmlwdG9yIHdpdGhpbiBhbiBAZm9udC1mYWNlIHJ1
bGUuIFRoZSBtYXhpbXVtCiAgICAgLy8gdW5hY2NlbnRlZCBkZXB0aCBvZiB0aGUgZm9udCB3aXRo
aW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0uIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNw
ZWNpZmllZCwKICAgICAvLyB0aGUgZWZmZWN0IGlzIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBz
ZXQgdG8gdGhlIHZlcnQtb3JpZ2luLXkgdmFsdWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZvbnQu
Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShkZXNjZW50QXR0cikpIHsKLSAgICAgICAgZm9udERhdGEt
Pm1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoZ2V0QXR0cmlidXRlKGRlc2NlbnRB
dHRyKS50b0Zsb2F0KCkpKTsKLQorICAgIEF0b21pY1N0cmluZyB2YWx1ZShtX2ZvbnRFbGVtZW50
LT5nZXRBdHRyaWJ1dGUoZGVzY2VudEF0dHIpKTsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkg
ewogICAgICAgICAvLyBTb21lIHRlc3RjYXNlcyB1c2UgYSBuZWdhdGl2ZSBkZXNjZW50IHZhbHVl
LCB3aGVyZSBhIHBvc2l0aXZlIHdhcyBtZWFudCB0byBiZSB1c2VkIDooCi0gICAgICAgIGlmIChm
b250RGF0YS0+bV9kZXNjZW50IDwgMCkKLSAgICAgICAgICAgIGZvbnREYXRhLT5tX2Rlc2NlbnQg
PSAtZm9udERhdGEtPm1fZGVzY2VudDsKLSAgICB9IGVsc2UgaWYgKGZvbnRFbGVtZW50LT5oYXNB
dHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpKQotICAgICAgICBmb250RGF0YS0+bV9kZXNjZW50
ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihmb250RWxlbWVudC0+Z2V0QXR0cmlidXRlKHZlcnRf
b3JpZ2luX3lBdHRyKS50b0Zsb2F0KCkpKTsKLSAgICBlbHNlIC8vIE1hdGNoIEJhdGlrJ3MgZGVm
YXVsdCB2YWx1ZS4KLSAgICAgICAgZm9udERhdGEtPm1fZGVzY2VudCA9IGZvbnREYXRhLT5tX3Vu
aXRzUGVyRW0gKiAwLjJmOworICAgICAgICBpbnQgZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4o
Y2VpbGYodmFsdWUudG9GbG9hdCgpKSk7CisgICAgICAgIHJldHVybiBkZXNjZW50IDwgMCA/IC1k
ZXNjZW50IDogZGVzY2VudDsKKyAgICB9CisKKyAgICB2YWx1ZSA9IG1fZm9udEVsZW1lbnQtPmdl
dEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cik7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHZhbHVlLnRvRmxvYXQoKSkp
OworCisgICAgLy8gTWF0Y2ggQmF0aWtzIGRlZmF1bHQgdmFsdWUKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihjZWlsZih1bml0c1BlckVtKCkgKiAwLjJmKSk7Cit9CiAKLSAgICByZXR1cm4g
Zm9udERhdGEucmVsZWFzZSgpOworU3RyaW5nIFNWR0ZvbnRGYWNlRWxlbWVudDo6Zm9udEZhbWls
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlW
YWx1ZShDU1NfUFJPUF9GT05UX0ZBTUlMWSk7Cit9CisKK1NWR0ZvbnRFbGVtZW50KiBTVkdGb250
RmFjZUVsZW1lbnQ6OmFzc29jaWF0ZWRGb250RWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZm9udEVsZW1lbnQuZ2V0KCk7CiB9CiAKIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZWJ1
aWxkRm9udEZhY2UoKQpAQCAtMjUyLDcgKzMwNyw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50
OjpyZWJ1aWxkRm9udEZhY2UKICAgICBpZiAocGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+
aGFzVGFnTmFtZShmb250VGFnKSkgewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0
ID0gbmV3IENTU1ZhbHVlTGlzdDsKIAotICAgICAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1
ZT4gc3JjID0gbmV3IENTU0ZvbnRGYWNlU3JjVmFsdWUoU3RyaW5nSW1wbDo6ZW1wdHkoKSwgdHJ1
ZSAvKiBpc0xvY2FsICovKTsKKyAgICAgICAgUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+IHNy
YyA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKGZvbnRGYW1pbHkoKSwgdHJ1ZSAvKiBpc0xvY2Fs
ICovKTsKICAgICAgICAgc3JjLT5zZXRTVkdGb250RmFjZUVsZW1lbnQodGhpcyk7CiAgICAgICAg
IGxpc3QtPmFwcGVuZChzcmMpOwogCkBAIC0yNjAsNiArMzE1LDcgQEAgdm9pZCBTVkdGb250RmFj
ZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZQogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSogc3Jj
UHJvcGVydHlSZWYgPSAmc3JjUHJvcGVydHk7CiAgICAgICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+
YWRkUGFyc2VkUHJvcGVydGllcygmc3JjUHJvcGVydHlSZWYsIDEpOwogCisgICAgICAgIG1fZm9u
dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KHBhcmVudE5vZGUoKSk7CiAg
ICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTMwNCwyMCArMzYwLDYgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OmNo
aWxkcmVuQ2hhbmdlZAogICAgIHJlYnVpbGRGb250RmFjZSgpOwogfQogCi1TVkdGb250RWxlbWVu
dCogU1ZHRm9udEZhY2VFbGVtZW50Ojphc3NvY2lhdGVkRm9udEVsZW1lbnQoKSBjb25zdAotewot
ICAgIGlmIChOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKHBhcmVu
dC0+aGFzVGFnTmFtZShmb250VGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
VkdGb250RWxlbWVudCo+KHBhcmVudCk7Ci0gICAgICAgIGVsc2UgaWYgKHBhcmVudC0+aGFzVGFn
TmFtZShkZWZzVGFnKSkgewotICAgICAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBleHRlcm5hbCBT
VkcgZm9udHMhCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHX0ZPTlRTKQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHRm9udEZhY2VFbGVtZW50LmgJKHJldmlzaW9uIDI5Njk4KQorKysgV2ViQ29yZS9zdmcv
U1ZHRm9udEZhY2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ1NTRm9udEZhY2VSdWxlOwogICAgIGNsYXNz
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotICAgIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsK
LSAgICBjbGFzcyBTaW1wbGVGb250RGF0YTsKICAgICBjbGFzcyBTVkdGb250RWxlbWVudDsKIAog
ICAgIGNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50IHsKQEAgLTQz
LDE4ICs0MSwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBp
bnNlcnRlZEludG9Eb2N1bWVudCgpOwogCiAgICAgICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0oKSBj
b25zdDsKKyAgICAgICAgaW50IHhIZWlnaHQoKSBjb25zdDsKKyAgICAgICAgZmxvYXQgaG9yaXpv
bnRhbE9yaWdpblgoKSBjb25zdDsKKyAgICAgICAgZmxvYXQgaG9yaXpvbnRhbE9yaWdpblkoKSBj
b25zdDsKKyAgICAgICAgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2VYKCkgY29uc3Q7CisgICAgICAg
IGZsb2F0IHZlcnRpY2FsT3JpZ2luWCgpIGNvbnN0OworICAgICAgICBmbG9hdCB2ZXJ0aWNhbE9y
aWdpblkoKSBjb25zdDsKKyAgICAgICAgZmxvYXQgdmVydGljYWxBZHZhbmNlWSgpIGNvbnN0Owor
ICAgICAgICBpbnQgYXNjZW50KCkgY29uc3Q7CisgICAgICAgIGludCBkZXNjZW50KCkgY29uc3Q7
CiAgICAgICAgIFN0cmluZyBmb250RmFtaWx5KCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCByZWJ1
aWxkRm9udEZhY2UoKTsKLSAgICAgICAgU2ltcGxlRm9udERhdGEqIGNyZWF0ZUZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotCi0gICAgICAgIC8vIElmIG91ciBwYXJlbnQg
ZWxlbWVudCBpcyA8Zm9udD4sIGl0IHdpbGwgYmUgcmV0dXJuZWQuICh0aGlzIGlzIHRoZSBjYXNl
IGZvciBhIFNWRyBGb250IGRlc2NyaWJlZCBpbiB0aGUgc2FtZSBkb2N1bWVudCkKLSAgICAgICAg
Ly8gT3RoZXJ3aGlzZSBpdCB3aWxsIHJldHVybiB0aGUgPGZvbnQ+IGVsZW1lbnQgdGhhdCBpcyBy
ZWZlcmVuY2VkIGJ5IHRoZSBmaXJzdCB2YWxpZCA8Zm9udC1mYWNlLXNyYz4gZWxlbWVudC4KICAg
ICAgICAgU1ZHRm9udEVsZW1lbnQqIGFzc29jaWF0ZWRGb250RWxlbWVudCgpIGNvbnN0OworICAg
ICAgICB2b2lkIHJlYnVpbGRGb250RmFjZSgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVm
UHRyPENTU0ZvbnRGYWNlUnVsZT4gbV9mb250RmFjZVJ1bGU7CiAgICAgICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZURlY2xhcmF0aW9uOworCisgICAgICAgIFJl
ZlB0cjxTVkdGb250RWxlbWVudD4gbV9mb250RWxlbWVudDsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAJKHJldmlzaW9uIDI5Njk4
KQorKysgV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KLSAgIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KIAogICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI2luY2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRm9u
dEZhY2VFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRm9udERhdGEuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCkBAIC05Myw2NyArOTQsNjkgQEAgc3RhdGljIGlubGluZSBQYXRoIHBhcnNl
UGF0aERhdGEoY29uc3QgQQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU1ZHR2x5cGhF
bGVtZW50Ojppbmhlcml0VW5zcGVjaWZpZWRBdHRyaWJ1dGVzKFNWR0dseXBoSWRlbnRpZmllciYg
aWRlbnRpZmllciwgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhKQordm9pZCBTVkdHbHlwaEVsZW1l
bnQ6OmluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVudGlmaWVyJiBpZGVu
dGlmaWVyLCBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEpCiB7CiAgICAgaWYgKGlkZW50
aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYID09IFNWR0dseXBoSWRlbnRpZmllcjo6aW5oZXJpdGVk
VmFsdWUoKSkKLSAgICAgICAgaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVggPSBzdmdGb250
RGF0YS0+aG9yaXpvbnRhbEFkdmFuY2VYOworICAgICAgICBpZGVudGlmaWVyLmhvcml6b250YWxB
ZHZhbmNlWCA9IHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2YW5jZVgoKTsKIAogICAgIGlmIChp
ZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9PSBTVkdHbHlwaElkZW50aWZpZXI6OmluaGVyaXRl
ZFZhbHVlKCkpCi0gICAgICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YID0gc3ZnRm9udERh
dGEtPnZlcnRpY2FsT3JpZ2luWDsKKyAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblgg
PSBzdmdGb250RGF0YS0+dmVydGljYWxPcmlnaW5YKCk7CiAKICAgICBpZiAoaWRlbnRpZmllci52
ZXJ0aWNhbE9yaWdpblkgPT0gU1ZHR2x5cGhJZGVudGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpKQot
ICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSA9IHN2Z0ZvbnREYXRhLT52ZXJ0aWNh
bE9yaWdpblk7CisgICAgICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5ZID0gc3ZnRm9udERh
dGEtPnZlcnRpY2FsT3JpZ2luWSgpOwogCiAgICAgaWYgKGlkZW50aWZpZXIudmVydGljYWxBZHZh
bmNlWSA9PSBTVkdHbHlwaElkZW50aWZpZXI6OmluaGVyaXRlZFZhbHVlKCkpCi0gICAgICAgIGlk
ZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSA9IHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbEFkdmFuY2VZ
OworICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5jZVkgPSBzdmdGb250RGF0YS0+dmVy
dGljYWxBZHZhbmNlWSgpOwogfQogCi1TVkdHbHlwaElkZW50aWZpZXIgU1ZHR2x5cGhFbGVtZW50
OjpidWlsZEdseXBoSWRlbnRpZmllcigpIGNvbnN0CitzdGF0aWMgaW5saW5lIGZsb2F0IHBhcnNl
U1ZHR2x5cGhBdHRyaWJ1dGUoY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29y
ZTo6UXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKLSAgICBTVkdHbHlwaElkZW50aWZpZXIgaWRlbnRp
ZmllcjsKLSAgICBpZGVudGlmaWVyLmdseXBoTmFtZSA9IGdldEF0dHJpYnV0ZShnbHlwaF9uYW1l
QXR0cik7Ci0gICAgaWRlbnRpZmllci5vcmllbnRhdGlvbiA9IHBhcnNlT3JpZW50YXRpb24oZ2V0
QXR0cmlidXRlKG9yaWVudGF0aW9uQXR0cikpOwotICAgIGlkZW50aWZpZXIuYXJhYmljRm9ybSA9
IHBhcnNlQXJhYmljRm9ybShnZXRBdHRyaWJ1dGUoYXJhYmljX2Zvcm1BdHRyKSk7Ci0gICAgaWRl
bnRpZmllci5wYXRoRGF0YSA9IHBhcnNlUGF0aERhdGEoZ2V0QXR0cmlidXRlKGRBdHRyKSk7Cisg
ICAgQXRvbWljU3RyaW5nIHZhbHVlKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lKSk7CisgICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFNWR0dseXBoSWRlbnRpZmllcjo6
aW5oZXJpdGVkVmFsdWUoKTsKIAotICAgIFN0cmluZyBsYW5ndWFnZSA9IGdldEF0dHJpYnV0ZShY
TUxOYW1lczo6bGFuZ0F0dHIpOwotICAgIGlmIChsYW5ndWFnZS5pc0VtcHR5KCkpIC8vIFNWRyBk
ZWZpbmVzIGEgbm9uLXhtbCBwcmVmaXhlZCAibGFuZyIgcHJvcGVydCBmb3IgPGdseXBoPiBpdCBz
ZWVtcy4KLSAgICAgICAgbGFuZ3VhZ2UgPSBnZXRBdHRyaWJ1dGUoImxhbmciKTsKLQotICAgIGlk
ZW50aWZpZXIubGFuZ3VhZ2VzID0gcGFyc2VEZWxpbWl0ZWRTdHJpbmcobGFuZ3VhZ2UsICcsJyk7
CisgICAgcmV0dXJuIHZhbHVlLnRvRmxvYXQoKTsKK30KIAorU1ZHR2x5cGhJZGVudGlmaWVyIFNW
R0dseXBoRWxlbWVudDo6YnVpbGRHZW5lcmljR2x5cGhJZGVudGlmaWVyKGNvbnN0IFNWR0VsZW1l
bnQqIGVsZW1lbnQpCit7CisgICAgU1ZHR2x5cGhJZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAg
aWRlbnRpZmllci5wYXRoRGF0YSA9IHBhcnNlUGF0aERhdGEoZWxlbWVudC0+Z2V0QXR0cmlidXRl
KGRBdHRyKSk7CisgCiAgICAgLy8gU3BlYzogVGhlIGhvcml6b250YWwgYWR2YW5jZSBhZnRlciBy
ZW5kZXJpbmcgdGhlIGdseXBoIGluIGhvcml6b250YWwgb3JpZW50YXRpb24uCiAgICAgLy8gSWYg
dGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIHRoZSBh
dHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhlCiAgICAgLy8gdmFsdWUgb2YgdGhlIGZvbnQncyBob3Jp
ei1hZHYteCBhdHRyaWJ1dGUuIEdseXBoIHdpZHRocyBhcmUgcmVxdWlyZWQgdG8gYmUgbm9uLW5l
Z2F0aXZlLAogICAgIC8vIGV2ZW4gaWYgdGhlIGdseXBoIGlzIHR5cGljYWxseSByZW5kZXJlZCBy
aWdodC10by1sZWZ0LCBhcyBpbiBIZWJyZXcgYW5kIEFyYWJpYyBzY3JpcHRzLgotICAgIGlmICho
YXNBdHRyaWJ1dGUoaG9yaXpfYWR2X3hBdHRyKSkKLSAgICAgICAgaWRlbnRpZmllci5ob3Jpem9u
dGFsQWR2YW5jZVggPSBnZXRBdHRyaWJ1dGUoaG9yaXpfYWR2X3hBdHRyKS50b0Zsb2F0KCk7Ci0g
ICAgZWxzZQotICAgICAgICBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCA9IFNWR0dseXBo
SWRlbnRpZmllcjo6aW5oZXJpdGVkVmFsdWUoKTsKKyAgICBpZGVudGlmaWVyLmhvcml6b250YWxB
ZHZhbmNlWCA9IHBhcnNlU1ZHR2x5cGhBdHRyaWJ1dGUoZWxlbWVudCwgaG9yaXpfYWR2X3hBdHRy
KTsKIAogICAgIC8vIFNwZWM6IFRoZSBYLWNvb3JkaW5hdGUgaW4gdGhlIGZvbnQgY29vcmRpbmF0
ZSBzeXN0ZW0gb2YgdGhlIG9yaWdpbiBvZiB0aGUgZ2x5cGggdG8gYmUKICAgICAvLyB1c2VkIHdo
ZW4gZHJhd2luZyB2ZXJ0aWNhbGx5IG9yaWVudGVkIHRleHQuIElmIHRoZSBhdHRyaWJ1dGUgaXMg
bm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdAogICAgIC8vIGlzIGFzIGlmIHRoZSBhdHRyaWJ1dGUg
d2VyZSBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBmb250J3MgdmVydC1vcmlnaW4teCBhdHRyaWJ1
dGUuCi0gICAgaWYgKGhhc0F0dHJpYnV0ZSh2ZXJ0X29yaWdpbl94QXR0cikpCi0gICAgICAgIGlk
ZW50aWZpZXIudmVydGljYWxPcmlnaW5YID0gZ2V0QXR0cmlidXRlKHZlcnRfb3JpZ2luX3hBdHRy
KS50b0Zsb2F0KCk7Ci0gICAgZWxzZQotICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2lu
WCA9IFNWR0dseXBoSWRlbnRpZmllcjo6aW5oZXJpdGVkVmFsdWUoKTsKKyAgICBpZGVudGlmaWVy
LnZlcnRpY2FsT3JpZ2luWCA9IHBhcnNlU1ZHR2x5cGhBdHRyaWJ1dGUoZWxlbWVudCwgdmVydF9v
cmlnaW5feEF0dHIpOwogCiAgICAgLy8gU3BlYzogVGhlIFktY29vcmRpbmF0ZSBpbiB0aGUgZm9u
dCBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgb3JpZ2luIG9mIGEgZ2x5cGggdG8gYmUKICAgICAv
LyB1c2VkIHdoZW4gZHJhd2luZyB2ZXJ0aWNhbGx5IG9yaWVudGVkIHRleHQuIElmIHRoZSBhdHRy
aWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdAogICAgIC8vIGlzIGFzIGlmIHRoZSBh
dHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBmb250J3MgdmVydC1vcmlnaW4t
eSBhdHRyaWJ1dGUuCi0gICAgaWYgKGhhc0F0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cikpCi0g
ICAgICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5ZID0gZ2V0QXR0cmlidXRlKHZlcnRfb3Jp
Z2luX3lBdHRyKS50b0Zsb2F0KCk7Ci0gICAgZWxzZQotICAgICAgICBpZGVudGlmaWVyLnZlcnRp
Y2FsT3JpZ2luWSA9IFNWR0dseXBoSWRlbnRpZmllcjo6aW5oZXJpdGVkVmFsdWUoKTsKKyAgICBp
ZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSA9IHBhcnNlU1ZHR2x5cGhBdHRyaWJ1dGUoZWxlbWVu
dCwgdmVydF9vcmlnaW5feUF0dHIpOwogCiAgICAgLy8gU3BlYzogVGhlIHZlcnRpY2FsIGFkdmFu
Y2UgYWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5cGggaW4gdmVydGljYWwgb3JpZW50YXRpb24uCiAgICAg
Ly8gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlm
IHRoZSBhdHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhlCiAgICAgLy8gdmFsdWUgb2YgdGhlIGZvbnQn
cyB2ZXJ0LWFkdi15IGF0dHJpYnV0ZS4KLSAgICBpZiAoaGFzQXR0cmlidXRlKHZlcnRfYWR2X3lB
dHRyKSkKLSAgICAgICAgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID0gZ2V0QXR0cmlidXRl
KHZlcnRfYWR2X3lBdHRyKS50b0Zsb2F0KCk7Ci0gICAgZWxzZQotICAgICAgICBpZGVudGlmaWVy
LnZlcnRpY2FsQWR2YW5jZVkgPSBTVkdHbHlwaElkZW50aWZpZXI6OmluaGVyaXRlZFZhbHVlKCk7
CisgICAgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID0gcGFyc2VTVkdHbHlwaEF0dHJpYnV0
ZShlbGVtZW50LCB2ZXJ0X2Fkdl95QXR0cik7CisKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30K
KworU1ZHR2x5cGhJZGVudGlmaWVyIFNWR0dseXBoRWxlbWVudDo6YnVpbGRHbHlwaElkZW50aWZp
ZXIoKSBjb25zdAoreworICAgIFNWR0dseXBoSWRlbnRpZmllciBpZGVudGlmaWVyKGJ1aWxkR2Vu
ZXJpY0dseXBoSWRlbnRpZmllcih0aGlzKSk7CisgICAgaWRlbnRpZmllci5nbHlwaE5hbWUgPSBn
ZXRBdHRyaWJ1dGUoZ2x5cGhfbmFtZUF0dHIpOworICAgIGlkZW50aWZpZXIub3JpZW50YXRpb24g
PSBwYXJzZU9yaWVudGF0aW9uKGdldEF0dHJpYnV0ZShvcmllbnRhdGlvbkF0dHIpKTsKKyAgICBp
ZGVudGlmaWVyLmFyYWJpY0Zvcm0gPSBwYXJzZUFyYWJpY0Zvcm0oZ2V0QXR0cmlidXRlKGFyYWJp
Y19mb3JtQXR0cikpOworCisgICAgU3RyaW5nIGxhbmd1YWdlID0gZ2V0QXR0cmlidXRlKGxhbmdB
dHRyKTsKKyAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkKKyAgICAgICAgaWRlbnRpZmllci5s
YW5ndWFnZXMgPSBwYXJzZURlbGltaXRlZFN0cmluZyhsYW5ndWFnZSwgJywnKTsKIAogICAgIHJl
dHVybiBpZGVudGlmaWVyOwogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmgJKHJldmlzaW9uIDI5
Njk4KQorKysgV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3MgQXRvbWlj
U3RyaW5nOwogICAgIHN0cnVjdCBTVkdGb250RGF0YTsKIAogICAgIC8vIERlc2NyaWJlIGEgU1ZH
IDxnbHlwaD4gZWxlbWVudApAQCAtMTA2LDkgKzEwNywxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyBy
ZXR1cm4gZmFsc2U7IH0KIAogICAgICAgICBTVkdHbHlwaElkZW50aWZpZXIgYnVpbGRHbHlwaElk
ZW50aWZpZXIoKSBjb25zdDsKLSAgICAgICAgc3RhdGljIHZvaWQgaW5oZXJpdFVuc3BlY2lmaWVk
QXR0cmlidXRlcyhTVkdHbHlwaElkZW50aWZpZXImLCBTVkdGb250RGF0YSopOwotICAgIH07CiAK
KyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgU1ZHRm9udAorICAgICAgICBzdGF0
aWMgdm9pZCBpbmhlcml0VW5zcGVjaWZpZWRBdHRyaWJ1dGVzKFNWR0dseXBoSWRlbnRpZmllciYs
IGNvbnN0IFNWR0ZvbnREYXRhKik7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcXVlcnlTVkdGb250
TGFuZ3VhZ2UoY29uc3QgU1ZHRWxlbWVudCopOworCisgICAgICAgIC8vIEhlbHBlciBmdW5jdGlv
biBzaGFyZWQgYmV0d2VlbiBTVkdHbHlwaEVsZW1lbnQgJiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50
CisgICAgICAgIHN0YXRpYyBTVkdHbHlwaElkZW50aWZpZXIgYnVpbGRHZW5lcmljR2x5cGhJZGVu
dGlmaWVyKGNvbnN0IFNWR0VsZW1lbnQqKTsKKyAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR01pc3NpbmdHbHlwaEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR01pc3NpbmdHbHlwaEVsZW1lbnQuY3BwCShyZXZpc2lv
biAyOTY5OCkKKysrIFdlYkNvcmUvc3ZnL1NWR01pc3NpbmdHbHlwaEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiwxMiArMjIsOCBAQAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAjaW5j
bHVkZSAiU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7Ci0KIFNW
R01pc3NpbmdHbHlwaEVsZW1lbnQ6OlNWR01pc3NpbmdHbHlwaEVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxlZEVsZW1lbnQo
dGFnTmFtZSwgZG9jKQogewpJbmRleDogV2ViQ29yZS9zdmcvc3ZnYXR0cnMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvc3ZnYXR0cnMuaW4JKHJldmlzaW9uIDI5Njk4KQorKysgV2ViQ29y
ZS9zdmcvc3ZnYXR0cnMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsNyBAQCBrZXJu
aW5nCiBrZXlQb2ludHMKIGtleVNwbGluZXMKIGtleVRpbWVzCitsYW5nCiBsZW5ndGhBZGp1c3QK
IGxldHRlci1zcGFjaW5nCiBsaWdodGluZy1jb2xvcgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjk2OTgp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBA
QAorMjAwOC0wMS0yMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8emltbWVybWFubkBrZGUub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMuCisKKyAgICAgICAgVXBkYXRlIGxheW91dCB0ZXN0
IHJlc3VsdHMgYWZ0ZXIgYWRkaW5nIG1pc3NpbmctZ2x5cGggc3VwcG9ydC4KKyAgICAgICAgQWRk
IG5ldyBsYXlvdXQgdGVzdCBzdmcvY3VzdG9tL2dseXBoLXNlbGVjdGlvbi1sYW5nLWF0dHJpYnV0
ZS5zdmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2FuaW1hdGUt
ZWxlbS0yNC10LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1T
VkctMS4xL2ZvbnRzLWVsZW0tMDEtdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTAyLXQtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wNS10LWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0t
MDYtdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEu
MS9mb250cy1nbHlwaC0wMi10LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
c3ZnL1czQy1TVkctMS4xL2ZvbnRzLWdseXBoLTAzLXQtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1nbHlwaC0wMy10LWV4cGVj
dGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWds
eXBoLTAzLXQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNW
Ry0xLjEvZm9udHMtZ2x5cGgtMDQtdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1rZXJuLTAxLXQtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvbWFza2luZy1tYXNrLTAxLWItZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvcHNlcnZlcnMt
Z3JhZC0wOC1iLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcv
VzNDLVNWRy0xLjEvcHNlcnZlcnMtZ3JhZC0wOC1iLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL3BzZXJ2ZXJzLWdyYWQtMDgtYi1leHBlY3RlZC50
eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9yZW5kZXItZWxlbXMt
MDYtdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEu
MS9yZW5kZXItZWxlbXMtMDctdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFj
L3N2Zy9XM0MtU1ZHLTEuMS9yZW5kZXItZWxlbXMtMDgtdC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9yZW5kZXItZ3JvdXBzLTAxLWItZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvcmVuZGVyLWdy
b3Vwcy0wMy10LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1T
VkctMS4xL3RleHQtYWx0Z2x5cGgtMDEtYi1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDQtdC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDUtdC1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQt
MDYtdC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1T
VkctMS4xL3RleHQtdGV4dC0wNi10LWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvc3ZnL1czQy1TVkctMS4xL3RleHQtdGV4dC0wNi10LWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvc3ZnL2JhdGlrL3RleHQvdGV4dEVmZmVjdC1leHBlY3RlZC5jaGVja3N1
bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2JhdGlrL3RleHQvdGV4dEVmZmVjdC1leHBl
Y3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9iYXRpay90ZXh0L3RleHRFZmZl
Y3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvYmF0aWsvdGV4dC90
ZXh0RWZmZWN0My1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3Zn
L2JhdGlrL3RleHQvdGV4dEVmZmVjdDMtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9zdmcvYmF0aWsvdGV4dC90ZXh0RWZmZWN0My1leHBlY3RlZC50eHQ6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL3N2Zy9iYXRpay90ZXh0L3RleHRQb3NpdGlvbjItZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvY3VzdG9tL2RvbWluYW50LWJhc2VsaW5lLWhhbmdp
bmctZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20v
ZG9taW5hbnQtYmFzZWxpbmUtaGFuZ2luZy1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL3N2Zy9jdXN0b20vZ2x5cGgtc2VsZWN0aW9uLWxhbmctYXR0cmlidXRlLWV4cGVjdGVk
LmNoZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS9nbHlw
aC1zZWxlY3Rpb24tbGFuZy1hdHRyaWJ1dGUtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS9nbHlwaC1zZWxlY3Rpb24tbGFuZy1hdHRyaWJ1dGUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS9z
Y3JvbGxpbmctZW1iZWRkZWQtc3ZnLWZpbGUtaW1hZ2UtcmVwYWludC1wcm9ibGVtLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS91c2Utb24tZy1jb250YWlu
aW5nLWZvcmVpZ25PYmplY3QtYW5kLWltYWdlLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9zdmcvY3VzdG9tL3VzZS1vbi1nLWNvbnRhaW5pbmctZm9yZWlnbk9iamVj
dC1hbmQtaW1hZ2UtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvaGl4
aWUvbWl4ZWQvMDA4LWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9z
dmcvaGl4aWUvbWl4ZWQvMDA4LWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
c3ZnL2hpeGllL21peGVkLzAwOS1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvc3ZnL2hpeGllL21peGVkLzAwOS1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL3N2Zy9oaXhpZS92aWV3Ym94L3ByZXNlcnZlQXNwZWN0UmF0aW8vMDAxLWV4cGVjdGVk
LmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvaGl4aWUvdmlld2JveC9wcmVz
ZXJ2ZUFzcGVjdFJhdGlvLzAwMS1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFj
L3N2Zy90ZXh0L3RleHQtYWx0Z2x5cGgtMDEtYi1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC1hbHRnbHlwaC0wMS1iLWV4cGVjdGVkLnBuZzoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC1hbHRnbHlwaC0wMS1iLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC10ZXh0LTA0LXQt
ZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQt
dGV4dC0wNC10LWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQv
dGV4dC10ZXh0LTA0LXQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcv
dGV4dC90ZXh0LXRleHQtMDUtdC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvc3ZnL3RleHQvdGV4dC10ZXh0LTA1LXQtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9zdmcvdGV4dC90ZXh0LXRleHQtMDUtdC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQtdGV4dC0wNi10LWV4cGVjdGVkLmNoZWNrc3Vt
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvdGV4dC90ZXh0LXRleHQtMDYtdC1leHBlY3Rl
ZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQtdGV4dC0wNi10LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdmcvY3VzdG9tL2dseXBoLXNlbGVjdGlvbi1sYW5nLWF0
dHJpYnV0ZS5zdmc6IEFkZGVkLgorCiAyMDA4LTAxLTIxICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAKICAgICAgICAgUnViYmVyIHN0YW1wZWQgYnkgT2xpdmVyLgpJ
bmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9nbHlwaC1zZWxlY3Rpb24tbGFuZy1hdHRyaWJ1
dGUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vZ2x5cGgtc2VsZWN0
aW9uLWxhbmctYXR0cmlidXRlLnN2ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9j
dXN0b20vZ2x5cGgtc2VsZWN0aW9uLWxhbmctYXR0cmlidXRlLnN2ZwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxz
dmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTAwJSIgaGVpZ2h0
PSIxMDAlIiB2aWV3Qm94PSIwIDAgNDgwIDM2MCI+Cis8ZGVmcz4KKyAgICA8Zm9udCBob3Jpei1h
ZHYteD0iNTAwIj4KKyAgICAgICAgPGZvbnQtZmFjZSBmb250LWZhbWlseT0iU1ZHRm9udCIgdW5p
dHMtcGVyLWVtPSIxMDAwIiBhc2NlbnQ9IjgwMCIgZGVzY2VudD0iMjAwIiBhbHBoYWJldGljPSIy
MDAiLz4KKyAgICAgICAgPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUwMCIgZD0iTTAgMEw1
MDAgMEw1MDAgMTAwMEwwIDEwMDBNNTAgNTBMNTAgOTUwTDQ1MCA5NTBMNDUwIDUwWiIvPgorICAg
ICAgICA8Z2x5cGggdW5pY29kZT0iICIgZ2x5cGgtbmFtZT0ic3BhY2UiLz4KKyAgICAgICAgPGds
eXBoIHVuaWNvZGU9ImEiIGdseXBoLW5hbWU9InVwd2FyZC10cmlhbmdsZSIgbGFuZz0iZW4iIGQ9
Ik0wIDBMNTAwIDBMMjUwIDkwMFoiLz4KKyAgICAgICAgPGdseXBoIHVuaWNvZGU9ImEiIGdseXBo
LW5hbWU9InNxdWFyZSIgbGFuZz0iZnIiIGQ9Ik0wIDI1MEw1MDAgMjUwTDUwMCA3NTBMMCA3NTBa
Ii8+CisgICAgPC9mb250PgorCisgICAgPGZvbnQgaG9yaXotYWR2LXg9IjUwMCI+CisgICAgICAg
IDxmb250LWZhY2UgZm9udC1mYW1pbHk9IlNWR0ZvbnQxIiB1bml0cy1wZXItZW09IjEwMDAiIGFz
Y2VudD0iODAwIiBkZXNjZW50PSIyMDAiIGFscGhhYmV0aWM9IjIwMCIvPgorICAgICAgICA8bWlz
c2luZy1nbHlwaCBob3Jpei1hZHYteD0iNTAwIiBkPSJNMCAwTDUwMCAwTDUwMCAxMDAwTDAgMTAw
ME01MCA1MEw1MCA5NTBMNDUwIDk1MEw0NTAgNTBaIi8+CisgICAgICAgIDxnbHlwaCB1bmljb2Rl
PSIgIiBnbHlwaC1uYW1lPSJzcGFjZSIvPgorICAgICAgICA8Z2x5cGggdW5pY29kZT0iYSIgZ2x5
cGgtbmFtZT0idXB3YXJkLXRyaWFuZ2xlIiB4bWw6bGFuZz0iZW4iIGQ9Ik0wIDBMNTAwIDBMMjUw
IDkwMFoiLz4KKyAgICAgICAgPGdseXBoIHVuaWNvZGU9ImEiIGdseXBoLW5hbWU9InNxdWFyZSIg
eG1sOmxhbmc9ImZyIiBkPSJNMCAyNTBMNTAwIDI1MEw1MDAgNzUwTDAgNzUwWiIvPgorICAgIDwv
Zm9udD4KKzwvZGVmcz4KKworPGcgZm9udC1mYW1pbHk9IlNWR0ZvbnQiIGZvbnQtc2l6ZT0iNTAi
PgorICAgIDwhLS0gU2hvdWxkIHByb2R1Y2UgYW4gdXB3YXJkIHBvaW50aW5nIHRyaWFuZ2xlIC0t
PgorICAgIDx0ZXh0IHg9IjUwIiB5PSI1MCIgbGFuZz0iZnIiIHhtbDpsYW5nPSJlbiI+YTwvdGV4
dD4KKworICAgIDwhLS0gU2hvdWxkIHByb2R1Y2UgYSBzcXVhcmUgLS0+CisgICAgPHRleHQgeD0i
NTAiIHk9IjEyMCIgbGFuZz0iZW4iIHhtbDpsYW5nPSJmciI+YTwvdGV4dD4KKworICAgIDwhLS0g
U2hvdWxkIHByb2R1Y2UgbWlzc2luZyBnbHlwaCAtLT4KKyAgICA8dGV4dCB4PSI1MCIgeT0iMTkw
IiBsYW5nPSJlbiI+YTwvdGV4dD4KKworICAgIDwhLS0gU2hvdWxkIHByb2R1Y2UgbWlzc2luZyBn
bHlwaCAtLT4KKyAgICA8dGV4dCB4PSI1MCIgeT0iMjYwIiBsYW5nPSJmciI+YTwvdGV4dD4KKwor
ICAgIDwhLS0gU2hvdWxkIHByb2R1Y2UgbWlzc2luZyBnbHlwaCAtLT4KKyAgICA8dGV4dCB4PSI1
MCIgeT0iMzMwIiBsYW5nPSIiIHhtbDpsYW5nPSIiPmE8L3RleHQ+Cis8L2c+CisKKzxnIGZvbnQt
ZmFtaWx5PSJTVkdGb250MSIgZm9udC1zaXplPSI1MCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAw
LCAwKSI+CisgICAgPCEtLSBTaG91bGQgcHJvZHVjZSBhbiB1cHdhcmQgcG9pbnRpbmcgdHJpYW5n
bGUgLS0+CisgICAgPHRleHQgeD0iNTAiIHk9IjUwIiBsYW5nPSJmciIgeG1sOmxhbmc9ImVuIj5h
PC90ZXh0PgorCisgICAgPCEtLSBTaG91bGQgcHJvZHVjZSBhbiB1cHdhcmQgcG9pbnRpbmcgdHJp
YW5nbGUgLS0+CisgICAgPHRleHQgeD0iNTAiIHk9IjEyMCIgbGFuZz0iZW4iIHhtbDpsYW5nPSJm
ciI+YTwvdGV4dD4KKworICAgIDwhLS0gU2hvdWxkIHByb2R1Y2UgYW4gdXB3YXJkIHBvaW50aW5n
IHRyaWFuZ2xlIC0tPgorICAgIDx0ZXh0IHg9IjUwIiB5PSIxOTAiIGxhbmc9ImVuIj5hPC90ZXh0
PgorCisgICAgPCEtLSBTaG91bGQgcHJvZHVjZSBhbiB1cHdhcmQgcG9pbnRpbmcgdHJpYW5nbGUg
LS0+CisgICAgPHRleHQgeD0iNTAiIHk9IjI2MCIgbGFuZz0iZnIiPmE8L3RleHQ+CisKKyAgICA8
IS0tIFNob3VsZCBwcm9kdWNlIGFuIHVwd2FyZCBwb2ludGluZyB0cmlhbmdsZSAtLT4KKyAgICA8
dGV4dCB4PSI1MCIgeT0iMzMwIiBsYW5nPSIiIHhtbDpsYW5nPSIiPmE8L3RleHQ+Cis8L2c+CisK
KzxyZWN0IHg9IjEiIHk9IjEiIHdpZHRoPSI0NzgiIGhlaWdodD0iMzU4IiBmaWxsPSJub25lIiBz
dHJva2U9IiMwMDAwMDAiLz4KKzwvc3ZnPgo=
</data>
<flag name="review"
          id="8133"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>