<?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>42999</bug_id>
          
          <creation_ts>2010-07-26 14:00:40 -0700</creation_ts>
          <short_desc>Add a Chromium WebKit API for drawing text</short_desc>
          <delta_ts>2010-07-27 14:31:57 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brett Wilson (Google)">brettw</reporter>
          <assigned_to name="Brett Wilson (Google)">brettw</assigned_to>
          <cc>fishd</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>256221</commentid>
    <comment_count>0</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2010-07-26 14:00:40 -0700</bug_when>
    <thetext>We would like to hook up the WebKit port&apos;s text drawing to random canvases, so we should expose something in the Chromium WebKit API to do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256225</commentid>
    <comment_count>1</comment_count>
      <attachid>62603</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2010-07-26 14:02:09 -0700</bug_when>
    <thetext>Created attachment 62603
First patch

This is missing a ChangeLog (currently fixing my checkout and can&apos;t run prepare-Changelog) but I&apos;m hoping to get some initial feedback to get this started.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256232</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-26 14:16:25 -0700</bug_when>
    <thetext>unlike webcore, the style for enums at the webkit layer is of the form:

  enum Foo {
    FooBar,
    FooBaz
  };

so, ...

  enum Family {
      FamilyNone,
      FamilyStandard,
      ...
  };
  enum Smoothing {
      SmoothingAuto,
      SmoothingNone,
      ...
  };
  enum Weight {
      Weight100,
      ...
  };

i would probably just create WebTextRun instead of making it be an inner class of WebFont.  it seems like it need not be specific to WebFont.

i have some more nits, but the review tool is not letting me annotate the patch right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256759</commentid>
    <comment_count>3</comment_count>
      <attachid>62727</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2010-07-27 12:31:42 -0700</bug_when>
    <thetext>Created attachment 62727
Patch v2 w/ ChangeLog

This renames the enums, adds letter and word spacing, and adds assertions that make sure the WebKit API matches WebCore&apos;s enums</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256764</commentid>
    <comment_count>4</comment_count>
      <attachid>62727</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-27 12:46:29 -0700</bug_when>
    <thetext>Comment on attachment 62727
Patch v2 w/ ChangeLog

WebKit/chromium/public/WebFont.h:49
 +      WEBKIT_API static WebFont* Create(const WebFontDescription&amp;);
nit: Create -&gt; create

how do I destroy a WebFont?  i don&apos;t see a virtual destructor.

comments below on the interface are made with ignorance about
what the .cpp file looks like.  i wanted to see if the API made
sense to me without knowledge of how it is implemented.

WebKit/chromium/public/WebFont.h:59
 +      virtual void drawText(WebCanvas*, const WebTextRun&amp;, const WebFloatPoint&amp;, WebColor, const WebRect&amp; clip, bool canvasIsOpaque,
it might be helpful to document some of these parameters.  it is not clear
to me what from and to mean.  are they specifying subranges of WebTextRun?
in which case fromChar, toChar might be better.

maybe you should give a name to the WebFloatPoint parameter, or at least
describe what it is.  i&apos;m guessing it is the origin of the text run, but
does that mean top-left?

WebKit/chromium/public/WebFont.h:61
 +      virtual int width(const WebTextRun&amp;) const = 0;
nit: calculateWidth might be a nicer name

WebKit/chromium/public/WebFont.h:62
 +      virtual int offsetForPosition(const WebTextRun&amp;, float position, bool includePartialGlyphs) const = 0;
i think this method could use some documentation.  is this identifying
the character offset?

WebKit/chromium/public/WebFontDescription.h:85
 +  #if WEBKIT_IMPLEMENTATION
nit: we have a convention of making the WEBKIT_IMPLEMENTATION
section be the last part of the public section (or private
section if there is one).  i would just group this one with
the conversion operator.

WebKit/chromium/public/WebFontDescription.h:97
 +      // Not members of WebCore::FontDescription, but used in the places where we
nit: i tend to avoid comments in the WebKit API headers that refer to
WebCore since they can get out-of-date easily.  no one making changes
to WebCore will ever think to update WebKit API headers.  it is better
to just make the comments standalone and make sense without knowledge
of WebCore.

WebKit/chromium/public/WebTextRun.h:43
 +      WebTextRun(const WebString&amp; t, bool isRtl, bool hasDirectionalOverride)
style-nit: isRTL &lt;- webkit style is to capitalize acronyms unless
they are at the start of a term.

WebKit/chromium/public/WebTextRun.h:54
 +  #ifdef WEBKIT_IMPLEMENTATION
same nit about moving this to the end of the &quot;public&quot; section.

WebKit/chromium/src/AssertMatchingEnums.cpp:333
 +  COMPILE_ASSERT_MATCHING_ENUM(WebFontDescription::GenericFamilyNone, FontDescription::NoFamily);
nit: insert in sorted order.  it makes it easier to keep this
file organized.

WebKit/chromium/src/WebFontDescription.cpp:52
 +  WebFontDescription::operator WebCore::FontDescription() const {
nit: opening bracket on the next line

WebKit/chromium/src/WebFontDescription.cpp:35
 +  
we usually add a &apos;using namespace WebCore&apos; so that we can avoid
the WebCore:: prefix down below.

WebKit/chromium/src/WebFontImpl.cpp:93
 +      // FIXME(brettw) hook canvasIsOpaque up to the platform-specific indicators
nit: FIXME(foo) -&gt; FIXME

WebKit/chromium/src/WebTextRun.cpp:42
 +      return WebCore::TextRun(text, false, 0, 0, rtl, directionalOverride);
nit: you can drop the WebCore:: prefix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256806</commentid>
    <comment_count>5</comment_count>
      <attachid>62740</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2010-07-27 13:46:25 -0700</bug_when>
    <thetext>Created attachment 62740
Patch v3

Comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256808</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-27 13:49:04 -0700</bug_when>
    <thetext>Attachment 62740 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/public/WebFontDescription.h:104:  One space before end of line comments  [whitespace/comments] [5]
WebKit/chromium/src/WebFontDescription.cpp:56:  font_family is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256810</commentid>
    <comment_count>7</comment_count>
      <attachid>62741</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2010-07-27 13:51:38 -0700</bug_when>
    <thetext>Created attachment 62741
Patch v4

Pacify the style bot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256818</commentid>
    <comment_count>8</comment_count>
      <attachid>62741</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-27 14:06:29 -0700</bug_when>
    <thetext>Comment on attachment 62741
Patch v4

WebKit/chromium/public/WebFont.h:51
 +      WEBKIT_API static WebFont* Create(const WebFontDescription&amp;);
nit: Create -&gt; create

WebKit/chromium/public/WebFont.h:70
 +      // run to draw. If |to| is -1, the enture run will be drawn.
nit: enture -&gt; entire

WebKit/chromium/public/WebFont.h:87
 +      // |leftBaseline| position. |h| indicates the height of the selection rect
nit: h -&gt; height

WebKit/chromium/public/WebTextRun.h:43
 +      WebTextRun(const WebString&amp; t, bool isRtl, bool hasDirectionalOverride)
nit: isRtl -&gt; isRTL so this can compile :-)

WebKit/chromium/src/WebTextRun.cpp:40
 +  WebTextRun::operator WebCore::TextRun() const
nit: no need for WebCore:: prefix

R=me with those nits fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256823</commentid>
    <comment_count>9</comment_count>
      <attachid>62744</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2010-07-27 14:11:12 -0700</bug_when>
    <thetext>Created attachment 62744
Final patch for reference</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256840</commentid>
    <comment_count>10</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2010-07-27 14:31:57 -0700</bug_when>
    <thetext>Fixed in r64160</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62603</attachid>
            <date>2010-07-26 14:02:09 -0700</date>
            <delta_ts>2010-07-27 12:31:42 -0700</delta_ts>
            <desc>First patch</desc>
            <filename>webkit_font.diff</filename>
            <type>text/plain</type>
            <size>24045</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Lmd5cAkocmV2aXNpb24gNjM5
NjcpCisrKyBXZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDEwIEBACiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGaWxlSW5mby5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYkZpbGVTeXN0ZW0uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGaW5k
T3B0aW9ucy5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkZsb2F0UG9pbnQuaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGbG9hdFJlY3QuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJGb250LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRm9udERlc2Ny
aXB0aW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRnJhbWUuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkZvbnRDYWNoZS5oJywKQEAgLTM4Miw2ICszODYsOSBAQAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViRmlsZUNob29zZXJDb21wbGV0aW9uSW1wbC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViRmlsZUNob29zZXJDb21wbGV0aW9uSW1wbC5oJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYkZvbnRDYWNoZS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRm9udERlc2Ny
aXB0aW9uLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250SW1wbC5jcHAnLAorICAg
ICAgICAgICAgICAgICdzcmMvV2ViRm9udEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJGb3JtQ29udHJvbEVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvcm1F
bGVtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGcmFtZUltcGwuY3BwJywKSW5k
ZXg6IHNyYy9XZWJGb250RGVzY3JpcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNyYy9XZWJGb250
RGVzY3JpcHRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgc3JjL1dlYkZvbnREZXNjcmlwdGlvbi5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViRm9udERlc2NyaXB0aW9uLmgiCisKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkZvbnREZXNjcmlwdGlvbjo6V2ViRm9udERl
c2NyaXB0aW9uKGNvbnN0IFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbiYgZGVzYykKK3sKKyAgICBm
YW1pbHkgPSBkZXNjLmZhbWlseSgpLmZhbWlseSgpOworICAgIGdlbmVyaWNGYW1pbHkgPSBzdGF0
aWNfY2FzdDxHZW5lcmljRmFtaWx5VHlwZT4oZGVzYy5nZW5lcmljRmFtaWx5KCkpOworICAgIHNp
emUgPSBkZXNjLnNwZWNpZmllZFNpemUoKTsKKyAgICBpdGFsaWMgPSBkZXNjLml0YWxpYygpOwor
ICAgIHNtYWxsQ2FwcyA9IGRlc2Muc21hbGxDYXBzKCk7CisgICAgd2VpZ2h0ID0gc3RhdGljX2Nh
c3Q8V2VpZ2h0PihkZXNjLndlaWdodCgpKTsKKyAgICBmb250U21vb3RoaW5nID0gc3RhdGljX2Nh
c3Q8U21vb3RoaW5nTW9kZT4oZGVzYy5mb250U21vb3RoaW5nKCkpOworfQorCitXZWJGb250RGVz
Y3JpcHRpb246Om9wZXJhdG9yIFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsKKyAg
ICBXZWJDb3JlOjpGb250RmFtaWx5IGZvbnRfZmFtaWx5OworICAgIGZvbnRfZmFtaWx5LnNldEZh
bWlseShmYW1pbHkpOworCisgICAgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uIGRlc2M7CisgICAg
ZGVzYy5zZXRGYW1pbHkoZm9udF9mYW1pbHkpOworICAgIGRlc2Muc2V0R2VuZXJpY0ZhbWlseShz
dGF0aWNfY2FzdDxXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlUeXBlPihn
ZW5lcmljRmFtaWx5KSk7CisgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKHNpemUpOworICAgIGRl
c2Muc2V0Q29tcHV0ZWRTaXplKHNpemUpOworICAgIGRlc2Muc2V0SXRhbGljKGl0YWxpYyk7Cisg
ICAgZGVzYy5zZXRTbWFsbENhcHMoc21hbGxDYXBzKTsKKyAgICBkZXNjLnNldFdlaWdodChzdGF0
aWNfY2FzdDxXZWJDb3JlOjpGb250V2VpZ2h0Pih3ZWlnaHQpKTsKKyAgICBkZXNjLnNldEZvbnRT
bW9vdGhpbmcoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGU+KGZvbnRTbW9v
dGhpbmcpKTsKKyAgICByZXR1cm4gZGVzYzsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBzcmMvV2ViRm9udEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNyYy9XZWJGb250SW1wbC5j
cHAJKHJldmlzaW9uIDApCisrKyBzcmMvV2ViRm9udEltcGwuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJGb250SW1wbC5o
IgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJXZWJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiV2ViRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiV2ViRm9udERlc2NyaXB0aW9u
LmgiCisjaW5jbHVkZSAiV2ViUmVjdC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkZvbnQ6OlRleHRSdW46Om9wZXJhdG9yIFdlYkNvcmU6
OlRleHRSdW4oKSBjb25zdAoreworICAgIHJldHVybiBXZWJDb3JlOjpUZXh0UnVuKHRleHQsIGZh
bHNlLCAwLCAwLCBydGwsIGRpcmVjdGlvbmFsT3ZlcnJpZGUpOworfQorCitXZWJGb250KiBXZWJG
b250OjpDcmVhdGUoY29uc3QgV2ViRm9udERlc2NyaXB0aW9uJiBkZXNjKQoreworICAgIHJldHVy
biBuZXcgV2ViRm9udEltcGwoZGVzYyk7Cit9CisKK1dlYkZvbnRJbXBsOjpXZWJGb250SW1wbChj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2MpCisgICAgOiBtX2ZvbnQoZGVzYywgMCwgMCkKK3sK
KyAgICBtX2ZvbnQudXBkYXRlKDApOworfQorCitXZWJGb250RGVzY3JpcHRpb24gV2ViRm9udElt
cGw6OmZvbnREZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udC5mb250RGVz
Y3JpcHRpb24oKTsKK30KKworaW50IFdlYkZvbnRJbXBsOjphc2NlbnQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2ZvbnQuYXNjZW50KCk7Cit9CisKK2ludCBXZWJGb250SW1wbDo6ZGVzY2VudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udC5kZXNjZW50KCk7Cit9CisKK2ludCBXZWJGb250
SW1wbDo6aGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250LmhlaWdodCgpOworfQor
CitpbnQgV2ViRm9udEltcGw6OmxpbmVTcGFjaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9m
b250LmxpbmVTcGFjaW5nKCk7Cit9CisKK2Zsb2F0IFdlYkZvbnRJbXBsOjp4SGVpZ2h0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9mb250LnhIZWlnaHQoKTsKK30KKwordm9pZCBXZWJGb250SW1w
bDo6ZHJhd1RleHQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
V2ViRmxvYXRQb2ludCYgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb2xv
ciBjb2xvciwgY29uc3QgV2ViUmVjdCYgY2xpcCwgYm9vbCBjYW52YXNJc09wYXF1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgLy8g
RklYTUUoYnJldHR3KSBob29rIGNhbnZhc0lzT3BhcXVlIHVwIHRvIHRoZSBwbGF0Zm9ybS1zcGVj
aWZpYyBpbmRpY2F0b3JzCisgICAgLy8gZm9yIHdoZXRoZXIgc3VicGl4ZWwgQUEgY2FuIGJlIHVz
ZWQgZm9yIHRoaXMgZHJhdy4gT24gV2luZG93cywgdGhpcyBpcworICAgIC8vIFBsYXRmb3JtQ29u
dGV4dFNraWE6OnNldERyYXdpbmdUb0ltYWdlQnVmZmVyLgorI2lmIFdFQktJVF9VU0lOR19DRwor
ICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjYW52YXMpOworI2VsaWYgV0VCS0lUX1VTSU5HX1NLSUEK
KyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIGNvbnRleHQoY2FudmFzKTsKKyAgICAvLyBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCBpcyBhY3R1YWxseSBhIHBvaW50ZXIgdG8gUGxhdGZvcm1Db250ZXh0
U2tpYS4KKyAgICBHcmFwaGljc0NvbnRleHQgZ2MocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCo+KCZjb250ZXh0KSk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7
CisjZW5kaWYKKworICAgIGdjLnNldEZpbGxDb2xvcihjb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7
CisgICAgZ2MuY2xpcChXZWJDb3JlOjpGbG9hdFJlY3QoY2xpcCkpOworICAgIG1fZm9udC5kcmF3
VGV4dCgmZ2MsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKK30KKworaW50IFdlYkZvbnRJbXBsOjp3
aWR0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udC53aWR0
aChydW4sIDApOworfQorCitpbnQgV2ViRm9udEltcGw6Om9mZnNldEZvclBvc2l0aW9uKGNvbnN0
IFRleHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udC5vZmZzZXRGb3JQb3NpdGlvbihydW4sIHBvc2l0
aW9uLCBpbmNsdWRlUGFydGlhbEdseXBocyk7Cit9CisKK1dlYkZsb2F0UmVjdCBXZWJGb250SW1w
bDo6c2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBXZWJGbG9h
dFBvaW50JiBwb3NpdGlvbiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHBvc2l0aW9uLCBoLCBmcm9t
LCB0byk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogc3JjL1dlYkZvbnRJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gc3JjL1dlYkZvbnRJbXBsLmgJKHJldmlzaW9uIDApCisrKyBzcmMv
V2ViRm9udEltcGwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRm9u
dEltcGxfaAorI2RlZmluZSBXZWJGb250SW1wbF9oCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiV2ViRm9udC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEZvbnREZXNjcmlw
dGlvbjsgfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRm9udEltcGwgOiBwdWJs
aWMgV2ViRm9udCB7CitwdWJsaWM6CisgICAgV2ViRm9udEltcGwoY29uc3QgV2ViQ29yZTo6Rm9u
dERlc2NyaXB0aW9uJik7CisKKyAgICB2aXJ0dWFsIFdlYkZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24oKSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IGFzY2VudCgpIGNvbnN0OworICAg
IHZpcnR1YWwgaW50IGRlc2NlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBsaW5lU3BhY2luZygpIGNvbnN0OworICAgIHZpcnR1YWwg
ZmxvYXQgeEhlaWdodCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0KFdlYkNh
bnZhcyosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBXZWJGbG9hdFBvaW50JiwgV2ViQ29sb3IsIGNv
bnN0IFdlYlJlY3QmIGNsaXAsIGJvb2wgY2FudmFzSXNPcGFxdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworICAgIHZpcnR1YWwg
aW50IHdpZHRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBvZmZzZXRG
b3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViRmxvYXRSZWN0IHNlbGVjdGlvblJl
Y3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBXZWJGbG9hdFBvaW50JiwgaW50IGgsIGlu
dCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworCitwcml2YXRlOgorICAgIFdlYkNvcmU6
OkZvbnQgbV9mb250OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRl
eDogcHVibGljL1dlYkZsb2F0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHB1YmxpYy9XZWJGbG9hdFJl
Y3QuaAkocmV2aXNpb24gMCkKKysrIHB1YmxpYy9XZWJGbG9hdFJlY3QuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkZsb2F0UmVjdF9oCisjZGVmaW5lIFdlYkZsb2F0
UmVjdF9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitzdHJ1Y3QgV2ViRmxvYXRSZWN0IHsKKyAgICBmbG9hdCB4OworICAgIGZsb2F0IHk7Cisg
ICAgZmxvYXQgd2lkdGg7CisgICAgZmxvYXQgaGVpZ2h0OworCisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMDsgfQorCisgICAgV2ViRmxv
YXRSZWN0KCkKKyAgICAgICAgOiB4KDAuMGYpCisgICAgICAgICwgeSgwLjBmKQorICAgICAgICAs
IHdpZHRoKDAuMGYpCisgICAgICAgICwgaGVpZ2h0KDAuMGYpCisgICAgeworICAgIH0KKworICAg
IFdlYkZsb2F0UmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
KQorICAgICAgICA6IHgoeCkKKyAgICAgICAgLCB5KHkpCisgICAgICAgICwgd2lkdGgod2lkdGgp
CisgICAgICAgICwgaGVpZ2h0KGhlaWdodCkKKyAgICB7CisgICAgfQorCisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisgICAgV2ViRmxvYXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
cikKKyAgICAgICAgOiB4KHIueCgpKQorICAgICAgICAsIHkoci55KCkpCisgICAgICAgICwgd2lk
dGgoci53aWR0aCgpKQorICAgICAgICAsIGhlaWdodChyLmhlaWdodCgpKQorICAgIHsKKyAgICB9
CisKKyAgICBXZWJGbG9hdFJlY3QmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IHIpCisgICAgeworICAgICAgICB4ID0gci54KCk7CisgICAgICAgIHkgPSByLnkoKTsKKyAgICAg
ICAgd2lkdGggPSByLndpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IHIuaGVpZ2h0KCk7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpGbG9hdFJl
Y3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisjZW5kaWYKK307CisKK2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgV2ViRmxvYXRSZWN0JiBhLCBjb25zdCBXZWJGbG9hdFJlY3QmIGIpCit7Cisg
ICAgcmV0dXJuIGEueCA9PSBiLnggJiYgYS55ID09IGIueSAmJiBhLndpZHRoID09IGIud2lkdGgg
JiYgYS5oZWlnaHQgPT0gYi5oZWlnaHQ7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgV2ViRmxvYXRSZWN0JiBhLCBjb25zdCBXZWJGbG9hdFJlY3QmIGIpCit7CisgICAgcmV0dXJu
ICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDog
cHVibGljL1dlYkZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwdWJsaWMvV2ViRm9udC5oCShyZXZpc2lv
biAwKQorKysgcHVibGljL1dlYkZvbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViRm9udF9oCisjZGVmaW5lIFdlYkZvbnRfaAorCisjaW5jbHVkZSAiV2ViQ2FudmFz
LmgiCisjaW5jbHVkZSAiV2ViQ29sb3IuaCIKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNs
dWRlICJXZWJTdHJpbmcuaCIKKworI2lmZGVmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNw
YWNlIFdlYkNvcmUgeyBjbGFzcyBUZXh0UnVuOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYkZvbnREZXNjcmlwdGlvbjsKK2NsYXNzIFdlYkZsb2F0UG9pbnQ7Citj
bGFzcyBXZWJGbG9hdFJlY3Q7CitjbGFzcyBXZWJQb2ludDsKK2NsYXNzIFdlYlJlY3Q7CisKK2Ns
YXNzIFdlYkZvbnQgeworcHVibGljOgorICAgIHN0cnVjdCBUZXh0UnVuIHsKKyAgICAgICAgVGV4
dFJ1bihjb25zdCBXZWJTdHJpbmcmIHQsIGJvb2wgaXNSdGwsIGJvb2wgaGFzRGlyZWN0aW9uYWxP
dmVycmlkZSkKKyAgICAgICAgICAgIDogdGV4dCh0KQorICAgICAgICAgICAgLCBydGwoaXNSdGwp
CisgICAgICAgICAgICAsIGRpcmVjdGlvbmFsT3ZlcnJpZGUoaGFzRGlyZWN0aW9uYWxPdmVycmlk
ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIFRleHRSdW4oKQorICAgICAgICAgICAg
OiBydGwoZmFsc2UpCisgICAgICAgICAgICAsIGRpcmVjdGlvbmFsT3ZlcnJpZGUoZmFsc2UpCisg
ICAgICAgIHsKKyAgICAgICAgfQorI2lmZGVmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgICAg
ICAvLyBUaGUgcmVzdWx0aW5nIFdlYkNvcmU6OlRleHRSdW4gd2lsbCByZWZlciB0byB0aGUgdGV4
dCBpbiB0aGlzCisgICAgICAgIC8vIHN0cnVjdCwgc28gInRoaXMiIG11c3Qgb3V0bGl2ZSB0aGUg
V2ViQ29yZSB0ZXh0IHJ1bi4KKyAgICAgICAgb3BlcmF0b3IgV2ViQ29yZTo6VGV4dFJ1bigpIGNv
bnN0OworI2VuZGlmCisKKyAgICAgICAgV2ViU3RyaW5nIHRleHQ7CisgICAgICAgIGJvb2wgcnRs
OworICAgICAgICBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGU7CisgICAgfTsKKworICAgIFdFQktJ
VF9BUEkgc3RhdGljIFdlYkZvbnQqIENyZWF0ZShjb25zdCBXZWJGb250RGVzY3JpcHRpb24mKTsK
KworICAgIHZpcnR1YWwgV2ViRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0
ID0gMDsKKworICAgIHZpcnR1YWwgaW50IGFzY2VudCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGludCBkZXNjZW50KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGludCBsaW5lU3BhY2luZygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGZsb2F0IHhIZWlnaHQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1Rl
eHQoV2ViQ2FudmFzKiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IFdlYkZsb2F0UG9pbnQmLCBXZWJD
b2xvciwgY29uc3QgV2ViUmVjdCYgY2xpcCwgYm9vbCBjYW52YXNJc09wYXF1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgaW50IHdpZHRoKGNvbnN0IFRleHRSdW4mKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9u
LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJG
bG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFdlYkZs
b2F0UG9pbnQmLCBpbnQgaCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3QgPSAwOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogcHVibGljL1dlYkZs
b2F0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwdWJsaWMvV2ViRmxvYXRQb2ludC5oCShyZXZpc2lv
biAwKQorKysgcHVibGljL1dlYkZsb2F0UG9pbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV2ViRmxvYXRQb2ludF9oCisjZGVmaW5lIFdlYkZsb2F0UG9pbnRfaAorCisj
aW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNs
dWRlICJJbnRQb2ludC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3Qg
V2ViRmxvYXRQb2ludCB7CisgICAgZmxvYXQgeDsKKyAgICBmbG9hdCB5OworCisgICAgV2ViRmxv
YXRQb2ludCgpCisgICAgICAgIDogeCgwLjBmKQorICAgICAgICAsIHkoMC4wZikKKyAgICB7Cisg
ICAgfQorCisgICAgV2ViRmxvYXRQb2ludChmbG9hdCB4LCBmbG9hdCB5KQorICAgICAgICA6IHgo
eCkKKyAgICAgICAgLCB5KHkpCisgICAgeworICAgIH0KKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorICAgIFdlYkZsb2F0UG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcCkKKyAg
ICAgICAgOiB4KHAueCgpKQorICAgICAgICAsIHkocC55KCkpCisgICAgeworICAgIH0KKworICAg
IFdlYkZsb2F0UG9pbnQmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwKQor
ICAgIHsKKyAgICAgICAgeCA9IHAueCgpOworICAgICAgICB5ID0gcC55KCk7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpGbG9hdFBvaW50KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFBvaW50KHgsIHkpOwor
ICAgIH0KKyNlbmRpZgorfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJGbG9h
dFBvaW50JiBhLCBjb25zdCBXZWJGbG9hdFBvaW50JiBiKQoreworICAgIHJldHVybiBhLnggPT0g
Yi54ICYmIGEueSA9PSBiLnk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2Vi
RmxvYXRQb2ludCYgYSwgY29uc3QgV2ViRmxvYXRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gIShh
ID09IGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBwdWJs
aWMvV2ViRm9udERlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHVibGljL1dlYkZvbnREZXNj
cmlwdGlvbi5oCShyZXZpc2lvbiAwKQorKysgcHVibGljL1dlYkZvbnREZXNjcmlwdGlvbi5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRm9udERlc2NyaXB0aW9uX2gK
KyNkZWZpbmUgV2ViRm9udERlc2NyaXB0aW9uX2gKKworI2luY2x1ZGUgIldlYlN0cmluZy5oIgor
CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEZv
bnREZXNjcmlwdGlvbjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3Qg
V2ViRm9udERlc2NyaXB0aW9uIHsKKyAgICBlbnVtIEdlbmVyaWNGYW1pbHlUeXBlIHsKKyAgICAg
ICAgTm9GYW1pbHksCisgICAgICAgIFN0YW5kYXJkRmFtaWx5LAorICAgICAgICBTZXJpZkZhbWls
eSwKKyAgICAgICAgU2Fuc1NlcmlmRmFtaWx5LAorICAgICAgICBNb25vc3BhY2VGYW1pbHksCisg
ICAgICAgIEN1cnNpdmVGYW1pbHksCisgICAgICAgIEZhbnRhc3lGYW1pbHkKKyAgICB9OworCisg
ICAgZW51bSBTbW9vdGhpbmdNb2RlIHsKKyAgICAgICAgQXV0b1Ntb290aGluZywKKyAgICAgICAg
Tm9TbW9vdGhpbmcsCisgICAgICAgIEFudGlhbGlhc2VkLAorICAgICAgICBTdWJwaXhlbEFudGlh
bGlhc2VkCisgICAgfTsKKworICAgIGVudW0gV2VpZ2h0IHsgCisgICAgICAgIEZvbnRXZWlnaHQx
MDAsCisgICAgICAgIEZvbnRXZWlnaHQyMDAsCisgICAgICAgIEZvbnRXZWlnaHQzMDAsCisgICAg
ICAgIEZvbnRXZWlnaHQ0MDAsCisgICAgICAgIEZvbnRXZWlnaHQ1MDAsCisgICAgICAgIEZvbnRX
ZWlnaHQ2MDAsCisgICAgICAgIEZvbnRXZWlnaHQ3MDAsCisgICAgICAgIEZvbnRXZWlnaHQ4MDAs
CisgICAgICAgIEZvbnRXZWlnaHQ5MDAsCisgICAgICAgIEZvbnRXZWlnaHROb3JtYWwgPSBGb250
V2VpZ2h0NDAwLAorICAgICAgICBGb250V2VpZ2h0Qm9sZCA9IEZvbnRXZWlnaHQ3MDAKKyAgICB9
OworCisgICAgV2ViRm9udERlc2NyaXB0aW9uKCkKKyAgICAgICAgOiBnZW5lcmljRmFtaWx5KE5v
RmFtaWx5KQorICAgICAgICAsIHNpemUoMCkKKyAgICAgICAgLCBpdGFsaWMoZmFsc2UpCisgICAg
ICAgICwgc21hbGxDYXBzKGZhbHNlKQorICAgICAgICAsIHdlaWdodChGb250V2VpZ2h0Tm9ybWFs
KQorICAgICAgICAsIGZvbnRTbW9vdGhpbmcoQXV0b1Ntb290aGluZykKKyAgICB7CisgICAgfQor
I2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkZvbnREZXNjcmlwdGlvbihjb25zdCBX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb24mKTsKKyNlbmRpZgorCisgICAgV2ViU3RyaW5nIGZhbWls
eTsKKyAgICBHZW5lcmljRmFtaWx5VHlwZSBnZW5lcmljRmFtaWx5OworICAgIGZsb2F0IHNpemU7
CisgICAgYm9vbCBpdGFsaWM7CisgICAgYm9vbCBzbWFsbENhcHM7CisgICAgV2VpZ2h0IHdlaWdo
dDsKKyAgICBTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmc7CisKKyNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KKyAgICBvcGVyYXRvciBXZWJDb3JlOjpGb250RGVzY3JpcHRpb24oKSBjb25zdDsK
KyNlbmRpZgorfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62727</attachid>
            <date>2010-07-27 12:31:42 -0700</date>
            <delta_ts>2010-07-27 13:46:25 -0700</delta_ts>
            <desc>Patch v2 w/ ChangeLog</desc>
            <filename>webkit_font.diff</filename>
            <type>text/plain</type>
            <size>34654</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDFiNTk2NmQuLmY1ODQ3MDkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDUyIEBACisyMDEwLTA3LTI3ICBCcmV0dCBXaWxzb24gIDxicmV0dHdAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KKworICAgICAgICBBZGQgdGhlIGFi
aWxpdHkgdG8gc2VsZWN0IGZvbnRzIGFuZCBkbyBiYXNpYyB0ZXh0IGRyYXdpbmcgdG8gdGhlCisg
ICAgICAgIENocm9taXVtIFdlYktpdCBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00Mjk5OQorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViRmxvYXRQb2ludC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
RmxvYXRQb2ludDo6V2ViRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UG9p
bnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UG9pbnQ6Om9wZXJhdG9y
IFdlYkNvcmU6OkZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcHVibGljL1dlYkZsb2F0UmVj
dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRSZWN0Ojppc0VtcHR5KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRmxvYXRSZWN0OjpXZWJGbG9hdFJlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGbG9hdFJlY3Q6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0
UmVjdDo6b3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHB1Ymxp
Yy9XZWJGb250Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJGb250RGVzY3JpcHRpb24u
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkZvbnREZXNjcmlwdGlvbjo6KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRm9udERlc2NyaXB0aW9uOjpXZWJGb250RGVzY3JpcHRpb24pOgorICAg
ICAgICAqIHB1YmxpYy9XZWJUZXh0UnVuLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJU
ZXh0UnVuOjpXZWJUZXh0UnVuKToKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5j
cHA6CisgICAgICAgICogc3JjL1dlYkZvbnREZXNjcmlwdGlvbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJGb250RGVzY3JpcHRpb246OldlYkZvbnREZXNjcmlwdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZvbnREZXNjcmlwdGlvbjo6b3BlcmF0b3IgV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uKToKKyAgICAgICAgKiBzcmMvV2ViRm9udEltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViRm9udDo6Q3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udElt
cGw6OldlYkZvbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udEltcGw6OmZvbnREZXNj
cmlwdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjphc2NlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGb250SW1wbDo6ZGVzY2VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZv
bnRJbXBsOjpoZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb250SW1wbDo6bGluZVNwYWNp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb250SW1wbDo6eEhlaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZvbnRJbXBsOjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJ
bXBsOjp3aWR0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjpvZmZzZXRGb3JQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjpzZWxlY3Rpb25SZWN0Rm9yVGV4
dCk6CisgICAgICAgICogc3JjL1dlYkZvbnRJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9X
ZWJUZXh0UnVuLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlRleHRSdW46Om9wZXJh
dG9yIFdlYkNvcmU6OlRleHRSdW4pOgorCiAyMDEwLTA3LTI3ICBQYXZlbCBQb2Rpdmlsb3YgIDxw
b2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRt
YW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IDc5NWFiYmIuLjk3ZWZkZGMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBA
IC0xNTYsNiArMTU2LDEwIEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGaWxlSW5mby5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZpbGVTeXN0ZW0uaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJGaW5kT3B0aW9ucy5oJywKKyAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkZsb2F0UG9pbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGbG9hdFJlY3Qu
aCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGb250LmgnLAorICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViRm9udERlc2NyaXB0aW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViRnJhbWUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvbnRDYWNoZS5oJywKQEAgLTI0Nyw2ICsyNTEs
NyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVGV4dENhc2VTZW5zaXRpdml0eS5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYlRleHREaXJlY3Rpb24uaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViVGV4dFJ1bi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlRoZW1lRW5naW5l
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVVJMLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViVVJMRXJyb3IuaCcsCkBAIC0zOTEsNiArMzk2LDkgQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGwuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGwuaCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJGb250Q2FjaGUuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRE
ZXNjcmlwdGlvbi5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRm9udEltcGwuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViRm9ybUNvbnRyb2xFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJG
b3JtRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRnJhbWVJbXBsLmNwcCcs
CkBAIC00NzIsNiArNDgwLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VOYW1l
c3BhY2VJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlTmFtZXNwYWNl
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0cmluZy5jcHAnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViVGV4dFJ1bi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVVJM
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2FkVGltaW5nLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJVUkxSZXF1ZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9pbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRmxvYXRQb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTNl
ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9p
bnQuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdFBvaW50X2gKKyNkZWZpbmUgV2Vi
RmxvYXRQb2ludF9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3N0cnVjdCBXZWJGbG9hdFBvaW50IHsKKyAgICBmbG9hdCB4OworICAgIGZsb2F0
IHk7CisKKyAgICBXZWJGbG9hdFBvaW50KCkKKyAgICAgICAgOiB4KDAuMGYpCisgICAgICAgICwg
eSgwLjBmKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0
IHkpCisgICAgICAgIDogeCh4KQorICAgICAgICAsIHkoeSkKKyAgICB7CisgICAgfQorCisjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViRmxvYXRQb2ludChjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwKQorICAgICAgICA6IHgocC54KCkpCisgICAgICAgICwgeShwLnkoKSkKKyAg
ICB7CisgICAgfQorCisgICAgV2ViRmxvYXRQb2ludCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHApCisgICAgeworICAgICAgICB4ID0gcC54KCk7CisgICAgICAgIHkgPSBw
LnkoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIFdlYkNv
cmU6OkZsb2F0UG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZs
b2F0UG9pbnQoeCwgeSk7CisgICAgfQorI2VuZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFdlYkZsb2F0UG9pbnQmIGEsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGIpCit7Cisg
ICAgcmV0dXJuIGEueCA9PSBiLnggJiYgYS55ID09IGIueTsKK30KKworaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBXZWJGbG9hdFBvaW50JiBhLCBjb25zdCBXZWJGbG9hdFBvaW50JiBiKQor
eworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRSZWN0Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmE4ODM1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJG
bG9hdFJlY3RfaAorI2RlZmluZSBXZWJGbG9hdFJlY3RfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9u
LmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYkZsb2F0UmVjdCB7Cisg
ICAgZmxvYXQgeDsKKyAgICBmbG9hdCB5OworICAgIGZsb2F0IHdpZHRoOworICAgIGZsb2F0IGhl
aWdodDsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoIDw9IDAgfHwg
aGVpZ2h0IDw9IDA7IH0KKworICAgIFdlYkZsb2F0UmVjdCgpCisgICAgICAgIDogeCgwLjBmKQor
ICAgICAgICAsIHkoMC4wZikKKyAgICAgICAgLCB3aWR0aCgwLjBmKQorICAgICAgICAsIGhlaWdo
dCgwLjBmKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJGbG9hdFJlY3QoZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKKyAgICAgICAgOiB4KHgpCisgICAgICAgICwg
eSh5KQorICAgICAgICAsIHdpZHRoKHdpZHRoKQorICAgICAgICAsIGhlaWdodChoZWlnaHQpCisg
ICAgeworICAgIH0KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkZsb2F0UmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHIpCisgICAgICAgIDogeChyLngoKSkKKyAgICAg
ICAgLCB5KHIueSgpKQorICAgICAgICAsIHdpZHRoKHIud2lkdGgoKSkKKyAgICAgICAgLCBoZWln
aHQoci5oZWlnaHQoKSkKKyAgICB7CisgICAgfQorCisgICAgV2ViRmxvYXRSZWN0JiBvcGVyYXRv
cj0oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByKQorICAgIHsKKyAgICAgICAgeCA9IHIueCgp
OworICAgICAgICB5ID0gci55KCk7CisgICAgICAgIHdpZHRoID0gci53aWR0aCgpOworICAgICAg
ICBoZWlnaHQgPSByLmhlaWdodCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgb3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorI2Vu
ZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkZsb2F0UmVjdCYgYSwg
Y29uc3QgV2ViRmxvYXRSZWN0JiBiKQoreworICAgIHJldHVybiBhLnggPT0gYi54ICYmIGEueSA9
PSBiLnkgJiYgYS53aWR0aCA9PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09IGIuaGVpZ2h0OworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYkZsb2F0UmVjdCYgYSwgY29uc3QgV2Vi
RmxvYXRSZWN0JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRm9udC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGb250LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzMDVkMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViRm9udC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkZv
bnRfaAorI2RlZmluZSBXZWJGb250X2gKKworI2luY2x1ZGUgIldlYkNhbnZhcy5oIgorI2luY2x1
ZGUgIldlYkNvbG9yLmgiCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJGb250RGVzY3JpcHRpb247CitjbGFzcyBXZWJGbG9hdFBvaW50Owor
Y2xhc3MgV2ViRmxvYXRSZWN0OworY2xhc3MgV2ViUG9pbnQ7CitjbGFzcyBXZWJSZWN0Oworc3Ry
dWN0IFdlYlRleHRSdW47CisKK2NsYXNzIFdlYkZvbnQgeworcHVibGljOgorICAgIFdFQktJVF9B
UEkgc3RhdGljIFdlYkZvbnQqIENyZWF0ZShjb25zdCBXZWJGb250RGVzY3JpcHRpb24mKTsKKwor
ICAgIHZpcnR1YWwgV2ViRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0ID0g
MDsKKworICAgIHZpcnR1YWwgaW50IGFzY2VudCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGlu
dCBkZXNjZW50KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGludCBsaW5lU3BhY2luZygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGZsb2F0IHhIZWlnaHQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHQo
V2ViQ2FudmFzKiwgY29uc3QgV2ViVGV4dFJ1biYsIGNvbnN0IFdlYkZsb2F0UG9pbnQmLCBXZWJD
b2xvciwgY29uc3QgV2ViUmVjdCYgY2xpcCwgYm9vbCBjYW52YXNJc09wYXF1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgaW50IHdpZHRoKGNvbnN0IFdlYlRleHRSdW4mKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgV2ViVGV4dFJ1biYsIGZsb2F0IHBv
c2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBXZWJGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgV2ViVGV4dFJ1biYsIGNv
bnN0IFdlYkZsb2F0UG9pbnQmLCBpbnQgaCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29u
c3QgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGb250RGVzY3JpcHRpb24uaCBiL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViRm9udERlc2NyaXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjk4MGJlMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViRm9udERlc2NyaXB0aW9uLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkZvbnREZXNjcmlwdGlvbl9oCisjZGVmaW5lIFdlYkZvbnREZXNjcmlwdGlvbl9oCisKKyNpbmNs
dWRlICJXZWJTdHJpbmcuaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNl
IFdlYkNvcmUgeyBjbGFzcyBGb250RGVzY3JpcHRpb247IH0KKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworc3RydWN0IFdlYkZvbnREZXNjcmlwdGlvbiB7CisgICAgZW51bSBHZW5lcmlj
RmFtaWx5IHsKKyAgICAgICAgR2VuZXJpY0ZhbWlseU5vbmUsCisgICAgICAgIEdlbmVyaWNGYW1p
bHlTdGFuZGFyZCwKKyAgICAgICAgR2VuZXJpY0ZhbWlseVNlcmlmLAorICAgICAgICBHZW5lcmlj
RmFtaWx5U2Fuc1NlcmlmLAorICAgICAgICBHZW5lcmljRmFtaWx5TW9ub3NwYWNlLAorICAgICAg
ICBHZW5lcmljRmFtaWx5Q3Vyc2l2ZSwKKyAgICAgICAgR2VuZXJpY0ZhbWlseUZhbnRhc3kKKyAg
ICB9OworCisgICAgZW51bSBTbW9vdGhpbmcgeworICAgICAgICBTbW9vdGhpbmdBdXRvLAorICAg
ICAgICBTbW9vdGhpbmdOb25lLAorICAgICAgICBTbW9vdGhpbmdHcmF5c2NhbGUsCisgICAgICAg
IFNtb290aGluZ1N1YnBpeGVsCisgICAgfTsKKworICAgIGVudW0gV2VpZ2h0IHsgCisgICAgICAg
IFdlaWdodDEwMCwKKyAgICAgICAgV2VpZ2h0MjAwLAorICAgICAgICBXZWlnaHQzMDAsCisgICAg
ICAgIFdlaWdodDQwMCwKKyAgICAgICAgV2VpZ2h0NTAwLAorICAgICAgICBXZWlnaHQ2MDAsCisg
ICAgICAgIFdlaWdodDcwMCwKKyAgICAgICAgV2VpZ2h0ODAwLAorICAgICAgICBXZWlnaHQ5MDAs
CisgICAgICAgIFdlaWdodE5vcm1hbCA9IFdlaWdodDQwMCwKKyAgICAgICAgV2VpZ2h0Qm9sZCA9
IFdlaWdodDcwMAorICAgIH07CisKKyAgICBXZWJGb250RGVzY3JpcHRpb24oKQorICAgICAgICA6
IGdlbmVyaWNGYW1pbHkoR2VuZXJpY0ZhbWlseU5vbmUpCisgICAgICAgICwgc2l6ZSgwKQorICAg
ICAgICAsIGl0YWxpYyhmYWxzZSkKKyAgICAgICAgLCBzbWFsbENhcHMoZmFsc2UpCisgICAgICAg
ICwgd2VpZ2h0KFdlaWdodE5vcm1hbCkKKyAgICAgICAgLCBzbW9vdGhpbmcoU21vb3RoaW5nQXV0
bykKKyAgICAgICAgLCBsZXR0ZXJTcGFjaW5nKDApCisgICAgICAgICwgd29yZFNwYWNpbmcoMCkK
KyAgICB7CisgICAgfQorI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkZvbnREZXNj
cmlwdGlvbihjb25zdCBXZWJDb3JlOjpGb250RGVzY3JpcHRpb24mLCBzaG9ydCBmb250TGV0dGVy
U3BhY2luZywgc2hvcnQgZm9udFdvcmRTcGFjaW5nKTsKKyNlbmRpZgorCisgICAgV2ViU3RyaW5n
IGZhbWlseTsKKyAgICBHZW5lcmljRmFtaWx5IGdlbmVyaWNGYW1pbHk7CisgICAgZmxvYXQgc2l6
ZTsKKyAgICBib29sIGl0YWxpYzsKKyAgICBib29sIHNtYWxsQ2FwczsKKyAgICBXZWlnaHQgd2Vp
Z2h0OworICAgIFNtb290aGluZyBzbW9vdGhpbmc7CisKKyAgICAvLyBOb3QgbWVtYmVycyBvZiBX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb24sIGJ1dCB1c2VkIGluIHRoZSBwbGFjZXMgd2hlcmUgd2UK
KyAgICAvLyB1c2UgYSBXZWJGb250RGVzY3JpcHRpb24gKHdoZW4gbWFraW5nIGEgZm9udCksIHNv
IGZvciBjb252ZW5pZW5jZSB0aGVzZQorICAgIC8vIGF0dHJpYnV0ZXMgYXJlIHRyYWNrZWQgaGVy
ZS4KKyAgICBzaG9ydCBsZXR0ZXJTcGFjaW5nOworICAgIHNob3J0IHdvcmRTcGFjaW5nOworCisj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6Rm9udERlc2Ny
aXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlRleHRSdW4uaCBi
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGV4dFJ1bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmI2NGNmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlRleHRSdW4uaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUZXh0UnVu
X2gKKyNkZWZpbmUgV2ViVGV4dFJ1bl9oCisKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKworI2lm
ZGVmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBUZXh0
UnVuOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJUZXh0UnVu
IHsKKyAgICBXZWJUZXh0UnVuKGNvbnN0IFdlYlN0cmluZyYgdCwgYm9vbCBpc1J0bCwgYm9vbCBo
YXNEaXJlY3Rpb25hbE92ZXJyaWRlKQorICAgICAgICA6IHRleHQodCkKKyAgICAgICAgLCBydGwo
aXNSdGwpCisgICAgICAgICwgZGlyZWN0aW9uYWxPdmVycmlkZShoYXNEaXJlY3Rpb25hbE92ZXJy
aWRlKQorICAgIHsKKyAgICB9CisgICAgV2ViVGV4dFJ1bigpCisgICAgICAgIDogcnRsKGZhbHNl
KQorICAgICAgICAsIGRpcmVjdGlvbmFsT3ZlcnJpZGUoZmFsc2UpCisgICAgeworICAgIH0KKyNp
ZmRlZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICAvLyBUaGUgcmVzdWx0aW5nIFdlYkNvcmU6
OlRleHRSdW4gd2lsbCByZWZlciB0byB0aGUgdGV4dCBpbiB0aGlzCisgICAgLy8gc3RydWN0LCBz
byAidGhpcyIgbXVzdCBvdXRsaXZlIHRoZSBXZWJDb3JlIHRleHQgcnVuLgorICAgIG9wZXJhdG9y
IFdlYkNvcmU6OlRleHRSdW4oKSBjb25zdDsKKyNlbmRpZgorCisgICAgV2ViU3RyaW5nIHRleHQ7
CisgICAgYm9vbCBydGw7CisgICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0
TWF0Y2hpbmdFbnVtcy5jcHAKaW5kZXggMWY5NDZmMy4uZmEyNWUwNSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAorKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCkBAIC0zNiw2ICszNiw4IEBACiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVI
b3N0LmgiCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9uLmgiCisjaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udFNtb290aGluZ01vZGUuaCIKICNpbmNsdWRlICJI
VE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXIuaCIKQEAgLTUyLDYgKzU0LDcgQEAKICNpbmNsdWRlICJXZWJDbGlwYm9hcmQuaCIKICNp
bmNsdWRlICJXZWJDdXJzb3JJbmZvLmgiCiAjaW5jbHVkZSAiV2ViRWRpdGluZ0FjdGlvbi5oIgor
I2luY2x1ZGUgIldlYkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIldlYklEQktleS5oIgog
I2luY2x1ZGUgIldlYklucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIldlYk1lZGlhUGxheWVyLmgi
CkBAIC0zMjYsMyArMzI5LDI5IEBAIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVmll
dzo6VXNlckNvbnRlbnRJbmplY3RJblRvcEZyYW1lT25seSwgSW5qZWN0SW5UCiBDT01QSUxFX0FT
U0VSVF9NQVRDSElOR19FTlVNKFdlYklEQktleTo6TnVsbFR5cGUsIElEQktleTo6TnVsbFR5cGUp
OwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJREJLZXk6OlN0cmluZ1R5cGUsIElE
QktleTo6U3RyaW5nVHlwZSk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYklEQktl
eTo6TnVtYmVyVHlwZSwgSURCS2V5OjpOdW1iZXJUeXBlKTsKKworQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlOb25lLCBGb250RGVz
Y3JpcHRpb246Ok5vRmFtaWx5KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9u
dERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5U3RhbmRhcmQsIEZvbnREZXNjcmlwdGlvbjo6U3Rh
bmRhcmRGYW1pbHkpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3Jp
cHRpb246OkdlbmVyaWNGYW1pbHlTZXJpZiwgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSk7
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6R2VuZXJp
Y0ZhbWlseVNhbnNTZXJpZiwgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHkpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1p
bHlNb25vc3BhY2UsIEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KTsKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5Q3Vy
c2l2ZSwgRm9udERlc2NyaXB0aW9uOjpDdXJzaXZlRmFtaWx5KTsKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5RmFudGFzeSwgRm9u
dERlc2NyaXB0aW9uOjpGYW50YXN5RmFtaWx5KTsKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXZWJGb250RGVzY3JpcHRpb246OlNtb290aGluZ0F1dG8sIEF1dG9TbW9vdGhpbmcpOwor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OlNtb290aGlu
Z05vbmUsIE5vU21vb3RoaW5nKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9u
dERlc2NyaXB0aW9uOjpTbW9vdGhpbmdHcmF5c2NhbGUsIEFudGlhbGlhc2VkKTsKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpTbW9vdGhpbmdTdWJwaXhl
bCwgU3VicGl4ZWxBbnRpYWxpYXNlZCk7CisKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViRm9udERlc2NyaXB0aW9uOjpXZWlnaHQxMDAsIEZvbnRXZWlnaHQxMDApOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OldlaWdodDIwMCwgRm9udFdl
aWdodDIwMCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlv
bjo6V2VpZ2h0MzAwLCBGb250V2VpZ2h0MzAwKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViRm9udERlc2NyaXB0aW9uOjpXZWlnaHQ0MDAsIEZvbnRXZWlnaHQ0MDApOworQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OldlaWdodDUwMCwgRm9u
dFdlaWdodDUwMCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlw
dGlvbjo6V2VpZ2h0NjAwLCBGb250V2VpZ2h0NjAwKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpXZWlnaHQ3MDAsIEZvbnRXZWlnaHQ3MDApOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OldlaWdodDgwMCwg
Rm9udFdlaWdodDgwMCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNj
cmlwdGlvbjo6V2VpZ2h0OTAwLCBGb250V2VpZ2h0OTAwKTsKK0NPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpXZWlnaHROb3JtYWwsIEZvbnRXZWlnaHROb3Jt
YWwpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246Oldl
aWdodEJvbGQsIEZvbnRXZWlnaHRCb2xkKTsKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGb250RGVzY3JpcHRpb24uY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGb250
RGVzY3JpcHRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNjFi
ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvbnREZXNjcmlw
dGlvbi5jcHAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJGb250RGVzY3JpcHRpb24uaCIKKworI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworV2ViRm9udERlc2NyaXB0aW9uOjpXZWJGb250RGVzY3JpcHRp
b24oY29uc3QgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uJiBkZXNjLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgZm9udExldHRlclNwYWNpbmcsIHNob3J0IGZv
bnRXb3JkU3BhY2luZykKK3sKKyAgICBmYW1pbHkgPSBkZXNjLmZhbWlseSgpLmZhbWlseSgpOwor
ICAgIGdlbmVyaWNGYW1pbHkgPSBzdGF0aWNfY2FzdDxHZW5lcmljRmFtaWx5PihkZXNjLmdlbmVy
aWNGYW1pbHkoKSk7CisgICAgc2l6ZSA9IGRlc2Muc3BlY2lmaWVkU2l6ZSgpOworICAgIGl0YWxp
YyA9IGRlc2MuaXRhbGljKCk7CisgICAgc21hbGxDYXBzID0gZGVzYy5zbWFsbENhcHMoKTsKKyAg
ICB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxXZWlnaHQ+KGRlc2Mud2VpZ2h0KCkpOworICAgIHNtb290
aGluZyA9IHN0YXRpY19jYXN0PFNtb290aGluZz4oZGVzYy5mb250U21vb3RoaW5nKCkpOworICAg
IGxldHRlclNwYWNpbmcgPSBmb250TGV0dGVyU3BhY2luZzsKKyAgICB3b3JkU3BhY2luZyA9IGZv
bnRXb3JkU3BhY2luZzsKK30KKworV2ViRm9udERlc2NyaXB0aW9uOjpvcGVyYXRvciBXZWJDb3Jl
OjpGb250RGVzY3JpcHRpb24oKSBjb25zdCB7CisgICAgV2ViQ29yZTo6Rm9udEZhbWlseSBmb250
X2ZhbWlseTsKKyAgICBmb250X2ZhbWlseS5zZXRGYW1pbHkoZmFtaWx5KTsKKworICAgIFdlYkNv
cmU6OkZvbnREZXNjcmlwdGlvbiBkZXNjOworICAgIGRlc2Muc2V0RmFtaWx5KGZvbnRfZmFtaWx5
KTsKKyAgICBkZXNjLnNldEdlbmVyaWNGYW1pbHkoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlwZT4oZ2VuZXJpY0ZhbWlseSkpOworICAgIGRlc2Mu
c2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShzaXplKTsK
KyAgICBkZXNjLnNldEl0YWxpYyhpdGFsaWMpOworICAgIGRlc2Muc2V0U21hbGxDYXBzKHNtYWxs
Q2Fwcyk7CisgICAgZGVzYy5zZXRXZWlnaHQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Rm9udFdlaWdo
dD4od2VpZ2h0KSk7CisgICAgZGVzYy5zZXRGb250U21vb3RoaW5nKHN0YXRpY19jYXN0PFdlYkNv
cmU6OkZvbnRTbW9vdGhpbmdNb2RlPihzbW9vdGhpbmcpKTsKKyAgICByZXR1cm4gZGVzYzsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZvbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udEltcGwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMDhhODYKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvbnRJbXBsLmNwcApAQCAtMCwwICsxLDEyNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJGb250SW1wbC5oIgorCisjaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRl
ICJXZWJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiV2ViRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
V2ViRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiV2ViUmVjdC5oIgorI2luY2x1ZGUgIldl
YlRleHRSdW4uaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJGb250KiBXZWJGb250OjpDcmVhdGUoY29uc3QgV2ViRm9udERlc2NyaXB0aW9u
JiBkZXNjKQoreworICAgIHJldHVybiBuZXcgV2ViRm9udEltcGwoZGVzYywgZGVzYy5sZXR0ZXJT
cGFjaW5nLCBkZXNjLndvcmRTcGFjaW5nKTsKK30KKworV2ViRm9udEltcGw6OldlYkZvbnRJbXBs
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzYywgc2hvcnQgbGV0dGVyU3BhY2luZywgc2hvcnQg
d29yZFNwYWNpbmcpCisgICAgOiBtX2ZvbnQoZGVzYywgbGV0dGVyU3BhY2luZywgd29yZFNwYWNp
bmcpCit7CisgICAgbV9mb250LnVwZGF0ZSgwKTsKK30KKworV2ViRm9udERlc2NyaXB0aW9uIFdl
YkZvbnRJbXBsOjpmb250RGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBXZWJGb250
RGVzY3JpcHRpb24obV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBtX2ZvbnQubGV0dGVyU3BhY2lu
ZygpLCBtX2ZvbnQud29yZFNwYWNpbmcoKSk7Cit9CisKK2ludCBXZWJGb250SW1wbDo6YXNjZW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250LmFzY2VudCgpOworfQorCitpbnQgV2ViRm9u
dEltcGw6OmRlc2NlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnQuZGVzY2VudCgpOwor
fQorCitpbnQgV2ViRm9udEltcGw6OmhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9u
dC5oZWlnaHQoKTsKK30KKworaW50IFdlYkZvbnRJbXBsOjpsaW5lU3BhY2luZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZm9udC5saW5lU3BhY2luZygpOworfQorCitmbG9hdCBXZWJGb250SW1w
bDo6eEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udC54SGVpZ2h0KCk7Cit9CisK
K3ZvaWQgV2ViRm9udEltcGw6OmRyYXdUZXh0KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJU
ZXh0UnVuJiBydW4sIGNvbnN0IFdlYkZsb2F0UG9pbnQmIHBvaW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViQ29sb3IgY29sb3IsIGNvbnN0IFdlYlJlY3QmIGNsaXAsIGJvb2wgY2Fu
dmFzSXNPcGFxdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAoreworICAgIC8vIEZJWE1FKGJyZXR0dykgaG9vayBjYW52YXNJc09wYXF1ZSB1cCB0
byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5kaWNhdG9ycworICAgIC8vIGZvciB3aGV0aGVyIHN1
YnBpeGVsIEFBIGNhbiBiZSB1c2VkIGZvciB0aGlzIGRyYXcuIE9uIFdpbmRvd3MsIHRoaXMgaXMK
KyAgICAvLyBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXREcmF3aW5nVG9JbWFnZUJ1ZmZlci4KKyNp
ZiBXRUJLSVRfVVNJTkdfQ0cKKyAgICBHcmFwaGljc0NvbnRleHQgZ2MoY2FudmFzKTsKKyNlbGlm
IFdFQktJVF9VU0lOR19TS0lBCisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBjb250ZXh0KGNhbnZh
cyk7CisgICAgLy8gUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgaXMgYWN0dWFsbHkgYSBwb2ludGVy
IHRvIFBsYXRmb3JtQ29udGV4dFNraWEuCisgICAgR3JhcGhpY3NDb250ZXh0IGdjKHJlaW50ZXJw
cmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPigmY29udGV4dCkpOworI2Vsc2UKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCisKKyAgICBnYy5zZXRGaWxsQ29sb3IoY29sb3Is
IERldmljZUNvbG9yU3BhY2UpOworICAgIGdjLmNsaXAoV2ViQ29yZTo6RmxvYXRSZWN0KGNsaXAp
KTsKKyAgICBtX2ZvbnQuZHJhd1RleHQoJmdjLCBydW4sIHBvaW50LCBmcm9tLCB0byk7Cit9CisK
K2ludCBXZWJGb250SW1wbDo6d2lkdGgoY29uc3QgV2ViVGV4dFJ1biYgcnVuKSBjb25zdAorewor
ICAgIHJldHVybiBtX2ZvbnQud2lkdGgocnVuLCAwKTsKK30KKworaW50IFdlYkZvbnRJbXBsOjpv
ZmZzZXRGb3JQb3NpdGlvbihjb25zdCBXZWJUZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0aW9uLCBi
b29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnQub2Zm
c2V0Rm9yUG9zaXRpb24ocnVuLCBwb3NpdGlvbiwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworfQor
CitXZWJGbG9hdFJlY3QgV2ViRm9udEltcGw6OnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFdl
YlRleHRSdW4mIHJ1biwgY29uc3QgV2ViRmxvYXRQb2ludCYgcG9zaXRpb24sIGludCBoLCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnQuc2VsZWN0aW9uUmVjdEZv
clRleHQocnVuLCBwb3NpdGlvbiwgaCwgZnJvbSwgdG8pOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udEltcGwuaCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jNDQ1MzIyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGb250SW1wbC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkZvbnRJbXBsX2gKKyNk
ZWZpbmUgV2ViRm9udEltcGxfaAorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIldlYkZv
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBGb250RGVzY3JpcHRpb247IH0KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkZvbnRJbXBsIDogcHVibGljIFdlYkZvbnQg
eworcHVibGljOgorICAgIFdlYkZvbnRJbXBsKGNvbnN0IFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
biYsIHNob3J0IGxldHRlclNwYWNpbmcsIHNob3J0IHdvcmRTcGFjaW5nKTsKKworICAgIHZpcnR1
YWwgV2ViRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0OworCisgICAgdmly
dHVhbCBpbnQgYXNjZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZGVzY2VudCgpIGNvbnN0
OworICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGxpbmVT
cGFjaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCB4SGVpZ2h0KCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1RleHQoV2ViQ2FudmFzKiwgY29uc3QgV2ViVGV4dFJ1biYsIGNv
bnN0IFdlYkZsb2F0UG9pbnQmLCBXZWJDb2xvciwgY29uc3QgV2ViUmVjdCYgY2xpcCwgYm9vbCBj
YW52YXNJc09wYXF1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20gPSAwLCBp
bnQgdG8gPSAtMSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgd2lkdGgoY29uc3QgV2ViVGV4dFJ1
biYpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFdlYlRl
eHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7
CisgICAgdmlydHVhbCBXZWJGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgV2Vi
VGV4dFJ1biYsIGNvbnN0IFdlYkZsb2F0UG9pbnQmLCBpbnQgaCwgaW50IGZyb20gPSAwLCBpbnQg
dG8gPSAtMSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6Rm9udCBtX2ZvbnQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlRleHRSdW4uY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUZXh0
UnVuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTFkZDU5Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUZXh0UnVuLmNwcApAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlRleHRSdW4uaCIKKwor
I2luY2x1ZGUgIlRleHRSdW4uaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJUZXh0UnVuOjpvcGVyYXRvciBXZWJDb3JlOjpUZXh0UnVuKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6VGV4dFJ1bih0ZXh0LCBmYWxzZSwgMCwgMCwg
cnRsLCBkaXJlY3Rpb25hbE92ZXJyaWRlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="50958"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62740</attachid>
            <date>2010-07-27 13:46:25 -0700</date>
            <delta_ts>2010-07-27 13:51:38 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>webkit_font.diff</filename>
            <type>text/plain</type>
            <size>36584</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDFiNTk2NmQuLmY1ODQ3MDkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDUyIEBACisyMDEwLTA3LTI3ICBCcmV0dCBXaWxzb24gIDxicmV0dHdAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KKworICAgICAgICBBZGQgdGhlIGFi
aWxpdHkgdG8gc2VsZWN0IGZvbnRzIGFuZCBkbyBiYXNpYyB0ZXh0IGRyYXdpbmcgdG8gdGhlCisg
ICAgICAgIENocm9taXVtIFdlYktpdCBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00Mjk5OQorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViRmxvYXRQb2ludC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
RmxvYXRQb2ludDo6V2ViRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UG9p
bnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UG9pbnQ6Om9wZXJhdG9y
IFdlYkNvcmU6OkZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcHVibGljL1dlYkZsb2F0UmVj
dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRSZWN0Ojppc0VtcHR5KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRmxvYXRSZWN0OjpXZWJGbG9hdFJlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGbG9hdFJlY3Q6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0
UmVjdDo6b3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHB1Ymxp
Yy9XZWJGb250Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJGb250RGVzY3JpcHRpb24u
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkZvbnREZXNjcmlwdGlvbjo6KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRm9udERlc2NyaXB0aW9uOjpXZWJGb250RGVzY3JpcHRpb24pOgorICAg
ICAgICAqIHB1YmxpYy9XZWJUZXh0UnVuLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJU
ZXh0UnVuOjpXZWJUZXh0UnVuKToKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5j
cHA6CisgICAgICAgICogc3JjL1dlYkZvbnREZXNjcmlwdGlvbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJGb250RGVzY3JpcHRpb246OldlYkZvbnREZXNjcmlwdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZvbnREZXNjcmlwdGlvbjo6b3BlcmF0b3IgV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uKToKKyAgICAgICAgKiBzcmMvV2ViRm9udEltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViRm9udDo6Q3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udElt
cGw6OldlYkZvbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udEltcGw6OmZvbnREZXNj
cmlwdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjphc2NlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGb250SW1wbDo6ZGVzY2VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZv
bnRJbXBsOjpoZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb250SW1wbDo6bGluZVNwYWNp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb250SW1wbDo6eEhlaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZvbnRJbXBsOjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJ
bXBsOjp3aWR0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjpvZmZzZXRGb3JQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjpzZWxlY3Rpb25SZWN0Rm9yVGV4
dCk6CisgICAgICAgICogc3JjL1dlYkZvbnRJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9X
ZWJUZXh0UnVuLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlRleHRSdW46Om9wZXJh
dG9yIFdlYkNvcmU6OlRleHRSdW4pOgorCiAyMDEwLTA3LTI3ICBQYXZlbCBQb2Rpdmlsb3YgIDxw
b2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRt
YW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IDc5NWFiYmIuLjk3ZWZkZGMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBA
IC0xNTYsNiArMTU2LDEwIEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGaWxlSW5mby5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZpbGVTeXN0ZW0uaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJGaW5kT3B0aW9ucy5oJywKKyAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkZsb2F0UG9pbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGbG9hdFJlY3Qu
aCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGb250LmgnLAorICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViRm9udERlc2NyaXB0aW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViRnJhbWUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvbnRDYWNoZS5oJywKQEAgLTI0Nyw2ICsyNTEs
NyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVGV4dENhc2VTZW5zaXRpdml0eS5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYlRleHREaXJlY3Rpb24uaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViVGV4dFJ1bi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlRoZW1lRW5naW5l
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVVJMLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViVVJMRXJyb3IuaCcsCkBAIC0zOTEsNiArMzk2LDkgQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGwuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGwuaCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJGb250Q2FjaGUuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRE
ZXNjcmlwdGlvbi5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRm9udEltcGwuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViRm9ybUNvbnRyb2xFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJG
b3JtRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRnJhbWVJbXBsLmNwcCcs
CkBAIC00NzIsNiArNDgwLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VOYW1l
c3BhY2VJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlTmFtZXNwYWNl
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0cmluZy5jcHAnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViVGV4dFJ1bi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVVJM
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2FkVGltaW5nLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJVUkxSZXF1ZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9pbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRmxvYXRQb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTNl
ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9p
bnQuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdFBvaW50X2gKKyNkZWZpbmUgV2Vi
RmxvYXRQb2ludF9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3N0cnVjdCBXZWJGbG9hdFBvaW50IHsKKyAgICBmbG9hdCB4OworICAgIGZsb2F0
IHk7CisKKyAgICBXZWJGbG9hdFBvaW50KCkKKyAgICAgICAgOiB4KDAuMGYpCisgICAgICAgICwg
eSgwLjBmKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0
IHkpCisgICAgICAgIDogeCh4KQorICAgICAgICAsIHkoeSkKKyAgICB7CisgICAgfQorCisjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViRmxvYXRQb2ludChjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwKQorICAgICAgICA6IHgocC54KCkpCisgICAgICAgICwgeShwLnkoKSkKKyAg
ICB7CisgICAgfQorCisgICAgV2ViRmxvYXRQb2ludCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHApCisgICAgeworICAgICAgICB4ID0gcC54KCk7CisgICAgICAgIHkgPSBw
LnkoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIFdlYkNv
cmU6OkZsb2F0UG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZs
b2F0UG9pbnQoeCwgeSk7CisgICAgfQorI2VuZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFdlYkZsb2F0UG9pbnQmIGEsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGIpCit7Cisg
ICAgcmV0dXJuIGEueCA9PSBiLnggJiYgYS55ID09IGIueTsKK30KKworaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBXZWJGbG9hdFBvaW50JiBhLCBjb25zdCBXZWJGbG9hdFBvaW50JiBiKQor
eworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRSZWN0Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmE4ODM1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJG
bG9hdFJlY3RfaAorI2RlZmluZSBXZWJGbG9hdFJlY3RfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9u
LmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYkZsb2F0UmVjdCB7Cisg
ICAgZmxvYXQgeDsKKyAgICBmbG9hdCB5OworICAgIGZsb2F0IHdpZHRoOworICAgIGZsb2F0IGhl
aWdodDsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoIDw9IDAgfHwg
aGVpZ2h0IDw9IDA7IH0KKworICAgIFdlYkZsb2F0UmVjdCgpCisgICAgICAgIDogeCgwLjBmKQor
ICAgICAgICAsIHkoMC4wZikKKyAgICAgICAgLCB3aWR0aCgwLjBmKQorICAgICAgICAsIGhlaWdo
dCgwLjBmKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJGbG9hdFJlY3QoZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKKyAgICAgICAgOiB4KHgpCisgICAgICAgICwg
eSh5KQorICAgICAgICAsIHdpZHRoKHdpZHRoKQorICAgICAgICAsIGhlaWdodChoZWlnaHQpCisg
ICAgeworICAgIH0KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkZsb2F0UmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHIpCisgICAgICAgIDogeChyLngoKSkKKyAgICAg
ICAgLCB5KHIueSgpKQorICAgICAgICAsIHdpZHRoKHIud2lkdGgoKSkKKyAgICAgICAgLCBoZWln
aHQoci5oZWlnaHQoKSkKKyAgICB7CisgICAgfQorCisgICAgV2ViRmxvYXRSZWN0JiBvcGVyYXRv
cj0oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByKQorICAgIHsKKyAgICAgICAgeCA9IHIueCgp
OworICAgICAgICB5ID0gci55KCk7CisgICAgICAgIHdpZHRoID0gci53aWR0aCgpOworICAgICAg
ICBoZWlnaHQgPSByLmhlaWdodCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgb3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorI2Vu
ZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkZsb2F0UmVjdCYgYSwg
Y29uc3QgV2ViRmxvYXRSZWN0JiBiKQoreworICAgIHJldHVybiBhLnggPT0gYi54ICYmIGEueSA9
PSBiLnkgJiYgYS53aWR0aCA9PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09IGIuaGVpZ2h0OworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYkZsb2F0UmVjdCYgYSwgY29uc3QgV2Vi
RmxvYXRSZWN0JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRm9udC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGb250LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljYzdhMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViRm9udC5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJG
b250X2gKKyNkZWZpbmUgV2ViRm9udF9oCisKKyNpbmNsdWRlICJXZWJDYW52YXMuaCIKKyNpbmNs
dWRlICJXZWJDb2xvci5oIgorI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViRm9udERlc2NyaXB0aW9uOworY2xhc3MgV2ViRmxvYXRQb2ludDsK
K2NsYXNzIFdlYkZsb2F0UmVjdDsKK2NsYXNzIFdlYlBvaW50OworY2xhc3MgV2ViUmVjdDsKK3N0
cnVjdCBXZWJUZXh0UnVuOworCitjbGFzcyBXZWJGb250IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5XZWJGb250KCkgeyB9CisKKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJGb250KiBDcmVhdGUo
Y29uc3QgV2ViRm9udERlc2NyaXB0aW9uJik7CisKKyAgICB2aXJ0dWFsIFdlYkZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb24oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBhc2Nl
bnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZGVzY2VudCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgbGluZVNw
YWNpbmcoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9hdCB4SGVpZ2h0KCkgY29uc3QgPSAw
OworCisgICAgLy8gRHJhd3MgdGhlIHRleHQgcnVuIHRvIHRoZSBnaXZlbiBjYW52YXMuIFRoZSB0
ZXh0IGlzIHBvc2l0aW9uZWQgYXQgdGhlCisgICAgLy8gZ2l2ZW4gbGVmdC1oYW5kIHBvaW50IGF0
IHRoZSBiYXNlbGluZS4KKyAgICAvLworICAgIC8vIFRoZSB0ZXh0IHdpbGwgYmUgY2xpcHBlZCB0
byB0aGUgZ2l2ZW4gY2xpcCByZWN0LiB8Y2FudmFzSXNPcGFxdWV8IGlzCisgICAgLy8gdXNlZCB0
byBjb250cm9sIHdoZXRoZXIgc3VicGl4ZWwgYW50aWFsaWFzaW5nIGlzIHBvc3NpYmxlLiBJZiB0
aGVyZSBpcyBhCisgICAgLy8gcG9zc2liaWxpdHkgdGhlIGFyZWEgZHJhd24gY291bGQgYmUgc2Vt
aS10cmFuc3BhcmVudCwgc3VicGl4ZWwKKyAgICAvLyBhbnRpYWxpYXNpbmcgd2lsbCBiZSBkaXNh
YmxlZC4KKyAgICAvLworICAgIC8vIHxmcm9tfCBhbmQgfHRvfCBhbGxvdyB0aGUgY2FsbGVyIHRv
IHNwZWNpZnkgYSBzdWJyYW5nZSBvZiB0aGUgZ2l2ZW4gdGV4dAorICAgIC8vIHJ1biB0byBkcmF3
LiBJZiB8dG98IGlzIC0xLCB0aGUgZW50dXJlIHJ1biB3aWxsIGJlIGRyYXduLgorICAgIHZpcnR1
YWwgdm9pZCBkcmF3VGV4dChXZWJDYW52YXMqLCBjb25zdCBXZWJUZXh0UnVuJiwgY29uc3QgV2Vi
RmxvYXRQb2ludCYgbGVmdEJhc2VsaW5lLCBXZWJDb2xvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV2ViUmVjdCYgY2xpcCwgYm9vbCBjYW52YXNJc09wYXF1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3QgPSAwOwor
CisgICAgLy8gTWVhc3VyZXMgdGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgZ2l2ZW4gdGV4dCBy
dW4uCisgICAgdmlydHVhbCBpbnQgY2FsY3VsYXRlV2lkdGgoY29uc3QgV2ViVGV4dFJ1biYpIGNv
bnN0ID0gMDsKKworICAgIC8vIFJldHVybnMgdGhlIGNoYXJhY3RlciBvZmZzZXQgY29ycmVzcG9u
ZGluZyB0byB0aGUgZ2l2ZW4gaG9yaXpvbnRhbCBwaXhlbAorICAgIC8vIHBvc2l0aW9uIGFzIG1l
YXN1cmVkIGZyb20gZnJvbSB0aGUgbGVmdCBvZiB0aGUgcnVuLgorICAgIHZpcnR1YWwgaW50IG9m
ZnNldEZvclBvc2l0aW9uKGNvbnN0IFdlYlRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbikgY29uc3Qg
PSAwOworCisgICAgLy8gUmV0dXJucyB0aGUgcmVjdGFuZ2xlIHJlcHJlc2VudGluZyB0aGUgc2Vs
ZWN0aW9uIHJlY3QgZm9yIHRoZSBzdWJyYW5nZQorICAgIC8vIHxmcm9tfCAtPiB8dG98IG9mIHRo
ZSBnaXZlbiB0ZXh0IHJ1bi4gWW91IGNhbiB1c2UgLTEgZm9yIHx0b3wgdG8gc3BlY2lmeQorICAg
IC8vIHRoZSBlbnRpcmUgcnVuICh0aGlzIHdpbGwgZG8gc29tZXRoaW5nIHNpbWlsYXIgdG8gY2Fs
bGluZyB3aWR0aCgpKS4KKyAgICAvLworICAgIC8vIFRoZSByZWN0IHdpbGwgYmUgcG9zaXRpb25l
ZCBhcyBpZiB0aGUgdGV4dCB3YXMgZHJhd24gYXQgdGhlIGdpdmVuCisgICAgLy8gfGxlZnRCYXNl
bGluZXwgcG9zaXRpb24uIHxofCBpbmRpY2F0ZXMgdGhlIGhlaWdodCBvZiB0aGUgc2VsZWN0aW9u
IHJlY3QKKyAgICAvLyB5b3Ugd2FudCwgdHlwaWNhbGx5IHRoaXMgd2lsbCBqdXN0IGJlIHRoZSBo
ZWlnaHQoKSBvZiB0aGlzIGZvbnQuCisgICAgLy8KKyAgICAvLyBUbyBnZXQgdGhlIHBpeGVsIG9m
ZnNldCBvZiBzb21lIGNoYXJhY3RlciAodGhlIG9wcG9zaXRlIG9mCisgICAgLy8gb2Zmc2V0Rm9y
UG9zaXRpb24oKSksIHBhc3MgaW4gYSB8bGVmdEJhc2VsaW5lfCA9ICgwLCAwKSwgfGZyb218ID0g
MCwgYW5kCisgICAgLy8gfHRvfCA9IHRoZSBjaGFyYWN0ZXIgeW91IHdhbnQuIFRoZSByaWdodCBl
ZGdlIG9mIHRoZSByZXN1bHRpbmcgc2VsZWN0aW9uCisgICAgLy8gcmVjdCB3aWxsIHRlbGwgeW91
IHRoZSByaWdodCBzaWRlIG9mIHRoZSBjaGFyYWN0ZXIuCisgICAgdmlydHVhbCBXZWJGbG9hdFJl
Y3Qgc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgV2ViVGV4dFJ1biYsIGNvbnN0IFdlYkZsb2F0
UG9pbnQmIGxlZnRCYXNlbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3QgPSAwOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJGb250RGVzY3JpcHRpb24uaCBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViRm9udERlc2NyaXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYWNiMDkyOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRm9udERlc2NyaXB0aW9uLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkZvbnREZXNj
cmlwdGlvbl9oCisjZGVmaW5lIFdlYkZvbnREZXNjcmlwdGlvbl9oCisKKyNpbmNsdWRlICJXZWJT
dHJpbmcuaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdlYkNvcmUg
eyBjbGFzcyBGb250RGVzY3JpcHRpb247IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsK
Kworc3RydWN0IFdlYkZvbnREZXNjcmlwdGlvbiB7CisgICAgZW51bSBHZW5lcmljRmFtaWx5IHsK
KyAgICAgICAgR2VuZXJpY0ZhbWlseU5vbmUsCisgICAgICAgIEdlbmVyaWNGYW1pbHlTdGFuZGFy
ZCwKKyAgICAgICAgR2VuZXJpY0ZhbWlseVNlcmlmLAorICAgICAgICBHZW5lcmljRmFtaWx5U2Fu
c1NlcmlmLAorICAgICAgICBHZW5lcmljRmFtaWx5TW9ub3NwYWNlLAorICAgICAgICBHZW5lcmlj
RmFtaWx5Q3Vyc2l2ZSwKKyAgICAgICAgR2VuZXJpY0ZhbWlseUZhbnRhc3kKKyAgICB9OworCisg
ICAgZW51bSBTbW9vdGhpbmcgeworICAgICAgICBTbW9vdGhpbmdBdXRvLAorICAgICAgICBTbW9v
dGhpbmdOb25lLAorICAgICAgICBTbW9vdGhpbmdHcmF5c2NhbGUsCisgICAgICAgIFNtb290aGlu
Z1N1YnBpeGVsCisgICAgfTsKKworICAgIGVudW0gV2VpZ2h0IHsgCisgICAgICAgIFdlaWdodDEw
MCwKKyAgICAgICAgV2VpZ2h0MjAwLAorICAgICAgICBXZWlnaHQzMDAsCisgICAgICAgIFdlaWdo
dDQwMCwKKyAgICAgICAgV2VpZ2h0NTAwLAorICAgICAgICBXZWlnaHQ2MDAsCisgICAgICAgIFdl
aWdodDcwMCwKKyAgICAgICAgV2VpZ2h0ODAwLAorICAgICAgICBXZWlnaHQ5MDAsCisgICAgICAg
IFdlaWdodE5vcm1hbCA9IFdlaWdodDQwMCwKKyAgICAgICAgV2VpZ2h0Qm9sZCA9IFdlaWdodDcw
MAorICAgIH07CisKKyAgICBXZWJGb250RGVzY3JpcHRpb24oKQorICAgICAgICA6IGdlbmVyaWNG
YW1pbHkoR2VuZXJpY0ZhbWlseU5vbmUpCisgICAgICAgICwgc2l6ZSgwKQorICAgICAgICAsIGl0
YWxpYyhmYWxzZSkKKyAgICAgICAgLCBzbWFsbENhcHMoZmFsc2UpCisgICAgICAgICwgd2VpZ2h0
KFdlaWdodE5vcm1hbCkKKyAgICAgICAgLCBzbW9vdGhpbmcoU21vb3RoaW5nQXV0bykKKyAgICAg
ICAgLCBsZXR0ZXJTcGFjaW5nKDApCisgICAgICAgICwgd29yZFNwYWNpbmcoMCkKKyAgICB7Cisg
ICAgfQorCisgICAgV2ViU3RyaW5nIGZhbWlseTsKKyAgICBHZW5lcmljRmFtaWx5IGdlbmVyaWNG
YW1pbHk7CisgICAgZmxvYXQgc2l6ZTsKKyAgICBib29sIGl0YWxpYzsKKyAgICBib29sIHNtYWxs
Q2FwczsKKyAgICBXZWlnaHQgd2VpZ2h0OworICAgIFNtb290aGluZyBzbW9vdGhpbmc7CisKKyAg
ICBzaG9ydCBsZXR0ZXJTcGFjaW5nOworICAgIHNob3J0IHdvcmRTcGFjaW5nOworCisjaWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViRm9udERlc2NyaXB0aW9uKGNvbnN0IFdlYkNvcmU6
OkZvbnREZXNjcmlwdGlvbiYsIHNob3J0IGZvbnRMZXR0ZXJTcGFjaW5nLCBzaG9ydCBmb250V29y
ZFNwYWNpbmcpOworCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uKCkgY29u
c3Q7CisjZW5kaWYKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlRleHRSdW4uaCBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViVGV4dFJ1bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjQwOWU3MWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlRleHRSdW4uaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUZXh0UnVuX2gKKyNkZWZpbmUg
V2ViVGV4dFJ1bl9oCisKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKworI2lmZGVmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBUZXh0UnVuOyB9CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJUZXh0UnVuIHsKKyAgICBXZWJU
ZXh0UnVuKGNvbnN0IFdlYlN0cmluZyYgdCwgYm9vbCBpc1J0bCwgYm9vbCBoYXNEaXJlY3Rpb25h
bE92ZXJyaWRlKQorICAgICAgICA6IHRleHQodCkKKyAgICAgICAgLCBydGwoaXNSVEwpCisgICAg
ICAgICwgZGlyZWN0aW9uYWxPdmVycmlkZShoYXNEaXJlY3Rpb25hbE92ZXJyaWRlKQorICAgIHsK
KyAgICB9CisgICAgV2ViVGV4dFJ1bigpCisgICAgICAgIDogcnRsKGZhbHNlKQorICAgICAgICAs
IGRpcmVjdGlvbmFsT3ZlcnJpZGUoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIFdlYlN0cmlu
ZyB0ZXh0OworICAgIGJvb2wgcnRsOworICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZTsKKwor
I2lmZGVmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIC8vIFRoZSByZXN1bHRpbmcgV2ViQ29y
ZTo6VGV4dFJ1biB3aWxsIHJlZmVyIHRvIHRoZSB0ZXh0IGluIHRoaXMKKyAgICAvLyBzdHJ1Y3Qs
IHNvICJ0aGlzIiBtdXN0IG91dGxpdmUgdGhlIFdlYkNvcmUgdGV4dCBydW4uCisgICAgb3BlcmF0
b3IgV2ViQ29yZTo6VGV4dFJ1bigpIGNvbnN0OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2Vy
dE1hdGNoaW5nRW51bXMuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0Vu
dW1zLmNwcAppbmRleCAxZjk0NmYzLi4wOTNhYzExIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
QXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNp
bmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKKyNpbmNsdWRlICJGb250U21vb3RoaW5nTW9kZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgpA
QCAtNTIsNiArNTQsNyBAQAogI2luY2x1ZGUgIldlYkNsaXBib2FyZC5oIgogI2luY2x1ZGUgIldl
YkN1cnNvckluZm8uaCIKICNpbmNsdWRlICJXZWJFZGl0aW5nQWN0aW9uLmgiCisjaW5jbHVkZSAi
V2ViRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiV2ViSURCS2V5LmgiCiAjaW5jbHVkZSAi
V2ViSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXIuaCIKQEAgLTIzNSw2
ICsyMzgsMzEgQEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJFZGl0aW5nQWN0aW9u
VHlwZWQsIEVkaXRvckluc2VydEFjdGlvblR5cGVkKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViRWRpdGluZ0FjdGlvblBhc3RlZCwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKTsK
IENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRWRpdGluZ0FjdGlvbkRyb3BwZWQsIEVk
aXRvckluc2VydEFjdGlvbkRyb3BwZWQpOwogCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYkZvbnREZXNjcmlwdGlvbjo6R2VuZXJpY0ZhbWlseU5vbmUsIEZvbnREZXNjcmlwdGlvbjo6
Tm9GYW1pbHkpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRp
b246OkdlbmVyaWNGYW1pbHlTdGFuZGFyZCwgRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWls
eSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6R2Vu
ZXJpY0ZhbWlseVNlcmlmLCBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5KTsKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5U2Fu
c1NlcmlmLCBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseSk7CitDT01QSUxFX0FTU0VS
VF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6R2VuZXJpY0ZhbWlseU1vbm9zcGFj
ZSwgRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOworQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlDdXJzaXZlLCBGb250
RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHkpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlGYW50YXN5LCBGb250RGVzY3JpcHRp
b246OkZhbnRhc3lGYW1pbHkpOworCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZv
bnREZXNjcmlwdGlvbjo6U21vb3RoaW5nQXV0bywgQXV0b1Ntb290aGluZyk7CitDT01QSUxFX0FT
U0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6U21vb3RoaW5nTm9uZSwgTm9T
bW9vdGhpbmcpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRp
b246OlNtb290aGluZ0dyYXlzY2FsZSwgQW50aWFsaWFzZWQpOworQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OlNtb290aGluZ1N1YnBpeGVsLCBTdWJwaXhl
bEFudGlhbGlhc2VkKTsKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVz
Y3JpcHRpb246OldlaWdodDEwMCwgRm9udFdlaWdodDEwMCk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6V2VpZ2h0MjAwLCBGb250V2VpZ2h0MjAwKTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpXZWlnaHQz
MDAsIEZvbnRXZWlnaHQzMDApOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250
RGVzY3JpcHRpb246OldlaWdodDQwMCwgRm9udFdlaWdodDQwMCk7CitDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6V2VpZ2h0NTAwLCBGb250V2VpZ2h0NTAw
KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpXZWln
aHQ2MDAsIEZvbnRXZWlnaHQ2MDApOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJG
b250RGVzY3JpcHRpb246OldlaWdodDcwMCwgRm9udFdlaWdodDcwMCk7CitDT01QSUxFX0FTU0VS
VF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6V2VpZ2h0ODAwLCBGb250V2VpZ2h0
ODAwKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpX
ZWlnaHQ5MDAsIEZvbnRXZWlnaHQ5MDApOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJGb250RGVzY3JpcHRpb246OldlaWdodE5vcm1hbCwgRm9udFdlaWdodE5vcm1hbCk7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6V2VpZ2h0Qm9sZCwg
Rm9udFdlaWdodEJvbGQpOworCiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYklucHV0
RWxlbWVudDo6VGV4dCwgSFRNTElucHV0RWxlbWVudDo6VEVYVCk7CiBDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdlYklucHV0RWxlbWVudDo6UGFzc3dvcmQsIEhUTUxJbnB1dEVsZW1lbnQ6
OlBBU1NXT1JEKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSW5wdXRFbGVtZW50
OjpJc0luZGV4LCBIVE1MSW5wdXRFbGVtZW50OjpJU0lOREVYKTsKQEAgLTMyNiwzICszNTQsNSBA
QCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0
SW5Ub3BGcmFtZU9ubHksIEluamVjdEluVAogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJJREJLZXk6Ok51bGxUeXBlLCBJREJLZXk6Ok51bGxUeXBlKTsKIENPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViSURCS2V5OjpTdHJpbmdUeXBlLCBJREJLZXk6OlN0cmluZ1R5cGUpOwog
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJREJLZXk6Ok51bWJlclR5cGUsIElEQktl
eTo6TnVtYmVyVHlwZSk7CisKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
b250RGVzY3JpcHRpb24uY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGb250RGVzY3JpcHRp
b24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ODBhNmEKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvbnREZXNjcmlwdGlvbi5jcHAK
QEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJGb250RGVz
Y3JpcHRpb24uaCIKKworI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkZvbnREZXNjcmlwdGlv
bjo6V2ViRm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzYywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGZvbnRMZXR0ZXJTcGFjaW5n
LCBzaG9ydCBmb250V29yZFNwYWNpbmcpCit7CisgICAgZmFtaWx5ID0gZGVzYy5mYW1pbHkoKS5m
YW1pbHkoKTsKKyAgICBnZW5lcmljRmFtaWx5ID0gc3RhdGljX2Nhc3Q8R2VuZXJpY0ZhbWlseT4o
ZGVzYy5nZW5lcmljRmFtaWx5KCkpOworICAgIHNpemUgPSBkZXNjLnNwZWNpZmllZFNpemUoKTsK
KyAgICBpdGFsaWMgPSBkZXNjLml0YWxpYygpOworICAgIHNtYWxsQ2FwcyA9IGRlc2Muc21hbGxD
YXBzKCk7CisgICAgd2VpZ2h0ID0gc3RhdGljX2Nhc3Q8V2VpZ2h0PihkZXNjLndlaWdodCgpKTsK
KyAgICBzbW9vdGhpbmcgPSBzdGF0aWNfY2FzdDxTbW9vdGhpbmc+KGRlc2MuZm9udFNtb290aGlu
ZygpKTsKKyAgICBsZXR0ZXJTcGFjaW5nID0gZm9udExldHRlclNwYWNpbmc7CisgICAgd29yZFNw
YWNpbmcgPSBmb250V29yZFNwYWNpbmc7Cit9CisKK1dlYkZvbnREZXNjcmlwdGlvbjo6b3BlcmF0
b3IgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBGb250RmFtaWx5IGZv
bnRfZmFtaWx5OworICAgIGZvbnRfZmFtaWx5LnNldEZhbWlseShmYW1pbHkpOworCisgICAgRm9u
dERlc2NyaXB0aW9uIGRlc2M7CisgICAgZGVzYy5zZXRGYW1pbHkoZm9udF9mYW1pbHkpOworICAg
IGRlc2Muc2V0R2VuZXJpY0ZhbWlseShzdGF0aWNfY2FzdDxGb250RGVzY3JpcHRpb246OkdlbmVy
aWNGYW1pbHlUeXBlPihnZW5lcmljRmFtaWx5KSk7CisgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXpl
KHNpemUpOworICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKHNpemUpOworICAgIGRlc2Muc2V0SXRh
bGljKGl0YWxpYyk7CisgICAgZGVzYy5zZXRTbWFsbENhcHMoc21hbGxDYXBzKTsKKyAgICBkZXNj
LnNldFdlaWdodChzdGF0aWNfY2FzdDxGb250V2VpZ2h0Pih3ZWlnaHQpKTsKKyAgICBkZXNjLnNl
dEZvbnRTbW9vdGhpbmcoc3RhdGljX2Nhc3Q8Rm9udFNtb290aGluZ01vZGU+KHNtb290aGluZykp
OworICAgIHJldHVybiBkZXNjOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGb250SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ODE4ZDczOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udElt
cGwuY3BwCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YkZvbnRJbXBsLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIldlYkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJXZWJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXZWJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJX
ZWJSZWN0LmgiCisjaW5jbHVkZSAiV2ViVGV4dFJ1bi5oIgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkZvbnQqIFdlYkZvbnQ6OkNyZWF0ZShj
b25zdCBXZWJGb250RGVzY3JpcHRpb24mIGRlc2MpCit7CisgICAgcmV0dXJuIG5ldyBXZWJGb250
SW1wbChkZXNjLCBkZXNjLmxldHRlclNwYWNpbmcsIGRlc2Mud29yZFNwYWNpbmcpOworfQorCitX
ZWJGb250SW1wbDo6V2ViRm9udEltcGwoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjLCBzaG9y
dCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3b3JkU3BhY2luZykKKyAgICA6IG1fZm9udChkZXNjLCBs
ZXR0ZXJTcGFjaW5nLCB3b3JkU3BhY2luZykKK3sKKyAgICBtX2ZvbnQudXBkYXRlKDApOworfQor
CitXZWJGb250RGVzY3JpcHRpb24gV2ViRm9udEltcGw6OmZvbnREZXNjcmlwdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFdlYkZvbnREZXNjcmlwdGlvbihtX2ZvbnQuZm9udERlc2NyaXB0aW9u
KCksIG1fZm9udC5sZXR0ZXJTcGFjaW5nKCksIG1fZm9udC53b3JkU3BhY2luZygpKTsKK30KKwor
aW50IFdlYkZvbnRJbXBsOjphc2NlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnQuYXNj
ZW50KCk7Cit9CisKK2ludCBXZWJGb250SW1wbDo6ZGVzY2VudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZm9udC5kZXNjZW50KCk7Cit9CisKK2ludCBXZWJGb250SW1wbDo6aGVpZ2h0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9mb250LmhlaWdodCgpOworfQorCitpbnQgV2ViRm9udEltcGw6
OmxpbmVTcGFjaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250LmxpbmVTcGFjaW5nKCk7
Cit9CisKK2Zsb2F0IFdlYkZvbnRJbXBsOjp4SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9mb250LnhIZWlnaHQoKTsKK30KKwordm9pZCBXZWJGb250SW1wbDo6ZHJhd1RleHQoV2ViQ2Fu
dmFzKiBjYW52YXMsIGNvbnN0IFdlYlRleHRSdW4mIHJ1biwgY29uc3QgV2ViRmxvYXRQb2ludCYg
bGVmdEJhc2VsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29sb3IgY29sb3Is
IGNvbnN0IFdlYlJlY3QmIGNsaXAsIGJvb2wgY2FudmFzSXNPcGFxdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIC8vIEZJWE1FIGhv
b2sgY2FudmFzSXNPcGFxdWUgdXAgdG8gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluZGljYXRvcnMg
Zm9yCisgICAgLy8gd2hldGhlciBzdWJwaXhlbCBBQSBjYW4gYmUgdXNlZCBmb3IgdGhpcyBkcmF3
LiBPbiBXaW5kb3dzLCB0aGlzIGlzCisgICAgLy8gUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0RHJh
d2luZ1RvSW1hZ2VCdWZmZXIuCisjaWYgV0VCS0lUX1VTSU5HX0NHCisgICAgR3JhcGhpY3NDb250
ZXh0IGdjKGNhbnZhcyk7CisjZWxpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIFBsYXRmb3JtQ29u
dGV4dFNraWEgY29udGV4dChjYW52YXMpOworICAgIC8vIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
IGlzIGFjdHVhbGx5IGEgcG9pbnRlciB0byBQbGF0Zm9ybUNvbnRleHRTa2lhLgorICAgIEdyYXBo
aWNzQ29udGV4dCBnYyhyZWludGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4o
JmNvbnRleHQpKTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbmRpZgorCisgICAg
Z2Muc2V0RmlsbENvbG9yKGNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICBnYy5jbGlwKFdl
YkNvcmU6OkZsb2F0UmVjdChjbGlwKSk7CisgICAgbV9mb250LmRyYXdUZXh0KCZnYywgcnVuLCBs
ZWZ0QmFzZWxpbmUsIGZyb20sIHRvKTsKK30KKworaW50IFdlYkZvbnRJbXBsOjpjYWxjdWxhdGVX
aWR0aChjb25zdCBXZWJUZXh0UnVuJiBydW4pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udC53
aWR0aChydW4sIDApOworfQorCitpbnQgV2ViRm9udEltcGw6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFdlYlRleHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZm9udC5vZmZzZXRGb3JQb3NpdGlvbihydW4sIHBvc2l0aW9uLCB0cnVlKTsKK30KKworV2Vi
RmxvYXRSZWN0IFdlYkZvbnRJbXBsOjpzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBXZWJUZXh0
UnVuJiBydW4sIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGxlZnRCYXNlbGluZSwgaW50IGgsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udC5zZWxlY3Rpb25SZWN0Rm9y
VGV4dChydW4sIGxlZnRCYXNlbGluZSwgaCwgZnJvbSwgdG8pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udEltcGwuaCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43YjljMzJmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGb250SW1wbC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkZvbnRJbXBsX2gK
KyNkZWZpbmUgV2ViRm9udEltcGxfaAorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIldl
YkZvbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBGb250RGVzY3JpcHRpb247IH0K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkZvbnRJbXBsIDogcHVibGljIFdlYkZv
bnQgeworcHVibGljOgorICAgIFdlYkZvbnRJbXBsKGNvbnN0IFdlYkNvcmU6OkZvbnREZXNjcmlw
dGlvbiYsIHNob3J0IGxldHRlclNwYWNpbmcsIHNob3J0IHdvcmRTcGFjaW5nKTsKKworICAgIHZp
cnR1YWwgV2ViRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0OworCisgICAg
dmlydHVhbCBpbnQgYXNjZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZGVzY2VudCgpIGNv
bnN0OworICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGxp
bmVTcGFjaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCB4SGVpZ2h0KCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHQoV2ViQ2FudmFzKiwgY29uc3QgV2ViVGV4dFJ1biYs
IGNvbnN0IFdlYkZsb2F0UG9pbnQmIGxlZnRCYXNlbGluZSwgV2ViQ29sb3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlJlY3QmIGNsaXAsIGJvb2wgY2FudmFzSXNPcGFxdWUs
IGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGNhbGN1
bGF0ZVdpZHRoKGNvbnN0IFdlYlRleHRSdW4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBvZmZz
ZXRGb3JQb3NpdGlvbihjb25zdCBXZWJUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24pIGNvbnN0Owor
ICAgIHZpcnR1YWwgV2ViRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFdlYlRl
eHRSdW4mLCBjb25zdCBXZWJGbG9hdFBvaW50JiBsZWZ0QmFzZWxpbmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGgsIGludCBmcm9tID0gMCwgaW50
IHRvID0gLTEpIGNvbnN0OworCitwcml2YXRlOgorICAgIFdlYkNvcmU6OkZvbnQgbV9mb250Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJUZXh0UnVuLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVGV4
dFJ1bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThkOWZhYwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVGV4dFJ1bi5jcHAKQEAgLTAs
MCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJUZXh0UnVuLmgiCisK
KyNpbmNsdWRlICJUZXh0UnVuLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViVGV4dFJ1bjo6b3BlcmF0b3IgV2ViQ29yZTo6VGV4dFJ1bigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFRleHRSdW4odGV4dCwgZmFsc2UsIDAsIDAsIHJ0bCwgZGly
ZWN0aW9uYWxPdmVycmlkZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62741</attachid>
            <date>2010-07-27 13:51:38 -0700</date>
            <delta_ts>2010-07-27 14:11:12 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>webkit_font.diff</filename>
            <type>text/plain</type>
            <size>36580</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDFiNTk2NmQuLmY1ODQ3MDkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDUyIEBACisyMDEwLTA3LTI3ICBCcmV0dCBXaWxzb24gIDxicmV0dHdAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KKworICAgICAgICBBZGQgdGhlIGFi
aWxpdHkgdG8gc2VsZWN0IGZvbnRzIGFuZCBkbyBiYXNpYyB0ZXh0IGRyYXdpbmcgdG8gdGhlCisg
ICAgICAgIENocm9taXVtIFdlYktpdCBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00Mjk5OQorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViRmxvYXRQb2ludC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
RmxvYXRQb2ludDo6V2ViRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UG9p
bnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UG9pbnQ6Om9wZXJhdG9y
IFdlYkNvcmU6OkZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcHVibGljL1dlYkZsb2F0UmVj
dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRSZWN0Ojppc0VtcHR5KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRmxvYXRSZWN0OjpXZWJGbG9hdFJlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGbG9hdFJlY3Q6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0
UmVjdDo6b3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHB1Ymxp
Yy9XZWJGb250Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJGb250RGVzY3JpcHRpb24u
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkZvbnREZXNjcmlwdGlvbjo6KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRm9udERlc2NyaXB0aW9uOjpXZWJGb250RGVzY3JpcHRpb24pOgorICAg
ICAgICAqIHB1YmxpYy9XZWJUZXh0UnVuLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJU
ZXh0UnVuOjpXZWJUZXh0UnVuKToKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5j
cHA6CisgICAgICAgICogc3JjL1dlYkZvbnREZXNjcmlwdGlvbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJGb250RGVzY3JpcHRpb246OldlYkZvbnREZXNjcmlwdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZvbnREZXNjcmlwdGlvbjo6b3BlcmF0b3IgV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uKToKKyAgICAgICAgKiBzcmMvV2ViRm9udEltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViRm9udDo6Q3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udElt
cGw6OldlYkZvbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udEltcGw6OmZvbnREZXNj
cmlwdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjphc2NlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGb250SW1wbDo6ZGVzY2VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZv
bnRJbXBsOjpoZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb250SW1wbDo6bGluZVNwYWNp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb250SW1wbDo6eEhlaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZvbnRJbXBsOjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJ
bXBsOjp3aWR0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjpvZmZzZXRGb3JQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjpzZWxlY3Rpb25SZWN0Rm9yVGV4
dCk6CisgICAgICAgICogc3JjL1dlYkZvbnRJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9X
ZWJUZXh0UnVuLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlRleHRSdW46Om9wZXJh
dG9yIFdlYkNvcmU6OlRleHRSdW4pOgorCiAyMDEwLTA3LTI3ICBQYXZlbCBQb2Rpdmlsb3YgIDxw
b2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRt
YW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IDc5NWFiYmIuLjk3ZWZkZGMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBA
IC0xNTYsNiArMTU2LDEwIEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGaWxlSW5mby5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZpbGVTeXN0ZW0uaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJGaW5kT3B0aW9ucy5oJywKKyAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkZsb2F0UG9pbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGbG9hdFJlY3Qu
aCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGb250LmgnLAorICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViRm9udERlc2NyaXB0aW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViRnJhbWUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvbnRDYWNoZS5oJywKQEAgLTI0Nyw2ICsyNTEs
NyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVGV4dENhc2VTZW5zaXRpdml0eS5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYlRleHREaXJlY3Rpb24uaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViVGV4dFJ1bi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlRoZW1lRW5naW5l
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVVJMLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViVVJMRXJyb3IuaCcsCkBAIC0zOTEsNiArMzk2LDkgQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGwuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGwuaCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJGb250Q2FjaGUuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRE
ZXNjcmlwdGlvbi5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRm9udEltcGwuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViRm9ybUNvbnRyb2xFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJG
b3JtRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRnJhbWVJbXBsLmNwcCcs
CkBAIC00NzIsNiArNDgwLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VOYW1l
c3BhY2VJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlTmFtZXNwYWNl
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0cmluZy5jcHAnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViVGV4dFJ1bi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVVJM
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2FkVGltaW5nLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJVUkxSZXF1ZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9pbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRmxvYXRQb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTNl
ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9p
bnQuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdFBvaW50X2gKKyNkZWZpbmUgV2Vi
RmxvYXRQb2ludF9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3N0cnVjdCBXZWJGbG9hdFBvaW50IHsKKyAgICBmbG9hdCB4OworICAgIGZsb2F0
IHk7CisKKyAgICBXZWJGbG9hdFBvaW50KCkKKyAgICAgICAgOiB4KDAuMGYpCisgICAgICAgICwg
eSgwLjBmKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0
IHkpCisgICAgICAgIDogeCh4KQorICAgICAgICAsIHkoeSkKKyAgICB7CisgICAgfQorCisjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViRmxvYXRQb2ludChjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwKQorICAgICAgICA6IHgocC54KCkpCisgICAgICAgICwgeShwLnkoKSkKKyAg
ICB7CisgICAgfQorCisgICAgV2ViRmxvYXRQb2ludCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHApCisgICAgeworICAgICAgICB4ID0gcC54KCk7CisgICAgICAgIHkgPSBw
LnkoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIFdlYkNv
cmU6OkZsb2F0UG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZs
b2F0UG9pbnQoeCwgeSk7CisgICAgfQorI2VuZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFdlYkZsb2F0UG9pbnQmIGEsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGIpCit7Cisg
ICAgcmV0dXJuIGEueCA9PSBiLnggJiYgYS55ID09IGIueTsKK30KKworaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBXZWJGbG9hdFBvaW50JiBhLCBjb25zdCBXZWJGbG9hdFBvaW50JiBiKQor
eworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRSZWN0Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmE4ODM1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJG
bG9hdFJlY3RfaAorI2RlZmluZSBXZWJGbG9hdFJlY3RfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9u
LmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYkZsb2F0UmVjdCB7Cisg
ICAgZmxvYXQgeDsKKyAgICBmbG9hdCB5OworICAgIGZsb2F0IHdpZHRoOworICAgIGZsb2F0IGhl
aWdodDsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoIDw9IDAgfHwg
aGVpZ2h0IDw9IDA7IH0KKworICAgIFdlYkZsb2F0UmVjdCgpCisgICAgICAgIDogeCgwLjBmKQor
ICAgICAgICAsIHkoMC4wZikKKyAgICAgICAgLCB3aWR0aCgwLjBmKQorICAgICAgICAsIGhlaWdo
dCgwLjBmKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJGbG9hdFJlY3QoZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKKyAgICAgICAgOiB4KHgpCisgICAgICAgICwg
eSh5KQorICAgICAgICAsIHdpZHRoKHdpZHRoKQorICAgICAgICAsIGhlaWdodChoZWlnaHQpCisg
ICAgeworICAgIH0KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkZsb2F0UmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHIpCisgICAgICAgIDogeChyLngoKSkKKyAgICAg
ICAgLCB5KHIueSgpKQorICAgICAgICAsIHdpZHRoKHIud2lkdGgoKSkKKyAgICAgICAgLCBoZWln
aHQoci5oZWlnaHQoKSkKKyAgICB7CisgICAgfQorCisgICAgV2ViRmxvYXRSZWN0JiBvcGVyYXRv
cj0oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByKQorICAgIHsKKyAgICAgICAgeCA9IHIueCgp
OworICAgICAgICB5ID0gci55KCk7CisgICAgICAgIHdpZHRoID0gci53aWR0aCgpOworICAgICAg
ICBoZWlnaHQgPSByLmhlaWdodCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgb3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorI2Vu
ZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkZsb2F0UmVjdCYgYSwg
Y29uc3QgV2ViRmxvYXRSZWN0JiBiKQoreworICAgIHJldHVybiBhLnggPT0gYi54ICYmIGEueSA9
PSBiLnkgJiYgYS53aWR0aCA9PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09IGIuaGVpZ2h0OworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYkZsb2F0UmVjdCYgYSwgY29uc3QgV2Vi
RmxvYXRSZWN0JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRm9udC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGb250LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljYzdhMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViRm9udC5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJG
b250X2gKKyNkZWZpbmUgV2ViRm9udF9oCisKKyNpbmNsdWRlICJXZWJDYW52YXMuaCIKKyNpbmNs
dWRlICJXZWJDb2xvci5oIgorI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViRm9udERlc2NyaXB0aW9uOworY2xhc3MgV2ViRmxvYXRQb2ludDsK
K2NsYXNzIFdlYkZsb2F0UmVjdDsKK2NsYXNzIFdlYlBvaW50OworY2xhc3MgV2ViUmVjdDsKK3N0
cnVjdCBXZWJUZXh0UnVuOworCitjbGFzcyBXZWJGb250IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5XZWJGb250KCkgeyB9CisKKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJGb250KiBDcmVhdGUo
Y29uc3QgV2ViRm9udERlc2NyaXB0aW9uJik7CisKKyAgICB2aXJ0dWFsIFdlYkZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb24oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBhc2Nl
bnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZGVzY2VudCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgbGluZVNw
YWNpbmcoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9hdCB4SGVpZ2h0KCkgY29uc3QgPSAw
OworCisgICAgLy8gRHJhd3MgdGhlIHRleHQgcnVuIHRvIHRoZSBnaXZlbiBjYW52YXMuIFRoZSB0
ZXh0IGlzIHBvc2l0aW9uZWQgYXQgdGhlCisgICAgLy8gZ2l2ZW4gbGVmdC1oYW5kIHBvaW50IGF0
IHRoZSBiYXNlbGluZS4KKyAgICAvLworICAgIC8vIFRoZSB0ZXh0IHdpbGwgYmUgY2xpcHBlZCB0
byB0aGUgZ2l2ZW4gY2xpcCByZWN0LiB8Y2FudmFzSXNPcGFxdWV8IGlzCisgICAgLy8gdXNlZCB0
byBjb250cm9sIHdoZXRoZXIgc3VicGl4ZWwgYW50aWFsaWFzaW5nIGlzIHBvc3NpYmxlLiBJZiB0
aGVyZSBpcyBhCisgICAgLy8gcG9zc2liaWxpdHkgdGhlIGFyZWEgZHJhd24gY291bGQgYmUgc2Vt
aS10cmFuc3BhcmVudCwgc3VicGl4ZWwKKyAgICAvLyBhbnRpYWxpYXNpbmcgd2lsbCBiZSBkaXNh
YmxlZC4KKyAgICAvLworICAgIC8vIHxmcm9tfCBhbmQgfHRvfCBhbGxvdyB0aGUgY2FsbGVyIHRv
IHNwZWNpZnkgYSBzdWJyYW5nZSBvZiB0aGUgZ2l2ZW4gdGV4dAorICAgIC8vIHJ1biB0byBkcmF3
LiBJZiB8dG98IGlzIC0xLCB0aGUgZW50dXJlIHJ1biB3aWxsIGJlIGRyYXduLgorICAgIHZpcnR1
YWwgdm9pZCBkcmF3VGV4dChXZWJDYW52YXMqLCBjb25zdCBXZWJUZXh0UnVuJiwgY29uc3QgV2Vi
RmxvYXRQb2ludCYgbGVmdEJhc2VsaW5lLCBXZWJDb2xvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV2ViUmVjdCYgY2xpcCwgYm9vbCBjYW52YXNJc09wYXF1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3QgPSAwOwor
CisgICAgLy8gTWVhc3VyZXMgdGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgZ2l2ZW4gdGV4dCBy
dW4uCisgICAgdmlydHVhbCBpbnQgY2FsY3VsYXRlV2lkdGgoY29uc3QgV2ViVGV4dFJ1biYpIGNv
bnN0ID0gMDsKKworICAgIC8vIFJldHVybnMgdGhlIGNoYXJhY3RlciBvZmZzZXQgY29ycmVzcG9u
ZGluZyB0byB0aGUgZ2l2ZW4gaG9yaXpvbnRhbCBwaXhlbAorICAgIC8vIHBvc2l0aW9uIGFzIG1l
YXN1cmVkIGZyb20gZnJvbSB0aGUgbGVmdCBvZiB0aGUgcnVuLgorICAgIHZpcnR1YWwgaW50IG9m
ZnNldEZvclBvc2l0aW9uKGNvbnN0IFdlYlRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbikgY29uc3Qg
PSAwOworCisgICAgLy8gUmV0dXJucyB0aGUgcmVjdGFuZ2xlIHJlcHJlc2VudGluZyB0aGUgc2Vs
ZWN0aW9uIHJlY3QgZm9yIHRoZSBzdWJyYW5nZQorICAgIC8vIHxmcm9tfCAtPiB8dG98IG9mIHRo
ZSBnaXZlbiB0ZXh0IHJ1bi4gWW91IGNhbiB1c2UgLTEgZm9yIHx0b3wgdG8gc3BlY2lmeQorICAg
IC8vIHRoZSBlbnRpcmUgcnVuICh0aGlzIHdpbGwgZG8gc29tZXRoaW5nIHNpbWlsYXIgdG8gY2Fs
bGluZyB3aWR0aCgpKS4KKyAgICAvLworICAgIC8vIFRoZSByZWN0IHdpbGwgYmUgcG9zaXRpb25l
ZCBhcyBpZiB0aGUgdGV4dCB3YXMgZHJhd24gYXQgdGhlIGdpdmVuCisgICAgLy8gfGxlZnRCYXNl
bGluZXwgcG9zaXRpb24uIHxofCBpbmRpY2F0ZXMgdGhlIGhlaWdodCBvZiB0aGUgc2VsZWN0aW9u
IHJlY3QKKyAgICAvLyB5b3Ugd2FudCwgdHlwaWNhbGx5IHRoaXMgd2lsbCBqdXN0IGJlIHRoZSBo
ZWlnaHQoKSBvZiB0aGlzIGZvbnQuCisgICAgLy8KKyAgICAvLyBUbyBnZXQgdGhlIHBpeGVsIG9m
ZnNldCBvZiBzb21lIGNoYXJhY3RlciAodGhlIG9wcG9zaXRlIG9mCisgICAgLy8gb2Zmc2V0Rm9y
UG9zaXRpb24oKSksIHBhc3MgaW4gYSB8bGVmdEJhc2VsaW5lfCA9ICgwLCAwKSwgfGZyb218ID0g
MCwgYW5kCisgICAgLy8gfHRvfCA9IHRoZSBjaGFyYWN0ZXIgeW91IHdhbnQuIFRoZSByaWdodCBl
ZGdlIG9mIHRoZSByZXN1bHRpbmcgc2VsZWN0aW9uCisgICAgLy8gcmVjdCB3aWxsIHRlbGwgeW91
IHRoZSByaWdodCBzaWRlIG9mIHRoZSBjaGFyYWN0ZXIuCisgICAgdmlydHVhbCBXZWJGbG9hdFJl
Y3Qgc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgV2ViVGV4dFJ1biYsIGNvbnN0IFdlYkZsb2F0
UG9pbnQmIGxlZnRCYXNlbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3QgPSAwOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJGb250RGVzY3JpcHRpb24uaCBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViRm9udERlc2NyaXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZDRiYjA3ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRm9udERlc2NyaXB0aW9uLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkZvbnREZXNj
cmlwdGlvbl9oCisjZGVmaW5lIFdlYkZvbnREZXNjcmlwdGlvbl9oCisKKyNpbmNsdWRlICJXZWJT
dHJpbmcuaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdlYkNvcmUg
eyBjbGFzcyBGb250RGVzY3JpcHRpb247IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsK
Kworc3RydWN0IFdlYkZvbnREZXNjcmlwdGlvbiB7CisgICAgZW51bSBHZW5lcmljRmFtaWx5IHsK
KyAgICAgICAgR2VuZXJpY0ZhbWlseU5vbmUsCisgICAgICAgIEdlbmVyaWNGYW1pbHlTdGFuZGFy
ZCwKKyAgICAgICAgR2VuZXJpY0ZhbWlseVNlcmlmLAorICAgICAgICBHZW5lcmljRmFtaWx5U2Fu
c1NlcmlmLAorICAgICAgICBHZW5lcmljRmFtaWx5TW9ub3NwYWNlLAorICAgICAgICBHZW5lcmlj
RmFtaWx5Q3Vyc2l2ZSwKKyAgICAgICAgR2VuZXJpY0ZhbWlseUZhbnRhc3kKKyAgICB9OworCisg
ICAgZW51bSBTbW9vdGhpbmcgeworICAgICAgICBTbW9vdGhpbmdBdXRvLAorICAgICAgICBTbW9v
dGhpbmdOb25lLAorICAgICAgICBTbW9vdGhpbmdHcmF5c2NhbGUsCisgICAgICAgIFNtb290aGlu
Z1N1YnBpeGVsCisgICAgfTsKKworICAgIGVudW0gV2VpZ2h0IHsgCisgICAgICAgIFdlaWdodDEw
MCwKKyAgICAgICAgV2VpZ2h0MjAwLAorICAgICAgICBXZWlnaHQzMDAsCisgICAgICAgIFdlaWdo
dDQwMCwKKyAgICAgICAgV2VpZ2h0NTAwLAorICAgICAgICBXZWlnaHQ2MDAsCisgICAgICAgIFdl
aWdodDcwMCwKKyAgICAgICAgV2VpZ2h0ODAwLAorICAgICAgICBXZWlnaHQ5MDAsCisgICAgICAg
IFdlaWdodE5vcm1hbCA9IFdlaWdodDQwMCwKKyAgICAgICAgV2VpZ2h0Qm9sZCA9IFdlaWdodDcw
MAorICAgIH07CisKKyAgICBXZWJGb250RGVzY3JpcHRpb24oKQorICAgICAgICA6IGdlbmVyaWNG
YW1pbHkoR2VuZXJpY0ZhbWlseU5vbmUpCisgICAgICAgICwgc2l6ZSgwKQorICAgICAgICAsIGl0
YWxpYyhmYWxzZSkKKyAgICAgICAgLCBzbWFsbENhcHMoZmFsc2UpCisgICAgICAgICwgd2VpZ2h0
KFdlaWdodE5vcm1hbCkKKyAgICAgICAgLCBzbW9vdGhpbmcoU21vb3RoaW5nQXV0bykKKyAgICAg
ICAgLCBsZXR0ZXJTcGFjaW5nKDApCisgICAgICAgICwgd29yZFNwYWNpbmcoMCkKKyAgICB7Cisg
ICAgfQorCisgICAgV2ViU3RyaW5nIGZhbWlseTsKKyAgICBHZW5lcmljRmFtaWx5IGdlbmVyaWNG
YW1pbHk7CisgICAgZmxvYXQgc2l6ZTsKKyAgICBib29sIGl0YWxpYzsKKyAgICBib29sIHNtYWxs
Q2FwczsKKyAgICBXZWlnaHQgd2VpZ2h0OworICAgIFNtb290aGluZyBzbW9vdGhpbmc7CisKKyAg
ICBzaG9ydCBsZXR0ZXJTcGFjaW5nOworICAgIHNob3J0IHdvcmRTcGFjaW5nOworCisjaWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViRm9udERlc2NyaXB0aW9uKGNvbnN0IFdlYkNvcmU6
OkZvbnREZXNjcmlwdGlvbiYsIHNob3J0IGZvbnRMZXR0ZXJTcGFjaW5nLCBzaG9ydCBmb250V29y
ZFNwYWNpbmcpOworCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uKCkgY29u
c3Q7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGV4dFJ1bi5oIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJUZXh0UnVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDA5ZTcxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
VGV4dFJ1bi5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRleHRSdW5faAorI2RlZmluZSBX
ZWJUZXh0UnVuX2gKKworI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaWZkZWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIFRleHRSdW47IH0KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYlRleHRSdW4geworICAgIFdlYlRl
eHRSdW4oY29uc3QgV2ViU3RyaW5nJiB0LCBib29sIGlzUnRsLCBib29sIGhhc0RpcmVjdGlvbmFs
T3ZlcnJpZGUpCisgICAgICAgIDogdGV4dCh0KQorICAgICAgICAsIHJ0bChpc1JUTCkKKyAgICAg
ICAgLCBkaXJlY3Rpb25hbE92ZXJyaWRlKGhhc0RpcmVjdGlvbmFsT3ZlcnJpZGUpCisgICAgewor
ICAgIH0KKyAgICBXZWJUZXh0UnVuKCkKKyAgICAgICAgOiBydGwoZmFsc2UpCisgICAgICAgICwg
ZGlyZWN0aW9uYWxPdmVycmlkZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgV2ViU3RyaW5n
IHRleHQ7CisgICAgYm9vbCBydGw7CisgICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlOworCisj
aWZkZWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgLy8gVGhlIHJlc3VsdGluZyBXZWJDb3Jl
OjpUZXh0UnVuIHdpbGwgcmVmZXIgdG8gdGhlIHRleHQgaW4gdGhpcworICAgIC8vIHN0cnVjdCwg
c28gInRoaXMiIG11c3Qgb3V0bGl2ZSB0aGUgV2ViQ29yZSB0ZXh0IHJ1bi4KKyAgICBvcGVyYXRv
ciBXZWJDb3JlOjpUZXh0UnVuKCkgY29uc3Q7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0
TWF0Y2hpbmdFbnVtcy5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51
bXMuY3BwCmluZGV4IDFmOTQ2ZjMuLjA5M2FjMTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9B
c3NlcnRNYXRjaGluZ0VudW1zLmNwcApAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlPYmplY3QuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgogI2lu
Y2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgorI2luY2x1ZGUgIkZvbnRTbW9vdGhpbmdNb2RlLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxl
bWVudC5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCkBA
IC01Miw2ICs1NCw3IEBACiAjaW5jbHVkZSAiV2ViQ2xpcGJvYXJkLmgiCiAjaW5jbHVkZSAiV2Vi
Q3Vyc29ySW5mby5oIgogI2luY2x1ZGUgIldlYkVkaXRpbmdBY3Rpb24uaCIKKyNpbmNsdWRlICJX
ZWJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJXZWJJREJLZXkuaCIKICNpbmNsdWRlICJX
ZWJJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJNZWRpYVBsYXllci5oIgpAQCAtMjM1LDYg
KzIzOCwzMSBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkVkaXRpbmdBY3Rpb25U
eXBlZCwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXZWJFZGl0aW5nQWN0aW9uUGFzdGVkLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpOwog
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJFZGl0aW5nQWN0aW9uRHJvcHBlZCwgRWRp
dG9ySW5zZXJ0QWN0aW9uRHJvcHBlZCk7CiAKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5Tm9uZSwgRm9udERlc2NyaXB0aW9uOjpO
b0ZhbWlseSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlv
bjo6R2VuZXJpY0ZhbWlseVN0YW5kYXJkLCBGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5
KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpHZW5l
cmljRmFtaWx5U2VyaWYsIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHkpOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlTYW5z
U2VyaWYsIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5KTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5TW9ub3NwYWNl
LCBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6R2VuZXJpY0ZhbWlseUN1cnNpdmUsIEZvbnRE
ZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYkZvbnREZXNjcmlwdGlvbjo6R2VuZXJpY0ZhbWlseUZhbnRhc3ksIEZvbnREZXNjcmlwdGlv
bjo6RmFudGFzeUZhbWlseSk7CisKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9u
dERlc2NyaXB0aW9uOjpTbW9vdGhpbmdBdXRvLCBBdXRvU21vb3RoaW5nKTsKK0NPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpTbW9vdGhpbmdOb25lLCBOb1Nt
b290aGluZyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlv
bjo6U21vb3RoaW5nR3JheXNjYWxlLCBBbnRpYWxpYXNlZCk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6U21vb3RoaW5nU3VicGl4ZWwsIFN1YnBpeGVs
QW50aWFsaWFzZWQpOworCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNj
cmlwdGlvbjo6V2VpZ2h0MTAwLCBGb250V2VpZ2h0MTAwKTsKK0NPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpXZWlnaHQyMDAsIEZvbnRXZWlnaHQyMDApOwor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OldlaWdodDMw
MCwgRm9udFdlaWdodDMwMCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnRE
ZXNjcmlwdGlvbjo6V2VpZ2h0NDAwLCBGb250V2VpZ2h0NDAwKTsKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpXZWlnaHQ1MDAsIEZvbnRXZWlnaHQ1MDAp
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OldlaWdo
dDYwMCwgRm9udFdlaWdodDYwMCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZv
bnREZXNjcmlwdGlvbjo6V2VpZ2h0NzAwLCBGb250V2VpZ2h0NzAwKTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpXZWlnaHQ4MDAsIEZvbnRXZWlnaHQ4
MDApOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246Oldl
aWdodDkwMCwgRm9udFdlaWdodDkwMCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdl
YkZvbnREZXNjcmlwdGlvbjo6V2VpZ2h0Tm9ybWFsLCBGb250V2VpZ2h0Tm9ybWFsKTsKK0NPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpXZWlnaHRCb2xkLCBG
b250V2VpZ2h0Qm9sZCk7CisKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSW5wdXRF
bGVtZW50OjpUZXh0LCBIVE1MSW5wdXRFbGVtZW50OjpURVhUKTsKIENPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViSW5wdXRFbGVtZW50OjpQYXNzd29yZCwgSFRNTElucHV0RWxlbWVudDo6
UEFTU1dPUkQpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJbnB1dEVsZW1lbnQ6
OklzSW5kZXgsIEhUTUxJbnB1dEVsZW1lbnQ6OklTSU5ERVgpOwpAQCAtMzI2LDMgKzM1NCw1IEBA
IENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJ
blRvcEZyYW1lT25seSwgSW5qZWN0SW5UCiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdl
YklEQktleTo6TnVsbFR5cGUsIElEQktleTo6TnVsbFR5cGUpOwogQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJJREJLZXk6OlN0cmluZ1R5cGUsIElEQktleTo6U3RyaW5nVHlwZSk7CiBD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYklEQktleTo6TnVtYmVyVHlwZSwgSURCS2V5
OjpOdW1iZXJUeXBlKTsKKworCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZv
bnREZXNjcmlwdGlvbi5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvbnREZXNjcmlwdGlv
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThmNjgzMAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udERlc2NyaXB0aW9uLmNwcApA
QCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkZvbnREZXNj
cmlwdGlvbi5oIgorCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViRm9udERlc2NyaXB0aW9u
OjpXZWJGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgZm9udExldHRlclNwYWNpbmcs
IHNob3J0IGZvbnRXb3JkU3BhY2luZykKK3sKKyAgICBmYW1pbHkgPSBkZXNjLmZhbWlseSgpLmZh
bWlseSgpOworICAgIGdlbmVyaWNGYW1pbHkgPSBzdGF0aWNfY2FzdDxHZW5lcmljRmFtaWx5Pihk
ZXNjLmdlbmVyaWNGYW1pbHkoKSk7CisgICAgc2l6ZSA9IGRlc2Muc3BlY2lmaWVkU2l6ZSgpOwor
ICAgIGl0YWxpYyA9IGRlc2MuaXRhbGljKCk7CisgICAgc21hbGxDYXBzID0gZGVzYy5zbWFsbENh
cHMoKTsKKyAgICB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxXZWlnaHQ+KGRlc2Mud2VpZ2h0KCkpOwor
ICAgIHNtb290aGluZyA9IHN0YXRpY19jYXN0PFNtb290aGluZz4oZGVzYy5mb250U21vb3RoaW5n
KCkpOworICAgIGxldHRlclNwYWNpbmcgPSBmb250TGV0dGVyU3BhY2luZzsKKyAgICB3b3JkU3Bh
Y2luZyA9IGZvbnRXb3JkU3BhY2luZzsKK30KKworV2ViRm9udERlc2NyaXB0aW9uOjpvcGVyYXRv
ciBXZWJDb3JlOjpGb250RGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIEZvbnRGYW1pbHkgZm9u
dEZhbWlseTsKKyAgICBmb250RmFtaWx5LnNldEZhbWlseShmYW1pbHkpOworCisgICAgRm9udERl
c2NyaXB0aW9uIGRlc2M7CisgICAgZGVzYy5zZXRGYW1pbHkoZm9udEZhbWlseSk7CisgICAgZGVz
Yy5zZXRHZW5lcmljRmFtaWx5KHN0YXRpY19jYXN0PEZvbnREZXNjcmlwdGlvbjo6R2VuZXJpY0Zh
bWlseVR5cGU+KGdlbmVyaWNGYW1pbHkpKTsKKyAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoc2l6
ZSk7CisgICAgZGVzYy5zZXRDb21wdXRlZFNpemUoc2l6ZSk7CisgICAgZGVzYy5zZXRJdGFsaWMo
aXRhbGljKTsKKyAgICBkZXNjLnNldFNtYWxsQ2FwcyhzbWFsbENhcHMpOworICAgIGRlc2Muc2V0
V2VpZ2h0KHN0YXRpY19jYXN0PEZvbnRXZWlnaHQ+KHdlaWdodCkpOworICAgIGRlc2Muc2V0Rm9u
dFNtb290aGluZyhzdGF0aWNfY2FzdDxGb250U21vb3RoaW5nTW9kZT4oc21vb3RoaW5nKSk7Cisg
ICAgcmV0dXJuIGRlc2M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGb250SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZvbnRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MThk
NzM5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGb250SW1wbC5j
cHAKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRm9u
dEltcGwuaCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRTa2lhLmgiCisjaW5jbHVkZSAiV2ViRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIldlYkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIldlYkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIldlYlJl
Y3QuaCIKKyNpbmNsdWRlICJXZWJUZXh0UnVuLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViRm9udCogV2ViRm9udDo6Q3JlYXRlKGNvbnN0
IFdlYkZvbnREZXNjcmlwdGlvbiYgZGVzYykKK3sKKyAgICByZXR1cm4gbmV3IFdlYkZvbnRJbXBs
KGRlc2MsIGRlc2MubGV0dGVyU3BhY2luZywgZGVzYy53b3JkU3BhY2luZyk7Cit9CisKK1dlYkZv
bnRJbXBsOjpXZWJGb250SW1wbChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2MsIHNob3J0IGxl
dHRlclNwYWNpbmcsIHNob3J0IHdvcmRTcGFjaW5nKQorICAgIDogbV9mb250KGRlc2MsIGxldHRl
clNwYWNpbmcsIHdvcmRTcGFjaW5nKQoreworICAgIG1fZm9udC51cGRhdGUoMCk7Cit9CisKK1dl
YkZvbnREZXNjcmlwdGlvbiBXZWJGb250SW1wbDo6Zm9udERlc2NyaXB0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gV2ViRm9udERlc2NyaXB0aW9uKG1fZm9udC5mb250RGVzY3JpcHRpb24oKSwg
bV9mb250LmxldHRlclNwYWNpbmcoKSwgbV9mb250LndvcmRTcGFjaW5nKCkpOworfQorCitpbnQg
V2ViRm9udEltcGw6OmFzY2VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udC5hc2NlbnQo
KTsKK30KKworaW50IFdlYkZvbnRJbXBsOjpkZXNjZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9mb250LmRlc2NlbnQoKTsKK30KKworaW50IFdlYkZvbnRJbXBsOjpoZWlnaHQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2ZvbnQuaGVpZ2h0KCk7Cit9CisKK2ludCBXZWJGb250SW1wbDo6bGlu
ZVNwYWNpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnQubGluZVNwYWNpbmcoKTsKK30K
KworZmxvYXQgV2ViRm9udEltcGw6OnhIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2Zv
bnQueEhlaWdodCgpOworfQorCit2b2lkIFdlYkZvbnRJbXBsOjpkcmF3VGV4dChXZWJDYW52YXMq
IGNhbnZhcywgY29uc3QgV2ViVGV4dFJ1biYgcnVuLCBjb25zdCBXZWJGbG9hdFBvaW50JiBsZWZ0
QmFzZWxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb2xvciBjb2xvciwgY29u
c3QgV2ViUmVjdCYgY2xpcCwgYm9vbCBjYW52YXNJc09wYXF1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgLy8gRklYTUUgaG9vayBj
YW52YXNJc09wYXF1ZSB1cCB0byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5kaWNhdG9ycyBmb3IK
KyAgICAvLyB3aGV0aGVyIHN1YnBpeGVsIEFBIGNhbiBiZSB1c2VkIGZvciB0aGlzIGRyYXcuIE9u
IFdpbmRvd3MsIHRoaXMgaXMKKyAgICAvLyBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXREcmF3aW5n
VG9JbWFnZUJ1ZmZlci4KKyNpZiBXRUJLSVRfVVNJTkdfQ0cKKyAgICBHcmFwaGljc0NvbnRleHQg
Z2MoY2FudmFzKTsKKyNlbGlmIFdFQktJVF9VU0lOR19TS0lBCisgICAgUGxhdGZvcm1Db250ZXh0
U2tpYSBjb250ZXh0KGNhbnZhcyk7CisgICAgLy8gUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgaXMg
YWN0dWFsbHkgYSBwb2ludGVyIHRvIFBsYXRmb3JtQ29udGV4dFNraWEuCisgICAgR3JhcGhpY3ND
b250ZXh0IGdjKHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPigmY29u
dGV4dCkpOworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCisKKyAgICBnYy5z
ZXRGaWxsQ29sb3IoY29sb3IsIERldmljZUNvbG9yU3BhY2UpOworICAgIGdjLmNsaXAoV2ViQ29y
ZTo6RmxvYXRSZWN0KGNsaXApKTsKKyAgICBtX2ZvbnQuZHJhd1RleHQoJmdjLCBydW4sIGxlZnRC
YXNlbGluZSwgZnJvbSwgdG8pOworfQorCitpbnQgV2ViRm9udEltcGw6OmNhbGN1bGF0ZVdpZHRo
KGNvbnN0IFdlYlRleHRSdW4mIHJ1bikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250LndpZHRo
KHJ1biwgMCk7Cit9CisKK2ludCBXZWJGb250SW1wbDo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3Qg
V2ViVGV4dFJ1biYgcnVuLCBmbG9hdCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9m
b250Lm9mZnNldEZvclBvc2l0aW9uKHJ1biwgcG9zaXRpb24sIHRydWUpOworfQorCitXZWJGbG9h
dFJlY3QgV2ViRm9udEltcGw6OnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFdlYlRleHRSdW4m
IHJ1biwgY29uc3QgV2ViRmxvYXRQb2ludCYgbGVmdEJhc2VsaW5lLCBpbnQgaCwgaW50IGZyb20s
IGludCB0bykgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250LnNlbGVjdGlvblJlY3RGb3JUZXh0
KHJ1biwgbGVmdEJhc2VsaW5lLCBoLCBmcm9tLCB0byk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGb250SW1wbC5oIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGb250SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjdiOWMzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZvbnRJbXBsLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRm9udEltcGxfaAorI2Rl
ZmluZSBXZWJGb250SW1wbF9oCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiV2ViRm9u
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEZvbnREZXNjcmlwdGlvbjsgfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRm9udEltcGwgOiBwdWJsaWMgV2ViRm9udCB7
CitwdWJsaWM6CisgICAgV2ViRm9udEltcGwoY29uc3QgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9u
Jiwgc2hvcnQgbGV0dGVyU3BhY2luZywgc2hvcnQgd29yZFNwYWNpbmcpOworCisgICAgdmlydHVh
bCBXZWJGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIGludCBhc2NlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBkZXNjZW50KCkgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbGluZVNw
YWNpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHhIZWlnaHQoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdm9pZCBkcmF3VGV4dChXZWJDYW52YXMqLCBjb25zdCBXZWJUZXh0UnVuJiwgY29u
c3QgV2ViRmxvYXRQb2ludCYgbGVmdEJhc2VsaW5lLCBXZWJDb2xvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViUmVjdCYgY2xpcCwgYm9vbCBjYW52YXNJc09wYXF1ZSwgaW50
IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2FsY3VsYXRl
V2lkdGgoY29uc3QgV2ViVGV4dFJ1biYpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IG9mZnNldEZv
clBvc2l0aW9uKGNvbnN0IFdlYlRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbikgY29uc3Q7CisgICAg
dmlydHVhbCBXZWJGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgV2ViVGV4dFJ1
biYsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGxlZnRCYXNlbGluZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaCwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6Rm9udCBtX2ZvbnQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlRleHRSdW4uY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUZXh0UnVu
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGQ5ZmFjCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUZXh0UnVuLmNwcApAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlRleHRSdW4uaCIKKworI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXZWJUZXh0UnVuOjpvcGVyYXRvciBXZWJDb3JlOjpUZXh0UnVuKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gVGV4dFJ1bih0ZXh0LCBmYWxzZSwgMCwgMCwgcnRsLCBkaXJlY3Rp
b25hbE92ZXJyaWRlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="50977"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="50980"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62744</attachid>
            <date>2010-07-27 14:11:12 -0700</date>
            <delta_ts>2010-07-27 14:11:12 -0700</delta_ts>
            <desc>Final patch for reference</desc>
            <filename>webkit_font.diff</filename>
            <type>text/plain</type>
            <size>36605</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDFiNTk2NmQuLmY1ODQ3MDkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDUyIEBACisyMDEwLTA3LTI3ICBCcmV0dCBXaWxzb24gIDxicmV0dHdAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KKworICAgICAgICBBZGQgdGhlIGFi
aWxpdHkgdG8gc2VsZWN0IGZvbnRzIGFuZCBkbyBiYXNpYyB0ZXh0IGRyYXdpbmcgdG8gdGhlCisg
ICAgICAgIENocm9taXVtIFdlYktpdCBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00Mjk5OQorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViRmxvYXRQb2ludC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
RmxvYXRQb2ludDo6V2ViRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UG9p
bnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UG9pbnQ6Om9wZXJhdG9y
IFdlYkNvcmU6OkZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcHVibGljL1dlYkZsb2F0UmVj
dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRSZWN0Ojppc0VtcHR5KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRmxvYXRSZWN0OjpXZWJGbG9hdFJlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGbG9hdFJlY3Q6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0
UmVjdDo6b3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHB1Ymxp
Yy9XZWJGb250Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJGb250RGVzY3JpcHRpb24u
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkZvbnREZXNjcmlwdGlvbjo6KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRm9udERlc2NyaXB0aW9uOjpXZWJGb250RGVzY3JpcHRpb24pOgorICAg
ICAgICAqIHB1YmxpYy9XZWJUZXh0UnVuLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJU
ZXh0UnVuOjpXZWJUZXh0UnVuKToKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5j
cHA6CisgICAgICAgICogc3JjL1dlYkZvbnREZXNjcmlwdGlvbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJGb250RGVzY3JpcHRpb246OldlYkZvbnREZXNjcmlwdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZvbnREZXNjcmlwdGlvbjo6b3BlcmF0b3IgV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uKToKKyAgICAgICAgKiBzcmMvV2ViRm9udEltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViRm9udDo6Q3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udElt
cGw6OldlYkZvbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udEltcGw6OmZvbnREZXNj
cmlwdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjphc2NlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGb250SW1wbDo6ZGVzY2VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZv
bnRJbXBsOjpoZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb250SW1wbDo6bGluZVNwYWNp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGb250SW1wbDo6eEhlaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZvbnRJbXBsOjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJ
bXBsOjp3aWR0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjpvZmZzZXRGb3JQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBsOjpzZWxlY3Rpb25SZWN0Rm9yVGV4
dCk6CisgICAgICAgICogc3JjL1dlYkZvbnRJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9X
ZWJUZXh0UnVuLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlRleHRSdW46Om9wZXJh
dG9yIFdlYkNvcmU6OlRleHRSdW4pOgorCiAyMDEwLTA3LTI3ICBQYXZlbCBQb2Rpdmlsb3YgIDxw
b2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRt
YW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IDc5NWFiYmIuLjk3ZWZkZGMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBA
IC0xNTYsNiArMTU2LDEwIEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGaWxlSW5mby5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZpbGVTeXN0ZW0uaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJGaW5kT3B0aW9ucy5oJywKKyAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkZsb2F0UG9pbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGbG9hdFJlY3Qu
aCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGb250LmgnLAorICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViRm9udERlc2NyaXB0aW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViRnJhbWUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvbnRDYWNoZS5oJywKQEAgLTI0Nyw2ICsyNTEs
NyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVGV4dENhc2VTZW5zaXRpdml0eS5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYlRleHREaXJlY3Rpb24uaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJUZXh0SW5wdXRUeXBlLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViVGV4dFJ1bi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlRoZW1lRW5naW5l
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViVVJMLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViVVJMRXJyb3IuaCcsCkBAIC0zOTEsNiArMzk2LDkgQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGwuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGwuaCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJGb250Q2FjaGUuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRE
ZXNjcmlwdGlvbi5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRm9udEltcGwuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViRm9ybUNvbnRyb2xFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJG
b3JtRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRnJhbWVJbXBsLmNwcCcs
CkBAIC00NzIsNiArNDgwLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VOYW1l
c3BhY2VJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlTmFtZXNwYWNl
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0cmluZy5jcHAnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViVGV4dFJ1bi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVVJM
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2FkVGltaW5nLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJVUkxSZXF1ZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9pbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRmxvYXRQb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTNl
ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9p
bnQuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdFBvaW50X2gKKyNkZWZpbmUgV2Vi
RmxvYXRQb2ludF9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3N0cnVjdCBXZWJGbG9hdFBvaW50IHsKKyAgICBmbG9hdCB4OworICAgIGZsb2F0
IHk7CisKKyAgICBXZWJGbG9hdFBvaW50KCkKKyAgICAgICAgOiB4KDAuMGYpCisgICAgICAgICwg
eSgwLjBmKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0
IHkpCisgICAgICAgIDogeCh4KQorICAgICAgICAsIHkoeSkKKyAgICB7CisgICAgfQorCisjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViRmxvYXRQb2ludChjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwKQorICAgICAgICA6IHgocC54KCkpCisgICAgICAgICwgeShwLnkoKSkKKyAg
ICB7CisgICAgfQorCisgICAgV2ViRmxvYXRQb2ludCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHApCisgICAgeworICAgICAgICB4ID0gcC54KCk7CisgICAgICAgIHkgPSBw
LnkoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIFdlYkNv
cmU6OkZsb2F0UG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZs
b2F0UG9pbnQoeCwgeSk7CisgICAgfQorI2VuZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFdlYkZsb2F0UG9pbnQmIGEsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGIpCit7Cisg
ICAgcmV0dXJuIGEueCA9PSBiLnggJiYgYS55ID09IGIueTsKK30KKworaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBXZWJGbG9hdFBvaW50JiBhLCBjb25zdCBXZWJGbG9hdFBvaW50JiBiKQor
eworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRSZWN0Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmE4ODM1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJG
bG9hdFJlY3RfaAorI2RlZmluZSBXZWJGbG9hdFJlY3RfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9u
LmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYkZsb2F0UmVjdCB7Cisg
ICAgZmxvYXQgeDsKKyAgICBmbG9hdCB5OworICAgIGZsb2F0IHdpZHRoOworICAgIGZsb2F0IGhl
aWdodDsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoIDw9IDAgfHwg
aGVpZ2h0IDw9IDA7IH0KKworICAgIFdlYkZsb2F0UmVjdCgpCisgICAgICAgIDogeCgwLjBmKQor
ICAgICAgICAsIHkoMC4wZikKKyAgICAgICAgLCB3aWR0aCgwLjBmKQorICAgICAgICAsIGhlaWdo
dCgwLjBmKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJGbG9hdFJlY3QoZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKKyAgICAgICAgOiB4KHgpCisgICAgICAgICwg
eSh5KQorICAgICAgICAsIHdpZHRoKHdpZHRoKQorICAgICAgICAsIGhlaWdodChoZWlnaHQpCisg
ICAgeworICAgIH0KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkZsb2F0UmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHIpCisgICAgICAgIDogeChyLngoKSkKKyAgICAg
ICAgLCB5KHIueSgpKQorICAgICAgICAsIHdpZHRoKHIud2lkdGgoKSkKKyAgICAgICAgLCBoZWln
aHQoci5oZWlnaHQoKSkKKyAgICB7CisgICAgfQorCisgICAgV2ViRmxvYXRSZWN0JiBvcGVyYXRv
cj0oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByKQorICAgIHsKKyAgICAgICAgeCA9IHIueCgp
OworICAgICAgICB5ID0gci55KCk7CisgICAgICAgIHdpZHRoID0gci53aWR0aCgpOworICAgICAg
ICBoZWlnaHQgPSByLmhlaWdodCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgb3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorI2Vu
ZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkZsb2F0UmVjdCYgYSwg
Y29uc3QgV2ViRmxvYXRSZWN0JiBiKQoreworICAgIHJldHVybiBhLnggPT0gYi54ICYmIGEueSA9
PSBiLnkgJiYgYS53aWR0aCA9PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09IGIuaGVpZ2h0OworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYkZsb2F0UmVjdCYgYSwgY29uc3QgV2Vi
RmxvYXRSZWN0JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRm9udC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGb250LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViN2RlMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViRm9udC5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJG
b250X2gKKyNkZWZpbmUgV2ViRm9udF9oCisKKyNpbmNsdWRlICJXZWJDYW52YXMuaCIKKyNpbmNs
dWRlICJXZWJDb2xvci5oIgorI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViRm9udERlc2NyaXB0aW9uOworY2xhc3MgV2ViRmxvYXRQb2ludDsK
K2NsYXNzIFdlYkZsb2F0UmVjdDsKK2NsYXNzIFdlYlBvaW50OworY2xhc3MgV2ViUmVjdDsKK3N0
cnVjdCBXZWJUZXh0UnVuOworCitjbGFzcyBXZWJGb250IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5XZWJGb250KCkgeyB9CisKKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJGb250KiBjcmVhdGUo
Y29uc3QgV2ViRm9udERlc2NyaXB0aW9uJik7CisKKyAgICB2aXJ0dWFsIFdlYkZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb24oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBhc2Nl
bnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZGVzY2VudCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgbGluZVNw
YWNpbmcoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9hdCB4SGVpZ2h0KCkgY29uc3QgPSAw
OworCisgICAgLy8gRHJhd3MgdGhlIHRleHQgcnVuIHRvIHRoZSBnaXZlbiBjYW52YXMuIFRoZSB0
ZXh0IGlzIHBvc2l0aW9uZWQgYXQgdGhlCisgICAgLy8gZ2l2ZW4gbGVmdC1oYW5kIHBvaW50IGF0
IHRoZSBiYXNlbGluZS4KKyAgICAvLworICAgIC8vIFRoZSB0ZXh0IHdpbGwgYmUgY2xpcHBlZCB0
byB0aGUgZ2l2ZW4gY2xpcCByZWN0LiB8Y2FudmFzSXNPcGFxdWV8IGlzCisgICAgLy8gdXNlZCB0
byBjb250cm9sIHdoZXRoZXIgc3VicGl4ZWwgYW50aWFsaWFzaW5nIGlzIHBvc3NpYmxlLiBJZiB0
aGVyZSBpcyBhCisgICAgLy8gcG9zc2liaWxpdHkgdGhlIGFyZWEgZHJhd24gY291bGQgYmUgc2Vt
aS10cmFuc3BhcmVudCwgc3VicGl4ZWwKKyAgICAvLyBhbnRpYWxpYXNpbmcgd2lsbCBiZSBkaXNh
YmxlZC4KKyAgICAvLworICAgIC8vIHxmcm9tfCBhbmQgfHRvfCBhbGxvdyB0aGUgY2FsbGVyIHRv
IHNwZWNpZnkgYSBzdWJyYW5nZSBvZiB0aGUgZ2l2ZW4gdGV4dAorICAgIC8vIHJ1biB0byBkcmF3
LiBJZiB8dG98IGlzIC0xLCB0aGUgZW50aXJlIHJ1biB3aWxsIGJlIGRyYXduLgorICAgIHZpcnR1
YWwgdm9pZCBkcmF3VGV4dChXZWJDYW52YXMqLCBjb25zdCBXZWJUZXh0UnVuJiwgY29uc3QgV2Vi
RmxvYXRQb2ludCYgbGVmdEJhc2VsaW5lLCBXZWJDb2xvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV2ViUmVjdCYgY2xpcCwgYm9vbCBjYW52YXNJc09wYXF1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3QgPSAwOwor
CisgICAgLy8gTWVhc3VyZXMgdGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgZ2l2ZW4gdGV4dCBy
dW4uCisgICAgdmlydHVhbCBpbnQgY2FsY3VsYXRlV2lkdGgoY29uc3QgV2ViVGV4dFJ1biYpIGNv
bnN0ID0gMDsKKworICAgIC8vIFJldHVybnMgdGhlIGNoYXJhY3RlciBvZmZzZXQgY29ycmVzcG9u
ZGluZyB0byB0aGUgZ2l2ZW4gaG9yaXpvbnRhbCBwaXhlbAorICAgIC8vIHBvc2l0aW9uIGFzIG1l
YXN1cmVkIGZyb20gZnJvbSB0aGUgbGVmdCBvZiB0aGUgcnVuLgorICAgIHZpcnR1YWwgaW50IG9m
ZnNldEZvclBvc2l0aW9uKGNvbnN0IFdlYlRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbikgY29uc3Qg
PSAwOworCisgICAgLy8gUmV0dXJucyB0aGUgcmVjdGFuZ2xlIHJlcHJlc2VudGluZyB0aGUgc2Vs
ZWN0aW9uIHJlY3QgZm9yIHRoZSBzdWJyYW5nZQorICAgIC8vIHxmcm9tfCAtPiB8dG98IG9mIHRo
ZSBnaXZlbiB0ZXh0IHJ1bi4gWW91IGNhbiB1c2UgLTEgZm9yIHx0b3wgdG8gc3BlY2lmeQorICAg
IC8vIHRoZSBlbnRpcmUgcnVuICh0aGlzIHdpbGwgZG8gc29tZXRoaW5nIHNpbWlsYXIgdG8gY2Fs
bGluZyB3aWR0aCgpKS4KKyAgICAvLworICAgIC8vIFRoZSByZWN0IHdpbGwgYmUgcG9zaXRpb25l
ZCBhcyBpZiB0aGUgdGV4dCB3YXMgZHJhd24gYXQgdGhlIGdpdmVuCisgICAgLy8gfGxlZnRCYXNl
bGluZXwgcG9zaXRpb24uIHxoZWlnaHR8IGluZGljYXRlcyB0aGUgaGVpZ2h0IG9mIHRoZSBzZWxl
Y3Rpb24KKyAgICAvLyByZWN0IHlvdSB3YW50LCB0eXBpY2FsbHkgdGhpcyB3aWxsIGp1c3QgYmUg
dGhlIGhlaWdodCgpIG9mIHRoaXMgZm9udC4KKyAgICAvLworICAgIC8vIFRvIGdldCB0aGUgcGl4
ZWwgb2Zmc2V0IG9mIHNvbWUgY2hhcmFjdGVyICh0aGUgb3Bwb3NpdGUgb2YKKyAgICAvLyBvZmZz
ZXRGb3JQb3NpdGlvbigpKSwgcGFzcyBpbiBhIHxsZWZ0QmFzZWxpbmV8ID0gKDAsIDApLCB8ZnJv
bXwgPSAwLCBhbmQKKyAgICAvLyB8dG98ID0gdGhlIGNoYXJhY3RlciB5b3Ugd2FudC4gVGhlIHJp
Z2h0IGVkZ2Ugb2YgdGhlIHJlc3VsdGluZyBzZWxlY3Rpb24KKyAgICAvLyByZWN0IHdpbGwgdGVs
bCB5b3UgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNoYXJhY3Rlci4KKyAgICB2aXJ0dWFsIFdlYkZs
b2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBXZWJUZXh0UnVuJiwgY29uc3QgV2Vi
RmxvYXRQb2ludCYgbGVmdEJhc2VsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNv
bnN0ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRm9udERlc2NyaXB0aW9uLmggYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkZvbnREZXNjcmlwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmQ0YmIwN2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkZvbnREZXNjcmlwdGlvbi5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJGb250RGVzY3JpcHRpb25faAorI2RlZmluZSBXZWJGb250RGVzY3JpcHRpb25faAorCisjaW5j
bHVkZSAiV2ViU3RyaW5nLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFj
ZSBXZWJDb3JlIHsgY2xhc3MgRm9udERlc2NyaXB0aW9uOyB9CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3N0cnVjdCBXZWJGb250RGVzY3JpcHRpb24geworICAgIGVudW0gR2VuZXJp
Y0ZhbWlseSB7CisgICAgICAgIEdlbmVyaWNGYW1pbHlOb25lLAorICAgICAgICBHZW5lcmljRmFt
aWx5U3RhbmRhcmQsCisgICAgICAgIEdlbmVyaWNGYW1pbHlTZXJpZiwKKyAgICAgICAgR2VuZXJp
Y0ZhbWlseVNhbnNTZXJpZiwKKyAgICAgICAgR2VuZXJpY0ZhbWlseU1vbm9zcGFjZSwKKyAgICAg
ICAgR2VuZXJpY0ZhbWlseUN1cnNpdmUsCisgICAgICAgIEdlbmVyaWNGYW1pbHlGYW50YXN5Cisg
ICAgfTsKKworICAgIGVudW0gU21vb3RoaW5nIHsKKyAgICAgICAgU21vb3RoaW5nQXV0bywKKyAg
ICAgICAgU21vb3RoaW5nTm9uZSwKKyAgICAgICAgU21vb3RoaW5nR3JheXNjYWxlLAorICAgICAg
ICBTbW9vdGhpbmdTdWJwaXhlbAorICAgIH07CisKKyAgICBlbnVtIFdlaWdodCB7IAorICAgICAg
ICBXZWlnaHQxMDAsCisgICAgICAgIFdlaWdodDIwMCwKKyAgICAgICAgV2VpZ2h0MzAwLAorICAg
ICAgICBXZWlnaHQ0MDAsCisgICAgICAgIFdlaWdodDUwMCwKKyAgICAgICAgV2VpZ2h0NjAwLAor
ICAgICAgICBXZWlnaHQ3MDAsCisgICAgICAgIFdlaWdodDgwMCwKKyAgICAgICAgV2VpZ2h0OTAw
LAorICAgICAgICBXZWlnaHROb3JtYWwgPSBXZWlnaHQ0MDAsCisgICAgICAgIFdlaWdodEJvbGQg
PSBXZWlnaHQ3MDAKKyAgICB9OworCisgICAgV2ViRm9udERlc2NyaXB0aW9uKCkKKyAgICAgICAg
OiBnZW5lcmljRmFtaWx5KEdlbmVyaWNGYW1pbHlOb25lKQorICAgICAgICAsIHNpemUoMCkKKyAg
ICAgICAgLCBpdGFsaWMoZmFsc2UpCisgICAgICAgICwgc21hbGxDYXBzKGZhbHNlKQorICAgICAg
ICAsIHdlaWdodChXZWlnaHROb3JtYWwpCisgICAgICAgICwgc21vb3RoaW5nKFNtb290aGluZ0F1
dG8pCisgICAgICAgICwgbGV0dGVyU3BhY2luZygwKQorICAgICAgICAsIHdvcmRTcGFjaW5nKDAp
CisgICAgeworICAgIH0KKworICAgIFdlYlN0cmluZyBmYW1pbHk7CisgICAgR2VuZXJpY0ZhbWls
eSBnZW5lcmljRmFtaWx5OworICAgIGZsb2F0IHNpemU7CisgICAgYm9vbCBpdGFsaWM7CisgICAg
Ym9vbCBzbWFsbENhcHM7CisgICAgV2VpZ2h0IHdlaWdodDsKKyAgICBTbW9vdGhpbmcgc21vb3Ro
aW5nOworCisgICAgc2hvcnQgbGV0dGVyU3BhY2luZzsKKyAgICBzaG9ydCB3b3JkU3BhY2luZzsK
KworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkZvbnREZXNjcmlwdGlvbihjb25z
dCBXZWJDb3JlOjpGb250RGVzY3JpcHRpb24mLCBzaG9ydCBmb250TGV0dGVyU3BhY2luZywgc2hv
cnQgZm9udFdvcmRTcGFjaW5nKTsKKworICAgIG9wZXJhdG9yIFdlYkNvcmU6OkZvbnREZXNjcmlw
dGlvbigpIGNvbnN0OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlRleHRSdW4uaCBiL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGV4dFJ1bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmNiMTM3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlRleHRSdW4uaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUZXh0UnVuX2gK
KyNkZWZpbmUgV2ViVGV4dFJ1bl9oCisKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKworI2lmZGVm
IFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBUZXh0UnVu
OyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJUZXh0UnVuIHsK
KyAgICBXZWJUZXh0UnVuKGNvbnN0IFdlYlN0cmluZyYgdCwgYm9vbCBpc1JUTCwgYm9vbCBoYXNE
aXJlY3Rpb25hbE92ZXJyaWRlKQorICAgICAgICA6IHRleHQodCkKKyAgICAgICAgLCBydGwoaXNS
VEwpCisgICAgICAgICwgZGlyZWN0aW9uYWxPdmVycmlkZShoYXNEaXJlY3Rpb25hbE92ZXJyaWRl
KQorICAgIHsKKyAgICB9CisgICAgV2ViVGV4dFJ1bigpCisgICAgICAgIDogcnRsKGZhbHNlKQor
ICAgICAgICAsIGRpcmVjdGlvbmFsT3ZlcnJpZGUoZmFsc2UpCisgICAgeworICAgIH0KKworICAg
IFdlYlN0cmluZyB0ZXh0OworICAgIGJvb2wgcnRsOworICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVy
cmlkZTsKKworI2lmZGVmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIC8vIFRoZSByZXN1bHRp
bmcgV2ViQ29yZTo6VGV4dFJ1biB3aWxsIHJlZmVyIHRvIHRoZSB0ZXh0IGluIHRoaXMKKyAgICAv
LyBzdHJ1Y3QsIHNvICJ0aGlzIiBtdXN0IG91dGxpdmUgdGhlIFdlYkNvcmUgdGV4dCBydW4uCisg
ICAgb3BlcmF0b3IgV2ViQ29yZTo6VGV4dFJ1bigpIGNvbnN0OworI2VuZGlmCit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRN
YXRjaGluZ0VudW1zLmNwcAppbmRleCAxZjk0NmYzLi4wOTNhYzExIDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhv
c3QuaCIKICNpbmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKKyNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250U21vb3RoaW5nTW9kZS5oIgogI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJNZWRpYVBs
YXllci5oIgpAQCAtNTIsNiArNTQsNyBAQAogI2luY2x1ZGUgIldlYkNsaXBib2FyZC5oIgogI2lu
Y2x1ZGUgIldlYkN1cnNvckluZm8uaCIKICNpbmNsdWRlICJXZWJFZGl0aW5nQWN0aW9uLmgiCisj
aW5jbHVkZSAiV2ViRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiV2ViSURCS2V5LmgiCiAj
aW5jbHVkZSAiV2ViSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXIuaCIK
QEAgLTIzNSw2ICsyMzgsMzEgQEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJFZGl0
aW5nQWN0aW9uVHlwZWQsIEVkaXRvckluc2VydEFjdGlvblR5cGVkKTsKIENPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViRWRpdGluZ0FjdGlvblBhc3RlZCwgRWRpdG9ySW5zZXJ0QWN0aW9u
UGFzdGVkKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRWRpdGluZ0FjdGlvbkRy
b3BwZWQsIEVkaXRvckluc2VydEFjdGlvbkRyb3BwZWQpOwogCitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6R2VuZXJpY0ZhbWlseU5vbmUsIEZvbnREZXNj
cmlwdGlvbjo6Tm9GYW1pbHkpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250
RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlTdGFuZGFyZCwgRm9udERlc2NyaXB0aW9uOjpTdGFu
ZGFyZEZhbWlseSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlw
dGlvbjo6R2VuZXJpY0ZhbWlseVNlcmlmLCBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5KTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9uOjpHZW5lcmlj
RmFtaWx5U2Fuc1NlcmlmLCBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseSk7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6R2VuZXJpY0ZhbWls
eU1vbm9zcGFjZSwgRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlDdXJz
aXZlLCBGb250RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHkpOworQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlGYW50YXN5LCBGb250
RGVzY3JpcHRpb246OkZhbnRhc3lGYW1pbHkpOworCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6U21vb3RoaW5nQXV0bywgQXV0b1Ntb290aGluZyk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6U21vb3RoaW5n
Tm9uZSwgTm9TbW9vdGhpbmcpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250
RGVzY3JpcHRpb246OlNtb290aGluZ0dyYXlzY2FsZSwgQW50aWFsaWFzZWQpOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OlNtb290aGluZ1N1YnBpeGVs
LCBTdWJwaXhlbEFudGlhbGlhc2VkKTsKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJGb250RGVzY3JpcHRpb246OldlaWdodDEwMCwgRm9udFdlaWdodDEwMCk7CitDT01QSUxFX0FT
U0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6V2VpZ2h0MjAwLCBGb250V2Vp
Z2h0MjAwKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0aW9u
OjpXZWlnaHQzMDAsIEZvbnRXZWlnaHQzMDApOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJGb250RGVzY3JpcHRpb246OldlaWdodDQwMCwgRm9udFdlaWdodDQwMCk7CitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6V2VpZ2h0NTAwLCBGb250
V2VpZ2h0NTAwKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2NyaXB0
aW9uOjpXZWlnaHQ2MDAsIEZvbnRXZWlnaHQ2MDApOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXZWJGb250RGVzY3JpcHRpb246OldlaWdodDcwMCwgRm9udFdlaWdodDcwMCk7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6V2VpZ2h0ODAwLCBG
b250V2VpZ2h0ODAwKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRm9udERlc2Ny
aXB0aW9uOjpXZWlnaHQ5MDAsIEZvbnRXZWlnaHQ5MDApOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXZWJGb250RGVzY3JpcHRpb246OldlaWdodE5vcm1hbCwgRm9udFdlaWdodE5vcm1h
bCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZvbnREZXNjcmlwdGlvbjo6V2Vp
Z2h0Qm9sZCwgRm9udFdlaWdodEJvbGQpOworCiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYklucHV0RWxlbWVudDo6VGV4dCwgSFRNTElucHV0RWxlbWVudDo6VEVYVCk7CiBDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYklucHV0RWxlbWVudDo6UGFzc3dvcmQsIEhUTUxJbnB1
dEVsZW1lbnQ6OlBBU1NXT1JEKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSW5w
dXRFbGVtZW50OjpJc0luZGV4LCBIVE1MSW5wdXRFbGVtZW50OjpJU0lOREVYKTsKQEAgLTMyNiwz
ICszNTQsNSBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlZpZXc6OlVzZXJDb250
ZW50SW5qZWN0SW5Ub3BGcmFtZU9ubHksIEluamVjdEluVAogQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXZWJJREJLZXk6Ok51bGxUeXBlLCBJREJLZXk6Ok51bGxUeXBlKTsKIENPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViSURCS2V5OjpTdHJpbmdUeXBlLCBJREJLZXk6OlN0cmlu
Z1R5cGUpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJREJLZXk6Ok51bWJlclR5
cGUsIElEQktleTo6TnVtYmVyVHlwZSk7CisKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGb250RGVzY3JpcHRpb24uY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGb250
RGVzY3JpcHRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZjY4
MzAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvbnREZXNjcmlw
dGlvbi5jcHAKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJGb250RGVzY3JpcHRpb24uaCIKKworI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkZvbnRE
ZXNjcmlwdGlvbjo6V2ViRm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGZvbnRMZXR0
ZXJTcGFjaW5nLCBzaG9ydCBmb250V29yZFNwYWNpbmcpCit7CisgICAgZmFtaWx5ID0gZGVzYy5m
YW1pbHkoKS5mYW1pbHkoKTsKKyAgICBnZW5lcmljRmFtaWx5ID0gc3RhdGljX2Nhc3Q8R2VuZXJp
Y0ZhbWlseT4oZGVzYy5nZW5lcmljRmFtaWx5KCkpOworICAgIHNpemUgPSBkZXNjLnNwZWNpZmll
ZFNpemUoKTsKKyAgICBpdGFsaWMgPSBkZXNjLml0YWxpYygpOworICAgIHNtYWxsQ2FwcyA9IGRl
c2Muc21hbGxDYXBzKCk7CisgICAgd2VpZ2h0ID0gc3RhdGljX2Nhc3Q8V2VpZ2h0PihkZXNjLndl
aWdodCgpKTsKKyAgICBzbW9vdGhpbmcgPSBzdGF0aWNfY2FzdDxTbW9vdGhpbmc+KGRlc2MuZm9u
dFNtb290aGluZygpKTsKKyAgICBsZXR0ZXJTcGFjaW5nID0gZm9udExldHRlclNwYWNpbmc7Cisg
ICAgd29yZFNwYWNpbmcgPSBmb250V29yZFNwYWNpbmc7Cit9CisKK1dlYkZvbnREZXNjcmlwdGlv
bjo6b3BlcmF0b3IgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBGb250
RmFtaWx5IGZvbnRGYW1pbHk7CisgICAgZm9udEZhbWlseS5zZXRGYW1pbHkoZmFtaWx5KTsKKwor
ICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjOworICAgIGRlc2Muc2V0RmFtaWx5KGZvbnRGYW1pbHkp
OworICAgIGRlc2Muc2V0R2VuZXJpY0ZhbWlseShzdGF0aWNfY2FzdDxGb250RGVzY3JpcHRpb246
OkdlbmVyaWNGYW1pbHlUeXBlPihnZW5lcmljRmFtaWx5KSk7CisgICAgZGVzYy5zZXRTcGVjaWZp
ZWRTaXplKHNpemUpOworICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKHNpemUpOworICAgIGRlc2Mu
c2V0SXRhbGljKGl0YWxpYyk7CisgICAgZGVzYy5zZXRTbWFsbENhcHMoc21hbGxDYXBzKTsKKyAg
ICBkZXNjLnNldFdlaWdodChzdGF0aWNfY2FzdDxGb250V2VpZ2h0Pih3ZWlnaHQpKTsKKyAgICBk
ZXNjLnNldEZvbnRTbW9vdGhpbmcoc3RhdGljX2Nhc3Q8Rm9udFNtb290aGluZ01vZGU+KHNtb290
aGluZykpOworICAgIHJldHVybiBkZXNjOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udEltcGwuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGb250SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNmZhNTQ5NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Rm9udEltcGwuY3BwCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkZvbnRJbXBsLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIldlYkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRl
ICJXZWJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXZWJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNs
dWRlICJXZWJSZWN0LmgiCisjaW5jbHVkZSAiV2ViVGV4dFJ1bi5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkZvbnQqIFdlYkZvbnQ6OmNy
ZWF0ZShjb25zdCBXZWJGb250RGVzY3JpcHRpb24mIGRlc2MpCit7CisgICAgcmV0dXJuIG5ldyBX
ZWJGb250SW1wbChkZXNjLCBkZXNjLmxldHRlclNwYWNpbmcsIGRlc2Mud29yZFNwYWNpbmcpOwor
fQorCitXZWJGb250SW1wbDo6V2ViRm9udEltcGwoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
LCBzaG9ydCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3b3JkU3BhY2luZykKKyAgICA6IG1fZm9udChk
ZXNjLCBsZXR0ZXJTcGFjaW5nLCB3b3JkU3BhY2luZykKK3sKKyAgICBtX2ZvbnQudXBkYXRlKDAp
OworfQorCitXZWJGb250RGVzY3JpcHRpb24gV2ViRm9udEltcGw6OmZvbnREZXNjcmlwdGlvbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkZvbnREZXNjcmlwdGlvbihtX2ZvbnQuZm9udERlc2Ny
aXB0aW9uKCksIG1fZm9udC5sZXR0ZXJTcGFjaW5nKCksIG1fZm9udC53b3JkU3BhY2luZygpKTsK
K30KKworaW50IFdlYkZvbnRJbXBsOjphc2NlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2Zv
bnQuYXNjZW50KCk7Cit9CisKK2ludCBXZWJGb250SW1wbDo6ZGVzY2VudCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZm9udC5kZXNjZW50KCk7Cit9CisKK2ludCBXZWJGb250SW1wbDo6aGVpZ2h0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250LmhlaWdodCgpOworfQorCitpbnQgV2ViRm9u
dEltcGw6OmxpbmVTcGFjaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250LmxpbmVTcGFj
aW5nKCk7Cit9CisKK2Zsb2F0IFdlYkZvbnRJbXBsOjp4SGVpZ2h0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9mb250LnhIZWlnaHQoKTsKK30KKwordm9pZCBXZWJGb250SW1wbDo6ZHJhd1RleHQo
V2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlRleHRSdW4mIHJ1biwgY29uc3QgV2ViRmxvYXRQ
b2ludCYgbGVmdEJhc2VsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29sb3Ig
Y29sb3IsIGNvbnN0IFdlYlJlY3QmIGNsaXAsIGJvb2wgY2FudmFzSXNPcGFxdWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIC8vIEZJ
WE1FIGhvb2sgY2FudmFzSXNPcGFxdWUgdXAgdG8gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluZGlj
YXRvcnMgZm9yCisgICAgLy8gd2hldGhlciBzdWJwaXhlbCBBQSBjYW4gYmUgdXNlZCBmb3IgdGhp
cyBkcmF3LiBPbiBXaW5kb3dzLCB0aGlzIGlzCisgICAgLy8gUGxhdGZvcm1Db250ZXh0U2tpYTo6
c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIuCisjaWYgV0VCS0lUX1VTSU5HX0NHCisgICAgR3JhcGhp
Y3NDb250ZXh0IGdjKGNhbnZhcyk7CisjZWxpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIFBsYXRm
b3JtQ29udGV4dFNraWEgY29udGV4dChjYW52YXMpOworICAgIC8vIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0IGlzIGFjdHVhbGx5IGEgcG9pbnRlciB0byBQbGF0Zm9ybUNvbnRleHRTa2lhLgorICAg
IEdyYXBoaWNzQ29udGV4dCBnYyhyZWludGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0Kj4oJmNvbnRleHQpKTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbmRpZgor
CisgICAgZ2Muc2V0RmlsbENvbG9yKGNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICBnYy5j
bGlwKFdlYkNvcmU6OkZsb2F0UmVjdChjbGlwKSk7CisgICAgbV9mb250LmRyYXdUZXh0KCZnYywg
cnVuLCBsZWZ0QmFzZWxpbmUsIGZyb20sIHRvKTsKK30KKworaW50IFdlYkZvbnRJbXBsOjpjYWxj
dWxhdGVXaWR0aChjb25zdCBXZWJUZXh0UnVuJiBydW4pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Zm9udC53aWR0aChydW4sIDApOworfQorCitpbnQgV2ViRm9udEltcGw6Om9mZnNldEZvclBvc2l0
aW9uKGNvbnN0IFdlYlRleHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRpb24pIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZm9udC5vZmZzZXRGb3JQb3NpdGlvbihydW4sIHBvc2l0aW9uLCB0cnVlKTsKK30K
KworV2ViRmxvYXRSZWN0IFdlYkZvbnRJbXBsOjpzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBX
ZWJUZXh0UnVuJiBydW4sIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGxlZnRCYXNlbGluZSwgaW50IGhl
aWdodCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250LnNlbGVj
dGlvblJlY3RGb3JUZXh0KHJ1biwgbGVmdEJhc2VsaW5lLCBoZWlnaHQsIGZyb20sIHRvKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZvbnRJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvbnRJbXBsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FjOTAzMQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udEltcGwuaApAQCAtMCwwICsxLDY2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJGb250SW1wbF9oCisjZGVmaW5lIFdlYkZvbnRJbXBsX2gKKworI2luY2x1ZGUgIkZvbnQu
aCIKKyNpbmNsdWRlICJXZWJGb250LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRm9u
dERlc2NyaXB0aW9uOyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJGb250SW1w
bCA6IHB1YmxpYyBXZWJGb250IHsKK3B1YmxpYzoKKyAgICBXZWJGb250SW1wbChjb25zdCBXZWJD
b3JlOjpGb250RGVzY3JpcHRpb24mLCBzaG9ydCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3b3JkU3Bh
Y2luZyk7CisKKyAgICB2aXJ0dWFsIFdlYkZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24o
KSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IGFzY2VudCgpIGNvbnN0OworICAgIHZpcnR1YWwg
aW50IGRlc2NlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCBsaW5lU3BhY2luZygpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgeEhl
aWdodCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0KFdlYkNhbnZhcyosIGNv
bnN0IFdlYlRleHRSdW4mLCBjb25zdCBXZWJGbG9hdFBvaW50JiBsZWZ0QmFzZWxpbmUsIFdlYkNv
bG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJSZWN0JiBjbGlwLCBib29s
IGNhbnZhc0lzT3BhcXVlLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludCBjYWxjdWxhdGVXaWR0aChjb25zdCBXZWJUZXh0UnVuJikgY29uc3Q7CisgICAg
dmlydHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgV2ViVGV4dFJ1biYsIGZsb2F0IHBv
c2l0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9y
VGV4dChjb25zdCBXZWJUZXh0UnVuJiwgY29uc3QgV2ViRmxvYXRQb2ludCYgbGVmdEJhc2VsaW5l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWln
aHQsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworCitwcml2YXRlOgorICAgIFdl
YkNvcmU6OkZvbnQgbV9mb250OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUZXh0UnVuLmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVGV4dFJ1bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNThkOWZhYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVGV4dFJ1bi5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJUZXh0UnVuLmgiCisKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViVGV4dFJ1bjo6b3BlcmF0
b3IgV2ViQ29yZTo6VGV4dFJ1bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRleHRSdW4odGV4dCwg
ZmFsc2UsIDAsIDAsIHJ0bCwgZGlyZWN0aW9uYWxPdmVycmlkZSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAo=
</data>
<flag name="commit-queue"
          id="50981"
          type_id="3"
          status="-"
          setter="brettw"
    />
          </attachment>
      

    </bug>

</bugzilla>