<?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>233971</bug_id>
          
          <creation_ts>2021-12-07 21:18:19 -0800</creation_ts>
          <short_desc>add assertions to check Font objects are used only on a single thread</short_desc>
          <delta_ts>2021-12-14 21:19:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>233488</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron McCormack (:heycam)">heycam</reporter>
          <assigned_to name="Cameron McCormack (:heycam)">heycam</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>clord</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1821366</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-07 21:18:19 -0800</bug_when>
    <thetext>As part of implementing OffscreenCanvas, bug 202793 changed FontCache from a singleton to have an instance on the main thread and one on every worker thread.  In this model, Font objects are also created and used on a single thread.  I think we should add some assertions that Font objects are touched only on the thread that created them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821367</commentid>
    <comment_count>1</comment_count>
      <attachid>446287</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-07 21:25:59 -0800</bug_when>
    <thetext>Created attachment 446287
WIP

Here&apos;s an incomplete patch that shows one approach, using the bits I&apos;m adding in bug 233967. Unfortunately it&apos;s pretty noisy since the WTF_GUARDED_BY_LOCK attribute needs to be added on every member variable. An alternative would be to bundle up all the data members into a struct and have a single member variable with WTF_GUARDED_BY_LOCK on it, but that would cause corresponding noise on all member variable references. Sadly wrapping all the data members in an anonymous struct prevents WTF_GUARDED_BY_LOCK from being used on it in a single place. (It would be nice if a single annotation could be added on the class itself.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821400</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-12-07 22:34:11 -0800</bug_when>
    <thetext>I think the title is wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821489</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-12-08 02:18:41 -0800</bug_when>
    <thetext>This seems a bit overkill to me vs just guarding on the functions that provide Font objects - there&apos;s no point where we transfer Fonts between threads or access Fonts from different threads from the FontCache that provided them are there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821765</commentid>
    <comment_count>4</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-08 13:41:13 -0800</bug_when>
    <thetext>Guarding on the places that provide the Font objects might be a better balance between  safety (and ability to rely on the static analysis attributes) and noisiness.

And you&apos;re right, I don&apos;t think we do explicitly transfer Fonts between threads.  I guess I just want to protect against future code changes that might provide a different way to get access to Font objects.


A different approach could be to have some handle class that wraps a raw Font*, asserts in its operator-&gt;, and doesn&apos;t provide a way to get at the raw pointer.  The static constructor functions are the only way to create Font instances and would return Ref&lt;FontHandle&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824237</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-14 21:19:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/86504870&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446287</attachid>
            <date>2021-12-07 21:25:59 -0800</date>
            <delta_ts>2021-12-07 21:44:36 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-233971-20211208162557.patch</filename>
            <type>text/plain</type>
            <size>34108</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjI1ZDM3MjAzNGI1MWMx
NTYwMzYwYzgwZWUzMzdhZjExYmZjMDY3Ni4uNWRmZDU2ZDVkZmIwYWYxZGU3ODZlODIyNzZjMmJi
YmI0NTgyMGJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDIxLTEyLTA3ICBDYW1l
cm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHRocmVhZCBh
c3NlcnRpb25zIHRvIEZvbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMzk3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojppbml0Q2hhcldpZHRocyk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybUdseXBoSW5pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Ojp+Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5cGhQ
YWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmdseXBoRm9yQ2hhcmFjdGVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjplbnN1cmVEZXJpdmVkRm9udERhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp1cHJpZ2h0T3JpZW50YXRpb25Gb250IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmludmlzaWJsZUZvbnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6c21hbGxDYXBzRm9udCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Ojpub1N5bnRoZXNpemFibGVGZWF0dXJlc0ZvbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6ZW1waGFzaXNNYXJrRm9udCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Ojpicm9rZW5JZGVvZ3JhcGhGb250IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om1hdGhEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNyZWF0ZVNjYWxlZEZvbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6YXBwbHlUcmFuc2Zvcm1zIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSk6
CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9y
U3ludGhlc2lzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN1cHBvcnRzQ29kZVBv
aW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNhblJlbmRlckNvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBhdGhGb3JH
bHlwaCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6aGFzVmVydGljYWxHbHlwaHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Ojpmb250TWV0cmljcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
OjpzaXplUGVyVW5pdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjptYXhDaGFyV2lk
dGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2V0TWF4Q2hhcldpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OmF2Z0NoYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpzZXRBdmdDaGFyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c3Bh
Y2VXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzeW50aGV0aWNCb2xkT2Zm
c2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNwYWNlR2x5cGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6emVyb1dpZHRoU3BhY2VHbHlwaCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Ojppc1plcm9XaWR0aFNwYWNlR2x5cGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6cGl0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
b3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmlzSW50ZXJzdGl0aWFsIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnZpc2liaWxpdHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6YWxsb3dzQW50aWFsaWFzaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpnZXRDVEZvbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
c2NyaXB0Q2FjaGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6V1RGX0dVQVJERURf
QllfTE9DSyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpib3VuZHNGb3JHbHlwaCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp3aWR0aEZvckdseXBoIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBs
YXRmb3JtQ2hhcldpZHRoSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp2YXJpYW50Q2Fw
c1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpnbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y3JlYXRlRm9udFdpdGhvdXRTeW50aGVzaXphYmxl
RmVhdHVyZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1DcmVhdGVT
Y2FsZWRGb250IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtV2lkdGhG
b3JHbHlwaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjphcHBseVRyYW5zZm9ybXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZGV0ZXJtaW5lUGl0Y2gpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybVBhdGhGb3JHbHlwaCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpwbGF0Zm9ybVN1cHBvcnRzQ29kZVBvaW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVuZGVySWNvbnMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b3RTVkdUYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpoYXNDb21wbGV4Q29sb3JGb3JtYXRUYWJsZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6Z2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpnbHlwaEhhc0NvbXBsZXhDb2xvckZvcm1hdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpmaW5kT1RTVkdHbHlwaHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6aGFzQW55Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzIGNvbnN0KToKKwog
MjAyMS0xMi0wNyAgQ2FtZXJvbiBNY0Nvcm1hY2sgIDxoZXljYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBleHBhbmRBcm91bmRJZGVvZ3JhcGhzIHN0YXRpYyB2YXJpYWJsZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggNGU5NDlkZmFiOTc2NWEy
YTA3YzQ4NzhhYmVlMTAzZmJhZjIxZjU3MC4uMDllMGE2YTdhMTAwMWFkNzZmMjgxZDA4MzUxNjhk
NjE2MWE4NjI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAK
QEAgLTEwNCw2ICsxMDQsOCBAQCBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBs
YXRmb3JtRGF0YSwgT3JpZ2luIG9yaWdpbiwgSW50ZXJzdGl0aWFsIGludAogLy8gRXN0aW1hdGVz
IG9mIGF2Z0NoYXJXaWR0aCBhbmQgbWF4Q2hhcldpZHRoIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24n
dCBzdXBwb3J0IGFjY2Vzc2luZyB0aGVzZSB2YWx1ZXMgZnJvbSB0aGUgZm9udC4KIHZvaWQgRm9u
dDo6aW5pdENoYXJXaWR0aHMoKQogeworICAgIGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFk
KTsKKwogICAgIGF1dG8qIGdseXBoUGFnZVplcm8gPSBnbHlwaFBhZ2UoR2x5cGhQYWdlOjpwYWdl
TnVtYmVyRm9yQ29kZVBvaW50KCcwJykpOwogCiAgICAgLy8gVHJlYXQgdGhlIHdpZHRoIG9mIGEg
JzAnIGFzIHRoZSBhdmdDaGFyV2lkdGguCkBAIC0xMjMsNiArMTI1LDggQEAgdm9pZCBGb250Ojpp
bml0Q2hhcldpZHRocygpCiAKIHZvaWQgRm9udDo6cGxhdGZvcm1HbHlwaEluaXQoKQogeworICAg
IGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsKKwogI2lmIFVTRShGUkVFVFlQRSkKICAg
ICBhdXRvKiBnbHlwaFBhZ2VaZXJvV2lkdGhTcGFjZSA9IGdseXBoUGFnZShHbHlwaFBhZ2U6OnBh
Z2VOdW1iZXJGb3JDb2RlUG9pbnQoemVyb1dpZHRoU3BhY2UpKTsKICAgICBVQ2hhcjMyIHplcm9X
aWR0aFNwYWNlQ2hhcmFjdGVyID0gemVyb1dpZHRoU3BhY2U7CkBAIC0xNzcsMTEgKzE4MSwxNSBA
QCB2b2lkIEZvbnQ6OnBsYXRmb3JtR2x5cGhJbml0KCkKIAogRm9udDo6fkZvbnQoKQogeworICAg
IGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsKKwogICAgIHJlbW92ZUZyb21TeXN0ZW1G
YWxsYmFja0NhY2hlKCk7CiB9CiAKIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBGb250Ojpy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSBjb25zdAogeworICAgIGFzc2VydElzQ3VycmVu
dChtX293bmVyVGhyZWFkKTsKKwogICAgIGlmICghbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpCiAgICAgICAgIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyID0gUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwogICAgIHJldHVybiAqbV9yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXI7CkBAIC00MDYsNiArNDE0LDggQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBh
Z2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9u
dCYKIAogY29uc3QgR2x5cGhQYWdlKiBGb250OjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJl
cikgY29uc3QKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7CisKICAgICBp
ZiAoIXBhZ2VOdW1iZXIpIHsKICAgICAgICAgaWYgKCFtX2dseXBoUGFnZVplcm8pCiAgICAgICAg
ICAgICBtX2dseXBoUGFnZVplcm8gPSBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKDAsICp0aGlzKTsK
QEAgLTQyMCw2ICs0MzAsOCBAQCBjb25zdCBHbHlwaFBhZ2UqIEZvbnQ6OmdseXBoUGFnZSh1bnNp
Z25lZCBwYWdlTnVtYmVyKSBjb25zdAogCiBHbHlwaCBGb250OjpnbHlwaEZvckNoYXJhY3RlcihV
Q2hhcjMyIGNoYXJhY3RlcikgY29uc3QKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRo
cmVhZCk7CisKICAgICBhdXRvKiBwYWdlID0gZ2x5cGhQYWdlKEdseXBoUGFnZTo6cGFnZU51bWJl
ckZvckNvZGVQb2ludChjaGFyYWN0ZXIpKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtNDI4LDYgKzQ0MCw4IEBAIEdseXBoIEZvbnQ6OmdseXBoRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgY2hhcmFjdGVyKSBjb25zdAogCiBHbHlwaERhdGEgRm9udDo6Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAogeworICAgIGFzc2VydElzQ3VycmVudCht
X293bmVyVGhyZWFkKTsKKwogICAgIGF1dG8qIHBhZ2UgPSBnbHlwaFBhZ2UoR2x5cGhQYWdlOjpw
YWdlTnVtYmVyRm9yQ29kZVBvaW50KGNoYXJhY3RlcikpOwogICAgIGlmICghcGFnZSkKICAgICAg
ICAgcmV0dXJuIEdseXBoRGF0YSgpOwpAQCAtNDM2LDYgKzQ1MCw4IEBAIEdseXBoRGF0YSBGb250
OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpIGNvbnN0CiAKIGF1dG8g
Rm9udDo6ZW5zdXJlRGVyaXZlZEZvbnREYXRhKCkgY29uc3QgLT4gRGVyaXZlZEZvbnRzJgogewor
ICAgIGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsKKwogICAgIGlmICghbV9kZXJpdmVk
Rm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gbWFrZVVuaXF1ZTxEZXJpdmVk
Rm9udHM+KCk7CiAgICAgcmV0dXJuICptX2Rlcml2ZWRGb250RGF0YTsKQEAgLTQ0Myw2ICs0NTks
OCBAQCBhdXRvIEZvbnQ6OmVuc3VyZURlcml2ZWRGb250RGF0YSgpIGNvbnN0IC0+IERlcml2ZWRG
b250cyYKIAogY29uc3QgRm9udCYgRm9udDo6dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgp
IGNvbnN0CiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOworCiAgICAgRGVy
aXZlZEZvbnRzJiBkZXJpdmVkRm9udERhdGEgPSBlbnN1cmVEZXJpdmVkRm9udERhdGEoKTsKICAg
ICBpZiAoIWRlcml2ZWRGb250RGF0YS52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KSB7CiAg
ICAgICAgIGF1dG8gdmVydGljYWxSaWdodFBsYXRmb3JtRGF0YSA9IEZvbnRQbGF0Zm9ybURhdGE6
OmNsb25lV2l0aE9yaWVudGF0aW9uKG1fcGxhdGZvcm1EYXRhLCBGb250T3JpZW50YXRpb246Okhv
cml6b250YWwpOwpAQCAtNDU0LDYgKzQ3Miw4IEBAIGNvbnN0IEZvbnQmIEZvbnQ6OnZlcnRpY2Fs
UmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAogCiBjb25zdCBGb250JiBGb250Ojp1cHJpZ2h0
T3JpZW50YXRpb25Gb250KCkgY29uc3QKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRo
cmVhZCk7CisKICAgICBEZXJpdmVkRm9udHMmIGRlcml2ZWRGb250RGF0YSA9IGVuc3VyZURlcml2
ZWRGb250RGF0YSgpOwogICAgIGlmICghZGVyaXZlZEZvbnREYXRhLnVwcmlnaHRPcmllbnRhdGlv
bkZvbnQpCiAgICAgICAgIGRlcml2ZWRGb250RGF0YS51cHJpZ2h0T3JpZW50YXRpb25Gb250ID0g
Y3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBvcmlnaW4oKSwgSW50ZXJzdGl0aWFsOjpObywgVmlzaWJp
bGl0eTo6VmlzaWJsZSwgT3JpZW50YXRpb25GYWxsYmFjazo6WWVzKTsKQEAgLTQ2Myw2ICs0ODMs
OCBAQCBjb25zdCBGb250JiBGb250Ojp1cHJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3QKIAog
Y29uc3QgRm9udCYgRm9udDo6aW52aXNpYmxlRm9udCgpIGNvbnN0CiB7CisgICAgYXNzZXJ0SXND
dXJyZW50KG1fb3duZXJUaHJlYWQpOworCiAgICAgRGVyaXZlZEZvbnRzJiBkZXJpdmVkRm9udERh
dGEgPSBlbnN1cmVEZXJpdmVkRm9udERhdGEoKTsKICAgICBpZiAoIWRlcml2ZWRGb250RGF0YS5p
bnZpc2libGVGb250KQogICAgICAgICBkZXJpdmVkRm9udERhdGEuaW52aXNpYmxlRm9udCA9IGNy
ZWF0ZShtX3BsYXRmb3JtRGF0YSwgb3JpZ2luKCksIEludGVyc3RpdGlhbDo6WWVzLCBWaXNpYmls
aXR5OjpJbnZpc2libGUpOwpAQCAtNDcyLDYgKzQ5NCw4IEBAIGNvbnN0IEZvbnQmIEZvbnQ6Omlu
dmlzaWJsZUZvbnQoKSBjb25zdAogCiBjb25zdCBGb250KiBGb250OjpzbWFsbENhcHNGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogeworICAgIGFzc2Vy
dElzQ3VycmVudChtX293bmVyVGhyZWFkKTsKKwogICAgIERlcml2ZWRGb250cyYgZGVyaXZlZEZv
bnREYXRhID0gZW5zdXJlRGVyaXZlZEZvbnREYXRhKCk7CiAgICAgaWYgKCFkZXJpdmVkRm9udERh
dGEuc21hbGxDYXBzRm9udCkKICAgICAgICAgZGVyaXZlZEZvbnREYXRhLnNtYWxsQ2Fwc0ZvbnQg
PSBjcmVhdGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0
aXBsaWVyKTsKQEAgLTQ4MSw2ICs1MDUsOCBAQCBjb25zdCBGb250KiBGb250OjpzbWFsbENhcHNG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogCiBjb25z
dCBGb250JiBGb250Ojpub1N5bnRoZXNpemFibGVGZWF0dXJlc0ZvbnQoKSBjb25zdAogeworICAg
IGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIERlcml2ZWRGb250cyYgZGVyaXZlZEZvbnREYXRhID0gZW5zdXJlRGVyaXZlZEZvbnREYXRh
KCk7CiAgICAgaWYgKCFkZXJpdmVkRm9udERhdGEubm9TeW50aGVzaXphYmxlRmVhdHVyZXNGb250
KQpAQCAtNDk0LDYgKzUyMCw4IEBAIGNvbnN0IEZvbnQmIEZvbnQ6Om5vU3ludGhlc2l6YWJsZUZl
YXR1cmVzRm9udCgpIGNvbnN0CiAKIGNvbnN0IEZvbnQqIEZvbnQ6OmVtcGhhc2lzTWFya0ZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CisgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOworCiAgICAgRGVyaXZlZEZvbnRzJiBkZXJpdmVk
Rm9udERhdGEgPSBlbnN1cmVEZXJpdmVkRm9udERhdGEoKTsKICAgICBpZiAoIWRlcml2ZWRGb250
RGF0YS5lbXBoYXNpc01hcmtGb250KQogICAgICAgICBkZXJpdmVkRm9udERhdGEuZW1waGFzaXNN
YXJrRm9udCA9IGNyZWF0ZVNjYWxlZEZvbnQoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtG
b250U2l6ZU11bHRpcGxpZXIpOwpAQCAtNTAzLDkgKzUzMSwxMiBAQCBjb25zdCBGb250KiBGb250
OjplbXBoYXNpc01hcmtGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSBjb25zdAogCiBjb25zdCBGb250JiBGb250Ojpicm9rZW5JZGVvZ3JhcGhGb250KCkgY29uc3QK
IHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7CisKICAgICBEZXJpdmVkRm9u
dHMmIGRlcml2ZWRGb250RGF0YSA9IGVuc3VyZURlcml2ZWRGb250RGF0YSgpOwogICAgIGlmICgh
ZGVyaXZlZEZvbnREYXRhLmJyb2tlbklkZW9ncmFwaEZvbnQpIHsKICAgICAgICAgZGVyaXZlZEZv
bnREYXRhLmJyb2tlbklkZW9ncmFwaEZvbnQgPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIG9yaWdp
bigpLCBJbnRlcnN0aXRpYWw6Ok5vKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KGRlcml2ZWRG
b250RGF0YS5icm9rZW5JZGVvZ3JhcGhGb250LT5tX293bmVyVGhyZWFkKTsKICAgICAgICAgZGVy
aXZlZEZvbnREYXRhLmJyb2tlbklkZW9ncmFwaEZvbnQtPm1faXNCcm9rZW5JZGVvZ3JhcGhGYWxs
YmFjayA9IHRydWU7CiAgICAgfQogICAgIEFTU0VSVChkZXJpdmVkRm9udERhdGEuYnJva2VuSWRl
b2dyYXBoRm9udCAhPSB0aGlzKTsKQEAgLTUyNSw2ICs1NTYsOCBAQCBib29sIEZvbnQ6OmlzUHJv
YmFibHlPbmx5VXNlZFRvUmVuZGVySWNvbnMoKSBjb25zdAogI2lmICFMT0dfRElTQUJMRUQKIFN0
cmluZyBGb250OjpkZXNjcmlwdGlvbigpIGNvbnN0CiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1f
b3duZXJUaHJlYWQpOworCiAgICAgaWYgKG9yaWdpbigpID09IE9yaWdpbjo6UmVtb3RlKQogICAg
ICAgICByZXR1cm4gIltjdXN0b20gZm9udF0iOwogCkBAIC01MzQsNiArNTY3LDggQEAgU3RyaW5n
IEZvbnQ6OmRlc2NyaXB0aW9uKCkgY29uc3QKIAogY29uc3QgT3BlblR5cGVNYXRoRGF0YSogRm9u
dDo6bWF0aERhdGEoKSBjb25zdAogeworICAgIGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFk
KTsKKwogICAgIGlmIChpc0ludGVyc3RpdGlhbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBpZiAoIW1fbWF0aERhdGEpIHsKQEAgLTU0NiwxMiArNTgxLDE2IEBAIGNvbnN0IE9wZW5U
eXBlTWF0aERhdGEqIEZvbnQ6Om1hdGhEYXRhKCkgY29uc3QKIAogUmVmUHRyPEZvbnQ+IEZvbnQ6
OmNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogeworICAgIGFzc2VydElzQ3VycmVudChtX293bmVy
VGhyZWFkKTsKKwogICAgIHJldHVybiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoZm9udERlc2Ny
aXB0aW9uLCBzY2FsZUZhY3Rvcik7CiB9CiAKICNpZiAhVVNFKENPUkVfVEVYVCkKIEdseXBoQnVm
ZmVyQWR2YW5jZSBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwg
dW5zaWduZWQsIGJvb2wsIGJvb2wsIGNvbnN0IEF0b21TdHJpbmcmLCBTdHJpbmdWaWV3LCBUZXh0
RGlyZWN0aW9uKSBjb25zdAogeworICAgIGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsK
KwogICAgIHJldHVybiBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCk7CiB9CiAjZW5kaWYKQEAgLTU5
MSw2ICs2MzAsOCBAQCBzdGF0aWMgU3lzdGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFsbGJhY2tD
YWNoZSgpCiAKIFJlZlB0cjxGb250PiBGb250OjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IElzRm9yUGxhdGZvcm1Gb250IGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdAogeworICAgIGFzc2Vy
dElzQ3VycmVudChtX293bmVyVGhyZWFkKTsKKwogICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IHN5
c3RlbUZhbGxiYWNrQ2FjaGUoKS5hZGQodGhpcywgQ2hhcmFjdGVyRmFsbGJhY2tNYXAoKSk7CiAK
ICAgICBpZiAoIWNoYXJhY3RlcikgewpAQCAtNjExLDE0ICs2NTIsMTggQEAgUmVmUHRyPEZvbnQ+
IEZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3Rlciwg
Y29uc3QgRm9udEQKICAgICAgICAgICAgIGNvZGVVbml0c0xlbmd0aCA9IDI7CiAgICAgICAgIH0K
ICAgICAgICAgYXV0byBmb250ID0gRm9udENhY2hlOjpmb3JDdXJyZW50VGhyZWFkKCkuc3lzdGVt
RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9u
dCwgRm9udENhY2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0cywgY29kZVVuaXRz
TGVuZ3RoKS5nZXQoKTsKLSAgICAgICAgaWYgKGZvbnQpCisgICAgICAgIGlmIChmb250KSB7Cisg
ICAgICAgICAgICBhc3NlcnRJc0N1cnJlbnQoZm9udC0+bV9vd25lclRocmVhZCk7CiAgICAgICAg
ICAgICBmb250LT5tX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA9IHRydWU7CisgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGZvbnQ7CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiB2
b2lkIEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKIHsKKyAgICBhc3NlcnRJ
c0N1cnJlbnQobV9vd25lclRocmVhZCk7CisKICAgICBzeXN0ZW1GYWxsYmFja0NhY2hlKCkucmVt
b3ZlKHRoaXMpOwogCiAgICAgaWYgKCFtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSkKQEAg
LTYzOCw2ICs2ODMsOCBAQCB2b2lkIEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hl
KCkKICNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCiBib29sIEZvbnQ6OnZh
cmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50aGVzaXMoRm9udFZhcmlhbnRDYXBzIGZv
bnRWYXJpYW50Q2FwcywgVUNoYXIzMikgY29uc3QKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9v
d25lclRocmVhZCk7CisKICAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgewogICAgIGNhc2Ug
Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKICAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRl
OgpAQCAtNjUzLDYgKzcwMCw4IEBAIGJvb2wgRm9udDo6dmFyaWFudENhcHNTdXBwb3J0c0NoYXJh
Y3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDCiAKIGJvb2wgRm9u
dDo6c3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIzMiBjaGFyYWN0ZXIpIGNvbnN0CiB7CisgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOworCiAgICAgLy8gVGhpcyBpcyB2ZXJ5IHNpbWls
YXIgdG8gc3RhdGljX2Nhc3Q8Ym9vbD4oZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKSkKICAg
ICAvLyBleGNlcHQgdGhhdCBnbHlwaEZvckNoYXJhY3RlcigpIG1hcHMgY2VydGFpbiBjb2RlIHBv
aW50cyB0byBaV1MgKGJlY2F1c2UgdGhleQogICAgIC8vIHNob3VsZG4ndCBiZSB2aXNpYmxlKS4g
VGhpcyBmdW5jdGlvbiBkb2Vzbid0IGRvIHRoYXQgbWFwcGluZywgYW5kIGluc3RlYWQgaXMKQEAg
LTY3Myw3ICs3MjIsNyBAQCBib29sIEZvbnQ6OnN1cHBvcnRzQ29kZVBvaW50KFVDaGFyMzIgY2hh
cmFjdGVyKSBjb25zdAogCiBib29sIEZvbnQ6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAogewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJU
aHJlYWQpOwogCiAgICAgYXV0byBjb2RlUG9pbnRzID0gU3RyaW5nVmlldyhjaGFyYWN0ZXJzLCBs
ZW5ndGgpLmNvZGVQb2ludHMoKTsKICAgICBhdXRvIGl0ID0gY29kZVBvaW50cy5iZWdpbigpOwpA
QCAtNzAxLDYgKzc1MCw4IEBAIGJvb2wgRm9udDo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsCiAvLyBEb24ndCBzdG9y
ZSB0aGUgcmVzdWx0IG9mIHRoaXMhIFRoZSBoYXNoIG1hcCBpcyBmcmVlIHRvIHJlaGFzaCBhdCBh
bnkgcG9pbnQsIGxlYXZpbmcgdGhpcyByZWZlcmVuY2UgZGFuZ2xpbmcuCiBjb25zdCBQYXRoJiBG
b250OjpwYXRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CisgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fb3duZXJUaHJlYWQpOworCiAgICAgaWYgKGNvbnN0IGF1dG8mIHBhdGggPSBtX2dseXBo
UGF0aE1hcC5leGlzdGluZ01ldHJpY3NGb3JHbHlwaChnbHlwaCkpCiAgICAgICAgIHJldHVybiAq
cGF0aDsKICAgICBhdXRvIHBhdGggPSBwbGF0Zm9ybVBhdGhGb3JHbHlwaChnbHlwaCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXggNzQ0MjAwNGYwMGI1ZGJhMjdm
M2MzMmU2NjdiMzZiY2NmNzg1MTRjZC4uY2QzZGY4ODcxNjg0NzdkYWVhODRhNmRjYzVkNDljYjQx
YmQwMGE0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZEFzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTEyOSwxNyArMTMwLDE3IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBGb250JiB1cHJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CiAgICAgY29u
c3QgRm9udCYgaW52aXNpYmxlRm9udCgpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNWZXJ0aWNhbEds
eXBocygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmVydGljYWxHbHlwaHM7IH0KLSAgICBib29sIGlz
VGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2lzVGV4dE9yaWVudGF0
aW9uRmFsbGJhY2s7IH0KKyAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyBhc3Nl
cnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7IHJldHVybiBtX2hhc1ZlcnRpY2FsR2x5cGhzOyB9
CisgICAgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkgY29uc3QgeyBhc3NlcnRJc0N1
cnJlbnQobV9vd25lclRocmVhZCk7IHJldHVybiBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7
IH0KIAotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udE1ldHJpY3M7IH0KLSAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0IHsgcmV0dXJu
IHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA/IGZv
bnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KKyAgICBjb25zdCBGb250TWV0cmljcyYg
Zm9udE1ldHJpY3MoKSBjb25zdCB7IGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsgcmV0
dXJuIG1fZm9udE1ldHJpY3M7IH0KKyAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0IHsgYXNz
ZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOyByZXR1cm4gcGxhdGZvcm1EYXRhKCkuc2l6ZSgp
IC8gKGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpID8gZm9udE1ldHJpY3MoKS51bml0c1BlckVt
KCkgOiAxKTsgfQogCi0gICAgZmxvYXQgbWF4Q2hhcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9t
YXhDaGFyV2lkdGg7IH0KLSAgICB2b2lkIHNldE1heENoYXJXaWR0aChmbG9hdCBtYXhDaGFyV2lk
dGgpIHsgbV9tYXhDaGFyV2lkdGggPSBtYXhDaGFyV2lkdGg7IH0KKyAgICBmbG9hdCBtYXhDaGFy
V2lkdGgoKSBjb25zdCB7IGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsgcmV0dXJuIG1f
bWF4Q2hhcldpZHRoOyB9CisgICAgdm9pZCBzZXRNYXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldp
ZHRoKSB7IGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsgbV9tYXhDaGFyV2lkdGggPSBt
YXhDaGFyV2lkdGg7IH0KIAotICAgIGZsb2F0IGF2Z0NoYXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXZnQ2hhcldpZHRoOyB9Ci0gICAgdm9pZCBzZXRBdmdDaGFyV2lkdGgoZmxvYXQgYXZnQ2hh
cldpZHRoKSB7IG1fYXZnQ2hhcldpZHRoID0gYXZnQ2hhcldpZHRoOyB9CisgICAgZmxvYXQgYXZn
Q2hhcldpZHRoKCkgY29uc3QgeyBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7IHJldHVy
biBtX2F2Z0NoYXJXaWR0aDsgfQorICAgIHZvaWQgc2V0QXZnQ2hhcldpZHRoKGZsb2F0IGF2Z0No
YXJXaWR0aCkgeyBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7IG1fYXZnQ2hhcldpZHRo
ID0gYXZnQ2hhcldpZHRoOyB9CiAKICAgICBGbG9hdFJlY3QgYm91bmRzRm9yR2x5cGgoR2x5cGgp
IGNvbnN0OwogICAgIGZsb2F0IHdpZHRoRm9yR2x5cGgoR2x5cGgpIGNvbnN0OwpAQCAtMTQ4LDEz
ICsxNDksMTMgQEAgcHVibGljOgogICAgIGZsb2F0IHBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlw
aCkgY29uc3Q7CiAgICAgUGF0aCBwbGF0Zm9ybVBhdGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAK
LSAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZVdpZHRoOyB9Cisg
ICAgZmxvYXQgc3BhY2VXaWR0aCgpIGNvbnN0IHsgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJl
YWQpOyByZXR1cm4gbV9zcGFjZVdpZHRoOyB9CiAKLSAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9CisgICAgZmxvYXQg
c3ludGhldGljQm9sZE9mZnNldCgpIGNvbnN0IHsgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJl
YWQpOyByZXR1cm4gbV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9CiAKLSAgICBHbHlwaCBzcGFjZUds
eXBoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZUdseXBoOyB9Ci0gICAgR2x5cGggemVyb1dpZHRo
U3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb1dpZHRoU3BhY2VHbHlwaDsgfQotICAg
IGJvb2wgaXNaZXJvV2lkdGhTcGFjZUdseXBoKEdseXBoIGdseXBoKSBjb25zdCB7IHJldHVybiBn
bHlwaCA9PSBtX3plcm9XaWR0aFNwYWNlR2x5cGggJiYgZ2x5cGg7IH0KKyAgICBHbHlwaCBzcGFj
ZUdseXBoKCkgY29uc3QgeyBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7IHJldHVybiBt
X3NwYWNlR2x5cGg7IH0KKyAgICBHbHlwaCB6ZXJvV2lkdGhTcGFjZUdseXBoKCkgY29uc3QgeyBh
c3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7IHJldHVybiBtX3plcm9XaWR0aFNwYWNlR2x5
cGg7IH0KKyAgICBib29sIGlzWmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Qg
eyBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7IHJldHVybiBnbHlwaCA9PSBtX3plcm9X
aWR0aFNwYWNlR2x5cGggJiYgZ2x5cGg7IH0KIAogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CiAgICAgR2x5cGggZ2x5cGhGb3JDaGFyYWN0ZXIoVUNo
YXIzMikgY29uc3Q7CkBAIC0xNjYsMjIgKzE2NywyMiBAQCBwdWJsaWM6CiAgICAgY29uc3QgR2x5
cGhQYWdlKiBnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3Q7CiAKICAgICB2b2lk
IGRldGVybWluZVBpdGNoKCk7Ci0gICAgUGl0Y2ggcGl0Y2goKSBjb25zdCB7IHJldHVybiBtX3Ry
ZWF0QXNGaXhlZFBpdGNoID8gRml4ZWRQaXRjaCA6IFZhcmlhYmxlUGl0Y2g7IH0KKyAgICBQaXRj
aCBwaXRjaCgpIGNvbnN0IHsgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOyByZXR1cm4g
bV90cmVhdEFzRml4ZWRQaXRjaCA/IEZpeGVkUGl0Y2ggOiBWYXJpYWJsZVBpdGNoOyB9CiAKLSAg
ICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KLSAgICBib29sIGlz
SW50ZXJzdGl0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pc0ludGVyc3RpdGlhbDsgfQotICAgIFZp
c2liaWxpdHkgdmlzaWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJpbGl0eTsgfQotICAg
IGJvb2wgYWxsb3dzQW50aWFsaWFzaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NBbnRpYWxp
YXNpbmc7IH0KKyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyBhc3NlcnRJc0N1cnJlbnQobV9v
d25lclRocmVhZCk7IHJldHVybiBtX29yaWdpbjsgfQorICAgIGJvb2wgaXNJbnRlcnN0aXRpYWwo
KSBjb25zdCB7IGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsgcmV0dXJuIG1faXNJbnRl
cnN0aXRpYWw7IH0KKyAgICBWaXNpYmlsaXR5IHZpc2liaWxpdHkoKSBjb25zdCB7IGFzc2VydElz
Q3VycmVudChtX293bmVyVGhyZWFkKTsgcmV0dXJuIG1fdmlzaWJpbGl0eTsgfQorICAgIGJvb2wg
YWxsb3dzQW50aWFsaWFzaW5nKCkgY29uc3QgeyBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVh
ZCk7IHJldHVybiBtX2FsbG93c0FudGlhbGlhc2luZzsgfQogCiAjaWYgIUxPR19ESVNBQkxFRAog
ICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIGJvb2wgc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7IH07CisgICAgYm9vbCBzaG91bGROb3RC
ZVVzZWRGb3JBcmFiaWMoKSBjb25zdCB7IGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsg
cmV0dXJuIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljOyB9OwogI2VuZGlmCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxh
dGZvcm1EYXRhLmZvbnQoKTsgfQorICAgIENURm9udFJlZiBnZXRDVEZvbnQoKSBjb25zdCB7IGFz
c2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQo
KTsgfQogICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGdldENGU3RyaW5nQXR0cmlidXRl
cyhib29sIGVuYWJsZUtlcm5pbmcsIEZvbnRPcmllbnRhdGlvbiwgY29uc3QgQXRvbVN0cmluZyYg
bG9jYWxlKSBjb25zdDsKICAgICBjb25zdCBCaXRWZWN0b3ImIGdseXBoc1N1cHBvcnRlZEJ5U21h
bGxDYXBzKCkgY29uc3Q7CiAgICAgY29uc3QgQml0VmVjdG9yJiBnbHlwaHNTdXBwb3J0ZWRCeUFs
bFNtYWxsQ2FwcygpIGNvbnN0OwpAQCAtMTk5LDcgKzIwMCw3IEBAIHB1YmxpYzoKIAogI2lmIFBM
QVRGT1JNKFdJTikKICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIHNjcmlwdEZvbnRQcm9wZXJ0
aWVzKCkgY29uc3Q7Ci0gICAgU0NSSVBUX0NBQ0hFKiBzY3JpcHRDYWNoZSgpIGNvbnN0IHsgcmV0
dXJuICZtX3NjcmlwdENhY2hlOyB9CisgICAgU0NSSVBUX0NBQ0hFKiBzY3JpcHRDYWNoZSgpIGNv
bnN0IHsgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOyByZXR1cm4gJm1fc2NyaXB0Q2Fj
aGU7IH0KICAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRBcHBseU1hY0FzY2VudEhhY2soYm9vbCk7
CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQXBwbHlNYWNBc2NlbnRIYWNrKCk7CiAgICAgc3RhdGlj
IGZsb2F0IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0
IGFzY2VudCwgZmxvYXQgZGVzY2VudCk7CkBAIC0yNjMsMjUgKzI2NCwyNSBAQCBwcml2YXRlOgog
ICAgIENvbXBsZXhDb2xvckZvcm1hdEdseXBocyYgZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1h
dCgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBGb250TWV0cmljcyBtX2ZvbnRNZXRyaWNzOwotICAg
IGZsb2F0IG1fbWF4Q2hhcldpZHRoIHsgLTEgfTsKLSAgICBmbG9hdCBtX2F2Z0NoYXJXaWR0aCB7
IC0xIH07CisgICAgRm9udE1ldHJpY3MgbV9mb250TWV0cmljcyBXVEZfR1VBUkRFRF9CWV9MT0NL
KG1fb3duZXJUaHJlYWQpOworICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoIFdURl9HVUFSREVEX0JZ
X0xPQ0sobV9vd25lclRocmVhZCkgeyAtMSB9OworICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRoIFdU
Rl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRocmVhZCkgeyAtMSB9OwogCi0gICAgY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKKyAgICBjb25zdCBGb250UGxhdGZvcm1EYXRh
IG1fcGxhdGZvcm1EYXRhIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRocmVhZCk7CiAKLSAg
ICBtdXRhYmxlIFJlZlB0cjxHbHlwaFBhZ2U+IG1fZ2x5cGhQYWdlWmVybzsKLSAgICBtdXRhYmxl
IEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxHbHlwaFBhZ2U+PiBtX2dseXBoUGFnZXM7Ci0gICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD4+IG1fZ2x5
cGhUb0JvdW5kc01hcDsKLSAgICBtdXRhYmxlIEdseXBoTWV0cmljc01hcDxmbG9hdD4gbV9nbHlw
aFRvV2lkdGhNYXA7Ci0gICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8c3RkOjpvcHRpb25hbDxQ
YXRoPj4gbV9nbHlwaFBhdGhNYXA7Ci0gICAgbXV0YWJsZSBCaXRWZWN0b3IgbV9jb2RlUG9pbnRT
dXBwb3J0OworICAgIG11dGFibGUgUmVmUHRyPEdseXBoUGFnZT4gbV9nbHlwaFBhZ2VaZXJvIFdU
Rl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRocmVhZCk7CisgICAgbXV0YWJsZSBIYXNoTWFwPHVu
c2lnbmVkLCBSZWZQdHI8R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzIFdURl9HVUFSREVEX0JZX0xP
Q0sobV9vd25lclRocmVhZCk7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhNZXRy
aWNzTWFwPEZsb2F0UmVjdD4+IG1fZ2x5cGhUb0JvdW5kc01hcCBXVEZfR1VBUkRFRF9CWV9MT0NL
KG1fb3duZXJUaHJlYWQpOworICAgIG11dGFibGUgR2x5cGhNZXRyaWNzTWFwPGZsb2F0PiBtX2ds
eXBoVG9XaWR0aE1hcCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fb3duZXJUaHJlYWQpOworICAgIG11
dGFibGUgR2x5cGhNZXRyaWNzTWFwPHN0ZDo6b3B0aW9uYWw8UGF0aD4+IG1fZ2x5cGhQYXRoTWFw
IFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRocmVhZCk7CisgICAgbXV0YWJsZSBCaXRWZWN0
b3IgbV9jb2RlUG9pbnRTdXBwb3J0IFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRocmVhZCk7
CiAKLSAgICBtdXRhYmxlIFJlZlB0cjxPcGVuVHlwZU1hdGhEYXRhPiBtX21hdGhEYXRhOworICAg
IG11dGFibGUgUmVmUHRyPE9wZW5UeXBlTWF0aERhdGE+IG1fbWF0aERhdGEgV1RGX0dVQVJERURf
QllfTE9DSyhtX293bmVyVGhyZWFkKTsKICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0g
ICAgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiBtX3ZlcnRpY2FsRGF0YTsKKyAgICBSZWZQ
dHI8T3BlblR5cGVWZXJ0aWNhbERhdGE+IG1fdmVydGljYWxEYXRhIFdURl9HVUFSREVEX0JZX0xP
Q0sobV9vd25lclRocmVhZCk7CiAjZW5kaWYKIAotICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
OworICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+
IG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25l
clRocmVhZCk7CiAKICAgICBzdHJ1Y3QgRGVyaXZlZEZvbnRzIHsKICAgICAgICAgV1RGX01BS0Vf
U1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMjk2LDQ4ICsyOTcsNTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgUmVmUHRyPEZvbnQ+IGludmlzaWJsZUZvbnQ7CiAgICAgfTsKIAotICAgIG11dGFibGUg
c3RkOjp1bmlxdWVfcHRyPERlcml2ZWRGb250cz4gbV9kZXJpdmVkRm9udERhdGE7CisgICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8RGVyaXZlZEZvbnRzPiBtX2Rlcml2ZWRGb250RGF0YSBXVEZf
R1VBUkRFRF9CWV9MT0NLKG1fb3duZXJUaHJlYWQpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPEJpdFZlY3Rvcj4gbV9nbHlwaHNTdXBwb3J0ZWRCeVNt
YWxsQ2FwczsKLSAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8Qml0VmVjdG9yPiBtX2dseXBoc1N1
cHBvcnRlZEJ5QWxsU21hbGxDYXBzOwotICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxCaXRWZWN0
b3I+IG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzOwotICAgIG11dGFibGUgc3RkOjpvcHRp
b25hbDxCaXRWZWN0b3I+IG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzOwotICAgIG11
dGFibGUgc3RkOjpvcHRpb25hbDxQQUw6Ok9UU1ZHVGFibGU+IG1fb3RTVkdUYWJsZTsKLSAgICBt
dXRhYmxlIHN0ZDo6b3B0aW9uYWw8Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzPiBtX2dseXBoc1dp
dGhDb21wbGV4Q29sb3JGb3JtYXQ7IC8vIFNWRyBhbmQgc2JpeAorICAgIG11dGFibGUgc3RkOjpv
cHRpb25hbDxCaXRWZWN0b3I+IG1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMgV1RGX0dVQVJE
RURfQllfTE9DSyhtX293bmVyVGhyZWFkKTsKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8Qml0
VmVjdG9yPiBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzIFdURl9HVUFSREVEX0JZX0xP
Q0sobV9vd25lclRocmVhZCk7CisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPEJpdFZlY3Rvcj4g
bV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMgV1RGX0dVQVJERURfQllfTE9DSyhtX293bmVy
VGhyZWFkKTsKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8Qml0VmVjdG9yPiBtX2dseXBoc1N1
cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fb3duZXJUaHJlYWQp
OworICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxQQUw6Ok9UU1ZHVGFibGU+IG1fb3RTVkdUYWJs
ZSBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fb3duZXJUaHJlYWQpOworICAgIG11dGFibGUgc3RkOjpv
cHRpb25hbDxDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM+IG1fZ2x5cGhzV2l0aENvbXBsZXhDb2xv
ckZvcm1hdCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fb3duZXJUaHJlYWQpOyAvLyBTVkcgYW5kIHNi
aXgKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQotICAgIG11dGFibGUgU0NSSVBUX0NBQ0hF
IG1fc2NyaXB0Q2FjaGU7Ci0gICAgbXV0YWJsZSBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIG1fc2Ny
aXB0Rm9udFByb3BlcnRpZXM7CisgICAgbXV0YWJsZSBTQ1JJUFRfQ0FDSEUgbV9zY3JpcHRDYWNo
ZSBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fb3duZXJUaHJlYWQpOworICAgIG11dGFibGUgU0NSSVBU
X0ZPTlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzIFdURl9HVUFSREVEX0JZX0xP
Q0sobV9vd25lclRocmVhZCk7CiAjZW5kaWYKIAotICAgIEdseXBoIG1fc3BhY2VHbHlwaCB7IDAg
fTsKLSAgICBHbHlwaCBtX3plcm9XaWR0aFNwYWNlR2x5cGggeyAwIH07CisgICAgR2x5cGggbV9z
cGFjZUdseXBoIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRocmVhZCkgeyAwIH07CisgICAg
R2x5cGggbV96ZXJvV2lkdGhTcGFjZUdseXBoIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRo
cmVhZCkgeyAwIH07CiAKLSAgICBPcmlnaW4gbV9vcmlnaW47IC8vIFdoZXRoZXIgb3Igbm90IHdl
IGFyZSBjdXN0b20gZm9udCBsb2FkZWQgdmlhIEBmb250LWZhY2UKLSAgICBWaXNpYmlsaXR5IG1f
dmlzaWJpbGl0eTsgLy8gQGZvbnQtZmFjZSdzIGludGVybmFsIHRpbWVyIGNhbiBjYXVzZSB1cyB0
byBzaG93IGZvbnRzIGV2ZW4gd2hlbiBhIGZvbnQgaXMgYmVpbmcgZG93bmxvYWRlZC4KKyAgICBP
cmlnaW4gbV9vcmlnaW4gV1RGX0dVQVJERURfQllfTE9DSyhtX293bmVyVGhyZWFkKTsgLy8gV2hl
dGhlciBvciBub3Qgd2UgYXJlIGN1c3RvbSBmb250IGxvYWRlZCB2aWEgQGZvbnQtZmFjZQorICAg
IFZpc2liaWxpdHkgbV92aXNpYmlsaXR5IFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRocmVh
ZCk7IC8vIEBmb250LWZhY2UncyBpbnRlcm5hbCB0aW1lciBjYW4gY2F1c2UgdXMgdG8gc2hvdyBm
b250cyBldmVuIHdoZW4gYSBmb250IGlzIGJlaW5nIGRvd25sb2FkZWQuCiAKLSAgICBmbG9hdCBt
X3NwYWNlV2lkdGggeyAwIH07Ci0gICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGggeyAwIH07
CisgICAgZmxvYXQgbV9zcGFjZVdpZHRoIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRocmVh
ZCkgeyAwIH07CisgICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGggV1RGX0dVQVJERURfQllf
TE9DSyhtX293bmVyVGhyZWFkKSB7IDAgfTsKIAotICAgIGZsb2F0IG1fc3ludGhldGljQm9sZE9m
ZnNldCB7IDAgfTsKKyAgICBmbG9hdCBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgV1RGX0dVQVJERURf
QllfTE9DSyhtX293bmVyVGhyZWFkKSB7IDAgfTsKIAotICAgIHVuc2lnbmVkIG1fdHJlYXRBc0Zp
eGVkUGl0Y2ggOiAxOwotICAgIHVuc2lnbmVkIG1faXNJbnRlcnN0aXRpYWwgOiAxOyAvLyBXaGV0
aGVyIG9yIG5vdCB0aGlzIGN1c3RvbSBmb250IGlzIHRoZSBsYXN0IHJlc29ydCBwbGFjZWhvbGRl
ciBmb3IgYSBsb2FkaW5nIGZvbnQKKyAgICB1bnNpZ25lZCBtX3RyZWF0QXNGaXhlZFBpdGNoIDog
MSBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fb3duZXJUaHJlYWQpOworICAgIHVuc2lnbmVkIG1faXNJ
bnRlcnN0aXRpYWwgOiAxIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRocmVhZCk7IC8vIFdo
ZXRoZXIgb3Igbm90IHRoaXMgY3VzdG9tIGZvbnQgaXMgdGhlIGxhc3QgcmVzb3J0IHBsYWNlaG9s
ZGVyIGZvciBhIGxvYWRpbmcgZm9udAogCi0gICAgdW5zaWduZWQgbV9pc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrIDogMTsKLSAgICB1bnNpZ25lZCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sg
OiAxOwotICAgIHVuc2lnbmVkIG1faGFzVmVydGljYWxHbHlwaHMgOiAxOworICAgIHVuc2lnbmVk
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA6IDEgV1RGX0dVQVJERURfQllfTE9DSyhtX293
bmVyVGhyZWFkKTsKKyAgICB1bnNpZ25lZCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgOiAx
IFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclRocmVhZCk7CisgICAgdW5zaWduZWQgbV9oYXNW
ZXJ0aWNhbEdseXBocyA6IDEgV1RGX0dVQVJERURfQllfTE9DSyhtX293bmVyVGhyZWFkKTsKIAot
ICAgIHVuc2lnbmVkIG1faXNVc2VkSW5TeXN0ZW1GYWxsYmFja0NhY2hlIDogMTsKKyAgICB1bnNp
Z25lZCBtX2lzVXNlZEluU3lzdGVtRmFsbGJhY2tDYWNoZSA6IDEgV1RGX0dVQVJERURfQllfTE9D
SyhtX293bmVyVGhyZWFkKTsKICAgICAKLSAgICB1bnNpZ25lZCBtX2FsbG93c0FudGlhbGlhc2lu
ZyA6IDE7CisgICAgdW5zaWduZWQgbV9hbGxvd3NBbnRpYWxpYXNpbmcgOiAxIFdURl9HVUFSREVE
X0JZX0xPQ0sobV9vd25lclRocmVhZCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IHVuc2lnbmVkIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljIDogMTsKKyAgICB1bnNpZ25lZCBt
X3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyA6IDEgV1RGX0dVQVJERURfQllfTE9DSyhtX293bmVy
VGhyZWFkKTsKICNlbmRpZgogCisgICAgTk9fVU5JUVVFX0FERFJFU1MgTWFpbk9yT3RoZXJUaHJl
YWRBc3NlcnRpb24gbV9vd25lclRocmVhZDsKKwogICAgIC8vIEFkZGluZyBhbnkgbm9uLWRlcml2
ZWQgaW5mb3JtYXRpb24gdG8gRm9udCBuZWVkcyBhIHBhcmFsbGVsIGNoYW5nZSBpbiBXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwLgogfTsKIApAQCAtMzQ3LDYgKzM1MCw4IEBAIGJvb2wgZm9udEZh
bWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZik7CiAKIEFMV0FZU19JTkxJ
TkUgRmxvYXRSZWN0IEZvbnQ6OmJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewor
ICAgIGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsKKwogICAgIGlmIChpc1plcm9XaWR0
aFNwYWNlR2x5cGgoZ2x5cGgpKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKQEAgLTM2
Niw2ICszNzEsOCBAQCBBTFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBGb250Ojpib3VuZHNGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3QKIAogQUxXQVlTX0lOTElORSBmbG9hdCBGb250Ojp3aWR0aEZv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogeworICAgIGFzc2VydElzQ3VycmVudChtX293bmVy
VGhyZWFkKTsKKwogICAgIC8vIFRoZSBvcHRpbWl6YXRpb24gb2YgcmV0dXJuaW5nIDAgZm9yIHRo
ZSB6ZXJvLXdpZHRoLXNwYWNlIGdseXBoIGlzIGluY29ycmVjdCBmb3IgdGhlIExhc3RSZXNvcnQg
Zm9udCwKICAgICAvLyB1c2VkIGluIHBsYWNlIG9mIHRoZSBhY3R1YWwgZm9udCB3aGVuIGlzTG9h
ZGluZygpIGlzIHRydWUgb24gYm90aCBtYWNPUyBhbmQgaU9TLgogICAgIC8vIFRoZSB6ZXJvLXdp
ZHRoLXNwYWNlIGdseXBoIGluIHRoYXQgZm9udCBkb2VzIG5vdCBoYXZlIGEgd2lkdGggb2YgemVy
byBhbmQsIGZ1cnRoZXIsIHRoYXQgZ2x5cGggaXMgdXNlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKaW5k
ZXggMzZkZDcwY2I1YTZkMjRlZGM5NzI4MGE3NjQxNDdkNTg1OWM0MmQ1Ny4uODQ2NDg3YzIwMGUx
NGQ2ZWMzMzdiNjc3YjJhMDVkY2UxNjA5MzViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCkBAIC0x
NDUsNiArMTQ1LDggQEAgYm9vbCBmb250SGFzRWl0aGVyVGFibGUoQ1RGb250UmVmIGN0Rm9udCwg
dW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIKIAogdm9pZCBGb250OjpwbGF0
Zm9ybUluaXQoKQogeworICAgIGFzc2VydElzQ3VycmVudChtX293bmVyVGhyZWFkKTsKKwogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0
Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gY2VpbGYobV9wbGF0Zm9ybURhdGEuc2l6ZSgpIC8g
MjQuMGYpIDogMC5mOwogI2Vsc2UKQEAgLTI0Niw2ICsyNDgsOCBAQCB2b2lkIEZvbnQ6OnBsYXRm
b3JtSW5pdCgpCiAKIHZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKIHsKKyAgICBh
c3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7CisKICAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7
CiAgICAgbV9tYXhDaGFyV2lkdGggPSAwOwogCkBAIC0yNzMsNiArMjc3LDggQEAgdm9pZCBGb250
OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogCiBib29sIEZvbnQ6OnZhcmlhbnRDYXBzU3VwcG9y
dHNDaGFyYWN0ZXJGb3JTeW50aGVzaXMoRm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50Q2Fwcywg
VUNoYXIzMiBjaGFyYWN0ZXIpIGNvbnN0CiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJU
aHJlYWQpOworCiAjaWYgKFBMQVRGT1JNKElPU19GQU1JTFkpICYmIFRBUkdFVF9PU19JT1MpIHx8
IFBMQVRGT1JNKE1BQykKICAgICBHbHlwaCBnbHlwaCA9IGdseXBoRm9yQ2hhcmFjdGVyKGNoYXJh
Y3Rlcik7CiAgICAgaWYgKCFnbHlwaCkKQEAgLTM2MSw2ICszNjcsOCBAQCBzdGF0aWMgdm9pZCBp
bmplY3RUcnVlVHlwZUNvdmVyYWdlKGludCB0eXBlLCBpbnQgc2VsZWN0b3IsIENURm9udFJlZiBm
b250LCBCaXRWZQogCiBjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5U21h
bGxDYXBzKCkgY29uc3QKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7CisK
ICAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMpIHsKICAgICAgICAgbV9nbHlw
aHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcyA9IEJpdFZlY3RvcigpOwogICAgICAgICBpbmplY3RPcGVu
VHlwZUNvdmVyYWdlKENGU1RSKCJzbWNwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlw
aHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgpKTsKQEAgLTM3MSw2ICszNzksOCBAQCBjb25z
dCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzKCkgY29uc3QKIAog
Y29uc3QgQml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcygpIGNv
bnN0CiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOworCiAgICAgaWYgKCFt
X2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzKSB7CiAgICAgICAgIG1fZ2x5cGhzU3VwcG9y
dGVkQnlBbGxTbWFsbENhcHMgPSBCaXRWZWN0b3IoKTsKICAgICAgICAgaW5qZWN0T3BlblR5cGVD
b3ZlcmFnZShDRlNUUigic21jcCIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3Vw
cG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7CkBAIC0zODMsNiArMzkzLDggQEAgY29uc3Qg
Qml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcygpIGNvbnN0CiAK
IGNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzKCkgY29u
c3QKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7CisKICAgICBpZiAoIW1f
Z2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzKSB7CiAgICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVk
QnlQZXRpdGVDYXBzID0gQml0VmVjdG9yKCk7CiAgICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJh
Z2UoQ0ZTVFIoInBjYXAiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRl
ZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpKTsKQEAgLTM5Myw2ICs0MDUsOCBAQCBjb25zdCBCaXRWZWN0
b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpIGNvbnN0CiAKIGNvbnN0IEJp
dFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzKCkgY29uc3QKIHsK
KyAgICBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7CisKICAgICBpZiAoIW1fZ2x5cGhz
U3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzKSB7CiAgICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlB
bGxQZXRpdGVDYXBzID0gQml0VmVjdG9yKCk7CiAgICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJh
Z2UoQ0ZTVFIoInBjYXAiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRl
ZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKQEAgLTU1NSw2ICs1NjksOCBAQCBzdGF0aWMgUmV0
YWluUHRyPENURm9udFJlZj4gY3JlYXRlQ1RGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJl
cyhDVEZvbnRSZWYgZgogCiBSZWZQdHI8Rm9udD4gRm9udDo6Y3JlYXRlRm9udFdpdGhvdXRTeW50
aGVzaXphYmxlRmVhdHVyZXMoKSBjb25zdAogeworICAgIGFzc2VydElzQ3VycmVudChtX293bmVy
VGhyZWFkKTsKKwogICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CiAgICAg
Q1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRz
KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CiAgICAgUmV0YWluUHRyPENURm9udFJlZj4gY3RGb250
ID0gY3JlYXRlQ1RGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcyhtX3BsYXRmb3JtRGF0
YS5mb250KCkpOwpAQCAtNTYzLDYgKzU3OSw4IEBAIFJlZlB0cjxGb250PiBGb250OjpjcmVhdGVG
b250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcygpIGNvbnN0CiAKIFJlZlB0cjxGb250PiBG
b250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJl
YWQpOworCiAgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFj
dG9yOwogICAgIENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1i
b2xpY1RyYWl0cyhtX3BsYXRmb3JtRGF0YS5mb250KCkpOwogICAgIFJldGFpblB0cjxDVEZvbnRE
ZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNj
cmlwdG9yKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOwpAQCAtNTczLDYgKzU5MSw4IEBAIFJlZlB0
cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgZmxvYXQgc2NhbGVGCiAKIGZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChH
bHlwaCBnbHlwaCkgY29uc3QKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRocmVhZCk7
CisKICAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6ZVplcm87CiAKICAgICBpZiAocGxhdGZvcm1E
YXRhKCkuc2l6ZSgpKSB7CkBAIC01OTUsNiArNjE1LDggQEAgZmxvYXQgRm9udDo6cGxhdGZvcm1X
aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogCiBHbHlwaEJ1ZmZlckFkdmFuY2UgRm9u
dDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVn
aW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5h
YmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2Fs
ZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0CiB7
CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOworCiAgICAgVU5VU0VEX1BBUkFN
KHJlcXVpcmVzU2hhcGluZyk7CiAKICNpZiBVU0UoQ1RGT05UU0hBUEVHTFlQSFMpCkBAIC03NDcs
NiArNzY5LDggQEAgc3RhdGljIGludCBleHRyYWN0TnVtYmVyKENGTnVtYmVyUmVmIG51bWJlcikK
IAogdm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1f
b3duZXJUaHJlYWQpOworCiAgICAgQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmN0
Rm9udCgpOwogICAgIEFTU0VSVChjdEZvbnQpOwogCkBAIC03NzcsNiArODAxLDggQEAgdm9pZCBG
b250OjpkZXRlcm1pbmVQaXRjaCgpCiAKIEZsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0Zv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogeworICAgIGFzc2VydElzQ3VycmVudChtX293bmVy
VGhyZWFkKTsKKwogICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKICAgICBDR1JlY3QgaWdub3Jl
ZFJlY3QgPSB7IH07CiAgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9y
R2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlv
bigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwgPyBrQ1RGb250T3JpZW50YXRpb25WZXJ0
aWNhbCA6IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwsICZnbHlwaCwgJmlnbm9yZWRSZWN0
LCAxKTsKQEAgLTc4OCw2ICs4MTQsOCBAQCBGbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIAogUGF0aCBGb250OjpwbGF0Zm9ybVBhdGhGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKKyAgICBhc3NlcnRJc0N1cnJlbnQobV9vd25lclRo
cmVhZCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGF0aEZvckds
eXBoKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBnbHlwaCwgbnVsbHB0cikpOwogICAgIGF1dG8g
c3ludGhldGljQm9sZE9mZnNldCA9IHRoaXMtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKICAgICBp
ZiAoc3ludGhldGljQm9sZE9mZnNldCkgewpAQCAtODAyLDYgKzgzMCw4IEBAIFBhdGggRm9udDo6
cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAKIGJvb2wgRm9udDo6cGxh
dGZvcm1TdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3Rlciwgc3RkOjpvcHRpb25hbDxV
Q2hhcjMyPiB2YXJpYXRpb24pIGNvbnN0CiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJU
aHJlYWQpOworCiAgICAgaWYgKHZhcmlhdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC04MTQsNiArODQ0LDggQEAgYm9vbCBGb250OjpwbGF0Zm9ybVN1cHBvcnRzQ29kZVBvaW50KFVD
aGFyMzIgY2hhcmFjdGVyLCBzdGQ6Om9wdGlvbmFsPFVDaGFyMzI+IHYKIAogYm9vbCBGb250Ojpp
c1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljb25zKCkgY29uc3QKIHsKKyAgICBhc3NlcnRJc0N1
cnJlbnQobV9vd25lclRocmVhZCk7CisKICAgICBhdXRvIHBsYXRmb3JtRm9udCA9IHBsYXRmb3Jt
RGF0YSgpLmN0Rm9udCgpOwogICAgIGlmICghcGxhdGZvcm1Gb250KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC04NTUsNiArODg3LDggQEAgYm9vbCBGb250Ojppc1Byb2JhYmx5T25seVVzZWRU
b1JlbmRlckljb25zKCkgY29uc3QKICNpZiBQTEFURk9STShDT0NPQSkKIGNvbnN0IFBBTDo6T1RT
VkdUYWJsZSYgRm9udDo6b3RTVkdUYWJsZSgpIGNvbnN0CiB7CisgICAgYXNzZXJ0SXNDdXJyZW50
KG1fb3duZXJUaHJlYWQpOworCiAgICAgaWYgKCFtX290U1ZHVGFibGUpIHsKICAgICAgICAgaWYg
KGF1dG8gdGFibGVEYXRhID0gYWRvcHRDRihDVEZvbnRDb3B5VGFibGUocGxhdGZvcm1EYXRhKCku
Y3RGb250KCksIGtDVEZvbnRUYWJsZVNWRywga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSkp
CiAgICAgICAgICAgICBtX290U1ZHVGFibGUgPSBQQUw6Ok9UU1ZHVGFibGUodGFibGVEYXRhLmdl
dCgpLCBmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKSwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKTsK
QEAgLTg5Niw2ICs5MzAsOCBAQCB2b2lkIEZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBoczo6
c2V0KEdseXBoIGdseXBoLCBib29sIHZhbHVlKQogCiBib29sIEZvbnQ6Omhhc0NvbXBsZXhDb2xv
ckZvcm1hdFRhYmxlcygpIGNvbnN0CiB7CisgICAgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJl
YWQpOworCiAgICAgaWYgKG90U1ZHVGFibGUoKS50YWJsZSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKQEAgLTkwOSw2ICs5NDUsOCBAQCBib29sIEZvbnQ6Omhhc0NvbXBsZXhDb2xvckZvcm1hdFRh
YmxlcygpIGNvbnN0CiAKIEZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBocyYgRm9udDo6Z2x5
cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdCgpIGNvbnN0CiB7CisgICAgYXNzZXJ0SXNDdXJyZW50
KG1fb3duZXJUaHJlYWQpOworCiAgICAgaWYgKCFtX2dseXBoc1dpdGhDb21wbGV4Q29sb3JGb3Jt
YXQpIHsKICAgICAgICAgaWYgKGhhc0NvbXBsZXhDb2xvckZvcm1hdFRhYmxlcygpKSB7CiAgICAg
ICAgICAgICBDRkluZGV4IGdseXBoQ291bnQgPSBDVEZvbnRHZXRHbHlwaENvdW50KGdldENURm9u
dCgpKTsKQEAgLTkyNCw2ICs5NjIsOCBAQCBGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMm
IEZvbnQ6OmdseXBoc1dpdGhDb21wbGV4Q29sb3JGb3JtYXQoKSBjb25zdAogCiBib29sIEZvbnQ6
OmdseXBoSGFzQ29tcGxleENvbG9yRm9ybWF0KEdseXBoIGdseXBoSUQpIGNvbnN0CiB7CisgICAg
YXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOworCiAgICAgaWYgKGF1dG8gc3ZnVGFibGUg
PSBvdFNWR1RhYmxlKCkudGFibGUpIHsKICAgICAgICAgaWYgKFBBTDo6c29mdExpbmtPVFNWR09U
U1ZHVGFibGVHZXREb2N1bWVudEluZGV4Rm9yR2x5cGgoc3ZnVGFibGUsIGdseXBoSUQpICE9IGtD
Rk5vdEZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05NDEsNiArOTgxLDggQEAg
Ym9vbCBGb250OjpnbHlwaEhhc0NvbXBsZXhDb2xvckZvcm1hdChHbHlwaCBnbHlwaElEKSBjb25z
dAogCiBzdGQ6Om9wdGlvbmFsPEJpdFZlY3Rvcj4gRm9udDo6ZmluZE9UU1ZHR2x5cGhzKGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgdW5zaWduZWQgY291bnQpIGNvbnN0CiB7CisgICAg
YXNzZXJ0SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgYXV0byB0YWJsZSA9IG90U1ZHVGFibGUoKS50YWJsZTsKICAgICBpZiAoIXRhYmxlKQpAQCAt
OTY0LDYgKzEwMDYsOCBAQCBzdGQ6Om9wdGlvbmFsPEJpdFZlY3Rvcj4gRm9udDo6ZmluZE9UU1ZH
R2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgdQogCiBib29sIEZvbnQ6Omhh
c0FueUNvbXBsZXhDb2xvckZvcm1hdEdseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlw
aHMsIHVuc2lnbmVkIGNvdW50KSBjb25zdAogeworICAgIGFzc2VydElzQ3VycmVudChtX293bmVy
VGhyZWFkKTsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGF1dG8mIGNvbXBsZXhHbHlwaHMg
PSBnbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0KCk7CiAgICAgaWYgKCFjb21wbGV4R2x5cGhz
Lmhhc1JlbGV2YW50VGFibGVzKCkpCg==
</data>
<flag name="commit-queue"
          id="471649"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>