<?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>150767</bug_id>
          
          <creation_ts>2015-10-31 23:17:03 -0700</creation_ts>
          <short_desc>Clean up some CSS &amp; Font code</short_desc>
          <delta_ts>2015-12-04 14:45:19 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>kling</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1138276</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-10-31 23:17:03 -0700</bug_when>
    <thetext>Clean up some CSS &amp; Font code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138277</commentid>
    <comment_count>1</comment_count>
      <attachid>264507</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-10-31 23:19:12 -0700</bug_when>
    <thetext>Created attachment 264507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138346</commentid>
    <comment_count>2</comment_count>
      <attachid>264507</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-01 12:33:12 -0800</bug_when>
    <thetext>Comment on attachment 264507
Patch

GTK and EFL build failure is:

Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp:118:18: error: prototype for &apos;WTF::PassRefPtr&lt;WebCore::Font&gt; WebCore::Font::platformCreateScaledFont(const WebCore::FontDescription&amp;, float) const&apos; does not match any in class &apos;WebCore::Font&apos;

Windows build failure is:

Source\WebCore\platform\graphics\win\SimpleFontDataWin.cpp(126): error C2556: &apos;WTF::PassRefPtr&lt;T&gt; WebCore::Font::platformCreateScaledFont(const WebCore::FontDescription &amp;,float) const&apos;: overloaded function differs only by return type from &apos;WTF::RefPtr&lt;WebCore::Font&gt; WebCore::Font::platformCreateScaledFont(const WebCore::FontDescription &amp;,float) const&apos; [C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138348</commentid>
    <comment_count>3</comment_count>
      <attachid>264507</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-01 12:38:53 -0800</bug_when>
    <thetext>Comment on attachment 264507
Patch

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

Changes look OK, but I think you can do even better.

&gt; Source/WebCore/css/CSSFontSelector.cpp:206
&gt; +            Settings* settings = document ? document-&gt;frame() ? &amp;document-&gt;frame()-&gt;settings() : nullptr : nullptr;

No need to go through the frame:

    Settings* settings = document ? document-&gt;settings() : nullptr;

On a separate note, what caller actually calls this with null for the document?

&gt; Source/WebCore/css/RuleSet.cpp:365
&gt; -    const Vector&lt;RefPtr&lt;StyleRuleImport&gt;&gt;&amp; importRules = sheet-&gt;importRules();
&gt; +    const Vector&lt;RefPtr&lt;StyleRuleImport&gt;&gt;&amp; importRules = sheet.importRules();
&gt;      for (unsigned i = 0; i &lt; importRules.size(); ++i) {
&gt;          StyleRuleImport* importRule = importRules[i].get();

At first, I thought you should use auto&amp;, but really thus should be a modern for loop:

    for (auto&amp; rule : sheet.importRules()) {

&gt; Source/WebCore/platform/graphics/Font.cpp:268
&gt; +RefPtr&lt;Font&gt; Font::verticalRightOrientationFont() const

Seems to me this should return Font&amp; or possible const Font&amp;, not RefPtr&lt;Font&gt;. It can’t be null, and this function does not create a new object and transfer ownership to the caller.

&gt; Source/WebCore/platform/graphics/Font.cpp:281
&gt; +RefPtr&lt;Font&gt; Font::uprightOrientationFont() const

Seems to me this should return Font&amp; or possibly const Font&amp;, not RefPtr&lt;Font&gt;. It can’t be null, and this function does not create a new object and transfer ownership to the caller. If I am wrong about null, then maybe Font* or const Font*.

&gt; Source/WebCore/platform/graphics/Font.cpp:291
&gt; +RefPtr&lt;Font&gt; Font::smallCapsFont(const FontDescription&amp; fontDescription) const

Ditto.

&gt; Source/WebCore/platform/graphics/Font.cpp:301
&gt; +RefPtr&lt;Font&gt; Font::emphasisMarkFont(const FontDescription&amp; fontDescription) const

Ditto.

&gt; Source/WebCore/platform/graphics/Font.cpp:311
&gt; +RefPtr&lt;Font&gt; Font::brokenIdeographFont() const

Ditto.

&gt; Source/WebCore/platform/graphics/Font.cpp:323
&gt; +RefPtr&lt;Font&gt; Font::nonSyntheticItalicFont() const

Ditto.

&gt; Source/WebCore/platform/graphics/Font.cpp:366
&gt; +RefPtr&lt;Font&gt; Font::createScaledFont(const FontDescription&amp; fontDescription, float scaleFactor) const

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138374</commentid>
    <comment_count>4</comment_count>
      <attachid>264507</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-11-01 14:43:01 -0800</bug_when>
    <thetext>Comment on attachment 264507
Patch

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

&gt;&gt; Source/WebCore/css/CSSFontSelector.cpp:206
&gt;&gt; +            Settings* settings = document ? document-&gt;frame() ? &amp;document-&gt;frame()-&gt;settings() : nullptr : nullptr;
&gt; 
&gt; No need to go through the frame:
&gt; 
&gt;     Settings* settings = document ? document-&gt;settings() : nullptr;
&gt; 
&gt; On a separate note, what caller actually calls this with null for the document?

The lifetime of the font selector is the same as the style resolver, which can outlive the document.

&gt;&gt; Source/WebCore/platform/graphics/Font.cpp:291
&gt;&gt; +RefPtr&lt;Font&gt; Font::smallCapsFont(const FontDescription&amp; fontDescription) const
&gt; 
&gt; Ditto.

Unfortunately, createScaledFont() can return nullptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138385</commentid>
    <comment_count>5</comment_count>
      <attachid>264535</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-11-01 14:50:50 -0800</bug_when>
    <thetext>Created attachment 264535
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138421</commentid>
    <comment_count>6</comment_count>
      <attachid>264535</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-01 16:53:37 -0800</bug_when>
    <thetext>Comment on attachment 264535
Patch for committing

Clearing flags on attachment: 264535

Committed r191871: &lt;http://trac.webkit.org/changeset/191871&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146413</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-12-04 14:45:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/23767722&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264507</attachid>
            <date>2015-10-31 23:19:12 -0700</date>
            <delta_ts>2015-11-01 12:38:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150767-20151031231818.patch</filename>
            <type>text/plain</type>
            <size>24788</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjZiYTNlZWU5NWRkNzk5
M2U0NzY5ODZlNWY3MDFlMTFlNGNkMjQ3NC4uMjUxNTI5ZTc1NjY5YThlYTdhNDhhMzE3NTVhODQz
MjNkNWQ3NGZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE1LTEwLTMxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAg
c29tZSBDU1MgJiBGb250IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDc2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWlncmF0ZXMgc29tZSBDU1MgY29kZSB0byB1c2UgcmVm
ZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAgICAgICBJdCBhbHNvIG1pZ3JhdGVzIHNv
bWUgRm9udCBjb2RlIHRvIHVzZSBSZWZQdHIgaW5zdGVhZCBvZiBQYXNzUmVmUHRyLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKwor
ICAgICAgICAqIGNzcy9DU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpsb2FkRnVsbERlZmF1bHRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmxvYWRTaW1wbGVEZWZhdWx0U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0
U3R5bGVTaGVldHNGb3JFbGVtZW50KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTRm9u
dFNlbGVjdG9yLmg6CisgICAgICAgICogY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6aW5pdFVzZXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxl
U2hlZXRzKToKKyAgICAgICAgKiBjc3MvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
dWxlU2V0OjphZGRDaGlsZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1
bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOgorICAgICAgICAqIGNzcy9T
dHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6dmVy
dGljYWxSaWdodE9yaWVudGF0aW9uRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp1cHJp
Z2h0T3JpZW50YXRpb25Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNtYWxsQ2Fwc0Zv
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZW1waGFzaXNNYXJrRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Ojpicm9rZW5JZGVvZ3JhcGhGb250KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6Om5vblN5bnRoZXRpY0l0YWxpY0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
Y3JlYXRlU2NhbGVkRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6dmFyaWFudEZvbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBs
YXRmb3JtQ3JlYXRlU2NhbGVkRm9udCk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVu
dC5oOgorCiAyMDE1LTEwLTMxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRiZGF0YWJhc2UtZGVsZXRlb2JqZWN0
c3RvcmUtZmFpbHVyZXMuaHRtbCBpcyBmbGFreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Rl
ZmF1bHRTdHlsZVNoZWV0cy5jcHAKaW5kZXggMjgzZWZhY2QwMTg0NmY1YTlmZGYxYTk3NTFlYjUy
YzVjNzNjYTkwNy4uMzBjNGY1NmE5OWI4NzY2ODU0ODM4NmUxNTA1MDUwYmUzMDBlYzUzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0RlZmF1bHRTdHlsZVNoZWV0cy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0RlZmF1bHRTdHlsZVNoZWV0cy5jcHAKQEAgLTEyNywx
MyArMTI3LDEzIEBAIHZvaWQgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpsb2FkRnVsbERlZmF1bHRT
dHlsZSgpCiAgICAgLy8gU3RyaWN0LW1vZGUgcnVsZXMuCiAgICAgU3RyaW5nIGRlZmF1bHRSdWxl
cyA9IFN0cmluZyhodG1sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKGh0bWxVc2VyQWdlbnRT
dHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJhRGVmYXVsdFN0
eWxlU2hlZXQoKTsKICAgICBkZWZhdWx0U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChkZWZhdWx0
UnVsZXMpOwotICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZGVmYXVsdFN0eWxl
U2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0gICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJv
bVNoZWV0KGRlZmF1bHRTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CisgICAgZGVmYXVsdFN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldCgqZGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Cisg
ICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpkZWZhdWx0U3R5bGVTaGVl
dCwgcHJpbnRFdmFsKCkpOwogCiAgICAgLy8gUXVpcmtzLW1vZGUgcnVsZXMuCiAgICAgU3RyaW5n
IHF1aXJrc1J1bGVzID0gU3RyaW5nKHF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihx
dWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkt
PmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpOwogICAgIHF1aXJrc1N0eWxlU2hlZXQgPSBwYXJzZVVB
U2hlZXQocXVpcmtzUnVsZXMpOwotICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9t
U2hlZXQocXVpcmtzU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKKyAgICBkZWZhdWx0UXVpcmtz
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpxdWlya3NTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkp
OwogfQogCiB2b2lkIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6bG9hZFNpbXBsZURlZmF1bHRTdHls
ZSgpCkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmxvYWRT
aW1wbGVEZWZhdWx0U3R5bGUoKQogICAgIGRlZmF1bHRRdWlya3NTdHlsZSA9IHN0ZDo6bWFrZV91
bmlxdWU8UnVsZVNldD4oKS5yZWxlYXNlKCk7CiAKICAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVl
dCA9IHBhcnNlVUFTaGVldChzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0LCBzdHJsZW4oc2ltcGxl
VXNlckFnZW50U3R5bGVTaGVldCkpOwotICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgZGVmYXVsdFN0
eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2
YWwoKSk7CiAKICAgICAvLyBObyBuZWVkIHRvIGluaXRpYWxpemUgcXVpcmtzIHNoZWV0IHlldCBh
cyB0aGVyZSBhcmUgbm8gcXVpcmsgcnVsZXMgZm9yIGVsZW1lbnRzIGFsbG93ZWQgaW4gc2ltcGxl
IGRlZmF1bHQgc3R5bGUuCiB9CkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBDU1NEZWZhdWx0U3R5
bGVTaGVldHM6OmVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoRWxlbWVudCYgZWxl
bWVudCwKICAgICAgICAgICAgICAgICBpZiAocGx1Z0luc1J1bGVzLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICAgICAgcGx1Z0luc1J1bGVzID0gU3RyaW5nKHBsdWdJbnNVc2VyQWdlbnRTdHls
ZVNoZWV0LCBzaXplb2YocGx1Z0luc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKICAgICAgICAgICAg
ICAgICBwbHVnSW5zU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChwbHVnSW5zUnVsZXMpOwotICAg
ICAgICAgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGx1Z0luc1N0eWxl
U2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgICAgICAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRS
dWxlc0Zyb21TaGVldCgqcGx1Z0luc1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CiAgICAgICAg
ICAgICAgICAgY2hhbmdlZERlZmF1bHRTdHlsZSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTE3Nyw4ICsxNzcsOCBAQCB2b2lkIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZW5z
dXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LAogICAgICAg
ICAgICAgICAgIGlmIChtZWRpYVJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAg
bWVkaWFSdWxlcyA9IFN0cmluZyhtZWRpYUNvbnRyb2xzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKG1lZGlhQ29udHJvbHNVc2VyQWdlbnRTdHlsZVNoZWV0KSkgKyBSZW5kZXJUaGVtZTo6dGhl
bWVGb3JQYWdlKGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkpLT5leHRyYU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KCk7CiAgICAgICAgICAgICAgICAgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQgPSBw
YXJzZVVBU2hlZXQobWVkaWFSdWxlcyk7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdFN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWVk
aWFDb250cm9sc1N0eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKKyAgICAgICAgICAgICAgICBkZWZh
dWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCptZWRpYUNvbnRyb2xzU3R5bGVTaGVldCwgc2Ny
ZWVuRXZhbCgpKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNG
cm9tU2hlZXQoKm1lZGlhQ29udHJvbHNTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CiAgICAgICAg
ICAgICAgICAgY2hhbmdlZERlZmF1bHRTdHlsZSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTE4OCw4ICsxODgsOCBAQCB2b2lkIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZW5z
dXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LAogICAgICAg
ICAgICAgaWYgKCFpbWFnZUNvbnRyb2xzU3R5bGVTaGVldCkgewogICAgICAgICAgICAgICAgIFN0
cmluZyBpbWFnZUNvbnRyb2xzUnVsZXMgPSBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKGVsZW1l
bnQuZG9jdW1lbnQoKS5wYWdlKCkpLT5pbWFnZUNvbnRyb2xzU3R5bGVTaGVldCgpOwogICAgICAg
ICAgICAgICAgIGltYWdlQ29udHJvbHNTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KGltYWdlQ29u
dHJvbHNSdWxlcyk7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChpbWFnZUNvbnRyb2xzU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKLSAgICAgICAgICAg
ICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoaW1hZ2VDb250cm9sc1N0
eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0U3R5bGUtPmFk
ZFJ1bGVzRnJvbVNoZWV0KCppbWFnZUNvbnRyb2xzU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKmlt
YWdlQ29udHJvbHNTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CiAgICAgICAgICAgICAgICAgY2hh
bmdlZERlZmF1bHRTdHlsZSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE5
OCw4ICsxOTgsOCBAQCB2b2lkIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZW5zdXJlRGVmYXVsdFN0
eWxlU2hlZXRzRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LAogICAgICAgICBpZiAoIXN2Z1N0
eWxlU2hlZXQpIHsKICAgICAgICAgICAgIC8vIFNWRyBydWxlcy4KICAgICAgICAgICAgIHN2Z1N0
eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQoc3ZnVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHN2
Z1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLSAgICAgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQoc3ZnU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKLSAgICAgICAgICAgIGRl
ZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdmdTdHlsZVNoZWV0LCBwcmludEV2
YWwoKSk7CisgICAgICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpzdmdT
dHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAgICAgICAgZGVmYXVsdFByaW50U3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KCpzdmdTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CiAgICAgICAg
ICAgICBjaGFuZ2VkRGVmYXVsdFN0eWxlID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTIw
OCw4ICsyMDgsOCBAQCB2b2lkIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZW5zdXJlRGVmYXVsdFN0
eWxlU2hlZXRzRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LAogICAgICAgICBpZiAoIW1hdGhN
TFN0eWxlU2hlZXQpIHsKICAgICAgICAgICAgIC8vIE1hdGhNTCBydWxlcy4KICAgICAgICAgICAg
IG1hdGhNTFN0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQobWF0aG1sVXNlckFnZW50U3R5bGVTaGVl
dCwgc2l6ZW9mKG1hdGhtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLSAgICAgICAgICAgIGRlZmF1
bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWF0aE1MU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgp
KTsKLSAgICAgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtYXRo
TUxTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CisgICAgICAgICAgICBkZWZhdWx0U3R5bGUtPmFk
ZFJ1bGVzRnJvbVNoZWV0KCptYXRoTUxTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAg
ICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCptYXRoTUxTdHlsZVNo
ZWV0LCBwcmludEV2YWwoKSk7CiAgICAgICAgICAgICBjaGFuZ2VkRGVmYXVsdFN0eWxlID0gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxOSw4ICsyMTksOCBAQCB2b2lkIENTU0RlZmF1bHRT
dHlsZVNoZWV0czo6ZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVudChFbGVtZW50JiBl
bGVtZW50LAogICAgIGlmICghZnVsbHNjcmVlblN0eWxlU2hlZXQgJiYgZWxlbWVudC5kb2N1bWVu
dCgpLndlYmtpdElzRnVsbFNjcmVlbigpKSB7CiAgICAgICAgIFN0cmluZyBmdWxsc2NyZWVuUnVs
ZXMgPSBTdHJpbmcoZnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihmdWxsc2Ny
ZWVuVXNlckFnZW50U3R5bGVTaGVldCkpICsgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5l
eHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCk7CiAgICAgICAgIGZ1bGxzY3JlZW5TdHlsZVNoZWV0
ID0gcGFyc2VVQVNoZWV0KGZ1bGxzY3JlZW5SdWxlcyk7Ci0gICAgICAgIGRlZmF1bHRTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQoZnVsbHNjcmVlblN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0g
ICAgICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZnVsbHNjcmVlblN0
eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNG
cm9tU2hlZXQoKmZ1bGxzY3JlZW5TdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAgICBk
ZWZhdWx0UXVpcmtzU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpmdWxsc2NyZWVuU3R5bGVTaGVl
dCwgc2NyZWVuRXZhbCgpKTsKICAgICAgICAgY2hhbmdlZERlZmF1bHRTdHlsZSA9IHRydWU7CiAg
ICAgfQogI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggYjg2OGU4NDhhODQ2M2M5YjM0MzZlOWI3ZTYyZmMyNjhm
MTg4NTRiNS4uYjNiYjM4ZTk5YTE5ZGQxYWQ2NTc2OGFkN2ZkZjQzNTdjMWU1OGVhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTE3OCwxMyArMTc4LDEzIEBAIHN0
YXRpYyBPcHRpb25hbDxGb250VHJhaXRzTWFzaz4gY29tcHV0ZVRyYWl0c01hc2soY29uc3QgU3R5
bGVQcm9wZXJ0aWVzJiBzdHlsZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01h
c2s+KHRyYWl0c01hc2spOwogfQogCi1zdGF0aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGVGb250
RmFjZShDU1NWYWx1ZUxpc3QmIHNyY0xpc3QsIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2ssIERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSwg
Ym9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQorc3RhdGljIFJl
ZjxDU1NGb250RmFjZT4gY3JlYXRlRm9udEZhY2UoQ1NTVmFsdWVMaXN0JiBzcmNMaXN0LCBGb250
VHJhaXRzTWFzayB0cmFpdHNNYXNrLCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0eWxlUnVs
ZUZvbnRGYWNlJiBmb250RmFjZVJ1bGUsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFn
ZW50U2hhZG93VHJlZSkKIHsKICAgICBSZWZQdHI8Q1NTRm9udEZhY2VSdWxlPiBydWxlOwogI2lm
IEVOQUJMRShGT05UX0xPQURfRVZFTlRTKQogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyMTE2IC0gVGhpcyBDU1NGb250RmFjZVJ1bGUgaGFz
IG5vIHBhcmVudC4KICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5mb250TG9hZEV2ZW50c0VuYWJsZWQoKSkKLSAgICAgICAgcnVsZSA9IHN0YXRpY19wb2lu
dGVyX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlPihmb250RmFjZVJ1bGUtPmNyZWF0ZUNTU09NV3JhcHBl
cigpKTsKKyAgICAgICAgcnVsZSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q1NTRm9udEZhY2VSdWxl
Pihmb250RmFjZVJ1bGUuY3JlYXRlQ1NTT01XcmFwcGVyKCkpOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oZm9udEZhY2VSdWxlKTsKICNlbmRpZgpAQCAtMjAzLDcgKzIwMyw3IEBAIHN0YXRpYyBS
ZWY8Q1NTRm9udEZhY2U+IGNyZWF0ZUZvbnRGYWNlKENTU1ZhbHVlTGlzdCYgc3JjTGlzdCwgRm9u
dFRyYWl0c01hc2sgdHJhCiAgICAgICAgIGZvdW5kU1ZHRm9udCA9IGl0ZW0uaXNTVkdGb250RmFj
ZVNyYygpIHx8IGl0ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCk7CiAjZW5kaWYKICAgICAgICAgaWYg
KCFpdGVtLmlzTG9jYWwoKSkgewotICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9j
dW1lbnQgPyBkb2N1bWVudC0+ZnJhbWUoKSA/ICZkb2N1bWVudC0+ZnJhbWUoKS0+c2V0dGluZ3Mo
KSA6IDAgOiAwOworICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQgPyBk
b2N1bWVudC0+ZnJhbWUoKSA/ICZkb2N1bWVudC0+ZnJhbWUoKS0+c2V0dGluZ3MoKSA6IG51bGxw
dHIgOiBudWxscHRyOwogICAgICAgICAgICAgYm9vbCBhbGxvd0Rvd25sb2FkaW5nID0gZm91bmRT
VkdGb250IHx8IChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+ZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNF
bmFibGVkKCkpOwogICAgICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRpbmcgJiYgaXRlbS5pc1N1
cHBvcnRlZEZvcm1hdCgpICYmIGRvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAgQ2FjaGVkRm9u
dCogY2FjaGVkRm9udCA9IGl0ZW0uY2FjaGVkRm9udChkb2N1bWVudCwgZm91bmRTVkdGb250LCBp
c0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKQEAgLTI3Nyw5ICsyNzcs
OSBAQCBzdGF0aWMgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+IGNvbnN0cnVjdEZhbWlseUZvbnRG
YWNlcyhjb25zdCBTdHJpbmcmIGZhbWlseU5hbQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZh
Y2UqIGZvbnRGYWNlUnVsZSwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFk
b3dUcmVlKQordm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHls
ZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxlLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVz
ZXJBZ2VudFNoYWRvd1RyZWUpCiB7Ci0gICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSA9
IGZvbnRGYWNlUnVsZS0+cHJvcGVydGllcygpOworICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyYg
c3R5bGUgPSBmb250RmFjZVJ1bGUucHJvcGVydGllcygpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4g
Zm9udEZhbWlseSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFt
aWx5KTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHNyYyA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlTcmMpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZVJhbmdlID0g
c3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVSYW5nZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKaW5kZXggYzFhZDk1NTllM2RhNDhhOGU3YjhjMTQ2
NWU4Njg0OTc5MzI4MWZlYy4uNmYxMzBmNzU4YTk3NjM5NWU3OTFjM2YyNDRiYjcwZTUzZWQ3MDM4
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaApAQCAtNjYsNyArNjYsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGNsZWFyRG9jdW1lbnQoKTsKIAotICAgIHZvaWQgYWRkRm9udEZh
Y2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKKyAgICB2b2lkIGFkZEZvbnRGYWNlUnVsZShjb25zdCBT
dHlsZVJ1bGVGb250RmFjZSYsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hh
ZG93VHJlZSk7CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZm9u
dENhY2hlSW52YWxpZGF0ZWQoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1
bGVTZXRzLmNwcAppbmRleCA0NGFhNTk4ZjNiOGNhMmVjODE2ZDA2N2YwMDRlZGEzZDY2NTc3ZWQ3
Li5iNWY5MGM2MWNiMjE4YjllNjg2ODQ3ZDEzOWEwZjgxM2RiNjE5NGI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgRG9jdW1l
bnRSdWxlU2V0czo6aW5pdFVzZXJTdHlsZShFeHRlbnNpb25TdHlsZVNoZWV0cyYgZXh0ZW5zaW9u
U3R5bGVTaGVldHMsCiB7CiAgICAgYXV0byB0ZW1wVXNlclN0eWxlID0gc3RkOjptYWtlX3VuaXF1
ZTxSdWxlU2V0PigpOwogICAgIGlmIChDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0ID0gZXh0
ZW5zaW9uU3R5bGVTaGVldHMucGFnZVVzZXJTaGVldCgpKQotICAgICAgICB0ZW1wVXNlclN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldCgmcGFnZVVzZXJTaGVldC0+Y29udGVudHMoKSwgbWVkaXVtLCAm
cmVzb2x2ZXIpOworICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdl
VXNlclNoZWV0LT5jb250ZW50cygpLCBtZWRpdW0sICZyZXNvbHZlcik7CiAgICAgY29sbGVjdFJ1
bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJT
dHlsZVNoZWV0cygpLCAqdGVtcFVzZXJTdHlsZSwgbWVkaXVtLCByZXNvbHZlcik7CiAgICAgY29s
bGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5kb2N1bWVu
dFVzZXJTdHlsZVNoZWV0cygpLCAqdGVtcFVzZXJTdHlsZSwgbWVkaXVtLCByZXNvbHZlcik7CiAg
ICAgaWYgKHRlbXBVc2VyU3R5bGUtPnJ1bGVDb3VudCgpID4gMCB8fCB0ZW1wVXNlclN0eWxlLT5w
YWdlUnVsZXMoKS5zaXplKCkgPiAwKQpAQCAtNjEsNyArNjEsNyBAQCB2b2lkIERvY3VtZW50UnVs
ZVNldHM6OmNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0
cjxDU1NTdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VyU2hlZXRzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIEFTU0VSVCh1c2VyU2hlZXRzW2ldLT5jb250ZW50cygpLmlzVXNl
clN0eWxlU2hlZXQoKSk7Ci0gICAgICAgIHVzZXJTdHlsZS5hZGRSdWxlc0Zyb21TaGVldCgmdXNl
clNoZWV0c1tpXS0+Y29udGVudHMoKSwgbWVkaXVtLCAmcmVzb2x2ZXIpOworICAgICAgICB1c2Vy
U3R5bGUuYWRkUnVsZXNGcm9tU2hlZXQodXNlclNoZWV0c1tpXS0+Y29udGVudHMoKSwgbWVkaXVt
LCAmcmVzb2x2ZXIpOwogICAgIH0KIH0KIApAQCAtOTEsNyArOTEsNyBAQCB2b2lkIERvY3VtZW50
UnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NT
U3R5bGVTaGVldAogICAgICAgICBBU1NFUlQoIWNzc1NoZWV0LT5kaXNhYmxlZCgpKTsKICAgICAg
ICAgaWYgKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaXVtLT5ldmFsKGNzc1NoZWV0
LT5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCZjc3NTaGVldC0+Y29udGVudHMo
KSwgKm1lZGl1bSwgcmVzb2x2ZXIpOworICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zy
b21TaGVldChjc3NTaGVldC0+Y29udGVudHMoKSwgKm1lZGl1bSwgcmVzb2x2ZXIpOwogICAgICAg
ICBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNvbGxlY3RGcm9tU3R5bGVTaGVldElmTmVlZGVkKGNz
c1NoZWV0LmdldCgpKTsKICAgICB9CiAgICAgbV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9SdWxlU2V0LmNwcAppbmRleCBiNGFmMTA4ZjA4MzdmYmI1YTk2ODQwNGRkMjMwZGMx
NzZlMzE2NDc3Li5mMDg4NDZjYjBmMTMzMjY0OTg4ZDBjNjRmMGY5MGE4MWY5NTUzZjIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1J1bGVTZXQuY3BwCkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBSdWxlU2V0OjphZGRD
aGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBydWxlcywgY29u
c3QgTWUKICAgICAgICAgICAgICAgICBhZGRDaGlsZFJ1bGVzKG1lZGlhUnVsZS5jaGlsZFJ1bGVz
KCksIG1lZGl1bSwgcmVzb2x2ZXIsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGlzSW5pdGlh
dGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUsIGFkZFJ1bGVGbGFncyk7CiAgICAgICAg
IH0gZWxzZSBpZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KCpydWxlKSAmJiByZXNvbHZlcikgewog
ICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCi0gICAgICAgICAg
ICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5hZGRGb250RmFjZVJ1bGUoZG93
bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUuZ2V0KCkpLCBpc0luaXRpYXRpbmdFbGVtZW50
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKKyAgICAgICAgICAgIHJlc29sdmVyLT5kb2N1bWVudCgp
LmZvbnRTZWxlY3RvcigpLmFkZEZvbnRGYWNlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250RmFj
ZT4oKnJ1bGUuZ2V0KCkpLCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVl
KTsKICAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZSgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzPFN0eWxlUnVsZUtleWZyYW1lcz4oKnJ1bGUpICYm
IHJlc29sdmVyKQogICAgICAgICAgICAgcmVzb2x2ZXItPmFkZEtleWZyYW1lU3R5bGUoZG93bmNh
c3Q8U3R5bGVSdWxlS2V5ZnJhbWVzPihydWxlLmdldCgpKSk7CkBAIC0zNTgsMjQgKzM1OCwyMiBA
QCB2b2lkIFJ1bGVTZXQ6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1
bGVCYXNlPj4mIHJ1bGVzLCBjb25zdCBNZQogICAgIH0KIH0KIAotdm9pZCBSdWxlU2V0OjphZGRS
dWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5
RXZhbHVhdG9yJiBtZWRpdW0sIFN0eWxlUmVzb2x2ZXIqIHJlc29sdmVyKQordm9pZCBSdWxlU2V0
OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIFN0eWxlUmVzb2x2ZXIqIHJlc29sdmVyKQogewotICAg
IEFTU0VSVChzaGVldCk7Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUltcG9y
dD4+JiBpbXBvcnRSdWxlcyA9IHNoZWV0LT5pbXBvcnRSdWxlcygpOworICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0Pj4mIGltcG9ydFJ1bGVzID0gc2hlZXQuaW1wb3J0UnVs
ZXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgU3R5bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0gaW1wb3J0UnVsZXNb
aV0uZ2V0KCk7CiAgICAgICAgIGlmIChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFpbXBv
cnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnRSdWxlLT5tZWRpYVF1
ZXJpZXMoKSwgcmVzb2x2ZXIpKSkKLSAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9y
dFJ1bGUtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCByZXNvbHZlcik7CisgICAgICAgICAgICBhZGRS
dWxlc0Zyb21TaGVldCgqaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHJlc29sdmVy
KTsKICAgICB9CiAKLSAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSByZXNvbHZl
ciAmJiByZXNvbHZlci0+ZG9jdW1lbnQoKS5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHNo
ZWV0LT5iYXNlVVJMKCkpOworICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9IHJl
c29sdmVyICYmIHJlc29sdmVyLT5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVl
c3Qoc2hlZXQuYmFzZVVSTCgpKTsKICAgICBBZGRSdWxlRmxhZ3MgYWRkUnVsZUZsYWdzID0gc3Rh
dGljX2Nhc3Q8QWRkUnVsZUZsYWdzPigoaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVI
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMCkpOwogCiAgICAgLy8gRklYTUU6IFNraXAgQ29u
dGVudCBTZWN1cml0eSBQb2xpY3kgY2hlY2sgd2hlbiBzdHlsZXNoZWV0IGlzIGluIGEgdXNlciBh
Z2VudCBzaGFkb3cgdHJlZS4KICAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDY2NjM+LgogICAgIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNl
ckFnZW50U2hhZG93VHJlZSA9IGZhbHNlOwotICAgIGFkZENoaWxkUnVsZXMoc2hlZXQtPmNoaWxk
UnVsZXMoKSwgbWVkaXVtLCByZXNvbHZlciwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgaXNJ
bml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSwgYWRkUnVsZUZsYWdzKTsKKyAg
ICBhZGRDaGlsZFJ1bGVzKHNoZWV0LmNoaWxkUnVsZXMoKSwgbWVkaXVtLCByZXNvbHZlciwgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hh
ZG93VHJlZSwgYWRkUnVsZUZsYWdzKTsKIAogICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJs
ZWQpCiAgICAgICAgIHNocmlua1RvRml0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvUnVsZVNldC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaAppbmRleCAyYzc0NTRl
ODM2N2RmNjA0OGJmMzhlN2I1MDMyNGY1ZTAzMDRkYzhjLi4zZTYxOTBhOGFjNDBlYmNkYTA1M2Uy
YzE5NDBjNTVhODdlNWJlYzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmgKQEAgLTE1OSw3ICsxNTksNyBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiBWZWN0b3I8UnVsZURhdGEsIDE+IFJ1bGVEYXRhVmVjdG9y
OwogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgc3RkOjp1bmlxdWVfcHRy
PFJ1bGVEYXRhVmVjdG9yPj4gQXRvbVJ1bGVNYXA7CiAKLSAgICB2b2lkIGFkZFJ1bGVzRnJvbVNo
ZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBTdHls
ZVJlc29sdmVyKiA9IDApOworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENv
bnRlbnRzJiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXIqID0gMCk7
CiAKICAgICB2b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqLCBBZGRSdWxlRmxhZ3MpOwogICAg
IHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBBZGRSdWxl
RmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlz
aXMuY3BwCmluZGV4IDJiOTBiMjMyMTQ1YmY5ZWNiZDE0YmZjYmUxMWY5ZDI4ZDQ2Mjg1YTcuLjdj
MjAzMGM2NWM0NDEzNTFiNTQ0MTU0ZmJhOTAxODQ2YmFlNDA1YzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAKQEAgLTgyLDcgKzgyLDcg
QEAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyhj
b25zdCBWZWN0b3I8U3R5bGVTaGVldENvbnQKIAogICAgIG1fcnVsZVNldHMucmVzZXRBdXRob3JT
dHlsZSgpOwogICAgIGZvciAoYXV0byYgc2hlZXQgOiBzaGVldHMpCi0gICAgICAgIG1fcnVsZVNl
dHMuYXV0aG9yU3R5bGUoKS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsIG1lZGlhUXVlcnlFdmFs
dWF0b3IpOworICAgICAgICBtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCktPmFkZFJ1bGVzRnJvbVNo
ZWV0KCpzaGVldCwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAKICAgICBtX2hhc1NoYWRvd1BzZXVk
b0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQgPSBtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCktPmhh
c1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmNwcAppbmRleCA1MDY1NDRkNjgzMDg5ZGUwZWQ5YWUzMGE1ZmRmMDAwNGEw
ZjNiOThlLi5lZjcwMTExNzBiYzc4YzVjYjA2NTA0NmQ0ZmQ1Y2ViYzI1MzNjY2ExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtMjY1LDcgKzI2NSw3IEBA
IEdseXBoRGF0YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIp
IGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIp
OwogfQogCi1QYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZv
bnQoKSBjb25zdAorUmVmUHRyPEZvbnQ+IEZvbnQ6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZv
bnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVkRm9udERhdGE+KGlzQ3VzdG9t
Rm9udCgpKTsKQEAgLTI3OCw3ICsyNzgsNyBAQCBQYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnZlcnRp
Y2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAogICAgIHJldHVybiBtX2Rlcml2ZWRGb250
RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uOwogfQogCi1QYXNzUmVmUHRyPEZvbnQ+IEZv
bnQ6OnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAorUmVmUHRyPEZvbnQ+IEZvbnQ6OnVw
cmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxEZXJpdmVk
Rm9udERhdGE+KGlzQ3VzdG9tRm9udCgpKTsKQEAgLTI4OCw3ICsyODgsNyBAQCBQYXNzUmVmUHRy
PEZvbnQ+IEZvbnQ6OnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdAogICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uOwogfQogCi1QYXNzUmVmUHRyPEZv
bnQ+IEZvbnQ6OnNtYWxsQ2Fwc0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pIGNvbnN0CitSZWZQdHI8Rm9udD4gRm9udDo6c21hbGxDYXBzRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CkBAIC0yOTgsNyArMjk4LDcgQEAgUGFz
c1JlZlB0cjxGb250PiBGb250OjpzbWFsbENhcHNGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSBjb24KICAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxs
Q2FwczsKIH0KIAotUGFzc1JlZlB0cjxGb250PiBGb250OjplbXBoYXNpc01hcmtGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUmVmUHRyPEZvbnQ+IEZv
bnQ6OmVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21G
b250KCkpOwpAQCAtMzA4LDcgKzMwOCw3IEBAIFBhc3NSZWZQdHI8Rm9udD4gRm9udDo6ZW1waGFz
aXNNYXJrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKICAgICBy
ZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0KIAotUGFzc1JlZlB0cjxG
b250PiBGb250Ojpicm9rZW5JZGVvZ3JhcGhGb250KCkgY29uc3QKK1JlZlB0cjxGb250PiBGb250
Ojpicm9rZW5JZGVvZ3JhcGhGb250KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZl
ZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CkBAIC0zMjAsNyArMzIwLDcgQEAgUGFzc1JlZlB0
cjxGb250PiBGb250Ojpicm9rZW5JZGVvZ3JhcGhGb250KCkgY29uc3QKICAgICByZXR1cm4gbV9k
ZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKIH0KIAotUGFzc1JlZlB0cjxGb250PiBG
b250Ojpub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29uc3QKK1JlZlB0cjxGb250PiBGb250Ojpu
b25TeW50aGV0aWNJdGFsaWNGb250KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZl
ZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CkBAIC0zNjMsNyArMzYzLDcgQEAgRm9udDo6RGVy
aXZlZEZvbnREYXRhOjp+RGVyaXZlZEZvbnREYXRhKCkKIHsKIH0KIAotUGFzc1JlZlB0cjxGb250
PiBGb250OjpjcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1JlZlB0cjxGb250PiBGb250OjpjcmVh
dGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNTVkdGb250KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4
IGJjNzhlZmYzNGY1Njc5N2UwZDJhZTE0NWEwNDgzMTA2MGU2OGY0YTEuLjJiNjk4MzA3MGE4MDEw
MzQ0YTkyYTQ1NDE5ZmUxZDkwYTI3NjFkOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKQEAgLTEwMCwxMiArMTAwLDEyIEBAIHB1YmxpYzoKICAgICBjb25zdCBPcGVu
VHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNh
bERhdGEuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxGb250PiBzbWFsbENhcHNG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8Rm9udD4g
ZW1waGFzaXNNYXJrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBQYXNz
UmVmUHRyPEZvbnQ+IGJyb2tlbklkZW9ncmFwaEZvbnQoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRy
PEZvbnQ+IG5vblN5bnRoZXRpY0l0YWxpY0ZvbnQoKSBjb25zdDsKKyAgICBSZWZQdHI8Rm9udD4g
c21hbGxDYXBzRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBSZWZQdHI8
Rm9udD4gZW1waGFzaXNNYXJrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAg
ICBSZWZQdHI8Rm9udD4gYnJva2VuSWRlb2dyYXBoRm9udCgpIGNvbnN0OworICAgIFJlZlB0cjxG
b250PiBub25TeW50aGV0aWNJdGFsaWNGb250KCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPEZv
bnQ+IHZhcmlhbnRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRW
YXJpYW50IHZhcmlhbnQpIGNvbnN0CisgICAgUmVmUHRyPEZvbnQ+IHZhcmlhbnRGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpIGNvbnN0
CiAgICAgewogICAgICAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKICAgICAgICAgY2FzZSBTbWFsbENh
cHNWYXJpYW50OgpAQCAtMTIyLDggKzEyMiw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8Rm9udCo+KHRoaXMpOwogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8Rm9udD4gdmVy
dGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8Rm9udD4g
dXByaWdodE9yaWVudGF0aW9uRm9udCgpIGNvbnN0OworICAgIFJlZlB0cjxGb250PiB2ZXJ0aWNh
bFJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CisgICAgUmVmUHRyPEZvbnQ+IHVwcmlnaHRP
cmllbnRhdGlvbkZvbnQoKSBjb25zdDsKIAogICAgIGJvb2wgaGFzVmVydGljYWxHbHlwaHMoKSBj
b25zdCB7IHJldHVybiBtX2hhc1ZlcnRpY2FsR2x5cGhzOyB9CiAgICAgYm9vbCBpc1RleHRPcmll
bnRhdGlvbkZhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9pc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrOyB9CkBAIC0yMjgsOCArMjI4LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5pdENoYXJX
aWR0aHMoKTsKIAotICAgIFBhc3NSZWZQdHI8Rm9udD4gY3JlYXRlU2NhbGVkRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
ZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFJlZlB0cjxGb250PiBjcmVhdGVTY2FsZWRG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKKyAg
ICBSZWZQdHI8Rm9udD4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKIAogICAgIHZvaWQgcmVtb3ZlRnJvbVN5
c3RlbUZhbGxiYWNrQ2FjaGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCmluZGV4IGU5ODVmYmNjMDQ2NmY3YjFkNmJiODEz
ODY5YmVkNzI1Yzc5MmEwNmEuLjU1ZjM4NDI5YTRkNDRhOGNjNTE3NzNkNzI5YTMxYjAxMjVlNmE4
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q29jb2EubW0KQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJv
eSgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUmVm
UHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICNpZiAhQ09SRVRFWFRfV0VCX0ZP
TlRTCiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZh
Y2VFbGVtZW50LmgKaW5kZXggNTAwNDRmNTBmMGExNzA2NTg1M2Q5YmQ5MTY5YzJjYjlmYmExMWFm
Yy4uZDI4MjgzYTMzYjllMzVmNWI4YzMwNjRhZDY2ZjM3OGNmNjU2ODgwOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAg
ICAgU1ZHRm9udEVsZW1lbnQqIGFzc29jaWF0ZWRGb250RWxlbWVudCgpIGNvbnN0OwogICAgIHZv
aWQgcmVidWlsZEZvbnRGYWNlKCk7CiAgICAgCi0gICAgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRG
YWNlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udEZhY2VSdWxlLmdldCgpOyB9CisgICAgY29u
c3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dEZhY2VSdWxlLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwpAQCAtNjMsNyArNjMsNyBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUm
KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgUmVmUHRyPFN0eWxlUnVsZUZvbnRG
YWNlPiBtX2ZvbnRGYWNlUnVsZTsKKyAgICBSZWY8U3R5bGVSdWxlRm9udEZhY2U+IG1fZm9udEZh
Y2VSdWxlOwogICAgIFNWR0ZvbnRFbGVtZW50KiBtX2ZvbnRFbGVtZW50OwogfTsKIAo=
</data>
<flag name="review"
          id="289627"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264535</attachid>
            <date>2015-11-01 14:50:50 -0800</date>
            <delta_ts>2015-11-01 16:53:37 -0800</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-150767-20151101144955.patch</filename>
            <type>text/plain</type>
            <size>33589</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxODYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWViNzE5YTM4NTY2ZmZi
OTU5YTAyYWVmMDE3OGJlNWYzYTI3ZTc0ZC4uZmJjMTY1ZjAxZmI3OTY0YjNjYzdjZDQxMWRlMjA3
YzdjMjY3OTk3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE1LTExLTAxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAg
c29tZSBDU1MgJiBGb250IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDc2NworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggbWlncmF0ZXMgc29tZSBDU1MgY29kZSB0byB1c2UgcmVmZXJl
bmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAgICAgICBJdCBhbHNvIG1pZ3JhdGVzIHNvbWUg
Rm9udCBjb2RlIHRvIHVzZSBSZWZQdHIgaW5zdGVhZCBvZiBQYXNzUmVmUHRyLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAg
ICAgICAqIGNzcy9DU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpsb2FkRnVsbERlZmF1bHRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmxvYWRTaW1wbGVEZWZhdWx0U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5
bGVTaGVldHNGb3JFbGVtZW50KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNl
bGVjdG9yLmg6CisgICAgICAgICogY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0czo6aW5pdFVzZXJTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hl
ZXRzKToKKyAgICAgICAgKiBjc3MvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdWxl
U2V0OjphZGRDaGlsZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVz
RnJvbVNoZWV0KToKKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOgorICAgICAgICAqIGNzcy9TdHls
ZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxp
ZGF0aW9uQW5hbHlzaXM6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6dmVydGlj
YWxSaWdodE9yaWVudGF0aW9uRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp1cHJpZ2h0
T3JpZW50YXRpb25Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNtYWxsQ2Fwc0ZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZW1waGFzaXNNYXJrRm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Ojpicm9rZW5JZGVvZ3JhcGhGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6Om5vblN5bnRoZXRpY0l0YWxpY0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y3Jl
YXRlU2NhbGVkRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6dmFyaWFudEZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRm
b3JtQ3JlYXRlU2NhbGVkRm9udCk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5o
OgorCiAyMDE1LTExLTAxICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNb3ZlIHRoZSBSZXNvdXJjZVVzYWdlT3ZlcmxheSBvdXQgb2YgdGhlIHdheSBieSBkZWZh
dWx0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0RlZmF1bHRTdHlsZVNoZWV0
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAppbmRl
eCAyODNlZmFjZDAxODQ2ZjVhOWZkZjFhOTc1MWViNTJjNWM3M2NhOTA3Li4zMGM0ZjU2YTk5Yjg3
NjY4NTQ4Mzg2ZTE1MDUwNTBiZTMwMGVjNTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
RGVmYXVsdFN0eWxlU2hlZXRzLmNwcApAQCAtMTI3LDEzICsxMjcsMTMgQEAgdm9pZCBDU1NEZWZh
dWx0U3R5bGVTaGVldHM6OmxvYWRGdWxsRGVmYXVsdFN0eWxlKCkKICAgICAvLyBTdHJpY3QtbW9k
ZSBydWxlcy4KICAgICBTdHJpbmcgZGVmYXVsdFJ1bGVzID0gU3RyaW5nKGh0bWxVc2VyQWdlbnRT
dHlsZVNoZWV0LCBzaXplb2YoaHRtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1l
OjpkZWZhdWx0VGhlbWUoKS0+ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOwogICAgIGRlZmF1bHRT
dHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KGRlZmF1bHRSdWxlcyk7Ci0gICAgZGVmYXVsdFN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldChkZWZhdWx0U3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKLSAg
ICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZGVmYXVsdFN0eWxlU2hlZXQs
IHByaW50RXZhbCgpKTsKKyAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpkZWZh
dWx0U3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKKyAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRk
UnVsZXNGcm9tU2hlZXQoKmRlZmF1bHRTdHlsZVNoZWV0LCBwcmludEV2YWwoKSk7CiAKICAgICAv
LyBRdWlya3MtbW9kZSBydWxlcy4KICAgICBTdHJpbmcgcXVpcmtzUnVsZXMgPSBTdHJpbmcocXVp
cmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQp
KSArIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7
CiAgICAgcXVpcmtzU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChxdWlya3NSdWxlcyk7Ci0gICAg
ZGVmYXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChxdWlya3NTdHlsZVNoZWV0LCBz
Y3JlZW5FdmFsKCkpOworICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQo
KnF1aXJrc1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CiB9CiAKIHZvaWQgQ1NTRGVmYXVsdFN0
eWxlU2hlZXRzOjpsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKCkKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2
b2lkIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6bG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpCiAgICAg
ZGVmYXVsdFF1aXJrc1N0eWxlID0gc3RkOjptYWtlX3VuaXF1ZTxSdWxlU2V0PigpLnJlbGVhc2Uo
KTsKIAogICAgIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KHNpbXBsZVVz
ZXJBZ2VudFN0eWxlU2hlZXQsIHN0cmxlbihzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci0g
ICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaW1wbGVEZWZhdWx0U3R5bGVTaGVl
dCwgc2NyZWVuRXZhbCgpKTsKKyAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpz
aW1wbGVEZWZhdWx0U3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKIAogICAgIC8vIE5vIG5lZWQg
dG8gaW5pdGlhbGl6ZSBxdWlya3Mgc2hlZXQgeWV0IGFzIHRoZXJlIGFyZSBubyBxdWlyayBydWxl
cyBmb3IgZWxlbWVudHMgYWxsb3dlZCBpbiBzaW1wbGUgZGVmYXVsdCBzdHlsZS4KIH0KQEAgLTE2
Niw3ICsxNjYsNyBAQCB2b2lkIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZW5zdXJlRGVmYXVsdFN0
eWxlU2hlZXRzRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LAogICAgICAgICAgICAgICAgIGlm
IChwbHVnSW5zUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBwbHVnSW5zUnVs
ZXMgPSBTdHJpbmcocGx1Z0luc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihwbHVnSW5zVXNl
ckFnZW50U3R5bGVTaGVldCkpOwogICAgICAgICAgICAgICAgIHBsdWdJbnNTdHlsZVNoZWV0ID0g
cGFyc2VVQVNoZWV0KHBsdWdJbnNSdWxlcyk7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdFN0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldChwbHVnSW5zU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpwbHVnSW5zU3R5
bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkRGVmYXVsdFN0
eWxlID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTc3LDggKzE3Nyw4IEBA
IHZvaWQgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JF
bGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsCiAgICAgICAgICAgICAgICAgaWYgKG1lZGlhUnVsZXMu
aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBtZWRpYVJ1bGVzID0gU3RyaW5nKG1lZGlh
Q29udHJvbHNVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1VzZXJBZ2Vu
dFN0eWxlU2hlZXQpKSArIFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudC5kb2N1bWVu
dCgpLnBhZ2UoKSktPmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKICAgICAgICAgICAg
ICAgICBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChtZWRpYVJ1bGVzKTsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgICAgICAgICAgICAgIGRlZmF1bHRQ
cmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCwgcHJp
bnRFdmFsKCkpOworICAgICAgICAgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQoKm1lZGlhQ29udHJvbHNTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAgICAgICAg
ICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqbWVkaWFDb250cm9sc1N0
eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkRGVmYXVsdFN0
eWxlID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTg4LDggKzE4OCw4IEBA
IHZvaWQgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JF
bGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsCiAgICAgICAgICAgICBpZiAoIWltYWdlQ29udHJvbHNT
dHlsZVNoZWV0KSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGltYWdlQ29udHJvbHNSdWxlcyA9
IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSktPmlt
YWdlQ29udHJvbHNTdHlsZVNoZWV0KCk7CiAgICAgICAgICAgICAgICAgaW1hZ2VDb250cm9sc1N0
eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQoaW1hZ2VDb250cm9sc1J1bGVzKTsKLSAgICAgICAgICAg
ICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGltYWdlQ29udHJvbHNTdHlsZVNo
ZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgICAgICAgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChpbWFnZUNvbnRyb2xzU3R5bGVTaGVldCwgcHJpbnRFdmFsKCkpOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKmltYWdlQ29u
dHJvbHNTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworICAgICAgICAgICAgICAgIGRlZmF1bHRQ
cmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqaW1hZ2VDb250cm9sc1N0eWxlU2hlZXQsIHBy
aW50RXZhbCgpKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkRGVmYXVsdFN0eWxlID0gdHJ1ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTk4LDggKzE5OCw4IEBAIHZvaWQgQ1NTRGVm
YXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KEVsZW1l
bnQmIGVsZW1lbnQsCiAgICAgICAgIGlmICghc3ZnU3R5bGVTaGVldCkgewogICAgICAgICAgICAg
Ly8gU1ZHIHJ1bGVzLgogICAgICAgICAgICAgc3ZnU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChz
dmdVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yoc3ZnVXNlckFnZW50U3R5bGVTaGVldCkpOwot
ICAgICAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdmdTdHlsZVNoZWV0
LCBzY3JlZW5FdmFsKCkpOwotICAgICAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVz
RnJvbVNoZWV0KHN2Z1N0eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKKyAgICAgICAgICAgIGRlZmF1
bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKnN2Z1N0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7
CisgICAgICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKnN2Z1N0
eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKICAgICAgICAgICAgIGNoYW5nZWREZWZhdWx0U3R5bGUg
PSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjA4LDggKzIwOCw4IEBAIHZvaWQgQ1NTRGVm
YXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KEVsZW1l
bnQmIGVsZW1lbnQsCiAgICAgICAgIGlmICghbWF0aE1MU3R5bGVTaGVldCkgewogICAgICAgICAg
ICAgLy8gTWF0aE1MIHJ1bGVzLgogICAgICAgICAgICAgbWF0aE1MU3R5bGVTaGVldCA9IHBhcnNl
VUFTaGVldChtYXRobWxVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWF0aG1sVXNlckFnZW50
U3R5bGVTaGVldCkpOwotICAgICAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVl
dChtYXRoTUxTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgICAgICAgICAgZGVmYXVsdFBy
aW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1hdGhNTFN0eWxlU2hlZXQsIHByaW50RXZhbCgp
KTsKKyAgICAgICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKm1hdGhNTFN0
eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQoKm1hdGhNTFN0eWxlU2hlZXQsIHByaW50RXZhbCgpKTsKICAgICAg
ICAgICAgIGNoYW5nZWREZWZhdWx0U3R5bGUgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAt
MjE5LDggKzIxOSw4IEBAIHZvaWQgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0
U3R5bGVTaGVldHNGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsCiAgICAgaWYgKCFmdWxsc2Ny
ZWVuU3R5bGVTaGVldCAmJiBlbGVtZW50LmRvY3VtZW50KCkud2Via2l0SXNGdWxsU2NyZWVuKCkp
IHsKICAgICAgICAgU3RyaW5nIGZ1bGxzY3JlZW5SdWxlcyA9IFN0cmluZyhmdWxsc2NyZWVuVXNl
ckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKGZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0KSkg
KyBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQo
KTsKICAgICAgICAgZnVsbHNjcmVlblN0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQoZnVsbHNjcmVl
blJ1bGVzKTsKLSAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChmdWxsc2Ny
ZWVuU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKLSAgICAgICAgZGVmYXVsdFF1aXJrc1N0eWxl
LT5hZGRSdWxlc0Zyb21TaGVldChmdWxsc2NyZWVuU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsK
KyAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqZnVsbHNjcmVlblN0eWxl
U2hlZXQsIHNjcmVlbkV2YWwoKSk7CisgICAgICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQoKmZ1bGxzY3JlZW5TdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwogICAgICAg
ICBjaGFuZ2VkRGVmYXVsdFN0eWxlID0gdHJ1ZTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxl
Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAppbmRleCBi
ODY4ZTg0OGE4NDYzYzliMzQzNmU5YjdlNjJmYzI2OGYxODg1NGI1Li4xZTA5OTY0YjdiYmQ0ZWFk
MmVhYzkwZGRmM2VmNTY0NzMwZmNlZmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcApAQCAtMTc4LDEzICsxNzgsMTMgQEAgc3RhdGljIE9wdGlvbmFsPEZvbnRUcmFpdHNN
YXNrPiBjb21wdXRlVHJhaXRzTWFzayhjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlKQogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxGb250VHJhaXRzTWFzaz4odHJhaXRzTWFzayk7CiB9CiAKLXN0
YXRpYyBSZWY8Q1NTRm9udEZhY2U+IGNyZWF0ZUZvbnRGYWNlKENTU1ZhbHVlTGlzdCYgc3JjTGlz
dCwgRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzaywgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBT
dHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJ
blVzZXJBZ2VudFNoYWRvd1RyZWUpCitzdGF0aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGVGb250
RmFjZShDU1NWYWx1ZUxpc3QmIHNyY0xpc3QsIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2ssIERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwg
Ym9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQogewogICAgIFJl
ZlB0cjxDU1NGb250RmFjZVJ1bGU+IHJ1bGU7CiAjaWYgRU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMp
CiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTIxMTYgLSBUaGlzIENTU0ZvbnRGYWNlUnVsZSBoYXMgbm8gcGFyZW50LgogICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmZvbnRMb2FkRXZlbnRzRW5hYmxl
ZCgpKQotICAgICAgICBydWxlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxDU1NGb250RmFjZVJ1bGU+
KGZvbnRGYWNlUnVsZS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOworICAgICAgICBydWxlID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxDU1NGb250RmFjZVJ1bGU+KGZvbnRGYWNlUnVsZS5jcmVhdGVDU1NP
TVdyYXBwZXIoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShmb250RmFjZVJ1bGUpOwogI2Vu
ZGlmCkBAIC0yMDMsNyArMjAzLDcgQEAgc3RhdGljIFJlZjxDU1NGb250RmFjZT4gY3JlYXRlRm9u
dEZhY2UoQ1NTVmFsdWVMaXN0JiBzcmNMaXN0LCBGb250VHJhaXRzTWFzayB0cmEKICAgICAgICAg
Zm91bmRTVkdGb250ID0gaXRlbS5pc1NWR0ZvbnRGYWNlU3JjKCkgfHwgaXRlbS5zdmdGb250RmFj
ZUVsZW1lbnQoKTsKICNlbmRpZgogICAgICAgICBpZiAoIWl0ZW0uaXNMb2NhbCgpKSB7Ci0gICAg
ICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCA/IGRvY3VtZW50LT5mcmFtZSgp
ID8gJmRvY3VtZW50LT5mcmFtZSgpLT5zZXR0aW5ncygpIDogMCA6IDA7CisgICAgICAgICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCA/IGRvY3VtZW50LT5zZXR0aW5ncygpIDogbnVs
bHB0cjsKICAgICAgICAgICAgIGJvb2wgYWxsb3dEb3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8
fCAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmRvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgp
KTsKICAgICAgICAgICAgIGlmIChhbGxvd0Rvd25sb2FkaW5nICYmIGl0ZW0uaXNTdXBwb3J0ZWRG
b3JtYXQoKSAmJiBkb2N1bWVudCkgewogICAgICAgICAgICAgICAgIENhY2hlZEZvbnQqIGNhY2hl
ZEZvbnQgPSBpdGVtLmNhY2hlZEZvbnQoZG9jdW1lbnQsIGZvdW5kU1ZHRm9udCwgaXNJbml0aWF0
aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CkBAIC0yNzcsOSArMjc3LDkgQEAgc3Rh
dGljIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiBjb25zdHJ1Y3RGYW1pbHlGb250RmFjZXMoY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENTU0Zv
bnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250
RmFjZVJ1bGUsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSkK
K3ZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9u
dEZhY2UmIGZvbnRGYWNlUnVsZSwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRT
aGFkb3dUcmVlKQogewotICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUgPSBmb250RmFj
ZVJ1bGUtPnByb3BlcnRpZXMoKTsKKyAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlID0g
Zm9udEZhY2VSdWxlLnByb3BlcnRpZXMoKTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRGYW1p
bHkgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAg
ICAgUmVmUHRyPENTU1ZhbHVlPiBzcmMgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5U3JjKTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHVuaWNvZGVSYW5nZSA9IHN0eWxlLmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2UpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5oCmluZGV4IGMxYWQ5NTU5ZTNkYTQ4YThlN2I4YzE0NjVlODY4NDk3
OTMyODFmZWMuLjZmMTMwZjc1OGE5NzYzOTVlNzkxYzNmMjQ0YmI3MGU1M2VkNzAzOGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBjbGVhckRvY3VtZW50KCk7CiAKLSAgICB2b2lkIGFkZEZvbnRGYWNlUnVsZShj
b25zdCBTdHlsZVJ1bGVGb250RmFjZSosIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFn
ZW50U2hhZG93VHJlZSk7CisgICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxl
Rm9udEZhY2UmLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUp
OwogCiAgICAgdm9pZCBmb250TG9hZGVkKCk7CiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUlu
dmFsaWRhdGVkKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9j
dW1lbnRSdWxlU2V0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5j
cHAKaW5kZXggNDRhYTU5OGYzYjhjYTJlYzgxNmQwNjdmMDA0ZWRhM2Q2NjU3N2VkNy4uYjVmOTBj
NjFjYjIxOGI5ZTY4Njg0N2QxMzlhMGY4MTNkYjYxOTRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9E
b2N1bWVudFJ1bGVTZXRzLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIERvY3VtZW50UnVsZVNl
dHM6OmluaXRVc2VyU3R5bGUoRXh0ZW5zaW9uU3R5bGVTaGVldHMmIGV4dGVuc2lvblN0eWxlU2hl
ZXRzLAogewogICAgIGF1dG8gdGVtcFVzZXJTdHlsZSA9IHN0ZDo6bWFrZV91bmlxdWU8UnVsZVNl
dD4oKTsKICAgICBpZiAoQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCA9IGV4dGVuc2lvblN0
eWxlU2hlZXRzLnBhZ2VVc2VyU2hlZXQoKSkKLSAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQoJnBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCksIG1lZGl1bSwgJnJlc29sdmVy
KTsKKyAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZVVzZXJTaGVl
dC0+Y29udGVudHMoKSwgbWVkaXVtLCAmcmVzb2x2ZXIpOwogICAgIGNvbGxlY3RSdWxlc0Zyb21V
c2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVl
dHMoKSwgKnRlbXBVc2VyU3R5bGUsIG1lZGl1bSwgcmVzb2x2ZXIpOwogICAgIGNvbGxlY3RSdWxl
c0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuZG9jdW1lbnRVc2VyU3R5
bGVTaGVldHMoKSwgKnRlbXBVc2VyU3R5bGUsIG1lZGl1bSwgcmVzb2x2ZXIpOwogICAgIGlmICh0
ZW1wVXNlclN0eWxlLT5ydWxlQ291bnQoKSA+IDAgfHwgdGVtcFVzZXJTdHlsZS0+cGFnZVJ1bGVz
KCkuc2l6ZSgpID4gMCkKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBEb2N1bWVudFJ1bGVTZXRzOjpj
b2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3QK
IHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlclNoZWV0cy5zaXplKCk7ICsraSkg
ewogICAgICAgICBBU1NFUlQodXNlclNoZWV0c1tpXS0+Y29udGVudHMoKS5pc1VzZXJTdHlsZVNo
ZWV0KCkpOwotICAgICAgICB1c2VyU3R5bGUuYWRkUnVsZXNGcm9tU2hlZXQoJnVzZXJTaGVldHNb
aV0tPmNvbnRlbnRzKCksIG1lZGl1bSwgJnJlc29sdmVyKTsKKyAgICAgICAgdXNlclN0eWxlLmFk
ZFJ1bGVzRnJvbVNoZWV0KHVzZXJTaGVldHNbaV0tPmNvbnRlbnRzKCksIG1lZGl1bSwgJnJlc29s
dmVyKTsKICAgICB9CiB9CiAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBEb2N1bWVudFJ1bGVTZXRz
OjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQKICAgICAgICAgQVNTRVJUKCFjc3NTaGVldC0+ZGlzYWJsZWQoKSk7CiAgICAgICAgIGlmIChj
c3NTaGVldC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1lZGl1bS0+ZXZhbChjc3NTaGVldC0+bWVkaWFR
dWVyaWVzKCksIHJlc29sdmVyKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX2F1
dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgmY3NzU2hlZXQtPmNvbnRlbnRzKCksICptZWRp
dW0sIHJlc29sdmVyKTsKKyAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQo
Y3NzU2hlZXQtPmNvbnRlbnRzKCksICptZWRpdW0sIHJlc29sdmVyKTsKICAgICAgICAgaW5zcGVj
dG9yQ1NTT01XcmFwcGVycy5jb2xsZWN0RnJvbVN0eWxlU2hlZXRJZk5lZWRlZChjc3NTaGVldC5n
ZXQoKSk7CiAgICAgfQogICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1RvRml0KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
UnVsZVNldC5jcHAKaW5kZXggYjRhZjEwOGYwODM3ZmJiNWE5Njg0MDRkZDIzMGRjMTc2ZTMxNjQ3
Ny4uYmQyNzIzNDk4ZGY2ODEwZjE0Nzc0M2YwMTdmMzc1ZjQ0NDU2YTE5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9S
dWxlU2V0LmNwcApAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgUnVsZVNldDo6YWRkQ2hpbGRSdWxl
cyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMsIGNvbnN0IE1lCiAg
ICAgICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhtZWRpYVJ1bGUuY2hpbGRSdWxlcygpLCBtZWRp
dW0sIHJlc29sdmVyLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBpc0luaXRpYXRpbmdFbGVt
ZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlLCBhZGRSdWxlRmxhZ3MpOwogICAgICAgICB9IGVsc2Ug
aWYgKGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkgJiYgcmVzb2x2ZXIpIHsKICAgICAgICAg
ICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgcmVzb2x2
ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRkRm9udEZhY2VSdWxlKGRvd25jYXN0PFN0
eWxlUnVsZUZvbnRGYWNlPihydWxlLmdldCgpKSwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFn
ZW50U2hhZG93VHJlZSk7CisgICAgICAgICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2Vs
ZWN0b3IoKS5hZGRGb250RmFjZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KCpydWxl
LmdldCgpKSwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CiAgICAg
ICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKICAg
ICAgICAgfSBlbHNlIGlmIChpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSAmJiByZXNvbHZl
cikKICAgICAgICAgICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKGRvd25jYXN0PFN0eWxl
UnVsZUtleWZyYW1lcz4ocnVsZS5nZXQoKSkpOwpAQCAtMzU4LDI0ICszNTgsMjAgQEAgdm9pZCBS
dWxlU2V0OjphZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+
JiBydWxlcywgY29uc3QgTWUKICAgICB9CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9t
U2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYgbWVkaXVtLCBTdHlsZVJlc29sdmVyKiByZXNvbHZlcikKK3ZvaWQgUnVsZVNldDo6YWRkUnVs
ZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2
YWx1YXRvciYgbWVkaXVtLCBTdHlsZVJlc29sdmVyKiByZXNvbHZlcikKIHsKLSAgICBBU1NFUlQo
c2hlZXQpOwotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+PiYgaW1w
b3J0UnVsZXMgPSBzaGVldC0+aW1wb3J0UnVsZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxlSW1wb3J0
KiBpbXBvcnRSdWxlID0gaW1wb3J0UnVsZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChpbXBvcnRS
dWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFpbXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRp
dW0uZXZhbChpbXBvcnRSdWxlLT5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKSkKLSAgICAgICAg
ICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydFJ1bGUtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCBy
ZXNvbHZlcik7CisgICAgZm9yIChhdXRvJiBydWxlIDogc2hlZXQuaW1wb3J0UnVsZXMoKSkgewor
ICAgICAgICBpZiAocnVsZS0+c3R5bGVTaGVldCgpICYmICghcnVsZS0+bWVkaWFRdWVyaWVzKCkg
fHwgbWVkaXVtLmV2YWwocnVsZS0+bWVkaWFRdWVyaWVzKCksIHJlc29sdmVyKSkpCisgICAgICAg
ICAgICBhZGRSdWxlc0Zyb21TaGVldCgqcnVsZS0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHJlc29s
dmVyKTsKICAgICB9CiAKLSAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSByZXNv
bHZlciAmJiByZXNvbHZlci0+ZG9jdW1lbnQoKS5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0
KHNoZWV0LT5iYXNlVVJMKCkpOworICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9
IHJlc29sdmVyICYmIHJlc29sdmVyLT5kb2N1bWVudCgpLnNlY3VyaXR5T3JpZ2luKCktPmNhblJl
cXVlc3Qoc2hlZXQuYmFzZVVSTCgpKTsKICAgICBBZGRSdWxlRmxhZ3MgYWRkUnVsZUZsYWdzID0g
c3RhdGljX2Nhc3Q8QWRkUnVsZUZsYWdzPigoaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1
bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMCkpOwogCiAgICAgLy8gRklYTUU6IFNraXAg
Q29udGVudCBTZWN1cml0eSBQb2xpY3kgY2hlY2sgd2hlbiBzdHlsZXNoZWV0IGlzIGluIGEgdXNl
ciBhZ2VudCBzaGFkb3cgdHJlZS4KICAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDY2NjM+LgogICAgIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudElu
VXNlckFnZW50U2hhZG93VHJlZSA9IGZhbHNlOwotICAgIGFkZENoaWxkUnVsZXMoc2hlZXQtPmNo
aWxkUnVsZXMoKSwgbWVkaXVtLCByZXNvbHZlciwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwg
aXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSwgYWRkUnVsZUZsYWdzKTsK
KyAgICBhZGRDaGlsZFJ1bGVzKHNoZWV0LmNoaWxkUnVsZXMoKSwgbWVkaXVtLCByZXNvbHZlciwg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50
U2hhZG93VHJlZSwgYWRkUnVsZUZsYWdzKTsKIAogICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVu
YWJsZWQpCiAgICAgICAgIHNocmlua1RvRml0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvUnVsZVNldC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaAppbmRleCAyYzc0
NTRlODM2N2RmNjA0OGJmMzhlN2I1MDMyNGY1ZTAzMDRkYzhjLi4zZTYxOTBhOGFjNDBlYmNkYTA1
M2UyYzE5NDBjNTVhODdlNWJlYzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVs
ZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmgKQEAgLTE1OSw3ICsxNTks
NyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBWZWN0b3I8UnVsZURhdGEsIDE+IFJ1bGVEYXRhVmVj
dG9yOwogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgc3RkOjp1bmlxdWVf
cHRyPFJ1bGVEYXRhVmVjdG9yPj4gQXRvbVJ1bGVNYXA7CiAKLSAgICB2b2lkIGFkZFJ1bGVzRnJv
bVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBT
dHlsZVJlc29sdmVyKiA9IDApOworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVl
dENvbnRlbnRzJiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXIqID0g
MCk7CiAKICAgICB2b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqLCBBZGRSdWxlRmxhZ3MpOwog
ICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBBZGRS
dWxlRmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0
aW9uQW5hbHlzaXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXMuY3BwCmluZGV4IDJiOTBiMjMyMTQ1YmY5ZWNiZDE0YmZjYmUxMWY5ZDI4ZDQ2Mjg1YTcu
LjdjMjAzMGM2NWM0NDEzNTFiNTQ0MTU0ZmJhOTAxODQ2YmFlNDA1YzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAKQEAgLTgyLDcgKzgy
LDcgQEAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNp
cyhjb25zdCBWZWN0b3I8U3R5bGVTaGVldENvbnQKIAogICAgIG1fcnVsZVNldHMucmVzZXRBdXRo
b3JTdHlsZSgpOwogICAgIGZvciAoYXV0byYgc2hlZXQgOiBzaGVldHMpCi0gICAgICAgIG1fcnVs
ZVNldHMuYXV0aG9yU3R5bGUoKS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsIG1lZGlhUXVlcnlF
dmFsdWF0b3IpOworICAgICAgICBtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCktPmFkZFJ1bGVzRnJv
bVNoZWV0KCpzaGVldCwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAKICAgICBtX2hhc1NoYWRvd1Bz
ZXVkb0VsZW1lbnRSdWxlc0luQXV0aG9yU2hlZXQgPSBtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCkt
Pmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmNwcAppbmRleCA1MDY1NDRkNjgzMDg5ZGUwZWQ5YWUzMGE1ZmRmMDAw
NGEwZjNiOThlLi44NmYyMGI2MmYwODMxMzU0Y2U1ODQ1MjJmMjJmYTVmYzViYzVjOGI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtMjY1LDcgKzI2NSw3
IEBAIEdseXBoRGF0YSBGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0
ZXIpIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0
ZXIpOwogfQogCi1QYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlv
bkZvbnQoKSBjb25zdAorY29uc3QgRm9udCYgRm9udDo6dmVydGljYWxSaWdodE9yaWVudGF0aW9u
Rm9udCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9k
ZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0
b21Gb250KCkpOwpAQCAtMjc1LDQwICsyNzUsNDAgQEAgUGFzc1JlZlB0cjxGb250PiBGb250Ojp2
ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3QKICAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbiA9IGNyZWF0ZSh2ZXJ0aWNhbFJpZ2h0UGxh
dGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpOwogICAgIH0KICAgICBBU1NF
UlQobV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbiAhPSB0aGlzKTsK
LSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsK
KyAgICByZXR1cm4gKm1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247
CiB9CiAKLVBhc3NSZWZQdHI8Rm9udD4gRm9udDo6dXByaWdodE9yaWVudGF0aW9uRm9udCgpIGNv
bnN0Citjb25zdCBGb250JiBGb250Ojp1cHJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRhPihpc0N1c3RvbUZvbnQoKSk7CiAgICAg
aWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uKQogICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRh
LCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpOwogICAgIEFTU0VSVChtX2Rlcml2ZWRGb250
RGF0YS0+dXByaWdodE9yaWVudGF0aW9uICE9IHRoaXMpOwotICAgIHJldHVybiBtX2Rlcml2ZWRG
b250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uOworICAgIHJldHVybiAqbV9kZXJpdmVkRm9udERh
dGEtPnVwcmlnaHRPcmllbnRhdGlvbjsKIH0KIAotUGFzc1JlZlB0cjxGb250PiBGb250OjpzbWFs
bENhcHNGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAor
Y29uc3QgRm9udCogRm9udDo6c21hbGxDYXBzRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8RGVyaXZlZEZvbnREYXRh
Pihpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBz
KQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9u
dChmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZvbnRTaXplTXVsdGlwbGllcik7CiAgICAgQVNT
RVJUKG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgIT0gdGhpcyk7Ci0gICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRh
LT5zbWFsbENhcHMuZ2V0KCk7CiB9CiAKLVBhc3NSZWZQdHI8Rm9udD4gRm9udDo6ZW1waGFzaXNN
YXJrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK2Nv
bnN0IEZvbnQqIEZvbnQ6OmVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0
YT4oaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lz
TWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnQoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGb250U2l6ZU11bHRpcGxpZXIp
OwogICAgIEFTU0VSVChtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrICE9IHRoaXMpOwot
ICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOworICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOwogfQogCi1QYXNzUmVmUHRyPEZv
bnQ+IEZvbnQ6OmJyb2tlbklkZW9ncmFwaEZvbnQoKSBjb25zdAorY29uc3QgRm9udCYgRm9udDo6
YnJva2VuSWRlb2dyYXBoRm9udCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRG
b250RGF0YT4oaXNDdXN0b21Gb250KCkpOwpAQCAtMzE3LDEwICszMTcsMTAgQEAgUGFzc1JlZlB0
cjxGb250PiBGb250Ojpicm9rZW5JZGVvZ3JhcGhGb250KCkgY29uc3QKICAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaC0+bV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNr
ID0gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUKG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVv
Z3JhcGggIT0gdGhpcyk7Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVv
Z3JhcGg7CisgICAgcmV0dXJuICptX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoOwog
fQogCi1QYXNzUmVmUHRyPEZvbnQ+IEZvbnQ6Om5vblN5bnRoZXRpY0l0YWxpY0ZvbnQoKSBjb25z
dAorY29uc3QgRm9udCYgRm9udDo6bm9uU3ludGhldGljSXRhbGljRm9udCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBz
dGQ6Om1ha2VfdW5pcXVlPERlcml2ZWRGb250RGF0YT4oaXNDdXN0b21Gb250KCkpOwpAQCAtMzMy
LDcgKzMzMiw3IEBAIFBhc3NSZWZQdHI8Rm9udD4gRm9udDo6bm9uU3ludGhldGljSXRhbGljRm9u
dCgpIGNvbnN0CiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5ub25TeW50aGV0aWNJdGFsaWMg
PSBjcmVhdGUobm9uU3ludGhldGljSXRhbGljRm9udFBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250
KCkpOwogICAgIH0KICAgICBBU1NFUlQobV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRpY0l0
YWxpYyAhPSB0aGlzKTsKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPm5vblN5bnRoZXRp
Y0l0YWxpYzsKKyAgICByZXR1cm4gKm1fZGVyaXZlZEZvbnREYXRhLT5ub25TeW50aGV0aWNJdGFs
aWM7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0zNjMsNyArMzYzLDcgQEAgRm9udDo6RGVyaXZl
ZEZvbnREYXRhOjp+RGVyaXZlZEZvbnREYXRhKCkKIHsKIH0KIAotUGFzc1JlZlB0cjxGb250PiBG
b250OjpjcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1JlZlB0cjxGb250PiBGb250OjpjcmVhdGVT
Y2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAoaXNTVkdGb250KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IGJj
NzhlZmYzNGY1Njc5N2UwZDJhZTE0NWEwNDgzMTA2MGU2OGY0YTEuLjUzNmIzNmQyZmExOWIzNGUy
YTI5MzMxNDg4M2YwMmRiMThmNzQwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgKQEAgLTEwMCwxMiArMTAwLDEyIEBAIHB1YmxpYzoKICAgICBjb25zdCBPcGVuVHlw
ZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbERh
dGEuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxGb250PiBzbWFsbENhcHNGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8Rm9udD4gZW1w
aGFzaXNNYXJrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBQYXNzUmVm
UHRyPEZvbnQ+IGJyb2tlbklkZW9ncmFwaEZvbnQoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEZv
bnQ+IG5vblN5bnRoZXRpY0l0YWxpY0ZvbnQoKSBjb25zdDsKKyAgICBjb25zdCBGb250KiBzbWFs
bENhcHNGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworICAgIGNvbnN0IEZvbnQq
IGVtcGhhc2lzTWFya0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgY29u
c3QgRm9udCYgYnJva2VuSWRlb2dyYXBoRm9udCgpIGNvbnN0OworICAgIGNvbnN0IEZvbnQmIG5v
blN5bnRoZXRpY0l0YWxpY0ZvbnQoKSBjb25zdDsKIAotICAgIFBhc3NSZWZQdHI8Rm9udD4gdmFy
aWFudEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQg
dmFyaWFudCkgY29uc3QKKyAgICBjb25zdCBGb250KiB2YXJpYW50Rm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KSBjb25zdAogICAgIHsK
ICAgICAgICAgc3dpdGNoICh2YXJpYW50KSB7CiAgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFu
dDoKQEAgLTExMyw3ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRW1waGFzaXNNYXJr
VmFyaWFudDoKICAgICAgICAgICAgIHJldHVybiBlbXBoYXNpc01hcmtGb250KGRlc2NyaXB0aW9u
KTsKICAgICAgICAgY2FzZSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OgotICAgICAgICAgICAgcmV0
dXJuIGJyb2tlbklkZW9ncmFwaEZvbnQoKTsKKyAgICAgICAgICAgIHJldHVybiAmYnJva2VuSWRl
b2dyYXBoRm9udCgpOwogICAgICAgICBjYXNlIEF1dG9WYXJpYW50OgogICAgICAgICBjYXNlIE5v
cm1hbFZhcmlhbnQ6CiAgICAgICAgICAgICBicmVhazsKQEAgLTEyMiw4ICsxMjIsOCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEZvbnQqPih0aGlzKTsKICAgICB9CiAKLSAg
ICBQYXNzUmVmUHRyPEZvbnQ+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdDsK
LSAgICBQYXNzUmVmUHRyPEZvbnQ+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdDsKKyAg
ICBjb25zdCBGb250JiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CisgICAg
Y29uc3QgRm9udCYgdXByaWdodE9yaWVudGF0aW9uRm9udCgpIGNvbnN0OwogCiAgICAgYm9vbCBo
YXNWZXJ0aWNhbEdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmVydGljYWxHbHlwaHM7IH0K
ICAgICBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2lz
VGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7IH0KQEAgLTIyOCw4ICsyMjgsOCBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBpbml0Q2hhcldpZHRocygpOwogCi0gICAgUGFzc1JlZlB0cjxGb250PiBjcmVh
dGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBj
b25zdDsKLSAgICBQYXNzUmVmUHRyPEZvbnQ+IHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7CisgICAgUmVmUHRy
PEZvbnQ+IGNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2Nh
bGVGYWN0b3IpIGNvbnN0OworICAgIFJlZlB0cjxGb250PiBwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OwogCiAg
ICAgdm9pZCByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCmluZGV4
IDJlNjM2ODAwOTQzOWE0MzUxMTBlMzgyOTM0YmI2MWVmZDI1NTI3ZjEuLmEyODljZjRhZDQ1NWIw
NzIxOWFmMWU5Y2ZhMmJlZDBhMDQxYmJmMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCkBAIC0yODUsNyArMjg1LDcg
QEAgc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlUm90YXRpb24oVUNoYXIzMiBjaGFyYWN0ZXIpCiAj
aWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDQUlSTykKIHN0YXRpYyBHbHlwaERhdGEgZ2x5cGhE
YXRhRm9yQ0pLQ2hhcmFjdGVyV2l0aG91dFN5bnRoZXRpY0l0YWxpYyhVQ2hhcjMyIGNoYXJhY3Rl
ciwgR2x5cGhEYXRhJiBkYXRhKQogewotICAgIEdseXBoRGF0YSBub25JdGFsaWNEYXRhID0gZGF0
YS5mb250LT5ub25TeW50aGV0aWNJdGFsaWNGb250KCktPmdseXBoRGF0YUZvckNoYXJhY3Rlcihj
aGFyYWN0ZXIpOworICAgIEdseXBoRGF0YSBub25JdGFsaWNEYXRhID0gZGF0YS5mb250LT5ub25T
eW50aGV0aWNJdGFsaWNGb250KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAg
ICAgaWYgKG5vbkl0YWxpY0RhdGEuZm9udCkKICAgICAgICAgcmV0dXJuIG5vbkl0YWxpY0RhdGE7
CiAgICAgcmV0dXJuIGRhdGE7CkBAIC0yOTUsNyArMjk1LDcgQEAgc3RhdGljIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDSktDaGFyYWN0ZXJXaXRob3V0U3ludGhldGljSXRhbGljKFVDaGFyMzIgY2hh
cmFjdGUKIHN0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEds
eXBoT3JpZW50YXRpb24oVUNoYXIzMiBjaGFyYWN0ZXIsIE5vbkNKS0dseXBoT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKIHsKICAgICBpZiAob3JpZW50YXRp
b24gPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVwcmlnaHQgfHwgc2hvdWxkSWdub3JlUm90YXRp
b24oY2hhcmFjdGVyKSkgewotICAgICAgICBHbHlwaERhdGEgdXByaWdodERhdGEgPSBkYXRhLmZv
bnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJh
Y3Rlcik7CisgICAgICAgIEdseXBoRGF0YSB1cHJpZ2h0RGF0YSA9IGRhdGEuZm9udC0+dXByaWdo
dE9yaWVudGF0aW9uRm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAg
ICAgICAvLyBJZiB0aGUgZ2x5cGhzIGFyZSB0aGUgc2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBq
dXN0IHVzZSB0aGUgaG9yaXpvbnRhbCBnbHlwaCByb3RhdGVkIHZlcnRpY2FsbHkgdG8gYmUgdXBy
aWdodC4KICAgICAgICAgaWYgKGRhdGEuZ2x5cGggPT0gdXByaWdodERhdGEuZ2x5cGgpCiAgICAg
ICAgICAgICByZXR1cm4gZGF0YTsKQEAgLTMwNCw3ICszMDQsNyBAQCBzdGF0aWMgR2x5cGhEYXRh
IGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKFVDaGFyMzIg
Y2hhcmFjdAogICAgICAgICBpZiAodXByaWdodERhdGEuZm9udCkKICAgICAgICAgICAgIHJldHVy
biB1cHJpZ2h0RGF0YTsKICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09IE5vbkNKS0dseXBo
T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgIEdseXBoRGF0YSB2ZXJ0aWNhbFJp
Z2h0RGF0YSA9IGRhdGEuZm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICAgICAgR2x5cGhEYXRhIHZlcnRpY2Fs
UmlnaHREYXRhID0gZGF0YS5mb250LT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAgICAgICAgIC8vIElmIHRoZSBnbHlwaHMg
YXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZm9udCBo
YXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAogICAgICAgICAvLyBpbnRvIGl0LgogICAg
ICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJpZ2h0RGF0YS5nbHlwaCkKQEAgLTM2Mywx
MSArMzYzLDkgQEAgR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvclZhcmlh
bnQoVUNoYXIzMiBjLCBjb25zdCBGb250Q2FzY2FkZURlc2MKICAgICAgICAgaWYgKGRhdGEuZm9u
dCkgewogICAgICAgICAgICAgLy8gVGhlIHZhcmlhbnRGb250IGZ1bmN0aW9uIHNob3VsZCBub3Qg
bm9ybWFsbHkgcmV0dXJuIDAuCiAgICAgICAgICAgICAvLyBCdXQgaWYgaXQgZG9lcywgd2Ugd2ls
bCBqdXN0IHJlbmRlciB0aGUgY2FwaXRhbCBsZXR0ZXIgYmlnLgotICAgICAgICAgICAgUmVmUHRy
PEZvbnQ+IHZhcmlhbnRGb250ID0gZGF0YS5mb250LT52YXJpYW50Rm9udChkZXNjcmlwdGlvbiwg
dmFyaWFudCk7Ci0gICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250KQotICAgICAgICAgICAgICAg
IHJldHVybiBkYXRhOwotCi0gICAgICAgICAgICByZXR1cm4gdmFyaWFudEZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgICAgIGlmIChjb25zdCBGb250KiB2YXJpYW50Rm9u
dCA9IGRhdGEuZm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZhcmlhbnQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB2YXJpYW50Rm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwor
ICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLm1tCmluZGV4IDhkMTdkM2ZiNzc0M2Y5OTk1MjIxNGJlZmFhZDQxY2NjMGQ1OTg4NjcuLjY4
Mzg2OTViZGMzNzRkNzBlNTkxZjgwMTg1MzBhYzVmNWIxZmJhODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2Nv
YS5tbQpAQCAtNzE5LDIxICs3MTksMjEgQEAgY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRG
b3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGUKICAgICAg
ICAgICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYmFzZUNoYXJh
Y3RlcikgJiYgIWZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFudCA9IEJyb2tlbklkZW9ncmFwaFZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgICAg
IGZvbnQgPSBmb250LT5icm9rZW5JZGVvZ3JhcGhGb250KCkuZ2V0KCk7CisgICAgICAgICAgICAg
ICAgICAgIGZvbnQgPSAmZm9udC0+YnJva2VuSWRlb2dyYXBoRm9udCgpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigp
ID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIEZvbnQqIHZlcnRpY2FsUmlnaHRGb250ID0gZm9udC0+dmVydGljYWxSaWdodE9yaWVu
dGF0aW9uRm9udCgpLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJp
Z2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udC0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJh
Y3Rlcik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHZlcnRpY2FsUmlnaHRGb250
ID0gZm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpOworICAgICAgICAgICAgICAg
ICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udC5nbHlwaEZv
ckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnRp
Y2FsUmlnaHRHbHlwaCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9udCA9IHZlcnRpY2FsUmlnaHRGb250OworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9udCA9ICZ2ZXJ0aWNhbFJpZ2h0Rm9udDsKICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBGb250KiB1cHJpZ2h0Rm9udCA9IGZvbnQtPnVwcmln
aHRPcmllbnRhdGlvbkZvbnQoKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgR2x5cGggdXBy
aWdodEdseXBoID0gdXByaWdodEZvbnQtPmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIp
OworICAgICAgICAgICAgICAgICAgICBjb25zdCBGb250JiB1cHJpZ2h0Rm9udCA9IGZvbnQtPnVw
cmlnaHRPcmllbnRhdGlvbkZvbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgR2x5cGggdXByaWdo
dEdseXBoID0gdXByaWdodEZvbnQuZ2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICh1cHJpZ2h0R2x5cGggIT0gYmFzZUNoYXJhY3RlckdseXBo
RGF0YS5nbHlwaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSB1cHJpZ2h0Rm9udDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmdXByaWdodEZvbnQ7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KGNvbnN0IEZvbnQqIHZhcmlhbnRGb250ID0gZm9udC0+dmFyaWFudEZvbnQobV9mb250RGVzY3Jp
cHRpb24sIHZhcmlhbnQpLmdldCgpKQorICAgICAgICAgICAgaWYgKGNvbnN0IEZvbnQqIHZhcmlh
bnRGb250ID0gZm9udC0+dmFyaWFudEZvbnQobV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpKQog
ICAgICAgICAgICAgICAgIGZvbnQgPSB2YXJpYW50Rm9udDsKICAgICAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KaW5k
ZXggZTk4NWZiY2MwNDY2ZjdiMWQ2YmI4MTM4NjliZWQ3MjVjNzkyYTA2YS4uNTFlZGQ4NGZkYTUw
MTEzMjc2ZTUyYmFiNDNiZGIzMDYyNDY1NWJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQpAQCAtMjQ1LDcgKzI0NSw3IEBA
IHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgeEhl
aWdodCA9IHNjYWxlRW1Ub1VuaXRzKENHRm9udEdldFhIZWlnaHQobV9wbGF0Zm9ybURhdGEuY2dG
b250KCkpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKICAgICB9IGVsc2UKLSAgICAgICAgeEhl
aWdodCA9IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKS0+Zm9udE1ldHJpY3MoKS54SGVp
Z2h0KCk7CisgICAgICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCku
Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7CiAKICAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVy
RW0odW5pdHNQZXJFbSk7CiAgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKQEAg
LTMwOCw3ICszMDgsNyBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiB9CiAKLVBh
c3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUmVmUHRyPEZvbnQ+IEZvbnQ6
OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3QKIHsKICNpZiAhQ09SRVRFWFRfV0VCX0ZPTlRTCiAgICAgaWYgKGlz
Q3VzdG9tRm9udCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCmlu
ZGV4IDU1YTFkNzI3MDFkZWM2M2IxMTE0YWQ5Nzg5M2I2MzE3YzViMDM0MGMuLjcwOWIyNTk4YjIx
MmM5MGI5NDc5YjQ3MWNlYjVmNmQ1YjYyZjZhMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnRE
YXRhRnJlZVR5cGUuY3BwCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUNo
YXJXaWR0aEluaXQoKQogICAgIGluaXRDaGFyV2lkdGhzKCk7CiB9CiAKLVBhc3NSZWZQdHI8Rm9u
dD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1JlZlB0cjxGb250PiBG
b250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIEFTU0VSVChtX3Bs
YXRmb3JtRGF0YS5zY2FsZWRGb250KCkpOwogICAgIEZvbnREZXNjcmlwdGlvbiBzY2FsZWRGb250
RGVzY3JpcHRpb24gPSBmb250RGVzY3JpcHRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAppbmRleCBi
MzcyMmYyN2EyMjQzZDJiNzAxNDgzZTU2MDFiODEyNDBjMDFmYzFkLi5mYjZjMzQ1YzFjNzZlNWUx
NzFiMDZmNTc1ODEzN2ZlZDk0YWYzOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKQEAgLTEyMiw3
ICsxMjIsNyBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiAgICAgZGVsZXRlIG1fc2Ny
aXB0Rm9udFByb3BlcnRpZXM7CiB9CiAKLVBhc3NSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1JlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0
ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0
IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGZsb2F0IHNjYWxlZFNpemUgPSBzY2FsZUZhY3Rv
ciAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKICAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaAppbmRleCA1MDA0NGY1MGYwYTE3MDY1
ODUzZDliZDkxNjljMmNiOWZiYTExYWZjLi5kMjgyODNhMzNiOWUzNWY1YjhjMzA2NGFkNjZmMzc4
Y2Y2NTY4ODA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5oCkBAIC01
MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBTVkdGb250RWxlbWVudCogYXNzb2NpYXRlZEZvbnRF
bGVtZW50KCkgY29uc3Q7CiAgICAgdm9pZCByZWJ1aWxkRm9udEZhY2UoKTsKICAgICAKLSAgICBT
dHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RmFj
ZVJ1bGUuZ2V0KCk7IH0KKyAgICBjb25zdCBTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxl
KCkgY29uc3QgeyByZXR1cm4gbV9mb250RmFjZVJ1bGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAg
ICBTVkdGb250RmFjZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CkBA
IC02Myw3ICs2Myw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05l
ZWRlZChjb25zdCBSZW5kZXJTdHlsZSYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAg
ICBSZWZQdHI8U3R5bGVSdWxlRm9udEZhY2U+IG1fZm9udEZhY2VSdWxlOworICAgIFJlZjxTdHls
ZVJ1bGVGb250RmFjZT4gbV9mb250RmFjZVJ1bGU7CiAgICAgU1ZHRm9udEVsZW1lbnQqIG1fZm9u
dEVsZW1lbnQ7CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>