<?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>96281</bug_id>
          
          <creation_ts>2012-09-10 09:27:42 -0700</creation_ts>
          <short_desc>[EFL] Make DumpRenderTree/WebKitTestRunner smarter at finding the fonts</short_desc>
          <delta_ts>2012-09-12 04:52:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Rohde Christiansen">kenneth</reporter>
          <assigned_to name="Kenneth Rohde Christiansen">kenneth</assigned_to>
          <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>716155</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-10 09:27:42 -0700</bug_when>
    <thetext>Currently it doesn&apos;t respect WEBKITOUTPUTDIR and WEBKIT_TOP_LEVEL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716157</commentid>
    <comment_count>1</comment_count>
      <attachid>163151</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-10 09:30:50 -0700</bug_when>
    <thetext>Created attachment 163151
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716180</commentid>
    <comment_count>2</comment_count>
      <attachid>163151</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-09-10 09:53:42 -0700</bug_when>
    <thetext>Comment on attachment 163151
Patch

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

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:59
&gt; +static CString joinPath(const char* base, const char* first, ...)

The &quot;first&quot; here is not needed.
It could be just joinPath(const char* base, ...)

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:70
&gt; +    do {
&gt; +        result.append(&apos;/&apos;);
&gt; +        result.append(current);
&gt; +    } while ((current = va_arg(ap, const char*)));

By taking off the &quot;first&quot; argument, you can make this a while {}

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:111
&gt; +    static char readLinkBuffer[PATH_MAX];

EINA_PATH_MAX would move EFL-ish. It is smaller than PATH_MAX but I don&apos;t know how the eina/ecore functions behave with paths longer than that.

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:112
&gt; +    ssize_t result = readlink(&quot;/proc/self/exe&quot;, readLinkBuffer, PATH_MAX);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716250</commentid>
    <comment_count>3</comment_count>
      <attachid>163151</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-09-10 10:44:04 -0700</bug_when>
    <thetext>Comment on attachment 163151
Patch

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

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:76
&gt; +static void addFontDirectory(const CString&amp; path, FcConfig* config)

Can&apos;t we use this instead?
http://freedesktop.org/software/fontconfig/fontconfig-devel/fcconfigappfontadddir.html

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:78
&gt; +    size_t pathLength = strlen(path.data());

Why use strlen() if we already have the size in the CString?

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:94
&gt; +    eina_iterator_free(it);

iirc correctly, eina_iterator_free() displays warnings if the iterator is NULL (happens if the path passed to eina_file_ls() does not exist for example). Maybe we should abort early if eina_file_ls() returns NULL?

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:97
&gt; +

extra line?

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:136
&gt; +    const char* parentPath = ecore_file_dir_get(getCurrentExecutablePath().data());

Why store the returned value in a const char* although the function returns a char* (which must be freed)? This is error-prone IMHO.

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:137
&gt; +    const char* realPath = ecore_file_realpath(joinPath(parentPath, &quot;..&quot;, &quot;..&quot;, 0).data());

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716253</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-09-10 10:45:37 -0700</bug_when>
    <thetext>Note that this patch affects WebKitTestRunner in addition to DumpRenderTree so the bug title may be more accurate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716264</commentid>
    <comment_count>5</comment_count>
      <attachid>163151</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-09-10 10:49:59 -0700</bug_when>
    <thetext>Comment on attachment 163151
Patch

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

&gt;&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:136
&gt;&gt; +    const char* parentPath = ecore_file_dir_get(getCurrentExecutablePath().data());
&gt; 
&gt; Why store the returned value in a const char* although the function returns a char* (which must be freed)? This is error-prone IMHO.

What if getCurrentExecutablePath() returns a null CString?

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:152
&gt; +    CString webkitOutputDir = getOutputDir();

What if getOutputDir() returns a null CString?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716604</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-10 15:28:21 -0700</bug_when>
    <thetext>Thanks for the comments; this is what I was looking for. I will look at them tomorrow.

The patch is not 100% ready as such, but I added the r? flag to get some preliminary comments.

For instance I think I want to change the getOutputDir() to getBuildPath() etc.

&gt; http://freedesktop.org/software/fontconfig/fontconfig-devel/fcconfigappfontadddir.html

Maybe, not opening. But I guess there is a reason why GTK+ are doing it this way, and only accepting those file types.

&gt; &gt; Tools/DumpRenderTree/efl/FontManagement.cpp:78
&gt; &gt; +    size_t pathLength = strlen(path.data());
&gt; 
&gt; Why use strlen() if we already have the size in the CString?

Well if it has that, then I should use it :-) Guess I use CString too infrequently.

&gt; &gt; Tools/DumpRenderTree/efl/FontManagement.cpp:94
&gt; &gt; +    eina_iterator_free(it);
&gt; 
&gt; iirc correctly, eina_iterator_free() displays warnings if the iterator is NULL (happens if the path passed to eina_file_ls() does not exist for example). Maybe we should abort early if eina_file_ls() returns NULL?

That is a good idea, I see that is done in FileSystemEfl.cpp as well.

&gt; &gt; Tools/DumpRenderTree/efl/FontManagement.cpp:136
&gt; &gt; +    const char* parentPath = ecore_file_dir_get(getCurrentExecutablePath().data());
&gt; 
&gt; Why store the returned value in a const char* although the function returns a char* (which must be freed)? This is error-prone IMHO.

Sorry I didn&apos;t notice it was returning char*. Will fix.

&gt; What if getCurrentExecutablePath() returns a null CString?
&gt; What if getOutputDir() returns a null CString?

I&apos;ll handle that.(In reply to comment #2)

&gt; The &quot;first&quot; here is not needed.
&gt; It could be just joinPath(const char* base, ...)

But in that case it is not must if a join :-) joinPath(&quot;hello&quot;). Also this way I need to special casing for not adding a trailing /.

&gt; EINA_PATH_MAX would move EFL-ish. It is smaller than PATH_MAX but I don&apos;t know how the eina/ecore functions behave with paths longer than that.

OK, didn&apos;t know that existed :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717075</commentid>
    <comment_count>7</comment_count>
      <attachid>163340</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-11 05:28:55 -0700</bug_when>
    <thetext>Created attachment 163340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717094</commentid>
    <comment_count>8</comment_count>
      <attachid>163340</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-09-11 05:53:48 -0700</bug_when>
    <thetext>Comment on attachment 163340
Patch

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

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:-61
&gt; -        || !FcConfigAppFontAddDir(config, reinterpret_cast&lt;const FcChar8*&gt;(path))) {

Do we have a good reason to get rid of FcConfigAppFontAddDir() and do the listing manually? This makes the code more complex and font management has been working just fine using FcConfigAppFontAddDir() until now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717097</commentid>
    <comment_count>9</comment_count>
      <attachid>163340</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-11 06:06:41 -0700</bug_when>
    <thetext>Comment on attachment 163340
Patch

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

&gt;&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:-61
&gt;&gt; -        || !FcConfigAppFontAddDir(config, reinterpret_cast&lt;const FcChar8*&gt;(path))) {
&gt; 
&gt; Do we have a good reason to get rid of FcConfigAppFontAddDir() and do the listing manually? This makes the code more complex and font management has been working just fine using FcConfigAppFontAddDir() until now.

If you insist, I can change it. This way it more of a white listing of files (we whitelist .otf and .tff right now). GTK is doing it this way but I couldnt get hold on anyone to explain if whether they had issues with *FontAddDir before. It might be slightly more complicated but not much really.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717102</commentid>
    <comment_count>10</comment_count>
      <attachid>163340</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-09-11 06:21:57 -0700</bug_when>
    <thetext>Comment on attachment 163340
Patch

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

A few separate comments about the patch as a whole:

 o Trying to guess a build directory from the current executable might be too overzealous an approach, and the current code would only work on Linux.
 o We do not normally take the WEBKIT_TOP_LEVEL environment variable into account, so perhaps just trying to use WEBKITOUTPUTDIR should be just fine.
 o What if you fall back to the value of DOWNLOADED_FONTS_DIR as a last resort (if you don&apos;t, that definition can be removed from the build system).
 o Isn&apos;t it better to use ASCIILiteral wherever possible here?

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:4
&gt; + * Copyright (C) 2012 Intel Cooperation.

s/Cooperation/Corporation/?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717103</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-11 06:25:59 -0700</bug_when>
    <thetext>&gt;  o Trying to guess a build directory from the current executable might be too overzealous an approach, and the current code would only work on Linux.

That is true, but it can easily be made to work at least on all POSIX platforms with little effort. Is the EFL port targeting that?

&gt;  o We do not normally take the WEBKIT_TOP_LEVEL environment variable into account, so perhaps just trying to use WEBKITOUTPUTDIR should be just fine.

I saw that GTK are doing that, so I added it as well. I thought it might be set by the testing system.

&gt;  o What if you fall back to the value of DOWNLOADED_FONTS_DIR as a last resort (if you don&apos;t, that definition can be removed from the build system).
&gt;  o Isn&apos;t it better to use ASCIILiteral wherever possible here?

Only if we move totally away from CString and to String</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717106</commentid>
    <comment_count>12</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-09-11 06:29:19 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt;  o Trying to guess a build directory from the current executable might be too overzealous an approach, and the current code would only work on Linux.
&gt; 
&gt; That is true, but it can easily be made to work at least on all POSIX platforms with little effort. Is the EFL port targeting that?

Well, trying not to break things on !Linux as much as possible makes me happy, especially when I try to build the port at home on FreeBSD :-) More realistically speaking, while some effort could be made to make it work on all POSIX-compliant systems, I just don&apos;t see much value in this kind of heuristic here. As I see it, the whole problem we are trying to solve here is that WEBKITOUTPUTDIR should be respected just like it already is in other parts of the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717118</commentid>
    <comment_count>13</comment_count>
      <attachid>163340</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-09-11 06:50:24 -0700</bug_when>
    <thetext>Comment on attachment 163340
Patch

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

&gt;&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:4
&gt;&gt; + * Copyright (C) 2012 Intel Cooperation.
&gt; 
&gt; s/Cooperation/Corporation/?

Copyright (C) 2012 Intel Corporation. All rights reserved.

&gt; Tools/DumpRenderTree/efl/FontManagement.cpp:54
&gt; +static CString buildPath(const char* base, const char* first, ...)
&gt;  {
&gt; -    Vector&lt;String&gt; fontFilePaths;
&gt; +    va_list ap;
&gt; +    StringBuilder result;
&gt; +    result.append(base);
&gt; +
&gt; +    if (const char* current = first) {
&gt; +        va_start(ap, first);
&gt; +        do {
&gt; +            result.append(&apos;/&apos;);
&gt; +            result.append(current);
&gt; +        } while ((current = va_arg(ap, const char*)));
&gt; +        va_end(ap);
&gt; +    }
&gt; +
&gt; +    return result.toString().utf8();
&gt; +}

You could simplify this as something like:

static CString buildPath(const char* base, ...)
{
    StringBuilder result;
    result.append(base);

    va_list ap; 
    va_start(ap, base);

    const char* current;
    while ((current = va_arg(ap, const char*))) {
        result.append(&apos;/&apos;);
        result.append(current);
    }   

    va_end(ap);

    return result.toString().utf8();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717194</commentid>
    <comment_count>14</comment_count>
      <attachid>163369</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-11 08:24:51 -0700</bug_when>
    <thetext>Created attachment 163369
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718050</commentid>
    <comment_count>15</comment_count>
      <attachid>163369</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-09-12 01:37:33 -0700</bug_when>
    <thetext>Comment on attachment 163369
Patch

This looks fine to me. Yesterday I mentioned the build system side should be adjusted, but I take that back now -- the behavior in this patch is at least consistent with the way we determine the build dir in webkitdirs.pm, in that we first check if WEBKITOUTPUTDIR is set, and return $SOURCE_DIR/WebKitBuild otherwise.

What could help is changing the value of DOWNLOADED_FONTS_DIR from the source directory (ie. the directory we actually git clone&apos;d) to the fonts&apos; installation directory, so that we do not need to worry about updating the version number in the directory name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718200</commentid>
    <comment_count>16</comment_count>
      <attachid>163369</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-12 04:52:03 -0700</bug_when>
    <thetext>Comment on attachment 163369
Patch

Clearing flags on attachment: 163369

Committed r128292: &lt;http://trac.webkit.org/changeset/128292&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718201</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-12 04:52:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163151</attachid>
            <date>2012-09-10 09:30:50 -0700</date>
            <delta_ts>2012-09-11 05:28:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96281-20120910183025.patch</filename>
            <type>text/plain</type>
            <size>6362</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDQxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmE1ZDVhNWJkYWU3MDQwMDA2ZjdmOGVjNTk3MGQ1NDE5
OThiZDI3MC4uZjVmY2FiNjlmMjdmYWU4YTQ5NjcyZGRlMDQwZmNkMmM0YzkyMWIzNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDEyLTA5LTEwICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBbRUZMXSBNYWtlIER1bXBSZW5kZXJUcmVlIHNtYXJ0ZXIgYXQg
ZmluZGluZyB0aGUgZm9udHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk2MjgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVzcGVjdCBXRUJLSVRPVVRQVVRESVIgYW5kIFdFQktJVF9UT1BfTEVWRUwsIGFz
IHdlbGwgYXMKKyAgICAgICAgYXR0ZW1wdCB0byBmaW5kIHRoZSByaWdodCBidWlsZCBkaXJlY3Rv
cnkgdXNpbmcgdGhlCisgICAgICAgIGV4ZWN1dGFibGUgcGF0aC4KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2VmbC9Gb250TWFuYWdlbWVudC5jcHA6CisgICAgICAgIChqb2luUGF0aCk6Cisg
ICAgICAgIChhZGRGb250RGlyZWN0b3J5KToKKyAgICAgICAgKGdldEN1cnJlbnRFeGVjdXRhYmxl
UGF0aCk6CisgICAgICAgIChnZXRPdXRwdXREaXIpOgorICAgICAgICAoZ2V0Rm9udHNQYXRoKToK
KyAgICAgICAgKGFkZEZvbnRzVG9FbnZpcm9ubWVudCk6CisKIDIwMTItMDktMTAgIFNpbW9uIEhh
dXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIEZpeCBidWlsZCBv
ZiBXVFIgd2l0aCBRdCBvbiBXaW5kb3dzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvRm9udE1hbmFnZW1lbnQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0ZvbnRN
YW5hZ2VtZW50LmNwcAppbmRleCBkY2Q0MjUzODFhMmM5MzI2OTdhMTJjYWI3NTI0ZmEyZjUyODll
NjA5Li5kNTBlNjJiZjliNDRjZmU3NGI1NjY2Y2YzY2M0ZDRhOWIzZmFkNTQ2IDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRm9udE1hbmFnZW1lbnQuY3BwCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9Gb250TWFuYWdlbWVudC5jcHAKQEAgLTEsNiArMSw4IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAy
MDEyIEludGVsIENvb3BlcmF0aW9uLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMzLDcgQEAKICNpbmNs
dWRlIDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogc3RhdGljIFZlY3Rv
cjxTdHJpbmc+IGdldEZvbnRGaWxlcygpCkBAIC01MywxOCArNTYsNDUgQEAgc3RhdGljIFZlY3Rv
cjxTdHJpbmc+IGdldEZvbnRGaWxlcygpCiAgICAgcmV0dXJuIGZvbnRGaWxlUGF0aHM7CiB9CiAK
LXN0YXRpYyBib29sIGFkZEZvbnREaXJlY3RvcnkoY29uc3QgQ1N0cmluZyYgZm9udERpcmVjdG9y
eSwgRmNDb25maWcqIGNvbmZpZykKK3N0YXRpYyBDU3RyaW5nIGpvaW5QYXRoKGNvbnN0IGNoYXIq
IGJhc2UsIGNvbnN0IGNoYXIqIGZpcnN0LCAuLi4pCiB7Ci0gICAgY29uc3QgY2hhciogcGF0aCA9
IGZvbnREaXJlY3RvcnkuZGF0YSgpOworICAgIHZhX2xpc3QgYXA7CisgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChiYXNlKTsKKworICAgIHZhX3N0YXJ0KGFwLCBm
aXJzdCk7CisgICAgY29uc3QgY2hhciogY3VycmVudCA9IGZpcnN0OworICAgIGRvIHsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnLycpOworICAgICAgICByZXN1bHQuYXBwZW5kKGN1cnJlbnQpOwor
ICAgIH0gd2hpbGUgKChjdXJyZW50ID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyKikpKTsKKyAgICB2
YV9lbmQoYXApOworCisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpLnV0ZjgoKTsKK30KKwor
c3RhdGljIHZvaWQgYWRkRm9udERpcmVjdG9yeShjb25zdCBDU3RyaW5nJiBwYXRoLCBGY0NvbmZp
ZyogY29uZmlnKQoreworICAgIHNpemVfdCBwYXRoTGVuZ3RoID0gc3RybGVuKHBhdGguZGF0YSgp
KTsKKworICAgIEVpbmFfSXRlcmF0b3IqIGl0ID0gZWluYV9maWxlX2xzKHBhdGguZGF0YSgpKTsK
KyAgICBjb25zdCBjaGFyKiBmaWxlbmFtZTsKIAotICAgIGlmICghZWNvcmVfZmlsZV9pc19kaXIo
cGF0aCkKLSAgICAgICAgfHwgIUZjQ29uZmlnQXBwRm9udEFkZERpcihjb25maWcsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KHBhdGgpKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkNvdWxkIG5vdCBhZGQgZm9udCBkaXJlY3RvcnkgJXMhXG4iLCBwYXRoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdCwgZmlsZW5hbWUpIHsK
KyAgICAgICAgaWYgKCFlaW5hX3N0cl9oYXNfc3VmZml4KGZpbGVuYW1lLCAiLnRmZiIpICYmICFl
aW5hX3N0cl9oYXNfc3VmZml4KGZpbGVuYW1lLCAiLm90ZiIpKSB7CisgICAgICAgICAgICBlaW5h
X3N0cmluZ3NoYXJlX2RlbChmaWxlbmFtZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShjb25maWcsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZpbGVuYW1lKSkpCisgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhXG4iLCBmaWxlbmFtZSk7CisK
KyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoZmlsZW5hbWUpOwogICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXQpOwogfQogCisKIHN0YXRpYyB2b2lk
IGFkZEZvbnRGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZm9udEZpbGVzLCBGY0NvbmZpZyog
Y29uZmlnKQogewogICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
Zm9udEZpbGVzLmJlZ2luKCk7IGl0ICE9IGZvbnRGaWxlcy5lbmQoKTsgKytpdCkgewpAQCAtNzYs
NiArMTA2LDY3IEBAIHN0YXRpYyB2b2lkIGFkZEZvbnRGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZm9udEZpbGVzLCBGY0NvbmZpZyogY29uZmlnKQogICAgIH0KIH0KIAorc3RhdGljIENTdHJp
bmcgZ2V0Q3VycmVudEV4ZWN1dGFibGVQYXRoKCkKK3sKKyAgICBzdGF0aWMgY2hhciByZWFkTGlu
a0J1ZmZlcltQQVRIX01BWF07CisgICAgc3NpemVfdCByZXN1bHQgPSByZWFkbGluaygiL3Byb2Mv
c2VsZi9leGUiLCByZWFkTGlua0J1ZmZlciwgUEFUSF9NQVgpOworICAgIGlmIChyZXN1bHQgPT0g
LTEpCisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgcmV0dXJuIENTdHJpbmcocmVhZExp
bmtCdWZmZXIsIHJlc3VsdCk7Cit9CisKK3N0YXRpYyBDU3RyaW5nIGdldE91dHB1dERpcigpCit7
CisgICAgY29uc3QgY2hhciogd2Via2l0T3V0cHV0RGlyID0gZ2V0ZW52KCJXRUJLSVRPVVRQVVRE
SVIiKTsKKyAgICBpZiAod2Via2l0T3V0cHV0RGlyKSB7CisgICAgICAgIGlmIChlY29yZV9maWxl
X2lzX2Rpcih3ZWJraXRPdXRwdXREaXIpKQorICAgICAgICAgICAgcmV0dXJuIHdlYmtpdE91dHB1
dERpcjsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJXRUJLSVRPVVRQVVRESVIgc2V0IHRvICcl
cycsIGJ1dCBwYXRoIGRvZXNuJ3QgZXhpc3QuXG4iLCB3ZWJraXRPdXRwdXREaXIpOworICAgIH0K
KworICAgIGlmIChjb25zdCBjaGFyKiB0b3BMZXZlbERpciA9IGdldGVudigiV0VCS0lUX1RPUF9M
RVZFTCIpKSB7CisgICAgICAgIENTdHJpbmcgb3V0cHV0RGlyKGpvaW5QYXRoKHRvcExldmVsRGly
LCAiV2ViS2l0QnVpbGQiLCAwKSk7CisgICAgICAgIGlmIChlY29yZV9maWxlX2lzX2RpcihvdXRw
dXREaXIuZGF0YSgpKSkKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXREaXI7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiV0VCS0lUX1RPUF9MRVZFTCBzZXQgdG8gJyVzJywgYnV0ICclcy9XZWJL
aXRCdWlsZCcgZG9lc24ndCBleGlzdC5cbiIsIHRvcExldmVsRGlyLCB0b3BMZXZlbERpcik7Cisg
ICAgfQorCisgICAgLy8gSWYgbm9uZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2VyZSBw
cm92aWRlZCB0aGVuIGFzc3VtZSB3ZSB0cnkgdG8gZmluZAorICAgIC8vIHRoZSBkaXJlY3Rvcnkg
cmVsYXRpdmUgdG8gdGhlIGJpbmFyeS4KKyAgICBjb25zdCBjaGFyKiBwYXJlbnRQYXRoID0gZWNv
cmVfZmlsZV9kaXJfZ2V0KGdldEN1cnJlbnRFeGVjdXRhYmxlUGF0aCgpLmRhdGEoKSk7CisgICAg
Y29uc3QgY2hhciogcmVhbFBhdGggPSBlY29yZV9maWxlX3JlYWxwYXRoKGpvaW5QYXRoKHBhcmVu
dFBhdGgsICIuLiIsICIuLiIsIDApLmRhdGEoKSk7CisgICAgQ1N0cmluZyBidWlsZFBhdGgocmVh
bFBhdGgpOworCisgICAgZnJlZSgoY2hhciopcGFyZW50UGF0aCk7CisgICAgZnJlZSgoY2hhciop
cmVhbFBhdGgpOworCisgICAgaWYgKGVjb3JlX2ZpbGVfaXNfZGlyKGJ1aWxkUGF0aC5kYXRhKCkp
KQorICAgICAgICByZXR1cm4gYnVpbGRQYXRoOworICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQg
bm90IGRldGVybWluZSBidWlsZCBkaXIgZnJvbSBleGVjdXRhYmxlIHBhdGguXG4iKTsKKworICAg
IHJldHVybiBDU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBDU3RyaW5nIGdldEZvbnRzUGF0aCgpCit7
CisgICAgQ1N0cmluZyB3ZWJraXRPdXRwdXREaXIgPSBnZXRPdXRwdXREaXIoKTsKKworICAgIENT
dHJpbmcgZm9udHNQYXRoID0gam9pblBhdGgod2Via2l0T3V0cHV0RGlyLmRhdGEoKSwgIkRlcGVu
ZGVuY2llcyIsICJSb290IiwgIndlYmtpdGd0ay10ZXN0LWZvbnRzIiwgMCk7CisKKyAgICBpZiAo
ZWNvcmVfZmlsZV9leGlzdHMoZm9udHNQYXRoLmRhdGEoKSkgfHwgZWNvcmVfZmlsZV9pc19kaXIo
Zm9udHNQYXRoLmRhdGEoKSkpCisgICAgICAgIHJldHVybiBmb250c1BhdGg7CisKKyAgICAvLyBU
cnkgYWx0ZXJuYXRpdmUgZm9udHMgcGF0aC4KKyAgICBmb250c1BhdGggPSBqb2luUGF0aCh3ZWJr
aXRPdXRwdXREaXIuZGF0YSgpLCAid2Via2l0Z3RrLXRlc3QtZm9udHMiLCAwKTsKKyAgICBpZiAo
ZWNvcmVfZmlsZV9leGlzdHMoZm9udHNQYXRoLmRhdGEoKSkgfHwgZWNvcmVfZmlsZV9pc19kaXIo
Zm9udHNQYXRoLmRhdGEoKSkpCisgICAgICAgIHJldHVybiBmb250c1BhdGg7CisKKyAgICBmcHJp
bnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBsb2NhdGUgdGVzdHMgZm9udHMsIHRyeSBzZXR0aW5nIFdF
QktJVF9UT1BfTEVWRUwgb3IgV0VCS0lUT1VUUFVURElSLlxuIik7CisgICAgZXhpdCgxKTsKKwor
ICAgIHJldHVybiBDU3RyaW5nKCk7Cit9CisKIHZvaWQgYWRkRm9udHNUb0Vudmlyb25tZW50KCkK
IHsKICAgICBGY0luaXQoKTsKQEAgLTg5LDEzICsxODAsNyBAQCB2b2lkIGFkZEZvbnRzVG9FbnZp
cm9ubWVudCgpCiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCi0gICAgaWYgKCFhZGRGb250RGly
ZWN0b3J5KERPV05MT0FERURfRk9OVFNfRElSLCBjb25maWcpKSB7Ci0gICAgICAgIGZwcmludGYo
c3RkZXJyLCAiTm9uZSBvZiB0aGUgZm9udCBkaXJlY3RvcmllcyBjb3VsZCBiZSBhZGRlZC4gRWl0
aGVyIGluc3RhbGwgdGhlbSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAib3IgZmlsZSBhIGJ1
ZyBhdCBodHRwOi8vYnVncy53ZWJraXQub3JnIGlmIHRoZXkgYXJlIGluc3RhbGxlZCBpbiAiCi0g
ICAgICAgICAgICAgICAgICAgICAgICAiYW5vdGhlciBsb2NhdGlvbi5cbiIpOwotICAgICAgICBl
eGl0KDEpOwotICAgIH0KLQorICAgIGFkZEZvbnREaXJlY3RvcnkoZ2V0Rm9udHNQYXRoKCksIGNv
bmZpZyk7CiAgICAgYWRkRm9udEZpbGVzKGdldEZvbnRGaWxlcygpLCBjb25maWcpOwogCiAgICAg
aWYgKCFGY0NvbmZpZ1NldEN1cnJlbnQoY29uZmlnKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163340</attachid>
            <date>2012-09-11 05:28:55 -0700</date>
            <delta_ts>2012-09-11 08:24:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96281-20120911142829.patch</filename>
            <type>text/plain</type>
            <size>8120</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MTYwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjcyYzBhNzgxMGYwZDFkM2ZhYjA4YTc5YjAwZTM2ZGE2
YWM0MTI4ZS4uOWU3MzVjODUyNWUyYWJiOWRhZTZiODFiZTkyODIyNmNmMDUyYzU4MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDEyLTA5LTEwICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBbRUZMXSBNYWtlIER1bXBSZW5kZXJUcmVlIHNtYXJ0ZXIgYXQg
ZmluZGluZyB0aGUgZm9udHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk2MjgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVzcGVjdCBXRUJLSVRPVVRQVVRESVIgYW5kIFdFQktJVF9UT1BfTEVWRUwsIGFz
IHdlbGwgYXMKKyAgICAgICAgYXR0ZW1wdCB0byBmaW5kIHRoZSByaWdodCBidWlsZCBkaXJlY3Rv
cnkgdXNpbmcgdGhlCisgICAgICAgIGV4ZWN1dGFibGUgcGF0aC4KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2VmbC9Gb250TWFuYWdlbWVudC5jcHA6CisgICAgICAgIChqb2luUGF0aCk6Cisg
ICAgICAgIChhZGRGb250RGlyZWN0b3J5KToKKyAgICAgICAgKGdldEN1cnJlbnRFeGVjdXRhYmxl
UGF0aCk6CisgICAgICAgIChnZXRPdXRwdXREaXIpOgorICAgICAgICAoZ2V0Rm9udHNQYXRoKToK
KyAgICAgICAgKGFkZEZvbnRzVG9FbnZpcm9ubWVudCk6CisKIDIwMTItMDktMTEgIEFuZHJhcyBC
ZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XVtXSzJdIEZpeCB0
aGUgYnVpbGQgd2l0aCByZWNlbnQgUXQ1CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvRm9udE1hbmFnZW1lbnQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0ZvbnRN
YW5hZ2VtZW50LmNwcAppbmRleCBkY2Q0MjUzODFhMmM5MzI2OTdhMTJjYWI3NTI0ZmEyZjUyODll
NjA5Li42YWM5MTZlOGY2OTFkNmVlMTcxNWVmZGRhOWY5YWQ4NjEwNzkzYThmIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRm9udE1hbmFnZW1lbnQuY3BwCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9Gb250TWFuYWdlbWVudC5jcHAKQEAgLTEsNiArMSw4IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAy
MDEyIEludGVsIENvb3BlcmF0aW9uLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDQ4ICszMywxNDcgQEAKICNp
bmNsdWRlIDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAotc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IGdldEZvbnRGaWxlcygpCitzdGF0aWMgQ1N0cmluZyBidWlsZFBhdGgoY29u
c3QgY2hhciogYmFzZSwgY29uc3QgY2hhciogZmlyc3QsIC4uLikKIHsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBmb250RmlsZVBhdGhzOworICAgIHZhX2xpc3QgYXA7CisgICAgU3RyaW5nQnVpbGRlciBy
ZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChiYXNlKTsKKworICAgIGlmIChjb25zdCBjaGFyKiBj
dXJyZW50ID0gZmlyc3QpIHsKKyAgICAgICAgdmFfc3RhcnQoYXAsIGZpcnN0KTsKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChjdXJyZW50KTsKKyAgICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSB2YV9hcmcoYXAs
IGNvbnN0IGNoYXIqKSkpOworICAgICAgICB2YV9lbmQoYXApOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQudG9TdHJpbmcoKS51dGY4KCk7Cit9CisKK3N0YXRpYyBDU3RyaW5nIGdldEN1cnJl
bnRFeGVjdXRhYmxlUGF0aCgpCit7CisgICAgc3RhdGljIGNoYXIgcmVhZExpbmtCdWZmZXJbRUlO
QV9QQVRIX01BWF07CisgICAgc3NpemVfdCByZXN1bHQgPSByZWFkbGluaygiL3Byb2Mvc2VsZi9l
eGUiLCByZWFkTGlua0J1ZmZlciwgRUlOQV9QQVRIX01BWCk7CisgICAgaWYgKHJlc3VsdCA9PSAt
MSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICByZXR1cm4gQ1N0cmluZyhyZWFkTGlu
a0J1ZmZlciwgcmVzdWx0KTsKK30KKworc3RhdGljIENTdHJpbmcgZ2V0QmFzZURpcihDU3RyaW5n
IHBhdGgpCit7CisgICAgQ1N0cmluZyByZXN1bHQ7CisKKyAgICBpZiAoY2hhciogYmFzZURpciA9
IGVjb3JlX2ZpbGVfZGlyX2dldChwYXRoLmRhdGEoKSkpIHsKKyAgICAgICAgcmVzdWx0ID0gQ1N0
cmluZyhiYXNlRGlyKTsKKyAgICAgICAgZnJlZShiYXNlRGlyKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1N0cmluZyBnZXRSZWFsRGlyKENTdHJpbmcgcGF0aCkK
K3sKKyAgICBDU3RyaW5nIHJlc3VsdDsKKworICAgIGNoYXIqIHJlYWxQYXRoID0gZWNvcmVfZmls
ZV9yZWFscGF0aChwYXRoLmRhdGEoKSk7IC8vICIiIGluIGNhc2Ugb2YgZXJyb3IuCisKKyAgICBp
ZiAoZWNvcmVfZmlsZV9pc19kaXIocmVhbFBhdGgpKQorICAgICAgICByZXN1bHQgPSBDU3RyaW5n
KHJlYWxQYXRoKTsKKyAgICBmcmVlKHJlYWxQYXRoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyBDU3RyaW5nIGdldEJ1aWxkRGlyKCkKK3sKKyAgICBpZiAoY29uc3QgY2hhciog
dXNlckNob3NlbkJ1aWxkRGlyID0gZ2V0ZW52KCJXRUJLSVRPVVRQVVRESVIiKSkgeworICAgICAg
ICBpZiAoZWNvcmVfZmlsZV9pc19kaXIodXNlckNob3NlbkJ1aWxkRGlyKSkKKyAgICAgICAgICAg
IHJldHVybiB1c2VyQ2hvc2VuQnVpbGREaXI7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0VC
S0lUT1VUUFVURElSIHNldCB0byAnJXMnLCBidXQgcGF0aCBkb2Vzbid0IGV4aXN0LlxuIiwgdXNl
ckNob3NlbkJ1aWxkRGlyKTsKKyAgICB9CisKKyAgICBpZiAoY29uc3QgY2hhciogdG9wTGV2ZWxE
aXIgPSBnZXRlbnYoIldFQktJVF9UT1BfTEVWRUwiKSkgeworICAgICAgICBDU3RyaW5nIGJ1aWxk
RGlyKGJ1aWxkUGF0aCh0b3BMZXZlbERpciwgIldlYktpdEJ1aWxkIiwgMCkpOworICAgICAgICBp
ZiAoZWNvcmVfZmlsZV9pc19kaXIoYnVpbGREaXIuZGF0YSgpKSkKKyAgICAgICAgICAgIHJldHVy
biBidWlsZERpcjsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJXRUJLSVRfVE9QX0xFVkVMIHNl
dCB0byAnJXMnLCBidXQgJyVzL1dlYktpdEJ1aWxkJyBkb2Vzbid0IGV4aXN0LlxuIiwgdG9wTGV2
ZWxEaXIsIHRvcExldmVsRGlyKTsKKyAgICB9CisKKyAgICAvLyBJZiBub25lIG9mIHRoZSBlbnZp
cm9ubWVudCB2YXJpYWJsZSB3ZXJlIHByb3ZpZGVkIHRoZW4gYXNzdW1lIHdlIHRyeSB0byBmaW5k
CisgICAgLy8gdGhlIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgYmluYXJ5LgorICAgIENTdHJp
bmcgZXhlY3V0YWJsZURpciA9IGdldEJhc2VEaXIoZ2V0Q3VycmVudEV4ZWN1dGFibGVQYXRoKCkp
OworICAgIENTdHJpbmcgYnVpbGREaXIgPSBnZXRSZWFsRGlyKGJ1aWxkUGF0aChleGVjdXRhYmxl
RGlyLmRhdGEoKSwgIi4uIiwgIi4uIiwgMCkpOworICAgIGlmIChidWlsZERpci5kYXRhKCkpCisg
ICAgICAgIHJldHVybiBidWlsZERpcjsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBk
ZXRlcm1pbmUgYnVpbGQgZGlyIGZyb20gZXhlY3V0YWJsZSBwYXRoLlxuIik7CisKKyAgICByZXR1
cm4gQ1N0cmluZygpOworfQorCitzdGF0aWMgQ1N0cmluZyBnZXRQbGF0Zm9ybUZvbnRzUGF0aCgp
Cit7CisgICAgQ1N0cmluZyBidWlsZERpciA9IGdldEJ1aWxkRGlyKCk7CisKKyAgICBDU3RyaW5n
IGZvbnRzUGF0aCA9IGdldFJlYWxEaXIoYnVpbGRQYXRoKGJ1aWxkRGlyLmRhdGEoKSwgIkRlcGVu
ZGVuY2llcyIsICJSb290IiwgIndlYmtpdGd0ay10ZXN0LWZvbnRzIiwgMCkpOworICAgIGlmICgh
Zm9udHNQYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZm9udHNQYXRoOworCisgICAgLy8g
VHJ5IGFsdGVybmF0aXZlIGZvbnRzIHBhdGguCisgICAgZm9udHNQYXRoID0gZ2V0UmVhbERpcihi
dWlsZFBhdGgoYnVpbGREaXIuZGF0YSgpLCAid2Via2l0Z3RrLXRlc3QtZm9udHMiLCAwKSk7Cisg
ICAgaWYgKCFmb250c1BhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmb250c1BhdGg7CisK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBsb2NhdGUgdGVzdHMgZm9udHMsIHRyeSBz
ZXR0aW5nIFdFQktJVF9UT1BfTEVWRUwgb3IgV0VCS0lUT1VUUFVURElSLlxuIik7CisgICAgZXhp
dCgxKTsKKworICAgIHJldHVybiBDU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBWZWN0b3I8Q1N0cmlu
Zz4gZ2V0Q29yZUZvbnRGaWxlcygpCit7CisgICAgVmVjdG9yPENTdHJpbmc+IGZvbnRGaWxlUGF0
aHM7CiAKICAgICAvLyBBaGVtIGlzIHVzZWQgYnkgbWFueSBsYXlvdXQgdGVzdHMuCi0gICAgZm9u
dEZpbGVQYXRocy5hcHBlbmQoU3RyaW5nKEZPTlRTX0NPTkZfRElSICIvQUhFTV9fX18uVFRGIikp
OworICAgIGZvbnRGaWxlUGF0aHMuYXBwZW5kKENTdHJpbmcoRk9OVFNfQ09ORl9ESVIgIi9BSEVN
X19fXy5UVEYiKSk7CiAgICAgLy8gQSBmb250IHdpdGggbm8gdmFsaWQgRm9udGNvbmZpZyBlbmNv
ZGluZyB0byB0ZXN0IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzQ1
MgotICAgIGZvbnRGaWxlUGF0aHMuYXBwZW5kKFN0cmluZyhGT05UU19DT05GX0RJUiAiL0ZvbnRX
aXRoTm9WYWxpZEVuY29kaW5nLmZvbiIpKTsKKyAgICBmb250RmlsZVBhdGhzLmFwcGVuZChDU3Ry
aW5nKEZPTlRTX0NPTkZfRElSICIvRm9udFdpdGhOb1ZhbGlkRW5jb2RpbmcuZm9uIikpOwogCiAg
ICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gOTsgaSsrKSB7Ci0gICAgICAgIGNoYXIgZm9udFBhdGhb
UEFUSF9NQVhdOwotICAgICAgICBzbnByaW50Zihmb250UGF0aCwgUEFUSF9NQVggLSAxLAotICAg
ICAgICAgICAgICAgICBGT05UU19DT05GX0RJUiAiLy4uLy4uL2ZvbnRzL1dlYktpdFdlaWdodFdh
dGNoZXIlaTAwLnR0ZiIsIGkpOwotCi0gICAgICAgIGZvbnRGaWxlUGF0aHMuYXBwZW5kKFN0cmlu
Zyhmb250UGF0aCkpOworICAgICAgICBjaGFyIGZvbnRQYXRoW0VJTkFfUEFUSF9NQVhdOworICAg
ICAgICBzbnByaW50Zihmb250UGF0aCwgRUlOQV9QQVRIX01BWCAtIDEsIEZPTlRTX0NPTkZfRElS
ICIvLi4vLi4vZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlciVpMDAudHRmIiwgaSk7CisgICAgICAg
IGZvbnRGaWxlUGF0aHMuYXBwZW5kKENTdHJpbmcoZm9udFBhdGgpKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gZm9udEZpbGVQYXRoczsKIH0KIAotc3RhdGljIGJvb2wgYWRkRm9udERpcmVjdG9yeShj
b25zdCBDU3RyaW5nJiBmb250RGlyZWN0b3J5LCBGY0NvbmZpZyogY29uZmlnKQorc3RhdGljIFZl
Y3RvcjxDU3RyaW5nPiBnZXRQbGF0Zm9ybUZvbnRGaWxlcygpCiB7Ci0gICAgY29uc3QgY2hhciog
cGF0aCA9IGZvbnREaXJlY3RvcnkuZGF0YSgpOwotCi0gICAgaWYgKCFlY29yZV9maWxlX2lzX2Rp
cihwYXRoKQotICAgICAgICB8fCAhRmNDb25maWdBcHBGb250QWRkRGlyKGNvbmZpZywgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4ocGF0aCkpKSB7Ci0gICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ291bGQgbm90IGFkZCBmb250IGRpcmVjdG9yeSAlcyFcbiIsIHBhdGgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgVmVjdG9yPENTdHJpbmc+IGZvbnRGaWxlUGF0aHM7CisKKyAg
ICBpZiAoRWluYV9JdGVyYXRvciogaXQgPSBlaW5hX2ZpbGVfbHMoZ2V0UGxhdGZvcm1Gb250c1Bh
dGgoKS5kYXRhKCkpKSB7CisgICAgICAgIEVpbmFfU3RyaW5nc2hhcmUqIGZvbnRQYXRoOworICAg
ICAgICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXQsIGZvbnRQYXRoKSB7CisgICAgICAgICAgICBp
ZiAoZWluYV9zdHJfaGFzX3N1ZmZpeChmb250UGF0aCwgIi50ZmYiKSB8fCBlaW5hX3N0cl9oYXNf
c3VmZml4KGZvbnRQYXRoLCAiLm90ZiIpKQorICAgICAgICAgICAgICAgIGZvbnRGaWxlUGF0aHMu
YXBwZW5kKENTdHJpbmcoZm9udFBhdGgpKTsKKyAgICAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVf
ZGVsKGZvbnRQYXRoKTsKKyAgICAgICAgfQorICAgICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXQp
OwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmb250RmlsZVBhdGhzOwog
fQogCi1zdGF0aWMgdm9pZCBhZGRGb250RmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZvbnRG
aWxlcywgRmNDb25maWcqIGNvbmZpZykKK3N0YXRpYyB2b2lkIGFkZEZvbnRGaWxlcyhjb25zdCBW
ZWN0b3I8Q1N0cmluZz4mIGZvbnRGaWxlcywgRmNDb25maWcqIGNvbmZpZykKIHsKLSAgICBmb3Ig
KFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZvbnRGaWxlcy5iZWdpbigpOyBp
dCAhPSBmb250RmlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgY29uc3QgQ1N0cmluZyBjdXJy
ZW50RmlsZSA9ICgqaXQpLnV0ZjgoKTsKLSAgICAgICAgY29uc3QgY2hhciogcGF0aCA9IGN1cnJl
bnRGaWxlLmRhdGEoKTsKLQotICAgICAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoY29u
ZmlnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihwYXRoKSkpCi0gICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhXG4iLCBwYXRoKTsK
KyAgICBWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0LCBlbmQgPSBmb250RmlsZXMu
ZW5kKCk7CisgICAgZm9yIChpdCA9IGZvbnRGaWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgY29uc3QgY2hhciogZmlsZVBhdGggPSAoKml0KS5kYXRhKCk7CisgICAgICAg
IGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShjb25maWcsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgRmNDaGFyOCo+KGZpbGVQYXRoKSkpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNv
dWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhXG4iLCBmaWxlUGF0aCk7CiAgICAgfQogfQogCkBAIC04
OSwxNCArMTkwLDggQEAgdm9pZCBhZGRGb250c1RvRW52aXJvbm1lbnQoKQogICAgICAgICBleGl0
KDEpOwogICAgIH0KIAotICAgIGlmICghYWRkRm9udERpcmVjdG9yeShET1dOTE9BREVEX0ZPTlRT
X0RJUiwgY29uZmlnKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vbmUgb2YgdGhlIGZv
bnQgZGlyZWN0b3JpZXMgY291bGQgYmUgYWRkZWQuIEVpdGhlciBpbnN0YWxsIHRoZW0gIgotICAg
ICAgICAgICAgICAgICAgICAgICAgIm9yIGZpbGUgYSBidWcgYXQgaHR0cDovL2J1Z3Mud2Via2l0
Lm9yZyBpZiB0aGV5IGFyZSBpbnN0YWxsZWQgaW4gIgotICAgICAgICAgICAgICAgICAgICAgICAg
ImFub3RoZXIgbG9jYXRpb24uXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBh
ZGRGb250RmlsZXMoZ2V0Rm9udEZpbGVzKCksIGNvbmZpZyk7CisgICAgYWRkRm9udEZpbGVzKGdl
dFBsYXRmb3JtRm9udEZpbGVzKCksIGNvbmZpZyk7CisgICAgYWRkRm9udEZpbGVzKGdldENvcmVG
b250RmlsZXMoKSwgY29uZmlnKTsKIAogICAgIGlmICghRmNDb25maWdTZXRDdXJyZW50KGNvbmZp
ZykpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgc2V0IHRoZSBjdXJyZW50
IGZvbnQgY29uZmlndXJhdGlvbiFcbiIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163369</attachid>
            <date>2012-09-11 08:24:51 -0700</date>
            <delta_ts>2012-09-12 04:52:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96281-20120911172425.patch</filename>
            <type>text/plain</type>
            <size>6498</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MTg4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzgzZDk0ZTQ5MmM0ZmM2MGI4NjM1Njc5MWEzMzIyMGM4
MjIxZTgzNC4uMDEwZDhkNmJhNmY5NGI3ZTdjOWU5NTA5ZjBhNzAyYmYwOTc4ODdmNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDEyLTA5LTEwICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBbRUZMXSBNYWtlIER1bXBSZW5kZXJUcmVlIHNtYXJ0ZXIgYXQg
ZmluZGluZyB0aGUgZm9udHMKKyAgICAgICAgaHR0cDovL3dlYmtpdC5vcmcvYi85NjI4MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlc3BlY3QgV0VC
S0lUT1VUUFVURElSIGFuZCBleHBhbmQgdGhlIGZvbnQgZGlyIGZyb20gaXQuCisgICAgICAgIFVz
ZSBDU3RyaW5nIGNvbnNpc3RlbnRseS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9G
b250TWFuYWdlbWVudC5jcHA6CisgICAgICAgIChidWlsZFBhdGgpOgorICAgICAgICAoZ2V0Q29y
ZUZvbnRGaWxlcyk6CisgICAgICAgIChhZGRGb250RGlyZWN0b3J5KToKKyAgICAgICAgKGFkZEZv
bnRGaWxlcyk6CisgICAgICAgIChnZXRDdXN0b21CdWlsZERpcik6CisgICAgICAgIChnZXRQbGF0
Zm9ybUZvbnRzUGF0aCk6CisgICAgICAgIChhZGRGb250c1RvRW52aXJvbm1lbnQpOgorCiAyMDEy
LTA5LTExICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29t
PgogCiAgICAgICAgIFtXSzJdW1dUUl0gV2ViS2l0VGVzdFJ1bm5lciBuZWVkcyB0ZXN0UnVubmVy
LnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZWZsL0ZvbnRNYW5hZ2VtZW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9G
b250TWFuYWdlbWVudC5jcHAKaW5kZXggZGNkNDI1MzgxYTJjOTMyNjk3YTEyY2FiNzUyNGZhMmY1
Mjg5ZTYwOS4uZGY4YTE1MGQ1ODU2ZDc0ZGMxY2NiM2YzMTUzZjhkYzg3MzRjNjAwOCAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0ZvbnRNYW5hZ2VtZW50LmNwcAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRm9udE1hbmFnZW1lbnQuY3BwCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcwog
ICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNDkgKzMyLDg4IEBACiAjaW5jbHVkZSA8Zm9u
dGNvbmZpZy9mb250Y29uZmlnLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLXN0YXRpYyBWZWN0b3I8U3RyaW5n
PiBnZXRGb250RmlsZXMoKQorc3RhdGljIENTdHJpbmcgYnVpbGRQYXRoKGNvbnN0IGNoYXIqIGJh
c2UsIGNvbnN0IGNoYXIqIGZpcnN0LCAuLi4pCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gZm9udEZp
bGVQYXRoczsKKyAgICB2YV9saXN0IGFwOworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAg
IHJlc3VsdC5hcHBlbmQoYmFzZSk7CisKKyAgICBpZiAoY29uc3QgY2hhciogY3VycmVudCA9IGZp
cnN0KSB7CisgICAgICAgIHZhX3N0YXJ0KGFwLCBmaXJzdCk7CisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY3Vy
cmVudCk7CisgICAgICAgIH0gd2hpbGUgKChjdXJyZW50ID0gdmFfYXJnKGFwLCBjb25zdCBjaGFy
KikpKTsKKyAgICAgICAgdmFfZW5kKGFwKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCkudXRmOCgpOworfQorCitzdGF0aWMgVmVjdG9yPENTdHJpbmc+IGdldENvcmVGb250
RmlsZXMoKQoreworICAgIFZlY3RvcjxDU3RyaW5nPiBmb250RmlsZVBhdGhzOwogCiAgICAgLy8g
QWhlbSBpcyB1c2VkIGJ5IG1hbnkgbGF5b3V0IHRlc3RzLgotICAgIGZvbnRGaWxlUGF0aHMuYXBw
ZW5kKFN0cmluZyhGT05UU19DT05GX0RJUiAiL0FIRU1fX19fLlRURiIpKTsKKyAgICBmb250Rmls
ZVBhdGhzLmFwcGVuZChDU3RyaW5nKEZPTlRTX0NPTkZfRElSICIvQUhFTV9fX18uVFRGIikpOwog
ICAgIC8vIEEgZm9udCB3aXRoIG5vIHZhbGlkIEZvbnRjb25maWcgZW5jb2RpbmcgdG8gdGVzdCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0NTIKLSAgICBmb250Rmls
ZVBhdGhzLmFwcGVuZChTdHJpbmcoRk9OVFNfQ09ORl9ESVIgIi9Gb250V2l0aE5vVmFsaWRFbmNv
ZGluZy5mb24iKSk7CisgICAgZm9udEZpbGVQYXRocy5hcHBlbmQoQ1N0cmluZyhGT05UU19DT05G
X0RJUiAiL0ZvbnRXaXRoTm9WYWxpZEVuY29kaW5nLmZvbiIpKTsKIAogICAgIGZvciAoaW50IGkg
PSAxOyBpIDw9IDk7IGkrKykgewotICAgICAgICBjaGFyIGZvbnRQYXRoW1BBVEhfTUFYXTsKLSAg
ICAgICAgc25wcmludGYoZm9udFBhdGgsIFBBVEhfTUFYIC0gMSwKLSAgICAgICAgICAgICAgICAg
Rk9OVFNfQ09ORl9ESVIgIi8uLi8uLi9mb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyJWkwMC50dGYi
LCBpKTsKLQotICAgICAgICBmb250RmlsZVBhdGhzLmFwcGVuZChTdHJpbmcoZm9udFBhdGgpKTsK
KyAgICAgICAgY2hhciBmb250UGF0aFtFSU5BX1BBVEhfTUFYXTsKKyAgICAgICAgc25wcmludGYo
Zm9udFBhdGgsIEVJTkFfUEFUSF9NQVggLSAxLCBGT05UU19DT05GX0RJUiAiLy4uLy4uL2ZvbnRz
L1dlYktpdFdlaWdodFdhdGNoZXIlaTAwLnR0ZiIsIGkpOworICAgICAgICBmb250RmlsZVBhdGhz
LmFwcGVuZChDU3RyaW5nKGZvbnRQYXRoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZvbnRGaWxl
UGF0aHM7CiB9CiAKLXN0YXRpYyBib29sIGFkZEZvbnREaXJlY3RvcnkoY29uc3QgQ1N0cmluZyYg
Zm9udERpcmVjdG9yeSwgRmNDb25maWcqIGNvbmZpZykKK3N0YXRpYyB2b2lkIGFkZEZvbnREaXJl
Y3RvcnkoY29uc3QgQ1N0cmluZyYgZm9udERpcmVjdG9yeSwgRmNDb25maWcqIGNvbmZpZykKIHsK
LSAgICBjb25zdCBjaGFyKiBwYXRoID0gZm9udERpcmVjdG9yeS5kYXRhKCk7CisgICAgY29uc3Qg
Y2hhciogZm9udFBhdGggPSBmb250RGlyZWN0b3J5LmRhdGEoKTsKKyAgICBpZiAoIWZvbnRQYXRo
IHx8ICFGY0NvbmZpZ0FwcEZvbnRBZGREaXIoY29uZmlnLCByZWludGVycHJldF9jYXN0PGNvbnN0
IEZjQ2hhcjgqPihmb250UGF0aCkpKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5v
dCBhZGQgZm9udCBkaXJlY3RvcnkgJXMhXG4iLCBmb250UGF0aCk7Cit9CiAKLSAgICBpZiAoIWVj
b3JlX2ZpbGVfaXNfZGlyKHBhdGgpCi0gICAgICAgIHx8ICFGY0NvbmZpZ0FwcEZvbnRBZGREaXIo
Y29uZmlnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihwYXRoKSkpIHsKLSAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgYWRkIGZvbnQgZGlyZWN0b3J5ICVzIVxuIiwg
cGF0aCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKK3N0YXRpYyB2b2lkIGFkZEZvbnRGaWxlcyhj
b25zdCBWZWN0b3I8Q1N0cmluZz4mIGZvbnRGaWxlcywgRmNDb25maWcqIGNvbmZpZykKK3sKKyAg
ICBWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0LCBlbmQgPSBmb250RmlsZXMuZW5k
KCk7CisgICAgZm9yIChpdCA9IGZvbnRGaWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgY29uc3QgY2hhciogZmlsZVBhdGggPSAoKml0KS5kYXRhKCk7CisgICAgICAgIGlm
ICghRmNDb25maWdBcHBGb250QWRkRmlsZShjb25maWcsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
RmNDaGFyOCo+KGZpbGVQYXRoKSkpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxk
IG5vdCBsb2FkIGZvbnQgYXQgJXMhXG4iLCBmaWxlUGF0aCk7CiAgICAgfQotICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhZGRGb250RmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGZvbnRGaWxlcywgRmNDb25maWcqIGNvbmZpZykKK3N0YXRpYyBDU3RyaW5nIGdldEN1c3RvbUJ1
aWxkRGlyKCkKIHsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGZvbnRGaWxlcy5iZWdpbigpOyBpdCAhPSBmb250RmlsZXMuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgY29uc3QgQ1N0cmluZyBjdXJyZW50RmlsZSA9ICgqaXQpLnV0ZjgoKTsKLSAgICAgICAgY29u
c3QgY2hhciogcGF0aCA9IGN1cnJlbnRGaWxlLmRhdGEoKTsKKyAgICBpZiAoY29uc3QgY2hhciog
dXNlckNob3NlbkJ1aWxkRGlyID0gZ2V0ZW52KCJXRUJLSVRPVVRQVVRESVIiKSkgeworICAgICAg
ICBpZiAoZWNvcmVfZmlsZV9pc19kaXIodXNlckNob3NlbkJ1aWxkRGlyKSkKKyAgICAgICAgICAg
IHJldHVybiB1c2VyQ2hvc2VuQnVpbGREaXI7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0VC
S0lUT1VUUFVURElSIHNldCB0byAnJXMnLCBidXQgcGF0aCBkb2Vzbid0IGV4aXN0LlxuIiwgdXNl
ckNob3NlbkJ1aWxkRGlyKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRB
ZGRGaWxlKGNvbmZpZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4ocGF0aCkpKQot
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgbG9hZCBmb250IGF0ICVzIVxu
IiwgcGF0aCk7CisgICAgcmV0dXJuIENTdHJpbmcoKTsKK30KKworc3RhdGljIENTdHJpbmcgZ2V0
UGxhdGZvcm1Gb250c1BhdGgoKQoreworICAgIENTdHJpbmcgY3VzdG9tQnVpbGREaXIgPSBnZXRD
dXN0b21CdWlsZERpcigpOworICAgIGlmICghY3VzdG9tQnVpbGREaXIuaXNOdWxsKCkpIHsKKyAg
ICAgICAgQ1N0cmluZyBmb250c1BhdGggPSBidWlsZFBhdGgoY3VzdG9tQnVpbGREaXIuZGF0YSgp
LCAiRGVwZW5kZW5jaWVzIiwgIlJvb3QiLCAid2Via2l0Z3RrLXRlc3QtZm9udHMiLCAwKTsKKyAg
ICAgICAgaWYgKCFlY29yZV9maWxlX2V4aXN0cyhmb250c1BhdGguZGF0YSgpKSkKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiV0VCS0lUT1VUUFVURElSIHNldCB0byAnJXMnLCBidXQgY291
bGQgbm90IGxvY2FsIHRlc3QgZm9udHMuXG4iLCBjdXN0b21CdWlsZERpci5kYXRhKCkpOworICAg
ICAgICByZXR1cm4gZm9udHNQYXRoOwogICAgIH0KKworICAgIENTdHJpbmcgZm9udHNQYXRoID0g
Q1N0cmluZyhET1dOTE9BREVEX0ZPTlRTX0RJUik7CisgICAgaWYgKGVjb3JlX2ZpbGVfZXhpc3Rz
KGZvbnRzUGF0aC5kYXRhKCkpKQorICAgICAgICByZXR1cm4gZm9udHNQYXRoOworCisgICAgZnBy
aW50ZihzdGRlcnIsICJDb3VsZCBub3QgbG9jYXRlIHRlc3RzIGZvbnRzLCB0cnkgc2V0dGluZyBX
RUJLSVRPVVRQVVRESVIuXG4iKTsKKyAgICByZXR1cm4gQ1N0cmluZygpOwogfQogCiB2b2lkIGFk
ZEZvbnRzVG9FbnZpcm9ubWVudCgpCkBAIC04OSwxNCArMTI5LDggQEAgdm9pZCBhZGRGb250c1Rv
RW52aXJvbm1lbnQoKQogICAgICAgICBleGl0KDEpOwogICAgIH0KIAotICAgIGlmICghYWRkRm9u
dERpcmVjdG9yeShET1dOTE9BREVEX0ZPTlRTX0RJUiwgY29uZmlnKSkgewotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIk5vbmUgb2YgdGhlIGZvbnQgZGlyZWN0b3JpZXMgY291bGQgYmUgYWRkZWQu
IEVpdGhlciBpbnN0YWxsIHRoZW0gIgotICAgICAgICAgICAgICAgICAgICAgICAgIm9yIGZpbGUg
YSBidWcgYXQgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZyBpZiB0aGV5IGFyZSBpbnN0YWxsZWQgaW4g
IgotICAgICAgICAgICAgICAgICAgICAgICAgImFub3RoZXIgbG9jYXRpb24uXG4iKTsKLSAgICAg
ICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBhZGRGb250RmlsZXMoZ2V0Rm9udEZpbGVzKCksIGNv
bmZpZyk7CisgICAgYWRkRm9udEZpbGVzKGdldENvcmVGb250RmlsZXMoKSwgY29uZmlnKTsKKyAg
ICBhZGRGb250RGlyZWN0b3J5KGdldFBsYXRmb3JtRm9udHNQYXRoKCksIGNvbmZpZyk7CiAKICAg
ICBpZiAoIUZjQ29uZmlnU2V0Q3VycmVudChjb25maWcpKSB7CiAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ291bGQgbm90IHNldCB0aGUgY3VycmVudCBmb250IGNvbmZpZ3VyYXRpb24hXG4iKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>