<?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>173634</bug_id>
          
          <creation_ts>2017-06-20 19:23:48 -0700</creation_ts>
          <short_desc>[iOS] Cannot italicize or bold text rendered with text styles</short_desc>
          <delta_ts>2017-06-28 19:46:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1321359</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-06-20 19:23:48 -0700</bug_when>
    <thetext>[iOS] Cannot italicize or bold text rendered with text styles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321360</commentid>
    <comment_count>1</comment_count>
      <attachid>313468</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-06-20 19:24:58 -0700</bug_when>
    <thetext>Created attachment 313468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321365</commentid>
    <comment_count>2</comment_count>
      <attachid>313472</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-06-20 19:34:44 -0700</bug_when>
    <thetext>Created attachment 313472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321366</commentid>
    <comment_count>3</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-06-20 19:36:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/31805407&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322744</commentid>
    <comment_count>4</comment_count>
      <attachid>313472</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-25 17:49:12 -0700</bug_when>
    <thetext>Comment on attachment 313472
Patch

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

&gt; Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp:38
&gt; +#if PLATFORM(IOS)
&gt; +#include &quot;RenderThemeIOS.h&quot;
&gt; +#endif

Maybe #if USE_PLATFORM_SYSTEM_FALLBACK_LIST instead?

&gt; Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp:110
&gt; +    enum class ClientUse {
&gt; +        ForSystemUI,
&gt; +        ForTextStyle
&gt; +    };

I’d define this on one line.

&gt; Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp:196
&gt; +static inline bool isTextStyleString(const AtomicString&amp; string)

I don’t really find the name here satisfying. The words “text style” alone in WebKit code, even in this source file, don’t mean “UIFontTextStyle” to mean. I think this function should be named isUIFontTextStyle or something else like that. Or maybe you should say out loud what question this answers and figure out from that what the name should be. Are these “text styles” special font names? Or special font family names? That could drive what name the function should have.

&gt; Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp:240
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleHeadline(kCTUIFontTextStyleHeadline);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleBody(kCTUIFontTextStyleBody);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleTitle1(kCTUIFontTextStyleTitle1);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleTitle2(kCTUIFontTextStyleTitle2);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleTitle3(kCTUIFontTextStyleTitle3);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleSubhead(kCTUIFontTextStyleSubhead);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleFootnote(kCTUIFontTextStyleFootnote);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleCaption1(kCTUIFontTextStyleCaption1);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleCaption2(kCTUIFontTextStyleCaption2);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleShortHeadline(kCTUIFontTextStyleShortHeadline);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleShortBody(kCTUIFontTextStyleShortBody);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleShortSubhead(kCTUIFontTextStyleShortSubhead);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleShortFootnote(kCTUIFontTextStyleShortFootnote);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleShortCaption1(kCTUIFontTextStyleShortCaption1);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleTallBody(kCTUIFontTextStyleTallBody);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; FontDescriptorTextStyleEmphasized(kCTFontDescriptorTextStyleEmphasized);
&gt; +#if __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 110000
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleTitle0(kCTUIFontTextStyleTitle0);
&gt; +    static NeverDestroyed&lt;AtomicString&gt; UIFontTextStyleTitle4(kCTUIFontTextStyleTitle4);
&gt; +#endif
&gt; +
&gt; +    return string == UIFontTextStyleHeadline.get()
&gt; +        || string == UIFontTextStyleBody.get()
&gt; +        || string == UIFontTextStyleTitle1.get()
&gt; +        || string == UIFontTextStyleTitle2.get()
&gt; +        || string == UIFontTextStyleTitle3.get()
&gt; +        || string == UIFontTextStyleSubhead.get()
&gt; +        || string == UIFontTextStyleFootnote.get()
&gt; +        || string == UIFontTextStyleCaption1.get()
&gt; +        || string == UIFontTextStyleCaption2.get()
&gt; +        || string == UIFontTextStyleShortHeadline.get()
&gt; +        || string == UIFontTextStyleShortBody.get()
&gt; +        || string == UIFontTextStyleShortSubhead.get()
&gt; +        || string == UIFontTextStyleShortFootnote.get()
&gt; +        || string == UIFontTextStyleShortCaption1.get()
&gt; +        || string == UIFontTextStyleTallBody.get()
&gt; +#if __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 110000
&gt; +        || string == FontDescriptorTextStyleEmphasized.get()
&gt; +        || string == UIFontTextStyleTitle0.get()
&gt; +        || string == UIFontTextStyleTitle4.get();
&gt; +#else
&gt; +        || string == FontDescriptorTextStyleEmphasized.get();
&gt; +#endif

This should be done with arrays so we don’t have to list everything twice and worry about whether we forgot something, and so we generate smaller code too; unrolled loops are big. And I also suggest we sort alphabetically within each #if so it’s easier to see if something is missing rather than using logical order or an order that matches a header file. Note we can use a trailing comma on the last item so there is no need to be tricky about the last line.

We can start with this convertArray function, which is generic for any case where we want to use the assignment operator to convert from one type to another. That works fine for CFStringRef to AtomicString:

template&lt;typename T, typename U, std::size_t size&gt; inline std::array&lt;T, size&gt; convertArray(U (&amp;array)[size])
{
    std::array&lt;T, size&gt; result;
    for (size_t i = 0; i &lt; size; ++i)
        result[i] = array[i];
    return result;
}

If all our compilers supported C++14 well enough that we could use those features, we could write this better version that uses construction rather than assignment:

template&lt; typename T, typename U, std::size_t size, std::size_t... indices&gt; std::array&lt;T, size&gt; convertArray(U (&amp;array)[size], std::index_sequence&lt;indices...&gt;)
{
    return { { array[indices]... } };
}

template&lt;typename T, typename U, std::size_t size&gt; inline std::array&lt;T, size&gt; convertArray(U (&amp;array)[size])
{
    return convertArray&lt;T&gt;(array, std::make_index_sequence&lt;size&gt; { });
}

This is like the experimental standard to_array function, but works when the types don’t match. Once we have convertArray, we can write the code like this:

    static const CFStringRef styles[] = {
        kCTFontDescriptorTextStyleEmphasized,
        kCTUIFontTextStyleBody,
        ...
        kCTUIFontTextStyleTitle3,
#if __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 110000
        kCTUIFontTextStyleTitle0,
        kCTUIFontTextStyleTitle4,
#endif
    };
    static const NeverDestroyed&lt;std::array&lt;AtomicString, WTF_ARRAY_LENGTH(styles)&gt;&gt; strings { convertArray&lt;AtomicString&gt;(styles) };
    return std::find(strings.get().begin(), strings.get().end(), string) != strings.get().end();

If it wasn’t for the need for NeverDestroyed, we could use just &quot;const auto&quot; as the type for &quot;strings&quot;, which makes this code look even better.

We could even go further and use std::binary_search instead of std::find, but it’s slightly tricky because we want an operator&lt; predicate that would compares two AtomicStrings based on their pointer values rather than on the values of the strings. We&apos;d have to pass that predicate to the convertToSortedArray function so it can sort when creating the array, and also pass it to binary_search; so the code gets a little bit wordy. But if the list of styles was long enough I suppose we would want to do that for better performance.

&gt; Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp:273
&gt; +        static NeverDestroyed&lt;AtomicString&gt; systemUI = AtomicString(&quot;system-ui&quot;, AtomicString::ConstructFromLiteral);
&gt; +        result.fontName = systemUI.get();

This idiom is so wordy. For the sake of future programming I’d really like to understand whether the optimization is important enough to be worth it. This comes up a lot when programming on WebKit so I would love to have a firm idea how to make the tradeoff. When is this OK?

    result.fontName = &quot;system-ui&quot;;

And when do we have to go further? ASCIILiteral, AtomicString::ConstructFromLiteral, NeverDestroyed, etc. In addition, if we are going to use that ConstructFromLiteral style a lot, then we should probably make a helper function so it’s not so ugly. Unless we can’t use that function without making the code worse.

&gt; Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp:294
&gt; +            result += SystemFontDatabase::singleton().systemFontCascadeList(systemFontParameters(*this, cssFamily, SystemFontDatabase::ClientUse::ForSystemUI), SystemFontDatabase::ClientUse::ForSystemUI).size();

This gets so long I think we should make a helper function. Then we wouldn’t have to repeat SystemFontDatabase::ClientUse::ForSystemUI twice, for example. Could use that helper function four times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322745</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-25 17:55:56 -0700</bug_when>
    <thetext>Here’s a better version. If we add this function:

template&lt;typename T&gt; inline NeverDestroyed&lt;T&gt; makeNeverDestroyed(T&amp;&amp; argument)
{
    return WTFMove(argument);
}

Then the line that defines &quot;strings&quot; can be this instead:

    static const auto strings { makeNeverDestroyed(convertArray&lt;AtomicString&gt;(styles)) };

Probably best to put makeNeverDestroyed into NeverDestroyed.h, but it can also just be in a file where it’s used at first and go into NeverDestroyed.h later. We could use this to clean up any place that uses NeverDestroyed to use auto or const auto for the type rather than writing it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323367</commentid>
    <comment_count>6</comment_count>
      <attachid>313472</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-06-27 18:47:08 -0700</bug_when>
    <thetext>Comment on attachment 313472
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp:38
&gt;&gt; +#endif
&gt; 
&gt; Maybe #if USE_PLATFORM_SYSTEM_FALLBACK_LIST instead?

Text styles are iOS-specific.

&gt;&gt; Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp:273
&gt;&gt; +        result.fontName = systemUI.get();
&gt; 
&gt; This idiom is so wordy. For the sake of future programming I’d really like to understand whether the optimization is important enough to be worth it. This comes up a lot when programming on WebKit so I would love to have a firm idea how to make the tradeoff. When is this OK?
&gt; 
&gt;     result.fontName = &quot;system-ui&quot;;
&gt; 
&gt; And when do we have to go further? ASCIILiteral, AtomicString::ConstructFromLiteral, NeverDestroyed, etc. In addition, if we are going to use that ConstructFromLiteral style a lot, then we should probably make a helper function so it’s not so ugly. Unless we can’t use that function without making the code worse.

I don&apos;t have any particular thoughts on the way this should be; I&apos;m happy to follow whatever the generally-accepted best practices are.

result.fontName = &quot;system-ui&quot;; is bad because it causes an allocation.
result.fontName = AtomicString(&quot;system-ui&quot;, AtomicString::ConstructFromLiteral); isn&apos;t bad, but isn&apos;t great, because it still has to hash the characters to find the preexisting String
result.fontName = ASCIILiteral(&quot;system-ui&quot;); AFAIK has the same tradeoffs as the previous one.
result.fontName = systemUI.get(); is good because copying an AtomicString is just bumping its reference count.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323375</commentid>
    <comment_count>7</comment_count>
      <attachid>313973</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-06-27 19:18:33 -0700</bug_when>
    <thetext>Created attachment 313973
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323804</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-06-28 19:46:16 -0700</bug_when>
    <thetext>Committed r218909: &lt;http://trac.webkit.org/changeset/218909&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313468</attachid>
            <date>2017-06-20 19:24:58 -0700</date>
            <delta_ts>2017-06-20 19:25:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173634-20170620192557.patch</filename>
            <type>text/plain</type>
            <size>17913</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4NTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2U0ZjU5YzI2MjY5Nzhi
MTg1NDNhM2QwZTNlNWJkYjkzN2JmNTA0My4uMjVmNzRhNzQzZDI2ZDc0NTg1YjA3NzJkMzIyZWZi
ZTAyMjNmMjU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA2LTIwICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ2Fu
bm90IGl0YWxpY2l6ZSBvciBib2xkIHRleHQgcmVuZGVyZWQgd2l0aCB0ZXh0IHN0eWxlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNjM0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZmFzdC90
ZXh0L2lwYWQvYm9sZC10YWxsLWJvZHktdGV4dC1zdHlsZS5odG1sCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RGVzY3JpcHRpb25Db2NvYS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTeXN0ZW1Gb250RGF0YWJhc2U6OkNvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJz
OjpDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTeXN0
ZW1Gb250RGF0YWJhc2U6OkNvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjppc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1Gb250RGF0YWJhc2U6OkNv
cmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6OlN5c3RlbUZvbnREYXRhYmFzZTo6Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnM6Omhh
c2gpOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlOjpDb3JlVGV4dENhc2Nh
ZGVMaXN0UGFyYW1ldGVyczo6Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnNIYXNoOjpoYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OlN5c3RlbUZvbnREYXRhYmFzZTo6Q29yZVRleHRDYXNjYWRl
TGlzdFBhcmFtZXRlcnM6OkNvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzSGFzaDo6ZXF1YWwp
OgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlOjpzeXN0ZW1Gb250Q2FzY2Fk
ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNUZXh0U3R5bGVTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6c3lzdGVtRm9udFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5Q291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5QXQpOgorICAgICAgICAo
V2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlOjpDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVy
c0hhc2g6Omhhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFi
YXNlOjpDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2g6OmVxdWFsKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6cGxhdGZvcm1Gb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKToKKwogMjAxNy0w
Ni0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtXZWJJRExdIEFk
ZCBzdXBwb3J0IGZvciBzZXJpYWxpemVycyB0aGF0IGhhdmUgbWVtYmVycyB0aGF0IGFyZSB0aGVt
c2VsdmVzIHNlcmlhbGl6ZXJzIChvciBpbmhlcml0IGJlaW5nIGEgc2VyaWFsaXplciBmcm9tIGEg
cGFyZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCmluZGV4IGJhNjA3OWIwZjY2ZTQ2
Nzk5ZTRmMWIxMjA4NDRiMDA1Y2I0MDJlMDYuLmRmZmJlYjU1Y2YxNDg0ZWIzYTlmM2Y4NzU2ODYw
Mzc5OTVmMzk1MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RGVzY3JpcHRpb25Db2NvYS5jcHAKQEAgLTMzLDYgKzMz
LDEwIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUg
IlJlbmRlclRoZW1lSU9TLmgiCisjZW5kaWYKKwogI2lmIFVTRV9QTEFURk9STV9TWVNURU1fRkFM
TEJBQ0tfTElTVAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSwxOCArNDksMTkgQEAgcHVi
bGljOgogICAgICAgICB9CiAKICAgICAgICAgQ29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICAgICAgOiBsb2NhbGUoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAgICAgICAgICA6IGZvbnROYW1lKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGxvY2FsZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgICAgICAgICAgcmV0
dXJuIGZvbnROYW1lLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMm
IG90aGVyKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYWxlID09IG90
aGVyLmxvY2FsZQorICAgICAgICAgICAgcmV0dXJuIGZvbnROYW1lID09IG90aGVyLmZvbnROYW1l
CisgICAgICAgICAgICAgICAgJiYgbG9jYWxlID09IG90aGVyLmxvY2FsZQogICAgICAgICAgICAg
ICAgICYmIHdlaWdodCA9PSBvdGhlci53ZWlnaHQKICAgICAgICAgICAgICAgICAmJiBzaXplID09
IG90aGVyLnNpemUKICAgICAgICAgICAgICAgICAmJiBpdGFsaWMgPT0gb3RoZXIuaXRhbGljOwpA
QCAtNjUsNiArNzAsOCBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKKyAgICAgICAgICAg
IEFTU0VSVCghZm9udE5hbWUuaXNOdWxsKCkpOworICAgICAgICAgICAgaGFzaGVyLmFkZChsb2Nh
bGUuZXhpc3RpbmdIYXNoKCkpOwogICAgICAgICAgICAgaGFzaGVyLmFkZChsb2NhbGUuaXNOdWxs
KCkgPyAwIDogbG9jYWxlLmV4aXN0aW5nSGFzaCgpKTsKICAgICAgICAgICAgIGhhc2hlci5hZGQo
d2VpZ2h0KTsKICAgICAgICAgICAgIGhhc2hlci5hZGQoc2l6ZSk7CkBAIC03Miw2ICs3OSwxOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKICAgICAgICAgfQog
CisgICAgICAgIHN0cnVjdCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2ggOiBXVEY6
OlBhaXJIYXNoPEF0b21pY1N0cmluZywgZmxvYXQ+IHsKKyAgICAgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IENvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmhhc2go
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENv
cmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBhLCBjb25zdCBDb3JlVGV4dENhc2NhZGVMaXN0
UGFyYW1ldGVycyYgYikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYSA9
PSBiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgICAgICB9OworCisgICAgICAgIEF0
b21pY1N0cmluZyBmb250TmFtZTsKICAgICAgICAgQXRvbWljU3RyaW5nIGxvY2FsZTsKICAgICAg
ICAgQ0dGbG9hdCB3ZWlnaHQgeyAwIH07CiAgICAgICAgIGZsb2F0IHNpemUgeyAwIH07CkBAIC04
NCwyNiArMTA0LDMwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGRhdGFiYXNlLmdldCgpOwog
ICAgIH0KIAotICAgIFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+IHN5c3Rl
bUZvbnRDYXNjYWRlTGlzdChjb25zdCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycyYgcGFy
YW1ldGVycykKLSAgICB7Ci0gICAgICAgIGF1dG8gY3JlYXRlU3lzdGVtRm9udCA9IFsmXSB7Ci0g
ICAgICAgICAgICBhdXRvIGxvY2FsZVN0cmluZyA9IHBhcmFtZXRlcnMubG9jYWxlLnN0cmluZygp
LmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobG9j
YWxlU3RyaW5nLCBhZG9wdENGKENURm9udENyZWF0ZVVJRm9udEZvckxhbmd1YWdlKGtDVEZvbnRV
SUZvbnRTeXN0ZW0sIHBhcmFtZXRlcnMuc2l6ZSwgbG9jYWxlU3RyaW5nLmdldCgpKSkpOwotICAg
ICAgICB9OwotCi0gICAgICAgIC8vIEF2b2lkIGFkZGluZyBhbiBlbXB0eSB2YWx1ZSB0byB0aGUg
aGFzaCBtYXAKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLnNpemUpIHsKLSAgICAgICAgICAgIGF1
dG8gc3lzdGVtRm9udCA9IGNyZWF0ZVN5c3RlbUZvbnQoKS5zZWNvbmQ7Ci0gICAgICAgICAgICBh
dXRvIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihzeXN0ZW1G
b250LmdldCgpKSk7Ci0gICAgICAgICAgICByZXR1cm4geyByZW1vdmVDYXNjYWRlTGlzdChkZXNj
cmlwdG9yLmdldCgpKSB9OwotICAgICAgICB9CisgICAgZW51bSBjbGFzcyBDbGllbnRVc2Ugewor
ICAgICAgICBGb3JTeXN0ZW1VSSwKKyAgICAgICAgRm9yVGV4dFN0eWxlCisgICAgfTsKIAorICAg
IFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+IHN5c3RlbUZvbnRDYXNjYWRl
TGlzdChjb25zdCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycyYgcGFyYW1ldGVycywgQ2xp
ZW50VXNlIGNsaWVudFVzZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghcGFyYW1ldGVycy5mb250
TmFtZS5pc051bGwoKSk7CiAgICAgICAgIHJldHVybiBtX3N5c3RlbUZvbnRDYWNoZS5lbnN1cmUo
cGFyYW1ldGVycywgWyZdIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbG9j
YWxlU3RyaW5nOworICAgICAgICAgICAgYXV0byBsb2NhbGVTdHJpbmcgPSBwYXJhbWV0ZXJzLmxv
Y2FsZS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpOwogICAgICAgICAgICAgUmV0YWluUHRyPENU
Rm9udFJlZj4gc3lzdGVtRm9udDsKLSAgICAgICAgICAgIHN0ZDo6dGllKGxvY2FsZVN0cmluZywg
c3lzdGVtRm9udCkgPSBjcmVhdGVTeXN0ZW1Gb250KCk7CisgICAgICAgICAgICBpZiAoY2xpZW50
VXNlID09IENsaWVudFVzZTo6Rm9yU3lzdGVtVUkpCisgICAgICAgICAgICAgICAgc3lzdGVtRm9u
dCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlVUlGb250Rm9yTGFuZ3VhZ2Uoa0NURm9udFVJRm9udFN5
c3RlbSwgcGFyYW1ldGVycy5zaXplLCBsb2NhbGVTdHJpbmcuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChjbGllbnRVc2UgPT0gQ2xpZW50VXNlOjpG
b3JUZXh0U3R5bGUpOworICAgICAgICAgICAgICAgIGF1dG8gZm9udERlc2NyaXB0b3IgPSBhZG9w
dENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKHBhcmFtZXRlcnMuZm9udE5h
bWUuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgUmVuZGVyVGhlbWVJT1M6OmNvbnRl
bnRTaXplQ2F0ZWdvcnkoKSwgbnVsbHB0cikpOworICAgICAgICAgICAgICAgIHN5c3RlbUZvbnQg
PSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5n
ZXQoKSwgcGFyYW1ldGVycy5zaXplLCBudWxscHRyKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBBU1NFUlQoc3lzdGVtRm9udCk7CiAgICAgICAgICAgICBzeXN0ZW1Gb250ID0gYXBwbHlX
ZWlnaHRBbmRJdGFsaWNzKHN5c3RlbUZvbnQuZ2V0KCksIHBhcmFtZXRlcnMud2VpZ2h0LCBwYXJh
bWV0ZXJzLml0YWxpYywgcGFyYW1ldGVycy5zaXplKTsKLSAgICAgICAgICAgIHJldHVybiBjb21w
dXRlQ2FzY2FkZUxpc3Qoc3lzdGVtRm9udC5nZXQoKSwgbG9jYWxlU3RyaW5nLmdldCgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChzeXN0ZW1Gb250KTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
Y29tcHV0ZUNhc2NhZGVMaXN0KHN5c3RlbUZvbnQuZ2V0KCksIGxvY2FsZVN0cmluZy5nZXQoKSk7
CisgICAgICAgICAgICBBU1NFUlQoIXJlc3VsdC5pc0VtcHR5KCkpOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KIApAQCAtMTU3
LDE5ICsxODEsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAot
ICAgIHN0cnVjdCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2ggOiBXVEY6OlBhaXJI
YXNoPEF0b21pY1N0cmluZywgZmxvYXQ+IHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgQ29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmhhc2goKTsKLSAgICAgICAgfQotICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVy
cyYgYSwgY29uc3QgQ29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotICAgIH07Ci0K
LSAgICBIYXNoTWFwPENvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzLCBWZWN0b3I8UmV0YWlu
UHRyPENURm9udERlc2NyaXB0b3JSZWY+PiwgQ29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnNI
YXNoLCBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnM+
PiBtX3N5c3RlbUZvbnRDYWNoZTsKKyAgICBIYXNoTWFwPENvcmVUZXh0Q2FzY2FkZUxpc3RQYXJh
bWV0ZXJzLCBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+PiwgQ29yZVRleHRD
YXNjYWRlTGlzdFBhcmFtZXRlcnM6OkNvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzSGFzaCwg
U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPENvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzPj4gbV9z
eXN0ZW1Gb250Q2FjaGU7CiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNTeXN0ZW1Gb250U3Ry
aW5nKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQpAQCAtMTgwLDcgKzE5Miw1NiBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaXNTeXN0ZW1Gb250U3RyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYgc3Ry
aW5nKQogICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJz
eXN0ZW0tdWkiKTsKIH0KIAotc3RhdGljIGlubGluZSBTeXN0ZW1Gb250RGF0YWJhc2U6OkNvcmVU
ZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzIHN5c3RlbUZvbnRQYXJhbWV0ZXJzKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc1RleHRTdHlsZVN0cmluZyhjb25zdCBBdG9taWNTdHJpbmcmIHN0cmlu
ZykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0
U3R5bGVIZWFkbGluZShrQ1RVSUZvbnRUZXh0U3R5bGVIZWFkbGluZSk7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gVUlGb250VGV4dFN0eWxlQm9keShrQ1RVSUZvbnRU
ZXh0U3R5bGVCb2R5KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBV
SUZvbnRUZXh0U3R5bGVUaXRsZTEoa0NUVUlGb250VGV4dFN0eWxlVGl0bGUxKTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVUaXRsZTIoa0NU
VUlGb250VGV4dFN0eWxlVGl0bGUyKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVUaXRsZTMoa0NUVUlGb250VGV4dFN0eWxlVGl0bGUzKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVT
dWJoZWFkKGtDVFVJRm9udFRleHRTdHlsZVN1YmhlYWQpOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IFVJRm9udFRleHRTdHlsZUZvb3Rub3RlKGtDVFVJRm9udFRleHRT
dHlsZUZvb3Rub3RlKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBV
SUZvbnRUZXh0U3R5bGVDYXB0aW9uMShrQ1RVSUZvbnRUZXh0U3R5bGVDYXB0aW9uMSk7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gVUlGb250VGV4dFN0eWxlQ2FwdGlv
bjIoa0NUVUlGb250VGV4dFN0eWxlQ2FwdGlvbjIpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IFVJRm9udFRleHRTdHlsZVNob3J0SGVhZGxpbmUoa0NUVUlGb250VGV4
dFN0eWxlU2hvcnRIZWFkbGluZSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gVUlGb250VGV4dFN0eWxlU2hvcnRCb2R5KGtDVFVJRm9udFRleHRTdHlsZVNob3J0Qm9k
eSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gVUlGb250VGV4dFN0
eWxlU2hvcnRTdWJoZWFkKGtDVFVJRm9udFRleHRTdHlsZVNob3J0U3ViaGVhZCk7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gVUlGb250VGV4dFN0eWxlU2hvcnRGb290
bm90ZShrQ1RVSUZvbnRUZXh0U3R5bGVTaG9ydEZvb3Rub3RlKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVTaG9ydENhcHRpb24xKGtDVFVJ
Rm9udFRleHRTdHlsZVNob3J0Q2FwdGlvbjEpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IFVJRm9udFRleHRTdHlsZVRhbGxCb2R5KGtDVFVJRm9udFRleHRTdHlsZVRh
bGxCb2R5KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBGb250RGVz
Y3JpcHRvclRleHRTdHlsZUVtcGhhc2l6ZWQoa0NURm9udERlc2NyaXB0b3JUZXh0U3R5bGVFbXBo
YXNpemVkKTsKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVU
aXRsZTAoa0NUVUlGb250VGV4dFN0eWxlVGl0bGUwKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVUaXRsZTQoa0NUVUlGb250VGV4dFN0eWxl
VGl0bGU0KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHN0cmluZyA9PSBVSUZvbnRUZXh0U3R5bGVI
ZWFkbGluZS5nZXQoKQorICAgICAgICB8fCBzdHJpbmcgPT0gVUlGb250VGV4dFN0eWxlQm9keS5n
ZXQoKQorICAgICAgICB8fCBzdHJpbmcgPT0gVUlGb250VGV4dFN0eWxlVGl0bGUxLmdldCgpCisg
ICAgICAgIHx8IHN0cmluZyA9PSBVSUZvbnRUZXh0U3R5bGVUaXRsZTIuZ2V0KCkKKyAgICAgICAg
fHwgc3RyaW5nID09IFVJRm9udFRleHRTdHlsZVRpdGxlMy5nZXQoKQorICAgICAgICB8fCBzdHJp
bmcgPT0gVUlGb250VGV4dFN0eWxlU3ViaGVhZC5nZXQoKQorICAgICAgICB8fCBzdHJpbmcgPT0g
VUlGb250VGV4dFN0eWxlRm9vdG5vdGUuZ2V0KCkKKyAgICAgICAgfHwgc3RyaW5nID09IFVJRm9u
dFRleHRTdHlsZUNhcHRpb24xLmdldCgpCisgICAgICAgIHx8IHN0cmluZyA9PSBVSUZvbnRUZXh0
U3R5bGVDYXB0aW9uMi5nZXQoKQorICAgICAgICB8fCBzdHJpbmcgPT0gVUlGb250VGV4dFN0eWxl
U2hvcnRIZWFkbGluZS5nZXQoKQorICAgICAgICB8fCBzdHJpbmcgPT0gVUlGb250VGV4dFN0eWxl
U2hvcnRCb2R5LmdldCgpCisgICAgICAgIHx8IHN0cmluZyA9PSBVSUZvbnRUZXh0U3R5bGVTaG9y
dFN1YmhlYWQuZ2V0KCkKKyAgICAgICAgfHwgc3RyaW5nID09IFVJRm9udFRleHRTdHlsZVNob3J0
Rm9vdG5vdGUuZ2V0KCkKKyAgICAgICAgfHwgc3RyaW5nID09IFVJRm9udFRleHRTdHlsZVNob3J0
Q2FwdGlvbjEuZ2V0KCkKKyAgICAgICAgfHwgc3RyaW5nID09IFVJRm9udFRleHRTdHlsZVRhbGxC
b2R5LmdldCgpCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAw
CisgICAgICAgIHx8IHN0cmluZyA9PSBGb250RGVzY3JpcHRvclRleHRTdHlsZUVtcGhhc2l6ZWQu
Z2V0KCkKKyAgICAgICAgfHwgc3RyaW5nID09IFVJRm9udFRleHRTdHlsZVRpdGxlMC5nZXQoKQor
ICAgICAgICB8fCBzdHJpbmcgPT0gVUlGb250VGV4dFN0eWxlVGl0bGU0LmdldCgpOworI2Vsc2UK
KyAgICAgICAgfHwgc3RyaW5nID09IEZvbnREZXNjcmlwdG9yVGV4dFN0eWxlRW1waGFzaXplZC5n
ZXQoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgU3lzdGVtRm9udERhdGFi
YXNlOjpDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycyBzeXN0ZW1Gb250UGFyYW1ldGVycyhj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHlOYW1lLCBTeXN0ZW1Gb250RGF0YWJhc2U6OkNsaWVudFVzZSBjbGllbnRVc2Up
CiB7CiAgICAgU3lzdGVtRm9udERhdGFiYXNlOjpDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVy
cyByZXN1bHQ7CiAgICAgcmVzdWx0LmxvY2FsZSA9IGRlc2NyaXB0aW9uLmxvY2FsZSgpOwpAQCAt
MjA3LDYgKzI2OCwxNCBAQCBzdGF0aWMgaW5saW5lIFN5c3RlbUZvbnREYXRhYmFzZTo6Q29yZVRl
eHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMgc3lzdGVtRm9udFBhcmFtZQogICAgIGVsc2UKICAgICAg
ICAgcmVzdWx0LndlaWdodCA9IGtDVEZvbnRXZWlnaHRCbGFjazsKIAorICAgIGlmIChjbGllbnRV
c2UgPT0gU3lzdGVtRm9udERhdGFiYXNlOjpDbGllbnRVc2U6OkZvclN5c3RlbVVJKSB7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHN5c3RlbVVJID0gQXRvbWlj
U3RyaW5nKCJzeXN0ZW0tdWkiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
KyAgICAgICAgcmVzdWx0LmZvbnROYW1lID0gc3lzdGVtVUkuZ2V0KCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgQVNTRVJUKGNsaWVudFVzZSA9PSBTeXN0ZW1Gb250RGF0YWJhc2U6OkNsaWVudFVz
ZTo6Rm9yVGV4dFN0eWxlKTsKKyAgICAgICAgcmVzdWx0LmZvbnROYW1lID0gZmFtaWx5TmFtZTsK
KyAgICB9CisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMjIsNyArMjkxLDExIEBAIHVu
c2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUNvdW50KCkgY29u
c3QKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFtaWx5Q291bnQoKTsgKytpKSB7CiAg
ICAgICAgIGNvbnN0IGF1dG8mIGNzc0ZhbWlseSA9IGZhbWlseUF0KGkpOwogICAgICAgICBpZiAo
aXNTeXN0ZW1Gb250U3RyaW5nKGNzc0ZhbWlseSkpCi0gICAgICAgICAgICByZXN1bHQgKz0gU3lz
dGVtRm9udERhdGFiYXNlOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250Q2FzY2FkZUxpc3Qoc3lzdGVt
Rm9udFBhcmFtZXRlcnMoKnRoaXMpKS5zaXplKCk7CisgICAgICAgICAgICByZXN1bHQgKz0gU3lz
dGVtRm9udERhdGFiYXNlOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250Q2FzY2FkZUxpc3Qoc3lzdGVt
Rm9udFBhcmFtZXRlcnMoKnRoaXMsIGNzc0ZhbWlseSwgU3lzdGVtRm9udERhdGFiYXNlOjpDbGll
bnRVc2U6OkZvclN5c3RlbVVJKSwgU3lzdGVtRm9udERhdGFiYXNlOjpDbGllbnRVc2U6OkZvclN5
c3RlbVVJKS5zaXplKCk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBlbHNlIGlmIChpc1Rl
eHRTdHlsZVN0cmluZyhjc3NGYW1pbHkpKQorICAgICAgICAgICAgcmVzdWx0ICs9IFN5c3RlbUZv
bnREYXRhYmFzZTo6c2luZ2xldG9uKCkuc3lzdGVtRm9udENhc2NhZGVMaXN0KHN5c3RlbUZvbnRQ
YXJhbWV0ZXJzKCp0aGlzLCBjc3NGYW1pbHksIFN5c3RlbUZvbnREYXRhYmFzZTo6Q2xpZW50VXNl
OjpGb3JUZXh0U3R5bGUpLCBTeXN0ZW1Gb250RGF0YWJhc2U6OkNsaWVudFVzZTo6Rm9yVGV4dFN0
eWxlKS5zaXplKCk7CisjZW5kaWYKICAgICAgICAgZWxzZQogICAgICAgICAgICAgKytyZXN1bHQ7
CiAgICAgfQpAQCAtMjM0LDExICszMDcsMjAgQEAgRm9udEZhbWlseVNwZWNpZmljYXRpb24gRm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5QXQodW5zaWduZWQgaW5kZXgKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFtaWx5Q291bnQoKTsgKytpKSB7CiAgICAgICAg
IGNvbnN0IGF1dG8mIGNzc0ZhbWlseSA9IGZhbWlseUF0KGkpOwogICAgICAgICBpZiAoaXNTeXN0
ZW1Gb250U3RyaW5nKGNzc0ZhbWlseSkpIHsKLSAgICAgICAgICAgIGF1dG8gY2FzY2FkZUxpc3Qg
PSBTeXN0ZW1Gb250RGF0YWJhc2U6OnNpbmdsZXRvbigpLnN5c3RlbUZvbnRDYXNjYWRlTGlzdChz
eXN0ZW1Gb250UGFyYW1ldGVycygqdGhpcykpOworICAgICAgICAgICAgYXV0byBjYXNjYWRlTGlz
dCA9IFN5c3RlbUZvbnREYXRhYmFzZTo6c2luZ2xldG9uKCkuc3lzdGVtRm9udENhc2NhZGVMaXN0
KHN5c3RlbUZvbnRQYXJhbWV0ZXJzKCp0aGlzLCBjc3NGYW1pbHksIFN5c3RlbUZvbnREYXRhYmFz
ZTo6Q2xpZW50VXNlOjpGb3JTeXN0ZW1VSSksIFN5c3RlbUZvbnREYXRhYmFzZTo6Q2xpZW50VXNl
OjpGb3JTeXN0ZW1VSSk7CisgICAgICAgICAgICBpZiAoaW5kZXggPCBjYXNjYWRlTGlzdC5zaXpl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uKGNhc2Nh
ZGVMaXN0W2luZGV4XS5nZXQoKSk7CisgICAgICAgICAgICBpbmRleCAtPSBjYXNjYWRlTGlzdC5z
aXplKCk7CisgICAgICAgIH0KKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGVsc2UgaWYgKGlz
VGV4dFN0eWxlU3RyaW5nKGNzc0ZhbWlseSkpIHsKKyAgICAgICAgICAgIGF1dG8gY2FzY2FkZUxp
c3QgPSBTeXN0ZW1Gb250RGF0YWJhc2U6OnNpbmdsZXRvbigpLnN5c3RlbUZvbnRDYXNjYWRlTGlz
dChzeXN0ZW1Gb250UGFyYW1ldGVycygqdGhpcywgY3NzRmFtaWx5LCBTeXN0ZW1Gb250RGF0YWJh
c2U6OkNsaWVudFVzZTo6Rm9yVGV4dFN0eWxlKSwgU3lzdGVtRm9udERhdGFiYXNlOjpDbGllbnRV
c2U6OkZvclN5c3RlbVVJKTsKICAgICAgICAgICAgIGlmIChpbmRleCA8IGNhc2NhZGVMaXN0LnNp
emUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gRm9udEZhbWlseVNwZWNpZmljYXRpb24oY2Fz
Y2FkZUxpc3RbaW5kZXhdLmdldCgpKTsKICAgICAgICAgICAgIGluZGV4IC09IGNhc2NhZGVMaXN0
LnNpemUoKTsKLSAgICAgICAgfSBlbHNlIGlmICghaW5kZXgpCisgICAgICAgIH0KKyNlbmRpZgor
ICAgICAgICBlbHNlIGlmICghaW5kZXgpCiAgICAgICAgICAgICByZXR1cm4gY3NzRmFtaWx5Owog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAtLWluZGV4OwpAQCAtMjUwLDMgKzMzMiw0IEBAIEZv
bnRGYW1pbHlTcGVjaWZpY2F0aW9uIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmVmZmVjdGl2ZUZh
bWlseUF0KHVuc2lnbmVkIGluZGV4CiB9CiAKICNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQppbmRleCA5YzBhZTA1
YWY2NmQ1MjQ1MmZiNTUwNGY5NzgzZmRkZGVkN2U4MGMwLi44OGVkNzVmNmY4ODRhNzQwM2ZmODdi
ZGMxMmQwMmIyNGM1YjdmMWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KQEAgLTE0OCw2ICsxNDgsNyBAQCBzdGF0aWMg
UmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IHN5c3RlbUZvbnREZXNjcmlwdG9yKEZvbnRT
ZWxlY3Rpb25WYWx1ZSB3ZQogUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZh
bWlseVNwZWNpYWxDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9u
UmVxdWVzdCByZXF1ZXN0LCBmbG9hdCBzaXplKQogewogICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0
aCgiVUlDVEZvbnRUZXh0U3R5bGUiKSkgeworI2lmICFVU0VfUExBVEZPUk1fU1lTVEVNX0ZBTExC
QUNLX0xJU1QKICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gKGlzRm9udFdl
aWdodEJvbGQocmVxdWVzdC53ZWlnaHQpIHx8IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc2hvdWxk
TW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eSgpID8ga0NURm9udFRyYWl0Qm9sZCA6
IDApIHwgKGlzSXRhbGljKHJlcXVlc3Quc2xvcGUpID8ga0NURm9udFRyYWl0SXRhbGljIDogMCk7
CiAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZVN0ciA9IGZhbWlseS5z
dHJpbmcoKS5jcmVhdGVDRlN0cmluZygpOwogICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3Jp
cHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVX
aXRoVGV4dFN0eWxlKGZhbWlseU5hbWVTdHIuZ2V0KCksIFJlbmRlclRoZW1lSU9TOjpjb250ZW50
U2l6ZUNhdGVnb3J5KCksIG51bGxwdHIpKTsKQEAgLTE1NSw2ICsxNTYsMTAgQEAgUmV0YWluUHRy
PENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWwKICAgICAgICAgICAgIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZv
bnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhTeW1ib2xpY1RyYWl0cyhmb250RGVzY3JpcHRvci5n
ZXQoKSwgdHJhaXRzLCB0cmFpdHMpKTsKIAogICAgICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRD
cmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxw
dHIpKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKICAgICB9CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAiLXdlYmtpdC1zeXN0ZW0tZm9udCIpIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIi1hcHBsZS1zeXN0ZW0iKSB8fCBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICItYXBwbGUtc3lzdGVtLWZvbnQiKSB8
fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJzeXN0ZW0tdWkiKSkgewpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDkxODczZWNkMzJlYmU3MDVhYjc1Mjg4NDQzNzE4YTc0ZGQwOWIwNGUuLmYxYTE2MDM5
ZDE5NjEyNTAwMzYxM2ZiOTM3YTRkOTA2NjU5ODRmYjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxNy0wNi0yMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisg
ICAgICAgIFtpT1NdIENhbm5vdCBpdGFsaWNpemUgb3IgYm9sZCB0ZXh0IHJlbmRlcmVkIHdpdGgg
dGV4dCBzdHlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MzYzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogZmFzdC90ZXh0L2lwYWQvYm9sZC10YWxsLWJvZHktdGV4dC1zdHlsZS1leHBlY3RlZC1t
aXNtYXRjaC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvaXBhZC9ib2xkLXRhbGwt
Ym9keS10ZXh0LXN0eWxlLmh0bWw6IEFkZGVkLgorCiAyMDE3LTA2LTE5ICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgdGVzdDI2MjogQ29tcGxldGlvbiB2
YWx1ZXMgZm9yIGNvbnRyb2wgZmxvdyBkbyBub3QgbWF0Y2ggdGhlIHNwZWMKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvdGV4dC9pcGFkL2JvbGQtdGFsbC1ib2R5LXRleHQtc3R5bGUtZXhw
ZWN0ZWQtbWlzbWF0Y2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9pcGFkL2JvbGQtdGFs
bC1ib2R5LXRleHQtc3R5bGUtZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Nzcx
MDA5MWY5N2M5NTI1OWI5YWMyNzVjMGUwMzVjYThmZTliMTNlCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0L2lwYWQvYm9sZC10YWxsLWJvZHktdGV4dC1zdHlsZS1leHBl
Y3RlZC1taXNtYXRjaC5odG1sCkBAIC0wLDAgKzEsOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IHN0eWxlPSJmb250OiAtYXBwbGUtc3lz
dGVtLXRhbGwtYm9keTsgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsiPjxzcGFu
IHN0eWxlPSJmb250LWZhbWlseTogJy5TRlVJVGV4dC1MaWdodCc7IGRpc3BsYXk6IGlubGluZS1i
bG9jazsgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7IHRyYW5zZm9ybTogc2NhbGUoMTApOyI+
SGVsbG88L3NwYW4+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L3RleHQvaXBhZC9ib2xkLXRhbGwtYm9keS10ZXh0LXN0eWxlLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L3RleHQvaXBhZC9ib2xkLXRhbGwtYm9keS10ZXh0LXN0eWxlLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODYxYTRmNzljMjdhNTQ1ODYxYTVkM2Q1NzQxZmEzM2QwMjZlYTU3NgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9pcGFkL2JvbGQtdGFsbC1ib2R5LXRl
eHQtc3R5bGUuaHRtbApAQCAtMCwwICsxLDggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBzdHlsZT0iZm9udDogLWFwcGxlLXN5c3RlbS10
YWxsLWJvZHk7Ij48YiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB0cmFuc2Zvcm0tb3Jp
Z2luOiBsZWZ0IHRvcDsgdHJhbnNmb3JtOiBzY2FsZSgxMCk7Ij5IZWxsbzwvYj48L2Rpdj4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313472</attachid>
            <date>2017-06-20 19:34:44 -0700</date>
            <delta_ts>2017-06-25 17:49:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173634-20170620193543.patch</filename>
            <type>text/plain</type>
            <size>18405</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4NTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2U0ZjU5YzI2MjY5Nzhi
MTg1NDNhM2QwZTNlNWJkYjkzN2JmNTA0My4uMDNjYjQzMWIwYzk2YmI1NzE1NWRmYmU4YTRjNTAy
OWY4MTFmM2JkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE3LTA2LTIwICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ2Fu
bm90IGl0YWxpY2l6ZSBvciBib2xkIHRleHQgcmVuZGVyZWQgd2l0aCB0ZXh0IHN0eWxlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNjM0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcjIxODYxNiBlbmFi
bGVkIHRoZSBuZXcgY2FzY2FkZSBsaXN0IGNvZGVwYXRoIGZvciAic3lzdGVtLXVpLCIgYnV0IGRp
ZG4ndCBkbyBpdCBmb3IgdGhlIG5hbWVkCisgICAgICAgIHRleHQgc3R5bGVzIChsaWtlICJmb250
OiAtYXBwbGUtc3lzdGVtLXRhbGwtYm9keTsiKS4gVGhpcyBuZXcgY29kZXBhdGggaXMgYmV0dGVy
IGJlY2F1c2UgaXQKKyAgICAgICAgY29ycmVjdGx5IHNwZWNpZmllcyB3ZWlnaHRzIGFuZCBpdGFs
aWNzICh1c2luZyBrQ1RGb250V2VpZ2h0VHJhaXQgYW5kIGtDVEZvbnRTbGFudFRyYWl0KSBpbnN0
ZWFkCisgICAgICAgIG9mIHVzaW5nIHN5bWJvbGljIHRyYWl0cywgYW5kIGJlY2F1c2UgaXQgY29y
cmVjdGx5IGhhbmRsZXMgZm9udHMgaW4gdGhlIENvcmUgVGV4dCBmYWxsYmFjayBjaGFpbi4KKyAg
ICAgICAgVGhpcyBwYXRjaCBtaWdyYXRlcyB0aGUgbmFtZWQgdGV4dCBzdHlsZXMgdG8gdGhpcyBu
ZXcgY29kZXBhdGguCisKKyAgICAgICAgVGVzdDogZmFzdC90ZXh0L2lwYWQvYm9sZC10YWxsLWJv
ZHktdGV4dC1zdHlsZS5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250RGVzY3JpcHRpb25Db2NvYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1Gb250RGF0
YWJhc2U6OkNvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpDb3JlVGV4dENhc2NhZGVMaXN0
UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1Gb250RGF0YWJhc2U6OkNvcmVU
ZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTeXN0ZW1Gb250RGF0YWJhc2U6OkNvcmVUZXh0Q2FzY2FkZUxpc3RQYXJh
bWV0ZXJzOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlN5c3RlbUZvbnREYXRhYmFz
ZTo6Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnM6Omhhc2gpOgorICAgICAgICAoV2ViQ29y
ZTo6U3lzdGVtRm9udERhdGFiYXNlOjpDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVyczo6Q29y
ZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnNIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OlN5c3RlbUZvbnREYXRhYmFzZTo6Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnM6OkNvcmVU
ZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzSGFzaDo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6
U3lzdGVtRm9udERhdGFiYXNlOjpzeXN0ZW1Gb250Q2FzY2FkZUxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNUZXh0U3R5bGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6c3lzdGVtRm9udFBh
cmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZWZm
ZWN0aXZlRmFtaWx5Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6ZWZmZWN0aXZlRmFtaWx5QXQpOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERh
dGFiYXNlOjpDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2g6Omhhc2gpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlOjpDb3JlVGV4dENhc2NhZGVM
aXN0UGFyYW1ldGVyc0hhc2g6OmVxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1G
b250V2l0aEZhbWlseVNwZWNpYWxDYXNlKToKKwogMjAxNy0wNi0xOSAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtXZWJJRExdIEFkZCBzdXBwb3J0IGZvciBzZXJpYWxp
emVycyB0aGF0IGhhdmUgbWVtYmVycyB0aGF0IGFyZSB0aGVtc2VsdmVzIHNlcmlhbGl6ZXJzIChv
ciBpbmhlcml0IGJlaW5nIGEgc2VyaWFsaXplciBmcm9tIGEgcGFyZW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29j
b2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERlc2Ny
aXB0aW9uQ29jb2EuY3BwCmluZGV4IGJhNjA3OWIwZjY2ZTQ2Nzk5ZTRmMWIxMjA4NDRiMDA1Y2I0
MDJlMDYuLmRmZmJlYjU1Y2YxNDg0ZWIzYTlmM2Y4NzU2ODYwMzc5OTVmMzk1MWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREZXNjcmlwdGlv
bkNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250RGVzY3JpcHRpb25Db2NvYS5jcHAKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFz
aC5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlJlbmRlclRoZW1lSU9TLmgiCisj
ZW5kaWYKKwogI2lmIFVTRV9QTEFURk9STV9TWVNURU1fRkFMTEJBQ0tfTElTVAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC00NSwxOCArNDksMTkgQEAgcHVibGljOgogICAgICAgICB9CiAKICAg
ICAgICAgQ29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQotICAgICAgICAgICAgOiBsb2NhbGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWUpCisgICAgICAgICAgICA6IGZvbnROYW1lKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQog
ICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5pc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGZvbnROYW1lLmlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIG90aGVyKSBjb25zdAogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYWxlID09IG90aGVyLmxvY2FsZQorICAgICAgICAg
ICAgcmV0dXJuIGZvbnROYW1lID09IG90aGVyLmZvbnROYW1lCisgICAgICAgICAgICAgICAgJiYg
bG9jYWxlID09IG90aGVyLmxvY2FsZQogICAgICAgICAgICAgICAgICYmIHdlaWdodCA9PSBvdGhl
ci53ZWlnaHQKICAgICAgICAgICAgICAgICAmJiBzaXplID09IG90aGVyLnNpemUKICAgICAgICAg
ICAgICAgICAmJiBpdGFsaWMgPT0gb3RoZXIuaXRhbGljOwpAQCAtNjUsNiArNzAsOCBAQCBwdWJs
aWM6CiAgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAg
ICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKKyAgICAgICAgICAgIEFTU0VSVCghZm9udE5hbWUuaXNO
dWxsKCkpOworICAgICAgICAgICAgaGFzaGVyLmFkZChsb2NhbGUuZXhpc3RpbmdIYXNoKCkpOwog
ICAgICAgICAgICAgaGFzaGVyLmFkZChsb2NhbGUuaXNOdWxsKCkgPyAwIDogbG9jYWxlLmV4aXN0
aW5nSGFzaCgpKTsKICAgICAgICAgICAgIGhhc2hlci5hZGQod2VpZ2h0KTsKICAgICAgICAgICAg
IGhhc2hlci5hZGQoc2l6ZSk7CkBAIC03Miw2ICs3OSwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICByZXR1cm4gaGFzaGVyLmhhc2goKTsKICAgICAgICAgfQogCisgICAgICAgIHN0cnVjdCBDb3Jl
VGV4dENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2ggOiBXVEY6OlBhaXJIYXNoPEF0b21pY1N0cmlu
ZywgZmxvYXQ+IHsKKyAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENvcmVU
ZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmhhc2goKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENvcmVUZXh0Q2FzY2FkZUxpc3RQYXJh
bWV0ZXJzJiBhLCBjb25zdCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycyYgYikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYSA9PSBiOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworICAgICAgICB9OworCisgICAgICAgIEF0b21pY1N0cmluZyBmb250TmFtZTsK
ICAgICAgICAgQXRvbWljU3RyaW5nIGxvY2FsZTsKICAgICAgICAgQ0dGbG9hdCB3ZWlnaHQgeyAw
IH07CiAgICAgICAgIGZsb2F0IHNpemUgeyAwIH07CkBAIC04NCwyNiArMTA0LDMwIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGRhdGFiYXNlLmdldCgpOwogICAgIH0KIAotICAgIFZlY3RvcjxS
ZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+IHN5c3RlbUZvbnRDYXNjYWRlTGlzdChjb25z
dCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKLSAgICB7Ci0gICAg
ICAgIGF1dG8gY3JlYXRlU3lzdGVtRm9udCA9IFsmXSB7Ci0gICAgICAgICAgICBhdXRvIGxvY2Fs
ZVN0cmluZyA9IHBhcmFtZXRlcnMubG9jYWxlLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobG9jYWxlU3RyaW5nLCBhZG9wdENGKENU
Rm9udENyZWF0ZVVJRm9udEZvckxhbmd1YWdlKGtDVEZvbnRVSUZvbnRTeXN0ZW0sIHBhcmFtZXRl
cnMuc2l6ZSwgbG9jYWxlU3RyaW5nLmdldCgpKSkpOwotICAgICAgICB9OwotCi0gICAgICAgIC8v
IEF2b2lkIGFkZGluZyBhbiBlbXB0eSB2YWx1ZSB0byB0aGUgaGFzaCBtYXAKLSAgICAgICAgaWYg
KCFwYXJhbWV0ZXJzLnNpemUpIHsKLSAgICAgICAgICAgIGF1dG8gc3lzdGVtRm9udCA9IGNyZWF0
ZVN5c3RlbUZvbnQoKS5zZWNvbmQ7Ci0gICAgICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBhZG9w
dENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihzeXN0ZW1Gb250LmdldCgpKSk7Ci0gICAgICAg
ICAgICByZXR1cm4geyByZW1vdmVDYXNjYWRlTGlzdChkZXNjcmlwdG9yLmdldCgpKSB9OwotICAg
ICAgICB9CisgICAgZW51bSBjbGFzcyBDbGllbnRVc2UgeworICAgICAgICBGb3JTeXN0ZW1VSSwK
KyAgICAgICAgRm9yVGV4dFN0eWxlCisgICAgfTsKIAorICAgIFZlY3RvcjxSZXRhaW5QdHI8Q1RG
b250RGVzY3JpcHRvclJlZj4+IHN5c3RlbUZvbnRDYXNjYWRlTGlzdChjb25zdCBDb3JlVGV4dENh
c2NhZGVMaXN0UGFyYW1ldGVycyYgcGFyYW1ldGVycywgQ2xpZW50VXNlIGNsaWVudFVzZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghcGFyYW1ldGVycy5mb250TmFtZS5pc051bGwoKSk7CiAgICAg
ICAgIHJldHVybiBtX3N5c3RlbUZvbnRDYWNoZS5lbnN1cmUocGFyYW1ldGVycywgWyZdIHsKLSAg
ICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbG9jYWxlU3RyaW5nOworICAgICAgICAg
ICAgYXV0byBsb2NhbGVTdHJpbmcgPSBwYXJhbWV0ZXJzLmxvY2FsZS5zdHJpbmcoKS5jcmVhdGVD
RlN0cmluZygpOwogICAgICAgICAgICAgUmV0YWluUHRyPENURm9udFJlZj4gc3lzdGVtRm9udDsK
LSAgICAgICAgICAgIHN0ZDo6dGllKGxvY2FsZVN0cmluZywgc3lzdGVtRm9udCkgPSBjcmVhdGVT
eXN0ZW1Gb250KCk7CisgICAgICAgICAgICBpZiAoY2xpZW50VXNlID09IENsaWVudFVzZTo6Rm9y
U3lzdGVtVUkpCisgICAgICAgICAgICAgICAgc3lzdGVtRm9udCA9IGFkb3B0Q0YoQ1RGb250Q3Jl
YXRlVUlGb250Rm9yTGFuZ3VhZ2Uoa0NURm9udFVJRm9udFN5c3RlbSwgcGFyYW1ldGVycy5zaXpl
LCBsb2NhbGVTdHJpbmcuZ2V0KCkpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChjbGllbnRVc2UgPT0gQ2xpZW50VXNlOjpGb3JUZXh0U3R5bGUpOworICAgICAg
ICAgICAgICAgIGF1dG8gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JD
cmVhdGVXaXRoVGV4dFN0eWxlKHBhcmFtZXRlcnMuZm9udE5hbWUuc3RyaW5nKCkuY3JlYXRlQ0ZT
dHJpbmcoKS5nZXQoKSwgUmVuZGVyVGhlbWVJT1M6OmNvbnRlbnRTaXplQ2F0ZWdvcnkoKSwgbnVs
bHB0cikpOworICAgICAgICAgICAgICAgIHN5c3RlbUZvbnQgPSBhZG9wdENGKENURm9udENyZWF0
ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgcGFyYW1ldGVycy5zaXpl
LCBudWxscHRyKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoc3lzdGVtRm9u
dCk7CiAgICAgICAgICAgICBzeXN0ZW1Gb250ID0gYXBwbHlXZWlnaHRBbmRJdGFsaWNzKHN5c3Rl
bUZvbnQuZ2V0KCksIHBhcmFtZXRlcnMud2VpZ2h0LCBwYXJhbWV0ZXJzLml0YWxpYywgcGFyYW1l
dGVycy5zaXplKTsKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlQ2FzY2FkZUxpc3Qoc3lzdGVt
Rm9udC5nZXQoKSwgbG9jYWxlU3RyaW5nLmdldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChzeXN0
ZW1Gb250KTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29tcHV0ZUNhc2NhZGVMaXN0KHN5
c3RlbUZvbnQuZ2V0KCksIGxvY2FsZVN0cmluZy5nZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQo
IXJlc3VsdC5pc0VtcHR5KCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
fSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KIApAQCAtMTU3LDE5ICsxODEsNyBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIHN0cnVjdCBDb3JlVGV4dENh
c2NhZGVMaXN0UGFyYW1ldGVyc0hhc2ggOiBXVEY6OlBhaXJIYXNoPEF0b21pY1N0cmluZywgZmxv
YXQ+IHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ29yZVRleHRDYXNjYWRl
TGlzdFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBwYXJhbWV0ZXJzLmhhc2goKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycyYgYSwgY29uc3QgQ29yZVRleHRD
YXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBh
ID09IGI7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFy
ZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotICAgIH07Ci0KLSAgICBIYXNoTWFwPENvcmVUZXh0
Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzLCBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0b3JS
ZWY+PiwgQ29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnNIYXNoLCBTaW1wbGVDbGFzc0hhc2hU
cmFpdHM8Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnM+PiBtX3N5c3RlbUZvbnRDYWNoZTsK
KyAgICBIYXNoTWFwPENvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzLCBWZWN0b3I8UmV0YWlu
UHRyPENURm9udERlc2NyaXB0b3JSZWY+PiwgQ29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnM6
OkNvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzSGFzaCwgU2ltcGxlQ2xhc3NIYXNoVHJhaXRz
PENvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzPj4gbV9zeXN0ZW1Gb250Q2FjaGU7CiB9Owog
CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNTeXN0ZW1Gb250U3RyaW5nKGNvbnN0IEF0b21pY1N0cmlu
ZyYgc3RyaW5nKQpAQCAtMTgwLDcgKzE5Miw1NiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTeXN0
ZW1Gb250U3RyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQogICAgICAgICB8fCBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJzeXN0ZW0tdWkiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBTeXN0ZW1Gb250RGF0YWJhc2U6OkNvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0
ZXJzIHN5c3RlbUZvbnRQYXJhbWV0ZXJzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uKQorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1RleHRT
dHlsZVN0cmluZyhjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVIZWFkbGluZShrQ1RVSUZv
bnRUZXh0U3R5bGVIZWFkbGluZSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gVUlGb250VGV4dFN0eWxlQm9keShrQ1RVSUZvbnRUZXh0U3R5bGVCb2R5KTsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVUaXRsZTEo
a0NUVUlGb250VGV4dFN0eWxlVGl0bGUxKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVUaXRsZTIoa0NUVUlGb250VGV4dFN0eWxlVGl0bGUy
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5
bGVUaXRsZTMoa0NUVUlGb250VGV4dFN0eWxlVGl0bGUzKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVTdWJoZWFkKGtDVFVJRm9udFRleHRT
dHlsZVN1YmhlYWQpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IFVJ
Rm9udFRleHRTdHlsZUZvb3Rub3RlKGtDVFVJRm9udFRleHRTdHlsZUZvb3Rub3RlKTsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVDYXB0aW9u
MShrQ1RVSUZvbnRUZXh0U3R5bGVDYXB0aW9uMSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gVUlGb250VGV4dFN0eWxlQ2FwdGlvbjIoa0NUVUlGb250VGV4dFN0eWxl
Q2FwdGlvbjIpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IFVJRm9u
dFRleHRTdHlsZVNob3J0SGVhZGxpbmUoa0NUVUlGb250VGV4dFN0eWxlU2hvcnRIZWFkbGluZSk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gVUlGb250VGV4dFN0eWxl
U2hvcnRCb2R5KGtDVFVJRm9udFRleHRTdHlsZVNob3J0Qm9keSk7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gVUlGb250VGV4dFN0eWxlU2hvcnRTdWJoZWFkKGtDVFVJ
Rm9udFRleHRTdHlsZVNob3J0U3ViaGVhZCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gVUlGb250VGV4dFN0eWxlU2hvcnRGb290bm90ZShrQ1RVSUZvbnRUZXh0U3R5
bGVTaG9ydEZvb3Rub3RlKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBVSUZvbnRUZXh0U3R5bGVTaG9ydENhcHRpb24xKGtDVFVJRm9udFRleHRTdHlsZVNob3J0Q2Fw
dGlvbjEpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IFVJRm9udFRl
eHRTdHlsZVRhbGxCb2R5KGtDVFVJRm9udFRleHRTdHlsZVRhbGxCb2R5KTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBGb250RGVzY3JpcHRvclRleHRTdHlsZUVtcGhh
c2l6ZWQoa0NURm9udERlc2NyaXB0b3JUZXh0U3R5bGVFbXBoYXNpemVkKTsKKyNpZiBfX0lQSE9O
RV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZvbnRUZXh0U3R5bGVUaXRsZTAoa0NUVUlGb250VGV4dFN0
eWxlVGl0bGUwKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBVSUZv
bnRUZXh0U3R5bGVUaXRsZTQoa0NUVUlGb250VGV4dFN0eWxlVGl0bGU0KTsKKyNlbmRpZgorCisg
ICAgcmV0dXJuIHN0cmluZyA9PSBVSUZvbnRUZXh0U3R5bGVIZWFkbGluZS5nZXQoKQorICAgICAg
ICB8fCBzdHJpbmcgPT0gVUlGb250VGV4dFN0eWxlQm9keS5nZXQoKQorICAgICAgICB8fCBzdHJp
bmcgPT0gVUlGb250VGV4dFN0eWxlVGl0bGUxLmdldCgpCisgICAgICAgIHx8IHN0cmluZyA9PSBV
SUZvbnRUZXh0U3R5bGVUaXRsZTIuZ2V0KCkKKyAgICAgICAgfHwgc3RyaW5nID09IFVJRm9udFRl
eHRTdHlsZVRpdGxlMy5nZXQoKQorICAgICAgICB8fCBzdHJpbmcgPT0gVUlGb250VGV4dFN0eWxl
U3ViaGVhZC5nZXQoKQorICAgICAgICB8fCBzdHJpbmcgPT0gVUlGb250VGV4dFN0eWxlRm9vdG5v
dGUuZ2V0KCkKKyAgICAgICAgfHwgc3RyaW5nID09IFVJRm9udFRleHRTdHlsZUNhcHRpb24xLmdl
dCgpCisgICAgICAgIHx8IHN0cmluZyA9PSBVSUZvbnRUZXh0U3R5bGVDYXB0aW9uMi5nZXQoKQor
ICAgICAgICB8fCBzdHJpbmcgPT0gVUlGb250VGV4dFN0eWxlU2hvcnRIZWFkbGluZS5nZXQoKQor
ICAgICAgICB8fCBzdHJpbmcgPT0gVUlGb250VGV4dFN0eWxlU2hvcnRCb2R5LmdldCgpCisgICAg
ICAgIHx8IHN0cmluZyA9PSBVSUZvbnRUZXh0U3R5bGVTaG9ydFN1YmhlYWQuZ2V0KCkKKyAgICAg
ICAgfHwgc3RyaW5nID09IFVJRm9udFRleHRTdHlsZVNob3J0Rm9vdG5vdGUuZ2V0KCkKKyAgICAg
ICAgfHwgc3RyaW5nID09IFVJRm9udFRleHRTdHlsZVNob3J0Q2FwdGlvbjEuZ2V0KCkKKyAgICAg
ICAgfHwgc3RyaW5nID09IFVJRm9udFRleHRTdHlsZVRhbGxCb2R5LmdldCgpCisjaWYgX19JUEhP
TkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwCisgICAgICAgIHx8IHN0cmluZyA9
PSBGb250RGVzY3JpcHRvclRleHRTdHlsZUVtcGhhc2l6ZWQuZ2V0KCkKKyAgICAgICAgfHwgc3Ry
aW5nID09IFVJRm9udFRleHRTdHlsZVRpdGxlMC5nZXQoKQorICAgICAgICB8fCBzdHJpbmcgPT0g
VUlGb250VGV4dFN0eWxlVGl0bGU0LmdldCgpOworI2Vsc2UKKyAgICAgICAgfHwgc3RyaW5nID09
IEZvbnREZXNjcmlwdG9yVGV4dFN0eWxlRW1waGFzaXplZC5nZXQoKTsKKyNlbmRpZgorfQorI2Vu
ZGlmCisKK3N0YXRpYyBpbmxpbmUgU3lzdGVtRm9udERhdGFiYXNlOjpDb3JlVGV4dENhc2NhZGVM
aXN0UGFyYW1ldGVycyBzeXN0ZW1Gb250UGFyYW1ldGVycyhjb25zdCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBTeXN0
ZW1Gb250RGF0YWJhc2U6OkNsaWVudFVzZSBjbGllbnRVc2UpCiB7CiAgICAgU3lzdGVtRm9udERh
dGFiYXNlOjpDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycyByZXN1bHQ7CiAgICAgcmVzdWx0
LmxvY2FsZSA9IGRlc2NyaXB0aW9uLmxvY2FsZSgpOwpAQCAtMjA3LDYgKzI2OCwxNCBAQCBzdGF0
aWMgaW5saW5lIFN5c3RlbUZvbnREYXRhYmFzZTo6Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRl
cnMgc3lzdGVtRm9udFBhcmFtZQogICAgIGVsc2UKICAgICAgICAgcmVzdWx0LndlaWdodCA9IGtD
VEZvbnRXZWlnaHRCbGFjazsKIAorICAgIGlmIChjbGllbnRVc2UgPT0gU3lzdGVtRm9udERhdGFi
YXNlOjpDbGllbnRVc2U6OkZvclN5c3RlbVVJKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IHN5c3RlbVVJID0gQXRvbWljU3RyaW5nKCJzeXN0ZW0tdWkiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgcmVzdWx0LmZvbnRO
YW1lID0gc3lzdGVtVUkuZ2V0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGNsaWVu
dFVzZSA9PSBTeXN0ZW1Gb250RGF0YWJhc2U6OkNsaWVudFVzZTo6Rm9yVGV4dFN0eWxlKTsKKyAg
ICAgICAgcmVzdWx0LmZvbnROYW1lID0gZmFtaWx5TmFtZTsKKyAgICB9CisKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC0yMjIsNyArMjkxLDExIEBAIHVuc2lnbmVkIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUNvdW50KCkgY29uc3QKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZmFtaWx5Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIGNz
c0ZhbWlseSA9IGZhbWlseUF0KGkpOwogICAgICAgICBpZiAoaXNTeXN0ZW1Gb250U3RyaW5nKGNz
c0ZhbWlseSkpCi0gICAgICAgICAgICByZXN1bHQgKz0gU3lzdGVtRm9udERhdGFiYXNlOjpzaW5n
bGV0b24oKS5zeXN0ZW1Gb250Q2FzY2FkZUxpc3Qoc3lzdGVtRm9udFBhcmFtZXRlcnMoKnRoaXMp
KS5zaXplKCk7CisgICAgICAgICAgICByZXN1bHQgKz0gU3lzdGVtRm9udERhdGFiYXNlOjpzaW5n
bGV0b24oKS5zeXN0ZW1Gb250Q2FzY2FkZUxpc3Qoc3lzdGVtRm9udFBhcmFtZXRlcnMoKnRoaXMs
IGNzc0ZhbWlseSwgU3lzdGVtRm9udERhdGFiYXNlOjpDbGllbnRVc2U6OkZvclN5c3RlbVVJKSwg
U3lzdGVtRm9udERhdGFiYXNlOjpDbGllbnRVc2U6OkZvclN5c3RlbVVJKS5zaXplKCk7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgICAgICBlbHNlIGlmIChpc1RleHRTdHlsZVN0cmluZyhjc3NGYW1p
bHkpKQorICAgICAgICAgICAgcmVzdWx0ICs9IFN5c3RlbUZvbnREYXRhYmFzZTo6c2luZ2xldG9u
KCkuc3lzdGVtRm9udENhc2NhZGVMaXN0KHN5c3RlbUZvbnRQYXJhbWV0ZXJzKCp0aGlzLCBjc3NG
YW1pbHksIFN5c3RlbUZvbnREYXRhYmFzZTo6Q2xpZW50VXNlOjpGb3JUZXh0U3R5bGUpLCBTeXN0
ZW1Gb250RGF0YWJhc2U6OkNsaWVudFVzZTo6Rm9yVGV4dFN0eWxlKS5zaXplKCk7CisjZW5kaWYK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgfQpAQCAtMjM0LDExICsz
MDcsMjAgQEAgRm9udEZhbWlseVNwZWNpZmljYXRpb24gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZWZmZWN0aXZlRmFtaWx5QXQodW5zaWduZWQgaW5kZXgKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZmFtaWx5Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIGNzc0ZhbWls
eSA9IGZhbWlseUF0KGkpOwogICAgICAgICBpZiAoaXNTeXN0ZW1Gb250U3RyaW5nKGNzc0ZhbWls
eSkpIHsKLSAgICAgICAgICAgIGF1dG8gY2FzY2FkZUxpc3QgPSBTeXN0ZW1Gb250RGF0YWJhc2U6
OnNpbmdsZXRvbigpLnN5c3RlbUZvbnRDYXNjYWRlTGlzdChzeXN0ZW1Gb250UGFyYW1ldGVycygq
dGhpcykpOworICAgICAgICAgICAgYXV0byBjYXNjYWRlTGlzdCA9IFN5c3RlbUZvbnREYXRhYmFz
ZTo6c2luZ2xldG9uKCkuc3lzdGVtRm9udENhc2NhZGVMaXN0KHN5c3RlbUZvbnRQYXJhbWV0ZXJz
KCp0aGlzLCBjc3NGYW1pbHksIFN5c3RlbUZvbnREYXRhYmFzZTo6Q2xpZW50VXNlOjpGb3JTeXN0
ZW1VSSksIFN5c3RlbUZvbnREYXRhYmFzZTo6Q2xpZW50VXNlOjpGb3JTeXN0ZW1VSSk7CisgICAg
ICAgICAgICBpZiAoaW5kZXggPCBjYXNjYWRlTGlzdC5zaXplKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uKGNhc2NhZGVMaXN0W2luZGV4XS5nZXQoKSk7
CisgICAgICAgICAgICBpbmRleCAtPSBjYXNjYWRlTGlzdC5zaXplKCk7CisgICAgICAgIH0KKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgIGVsc2UgaWYgKGlzVGV4dFN0eWxlU3RyaW5nKGNzc0Zh
bWlseSkpIHsKKyAgICAgICAgICAgIGF1dG8gY2FzY2FkZUxpc3QgPSBTeXN0ZW1Gb250RGF0YWJh
c2U6OnNpbmdsZXRvbigpLnN5c3RlbUZvbnRDYXNjYWRlTGlzdChzeXN0ZW1Gb250UGFyYW1ldGVy
cygqdGhpcywgY3NzRmFtaWx5LCBTeXN0ZW1Gb250RGF0YWJhc2U6OkNsaWVudFVzZTo6Rm9yVGV4
dFN0eWxlKSwgU3lzdGVtRm9udERhdGFiYXNlOjpDbGllbnRVc2U6OkZvclN5c3RlbVVJKTsKICAg
ICAgICAgICAgIGlmIChpbmRleCA8IGNhc2NhZGVMaXN0LnNpemUoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gRm9udEZhbWlseVNwZWNpZmljYXRpb24oY2FzY2FkZUxpc3RbaW5kZXhdLmdldCgp
KTsKICAgICAgICAgICAgIGluZGV4IC09IGNhc2NhZGVMaXN0LnNpemUoKTsKLSAgICAgICAgfSBl
bHNlIGlmICghaW5kZXgpCisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBlbHNlIGlmICghaW5k
ZXgpCiAgICAgICAgICAgICByZXR1cm4gY3NzRmFtaWx5OwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAtLWluZGV4OwpAQCAtMjUwLDMgKzMzMiw0IEBAIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9u
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUF0KHVuc2lnbmVkIGluZGV4
CiB9CiAKICNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9pb3MvRm9udENhY2hlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQppbmRleCA5YzBhZTA1YWY2NmQ1MjQ1MmZiNTUwNGY5Nzgz
ZmRkZGVkN2U4MGMwLi44OGVkNzVmNmY4ODRhNzQwM2ZmODdiZGMxMmQwMmIyNGM1YjdmMWQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hl
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2Fj
aGVJT1MubW0KQEAgLTE0OCw2ICsxNDgsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udERlc2Ny
aXB0b3JSZWY+IHN5c3RlbUZvbnREZXNjcmlwdG9yKEZvbnRTZWxlY3Rpb25WYWx1ZSB3ZQogUmV0
YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBmbG9h
dCBzaXplKQogewogICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgiVUlDVEZvbnRUZXh0U3R5bGUi
KSkgeworI2lmICFVU0VfUExBVEZPUk1fU1lTVEVNX0ZBTExCQUNLX0xJU1QKICAgICAgICAgQ1RG
b250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gKGlzRm9udFdlaWdodEJvbGQocmVxdWVzdC53ZWln
aHQpIHx8IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9y
QWNjZXNzaWJpbGl0eSgpID8ga0NURm9udFRyYWl0Qm9sZCA6IDApIHwgKGlzSXRhbGljKHJlcXVl
c3Quc2xvcGUpID8ga0NURm9udFRyYWl0SXRhbGljIDogMCk7CiAgICAgICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gZmFtaWx5TmFtZVN0ciA9IGZhbWlseS5zdHJpbmcoKS5jcmVhdGVDRlN0cmlu
ZygpOwogICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0
b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKGZhbWlseU5h
bWVTdHIuZ2V0KCksIFJlbmRlclRoZW1lSU9TOjpjb250ZW50U2l6ZUNhdGVnb3J5KCksIG51bGxw
dHIpKTsKQEAgLTE1NSw2ICsxNTYsMTAgQEAgUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1G
b250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWwKICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29w
eVdpdGhTeW1ib2xpY1RyYWl0cyhmb250RGVzY3JpcHRvci5nZXQoKSwgdHJhaXRzLCB0cmFpdHMp
KTsKIAogICAgICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0
b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpKTsKKyNlbHNlCisgICAgICAg
IFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisj
ZW5kaWYKICAgICB9CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFt
aWx5LCAiLXdlYmtpdC1zeXN0ZW0tZm9udCIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGZhbWlseSwgIi1hcHBsZS1zeXN0ZW0iKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShmYW1pbHksICItYXBwbGUtc3lzdGVtLWZvbnQiKSB8fCBlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHksICJzeXN0ZW0tdWkiKSkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDkxODczZWNkMzJlYmU3
MDVhYjc1Mjg4NDQzNzE4YTc0ZGQwOWIwNGUuLmYxYTE2MDM5ZDE5NjEyNTAwMzYxM2ZiOTM3YTRk
OTA2NjU5ODRmYjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNy0wNi0yMCAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIENhbm5vdCBp
dGFsaWNpemUgb3IgYm9sZCB0ZXh0IHJlbmRlcmVkIHdpdGggdGV4dCBzdHlsZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzYzNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC90ZXh0L2lwYWQv
Ym9sZC10YWxsLWJvZHktdGV4dC1zdHlsZS1leHBlY3RlZC1taXNtYXRjaC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L3RleHQvaXBhZC9ib2xkLXRhbGwtYm9keS10ZXh0LXN0eWxlLmh0bWw6
IEFkZGVkLgorCiAyMDE3LTA2LTE5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5j
b20+CiAKICAgICAgICAgdGVzdDI2MjogQ29tcGxldGlvbiB2YWx1ZXMgZm9yIGNvbnRyb2wgZmxv
dyBkbyBub3QgbWF0Y2ggdGhlIHNwZWMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4
dC9pcGFkL2JvbGQtdGFsbC1ib2R5LXRleHQtc3R5bGUtZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvdGV4dC9pcGFkL2JvbGQtdGFsbC1ib2R5LXRleHQtc3R5bGUtZXhw
ZWN0ZWQtbWlzbWF0Y2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzcxMDA5MWY5N2M5NTI1OWI5YWMyNzVj
MGUwMzVjYThmZTliMTNlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
L2lwYWQvYm9sZC10YWxsLWJvZHktdGV4dC1zdHlsZS1leHBlY3RlZC1taXNtYXRjaC5odG1sCkBA
IC0wLDAgKzEsOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8ZGl2IHN0eWxlPSJmb250OiAtYXBwbGUtc3lzdGVtLXRhbGwtYm9keTsgdGV4dC1y
ZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTog
Jy5TRlVJVGV4dC1MaWdodCc7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdHJhbnNmb3JtLW9yaWdp
bjogbGVmdCB0b3A7IHRyYW5zZm9ybTogc2NhbGUoMTApOyI+SGVsbG88L3NwYW4+PC9kaXY+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvaXBhZC9i
b2xkLXRhbGwtYm9keS10ZXh0LXN0eWxlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvaXBh
ZC9ib2xkLXRhbGwtYm9keS10ZXh0LXN0eWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODYxYTRmNzljMjdh
NTQ1ODYxYTVkM2Q1NzQxZmEzM2QwMjZlYTU3NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC9pcGFkL2JvbGQtdGFsbC1ib2R5LXRleHQtc3R5bGUuaHRtbApAQCAtMCww
ICsxLDggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5
PgorPGRpdiBzdHlsZT0iZm9udDogLWFwcGxlLXN5c3RlbS10YWxsLWJvZHk7Ij48YiBzdHlsZT0i
ZGlzcGxheTogaW5saW5lLWJsb2NrOyB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDsgdHJhbnNm
b3JtOiBzY2FsZSgxMCk7Ij5IZWxsbzwvYj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="334361"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313973</attachid>
            <date>2017-06-27 19:18:33 -0700</date>
            <delta_ts>2017-06-27 19:18:33 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-173634-20170627191945.patch</filename>
            <type>text/plain</type>
            <size>17423</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4ODUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJhZTY1NTVhOThhMzFk
YmIxMzNiZDhhNDcwZTY5OGNhNTMzYmIzOC4uOGNmMDhiMjY2NDU4NzY4MmY2ZjNhMWI5NTNiODg5
ZTM2NGM3NzhjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE3LTA2LTI3ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQ2Fu
bm90IGl0YWxpY2l6ZSBvciBib2xkIHRleHQgcmVuZGVyZWQgd2l0aCB0ZXh0IHN0eWxlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNjM0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcjIxODYxNiBlbmFi
bGVkIHRoZSBuZXcgY2FzY2FkZSBsaXN0IGNvZGVwYXRoIGZvciAic3lzdGVtLXVpLCIgYnV0IGRp
ZG4ndCBkbyBpdCBmb3IgdGhlIG5hbWVkCisgICAgICAgIHRleHQgc3R5bGVzIChsaWtlICJmb250
OiAtYXBwbGUtc3lzdGVtLXRhbGwtYm9keTsiKS4gVGhpcyBuZXcgY29kZXBhdGggaXMgYmV0dGVy
IGJlY2F1c2UgaXQKKyAgICAgICAgY29ycmVjdGx5IHNwZWNpZmllcyB3ZWlnaHRzIGFuZCBpdGFs
aWNzICh1c2luZyBrQ1RGb250V2VpZ2h0VHJhaXQgYW5kIGtDVEZvbnRTbGFudFRyYWl0KSBpbnN0
ZWFkCisgICAgICAgIG9mIHVzaW5nIHN5bWJvbGljIHRyYWl0cywgYW5kIGJlY2F1c2UgaXQgY29y
cmVjdGx5IGhhbmRsZXMgZm9udHMgaW4gdGhlIENvcmUgVGV4dCBmYWxsYmFjayBjaGFpbi4KKyAg
ICAgICAgVGhpcyBwYXRjaCBtaWdyYXRlcyB0aGUgbmFtZWQgdGV4dCBzdHlsZXMgdG8gdGhpcyBu
ZXcgY29kZXBhdGguCisKKyAgICAgICAgVGVzdDogZmFzdC90ZXh0L2lwYWQvYm9sZC10YWxsLWJv
ZHktdGV4dC1zdHlsZS5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250RGVzY3JpcHRpb25Db2NvYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1Gb250RGF0
YWJhc2U6OkNvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpDb3JlVGV4dENhc2NhZGVMaXN0
UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1Gb250RGF0YWJhc2U6OkNvcmVU
ZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTeXN0ZW1Gb250RGF0YWJhc2U6OkNvcmVUZXh0Q2FzY2FkZUxpc3RQYXJh
bWV0ZXJzOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlN5c3RlbUZvbnREYXRhYmFz
ZTo6Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnM6Omhhc2gpOgorICAgICAgICAoV2ViQ29y
ZTo6U3lzdGVtRm9udERhdGFiYXNlOjpDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVyczo6Q29y
ZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnNIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OlN5c3RlbUZvbnREYXRhYmFzZTo6Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnM6OkNvcmVU
ZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzSGFzaDo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6
U3lzdGVtRm9udERhdGFiYXNlOjpzeXN0ZW1Gb250Q2FzY2FkZUxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlTmV2ZXJEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
aXNVSUZvbnRUZXh0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6c3lzdGVtRm9udFBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZl
RmFtaWx5Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZWZmZWN0aXZlRmFtaWx5QXQpOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNl
OjpDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2g6Omhhc2gpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlOjpDb3JlVGV4dENhc2NhZGVMaXN0UGFy
YW1ldGVyc0hhc2g6OmVxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvRm9udENhY2hlSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1Gb250V2l0
aEZhbWlseVNwZWNpYWxDYXNlKToKKwogMjAxNy0wNi0yNyAgQW50b2luZSBRdWludCAgPGdyYW91
dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtNb2Rlcm4gTWVkaWEgQ29udHJvbHNdIEFjY2Vzc2li
aWxpdHkgbGFiZWxzIHNob3VsZCBiZSBmb3JtYXR0ZWQgdXNpbmcgTlNEYXRlQ29tcG9uZW50c0Zv
cm1hdHRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCmluZGV4IGJhNjA3OWIwZjY2ZTQ2
Nzk5ZTRmMWIxMjA4NDRiMDA1Y2I0MDJlMDYuLjQ2NDMwMjU0NjA3Mjk1NTk2M2YzMGI1NTU3MWUx
MzllNjZjMWUwZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RGVzY3JpcHRpb25Db2NvYS5jcHAKQEAgLTMzLDYgKzMz
LDEwIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgogCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUg
IlJlbmRlclRoZW1lSU9TLmgiCisjZW5kaWYKKwogI2lmIFVTRV9QTEFURk9STV9TWVNURU1fRkFM
TEJBQ0tfTElTVAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSwxOCArNDksMTkgQEAgcHVi
bGljOgogICAgICAgICB9CiAKICAgICAgICAgQ29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICAgICAgOiBsb2NhbGUoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAgICAgICAgICA6IGZvbnROYW1lKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGxvY2FsZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgICAgICAgICAgcmV0
dXJuIGZvbnROYW1lLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMm
IG90aGVyKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYWxlID09IG90
aGVyLmxvY2FsZQorICAgICAgICAgICAgcmV0dXJuIGZvbnROYW1lID09IG90aGVyLmZvbnROYW1l
CisgICAgICAgICAgICAgICAgJiYgbG9jYWxlID09IG90aGVyLmxvY2FsZQogICAgICAgICAgICAg
ICAgICYmIHdlaWdodCA9PSBvdGhlci53ZWlnaHQKICAgICAgICAgICAgICAgICAmJiBzaXplID09
IG90aGVyLnNpemUKICAgICAgICAgICAgICAgICAmJiBpdGFsaWMgPT0gb3RoZXIuaXRhbGljOwpA
QCAtNjUsNiArNzAsOCBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKKyAgICAgICAgICAg
IEFTU0VSVCghZm9udE5hbWUuaXNOdWxsKCkpOworICAgICAgICAgICAgaGFzaGVyLmFkZChsb2Nh
bGUuZXhpc3RpbmdIYXNoKCkpOwogICAgICAgICAgICAgaGFzaGVyLmFkZChsb2NhbGUuaXNOdWxs
KCkgPyAwIDogbG9jYWxlLmV4aXN0aW5nSGFzaCgpKTsKICAgICAgICAgICAgIGhhc2hlci5hZGQo
d2VpZ2h0KTsKICAgICAgICAgICAgIGhhc2hlci5hZGQoc2l6ZSk7CkBAIC03Miw2ICs3OSwxOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKICAgICAgICAgfQog
CisgICAgICAgIHN0cnVjdCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2ggOiBXVEY6
OlBhaXJIYXNoPEF0b21pY1N0cmluZywgZmxvYXQ+IHsKKyAgICAgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IENvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmhhc2go
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENv
cmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBhLCBjb25zdCBDb3JlVGV4dENhc2NhZGVMaXN0
UGFyYW1ldGVycyYgYikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYSA9
PSBiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgICAgICB9OworCisgICAgICAgIEF0
b21pY1N0cmluZyBmb250TmFtZTsKICAgICAgICAgQXRvbWljU3RyaW5nIGxvY2FsZTsKICAgICAg
ICAgQ0dGbG9hdCB3ZWlnaHQgeyAwIH07CiAgICAgICAgIGZsb2F0IHNpemUgeyAwIH07CkBAIC04
NCwyNiArMTA0LDMxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGRhdGFiYXNlLmdldCgpOwog
ICAgIH0KIAotICAgIFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+IHN5c3Rl
bUZvbnRDYXNjYWRlTGlzdChjb25zdCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycyYgcGFy
YW1ldGVycykKLSAgICB7Ci0gICAgICAgIGF1dG8gY3JlYXRlU3lzdGVtRm9udCA9IFsmXSB7Ci0g
ICAgICAgICAgICBhdXRvIGxvY2FsZVN0cmluZyA9IHBhcmFtZXRlcnMubG9jYWxlLnN0cmluZygp
LmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobG9j
YWxlU3RyaW5nLCBhZG9wdENGKENURm9udENyZWF0ZVVJRm9udEZvckxhbmd1YWdlKGtDVEZvbnRV
SUZvbnRTeXN0ZW0sIHBhcmFtZXRlcnMuc2l6ZSwgbG9jYWxlU3RyaW5nLmdldCgpKSkpOwotICAg
ICAgICB9OwotCi0gICAgICAgIC8vIEF2b2lkIGFkZGluZyBhbiBlbXB0eSB2YWx1ZSB0byB0aGUg
aGFzaCBtYXAKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLnNpemUpIHsKLSAgICAgICAgICAgIGF1
dG8gc3lzdGVtRm9udCA9IGNyZWF0ZVN5c3RlbUZvbnQoKS5zZWNvbmQ7Ci0gICAgICAgICAgICBh
dXRvIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihzeXN0ZW1G
b250LmdldCgpKSk7Ci0gICAgICAgICAgICByZXR1cm4geyByZW1vdmVDYXNjYWRlTGlzdChkZXNj
cmlwdG9yLmdldCgpKSB9OwotICAgICAgICB9CisgICAgZW51bSBjbGFzcyBDbGllbnRVc2UgeyBG
b3JTeXN0ZW1VSSwgRm9yVGV4dFN0eWxlIH07CiAKKyAgICBWZWN0b3I8UmV0YWluUHRyPENURm9u
dERlc2NyaXB0b3JSZWY+PiBzeXN0ZW1Gb250Q2FzY2FkZUxpc3QoY29uc3QgQ29yZVRleHRDYXNj
YWRlTGlzdFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIENsaWVudFVzZSBjbGllbnRVc2UpCisgICAg
eworICAgICAgICBBU1NFUlQoIXBhcmFtZXRlcnMuZm9udE5hbWUuaXNOdWxsKCkpOwogICAgICAg
ICByZXR1cm4gbV9zeXN0ZW1Gb250Q2FjaGUuZW5zdXJlKHBhcmFtZXRlcnMsIFsmXSB7Ci0gICAg
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxvY2FsZVN0cmluZzsKKyAgICAgICAgICAg
IGF1dG8gbG9jYWxlU3RyaW5nID0gcGFyYW1ldGVycy5sb2NhbGUuc3RyaW5nKCkuY3JlYXRlQ0ZT
dHJpbmcoKTsKICAgICAgICAgICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHN5c3RlbUZvbnQ7Ci0g
ICAgICAgICAgICBzdGQ6OnRpZShsb2NhbGVTdHJpbmcsIHN5c3RlbUZvbnQpID0gY3JlYXRlU3lz
dGVtRm9udCgpOworICAgICAgICAgICAgaWYgKGNsaWVudFVzZSA9PSBDbGllbnRVc2U6OkZvclN5
c3RlbVVJKQorICAgICAgICAgICAgICAgIHN5c3RlbUZvbnQgPSBhZG9wdENGKENURm9udENyZWF0
ZVVJRm9udEZvckxhbmd1YWdlKGtDVEZvbnRVSUZvbnRTeXN0ZW0sIHBhcmFtZXRlcnMuc2l6ZSwg
bG9jYWxlU3RyaW5nLmdldCgpKSk7CisgICAgICAgICAgICBlbHNlIHsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgICAgICAgICAgQVNTRVJUKGNsaWVudFVzZSA9PSBDbGllbnRVc2U6OkZvclRl
eHRTdHlsZSk7CisgICAgICAgICAgICAgICAgYXV0byBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0Yo
Q1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUocGFyYW1ldGVycy5mb250TmFtZS5z
dHJpbmcoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBSZW5kZXJUaGVtZUlPUzo6Y29udGVudFNp
emVDYXRlZ29yeSgpLCBudWxscHRyKSk7CisgICAgICAgICAgICAgICAgc3lzdGVtRm9udCA9IGFk
b3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgp
LCBwYXJhbWV0ZXJzLnNpemUsIG51bGxwdHIpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFT
U0VSVChzeXN0ZW1Gb250KTsKICAgICAgICAgICAgIHN5c3RlbUZvbnQgPSBhcHBseVdlaWdodEFu
ZEl0YWxpY3Moc3lzdGVtRm9udC5nZXQoKSwgcGFyYW1ldGVycy53ZWlnaHQsIHBhcmFtZXRlcnMu
aXRhbGljLCBwYXJhbWV0ZXJzLnNpemUpOwotICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVDYXNj
YWRlTGlzdChzeXN0ZW1Gb250LmdldCgpLCBsb2NhbGVTdHJpbmcuZ2V0KCkpOworICAgICAgICAg
ICAgQVNTRVJUKHN5c3RlbUZvbnQpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjb21wdXRl
Q2FzY2FkZUxpc3Qoc3lzdGVtRm9udC5nZXQoKSwgbG9jYWxlU3RyaW5nLmdldCgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghcmVzdWx0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogCkBAIC0xNTcsMTkgKzE4
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgc3Ry
dWN0IENvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzSGFzaCA6IFdURjo6UGFpckhhc2g8QXRv
bWljU3RyaW5nLCBmbG9hdD4gewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBD
b3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMuaGFzaCgpOwotICAgICAgICB9Ci0gICAgICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IENvcmVUZXh0Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBhLCBj
b25zdCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycyYgYikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Ci0gICAgfTsKLQotICAgIEhh
c2hNYXA8Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMsIFZlY3RvcjxSZXRhaW5QdHI8Q1RG
b250RGVzY3JpcHRvclJlZj4+LCBDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVyc0hhc2gsIFNp
bXBsZUNsYXNzSGFzaFRyYWl0czxDb3JlVGV4dENhc2NhZGVMaXN0UGFyYW1ldGVycz4+IG1fc3lz
dGVtRm9udENhY2hlOworICAgIEhhc2hNYXA8Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMs
IFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+LCBDb3JlVGV4dENhc2NhZGVM
aXN0UGFyYW1ldGVyczo6Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnNIYXNoLCBTaW1wbGVD
bGFzc0hhc2hUcmFpdHM8Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnM+PiBtX3N5c3RlbUZv
bnRDYWNoZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1N5c3RlbUZvbnRTdHJpbmcoY29u
c3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCkBAIC0xODAsNyArMTkzLDU0IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc1N5c3RlbUZvbnRTdHJpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCiAg
ICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInN5c3RlbS11
aSIpOwogfQogCi1zdGF0aWMgaW5saW5lIFN5c3RlbUZvbnREYXRhYmFzZTo6Q29yZVRleHRDYXNj
YWRlTGlzdFBhcmFtZXRlcnMgc3lzdGVtRm9udFBhcmFtZXRlcnMoY29uc3QgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCisjaWYgUExBVEZPUk0oSU9TKQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCBzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OnNpemVfdC4uLiBp
bmRpY2VzPiBzdGQ6OmFycmF5PFQsIHNpemU+IGNvbnZlcnRBcnJheShVICgmYXJyYXkpW3NpemVd
LCBzdGQ6OmluZGV4X3NlcXVlbmNlPGluZGljZXMuLi4+KQoreworICAgIHJldHVybiB7IHsgYXJy
YXlbaW5kaWNlc10uLi4gfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCBzdGQ6OnNpemVfdCBzaXplPiBpbmxpbmUgc3RkOjphcnJheTxULCBzaXplPiBjb252ZXJ0QXJy
YXkoVSAoJmFycmF5KVtzaXplXSkKK3sKKyAgICByZXR1cm4gY29udmVydEFycmF5PFQ+KGFycmF5
LCBzdGQ6Om1ha2VfaW5kZXhfc2VxdWVuY2U8c2l6ZT4geyB9KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIE5ldmVyRGVzdHJveWVkPFQ+IG1ha2VOZXZlckRlc3Ryb3llZChUJiYg
YXJndW1lbnQpCit7CisgICAgcmV0dXJuIFdURk1vdmUoYXJndW1lbnQpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNVSUZvbnRUZXh0U3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcp
Cit7CisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHN0eWxlc1tdID0geworICAgICAgICBr
Q1RVSUZvbnRUZXh0U3R5bGVIZWFkbGluZSwKKyAgICAgICAga0NUVUlGb250VGV4dFN0eWxlQm9k
eSwKKyAgICAgICAga0NUVUlGb250VGV4dFN0eWxlVGl0bGUxLAorICAgICAgICBrQ1RVSUZvbnRU
ZXh0U3R5bGVUaXRsZTIsCisgICAgICAgIGtDVFVJRm9udFRleHRTdHlsZVRpdGxlMywKKyAgICAg
ICAga0NUVUlGb250VGV4dFN0eWxlU3ViaGVhZCwKKyAgICAgICAga0NUVUlGb250VGV4dFN0eWxl
Rm9vdG5vdGUsCisgICAgICAgIGtDVFVJRm9udFRleHRTdHlsZUNhcHRpb24xLAorICAgICAgICBr
Q1RVSUZvbnRUZXh0U3R5bGVDYXB0aW9uMiwKKyAgICAgICAga0NUVUlGb250VGV4dFN0eWxlU2hv
cnRIZWFkbGluZSwKKyAgICAgICAga0NUVUlGb250VGV4dFN0eWxlU2hvcnRCb2R5LAorICAgICAg
ICBrQ1RVSUZvbnRUZXh0U3R5bGVTaG9ydFN1YmhlYWQsCisgICAgICAgIGtDVFVJRm9udFRleHRT
dHlsZVNob3J0Rm9vdG5vdGUsCisgICAgICAgIGtDVFVJRm9udFRleHRTdHlsZVNob3J0Q2FwdGlv
bjEsCisgICAgICAgIGtDVFVJRm9udFRleHRTdHlsZVRhbGxCb2R5LAorICAgICAgICBrQ1RGb250
RGVzY3JpcHRvclRleHRTdHlsZUVtcGhhc2l6ZWQsCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTEwMDAwCisgICAgICAgIGtDVFVJRm9udFRleHRTdHlsZVRpdGxlMCwK
KyAgICAgICAga0NUVUlGb250VGV4dFN0eWxlVGl0bGU0LAorI2VuZGlmCisgICAgfTsKKyAgICAK
KyAgICBzdGF0aWMgYXV0byBzdHJpbmdzIHsgbWFrZU5ldmVyRGVzdHJveWVkKGNvbnZlcnRBcnJh
eTxBdG9taWNTdHJpbmc+KHN0eWxlcykpIH07CisgICAgcmV0dXJuIHN0ZDo6ZmluZChzdHJpbmdz
LmdldCgpLmJlZ2luKCksIHN0cmluZ3MuZ2V0KCkuZW5kKCksIHN0cmluZykgIT0gc3RyaW5ncy5n
ZXQoKS5lbmQoKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIFN5c3RlbUZvbnREYXRhYmFz
ZTo6Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMgc3lzdGVtRm9udFBhcmFtZXRlcnMoY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5TmFtZSwgU3lzdGVtRm9udERhdGFiYXNlOjpDbGllbnRVc2UgY2xpZW50VXNlKQog
ewogICAgIFN5c3RlbUZvbnREYXRhYmFzZTo6Q29yZVRleHRDYXNjYWRlTGlzdFBhcmFtZXRlcnMg
cmVzdWx0OwogICAgIHJlc3VsdC5sb2NhbGUgPSBkZXNjcmlwdGlvbi5sb2NhbGUoKTsKQEAgLTIw
Nyw2ICsyNjcsMTQgQEAgc3RhdGljIGlubGluZSBTeXN0ZW1Gb250RGF0YWJhc2U6OkNvcmVUZXh0
Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzIHN5c3RlbUZvbnRQYXJhbWUKICAgICBlbHNlCiAgICAgICAg
IHJlc3VsdC53ZWlnaHQgPSBrQ1RGb250V2VpZ2h0QmxhY2s7CiAKKyAgICBpZiAoY2xpZW50VXNl
ID09IFN5c3RlbUZvbnREYXRhYmFzZTo6Q2xpZW50VXNlOjpGb3JTeXN0ZW1VSSkgeworICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzeXN0ZW1VSSA9IEF0b21pY1N0
cmluZygic3lzdGVtLXVpIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHJlc3VsdC5mb250TmFtZSA9IHN5c3RlbVVJLmdldCgpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChjbGllbnRVc2UgPT0gU3lzdGVtRm9udERhdGFiYXNlOjpDbGllbnRVc2U6
OkZvclRleHRTdHlsZSk7CisgICAgICAgIHJlc3VsdC5mb250TmFtZSA9IGZhbWlseU5hbWU7Cisg
ICAgfQorCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjE1LDYgKzI4MywxMSBAQCB2b2lk
IEZvbnREZXNjcmlwdGlvbjo6aW52YWxpZGF0ZUNhY2hlcygpCiAgICAgU3lzdGVtRm9udERhdGFi
YXNlOjpzaW5nbGV0b24oKS5jbGVhcigpOwogfQogCitzdGF0aWMgaW5saW5lIFZlY3RvcjxSZXRh
aW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+IHN5c3RlbUZvbnRDYXNjYWRlTGlzdChjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBj
c3NGYW1pbHksIFN5c3RlbUZvbnREYXRhYmFzZTo6Q2xpZW50VXNlIGNsaWVudFVzZSkKK3sKKyAg
ICByZXR1cm4gU3lzdGVtRm9udERhdGFiYXNlOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250Q2FzY2Fk
ZUxpc3Qoc3lzdGVtRm9udFBhcmFtZXRlcnMoZGVzY3JpcHRpb24sIGNzc0ZhbWlseSwgY2xpZW50
VXNlKSwgY2xpZW50VXNlKTsKK30KKwogdW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZWZmZWN0aXZlRmFtaWx5Q291bnQoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBNb3ZlIGFsbCB0
aGUgb3RoZXIgc3lzdGVtIGZvbnQga2V5d29yZHMgZnJvbSBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5
U3BlY2lhbENhc2UoKSB0byBoZXJlLgpAQCAtMjIyLDcgKzI5NSwxMSBAQCB1bnNpZ25lZCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlDb3VudCgpIGNvbnN0CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50KCk7ICsraSkgewogICAgICAgICBjb25z
dCBhdXRvJiBjc3NGYW1pbHkgPSBmYW1pbHlBdChpKTsKICAgICAgICAgaWYgKGlzU3lzdGVtRm9u
dFN0cmluZyhjc3NGYW1pbHkpKQotICAgICAgICAgICAgcmVzdWx0ICs9IFN5c3RlbUZvbnREYXRh
YmFzZTo6c2luZ2xldG9uKCkuc3lzdGVtRm9udENhc2NhZGVMaXN0KHN5c3RlbUZvbnRQYXJhbWV0
ZXJzKCp0aGlzKSkuc2l6ZSgpOworICAgICAgICAgICAgcmVzdWx0ICs9IHN5c3RlbUZvbnRDYXNj
YWRlTGlzdCgqdGhpcywgY3NzRmFtaWx5LCBTeXN0ZW1Gb250RGF0YWJhc2U6OkNsaWVudFVzZTo6
Rm9yU3lzdGVtVUkpLnNpemUoKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIGVsc2UgaWYg
KGlzVUlGb250VGV4dFN0eWxlKGNzc0ZhbWlseSkpCisgICAgICAgICAgICByZXN1bHQgKz0gc3lz
dGVtRm9udENhc2NhZGVMaXN0KCp0aGlzLCBjc3NGYW1pbHksIFN5c3RlbUZvbnREYXRhYmFzZTo6
Q2xpZW50VXNlOjpGb3JUZXh0U3R5bGUpLnNpemUoKTsKKyNlbmRpZgogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICArK3Jlc3VsdDsKICAgICB9CkBAIC0yMzQsMTEgKzMxMSwyMCBAQCBGb250RmFt
aWx5U3BlY2lmaWNhdGlvbiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlB
dCh1bnNpZ25lZCBpbmRleAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYW1pbHlDb3Vu
dCgpOyArK2kpIHsKICAgICAgICAgY29uc3QgYXV0byYgY3NzRmFtaWx5ID0gZmFtaWx5QXQoaSk7
CiAgICAgICAgIGlmIChpc1N5c3RlbUZvbnRTdHJpbmcoY3NzRmFtaWx5KSkgewotICAgICAgICAg
ICAgYXV0byBjYXNjYWRlTGlzdCA9IFN5c3RlbUZvbnREYXRhYmFzZTo6c2luZ2xldG9uKCkuc3lz
dGVtRm9udENhc2NhZGVMaXN0KHN5c3RlbUZvbnRQYXJhbWV0ZXJzKCp0aGlzKSk7CisgICAgICAg
ICAgICBhdXRvIGNhc2NhZGVMaXN0ID0gc3lzdGVtRm9udENhc2NhZGVMaXN0KCp0aGlzLCBjc3NG
YW1pbHksIFN5c3RlbUZvbnREYXRhYmFzZTo6Q2xpZW50VXNlOjpGb3JTeXN0ZW1VSSk7CiAgICAg
ICAgICAgICBpZiAoaW5kZXggPCBjYXNjYWRlTGlzdC5zaXplKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uKGNhc2NhZGVMaXN0W2luZGV4XS5nZXQoKSk7
CiAgICAgICAgICAgICBpbmRleCAtPSBjYXNjYWRlTGlzdC5zaXplKCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoIWluZGV4KQorICAgICAgICB9CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBlbHNl
IGlmIChpc1VJRm9udFRleHRTdHlsZShjc3NGYW1pbHkpKSB7CisgICAgICAgICAgICBhdXRvIGNh
c2NhZGVMaXN0ID0gc3lzdGVtRm9udENhc2NhZGVMaXN0KCp0aGlzLCBjc3NGYW1pbHksIFN5c3Rl
bUZvbnREYXRhYmFzZTo6Q2xpZW50VXNlOjpGb3JUZXh0U3R5bGUpOworICAgICAgICAgICAgaWYg
KGluZGV4IDwgY2FzY2FkZUxpc3Quc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBGb250
RmFtaWx5U3BlY2lmaWNhdGlvbihjYXNjYWRlTGlzdFtpbmRleF0uZ2V0KCkpOworICAgICAgICAg
ICAgaW5kZXggLT0gY2FzY2FkZUxpc3Quc2l6ZSgpOworICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgZWxzZSBpZiAoIWluZGV4KQogICAgICAgICAgICAgcmV0dXJuIGNzc0ZhbWlseTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgLS1pbmRleDsKQEAgLTI1MCwzICszMzYsNCBAQCBGb250RmFt
aWx5U3BlY2lmaWNhdGlvbiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlB
dCh1bnNpZ25lZCBpbmRleAogfQogCiAjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KaW5kZXggOWMwYWUwNWFmNjZk
NTI0NTJmYjU1MDRmOTc4M2ZkZGRlZDdlODBjMC4uODhlZDc1ZjZmODg0YTc0MDNmZjg3YmRjMTJk
MDJiMjRjNWI3ZjFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL0ZvbnRDYWNoZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9pb3MvRm9udENhY2hlSU9TLm1tCkBAIC0xNDgsNiArMTQ4LDcgQEAgc3RhdGljIFJldGFp
blB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBzeXN0ZW1Gb250RGVzY3JpcHRvcihGb250U2VsZWN0
aW9uVmFsdWUgd2UKIFJldGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHlT
cGVjaWFsQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVl
c3QgcmVxdWVzdCwgZmxvYXQgc2l6ZSkKIHsKICAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoIlVJ
Q1RGb250VGV4dFN0eWxlIikpIHsKKyNpZiAhVVNFX1BMQVRGT1JNX1NZU1RFTV9GQUxMQkFDS19M
SVNUCiAgICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IChpc0ZvbnRXZWlnaHRC
b2xkKHJlcXVlc3Qud2VpZ2h0KSB8fCBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnNob3VsZE1vY2tC
b2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkoKSA/IGtDVEZvbnRUcmFpdEJvbGQgOiAwKSB8
IChpc0l0YWxpYyhyZXF1ZXN0LnNsb3BlKSA/IGtDVEZvbnRUcmFpdEl0YWxpYyA6IDApOwogICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWVTdHIgPSBmYW1pbHkuc3RyaW5n
KCkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JS
ZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRl
eHRTdHlsZShmYW1pbHlOYW1lU3RyLmdldCgpLCBSZW5kZXJUaGVtZUlPUzo6Y29udGVudFNpemVD
YXRlZ29yeSgpLCBudWxscHRyKSk7CkBAIC0xNTUsNiArMTU2LDEwIEBAIFJldGFpblB0cjxDVEZv
bnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlsCiAgICAgICAgICAgICBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVz
Y3JpcHRvckNyZWF0ZUNvcHlXaXRoU3ltYm9saWNUcmFpdHMoZm9udERlc2NyaXB0b3IuZ2V0KCks
IHRyYWl0cywgdHJhaXRzKSk7CiAKICAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q3JlYXRl
V2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzaXplLCBudWxscHRyKSk7
CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGZhbWlseSwgIi13ZWJraXQtc3lzdGVtLWZvbnQiKSB8fCBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICItYXBwbGUtc3lzdGVtIikgfHwgZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAiLWFwcGxlLXN5c3RlbS1mb250IikgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAic3lzdGVtLXVpIikpIHsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA0MGRiOGRhNmVhYjcwM2Y1ZTMyZDhlY2MxYjg4OGFlZTQ4NzBkZjAyLi45ZjZhMWEyZjU1YjU5
MzI4MDkxNmI2MzI2MzU0MTYxOTZkOGVjYjljIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTct
MDYtMjcgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAg
ICBbaU9TXSBDYW5ub3QgaXRhbGljaXplIG9yIGJvbGQgdGV4dCByZW5kZXJlZCB3aXRoIHRleHQg
c3R5bGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzM2MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGZhc3QvdGV4dC9pcGFkL2JvbGQtdGFsbC1ib2R5LXRleHQtc3R5bGUtZXhwZWN0ZWQtbWlzbWF0
Y2guaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L2lwYWQvYm9sZC10YWxsLWJvZHkt
dGV4dC1zdHlsZS5odG1sOiBBZGRlZC4KKwogMjAxNy0wNi0yNyAgQW50b2luZSBRdWludCAgPGdy
YW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtNb2Rlcm4gTWVkaWEgQ29udHJvbHNdIEFjY2Vz
c2liaWxpdHkgbGFiZWxzIHNob3VsZCBiZSBmb3JtYXR0ZWQgdXNpbmcgTlNEYXRlQ29tcG9uZW50
c0Zvcm1hdHRlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2lwYWQvYm9sZC10
YWxsLWJvZHktdGV4dC1zdHlsZS1leHBlY3RlZC1taXNtYXRjaC5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0L2lwYWQvYm9sZC10YWxsLWJvZHktdGV4dC1zdHlsZS1leHBlY3RlZC1taXNtYXRj
aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg3NzEwMDkxZjk3Yzk1MjU5YjlhYzI3NWMwZTAzNWNhOGZlOWIx
M2UKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvaXBhZC9ib2xkLXRh
bGwtYm9keS10ZXh0LXN0eWxlLWV4cGVjdGVkLW1pc21hdGNoLmh0bWwKQEAgLTAsMCArMSw4IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYg
c3R5bGU9ImZvbnQ6IC1hcHBsZS1zeXN0ZW0tdGFsbC1ib2R5OyB0ZXh0LXJlbmRlcmluZzogb3B0
aW1pemVMZWdpYmlsaXR5OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnLlNGVUlUZXh0LUxp
Z2h0JzsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDsg
dHJhbnNmb3JtOiBzY2FsZSgxMCk7Ij5IZWxsbzwvc3Bhbj48L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9pcGFkL2JvbGQtdGFsbC1ib2R5
LXRleHQtc3R5bGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9pcGFkL2JvbGQtdGFsbC1i
b2R5LXRleHQtc3R5bGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NjFhNGY3OWMyN2E1NDU4NjFhNWQzZDU3
NDFmYTMzZDAyNmVhNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
L2lwYWQvYm9sZC10YWxsLWJvZHktdGV4dC1zdHlsZS5odG1sCkBAIC0wLDAgKzEsOCBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IHN0eWxl
PSJmb250OiAtYXBwbGUtc3lzdGVtLXRhbGwtYm9keTsiPjxiIHN0eWxlPSJkaXNwbGF5OiBpbmxp
bmUtYmxvY2s7IHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgdG9wOyB0cmFuc2Zvcm06IHNjYWxlKDEw
KTsiPkhlbGxvPC9iPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>