<?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>180537</bug_id>
          
          <creation_ts>2017-12-07 11:34:40 -0800</creation_ts>
          <short_desc>YARR: Coalesce constructed character classes</short_desc>
          <delta_ts>2022-02-27 23:30:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Other</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>
          
          <blocked>179230</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1379187</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-12-07 11:34:40 -0800</bug_when>
    <thetext>Currently when we construct a character class like [abcde], we end up with a check for each character instead of characters in the range of a..e.  It is also common for RegExp&apos;s to be written with something like [\s\S] when the programmer really wanted a . with the newly added &apos;s&apos;, aka dotAll flag.  In that case we perform lots of individual character and range checks.

Instead we should coalesce characters and ranges when constructing a character class to reduce the resulting checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379188</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-07 11:35:39 -0800</bug_when>
    <thetext>&lt;rdar://problem/35914557&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379218</commentid>
    <comment_count>2</comment_count>
      <attachid>328716</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-12-07 12:35:54 -0800</bug_when>
    <thetext>Created attachment 328716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379219</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-07 12:38:23 -0800</bug_when>
    <thetext>Attachment 328716 did not pass style-queue:


ERROR: Source/JavaScriptCore/yarr/YarrPattern.cpp:406:  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: 1 in 5 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>1379598</commentid>
    <comment_count>4</comment_count>
      <attachid>328716</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-12-08 09:30:03 -0800</bug_when>
    <thetext>Comment on attachment 328716
Patch

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

I&apos;m not an expert in this code, but looks fine overall. Minor comments.

&gt; Source/JavaScriptCore/yarr/YarrPattern.cpp:286
&gt; +                    if (pos + index &gt; 0 &amp;&amp; matches[pos + index - 1] == ch - 1) {

pos and index are both unsigned, so this is just checking that it&apos;s non-zero? Or was the intent to capture wraparound as well?

&gt; Source/JavaScriptCore/yarr/YarrPattern.cpp:358
&gt; +        // each iteration of the loop we will either remove something from the list, or break the loop.

Break the loop, or just break out of it?

&gt; Source/JavaScriptCore/yarr/YarrPattern.cpp:407
&gt; +            &amp;&amp; m_rangesUnicode[0].begin == 0x80 &amp;&amp; m_rangesUnicode[0].end == 0x10ffff)

I don&apos;t get the Unicode range comparison. That&apos;s the general non-ASCII range, can the user specify invalid codepoint ranges?

Or put another way, when it this range *not* the Unicode range?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379614</commentid>
    <comment_count>5</comment_count>
      <attachid>328716</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-12-08 10:15:09 -0800</bug_when>
    <thetext>Comment on attachment 328716
Patch

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

&gt;&gt; Source/JavaScriptCore/yarr/YarrPattern.cpp:286
&gt;&gt; +                    if (pos + index &gt; 0 &amp;&amp; matches[pos + index - 1] == ch - 1) {
&gt; 
&gt; pos and index are both unsigned, so this is just checking that it&apos;s non-zero? Or was the intent to capture wraparound as well?

Just checking that it&apos;s non-zero.  Due to the range of character values (0..0x10ffff), we can&apos;t get close to wrapping around even if there was one character per range.

&gt;&gt; Source/JavaScriptCore/yarr/YarrPattern.cpp:358
&gt;&gt; +        // each iteration of the loop we will either remove something from the list, or break the loop.
&gt; 
&gt; Break the loop, or just break out of it?

Break *out of* the loop.

&gt;&gt; Source/JavaScriptCore/yarr/YarrPattern.cpp:407
&gt;&gt; +            &amp;&amp; m_rangesUnicode[0].begin == 0x80 &amp;&amp; m_rangesUnicode[0].end == 0x10ffff)
&gt; 
&gt; I don&apos;t get the Unicode range comparison. That&apos;s the general non-ASCII range, can the user specify invalid codepoint ranges?
&gt; 
&gt; Or put another way, when it this range *not* the Unicode range?

This checks that this character class matches every possible character.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379626</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-12-08 10:27:20 -0800</bug_when>
    <thetext>Committed r225683: &lt;https://trac.webkit.org/changeset/225683&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328716</attachid>
            <date>2017-12-07 12:35:54 -0800</date>
            <delta_ts>2022-02-27 23:30:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>180537.patch</filename>
            <type>text/plain</type>
            <size>15446</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NjQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDE3LTEyLTA3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFlBUlI6IENvYWxlc2NlIGNvbnN0cnVjdGVkIGNoYXJhY3RlciBjbGFzc2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA1MzcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGFkZGluZyBjaGFy
YWN0ZXJzIG9yIGNoYXJhY3RlciByYW5nZXMgdG8gYSBjaGFyYWN0ZXIgY2xhc3MgYmVpbmcgY29u
c3RydWN0ZWQsCisgICAgICAgIHdlIG5vdyBjb2FsZXNjZSBhZGphY2VudCBjaGFyYWN0ZXJzIGFu
ZCBjaGFyYWN0ZXIgcmFuZ2VzLiAgV2hlbiB3ZSBjcmVhdGUgYQorICAgICAgICBjaGFyYWN0ZXIg
Y2xhc3MgYWZ0ZXIgY29uc3RydWN0aW9uIGlzIGNvbXBsZXRlLCB3ZSBkbyBhIGZpbmFsIGNvYWxl
c2NpbmcgcGFzcworICAgICAgICBhY3Jvc3MgdGhlIGNoYXJhY3RlciBsaXN0IGFuZCByYW5nZXMg
dG8gY2F0Y2ggYW55IHJlbWFpbmluZyBjb2FsZXNjaW5nCisgICAgICAgIG9wcG9ydHVuaXRpZXMu
CisKKyAgICAgICAgQWRkZWQgYW4gb3B0aW1pemF0aW9uIGZvciBjaGFyYWN0ZXIgY2xhc3NlcyB0
aGF0IHdpbGwgbWF0Y2ggYW55IGNoYXJhY3Rlci4KKyAgICAgICAgVGhpcyBpcyBzb21ld2hhdCBj
b21tb24gaW4gY29kZSBjcmVhdGVkIGJlZm9yZSB0aGUgL3MgKGRvdEFsbCkgZmxhZyB3YXMgYWRk
ZWQKKyAgICAgICAgdG8gdGhlIGVuZ2luZS4KKworICAgICAgICAqIHlhcnIvWWFyckludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6SW50ZXJwcmV0ZXI6OmNoZWNrQ2hhcmFjdGVy
Q2xhc3MpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NPbmNlKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ZpeGVkKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0dy
ZWVkeSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmJhY2t0cmFja0NoYXJh
Y3RlckNsYXNzTm9uR3JlZWR5KToKKyAgICAgICAgKiB5YXJyL1lhcnJQYXR0ZXJuLmNwcDoKKyAg
ICAgICAgKEpTQzo6WWFycjo6Q2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvcjo6Q2hhcmFjdGVyQ2xh
c3NDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OllhcnI6OkNoYXJhY3RlckNsYXNzQ29uc3Ry
dWN0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6Q2hhcmFjdGVyQ2xhc3NDb25zdHJ1
Y3Rvcjo6Y2hhckNsYXNzKToKKyAgICAgICAgKEpTQzo6WWFycjo6Q2hhcmFjdGVyQ2xhc3NDb25z
dHJ1Y3Rvcjo6YWRkU29ydGVkKToKKyAgICAgICAgKEpTQzo6WWFycjo6Q2hhcmFjdGVyQ2xhc3ND
b25zdHJ1Y3Rvcjo6YWRkU29ydGVkUmFuZ2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpDaGFyYWN0
ZXJDbGFzc0NvbnN0cnVjdG9yOjptZXJnZVJhbmdlc0Zyb20pOgorICAgICAgICAoSlNDOjpZYXJy
OjpDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOjpjb2FsZXNjZVRhYmxlcyk6CisgICAgICAgIChK
U0M6OllhcnI6OkNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3I6OmFueUNoYXJhY3Rlcik6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJQYXR0ZXJuQ29uc3RydWN0b3I6OmF0b21DaGFyYWN0ZXJDbGFz
c0VuZCk6CisgICAgICAgIChKU0M6OllhcnI6OlBhdHRlcm5UZXJtOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6WWFycjo6YW55Y2hhckNyZWF0ZSk6CisgICAgICAgICogeWFyci9ZYXJyUGF0dGVybi5o
OgorICAgICAgICAoSlNDOjpZYXJyOjpDaGFyYWN0ZXJDbGFzczo6Q2hhcmFjdGVyQ2xhc3MpOgor
CiAyMDE3LTEyLTA3ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFNpbXBsaWZ5IGxvZyBjaGFubmVsIGNvbmZpZ3VyYXRpb24gVUkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNwcAkocmV2aXNpb24g
MjI1NjMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDA4LDYgKzQwOCw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
Y2hlY2tDaGFyYWN0ZXJDbGFzcyhDaGFyYWN0ZXJDbGFzcyogY2hhcmFjdGVyQ2xhc3MsIGJvb2wg
aW52ZXJ0LCB1bnNpZ25lZCBuZWdhdGl2ZUlucHV0T2Zmc2V0KQogICAgIHsKKyAgICAgICAgaWYg
KGNoYXJhY3RlckNsYXNzLT5tX2FueUNoYXJhY3RlcikKKyAgICAgICAgICAgIHJldHVybiAhaW52
ZXJ0OworCiAgICAgICAgIGJvb2wgbWF0Y2ggPSB0ZXN0Q2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVy
Q2xhc3MsIGlucHV0LnJlYWRDaGVja2VkKG5lZ2F0aXZlSW5wdXRPZmZzZXQpKTsKICAgICAgICAg
cmV0dXJuIGludmVydCA/ICFtYXRjaCA6IG1hdGNoOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiAyMjU2MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3MSw3ICsx
MTcxLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgICAg
ICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNo
YXJhY3Rlcik7CiAgICAgICAgIC8vIElmIHdlIGFyZSBtYXRjaGluZyB0aGUgImFueSBjaGFyYWN0
ZXIiIGJ1aWx0aW4gY2xhc3Mgd2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlCiAgICAgICAgIC8vIGNo
YXJhY3RlciBhbmQgZG9uJ3QgbmVlZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVk
LgotICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkgfHwgdGVybS0+Y2hhcmFjdGVyQ2xhc3MgIT0g
bV9wYXR0ZXJuLmFueUNoYXJhY3RlckNsYXNzKCkpIHsKKyAgICAgICAgaWYgKHRlcm0tPmludmVy
dCgpIHx8ICF0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+bV9hbnlDaGFyYWN0ZXIpIHsKICAgICAgICAg
ICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIHRlcm0tPmNoYXJh
Y3RlckNsYXNzKTsKIAogICAgICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKQpAQCAtMTIyMCw3
ICsxMjIwLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAg
ICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24g
LSB0ZXJtLT5xdWFudGl0eU1heENvdW50LCBjaGFyYWN0ZXIsIGNvdW50UmVnaXN0ZXIpOwogICAg
ICAgICAvLyBJZiB3ZSBhcmUgbWF0Y2hpbmcgdGhlICJhbnkgY2hhcmFjdGVyIiBidWlsdGluIGNs
YXNzIHdlIG9ubHkgbmVlZCB0byByZWFkIHRoZQogICAgICAgICAvLyBjaGFyYWN0ZXIgYW5kIGRv
bid0IG5lZWQgdG8gbWF0Y2ggYXMgaXQgd2lsbCBhbHdheXMgc3VjY2VlZC4KLSAgICAgICAgaWYg
KHRlcm0tPmludmVydCgpIHx8IHRlcm0tPmNoYXJhY3RlckNsYXNzICE9IG1fcGF0dGVybi5hbnlD
aGFyYWN0ZXJDbGFzcygpKSB7CisgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSB8fCAhdGVybS0+
Y2hhcmFjdGVyQ2xhc3MtPm1fYW55Q2hhcmFjdGVyKSB7CiAgICAgICAgICAgICBtYXRjaENoYXJh
Y3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7CiAK
ICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkKQEAgLTEyNzIsNyArMTI3Miw3IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KICAgICAgICAgICAgIHJlYWRD
aGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVy
KTsKICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBtYXRjaGluZyB0aGUgImFueSBjaGFyYWN0ZXIi
IGJ1aWx0aW4gY2xhc3Mgd2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlCiAgICAgICAgICAgICAvLyBj
aGFyYWN0ZXIgYW5kIGRvbid0IG5lZWQgdG8gbWF0Y2ggYXMgaXQgd2lsbCBhbHdheXMgc3VjY2Vl
ZC4KLSAgICAgICAgICAgIGlmICh0ZXJtLT5jaGFyYWN0ZXJDbGFzcyAhPSBtX3BhdHRlcm4uYW55
Q2hhcmFjdGVyQ2xhc3MoKSkgeworICAgICAgICAgICAgaWYgKCF0ZXJtLT5jaGFyYWN0ZXJDbGFz
cy0+bV9hbnlDaGFyYWN0ZXIpIHsKICAgICAgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNz
KGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7CiAgICAgICAgICAg
ICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICB9CkBAIC0xMzc4LDcg
KzEzNzgsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAg
ICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwg
Y2hhcmFjdGVyKTsKICAgICAgICAgLy8gSWYgd2UgYXJlIG1hdGNoaW5nIHRoZSAiYW55IGNoYXJh
Y3RlciIgYnVpbHRpbiBjbGFzcyB3ZSBvbmx5IG5lZWQgdG8gcmVhZCB0aGUKICAgICAgICAgLy8g
Y2hhcmFjdGVyIGFuZCBkb24ndCBuZWVkIHRvIG1hdGNoIGFzIGl0IHdpbGwgYWx3YXlzIHN1Y2Nl
ZWQuCi0gICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSB8fCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyAh
PSBtX3BhdHRlcm4uYW55Q2hhcmFjdGVyQ2xhc3MoKSkgeworICAgICAgICBpZiAodGVybS0+aW52
ZXJ0KCkgfHwgIXRlcm0tPmNoYXJhY3RlckNsYXNzLT5tX2FueUNoYXJhY3RlcikgewogICAgICAg
ICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS0+Y2hh
cmFjdGVyQ2xhc3MpOwogCiAgICAgICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uY3BwCShyZXZpc2lvbiAyMjU2
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIENoYXJhY3RlckNsYXNzQ29u
c3RydWN0b3IoYm9vbCBpc0Nhc2VJbnNlbnNpdGl2ZSwgQ2Fub25pY2FsTW9kZSBjYW5vbmljYWxN
b2RlKQogICAgICAgICA6IG1faXNDYXNlSW5zZW5zaXRpdmUoaXNDYXNlSW5zZW5zaXRpdmUpCiAg
ICAgICAgICwgbV9oYXNOb25CTVBDaGFyYWN0ZXJzKGZhbHNlKQorICAgICAgICAsIG1fYW55Q2hh
cmFjdGVyKGZhbHNlKQogICAgICAgICAsIG1fY2Fub25pY2FsTW9kZShjYW5vbmljYWxNb2RlKQog
ICAgIHsKICAgICB9CkBAIC01OSw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9tYXRjaGVz
VW5pY29kZS5jbGVhcigpOwogICAgICAgICBtX3Jhbmdlc1VuaWNvZGUuY2xlYXIoKTsKICAgICAg
ICAgbV9oYXNOb25CTVBDaGFyYWN0ZXJzID0gZmFsc2U7CisgICAgICAgIG1fYW55Q2hhcmFjdGVy
ID0gZmFsc2U7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgQ2hhcmFjdGVyQ2xhc3Mq
IG90aGVyKQpAQCAtMjM4LDYgKzI0MCw4IEBAIHB1YmxpYzoKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxDaGFyYWN0ZXJDbGFzcz4gY2hhckNsYXNzKCkKICAgICB7CisgICAgICAgIGNvYWxlc2NlVGFi
bGVzKCk7CisKICAgICAgICAgYXV0byBjaGFyYWN0ZXJDbGFzcyA9IHN0ZDo6bWFrZV91bmlxdWU8
Q2hhcmFjdGVyQ2xhc3M+KCk7CiAKICAgICAgICAgY2hhcmFjdGVyQ2xhc3MtPm1fbWF0Y2hlcy5z
d2FwKG1fbWF0Y2hlcyk7CkBAIC0yNDUsNiArMjQ5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgY2hh
cmFjdGVyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc3dhcChtX21hdGNoZXNVbmljb2RlKTsKICAg
ICAgICAgY2hhcmFjdGVyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZS5zd2FwKG1fcmFuZ2VzVW5pY29k
ZSk7CiAgICAgICAgIGNoYXJhY3RlckNsYXNzLT5tX2hhc05vbkJNUENoYXJhY3RlcnMgPSBoYXNO
b25CTVBDaGFyYWN0ZXJzKCk7CisgICAgICAgIGNoYXJhY3RlckNsYXNzLT5tX2FueUNoYXJhY3Rl
ciA9IGFueUNoYXJhY3RlcigpOworCisgICAgICAgIG1faGFzTm9uQk1QQ2hhcmFjdGVycyA9IGZh
bHNlOworICAgICAgICBtX2FueUNoYXJhY3RlciA9IGZhbHNlOwogCiAgICAgICAgIHJldHVybiBj
aGFyYWN0ZXJDbGFzczsKICAgICB9CkBAIC0yNzAsOSArMjc4LDMxIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpbnQgdmFsID0gbWF0Y2hlc1twb3MraW5kZXhdIC0gY2g7CiAgICAgICAgICAgICBp
ZiAoIXZhbCkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBlbHNlIGlmICh2
YWwgPiAwKQorICAgICAgICAgICAgZWxzZSBpZiAodmFsID4gMCkgeworICAgICAgICAgICAgICAg
IGlmICh2YWwgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGxvID0gY2g7Cisg
ICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgaGkgPSBjaCArIDE7CisgICAgICAgICAgICAgICAg
ICAgIG1hdGNoZXMucmVtb3ZlKHBvcyArIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHBvcyArIGluZGV4ID4gMCAmJiBtYXRjaGVzW3BvcyArIGluZGV4IC0gMV0gPT0gY2ggLSAxKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBsbyA9IGNoIC0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZXMucmVtb3ZlKHBvcyArIGluZGV4IC0gMSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYWRkU29ydGVkUmFuZ2UoaXNBU0NJSShjaCkgPyBt
X3JhbmdlcyA6IG1fcmFuZ2VzVW5pY29kZSwgbG8sIGhpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByYW5nZSA9IGluZGV4
OwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGlmICh2YWwgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBsbyA9IGNo
IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBoaSA9IGNoOworICAgICAgICAgICAg
ICAgICAgICBtYXRjaGVzLnJlbW92ZShwb3MgKyBpbmRleCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChwb3MgKyBpbmRleCArIDEgPCBtYXRjaGVzLnNpemUoKSAmJiBtYXRjaGVzW3BvcyArIGlu
ZGV4ICsgMV0gPT0gY2ggKyAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoaSA9IGNoICsg
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucmVtb3ZlKHBvcyArIGluZGV4ICsg
MSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYWRkU29ydGVk
UmFuZ2UoaXNBU0NJSShjaCkgPyBtX3JhbmdlcyA6IG1fcmFuZ2VzVW5pY29kZSwgbG8sIGhpKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBwb3MgKz0gKGluZGV4KzEpOwogICAgICAgICAgICAgICAgIHJhbmdlIC09IChpbmRl
eCsxKTsKICAgICAgICAgICAgIH0KQEAgLTI4NiwxNyArMzE2LDE3IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGFkZFNvcnRlZFJhbmdlKFZlY3RvcjxDaGFyYWN0ZXJSYW5nZT4mIHJhbmdlcywgVUNo
YXIzMiBsbywgVUNoYXIzMiBoaSkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGVuZCA9IHJhbmdl
cy5zaXplKCk7CisgICAgICAgIHNpemVfdCBlbmQgPSByYW5nZXMuc2l6ZSgpOwogCiAgICAgICAg
IGlmICghVV9JU19CTVAoaGkpKQogICAgICAgICAgICAgbV9oYXNOb25CTVBDaGFyYWN0ZXJzID0g
dHJ1ZTsKIAogICAgICAgICAvLyBTaW1wbGUgbGluZWFyIHNjYW4gLSBJIGRvdWJ0IHRoZXJlIGFy
ZSB0aGF0IG1hbnkgcmFuZ2VzIGFueXdheS4uLgogICAgICAgICAvLyBmZWVsIGZyZWUgdG8gZml4
IHRoaXMgd2l0aCBzb21ldGhpbmcgZmFzdGVyIChlZyBiaW5hcnkgY2hvcCkuCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbmQ7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGVuZDsgKytpKSB7CiAgICAgICAgICAgICAvLyBkb2VzIHRoZSBuZXcgcmFuZ2Ug
ZmFsbCBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGFycmF5CiAgICAgICAgICAg
ICBpZiAoaGkgPCByYW5nZXNbaV0uYmVnaW4pIHsKLSAgICAgICAgICAgICAgICAvLyBvcHRpb25h
bCBvcHRpbWl6YXRpb246IGNvbmNhdGVuYXRlIGFwcGVuZGluZyByYW5nZXM/IC0gbWF5IG5vdCBi
ZSB3b3J0aHdoaWxlLgorICAgICAgICAgICAgICAgIC8vIENvbmNhdGVuYXRlIGFwcGVuZGluZyBy
YW5nZXMuCiAgICAgICAgICAgICAgICAgaWYgKGhpID09IChyYW5nZXNbaV0uYmVnaW4gLSAxKSkg
ewogICAgICAgICAgICAgICAgICAgICByYW5nZXNbaV0uYmVnaW4gPSBsbzsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMzEyLDE4ICszNDIsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIHJhbmdlc1tpXS5iZWdpbiA9IHN0ZDo6bWluKHJhbmdlc1tpXS5iZWdpbiwgbG8pOwog
ICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5lbmQgPSBzdGQ6Om1heChyYW5nZXNbaV0uZW5kLCBo
aSk7CiAKLSAgICAgICAgICAgICAgICAvLyBub3cgY2hlY2sgaWYgdGhlIG5ldyByYW5nZSBjYW4g
c3Vic3VtZSBhbnkgc3Vic2VxdWVudCByYW5nZXMuCi0gICAgICAgICAgICAgICAgdW5zaWduZWQg
bmV4dCA9IGkrMTsKLSAgICAgICAgICAgICAgICAvLyBlYWNoIGl0ZXJhdGlvbiBvZiB0aGUgbG9v
cCB3ZSB3aWxsIGVpdGhlciByZW1vdmUgc29tZXRoaW5nIGZyb20gdGhlIGxpc3QsIG9yIGJyZWFr
IHRoZSBsb29wLgotICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0IDwgcmFuZ2VzLnNpemUoKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VzW25leHRdLmJlZ2luIDw9IChyYW5nZXNb
aV0uZW5kICsgMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IGVudHJ5
IG5vdyBvdmVybGFwcyAvIGNvbmNhdGVuYXRlcyB0aGlzIG9uZS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJhbmdlc1tpXS5lbmQgPSBzdGQ6Om1heChyYW5nZXNbaV0uZW5kLCByYW5nZXNbbmV4
dF0uZW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5yZW1vdmUobmV4dCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1l
cmdlUmFuZ2VzRnJvbShyYW5nZXMsIGkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMzMyLDEzICszNTEsNzYgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmFuZ2VzLmFwcGVuZChDaGFyYWN0ZXJSYW5nZShsbywgaGkpKTsKICAgICB9CiAKKyAgICB2
b2lkIG1lcmdlUmFuZ2VzRnJvbShWZWN0b3I8Q2hhcmFjdGVyUmFuZ2U+JiByYW5nZXMsIHNpemVf
dCBpbmRleCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG5leHQgPSBpbmRleCArIDE7CisKKyAg
ICAgICAgLy8gZWFjaCBpdGVyYXRpb24gb2YgdGhlIGxvb3Agd2Ugd2lsbCBlaXRoZXIgcmVtb3Zl
IHNvbWV0aGluZyBmcm9tIHRoZSBsaXN0LCBvciBicmVhayB0aGUgbG9vcC4KKyAgICAgICAgd2hp
bGUgKG5leHQgPCByYW5nZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAocmFuZ2VzW25leHRd
LmJlZ2luIDw9IChyYW5nZXNbaW5kZXhdLmVuZCArIDEpKSB7CisgICAgICAgICAgICAgICAgLy8g
dGhlIG5leHQgZW50cnkgbm93IG92ZXJsYXBzIC8gY29uY2F0ZW5hdGVzIHdpdGggdGhpcyBvbmUu
CisgICAgICAgICAgICAgICAgcmFuZ2VzW2luZGV4XS5lbmQgPSBzdGQ6Om1heChyYW5nZXNbaW5k
ZXhdLmVuZCwgcmFuZ2VzW25leHRdLmVuZCk7CisgICAgICAgICAgICAgICAgcmFuZ2VzLnJlbW92
ZShuZXh0KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICB9CisKKyAgICB2b2lkIGNvYWxlc2NlVGFibGVzKCkKKyAgICB7CisgICAg
ICAgIGF1dG8gY29hbGVzY2VNYXRjaGVzQW5kUmFuZ2VzID0gWyZdKFZlY3RvcjxVQ2hhcjMyPiYg
bWF0Y2hlcywgVmVjdG9yPENoYXJhY3RlclJhbmdlPiYgcmFuZ2VzKSB7CisKKyAgICAgICAgICAg
IHNpemVfdCBtYXRjaGVzSW5kZXggPSAwOworICAgICAgICAgICAgc2l6ZV90IHJhbmdlc0luZGV4
ID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKG1hdGNoZXNJbmRleCA8IG1hdGNoZXMuc2l6ZSgp
ICYmIHJhbmdlc0luZGV4IDwgcmFuZ2VzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIHdoaWxl
IChtYXRjaGVzSW5kZXggPCBtYXRjaGVzLnNpemUoKSAmJiBtYXRjaGVzW21hdGNoZXNJbmRleF0g
PCByYW5nZXNbcmFuZ2VzSW5kZXhdLmJlZ2luIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlc0luZGV4Kys7CisKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlc0luZGV4IDwgbWF0Y2hl
cy5zaXplKCkgJiYgbWF0Y2hlc1ttYXRjaGVzSW5kZXhdID09IHJhbmdlc1tyYW5nZXNJbmRleF0u
YmVnaW4gLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlc1tyYW5nZXNJbmRleF0uYmVn
aW4gPSBtYXRjaGVzW21hdGNoZXNJbmRleF07CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMu
cmVtb3ZlKG1hdGNoZXNJbmRleCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgd2hpbGUgKG1hdGNoZXNJbmRleCA8IG1hdGNoZXMuc2l6ZSgpICYmIG1hdGNoZXNbbWF0Y2hl
c0luZGV4XSA8IHJhbmdlc1tyYW5nZXNJbmRleF0uZW5kICsgMSkKKyAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hlc0luZGV4Kys7CisKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlc0luZGV4IDwg
bWF0Y2hlcy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXNbbWF0Y2hl
c0luZGV4XSA9PSByYW5nZXNbcmFuZ2VzSW5kZXhdLmVuZCArIDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJhbmdlc1tyYW5nZXNJbmRleF0uZW5kID0gbWF0Y2hlc1ttYXRjaGVzSW5kZXhd
OworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5yZW1vdmUobWF0Y2hlc0luZGV4KTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VSYW5nZXNGcm9tKHJhbmdlcywgcmFuZ2Vz
SW5kZXgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGNoZXNJbmRleCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBjb2FsZXNjZU1hdGNoZXNBbmRSYW5nZXMobV9tYXRjaGVzLCBt
X3Jhbmdlcyk7CisgICAgICAgIGNvYWxlc2NlTWF0Y2hlc0FuZFJhbmdlcyhtX21hdGNoZXNVbmlj
b2RlLCBtX3Jhbmdlc1VuaWNvZGUpOworCisgICAgICAgIGlmICghbV9tYXRjaGVzLnNpemUoKSAm
JiAhbV9tYXRjaGVzVW5pY29kZS5zaXplKCkKKyAgICAgICAgICAgICYmIG1fcmFuZ2VzLnNpemUo
KSA9PSAxICYmIG1fcmFuZ2VzVW5pY29kZS5zaXplKCkgPT0gMQorICAgICAgICAgICAgJiYgbV9y
YW5nZXNbMF0uYmVnaW4gPT0gMCAmJiBtX3Jhbmdlc1swXS5lbmQgPT0gMHg3ZgorICAgICAgICAg
ICAgJiYgbV9yYW5nZXNVbmljb2RlWzBdLmJlZ2luID09IDB4ODAgJiYgbV9yYW5nZXNVbmljb2Rl
WzBdLmVuZCA9PSAweDEwZmZmZikKKyAgICAgICAgICAgIG1fYW55Q2hhcmFjdGVyID0gdHJ1ZTsK
KyAgICB9CisKICAgICBib29sIGhhc05vbkJNUENoYXJhY3RlcnMoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIG1faGFzTm9uQk1QQ2hhcmFjdGVyczsKICAgICB9CiAKLSAgICBib29sIG1faXNDYXNl
SW5zZW5zaXRpdmU7Ci0gICAgYm9vbCBtX2hhc05vbkJNUENoYXJhY3RlcnM7CisgICAgYm9vbCBh
bnlDaGFyYWN0ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYW55Q2hhcmFjdGVyOworICAg
IH0KKworICAgIGJvb2wgbV9pc0Nhc2VJbnNlbnNpdGl2ZSA6IDE7CisgICAgYm9vbCBtX2hhc05v
bkJNUENoYXJhY3RlcnMgOiAxOworICAgIGJvb2wgbV9hbnlDaGFyYWN0ZXIgOiAxOwogICAgIENh
bm9uaWNhbE1vZGUgbV9jYW5vbmljYWxNb2RlOwogCiAgICAgVmVjdG9yPFVDaGFyMzI+IG1fbWF0
Y2hlczsKQEAgLTQ4OSw2ICs1NzEsMTEgQEAgcHVibGljOgogICAgIHZvaWQgYXRvbUNoYXJhY3Rl
ckNsYXNzRW5kKCkKICAgICB7CiAgICAgICAgIGF1dG8gbmV3Q2hhcmFjdGVyQ2xhc3MgPSBtX2No
YXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY2hhckNsYXNzKCk7CisKKyAgICAgICAgaWYgKCFtX2lu
dmVydENoYXJhY3RlckNsYXNzICYmIG5ld0NoYXJhY3RlckNsYXNzLmdldCgpLT5tX2FueUNoYXJh
Y3RlcikgeworICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZS0+bV90ZXJtcy5hcHBlbmQoUGF0dGVy
blRlcm0obV9wYXR0ZXJuLmFueUNoYXJhY3RlckNsYXNzKCksIGZhbHNlKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgbV9hbHRlcm5hdGl2ZS0+bV90ZXJtcy5hcHBl
bmQoUGF0dGVyblRlcm0obmV3Q2hhcmFjdGVyQ2xhc3MuZ2V0KCksIG1faW52ZXJ0Q2hhcmFjdGVy
Q2xhc3MpKTsKICAgICAgICAgbV9wYXR0ZXJuLm1fdXNlckNoYXJhY3RlckNsYXNzZXMuYXBwZW5k
KFdURk1vdmUobmV3Q2hhcmFjdGVyQ2xhc3MpKTsKICAgICB9CkBAIC0xMTgwLDcgKzEyNjcsNyBA
QCB2b2lkIFBhdHRlcm5UZXJtOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgVHlwZUNoYXJhY3RlckNsYXNzOgogICAgICAgICBvdXQucHJpbnQoImNoYXJh
Y3RlciBjbGFzcyAiKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlckNsYXNzID09IHRoaXNQYXR0ZXJu
LT5hbnlDaGFyYWN0ZXJDbGFzcygpKQorICAgICAgICBpZiAoY2hhcmFjdGVyQ2xhc3MtPm1fYW55
Q2hhcmFjdGVyKQogICAgICAgICAgICAgb3V0LnByaW50KCI8YW55IGNoYXJhY3Rlcj4iKTsKICAg
ICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyQ2xhc3MgPT0gdGhpc1BhdHRlcm4tPm5ld2xpbmVDaGFy
YWN0ZXJDbGFzcygpKQogICAgICAgICAgICAgb3V0LnByaW50KCI8bmV3bGluZT4iKTsKQEAgLTEz
ODMsNiArMTQ3MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDaGFyYWN0ZXJDbGFzcz4gYW55Y2hhckMK
ICAgICBjaGFyYWN0ZXJDbGFzcy0+bV9yYW5nZXMuYXBwZW5kKENoYXJhY3RlclJhbmdlKDB4MDAs
IDB4N2YpKTsKICAgICBjaGFyYWN0ZXJDbGFzcy0+bV9yYW5nZXNVbmljb2RlLmFwcGVuZChDaGFy
YWN0ZXJSYW5nZSgweDAwODAsIDB4MTBmZmZmKSk7CiAgICAgY2hhcmFjdGVyQ2xhc3MtPm1faGFz
Tm9uQk1QQ2hhcmFjdGVycyA9IHRydWU7CisgICAgY2hhcmFjdGVyQ2xhc3MtPm1fYW55Q2hhcmFj
dGVyID0gdHJ1ZTsKICAgICByZXR1cm4gY2hhcmFjdGVyQ2xhc3M7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkocmV2aXNpb24gMjI1NjMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpA
QCAtNTksMTIgKzU5LDE0IEBAIHB1YmxpYzoKICAgICBDaGFyYWN0ZXJDbGFzcygpCiAgICAgICAg
IDogbV90YWJsZSgwKQogICAgICAgICAsIG1faGFzTm9uQk1QQ2hhcmFjdGVycyhmYWxzZSkKKyAg
ICAgICAgLCBtX2FueUNoYXJhY3RlcihmYWxzZSkKICAgICB7CiAgICAgfQogICAgIENoYXJhY3Rl
ckNsYXNzKGNvbnN0IGNoYXIqIHRhYmxlLCBib29sIGludmVydGVkKQogICAgICAgICA6IG1fdGFi
bGUodGFibGUpCiAgICAgICAgICwgbV90YWJsZUludmVydGVkKGludmVydGVkKQogICAgICAgICAs
IG1faGFzTm9uQk1QQ2hhcmFjdGVycyhmYWxzZSkKKyAgICAgICAgLCBtX2FueUNoYXJhY3Rlcihm
YWxzZSkKICAgICB7CiAgICAgfQogICAgIENoYXJhY3RlckNsYXNzKHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxVQ2hhcjMyPiBtYXRjaGVzLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Q2hhcmFjdGVyUmFu
Z2U+IHJhbmdlcywgc3RkOjppbml0aWFsaXplcl9saXN0PFVDaGFyMzI+IG1hdGNoZXNVbmljb2Rl
LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Q2hhcmFjdGVyUmFuZ2U+IHJhbmdlc1VuaWNvZGUpCkBA
IC03NSw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3RhYmxlKDApCiAgICAgICAgICwg
bV90YWJsZUludmVydGVkKGZhbHNlKQogICAgICAgICAsIG1faGFzTm9uQk1QQ2hhcmFjdGVycyhm
YWxzZSkKKyAgICAgICAgLCBtX2FueUNoYXJhY3RlcihmYWxzZSkKICAgICB7CiAgICAgfQogCkBA
IC04NCw4ICs4Nyw5IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8Q2hhcmFjdGVyUmFuZ2U+IG1fcmFu
Z2VzVW5pY29kZTsKIAogICAgIGNvbnN0IGNoYXIqIG1fdGFibGU7Ci0gICAgYm9vbCBtX3RhYmxl
SW52ZXJ0ZWQ7Ci0gICAgYm9vbCBtX2hhc05vbkJNUENoYXJhY3RlcnM7CisgICAgYm9vbCBtX3Rh
YmxlSW52ZXJ0ZWQgOiAxOworICAgIGJvb2wgbV9oYXNOb25CTVBDaGFyYWN0ZXJzIDogMTsKKyAg
ICBib29sIG1fYW55Q2hhcmFjdGVyIDogMTsKIH07CiAKIGVudW0gUXVhbnRpZmllclR5cGUgewo=
</data>
<flag name="review"
          id="347883"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
      

    </bug>

</bugzilla>