<?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>229313</bug_id>
          
          <creation_ts>2021-08-19 17:16:46 -0700</creation_ts>
          <short_desc>Intl.DateTimeFormat incorrectly parses patterns with &apos;h&apos; literal</short_desc>
          <delta_ts>2021-08-27 00:15:18 -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>JavaScriptCore</component>
          <version>Safari Technology Preview</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="Devon Govett">govett</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1785637</commentid>
    <comment_count>0</comment_count>
    <who name="Devon Govett">govett</who>
    <bug_when>2021-08-19 17:16:46 -0700</bug_when>
    <thetext>WebKit parses the date/time pattern returned from ICU to do two things: 

1. Determine the `resolvedOptions` - https://github.com/WebKit/WebKit/blob/796333669f054bfaf1e50247d659dfa8834182a7/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp#L318
2. To replace the hour part in the pattern when the `hourCycle` option is specified - https://github.com/WebKit/WebKit/blob/796333669f054bfaf1e50247d659dfa8834182a7/Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp#L486

However, these methods do not take into account that there may be literal parts in quotes which may contain otherwise meaningful symbols which should be ignored. For example, the hour pattern in the `fr` locale has the following pattern: `HH &apos;h&apos;` https://github.com/unicode-org/cldr/blob/018b55eff7ceb389c7e3fc44e2f657eae3b10b38/common/main/fr.xml#L2962. When WebKit parses this pattern, it interprets the `h` as a symbol but it should be ignored instead.

This manifests in two ways:

1. The resolved `hour12` and `hourCycle` options for the French locale (and any other locale with patterns like this) are incorrect. For example, `new Intl.DateTimeFormat(&quot;fr&quot;, {hour: &quot;numeric&quot;, hour12: false}).resolvedOptions().hour12` results in `true` rather than false, even though the date is formatted in 24 hour time: `new Intl.DateTimeFormat(&quot;fr&quot;, {hour: &quot;numeric&quot;, hour12: false}).format(new Date(2021, 2, 3, 23))` results in `23 h`.

2. When specifying the `hourCycle` option, literals in the pattern are replaced resulting in incorrect formatting. For example, `new Intl.DateTimeFormat(&quot;fr&quot;, {hour: &quot;numeric&quot;, hourCycle: &apos;h24&apos;}).format(new Date(2021, 2, 3, 23))` results in `23 k` rather than `23 h`, and `new Intl.DateTimeFormat(&quot;fr&quot;, {hour: &quot;numeric&quot;, hourCycle: &apos;h23&apos;}).format(new Date(2021, 2, 3, 23))` results in `23 H`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786050</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-20 17:09:08 -0700</bug_when>
    <thetext>Nice catch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787884</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-26 17:17:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/82414310&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787947</commentid>
    <comment_count>3</comment_count>
      <attachid>436610</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-26 21:13:26 -0700</bug_when>
    <thetext>Created attachment 436610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787952</commentid>
    <comment_count>4</comment_count>
      <attachid>436610</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-08-26 21:59:23 -0700</bug_when>
    <thetext>Comment on attachment 436610
Patch

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

r=me with comments (about the comments :P)

&gt; Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp:313
&gt; +    // &apos;ICU&apos;&apos;s change&apos; is &quot;ICU&apos;s change&quot; literal text, but even if we split this text into two literal texts,

The use of quotes on this line confused me at first—it would be easier to understand if you quote the first part too, maybe like `&apos;ICU&apos;&apos;s change&apos;`.

&gt; Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp:346
&gt; +    // 2. Literal text, which is output as-is when formatting, and must closely match when
&gt; +    //    parsing. Literal text can include: Any characters other than A..Z and a..z,
&gt; +    //    including spaces and punctuation. Any text between single vertical quotes (&apos;xxxx&apos;),
&gt; +    //    which may include A..Z and a..z as literal text. Two adjacent single vertical quotes
&gt; +    //    (&apos;&apos;), which represent a literal single quote, either inside or outside quoted text.

This is okay but since the last three sentences are intended as a bullet list, it seems like you should write it as one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787961</commentid>
    <comment_count>5</comment_count>
      <attachid>436610</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-27 00:09:48 -0700</bug_when>
    <thetext>Comment on attachment 436610
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp:313
&gt;&gt; +    // &apos;ICU&apos;&apos;s change&apos; is &quot;ICU&apos;s change&quot; literal text, but even if we split this text into two literal texts,
&gt; 
&gt; The use of quotes on this line confused me at first—it would be easier to understand if you quote the first part too, maybe like `&apos;ICU&apos;&apos;s change&apos;`.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/IntlDateTimeFormat.cpp:346
&gt;&gt; +    //    (&apos;&apos;), which represent a literal single quote, either inside or outside quoted text.
&gt; 
&gt; This is okay but since the last three sentences are intended as a bullet list, it seems like you should write it as one.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787962</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-27 00:15:18 -0700</bug_when>
    <thetext>Committed r281688 (241038@main): &lt;https://commits.webkit.org/241038@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436610</attachid>
            <date>2021-08-26 21:13:26 -0700</date>
            <delta_ts>2021-08-26 21:59:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229313-20210826211325.patch</filename>
            <type>text/plain</type>
            <size>12875</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MDYzYjVlNTMwNzNiYmEzOTUzMWZmN2YyOGFjNmJiZDA0YmVjYmRlLi44MjlhMmM2ZmRhODUyZjFm
YjE1MjEyMDliMjRkMjg3YzRmNDBlMTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNyBAQAorMjAyMS0wOC0yNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIEludGwuRGF0ZVRpbWVGb3JtYXQgaW5jb3JyZWN0bHkgcGFyc2VzIHBhdHRl
cm5zIHdpdGggJ2gnIGxpdGVyYWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyOTMxMworICAgICAgICByZGFyOi8vODI0MTQzMTAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGlsZSBEYXRlVGltZUZvcm1h
dCBwYXR0ZXJuIGFuZCBza2VsZXRvbiBjYW4gaW5jbHVkZSBzaW5nbGUtcXVvdGVkIGxpdGVyYWwg
dGV4dHMsCisgICAgICAgIHdlIGFyZSBub3QgcmVzcGVjdGluZyB0aGF0IHdoZW4gcGFyc2luZyB0
aGVtIHRvIGV4dHJhY3QgaW5mb3JtYXRpb24uIEFzIGEgcmVzdWx0LAorICAgICAgICB3ZSBhcmUg
aW5jb3JyZWN0bHkgZXh0cmFjdGluZyBob3VyLWN5Y2xlIGluZm9ybWF0aW9uIGZvciAiZnIiIGxv
Y2FsZSBzaW5jZSBpdCBjYW4KKyAgICAgICAgaW5jbHVkZSAiSEggJ2gnIiBwYXR0ZXJuIHRleHQu
IFRoaXMgcGF0Y2ggZml4ZXMgdGhhdCBieSBza2lwcGluZyBsaXRlcmFsIHRleHQKKyAgICAgICAg
Y29ycmVjdGx5LgorCisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwOgor
ICAgICAgICAoSlNDOjpza2lwTGl0ZXJhbFRleHQpOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRp
bWVGb3JtYXQ6OnNldEZvcm1hdHNGcm9tUGF0dGVybik6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6aG91ckN5Y2xlRnJvbVBhdHRlcm4pOgorICAgICAgICAoSlNDOjpJbnRsRGF0
ZVRpbWVGb3JtYXQ6OnJlcGxhY2VIb3VyQ3ljbGVJblNrZWxldG9uKToKKyAgICAgICAgKEpTQzo6
SW50bERhdGVUaW1lRm9ybWF0OjpyZXBsYWNlSG91ckN5Y2xlSW5QYXR0ZXJuKToKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bExv
Y2FsZS5jcHA6CisgICAgICAgIChKU0M6OkludGxMb2NhbGU6OmhvdXJDeWNsZXMpOgorCiAyMDIx
LTA4LTI2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIHIyODE0
ODUgd2FzIG5vdCBzdWZmaWNpZW50IGluIHdoZXJlIGl0IGNhbGxlZCBkaXNhYmxlUGVlcGhvbGVP
cHRpbWl6YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEYXRlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuY3BwCmluZGV4IGYzYzQxODY4ZjVlZjdjZTAyODY4Yjg3YmMyOWUwMDUw
NTI2M2U3N2MuLjY4YjdjMzdkNzA0YTQzNjViYTEwOTMxZDE2MDFjMjJhNGJhNmE2M2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0
LmNwcApAQCAtMzA2LDEzICszMDYsNTMgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0
aW9uc0FueURhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZQogICAgIHJl
dHVybiBvcHRpb25zOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXI+CitzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIHNraXBMaXRlcmFsVGV4dChjb25zdCBDb250YWluZXImIGNvbnRhaW5l
ciwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBTa2lwIGxpdGVy
YWwgdGV4dC4gV2UgZG8gbm90IHJlY29nbml6ZSAnJyBzaW5nbGUgcXVvdGUgc3BlY2lhbGx5Lgor
ICAgIC8vICdJQ1UnJ3MgY2hhbmdlJyBpcyAiSUNVJ3MgY2hhbmdlIiBsaXRlcmFsIHRleHQsIGJ1
dCBldmVuIGlmIHdlIHNwbGl0IHRoaXMgdGV4dCBpbnRvIHR3byBsaXRlcmFsIHRleHRzLAorICAg
IC8vIHdlIGNhbiBhbnl3YXkgc2tpcCB0aGUgc2FtZSB0aGluZy4KKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIHJldHVybnMgdGhlIGxhc3QgY2hhcmFjdGVyIGluZGV4IHdoaWNoIGNhbiBiZSBjb25zaWRl
cmVkIGFzIGEgbGl0ZXJhbCB0ZXh0LgorICAgIEFTU0VSVChsZW5ndGgpOworICAgIEFTU0VSVChz
dGFydCA8IGxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRhaW5lcltzdGFydF0gPT0gJ1wnJyk7Cisg
ICAgdW5zaWduZWQgaW5kZXggPSBzdGFydDsKKyAgICArK2luZGV4OworICAgIGlmICghKGluZGV4
IDwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGxlbmd0aCAtIDE7CisgICAgZm9yICg7IGluZGV4
IDwgbGVuZ3RoOyArK2luZGV4KSB7CisgICAgICAgIGlmIChjb250YWluZXJbaW5kZXhdID09ICdc
JycpCisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIHJldHVybiBsZW5ndGgg
LSAxOworfQorCiB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6c2V0Rm9ybWF0c0Zyb21QYXR0ZXJu
KGNvbnN0IFN0cmluZ1ZpZXcmIHBhdHRlcm4pCiB7CiAgICAgLy8gR2V0IGFsbCBzeW1ib2xzIGZy
b20gdGhlIHBhdHRlcm4sIGFuZCBzZXQgZm9ybWF0IGZpZWxkcyBhY2NvcmRpbmdseS4KICAgICAv
LyBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zp
ZWxkX1N5bWJvbF9UYWJsZQorICAgIC8vCisgICAgLy8gQSBkYXRlIHBhdHRlcm4gaXMgYSBjaGFy
YWN0ZXIgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgdHdvIHR5cGVzIG9mIGVsZW1lbnRzOgorICAgIC8v
IDEuIFBhdHRlcm4gZmllbGRzLCB3aGljaCByZXBlYXQgYSBzcGVjaWZpYyBwYXR0ZXJuIGNoYXJh
Y3RlciBvbmUgb3IgbW9yZSB0aW1lcy4KKyAgICAvLyAgICBUaGVzZSBmaWVsZHMgYXJlIHJlcGxh
Y2VkIHdpdGggZGF0ZSBhbmQgdGltZSBkYXRhIGZyb20gYSBjYWxlbmRhciB3aGVuIGZvcm1hdHRp
bmcsCisgICAgLy8gICAgb3IgdXNlZCB0byBnZW5lcmF0ZSBkYXRhIGZvciBhIGNhbGVuZGFyIHdo
ZW4gcGFyc2luZy4gQ3VycmVudGx5LCBBLi5aIGFuZCBhLi56IGFyZQorICAgIC8vICAgIHJlc2Vy
dmVkIGZvciB1c2UgYXMgcGF0dGVybiBjaGFyYWN0ZXJzICh1bmxlc3MgdGhleSBhcmUgcXVvdGVk
LCBzZWUgbmV4dCBpdGVtKS4KKyAgICAvLyAgICBUaGUgcGF0dGVybiBjaGFyYWN0ZXJzIGN1cnJl
bnRseSBkZWZpbmVkLCBhbmQgdGhlIG1lYW5pbmcgb2YgZGlmZmVyZW50IGZpZWxkcworICAgIC8v
ICAgIGxlbmd0aHMgZm9yIHRoZW4sIGFyZSBsaXN0ZWQgaW4gdGhlIERhdGUgRmllbGQgU3ltYm9s
IFRhYmxlIGJlbG93LgorICAgIC8vIDIuIExpdGVyYWwgdGV4dCwgd2hpY2ggaXMgb3V0cHV0IGFz
LWlzIHdoZW4gZm9ybWF0dGluZywgYW5kIG11c3QgY2xvc2VseSBtYXRjaCB3aGVuCisgICAgLy8g
ICAgcGFyc2luZy4gTGl0ZXJhbCB0ZXh0IGNhbiBpbmNsdWRlOiBBbnkgY2hhcmFjdGVycyBvdGhl
ciB0aGFuIEEuLlogYW5kIGEuLnosCisgICAgLy8gICAgaW5jbHVkaW5nIHNwYWNlcyBhbmQgcHVu
Y3R1YXRpb24uIEFueSB0ZXh0IGJldHdlZW4gc2luZ2xlIHZlcnRpY2FsIHF1b3RlcyAoJ3h4eHgn
KSwKKyAgICAvLyAgICB3aGljaCBtYXkgaW5jbHVkZSBBLi5aIGFuZCBhLi56IGFzIGxpdGVyYWwg
dGV4dC4gVHdvIGFkamFjZW50IHNpbmdsZSB2ZXJ0aWNhbCBxdW90ZXMKKyAgICAvLyAgICAoJycp
LCB3aGljaCByZXByZXNlbnQgYSBsaXRlcmFsIHNpbmdsZSBxdW90ZSwgZWl0aGVyIGluc2lkZSBv
ciBvdXRzaWRlIHF1b3RlZCB0ZXh0LgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHBhdHRlcm4ubGVu
Z3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIFVDaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSBwYXR0ZXJuW2ldOworICAgICAgICBhdXRvIGN1
cnJlbnRDaGFyYWN0ZXIgPSBwYXR0ZXJuW2ldOworCisgICAgICAgIGlmIChjdXJyZW50Q2hhcmFj
dGVyID09ICdcJycpIHsKKyAgICAgICAgICAgIGkgPSBza2lwTGl0ZXJhbFRleHQocGF0dGVybiwg
aSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAg
aWYgKCFpc0FTQ0lJQWxwaGEoY3VycmVudENoYXJhY3RlcikpCiAgICAgICAgICAgICBjb250aW51
ZTsKIApAQCAtNDYwLDkgKzUwMCwxNiBAQCBpbmxpbmUgSW50bERhdGVUaW1lRm9ybWF0OjpIb3Vy
Q3ljbGUgSW50bERhdGVUaW1lRm9ybWF0Ojpob3VyQ3ljbGVGcm9tU3ltYm9sKFVDaAogICAgIHJl
dHVybiBIb3VyQ3ljbGU6Ok5vbmU7CiB9CiAKLWlubGluZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6Okhv
dXJDeWNsZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmhvdXJDeWNsZUZyb21QYXR0ZXJuKGNvbnN0IFZl
Y3RvcjxVQ2hhciwgMzI+JiBwYXR0ZXJuKQorSW50bERhdGVUaW1lRm9ybWF0OjpIb3VyQ3ljbGUg
SW50bERhdGVUaW1lRm9ybWF0Ojpob3VyQ3ljbGVGcm9tUGF0dGVybihjb25zdCBWZWN0b3I8VUNo
YXIsIDMyPiYgcGF0dGVybikKIHsKLSAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogcGF0dGVybikg
eworICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IHBhdHRlcm4uc2l6ZSgpOyBpIDwg
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBwYXR0ZXJuW2ldOworCisg
ICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ1wnJykgeworICAgICAgICAgICAgaSA9IHNraXBMaXRl
cmFsVGV4dChwYXR0ZXJuLCBpLCBsZW5ndGgpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKwogICAgICAgICBzd2l0Y2ggKGNoYXJhY3RlcikgewogICAgICAgICBjYXNlICdLJzoK
ICAgICAgICAgY2FzZSAnaCc6CkBAIC00NzksNyArNTI2LDE2IEBAIGlubGluZSB2b2lkIEludGxE
YXRlVGltZUZvcm1hdDo6cmVwbGFjZUhvdXJDeWNsZUluU2tlbGV0b24oVmVjdG9yPFVDaGFyLCAz
Mj4mIHNrCiAgICAgVUNoYXIgc2tlbGV0b25DaGFyYWN0ZXIgPSAnSCc7CiAgICAgaWYgKGlzSG91
cjEyKQogICAgICAgICBza2VsZXRvbkNoYXJhY3RlciA9ICdoJzsKLSAgICBmb3IgKGF1dG8mIGNo
YXJhY3RlciA6IHNrZWxldG9uKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVuZ3RoID0g
c2tlbGV0b24uc2l6ZSgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byYgY2hhcmFj
dGVyID0gc2tlbGV0b25baV07CisKKyAgICAgICAgLy8gSUNVIERhdGVUaW1lRm9ybWF0IHNrZWxl
dG9uIGFsc28gaGFzIHNpbmdsZS1xdW90ZWQgbGl0ZXJhbCB0ZXh0LgorICAgICAgICAvLyBodHRw
czovL2dpdGh1Yi5jb20vdW5pY29kZS1vcmcvaWN1L2Jsb2IvbWFpbi9pY3U0Yy9zb3VyY2UvaTE4
bi9kdHB0bmdlbi5jcHAKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXCcnKSB7CisgICAgICAg
ICAgICBpID0gc2tpcExpdGVyYWxUZXh0KHNrZWxldG9uLCBpLCBsZW5ndGgpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKGNoYXJhY3Rlcikgewog
ICAgICAgICBjYXNlICdoJzoKICAgICAgICAgY2FzZSAnSCc6CkBAIC01MTAsNyArNTY2LDE0IEBA
IGlubGluZSB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6cmVwbGFjZUhvdXJDeWNsZUluUGF0dGVy
bihWZWN0b3I8VUNoYXIsIDMyPiYgcGF0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBm
b3IgKGF1dG8mIGNoYXJhY3RlciA6IHBhdHRlcm4pIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
LCBsZW5ndGggPSBwYXR0ZXJuLnNpemUoKTsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1
dG8mIGNoYXJhY3RlciA9IHBhdHRlcm5baV07CisKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAn
XCcnKSB7CisgICAgICAgICAgICBpID0gc2tpcExpdGVyYWxUZXh0KHBhdHRlcm4sIGksIGxlbmd0
aCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAo
Y2hhcmFjdGVyKSB7CiAgICAgICAgIGNhc2UgJ0snOgogICAgICAgICBjYXNlICdoJzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgKaW5k
ZXggOTYzN2YyMDE1Njc4YWI4ZmY2MDcwNGQ2YWZhNzRmMjU4Njc4OWM5Ny4uOGM5ODFiMzYyNTA0
MjEyMDk3YmEzN2Q5YjczY2I1NGZjZDk5N2VkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmgKQEAgLTgzLDYgKzgzLDkgQEAgY2xh
c3MgSW50bERhdGVUaW1lRm9ybWF0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
CiAgICAgc3RhdGljIEludGxEYXRlVGltZUZvcm1hdCogdW53cmFwRm9yT2xkRnVuY3Rpb25zKEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKKyAgICBlbnVtIGNsYXNzIEhvdXJDeWNsZSA6IHVp
bnQ4X3QgeyBOb25lLCBIMTEsIEgxMiwgSDIzLCBIMjQgfTsKKyAgICBzdGF0aWMgSG91ckN5Y2xl
IGhvdXJDeWNsZUZyb21QYXR0ZXJuKGNvbnN0IFZlY3RvcjxVQ2hhciwgMzI+Jik7CisKIHByaXZh
dGU6CiAgICAgSW50bERhdGVUaW1lRm9ybWF0KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwpAQCAtOTIsNyArOTUsNiBAQCBjbGFzcyBJbnRsRGF0ZVRpbWVG
b3JtYXQgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAKICAgICBVRGF0ZUludGVy
dmFsRm9ybWF0KiBjcmVhdGVEYXRlSW50ZXJ2YWxGb3JtYXRJZk5lY2Vzc2FyeShKU0dsb2JhbE9i
amVjdCopOwogCi0gICAgZW51bSBjbGFzcyBIb3VyQ3ljbGUgOiB1aW50OF90IHsgTm9uZSwgSDEx
LCBIMTIsIEgyMywgSDI0IH07CiAgICAgZW51bSBjbGFzcyBXZWVrZGF5IDogdWludDhfdCB7IE5v
bmUsIE5hcnJvdywgU2hvcnQsIExvbmcgfTsKICAgICBlbnVtIGNsYXNzIEVyYSA6IHVpbnQ4X3Qg
eyBOb25lLCBOYXJyb3csIFNob3J0LCBMb25nIH07CiAgICAgZW51bSBjbGFzcyBZZWFyIDogdWlu
dDhfdCB7IE5vbmUsIFR3b0RpZ2l0LCBOdW1lcmljIH07CkBAIC0xMjEsNyArMTIzLDYgQEAgY2xh
c3MgSW50bERhdGVUaW1lRm9ybWF0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
CiAgICAgc3RhdGljIEhvdXJDeWNsZSBob3VyQ3ljbGVGcm9tU3ltYm9sKFVDaGFyKTsKICAgICBz
dGF0aWMgSG91ckN5Y2xlIHBhcnNlSG91ckN5Y2xlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRp
YyBIb3VyQ3ljbGUgaG91ckN5Y2xlRnJvbVBhdHRlcm4oY29uc3QgVmVjdG9yPFVDaGFyLCAzMj4m
KTsKICAgICBzdGF0aWMgdm9pZCByZXBsYWNlSG91ckN5Y2xlSW5Ta2VsZXRvbihWZWN0b3I8VUNo
YXIsIDMyPiYsIGJvb2wgaG91cjEyKTsKICAgICBzdGF0aWMgdm9pZCByZXBsYWNlSG91ckN5Y2xl
SW5QYXR0ZXJuKFZlY3RvcjxVQ2hhciwgMzI+JiwgSG91ckN5Y2xlKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExvY2FsZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxlLmNwcAppbmRleCBjM2IyNmRkODJiNTQwYTFh
ZjQ3MDI3ZjQ0NTlkMTYwNDUyZDMzZjVkLi43NjgzMzQyMTdiYjdiYzE2MDNiMzRkOTdjOWFhZDU5
N2FiMTc2ZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TG9jYWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTG9jYWxl
LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklu
dGxMb2NhbGUuaCIKIAorI2luY2x1ZGUgIkludGxEYXRlVGltZUZvcm1hdC5oIgogI2luY2x1ZGUg
IkludGxPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
PHVuaWNvZGUvdWNhbC5oPgpAQCAtNDEsNiArNDIsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBJbnRsTG9jYWxlOjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEludGxMb2NhbGUpIH07
CiAKK25hbWVzcGFjZSBJbnRsTG9jYWxlSW50ZXJuYWwgeworc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKK30KKwogSW50bExvY2FsZSogSW50bExvY2FsZTo6Y3JlYXRlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgYXV0byogb2JqZWN0ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW50bExvY2FsZT4odm0uaGVhcCkpIEludGxMb2NhbGUodm0s
IHN0cnVjdHVyZSk7CkBAIC02NDMsMzQgKzY0OCwyNyBAQCBKU0FycmF5KiBJbnRsTG9jYWxlOjpo
b3VyQ3ljbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXR0ZXJuLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGN1cnJlbnRDaGFyYWN0ZXIgPSBwYXR0ZXJuW2ld
OwotICAgICAgICBpZiAoIWlzQVNDSUlBbHBoYShjdXJyZW50Q2hhcmFjdGVyKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgIGRhdGFMb2dMbklmKEludGxMb2NhbGVJbnRlcm5hbDo6dmVyYm9z
ZSwgInBhdHRlcm46KCIsIFN0cmluZ1ZpZXcocGF0dGVybi5kYXRhKCksIHBhdHRlcm4uc2l6ZSgp
KSwgIikiKTsKIAotICAgICAgICB3aGlsZSAoaSArIDEgPCBwYXR0ZXJuLnNpemUoKSAmJiBwYXR0
ZXJuW2kgKyAxXSA9PSBjdXJyZW50Q2hhcmFjdGVyKQotICAgICAgICAgICAgKytpOwotCi0gICAg
ICAgIHN3aXRjaCAoY3VycmVudENoYXJhY3RlcikgewotICAgICAgICBjYXNlICdoJzogewotICAg
ICAgICAgICAgZWxlbWVudHMuYXBwZW5kKCJoMTIiX3MpOwotICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVBcnJheUZyb21TdHJpbmdWZWN0b3IoZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKGVsZW1lbnRzKSkpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgJ0gnOiB7Ci0g
ICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoImgyMyJfcyk7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGNyZWF0ZUFycmF5RnJvbVN0cmluZ1ZlY3RvcihnbG9iYWxPYmpl
Y3QsIFdURk1vdmUoZWxlbWVudHMpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSAnayc6IHsK
LSAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZCgiaDI0Il9zKTsKLSAgICAgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlQXJyYXlGcm9tU3RyaW5nVmVjdG9yKGdsb2JhbE9i
amVjdCwgV1RGTW92ZShlbGVtZW50cykpKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlICdLJzog
ewotICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKCJoMTEiX3MpOwotICAgICAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVBcnJheUZyb21TdHJpbmdWZWN0b3IoZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGVsZW1lbnRzKSkpOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIHN3aXRjaCAoSW50bERhdGVUaW1l
Rm9ybWF0Ojpob3VyQ3ljbGVGcm9tUGF0dGVybihwYXR0ZXJuKSkgeworICAgIGNhc2UgSW50bERh
dGVUaW1lRm9ybWF0OjpIb3VyQ3ljbGU6Ok5vbmU6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SW50bERhdGVUaW1lRm9ybWF0OjpIb3VyQ3ljbGU6OkgxMTogeworICAgICAgICBlbGVtZW50cy5h
cHBlbmQoImgxMSJfcyk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRl
QXJyYXlGcm9tU3RyaW5nVmVjdG9yKGdsb2JhbE9iamVjdCwgV1RGTW92ZShlbGVtZW50cykpKTsK
KyAgICB9CisgICAgY2FzZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OkhvdXJDeWNsZTo6SDEyOiB7Cisg
ICAgICAgIGVsZW1lbnRzLmFwcGVuZCgiaDEyIl9zKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBjcmVhdGVBcnJheUZyb21TdHJpbmdWZWN0b3IoZ2xvYmFsT2JqZWN0LCBXVEZN
b3ZlKGVsZW1lbnRzKSkpOworICAgIH0KKyAgICBjYXNlIEludGxEYXRlVGltZUZvcm1hdDo6SG91
ckN5Y2xlOjpIMjM6IHsKKyAgICAgICAgZWxlbWVudHMuYXBwZW5kKCJoMjMiX3MpOworICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNyZWF0ZUFycmF5RnJvbVN0cmluZ1ZlY3Rvcihn
bG9iYWxPYmplY3QsIFdURk1vdmUoZWxlbWVudHMpKSk7CisgICAgfQorICAgIGNhc2UgSW50bERh
dGVUaW1lRm9ybWF0OjpIb3VyQ3ljbGU6OkgyNDogeworICAgICAgICBlbGVtZW50cy5hcHBlbmQo
ImgyNCJfcyk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlQXJyYXlG
cm9tU3RyaW5nVmVjdG9yKGdsb2JhbE9iamVjdCwgV1RGTW92ZShlbGVtZW50cykpKTsKKyAgICB9
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVBcnJheUZyb21T
dHJpbmdWZWN0b3IoZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGVsZW1lbnRzKSkpOwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAzNTYxMTIwNzBi
MTY1NDM3YTRhOTk3MGJiNTM2YjI3ZTY3NTk3MzcxLi42MzMxOWQxZWQ1MzRjN2Y3NzZmYmQ0ZmYy
NzBkOGYxMWRlY2RkODQyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA4LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgSW50bC5EYXRlVGltZUZvcm1hdCBpbmNv
cnJlY3RseSBwYXJzZXMgcGF0dGVybnMgd2l0aCAnaCcgbGl0ZXJhbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MzEzCisgICAgICAgIHJkYXI6Ly84
MjQxNDMxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogc3RyZXNzL2ludGwtZGF0ZS1wYXR0ZXJuLWluY2x1ZGVzLWxpdGVyYWwtdGV4dC5qczogQWRk
ZWQuCisgICAgICAgIChzaG91bGRCZSk6CisKIDIwMjEtMDgtMjYgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgcjI4MTQ4NSB3YXMgbm90IHN1ZmZpY2llbnQgaW4g
d2hlcmUgaXQgY2FsbGVkIGRpc2FibGVQZWVwaG9sZU9wdGltaXphdGlvbgpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9zdHJlc3MvaW50bC1kYXRlLXBhdHRlcm4taW5jbHVkZXMtbGl0ZXJhbC10ZXh0Lmpz
IGIvSlNUZXN0cy9zdHJlc3MvaW50bC1kYXRlLXBhdHRlcm4taW5jbHVkZXMtbGl0ZXJhbC10ZXh0
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjhmMWVkNDdjM2ZkMzJiYzhiN2IxMWY0YmQ5Nzc4NGMyNDQ4NjJmM2UK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9pbnRsLWRhdGUtcGF0dGVybi1pbmNs
dWRlcy1saXRlcmFsLXRleHQuanMKQEAgLTAsMCArMSwxNCBAQAorZnVuY3Rpb24gc2hvdWxkQmUo
YWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9
YCk7Cit9CisKK3Nob3VsZEJlKG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCJmciIsIHtob3VyOiAi
bnVtZXJpYyIsIGhvdXIxMjogZmFsc2V9KS5yZXNvbHZlZE9wdGlvbnMoKS5ob3VyMTIsIGZhbHNl
KTsKK3Nob3VsZEJlKG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCJmciIsIHtob3VyOiAibnVtZXJp
YyIsIGhvdXIxMjogZmFsc2V9KS5mb3JtYXQobmV3IERhdGUoMjAyMSwgMiwgMywgMjMpKSwgYDIz
IGhgKTsKKworc2hvdWxkQmUobmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImZyIiwge2hvdXI6ICJu
dW1lcmljIiwgaG91ckN5Y2xlOiAnaDI0J30pLmZvcm1hdChuZXcgRGF0ZSgyMDIxLCAyLCAzLCAy
MykpLCAnMjMgaCcpOworc2hvdWxkQmUobmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImZyIiwge2hv
dXI6ICJudW1lcmljIiwgaG91ckN5Y2xlOiAnaDIzJ30pLmZvcm1hdChuZXcgRGF0ZSgyMDIxLCAy
LCAzLCAyMykpLCAnMjMgaCcpOworCitzaG91bGRCZShKU09OLnN0cmluZ2lmeShuZXcgSW50bC5M
b2NhbGUoImZyIiwge2hvdXJDeWNsZTogJ2gyNCd9KS5ob3VyQ3ljbGVzKSwgYFsiaDI0Il1gKTsK
K3Nob3VsZEJlKEpTT04uc3RyaW5naWZ5KG5ldyBJbnRsLkxvY2FsZSgiZnIiLCB7aG91ckN5Y2xl
OiAnaDIzJ30pLmhvdXJDeWNsZXMpLCBgWyJoMjMiXWApOworc2hvdWxkQmUoSlNPTi5zdHJpbmdp
ZnkobmV3IEludGwuTG9jYWxlKCJmciIpLmhvdXJDeWNsZXMpLCBgWyJoMjMiXWApOwo=
</data>
<flag name="review"
          id="459672"
          type_id="1"
          status="+"
          setter="ross.kirsling"
    />
          </attachment>
      

    </bug>

</bugzilla>