<?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>115953</bug_id>
          
          <creation_ts>2013-05-10 23:08:16 -0700</creation_ts>
          <short_desc>TextCodecICU complains about ambiguous codec names with current ICU release</short_desc>
          <delta_ts>2013-05-11 17:52:58 -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>WebCore Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>887749</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-10 23:08:16 -0700</bug_when>
    <thetext>ICU has gotten a lot more encoding aliases, and as a result, some of them correspond to multiple internal codecs.

For example, whenever a Korean (windows-949) or a Russian (windows-1251) webpage is opened in a debug build, an ERROR is logged.

I am not aware of any specific examples of breakage, however we probably end up with unexpected versions of codecs as a result. Looking at ICU code, there doesn&apos;t appear to be any preference given to MIME or IANA names over non-standard aliases.

&lt;rdar://problem/13823864&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887752</commentid>
    <comment_count>1</comment_count>
      <attachid>201450</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-10 23:38:27 -0700</bug_when>
    <thetext>Created attachment 201450
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887753</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-10 23:40:46 -0700</bug_when>
    <thetext>Attachment 201450 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/text/TextCodecICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextCodecICU.h&apos;]&quot; exit_code: 1
Source/WebCore/platform/text/TextCodecICU.cpp:96:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/text/TextCodecICU.cpp:99:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/text/TextCodecICU.cpp:102:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/text/TextCodecICU.cpp:104:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/text/TextCodecICU.cpp:190:  canonicalConverterNameForISO_8859_8_I is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/text/TextCodecICU.cpp:207:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/text/TextCodecICU.cpp:208:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/text/TextCodecICU.cpp:211:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 8 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887860</commentid>
    <comment_count>3</comment_count>
      <attachid>201450</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-11 16:29:55 -0700</bug_when>
    <thetext>Comment on attachment 201450
proposed fix

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

It would have been nice to do all the renaming in a separate patch first. The name changes combined with other style changes and behavior changes makes a much harder to review patch.

I’m OK with this, but I also think we could make some significant improvements to make the code more readable.

&gt;&gt; Source/WebCore/platform/text/TextCodecICU.cpp:190
&gt;&gt; +    const char* canonicalConverterNameForISO_8859_8_I = ucnv_getCanonicalName(&quot;ISO-8859-8-I&quot;, &quot;IANA&quot;, &amp;error);
&gt; 
&gt; canonicalConverterNameForISO_8859_8_I is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]

I think you could leave out the underlines in the name of this local variable. Note that it has a small scope so it doesn’t have to have a long name.

Separately, it’s not great that the string &quot;ISO-8859-8-I&quot; is repeated twice in these three lines of code. Would be nice to avoid that.

And there is no “why” comment explaining why this has to be handled differently. Presumably the &quot;MIME&quot; standard name for this is bad and needs to be ignored?

&gt; Source/WebCore/platform/text/TextCodecICU.cpp:198
&gt; +        const char* webStandardName = ucnv_getStandardName(canonicalConverterName, &quot;MIME&quot;, &amp;error);

Not good that this ucnv_getStandardName, first MIME, then IANA, technique is repeated twice in these two functions. Can’t we share the code?

&gt; Source/WebCore/platform/text/TextCodecICU.cpp:206
&gt; +        // Don&apos;t register codecs for overridden encodings.

It worries me that this repeats the list of encodings that are also listed above. Is there a way to guarantee they stay in sync? Maybe even share a table?

&gt; Source/WebCore/platform/text/TextCodecICU.cpp:210
&gt; +            || strcasecmp(webStandardName, &quot;iso-8859-9&quot;) == 0

Why is this one a strcasecmp, but all the others strcmp? Also, historically we mostly steered clear of strcasecmp since it uses a locale-specific concept of case, for the same reason we use toASCIILower instead of tolower.

&gt; Source/WebCore/platform/text/TextCodecICU.cpp:269
&gt; -    m_converterICU = ucnv_open(m_encodingName, &amp;err);
&gt; -#if !LOG_DISABLED
&gt; -    if (err == U_AMBIGUOUS_ALIAS_WARNING)
&gt; -        LOG_ERROR(&quot;ICU ambiguous alias warning for encoding: %s&quot;, m_encodingName);
&gt; -#endif
&gt; +    m_converterICU = ucnv_open(m_canonicalConverterName, &amp;err);
&gt; +    ASSERT(U_SUCCESS(err));

If we do get an error, now we won’t see the error in the log, just that some error occurred, but not which one. Not sure this is an improvement.

&gt; Source/WebCore/platform/text/TextCodecICU.h:46
&gt; +        static PassOwnPtr&lt;TextCodec&gt; create(const TextEncoding&amp;, const void* canonicalConverterName);

Why const void* for the canonical converter name instead of const char*?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887872</commentid>
    <comment_count>4</comment_count>
      <attachid>201450</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-11 17:38:16 -0700</bug_when>
    <thetext>Comment on attachment 201450
proposed fix

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

Thank you for review!

&gt;&gt;&gt; Source/WebCore/platform/text/TextCodecICU.cpp:190
&gt;&gt;&gt; +    const char* canonicalConverterNameForISO_8859_8_I = ucnv_getCanonicalName(&quot;ISO-8859-8-I&quot;, &quot;IANA&quot;, &amp;error);
&gt;&gt; 
&gt;&gt; canonicalConverterNameForISO_8859_8_I is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
&gt; 
&gt; I think you could leave out the underlines in the name of this local variable. Note that it has a small scope so it doesn’t have to have a long name.
&gt; 
&gt; Separately, it’s not great that the string &quot;ISO-8859-8-I&quot; is repeated twice in these three lines of code. Would be nice to avoid that.
&gt; 
&gt; And there is no “why” comment explaining why this has to be handled differently. Presumably the &quot;MIME&quot; standard name for this is bad and needs to be ignored?

Good point, I&apos;ll just use the same canonicalConverterName variable as in the loop below.

A comment above says &quot;See comment above in registerEncodingNames&quot;, which explains that ISO-8859-8 and ISO-8859-8-I are exactly the same encoding, so ICU does not differentiate them at all. But the two encoding names differ in how the text should be displayed (logical vs. visual), so this trick helps us preserve this information for TextEncoding class to use. It&apos;s taken me a while to understand this at first, but I think that the comments explain it well now. It would certainly be nice to find a way to pass this information in a non-hacky way.

&gt;&gt; Source/WebCore/platform/text/TextCodecICU.cpp:198
&gt;&gt; +        const char* webStandardName = ucnv_getStandardName(canonicalConverterName, &quot;MIME&quot;, &amp;error);
&gt; 
&gt; Not good that this ucnv_getStandardName, first MIME, then IANA, technique is repeated twice in these two functions. Can’t we share the code?

I&apos;m actually not sure why we have separate registerEncodingNames and registerCodecs functions.

However, I think that we should stop relying on ICU to provide us with encoding aliases at all, and just hardcode the aliases that we want to support on the Web. It just doesn&apos;t make sense to support all the random names ICU knows about.

Once we do that, the two functions will have much less in common.

&gt;&gt; Source/WebCore/platform/text/TextCodecICU.cpp:206
&gt;&gt; +        // Don&apos;t register codecs for overridden encodings.
&gt; 
&gt; It worries me that this repeats the list of encodings that are also listed above. Is there a way to guarantee they stay in sync? Maybe even share a table?

Yes, this is something I really want to resolve when moving to a hardcoded alias table. I tried adding an assertion in TextEncodingRegistry, but it got tripped when ICU tried to re-register one of our built-in codecs, because names didn&apos;t match (I&apos;ve seen UTF-16 vs. UTF-16LE).

Once we use a hardcoded table, we&apos;ll avoid this class of issues.

&gt;&gt; Source/WebCore/platform/text/TextCodecICU.cpp:210
&gt;&gt; +            || strcasecmp(webStandardName, &quot;iso-8859-9&quot;) == 0
&gt; 
&gt; Why is this one a strcasecmp, but all the others strcmp? Also, historically we mostly steered clear of strcasecmp since it uses a locale-specific concept of case, for the same reason we use toASCIILower instead of tolower.

Historically, we needed a case-insensitive comparison just here because of a change in ICU. I&apos;ll add a FIXME about how strcasecmp is not the right function for this.

&gt;&gt; Source/WebCore/platform/text/TextCodecICU.cpp:269
&gt;&gt; +    ASSERT(U_SUCCESS(err));
&gt; 
&gt; If we do get an error, now we won’t see the error in the log, just that some error occurred, but not which one. Not sure this is an improvement.

Both LOG_ERROR and ASSERT are debug only, so the error will be visible in debugger once one attaches to the process before crashing.

I didn&apos;t quite realize that we used to silently ignore all other errors. This aspect code was (and remains) somewhat broken - one caller of createICUConverter asserts that it succeeded, while another logs an error in debug builds, and returns an empty result.

&gt;&gt; Source/WebCore/platform/text/TextCodecICU.h:46
&gt;&gt; +        static PassOwnPtr&lt;TextCodec&gt; create(const TextEncoding&amp;, const void* canonicalConverterName);
&gt; 
&gt; Why const void* for the canonical converter name instead of const char*?

This function&apos;s type has to be NewTextCodecFunction, as it&apos;s passed to registrar.

    typedef PassOwnPtr&lt;TextCodec&gt; (*NewTextCodecFunction)(const TextEncoding&amp;, const void* additionalData);
    typedef void (*TextCodecRegistrar)(const char* name, NewTextCodecFunction, const void* additionalData);

The reason why we can&apos;t use const char* everywhere is that TextCodecMac uses a different type of additional data (TECTextEncodingID*)

Perhaps it would be less confusing if I called the argument additionalData, and only renamed to canonicalConverterName when casting. I&apos;ll make this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887874</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-11 17:52:58 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r149947&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201450</attachid>
            <date>2013-05-10 23:38:27 -0700</date>
            <delta_ts>2013-05-11 17:38:16 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>ICUCanonicalEncoderName.txt</filename>
            <type>text/plain</type>
            <size>14561</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0OTkyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEzLTA1LTEwICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8x
MzgyMzg2ND4gVGV4dENvZGVjSUNVIGNvbXBsYWlucyBhYm91dCBhbWJpZ3VvdXMgY29kZWMgbmFt
ZXMgd2l0aCBjdXJyZW50IElDVSByZWxlYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU5NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTdG9yZSBhbmQgdXNlIGNhbm9uaWNhbCBjb252ZXJ0ZXIgbmFt
ZSB0byBjcmVhdGUgY29udmVydGVycy4KKworICAgICAgICBBcyBhIHNpZGUgZWZmZWN0LCB3ZSBu
b3cgYWN0dWFsbHkgcmV1c2UgY2FjaGVkIGNvbnZlcnRlcnMgLSBwcmV2aW91c2x5IHdlIHdvdWxk
IGNvbXBhcmUKKyAgICAgICAgYSBzdGFuZGFyZCBlbmNvZGluZyBuYW1lIHRvIGludGVybmFsIGNh
bm9uaWNhbCBvbmUsIHdoaWNoIHdvdWxkIHJhcmVseSBtYXRjaC4KKworICAgICAgICAqIHBsYXRm
b3JtL3RleHQvVGV4dENvZGVjSUNVLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNJQ1UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjSUNVOjpjcmVhdGUpOiBQYXNz
IGNhbm9uaWNhbCBJQ1UgY29udmVydGVyIG5hbWUgdG8gY29uc3RydWN0b3IuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyk6IAorICAgICAgICAg
ICAgLSBVcGRhdGVkIHRlcm1pbm9sb2d5LgorICAgICAgICAgICAgLSBBZGRlZCBhIGNvbW1lbnQg
dGhhdCBzcGVjaWFsIGNhc2VzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgYmV0d2VlbiByZWdpc3Rl
ckVuY29kaW5nTmFtZXMKKyAgICAgICAgICAgIGFuZCByZWdpc3RlckNvZGVjcy4KKyAgICAgICAg
ICAgIC0gTW92ZWQgbWFjY3lyaWxsaWMgYWxpYXMgdG8gYSBjb3JyZWN0IHNlY3Rpb24uIEl0J3Mg
bm90IHByZXNlbnQgaW4gSUNVIGV2ZW4gdG9kYXkuCisgICAgICAgICAgICAtIENoYW5nZWQgYSBm
ZXcgYWxpYXNlcyB0byBhY3R1YWxseSBtYXAgdG8gc3RhbmRhcmQgbmFtZSwgbm90IHRvIGFuIG92
ZXJyaWRkZW4gb25lCisgICAgICAgICAgICAodGhpcyBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvciBz
aW5jZSBhZGRUb1RleHRFbmNvZGluZ05hbWVNYXAgbG9va3MgdXAgY2Fub25pY2FsCisgICAgICAg
ICAgICBuYW1lLCBidXQgaXMgY2xlYXJlcikuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNJ
Q1U6OnJlZ2lzdGVyQ29kZWNzKTogU3RvcmUgYSBjb252ZXJ0ZXIgbmFtZSB0byB1c2Ugd2l0aCBl
YWNoCisgICAgICAgIGNhbm9uaWNhbCBlbmNvZGluZyBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENvZGVjSUNVOjpUZXh0Q29kZWNJQ1UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDb2RlY0lDVTo6cmVsZWFzZUlDVUNvbnZlcnRlcik6IFJlc2V0IHRoZSBjb252ZXJ0ZXIgdG8g
cmVtb3ZlIGFueQorICAgICAgICBsZWZ0b3ZlciBkYXRhLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENvZGVjSUNVOjpjcmVhdGVJQ1VDb252ZXJ0ZXIpOiAKKyAgICAgICAgICAgIC0gQ29tcGFyZSBj
b252ZXJ0ZXIgbmFtZSB0byBjb252ZXJ0ZXIgbmFtZSwgbm90IHRvIGFub3RoZXIgYWxpYXMgbmFt
ZS4KKyAgICAgICAgICAgIC0gVXNlIHByb3BlciBzdHJpbmcgY29tcGFyaXNvbiBpbnN0ZWFkIG9m
IHBvaW50ZXIgY29tcGFyaXNvbi4KKyAgICAgICAgICAgIC0gV2hlbiBjcmVhdGluZyBhIGNvbnZl
cnRlciwgYXNzZXJ0IHRoYXQgdGhlIG5hbWUgaXMgbm90IGFtYmlnb3VzIC0gY2Fub25pY2FsCisg
ICAgICAgICAgICBjb252ZXJ0ZXIgbmFtZXMgc2hvdWxkIG5ldmVyIGJlLCBvdGhlcndpc2UgdGhl
cmUgd291bGQgYmUgbm8gd2F5IHRvIGNyZWF0ZQorICAgICAgICAgICAgdGhlIGNvbnZlcnRlciB3
aXRob3V0IGFtYmlndWl0eS4KKwogMjAxMy0wNS0xMCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFw
QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM2NjY0MTI+IENsZWFuIHVw
IHNvbWUgZWRnZSBjYXNlcyBvZiBVUkwgcGFyc2luZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAJKHJldmlzaW9uIDE0OTkyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsMTAgKzU3LDEwIEBAIHN0YXRpYyBVQ29udmVydGVyKiYgY2FjaGVkQ29udmVydGVy
SUNVKCkKICAgICByZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmNhY2hlZENvbnZlcnRlcklDVSgp
LmNvbnZlcnRlcjsKIH0KIAotUGFzc093blB0cjxUZXh0Q29kZWM+IFRleHRDb2RlY0lDVTo6Y3Jl
YXRlKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZvaWQqKQorUGFzc093blB0
cjxUZXh0Q29kZWM+IFRleHRDb2RlY0lDVTo6Y3JlYXRlKGNvbnN0IFRleHRFbmNvZGluZyYgZW5j
b2RpbmcsIGNvbnN0IHZvaWQqIGNhbm9uaWNhbENvbnZlcnRlck5hbWUpCiB7Ci0gICAgLy8gVGV4
dEVuY29kaW5nIG5hbWUgaXMgYWx3YXlzIG9uZSBmcm9tIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNv
ZGluZ05hbWUsIGd1YXJhbnRlZWQgdG8gbmV2ZXIgYmUgZGVsZXRlZC4KLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFRleHRDb2RlY0lDVShlbmNvZGluZy5uYW1lKCkpKTsKKyAgICAvLyBOYW1lIHN0
cmluZ3MgYXJlIHBlcnNpc3RlbnRseSBrZXB0IGluIFRleHRFbmNvZGluZ1JlZ2lzdHJ5IG1hcHMs
IHNvIHRoZXkgYXJlIG5ldmVyIGRlbGV0ZWQuCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0
Q29kZWNJQ1UoZW5jb2RpbmcubmFtZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oY2Fub25p
Y2FsQ29udmVydGVyTmFtZSkpKTsKIH0KIAogdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRW5j
b2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQpAQCAtNzEsNjEgKzcx
LDY0IEBAIHZvaWQgVGV4dENvZGVjSUNVOjpyZWdpc3RlckVuY29kaW5nTmFtZXMKICAgICAvLyBh
cGFydDsgSUNVIHRyZWF0cyB0aGVzZSBuYW1lcyBhcyBzeW5vbnltcy4KICAgICByZWdpc3RyYXIo
IklTTy04ODU5LTgtSSIsICJJU08tODg1OS04LUkiKTsKIAotICAgIGludDMyX3QgbnVtRW5jb2Rp
bmdzID0gdWNudl9jb3VudEF2YWlsYWJsZSgpOwotICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8
IG51bUVuY29kaW5nczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSB1Y252X2dl
dEF2YWlsYWJsZU5hbWUoaSk7CisgICAgaW50MzJfdCBudW1Db252ZXJ0ZXJzID0gdWNudl9jb3Vu
dEF2YWlsYWJsZSgpOworICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG51bUNvbnZlcnRlcnM7
ICsraSkgeworICAgICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lID0gdWNu
dl9nZXRBdmFpbGFibGVOYW1lKGkpOwogICAgICAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJP
X0VSUk9SOwogICAgICAgICAvLyBUcnkgTUlNRSBiZWZvcmUgdHJ5aW5nIElBTkEgdG8gcGljayB1
cCBjb21tb25seSB1c2VkIG5hbWVzIGxpa2UKICAgICAgICAgLy8gJ0VVQy1KUCcgaW5zdGVhZCBv
ZiBob3JyZW5kb3VzbHkgbG9uZyBuYW1lcyBsaWtlIAogICAgICAgICAvLyAnRXh0ZW5kZWRfVU5J
WF9Db2RlX1BhY2tlZF9Gb3JtYXRfZm9yX0phcGFuZXNlJy4gCi0gICAgICAgIGNvbnN0IGNoYXIq
IHN0YW5kYXJkTmFtZSA9IHVjbnZfZ2V0U3RhbmRhcmROYW1lKG5hbWUsICJNSU1FIiwgJmVycm9y
KTsKLSAgICAgICAgaWYgKCFVX1NVQ0NFU1MoZXJyb3IpIHx8ICFzdGFuZGFyZE5hbWUpIHsKKyAg
ICAgICAgY29uc3QgY2hhciogd2ViU3RhbmRhcmROYW1lID0gdWNudl9nZXRTdGFuZGFyZE5hbWUo
Y2Fub25pY2FsQ29udmVydGVyTmFtZSwgIk1JTUUiLCAmZXJyb3IpOworICAgICAgICBpZiAoIVVf
U1VDQ0VTUyhlcnJvcikgfHwgIXdlYlN0YW5kYXJkTmFtZSkgewogICAgICAgICAgICAgZXJyb3Ig
PSBVX1pFUk9fRVJST1I7CiAgICAgICAgICAgICAvLyBUcnkgSUFOQSB0byBwaWNrIHVwICd3aW5k
b3dzLTEyeHgnIGFuZCBvdGhlciBuYW1lcwogICAgICAgICAgICAgLy8gd2hpY2ggYXJlIG5vdCBw
cmVmZXJyZWQgTUlNRSBuYW1lcyBidXQgYXJlIHdpZGVseSB1c2VkLiAKLSAgICAgICAgICAgIHN0
YW5kYXJkTmFtZSA9IHVjbnZfZ2V0U3RhbmRhcmROYW1lKG5hbWUsICJJQU5BIiwgJmVycm9yKTsK
LSAgICAgICAgICAgIGlmICghVV9TVUNDRVNTKGVycm9yKSB8fCAhc3RhbmRhcmROYW1lKQorICAg
ICAgICAgICAgd2ViU3RhbmRhcmROYW1lID0gdWNudl9nZXRTdGFuZGFyZE5hbWUoY2Fub25pY2Fs
Q29udmVydGVyTmFtZSwgIklBTkEiLCAmZXJyb3IpOworICAgICAgICAgICAgaWYgKCFVX1NVQ0NF
U1MoZXJyb3IpIHx8ICF3ZWJTdGFuZGFyZE5hbWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KIAorICAgICAgICAvLyBBbnkgc3RhbmRhcmQgZW5jb2Rpbmcgb3ZlcnJpZGVz
IHNob3VsZCBtYXRjaCBjaGVja3MgaW4gcmVnaXN0ZXJDb2RlY3MoKSBiZWxvdy4KKwogICAgICAg
ICAvLyAxLiBUcmVhdCBHQjIzMTIgZW5jb2RpbmcgYXMgR0JLIChpdHMgbW9yZSBtb2Rlcm4gc3Vw
ZXJzZXQpLCB0byBtYXRjaCBvdGhlciBicm93c2Vycy4KICAgICAgICAgLy8gMi4gT24gdGhlIFdl
YiwgR0IyMzEyIGlzIGVuY29kZWQgYXMgRVVDLUNOIG9yIEhaLCB3aGlsZSBJQ1UgcHJvdmlkZXMg
YSBuYXRpdmUgZW5jb2RpbmcKICAgICAgICAgLy8gICAgZm9yIGVuY29kaW5nIEdCXzIzMTItODAg
YW5kIHNldmVyYWwgb3RoZXJzLiBTbywgd2UgbmVlZCB0byBvdmVycmlkZSB0aGlzIGJlaGF2aW9y
LCB0b28uCi0gICAgICAgIGlmIChzdHJjbXAoc3RhbmRhcmROYW1lLCAiR0IyMzEyIikgPT0gMCB8
fCBzdHJjbXAoc3RhbmRhcmROYW1lLCAiR0JfMjMxMi04MCIpID09IDApCi0gICAgICAgICAgICBz
dGFuZGFyZE5hbWUgPSAiR0JLIjsKKyAgICAgICAgaWYgKHN0cmNtcCh3ZWJTdGFuZGFyZE5hbWUs
ICJHQjIzMTIiKSA9PSAwIHx8IHN0cmNtcCh3ZWJTdGFuZGFyZE5hbWUsICJHQl8yMzEyLTgwIikg
PT0gMCkKKyAgICAgICAgICAgIHdlYlN0YW5kYXJkTmFtZSA9ICJHQksiOwogICAgICAgICAvLyBT
aW1pbGFybHksIEVVQy1LUiBlbmNvZGluZ3MgYWxsIG1hcCB0byBhbiBleHRlbmRlZCB2ZXJzaW9u
LgotICAgICAgICBlbHNlIGlmIChzdHJjbXAoc3RhbmRhcmROYW1lLCAiS1NDXzU2MDEiKSA9PSAw
IHx8IHN0cmNtcChzdGFuZGFyZE5hbWUsICJFVUMtS1IiKSA9PSAwIHx8IHN0cmNtcChzdGFuZGFy
ZE5hbWUsICJjcDEzNjMiKSA9PSAwKQotICAgICAgICAgICAgc3RhbmRhcmROYW1lID0gIndpbmRv
d3MtOTQ5IjsKKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKHdlYlN0YW5kYXJkTmFtZSwgIktTQ181
NjAxIikgPT0gMCB8fCBzdHJjbXAod2ViU3RhbmRhcmROYW1lLCAiRVVDLUtSIikgPT0gMCB8fCBz
dHJjbXAod2ViU3RhbmRhcmROYW1lLCAiY3AxMzYzIikgPT0gMCkKKyAgICAgICAgICAgIHdlYlN0
YW5kYXJkTmFtZSA9ICJ3aW5kb3dzLTk0OSI7CiAgICAgICAgIC8vIEFuZCBzbyBvbi4KLSAgICAg
ICAgZWxzZSBpZiAoc3RyY2FzZWNtcChzdGFuZGFyZE5hbWUsICJpc28tODg1OS05IikgPT0gMCkg
Ly8gVGhpcyBuYW1lIGlzIHJldHVybmVkIGluIGRpZmZlcmVudCBjYXNlIGJ5IElDVSAzLjIgYW5k
IDMuNi4KLSAgICAgICAgICAgIHN0YW5kYXJkTmFtZSA9ICJ3aW5kb3dzLTEyNTQiOwotICAgICAg
ICBlbHNlIGlmIChzdHJjbXAoc3RhbmRhcmROYW1lLCAiVElTLTYyMCIpID09IDApCi0gICAgICAg
ICAgICBzdGFuZGFyZE5hbWUgPSAid2luZG93cy04NzQiOworICAgICAgICBlbHNlIGlmIChzdHJj
YXNlY21wKHdlYlN0YW5kYXJkTmFtZSwgImlzby04ODU5LTkiKSA9PSAwKSAvLyBUaGlzIG5hbWUg
aXMgcmV0dXJuZWQgaW4gZGlmZmVyZW50IGNhc2UgYnkgSUNVIDMuMiBhbmQgMy42LgorICAgICAg
ICAgICAgd2ViU3RhbmRhcmROYW1lID0gIndpbmRvd3MtMTI1NCI7CisgICAgICAgIGVsc2UgaWYg
KHN0cmNtcCh3ZWJTdGFuZGFyZE5hbWUsICJUSVMtNjIwIikgPT0gMCkKKyAgICAgICAgICAgIHdl
YlN0YW5kYXJkTmFtZSA9ICJ3aW5kb3dzLTg3NCI7CiAKLSAgICAgICAgcmVnaXN0cmFyKHN0YW5k
YXJkTmFtZSwgc3RhbmRhcmROYW1lKTsKKyAgICAgICAgcmVnaXN0cmFyKHdlYlN0YW5kYXJkTmFt
ZSwgd2ViU3RhbmRhcmROYW1lKTsKIAotICAgICAgICB1aW50MTZfdCBudW1BbGlhc2VzID0gdWNu
dl9jb3VudEFsaWFzZXMobmFtZSwgJmVycm9yKTsKKyAgICAgICAgdWludDE2X3QgbnVtQWxpYXNl
cyA9IHVjbnZfY291bnRBbGlhc2VzKGNhbm9uaWNhbENvbnZlcnRlck5hbWUsICZlcnJvcik7CiAg
ICAgICAgIEFTU0VSVChVX1NVQ0NFU1MoZXJyb3IpKTsKICAgICAgICAgaWYgKFVfU1VDQ0VTUyhl
cnJvcikpCiAgICAgICAgICAgICBmb3IgKHVpbnQxNl90IGogPSAwOyBqIDwgbnVtQWxpYXNlczsg
KytqKSB7CiAgICAgICAgICAgICAgICAgZXJyb3IgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogYWxpYXMgPSB1Y252X2dldEFsaWFzKG5hbWUsIGosICZlcnJvcik7
CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYWxpYXMgPSB1Y252X2dldEFsaWFzKGNhbm9u
aWNhbENvbnZlcnRlck5hbWUsIGosICZlcnJvcik7CiAgICAgICAgICAgICAgICAgQVNTRVJUKFVf
U1VDQ0VTUyhlcnJvcikpOwotICAgICAgICAgICAgICAgIGlmIChVX1NVQ0NFU1MoZXJyb3IpICYm
IGFsaWFzICE9IHN0YW5kYXJkTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFyKGFs
aWFzLCBzdGFuZGFyZE5hbWUpOworICAgICAgICAgICAgICAgIGlmIChVX1NVQ0NFU1MoZXJyb3Ip
ICYmIGFsaWFzICE9IHdlYlN0YW5kYXJkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0
cmFyKGFsaWFzLCB3ZWJTdGFuZGFyZE5hbWUpOwogICAgICAgICAgICAgfQogICAgIH0KIAogICAg
IC8vIEFkZGl0aW9uYWwgYWxpYXNlcy4KLSAgICAvLyBUaGVzZSBhcmUgcHJlc2VudCBpbiBtb2Rl
cm4gdmVyc2lvbnMgb2YgSUNVLCBidXQgbm90IGluIElDVSAzLjIgKHNoaXBwZWQgd2l0aCBNYWMg
T1MgWCAxMC40KS4KKyAgICAvLyBtYWNyb21hbiBpcyBwcmVzZW50IGluIG1vZGVybiB2ZXJzaW9u
cyBvZiBJQ1UsIGJ1dCBub3QgaW4gSUNVIDMuMiAoc2hpcHBlZCB3aXRoIE1hYyBPUyBYIDEwLjQp
LgorICAgIC8vIEZJWE1FOiBEbyBhbnkgcG9ydHMgc3RpbGwgdXNlIHN1Y2ggb2xkIHZlcnNpb25z
PwogICAgIHJlZ2lzdHJhcigibWFjcm9tYW4iLCAibWFjaW50b3NoIik7Ci0gICAgcmVnaXN0cmFy
KCJtYWNjeXJpbGxpYyIsICJ4LW1hYy1jeXJpbGxpYyIpOwogCiAgICAgLy8gQWRkaXRpb25hbCBh
bGlhc2VzIHRoYXQgaGlzdG9yaWNhbGx5IHdlcmUgcHJlc2VudCBpbiB0aGUgZW5jb2RpbmcKICAg
ICAvLyB0YWJsZSBpbiBXZWJLaXQgb24gTWFjaW50b3NoIHRoYXQgZG9uJ3Qgc2VlbSB0byBiZSBw
cmVzZW50IGluIElDVS4KICAgICAvLyBQZXJoYXBzIHdlIGNhbiBwcm92ZSB0aGVzZSBhcmUgbm90
IHVzZWQgb24gdGhlIHdlYiBhbmQgcmVtb3ZlIHRoZW0uCiAgICAgLy8gT3IgcGVyaGFwcyB3ZSBj
YW4gZ2V0IHRoZW0gYWRkZWQgdG8gSUNVLgogICAgIHJlZ2lzdHJhcigieC1tYWMtcm9tYW4iLCAi
bWFjaW50b3NoIik7CisgICAgcmVnaXN0cmFyKCJtYWNjeXJpbGxpYyIsICJ4LW1hYy1jeXJpbGxp
YyIpOwogICAgIHJlZ2lzdHJhcigieC1tYWMtdWtyYWluaWFuIiwgIngtbWFjLWN5cmlsbGljIik7
CiAgICAgcmVnaXN0cmFyKCJjbi1iaWc1IiwgIkJpZzUiKTsKICAgICByZWdpc3RyYXIoIngteC1i
aWc1IiwgIkJpZzUiKTsKQEAgLTE1Miw3ICsxNTUsNyBAQCB2b2lkIFRleHRDb2RlY0lDVTo6cmVn
aXN0ZXJFbmNvZGluZ05hbWVzCiAgICAgcmVnaXN0cmFyKCJ4LWNwMTI1MSIsICJ3aW5kb3dzLTEy
NTEiKTsKICAgICByZWdpc3RyYXIoIngtZXVjIiwgIkVVQy1KUCIpOwogICAgIHJlZ2lzdHJhcigi
eC13aW5kb3dzLTk0OSIsICJ3aW5kb3dzLTk0OSIpOwotICAgIHJlZ2lzdHJhcigiS1NDNTYwMSIs
ICJLU0NfNTYwMSIpOworICAgIHJlZ2lzdHJhcigiS1NDNTYwMSIsICJ3aW5kb3dzLTk0OSIpOwog
ICAgIHJlZ2lzdHJhcigieC11aGMiLCAid2luZG93cy05NDkiKTsKICAgICByZWdpc3RyYXIoInNo
aWZ0LWppcyIsICJTaGlmdF9KSVMiKTsKIApAQCAtMTcxLDcgKzE3NCw3IEBAIHZvaWQgVGV4dENv
ZGVjSUNVOjpyZWdpc3RlckVuY29kaW5nTmFtZXMKICAgICByZWdpc3RyYXIoIklTTzg4NTktNyIs
ICJJU08tODg1OS03Iik7CiAgICAgcmVnaXN0cmFyKCJJU084ODU5LTgiLCAiSVNPLTg4NTktOCIp
OwogICAgIHJlZ2lzdHJhcigiSVNPODg1OS04LUkiLCAiSVNPLTg4NTktOC1JIik7Ci0gICAgcmVn
aXN0cmFyKCJJU084ODU5LTkiLCAiSVNPLTg4NTktOSIpOworICAgIHJlZ2lzdHJhcigiSVNPODg1
OS05IiwgIndpbmRvd3MtMTI1NCIpOwogICAgIHJlZ2lzdHJhcigiSVNPODg1OS0xMCIsICJJU08t
ODg1OS0xMCIpOwogICAgIHJlZ2lzdHJhcigiSVNPODg1OS0xMyIsICJJU08tODg1OS0xMyIpOwog
ICAgIHJlZ2lzdHJhcigiSVNPODg1OS0xNCIsICJJU08tODg1OS0xNCIpOwpAQCAtMTgzLDI1ICsx
ODYsNDMgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcwogdm9pZCBU
ZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIp
CiB7CiAgICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUgaW4gcmVnaXN0ZXJFbmNvZGluZ05hbWVzLgot
ICAgIHJlZ2lzdHJhcigiSVNPLTg4NTktOC1JIiwgY3JlYXRlLCAwKTsKLQotICAgIGludDMyX3Qg
bnVtRW5jb2RpbmdzID0gdWNudl9jb3VudEF2YWlsYWJsZSgpOwotICAgIGZvciAoaW50MzJfdCBp
ID0gMDsgaSA8IG51bUVuY29kaW5nczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUg
PSB1Y252X2dldEF2YWlsYWJsZU5hbWUoaSk7Ci0gICAgICAgIFVFcnJvckNvZGUgZXJyb3IgPSBV
X1pFUk9fRVJST1I7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHN0YW5kYXJkTmFtZSA9IHVjbnZfZ2V0
U3RhbmRhcmROYW1lKG5hbWUsICJNSU1FIiwgJmVycm9yKTsKLSAgICAgICAgaWYgKCFVX1NVQ0NF
U1MoZXJyb3IpIHx8ICFzdGFuZGFyZE5hbWUpIHsKKyAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9a
RVJPX0VSUk9SOworICAgIGNvbnN0IGNoYXIqIGNhbm9uaWNhbENvbnZlcnRlck5hbWVGb3JJU09f
ODg1OV84X0kgPSB1Y252X2dldENhbm9uaWNhbE5hbWUoIklTTy04ODU5LTgtSSIsICJJQU5BIiwg
JmVycm9yKTsKKyAgICBBU1NFUlQoVV9TVUNDRVNTKGVycm9yKSk7CisgICAgcmVnaXN0cmFyKCJJ
U08tODg1OS04LUkiLCBjcmVhdGUsIGNhbm9uaWNhbENvbnZlcnRlck5hbWVGb3JJU09fODg1OV84
X0kpOworCisgICAgaW50MzJfdCBudW1Db252ZXJ0ZXJzID0gdWNudl9jb3VudEF2YWlsYWJsZSgp
OworICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG51bUNvbnZlcnRlcnM7ICsraSkgeworICAg
ICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lID0gdWNudl9nZXRBdmFpbGFi
bGVOYW1lKGkpOworICAgICAgICBlcnJvciA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgY29uc3Qg
Y2hhciogd2ViU3RhbmRhcmROYW1lID0gdWNudl9nZXRTdGFuZGFyZE5hbWUoY2Fub25pY2FsQ29u
dmVydGVyTmFtZSwgIk1JTUUiLCAmZXJyb3IpOworICAgICAgICBpZiAoIVVfU1VDQ0VTUyhlcnJv
cikgfHwgIXdlYlN0YW5kYXJkTmFtZSkgewogICAgICAgICAgICAgZXJyb3IgPSBVX1pFUk9fRVJS
T1I7Ci0gICAgICAgICAgICBzdGFuZGFyZE5hbWUgPSB1Y252X2dldFN0YW5kYXJkTmFtZShuYW1l
LCAiSUFOQSIsICZlcnJvcik7Ci0gICAgICAgICAgICBpZiAoIVVfU1VDQ0VTUyhlcnJvcikgfHwg
IXN0YW5kYXJkTmFtZSkKKyAgICAgICAgICAgIHdlYlN0YW5kYXJkTmFtZSA9IHVjbnZfZ2V0U3Rh
bmRhcmROYW1lKGNhbm9uaWNhbENvbnZlcnRlck5hbWUsICJJQU5BIiwgJmVycm9yKTsKKyAgICAg
ICAgICAgIGlmICghVV9TVUNDRVNTKGVycm9yKSB8fCAhd2ViU3RhbmRhcmROYW1lKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIHJlZ2lzdHJhcihzdGFuZGFy
ZE5hbWUsIGNyZWF0ZSwgMCk7CisKKyAgICAgICAgLy8gRG9uJ3QgcmVnaXN0ZXIgY29kZWNzIGZv
ciBvdmVycmlkZGVuIGVuY29kaW5ncy4KKyAgICAgICAgaWYgKHN0cmNtcCh3ZWJTdGFuZGFyZE5h
bWUsICJHQjIzMTIiKSA9PSAwIHx8IHN0cmNtcCh3ZWJTdGFuZGFyZE5hbWUsICJHQl8yMzEyLTgw
IikgPT0gMAorICAgICAgICAgICAgfHwgc3RyY21wKHdlYlN0YW5kYXJkTmFtZSwgIktTQ181NjAx
IikgPT0gMCB8fCBzdHJjbXAod2ViU3RhbmRhcmROYW1lLCAiRVVDLUtSIikgPT0gMAorICAgICAg
ICAgICAgfHwgc3RyY21wKHdlYlN0YW5kYXJkTmFtZSwgImNwMTM2MyIpID09IDAKKyAgICAgICAg
ICAgIHx8IHN0cmNhc2VjbXAod2ViU3RhbmRhcmROYW1lLCAiaXNvLTg4NTktOSIpID09IDAKKyAg
ICAgICAgICAgIHx8IHN0cmNtcCh3ZWJTdGFuZGFyZE5hbWUsICJUSVMtNjIwIikgPT0gMCkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJlZ2lzdHJhcih3ZWJTdGFuZGFyZE5hbWUs
IGNyZWF0ZSwgZmFzdFN0ckR1cChjYW5vbmljYWxDb252ZXJ0ZXJOYW1lKSk7CiAgICAgfQorCisg
ICAgLy8gVGhlc2UgZW5jb2RpbmdzIGN1cnJlbnRseSBkb24ndCBoYXZlIHN0YW5kYXJkIG5hbWVz
LCBzbyB3ZSBuZWVkIHRvIHJlZ2lzdGVyIGVuY29kZXJzIG1hbnVhbGx5LgorICAgIC8vIEZJWE1F
OiBJcyB0aGVyZSBhIGdvb2Qgd2F5IHRvIGRldGVybWluZSB0aGUgbW9zdCB1cCB0byBkYXRlIHZh
cmlhbnQgcHJvZ3JhbW1hdGljYWxseT8KKyAgICByZWdpc3RyYXIoIndpbmRvd3MtODc0IiwgY3Jl
YXRlLCAid2luZG93cy04NzQtMjAwMCIpOworICAgIHJlZ2lzdHJhcigid2luZG93cy05NDkiLCBj
cmVhdGUsICJ3aW5kb3dzLTk0OS0yMDAwIik7CiB9CiAKLVRleHRDb2RlY0lDVTo6VGV4dENvZGVj
SUNVKGNvbnN0IGNoYXIqIGVuY29kaW5nKQorVGV4dENvZGVjSUNVOjpUZXh0Q29kZWNJQ1UoY29u
c3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGNhbm9uaWNhbENvbnZlcnRlck5hbWUpCiAg
ICAgOiBtX2VuY29kaW5nTmFtZShlbmNvZGluZykKKyAgICAsIG1fY2Fub25pY2FsQ29udmVydGVy
TmFtZShjYW5vbmljYWxDb252ZXJ0ZXJOYW1lKQogICAgICwgbV9jb252ZXJ0ZXJJQ1UoMCkKICAg
ICAsIG1fbmVlZHNHQktGYWxsYmFja3MoZmFsc2UpCiB7CkBAIC0yMTgsNiArMjM5LDcgQEAgdm9p
ZCBUZXh0Q29kZWNJQ1U6OnJlbGVhc2VJQ1VDb252ZXJ0ZXIoKQogICAgICAgICBVQ29udmVydGVy
KiYgY2FjaGVkQ29udmVydGVyID0gY2FjaGVkQ29udmVydGVySUNVKCk7CiAgICAgICAgIGlmIChj
YWNoZWRDb252ZXJ0ZXIpCiAgICAgICAgICAgICB1Y252X2Nsb3NlKGNhY2hlZENvbnZlcnRlcik7
CisgICAgICAgIHVjbnZfcmVzZXQobV9jb252ZXJ0ZXJJQ1UpOwogICAgICAgICBjYWNoZWRDb252
ZXJ0ZXIgPSBtX2NvbnZlcnRlcklDVTsKICAgICAgICAgbV9jb252ZXJ0ZXJJQ1UgPSAwOwogICAg
IH0KQEAgLTIyNywxNSArMjQ5LDE1IEBAIHZvaWQgVGV4dENvZGVjSUNVOjpjcmVhdGVJQ1VDb252
ZXJ0ZXIoKSAKIHsKICAgICBBU1NFUlQoIW1fY29udmVydGVySUNVKTsKIAotICAgIG1fbmVlZHNH
QktGYWxsYmFja3MgPSBtX2VuY29kaW5nTmFtZVswXSA9PSAnRycgJiYgbV9lbmNvZGluZ05hbWVb
MV0gPT0gJ0InICYmIG1fZW5jb2RpbmdOYW1lWzJdID09ICdLJyAmJiAhbV9lbmNvZGluZ05hbWVb
M107Ci0KICAgICBVRXJyb3JDb2RlIGVycjsKIAorICAgIG1fbmVlZHNHQktGYWxsYmFja3MgPSAh
c3RyY21wKG1fZW5jb2RpbmdOYW1lLCAiR0JLIik7CisKICAgICBVQ29udmVydGVyKiYgY2FjaGVk
Q29udmVydGVyID0gY2FjaGVkQ29udmVydGVySUNVKCk7CiAgICAgaWYgKGNhY2hlZENvbnZlcnRl
cikgewogICAgICAgICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGNh
Y2hlZE5hbWUgPSB1Y252X2dldE5hbWUoY2FjaGVkQ29udmVydGVyLCAmZXJyKTsKLSAgICAgICAg
aWYgKFVfU1VDQ0VTUyhlcnIpICYmIG1fZW5jb2RpbmdOYW1lID09IGNhY2hlZE5hbWUpIHsKKyAg
ICAgICAgY29uc3QgY2hhciogY2FjaGVkQ29udmVydGVyTmFtZSA9IHVjbnZfZ2V0TmFtZShjYWNo
ZWRDb252ZXJ0ZXIsICZlcnIpOworICAgICAgICBpZiAoVV9TVUNDRVNTKGVycikgJiYgIXN0cmNt
cChtX2Nhbm9uaWNhbENvbnZlcnRlck5hbWUsIGNhY2hlZENvbnZlcnRlck5hbWUpKSB7CiAgICAg
ICAgICAgICBtX2NvbnZlcnRlcklDVSA9IGNhY2hlZENvbnZlcnRlcjsKICAgICAgICAgICAgIGNh
Y2hlZENvbnZlcnRlciA9IDA7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNDMsMTEgKzI2NSw4
IEBAIHZvaWQgVGV4dENvZGVjSUNVOjpjcmVhdGVJQ1VDb252ZXJ0ZXIoKSAKICAgICB9CiAKICAg
ICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgbV9jb252ZXJ0ZXJJQ1UgPSB1Y252X29wZW4obV9l
bmNvZGluZ05hbWUsICZlcnIpOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBpZiAoZXJyID09IFVf
QU1CSUdVT1VTX0FMSUFTX1dBUk5JTkcpCi0gICAgICAgIExPR19FUlJPUigiSUNVIGFtYmlndW91
cyBhbGlhcyB3YXJuaW5nIGZvciBlbmNvZGluZzogJXMiLCBtX2VuY29kaW5nTmFtZSk7Ci0jZW5k
aWYKKyAgICBtX2NvbnZlcnRlcklDVSA9IHVjbnZfb3BlbihtX2Nhbm9uaWNhbENvbnZlcnRlck5h
bWUsICZlcnIpOworICAgIEFTU0VSVChVX1NVQ0NFU1MoZXJyKSk7CiAgICAgaWYgKG1fY29udmVy
dGVySUNVKQogICAgICAgICB1Y252X3NldEZhbGxiYWNrKG1fY29udmVydGVySUNVLCBUUlVFKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAko
cmV2aXNpb24gMTQ5OTI0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNJQ1UuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgflRleHRDb2RlY0lDVSgpOwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgZXhwbGljaXQgVGV4dENvZGVjSUNVKGNvbnN0IGNoYXIqIGVuY29kaW5nKTsKLSAgICAg
ICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5n
JiwgY29uc3Qgdm9pZCopOworICAgICAgICBUZXh0Q29kZWNJQ1UoY29uc3QgY2hhciogZW5jb2Rp
bmcsIGNvbnN0IGNoYXIqIGNhbm9uaWNhbENvbnZlcnRlck5hbWUpOworICAgICAgICBzdGF0aWMg
UGFzc093blB0cjxUZXh0Q29kZWM+IGNyZWF0ZShjb25zdCBUZXh0RW5jb2RpbmcmLCBjb25zdCB2
b2lkKiBjYW5vbmljYWxDb252ZXJ0ZXJOYW1lKTsKIAogICAgICAgICB2aXJ0dWFsIFN0cmluZyBk
ZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9u
RXJyb3IsIGJvb2wmIHNhd0Vycm9yKTsKICAgICAgICAgdmlydHVhbCBDU3RyaW5nIGVuY29kZShj
b25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpOwpAQCAtNTcs
NiArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBz
b3VyY2VMaW1pdCwgaW50MzJfdCogb2Zmc2V0cywgYm9vbCBmbHVzaCwgVUVycm9yQ29kZSYgZXJy
KTsKIAogICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBtX2VuY29kaW5nTmFtZTsKKyAgICAgICAg
Y29uc3QgY2hhciogY29uc3QgbV9jYW5vbmljYWxDb252ZXJ0ZXJOYW1lOwogICAgICAgICBtdXRh
YmxlIFVDb252ZXJ0ZXIqIG1fY29udmVydGVySUNVOwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9u
ZWVkc0dCS0ZhbGxiYWNrczsKICAgICB9Owo=
</data>
<flag name="review"
          id="222776"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>