<?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>83243</bug_id>
          
          <creation_ts>2012-04-04 19:25:57 -0700</creation_ts>
          <short_desc>Speed up the conversion from JSValue to String for bulk operations</short_desc>
          <delta_ts>2012-04-05 17:12:37 -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>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>
          
          <blocked>83180</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>596230</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 19:25:57 -0700</bug_when>
    <thetext>For operations on a large number of string, a lot of time is spent converting values (usually primitive) to String.

Most of the time is spent allocating and deallocating JSString.
A significant part of the time is function overhead of calling to string.

We can do much better for primitive types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596237</commentid>
    <comment_count>1</comment_count>
      <attachid>135748</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 19:36:23 -0700</bug_when>
    <thetext>Created attachment 135748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596238</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 19:39:49 -0700</bug_when>
    <thetext>Extra notes:

-This is on top of https://bugs.webkit.org/show_bug.cgi?id=83180
Disregard the bots.

-I have only converted the two hotspot I was hitting to make things simple. In a followup, I should convert all the others &quot;toString(exec)-&gt;value(exec)&quot; to either toUString() or element.toUStringInline() depending on the case.

-This makes no difference for JSString. This only improves the other primitives types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596297</commentid>
    <comment_count>3</comment_count>
      <attachid>135748</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-04 22:08:45 -0700</bug_when>
    <thetext>Comment on attachment 135748
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        When making operations on primitive types, we loose some time converting
&gt; +        values to JSString in order to extract the string.

It looks like JSValue::toString only artificially creates a JSString if the JSValue is a number. I wonder if NumericStrings should just change to cache JSStrings instead of UStrings, and how much of this issue that would resolve.

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        This patch speed up some basic Array operations by avoiding the creation

Grammar: speeds.

&gt; Source/JavaScriptCore/ChangeLog:15
&gt; +        an inline convertion is used.

Spelling: conversion.

&gt; Source/JavaScriptCore/runtime/JSString.h:472
&gt; +    ALWAYS_INLINE UString inlineJSValueNotStringtoUString(const JSValue&amp; value, ExecState* exec)

Is there really a measurable advantage to inlining this? How do I know whether I should call toUString or toUStringInline?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596304</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-04 22:17:38 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/ChangeLog:9
&gt; &gt; +        When making operations on primitive types, we loose some time converting
&gt; &gt; +        values to JSString in order to extract the string.
&gt; 
&gt; It looks like JSValue::toString only artificially creates a JSString if the JSValue is a number. I wonder if NumericStrings should just change to cache JSStrings instead of UStrings, and how much of this issue that would resolve.

Yep, it is indeed only for numeric strings.
I can have a look if I can change NumericStrings to use JSString.

&gt; &gt; Source/JavaScriptCore/runtime/JSString.h:472
&gt; &gt; +    ALWAYS_INLINE UString inlineJSValueNotStringtoUString(const JSValue&amp; value, ExecState* exec)
&gt; 
&gt; Is there really a measurable advantage to inlining this? How do I know whether I should call toUString or toUStringInline?

I changed function depending on profiles.

On benchmarks, the gain was fairly big for arrayProtoFuncJoin() and JSArray::sort(). I don&apos;t remember the exact numbers but that was &gt; 5% improvement.

I have changed arrayProtoFuncSort() without benchmark because this case seem similar to JSArray::sort().

I think we should always use toUString() unless the profiler shows it is a problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596918</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-05 14:35:21 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:9
&gt; &gt; &gt; +        When making operations on primitive types, we loose some time converting
&gt; &gt; &gt; +        values to JSString in order to extract the string.
&gt; &gt; 
&gt; &gt; It looks like JSValue::toString only artificially creates a JSString if the JSValue is a number. I wonder if NumericStrings should just change to cache JSStrings instead of UStrings, and how much of this issue that would resolve.
&gt; 
&gt; Yep, it is indeed only for numeric strings.
&gt; I can have a look if I can change NumericStrings to use JSString.

I looked into changing NumericStrings to use JSString (without implementing anything yet).

I am only half convinced because NumericStrings is also used a lot to create Identifiers, and this would give us only overhead to create JSString in that case.
Also NumericStrings is barely faster than UString::number() and I am afraid of slowing it down further.

I am a bit concerned with using JSString because some of the performance improvements lately were done by avoiding allocating JSString.

Do you know of common cases where we convert Numbers to String and keep the JSString around? This would help me get an idea of the advantage of such change for NumericStrings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597050</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-04-05 17:12:37 -0700</bug_when>
    <thetext>Committed r113396: &lt;http://trac.webkit.org/changeset/113396&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135748</attachid>
            <date>2012-04-04 19:36:23 -0700</date>
            <delta_ts>2012-04-04 22:08:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83243-20120404193622.patch</filename>
            <type>text/plain</type>
            <size>10177</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NWE5YjdkZjExZWZmYTA2ZWU2N2EzZDVkZDY1MzMwY2NmZTQyY2QzLi4wMTI4YzUyM2EyM2VmY2M3
MDI2MDhiYzAwNjUxNmJiNjA3NGVhNjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw0MSBAQAogMjAxMi0wNC0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KIAorICAgICAgICBTcGVlZCB1cCB0aGUgY29udmVyc2lvbiBmcm9tIEpTVmFsdWUgdG8g
U3RyaW5nIGZvciBidWxrIG9wZXJhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgzMjQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2hlbiBtYWtpbmcgb3BlcmF0aW9ucyBvbiBwcmltaXRpdmUgdHlw
ZXMsIHdlIGxvb3NlIHNvbWUgdGltZSBjb252ZXJ0aW5nCisgICAgICAgIHZhbHVlcyB0byBKU1N0
cmluZyBpbiBvcmRlciB0byBleHRyYWN0IHRoZSBzdHJpbmcuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzcGVlZCB1cCBzb21lIGJhc2ljIEFycmF5IG9wZXJhdGlvbnMgYnkgYXZvaWRpbmcgdGhlIGNy
ZWF0aW9uCisgICAgICAgIG9mIGludGVybWVkaWFyeSBKU1N0cmluZyB3aGVuIHBvc3NpYmxlLgor
CisgICAgICAgIEZvciB0aGUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBjb252ZXJ0IGEgbG90IG9m
IEpTVmFsdWUgaW4gYSB0aWdodCBsb29wLAorICAgICAgICBhbiBpbmxpbmUgY29udmVydGlvbiBp
cyB1c2VkLgorCisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVByb3Rv
RnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNKb2luKToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQdXNoKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNTb3J0KToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6Cisg
ICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29y
dCk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
Ojp0b1VTdHJpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aW5saW5lSlNWYWx1
ZU5vdFN0cmluZ3RvVVN0cmluZyk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnRvVVN0cmluZ0lu
bGluZSk6CisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNW
YWx1ZTo6dG9VU3RyaW5nU2xvd0Nhc2UpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50
aW1lL0pTVmFsdWUuaDoKKyAgICAgICAgKEpTVmFsdWUpOgorCisyMDEyLTA0LTA0ICBCZW5qYW1p
biBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCiAgICAgICAgIE1ha2Ugc29tZXRoaW5n
IGZhc3RlciB0aGFuIEpTU3RyaW5nQnVpbGRlciBmb3Igam9pbmluZyBhbiBhcnJheSBvZiBKU1Zh
bHVlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzE4
MAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHAKaW5kZXggODE4ODk1YzcxNjNmNjQ3ZDA2ODUxNzYxNzU1YTJiMDk5MWYzYzlmNC4uMTczYzAw
NzI0MmQzZDk0ZGZlOTkwODcyZWQ4MjQ3ZWQ4MTI2MDY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcApAQCAtMjgxLDcgKzI4MSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIFVTdHJpbmcgc3RyID0gZWxl
bWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIFVTdHJpbmcgc3RyID0g
ZWxlbWVudC50b1VTdHJpbmcoZXhlYyk7CiAgICAgICAgIHN0ckJ1ZmZlcltrXSA9IHN0ci5pbXBs
KCk7CiAgICAgICAgIHRvdGFsU2l6ZSArPSBzdHIubGVuZ3RoKCk7CiAgICAgICAgIGFsbFN0cmlu
Z3M4Qml0ID0gYWxsU3RyaW5nczhCaXQgJiYgc3RyLmlzOEJpdCgpOwpAQCAtMzU4LDkgKzM1OCw5
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY29udmVyc2lvbkZ1bmN0
aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25l
KQotICAgICAgICAgICAgICAgIHN0ciA9IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVtcHR5TGlzdCgpKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICAgICAgc3RyID0gY2FsbChleGVjLCBjb252
ZXJzaW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgZXhlYy0+ZW1wdHlM
aXN0KCkpLnRvVVN0cmluZyhleGVjKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBzdHIgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAg
ICAgICBzdHIgPSBlbGVtZW50LnRvVVN0cmluZyhleGVjKTsKICAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChzdHIpOwpA
QCAtMzgzLDcgKzM4Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIFVTdHJpbmcgc2VwYXJhdG9yOwogICAg
IGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgc2VwYXJhdG9y
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAg
ICBzZXBhcmF0b3IgPSBleGVjLT5hcmd1bWVudCgwKS50b1VTdHJpbmcoZXhlYyk7CiAgICAgaWYg
KHNlcGFyYXRvci5pc051bGwoKSkKICAgICAgICAgc2VwYXJhdG9yID0gVVN0cmluZygiLCIpOwog
CkBAIC0zOTksNyArMzk5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY0pvaW4oRXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSBhcnJheS0+Z2V0SW5kZXgoayk7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1l
bnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdK
b2luZXIuYXBwZW5kKGVsZW1lbnQudG9VU3RyaW5nSW5saW5lKGV4ZWMpKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKFVTdHJpbmcoKSk7CiAg
ICAgICAgIH0KQEAgLTQwOCw3ICs0MDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgZm9yICg7IGsgPCBsZW5n
dGg7IGsrKykgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywg
ayk7CiAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAg
ICAgc3RyaW5nSm9pbmVyLmFwcGVuZChlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CisgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1lbnQudG9VU3RyaW5nSW5s
aW5lKGV4ZWMpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVu
ZChVU3RyaW5nKCkpOwogICAgIH0KQEAgLTUwMSw3ICs1MDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAg
ICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGxl
bmd0aCArIG4sIGV4ZWMtPmFyZ3VtZW50KG4pLCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJv
cGVydHlOYW1lKGV4ZWMsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50NjRfdD4obGVuZ3RoKSArIHN0
YXRpY19jYXN0PGludDY0X3Q+KG4pKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAg
ICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoZXhlYywgSlNWYWx1ZShzdGF0aWNfY2Fz
dDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikpLnRvVVN0cmluZyhl
eGVjKSk7CiAgICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iaiwg
ZXhlYywgcHJvcGVydHlOYW1lLCBleGVjLT5hcmd1bWVudChuKSwgc2xvdCk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtNjQyLDcgKzY0Miw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTb3J0KEV4ZWNTdGF0ZSog
ZXhlYykKICAgICAgICAgICAgICAgICBsLmFwcGVuZChtaW5PYmopOwogICAgICAgICAgICAgICAg
IGNvbXBhcmVSZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IGpzVW5kZWZpbmVkKCksIGwpLnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgY29tcGFyZVJlc3VsdCA9IChqT2JqLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSA8IG1pbk9iai50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpID8gLTEgOiAxOwor
ICAgICAgICAgICAgICAgIGNvbXBhcmVSZXN1bHQgPSAoak9iai50b1VTdHJpbmdJbmxpbmUoZXhl
YykgPCBtaW5PYmoudG9VU3RyaW5nSW5saW5lKGV4ZWMpKSA/IC0xIDogMTsKIAogICAgICAgICAg
ICAgaWYgKGNvbXBhcmVSZXN1bHQgPCAwKSB7CiAgICAgICAgICAgICAgICAgdGhlbWluID0gajsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
CmluZGV4IDE5NjJjMDM4ZmNjZmFiN2Q2ODYzNjVjZmE5YjU2ZDdlZDE5OTMwYjUuLjFlYzNiZTA2
NzFmZjc0ZTg5NzQ5MjU0ZTgyMTBkZTU2YzIwZjAyZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtNzYsNiArNzYsNyBAQAog
CiAjZGVmaW5lIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFDSF9LRVlXT1JEKG1hY3JvKSBcCiAg
ICAgbWFjcm8obnVsbCkgXAorICAgIG1hY3JvKHVuZGVmaW5lZCkgXAogICAgIG1hY3JvKHRydWUp
IFwKICAgICBtYWNybyhmYWxzZSkgXAogICAgIG1hY3JvKGJyZWFrKSBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IDQyNTVlYWMxNmEwZDUyMmE0YzU4MTg1
YTgyYjYzNjI1M2ZiMzg2Y2UuLjY1YzdkZDBiZDk1ZGRmMTAzYzAyNmYzNDk3NTM1MGIwODYzM2Q3
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC0xNDg1
LDcgKzE0ODUsNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQogICAgIC8v
IGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgdmFs
dWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CisgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5n
SW5saW5lKGV4ZWMpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAg
IEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKaW5kZXggMzJhMzI3ODhhZDliZjA4ZmQ3ZGFh
ODJiYjNhMjVjNzY2ZGI5ZWZmMy4uN2ExYmMyNDU4OWViMzkxOTJkMjcxMmQ4OTdjZGRiMjk3MTUz
NjA3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCkBAIC00NjIs
NiArNDYyLDM5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gdG9TdHJpbmdTbG93
Q2FzZShleGVjKTsKICAgICB9CiAKKyAgICBpbmxpbmUgVVN0cmluZyBKU1ZhbHVlOjp0b1VTdHJp
bmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzU3RyaW5nKCkp
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSktPnZh
bHVlKGV4ZWMpOworICAgICAgICByZXR1cm4gdG9VU3RyaW5nU2xvd0Nhc2UoZXhlYyk7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSBVU3RyaW5nIGlubGluZUpTVmFsdWVOb3RTdHJpbmd0b1VT
dHJpbmcoY29uc3QgSlNWYWx1ZSYgdmFsdWUsIEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAg
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLm51
bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICBpZiAodmFsdWUuaXNE
b3VibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLm51bWVyaWNTdHJpbmdzLmFk
ZCh2YWx1ZS5hc0RvdWJsZSgpKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzVHJ1ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+dHJ1ZUtleXdvcmQudXN0cmlu
ZygpOworICAgICAgICBpZiAodmFsdWUuaXNGYWxzZSgpKQorICAgICAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEucHJvcGVydHlOYW1lcy0+ZmFsc2VLZXl3b3JkLnVzdHJpbmcoKTsKKyAgICAgICAg
aWYgKHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEucHJvcGVy
dHlOYW1lcy0+bnVsbEtleXdvcmQudXN0cmluZygpOworICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPnVu
ZGVmaW5lZEtleXdvcmQudXN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgVVN0cmluZyBK
U1ZhbHVlOjp0b1VTdHJpbmdJbmxpbmUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGlzU3RyaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNT
dHJpbmcqPihhc0NlbGwoKSktPnZhbHVlKGV4ZWMpOworCisgICAgICAgIHJldHVybiBpbmxpbmVK
U1ZhbHVlTm90U3RyaW5ndG9VU3RyaW5nKCp0aGlzLCBleGVjKTsKKyAgICB9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNTdHJpbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1ZhbHVlLmNwcAppbmRleCA3YmI4OTVhZDkyNTFiY2Y4OWE4ODJlZjY1ZWY0MzY4
NDQ5MDQwZWQ4Li4wODhmMjE0Yjk4MGEyN2EzNGY2OWU4OTViN2YwZWI4YzAzZDg1NmQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcApAQCAtMjgzLDQgKzI4Myw5
IEBAIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoZXhlYyk7CiB9CiAKK1VTdHJpbmcgSlNW
YWx1ZTo6dG9VU3RyaW5nU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJl
dHVybiBpbmxpbmVKU1ZhbHVlTm90U3RyaW5ndG9VU3RyaW5nKCp0aGlzLCBleGVjKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgK
aW5kZXggYmEwYWUyM2YwMjVmZmJlMjFlMjNiODQ4YjA2YjY0MDVkZWQyZjMwOS4uN2ZhY2I5MzUz
OTBhNjAzOWNiZjc0ZTEyMzAwM2U2MmM0YWNiODUwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVmFsdWUuaApAQCAtMjAzLDYgKzIwMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAvLyBiZWVuIHNldCBpbiB0aGUgRXhlY1N0YXRlIGFscmVhZHkuCiAgICAgICAgIGRvdWJs
ZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNTdHJpbmcqIHRvU3RyaW5n
KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBVU3RyaW5nIHRvVVN0cmluZyhFeGVjU3RhdGUq
KSBjb25zdDsKKyAgICAgICAgVVN0cmluZyB0b1VTdHJpbmdJbmxpbmUoRXhlY1N0YXRlKikgY29u
c3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKICAgICAg
ICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7
CiAKQEAgLTI1MSw2ICsyNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW5saW5lIGNv
bnN0IEpTVmFsdWUgYXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlclNsb3dDYXNlKEV4ZWNTdGF0ZSopIGNvbnN0
OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZyogdG9TdHJpbmdTbG93Q2FzZShF
eGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgVVN0cmluZyB0b1VT
dHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNPYmplY3QqIHRvT2JqZWN0U2xvd0Nhc2UoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
KSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRvVGhpc09iamVj
dFNsb3dDYXNlKEV4ZWNTdGF0ZSopIGNvbnN0OwogCg==
</data>
<flag name="review"
          id="140354"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>