<?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>16980</bug_id>
          
          <creation_ts>2008-01-22 18:08:56 -0800</creation_ts>
          <short_desc>Support external SVG Fonts</short_desc>
          <delta_ts>2013-06-24 01:11:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>hyatt</cc>
    
    <cc>mitz</cc>
    
    <cc>oliver</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>67999</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-22 18:08:56 -0800</bug_when>
    <thetext>SVG allows to reference external fonts using the CSS @font-face rule and using svg style with the &lt;font-face&gt; element. WebKit doesn&apos;t support it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68082</commentid>
    <comment_count>1</comment_count>
      <attachid>18631</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-23 17:39:36 -0800</bug_when>
    <thetext>Created attachment 18631
Initial patch

No regressions. Remarkable small patch for such a nice feature :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68099</commentid>
    <comment_count>2</comment_count>
      <attachid>18631</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-24 00:32:59 -0800</bug_when>
    <thetext>Comment on attachment 18631
Initial patch

Ok a few issues with this first patch:

Is it possible for m_fontElement not to be reset if a SVGFontFace element was moved out of a &lt;font&gt; element between rebuildFontFace() calls?  I know that&apos;s an edge case, but I wouldn&apos;t want it to not get reset and us to crash or some other strangeness.

You probably should use KURL for this url parsing:
+                // URL scheme example: &quot;file:///Users/nikoz/WebKit/LayoutTests/svg/W3C-SVG-1.1/resources/ext-TestComic.svg#Font&quot;
+                int nameStart = fontName.find(&apos;#&apos;);
+                if (nameStart != -1)
+                    fontName = fontName.substring(nameStart + 1, fontName.length() - (nameStart + 1));

Are there obscure cases where we would need to decode the anchor before performing lookup in the remote document?

Blindly adopting nodes from some external document into this one seems like a bad idea.  What if those nodes were &lt;script&gt; nodes?  I&apos;m not sure if scripts in shadow trees run... i would hope not.  It&apos;s not entirely clear to me why you&apos;d want to adopt the font element into the document anyway (instead of just holding it in the cache).  What happens when an SVG font gets reused from the cache?  Does it work on reuse?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68100</commentid>
    <comment_count>3</comment_count>
      <attachid>18631</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-24 00:33:00 -0800</bug_when>
    <thetext>Comment on attachment 18631
Initial patch

Ok a few issues with this first patch:

Is it possible for m_fontElement not to be reset if a SVGFontFace element was moved out of a &lt;font&gt; element between rebuildFontFace() calls?  I know that&apos;s an edge case, but I wouldn&apos;t want it to not get reset and us to crash or some other strangeness.

You probably should use KURL for this url parsing:
+                // URL scheme example: &quot;file:///Users/nikoz/WebKit/LayoutTests/svg/W3C-SVG-1.1/resources/ext-TestComic.svg#Font&quot;
+                int nameStart = fontName.find(&apos;#&apos;);
+                if (nameStart != -1)
+                    fontName = fontName.substring(nameStart + 1, fontName.length() - (nameStart + 1));

Are there obscure cases where we would need to decode the anchor before performing lookup in the remote document?

Blindly adopting nodes from some external document into this one seems like a bad idea.  What if those nodes were &lt;script&gt; nodes?  I&apos;m not sure if scripts in shadow trees run... i would hope not.  It&apos;s not entirely clear to me why you&apos;d want to adopt the font element into the document anyway (instead of just holding it in the cache).  What happens when an SVG font gets reused from the cache?  Does it work on reuse?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68110</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-24 05:44:01 -0800</bug_when>
    <thetext>Hey Eric,

thanks for a first review.
 
&gt; Is it possible for m_fontElement not to be reset if a SVGFontFace element was
&gt; moved out of a &lt;font&gt; element between rebuildFontFace() calls?  I know that&apos;s
&gt; an edge case, but I wouldn&apos;t want it to not get reset and us to crash or some
&gt; other strangeness.
Of course this is a demoniac case, but I agree it should work. The easiest way to fix is to reset m_fontElement to 0, if parentNode()-&gt;hasTagName(fontTag) doesn&apos;t hold true anymore. I&apos;ll fix that.

&gt; You probably should use KURL for this url parsing:
&gt; +                // URL scheme example:
&gt; &quot;file:///Users/nikoz/WebKit/LayoutTests/svg/W3C-SVG-1.1/resources/ext-TestComic.svg#Font&quot;
&gt; +                int nameStart = fontName.find(&apos;#&apos;);
&gt; +                if (nameStart != -1)
&gt; +                    fontName = fontName.substring(nameStart + 1,
&gt; fontName.length() - (nameStart + 1));
&gt; 
&gt; Are there obscure cases where we would need to decode the anchor before
&gt; performing lookup in the remote document?

a) KURL sucks. It&apos;s all DeprecatdString based.
b) KURL does the same.
c) I&apos;ll use &quot;String SVGURIReference::getTarget(const String&amp; url)&quot;, it does what I want.


&gt; Blindly adopting nodes from some external document into this one seems like a
&gt; bad idea.  What if those nodes were &lt;script&gt; nodes?  I&apos;m not sure if scripts in
&gt; shadow trees run... i would hope not.  It&apos;s not entirely clear to me why you&apos;d
&gt; want to adopt the font element into the document anyway (instead of just
&gt; holding it in the cache).  What happens when an SVG font gets reused from the
&gt; cache?  Does it work on reuse?
erm, I&apos;m adopting a &lt;font&gt; element, not more. &lt;scripts&gt; are never run, this is a shadowed tree. You&apos;re wondering why I&apos;m releasing the &quot;m_externalSVGDocument&quot; and instead adopt the nodes into our document, and add it there.... that&apos;s because CachedFont is resused. I&apos;m just noticing that for custom fonts, the parsed data is never released. So indeed I&apos;m doing too much work. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68143</commentid>
    <comment_count>5</comment_count>
      <attachid>18648</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-24 16:01:32 -0800</bug_when>
    <thetext>Created attachment 18648
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68358</commentid>
    <comment_count>6</comment_count>
      <attachid>18648</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-27 04:46:13 -0800</bug_when>
    <thetext>Comment on attachment 18648
Updated patch

Okay this looks fine to me, but i&apos;d like mitz and/or hyatt to review given it touches font-fu.

I&apos;d also like a layout test for svg font in html :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68384</commentid>
    <comment_count>7</comment_count>
      <attachid>18648</attachid>
    <who name="">mitz</who>
    <bug_when>2008-01-27 14:25:48 -0800</bug_when>
    <thetext>Comment on attachment 18648
Updated patch

+    m_externalSVGDocument = 0; // Release document

You should not need to do that.

Why is
+bool CachedFont::ensureSVGFontData()
always returning true?

+RefPtr&lt;SVGElement&gt; CachedFont::extractFontFromSVGData(const String&amp; fontName) const

Not sure why this is returning a RefPtr and using a RefPtr&lt;Node&gt; internally. Using raw pointers seems safe and more efficient. I also don&apos;t understand &quot;extract&quot; in the name. I think &quot;getSVGFontByID&quot; is more clear (and then you can omit the parameter name in the declaration).

+FontPlatformData CachedFont::platformDataFromSVGData(float size, bool bold, bool italic)

Is that function really necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68386</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-27 15:15:38 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 18648 [edit])
&gt; +    m_externalSVGDocument = 0; // Release document
&gt; 
&gt; You should not need to do that.
Right, fixed.

&gt; 
&gt; Why is
&gt; +bool CachedFont::ensureSVGFontData()
&gt; always returning true?
Mistake, fixed.
 
&gt; +RefPtr&lt;SVGElement&gt; CachedFont::extractFontFromSVGData(const String&amp; fontName)
&gt; const
&gt; 
&gt; Not sure why this is returning a RefPtr and using a RefPtr&lt;Node&gt; internally.
&gt; Using raw pointers seems safe and more efficient. I also don&apos;t understand
&gt; &quot;extract&quot; in the name. I think &quot;getSVGFontByID&quot; is more clear (and then you can
&gt; omit the parameter name in the declaration).
Two good ideas, fixed.
 
&gt; +FontPlatformData CachedFont::platformDataFromSVGData(float size, bool bold,
&gt; bool italic)
&gt; 
&gt; Is that function really necessary?
Nope, integrated within platformDataFromCustomData.
Uploading new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68388</commentid>
    <comment_count>9</comment_count>
      <attachid>18726</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-27 15:20:00 -0800</bug_when>
    <thetext>Created attachment 18726
Updated patch

Incorporated Dan&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68428</commentid>
    <comment_count>10</comment_count>
      <attachid>18726</attachid>
    <who name="">mitz</who>
    <bug_when>2008-01-28 06:50:13 -0800</bug_when>
    <thetext>Comment on attachment 18726
Updated patch

+        RefPtr&lt;Node&gt; node = list-&gt;item(i);

I still don&apos;t see why you need to ref and deref each node here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68430</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-28 07:28:28 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 18726 [edit])
&gt; +        RefPtr&lt;Node&gt; node = list-&gt;item(i);
&gt; 
&gt; I still don&apos;t see why you need to ref and deref each node here.
Leftover from times where I had to clone these nodes. Fixed.
Won&apos;t upload a patch though as it&apos;s just s/RefPtr&lt;Node&gt;/Node*/

Commitable now?

Greetings,
Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68484</commentid>
    <comment_count>12</comment_count>
      <attachid>18726</attachid>
    <who name="">mitz</who>
    <bug_when>2008-01-28 13:54:54 -0800</bug_when>
    <thetext>Comment on attachment 18726
Updated patch

(In reply to comment #11)
&gt; Commitable now?

Two other issues that I have noticed:

+#include &quot;CString.h&quot;

Is that needed?

+    return m_fontData-&gt;fontPlatformData((int) ceilf(size), bold, italic);

Should be a static_cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68485</commentid>
    <comment_count>13</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-01-28 13:55:38 -0800</bug_when>
    <thetext>Oliver or Eric should review the SVG code in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68486</commentid>
    <comment_count>14</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-28 14:00:09 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 18726 [edit])
&gt; (In reply to comment #11)
&gt; &gt; Commitable now?
&gt; 
&gt; Two other issues that I have noticed:
&gt; 
&gt; +#include &quot;CString.h&quot;
&gt; 
&gt; Is that needed?
Leftover from debugging, already removed it locally.
 
&gt; +    return m_fontData-&gt;fontPlatformData((int) ceilf(size), bold, italic);
&gt; 
&gt; Should be a static_cast.
Okay. Changing.

Do I need to upload a new final patch, or is it okay as is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68488</commentid>
    <comment_count>15</comment_count>
      <attachid>18742</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-28 14:08:21 -0800</bug_when>
    <thetext>Created attachment 18742
Final patch

Decided to upload a final version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68494</commentid>
    <comment_count>16</comment_count>
      <attachid>18742</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-28 15:05:24 -0800</bug_when>
    <thetext>Comment on attachment 18742
Final patch

Ok, this looks great.  We talked about making getSVGFontById actually return an SVGFontElement (I think you&apos;ve already done that locally).

I also think that we need some http tests for external fonts.  We could just file another bug about those, but it would be nice to land one or two via this patch.  Things to test:

1.  When a font is sent with the wrong mime type, do we handle it? (we currently ignore the mimetype and parse it anyway)
2.  When the font has a 404 doe we use it anyway (currently we have this bug throughout other parts of WebKit, it&apos;s OK not to fix this, but we should at least file a bug about it).
3.  If the font has an XML parse error what happens?  If the error is encountered after the &lt;font&gt; declaration, do we still treat the font as valid?  (I believe we do with your current code).

Those 3 need at least bugs, and preferably test cases.

Otherwise this looks totally ready to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68495</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-28 15:07:08 -0800</bug_when>
    <thetext>Case 3 is particularly interesting if the parse error happens after a few of the &lt;glyphs&gt; have been parsed, but not all of them. I bet browsers would disagree there.

Then again, I think Opera is the only other browser to support SVG Fonts, so none of these are real compat issues (yet).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68496</commentid>
    <comment_count>18</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-01-28 15:38:59 -0800</bug_when>
    <thetext>Thanks for review. Landed in r29839.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68531</commentid>
    <comment_count>19</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-01-28 22:44:25 -0800</bug_when>
    <thetext>Why is this bug still open?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68532</commentid>
    <comment_count>20</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-28 22:46:02 -0800</bug_when>
    <thetext>Because niko forgot to close it?

Niko fixed in r29839</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18631</attachid>
            <date>2008-01-23 17:39:36 -0800</date>
            <delta_ts>2008-01-24 16:01:32 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>SVGExternalFonts.diff</filename>
            <type>text/plain</type>
            <size>28504</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI5NzUzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDgtMDEtMjMgIE5pa29sYXMgWmltbWVybWFu
biAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVcGRhdGUgbGF5b3V0IHRlc3RzIGFmdGVyIGFkZGluZyBleHRlcm5h
bCBTVkcgRm9udHMgc3VwcG9ydC4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNW
Ry0xLjEvZm9udHMtZWxlbS0wMy1iLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wMy1iLWV4cGVjdGVkLnBuZzoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDMtYi1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1l
bGVtLTA0LWItZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9X
M0MtU1ZHLTEuMS9mb250cy1lbGVtLTA0LWItZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wNC1iLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDctYi1leHBl
Y3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2Zv
bnRzLWVsZW0tMDctYi1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9X
M0MtU1ZHLTEuMS9mb250cy1lbGVtLTA3LWItZXhwZWN0ZWQudHh0OgorCiAyMDA4LTAxLTIzICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24gMjk3
NTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NDEsNiArNzQxLDExIEBACiAKIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25z
dCBUZXh0UnVuJiBydW4sIGludCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAog
eworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgaWYgKHByaW1hcnlGb250KCktPmlzU1ZHRm9u
dCgpKQorICAgICAgICByZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250
KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworI2VuZGlmCisKICAgICBpZiAoY2FuVXNl
R2x5cGhDYWNoZShydW4pKQogICAgICAgICByZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1w
bGVUZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogICAgIHJldHVybiBvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDI5NzUzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAs
NyBAQAogICAgIHZvaWQgZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
ICAgICBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mKSBjb25zdDsK
ICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEludFBvaW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Owor
ICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1
biYsIGludCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CiAjZW5k
aWYKICAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9u
dERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDI5NzUz
KQorKysgV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjk3LDMxICsyOTcsMjIgQEAKICAgICByZXR1cm4gbV9mb250RWxlbWVudC5nZXQoKTsKIH0K
IAordm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OmFzc29jaWF0ZVdpdGhGb250RWxlbWVudChTVkdG
b250RWxlbWVudCogZm9udEVsZW1lbnQpCit7CisgICAgbV9mb250RWxlbWVudCA9IGZvbnRFbGVt
ZW50OworfQorCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBTVkdGb250RmFjZUVsZW1lbnQ6OmFzc29j
aWF0ZWRGb250RmFjZVNyY1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZURlY2xh
cmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU19QUk9QX1NSQyk7Cit9CisKIHZvaWQgU1ZH
Rm9udEZhY2VFbGVtZW50OjpyZWJ1aWxkRm9udEZhY2UoKQogewogICAgIC8vIElnbm9yZSBjaGFu
Z2VzIHVudGlsIHdlIGxpdmUgaW4gdGhlIHRyZWUKICAgICBpZiAoIXBhcmVudE5vZGUoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgbG9jYWwgU1ZHIGZv
bnRzICh0aG9zZSB3aGljaCBoYXZlIGEgPGZvbnQ+IHBhcmVudCwgYW5kIGFyZSBvbmx5IHVzZWQg
d2l0aGluIHRoZSBkb2N1bWVudCkKLSAgICBpZiAocGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUo
KS0+aGFzVGFnTmFtZShmb250VGFnKSkgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBs
aXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKLQotICAgICAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNW
YWx1ZT4gc3JjID0gbmV3IENTU0ZvbnRGYWNlU3JjVmFsdWUoZm9udEZhbWlseSgpLCB0cnVlIC8q
IGlzTG9jYWwgKi8pOwotICAgICAgICBzcmMtPnNldFNWR0ZvbnRGYWNlRWxlbWVudCh0aGlzKTsK
LSAgICAgICAgbGlzdC0+YXBwZW5kKHNyYyk7Ci0KLSAgICAgICAgQ1NTUHJvcGVydHkgc3JjUHJv
cGVydHkoQ1NTX1BST1BfU1JDLCBsaXN0KTsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkqIHNy
Y1Byb3BlcnR5UmVmID0gJnNyY1Byb3BlcnR5OwotICAgICAgICBtX3N0eWxlRGVjbGFyYXRpb24t
PmFkZFBhcnNlZFByb3BlcnRpZXMoJnNyY1Byb3BlcnR5UmVmLCAxKTsKLQotICAgICAgICBtX2Zv
bnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRm9udEVsZW1lbnQqPihwYXJlbnROb2RlKCkpOwot
ICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBUT0RPOiBFeHRlcm5hbCBTVkcgZm9udHMgc3VwcG9ydCAtIHJl
IHVzZSBleGlzdGluZyAiY3VzdG9tIGZvbnQiIGhhbmRsaW5nIGxvZ2ljLgotCiAgICAgLy8gd2Ug
Y3VycmVudGx5IGlnbm9yZSBhbGwgYnV0IHRoZSBmaXJzdCBzcmMgZWxlbWVudCwgYWx0ZXJuYXRp
dmVseSB3ZSBjb3VsZCBjb25jYXQgdGhlbQogICAgIFNWR0ZvbnRGYWNlU3JjRWxlbWVudCogc3Jj
RWxlbWVudCA9IDA7CiAgICAgU1ZHRGVmaW5pdGlvblNyY0VsZW1lbnQqIGRlZmluaXRpb25TcmMg
PSAwOwpAQCAtMzM5LDE1ICszMzAsMzkgQEAKICAgICAgICAgbV9zdHlsZURlY2xhcmF0aW9uLT5z
ZXRQcm9wZXJ0eShDU1NfUFJPUF9ERUZJTklUSU9OX1NSQywgZGVmaW5pdGlvblNyYy0+Z2V0QXR0
cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKSwgZmFsc2UpOwogI2VuZGlmCiAKLSAgICBpZiAo
c3JjRWxlbWVudCkgewotICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGNsYXNzIChvdGhlciB0
aGFuIENTU1BhcnNlcikgdG8gY3JlYXRlIENTU1ZhbHVlIG9iamVjdHMgYW5kIHNldCB0aGVtIG9u
IHRoZSBDU1NTdHlsZURlY2xhcmF0aW9uIG1hbnVhbGx5Ci0gICAgICAgIC8vIHdlIHVzZSB0aGUg
YWRkUGFyc2VkUHJvcGVydGllcyBtZXRob2QsIGFuZCBmYWtlIGhhdmluZyBhbiBhcnJheSBvZiBD
U1NQcm9wZXJ0eSBwb2ludGVycy4KLSAgICAgICAgQ1NTUHJvcGVydHkgc3JjUHJvcGVydHkoQ1NT
X1BST1BfU1JDLCBzcmNFbGVtZW50LT5zcmNWYWx1ZSgpKTsKKyAgICBib29sIGRlc2NyaWJlc1Bh
cmVudEZvbnQgPSBwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoZm9udFRhZyk7CisgICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gbGlzdDsKKworICAgIGlmIChkZXNjcmliZXNQYXJlbnRGb250KSB7Cisg
ICAgICAgIG1fZm9udEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KHBhcmVu
dE5vZGUoKSk7CisKKyAgICAgICAgbGlzdCA9IG5ldyBDU1NWYWx1ZUxpc3Q7CisgICAgICAgIGxp
c3QtPmFwcGVuZChuZXcgQ1NTRm9udEZhY2VTcmNWYWx1ZShmb250RmFtaWx5KCksIHRydWUpKTsK
KyAgICB9IGVsc2UgaWYgKHNyY0VsZW1lbnQpCisgICAgICAgIGxpc3QgPSBzcmNFbGVtZW50LT5z
cmNWYWx1ZSgpOworCisgICAgaWYgKGxpc3QpIHsgICAgCisgICAgICAgIC8vIFBhcnNlIGluLW1l
bW9yeSBDU1MgcnVsZXMKKyAgICAgICAgQ1NTUHJvcGVydHkgc3JjUHJvcGVydHkoQ1NTX1BST1Bf
U1JDLCBsaXN0KTsKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkqIHNyY1Byb3BlcnR5UmVmID0g
JnNyY1Byb3BlcnR5OwogICAgICAgICBtX3N0eWxlRGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3Bl
cnRpZXMoJnNyY1Byb3BlcnR5UmVmLCAxKTsKKworICAgICAgICBpZiAoZGVzY3JpYmVzUGFyZW50
Rm9udCkgeyAgICAKKyAgICAgICAgICAgIC8vIFRyYXZlcnNlIHBhcnNlZCBDU1MgdmFsdWVzIGFu
ZCBhc3NvY2lhdGUgQ1NTRm9udEZhY2VTcmNWYWx1ZSBlbGVtZW50cyB3aXRoIG91cnNlbHZlcy4K
KyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3JjID0gbV9zdHlsZURlY2xhcmF0aW9uLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU19QUk9QX1NSQyk7CisgICAgICAgICAgICBDU1NWYWx1ZUxp
c3QqIHNyY0xpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihzcmMuZ2V0KCkpOworCisg
ICAgICAgICAgICB1bnNpZ25lZCBzcmNMZW5ndGggPSBzcmNMaXN0ID8gc3JjTGlzdC0+bGVuZ3Ro
KCkgOiAwOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY0xlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKENTU0ZvbnRGYWNlU3JjVmFsdWUqIGl0ZW0gPSBz
dGF0aWNfY2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlKj4oc3JjTGlzdC0+aXRlbShpKSkpCisgICAg
ICAgICAgICAgICAgICAgIGl0ZW0tPnNldFNWR0ZvbnRGYWNlRWxlbWVudCh0aGlzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChOb2RlKiBncmFuZFBhcmVudCA9IHBh
cmVudE5vZGUoKS0+cGFyZW50Tm9kZSgpKQorICAgICAgICAgICAgaWYgKGdyYW5kUGFyZW50ICYm
ICFncmFuZFBhcmVudC0+aXNTaGFkb3dOb2RlKCkpCisgICAgICAgICAgICAgICAgZG9jdW1lbnQo
KS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwogICAgIH0KLQotICAgIGRvY3VtZW50KCktPnVwZGF0
ZVN0eWxlU2VsZWN0b3IoKTsKIH0KIAogdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KCkKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCShyZXZpc2lvbiAyOTc1MykKKysrIFdlYkNvcmUv
c3ZnL1NWR0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTWlzc2luZ0dseXBoRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2
ZXJTb2xpZC5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY6
OlVuaWNvZGU7CkBAIC0zNjQsMTcgKzM2NSwxOSBAQAogICAgICAgICBkYXRhLnNjYWxlID0gY29u
dmVydEVtVW5pdFRvUGl4ZWwoZm9udC0+c2l6ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVy
RW0oKSwgMS4wZik7CiAgICAgICAgIGRhdGEubGVuZ3RoID0gMC4wZjsKIAorICAgICAgICBTdHJp
bmcgbGFuZ3VhZ2U7CisgICAgICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBmYWxzZTsgLy8gSG9s
ZHMgdHJ1ZSBmb3IgSFRNTCB0ZXh0CisKKyAgICAgICAgLy8gVE9ETzogbGFuZ3VhZ2UgbWF0Y2hp
bmcgJiBzdmcgZ2x5cGhzIHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgSFRNTCB0ZXh0LCB0b28uCiAg
ICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IHJ1bi5yZWZlcmVuY2luZ1Jl
bmRlck9iamVjdCgpKSB7Ci0gICAgICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0
aWNhbFdyaXRpbmdNb2RlKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7CisgICAg
ICAgICAgICBpc1ZlcnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShyZW5kZXJPYmpl
Y3QtPnN0eWxlKCktPnN2Z1N0eWxlKCkpOwogCi0gICAgICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7
CiAgICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihyZW5kZXJPYmplY3QtPmVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgbGFuZ3Vh
Z2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKLQotICAgICAg
ICAgICAgU1ZHVGV4dFJ1bldhbGtlcjxTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRh
PiBydW5XYWxrZXIoZm9udERhdGEsIGZvbnRFbGVtZW50LCBkYXRhLCBmbG9hdFdpZHRoVXNpbmdT
VkdGb250Q2FsbGJhY2ssIGZsb2F0V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFjayk7Ci0gICAgICAg
ICAgICBydW5XYWxrZXIud2FsayhydW4sIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgMCwgcnVu
Lmxlbmd0aCgpKTsKICAgICAgICAgfQogCisgICAgICAgIFNWR1RleHRSdW5XYWxrZXI8U1ZHVGV4
dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0YT4gcnVuV2Fsa2VyKGZvbnREYXRhLCBmb250RWxl
bWVudCwgZGF0YSwgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udENhbGxiYWNrLCBmbG9hdFdpZHRoTWlz
c2luZ0dseXBoQ2FsbGJhY2spOworICAgICAgICBydW5XYWxrZXIud2FsayhydW4sIGlzVmVydGlj
YWxUZXh0LCBsYW5ndWFnZSwgMCwgcnVuLmxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuIGRhdGEu
bGVuZ3RoOwogICAgIH0KIApAQCAtNDY2LDI0ICs0NjksNDEgQEAKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhIGRhdGE7CisgICAgICAg
IGRhdGEuY3VycmVudFBvaW50ID0gcG9pbnQ7CisgICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0
RW1Vbml0VG9QaXhlbChzaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBm
KTsKIAorICAgICAgICAvLyBSZXF1aXJlZCB0byBiZSB2YWxpZCBmb3IgU1ZHIHRleHQgb25seS4K
ICAgICAgICAgZGF0YS5yZW5kZXJPYmplY3QgPSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3Qo
KTsKLSAgICAgICAgQVNTRVJUKGRhdGEucmVuZGVyT2JqZWN0KTsKKyAgICAgICAgZGF0YS5hY3Rp
dmVQYWludFNlcnZlciA9IHJ1bi5hY3RpdmVQYWludFNlcnZlcigpOwogCi0gICAgICAgIGRhdGEu
YWN0aXZlUGFpbnRTZXJ2ZXIgPSBydW4uYWN0aXZlUGFpbnRTZXJ2ZXIoKTsKKyAgICAgICAgLy8g
SWYgcmVuZGVyT2JqZWN0IGlzIG5vdCBzZXQsIHdlJ3JlIGRlYWxpbmcgZm9yIEhUTUwgdGV4dCBy
ZW5kZXJlZCB1c2luZyBTVkcgRm9udHMuCisgICAgICAgIGlmICghZGF0YS5yZW5kZXJPYmplY3Qp
IHsKKyAgICAgICAgICAgIEFTU0VSVCghZGF0YS5hY3RpdmVQYWludFNlcnZlcik7CisKKyAgICAg
ICAgICAgIC8vIFRPRE86IFdlJ3JlIG9ubHkgc3VwcG9ydGluZyBzaW1wbGUgZmlsbGVkIEhUTUwg
dGV4dCBzbyBmYXIuCisgICAgICAgICAgICBTVkdQYWludFNlcnZlclNvbGlkKiBzb2xpZFBhaW50
U2VydmVyID0gU1ZHUGFpbnRTZXJ2ZXI6OnNoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIoKTsKKyAgICAg
ICAgICAgIHNvbGlkUGFpbnRTZXJ2ZXItPnNldENvbG9yKGNvbnRleHQtPmZpbGxDb2xvcigpKTsK
KworICAgICAgICAgICAgZGF0YS5hY3RpdmVQYWludFNlcnZlciA9IHNvbGlkUGFpbnRTZXJ2ZXI7
CisgICAgICAgIH0KKwogICAgICAgICBBU1NFUlQoZGF0YS5hY3RpdmVQYWludFNlcnZlcik7CiAK
LSAgICAgICAgZGF0YS5zY2FsZSA9IGNvbnZlcnRFbVVuaXRUb1BpeGVsKHNpemUoKSwgZm9udEZh
Y2VFbGVtZW50LT51bml0c1BlckVtKCksIDEuMGYpOwotICAgICAgICBkYXRhLmlzVmVydGljYWxU
ZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKGRhdGEucmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5z
dmdTdHlsZSgpKTsgICAgCisgICAgICAgIGRhdGEuaXNWZXJ0aWNhbFRleHQgPSBmYWxzZTsKICAg
ICAgICAgZGF0YS54U3RhcnRPZmZzZXQgPSBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0Zv
bnQodGhpcywgcnVuLCBydW4ucnRsKCkgPyB0byA6IDAsIHJ1bi5ydGwoKSA/IHJ1bi5sZW5ndGgo
KSA6IGZyb20pOwotICAgICAgICBkYXRhLmN1cnJlbnRQb2ludCA9IHBvaW50OwogICAgICAgICBk
YXRhLmdseXBoT3JpZ2luID0gRmxvYXRQb2ludCgpOwogICAgICAgICBkYXRhLmNvbnRleHQgPSBj
b250ZXh0OwogCiAgICAgICAgIFN0cmluZyBsYW5ndWFnZTsKLSAgICAgICAgaWYgKFNWR0VsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZGF0YS5yZW5kZXJPYmplY3Qt
PmVsZW1lbnQoKSkpCi0gICAgICAgICAgICBsYW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0
ZShYTUxOYW1lczo6bGFuZ0F0dHIpOwogCisgICAgICAgIC8vIFRPRE86IGxhbmd1YWdlIG1hdGNo
aW5nICYgc3ZnIGdseXBocyBzaG91bGQgYmUgcG9zc2libGUgZm9yIEhUTUwgdGV4dCwgdG9vLgor
ICAgICAgICBpZiAoZGF0YS5yZW5kZXJPYmplY3QpIHsgICAgCisgICAgICAgICAgICBkYXRhLmlz
VmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKGRhdGEucmVuZGVyT2JqZWN0LT5z
dHlsZSgpLT5zdmdTdHlsZSgpKTsgICAgCisKKyAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGRhdGEucmVuZGVyT2JqZWN0LT5lbGVt
ZW50KCkpKQorICAgICAgICAgICAgICAgIGxhbmd1YWdlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRl
KFhNTE5hbWVzOjpsYW5nQXR0cik7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmICgh
ZGF0YS5pc1ZlcnRpY2FsVGV4dCkgewogICAgICAgICAgICAgZGF0YS5nbHlwaE9yaWdpbi5zZXRY
KGZvbnREYXRhLT5ob3Jpem9udGFsT3JpZ2luWCgpICogZGF0YS5zY2FsZSk7CiAgICAgICAgICAg
ICBkYXRhLmdseXBoT3JpZ2luLnNldFkoZm9udERhdGEtPmhvcml6b250YWxPcmlnaW5ZKCkgKiBk
YXRhLnNjYWxlKTsKQEAgLTUwMCw2ICs1MjAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgIHBv
aW50LnkoKSwgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgZnJv
bSwgdG8pLCBoZWlnaHQpOwogfQogCitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0
VXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mLCBpbnQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0Cit7CisgICAgLy8gVE9ETzogRml4IHRleHQgc2VsZWN0aW9uIHdo
ZW4gSFRNTCB0ZXh0IGlzIGRyYXduIHVzaW5nIGEgU1ZHIEZvbnQKKyAgICAvLyBXZSBuZWVkIHRv
IGludGVncmF0ZSB0aGUgU1ZHIHRleHQgc2VsZWN0aW9uIGNvZGUgaW4gdGhlIG9mZnNldEZvclBv
c2l0aW9uKCkgZnJhbWV3b3JrLgorICAgIC8vIFRoaXMgd2lsbCBhbHNvIGZpeCBhIG1ham9yIGlz
c3VlLCB0aGF0IFNWRyBUZXh0IGNvZGUgY2FuJ3Qgc2VsZWN0IGFyYWJpYyBzdHJpbmdzIHByb3Bl
cmx5LgorICAgIHJldHVybiAwOwogfQogCit9CisKICNlbmRpZgpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHRm9udEZhY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udEZh
Y2VFbGVtZW50LmgJKHJldmlzaW9uIDI5NzUzKQorKysgV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDEwIEBACiAgICAgICAgIFN0cmlu
ZyBmb250RmFtaWx5KCkgY29uc3Q7CiAKICAgICAgICAgU1ZHRm9udEVsZW1lbnQqIGFzc29jaWF0
ZWRGb250RWxlbWVudCgpIGNvbnN0OworICAgICAgICB2b2lkIGFzc29jaWF0ZVdpdGhGb250RWxl
bWVudChTVkdGb250RWxlbWVudCopOworCiAgICAgICAgIHZvaWQgcmVidWlsZEZvbnRGYWNlKCk7
CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGFzc29jaWF0ZWRGb250RmFjZVNyY1ZhbHVl
KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8Q1NTRm9udEZhY2VSdWxl
PiBtX2ZvbnRGYWNlUnVsZTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VVcmlFbGVtZW50LmNw
cAkocmV2aXNpb24gMjk3NTMpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw4IEBACiBQYXNzUmVmUHRyPENTU0ZvbnRG
YWNlU3JjVmFsdWU+IFNWR0ZvbnRGYWNlVXJpRWxlbWVudDo6c3JjVmFsdWUoKSBjb25zdAogewog
ICAgIFJlZlB0cjxDU1NGb250RmFjZVNyY1ZhbHVlPiBzcmMgPSBuZXcgQ1NTRm9udEZhY2VTcmNW
YWx1ZShnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpLCBmYWxzZSk7Ci0gICAgc3Jj
LT5zZXRGb3JtYXQoZ2V0QXR0cmlidXRlKGZvcm1hdEF0dHIpKTsKKyAgICBBdG9taWNTdHJpbmcg
dmFsdWUoZ2V0QXR0cmlidXRlKGZvcm1hdEF0dHIpKTsKKyAgICBzcmMtPnNldEZvcm1hdCh2YWx1
ZS5pc0VtcHR5KCkgPyAic3ZnIiA6IHZhbHVlKTsgLy8gRGVmYXVsdCBmb3JtYXQKICAgICByZXR1
cm4gc3JjLnJlbGVhc2UoKTsKIH0KIApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5NzUzKQorKysgV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MyBAQAorMjAwOC0wMS0yMyAgTmlrb2xh
cyBaaW1tZXJtYW5uICA8emltbWVybWFubkBrZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVzOiBodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjk4MAorCisgICAgICAgIFN1cHBvcnQgZXh0ZXJuYWwgU1ZHIEZv
bnRzLCBieSByZXVzaW5nIHRoZSBjdXN0b20gZm9udCBoYW5kbGluZyBsb2dpYy4KKyAgICAgICAg
VGhpcyBlbmFibGVzIHVzIC0gYXMgZmlyc3QgZW5naW5lIC0gdG8gcmVuZGVyIEhUTUwgcGFnZXMg
dXNpbmcgU1ZHIEZvbnRzLgorCisgICAgICAgIEZpeGVzIGZvbnRzLWVsZW0tMDMtYi5zdmcgLyBm
b250cy1lbGVtLTA0LWIuc3ZnIC8gZm9udHMtZWxlbS0wNy1iLnN2ZworCisgICAgICAgICogY3Nz
L0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291
cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmg6Cisg
ICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRm9udEZhY2VTcmNWYWx1ZTo6aXNTVkdGb250RmFjZVNyYyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250RmFjZVNyY1ZhbHVlOjppc1N1cHBvcnRlZEZvcm1hdCk6CisgICAgICAgICogY3Nz
L0NTU0ZvbnRGYWNlU3JjVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToK
KyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRGb250OjplbnN1cmVTVkdGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGb250
OjpleHRyYWN0Rm9udHNGcm9tU1ZHRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGb250
OjpwbGF0Zm9ybURhdGFGcm9tU1ZHRGF0YSk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEZvbnQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Lmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNl
dEZvclBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udCk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRG
YWNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OmFz
c29jaWF0ZVdpdGhGb250RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVs
ZW1lbnQ6OmFzc29jaWF0ZWRGb250RmFjZVNyY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRGYWNlKToKKyAgICAgICAgKiBzdmcvU1ZHRm9u
dEZhY2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZVVyaUVsZW1lbnQ6OnNyY1ZhbHVlKToKKwog
MjAwOC0wMS0yMyAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81NzAyOTQ3PiBXZWJDb3JlOiBDR0NvbnRleHREcmF3UERGRG9jdW1l
bnQgd2lsbCBiZSBkZXByZWNhdGVkCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgJKHJldmlz
aW9uIDI5NzUzKQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNiArNzMsNyBAQAogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBSZWZQ
dHI8U1ZHRm9udEZhY2VFbGVtZW50PiBtX3N2Z0ZvbnRGYWNlRWxlbWVudDsKKyAgICBSZWZQdHI8
U1ZHRWxlbWVudD4gbV9leHRlcm5hbFNWR0ZvbnRDb250YWluZXJFbGVtZW50OwogI2VuZGlmCiB9
OwogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCShyZXZpc2lvbiAyOTc1MykKKysr
IFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VT
b3VyY2UuaCIKLQorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDYWNoZWRGb250Lmgi
CiAjaW5jbHVkZSAiQ1NTRm9udEZhY2UuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
QEAgLTM2LDggKzM2LDEwIEBACiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAogI2lmIEVO
QUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0ZvbnREYXRhLmgiCi0jaW5jbHVkZSAi
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIiAKKyNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIiAK
ICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTMsMjUgKzExNSw4MSBAQAogCiAg
ICAgLy8gSWYgd2UgYXJlIHN0aWxsIGxvYWRpbmcsIHRoZW4gd2UgbGV0IHRoZSBzeXN0ZW0gcGlj
ayBhIGZvbnQuCiAgICAgaWYgKGlzTG9hZGVkKCkpIHsKKyAgICAgICAgaWYgKG1fZm9udCkgewog
I2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgIGlmIChtX3N2Z0ZvbnRGYWNlRWxlbWVudCkK
LSAgICAgICAgICAgIGZvbnREYXRhLnNldChuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3Jt
RGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwg
c3ludGhldGljSXRhbGljKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ1ZSwgZmFsc2UsIG5ldyBTVkdGb250RGF0YShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5n
ZXQoKSkpKTsKLSNlbmRpZgorICAgICAgICAgICAgLy8gRm9yIFNWRyBmb250cyBwYXJzZSB0aGUg
ZXh0ZXJuYWwgU1ZHIGRvY3VtZW50LCBhbmQgZXh0cmFjdCB0aGUgPGZvbnQ+IGVsZW1lbnQuCisg
ICAgICAgICAgICBpZiAoIW1fZm9udC0+ZW5zdXJlU1ZHRm9udERhdGEoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKIAotICAgICAgICBpZiAoIWZvbnREYXRhKSB7Ci0gICAgICAgICAgICBB
U1NFUlQobV9mb250KTsKKyAgICAgICAgICAgIGlmICghbV9leHRlcm5hbFNWR0ZvbnRDb250YWlu
ZXJFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZvbnROYW1lID0gbV9zdHJpbmcu
ZG9tU3RyaW5nKCk7CiAKLSAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgRm9udFBsYXRmb3JtRGF0
YSBmcm9tIG91ciBDR0ZvbnRSZWYsIHBvaW50IHNpemUgYW5kIEFUU0ZvbnRSZWYuCi0gICAgICAg
ICAgICBpZiAoIW1fZm9udC0+ZW5zdXJlQ3VzdG9tRm9udERhdGEoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGlkIG9mIDxmb250PiBlbGVt
ZW50IHRvIGV4dHJhY3QgZnJvbSByZW1vdGUgU1ZHIGRvY3VtZW50CisgICAgICAgICAgICAgICAg
Ly8gVVJMIHNjaGVtZSBleGFtcGxlOiAiZmlsZTovLy9Vc2Vycy9uaWtvei9XZWJLaXQvTGF5b3V0
VGVzdHMvc3ZnL1czQy1TVkctMS4xL3Jlc291cmNlcy9leHQtVGVzdENvbWljLnN2ZyNGb250Igor
ICAgICAgICAgICAgICAgIGludCBuYW1lU3RhcnQgPSBmb250TmFtZS5maW5kKCcjJyk7CisgICAg
ICAgICAgICAgICAgaWYgKG5hbWVTdGFydCAhPSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZm9u
dE5hbWUgPSBmb250TmFtZS5zdWJzdHJpbmcobmFtZVN0YXJ0ICsgMSwgZm9udE5hbWUubGVuZ3Ro
KCkgLSAobmFtZVN0YXJ0ICsgMSkpOwogCi0gICAgICAgICAgICBmb250RGF0YS5zZXQobmV3IFNp
bXBsZUZvbnREYXRhKG1fZm9udC0+cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZm9udERlc2Ny
aXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YyksIHRydWUsIGZhbHNlKSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBmb250U2VsZWN0b3ItPmRvY0xvYWRlcigpLT5kb2MoKTsKKyAgICAgICAgICAg
ICAgICBtX2V4dGVybmFsU1ZHRm9udENvbnRhaW5lckVsZW1lbnQgPSBtX2ZvbnQtPmV4dHJhY3RG
b250c0Zyb21TVkdEYXRhKGRvY3VtZW50LCBmb250TmFtZSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChtX2V4dGVybmFsU1ZHRm9udENvbnRhaW5lckVsZW1lbnQpIHsKKyAgICAg
ICAgICAgICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOworICAgICAgICAgICAg
ICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKKworICAgICAgICAg
ICAgICAgIC8vIFNlbGVjdCBzdWl0YWJsZSBmb250PiBjaGlsZAorICAgICAgICAgICAgICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBtX2V4dGVybmFsU1ZHRm9udENvbnRhaW5lckVsZW1lbnQtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb250VGFnKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9udEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGb250
RWxlbWVudCo+KGNoaWxkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VsZWN0IGZp
cnN0IDxmb250LWZhY2U+IGNoaWxkOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChOb2Rl
KiBmb250Q2hpbGQgPSBjaGlsZC0+Zmlyc3RDaGlsZCgpOyBmb250Q2hpbGQ7IGZvbnRDaGlsZCA9
IGZvbnRDaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChmb250Q2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZvbnRfZmFjZVRhZykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udEZhY2VFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHRm9udEZhY2VFbGVtZW50Kj4oZm9udENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udEZh
Y2VFbGVtZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZv
bnRGYWNlRWxlbWVudCAmJiBmb250RWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICBmb250
RmFjZUVsZW1lbnQtPmFzc29jaWF0ZVdpdGhGb250RWxlbWVudChmb250RWxlbWVudCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX3N2Z0ZvbnRGYWNlRWxlbWVudCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UncmUgY3JlYXRlZCB1c2luZyBhIENTUyBAZm9udC1mYWNlIHJ1
bGUsIHRoYXQgbWVhbnMgd2UncmUgbm90IGFzc29jaWF0ZWQgd2l0aCBhIFNWR0ZvbnRGYWNlRWxl
bWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgaW1wb3J0ZWQgPGZvbnQt
ZmFjZT4gdGFnIGFzIHJlZmVyZW5jaW5nIGZvbnQtZmFjZSBlbGVtZW50IGZvciB0aGVzZSBjYXNl
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50ID0gZm9udEZh
Y2VFbGVtZW50OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
U1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhID0gbmV3IFNWR0ZvbnREYXRhKGZvbnRGYWNlRWxlbWVu
dCk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREYXRhLnNldChuZXcgU2ltcGxlRm9udERhdGEo
bV9mb250LT5wbGF0Zm9ybURhdGFGcm9tU1ZHRGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQ
aXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSwgdHJ1ZSwgZmFsc2Us
IHN2Z0ZvbnREYXRhKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyNlbmRpZgorICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgRm9udFBsYXRmb3JtRGF0YSBm
cm9tIG91ciBDR0ZvbnRSZWYsIHBvaW50IHNpemUgYW5kIEFUU0ZvbnRSZWYuCisgICAgICAgICAg
ICAgICAgaWYgKCFtX2ZvbnQtPmVuc3VyZUN1c3RvbUZvbnREYXRhKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICAgICAgZm9udERhdGEuc2V0KG5ldyBTaW1w
bGVGb250RGF0YShtX2ZvbnQtPnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlw
dGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMp
LCB0cnVlLCBmYWxzZSkpOworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgICAgICB9Cisj
ZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgICAgICAg
ICAgLy8gSW4tRG9jdW1lbnQgU1ZHIEZvbnRzCisgICAgICAgICAgICBpZiAobV9zdmdGb250RmFj
ZUVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBu
ZXcgU1ZHRm9udERhdGEobV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAg
ICAgIGZvbnREYXRhLnNldChuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljKSwgdHJ1ZSwgZmFsc2UsIHN2Z0ZvbnREYXRhKSk7CisgICAgICAgICAgICB9CisjZW5k
aWYKKyAgICAgICAgfSAgICAgICAgICAgICAKICAgICB9IGVsc2UgewogICAgICAgICAvLyBLaWNr
IG9mZiB0aGUgbG9hZCBub3cuCiAgICAgICAgIG1fZm9udC0+YmVnaW5Mb2FkSWZOZWVkZWQoZm9u
dFNlbGVjdG9yLT5kb2NMb2FkZXIoKSk7Ci0KICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogdGVt
cERhdGEgPSBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0
aW9uLCBtX3N0cmluZyk7CiAgICAgICAgIGlmICghdGVtcERhdGEpCiAgICAgICAgICAgICB0ZW1w
RGF0YSA9IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRp
b24pOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCShyZXZpc2lvbiAyOTc1MykKKysrIFdl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqICAgICAgICAgICAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTQwLDcgKzE0MCw3IEBACiAgICAgYm9vbCBmb3VuZExvY2FsID0gZmFsc2U7CiAK
ICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGJvb2wgZm91bmRJbkRvY3VtZW50U1ZHRm9udCA9
IGZhbHNlOworICAgIGJvb2wgZm91bmRTVkdGb250ID0gZmFsc2U7CiAjZW5kaWYKIAogICAgIGZv
ciAoaSA9IDA7IGkgPCBzcmNMZW5ndGg7IGkrKykgewpAQCAtMTQ4LDYgKzE0OCwxMCBAQAogICAg
ICAgICBDU1NGb250RmFjZVNyY1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VT
cmNWYWx1ZSo+KHNyY0xpc3QtPml0ZW0oaSkpOwogICAgICAgICBDU1NGb250RmFjZVNvdXJjZSog
c291cmNlID0gMDsKIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgIGZvdW5kU1ZHRm9u
dCA9IGl0ZW0tPmlzU1ZHRm9udEZhY2VTcmMoKSB8fCBpdGVtLT5zdmdGb250RmFjZUVsZW1lbnQo
KTsKKyNlbmRpZgorCiAgICAgICAgIGlmICghaXRlbS0+aXNMb2NhbCgpKSB7CiAgICAgICAgICAg
ICBpZiAoaXRlbS0+aXNTdXBwb3J0ZWRGb3JtYXQoKSkgewogICAgICAgICAgICAgICAgIENhY2hl
ZEZvbnQqIGNhY2hlZEZvbnQgPSBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdEZvbnQo
aXRlbS0+cmVzb3VyY2UoKSk7CkBAIC0xNTcsMjEgKzE2MSwxNCBAQAogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgU3RyaW5nIGZhbWlseSA9IGl0ZW0tPnJlc291cmNlKCk7CiAKLSNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICAgICAgZm91bmRJbkRvY3VtZW50U1ZHRm9udCA9IGl0
ZW0tPnN2Z0ZvbnRGYWNlRWxlbWVudCgpICE9IDA7Ci0jZW5kaWYKLQogICAgICAgICAgICAgLy8g
VGVzdCB0aGUgdmFsaWRpdHkgb2YgdGhlIGxvY2FsIGZvbnQgbm93LiAgV2UgZG9uJ3Qgd2FudCB0
byBpbmNsdWRlIHRoaXMgZm9udCBpZiBpdCBkb2VzIG5vdCBleGlzdAogICAgICAgICAgICAgLy8g
b24gdGhlIHN5c3RlbS4gIElmIGl0ICpkb2VzKiBleGlzdCBvbiB0aGUgc3lzdGVtLCB0aGVuIHdl
IGRvbid0IG5lZWQgdG8gbG9vayBhbnkgZnVydGhlci4KICAgICAgICAgICAgIGlmIChGb250Q2Fj
aGU6OmZvbnRFeGlzdHMoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpCi0jaWYgRU5BQkxFKFNWR19G
T05UUykgICAgCi0gICAgICAgICAgICAgICAgfHwgZm91bmRJbkRvY3VtZW50U1ZHRm9udAorI2lm
IEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgICAgICAgICAgfHwgZm91bmRTVkdGb250CiAjZW5k
aWYKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgIHNvdXJjZSA9IG5ldyBDU1NG
b250RmFjZVNvdXJjZShmYW1pbHkpOwotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgICAg
ICAgICAgc291cmNlLT5zZXRTVkdGb250RmFjZUVsZW1lbnQoaXRlbS0+c3ZnRm9udEZhY2VFbGVt
ZW50KCkpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgZm91bmRMb2NhbCA9IHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3OSw4ICsxNzYsMTIgQEAKICAgICAgICAgaWYgKCFm
b250RmFjZSkKICAgICAgICAgICAgIGZvbnRGYWNlID0gbmV3IENTU0ZvbnRGYWNlKCk7CiAKLSAg
ICAgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgaWYgKHNvdXJjZSkgeworI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCisgICAgICAgICAgICBzb3VyY2UtPnNldFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLT5z
dmdGb250RmFjZUVsZW1lbnQoKSk7CisjZW5kaWYKICAgICAgICAgICAgIGZvbnRGYWNlLT5hZGRT
b3VyY2Uoc291cmNlKTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGJyZWFr
IGlmIHdlIHNlZSBhIGxvY2FsIGZvbnQgdGhhdCBpcyB2YWxpZC4KICAgICAgICAgaWYgKGZvdW5k
TG9jYWwpCkBAIC0yMzIsOSArMjMzLDEwIEBACiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICAg
ICAgLy8gU1ZHIGFsbG93cyBzZXZlcmFsIDxmb250PiBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIGZv
bnQtZmFtaWx5LCBkaWZmZXJpbmcgb25seQogICAgICAgICAvLyBpbiBpZS4gZm9udC12YXJpYW50
LiBCZSBzdXJlIHRvIHBpY2sgdXAgdGhlIHJpZ2h0IG9uZSAtIGluIGdldEZvbnREYXRhIGJlbG93
LgotICAgICAgICBpZiAoZm91bmRJbkRvY3VtZW50U1ZHRm9udCAmJiBmb250RGVzY3JpcHRpb24u
c21hbGxDYXBzKCkpCisgICAgICAgIGlmIChmb3VuZFNWR0ZvbnQgJiYgZm9udERlc2NyaXB0aW9u
LnNtYWxsQ2FwcygpKQogICAgICAgICAgICAgZmFtaWx5TmFtZSArPSAiLXdlYmtpdC1zdmctc21h
bGwtY2FwcyI7CiAjZW5kaWYKKwogICAgICAgICBTdHJpbmcgaGFzaCA9IGhhc2hGb3JGb250KGZh
bWlseU5hbWUubG93ZXIoKSwgZm9udERlc2NyaXB0aW9uLmJvbGQoKSwgZm9udERlc2NyaXB0aW9u
Lml0YWxpYygpKTsKICAgICAgICAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIHNlZ21lbnRlZEZvbnRG
YWNlID0gbV9mb250cy5nZXQoaGFzaCkuZ2V0KCk7CiAgICAgICAgIGlmICghc2VnbWVudGVkRm9u
dEZhY2UpIHsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgJKHJldmlzaW9uIDI5NzUz
KQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw2ICs1MSw4IEBACiAgICAgYm9vbCBpc1N1cHBvcnRlZEZvcm1hdCgpIGNvbnN0OwogCiAj
aWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBib29sIGlzU1ZHRm9udEZhY2VTcmMoKSBjb25zdDsK
KwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCk7IH0KICAgICB2b2lkIHNldFNWR0ZvbnRG
YWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQqIGVsZW1lbnQpIHsgbV9zdmdGb250RmFjZUVs
ZW1lbnQgPSBlbGVtZW50OyB9CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U3JjVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFs
dWUuY3BwCShyZXZpc2lvbiAyOTc1MykKKysrIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwxMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorYm9vbCBDU1NGb250RmFjZVNyY1ZhbHVl
Ojppc1NWR0ZvbnRGYWNlU3JjKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nh
c2UobV9mb3JtYXQsICJzdmciKTsKK30KKyNlbmRpZgorCiBib29sIENTU0ZvbnRGYWNlU3JjVmFs
dWU6OmlzU3VwcG9ydGVkRm9ybWF0KCkgY29uc3QKIHsKICAgICAvLyBOb3JtYWxseSB3ZSB3b3Vs
ZCBqdXN0IGNoZWNrIHRoZSBmb3JtYXQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBjb25mbGljdHMg
d2l0aCB0aGUgb2xkIFdpbklFIHN0eWxlIG9mIGZvbnQtZmFjZSwKQEAgLTM4LDggKzQ1LDEyIEBA
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
LSAgICAKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobV9mb3JtYXQsICJ0cnVldHlwZSIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKG1fZm9ybWF0LCAib3BlbnR5cGUiKTsKKworICAgIHJldHVy
biBlcXVhbElnbm9yaW5nQ2FzZShtX2Zvcm1hdCwgInRydWV0eXBlIikgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UobV9mb3JtYXQsICJvcGVudHlwZSIpCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAg
ICAgICAgfHwgaXNTVkdGb250RmFjZVNyYygpCisjZW5kaWYKKyAgICAgICAgICAgOwogfQogCiBT
dHJpbmcgQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRGb250LmNwcAkocmV2aXNpb24gMjk3NTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDExIEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDYWNoZWRGb250LmgiCi0KKyNpbmNsdWRlICJDU3RyaW5nLmgiIC8v
IEZJWE1FCiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAi
RE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaWYg
UExBVEZPUk0oQ0cpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAjaW5jbHVkZSAi
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAtMzcsNiArMzgsMTQgQEAKICNpbmNsdWRlICJs
b2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVk
ZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCisjaW5jbHVkZSAi
U1ZHR0VsZW1lbnQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhY2hlZEZv
bnQ6OkNhY2hlZEZvbnQoRG9jTG9hZGVyKiBkbCwgY29uc3QgU3RyaW5nICZ1cmwpCkBAIC0xMDMs
NiArMTEyLDY1IEBACiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCitib29sIENh
Y2hlZEZvbnQ6OmVuc3VyZVNWR0ZvbnREYXRhKCkKK3sKKyAgICBpZiAoIW1fZXh0ZXJuYWxTVkdE
b2N1bWVudCAmJiAhbV9lcnJvck9jY3VycmVkICYmICFtX2xvYWRpbmcpIHsKKyAgICAgICAgbV9l
eHRlcm5hbFNWR0RvY3VtZW50ID0gbmV3IFNWR0RvY3VtZW50KERPTUltcGxlbWVudGF0aW9uOjpp
bnN0YW5jZSgpLCAwKTsKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT5vcGVuKCk7CisK
KyAgICAgICAgVGV4dFJlc291cmNlRGVjb2RlciBkZWNvZGVyKCJhcHBsaWNhdGlvbi94bWwiKTsK
KyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT53cml0ZShkZWNvZGVyLmRlY29kZShtX2Rh
dGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpKTsKKworICAgICAgICBtX2V4dGVybmFsU1ZHRG9j
dW1lbnQtPmZpbmlzaFBhcnNpbmcoKTsKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT5j
bG9zZSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPFNWR0Vs
ZW1lbnQ+IENhY2hlZEZvbnQ6OmV4dHJhY3RGb250c0Zyb21TVkdEYXRhKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiBmb250TmFtZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoZG9jdW1l
bnQpOworICAgIEFTU0VSVChkb2N1bWVudC0+Zmlyc3RDaGlsZCgpKTsKKworICAgIC8vIENyZWF0
ZSBhIGNvbnRhaW5lciBlbGVtZW50IG1hcmtlZCBhcyBzaGFkb3cgdHJlZSByb290IGVsZW1lbnQK
KyAgICBQYXNzUmVmUHRyPFNWR0VsZW1lbnQ+IHNoYWRvd1RyZWVSb290RWxlbWVudChuZXcgU1ZH
R0VsZW1lbnQoU1ZHTmFtZXM6OmdUYWcsIGRvY3VtZW50KSk7CisgICAgc2hhZG93VHJlZVJvb3RF
bGVtZW50LT5zZXRJbkRvY3VtZW50KCk7CisgICAgc2hhZG93VHJlZVJvb3RFbGVtZW50LT5zZXRT
aGFkb3dQYXJlbnROb2RlKGRvY3VtZW50LT5maXJzdENoaWxkKCkpOworCisgICAgLy8gRmluZCA8
Zm9udD4gZWxlbWVudHMgaW4gZXh0ZXJuYWwgU1ZHIGRvY3VtZW50IGFuZCBpbXBvcnQgaW4gb3Vy
IGRvY3VtZW50CisgICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gbV9leHRlcm5hbFNWR0RvY3Vt
ZW50LT5nZXRFbGVtZW50c0J5VGFnTmFtZShTVkdOYW1lczo6Zm9udFRhZy5sb2NhbE5hbWUoKSk7
CisgICAgaWYgKCFsaXN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOyAgICAKKyAgICB1bnNpZ25lZCBmb250cyA9IGxpc3QtPmxlbmd0aCgpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnRzOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPE5v
ZGU+IG5vZGUgPSBsaXN0LT5pdGVtKGkpOworICAgICAgICBBU1NFUlQobm9kZSk7CisKKyAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlLmdldCgpKS0+Z2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6aWRBdHRyKSAhPSBmb250TmFtZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIFJlZlB0cjxOb2RlPiBhZG9wdGVkTm9kZSA9IGRvY3VtZW50LT5hZG9wdE5vZGUobm9k
ZSwgZWMpOworICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CisKKyAgICAgICAgc2hhZG93VHJlZVJv
b3RFbGVtZW50LT5hcHBlbmRDaGlsZChhZG9wdGVkTm9kZS5yZWxlYXNlKCksIGVjKTsKKyAgICAg
ICAgQVNTRVJUKGVjID09IDApOworICAgIH0KKworICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVudCA9
IDA7IC8vIFJlbGVhc2UgZG9jdW1lbnQKKyAgICByZXR1cm4gc2hhZG93VHJlZVJvb3RFbGVtZW50
OworfQorCitGb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6OnBsYXRmb3JtRGF0YUZyb21TVkdE
YXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCit7CisgICAgcmV0dXJuIEZv
bnRQbGF0Zm9ybURhdGEoc2l6ZSwgYm9sZCwgaXRhbGljKTsKK30KKyNlbmRpZgorCiB2b2lkIENh
Y2hlZEZvbnQ6OmFsbFJlZmVyZW5jZXNSZW1vdmVkKCkKIHsKICNpZiBQTEFURk9STShDRykgfHwg
UExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZEZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmgJKHJldmlz
aW9uIDI5NzUzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSwxMSBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJTVkdF
bGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIERvY0xvYWRlcjsKQEAgLTUyLDE0ICs1NywyNSBAQAogICAgIHZv
aWQgY2hlY2tOb3RpZnkoKTsKIAogICAgIHZvaWQgYmVnaW5Mb2FkSWZOZWVkZWQoRG9jTG9hZGVy
KiBkbCk7CisKICAgICBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKCk7Ci0KICAgICBGb250UGxh
dGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGludCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljKTsKIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgYm9vbCBlbnN1cmVT
VkdGb250RGF0YSgpOworICAgIFBhc3NSZWZQdHI8U1ZHRWxlbWVudD4gZXh0cmFjdEZvbnRzRnJv
bVNWR0RhdGEoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIGZvbnROYW1lKSBjb25zdDsKKworICAg
IEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJvbVNWR0RhdGEoZmxvYXQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIGl0YWxpYyk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhKiBtX2ZvbnREYXRhOwogICAgIGJvb2wgbV9sb2FkSW5pdGlhdGVkOwogCisj
aWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBtdXRhYmxlIFJlZlB0cjxTVkdEb2N1bWVudD4gbV9l
eHRlcm5hbFNWR0RvY3VtZW50OworI2VuZGlmCisKICAgICBmcmllbmQgY2xhc3MgQ2FjaGU7CiB9
OwogCg==
</data>
<flag name="review"
          id="8149"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18648</attachid>
            <date>2008-01-24 16:01:32 -0800</date>
            <delta_ts>2008-01-27 15:20:00 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>SVGExternalFonts.diff</filename>
            <type>text/plain</type>
            <size>26965</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTc4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDgtMDEtMjMgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlczogaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5ODAK
KworICAgICAgICBTdXBwb3J0IGV4dGVybmFsIFNWRyBGb250cywgYnkgcmV1c2luZyB0aGUgY3Vz
dG9tIGZvbnQgaGFuZGxpbmcgbG9naWMuCisgICAgICAgIFRoaXMgZW5hYmxlcyB1cyAtIGFzIGZp
cnN0IGVuZ2luZSAtIHRvIHJlbmRlciBIVE1MIHBhZ2VzIHVzaW5nIFNWRyBGb250cy4KKworICAg
ICAgICBGaXhlcyBmb250cy1lbGVtLTAzLWIuc3ZnIC8gZm9udHMtZWxlbS0wNC1iLnN2ZyAvIGZv
bnRzLWVsZW0tMDctYi5zdmcKKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOgorICAg
ICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250RmFj
ZVNyY1ZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU3JjVmFsdWU6Omlz
U1ZHRm9udEZhY2VTcmMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1ZTo6
aXNTdXBwb3J0ZWRGb3JtYXQpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmg6
CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6CisgICAgICAgICogbG9hZGVyL0NhY2hl
ZEZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6fkNhY2hlZEZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6ZW5zdXJlU1ZHRm9udERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6ZXh0cmFjdEZvbnRGcm9tU1ZHRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRGb250OjpwbGF0Zm9ybURhdGFGcm9tU1ZHRGF0YSk6CisgICAgICAg
ICogbG9hZGVyL0NhY2hlZEZvbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6CisgICAgICAgICogc3ZnL1NWR0Zv
bnRGYWNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VVcmlFbGVtZW50OjpzcmNWYWx1ZSk6CisK
IDIwMDgtMDEtMjQgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJl
dHRlciBmaXggZm9yIEJ1ZyAxNjk5NgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAko
cmV2aXNpb24gMjk3ODEpCisrKyBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCi0KKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5j
bHVkZSAiQ2FjaGVkRm9udC5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCiAjaW5jbHVkZSAi
Q1NTRm9udFNlbGVjdG9yLmgiCkBAIC0zNiw4ICszNiwxMSBAQAogI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorI2luY2x1ZGUgIkZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTVkdGb250
RGF0YS5oIgotI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIgCisjaW5jbHVkZSAi
U1ZHRm9udEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTMsMjUgKzExNiw2MSBAQCBTaW1wbGVGb250RGF0
YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvCiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwgbG9h
ZGluZywgdGhlbiB3ZSBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNMb2Fk
ZWQoKSkgeworICAgICAgICBpZiAobV9mb250KSB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAg
ICAgICAgaWYgKG1fc3ZnRm9udEZhY2VFbGVtZW50KQotICAgICAgICAgICAgZm9udERhdGEuc2V0
KG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbi5jb21w
dXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBmYWxzZSwgbmV3IFNW
R0ZvbnREYXRhKG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSkpOwotI2VuZGlmCisgICAgICAg
ICAgICAvLyBGb3IgU1ZHIGZvbnRzIHBhcnNlIHRoZSBleHRlcm5hbCBTVkcgZG9jdW1lbnQsIGFu
ZCBleHRyYWN0IHRoZSA8Zm9udD4gZWxlbWVudC4KKyAgICAgICAgICAgIGlmICghbV9mb250LT5l
bnN1cmVTVkdGb250RGF0YSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAg
IGlmICghZm9udERhdGEpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2ZvbnQpOworICAgICAgICAg
ICAgaWYgKCFtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQpCisgICAgICAgICAgICAgICAgbV9leHRl
cm5hbFNWR0ZvbnRFbGVtZW50ID0gbV9mb250LT5leHRyYWN0Rm9udEZyb21TVkdEYXRhKFNWR1VS
SVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KG1fc3RyaW5nKSk7CiAKLSAgICAgICAgICAgIC8vIENyZWF0
ZSBuZXcgRm9udFBsYXRmb3JtRGF0YSBmcm9tIG91ciBDR0ZvbnRSZWYsIHBvaW50IHNpemUgYW5k
IEFUU0ZvbnRSZWYuCi0gICAgICAgICAgICBpZiAoIW1fZm9udC0+ZW5zdXJlQ3VzdG9tRm9udERh
dGEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChtX2V4dGVy
bmFsU1ZHRm9udEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9leHRlcm5hbFNW
R0ZvbnRFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb250VGFnKSk7CisKKyAgICAgICAg
ICAgICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGb250
RWxlbWVudCo+KG1fZXh0ZXJuYWxTVkdGb250RWxlbWVudC5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOworCisgICAgICAgICAg
ICAgICAgLy8gU2VsZWN0IGZpcnN0IDxmb250LWZhY2U+IGNoaWxkCisgICAgICAgICAgICAgICAg
Zm9yIChOb2RlKiBmb250Q2hpbGQgPSBtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQtPmZpcnN0Q2hp
bGQoKTsgZm9udENoaWxkOyBmb250Q2hpbGQgPSBmb250Q2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRDaGlsZC0+aGFzVGFnTmFtZShTVkdOYW1lczo6
Zm9udF9mYWNlVGFnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9udEZhY2VFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHRm9udEZhY2VFbGVtZW50Kj4oZm9udENoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZvbnRGYWNlRWxlbWVudCAmJiBmb250RWxl
bWVudCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fc3ZnRm9udEZhY2VFbGVtZW50KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBjcmVhdGVkIHVzaW5nIGEgQ1NTIEBm
b250LWZhY2UgcnVsZSwgdGhhdCBtZWFucyB3ZSdyZSBub3QgYXNzb2NpYXRlZCB3aXRoIGEgU1ZH
Rm9udEZhY2VFbGVtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBpbXBv
cnRlZCA8Zm9udC1mYWNlPiB0YWcgYXMgcmVmZXJlbmNpbmcgZm9udC1mYWNlIGVsZW1lbnQgZm9y
IHRoZXNlIGNhc2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgbV9zdmdGb250RmFjZUVsZW1l
bnQgPSBmb250RmFjZUVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBuZXcgU1ZHRm9udERhdGEoZm9u
dEZhY2VFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZm9udERhdGEuc2V0KG5ldyBTaW1w
bGVGb250RGF0YShtX2ZvbnQtPnBsYXRmb3JtRGF0YUZyb21TVkdEYXRhKGZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpLCB0
cnVlLCBmYWxzZSwgc3ZnRm9udERhdGEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworI2VuZGlmCisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBGb250UGxh
dGZvcm1EYXRhIGZyb20gb3VyIENHRm9udFJlZiwgcG9pbnQgc2l6ZSBhbmQgQVRTRm9udFJlZi4K
KyAgICAgICAgICAgICAgICBpZiAoIW1fZm9udC0+ZW5zdXJlQ3VzdG9tRm9udERhdGEoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIGZvbnREYXRhLnNldChu
ZXcgU2ltcGxlRm9udERhdGEobV9mb250LT5wbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljKSwgdHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBmb250RGF0YS5zZXQobmV3
IFNpbXBsZUZvbnREYXRhKG1fZm9udC0+cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZm9udERl
c2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0
YWxpYyksIHRydWUsIGZhbHNlKSk7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgICAg
IH0KKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAg
ICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcgRm9udHMKKyAgICAgICAgICAgIGlmIChtX3N2Z0Zv
bnRGYWNlRWxlbWVudCkgeworICAgICAgICAgICAgICAgIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0
YSA9IG5ldyBTVkdGb250RGF0YShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgZm9udERhdGEuc2V0KG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50
aGV0aWNJdGFsaWMpLCB0cnVlLCBmYWxzZSwgc3ZnRm9udERhdGEpKTsKKyAgICAgICAgICAgIH0K
KyNlbmRpZgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gS2ljayBvZmYgdGhl
IGxvYWQgbm93LgogICAgICAgICBtX2ZvbnQtPmJlZ2luTG9hZElmTmVlZGVkKGZvbnRTZWxlY3Rv
ci0+ZG9jTG9hZGVyKCkpOwotCiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIHRlbXBEYXRhID0g
Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgbV9z
dHJpbmcpOwogICAgICAgICBpZiAoIXRlbXBEYXRhKQogICAgICAgICAgICAgdGVtcERhdGEgPSBG
b250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udERlc2NyaXB0aW9uKTsKSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAkocmV2aXNpb24gMjk3ODEpCisrKyBXZWJDb3JlL2Nz
cy9DU1NGb250RmFjZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHBy
aXZhdGU6CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIFJlZlB0cjxTVkdGb250RmFjZUVs
ZW1lbnQ+IG1fc3ZnRm9udEZhY2VFbGVtZW50OworICAgIFJlZlB0cjxTVkdFbGVtZW50PiBtX2V4
dGVybmFsU1ZHRm9udEVsZW1lbnQ7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlU3JjVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU3JjVmFsdWUuY3BwCShyZXZpc2lvbiAyOTc4MSkKKysrIFdlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU3JjVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwxMyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorYm9vbCBDU1NGb250RmFj
ZVNyY1ZhbHVlOjppc1NWR0ZvbnRGYWNlU3JjKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXF1YWxJ
Z25vcmluZ0Nhc2UobV9mb3JtYXQsICJzdmciKTsKK30KKyNlbmRpZgorCiBib29sIENTU0ZvbnRG
YWNlU3JjVmFsdWU6OmlzU3VwcG9ydGVkRm9ybWF0KCkgY29uc3QKIHsKICAgICAvLyBOb3JtYWxs
eSB3ZSB3b3VsZCBqdXN0IGNoZWNrIHRoZSBmb3JtYXQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBj
b25mbGljdHMgd2l0aCB0aGUgb2xkIFdpbklFIHN0eWxlIG9mIGZvbnQtZmFjZSwKQEAgLTM4LDgg
KzQ1LDEyIEBAIGJvb2wgQ1NTRm9udEZhY2VTcmNWYWx1ZTo6aXNTdXBwb3J0ZWRGb3IKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAot
ICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShtX2Zvcm1hdCwgInRydWV0eXBlIikgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UobV9mb3JtYXQsICJvcGVudHlwZSIpOworCisgICAgcmV0dXJuIGVxdWFs
SWdub3JpbmdDYXNlKG1fZm9ybWF0LCAidHJ1ZXR5cGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSht
X2Zvcm1hdCwgIm9wZW50eXBlIikKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgICAgICAgICB8
fCBpc1NWR0ZvbnRGYWNlU3JjKCkKKyNlbmRpZgorICAgICAgICAgICA7CiB9CiAKIFN0cmluZyBD
U1NGb250RmFjZVNyY1ZhbHVlOjpjc3NUZXh0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlU3JjVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVNyY1ZhbHVlLmgJKHJldmlzaW9uIDI5NzgxKQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
cmNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzU3VwcG9ydGVkRm9ybWF0KCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQor
ICAgIGJvb2wgaXNTVkdGb250RmFjZVNyYygpIGNvbnN0OworCiAgICAgU1ZHRm9udEZhY2VFbGVt
ZW50KiBzdmdGb250RmFjZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N2Z0ZvbnRGYWNlRWxl
bWVudC5nZXQoKTsgfQogICAgIHZvaWQgc2V0U1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNl
RWxlbWVudCogZWxlbWVudCkgeyBtX3N2Z0ZvbnRGYWNlRWxlbWVudCA9IGVsZW1lbnQ7IH0KICNl
bmRpZgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCShyZXZpc2lvbiAyOTc4MSkKKysrIFdl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqICAgICAgICAgICAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFj
ZVJ1bGUoY28KICAgICBib29sIGZvdW5kTG9jYWwgPSBmYWxzZTsKIAogI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCi0gICAgYm9vbCBmb3VuZEluRG9jdW1lbnRTVkdGb250ID0gZmFsc2U7CisgICAgYm9v
bCBmb3VuZFNWR0ZvbnQgPSBmYWxzZTsKICNlbmRpZgogCiAgICAgZm9yIChpID0gMDsgaSA8IHNy
Y0xlbmd0aDsgaSsrKSB7CkBAIC0xNDgsNiArMTQ4LDEwIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9y
OjphZGRGb250RmFjZVJ1bGUoY28KICAgICAgICAgQ1NTRm9udEZhY2VTcmNWYWx1ZSogaXRlbSA9
IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlU3JjVmFsdWUqPihzcmNMaXN0LT5pdGVtKGkpKTsKICAg
ICAgICAgQ1NTRm9udEZhY2VTb3VyY2UqIHNvdXJjZSA9IDA7CiAKKyNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQorICAgICAgICBmb3VuZFNWR0ZvbnQgPSBpdGVtLT5pc1NWR0ZvbnRGYWNlU3JjKCkgfHwg
aXRlbS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CisjZW5kaWYKKwogICAgICAgICBpZiAoIWl0ZW0t
PmlzTG9jYWwoKSkgewogICAgICAgICAgICAgaWYgKGl0ZW0tPmlzU3VwcG9ydGVkRm9ybWF0KCkp
IHsKICAgICAgICAgICAgICAgICBDYWNoZWRGb250KiBjYWNoZWRGb250ID0gbV9kb2N1bWVudC0+
ZG9jTG9hZGVyKCktPnJlcXVlc3RGb250KGl0ZW0tPnJlc291cmNlKCkpOwpAQCAtMTU3LDIxICsx
NjEsMTQgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjbwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgU3RyaW5nIGZhbWlseSA9IGl0ZW0tPnJlc291cmNlKCk7
CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICAgICAgZm91bmRJbkRvY3VtZW50U1ZH
Rm9udCA9IGl0ZW0tPnN2Z0ZvbnRGYWNlRWxlbWVudCgpICE9IDA7Ci0jZW5kaWYKLQogICAgICAg
ICAgICAgLy8gVGVzdCB0aGUgdmFsaWRpdHkgb2YgdGhlIGxvY2FsIGZvbnQgbm93LiAgV2UgZG9u
J3Qgd2FudCB0byBpbmNsdWRlIHRoaXMgZm9udCBpZiBpdCBkb2VzIG5vdCBleGlzdAogICAgICAg
ICAgICAgLy8gb24gdGhlIHN5c3RlbS4gIElmIGl0ICpkb2VzKiBleGlzdCBvbiB0aGUgc3lzdGVt
LCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gbG9vayBhbnkgZnVydGhlci4KICAgICAgICAgICAgIGlm
IChGb250Q2FjaGU6OmZvbnRFeGlzdHMoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpCi0jaWYgRU5B
QkxFKFNWR19GT05UUykgICAgCi0gICAgICAgICAgICAgICAgfHwgZm91bmRJbkRvY3VtZW50U1ZH
Rm9udAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgICAgICAgICAgfHwgZm91bmRTVkdG
b250CiAjZW5kaWYKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgIHNvdXJjZSA9
IG5ldyBDU1NGb250RmFjZVNvdXJjZShmYW1pbHkpOwotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0g
ICAgICAgICAgICAgICAgc291cmNlLT5zZXRTVkdGb250RmFjZUVsZW1lbnQoaXRlbS0+c3ZnRm9u
dEZhY2VFbGVtZW50KCkpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgZm91bmRMb2NhbCA9IHRy
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3OSw4ICsxNzYsMTIgQEAgdm9pZCBD
U1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjbwogICAgICAgICBpZiAoIWZvbnRGYWNl
KQogICAgICAgICAgICAgZm9udEZhY2UgPSBuZXcgQ1NTRm9udEZhY2UoKTsKIAotICAgICAgICBp
ZiAoc291cmNlKQorICAgICAgICBpZiAoc291cmNlKSB7CisjaWYgRU5BQkxFKFNWR19GT05UUykK
KyAgICAgICAgICAgIHNvdXJjZS0+c2V0U1ZHRm9udEZhY2VFbGVtZW50KGl0ZW0tPnN2Z0ZvbnRG
YWNlRWxlbWVudCgpKTsKKyNlbmRpZgogICAgICAgICAgICAgZm9udEZhY2UtPmFkZFNvdXJjZShz
b3VyY2UpOworICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgY2FuIGp1c3QgYnJlYWsgaWYgd2Ug
c2VlIGEgbG9jYWwgZm9udCB0aGF0IGlzIHZhbGlkLgogICAgICAgICBpZiAoZm91bmRMb2NhbCkK
QEAgLTIzMiw5ICsyMzMsMTAgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVs
ZShjbwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAgIC8vIFNWRyBhbGxvd3Mgc2V2ZXJh
bCA8Zm9udD4gZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBmb250LWZhbWlseSwgZGlmZmVyaW5nIG9u
bHkKICAgICAgICAgLy8gaW4gaWUuIGZvbnQtdmFyaWFudC4gQmUgc3VyZSB0byBwaWNrIHVwIHRo
ZSByaWdodCBvbmUgLSBpbiBnZXRGb250RGF0YSBiZWxvdy4KLSAgICAgICAgaWYgKGZvdW5kSW5E
b2N1bWVudFNWR0ZvbnQgJiYgZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpKQorICAgICAgICBp
ZiAoZm91bmRTVkdGb250ICYmIGZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSkKICAgICAgICAg
ICAgIGZhbWlseU5hbWUgKz0gIi13ZWJraXQtc3ZnLXNtYWxsLWNhcHMiOwogI2VuZGlmCisKICAg
ICAgICAgU3RyaW5nIGhhc2ggPSBoYXNoRm9yRm9udChmYW1pbHlOYW1lLmxvd2VyKCksIGZvbnRE
ZXNjcmlwdGlvbi5ib2xkKCksIGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSk7CiAgICAgICAgIENT
U1NlZ21lbnRlZEZvbnRGYWNlKiBzZWdtZW50ZWRGb250RmFjZSA9IG1fZm9udHMuZ2V0KGhhc2gp
LmdldCgpOwogICAgICAgICBpZiAoIXNlZ21lbnRlZEZvbnRGYWNlKSB7CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRGb250LmNwcAkocmV2aXNpb24gMjk3ODEpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNhY2hlLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUNsaWVudFdhbGtlci5oIgorI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5j
bHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2lmIFBMQVRGT1JNKENHKSB8fCBQTEFURk9STShR
VCkgfHwgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIK
QEAgLTM3LDYgKzM4LDE0IEBACiAjaW5jbHVkZSAibG9hZGVyLmgiCiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdGb250RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0dFbGVtZW50LmgiCisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNoZWRGb250OjpDYWNoZWRGb250KERvY0xvYWRlciog
ZGwsIGNvbnN0IFN0cmluZyAmdXJsKQpAQCAtNTEsNiArNjAsNyBAQCBDYWNoZWRGb250Ojp+Q2Fj
aGVkRm9udCgpCiB7CiAjaWYgUExBVEZPUk0oQ0cpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9S
TShHVEspCiAgICAgZGVsZXRlIG1fZm9udERhdGE7CisgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50
ID0gMDsgLy8gUmVsZWFzZSBkb2N1bWVudAogI2VuZGlmCiB9CiAKQEAgLTEwMyw2ICsxMTMsNTAg
QEAgRm9udFBsYXRmb3JtRGF0YSBDYWNoZWRGb250OjpwbGF0Zm9ybURhdAogI2VuZGlmCiB9CiAK
KyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorYm9vbCBDYWNoZWRGb250OjplbnN1cmVTVkdGb250RGF0
YSgpCit7CisgICAgaWYgKCFtX2V4dGVybmFsU1ZHRG9jdW1lbnQgJiYgIW1fZXJyb3JPY2N1cnJl
ZCAmJiAhbV9sb2FkaW5nICYmIG1fZGF0YSkgeworICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1l
bnQgPSBuZXcgU1ZHRG9jdW1lbnQoRE9NSW1wbGVtZW50YXRpb246Omluc3RhbmNlKCksIDApOwor
ICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQtPm9wZW4oKTsKKworICAgICAgICBUZXh0UmVz
b3VyY2VEZWNvZGVyIGRlY29kZXIoImFwcGxpY2F0aW9uL3htbCIpOworICAgICAgICBtX2V4dGVy
bmFsU1ZHRG9jdW1lbnQtPndyaXRlKGRlY29kZXIuZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBtX2Rh
dGEtPnNpemUoKSkpOworCisgICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVudC0+ZmluaXNoUGFy
c2luZygpOworICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQtPmNsb3NlKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlZlB0cjxTVkdFbGVtZW50PiBDYWNoZWRGb250Ojpl
eHRyYWN0Rm9udEZyb21TVkdEYXRhKGNvbnN0IFN0cmluZyYgZm9udE5hbWUpIGNvbnN0Cit7Cisg
ICAgLy8gRmluZCA8Zm9udD4gZWxlbWVudHMgaW4gZXh0ZXJuYWwgU1ZHIGRvY3VtZW50IGFuZCBp
bXBvcnQgaW4gb3VyIGRvY3VtZW50CisgICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gbV9leHRl
cm5hbFNWR0RvY3VtZW50LT5nZXRFbGVtZW50c0J5VGFnTmFtZShTVkdOYW1lczo6Zm9udFRhZy5s
b2NhbE5hbWUoKSk7CisgICAgaWYgKCFsaXN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVu
c2lnbmVkIGZvbnRzID0gbGlzdC0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGZvbnRzOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBsaXN0LT5pdGVt
KGkpOworICAgICAgICBBU1NFUlQobm9kZSk7CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlLmdldCgpKS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSAhPSBm
b250TmFtZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJldHVybiBzdGF0aWNf
cG9pbnRlcl9jYXN0PFNWR0VsZW1lbnQ+KG5vZGUpOworICAgIH0KKworICAgIHJldHVybiAwOwor
fQorCitGb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6OnBsYXRmb3JtRGF0YUZyb21TVkdEYXRh
KGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCit7CisgICAgcmV0dXJuIEZvbnRQ
bGF0Zm9ybURhdGEoc2l6ZSwgYm9sZCwgaXRhbGljKTsKK30KKyNlbmRpZgorCiB2b2lkIENhY2hl
ZEZvbnQ6OmFsbFJlZmVyZW5jZXNSZW1vdmVkKCkKIHsKICNpZiBQTEFURk9STShDRykgfHwgUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZv
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmgJKHJldmlzaW9u
IDI5NzgxKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSwxMSBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJTVkdFbGVt
ZW50LmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIERvY0xvYWRlcjsKQEAgLTUyLDE0ICs1NywyNSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjaGVja05vdGlmeSgpOwogCiAgICAgdm9pZCBiZWdpbkxvYWRJZk5lZWRlZChEb2NM
b2FkZXIqIGRsKTsKLSAgICBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKCk7CiAKKyAgICBib29s
IGVuc3VyZUN1c3RvbUZvbnREYXRhKCk7CiAgICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURh
dGFGcm9tQ3VzdG9tRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CiAKKyNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGJvb2wgZW5zdXJlU1ZHRm9udERhdGEoKTsKKyAgICBS
ZWZQdHI8U1ZHRWxlbWVudD4gZXh0cmFjdEZvbnRGcm9tU1ZHRGF0YShjb25zdCBTdHJpbmcmIGZv
bnROYW1lKSBjb25zdDsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJvbVNW
R0RhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CisjZW5kaWYKKwogcHJp
dmF0ZToKICAgICBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBtX2ZvbnREYXRhOwogICAgIGJvb2wg
bV9sb2FkSW5pdGlhdGVkOwogCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdEb2N1bWVudD4gbV9leHRlcm5hbFNWR0RvY3VtZW50OworI2VuZGlmCisKICAgICBm
cmllbmQgY2xhc3MgQ2FjaGU7CiB9OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5j
cHAJKHJldmlzaW9uIDI5NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzQxLDYgKzc0MSwxMSBAQCBGbG9hdFJlY3QgRm9udDo6c2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRlCiAKIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25z
dCBUZXh0UnVuJiBydW4sIGludCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAog
eworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgaWYgKHByaW1hcnlGb250KCktPmlzU1ZHRm9u
dCgpKQorICAgICAgICByZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250
KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworI2VuZGlmCisKICAgICBpZiAoY2FuVXNl
R2x5cGhDYWNoZShydW4pKQogICAgICAgICByZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1w
bGVUZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogICAgIHJldHVybiBvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDI5NzgxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdDsKICAgICBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4m
KSBjb25zdDsKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHRVc2luZ1NWR0ZvbnQo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0OworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoY29u
c3QgVGV4dFJ1biYsIGludCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3Q7CiAjZW5kaWYKICAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNv
bnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9h
dFBvaW50JikgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGb250LmNwcAkocmV2aXNpb24gMjk3ODEpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdGb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR01pc3NpbmdHbHlwaEVsZW1l
bnQuaCIKICNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2Vy
dmVyU29saWQuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV1RG
OjpVbmljb2RlOwpAQCAtMzY0LDE3ICszNjUsMTkgQEAgc3RhdGljIGZsb2F0IGZsb2F0V2lkdGhP
ZlN1YlN0cmluZ1VzaW5nUwogICAgICAgICBkYXRhLnNjYWxlID0gY29udmVydEVtVW5pdFRvUGl4
ZWwoZm9udC0+c2l6ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSwgMS4wZik7CiAg
ICAgICAgIGRhdGEubGVuZ3RoID0gMC4wZjsKIAorICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7Cisg
ICAgICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBmYWxzZTsgLy8gSG9sZHMgdHJ1ZSBmb3IgSFRN
TCB0ZXh0CisKKyAgICAgICAgLy8gVE9ETzogbGFuZ3VhZ2UgbWF0Y2hpbmcgJiBzdmcgZ2x5cGhz
IHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgSFRNTCB0ZXh0LCB0b28uCiAgICAgICAgIGlmIChSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpKSB7
Ci0gICAgICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2Rl
KHJlbmRlck9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7CisgICAgICAgICAgICBpc1ZlcnRp
Y2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShyZW5kZXJPYmplY3QtPnN0eWxlKCktPnN2
Z1N0eWxlKCkpOwogCi0gICAgICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7CiAgICAgICAgICAgICBp
ZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihyZW5kZXJP
YmplY3QtPmVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSBlbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKLQotICAgICAgICAgICAgU1ZHVGV4dFJ1
bldhbGtlcjxTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhPiBydW5XYWxrZXIoZm9u
dERhdGEsIGZvbnRFbGVtZW50LCBkYXRhLCBmbG9hdFdpZHRoVXNpbmdTVkdGb250Q2FsbGJhY2ss
IGZsb2F0V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFjayk7Ci0gICAgICAgICAgICBydW5XYWxrZXIu
d2FsayhydW4sIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgMCwgcnVuLmxlbmd0aCgpKTsKICAg
ICAgICAgfQogCisgICAgICAgIFNWR1RleHRSdW5XYWxrZXI8U1ZHVGV4dFJ1bldhbGtlck1lYXN1
cmVkTGVuZ3RoRGF0YT4gcnVuV2Fsa2VyKGZvbnREYXRhLCBmb250RWxlbWVudCwgZGF0YSwgZmxv
YXRXaWR0aFVzaW5nU1ZHRm9udENhbGxiYWNrLCBmbG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJh
Y2spOworICAgICAgICBydW5XYWxrZXIud2FsayhydW4sIGlzVmVydGljYWxUZXh0LCBsYW5ndWFn
ZSwgMCwgcnVuLmxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoOwogICAgIH0K
IApAQCAtNDY2LDI0ICs0NjksNDEgQEAgdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChH
cmFwaGljcwogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFNWR1RleHRSdW5XYWxrZXJE
cmF3VGV4dERhdGEgZGF0YTsKKyAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQgPSBwb2ludDsKKyAg
ICAgICAgZGF0YS5zY2FsZSA9IGNvbnZlcnRFbVVuaXRUb1BpeGVsKHNpemUoKSwgZm9udEZhY2VF
bGVtZW50LT51bml0c1BlckVtKCksIDEuMGYpOwogCisgICAgICAgIC8vIFJlcXVpcmVkIHRvIGJl
IHZhbGlkIGZvciBTVkcgdGV4dCBvbmx5LgogICAgICAgICBkYXRhLnJlbmRlck9iamVjdCA9IHJ1
bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpOwotICAgICAgICBBU1NFUlQoZGF0YS5yZW5kZXJP
YmplY3QpOwotCiAgICAgICAgIGRhdGEuYWN0aXZlUGFpbnRTZXJ2ZXIgPSBydW4uYWN0aXZlUGFp
bnRTZXJ2ZXIoKTsKKworICAgICAgICAvLyBJZiByZW5kZXJPYmplY3QgaXMgbm90IHNldCwgd2Un
cmUgZGVhbGluZyBmb3IgSFRNTCB0ZXh0IHJlbmRlcmVkIHVzaW5nIFNWRyBGb250cy4KKyAgICAg
ICAgaWYgKCFkYXRhLnJlbmRlck9iamVjdCkgeworICAgICAgICAgICAgQVNTRVJUKCFkYXRhLmFj
dGl2ZVBhaW50U2VydmVyKTsKKworICAgICAgICAgICAgLy8gVE9ETzogV2UncmUgb25seSBzdXBw
b3J0aW5nIHNpbXBsZSBmaWxsZWQgSFRNTCB0ZXh0IHNvIGZhci4KKyAgICAgICAgICAgIFNWR1Bh
aW50U2VydmVyU29saWQqIHNvbGlkUGFpbnRTZXJ2ZXIgPSBTVkdQYWludFNlcnZlcjo6c2hhcmVk
U29saWRQYWludFNlcnZlcigpOworICAgICAgICAgICAgc29saWRQYWludFNlcnZlci0+c2V0Q29s
b3IoY29udGV4dC0+ZmlsbENvbG9yKCkpOworCisgICAgICAgICAgICBkYXRhLmFjdGl2ZVBhaW50
U2VydmVyID0gc29saWRQYWludFNlcnZlcjsKKyAgICAgICAgfQorCiAgICAgICAgIEFTU0VSVChk
YXRhLmFjdGl2ZVBhaW50U2VydmVyKTsKIAotICAgICAgICBkYXRhLnNjYWxlID0gY29udmVydEVt
VW5pdFRvUGl4ZWwoc2l6ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSwgMS4wZik7
Ci0gICAgICAgIGRhdGEuaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoZGF0
YS5yZW5kZXJPYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCkpOyAgICAKKyAgICAgICAgZGF0YS5p
c1ZlcnRpY2FsVGV4dCA9IGZhbHNlOwogICAgICAgICBkYXRhLnhTdGFydE9mZnNldCA9IGZsb2F0
V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIHJ1bi5ydGwoKSA/IHRvIDog
MCwgcnVuLnJ0bCgpID8gcnVuLmxlbmd0aCgpIDogZnJvbSk7Ci0gICAgICAgIGRhdGEuY3VycmVu
dFBvaW50ID0gcG9pbnQ7CiAgICAgICAgIGRhdGEuZ2x5cGhPcmlnaW4gPSBGbG9hdFBvaW50KCk7
CiAgICAgICAgIGRhdGEuY29udGV4dCA9IGNvbnRleHQ7CiAKICAgICAgICAgU3RyaW5nIGxhbmd1
YWdlOwotICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihkYXRhLnJlbmRlck9iamVjdC0+ZWxlbWVudCgpKSkKLSAgICAgICAgICAgIGxhbmd1
YWdlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cik7CiAKKyAgICAg
ICAgLy8gVE9ETzogbGFuZ3VhZ2UgbWF0Y2hpbmcgJiBzdmcgZ2x5cGhzIHNob3VsZCBiZSBwb3Nz
aWJsZSBmb3IgSFRNTCB0ZXh0LCB0b28uCisgICAgICAgIGlmIChkYXRhLnJlbmRlck9iamVjdCkg
eyAgICAKKyAgICAgICAgICAgIGRhdGEuaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGlu
Z01vZGUoZGF0YS5yZW5kZXJPYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCkpOyAgICAKKworICAg
ICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4oZGF0YS5yZW5kZXJPYmplY3QtPmVsZW1lbnQoKSkpCisgICAgICAgICAgICAgICAgbGFuZ3Vh
Z2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgaWYgKCFkYXRhLmlzVmVydGljYWxUZXh0KSB7CiAgICAgICAg
ICAgICBkYXRhLmdseXBoT3JpZ2luLnNldFgoZm9udERhdGEtPmhvcml6b250YWxPcmlnaW5YKCkg
KiBkYXRhLnNjYWxlKTsKICAgICAgICAgICAgIGRhdGEuZ2x5cGhPcmlnaW4uc2V0WShmb250RGF0
YS0+aG9yaXpvbnRhbE9yaWdpblkoKSAqIGRhdGEuc2NhbGUpOwpAQCAtNTAwLDYgKzUyMCwxNCBA
QCBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclRleHRVc2luCiAgICAgICAgICAgICAg
ICAgICAgICBwb2ludC55KCksIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlz
LCBydW4sIGZyb20sIHRvKSwgaGVpZ2h0KTsKIH0KIAoraW50IEZvbnQ6Om9mZnNldEZvclBvc2l0
aW9uRm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiwgaW50IHBvc2l0aW9uLCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoreworICAgIC8vIFRPRE86IEZpeCB0ZXh0IHNl
bGVjdGlvbiB3aGVuIEhUTUwgdGV4dCBpcyBkcmF3biB1c2luZyBhIFNWRyBGb250CisgICAgLy8g
V2UgbmVlZCB0byBpbnRlZ3JhdGUgdGhlIFNWRyB0ZXh0IHNlbGVjdGlvbiBjb2RlIGluIHRoZSBv
ZmZzZXRGb3JQb3NpdGlvbigpIGZyYW1ld29yay4KKyAgICAvLyBUaGlzIHdpbGwgYWxzbyBmaXgg
YSBtYWpvciBpc3N1ZSwgdGhhdCBTVkcgVGV4dCBjb2RlIGNhbid0IHNlbGVjdCBhcmFiaWMgc3Ry
aW5ncyBwcm9wZXJseS4KKyAgICByZXR1cm4gMDsKK30KKwogfQogCiAjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjk3ODEpCisrKyBXZWJDb3JlL3N2
Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsMjUgKzMwMyw2
IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZWJ1aWxkRm9udEZhY2UKICAgICBpZiAoIXBh
cmVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gU3BlY2lhbCBoYW5kbGluZyBm
b3IgbG9jYWwgU1ZHIGZvbnRzICh0aG9zZSB3aGljaCBoYXZlIGEgPGZvbnQ+IHBhcmVudCwgYW5k
IGFyZSBvbmx5IHVzZWQgd2l0aGluIHRoZSBkb2N1bWVudCkKLSAgICBpZiAocGFyZW50Tm9kZSgp
ICYmIHBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShmb250VGFnKSkgewotICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKLQotICAgICAgICBSZWZQdHI8
Q1NTRm9udEZhY2VTcmNWYWx1ZT4gc3JjID0gbmV3IENTU0ZvbnRGYWNlU3JjVmFsdWUoZm9udEZh
bWlseSgpLCB0cnVlIC8qIGlzTG9jYWwgKi8pOwotICAgICAgICBzcmMtPnNldFNWR0ZvbnRGYWNl
RWxlbWVudCh0aGlzKTsKLSAgICAgICAgbGlzdC0+YXBwZW5kKHNyYyk7Ci0KLSAgICAgICAgQ1NT
UHJvcGVydHkgc3JjUHJvcGVydHkoQ1NTX1BST1BfU1JDLCBsaXN0KTsKLSAgICAgICAgY29uc3Qg
Q1NTUHJvcGVydHkqIHNyY1Byb3BlcnR5UmVmID0gJnNyY1Byb3BlcnR5OwotICAgICAgICBtX3N0
eWxlRGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMoJnNyY1Byb3BlcnR5UmVmLCAxKTsK
LQotICAgICAgICBtX2ZvbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRm9udEVsZW1lbnQqPihw
YXJlbnROb2RlKCkpOwotICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBUT0RPOiBFeHRlcm5hbCBTVkcgZm9u
dHMgc3VwcG9ydCAtIHJlIHVzZSBleGlzdGluZyAiY3VzdG9tIGZvbnQiIGhhbmRsaW5nIGxvZ2lj
LgotCiAgICAgLy8gd2UgY3VycmVudGx5IGlnbm9yZSBhbGwgYnV0IHRoZSBmaXJzdCBzcmMgZWxl
bWVudCwgYWx0ZXJuYXRpdmVseSB3ZSBjb3VsZCBjb25jYXQgdGhlbQogICAgIFNWR0ZvbnRGYWNl
U3JjRWxlbWVudCogc3JjRWxlbWVudCA9IDA7CiAgICAgU1ZHRGVmaW5pdGlvblNyY0VsZW1lbnQq
IGRlZmluaXRpb25TcmMgPSAwOwpAQCAtMzM5LDE1ICszMjAsMzkgQEAgdm9pZCBTVkdGb250RmFj
ZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZQogICAgICAgICBtX3N0eWxlRGVjbGFyYXRpb24tPnNl
dFByb3BlcnR5KENTU19QUk9QX0RFRklOSVRJT05fU1JDLCBkZWZpbml0aW9uU3JjLT5nZXRBdHRy
aWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpLCBmYWxzZSk7CiAjZW5kaWYKIAotICAgIGlmIChz
cmNFbGVtZW50KSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgY2xhc3MgKG90aGVyIHRo
YW4gQ1NTUGFyc2VyKSB0byBjcmVhdGUgQ1NTVmFsdWUgb2JqZWN0cyBhbmQgc2V0IHRoZW0gb24g
dGhlIENTU1N0eWxlRGVjbGFyYXRpb24gbWFudWFsbHkKLSAgICAgICAgLy8gd2UgdXNlIHRoZSBh
ZGRQYXJzZWRQcm9wZXJ0aWVzIG1ldGhvZCwgYW5kIGZha2UgaGF2aW5nIGFuIGFycmF5IG9mIENT
U1Byb3BlcnR5IHBvaW50ZXJzLgotICAgICAgICBDU1NQcm9wZXJ0eSBzcmNQcm9wZXJ0eShDU1Nf
UFJPUF9TUkMsIHNyY0VsZW1lbnQtPnNyY1ZhbHVlKCkpOworICAgIGJvb2wgZGVzY3JpYmVzUGFy
ZW50Rm9udCA9IHBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShmb250VGFnKTsKKyAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0OworCisgICAgaWYgKGRlc2NyaWJlc1BhcmVudEZvbnQpIHsKKyAg
ICAgICAgbV9mb250RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZvbnRFbGVtZW50Kj4ocGFyZW50
Tm9kZSgpKTsKKworICAgICAgICBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKKyAgICAgICAgbGlz
dC0+YXBwZW5kKG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKGZvbnRGYW1pbHkoKSwgdHJ1ZSkpOwor
ICAgIH0gZWxzZSBpZiAoc3JjRWxlbWVudCkKKyAgICAgICAgbGlzdCA9IHNyY0VsZW1lbnQtPnNy
Y1ZhbHVlKCk7CisKKyAgICBpZiAobGlzdCkgeyAgICAKKyAgICAgICAgLy8gUGFyc2UgaW4tbWVt
b3J5IENTUyBydWxlcworICAgICAgICBDU1NQcm9wZXJ0eSBzcmNQcm9wZXJ0eShDU1NfUFJPUF9T
UkMsIGxpc3QpOwogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSogc3JjUHJvcGVydHlSZWYgPSAm
c3JjUHJvcGVydHk7CiAgICAgICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVy
dGllcygmc3JjUHJvcGVydHlSZWYsIDEpOwotICAgIH0KIAotICAgIGRvY3VtZW50KCktPnVwZGF0
ZVN0eWxlU2VsZWN0b3IoKTsKKyAgICAgICAgaWYgKGRlc2NyaWJlc1BhcmVudEZvbnQpIHsgICAg
CisgICAgICAgICAgICAvLyBUcmF2ZXJzZSBwYXJzZWQgQ1NTIHZhbHVlcyBhbmQgYXNzb2NpYXRl
IENTU0ZvbnRGYWNlU3JjVmFsdWUgZWxlbWVudHMgd2l0aCBvdXJzZWx2ZXMuCisgICAgICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHNyYyA9IG1fc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NfUFJPUF9TUkMpOworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBzcmNMaXN0
ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oc3JjLmdldCgpKTsKKworICAgICAgICAgICAg
dW5zaWduZWQgc3JjTGVuZ3RoID0gc3JjTGlzdCA/IHNyY0xpc3QtPmxlbmd0aCgpIDogMDsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNMZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgICAgIGlmIChDU1NGb250RmFjZVNyY1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8
Q1NTRm9udEZhY2VTcmNWYWx1ZSo+KHNyY0xpc3QtPml0ZW0oaSkpKQorICAgICAgICAgICAgICAg
ICAgICBpdGVtLT5zZXRTVkdGb250RmFjZUVsZW1lbnQodGhpcyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoTm9kZSogZ3JhbmRQYXJlbnQgPSBwYXJlbnROb2RlKCkt
PnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIGlmIChncmFuZFBhcmVudCAmJiAhZ3JhbmRQYXJl
bnQtPmlzU2hhZG93Tm9kZSgpKQorICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0
eWxlU2VsZWN0b3IoKTsKKyAgICB9CiB9CiAKIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaAkocmV2aXNp
b24gMjk3ODEpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNiArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmlu
ZyBmb250RmFtaWx5KCkgY29uc3Q7CiAKICAgICAgICAgU1ZHRm9udEVsZW1lbnQqIGFzc29jaWF0
ZWRGb250RWxlbWVudCgpIGNvbnN0OworCiAgICAgICAgIHZvaWQgcmVidWlsZEZvbnRGYWNlKCk7
CiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VVcmlFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyOTc4MSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDggQEAgU1ZHRm9udEZhY2VVcmlFbGVtZW50
OjpTVkdGb250RmFjZVVyaUVsZQogUGFzc1JlZlB0cjxDU1NGb250RmFjZVNyY1ZhbHVlPiBTVkdG
b250RmFjZVVyaUVsZW1lbnQ6OnNyY1ZhbHVlKCkgY29uc3QKIHsKICAgICBSZWZQdHI8Q1NTRm9u
dEZhY2VTcmNWYWx1ZT4gc3JjID0gbmV3IENTU0ZvbnRGYWNlU3JjVmFsdWUoZ2V0QXR0cmlidXRl
KFhMaW5rTmFtZXM6OmhyZWZBdHRyKSwgZmFsc2UpOwotICAgIHNyYy0+c2V0Rm9ybWF0KGdldEF0
dHJpYnV0ZShmb3JtYXRBdHRyKSk7CisgICAgQXRvbWljU3RyaW5nIHZhbHVlKGdldEF0dHJpYnV0
ZShmb3JtYXRBdHRyKSk7CisgICAgc3JjLT5zZXRGb3JtYXQodmFsdWUuaXNFbXB0eSgpID8gInN2
ZyIgOiB2YWx1ZSk7IC8vIERlZmF1bHQgZm9ybWF0CiAgICAgcmV0dXJuIHNyYy5yZWxlYXNlKCk7
CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5NzgxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDgtMDEtMjQgIE5pa29sYXMgWmlt
bWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgbGF5b3V0IHRlc3RzIGFmdGVyIGFkZGluZyBl
eHRlcm5hbCBTVkcgRm9udHMgc3VwcG9ydC4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcv
VzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wMy1iLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wMy1iLWV4cGVjdGVkLnBu
ZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDMt
Yi1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9m
b250cy1lbGVtLTA0LWItZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFj
L3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTA0LWItZXhwZWN0ZWQucG5nOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0wNC1iLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDct
Yi1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkct
MS4xL2ZvbnRzLWVsZW0tMDctYi1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFj
L3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTA3LWItZXhwZWN0ZWQudHh0OgorCiAyMDA4LTAx
LTI0ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBUZXN0IGZvciBC
dWcgMTY5OTY6IENyYXNoIGluIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEgd2hlbiBsb2Fk
aW5nCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18726</attachid>
            <date>2008-01-27 15:20:00 -0800</date>
            <delta_ts>2008-01-28 14:08:21 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>SVGExternalFonts.diff</filename>
            <type>text/plain</type>
            <size>26900</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTgyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDgtMDEtMjggIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlczogaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5ODAK
KworICAgICAgICBTdXBwb3J0IGV4dGVybmFsIFNWRyBGb250cywgYnkgcmV1c2luZyB0aGUgY3Vz
dG9tIGZvbnQgaGFuZGxpbmcgbG9naWMuCisgICAgICAgIFRoaXMgZW5hYmxlcyB1cyAtIGFzIGZp
cnN0IGVuZ2luZSAtIHRvIHJlbmRlciBIVE1MIHBhZ2VzIHVzaW5nIFNWRyBGb250cy4KKworICAg
ICAgICBGaXhlcyBmb250cy1lbGVtLTAzLWIuc3ZnIC8gZm9udHMtZWxlbS0wNC1iLnN2ZyAvIGZv
bnRzLWVsZW0tMDctYi5zdmcKKyAgICAgICAgQWRkIG5ldyB0ZXN0Y2FzZSBzdmctZm9udHMtaW4t
aHRtbC5odG1sLgorCisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICog
Y3NzL0NTU0ZvbnRGYWNlU291cmNlLmg6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU3JjVmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1ZTo6aXNTVkdGb250
RmFjZVNyYyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNyY1ZhbHVlOjppc1N1cHBv
cnRlZEZvcm1hdCk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaDoKKyAgICAg
ICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRT
ZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkRm9udC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGb250Ojp+Q2FjaGVkRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRGb250OjplbnN1cmVTVkdGb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRGb250OjpleHRyYWN0Rm9udEZyb21TVkdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZEZvbnQ6OnBsYXRmb3JtRGF0YUZyb21TVkdEYXRhKToKKyAgICAgICAgKiBsb2Fk
ZXIvQ2FjaGVkRm9udC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRm9udC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KToKKyAgICAgICAg
KiBzdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRG
YWNlRWxlbWVudDo6cmVidWlsZEZvbnRGYWNlKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udEZhY2VF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGb250RmFjZVVyaUVsZW1lbnQ6OnNyY1ZhbHVlKToKKwogMjAwOC0w
MS0yNyAgSmFuIE1pY2hhZWwgQWxvbnpvICA8am1hbG9uem9AdW5wbHVnZ2FibGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFscCBUb2tlci4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJj
ZS5jcHAJKHJldmlzaW9uIDI5ODIyKQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJDU1NGb250RmFjZVNvdXJjZS5oIgotCisjaW5jbHVkZSAiQ1N0cmluZy5o
IgogI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKICNpbmNsdWRlICJDU1NGb250RmFjZS5oIgogI2lu
Y2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgpAQCAtMzYsOCArMzYsMTEgQEAKICNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJGb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
U1ZHRm9udERhdGEuaCIKLSNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiIAorI2lu
Y2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTEzLDI1ICsxMTYsNjEgQEAgU2ltcGxl
Rm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogCiAgICAgLy8gSWYgd2UgYXJlIHN0
aWxsIGxvYWRpbmcsIHRoZW4gd2UgbGV0IHRoZSBzeXN0ZW0gcGljayBhIGZvbnQuCiAgICAgaWYg
KGlzTG9hZGVkKCkpIHsKKyAgICAgICAgaWYgKG1fZm9udCkgewogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgICAgIGlmIChtX3N2Z0ZvbnRGYWNlRWxlbWVudCkKLSAgICAgICAgICAgIGZvbnRE
YXRhLnNldChuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgZmFsc2Us
IG5ldyBTVkdGb250RGF0YShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSkpKTsKLSNlbmRpZgor
ICAgICAgICAgICAgLy8gRm9yIFNWRyBmb250cyBwYXJzZSB0aGUgZXh0ZXJuYWwgU1ZHIGRvY3Vt
ZW50LCBhbmQgZXh0cmFjdCB0aGUgPGZvbnQ+IGVsZW1lbnQuCisgICAgICAgICAgICBpZiAoIW1f
Zm9udC0+ZW5zdXJlU1ZHRm9udERhdGEoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAot
ICAgICAgICBpZiAoIWZvbnREYXRhKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9mb250KTsKKyAg
ICAgICAgICAgIGlmICghbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50KQorICAgICAgICAgICAgICAg
IG1fZXh0ZXJuYWxTVkdGb250RWxlbWVudCA9IG1fZm9udC0+Z2V0U1ZHRm9udEJ5SWQoU1ZHVVJJ
UmVmZXJlbmNlOjpnZXRUYXJnZXQobV9zdHJpbmcpKTsKIAotICAgICAgICAgICAgLy8gQ3JlYXRl
IG5ldyBGb250UGxhdGZvcm1EYXRhIGZyb20gb3VyIENHRm9udFJlZiwgcG9pbnQgc2l6ZSBhbmQg
QVRTRm9udFJlZi4KLSAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21Gb250RGF0
YSgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYgKG1fZXh0ZXJu
YWxTVkdGb250RWxlbWVudCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX2V4dGVybmFsU1ZH
Rm9udEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZvbnRUYWcpKTsKKworICAgICAgICAg
ICAgICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZvbnRF
bGVtZW50Kj4obV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50LmdldCgpKTsKKyAgICAgICAgICAgICAg
ICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7CisKKyAgICAgICAgICAg
ICAgICAvLyBTZWxlY3QgZmlyc3QgPGZvbnQtZmFjZT4gY2hpbGQKKyAgICAgICAgICAgICAgICBm
b3IgKE5vZGUqIGZvbnRDaGlsZCA9IG1fZXh0ZXJuYWxTVkdGb250RWxlbWVudC0+Zmlyc3RDaGls
ZCgpOyBmb250Q2hpbGQ7IGZvbnRDaGlsZCA9IGZvbnRDaGlsZC0+bmV4dFNpYmxpbmcoKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoZm9udENoaWxkLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpm
b250X2ZhY2VUYWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb250RmFjZUVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdGb250RmFjZUVsZW1lbnQqPihmb250Q2hpbGQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZm9udEZhY2VFbGVtZW50ICYmIGZvbnRFbGVt
ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9zdmdGb250RmFjZUVsZW1lbnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGNyZWF0ZWQgdXNpbmcgYSBDU1MgQGZv
bnQtZmFjZSBydWxlLCB0aGF0IG1lYW5zIHdlJ3JlIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBTVkdG
b250RmFjZUVsZW1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGltcG9y
dGVkIDxmb250LWZhY2U+IHRhZyBhcyByZWZlcmVuY2luZyBmb250LWZhY2UgZWxlbWVudCBmb3Ig
dGhlc2UgY2FzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBtX3N2Z0ZvbnRGYWNlRWxlbWVu
dCA9IGZvbnRGYWNlRWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IG5ldyBTVkdGb250RGF0YShmb250
RmFjZUVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBmb250RGF0YS5zZXQobmV3IFNpbXBs
ZUZvbnREYXRhKG1fZm9udC0+cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyks
IHRydWUsIGZhbHNlLCBzdmdGb250RGF0YSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgbmV3IEZvbnRQ
bGF0Zm9ybURhdGEgZnJvbSBvdXIgQ0dGb250UmVmLCBwb2ludCBzaXplIGFuZCBBVFNGb250UmVm
LgorICAgICAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1cmVDdXN0b21Gb250RGF0YSgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgZm9udERhdGEuc2V0
KG5ldyBTaW1wbGVGb250RGF0YShtX2ZvbnQtPnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMpLCB0cnVlLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIGZvbnREYXRhLnNldChu
ZXcgU2ltcGxlRm9udERhdGEobV9mb250LT5wbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljKSwgdHJ1ZSwgZmFsc2UpKTsKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgICAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAg
ICAgICAgICAgIC8vIEluLURvY3VtZW50IFNWRyBGb250cworICAgICAgICAgICAgaWYgKG1fc3Zn
Rm9udEZhY2VFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgU1ZHRm9udERhdGEqIHN2Z0ZvbnRE
YXRhID0gbmV3IFNWR0ZvbnREYXRhKG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBmb250RGF0YS5zZXQobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURh
dGEoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5
bnRoZXRpY0l0YWxpYyksIHRydWUsIGZhbHNlLCBzdmdGb250RGF0YSkpOworICAgICAgICAgICAg
fQorI2VuZGlmCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBLaWNrIG9mZiB0
aGUgbG9hZCBub3cuCiAgICAgICAgIG1fZm9udC0+YmVnaW5Mb2FkSWZOZWVkZWQoZm9udFNlbGVj
dG9yLT5kb2NMb2FkZXIoKSk7Ci0KICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogdGVtcERhdGEg
PSBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBt
X3N0cmluZyk7CiAgICAgICAgIGlmICghdGVtcERhdGEpCiAgICAgICAgICAgICB0ZW1wRGF0YSA9
IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwpJ
bmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCShyZXZpc2lvbiAyOTgyMikKKysrIFdlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAg
cHJpdmF0ZToKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgUmVmUHRyPFNWR0ZvbnRGYWNl
RWxlbWVudD4gbV9zdmdGb250RmFjZUVsZW1lbnQ7CisgICAgUmVmUHRyPE5vZGU+IG1fZXh0ZXJu
YWxTVkdGb250RWxlbWVudDsKICNlbmRpZgogfTsKIApJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2VTcmNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
cmNWYWx1ZS5jcHAJKHJldmlzaW9uIDI5ODIyKQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
cmNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDEzIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCitib29sIENTU0ZvbnRGYWNlU3Jj
VmFsdWU6OmlzU1ZHRm9udEZhY2VTcmMoKSBjb25zdAoreworICAgIHJldHVybiBlcXVhbElnbm9y
aW5nQ2FzZShtX2Zvcm1hdCwgInN2ZyIpOworfQorI2VuZGlmCisKIGJvb2wgQ1NTRm9udEZhY2VT
cmNWYWx1ZTo6aXNTdXBwb3J0ZWRGb3JtYXQoKSBjb25zdAogewogICAgIC8vIE5vcm1hbGx5IHdl
IHdvdWxkIGp1c3QgY2hlY2sgdGhlIGZvcm1hdCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGNvbmZs
aWN0cyB3aXRoIHRoZSBvbGQgV2luSUUgc3R5bGUgb2YgZm9udC1mYWNlLApAQCAtMzgsOCArNDUs
MTIgQEAgYm9vbCBDU1NGb250RmFjZVNyY1ZhbHVlOjppc1N1cHBvcnRlZEZvcgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG1fZm9ybWF0LCAidHJ1ZXR5cGUiKSB8fCBlcXVhbEln
bm9yaW5nQ2FzZShtX2Zvcm1hdCwgIm9wZW50eXBlIik7CisKKyAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0Nhc2UobV9mb3JtYXQsICJ0cnVldHlwZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1fZm9y
bWF0LCAib3BlbnR5cGUiKQorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgICAgIHx8IGlz
U1ZHRm9udEZhY2VTcmMoKQorI2VuZGlmCisgICAgICAgICAgIDsKIH0KIAogU3RyaW5nIENTU0Zv
bnRGYWNlU3JjVmFsdWU6OmNzc1RleHQoKSBjb25zdApJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2VTcmNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3Jj
VmFsdWUuaAkocmV2aXNpb24gMjk4MjIpCisrKyBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1Zh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgcHVibGljOgogICAgIGJvb2wg
aXNTdXBwb3J0ZWRGb3JtYXQoKSBjb25zdDsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAg
Ym9vbCBpc1NWR0ZvbnRGYWNlU3JjKCkgY29uc3Q7CisKICAgICBTVkdGb250RmFjZUVsZW1lbnQq
IHN2Z0ZvbnRGYWNlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRm9udEZhY2VFbGVtZW50
LmdldCgpOyB9CiAgICAgdm9pZCBzZXRTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVt
ZW50KiBlbGVtZW50KSB7IG1fc3ZnRm9udEZhY2VFbGVtZW50ID0gZWxlbWVudDsgfQogI2VuZGlm
CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDI5ODIyKQorKysgV2ViQ29y
ZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogICAgICAgICAgIChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogICAgICAgICAgIChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVs
ZShjbwogICAgIGJvb2wgZm91bmRMb2NhbCA9IGZhbHNlOwogCiAjaWYgRU5BQkxFKFNWR19GT05U
UykKLSAgICBib29sIGZvdW5kSW5Eb2N1bWVudFNWR0ZvbnQgPSBmYWxzZTsKKyAgICBib29sIGZv
dW5kU1ZHRm9udCA9IGZhbHNlOwogI2VuZGlmCiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc3JjTGVu
Z3RoOyBpKyspIHsKQEAgLTE0OCw2ICsxNDgsMTAgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFk
ZEZvbnRGYWNlUnVsZShjbwogICAgICAgICBDU1NGb250RmFjZVNyY1ZhbHVlKiBpdGVtID0gc3Rh
dGljX2Nhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZSo+KHNyY0xpc3QtPml0ZW0oaSkpOwogICAgICAg
ICBDU1NGb250RmFjZVNvdXJjZSogc291cmNlID0gMDsKIAorI2lmIEVOQUJMRShTVkdfRk9OVFMp
CisgICAgICAgIGZvdW5kU1ZHRm9udCA9IGl0ZW0tPmlzU1ZHRm9udEZhY2VTcmMoKSB8fCBpdGVt
LT5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyNlbmRpZgorCiAgICAgICAgIGlmICghaXRlbS0+aXNM
b2NhbCgpKSB7CiAgICAgICAgICAgICBpZiAoaXRlbS0+aXNTdXBwb3J0ZWRGb3JtYXQoKSkgewog
ICAgICAgICAgICAgICAgIENhY2hlZEZvbnQqIGNhY2hlZEZvbnQgPSBtX2RvY3VtZW50LT5kb2NM
b2FkZXIoKS0+cmVxdWVzdEZvbnQoaXRlbS0+cmVzb3VyY2UoKSk7CkBAIC0xNTcsMjEgKzE2MSwx
NCBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvCiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgZmFtaWx5ID0gaXRlbS0+cmVzb3VyY2UoKTsKIAot
I2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgICAgICBmb3VuZEluRG9jdW1lbnRTVkdGb250
ID0gaXRlbS0+c3ZnRm9udEZhY2VFbGVtZW50KCkgIT0gMDsKLSNlbmRpZgotCiAgICAgICAgICAg
ICAvLyBUZXN0IHRoZSB2YWxpZGl0eSBvZiB0aGUgbG9jYWwgZm9udCBub3cuICBXZSBkb24ndCB3
YW50IHRvIGluY2x1ZGUgdGhpcyBmb250IGlmIGl0IGRvZXMgbm90IGV4aXN0CiAgICAgICAgICAg
ICAvLyBvbiB0aGUgc3lzdGVtLiAgSWYgaXQgKmRvZXMqIGV4aXN0IG9uIHRoZSBzeXN0ZW0sIHRo
ZW4gd2UgZG9uJ3QgbmVlZCB0byBsb29rIGFueSBmdXJ0aGVyLgogICAgICAgICAgICAgaWYgKEZv
bnRDYWNoZTo6Zm9udEV4aXN0cyhmb250RGVzY3JpcHRpb24sIGZhbWlseSkKLSNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKSAgICAKLSAgICAgICAgICAgICAgICB8fCBmb3VuZEluRG9jdW1lbnRTVkdGb250
CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgICAgICAgICB8fCBmb3VuZFNWR0ZvbnQK
ICNlbmRpZgogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgc291cmNlID0gbmV3
IENTU0ZvbnRGYWNlU291cmNlKGZhbWlseSk7Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAg
ICAgICAgICAgICBzb3VyY2UtPnNldFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLT5zdmdGb250RmFj
ZUVsZW1lbnQoKSk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBmb3VuZExvY2FsID0gdHJ1ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTc5LDggKzE3NiwxMiBAQCB2b2lkIENTU0Zv
bnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvCiAgICAgICAgIGlmICghZm9udEZhY2UpCiAg
ICAgICAgICAgICBmb250RmFjZSA9IG5ldyBDU1NGb250RmFjZSgpOwogCi0gICAgICAgIGlmIChz
b3VyY2UpCisgICAgICAgIGlmIChzb3VyY2UpIHsKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAg
ICAgICAgICAgc291cmNlLT5zZXRTVkdGb250RmFjZUVsZW1lbnQoaXRlbS0+c3ZnRm9udEZhY2VF
bGVtZW50KCkpOworI2VuZGlmCiAgICAgICAgICAgICBmb250RmFjZS0+YWRkU291cmNlKHNvdXJj
ZSk7CisgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBjYW4ganVzdCBicmVhayBpZiB3ZSBzZWUg
YSBsb2NhbCBmb250IHRoYXQgaXMgdmFsaWQuCiAgICAgICAgIGlmIChmb3VuZExvY2FsKQpAQCAt
MjMyLDkgKzIzMywxMCBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNv
CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICAgICAgLy8gU1ZHIGFsbG93cyBzZXZlcmFsIDxm
b250PiBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIGZvbnQtZmFtaWx5LCBkaWZmZXJpbmcgb25seQog
ICAgICAgICAvLyBpbiBpZS4gZm9udC12YXJpYW50LiBCZSBzdXJlIHRvIHBpY2sgdXAgdGhlIHJp
Z2h0IG9uZSAtIGluIGdldEZvbnREYXRhIGJlbG93LgotICAgICAgICBpZiAoZm91bmRJbkRvY3Vt
ZW50U1ZHRm9udCAmJiBmb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkpCisgICAgICAgIGlmIChm
b3VuZFNWR0ZvbnQgJiYgZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpKQogICAgICAgICAgICAg
ZmFtaWx5TmFtZSArPSAiLXdlYmtpdC1zdmctc21hbGwtY2FwcyI7CiAjZW5kaWYKKwogICAgICAg
ICBTdHJpbmcgaGFzaCA9IGhhc2hGb3JGb250KGZhbWlseU5hbWUubG93ZXIoKSwgZm9udERlc2Ny
aXB0aW9uLmJvbGQoKSwgZm9udERlc2NyaXB0aW9uLml0YWxpYygpKTsKICAgICAgICAgQ1NTU2Vn
bWVudGVkRm9udEZhY2UqIHNlZ21lbnRlZEZvbnRGYWNlID0gbV9mb250cy5nZXQoaGFzaCkuZ2V0
KCk7CiAgICAgICAgIGlmICghc2VnbWVudGVkRm9udEZhY2UpIHsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZEZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZv
bnQuY3BwCShyZXZpc2lvbiAyOTgyMikKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRl
ICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaWYgUExBVEZPUk0oQ0cpIHx8IFBMQVRGT1JNKFFUKSB8
fCBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAt
MzcsNiArMzgsMTQgQEAKICNpbmNsdWRlICJsb2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNW
R0ZvbnRFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHR0VsZW1lbnQuaCIKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIENhY2hlZEZvbnQ6OkNhY2hlZEZvbnQoRG9jTG9hZGVyKiBkbCwg
Y29uc3QgU3RyaW5nICZ1cmwpCkBAIC05MywxNiArMTAyLDU5IEBAIGJvb2wgQ2FjaGVkRm9udDo6
ZW5zdXJlQ3VzdG9tRm9udERhdGEoKQogICAgIHJldHVybiBtX2ZvbnREYXRhOwogfQogCi1Gb250
UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6OnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGludCBz
aXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQorRm9udFBsYXRmb3JtRGF0YSBDYWNoZWRGb250
OjpwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wg
aXRhbGljKQogeworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgaWYgKG1fZXh0ZXJuYWxTVkdE
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoc2l6ZSwgYm9sZCwgaXRh
bGljKTsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKENHKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oR1RLKQogICAgIEFTU0VSVChtX2ZvbnREYXRhKTsKLSAgICByZXR1cm4gbV9mb250RGF0YS0+
Zm9udFBsYXRmb3JtRGF0YShzaXplLCBib2xkLCBpdGFsaWMpOworICAgIHJldHVybiBtX2ZvbnRE
YXRhLT5mb250UGxhdGZvcm1EYXRhKChpbnQpIGNlaWxmKHNpemUpLCBib2xkLCBpdGFsaWMpOwog
I2Vsc2UKICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YSgpOwogI2VuZGlmCiB9CiAKKyNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQorYm9vbCBDYWNoZWRGb250OjplbnN1cmVTVkdGb250RGF0YSgpCit7
CisgICAgaWYgKCFtX2V4dGVybmFsU1ZHRG9jdW1lbnQgJiYgIW1fZXJyb3JPY2N1cnJlZCAmJiAh
bV9sb2FkaW5nICYmIG1fZGF0YSkgeworICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQgPSBu
ZXcgU1ZHRG9jdW1lbnQoRE9NSW1wbGVtZW50YXRpb246Omluc3RhbmNlKCksIDApOworICAgICAg
ICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQtPm9wZW4oKTsKKworICAgICAgICBUZXh0UmVzb3VyY2VE
ZWNvZGVyIGRlY29kZXIoImFwcGxpY2F0aW9uL3htbCIpOworICAgICAgICBtX2V4dGVybmFsU1ZH
RG9jdW1lbnQtPndyaXRlKGRlY29kZXIuZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNp
emUoKSkpOworCisgICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVudC0+ZmluaXNoUGFyc2luZygp
OworICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQtPmNsb3NlKCk7CisgICAgfQorCisgICAg
cmV0dXJuIG1fZXh0ZXJuYWxTVkdEb2N1bWVudDsKK30KKworTm9kZSogQ2FjaGVkRm9udDo6Z2V0
U1ZHRm9udEJ5SWQoY29uc3QgU3RyaW5nJiBmb250TmFtZSkgY29uc3QKK3sKKyAgICAvLyBGaW5k
IDxmb250PiBlbGVtZW50cyBpbiBleHRlcm5hbCBTVkcgZG9jdW1lbnQgYW5kIGltcG9ydCBpbiBv
dXIgZG9jdW1lbnQKKyAgICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3QgPSBtX2V4dGVybmFsU1ZHRG9j
dW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKFNWR05hbWVzOjpmb250VGFnLmxvY2FsTmFtZSgp
KTsKKyAgICBpZiAoIWxpc3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgZm9u
dHMgPSBsaXN0LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9udHM7
ICsraSkgeworICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGxpc3QtPml0ZW0oaSk7CisgICAg
ICAgIEFTU0VSVChub2RlKTsKKworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5v
ZGUuZ2V0KCkpLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpICE9IGZvbnROYW1lKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmV0dXJuIG5vZGUuZ2V0KCk7CisgICAg
fQorCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogdm9pZCBDYWNoZWRGb250OjphbGxSZWZl
cmVuY2VzUmVtb3ZlZCgpCiB7CiAjaWYgUExBVEZPUk0oQ0cpIHx8IFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShHVEspCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5oCShyZXZpc2lvbiAyOTgyMikKKysrIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTEg
QEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1
ZGUgIlNWR0RvY3VtZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBEb2NMb2FkZXI7CkBAIC01MiwxNCArNTcsMjMgQEAgcHVibGljOgogICAgIHZvaWQgY2hlY2tO
b3RpZnkoKTsKIAogICAgIHZvaWQgYmVnaW5Mb2FkSWZOZWVkZWQoRG9jTG9hZGVyKiBkbCk7CisK
ICAgICBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKCk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBw
bGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRh
bGljKTsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEo
aW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworI2lmIEVOQUJMRShTVkdfRk9OVFMp
CisgICAgYm9vbCBlbnN1cmVTVkdGb250RGF0YSgpOworICAgIE5vZGUqIGdldFNWR0ZvbnRCeUlk
KGNvbnN0IFN0cmluZyYpIGNvbnN0OworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YSogbV9mb250RGF0YTsKICAgICBib29sIG1fbG9hZEluaXRpYXRlZDsKIAor
I2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgUmVmUHRyPFNWR0RvY3VtZW50PiBtX2V4dGVybmFs
U1ZHRG9jdW1lbnQ7CisjZW5kaWYKKwogICAgIGZyaWVuZCBjbGFzcyBDYWNoZTsKIH07CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24gMjk4MjIpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDEsNiAr
NzQxLDExIEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGUKIAogaW50
IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IHgsIGJvb2wg
aW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAg
ICBpZiAocHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCkpCisgICAgICAgIHJldHVybiBvZmZzZXRG
b3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQocnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBo
cyk7CisjZW5kaWYKKwogICAgIGlmIChjYW5Vc2VHbHlwaENhY2hlKHJ1bikpCiAgICAgICAgIHJl
dHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQocnVuLCB4LCBpbmNsdWRlUGFydGlh
bEdseXBocyk7CiAgICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQocnVu
LCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aAkocmV2aXNpb24gMjk4MjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMwLDYgKzIzMCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3
VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3Qg
RmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogICAgIGZsb2F0IGZsb2F0V2lk
dGhVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1biYpIGNvbnN0OwogICAgIEZsb2F0UmVjdCBzZWxl
Y3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9p
bnQmLCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgaW50IG9mZnNldEZvclBv
c2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiwgaW50IHBvc2l0aW9uLCBi
b29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKICNlbmRpZgogICAgIHZvaWQgZHJhd0ds
eXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBo
QnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAg
IHZvaWQgZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdseXBoQnVmZmVy
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnQuY3Bw
CShyZXZpc2lvbiAyOTgyMikKKysrIFdlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2Vy
dmVyLmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgogI2luY2x1ZGUgIlhNTE5h
bWVzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7CkBAIC0zNjQsMTcgKzM2NSwx
OSBAQCBzdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTCiAgICAgICAgIGRh
dGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250LT5zaXplKCksIGZvbnRGYWNlRWxl
bWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsKICAgICAgICAgZGF0YS5sZW5ndGggPSAwLjBmOwog
CisgICAgICAgIFN0cmluZyBsYW5ndWFnZTsKKyAgICAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9
IGZhbHNlOyAvLyBIb2xkcyB0cnVlIGZvciBIVE1MIHRleHQKKworICAgICAgICAvLyBUT0RPOiBs
YW5ndWFnZSBtYXRjaGluZyAmIHN2ZyBnbHlwaHMgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBIVE1M
IHRleHQsIHRvby4KICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcnVu
LnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGJvb2wgaXNWZXJ0aWNh
bFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5zdmdT
dHlsZSgpKTsKKyAgICAgICAgICAgIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdN
b2RlKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7CiAKLSAgICAgICAgICAgIFN0
cmluZyBsYW5ndWFnZTsKICAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHJlbmRlck9iamVjdC0+ZWxlbWVudCgpKSkKICAgICAgICAg
ICAgICAgICBsYW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0
dHIpOwotCi0gICAgICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyPFNWR1RleHRSdW5XYWxrZXJNZWFz
dXJlZExlbmd0aERhdGE+IHJ1bldhbGtlcihmb250RGF0YSwgZm9udEVsZW1lbnQsIGRhdGEsIGZs
b2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxsYmFjaywgZmxvYXRXaWR0aE1pc3NpbmdHbHlwaENhbGxi
YWNrKTsKLSAgICAgICAgICAgIHJ1bldhbGtlci53YWxrKHJ1biwgaXNWZXJ0aWNhbFRleHQsIGxh
bmd1YWdlLCAwLCBydW4ubGVuZ3RoKCkpOwogICAgICAgICB9CiAKKyAgICAgICAgU1ZHVGV4dFJ1
bldhbGtlcjxTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhPiBydW5XYWxrZXIoZm9u
dERhdGEsIGZvbnRFbGVtZW50LCBkYXRhLCBmbG9hdFdpZHRoVXNpbmdTVkdGb250Q2FsbGJhY2ss
IGZsb2F0V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFjayk7CisgICAgICAgIHJ1bldhbGtlci53YWxr
KHJ1biwgaXNWZXJ0aWNhbFRleHQsIGxhbmd1YWdlLCAwLCBydW4ubGVuZ3RoKCkpOwogICAgICAg
ICByZXR1cm4gZGF0YS5sZW5ndGg7CiAgICAgfQogCkBAIC00NjYsMjQgKzQ2OSw0MSBAQCB2b2lk
IEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KEdyYXBoaWNzCiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSBkYXRhOworICAgICAgICBk
YXRhLmN1cnJlbnRQb2ludCA9IHBvaW50OworICAgICAgICBkYXRhLnNjYWxlID0gY29udmVydEVt
VW5pdFRvUGl4ZWwoc2l6ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSwgMS4wZik7
CiAKKyAgICAgICAgLy8gUmVxdWlyZWQgdG8gYmUgdmFsaWQgZm9yIFNWRyB0ZXh0IG9ubHkuCiAg
ICAgICAgIGRhdGEucmVuZGVyT2JqZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCk7
Ci0gICAgICAgIEFTU0VSVChkYXRhLnJlbmRlck9iamVjdCk7Ci0KICAgICAgICAgZGF0YS5hY3Rp
dmVQYWludFNlcnZlciA9IHJ1bi5hY3RpdmVQYWludFNlcnZlcigpOworCisgICAgICAgIC8vIElm
IHJlbmRlck9iamVjdCBpcyBub3Qgc2V0LCB3ZSdyZSBkZWFsaW5nIGZvciBIVE1MIHRleHQgcmVu
ZGVyZWQgdXNpbmcgU1ZHIEZvbnRzLgorICAgICAgICBpZiAoIWRhdGEucmVuZGVyT2JqZWN0KSB7
CisgICAgICAgICAgICBBU1NFUlQoIWRhdGEuYWN0aXZlUGFpbnRTZXJ2ZXIpOworCisgICAgICAg
ICAgICAvLyBUT0RPOiBXZSdyZSBvbmx5IHN1cHBvcnRpbmcgc2ltcGxlIGZpbGxlZCBIVE1MIHRl
eHQgc28gZmFyLgorICAgICAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCogc29saWRQYWludFNl
cnZlciA9IFNWR1BhaW50U2VydmVyOjpzaGFyZWRTb2xpZFBhaW50U2VydmVyKCk7CisgICAgICAg
ICAgICBzb2xpZFBhaW50U2VydmVyLT5zZXRDb2xvcihjb250ZXh0LT5maWxsQ29sb3IoKSk7CisK
KyAgICAgICAgICAgIGRhdGEuYWN0aXZlUGFpbnRTZXJ2ZXIgPSBzb2xpZFBhaW50U2VydmVyOwor
ICAgICAgICB9CisKICAgICAgICAgQVNTRVJUKGRhdGEuYWN0aXZlUGFpbnRTZXJ2ZXIpOwogCi0g
ICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChzaXplKCksIGZvbnRGYWNl
RWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsKLSAgICAgICAgZGF0YS5pc1ZlcnRpY2FsVGV4
dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShkYXRhLnJlbmRlck9iamVjdC0+c3R5bGUoKS0+c3Zn
U3R5bGUoKSk7ICAgIAorICAgICAgICBkYXRhLmlzVmVydGljYWxUZXh0ID0gZmFsc2U7CiAgICAg
ICAgIGRhdGEueFN0YXJ0T2Zmc2V0ID0gZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250
KHRoaXMsIHJ1biwgcnVuLnJ0bCgpID8gdG8gOiAwLCBydW4ucnRsKCkgPyBydW4ubGVuZ3RoKCkg
OiBmcm9tKTsKLSAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQgPSBwb2ludDsKICAgICAgICAgZGF0
YS5nbHlwaE9yaWdpbiA9IEZsb2F0UG9pbnQoKTsKICAgICAgICAgZGF0YS5jb250ZXh0ID0gY29u
dGV4dDsKIAogICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7Ci0gICAgICAgIGlmIChTVkdFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGRhdGEucmVuZGVyT2JqZWN0LT5l
bGVtZW50KCkpKQotICAgICAgICAgICAgbGFuZ3VhZ2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
WE1MTmFtZXM6OmxhbmdBdHRyKTsKIAorICAgICAgICAvLyBUT0RPOiBsYW5ndWFnZSBtYXRjaGlu
ZyAmIHN2ZyBnbHlwaHMgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBIVE1MIHRleHQsIHRvby4KKyAg
ICAgICAgaWYgKGRhdGEucmVuZGVyT2JqZWN0KSB7ICAgIAorICAgICAgICAgICAgZGF0YS5pc1Zl
cnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShkYXRhLnJlbmRlck9iamVjdC0+c3R5
bGUoKS0+c3ZnU3R5bGUoKSk7ICAgIAorCisgICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihkYXRhLnJlbmRlck9iamVjdC0+ZWxlbWVu
dCgpKSkKKyAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShY
TUxOYW1lczo6bGFuZ0F0dHIpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoIWRh
dGEuaXNWZXJ0aWNhbFRleHQpIHsKICAgICAgICAgICAgIGRhdGEuZ2x5cGhPcmlnaW4uc2V0WChm
b250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblgoKSAqIGRhdGEuc2NhbGUpOwogICAgICAgICAgICAg
ZGF0YS5nbHlwaE9yaWdpbi5zZXRZKGZvbnREYXRhLT5ob3Jpem9udGFsT3JpZ2luWSgpICogZGF0
YS5zY2FsZSk7CkBAIC01MDAsNiArNTIwLDE0IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25S
ZWN0Rm9yVGV4dFVzaW4KICAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkoKSwgZmxvYXRXaWR0
aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgZnJvbSwgdG8pLCBoZWlnaHQpOwog
fQogCitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0
IFRleHRSdW4mLCBpbnQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0
Cit7CisgICAgLy8gVE9ETzogRml4IHRleHQgc2VsZWN0aW9uIHdoZW4gSFRNTCB0ZXh0IGlzIGRy
YXduIHVzaW5nIGEgU1ZHIEZvbnQKKyAgICAvLyBXZSBuZWVkIHRvIGludGVncmF0ZSB0aGUgU1ZH
IHRleHQgc2VsZWN0aW9uIGNvZGUgaW4gdGhlIG9mZnNldEZvclBvc2l0aW9uKCkgZnJhbWV3b3Jr
LgorICAgIC8vIFRoaXMgd2lsbCBhbHNvIGZpeCBhIG1ham9yIGlzc3VlLCB0aGF0IFNWRyBUZXh0
IGNvZGUgY2FuJ3Qgc2VsZWN0IGFyYWJpYyBzdHJpbmdzIHByb3Blcmx5LgorICAgIHJldHVybiAw
OworfQorCiB9CiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyOTgyMikKKysrIFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwMywyNSArMzAzLDYgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6
OnJlYnVpbGRGb250RmFjZQogICAgIGlmICghcGFyZW50Tm9kZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBsb2NhbCBTVkcgZm9udHMgKHRob3NlIHdo
aWNoIGhhdmUgYSA8Zm9udD4gcGFyZW50LCBhbmQgYXJlIG9ubHkgdXNlZCB3aXRoaW4gdGhlIGRv
Y3VtZW50KQotICAgIGlmIChwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1l
KGZvbnRUYWcpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NT
VmFsdWVMaXN0OwotCi0gICAgICAgIFJlZlB0cjxDU1NGb250RmFjZVNyY1ZhbHVlPiBzcmMgPSBu
ZXcgQ1NTRm9udEZhY2VTcmNWYWx1ZShmb250RmFtaWx5KCksIHRydWUgLyogaXNMb2NhbCAqLyk7
Ci0gICAgICAgIHNyYy0+c2V0U1ZHRm9udEZhY2VFbGVtZW50KHRoaXMpOwotICAgICAgICBsaXN0
LT5hcHBlbmQoc3JjKTsKLQotICAgICAgICBDU1NQcm9wZXJ0eSBzcmNQcm9wZXJ0eShDU1NfUFJP
UF9TUkMsIGxpc3QpOwotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSogc3JjUHJvcGVydHlSZWYg
PSAmc3JjUHJvcGVydHk7Ci0gICAgICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJv
cGVydGllcygmc3JjUHJvcGVydHlSZWYsIDEpOwotCi0gICAgICAgIG1fZm9udEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KHBhcmVudE5vZGUoKSk7Ci0gICAgICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFRPRE86IEV4dGVybmFsIFNWRyBmb250cyBzdXBwb3J0IC0gcmUgdXNlIGV4aXN0aW5n
ICJjdXN0b20gZm9udCIgaGFuZGxpbmcgbG9naWMuCi0KICAgICAvLyB3ZSBjdXJyZW50bHkgaWdu
b3JlIGFsbCBidXQgdGhlIGZpcnN0IHNyYyBlbGVtZW50LCBhbHRlcm5hdGl2ZWx5IHdlIGNvdWxk
IGNvbmNhdCB0aGVtCiAgICAgU1ZHRm9udEZhY2VTcmNFbGVtZW50KiBzcmNFbGVtZW50ID0gMDsK
ICAgICBTVkdEZWZpbml0aW9uU3JjRWxlbWVudCogZGVmaW5pdGlvblNyYyA9IDA7CkBAIC0zMzks
MTIgKzMyMCwzNSBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRGYWNlCiAg
ICAgICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTX1BST1BfREVGSU5JVElP
Tl9TUkMsIGRlZmluaXRpb25TcmMtPmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0ciks
IGZhbHNlKTsKICNlbmRpZgogCi0gICAgaWYgKHNyY0VsZW1lbnQpIHsKLSAgICAgICAgLy8gVGhp
cyBpcyB0aGUgb25seSBjbGFzcyAob3RoZXIgdGhhbiBDU1NQYXJzZXIpIHRvIGNyZWF0ZSBDU1NW
YWx1ZSBvYmplY3RzIGFuZCBzZXQgdGhlbSBvbiB0aGUgQ1NTU3R5bGVEZWNsYXJhdGlvbiBtYW51
YWxseQotICAgICAgICAvLyB3ZSB1c2UgdGhlIGFkZFBhcnNlZFByb3BlcnRpZXMgbWV0aG9kLCBh
bmQgZmFrZSBoYXZpbmcgYW4gYXJyYXkgb2YgQ1NTUHJvcGVydHkgcG9pbnRlcnMuCi0gICAgICAg
IENTU1Byb3BlcnR5IHNyY1Byb3BlcnR5KENTU19QUk9QX1NSQywgc3JjRWxlbWVudC0+c3JjVmFs
dWUoKSk7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5KiBzcmNQcm9wZXJ0eVJlZiA9ICZzcmNQ
cm9wZXJ0eTsKLSAgICAgICAgbV9zdHlsZURlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0aWVz
KCZzcmNQcm9wZXJ0eVJlZiwgMSk7CisgICAgYm9vbCBkZXNjcmliZXNQYXJlbnRGb250ID0gcGFy
ZW50Tm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGxpc3Q7CisKKyAgICBpZiAoZGVzY3JpYmVzUGFyZW50Rm9udCkgeworICAgICAgICBtX2ZvbnRF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRm9udEVsZW1lbnQqPihwYXJlbnROb2RlKCkpOworCisg
ICAgICAgIGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0OworICAgICAgICBsaXN0LT5hcHBlbmQobmV3
IENTU0ZvbnRGYWNlU3JjVmFsdWUoZm9udEZhbWlseSgpLCB0cnVlKSk7CisgICAgfSBlbHNlIGlm
IChzcmNFbGVtZW50KQorICAgICAgICBsaXN0ID0gc3JjRWxlbWVudC0+c3JjVmFsdWUoKTsKKwor
ICAgIGlmICghbGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUGFyc2UgaW4tbWVtb3J5
IENTUyBydWxlcworICAgIENTU1Byb3BlcnR5IHNyY1Byb3BlcnR5KENTU19QUk9QX1NSQywgbGlz
dCk7CisgICAgY29uc3QgQ1NTUHJvcGVydHkqIHNyY1Byb3BlcnR5UmVmID0gJnNyY1Byb3BlcnR5
OworICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydGllcygmc3JjUHJvcGVy
dHlSZWYsIDEpOworCisgICAgaWYgKGRlc2NyaWJlc1BhcmVudEZvbnQpIHsgICAgCisgICAgICAg
IC8vIFRyYXZlcnNlIHBhcnNlZCBDU1MgdmFsdWVzIGFuZCBhc3NvY2lhdGUgQ1NTRm9udEZhY2VT
cmNWYWx1ZSBlbGVtZW50cyB3aXRoIG91cnNlbHZlcy4KKyAgICAgICAgUmVmUHRyPENTU1ZhbHVl
PiBzcmMgPSBtX3N0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTX1BST1Bf
U1JDKTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0KiBzcmNMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFs
dWVMaXN0Kj4oc3JjLmdldCgpKTsKKworICAgICAgICB1bnNpZ25lZCBzcmNMZW5ndGggPSBzcmNM
aXN0ID8gc3JjTGlzdC0+bGVuZ3RoKCkgOiAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3JjTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChDU1NGb250RmFjZVNyY1Zh
bHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZSo+KHNyY0xpc3QtPml0
ZW0oaSkpKQorICAgICAgICAgICAgICAgIGl0ZW0tPnNldFNWR0ZvbnRGYWNlRWxlbWVudCh0aGlz
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0
b3IoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VVcmlFbGVtZW50LmNwcAkocmV2aXNpb24g
Mjk4MjIpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw4IEBAIFNWR0ZvbnRGYWNlVXJpRWxlbWVudDo6U1ZHRm9udEZh
Y2VVcmlFbGUKIFBhc3NSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gU1ZHRm9udEZhY2VVcmlF
bGVtZW50OjpzcmNWYWx1ZSgpIGNvbnN0CiB7CiAgICAgUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFs
dWU+IHNyYyA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKGdldEF0dHJpYnV0ZShYTGlua05hbWVz
OjpocmVmQXR0ciksIGZhbHNlKTsKLSAgICBzcmMtPnNldEZvcm1hdChnZXRBdHRyaWJ1dGUoZm9y
bWF0QXR0cikpOworICAgIEF0b21pY1N0cmluZyB2YWx1ZShnZXRBdHRyaWJ1dGUoZm9ybWF0QXR0
cikpOworICAgIHNyYy0+c2V0Rm9ybWF0KHZhbHVlLmlzRW1wdHkoKSA/ICJzdmciIDogdmFsdWUp
OyAvLyBEZWZhdWx0IGZvcm1hdAogICAgIHJldHVybiBzcmMucmVsZWFzZSgpOwogfQogCkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyOTgyMikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDA4LTAxLTI4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIGxheW91dCB0ZXN0cyBhZnRlciBhZGRpbmcgZXh0ZXJuYWwgU1ZH
IEZvbnRzIHN1cHBvcnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4x
L2ZvbnRzLWVsZW0tMDMtYi1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDMtYi1leHBlY3RlZC5wbmc6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTAzLWItZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0w
NC1iLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNW
Ry0xLjEvZm9udHMtZWxlbS0wNC1iLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDQtYi1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTA3LWItZXhwZWN0ZWQu
Y2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1l
bGVtLTA3LWItZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNW
Ry0xLjEvZm9udHMtZWxlbS0wNy1iLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvc3ZnL2N1c3RvbS9zdmctZm9udHMtaW4taHRtbC1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vc3ZnLWZvbnRzLWluLWh0bWwtZXhw
ZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS9zdmct
Zm9udHMtaW4taHRtbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20v
cmVzb3VyY2VzL2dyYWZmaXRpLnN2ZzogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9zdmct
Zm9udHMtaW4taHRtbC5odG1sOiBBZGRlZC4KKwogMjAwOC0wMS0yNyAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18742</attachid>
            <date>2008-01-28 14:08:21 -0800</date>
            <delta_ts>2008-01-28 15:05:24 -0800</delta_ts>
            <desc>Final patch</desc>
            <filename>SVGExternalFonts.diff</filename>
            <type>text/plain</type>
            <size>26714</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTgzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDgtMDEtMjggIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBFcmljLCBEYW4gJiBPbGl2ZXIuCisK
KyAgICAgICAgRml4ZXM6IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
OTgwCisKKyAgICAgICAgU3VwcG9ydCBleHRlcm5hbCBTVkcgRm9udHMsIGJ5IHJldXNpbmcgdGhl
IGN1c3RvbSBmb250IGhhbmRsaW5nIGxvZ2ljLgorICAgICAgICBUaGlzIGVuYWJsZXMgdXMgLSBh
cyBmaXJzdCBlbmdpbmUgLSB0byByZW5kZXIgSFRNTCBwYWdlcyB1c2luZyBTVkcgRm9udHMuCisK
KyAgICAgICAgRml4ZXMgZm9udHMtZWxlbS0wMy1iLnN2ZyAvIGZvbnRzLWVsZW0tMDQtYi5zdmcg
LyBmb250cy1lbGVtLTA3LWIuc3ZnCisgICAgICAgIEFkZCBuZXcgdGVzdGNhc2Ugc3ZnLWZvbnRz
LWluLWh0bWwuaHRtbC4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOgorICAgICAg
ICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNy
Y1ZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU3JjVmFsdWU6OmlzU1ZH
Rm9udEZhY2VTcmMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1ZTo6aXNT
dXBwb3J0ZWRGb3JtYXQpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmg6Cisg
ICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
b250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEZv
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6fkNhY2hlZEZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6ZW5zdXJlU1ZHRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkRm9udDo6ZXh0cmFjdEZvbnRGcm9tU1ZHRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRGb250OjpwbGF0Zm9ybURhdGFGcm9tU1ZHRGF0YSk6CisgICAgICAgICog
bG9hZGVyL0NhY2hlZEZvbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udCk6CisgICAg
ICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
b250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRG
YWNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VVcmlFbGVtZW50OjpzcmNWYWx1ZSk6CisKIDIw
MDgtMDEtMjggIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5j
cHAJKHJldmlzaW9uIDI5ODM3KQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiwxMSBAQAogI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTVkdGb250RGF0
YS5oIgotI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIgCisjaW5jbHVkZSAiU1ZH
Rm9udEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTMsMjUgKzExNiw2MSBAQCBTaW1wbGVGb250RGF0YSog
Q1NTRm9udEZhY2VTb3VyY2U6OmdldEZvCiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwgbG9hZGlu
ZywgdGhlbiB3ZSBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNMb2FkZWQo
KSkgeworICAgICAgICBpZiAobV9mb250KSB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAg
ICAgaWYgKG1fc3ZnRm9udEZhY2VFbGVtZW50KQotICAgICAgICAgICAgZm9udERhdGEuc2V0KG5l
dyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBmYWxzZSwgbmV3IFNWR0Zv
bnREYXRhKG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSkpOwotI2VuZGlmCisgICAgICAgICAg
ICAvLyBGb3IgU1ZHIGZvbnRzIHBhcnNlIHRoZSBleHRlcm5hbCBTVkcgZG9jdW1lbnQsIGFuZCBl
eHRyYWN0IHRoZSA8Zm9udD4gZWxlbWVudC4KKyAgICAgICAgICAgIGlmICghbV9mb250LT5lbnN1
cmVTVkdGb250RGF0YSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIGlm
ICghZm9udERhdGEpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2ZvbnQpOworICAgICAgICAgICAg
aWYgKCFtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQpCisgICAgICAgICAgICAgICAgbV9leHRlcm5h
bFNWR0ZvbnRFbGVtZW50ID0gbV9mb250LT5nZXRTVkdGb250QnlJZChTVkdVUklSZWZlcmVuY2U6
OmdldFRhcmdldChtX3N0cmluZykpOwogCi0gICAgICAgICAgICAvLyBDcmVhdGUgbmV3IEZvbnRQ
bGF0Zm9ybURhdGEgZnJvbSBvdXIgQ0dGb250UmVmLCBwb2ludCBzaXplIGFuZCBBVFNGb250UmVm
LgotICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmVuc3VyZUN1c3RvbUZvbnREYXRhKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAobV9leHRlcm5hbFNWR0ZvbnRF
bGVtZW50KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fZXh0ZXJuYWxTVkdGb250RWxlbWVu
dC0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9udFRhZykpOworCisgICAgICAgICAgICAgICAgU1ZH
Rm9udEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRm9udEVsZW1lbnQqPiht
X2V4dGVybmFsU1ZHRm9udEVsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIFNWR0ZvbnRG
YWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKKworICAgICAgICAgICAgICAgIC8vIFNl
bGVjdCBmaXJzdCA8Zm9udC1mYWNlPiBjaGlsZAorICAgICAgICAgICAgICAgIGZvciAoTm9kZSog
Zm9udENoaWxkID0gbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50LT5maXJzdENoaWxkKCk7IGZvbnRD
aGlsZDsgZm9udENoaWxkID0gZm9udENoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChmb250Q2hpbGQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZvbnRfZmFjZVRh
ZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYWNlRWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0ZvbnRGYWNlRWxlbWVudCo+KGZvbnRDaGlsZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmIChmb250RmFjZUVsZW1lbnQgJiYgZm9udEVsZW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX3N2Z0ZvbnRGYWNlRWxlbWVudCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UncmUgY3JlYXRlZCB1c2luZyBhIENTUyBAZm9udC1mYWNlIHJ1
bGUsIHRoYXQgbWVhbnMgd2UncmUgbm90IGFzc29jaWF0ZWQgd2l0aCBhIFNWR0ZvbnRGYWNlRWxl
bWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgaW1wb3J0ZWQgPGZvbnQt
ZmFjZT4gdGFnIGFzIHJlZmVyZW5jaW5nIGZvbnQtZmFjZSBlbGVtZW50IGZvciB0aGVzZSBjYXNl
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50ID0gZm9udEZh
Y2VFbGVtZW50OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
U1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhID0gbmV3IFNWR0ZvbnREYXRhKGZvbnRGYWNlRWxlbWVu
dCk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREYXRhLnNldChuZXcgU2ltcGxlRm9udERhdGEo
bV9mb250LT5wbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0
ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSwgdHJ1ZSwgZmFs
c2UsIHN2Z0ZvbnREYXRhKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgRm9udFBsYXRmb3JtRGF0
YSBmcm9tIG91ciBDR0ZvbnRSZWYsIHBvaW50IHNpemUgYW5kIEFUU0ZvbnRSZWYuCisgICAgICAg
ICAgICAgICAgaWYgKCFtX2ZvbnQtPmVuc3VyZUN1c3RvbUZvbnREYXRhKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICBmb250RGF0YS5zZXQobmV3IFNpbXBs
ZUZvbnREYXRhKG1fZm9udC0+cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyks
IHRydWUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgZm9udERhdGEuc2V0KG5ldyBTaW1wbGVG
b250RGF0YShtX2ZvbnQtPnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpLCB0
cnVlLCBmYWxzZSkpOworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgICAgICB9CisjZW5k
aWYKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgICAgICAgICAg
Ly8gSW4tRG9jdW1lbnQgU1ZHIEZvbnRzCisgICAgICAgICAgICBpZiAobV9zdmdGb250RmFjZUVs
ZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBuZXcg
U1ZHRm9udERhdGEobV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgICAg
IGZvbnREYXRhLnNldChuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShmb250RGVz
Y3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRh
bGljKSwgdHJ1ZSwgZmFsc2UsIHN2Z0ZvbnREYXRhKSk7CisgICAgICAgICAgICB9CisjZW5kaWYK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEtpY2sgb2ZmIHRoZSBsb2FkIG5v
dy4KICAgICAgICAgbV9mb250LT5iZWdpbkxvYWRJZk5lZWRlZChmb250U2VsZWN0b3ItPmRvY0xv
YWRlcigpKTsKLQogICAgICAgICBGb250UGxhdGZvcm1EYXRhKiB0ZW1wRGF0YSA9IEZvbnRDYWNo
ZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIG1fc3RyaW5nKTsK
ICAgICAgICAgaWYgKCF0ZW1wRGF0YSkKICAgICAgICAgICAgIHRlbXBEYXRhID0gRm9udENhY2hl
OjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7CkluZGV4OiBXZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlU291cmNlLmgJKHJldmlzaW9uIDI5ODM3KQorKysgV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBwcml2YXRlOgog
CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBSZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50PiBt
X3N2Z0ZvbnRGYWNlRWxlbWVudDsKKyAgICBSZWZQdHI8Tm9kZT4gbV9leHRlcm5hbFNWR0ZvbnRF
bGVtZW50OwogI2VuZGlmCiB9OwogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1Zh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNw
cAkocmV2aXNpb24gMjk4MzcpCisrKyBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisjaWYgRU5BQkxFKFNWR19GT05UUykKK2Jvb2wgQ1NTRm9udEZhY2VTcmNWYWx1ZTo6aXNT
VkdGb250RmFjZVNyYygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG1f
Zm9ybWF0LCAic3ZnIik7Cit9CisjZW5kaWYKKwogYm9vbCBDU1NGb250RmFjZVNyY1ZhbHVlOjpp
c1N1cHBvcnRlZEZvcm1hdCgpIGNvbnN0CiB7CiAgICAgLy8gTm9ybWFsbHkgd2Ugd291bGQganVz
dCBjaGVjayB0aGUgZm9ybWF0LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGgg
dGhlIG9sZCBXaW5JRSBzdHlsZSBvZiBmb250LWZhY2UsCkBAIC0zOCw4ICs0NSwxMiBAQCBib29s
IENTU0ZvbnRGYWNlU3JjVmFsdWU6OmlzU3VwcG9ydGVkRm9yCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gZXF1
YWxJZ25vcmluZ0Nhc2UobV9mb3JtYXQsICJ0cnVldHlwZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KG1fZm9ybWF0LCAib3BlbnR5cGUiKTsKKworICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZSht
X2Zvcm1hdCwgInRydWV0eXBlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobV9mb3JtYXQsICJvcGVu
dHlwZSIpCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgICAgfHwgaXNTVkdGb250RmFj
ZVNyYygpCisjZW5kaWYKKyAgICAgICAgICAgOwogfQogCiBTdHJpbmcgQ1NTRm9udEZhY2VTcmNW
YWx1ZTo6Y3NzVGV4dCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oCShy
ZXZpc2lvbiAyOTgzNykKKysrIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N1cHBvcnRl
ZEZvcm1hdCgpIGNvbnN0OwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBib29sIGlzU1ZH
Rm9udEZhY2VTcmMoKSBjb25zdDsKKwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZh
Y2VFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCk7IH0K
ICAgICB2b2lkIHNldFNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQqIGVsZW1l
bnQpIHsgbV9zdmdGb250RmFjZUVsZW1lbnQgPSBlbGVtZW50OyB9CiAjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMjk4MzcpCisrKyBXZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiAgICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MCw3
ICsxNDAsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvCiAgICAg
Ym9vbCBmb3VuZExvY2FsID0gZmFsc2U7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGJv
b2wgZm91bmRJbkRvY3VtZW50U1ZHRm9udCA9IGZhbHNlOworICAgIGJvb2wgZm91bmRTVkdGb250
ID0gZmFsc2U7CiAjZW5kaWYKIAogICAgIGZvciAoaSA9IDA7IGkgPCBzcmNMZW5ndGg7IGkrKykg
ewpAQCAtMTQ4LDYgKzE0OCwxMCBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VS
dWxlKGNvCiAgICAgICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxD
U1NGb250RmFjZVNyY1ZhbHVlKj4oc3JjTGlzdC0+aXRlbShpKSk7CiAgICAgICAgIENTU0ZvbnRG
YWNlU291cmNlKiBzb3VyY2UgPSAwOwogCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAgICAg
Zm91bmRTVkdGb250ID0gaXRlbS0+aXNTVkdGb250RmFjZVNyYygpIHx8IGl0ZW0tPnN2Z0ZvbnRG
YWNlRWxlbWVudCgpOworI2VuZGlmCisKICAgICAgICAgaWYgKCFpdGVtLT5pc0xvY2FsKCkpIHsK
ICAgICAgICAgICAgIGlmIChpdGVtLT5pc1N1cHBvcnRlZEZvcm1hdCgpKSB7CiAgICAgICAgICAg
ICAgICAgQ2FjaGVkRm9udCogY2FjaGVkRm9udCA9IG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5y
ZXF1ZXN0Rm9udChpdGVtLT5yZXNvdXJjZSgpKTsKQEAgLTE1NywyMSArMTYxLDE0IEBAIHZvaWQg
Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY28KICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIFN0cmluZyBmYW1pbHkgPSBpdGVtLT5yZXNvdXJjZSgpOwogCi0jaWYgRU5BQkxF
KFNWR19GT05UUykKLSAgICAgICAgICAgIGZvdW5kSW5Eb2N1bWVudFNWR0ZvbnQgPSBpdGVtLT5z
dmdGb250RmFjZUVsZW1lbnQoKSAhPSAwOwotI2VuZGlmCi0KICAgICAgICAgICAgIC8vIFRlc3Qg
dGhlIHZhbGlkaXR5IG9mIHRoZSBsb2NhbCBmb250IG5vdy4gIFdlIGRvbid0IHdhbnQgdG8gaW5j
bHVkZSB0aGlzIGZvbnQgaWYgaXQgZG9lcyBub3QgZXhpc3QKICAgICAgICAgICAgIC8vIG9uIHRo
ZSBzeXN0ZW0uICBJZiBpdCAqZG9lcyogZXhpc3Qgb24gdGhlIHN5c3RlbSwgdGhlbiB3ZSBkb24n
dCBuZWVkIHRvIGxvb2sgYW55IGZ1cnRoZXIuCiAgICAgICAgICAgICBpZiAoRm9udENhY2hlOjpm
b250RXhpc3RzKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KQotI2lmIEVOQUJMRShTVkdfRk9OVFMp
ICAgIAotICAgICAgICAgICAgICAgIHx8IGZvdW5kSW5Eb2N1bWVudFNWR0ZvbnQKKyNpZiBFTkFC
TEUoU1ZHX0ZPTlRTKQorICAgICAgICAgICAgICAgIHx8IGZvdW5kU1ZHRm9udAogI2VuZGlmCiAg
ICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICBzb3VyY2UgPSBuZXcgQ1NTRm9udEZh
Y2VTb3VyY2UoZmFtaWx5KTsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICAgICAgICAg
IHNvdXJjZS0+c2V0U1ZHRm9udEZhY2VFbGVtZW50KGl0ZW0tPnN2Z0ZvbnRGYWNlRWxlbWVudCgp
KTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIGZvdW5kTG9jYWwgPSB0cnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0xNzksOCArMTc2LDEyIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9y
OjphZGRGb250RmFjZVJ1bGUoY28KICAgICAgICAgaWYgKCFmb250RmFjZSkKICAgICAgICAgICAg
IGZvbnRGYWNlID0gbmV3IENTU0ZvbnRGYWNlKCk7CiAKLSAgICAgICAgaWYgKHNvdXJjZSkKKyAg
ICAgICAgaWYgKHNvdXJjZSkgeworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgICAgICBz
b3VyY2UtPnNldFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLT5zdmdGb250RmFjZUVsZW1lbnQoKSk7
CisjZW5kaWYKICAgICAgICAgICAgIGZvbnRGYWNlLT5hZGRTb3VyY2Uoc291cmNlKTsKKyAgICAg
ICAgfQogCiAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGJyZWFrIGlmIHdlIHNlZSBhIGxvY2FsIGZv
bnQgdGhhdCBpcyB2YWxpZC4KICAgICAgICAgaWYgKGZvdW5kTG9jYWwpCkBAIC0yMzIsOSArMjMz
LDEwIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY28KICNpZiBFTkFC
TEUoU1ZHX0ZPTlRTKQogICAgICAgICAvLyBTVkcgYWxsb3dzIHNldmVyYWwgPGZvbnQ+IGVsZW1l
bnRzIHdpdGggdGhlIHNhbWUgZm9udC1mYW1pbHksIGRpZmZlcmluZyBvbmx5CiAgICAgICAgIC8v
IGluIGllLiBmb250LXZhcmlhbnQuIEJlIHN1cmUgdG8gcGljayB1cCB0aGUgcmlnaHQgb25lIC0g
aW4gZ2V0Rm9udERhdGEgYmVsb3cuCi0gICAgICAgIGlmIChmb3VuZEluRG9jdW1lbnRTVkdGb250
ICYmIGZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSkKKyAgICAgICAgaWYgKGZvdW5kU1ZHRm9u
dCAmJiBmb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCkpCiAgICAgICAgICAgICBmYW1pbHlOYW1l
ICs9ICItd2Via2l0LXN2Zy1zbWFsbC1jYXBzIjsKICNlbmRpZgorCiAgICAgICAgIFN0cmluZyBo
YXNoID0gaGFzaEZvckZvbnQoZmFtaWx5TmFtZS5sb3dlcigpLCBmb250RGVzY3JpcHRpb24uYm9s
ZCgpLCBmb250RGVzY3JpcHRpb24uaXRhbGljKCkpOwogICAgICAgICBDU1NTZWdtZW50ZWRGb250
RmFjZSogc2VnbWVudGVkRm9udEZhY2UgPSBtX2ZvbnRzLmdldChoYXNoKS5nZXQoKTsKICAgICAg
ICAgaWYgKCFzZWdtZW50ZWRGb250RmFjZSkgewpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
Rm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5jcHAJKHJl
dmlzaW9uIDI5ODM3KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIuaCIKKyNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0
Zm9ybURhdGEuaCIKICNpZiBQTEFURk9STShDRykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KEdUSykKICNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCkBAIC0zNyw2ICszOCwx
NCBAQAogI2luY2x1ZGUgImxvYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lm
IEVOQUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9k
ZUxpc3QuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRm9udEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJTVkdHRWxlbWVudC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogQ2FjaGVkRm9udDo6Q2FjaGVkRm9udChEb2NMb2FkZXIqIGRsLCBjb25zdCBTdHJp
bmcgJnVybCkKQEAgLTkzLDE2ICsxMDIsNTggQEAgYm9vbCBDYWNoZWRGb250OjplbnN1cmVDdXN0
b21Gb250RGF0YSgpCiAgICAgcmV0dXJuIG1fZm9udERhdGE7CiB9CiAKLUZvbnRQbGF0Zm9ybURh
dGEgQ2FjaGVkRm9udDo6cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoaW50IHNpemUsIGJvb2wg
Ym9sZCwgYm9vbCBpdGFsaWMpCitGb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6OnBsYXRmb3Jt
RGF0YUZyb21DdXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCiB7
CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBpZiAobV9leHRlcm5hbFNWR0RvY3VtZW50KQor
ICAgICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShzaXplLCBib2xkLCBpdGFsaWMpOworI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oQ0cpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAg
ICAgQVNTRVJUKG1fZm9udERhdGEpOwotICAgIHJldHVybiBtX2ZvbnREYXRhLT5mb250UGxhdGZv
cm1EYXRhKHNpemUsIGJvbGQsIGl0YWxpYyk7CisgICAgcmV0dXJuIG1fZm9udERhdGEtPmZvbnRQ
bGF0Zm9ybURhdGEoc3RhdGljX2Nhc3Q8aW50PihzaXplKSwgYm9sZCwgaXRhbGljKTsKICNlbHNl
CiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoKTsKICNlbmRpZgogfQogCisjaWYgRU5BQkxF
KFNWR19GT05UUykKK2Jvb2wgQ2FjaGVkRm9udDo6ZW5zdXJlU1ZHRm9udERhdGEoKQoreworICAg
IGlmICghbV9leHRlcm5hbFNWR0RvY3VtZW50ICYmICFtX2Vycm9yT2NjdXJyZWQgJiYgIW1fbG9h
ZGluZyAmJiBtX2RhdGEpIHsKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50ID0gbmV3IFNW
R0RvY3VtZW50KERPTUltcGxlbWVudGF0aW9uOjppbnN0YW5jZSgpLCAwKTsKKyAgICAgICAgbV9l
eHRlcm5hbFNWR0RvY3VtZW50LT5vcGVuKCk7CisKKyAgICAgICAgVGV4dFJlc291cmNlRGVjb2Rl
ciBkZWNvZGVyKCJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3Vt
ZW50LT53cml0ZShkZWNvZGVyLmRlY29kZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkp
KTsKKworICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQtPmZpbmlzaFBhcnNpbmcoKTsKKyAg
ICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT5jbG9zZSgpOworICAgIH0KKworICAgIHJldHVy
biBtX2V4dGVybmFsU1ZHRG9jdW1lbnQ7Cit9CisKK05vZGUqIENhY2hlZEZvbnQ6OmdldFNWR0Zv
bnRCeUlkKGNvbnN0IFN0cmluZyYgZm9udE5hbWUpIGNvbnN0Cit7CisgICAgUmVmUHRyPE5vZGVM
aXN0PiBsaXN0ID0gbV9leHRlcm5hbFNWR0RvY3VtZW50LT5nZXRFbGVtZW50c0J5VGFnTmFtZShT
VkdOYW1lczo6Zm9udFRhZy5sb2NhbE5hbWUoKSk7CisgICAgaWYgKCFsaXN0KQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGZvbnRzID0gbGlzdC0+bGVuZ3RoKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnRzOyArK2kpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9
IGxpc3QtPml0ZW0oaSk7CisgICAgICAgIEFTU0VSVChub2RlKTsKKworICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIp
ICE9IGZvbnROYW1lKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmV0dXJuIG5v
ZGU7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogdm9pZCBDYWNoZWRGb250
OjphbGxSZWZlcmVuY2VzUmVtb3ZlZCgpCiB7CiAjaWYgUExBVEZPUk0oQ0cpIHx8IFBMQVRGT1JN
KFFUKSB8fCBQTEFURk9STShHVEspCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5oCShyZXZpc2lvbiAyOTgz
NykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksMTEgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5o
IgorI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBEb2NMb2FkZXI7CkBAIC01MiwxNCArNTcsMjMgQEAgcHVibGljOgogICAgIHZv
aWQgY2hlY2tOb3RpZnkoKTsKIAogICAgIHZvaWQgYmVnaW5Mb2FkSWZOZWVkZWQoRG9jTG9hZGVy
KiBkbCk7CisKICAgICBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKCk7CisgICAgRm9udFBsYXRm
b3JtRGF0YSBwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljKTsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJvbUN1
c3RvbURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworI2lmIEVOQUJMRShT
VkdfRk9OVFMpCisgICAgYm9vbCBlbnN1cmVTVkdGb250RGF0YSgpOworICAgIE5vZGUqIGdldFNW
R0ZvbnRCeUlkKGNvbnN0IFN0cmluZyYpIGNvbnN0OworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAg
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSogbV9mb250RGF0YTsKICAgICBib29sIG1fbG9hZEluaXRp
YXRlZDsKIAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgUmVmUHRyPFNWR0RvY3VtZW50PiBt
X2V4dGVybmFsU1ZHRG9jdW1lbnQ7CisjZW5kaWYKKwogICAgIGZyaWVuZCBjbGFzcyBDYWNoZTsK
IH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24gMjk4Mzcp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NDEsNiArNzQxLDExIEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yU2ltcGxl
VGUKIAogaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mIHJ1biwgaW50
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CisjaWYgRU5BQkxFKFNWR19G
T05UUykKKyAgICBpZiAocHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCkpCisgICAgICAgIHJldHVy
biBvZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQocnVuLCB4LCBpbmNsdWRlUGFy
dGlhbEdseXBocyk7CisjZW5kaWYKKwogICAgIGlmIChjYW5Vc2VHbHlwaENhY2hlKHJ1bikpCiAg
ICAgICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQocnVuLCB4LCBpbmNs
dWRlUGFydGlhbEdseXBocyk7CiAgICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxl
eFRleHQocnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaAkocmV2aXNpb24gMjk4MzcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDYgKzIzMCw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogICAgIGZsb2F0
IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1biYpIGNvbnN0OwogICAgIEZsb2F0
UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiwgY29u
c3QgSW50UG9pbnQmLCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgaW50IG9m
ZnNldEZvclBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiwgaW50IHBv
c2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKICNlbmRpZgogICAgIHZv
aWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNv
bnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNv
bnN0OwogICAgIHZvaWQgZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEds
eXBoQnVmZmVyJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R0ZvbnQuY3BwCShyZXZpc2lvbiAyOTgzNykKKysrIFdlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R1BhaW50U2VydmVyLmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgogI2luY2x1
ZGUgIlhNTE5hbWVzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7CkBAIC0zNjQs
MTcgKzM2NSwxOSBAQCBzdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTCiAg
ICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250LT5zaXplKCksIGZv
bnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsKICAgICAgICAgZGF0YS5sZW5ndGgg
PSAwLjBmOwogCisgICAgICAgIFN0cmluZyBsYW5ndWFnZTsKKyAgICAgICAgYm9vbCBpc1ZlcnRp
Y2FsVGV4dCA9IGZhbHNlOyAvLyBIb2xkcyB0cnVlIGZvciBIVE1MIHRleHQKKworICAgICAgICAv
LyBUT0RPOiBsYW5ndWFnZSBtYXRjaGluZyAmIHN2ZyBnbHlwaHMgc2hvdWxkIGJlIHBvc3NpYmxl
IGZvciBIVE1MIHRleHQsIHRvby4KICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGJvb2wg
aXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocmVuZGVyT2JqZWN0LT5zdHls
ZSgpLT5zdmdTdHlsZSgpKTsKKyAgICAgICAgICAgIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNh
bFdyaXRpbmdNb2RlKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7CiAKLSAgICAg
ICAgICAgIFN0cmluZyBsYW5ndWFnZTsKICAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHJlbmRlck9iamVjdC0+ZWxlbWVudCgpKSkK
ICAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxOYW1l
czo6bGFuZ0F0dHIpOwotCi0gICAgICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyPFNWR1RleHRSdW5X
YWxrZXJNZWFzdXJlZExlbmd0aERhdGE+IHJ1bldhbGtlcihmb250RGF0YSwgZm9udEVsZW1lbnQs
IGRhdGEsIGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxsYmFjaywgZmxvYXRXaWR0aE1pc3NpbmdH
bHlwaENhbGxiYWNrKTsKLSAgICAgICAgICAgIHJ1bldhbGtlci53YWxrKHJ1biwgaXNWZXJ0aWNh
bFRleHQsIGxhbmd1YWdlLCAwLCBydW4ubGVuZ3RoKCkpOwogICAgICAgICB9CiAKKyAgICAgICAg
U1ZHVGV4dFJ1bldhbGtlcjxTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhPiBydW5X
YWxrZXIoZm9udERhdGEsIGZvbnRFbGVtZW50LCBkYXRhLCBmbG9hdFdpZHRoVXNpbmdTVkdGb250
Q2FsbGJhY2ssIGZsb2F0V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFjayk7CisgICAgICAgIHJ1bldh
bGtlci53YWxrKHJ1biwgaXNWZXJ0aWNhbFRleHQsIGxhbmd1YWdlLCAwLCBydW4ubGVuZ3RoKCkp
OwogICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGg7CiAgICAgfQogCkBAIC00NjYsMjQgKzQ2OSw0
MSBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KEdyYXBoaWNzCiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSBkYXRhOwor
ICAgICAgICBkYXRhLmN1cnJlbnRQb2ludCA9IHBvaW50OworICAgICAgICBkYXRhLnNjYWxlID0g
Y29udmVydEVtVW5pdFRvUGl4ZWwoc2l6ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0o
KSwgMS4wZik7CiAKKyAgICAgICAgLy8gUmVxdWlyZWQgdG8gYmUgdmFsaWQgZm9yIFNWRyB0ZXh0
IG9ubHkuCiAgICAgICAgIGRhdGEucmVuZGVyT2JqZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVy
T2JqZWN0KCk7Ci0gICAgICAgIEFTU0VSVChkYXRhLnJlbmRlck9iamVjdCk7Ci0KICAgICAgICAg
ZGF0YS5hY3RpdmVQYWludFNlcnZlciA9IHJ1bi5hY3RpdmVQYWludFNlcnZlcigpOworCisgICAg
ICAgIC8vIElmIHJlbmRlck9iamVjdCBpcyBub3Qgc2V0LCB3ZSdyZSBkZWFsaW5nIGZvciBIVE1M
IHRleHQgcmVuZGVyZWQgdXNpbmcgU1ZHIEZvbnRzLgorICAgICAgICBpZiAoIWRhdGEucmVuZGVy
T2JqZWN0KSB7CisgICAgICAgICAgICBBU1NFUlQoIWRhdGEuYWN0aXZlUGFpbnRTZXJ2ZXIpOwor
CisgICAgICAgICAgICAvLyBUT0RPOiBXZSdyZSBvbmx5IHN1cHBvcnRpbmcgc2ltcGxlIGZpbGxl
ZCBIVE1MIHRleHQgc28gZmFyLgorICAgICAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCogc29s
aWRQYWludFNlcnZlciA9IFNWR1BhaW50U2VydmVyOjpzaGFyZWRTb2xpZFBhaW50U2VydmVyKCk7
CisgICAgICAgICAgICBzb2xpZFBhaW50U2VydmVyLT5zZXRDb2xvcihjb250ZXh0LT5maWxsQ29s
b3IoKSk7CisKKyAgICAgICAgICAgIGRhdGEuYWN0aXZlUGFpbnRTZXJ2ZXIgPSBzb2xpZFBhaW50
U2VydmVyOworICAgICAgICB9CisKICAgICAgICAgQVNTRVJUKGRhdGEuYWN0aXZlUGFpbnRTZXJ2
ZXIpOwogCi0gICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChzaXplKCks
IGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsKLSAgICAgICAgZGF0YS5pc1Zl
cnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShkYXRhLnJlbmRlck9iamVjdC0+c3R5
bGUoKS0+c3ZnU3R5bGUoKSk7ICAgIAorICAgICAgICBkYXRhLmlzVmVydGljYWxUZXh0ID0gZmFs
c2U7CiAgICAgICAgIGRhdGEueFN0YXJ0T2Zmc2V0ID0gZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNp
bmdTVkdGb250KHRoaXMsIHJ1biwgcnVuLnJ0bCgpID8gdG8gOiAwLCBydW4ucnRsKCkgPyBydW4u
bGVuZ3RoKCkgOiBmcm9tKTsKLSAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQgPSBwb2ludDsKICAg
ICAgICAgZGF0YS5nbHlwaE9yaWdpbiA9IEZsb2F0UG9pbnQoKTsKICAgICAgICAgZGF0YS5jb250
ZXh0ID0gY29udGV4dDsKIAogICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7Ci0gICAgICAgIGlmIChT
VkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGRhdGEucmVuZGVy
T2JqZWN0LT5lbGVtZW50KCkpKQotICAgICAgICAgICAgbGFuZ3VhZ2UgPSBlbGVtZW50LT5nZXRB
dHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKIAorICAgICAgICAvLyBUT0RPOiBsYW5ndWFn
ZSBtYXRjaGluZyAmIHN2ZyBnbHlwaHMgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBIVE1MIHRleHQs
IHRvby4KKyAgICAgICAgaWYgKGRhdGEucmVuZGVyT2JqZWN0KSB7ICAgIAorICAgICAgICAgICAg
ZGF0YS5pc1ZlcnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShkYXRhLnJlbmRlck9i
amVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7ICAgIAorCisgICAgICAgICAgICBpZiAoU1ZHRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihkYXRhLnJlbmRlck9iamVj
dC0+ZWxlbWVudCgpKSkKKyAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0
dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICBpZiAoIWRhdGEuaXNWZXJ0aWNhbFRleHQpIHsKICAgICAgICAgICAgIGRhdGEuZ2x5cGhPcmln
aW4uc2V0WChmb250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblgoKSAqIGRhdGEuc2NhbGUpOwogICAg
ICAgICAgICAgZGF0YS5nbHlwaE9yaWdpbi5zZXRZKGZvbnREYXRhLT5ob3Jpem9udGFsT3JpZ2lu
WSgpICogZGF0YS5zY2FsZSk7CkBAIC01MDAsNiArNTIwLDE0IEBAIEZsb2F0UmVjdCBGb250Ojpz
ZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW4KICAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkoKSwg
ZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgZnJvbSwgdG8pLCBo
ZWlnaHQpOwogfQogCitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdG
b250KGNvbnN0IFRleHRSdW4mLCBpbnQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpIGNvbnN0Cit7CisgICAgLy8gVE9ETzogRml4IHRleHQgc2VsZWN0aW9uIHdoZW4gSFRNTCB0
ZXh0IGlzIGRyYXduIHVzaW5nIGEgU1ZHIEZvbnQKKyAgICAvLyBXZSBuZWVkIHRvIGludGVncmF0
ZSB0aGUgU1ZHIHRleHQgc2VsZWN0aW9uIGNvZGUgaW4gdGhlIG9mZnNldEZvclBvc2l0aW9uKCkg
ZnJhbWV3b3JrLgorICAgIC8vIFRoaXMgd2lsbCBhbHNvIGZpeCBhIG1ham9yIGlzc3VlLCB0aGF0
IFNWRyBUZXh0IGNvZGUgY2FuJ3Qgc2VsZWN0IGFyYWJpYyBzdHJpbmdzIHByb3Blcmx5LgorICAg
IHJldHVybiAwOworfQorCiB9CiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRm9udEZh
Y2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAyOTgzNykKKysrIFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMywyNSArMzAzLDYgQEAgdm9pZCBTVkdGb250RmFj
ZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZQogICAgIGlmICghcGFyZW50Tm9kZSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBsb2NhbCBTVkcgZm9udHMg
KHRob3NlIHdoaWNoIGhhdmUgYSA8Zm9udD4gcGFyZW50LCBhbmQgYXJlIG9ubHkgdXNlZCB3aXRo
aW4gdGhlIGRvY3VtZW50KQotICAgIGlmIChwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5o
YXNUYWdOYW1lKGZvbnRUYWcpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Qg
PSBuZXcgQ1NTVmFsdWVMaXN0OwotCi0gICAgICAgIFJlZlB0cjxDU1NGb250RmFjZVNyY1ZhbHVl
PiBzcmMgPSBuZXcgQ1NTRm9udEZhY2VTcmNWYWx1ZShmb250RmFtaWx5KCksIHRydWUgLyogaXNM
b2NhbCAqLyk7Ci0gICAgICAgIHNyYy0+c2V0U1ZHRm9udEZhY2VFbGVtZW50KHRoaXMpOwotICAg
ICAgICBsaXN0LT5hcHBlbmQoc3JjKTsKLQotICAgICAgICBDU1NQcm9wZXJ0eSBzcmNQcm9wZXJ0
eShDU1NfUFJPUF9TUkMsIGxpc3QpOwotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSogc3JjUHJv
cGVydHlSZWYgPSAmc3JjUHJvcGVydHk7Ci0gICAgICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+YWRk
UGFyc2VkUHJvcGVydGllcygmc3JjUHJvcGVydHlSZWYsIDEpOwotCi0gICAgICAgIG1fZm9udEVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KHBhcmVudE5vZGUoKSk7Ci0gICAg
ICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIFRPRE86IEV4dGVybmFsIFNWRyBmb250cyBzdXBwb3J0IC0gcmUgdXNl
IGV4aXN0aW5nICJjdXN0b20gZm9udCIgaGFuZGxpbmcgbG9naWMuCi0KICAgICAvLyB3ZSBjdXJy
ZW50bHkgaWdub3JlIGFsbCBidXQgdGhlIGZpcnN0IHNyYyBlbGVtZW50LCBhbHRlcm5hdGl2ZWx5
IHdlIGNvdWxkIGNvbmNhdCB0aGVtCiAgICAgU1ZHRm9udEZhY2VTcmNFbGVtZW50KiBzcmNFbGVt
ZW50ID0gMDsKICAgICBTVkdEZWZpbml0aW9uU3JjRWxlbWVudCogZGVmaW5pdGlvblNyYyA9IDA7
CkBAIC0zMzksMTIgKzMyMCwzNSBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZv
bnRGYWNlCiAgICAgICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTX1BST1Bf
REVGSU5JVElPTl9TUkMsIGRlZmluaXRpb25TcmMtPmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpo
cmVmQXR0ciksIGZhbHNlKTsKICNlbmRpZgogCi0gICAgaWYgKHNyY0VsZW1lbnQpIHsKLSAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgb25seSBjbGFzcyAob3RoZXIgdGhhbiBDU1NQYXJzZXIpIHRvIGNy
ZWF0ZSBDU1NWYWx1ZSBvYmplY3RzIGFuZCBzZXQgdGhlbSBvbiB0aGUgQ1NTU3R5bGVEZWNsYXJh
dGlvbiBtYW51YWxseQotICAgICAgICAvLyB3ZSB1c2UgdGhlIGFkZFBhcnNlZFByb3BlcnRpZXMg
bWV0aG9kLCBhbmQgZmFrZSBoYXZpbmcgYW4gYXJyYXkgb2YgQ1NTUHJvcGVydHkgcG9pbnRlcnMu
Ci0gICAgICAgIENTU1Byb3BlcnR5IHNyY1Byb3BlcnR5KENTU19QUk9QX1NSQywgc3JjRWxlbWVu
dC0+c3JjVmFsdWUoKSk7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5KiBzcmNQcm9wZXJ0eVJl
ZiA9ICZzcmNQcm9wZXJ0eTsKLSAgICAgICAgbV9zdHlsZURlY2xhcmF0aW9uLT5hZGRQYXJzZWRQ
cm9wZXJ0aWVzKCZzcmNQcm9wZXJ0eVJlZiwgMSk7CisgICAgYm9vbCBkZXNjcmliZXNQYXJlbnRG
b250ID0gcGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpOworICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IGxpc3Q7CisKKyAgICBpZiAoZGVzY3JpYmVzUGFyZW50Rm9udCkgeworICAgICAg
ICBtX2ZvbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRm9udEVsZW1lbnQqPihwYXJlbnROb2Rl
KCkpOworCisgICAgICAgIGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0OworICAgICAgICBsaXN0LT5h
cHBlbmQobmV3IENTU0ZvbnRGYWNlU3JjVmFsdWUoZm9udEZhbWlseSgpLCB0cnVlKSk7CisgICAg
fSBlbHNlIGlmIChzcmNFbGVtZW50KQorICAgICAgICBsaXN0ID0gc3JjRWxlbWVudC0+c3JjVmFs
dWUoKTsKKworICAgIGlmICghbGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUGFyc2Ug
aW4tbWVtb3J5IENTUyBydWxlcworICAgIENTU1Byb3BlcnR5IHNyY1Byb3BlcnR5KENTU19QUk9Q
X1NSQywgbGlzdCk7CisgICAgY29uc3QgQ1NTUHJvcGVydHkqIHNyY1Byb3BlcnR5UmVmID0gJnNy
Y1Byb3BlcnR5OworICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydGllcygm
c3JjUHJvcGVydHlSZWYsIDEpOworCisgICAgaWYgKGRlc2NyaWJlc1BhcmVudEZvbnQpIHsgICAg
CisgICAgICAgIC8vIFRyYXZlcnNlIHBhcnNlZCBDU1MgdmFsdWVzIGFuZCBhc3NvY2lhdGUgQ1NT
Rm9udEZhY2VTcmNWYWx1ZSBlbGVtZW50cyB3aXRoIG91cnNlbHZlcy4KKyAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiBzcmMgPSBtX3N0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTX1BST1BfU1JDKTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0KiBzcmNMaXN0ID0gc3RhdGljX2Nh
c3Q8Q1NTVmFsdWVMaXN0Kj4oc3JjLmdldCgpKTsKKworICAgICAgICB1bnNpZ25lZCBzcmNMZW5n
dGggPSBzcmNMaXN0ID8gc3JjTGlzdC0+bGVuZ3RoKCkgOiAwOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3JjTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChDU1NGb250
RmFjZVNyY1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZSo+KHNy
Y0xpc3QtPml0ZW0oaSkpKQorICAgICAgICAgICAgICAgIGl0ZW0tPnNldFNWR0ZvbnRGYWNlRWxl
bWVudCh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0
eWxlU2VsZWN0b3IoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VVcmlFbGVtZW50LmNwcAko
cmV2aXNpb24gMjk4MzcpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw4IEBAIFNWR0ZvbnRGYWNlVXJpRWxlbWVudDo6
U1ZHRm9udEZhY2VVcmlFbGUKIFBhc3NSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gU1ZHRm9u
dEZhY2VVcmlFbGVtZW50OjpzcmNWYWx1ZSgpIGNvbnN0CiB7CiAgICAgUmVmUHRyPENTU0ZvbnRG
YWNlU3JjVmFsdWU+IHNyYyA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKGdldEF0dHJpYnV0ZShY
TGlua05hbWVzOjpocmVmQXR0ciksIGZhbHNlKTsKLSAgICBzcmMtPnNldEZvcm1hdChnZXRBdHRy
aWJ1dGUoZm9ybWF0QXR0cikpOworICAgIEF0b21pY1N0cmluZyB2YWx1ZShnZXRBdHRyaWJ1dGUo
Zm9ybWF0QXR0cikpOworICAgIHNyYy0+c2V0Rm9ybWF0KHZhbHVlLmlzRW1wdHkoKSA/ICJzdmci
IDogdmFsdWUpOyAvLyBEZWZhdWx0IGZvcm1hdAogICAgIHJldHVybiBzcmMucmVsZWFzZSgpOwog
fQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyOTgzNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDA4LTAxLTI4ICBOaWtvbGFzIFppbW1l
cm1hbm4gIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYywg
RGFuICYgT2xpdmVyLgorCisgICAgICAgIFVwZGF0ZSBsYXlvdXQgdGVzdHMgYWZ0ZXIgYWRkaW5n
IGV4dGVybmFsIFNWRyBGb250cyBzdXBwb3J0LgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2
Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTAzLWItZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTAzLWItZXhwZWN0ZWQu
cG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0w
My1iLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1czQy1TVkctMS4x
L2ZvbnRzLWVsZW0tMDQtYi1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDQtYi1leHBlY3RlZC5wbmc6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTA0LWItZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNWRy0xLjEvZm9udHMtZWxlbS0w
Ny1iLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvVzNDLVNW
Ry0xLjEvZm9udHMtZWxlbS0wNy1iLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDctYi1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vc3ZnLWZvbnRzLWluLWh0bWwtZXhwZWN0ZWQuY2hl
Y2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvY3VzdG9tL3N2Zy1mb250
cy1pbi1odG1sLWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL3N2
Zy9jdXN0b20vc3ZnLWZvbnRzLWluLWh0bWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBzdmcvY3VzdG9tL3Jlc291cmNlcy9ncmFmZml0aS5zdmc6IEFkZGVkLgorICAgICAgICAqIHN2
Zy9jdXN0b20vc3ZnLWZvbnRzLWluLWh0bWwuaHRtbDogQWRkZWQuCisKIDIwMDgtMDEtMjggIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81NjY3MDE3PiBzdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuaHRtbCBmYWlsaW5nIC0tIG9w
ZW5EYXRhYmFzZSByZXR1cm5pbmcgbnVsbCBvbiBidWlsZGJvdAo=
</data>
<flag name="review"
          id="8189"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>