<?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>156822</bug_id>
          
          <creation_ts>2016-04-20 16:53:24 -0700</creation_ts>
          <short_desc>Crash under FontCache::purgeInactiveFontData()</short_desc>
          <delta_ts>2016-04-22 12:24:32 -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>Text</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1185613</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 16:53:24 -0700</bug_when>
    <thetext>Crash under FontCache::purgeInactiveFontData():
Thread[0] EXC_BAD_ACCESS (SIGSEGV) (KERN_INVALID_ADDRESS at 0x0000000000000000)
[  0] 0x00007fff8e263884 WebCore`WebCore::FontCache::purgeInactiveFontData(unsigned int) + 308 at FontCache.cpp:429:17
       425 	
       426 	    while (purgeCount) {
       427 	        Vector&lt;RefPtr&lt;Font&gt;, 20&gt; fontsToDelete;
       428 	        for (auto&amp; font : cachedFonts().values()) {
    -&gt; 429 	            if (!font-&gt;hasOneRef())
       430 	                continue;
       431 	            fontsToDelete.append(WTFMove(font));
       432 	            if (!--purgeCount)
       433 	                break;
    

     0x00007fff8e263870:     cmpq %rax, %r15
     0x00007fff8e263873:       je 0x5ebb10             ; &lt;+960&gt; [inlined] WTF::Vector&lt;WTF::RefPtr&lt;WebCore::Font&gt;, 20ul, WTF::CrashOnOverflow, 16ul&gt;::size() const at Vector.h:654
     0x00007fff8e263879:     nopl (%rax)
     0x00007fff8e263880:     movq 0x38(%r15), %rcx
 -&gt;  0x00007fff8e263884:     cmpl $0x1, (%rcx)
     0x00007fff8e263887:      jne 0x5ebab4             ; &lt;+868&gt; [inlined] WTF::HashTableConstIterator&lt;WebCore::FontPlatformData, WTF::KeyValuePair&lt;WebCore::FontPlatformData, WTF::RefPtr&lt;WebCore::Font&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WebCore::FontPlatformData, WTF::RefPtr&lt;WebCore::Font&gt; &gt; &gt;, WebCore::FontDataCacheKeyHash, WTF::HashMap&lt;WebCore::FontPlatformData, WTF::RefPtr&lt;WebCore::Font&gt;, WebCore::FontDataCacheKeyHash, WebCore::FontDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::Font&gt; &gt; &gt;::KeyValuePairTraits, WebCore::FontDataCacheKeyTraits&gt;::operator++() at HashTable.h:266
     0x00007fff8e26388d:     leaq 0x38(%r15), %r12
     0x00007fff8e263891:     movl -0xd4(%rbp), %eax
     0x00007fff8e263897:     movq -0xd8(%rbp), %r13

[  1] 0x00007fff8e894ef7 WebCore`WebCore::MemoryPressureHandler::releaseNoncriticalMemory() + 55 at MemoryPressureHandler.cpp:82:9
       78  	void MemoryPressureHandler::releaseNoncriticalMemory()
       79  	{
       80  	    {
       81  	        ReliefLogger log(&quot;Purge inactive FontData&quot;);
    -&gt; 82  	        FontCache::singleton().purgeInactiveFontData();
       83  	    }
       84  	
       85  	    {
       86  	        ReliefLogger log(&quot;Clear WidthCaches&quot;);
    
[  2] 0x00007fff8e8954bc WebCore`WebCore::MemoryPressureHandler::releaseMemory(WebCore::Critical, WebCore::Synchronous) + 60 at MemoryPressureHandler.cpp:166:5
       162 	{
       163 	    if (critical == Critical::Yes)
       164 	        releaseCriticalMemory(synchronous);
       165 	
    -&gt; 166 	    releaseNoncriticalMemory();
       167 	
       168 	    platformReleaseMemory(critical);
       169 	
       170 	    {
    
[  3] 0x00007fff8e895d5f WebCore`WebCore::MemoryPressureHandler::respondToMemoryPressure(WebCore::Critical, WebCore::Synchronous) [inlined] std::__1::function&lt;void (WebCore::Critical, WebCore::Synchronous)&gt;::operator()(WebCore::Critical, WebCore::Synchronous) const + 17 at functional:1824:12
[  3] 0x00007fff8e895d4e WebCore`WebCore::MemoryPressureHandler::respondToMemoryPressure(WebCore::Critical, WebCore::Synchronous) + 78 at MemoryPressureHandlerCocoa.mm:207</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185614</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 16:53:44 -0700</bug_when>
    <thetext>rdar://problem/25373970</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185615</commentid>
    <comment_count>2</comment_count>
      <attachid>276868</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 16:56:18 -0700</bug_when>
    <thetext>Created attachment 276868
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185616</commentid>
    <comment_count>3</comment_count>
      <attachid>276869</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 16:59:14 -0700</bug_when>
    <thetext>Created attachment 276869
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185620</commentid>
    <comment_count>4</comment_count>
      <attachid>276871</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 17:08:53 -0700</bug_when>
    <thetext>Created attachment 276871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185683</commentid>
    <comment_count>5</comment_count>
      <attachid>276897</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 21:32:12 -0700</bug_when>
    <thetext>Created attachment 276897
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185811</commentid>
    <comment_count>6</comment_count>
      <attachid>276934</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-21 09:05:23 -0700</bug_when>
    <thetext>Created attachment 276934
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185870</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-21 12:03:23 -0700</bug_when>
    <thetext>Different crash trace with the same root cause (having a null Font pointer in the FontCache):
Thread[0] EXC_BAD_ACCESS (SIGSEGV) (KERN_INVALID_ADDRESS at 0x0000000000000000)
[  0] 0x00000001140969b7 WebCore`WebCore::FontCache::inactiveFontCount() [inlined] WTF::RefCountedBase::hasOneRef() const at RefCounted.h:55:27

     0x00000001140969a1:       je 0x5dfa0e             ; &lt;+302&gt; at FontCache.cpp:493
     0x00000001140969a3:     nopw %cs:(%rax,%rax)
     0x00000001140969b0:     movl %r14d, %r13d
     0x00000001140969b3:     movq 0x38(%rax), %rcx
 -&gt;  0x00000001140969b7:     cmpl $0x1, (%rcx)
     0x00000001140969ba:     sete %cl
     0x00000001140969bd:   movzbl %cl, %r14d
     0x00000001140969c1:     movq %rax, %rbx
     0x00000001140969c4:     addq $0x40, %rbx

[  0] 0x00000001140969b7 WebCore`WebCore::FontCache::inactiveFontCount() + 215 at FontCache.cpp:490
       486 	    FontLocker fontLocker;
       487 	#endif
       488 	    unsigned count = 0;
       489 	    for (auto&amp; font : cachedFonts().values()) {
    -&gt; 490 	        if (font-&gt;hasOneRef())
       491 	            ++count;
       492 	    }
       493 	    return count;
       494 	}
    
[  1] 0x0000000113ac3c1d WebCore`WebCore::FontCache::purgeInactiveFontDataIfNeeded() + 61 at FontCache.cpp:409:30
       405 	    unsigned inactiveFontDataLimit = underMemoryPressure ? cMaxUnderMemoryPressureInactiveFontData : cMaxInactiveFontData;
       406 	
       407 	    if (cachedFonts().size() &lt; inactiveFontDataLimit)
       408 	        return;
    -&gt; 409 	    unsigned inactiveCount = inactiveFontCount();
       410 	    if (inactiveCount &lt;= inactiveFontDataLimit)
       411 	        return;
       412 	
       413 	    unsigned targetFontDataLimit = underMemoryPressure ? cTargetUnderMemoryPressureInactiveFontData : cTargetInactiveFontData;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186078</commentid>
    <comment_count>8</comment_count>
      <attachid>276934</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-21 18:48:36 -0700</bug_when>
    <thetext>Comment on attachment 276934
Patch

Could we at least add a test that would have hit an assertion we could have added to the code before fixing this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186084</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-21 18:55:34 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 276934 [details]
&gt; Patch
&gt; 
&gt; Could we at least add a test that would have hit an assertion we could have
&gt; added to the code before fixing this?

This is really not easy to test because we would both need to:
1. Write a test where we end up with a null cgFont. I do not know how to make this happen but maybe Myles knows. When I discussed this with Myles, my understanding was that it is still unclear when or why CTFontCopyGraphicsFont() returns null.
2. Have the test trigger pruning of the FontCache (We would add an Internals API for this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186085</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-21 19:00:17 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Comment on attachment 276934 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Could we at least add a test that would have hit an assertion we could have
&gt; &gt; added to the code before fixing this?
&gt; 
&gt; This is really not easy to test because we would both need to:
&gt; 1. Write a test where we end up with a null cgFont. I do not know how to
&gt; make this happen but maybe Myles knows. When I discussed this with Myles, my
&gt; understanding was that it is still unclear when or why
&gt; CTFontCopyGraphicsFont() returns null.

I found that CTFontCopyGraphicsFont() returns null if the CTFontRef we pass it is null. We still need to figure out when we pass a null CFFontRef to CTFontCopyGraphicsFont() though.

&gt; 2. Have the test trigger pruning of the FontCache (We would add an Internals
&gt; API for this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186086</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-21 19:19:46 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; Comment on attachment 276934 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; Could we at least add a test that would have hit an assertion we could have
&gt; &gt; &gt; added to the code before fixing this?
&gt; &gt; 
&gt; &gt; This is really not easy to test because we would both need to:
&gt; &gt; 1. Write a test where we end up with a null cgFont. I do not know how to
&gt; &gt; make this happen but maybe Myles knows. When I discussed this with Myles, my
&gt; &gt; understanding was that it is still unclear when or why
&gt; &gt; CTFontCopyGraphicsFont() returns null.
&gt; 
&gt; I found that CTFontCopyGraphicsFont() returns null if the CTFontRef we pass
&gt; it is null. We still need to figure out when we pass a null CFFontRef to
&gt; CTFontCopyGraphicsFont() though.

I found for example that we have a client API called _web_drawAtPoint in WebKitNSStringExtras that takes a NSFont* in and passes that directly to FontPlatformData() without null check. So if the client were to pass a null font, we would see the issue. Similar issue with centerTruncateString / centerTruncateString in WebStringTruncator API. There may be others.

&gt; 
&gt; &gt; 2. Have the test trigger pruning of the FontCache (We would add an Internals
&gt; &gt; API for this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186336</commentid>
    <comment_count>12</comment_count>
      <attachid>276934</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-22 11:28:35 -0700</bug_when>
    <thetext>Comment on attachment 276934
Patch

r=me. No comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186346</commentid>
    <comment_count>13</comment_count>
      <attachid>276934</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-22 11:44:09 -0700</bug_when>
    <thetext>Comment on attachment 276934
Patch

I will investigate with Myles as well how / when we end up with a null cgFont so that we can correct the problem at the source and never construct a FontPlatformData without a cgFont.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186353</commentid>
    <comment_count>14</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-22 11:53:59 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Comment on attachment 276934 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Could we at least add a test that would have hit an assertion we could have
&gt; &gt; added to the code before fixing this?
&gt; 
&gt; This is really not easy to test because we would both need to:
&gt; 1. Write a test where we end up with a null cgFont. I do not know how to
&gt; make this happen but maybe Myles knows. When I discussed this with Myles, my
&gt; understanding was that it is still unclear when or why
&gt; CTFontCopyGraphicsFont() returns null.

It will only return nullptr if the input is nullptr or if LastResort is unavailable (in which case the user has huge problems anyway)

&gt; 2. Have the test trigger pruning of the FontCache (We would add an Internals
&gt; API for this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186355</commentid>
    <comment_count>15</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-22 12:02:30 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; Comment on attachment 276934 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; Could we at least add a test that would have hit an assertion we could have
&gt; &gt; &gt; added to the code before fixing this?
&gt; &gt; 
&gt; &gt; This is really not easy to test because we would both need to:
&gt; &gt; 1. Write a test where we end up with a null cgFont. I do not know how to
&gt; &gt; make this happen but maybe Myles knows. When I discussed this with Myles, my
&gt; &gt; understanding was that it is still unclear when or why
&gt; &gt; CTFontCopyGraphicsFont() returns null.
&gt; 
&gt; It will only return nullptr if the input is nullptr or if LastResort is
&gt; unavailable (in which case the user has huge problems anyway)
&gt; 
&gt; &gt; 2. Have the test trigger pruning of the FontCache (We would add an Internals
&gt; &gt; API for this).

Because CoreText doesn&apos;t now how to draw glyphs directly, any time anyone wants to draw using a CTFont, this same code path is used to create a CGFont.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186356</commentid>
    <comment_count>16</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-22 12:09:13 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; Comment on attachment 276934 [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Could we at least add a test that would have hit an assertion we could have
&gt; &gt; &gt; &gt; added to the code before fixing this?
&gt; &gt; &gt; 
&gt; &gt; &gt; This is really not easy to test because we would both need to:
&gt; &gt; &gt; 1. Write a test where we end up with a null cgFont. I do not know how to
&gt; &gt; &gt; make this happen but maybe Myles knows. When I discussed this with Myles, my
&gt; &gt; &gt; understanding was that it is still unclear when or why
&gt; &gt; &gt; CTFontCopyGraphicsFont() returns null.
&gt; &gt; 
&gt; &gt; It will only return nullptr if the input is nullptr or if LastResort is
&gt; &gt; unavailable (in which case the user has huge problems anyway)
&gt; &gt; 
&gt; &gt; &gt; 2. Have the test trigger pruning of the FontCache (We would add an Internals
&gt; &gt; &gt; API for this).
&gt; 
&gt; Because CoreText doesn&apos;t now how to draw glyphs directly, any time anyone
&gt; wants to draw using a CTFont, this same code path is used to create a CGFont.

Inside WebCore, we use this constructor in 3 places. Two of them have null checks around them. The last one would only return null if we are out of memory, in which case we would crash anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186357</commentid>
    <comment_count>17</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-22 12:19:21 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; Comment on attachment 276934 [details]
&gt; &gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Could we at least add a test that would have hit an assertion we could have
&gt; &gt; &gt; &gt; &gt; added to the code before fixing this?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This is really not easy to test because we would both need to:
&gt; &gt; &gt; &gt; 1. Write a test where we end up with a null cgFont. I do not know how to
&gt; &gt; &gt; &gt; make this happen but maybe Myles knows. When I discussed this with Myles, my
&gt; &gt; &gt; &gt; understanding was that it is still unclear when or why
&gt; &gt; &gt; &gt; CTFontCopyGraphicsFont() returns null.
&gt; &gt; &gt; 
&gt; &gt; &gt; It will only return nullptr if the input is nullptr or if LastResort is
&gt; &gt; &gt; unavailable (in which case the user has huge problems anyway)
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 2. Have the test trigger pruning of the FontCache (We would add an Internals
&gt; &gt; &gt; &gt; API for this).
&gt; &gt; 
&gt; &gt; Because CoreText doesn&apos;t now how to draw glyphs directly, any time anyone
&gt; &gt; wants to draw using a CTFont, this same code path is used to create a CGFont.
&gt; 
&gt; Inside WebCore, we use this constructor in 3 places. Two of them have null
&gt; checks around them. The last one would only return null if we are out of
&gt; memory, in which case we would crash anyway.

Sorry, this is false. Please disregard this comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186360</commentid>
    <comment_count>18</comment_count>
      <attachid>276934</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-22 12:24:22 -0700</bug_when>
    <thetext>Comment on attachment 276934
Patch

Clearing flags on attachment: 276934

Committed r199890: &lt;http://trac.webkit.org/changeset/199890&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186361</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-22 12:24:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276868</attachid>
            <date>2016-04-20 16:56:18 -0700</date>
            <delta_ts>2016-04-20 16:59:14 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>FontCache_wip.patch</filename>
            <type>text/plain</type>
            <size>10004</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCA0ZTkyZjU5Li43Yjhi
NTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0yMjksNyAr
MjI5LDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX21heENoYXJXaWR0aDsKICAgICBmbG9hdCBt
X2F2Z0NoYXJXaWR0aDsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGEgbV9wbGF0Zm9ybURhdGE7Cisg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKIAogICAgIG11dGFibGUg
UmVmUHRyPEdseXBoUGFnZT4gbV9nbHlwaFBhZ2VaZXJvOwogICAgIG11dGFibGUgSGFzaE1hcDx1
bnNpZ25lZCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fZ2x5cGhQYWdlczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmluZGV4IDQ3NDc5ZTcuLjJiZDY2
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNw
cApAQCAtNDM1LDggKzQzNSwxMCBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKHVuc2lnbmVkIHB1cmdlQ291bnQpCiAgICAgICAgIC8vIEZvbnRzIG1heSByZWYgb3RoZXIg
Zm9udHMgc28gd2UgbG9vcCB1bnRpbCB0aGVyZSBhcmUgbm8gY2hhbmdlcy4KICAgICAgICAgaWYg
KGZvbnRzVG9EZWxldGUuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGZv
ciAoYXV0byYgZm9udCA6IGZvbnRzVG9EZWxldGUpCi0gICAgICAgICAgICBjYWNoZWRGb250cygp
LnJlbW92ZShmb250LT5wbGF0Zm9ybURhdGEoKSk7CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6
IGZvbnRzVG9EZWxldGUpIHsKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGNhY2hlZEZvbnRz
KCkucmVtb3ZlKGZvbnQtPnBsYXRmb3JtRGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgICAgIH0KICAgICB9OwogCiAgICAgVmVjdG9yPEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleT4ga2V5c1RvUmVtb3ZlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAppbmRleCBhZGM1
YzcxLi43NjVmZWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250UGxhdGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcApAQCAtNTgsNiArNTgsOCBAQCBGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBjZ0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wg
c3ludGhldGljQgogICAgIDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBzeW50aGV0aWNCb2xkLCBz
eW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCB0ZXh0UmVuZGVyaW5n
TW9kZSkKIHsKICAgICBtX2NnRm9udCA9IGNnRm9udDsKKyAgICBpZiAoIW1fY2dGb250KQorICAg
ICAgICBzZXRGYWxsYmFja0NHRm9udCgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCBjYzAzMzJm
Li40ZTNkYzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oCkBAIC0yMTYsNiArMjE2LDkgQEAgcHJpdmF0ZToKICNpZiBQTEFU
Rk9STShXSU4pCiAgICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KEhGT05ULCBmbG9hdCBzaXplLCBI
REMsIFdDSEFSKiBmYWNlTmFtZSk7CiAjZW5kaWYKKyNpZiBVU0UoQ0cpCisgICAgdm9pZCBzZXRG
YWxsYmFja0NHRm9udCgpOworI2VuZGlmCiAKIHB1YmxpYzoKICAgICBib29sIG1fc3ludGhldGlj
Qm9sZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250Q29jb2EubW0KaW5kZXggNjQ4ODQxYS4uMWNiMjc2NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQpAQCAt
NzksMTMgKzc5LDcgQEAgc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udFJl
ZiBjdEZvbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0jaWYgVVNFKEFQUEtJVCkKLXN0YXRp
YyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5KHZvaWQpCi17Ci0gICAgc3RhdGljIE5T
U3RyaW5nICp3ZWJGYWxsYmFja0ZvbnRGYW1pbHkgPSBbW1tOU0ZvbnQgc3lzdGVtRm9udE9mU2l6
ZToxNi4wZl0gZmFtaWx5TmFtZV0gcmV0YWluXTsKLSAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250
RmFtaWx5OwotfQotI2Vsc2UKKyNpZiAhVVNFKEFQUEtJVCkKIGJvb2wgZm9udEZhbWlseVNob3Vs
ZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKIHsKICAgICBp
ZiAoIWZvbnRGYW1pbHlOYW1lKQpAQCAtMTA0LDU5ICs5OCw2IEBAIHZvaWQgRm9udDo6cGxhdGZv
cm1Jbml0KCkKICNpZiBVU0UoQVBQS0lUKQogICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1f
cGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IDEuMGYgOiAwLmY7CiAKLSAgICBib29sIGZh
aWxlZFNldHVwID0gZmFsc2U7Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkgewot
ICAgICAgICAvLyBBY2shIFNvbWV0aGluZyB2ZXJ5IGJhZCBoYXBwZW5lZCwgbGlrZSBhIGNvcnJ1
cHQgZm9udC4KLSAgICAgICAgLy8gVHJ5IGxvb2tpbmcgZm9yIGFuIGFsdGVybmF0ZSAnYmFzZScg
Zm9udCBmb3IgdGhpcyByZW5kZXJlci4KLQotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgaGFjayB0
byB1c2UgIlRpbWVzIE5ldyBSb21hbiIgaW4gcGxhY2Ugb2YgIlRpbWVzIi4KLSAgICAgICAgLy8g
IlRpbWVzIFJPIiBpcyBhIGNvbW1vbiBmb250IHdob3NlIGZhbWlseSBuYW1lIGlzICJUaW1lcyIu
Ci0gICAgICAgIC8vIEl0IG92ZXJyaWRlcyB0aGUgbm9ybWFsICJUaW1lcyIgZmFtaWx5IGZvbnQu
Ci0gICAgICAgIC8vIEl0IGFsc28gYXBwZWFycyB0byBoYXZlIGEgY29ycnVwdCByZWd1bGFyIHZh
cmlhbnQuCi0gICAgICAgIE5TU3RyaW5nICpmYWxsYmFja0ZvbnRGYW1pbHk7Ci0gICAgICAgIGlm
IChbW21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIGZhbWlseU5hbWVdIGlzRXF1YWw6QCJUaW1lcyJd
KQotICAgICAgICAgICAgZmFsbGJhY2tGb250RmFtaWx5ID0gQCJUaW1lcyBOZXcgUm9tYW4iOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSB3ZWJGYWxsYmFj
a0ZvbnRGYW1pbHkoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRyeSBzZXR0aW5nIHVwIHRoZSBh
bHRlcm5hdGUgZm9udC4KLSAgICAgICAgLy8gVGhpcyBpcyBhIGxhc3QgZGl0Y2ggZWZmb3J0IHRv
IHVzZSBhIHN1YnN0aXR1dGUgZm9udCB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZy4KLSNp
ZiAhRVJST1JfRElTQUJMRUQKLSAgICAgICAgUmV0YWluUHRyPE5TRm9udD4gaW5pdGlhbEZvbnQg
PSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9wbGF0Zm9y
bURhdGEuZm9udCgpKQotICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNG
b250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEu
bnNGb250KCkgdG9GYW1pbHk6ZmFsbGJhY2tGb250RmFtaWx5XSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChbTlNGb250IGZvbnRXaXRoTmFtZTpm
YWxsYmFja0ZvbnRGYW1pbHkgc2l6ZTptX3BsYXRmb3JtRGF0YS5zaXplKCldKTsKLSAgICAgICAg
aWYgKCFwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkgewotICAgICAgICAgICAgaWYgKFtmYWxsYmFj
a0ZvbnRGYW1pbHkgaXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gT0ssIGNvdWxkbid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGUg
dG8gVGltZXMsIGZhbGxiYWNrCi0gICAgICAgICAgICAgICAgLy8gb24gdGhlIHN5c3RlbSBmb250
LiAgSWYgdGhpcyBmYWlscyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxlZnQuCi0gICAgICAgICAg
ICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250
TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6d2Vi
RmFsbGJhY2tGb250RmFtaWx5KCldKTsKLSAgICAgICAgICAgICAgICBpZiAoIXBsYXRmb3JtRGF0
YSgpLmNnRm9udCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHRyaWVkLCBUaW1lcywg
VGltZXMgTmV3IFJvbWFuLCBhbmQgdGhlIHN5c3RlbSBmb250LiBObyBqb3kuIFdlIGhhdmUgdG8g
Z2l2ZSB1cC4KLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUgdG8gaW5pdGlh
bGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGZhaWxlZFNldHVwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIHRyaWVkIHRoZSByZXF1ZXN0ZWQgZm9udCBh
bmQgdGhlIHN5c3RlbSBmb250LiBObyBqb3kuIFdlIGhhdmUgdG8gZ2l2ZSB1cC4KLSAgICAgICAg
ICAgICAgICBMT0dfRVJST1IoInVuYWJsZSB0byBpbml0aWFsaXplIHdpdGggZm9udCAlQCIsIGlu
aXRpYWxGb250LmdldCgpKTsKLSAgICAgICAgICAgICAgICBmYWlsZWRTZXR1cCA9IHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXBvcnQgdGhlIHByb2JsZW0u
Ci0gICAgICAgIExPR19FUlJPUigiQ29ycnVwdCBmb250IGRldGVjdGVkLCB1c2luZyAlQCBpbiBw
bGFjZSBvZiAlQC4iLAotICAgICAgICAgICAgW21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIGZhbWls
eU5hbWVdLCBbaW5pdGlhbEZvbnQuZ2V0KCkgZmFtaWx5TmFtZV0pOwotICAgIH0KLQotICAgIC8v
IElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gc2V0IHVwIHVzaW5nIHRoZSBzeXN0ZW0gZm9udC4K
LSAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgVGltZXMgYW5kIFRpbWVzIE5ldyBSb21h
biBhcmUgYm90aCB1bmF2YWlsYWJsZS4KLSAgICBpZiAoZmFpbGVkU2V0dXApIHsKLSAgICAgICAg
bV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbbV9wbGF0
Zm9ybURhdGEubnNGb250KCkgcG9pbnRTaXplXV0pOwotICAgICAgICBMT0dfRVJST1IoImZhaWxl
ZCB0byBzZXQgdXAgZm9udCwgdXNpbmcgc3lzdGVtIGZvbnQgJXMiLCBtX3BsYXRmb3JtRGF0YS5m
b250KCkpOwotICAgIH0KLQogI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA8IDEwMTEwMAogICAgIC8vIFdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxl
bS8xOTQzMzQ5MD4KICAgICBDR0dseXBoIGR1bW15R2x5cGhzW10gPSB7MCwgMH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1E
YXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5kZXggM2E4NzA0Mi4uZjgyZGQwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQ
bGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtNTgsNiArNTgsNzIgQEAgRm9udFBsYXRmb3JtRGF0YTo6
fkZvbnRQbGF0Zm9ybURhdGEoKQogewogfQogCisjaWYgVVNFKEFQUEtJVCkKK3N0YXRpYyBOU1N0
cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5KHZvaWQpCit7CisgICAgc3RhdGljIE5TU3RyaW5n
ICp3ZWJGYWxsYmFja0ZvbnRGYW1pbHkgPSBbW1tOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxNi4w
Zl0gZmFtaWx5TmFtZV0gcmV0YWluXTsKKyAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250RmFtaWx5
OworfQorI2VuZGlmCisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0RmFsbGJhY2tDR0ZvbnQo
KQoreworI2lmIFVTRShBUFBLSVQpCisgICAgYm9vbCBmYWlsZWRTZXR1cCA9IGZhbHNlOworICAg
IGlmICghbV9jZ0ZvbnQpIHsKKyAgICAgICAgLy8gQWNrISBTb21ldGhpbmcgdmVyeSBiYWQgaGFw
cGVuZWQsIGxpa2UgYSBjb3JydXB0IGZvbnQuCisgICAgICAgIC8vIFRyeSBsb29raW5nIGZvciBh
biBhbHRlcm5hdGUgJ2Jhc2UnIGZvbnQgZm9yIHRoaXMgcmVuZGVyZXIuCisKKyAgICAgICAgLy8g
U3BlY2lhbCBjYXNlIGhhY2sgdG8gdXNlICJUaW1lcyBOZXcgUm9tYW4iIGluIHBsYWNlIG9mICJU
aW1lcyIuCisgICAgICAgIC8vICJUaW1lcyBSTyIgaXMgYSBjb21tb24gZm9udCB3aG9zZSBmYW1p
bHkgbmFtZSBpcyAiVGltZXMiLgorICAgICAgICAvLyBJdCBvdmVycmlkZXMgdGhlIG5vcm1hbCAi
VGltZXMiIGZhbWlseSBmb250LgorICAgICAgICAvLyBJdCBhbHNvIGFwcGVhcnMgdG8gaGF2ZSBh
IGNvcnJ1cHQgcmVndWxhciB2YXJpYW50LgorICAgICAgICBOU1N0cmluZyAqZmFsbGJhY2tGb250
RmFtaWx5OworICAgICAgICBpZiAoW1tuc0ZvbnQoKSBmYW1pbHlOYW1lXSBpc0VxdWFsOkAiVGlt
ZXMiXSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9IEAiVGltZXMgTmV3IFJvbWFu
IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmFsbGJhY2tGb250RmFtaWx5ID0gd2ViRmFs
bGJhY2tGb250RmFtaWx5KCk7CisKKyAgICAgICAgLy8gVHJ5IHNldHRpbmcgdXAgdGhlIGFsdGVy
bmF0ZSBmb250LgorICAgICAgICAvLyBUaGlzIGlzIGEgbGFzdCBkaXRjaCBlZmZvcnQgdG8gdXNl
IGEgc3Vic3RpdHV0ZSBmb250IHdoZW4gc29tZXRoaW5nIGhhcyBnb25lIHdyb25nLgorI2lmICFF
UlJPUl9ESVNBQkxFRAorICAgICAgICBSZXRhaW5QdHI8TlNGb250PiBpbml0aWFsRm9udCA9IG5z
Rm9udCgpOworI2VuZGlmCisgICAgICAgIGlmIChmb250KCkpCisgICAgICAgICAgICBzZXROU0Zv
bnQoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDpuc0ZvbnQo
KSB0b0ZhbWlseTpmYWxsYmFja0ZvbnRGYW1pbHldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2V0TlNGb250KFtOU0ZvbnQgZm9udFdpdGhOYW1lOmZhbGxiYWNrRm9udEZhbWlseSBzaXpl
OnNpemUoKV0pOworICAgICAgICBpZiAoIWNnRm9udCgpKSB7CisgICAgICAgICAgICBpZiAoW2Zh
bGxiYWNrRm9udEZhbWlseSBpc0VxdWFsOkAiVGltZXMgTmV3IFJvbWFuIl0pIHsKKyAgICAgICAg
ICAgICAgICAvLyBPSywgY291bGRuJ3Qgc2V0dXAgVGltZXMgTmV3IFJvbWFuIGFzIGFuIGFsdGVy
bmF0ZSB0byBUaW1lcywgZmFsbGJhY2sKKyAgICAgICAgICAgICAgICAvLyBvbiB0aGUgc3lzdGVt
IGZvbnQuIElmIHRoaXMgZmFpbHMgd2UgaGF2ZSBubyBhbHRlcm5hdGl2ZSBsZWZ0LgorICAgICAg
ICAgICAgICAgIHNldE5TRm9udChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNv
bnZlcnRGb250Om5zRm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNrRm9udEZhbWlseSgpXSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFjZ0ZvbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSB0cmllZCwgVGltZXMsIFRpbWVzIE5ldyBSb21hbiwgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8g
am95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCisgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigi
dW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICBmYWlsZWRTZXR1cCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCB0aGUg
cmVxdWVzdGVkIGZvbnQgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdp
dmUgdXAuCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3
aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQoKSk7CisgICAgICAgICAgICAgICAgZmFpbGVk
U2V0dXAgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUmVw
b3J0IHRoZSBwcm9ibGVtLgorICAgICAgICBMT0dfRVJST1IoIkNvcnJ1cHQgZm9udCBkZXRlY3Rl
ZCwgdXNpbmcgJUAgaW4gcGxhY2Ugb2YgJUAuIiwKKyAgICAgICAgICAgIFtuc0ZvbnQoKSBmYW1p
bHlOYW1lXSwgW2luaXRpYWxGb250LmdldCgpIGZhbWlseU5hbWVdKTsKKyAgICB9CisKKyAgICAv
LyBJZiBhbGwgZWxzZSBmYWlscywgdHJ5IHRvIHNldCB1cCB1c2luZyB0aGUgc3lzdGVtIGZvbnQu
CisgICAgLy8gVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9t
YW4gYXJlIGJvdGggdW5hdmFpbGFibGUuCisgICAgaWYgKGZhaWxlZFNldHVwKSB7CisgICAgICAg
IHNldE5TRm9udChbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W25zRm9udCgpIHBvaW50U2l6ZV1d
KTsKKyAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHVwIGZvbnQsIHVzaW5nIHN5c3Rl
bSBmb250ICVzIiwgZm9udCgpKTsKKyAgICB9CisjZW5kaWYgLy8gVVNFKEFQUEtJVCkKK30KKwog
dm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGYpCiB7CiAgICAgbV9mb250ID0gZi5tX2ZvbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dX
aW4uY3BwCmluZGV4IDk3NzJjOWMuLmQxNzE5YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4u
Y3BwCkBAIC0xNTUsNCArMTU1LDggQEAgYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlz
RXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiAgICAgICAgICYmIG1f
dXNlR0RJID09IG90aGVyLm1fdXNlR0RJOwogfQogCit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNl
dEZhbGxiYWNrQ0dGb250KCkKK3sKK30KKwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276869</attachid>
            <date>2016-04-20 16:59:14 -0700</date>
            <delta_ts>2016-04-20 17:08:49 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>FontCache_wip.patch</filename>
            <type>text/plain</type>
            <size>10317</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCA0ZTkyZjU5Li43Yjhi
NTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0yMjksNyAr
MjI5LDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX21heENoYXJXaWR0aDsKICAgICBmbG9hdCBt
X2F2Z0NoYXJXaWR0aDsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGEgbV9wbGF0Zm9ybURhdGE7Cisg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKIAogICAgIG11dGFibGUg
UmVmUHRyPEdseXBoUGFnZT4gbV9nbHlwaFBhZ2VaZXJvOwogICAgIG11dGFibGUgSGFzaE1hcDx1
bnNpZ25lZCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fZ2x5cGhQYWdlczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmluZGV4IDQ3NDc5ZTcuLmE3OTAx
OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNw
cApAQCAtMzk2LDYgKzM5Niw4IEBAIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9y
bURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IEZv
bnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogCisgICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUucGxhdGZvcm1EYXRhID09IHBsYXRmb3JtRGF0YSk7CisKICAgICByZXR1cm4gKmFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKQEAgLTQzNSw4ICs0MzcsMTAgQEAgdm9pZCBG
b250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJnZUNvdW50KQogICAg
ICAgICAvLyBGb250cyBtYXkgcmVmIG90aGVyIGZvbnRzIHNvIHdlIGxvb3AgdW50aWwgdGhlcmUg
YXJlIG5vIGNoYW5nZXMuCiAgICAgICAgIGlmIChmb250c1RvRGVsZXRlLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiBmb250c1RvRGVsZXRl
KQotICAgICAgICAgICAgY2FjaGVkRm9udHMoKS5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkp
OworICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiBmb250c1RvRGVsZXRlKSB7CisgICAgICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBjYWNoZWRGb250cygpLnJlbW92ZShmb250LT5wbGF0Zm9ybURhdGEo
KSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgICAg
ICB9CiAgICAgfTsKIAogICAgIFZlY3RvcjxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtleXNU
b1JlbW92ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggYWRjNWM3MS4uNzY1ZmVkMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAg
LTU4LDYgKzU4LDggQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDR0ZvbnRS
ZWYgY2dGb250LCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0IKICAgICA6IEZvbnRQbGF0Zm9y
bURhdGEoc2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgb3JpZW50YXRpb24s
IHdpZHRoVmFyaWFudCwgdGV4dFJlbmRlcmluZ01vZGUpCiB7CiAgICAgbV9jZ0ZvbnQgPSBjZ0Zv
bnQ7CisgICAgaWYgKCFtX2NnRm9udCkKKyAgICAgICAgc2V0RmFsbGJhY2tDR0ZvbnQoKTsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmgKaW5kZXggY2MwMzMyZi4uNGUzZGM0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMjE2LDYg
KzIxNiw5IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgcGxhdGZvcm1E
YXRhSW5pdChIRk9OVCwgZmxvYXQgc2l6ZSwgSERDLCBXQ0hBUiogZmFjZU5hbWUpOwogI2VuZGlm
CisjaWYgVVNFKENHKQorICAgIHZvaWQgc2V0RmFsbGJhY2tDR0ZvbnQoKTsKKyNlbmRpZgogCiBw
dWJsaWM6CiAgICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCmluZGV4IDY0
ODg0MWEuLjFjYjI3NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q29jb2EubW0KQEAgLTc5LDEzICs3OSw3IEBAIHN0YXRpYyBib29sIGZv
bnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgY3RGb250KQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotI2lmIFVTRShBUFBLSVQpCi1zdGF0aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZh
bWlseSh2b2lkKQotewotICAgIHN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5
ID0gW1tbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07
Ci0gICAgcmV0dXJuIHdlYkZhbGxiYWNrRm9udEZhbWlseTsKLX0KLSNlbHNlCisjaWYgIVVTRShB
UFBLSVQpCiBib29sIGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoQ0ZTdHJpbmdS
ZWYgZm9udEZhbWlseU5hbWUpCiB7CiAgICAgaWYgKCFmb250RmFtaWx5TmFtZSkKQEAgLTEwNCw1
OSArOTgsNiBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAjaWYgVVNFKEFQUEtJVCkKICAg
ICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQg
PyAxLjBmIDogMC5mOwogCi0gICAgYm9vbCBmYWlsZWRTZXR1cCA9IGZhbHNlOwotICAgIGlmICgh
cGxhdGZvcm1EYXRhKCkuY2dGb250KCkpIHsKLSAgICAgICAgLy8gQWNrISBTb21ldGhpbmcgdmVy
eSBiYWQgaGFwcGVuZWQsIGxpa2UgYSBjb3JydXB0IGZvbnQuCi0gICAgICAgIC8vIFRyeSBsb29r
aW5nIGZvciBhbiBhbHRlcm5hdGUgJ2Jhc2UnIGZvbnQgZm9yIHRoaXMgcmVuZGVyZXIuCi0KLSAg
ICAgICAgLy8gU3BlY2lhbCBjYXNlIGhhY2sgdG8gdXNlICJUaW1lcyBOZXcgUm9tYW4iIGluIHBs
YWNlIG9mICJUaW1lcyIuCi0gICAgICAgIC8vICJUaW1lcyBSTyIgaXMgYSBjb21tb24gZm9udCB3
aG9zZSBmYW1pbHkgbmFtZSBpcyAiVGltZXMiLgotICAgICAgICAvLyBJdCBvdmVycmlkZXMgdGhl
IG5vcm1hbCAiVGltZXMiIGZhbWlseSBmb250LgotICAgICAgICAvLyBJdCBhbHNvIGFwcGVhcnMg
dG8gaGF2ZSBhIGNvcnJ1cHQgcmVndWxhciB2YXJpYW50LgotICAgICAgICBOU1N0cmluZyAqZmFs
bGJhY2tGb250RmFtaWx5OwotICAgICAgICBpZiAoW1ttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBm
YW1pbHlOYW1lXSBpc0VxdWFsOkAiVGltZXMiXSkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9udEZh
bWlseSA9IEAiVGltZXMgTmV3IFJvbWFuIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFs
bGJhY2tGb250RmFtaWx5ID0gd2ViRmFsbGJhY2tGb250RmFtaWx5KCk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBUcnkgc2V0dGluZyB1cCB0aGUgYWx0ZXJuYXRlIGZvbnQuCi0gICAgICAgIC8vIFRo
aXMgaXMgYSBsYXN0IGRpdGNoIGVmZm9ydCB0byB1c2UgYSBzdWJzdGl0dXRlIGZvbnQgd2hlbiBz
b21ldGhpbmcgaGFzIGdvbmUgd3JvbmcuCi0jaWYgIUVSUk9SX0RJU0FCTEVECi0gICAgICAgIFJl
dGFpblB0cjxOU0ZvbnQ+IGluaXRpYWxGb250ID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7Ci0j
ZW5kaWYKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKLSAgICAgICAgICAgIG1f
cGxhdGZvcm1EYXRhLnNldE5TRm9udChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
IGNvbnZlcnRGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OmZhbGxiYWNrRm9u
dEZhbWlseV0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXRO
U0ZvbnQoW05TRm9udCBmb250V2l0aE5hbWU6ZmFsbGJhY2tGb250RmFtaWx5IHNpemU6bV9wbGF0
Zm9ybURhdGEuc2l6ZSgpXSk7Ci0gICAgICAgIGlmICghcGxhdGZvcm1EYXRhKCkuY2dGb250KCkp
IHsKLSAgICAgICAgICAgIGlmIChbZmFsbGJhY2tGb250RmFtaWx5IGlzRXF1YWw6QCJUaW1lcyBO
ZXcgUm9tYW4iXSkgewotICAgICAgICAgICAgICAgIC8vIE9LLCBjb3VsZG4ndCBzZXR1cCBUaW1l
cyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJuYXRlIHRvIFRpbWVzLCBmYWxsYmFjawotICAgICAgICAg
ICAgICAgIC8vIG9uIHRoZSBzeXN0ZW0gZm9udC4gIElmIHRoaXMgZmFpbHMgd2UgaGF2ZSBubyBh
bHRlcm5hdGl2ZSBsZWZ0LgotICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9u
dChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZv
cm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNrRm9udEZhbWlseSgpXSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBXZSB0cmllZCwgVGltZXMsIFRpbWVzIE5ldyBSb21hbiwgYW5kIHRoZSBzeXN0
ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCi0gICAgICAgICAgICAgICAgICAg
IExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5pdGlhbEZv
bnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBmYWlsZWRTZXR1cCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBX
ZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBX
ZSBoYXZlIHRvIGdpdmUgdXAuCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUgdG8g
aW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gUmVwb3J0IHRoZSBwcm9ibGVtLgotICAgICAgICBMT0dfRVJST1IoIkNvcnJ1cHQg
Zm9udCBkZXRlY3RlZCwgdXNpbmcgJUAgaW4gcGxhY2Ugb2YgJUAuIiwKLSAgICAgICAgICAgIFtt
X3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXSwgW2luaXRpYWxGb250LmdldCgpIGZh
bWlseU5hbWVdKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdHJ5IHRvIHNl
dCB1cCB1c2luZyB0aGUgc3lzdGVtIGZvbnQuCi0gICAgLy8gVGhpcyBpcyBwcm9iYWJseSBiZWNh
dXNlIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9tYW4gYXJlIGJvdGggdW5hdmFpbGFibGUuCi0gICAg
aWYgKGZhaWxlZFNldHVwKSB7Ci0gICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChbTlNG
b250IHN5c3RlbUZvbnRPZlNpemU6W21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHBvaW50U2l6ZV1d
KTsKLSAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHVwIGZvbnQsIHVzaW5nIHN5c3Rl
bSBmb250ICVzIiwgbV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICB9Ci0KICNpZiBQTEFURk9S
TShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDExMDAKICAgICAv
LyBXb3JrIGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vMTk0MzM0OTA+CiAgICAgQ0dHbHlwaCBkdW1t
eUdseXBoc1tdID0gezAsIDB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmluZGV4IDNh
ODcwNDIuLmY4MmRkMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTU4LDYg
KzU4LDcyIEBAIEZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKIHsKIH0KIAor
I2lmIFVTRShBUFBLSVQpCitzdGF0aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZhbWlseSh2
b2lkKQoreworICAgIHN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5ID0gW1tb
TlNGb250IHN5c3RlbUZvbnRPZlNpemU6MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07CisgICAg
cmV0dXJuIHdlYkZhbGxiYWNrRm9udEZhbWlseTsKK30KKyNlbmRpZgorCit2b2lkIEZvbnRQbGF0
Zm9ybURhdGE6OnNldEZhbGxiYWNrQ0dGb250KCkKK3sKKyNpZiBVU0UoQVBQS0lUKQorICAgIGJv
b2wgZmFpbGVkU2V0dXAgPSBmYWxzZTsKKyAgICBpZiAoIW1fY2dGb250KSB7CisgICAgICAgIC8v
IEFjayEgU29tZXRoaW5nIHZlcnkgYmFkIGhhcHBlbmVkLCBsaWtlIGEgY29ycnVwdCBmb250Lgor
ICAgICAgICAvLyBUcnkgbG9va2luZyBmb3IgYW4gYWx0ZXJuYXRlICdiYXNlJyBmb250IGZvciB0
aGlzIHJlbmRlcmVyLgorCisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBoYWNrIHRvIHVzZSAiVGlt
ZXMgTmV3IFJvbWFuIiBpbiBwbGFjZSBvZiAiVGltZXMiLgorICAgICAgICAvLyAiVGltZXMgUk8i
IGlzIGEgY29tbW9uIGZvbnQgd2hvc2UgZmFtaWx5IG5hbWUgaXMgIlRpbWVzIi4KKyAgICAgICAg
Ly8gSXQgb3ZlcnJpZGVzIHRoZSBub3JtYWwgIlRpbWVzIiBmYW1pbHkgZm9udC4KKyAgICAgICAg
Ly8gSXQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYSBjb3JydXB0IHJlZ3VsYXIgdmFyaWFudC4KKyAg
ICAgICAgTlNTdHJpbmcgKmZhbGxiYWNrRm9udEZhbWlseTsKKyAgICAgICAgaWYgKFtbbnNGb250
KCkgZmFtaWx5TmFtZV0gaXNFcXVhbDpAIlRpbWVzIl0pCisgICAgICAgICAgICBmYWxsYmFja0Zv
bnRGYW1pbHkgPSBAIlRpbWVzIE5ldyBSb21hbiI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGZhbGxiYWNrRm9udEZhbWlseSA9IHdlYkZhbGxiYWNrRm9udEZhbWlseSgpOworCisgICAgICAg
IC8vIFRyeSBzZXR0aW5nIHVwIHRoZSBhbHRlcm5hdGUgZm9udC4KKyAgICAgICAgLy8gVGhpcyBp
cyBhIGxhc3QgZGl0Y2ggZWZmb3J0IHRvIHVzZSBhIHN1YnN0aXR1dGUgZm9udCB3aGVuIHNvbWV0
aGluZyBoYXMgZ29uZSB3cm9uZy4KKyNpZiAhRVJST1JfRElTQUJMRUQKKyAgICAgICAgUmV0YWlu
UHRyPE5TRm9udD4gaW5pdGlhbEZvbnQgPSBuc0ZvbnQoKTsKKyNlbmRpZgorICAgICAgICBpZiAo
Zm9udCgpKQorICAgICAgICAgICAgc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250
TWFuYWdlcl0gY29udmVydEZvbnQ6bnNGb250KCkgdG9GYW1pbHk6ZmFsbGJhY2tGb250RmFtaWx5
XSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldE5TRm9udChbTlNGb250IGZvbnRXaXRo
TmFtZTpmYWxsYmFja0ZvbnRGYW1pbHkgc2l6ZTpzaXplKCldKTsKKyAgICAgICAgaWYgKCFjZ0Zv
bnQoKSkgeworICAgICAgICAgICAgaWYgKFtmYWxsYmFja0ZvbnRGYW1pbHkgaXNFcXVhbDpAIlRp
bWVzIE5ldyBSb21hbiJdKSB7CisgICAgICAgICAgICAgICAgLy8gT0ssIGNvdWxkbid0IHNldHVw
IFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGUgdG8gVGltZXMsIGZhbGxiYWNrCisgICAg
ICAgICAgICAgICAgLy8gb24gdGhlIHN5c3RlbSBmb250LiBJZiB0aGlzIGZhaWxzIHdlIGhhdmUg
bm8gYWx0ZXJuYXRpdmUgbGVmdC4KKyAgICAgICAgICAgICAgICBzZXROU0ZvbnQoW1tOU0ZvbnRN
YW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDpuc0ZvbnQoKSB0b0ZhbWlseTp3
ZWJGYWxsYmFja0ZvbnRGYW1pbHkoKV0pOworICAgICAgICAgICAgICAgIGlmICghY2dGb250KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgdHJpZWQsIFRpbWVzLCBUaW1lcyBOZXcgUm9t
YW4sIGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0byBnaXZlIHVwLgorICAg
ICAgICAgICAgICAgICAgICBMT0dfRVJST1IoInVuYWJsZSB0byBpbml0aWFsaXplIHdpdGggZm9u
dCAlQCIsIGluaXRpYWxGb250LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkU2V0
dXAgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8gV2UgdHJpZWQgdGhlIHJlcXVlc3RlZCBmb250IGFuZCB0aGUgc3lzdGVt
IGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0byBnaXZlIHVwLgorICAgICAgICAgICAgICAgIExPR19F
UlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5pdGlhbEZvbnQuZ2V0
KCkpOworICAgICAgICAgICAgICAgIGZhaWxlZFNldHVwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vIFJlcG9ydCB0aGUgcHJvYmxlbS4KKyAgICAgICAgTE9H
X0VSUk9SKCJDb3JydXB0IGZvbnQgZGV0ZWN0ZWQsIHVzaW5nICVAIGluIHBsYWNlIG9mICVALiIs
CisgICAgICAgICAgICBbbnNGb250KCkgZmFtaWx5TmFtZV0sIFtpbml0aWFsRm9udC5nZXQoKSBm
YW1pbHlOYW1lXSk7CisgICAgfQorCisgICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHRyeSB0byBz
ZXQgdXAgdXNpbmcgdGhlIHN5c3RlbSBmb250LgorICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmVj
YXVzZSBUaW1lcyBhbmQgVGltZXMgTmV3IFJvbWFuIGFyZSBib3RoIHVuYXZhaWxhYmxlLgorICAg
IGlmIChmYWlsZWRTZXR1cCkgeworICAgICAgICBzZXROU0ZvbnQoW05TRm9udCBzeXN0ZW1Gb250
T2ZTaXplOltuc0ZvbnQoKSBwb2ludFNpemVdXSk7CisgICAgICAgIExPR19FUlJPUigiZmFpbGVk
IHRvIHNldCB1cCBmb250LCB1c2luZyBzeXN0ZW0gZm9udCAlcyIsIGZvbnQoKSk7CisgICAgfQor
I2VuZGlmIC8vIFVTRShBUFBLSVQpCit9CisKIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZv
cm1EYXRhSW5pdChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQogewogICAgIG1fZm9udCA9IGYu
bV9mb250OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAppbmRleCA5NzcyYzljLi5kMTcxOWM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcApAQCAtMTU1LDQgKzE1NSw4IEBAIGJvb2wg
Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Jc0VxdWFsKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IG90aGVyKSBjb25zdAogICAgICAgICAmJiBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESTsKIH0K
IAordm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGYWxsYmFja0NHRm9udCgpCit7Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276871</attachid>
            <date>2016-04-20 17:08:53 -0700</date>
            <delta_ts>2016-04-20 21:32:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156822-20160420170914.patch</filename>
            <type>text/plain</type>
            <size>13109</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5Nzc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTRmNWM3MTZlOGFiM2E5
ZTNkMzAzZTc4NDJkZmMwODQyZGQ2MjcwZC4uZTZhOTlhY2E3MWY5Nzk3MjhhNTgxY2ZiNzZhYTlh
MjYzZDQ0ODhjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE2LTA0LTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jhc2ggdW5kZXIgRm9udENh
Y2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2ODIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNTM3
Mzk3MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
biBzb21lIHJhcmUgY2FzZXMsIHRoZSBGb250IGNvbnN0cnVjdG9yIHdvdWxkIG11dGF0ZSB0aGUg
Rm9udFBsYXRmb3JtRGF0YQorICAgICAgICB0aGF0IGlzIGJlaW5nIHBhc3NlZCBpbi4gVGhpcyBp
cyBhbiBpc3N1ZSBiZWNhdXNlIGJlY2F1c2Ugb3VyIEZvbnRDYWNoZQorICAgICAgICB1c2VzIHRo
ZSBGb250UGxhdGZvcm1EYXRhIGFzIGtleSBmb3IgdGhlIGNhY2hlZCBmb250cy4gVGhpcyBjb3Vs
ZCBsZWFkIHRvCisgICAgICAgIGNyYXNoZXMgYmVjYXVzZSB0aGUgV1RGTW92ZSgpIGluIEZvbnRD
YWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCkgd291bGQKKyAgICAgICAgbnVsbGlmeSB2YWx1
ZXMgaW4gb3VyIEhhc2hNYXAgYnV0IHdlIHdvdWxkIHRoZW4gZmFpbCB0byByZW1vdmUgdGhlbSBm
cm9tCisgICAgICAgIHRoZSBIYXNoTWFwIChiZWNhdXNlIHRoZSBrZXkgZGlkIG5vdCBtYXRjaCku
IFdlIHdvdWxkIHRoZW4gcmVmZXJlbmNlIHRoZQorICAgICAgICBudWxsIGZvbnQgd2hlbiBsb29w
aW5nIGFnYWluIHdoZW4gZG9pbmcgZm9udC0+aGFzT25lUmVmKCkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtYXJrcyBGb250OjptX3BsYXRmb3JtRGF0YSBtZW1iZXIgYXMgY29uc3QgdG8gYXZvaWQg
c3VjaCBpc3N1ZXMKKyAgICAgICAgaW4gdGhlIGZ1dHVyZSBhbmQgbW92ZXMgdGhlIGNvZGUgYWx0
ZXJpbmcgdGhlIEZvbnRQbGF0Zm9ybURhdGEgZnJvbSB0aGUKKyAgICAgICAgRm9udCBjb25zdHJ1
Y3RvciBpbnRvIHRoZSBGb250UGxhdGZvcm1EYXRhIGNvbnN0cnVjdG9yLiBUaGUgcHVycG9zZSBv
ZgorICAgICAgICB0aGF0IGNvZGUgd2FzIHRvIGluaXRpYWxpemUgRm9udFBsYXRmb3JtRGF0YTo6
bV9jZ0ZvbnQgaW4gY2FzZSB0aGUgQ0dGb250CisgICAgICAgIHBhc3NlZCBpbiB0aGUgY29uc3Ry
dWN0b3Igd2FzIG51bGwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6d2ViRmFsbGJhY2tGb250RmFtaWx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtSW5pdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6d2ViRmFsbGJhY2tGb250RmFtaWx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZhbGxiYWNrQ0dGb250KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZhbGxiYWNrQ0dGb250KToKKwogMjAxNi0w
NC0yMCAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBIYW5nYWJsZSBw
dW5jdHVhdGlvbiBtZWFzdXJlbWVudCB1c2luZyB0aGUgd3JvbmcgaW5kaWNlcy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCA0ZTkyZjU5YjU3NDhjNmFmM2I2MDhi
NTE3YjlkNDA4YzgzYzU4ZWRmLi43YjhiNTQwZTIwYTJmM2E2N2FiMjJkZWUxNGE2ZTAwNzdiZTcw
MDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0yMjksNyAr
MjI5LDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX21heENoYXJXaWR0aDsKICAgICBmbG9hdCBt
X2F2Z0NoYXJXaWR0aDsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGEgbV9wbGF0Zm9ybURhdGE7Cisg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKIAogICAgIG11dGFibGUg
UmVmUHRyPEdseXBoUGFnZT4gbV9nbHlwaFBhZ2VaZXJvOwogICAgIG11dGFibGUgSGFzaE1hcDx1
bnNpZ25lZCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fZ2x5cGhQYWdlczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmluZGV4IDQ3NDc5ZTc1ZTEzOWI5
YWM3NWRkMzBhYzhhM2NlOGI0YTI3NjgzMWYuLmI0YzUyMWY3YTE1ZjdlYzkwOWVhZWViMmQyZGI2
N2NiNmFjZTBlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcApAQCAtMzk2LDYgKzM5Niw4IEBAIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRG
b3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogICAg
IGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogCisgICAgQVNTRVJUKGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUucGxhdGZvcm1EYXRhKCkgPT0gcGxhdGZvcm1EYXRhKTsKKwogICAg
IHJldHVybiAqYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIApAQCAtNDM1LDggKzQzNywx
MCBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIHB1cmdl
Q291bnQpCiAgICAgICAgIC8vIEZvbnRzIG1heSByZWYgb3RoZXIgZm9udHMgc28gd2UgbG9vcCB1
bnRpbCB0aGVyZSBhcmUgbm8gY2hhbmdlcy4KICAgICAgICAgaWYgKGZvbnRzVG9EZWxldGUuaXNF
bXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGZvciAoYXV0byYgZm9udCA6IGZv
bnRzVG9EZWxldGUpCi0gICAgICAgICAgICBjYWNoZWRGb250cygpLnJlbW92ZShmb250LT5wbGF0
Zm9ybURhdGEoKSk7CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGZvbnRzVG9EZWxldGUpIHsK
KyAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGNhY2hlZEZvbnRzKCkucmVtb3ZlKGZvbnQtPnBs
YXRmb3JtRGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vz
cyk7CisgICAgICAgIH0KICAgICB9OwogCiAgICAgVmVjdG9yPEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleT4ga2V5c1RvUmVtb3ZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAppbmRleCBhZGM1YzcxZTc3MzgzOTBkNDMyYmQ3
YjA0NTNhZjYxN2MyMTkzYmQ4Li43NjVmZWQxNWJjNzRjZjI4NzFkZGRiODhhN2FjYTZkNzM1NTcy
MjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxh
dGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmNwcApAQCAtNTgsNiArNTgsOCBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKENHRm9udFJlZiBjZ0ZvbnQsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGlj
QgogICAgIDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNP
YmxpcXVlLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCB0ZXh0UmVuZGVyaW5nTW9kZSkKIHsK
ICAgICBtX2NnRm9udCA9IGNnRm9udDsKKyAgICBpZiAoIW1fY2dGb250KQorICAgICAgICBzZXRG
YWxsYmFja0NHRm9udCgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCBjYzAzMzJmNjNhZmFkNDZj
MWEzOGY4NjBjMGM4NzI0ZmM0YzRhNTc5Li40ZTNkYzQ0YzE2YWVhOWEzOTY4OTcwYjRjZWM3YmE4
ZWMxNmI4N2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oCkBAIC0yMTYsNiArMjE2LDkgQEAgcHJpdmF0ZToKICNpZiBQTEFU
Rk9STShXSU4pCiAgICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KEhGT05ULCBmbG9hdCBzaXplLCBI
REMsIFdDSEFSKiBmYWNlTmFtZSk7CiAjZW5kaWYKKyNpZiBVU0UoQ0cpCisgICAgdm9pZCBzZXRG
YWxsYmFja0NHRm9udCgpOworI2VuZGlmCiAKIHB1YmxpYzoKICAgICBib29sIG1fc3ludGhldGlj
Qm9sZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250Q29jb2EubW0KaW5kZXggNjQ4ODQxYWM0OTUxYWZmYjAxYWU3MDJiY2RjYTMx
MTY1Y2YxNGJhMi4uMWNiMjc2NDgzMzQ0OTYzNGFlMjY3YWU2MjY5YTQzMzhlNTVhNDU4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2Nv
YS5tbQpAQCAtNzksMTMgKzc5LDcgQEAgc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhz
KENURm9udFJlZiBjdEZvbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0jaWYgVVNFKEFQUEtJ
VCkKLXN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5KHZvaWQpCi17Ci0gICAg
c3RhdGljIE5TU3RyaW5nICp3ZWJGYWxsYmFja0ZvbnRGYW1pbHkgPSBbW1tOU0ZvbnQgc3lzdGVt
Rm9udE9mU2l6ZToxNi4wZl0gZmFtaWx5TmFtZV0gcmV0YWluXTsKLSAgICByZXR1cm4gd2ViRmFs
bGJhY2tGb250RmFtaWx5OwotfQotI2Vsc2UKKyNpZiAhVVNFKEFQUEtJVCkKIGJvb2wgZm9udEZh
bWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkK
IHsKICAgICBpZiAoIWZvbnRGYW1pbHlOYW1lKQpAQCAtMTA0LDU5ICs5OCw2IEBAIHZvaWQgRm9u
dDo6cGxhdGZvcm1Jbml0KCkKICNpZiBVU0UoQVBQS0lUKQogICAgIG1fc3ludGhldGljQm9sZE9m
ZnNldCA9IG1fcGxhdGZvcm1EYXRhLm1fc3ludGhldGljQm9sZCA/IDEuMGYgOiAwLmY7CiAKLSAg
ICBib29sIGZhaWxlZFNldHVwID0gZmFsc2U7Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5jZ0Zv
bnQoKSkgewotICAgICAgICAvLyBBY2shIFNvbWV0aGluZyB2ZXJ5IGJhZCBoYXBwZW5lZCwgbGlr
ZSBhIGNvcnJ1cHQgZm9udC4KLSAgICAgICAgLy8gVHJ5IGxvb2tpbmcgZm9yIGFuIGFsdGVybmF0
ZSAnYmFzZScgZm9udCBmb3IgdGhpcyByZW5kZXJlci4KLQotICAgICAgICAvLyBTcGVjaWFsIGNh
c2UgaGFjayB0byB1c2UgIlRpbWVzIE5ldyBSb21hbiIgaW4gcGxhY2Ugb2YgIlRpbWVzIi4KLSAg
ICAgICAgLy8gIlRpbWVzIFJPIiBpcyBhIGNvbW1vbiBmb250IHdob3NlIGZhbWlseSBuYW1lIGlz
ICJUaW1lcyIuCi0gICAgICAgIC8vIEl0IG92ZXJyaWRlcyB0aGUgbm9ybWFsICJUaW1lcyIgZmFt
aWx5IGZvbnQuCi0gICAgICAgIC8vIEl0IGFsc28gYXBwZWFycyB0byBoYXZlIGEgY29ycnVwdCBy
ZWd1bGFyIHZhcmlhbnQuCi0gICAgICAgIE5TU3RyaW5nICpmYWxsYmFja0ZvbnRGYW1pbHk7Ci0g
ICAgICAgIGlmIChbW21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIGZhbWlseU5hbWVdIGlzRXF1YWw6
QCJUaW1lcyJdKQotICAgICAgICAgICAgZmFsbGJhY2tGb250RmFtaWx5ID0gQCJUaW1lcyBOZXcg
Um9tYW4iOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmYWxsYmFja0ZvbnRGYW1pbHkgPSB3
ZWJGYWxsYmFja0ZvbnRGYW1pbHkoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRyeSBzZXR0aW5n
IHVwIHRoZSBhbHRlcm5hdGUgZm9udC4KLSAgICAgICAgLy8gVGhpcyBpcyBhIGxhc3QgZGl0Y2gg
ZWZmb3J0IHRvIHVzZSBhIHN1YnN0aXR1dGUgZm9udCB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3
cm9uZy4KLSNpZiAhRVJST1JfRElTQUJMRUQKLSAgICAgICAgUmV0YWluUHRyPE5TRm9udD4gaW5p
dGlhbEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKLSNlbmRpZgotICAgICAgICBpZiAo
bV9wbGF0Zm9ybURhdGEuZm9udCgpKQotICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNG
b250KFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0
Zm9ybURhdGEubnNGb250KCkgdG9GYW1pbHk6ZmFsbGJhY2tGb250RmFtaWx5XSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChbTlNGb250IGZvbnRX
aXRoTmFtZTpmYWxsYmFja0ZvbnRGYW1pbHkgc2l6ZTptX3BsYXRmb3JtRGF0YS5zaXplKCldKTsK
LSAgICAgICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkgewotICAgICAgICAgICAgaWYg
KFtmYWxsYmFja0ZvbnRGYW1pbHkgaXNFcXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gT0ssIGNvdWxkbid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBhcyBhbiBh
bHRlcm5hdGUgdG8gVGltZXMsIGZhbGxiYWNrCi0gICAgICAgICAgICAgICAgLy8gb24gdGhlIHN5
c3RlbSBmb250LiAgSWYgdGhpcyBmYWlscyB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlIGxlZnQuCi0g
ICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBz
aGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bV9wbGF0Zm9ybURhdGEubnNGb250KCkgdG9G
YW1pbHk6d2ViRmFsbGJhY2tGb250RmFtaWx5KCldKTsKLSAgICAgICAgICAgICAgICBpZiAoIXBs
YXRmb3JtRGF0YSgpLmNnRm9udCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHRyaWVk
LCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBhbmQgdGhlIHN5c3RlbSBmb250LiBObyBqb3kuIFdl
IGhhdmUgdG8gZ2l2ZSB1cC4KLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUg
dG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZhaWxlZFNldHVwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIHRyaWVkIHRoZSByZXF1ZXN0
ZWQgZm9udCBhbmQgdGhlIHN5c3RlbSBmb250LiBObyBqb3kuIFdlIGhhdmUgdG8gZ2l2ZSB1cC4K
LSAgICAgICAgICAgICAgICBMT0dfRVJST1IoInVuYWJsZSB0byBpbml0aWFsaXplIHdpdGggZm9u
dCAlQCIsIGluaXRpYWxGb250LmdldCgpKTsKLSAgICAgICAgICAgICAgICBmYWlsZWRTZXR1cCA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXBvcnQgdGhl
IHByb2JsZW0uCi0gICAgICAgIExPR19FUlJPUigiQ29ycnVwdCBmb250IGRldGVjdGVkLCB1c2lu
ZyAlQCBpbiBwbGFjZSBvZiAlQC4iLAotICAgICAgICAgICAgW21fcGxhdGZvcm1EYXRhLm5zRm9u
dCgpIGZhbWlseU5hbWVdLCBbaW5pdGlhbEZvbnQuZ2V0KCkgZmFtaWx5TmFtZV0pOwotICAgIH0K
LQotICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gc2V0IHVwIHVzaW5nIHRoZSBzeXN0
ZW0gZm9udC4KLSAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgVGltZXMgYW5kIFRpbWVz
IE5ldyBSb21hbiBhcmUgYm90aCB1bmF2YWlsYWJsZS4KLSAgICBpZiAoZmFpbGVkU2V0dXApIHsK
LSAgICAgICAgbV9wbGF0Zm9ybURhdGEuc2V0TlNGb250KFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6
ZTpbbV9wbGF0Zm9ybURhdGEubnNGb250KCkgcG9pbnRTaXplXV0pOwotICAgICAgICBMT0dfRVJS
T1IoImZhaWxlZCB0byBzZXQgdXAgZm9udCwgdXNpbmcgc3lzdGVtIGZvbnQgJXMiLCBtX3BsYXRm
b3JtRGF0YS5mb250KCkpOwotICAgIH0KLQogI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTEwMAogICAgIC8vIFdvcmsgYXJvdW5kIDxyZGFy
Oi8vcHJvYmxlbS8xOTQzMzQ5MD4KICAgICBDR0dseXBoIGR1bW15R2x5cGhzW10gPSB7MCwgMH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5kZXggM2E4NzA0MmI4MzBlYzE2NzViZTVi
YjEzMTkxZjEwZjlkZjBlNGU1MS4uZjgyZGQwZTY3NDJmM2Q2M2RlY2Q4NzgxYmU2OWM5Zjk0ZmZl
OGNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtNTgsNiArNTgsNzIgQEAg
Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQogewogfQogCisjaWYgVVNFKEFQ
UEtJVCkKK3N0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5KHZvaWQpCit7Cisg
ICAgc3RhdGljIE5TU3RyaW5nICp3ZWJGYWxsYmFja0ZvbnRGYW1pbHkgPSBbW1tOU0ZvbnQgc3lz
dGVtRm9udE9mU2l6ZToxNi4wZl0gZmFtaWx5TmFtZV0gcmV0YWluXTsKKyAgICByZXR1cm4gd2Vi
RmFsbGJhY2tGb250RmFtaWx5OworfQorI2VuZGlmCisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6
c2V0RmFsbGJhY2tDR0ZvbnQoKQoreworI2lmIFVTRShBUFBLSVQpCisgICAgYm9vbCBmYWlsZWRT
ZXR1cCA9IGZhbHNlOworICAgIGlmICghbV9jZ0ZvbnQpIHsKKyAgICAgICAgLy8gQWNrISBTb21l
dGhpbmcgdmVyeSBiYWQgaGFwcGVuZWQsIGxpa2UgYSBjb3JydXB0IGZvbnQuCisgICAgICAgIC8v
IFRyeSBsb29raW5nIGZvciBhbiBhbHRlcm5hdGUgJ2Jhc2UnIGZvbnQgZm9yIHRoaXMgcmVuZGVy
ZXIuCisKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGhhY2sgdG8gdXNlICJUaW1lcyBOZXcgUm9t
YW4iIGluIHBsYWNlIG9mICJUaW1lcyIuCisgICAgICAgIC8vICJUaW1lcyBSTyIgaXMgYSBjb21t
b24gZm9udCB3aG9zZSBmYW1pbHkgbmFtZSBpcyAiVGltZXMiLgorICAgICAgICAvLyBJdCBvdmVy
cmlkZXMgdGhlIG5vcm1hbCAiVGltZXMiIGZhbWlseSBmb250LgorICAgICAgICAvLyBJdCBhbHNv
IGFwcGVhcnMgdG8gaGF2ZSBhIGNvcnJ1cHQgcmVndWxhciB2YXJpYW50LgorICAgICAgICBOU1N0
cmluZyAqZmFsbGJhY2tGb250RmFtaWx5OworICAgICAgICBpZiAoW1tuc0ZvbnQoKSBmYW1pbHlO
YW1lXSBpc0VxdWFsOkAiVGltZXMiXSkKKyAgICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9
IEAiVGltZXMgTmV3IFJvbWFuIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmFsbGJhY2tG
b250RmFtaWx5ID0gd2ViRmFsbGJhY2tGb250RmFtaWx5KCk7CisKKyAgICAgICAgLy8gVHJ5IHNl
dHRpbmcgdXAgdGhlIGFsdGVybmF0ZSBmb250LgorICAgICAgICAvLyBUaGlzIGlzIGEgbGFzdCBk
aXRjaCBlZmZvcnQgdG8gdXNlIGEgc3Vic3RpdHV0ZSBmb250IHdoZW4gc29tZXRoaW5nIGhhcyBn
b25lIHdyb25nLgorI2lmICFFUlJPUl9ESVNBQkxFRAorICAgICAgICBSZXRhaW5QdHI8TlNGb250
PiBpbml0aWFsRm9udCA9IG5zRm9udCgpOworI2VuZGlmCisgICAgICAgIGlmIChmb250KCkpCisg
ICAgICAgICAgICBzZXROU0ZvbnQoW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBj
b252ZXJ0Rm9udDpuc0ZvbnQoKSB0b0ZhbWlseTpmYWxsYmFja0ZvbnRGYW1pbHldKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc2V0TlNGb250KFtOU0ZvbnQgZm9udFdpdGhOYW1lOmZhbGxi
YWNrRm9udEZhbWlseSBzaXplOnNpemUoKV0pOworICAgICAgICBpZiAoIWNnRm9udCgpKSB7Cisg
ICAgICAgICAgICBpZiAoW2ZhbGxiYWNrRm9udEZhbWlseSBpc0VxdWFsOkAiVGltZXMgTmV3IFJv
bWFuIl0pIHsKKyAgICAgICAgICAgICAgICAvLyBPSywgY291bGRuJ3Qgc2V0dXAgVGltZXMgTmV3
IFJvbWFuIGFzIGFuIGFsdGVybmF0ZSB0byBUaW1lcywgZmFsbGJhY2sKKyAgICAgICAgICAgICAg
ICAvLyBvbiB0aGUgc3lzdGVtIGZvbnQuIElmIHRoaXMgZmFpbHMgd2UgaGF2ZSBubyBhbHRlcm5h
dGl2ZSBsZWZ0LgorICAgICAgICAgICAgICAgIHNldE5TRm9udChbW05TRm9udE1hbmFnZXIgc2hh
cmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om5zRm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNr
Rm9udEZhbWlseSgpXSk7CisgICAgICAgICAgICAgICAgaWYgKCFjZ0ZvbnQoKSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBXZSB0cmllZCwgVGltZXMsIFRpbWVzIE5ldyBSb21hbiwgYW5kIHRo
ZSBzeXN0ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCisgICAgICAgICAgICAg
ICAgICAgIExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5p
dGlhbEZvbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBmYWlsZWRTZXR1cCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyBXZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8g
am95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ1bmFi
bGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gUmVwb3J0IHRoZSBwcm9ibGVtLgorICAgICAgICBMT0dfRVJST1IoIkNv
cnJ1cHQgZm9udCBkZXRlY3RlZCwgdXNpbmcgJUAgaW4gcGxhY2Ugb2YgJUAuIiwKKyAgICAgICAg
ICAgIFtuc0ZvbnQoKSBmYW1pbHlOYW1lXSwgW2luaXRpYWxGb250LmdldCgpIGZhbWlseU5hbWVd
KTsKKyAgICB9CisKKyAgICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdHJ5IHRvIHNldCB1cCB1c2lu
ZyB0aGUgc3lzdGVtIGZvbnQuCisgICAgLy8gVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIFRpbWVz
IGFuZCBUaW1lcyBOZXcgUm9tYW4gYXJlIGJvdGggdW5hdmFpbGFibGUuCisgICAgaWYgKGZhaWxl
ZFNldHVwKSB7CisgICAgICAgIHNldE5TRm9udChbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W25z
Rm9udCgpIHBvaW50U2l6ZV1dKTsKKyAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHVw
IGZvbnQsIHVzaW5nIHN5c3RlbSBmb250ICVzIiwgZm9udCgpKTsKKyAgICB9CisjZW5kaWYgLy8g
VVNFKEFQUEtJVCkKK30KKwogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYpCiB7CiAgICAgbV9mb250ID0gZi5tX2ZvbnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRm
b3JtRGF0YUNHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCmluZGV4IDk3NzJjOWNlZDgyMDYwMGEzYWE1NmRlZDRl
YjJjMWUzOGJhZGE4ZDEuLmQxNzE5YzgwOTZhYWQ0OGM5ZjllYTEwMDlkM2VkOWM3YWYyMmIxYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxh
dGZvcm1EYXRhQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCkBAIC0xNTUsNCArMTU1LDggQEAgYm9vbCBG
b250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
b3RoZXIpIGNvbnN0CiAgICAgICAgICYmIG1fdXNlR0RJID09IG90aGVyLm1fdXNlR0RJOwogfQog
Cit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEZhbGxiYWNrQ0dGb250KCkKK3sKK30KKwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276897</attachid>
            <date>2016-04-20 21:32:12 -0700</date>
            <delta_ts>2016-04-21 09:05:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156822-20160420213233.patch</filename>
            <type>text/plain</type>
            <size>17882</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5ODAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjA0NGJlNTY3NDAyOGRi
MTE2YzgzM2FkZWIwMGJiZjdlNDBkMDI2Yi4uOTUwYjc2MjMzZTY2YjQzMzMzY2U1Y2I3NDNjZGNj
MzNiNTIyYzIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE2LTA0LTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jhc2ggdW5kZXIgRm9udENh
Y2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2ODIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNTM3
Mzk3MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
biBzb21lIHJhcmUgY2FzZXMsIHRoZSBGb250IGNvbnN0cnVjdG9yIHdvdWxkIG11dGF0ZSB0aGUg
Rm9udFBsYXRmb3JtRGF0YQorICAgICAgICB0aGF0IGlzIGJlaW5nIHBhc3NlZCBpbi4gVGhpcyBp
cyBhbiBpc3N1ZSBiZWNhdXNlIGJlY2F1c2Ugb3VyIEZvbnRDYWNoZQorICAgICAgICB1c2VzIHRo
ZSBGb250UGxhdGZvcm1EYXRhIGFzIGtleSBmb3IgdGhlIGNhY2hlZCBmb250cy4gVGhpcyBjb3Vs
ZCBsZWFkIHRvCisgICAgICAgIGNyYXNoZXMgYmVjYXVzZSB0aGUgV1RGTW92ZSgpIGluIEZvbnRD
YWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCkgd291bGQKKyAgICAgICAgbnVsbGlmeSB2YWx1
ZXMgaW4gb3VyIEhhc2hNYXAgYnV0IHdlIHdvdWxkIHRoZW4gZmFpbCB0byByZW1vdmUgdGhlbSBm
cm9tCisgICAgICAgIHRoZSBIYXNoTWFwIChiZWNhdXNlIHRoZSBrZXkgZGlkIG5vdCBtYXRjaCku
IFdlIHdvdWxkIHRoZW4gcmVmZXJlbmNlIHRoZQorICAgICAgICBudWxsIGZvbnQgd2hlbiBsb29w
aW5nIGFnYWluIHdoZW4gZG9pbmcgZm9udC0+aGFzT25lUmVmKCkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtYXJrcyBGb250OjptX3BsYXRmb3JtRGF0YSBtZW1iZXIgYXMgY29uc3QgdG8gYXZvaWQg
c3VjaCBpc3N1ZXMKKyAgICAgICAgaW4gdGhlIGZ1dHVyZSBhbmQgbW92ZXMgdGhlIGNvZGUgYWx0
ZXJpbmcgdGhlIEZvbnRQbGF0Zm9ybURhdGEgZnJvbSB0aGUKKyAgICAgICAgRm9udCBjb25zdHJ1
Y3RvciBpbnRvIHRoZSBGb250UGxhdGZvcm1EYXRhIGNvbnN0cnVjdG9yLiBUaGUgcHVycG9zZSBv
ZgorICAgICAgICB0aGF0IGNvZGUgd2FzIHRvIGluaXRpYWxpemUgRm9udFBsYXRmb3JtRGF0YTo6
bV9jZ0ZvbnQgaW4gY2FzZSB0aGUgQ0dGb250CisgICAgICAgIHBhc3NlZCBpbiB0aGUgY29uc3Ry
dWN0b3Igd2FzIG51bGwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6d2ViRmFsbGJhY2tGb250RmFtaWx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtSW5pdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6d2ViRmFsbGJhY2tGb250RmFtaWx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZhbGxiYWNrQ0dGb250KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZhbGxiYWNrQ0dGb250KToKKwogMjAxNi0w
NC0yMCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEdl
dCByaWQgb2YgYSBjb3VwbGUgb2YgdXNlcyBvZiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2lu
Z2xldG9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCA0ZTky
ZjU5YjU3NDhjNmFmM2I2MDhiNTE3YjlkNDA4YzgzYzU4ZWRmLi43YjhiNTQwZTIwYTJmM2E2N2Fi
MjJkZWUxNGE2ZTAwNzdiZTcwMDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCkBAIC0yMjksNyArMjI5LDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX21heENoYXJX
aWR0aDsKICAgICBmbG9hdCBtX2F2Z0NoYXJXaWR0aDsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGEg
bV9wbGF0Zm9ybURhdGE7CisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0
YTsKIAogICAgIG11dGFibGUgUmVmUHRyPEdseXBoUGFnZT4gbV9nbHlwaFBhZ2VaZXJvOwogICAg
IG11dGFibGUgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fZ2x5cGhQYWdl
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmlu
ZGV4IDQ3NDc5ZTc1ZTEzOWI5YWM3NWRkMzBhYzhhM2NlOGI0YTI3NjgzMWYuLjlmYmM2Yzc4Y2E5
ZDk3OWQwZWZlNGFmMmI5MmVjMzAyYTljYTY0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtMzk2LDYgKzM5Niw4IEBAIFJlZjxGb250
PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhKQogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogCisg
ICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnBsYXRmb3JtRGF0YSgpID09IHBs
YXRmb3JtRGF0YSk7CisKICAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9
CiAKQEAgLTQzNSw4ICs0MzcsMTAgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250
RGF0YSh1bnNpZ25lZCBwdXJnZUNvdW50KQogICAgICAgICAvLyBGb250cyBtYXkgcmVmIG90aGVy
IGZvbnRzIHNvIHdlIGxvb3AgdW50aWwgdGhlcmUgYXJlIG5vIGNoYW5nZXMuCiAgICAgICAgIGlm
IChmb250c1RvRGVsZXRlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBm
b3IgKGF1dG8mIGZvbnQgOiBmb250c1RvRGVsZXRlKQotICAgICAgICAgICAgY2FjaGVkRm9udHMo
KS5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOworICAgICAgICBmb3IgKGF1dG8mIGZvbnQg
OiBmb250c1RvRGVsZXRlKSB7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBjYWNoZWRGb250
cygpLnJlbW92ZShmb250LT5wbGF0Zm9ybURhdGEoKSk7CisgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgICAgICB9CiAgICAgfTsKIAogICAgIFZlY3RvcjxG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtleXNUb1JlbW92ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggYWRj
NWM3MWU3NzM4MzkwZDQzMmJkN2IwNDUzYWY2MTdjMjE5M2JkOC4uNzY1ZmVkMTViYzc0Y2YyODcx
ZGRkYjg4YTdhY2E2ZDczNTU3MjIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTU4LDYgKzU4LDggQEAgRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYgY2dGb250LCBmbG9hdCBz
aXplLCBib29sIHN5bnRoZXRpY0IKICAgICA6IEZvbnRQbGF0Zm9ybURhdGEoc2l6ZSwgc3ludGhl
dGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCwgdGV4
dFJlbmRlcmluZ01vZGUpCiB7CiAgICAgbV9jZ0ZvbnQgPSBjZ0ZvbnQ7CisgICAgaWYgKCFtX2Nn
Rm9udCkKKyAgICAgICAgc2V0RmFsbGJhY2tDR0ZvbnQoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKaW5k
ZXggY2MwMzMyZjYzYWZhZDQ2YzFhMzhmODYwYzBjODcyNGZjNGM0YTU3OS4uNGUzZGM0NGMxNmFl
YTlhMzk2ODk3MGI0Y2VjN2JhOGVjMTZiODdiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMjE2LDYgKzIxNiw5IEBA
IHByaXZhdGU6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgcGxhdGZvcm1EYXRhSW5pdChI
Rk9OVCwgZmxvYXQgc2l6ZSwgSERDLCBXQ0hBUiogZmFjZU5hbWUpOwogI2VuZGlmCisjaWYgVVNF
KENHKQorICAgIHZvaWQgc2V0RmFsbGJhY2tDR0ZvbnQoKTsKKyNlbmRpZgogCiBwdWJsaWM6CiAg
ICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCmluZGV4IDY0ODg0MWFjNDk1
MWFmZmIwMWFlNzAyYmNkY2EzMTE2NWNmMTRiYTIuLjFjYjI3NjQ4MzM0NDk2MzRhZTI2N2FlNjI2
OWE0MzM4ZTU1YTQ1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q29jb2EubW0KQEAgLTc5LDEzICs3OSw3IEBAIHN0YXRpYyBib29sIGZv
bnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgY3RGb250KQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotI2lmIFVTRShBUFBLSVQpCi1zdGF0aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZh
bWlseSh2b2lkKQotewotICAgIHN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5
ID0gW1tbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07
Ci0gICAgcmV0dXJuIHdlYkZhbGxiYWNrRm9udEZhbWlseTsKLX0KLSNlbHNlCisjaWYgIVVTRShB
UFBLSVQpCiBib29sIGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoQ0ZTdHJpbmdS
ZWYgZm9udEZhbWlseU5hbWUpCiB7CiAgICAgaWYgKCFmb250RmFtaWx5TmFtZSkKQEAgLTEwNCw1
OSArOTgsNiBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAjaWYgVVNFKEFQUEtJVCkKICAg
ICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQg
PyAxLjBmIDogMC5mOwogCi0gICAgYm9vbCBmYWlsZWRTZXR1cCA9IGZhbHNlOwotICAgIGlmICgh
cGxhdGZvcm1EYXRhKCkuY2dGb250KCkpIHsKLSAgICAgICAgLy8gQWNrISBTb21ldGhpbmcgdmVy
eSBiYWQgaGFwcGVuZWQsIGxpa2UgYSBjb3JydXB0IGZvbnQuCi0gICAgICAgIC8vIFRyeSBsb29r
aW5nIGZvciBhbiBhbHRlcm5hdGUgJ2Jhc2UnIGZvbnQgZm9yIHRoaXMgcmVuZGVyZXIuCi0KLSAg
ICAgICAgLy8gU3BlY2lhbCBjYXNlIGhhY2sgdG8gdXNlICJUaW1lcyBOZXcgUm9tYW4iIGluIHBs
YWNlIG9mICJUaW1lcyIuCi0gICAgICAgIC8vICJUaW1lcyBSTyIgaXMgYSBjb21tb24gZm9udCB3
aG9zZSBmYW1pbHkgbmFtZSBpcyAiVGltZXMiLgotICAgICAgICAvLyBJdCBvdmVycmlkZXMgdGhl
IG5vcm1hbCAiVGltZXMiIGZhbWlseSBmb250LgotICAgICAgICAvLyBJdCBhbHNvIGFwcGVhcnMg
dG8gaGF2ZSBhIGNvcnJ1cHQgcmVndWxhciB2YXJpYW50LgotICAgICAgICBOU1N0cmluZyAqZmFs
bGJhY2tGb250RmFtaWx5OwotICAgICAgICBpZiAoW1ttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBm
YW1pbHlOYW1lXSBpc0VxdWFsOkAiVGltZXMiXSkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9udEZh
bWlseSA9IEAiVGltZXMgTmV3IFJvbWFuIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFs
bGJhY2tGb250RmFtaWx5ID0gd2ViRmFsbGJhY2tGb250RmFtaWx5KCk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBUcnkgc2V0dGluZyB1cCB0aGUgYWx0ZXJuYXRlIGZvbnQuCi0gICAgICAgIC8vIFRo
aXMgaXMgYSBsYXN0IGRpdGNoIGVmZm9ydCB0byB1c2UgYSBzdWJzdGl0dXRlIGZvbnQgd2hlbiBz
b21ldGhpbmcgaGFzIGdvbmUgd3JvbmcuCi0jaWYgIUVSUk9SX0RJU0FCTEVECi0gICAgICAgIFJl
dGFpblB0cjxOU0ZvbnQ+IGluaXRpYWxGb250ID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7Ci0j
ZW5kaWYKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKLSAgICAgICAgICAgIG1f
cGxhdGZvcm1EYXRhLnNldE5TRm9udChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
IGNvbnZlcnRGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OmZhbGxiYWNrRm9u
dEZhbWlseV0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXRO
U0ZvbnQoW05TRm9udCBmb250V2l0aE5hbWU6ZmFsbGJhY2tGb250RmFtaWx5IHNpemU6bV9wbGF0
Zm9ybURhdGEuc2l6ZSgpXSk7Ci0gICAgICAgIGlmICghcGxhdGZvcm1EYXRhKCkuY2dGb250KCkp
IHsKLSAgICAgICAgICAgIGlmIChbZmFsbGJhY2tGb250RmFtaWx5IGlzRXF1YWw6QCJUaW1lcyBO
ZXcgUm9tYW4iXSkgewotICAgICAgICAgICAgICAgIC8vIE9LLCBjb3VsZG4ndCBzZXR1cCBUaW1l
cyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJuYXRlIHRvIFRpbWVzLCBmYWxsYmFjawotICAgICAgICAg
ICAgICAgIC8vIG9uIHRoZSBzeXN0ZW0gZm9udC4gIElmIHRoaXMgZmFpbHMgd2UgaGF2ZSBubyBh
bHRlcm5hdGl2ZSBsZWZ0LgotICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9u
dChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZv
cm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNrRm9udEZhbWlseSgpXSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBXZSB0cmllZCwgVGltZXMsIFRpbWVzIE5ldyBSb21hbiwgYW5kIHRoZSBzeXN0
ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCi0gICAgICAgICAgICAgICAgICAg
IExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5pdGlhbEZv
bnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBmYWlsZWRTZXR1cCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBX
ZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBX
ZSBoYXZlIHRvIGdpdmUgdXAuCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUgdG8g
aW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gUmVwb3J0IHRoZSBwcm9ibGVtLgotICAgICAgICBMT0dfRVJST1IoIkNvcnJ1cHQg
Zm9udCBkZXRlY3RlZCwgdXNpbmcgJUAgaW4gcGxhY2Ugb2YgJUAuIiwKLSAgICAgICAgICAgIFtt
X3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXSwgW2luaXRpYWxGb250LmdldCgpIGZh
bWlseU5hbWVdKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdHJ5IHRvIHNl
dCB1cCB1c2luZyB0aGUgc3lzdGVtIGZvbnQuCi0gICAgLy8gVGhpcyBpcyBwcm9iYWJseSBiZWNh
dXNlIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9tYW4gYXJlIGJvdGggdW5hdmFpbGFibGUuCi0gICAg
aWYgKGZhaWxlZFNldHVwKSB7Ci0gICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChbTlNG
b250IHN5c3RlbUZvbnRPZlNpemU6W21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHBvaW50U2l6ZV1d
KTsKLSAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHVwIGZvbnQsIHVzaW5nIHN5c3Rl
bSBmb250ICVzIiwgbV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICB9Ci0KICNpZiBQTEFURk9S
TShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDExMDAKICAgICAv
LyBXb3JrIGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vMTk0MzM0OTA+CiAgICAgQ0dHbHlwaCBkdW1t
eUdseXBoc1tdID0gezAsIDB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmluZGV4IDNh
ODcwNDJiODMwZWMxNjc1YmU1YmIxMzE5MWYxMGY5ZGYwZTRlNTEuLmY4MmRkMGU2NzQyZjNkNjNk
ZWNkODc4MWJlNjljOWY5NGZmZThjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0K
QEAgLTU4LDYgKzU4LDcyIEBAIEZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkK
IHsKIH0KIAorI2lmIFVTRShBUFBLSVQpCitzdGF0aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9u
dEZhbWlseSh2b2lkKQoreworICAgIHN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFt
aWx5ID0gW1tbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6MTYuMGZdIGZhbWlseU5hbWVdIHJldGFp
bl07CisgICAgcmV0dXJuIHdlYkZhbGxiYWNrRm9udEZhbWlseTsKK30KKyNlbmRpZgorCit2b2lk
IEZvbnRQbGF0Zm9ybURhdGE6OnNldEZhbGxiYWNrQ0dGb250KCkKK3sKKyNpZiBVU0UoQVBQS0lU
KQorICAgIGJvb2wgZmFpbGVkU2V0dXAgPSBmYWxzZTsKKyAgICBpZiAoIW1fY2dGb250KSB7Cisg
ICAgICAgIC8vIEFjayEgU29tZXRoaW5nIHZlcnkgYmFkIGhhcHBlbmVkLCBsaWtlIGEgY29ycnVw
dCBmb250LgorICAgICAgICAvLyBUcnkgbG9va2luZyBmb3IgYW4gYWx0ZXJuYXRlICdiYXNlJyBm
b250IGZvciB0aGlzIHJlbmRlcmVyLgorCisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBoYWNrIHRv
IHVzZSAiVGltZXMgTmV3IFJvbWFuIiBpbiBwbGFjZSBvZiAiVGltZXMiLgorICAgICAgICAvLyAi
VGltZXMgUk8iIGlzIGEgY29tbW9uIGZvbnQgd2hvc2UgZmFtaWx5IG5hbWUgaXMgIlRpbWVzIi4K
KyAgICAgICAgLy8gSXQgb3ZlcnJpZGVzIHRoZSBub3JtYWwgIlRpbWVzIiBmYW1pbHkgZm9udC4K
KyAgICAgICAgLy8gSXQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYSBjb3JydXB0IHJlZ3VsYXIgdmFy
aWFudC4KKyAgICAgICAgTlNTdHJpbmcgKmZhbGxiYWNrRm9udEZhbWlseTsKKyAgICAgICAgaWYg
KFtbbnNGb250KCkgZmFtaWx5TmFtZV0gaXNFcXVhbDpAIlRpbWVzIl0pCisgICAgICAgICAgICBm
YWxsYmFja0ZvbnRGYW1pbHkgPSBAIlRpbWVzIE5ldyBSb21hbiI7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGZhbGxiYWNrRm9udEZhbWlseSA9IHdlYkZhbGxiYWNrRm9udEZhbWlseSgpOwor
CisgICAgICAgIC8vIFRyeSBzZXR0aW5nIHVwIHRoZSBhbHRlcm5hdGUgZm9udC4KKyAgICAgICAg
Ly8gVGhpcyBpcyBhIGxhc3QgZGl0Y2ggZWZmb3J0IHRvIHVzZSBhIHN1YnN0aXR1dGUgZm9udCB3
aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZy4KKyNpZiAhRVJST1JfRElTQUJMRUQKKyAgICAg
ICAgUmV0YWluUHRyPE5TRm9udD4gaW5pdGlhbEZvbnQgPSBuc0ZvbnQoKTsKKyNlbmRpZgorICAg
ICAgICBpZiAoZm9udCgpKQorICAgICAgICAgICAgc2V0TlNGb250KFtbTlNGb250TWFuYWdlciBz
aGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bnNGb250KCkgdG9GYW1pbHk6ZmFsbGJhY2tG
b250RmFtaWx5XSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldE5TRm9udChbTlNGb250
IGZvbnRXaXRoTmFtZTpmYWxsYmFja0ZvbnRGYW1pbHkgc2l6ZTpzaXplKCldKTsKKyAgICAgICAg
aWYgKCFjZ0ZvbnQoKSkgeworICAgICAgICAgICAgaWYgKFtmYWxsYmFja0ZvbnRGYW1pbHkgaXNF
cXVhbDpAIlRpbWVzIE5ldyBSb21hbiJdKSB7CisgICAgICAgICAgICAgICAgLy8gT0ssIGNvdWxk
bid0IHNldHVwIFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGUgdG8gVGltZXMsIGZhbGxi
YWNrCisgICAgICAgICAgICAgICAgLy8gb24gdGhlIHN5c3RlbSBmb250LiBJZiB0aGlzIGZhaWxz
IHdlIGhhdmUgbm8gYWx0ZXJuYXRpdmUgbGVmdC4KKyAgICAgICAgICAgICAgICBzZXROU0ZvbnQo
W1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDpuc0ZvbnQoKSB0
b0ZhbWlseTp3ZWJGYWxsYmFja0ZvbnRGYW1pbHkoKV0pOworICAgICAgICAgICAgICAgIGlmICgh
Y2dGb250KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgdHJpZWQsIFRpbWVzLCBUaW1l
cyBOZXcgUm9tYW4sIGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0byBnaXZl
IHVwLgorICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoInVuYWJsZSB0byBpbml0aWFsaXpl
IHdpdGggZm9udCAlQCIsIGluaXRpYWxGb250LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ZmFpbGVkU2V0dXAgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgLy8gV2UgdHJpZWQgdGhlIHJlcXVlc3RlZCBmb250IGFuZCB0
aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0byBnaXZlIHVwLgorICAgICAgICAgICAg
ICAgIExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5pdGlh
bEZvbnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGZhaWxlZFNldHVwID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlcG9ydCB0aGUgcHJvYmxlbS4KKyAg
ICAgICAgTE9HX0VSUk9SKCJDb3JydXB0IGZvbnQgZGV0ZWN0ZWQsIHVzaW5nICVAIGluIHBsYWNl
IG9mICVALiIsCisgICAgICAgICAgICBbbnNGb250KCkgZmFtaWx5TmFtZV0sIFtpbml0aWFsRm9u
dC5nZXQoKSBmYW1pbHlOYW1lXSk7CisgICAgfQorCisgICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMs
IHRyeSB0byBzZXQgdXAgdXNpbmcgdGhlIHN5c3RlbSBmb250LgorICAgIC8vIFRoaXMgaXMgcHJv
YmFibHkgYmVjYXVzZSBUaW1lcyBhbmQgVGltZXMgTmV3IFJvbWFuIGFyZSBib3RoIHVuYXZhaWxh
YmxlLgorICAgIGlmIChmYWlsZWRTZXR1cCkgeworICAgICAgICBzZXROU0ZvbnQoW05TRm9udCBz
eXN0ZW1Gb250T2ZTaXplOltuc0ZvbnQoKSBwb2ludFNpemVdXSk7CisgICAgICAgIExPR19FUlJP
UigiZmFpbGVkIHRvIHNldCB1cCBmb250LCB1c2luZyBzeXN0ZW0gZm9udCAlcyIsIGZvbnQoKSk7
CisgICAgfQorI2VuZGlmIC8vIFVTRShBUFBLSVQpCit9CisKIHZvaWQgRm9udFBsYXRmb3JtRGF0
YTo6cGxhdGZvcm1EYXRhSW5pdChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQogewogICAgIG1f
Zm9udCA9IGYubV9mb250OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDEyOGVmNTdhZDg0
MWM5OTk3YzdmMzQ2Yjc0ZTQ2OWU0MzMwY2Q0ZmYuLmM5Yjk1ZTY5YzRkZDY1MzBjOGFhZmZkZjMx
MmUwN2Y0ZTcyOTYzYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTcyLDcgKzcyLDcg
QEAgcHVibGljOgogCiAgICAgSGFyZkJ1enpGYWNlKiBoYXJmQnV6ekZhY2UoKSBjb25zdDsKIAot
ICAgIGJvb2wgaXNGaXhlZFBpdGNoKCk7CisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsK
ICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRT
aXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQogICAgIGJvb2wgc3ludGhldGljQm9s
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVU
eXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQ
bGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKaW5kZXggNGI1MTEzOTM3MWMwNDUxZDMyNjk5NWUwMzY5
OTUzOWJlODRiNzc4MS4uYjljYmZiODA3ZmUxNTk2OTc0NjRhNjI0ODlhZDBhNjRlYmM3NGEwOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCkBAIC0yNzMsNyAr
MjczLDcgQEAgSGFyZkJ1enpGYWNlKiBGb250UGxhdGZvcm1EYXRhOjpoYXJmQnV6ekZhY2UoKSBj
b25zdAogICAgIHJldHVybiBtX2hhcmZCdXp6RmFjZS5nZXQoKTsKIH0KIAotYm9vbCBGb250UGxh
dGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQorYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVk
UGl0Y2goKSBjb25zdAogewogICAgIHJldHVybiBtX2ZpeGVkV2lkdGg7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNH
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZv
cm1EYXRhQ0dXaW4uY3BwCmluZGV4IDk3NzJjOWNlZDgyMDYwMGEzYWE1NmRlZDRlYjJjMWUzOGJh
ZGE4ZDEuLjkxOTY4NmNhNDg3MjFmYmMxYzM0NGUxNTJhODdmN2RjMTJhYzhlMGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRh
Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCkBAIC0xMTMsNiArMTEzLDggQEAgdm9pZCBGb250UGxhdGZv
cm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMs
IFdDSEFSKgogICAgIExPR0ZPTlQgbG9nZm9udDsKICAgICBHZXRPYmplY3QoZm9udCwgc2l6ZW9m
KGxvZ2ZvbnQpLCAmbG9nZm9udCk7CiAgICAgbV9jZ0ZvbnQgPSBhZG9wdENGKENHRm9udENyZWF0
ZVdpdGhQbGF0Zm9ybUZvbnQoJmxvZ2ZvbnQpKTsKKyAgICBpZiAoIW1fdXNlR0RJKQorICAgICAg
ICBtX2lzU3lzdGVtRm9udCA9ICF3Y3NjbXAoZmFjZU5hbWUsIEwiTHVjaWRhIEdyYW5kZSIpOwog
fQogCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4g
aGZvbnQsIENHRm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1
ZSwgYm9vbCB1c2VHREkpCkBAIC0xNTUsNCArMTU3LDggQEAgYm9vbCBGb250UGxhdGZvcm1EYXRh
OjpwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiAg
ICAgICAgICYmIG1fdXNlR0RJID09IG90aGVyLm1fdXNlR0RJOwogfQogCit2b2lkIEZvbnRQbGF0
Zm9ybURhdGE6OnNldEZhbGxiYWNrQ0dGb250KCkKK3sKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3Jt
RGF0YUNhaXJvV2luLmNwcAppbmRleCA4OWZjMjZmODA3ZWQ3ZTY5ZWEyMjVjMDE5MGE3Yzc2N2Jk
NjcyNjZmLi5jOTFkYjFiMGMwY2VhMmQyZTFmNDk5YzIxZjlmZjQyNWI1MmQ1NTExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0
YUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcApAQCAtNTQsNiArNTQsOSBAQCB2b2lkIEZvbnRQ
bGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERD
IGhkYywgV0NIQVIqCiAKICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVh
dGUoZm9udEZhY2UsICZzaXplTWF0cml4LCAmY3RtLCBmb250T3B0aW9ucyk7CiAgICAgY2Fpcm9f
Zm9udF9mYWNlX2Rlc3Ryb3koZm9udEZhY2UpOworCisgICAgaWYgKCFtX3VzZUdESSAmJiBtX3Np
emUpCisgICAgICAgIG1faXNTeXN0ZW1Gb250ID0gIXdjc2NtcChmYWNlTmFtZSwgTCJMdWNpZGEg
R3JhbmRlIik7CiB9CiAKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2Jq
ZWN0PEhGT05UPiBmb250LCBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCmluZGV4IGZh
NTk1ZTVlMTMwOTgyN2RlZjZiYmE1ZWViZjJkYjA4MGMyYWI3NTIuLmQ0MDhmYTdhZmYzOWNmYjgy
OGQ4NDA3YTA4YjI1YjhkNjliNzRiYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAKQEAgLTg2
LDcgKzg2LDYgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgICAgICBpbnQgZmFjZUxl
bmd0aCA9IEdldFRleHRGYWNlKGRjLCAwLCAwKTsKICAgICAgICAgVmVjdG9yPFdDSEFSPiBmYWNl
TmFtZShmYWNlTGVuZ3RoKTsKICAgICAgICAgR2V0VGV4dEZhY2UoZGMsIGZhY2VMZW5ndGgsIGZh
Y2VOYW1lLmRhdGEoKSk7Ci0gICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldElzU3lzdGVtRm9udCgh
d2NzY21wKGZhY2VOYW1lLmRhdGEoKSwgTCJMdWNpZGEgR3JhbmRlIikpOwogICAgICAgICBTZWxl
Y3RPYmplY3QoZGMsIG9sZEZvbnQpOwogCiAgICAgICAgIGZBc2NlbnQgPSBhc2NlbnRDb25zaWRl
cmluZ01hY0FzY2VudEhhY2soZmFjZU5hbWUuZGF0YSgpLCBmQXNjZW50LCBmRGVzY2VudCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDYWlyb1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
U2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKaW5kZXggZTAyN2ZmNTZlYmVkMzIwOWUxYjM1OGU5
YjQ3ODQ0NjU1MjM2NTJlYi4uZjc5NWE1ZjE3N2MyMzRlNjNkNzk5ZTFiY2M2MzQ1ZmQyODNiMWQy
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBs
ZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcApAQCAtNDYsNyArNDYsNiBAQCB2b2lk
IEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0
Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKICAgICBtX3NjcmlwdENhY2hl
ID0gMDsKICAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsKLSAgICBtX3BsYXRmb3JtRGF0
YS5zZXRJc1N5c3RlbUZvbnQoZmFsc2UpOwogCiAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdE
SSgpKQogICAgICAgIHJldHVybiBpbml0R0RJRm9udCgpOwpAQCAtNTUsNyArNTQsNiBAQCB2b2lk
IEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAgICAgICAgIG1fZm9udE1ldHJpY3MucmVzZXQoKTsKICAg
ICAgICAgbV9hdmdDaGFyV2lkdGggPSAwOwogICAgICAgICBtX21heENoYXJXaWR0aCA9IDA7Ci0g
ICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldElzU3lzdGVtRm9udChmYWxzZSk7CiAgICAgICAgIG1f
c2NyaXB0Q2FjaGUgPSAwOwogICAgICAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsKICAg
ICAgICAgcmV0dXJuOwpAQCAtODcsMTEgKzg1LDYgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQo
KQogICAgIH0KICAgICBmbG9hdCB4SGVpZ2h0ID0gYXNjZW50ICogMC41NmY7IC8vIEJlc3QgZ3Vl
c3MgZm9yIHhIZWlnaHQgZm9yIG5vbi1UcnVldHlwZSBmb250cy4KIAotICAgIGludCBmYWNlTGVu
Z3RoID0gOjpHZXRUZXh0RmFjZShkYywgMCwgMCk7Ci0gICAgVmVjdG9yPFdDSEFSPiBmYWNlTmFt
ZShmYWNlTGVuZ3RoKTsKLSAgICA6OkdldFRleHRGYWNlKGRjLCBmYWNlTGVuZ3RoLCBmYWNlTmFt
ZS5kYXRhKCkpOwotICAgIG1fcGxhdGZvcm1EYXRhLnNldElzU3lzdGVtRm9udCghd2NzY21wKGZh
Y2VOYW1lLmRhdGEoKSwgTCJMdWNpZGEgR3JhbmRlIikpOwotCiAgICAgbV9mb250TWV0cmljcy5z
ZXRBc2NlbnQoYXNjZW50KTsKICAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7
CiAgICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276934</attachid>
            <date>2016-04-21 09:05:23 -0700</date>
            <delta_ts>2016-04-22 12:24:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156822-20160421090545.patch</filename>
            <type>text/plain</type>
            <size>17607</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5ODAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjA0NGJlNTY3NDAyOGRi
MTE2YzgzM2FkZWIwMGJiZjdlNDBkMDI2Yi4uOTUwYjc2MjMzZTY2YjQzMzMzY2U1Y2I3NDNjZGNj
MzNiNTIyYzIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE2LTA0LTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jhc2ggdW5kZXIgRm9udENh
Y2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2ODIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNTM3
Mzk3MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
biBzb21lIHJhcmUgY2FzZXMsIHRoZSBGb250IGNvbnN0cnVjdG9yIHdvdWxkIG11dGF0ZSB0aGUg
Rm9udFBsYXRmb3JtRGF0YQorICAgICAgICB0aGF0IGlzIGJlaW5nIHBhc3NlZCBpbi4gVGhpcyBp
cyBhbiBpc3N1ZSBiZWNhdXNlIGJlY2F1c2Ugb3VyIEZvbnRDYWNoZQorICAgICAgICB1c2VzIHRo
ZSBGb250UGxhdGZvcm1EYXRhIGFzIGtleSBmb3IgdGhlIGNhY2hlZCBmb250cy4gVGhpcyBjb3Vs
ZCBsZWFkIHRvCisgICAgICAgIGNyYXNoZXMgYmVjYXVzZSB0aGUgV1RGTW92ZSgpIGluIEZvbnRD
YWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCkgd291bGQKKyAgICAgICAgbnVsbGlmeSB2YWx1
ZXMgaW4gb3VyIEhhc2hNYXAgYnV0IHdlIHdvdWxkIHRoZW4gZmFpbCB0byByZW1vdmUgdGhlbSBm
cm9tCisgICAgICAgIHRoZSBIYXNoTWFwIChiZWNhdXNlIHRoZSBrZXkgZGlkIG5vdCBtYXRjaCku
IFdlIHdvdWxkIHRoZW4gcmVmZXJlbmNlIHRoZQorICAgICAgICBudWxsIGZvbnQgd2hlbiBsb29w
aW5nIGFnYWluIHdoZW4gZG9pbmcgZm9udC0+aGFzT25lUmVmKCkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtYXJrcyBGb250OjptX3BsYXRmb3JtRGF0YSBtZW1iZXIgYXMgY29uc3QgdG8gYXZvaWQg
c3VjaCBpc3N1ZXMKKyAgICAgICAgaW4gdGhlIGZ1dHVyZSBhbmQgbW92ZXMgdGhlIGNvZGUgYWx0
ZXJpbmcgdGhlIEZvbnRQbGF0Zm9ybURhdGEgZnJvbSB0aGUKKyAgICAgICAgRm9udCBjb25zdHJ1
Y3RvciBpbnRvIHRoZSBGb250UGxhdGZvcm1EYXRhIGNvbnN0cnVjdG9yLiBUaGUgcHVycG9zZSBv
ZgorICAgICAgICB0aGF0IGNvZGUgd2FzIHRvIGluaXRpYWxpemUgRm9udFBsYXRmb3JtRGF0YTo6
bV9jZ0ZvbnQgaW4gY2FzZSB0aGUgQ0dGb250CisgICAgICAgIHBhc3NlZCBpbiB0aGUgY29uc3Ry
dWN0b3Igd2FzIG51bGwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6d2ViRmFsbGJhY2tGb250RmFtaWx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtSW5pdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6d2ViRmFsbGJhY2tGb250RmFtaWx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZhbGxiYWNrQ0dGb250KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZhbGxiYWNrQ0dGb250KToKKwogMjAxNi0w
NC0yMCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEdl
dCByaWQgb2YgYSBjb3VwbGUgb2YgdXNlcyBvZiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2lu
Z2xldG9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCA0ZTky
ZjU5YjU3NDhjNmFmM2I2MDhiNTE3YjlkNDA4YzgzYzU4ZWRmLi43YjhiNTQwZTIwYTJmM2E2N2Fi
MjJkZWUxNGE2ZTAwNzdiZTcwMDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCkBAIC0yMjksNyArMjI5LDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX21heENoYXJX
aWR0aDsKICAgICBmbG9hdCBtX2F2Z0NoYXJXaWR0aDsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGEg
bV9wbGF0Zm9ybURhdGE7CisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0
YTsKIAogICAgIG11dGFibGUgUmVmUHRyPEdseXBoUGFnZT4gbV9nbHlwaFBhZ2VaZXJvOwogICAg
IG11dGFibGUgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPEdseXBoUGFnZT4+IG1fZ2x5cGhQYWdl
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmlu
ZGV4IDQ3NDc5ZTc1ZTEzOWI5YWM3NWRkMzBhYzhhM2NlOGI0YTI3NjgzMWYuLjlmYmM2Yzc4Y2E5
ZDk3OWQwZWZlNGFmMmI5MmVjMzAyYTljYTY0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtMzk2LDYgKzM5Niw4IEBAIFJlZjxGb250
PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhKQogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogCisg
ICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnBsYXRmb3JtRGF0YSgpID09IHBs
YXRmb3JtRGF0YSk7CisKICAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9
CiAKQEAgLTQzNSw4ICs0MzcsMTAgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250
RGF0YSh1bnNpZ25lZCBwdXJnZUNvdW50KQogICAgICAgICAvLyBGb250cyBtYXkgcmVmIG90aGVy
IGZvbnRzIHNvIHdlIGxvb3AgdW50aWwgdGhlcmUgYXJlIG5vIGNoYW5nZXMuCiAgICAgICAgIGlm
IChmb250c1RvRGVsZXRlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBm
b3IgKGF1dG8mIGZvbnQgOiBmb250c1RvRGVsZXRlKQotICAgICAgICAgICAgY2FjaGVkRm9udHMo
KS5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOworICAgICAgICBmb3IgKGF1dG8mIGZvbnQg
OiBmb250c1RvRGVsZXRlKSB7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBjYWNoZWRGb250
cygpLnJlbW92ZShmb250LT5wbGF0Zm9ybURhdGEoKSk7CisgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgICAgICB9CiAgICAgfTsKIAogICAgIFZlY3RvcjxG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtleXNUb1JlbW92ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggYWRj
NWM3MWU3NzM4MzkwZDQzMmJkN2IwNDUzYWY2MTdjMjE5M2JkOC4uNzY1ZmVkMTViYzc0Y2YyODcx
ZGRkYjg4YTdhY2E2ZDczNTU3MjIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTU4LDYgKzU4LDggQEAgRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYgY2dGb250LCBmbG9hdCBz
aXplLCBib29sIHN5bnRoZXRpY0IKICAgICA6IEZvbnRQbGF0Zm9ybURhdGEoc2l6ZSwgc3ludGhl
dGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCwgdGV4
dFJlbmRlcmluZ01vZGUpCiB7CiAgICAgbV9jZ0ZvbnQgPSBjZ0ZvbnQ7CisgICAgaWYgKCFtX2Nn
Rm9udCkKKyAgICAgICAgc2V0RmFsbGJhY2tDR0ZvbnQoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKaW5k
ZXggY2MwMzMyZjYzYWZhZDQ2YzFhMzhmODYwYzBjODcyNGZjNGM0YTU3OS4uNGUzZGM0NGMxNmFl
YTlhMzk2ODk3MGI0Y2VjN2JhOGVjMTZiODdiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMjE2LDYgKzIxNiw5IEBA
IHByaXZhdGU6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgcGxhdGZvcm1EYXRhSW5pdChI
Rk9OVCwgZmxvYXQgc2l6ZSwgSERDLCBXQ0hBUiogZmFjZU5hbWUpOwogI2VuZGlmCisjaWYgVVNF
KENHKQorICAgIHZvaWQgc2V0RmFsbGJhY2tDR0ZvbnQoKTsKKyNlbmRpZgogCiBwdWJsaWM6CiAg
ICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCmluZGV4IDY0ODg0MWFjNDk1
MWFmZmIwMWFlNzAyYmNkY2EzMTE2NWNmMTRiYTIuLjFjYjI3NjQ4MzM0NDk2MzRhZTI2N2FlNjI2
OWE0MzM4ZTU1YTQ1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q29jb2EubW0KQEAgLTc5LDEzICs3OSw3IEBAIHN0YXRpYyBib29sIGZv
bnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgY3RGb250KQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotI2lmIFVTRShBUFBLSVQpCi1zdGF0aWMgTlNTdHJpbmcgKndlYkZhbGxiYWNrRm9udEZh
bWlseSh2b2lkKQotewotICAgIHN0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tGb250RmFtaWx5
ID0gW1tbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6MTYuMGZdIGZhbWlseU5hbWVdIHJldGFpbl07
Ci0gICAgcmV0dXJuIHdlYkZhbGxiYWNrRm9udEZhbWlseTsKLX0KLSNlbHNlCisjaWYgIVVTRShB
UFBLSVQpCiBib29sIGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoQ0ZTdHJpbmdS
ZWYgZm9udEZhbWlseU5hbWUpCiB7CiAgICAgaWYgKCFmb250RmFtaWx5TmFtZSkKQEAgLTEwNCw1
OSArOTgsNiBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAjaWYgVVNFKEFQUEtJVCkKICAg
ICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQg
PyAxLjBmIDogMC5mOwogCi0gICAgYm9vbCBmYWlsZWRTZXR1cCA9IGZhbHNlOwotICAgIGlmICgh
cGxhdGZvcm1EYXRhKCkuY2dGb250KCkpIHsKLSAgICAgICAgLy8gQWNrISBTb21ldGhpbmcgdmVy
eSBiYWQgaGFwcGVuZWQsIGxpa2UgYSBjb3JydXB0IGZvbnQuCi0gICAgICAgIC8vIFRyeSBsb29r
aW5nIGZvciBhbiBhbHRlcm5hdGUgJ2Jhc2UnIGZvbnQgZm9yIHRoaXMgcmVuZGVyZXIuCi0KLSAg
ICAgICAgLy8gU3BlY2lhbCBjYXNlIGhhY2sgdG8gdXNlICJUaW1lcyBOZXcgUm9tYW4iIGluIHBs
YWNlIG9mICJUaW1lcyIuCi0gICAgICAgIC8vICJUaW1lcyBSTyIgaXMgYSBjb21tb24gZm9udCB3
aG9zZSBmYW1pbHkgbmFtZSBpcyAiVGltZXMiLgotICAgICAgICAvLyBJdCBvdmVycmlkZXMgdGhl
IG5vcm1hbCAiVGltZXMiIGZhbWlseSBmb250LgotICAgICAgICAvLyBJdCBhbHNvIGFwcGVhcnMg
dG8gaGF2ZSBhIGNvcnJ1cHQgcmVndWxhciB2YXJpYW50LgotICAgICAgICBOU1N0cmluZyAqZmFs
bGJhY2tGb250RmFtaWx5OwotICAgICAgICBpZiAoW1ttX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBm
YW1pbHlOYW1lXSBpc0VxdWFsOkAiVGltZXMiXSkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9udEZh
bWlseSA9IEAiVGltZXMgTmV3IFJvbWFuIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFs
bGJhY2tGb250RmFtaWx5ID0gd2ViRmFsbGJhY2tGb250RmFtaWx5KCk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBUcnkgc2V0dGluZyB1cCB0aGUgYWx0ZXJuYXRlIGZvbnQuCi0gICAgICAgIC8vIFRo
aXMgaXMgYSBsYXN0IGRpdGNoIGVmZm9ydCB0byB1c2UgYSBzdWJzdGl0dXRlIGZvbnQgd2hlbiBz
b21ldGhpbmcgaGFzIGdvbmUgd3JvbmcuCi0jaWYgIUVSUk9SX0RJU0FCTEVECi0gICAgICAgIFJl
dGFpblB0cjxOU0ZvbnQ+IGluaXRpYWxGb250ID0gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7Ci0j
ZW5kaWYKLSAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKLSAgICAgICAgICAgIG1f
cGxhdGZvcm1EYXRhLnNldE5TRm9udChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
IGNvbnZlcnRGb250Om1fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OmZhbGxiYWNrRm9u
dEZhbWlseV0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXRO
U0ZvbnQoW05TRm9udCBmb250V2l0aE5hbWU6ZmFsbGJhY2tGb250RmFtaWx5IHNpemU6bV9wbGF0
Zm9ybURhdGEuc2l6ZSgpXSk7Ci0gICAgICAgIGlmICghcGxhdGZvcm1EYXRhKCkuY2dGb250KCkp
IHsKLSAgICAgICAgICAgIGlmIChbZmFsbGJhY2tGb250RmFtaWx5IGlzRXF1YWw6QCJUaW1lcyBO
ZXcgUm9tYW4iXSkgewotICAgICAgICAgICAgICAgIC8vIE9LLCBjb3VsZG4ndCBzZXR1cCBUaW1l
cyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJuYXRlIHRvIFRpbWVzLCBmYWxsYmFjawotICAgICAgICAg
ICAgICAgIC8vIG9uIHRoZSBzeXN0ZW0gZm9udC4gIElmIHRoaXMgZmFpbHMgd2UgaGF2ZSBubyBh
bHRlcm5hdGl2ZSBsZWZ0LgotICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9u
dChbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250Om1fcGxhdGZv
cm1EYXRhLm5zRm9udCgpIHRvRmFtaWx5OndlYkZhbGxiYWNrRm9udEZhbWlseSgpXSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBXZSB0cmllZCwgVGltZXMsIFRpbWVzIE5ldyBSb21hbiwgYW5kIHRoZSBzeXN0
ZW0gZm9udC4gTm8gam95LiBXZSBoYXZlIHRvIGdpdmUgdXAuCi0gICAgICAgICAgICAgICAgICAg
IExPR19FUlJPUigidW5hYmxlIHRvIGluaXRpYWxpemUgd2l0aCBmb250ICVAIiwgaW5pdGlhbEZv
bnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBmYWlsZWRTZXR1cCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBX
ZSB0cmllZCB0aGUgcmVxdWVzdGVkIGZvbnQgYW5kIHRoZSBzeXN0ZW0gZm9udC4gTm8gam95LiBX
ZSBoYXZlIHRvIGdpdmUgdXAuCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJ1bmFibGUgdG8g
aW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9udC5nZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgZmFpbGVkU2V0dXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gUmVwb3J0IHRoZSBwcm9ibGVtLgotICAgICAgICBMT0dfRVJST1IoIkNvcnJ1cHQg
Zm9udCBkZXRlY3RlZCwgdXNpbmcgJUAgaW4gcGxhY2Ugb2YgJUAuIiwKLSAgICAgICAgICAgIFtt
X3BsYXRmb3JtRGF0YS5uc0ZvbnQoKSBmYW1pbHlOYW1lXSwgW2luaXRpYWxGb250LmdldCgpIGZh
bWlseU5hbWVdKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdHJ5IHRvIHNl
dCB1cCB1c2luZyB0aGUgc3lzdGVtIGZvbnQuCi0gICAgLy8gVGhpcyBpcyBwcm9iYWJseSBiZWNh
dXNlIFRpbWVzIGFuZCBUaW1lcyBOZXcgUm9tYW4gYXJlIGJvdGggdW5hdmFpbGFibGUuCi0gICAg
aWYgKGZhaWxlZFNldHVwKSB7Ci0gICAgICAgIG1fcGxhdGZvcm1EYXRhLnNldE5TRm9udChbTlNG
b250IHN5c3RlbUZvbnRPZlNpemU6W21fcGxhdGZvcm1EYXRhLm5zRm9udCgpIHBvaW50U2l6ZV1d
KTsKLSAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHVwIGZvbnQsIHVzaW5nIHN5c3Rl
bSBmb250ICVzIiwgbV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICB9Ci0KICNpZiBQTEFURk9S
TShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDExMDAKICAgICAv
LyBXb3JrIGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vMTk0MzM0OTA+CiAgICAgQ0dHbHlwaCBkdW1t
eUdseXBoc1tdID0gezAsIDB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmluZGV4IDNh
ODcwNDJiODMwZWMxNjc1YmU1YmIxMzE5MWYxMGY5ZGYwZTRlNTEuLjI4NTIwNjA4ZmZlMzkyMzZh
YjVmMzhkZDNmYTUzODkyY2MyOTUwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0K
QEAgLTU4LDYgKzU4LDc3IEBAIEZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkK
IHsKIH0KIAorI2lmIFVTRShBUFBLSVQpCisKK3N0YXRpYyBOU1N0cmluZyAqd2ViRmFsbGJhY2tG
b250RmFtaWx5KHZvaWQpCit7CisgICAgc3RhdGljIE5TU3RyaW5nICp3ZWJGYWxsYmFja0ZvbnRG
YW1pbHkgPSBbW1tOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxNi4wZl0gZmFtaWx5TmFtZV0gcmV0
YWluXTsKKyAgICByZXR1cm4gd2ViRmFsbGJhY2tGb250RmFtaWx5OworfQorCit2b2lkIEZvbnRQ
bGF0Zm9ybURhdGE6OnNldEZhbGxiYWNrQ0dGb250KCkKK3sKKyAgICBpZiAoY2dGb250KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIEFjayEgU29tZXRoaW5nIHZlcnkgYmFkIGhhcHBlbmVk
LCBsaWtlIGEgY29ycnVwdCBmb250LgorICAgIC8vIFRyeSBsb29raW5nIGZvciBhbiBhbHRlcm5h
dGUgJ2Jhc2UnIGZvbnQgZm9yIHRoaXMgcmVuZGVyZXIuCisKKyAgICAvLyBTcGVjaWFsIGNhc2Ug
aGFjayB0byB1c2UgIlRpbWVzIE5ldyBSb21hbiIgaW4gcGxhY2Ugb2YgIlRpbWVzIi4KKyAgICAv
LyAiVGltZXMgUk8iIGlzIGEgY29tbW9uIGZvbnQgd2hvc2UgZmFtaWx5IG5hbWUgaXMgIlRpbWVz
Ii4KKyAgICAvLyBJdCBvdmVycmlkZXMgdGhlIG5vcm1hbCAiVGltZXMiIGZhbWlseSBmb250Lgor
ICAgIC8vIEl0IGFsc28gYXBwZWFycyB0byBoYXZlIGEgY29ycnVwdCByZWd1bGFyIHZhcmlhbnQu
CisgICAgTlNTdHJpbmcgKmZhbGxiYWNrRm9udEZhbWlseTsKKyAgICBpZiAoW1tuc0ZvbnQoKSBm
YW1pbHlOYW1lXSBpc0VxdWFsOkAiVGltZXMiXSkKKyAgICAgICAgZmFsbGJhY2tGb250RmFtaWx5
ID0gQCJUaW1lcyBOZXcgUm9tYW4iOworICAgIGVsc2UKKyAgICAgICAgZmFsbGJhY2tGb250RmFt
aWx5ID0gd2ViRmFsbGJhY2tGb250RmFtaWx5KCk7CisKKyAgICAvLyBUcnkgc2V0dGluZyB1cCB0
aGUgYWx0ZXJuYXRlIGZvbnQuCisgICAgLy8gVGhpcyBpcyBhIGxhc3QgZGl0Y2ggZWZmb3J0IHRv
IHVzZSBhIHN1YnN0aXR1dGUgZm9udCB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZy4KKyNp
ZiAhRVJST1JfRElTQUJMRUQKKyAgICBSZXRhaW5QdHI8TlNGb250PiBpbml0aWFsRm9udCA9IG5z
Rm9udCgpOworI2VuZGlmCisgICAgaWYgKGZvbnQoKSkKKyAgICAgICAgc2V0TlNGb250KFtbTlNG
b250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bnNGb250KCkgdG9GYW1p
bHk6ZmFsbGJhY2tGb250RmFtaWx5XSk7CisgICAgZWxzZQorICAgICAgICBzZXROU0ZvbnQoW05T
Rm9udCBmb250V2l0aE5hbWU6ZmFsbGJhY2tGb250RmFtaWx5IHNpemU6c2l6ZSgpXSk7CisKKyAg
ICBpZiAoY2dGb250KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChbZmFsbGJhY2tGb250
RmFtaWx5IGlzRXF1YWw6QCJUaW1lcyBOZXcgUm9tYW4iXSkgeworICAgICAgICAvLyBPSywgY291
bGRuJ3Qgc2V0dXAgVGltZXMgTmV3IFJvbWFuIGFzIGFuIGFsdGVybmF0ZSB0byBUaW1lcywgZmFs
bGJhY2sKKyAgICAgICAgLy8gb24gdGhlIHN5c3RlbSBmb250LiBJZiB0aGlzIGZhaWxzIHdlIGhh
dmUgbm8gYWx0ZXJuYXRpdmUgbGVmdC4KKyAgICAgICAgc2V0TlNGb250KFtbTlNGb250TWFuYWdl
ciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bnNGb250KCkgdG9GYW1pbHk6d2ViRmFs
bGJhY2tGb250RmFtaWx5KCldKTsKKyAgICAgICAgaWYgKGNnRm9udCgpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIC8vIFdlIHRyaWVkLCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBh
bmQgdGhlIHN5c3RlbSBmb250LiBObyBqb3kuIFdlIGhhdmUgdG8gZ2l2ZSB1cC4KKyAgICAgICAg
TE9HX0VSUk9SKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIGZvbnQgJUAiLCBpbml0aWFsRm9u
dC5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgdHJpZWQgdGhlIHJlcXVlc3Rl
ZCBmb250IGFuZCB0aGUgc3lzdGVtIGZvbnQuIE5vIGpveS4gV2UgaGF2ZSB0byBnaXZlIHVwLgor
ICAgICAgICBMT0dfRVJST1IoInVuYWJsZSB0byBpbml0aWFsaXplIHdpdGggZm9udCAlQCIsIGlu
aXRpYWxGb250LmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBSZXBvcnQgdGhlIHByb2JsZW0uCisg
ICAgTE9HX0VSUk9SKCJDb3JydXB0IGZvbnQgZGV0ZWN0ZWQsIHVzaW5nICVAIGluIHBsYWNlIG9m
ICVALiIsIFtuc0ZvbnQoKSBmYW1pbHlOYW1lXSwgW2luaXRpYWxGb250LmdldCgpIGZhbWlseU5h
bWVdKTsKKworICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gc2V0IHVwIHVzaW5nIHRo
ZSBzeXN0ZW0gZm9udC4KKyAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgVGltZXMgYW5k
IFRpbWVzIE5ldyBSb21hbiBhcmUgYm90aCB1bmF2YWlsYWJsZS4KKyAgICBBU1NFUlQoIWNnRm9u
dCgpKTsKKyAgICBzZXROU0ZvbnQoW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltuc0ZvbnQoKSBw
b2ludFNpemVdXSk7CisgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHVwIGZvbnQsIHVzaW5n
IHN5c3RlbSBmb250ICVzIiwgZm9udCgpKTsKK30KKworI2Vsc2UKKwordm9pZCBGb250UGxhdGZv
cm1EYXRhOjpzZXRGYWxsYmFja0NHRm9udCgpCit7Cit9CisKKyNlbmRpZgorCiB2b2lkIEZvbnRQ
bGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZikK
IHsKICAgICBtX2ZvbnQgPSBmLm1fZm9udDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCAx
MjhlZjU3YWQ4NDFjOTk5N2M3ZjM0NmI3NGU0NjllNDMzMGNkNGZmLi5jOWI5NWU2OWM0ZGQ2NTMw
YzhhYWZmZGYzMTJlMDdmNGU3Mjk2M2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC03
Miw3ICs3Miw3IEBAIHB1YmxpYzoKIAogICAgIEhhcmZCdXp6RmFjZSogaGFyZkJ1enpGYWNlKCkg
Y29uc3Q7CiAKLSAgICBib29sIGlzRml4ZWRQaXRjaCgpOworICAgIGJvb2wgaXNGaXhlZFBpdGNo
KCkgY29uc3Q7CiAgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAg
IHZvaWQgc2V0U2l6ZShmbG9hdCBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KICAgICBib29sIHN5
bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9y
bURhdGFGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCmluZGV4IDRiNTExMzkzNzFjMDQ1MWQz
MjY5OTVlMDM2OTk1MzliZTg0Yjc3ODEuLmI5Y2JmYjgwN2ZlMTU5Njk3NDY0YTYyNDg5YWQwYTY0
ZWJjNzRhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zy
ZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcApA
QCAtMjczLDcgKzI3Myw3IEBAIEhhcmZCdXp6RmFjZSogRm9udFBsYXRmb3JtRGF0YTo6aGFyZkJ1
enpGYWNlKCkgY29uc3QKICAgICByZXR1cm4gbV9oYXJmQnV6ekZhY2UuZ2V0KCk7CiB9CiAKLWJv
b2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKK2Jvb2wgRm9udFBsYXRmb3JtRGF0
YTo6aXNGaXhlZFBpdGNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9maXhlZFdpZHRoOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0
Zm9ybURhdGFDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAppbmRleCA5NzcyYzljZWQ4MjA2MDBhM2FhNTZkZWQ0
ZWIyYzFlMzhiYWRhOGQxLi45MTk2ODZjYTQ4NzIxZmJjMWMzNDRlMTUyYTg3ZjdkYzEyYWM4ZTBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcApAQCAtMTEzLDYgKzExMyw4IEBAIHZvaWQg
Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXpl
LCBIREMgaGRjLCBXQ0hBUioKICAgICBMT0dGT05UIGxvZ2ZvbnQ7CiAgICAgR2V0T2JqZWN0KGZv
bnQsIHNpemVvZihsb2dmb250KSwgJmxvZ2ZvbnQpOwogICAgIG1fY2dGb250ID0gYWRvcHRDRihD
R0ZvbnRDcmVhdGVXaXRoUGxhdGZvcm1Gb250KCZsb2dmb250KSk7CisgICAgaWYgKCFtX3VzZUdE
SSkKKyAgICAgICAgbV9pc1N5c3RlbUZvbnQgPSAhd2NzY21wKGZhY2VOYW1lLCBMIkx1Y2lkYSBH
cmFuZGUiKTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmpl
Y3Q8SEZPTlQ+IGhmb250LCBDR0ZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQpAQCAtMTU1LDQgKzE1Nyw4IEBAIGJvb2wgRm9udFBs
YXRmb3JtRGF0YTo6cGxhdGZvcm1Jc0VxdWFsKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVy
KSBjb25zdAogICAgICAgICAmJiBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESTsKIH0KIAordm9p
ZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGYWxsYmFja0NHRm9udCgpCit7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKaW5kZXggODlmYzI2ZjgwN2VkN2U2OWVhMjI1YzAx
OTBhN2M3NjdiZDY3MjY2Zi4uYzkxZGIxYjBjMGNlYTJkMmUxZjQ5OWMyMWY5ZmY0MjViNTJkNTUx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQ
bGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAKQEAgLTU0LDYgKzU0LDkgQEAg
dm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0
IHNpemUsIEhEQyBoZGMsIFdDSEFSKgogCiAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVk
X2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmc2l6ZU1hdHJpeCwgJmN0bSwgZm9udE9wdGlvbnMpOwog
ICAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KGZvbnRGYWNlKTsKKworICAgIGlmICghbV91c2VH
REkgJiYgbV9zaXplKQorICAgICAgICBtX2lzU3lzdGVtRm9udCA9ICF3Y3NjbXAoZmFjZU5hbWUs
IEwiTHVjaWRhIEdyYW5kZSIpOwogfQogCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKEdESU9iamVjdDxIRk9OVD4gZm9udCwgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlLCBm
bG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNw
cAppbmRleCBmYTU5NWU1ZTEzMDk4MjdkZWY2YmJhNWVlYmYyZGIwODBjMmFiNzUyLi5kNDA4ZmE3
YWZmMzljZmI4MjhkODQwN2EwOGIyNWI4ZDY5Yjc0YmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4u
Y3BwCkBAIC04Niw3ICs4Niw2IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKICAgICAgICAg
aW50IGZhY2VMZW5ndGggPSBHZXRUZXh0RmFjZShkYywgMCwgMCk7CiAgICAgICAgIFZlY3RvcjxX
Q0hBUj4gZmFjZU5hbWUoZmFjZUxlbmd0aCk7CiAgICAgICAgIEdldFRleHRGYWNlKGRjLCBmYWNl
TGVuZ3RoLCBmYWNlTmFtZS5kYXRhKCkpOwotICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXRJc1N5
c3RlbUZvbnQoIXdjc2NtcChmYWNlTmFtZS5kYXRhKCksIEwiTHVjaWRhIEdyYW5kZSIpKTsKICAg
ICAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsKIAogICAgICAgICBmQXNjZW50ID0gYXNj
ZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRIYWNrKGZhY2VOYW1lLmRhdGEoKSwgZkFzY2VudCwgZkRl
c2NlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCmluZGV4IGUwMjdmZjU2ZWJlZDMy
MDllMWIzNThlOWI0Nzg0NDY1NTIzNjUyZWIuLmY3OTVhNWYxNzdjMjM0ZTYzZDc5OWUxYmNjNjM0
NWZkMjgzYjFkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKQEAgLTQ2LDcgKzQ2
LDYgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgIG1fc3ludGhldGljQm9sZE9mZnNl
dCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7CiAgICAgbV9z
Y3JpcHRDYWNoZSA9IDA7CiAgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7Ci0gICAgbV9w
bGF0Zm9ybURhdGEuc2V0SXNTeXN0ZW1Gb250KGZhbHNlKTsKIAogICAgIGlmIChtX3BsYXRmb3Jt
RGF0YS51c2VHREkoKSkKICAgICAgICByZXR1cm4gaW5pdEdESUZvbnQoKTsKQEAgLTU1LDcgKzU0
LDYgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQogICAgICAgICBtX2ZvbnRNZXRyaWNzLnJl
c2V0KCk7CiAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKICAgICAgICAgbV9tYXhDaGFyV2lk
dGggPSAwOwotICAgICAgICBtX3BsYXRmb3JtRGF0YS5zZXRJc1N5c3RlbUZvbnQoZmFsc2UpOwog
ICAgICAgICBtX3NjcmlwdENhY2hlID0gMDsKICAgICAgICAgbV9zY3JpcHRGb250UHJvcGVydGll
cyA9IDA7CiAgICAgICAgIHJldHVybjsKQEAgLTg3LDExICs4NSw2IEBAIHZvaWQgRm9udDo6cGxh
dGZvcm1Jbml0KCkKICAgICB9CiAgICAgZmxvYXQgeEhlaWdodCA9IGFzY2VudCAqIDAuNTZmOyAv
LyBCZXN0IGd1ZXNzIGZvciB4SGVpZ2h0IGZvciBub24tVHJ1ZXR5cGUgZm9udHMuCiAKLSAgICBp
bnQgZmFjZUxlbmd0aCA9IDo6R2V0VGV4dEZhY2UoZGMsIDAsIDApOwotICAgIFZlY3RvcjxXQ0hB
Uj4gZmFjZU5hbWUoZmFjZUxlbmd0aCk7Ci0gICAgOjpHZXRUZXh0RmFjZShkYywgZmFjZUxlbmd0
aCwgZmFjZU5hbWUuZGF0YSgpKTsKLSAgICBtX3BsYXRmb3JtRGF0YS5zZXRJc1N5c3RlbUZvbnQo
IXdjc2NtcChmYWNlTmFtZS5kYXRhKCksIEwiTHVjaWRhIEdyYW5kZSIpKTsKLQogICAgIG1fZm9u
dE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7CiAgICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50
KGRlc2NlbnQpOwogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>