<?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>6083</bug_id>
          
          <creation_ts>2005-12-14 16:30:26 -0800</creation_ts>
          <short_desc>REGRESSION: 5-10% performance regression on JS iBench from getter/setter change</short_desc>
          <delta_ts>2005-12-27 01:20:35 -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>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          <cc>andersca</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>25979</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-14 16:30:26 -0800</bug_when>
    <thetext>On my machine, the getter/setter change caused a regression in JavaScript iBench speed from 1980ms or 
so to ~2150ms. Anders and I have discussed possible ways to mitigate the performance impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26055</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-16 08:36:27 -0800</bug_when>
    <thetext>I can&apos;t believe I didn&apos;t notice the use of the virtual function type() in the very hot get function.

One possibility is setting a special bit pattern in the low two bits of the GetterSetterImp* ala the 
01 tag mask used in SimpleNumber. Then you can check if a property value is a GetterSetterImp* 
without dispatching to type().

Unfortunately, that might slow down garbage collection since the mark function in the property 
map would have to know about this convention.

Another possibility is to not have the GetterSetterImp be garbage collected at all, since they are 
uniquely owned by a particular property slot in a property hash table. So we can teach the 
property hash table about some special pointer convention and give them sole ownership.

I think with this suggested design we&apos;d have only a single mask and branch in the hot 
getOwnPropertySlot function so we&apos;d probably be &quot;back in business&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26062</commentid>
    <comment_count>2</comment_count>
      <attachid>5117</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2005-12-16 10:32:32 -0800</bug_when>
    <thetext>Created attachment 5117
Speed patch

For the record, here&apos;s a patch that me and Maciej have been working on. It adds
a GetterSetter attribute which getOwnPropertySlot can examine to see if the
slot needs to be a getter slot.

It also adds a hasSetter flag to the property map of each object, which should
speed up ::put a bit since you only need to check the flag and not do a hash
table lookup for each call to ::put.

Another thing I&apos;ve been considering is to remove the originalObject argument to
PropertySlot::GetValueFunc; it&apos;s only used in one function,
PropertySlot::functionGetter. Since functionGetter consists of just invokeing
the call function, I think we could simply just fold that into
PropertySlot::getValue and set getValue to a special value, like setValueSlot
does. That would save us an extra argument to all calls to all getter
functions. (Not sure whether this would help performance, but it sure feels
like it)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26255</commentid>
    <comment_count>3</comment_count>
      <attachid>5178</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-20 04:24:52 -0800</bug_when>
    <thetext>Created attachment 5178
latest patch

Here&apos;s the latest patch I had, much of it is irrelevant or wrong but what is
surprising is that it still causes a slowdown, solely due to the
getOwnPropertySlot changes (put changes make no difference any more, nor does
the extra argument to getValue as far as I can tell). The problem is that
JSObject::getOwnPropertSlot no longer gets inlined into derived classes calling
the base class, most notably ActivationImp. Even though I have it marked
always_inline! Not sure why.

Some of the fixes here are for warnings from -Winline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26256</commentid>
    <comment_count>4</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-20 04:26:20 -0800</bug_when>
    <thetext>I like Darin&apos;s suggestions but I think my slightly simpler patch would work if only it would inline - even 
with most of the bad stuff commented it refuses to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26652</commentid>
    <comment_count>5</comment_count>
      <attachid>5282</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-26 02:45:42 -0800</bug_when>
    <thetext>Created attachment 5282
this one gets the regression down to ~1% and doesn&apos;t break anything afaik</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26653</commentid>
    <comment_count>6</comment_count>
      <attachid>5282</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-26 09:08:39 -0800</bug_when>
    <thetext>Comment on attachment 5282
this one gets the regression down to ~1% and doesn&apos;t break anything afaik

JSObject::getOwnPropertySlot should use the ALWAYS_INLINE macro rather than
doing it directly.

Why do the hasGetterSetterProperties() and setHasGetterSetterProperties()
functions have commented out code instead of the real code?

Otherwise, looks good. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26663</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-26 10:40:14 -0800</bug_when>
    <thetext>Is there a reason to use a hasGetterSetter flag instead of a numGetterSetters count on the property map? 
Using a count would eliminate the loop in deleteProperty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26705</commentid>
    <comment_count>8</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-27 01:20:35 -0800</bug_when>
    <thetext>OK, I fixed the problems Darin pointed out (d&apos;oh). Now the patch leaves about a 2% regression (2020ms 
times vs 1980 from before). JSObject::getOwnPropertySlot is once again not getting inlined, despite 
ALWAYS_INLINE declaration. Maybe someone can help me figure out why! I will make a separate bug for 
the remaining regression.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5117</attachid>
            <date>2005-12-16 10:32:32 -0800</date>
            <delta_ts>2005-12-26 02:45:42 -0800</delta_ts>
            <desc>Speed patch</desc>
            <filename>jsc-speed-fix-2.patch</filename>
            <type>text/plain</type>
            <size>11188</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41OQpkaWZmIC1wIC11IC1yMS41OSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmNw
cAotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAJMTMgRGVjIDIwMDUgMjE6MjQ6NTIg
LTAwMDAJMS41OQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAJMTUgRGVjIDIwMDUg
MDk6NDI6MjMgLTAwMDAKQEAgLTE5MCw2ICsxOTAsMTEgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdAogICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20ocHJvcGVydHlOYW1lKSwgc2xvdCk7CiB9CiAKK3N0YXRpYyB2b2lkIHRo
cm93U2V0dGVyRXJyb3IoRXhlY1N0YXRlICpleGVjKQoreworICB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvciwgInNldHRpbmcgYSBwcm9wZXJ0eSB0aGF0IGhhcyBvbmx5IGEgZ2V0dGVyIik7Cit9
CisKIC8vIEVDTUEgOC42LjIuMgogdm9pZCBKU09iamVjdDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIp
CiB7CkBAIC0yMTUsMTIgKzIyMCwxNCBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlICpl
eGVjLCBjb25zCiAKICAgSlNPYmplY3QgKm9iaiA9IHRoaXM7CiAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgaWYgKEpTVmFsdWUgKmdzID0gb2JqLT5fcHJvcC5nZXQocHJvcGVydHlOYW1lKSkgewotICAg
ICAgaWYgKGdzLT50eXBlKCkgPT0gR2V0dGVyU2V0dGVyVHlwZSkgeworICAgIEpTVmFsdWUgKmdz
OworICAgIGludCBhdHRyaWJ1dGVzOworICAgIGlmIChvYmotPl9wcm9wLmhhc0dldHRlclNldHRl
clByb3BlcnRpZXMoKSAmJiAoZ3MgPSBvYmotPl9wcm9wLmdldChwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMpKSkgeworICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBHZXR0ZXJTZXR0ZXIpIHsKICAgICAg
ICAgSlNPYmplY3QgKnNldHRlckZ1bmMgPSBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXJJbXAgKj4o
Z3MpLT5nZXRTZXR0ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAoIXNldHRlckZ1bmMp
IHsKLSAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgInNldHRpbmcgYSBwcm9w
ZXJ0eSB0aGF0IGhhcyBvbmx5IGEgZ2V0dGVyIik7CisgICAgICAgICAgdGhyb3dTZXR0ZXJFcnJv
cihleGVjKTsKICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
MjM2LDcgKzI0Myw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnMK
ICAgICAgIH0KICAgICB9CiAgICAgIAotICAgIGlmICghb2JqLT5fcHJvdG8gfHwgIW9iai0+X3By
b3RvLT5pc09iamVjdCgpKQorICAgIGlmICghb2JqLT5fcHJvdG8tPmlzT2JqZWN0KCkpCiAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgb2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4ob2Jq
LT5fcHJvdG8pOwpAQCAtMjg3LDYgKzI5NCw5IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAKICAgICBpZiAoKGF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSkKICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBfcHJvcC5yZW1vdmUocHJvcGVydHlOYW1lKTsKKyAgICBpZiAo
YXR0cmlidXRlcyAmIEdldHRlclNldHRlcikgCisgICAgICAgIF9wcm9wLnNldEhhc0dldHRlclNl
dHRlclByb3BlcnRpZXMoX3Byb3AuY29udGFpbnNHZXR0ZXJzT3JTZXR0ZXJzKCkpOworCiAgICAg
cmV0dXJuIHRydWU7CiAgIH0KIApAQCAtMzcwLDcgKzM4MCw3IEBAIHZvaWQgSlNPYmplY3Q6OmRl
ZmluZUdldHRlcihFeGVjU3RhdGUgKmUKICAgICAgICAgZ3MgPSBzdGF0aWNfY2FzdDxHZXR0ZXJT
ZXR0ZXJJbXAgKj4obyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZ3MgPSBuZXcgR2V0dGVyU2V0
dGVySW1wOwotICAgICAgICBwdXREaXJlY3QocHJvcGVydHlOYW1lLCBncyk7CisgICAgICAgIHB1
dERpcmVjdChwcm9wZXJ0eU5hbWUsIGdzLCBHZXR0ZXJTZXR0ZXIpOwogICAgIH0KICAgICAKICAg
ICBncy0+c2V0R2V0dGVyKGdldHRlckZ1bmMpOwpAQCAtMzg1LDkgKzM5NSwxMCBAQCB2b2lkIEpT
T2JqZWN0OjpkZWZpbmVTZXR0ZXIoRXhlY1N0YXRlICplCiAgICAgICAgIGdzID0gc3RhdGljX2Nh
c3Q8R2V0dGVyU2V0dGVySW1wICo+KG8pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGdzID0gbmV3
IEdldHRlclNldHRlckltcDsKLSAgICAgICAgcHV0RGlyZWN0KHByb3BlcnR5TmFtZSwgZ3MpOwor
ICAgICAgICBwdXREaXJlY3QocHJvcGVydHlOYW1lLCBncywgR2V0dGVyU2V0dGVyKTsKICAgICB9
CiAgICAgCisgICAgX3Byb3Auc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyh0cnVlKTsKICAg
ICBncy0+c2V0U2V0dGVyKHNldHRlckZ1bmMpOwogfQogCkBAIC01MjAsNiArNTMxLDE2IEBAIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdChjb25zdCBJZGVudGlmaWUKICAgICBfcHJvcC5wdXQocHJv
cGVydHlOYW1lLCBqc051bWJlcih2YWx1ZSksIGF0dHIpOwogfQogCit2b2lkIEpTT2JqZWN0Ojpm
aWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSAqKmxvY2F0
aW9uKQoreworICAgIEdldHRlclNldHRlckltcCAqZ3MgPSBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0
ZXJJbXAgKj4oKmxvY2F0aW9uKTsKKyAgICBKU09iamVjdCAqZ2V0dGVyRnVuYyA9IGdzLT5nZXRH
ZXR0ZXIoKTsKKyAgICBpZiAoZ2V0dGVyRnVuYykKKyAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90
KHRoaXMsIGdldHRlckZ1bmMpOworICAgIGVsc2UKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQo
dGhpcyk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFcnJvciAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGNvbnN0IGNoYXIgKiBjb25z
dCBlcnJvck5hbWVzQXJyW10gPSB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3Qu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MQpkaWZmIC1wIC11IC1yMS41MSBKYXZhU2NyaXB0
Q29yZS9ranMvb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAkxMyBEZWMg
MjAwNSAyMToyNDo1MiAtMDAwMAkxLjUxCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJ
MTUgRGVjIDIwMDUgMDk6NDI6MjQgLTAwMDAKQEAgLTUwLDEzICs1MCwxMyBAQCBuYW1lc3BhY2Ug
S0pTIHsKIAogICAvLyBFQ01BIDI2Mi0zIDguNi4xCiAgIC8vIFByb3BlcnR5IGF0dHJpYnV0ZXMK
LSAgZW51bSBBdHRyaWJ1dGUgeyBOb25lICAgICAgID0gMCwKLSAgICAgICAgICAgICAgICAgICBS
ZWFkT25seSAgID0gMSA8PCAxLCAvLyBwcm9wZXJ0eSBjYW4gYmUgb25seSByZWFkLCBub3Qgd3Jp
dHRlbgotICAgICAgICAgICAgICAgICAgIERvbnRFbnVtICAgPSAxIDw8IDIsIC8vIHByb3BlcnR5
IGRvZXNuJ3QgYXBwZWFyIGluIChmb3IgLi4gaW4gLi4pCi0gICAgICAgICAgICAgICAgICAgRG9u
dERlbGV0ZSA9IDEgPDwgMywgLy8gcHJvcGVydHkgY2FuJ3QgYmUgZGVsZXRlZAotICAgICAgICAg
ICAgICAgICAgIEludGVybmFsICAgPSAxIDw8IDQsIC8vIGFuIGludGVybmFsIHByb3BlcnR5LCBz
ZXQgdG8gYnlwYXNzIGNoZWNrcwotICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uICAgPSAxIDw8
IDUgfTsgLy8gcHJvcGVydHkgaXMgYSBmdW5jdGlvbiAtIG9ubHkgdXNlZCBieSBzdGF0aWMgaGFz
aHRhYmxlcwotCisgIGVudW0gQXR0cmlidXRlIHsgTm9uZSAgICAgICAgID0gMCwKKyAgICAgICAg
ICAgICAgICAgICBSZWFkT25seSAgICAgPSAxIDw8IDEsIC8vIHByb3BlcnR5IGNhbiBiZSBvbmx5
IHJlYWQsIG5vdCB3cml0dGVuCisgICAgICAgICAgICAgICAgICAgRG9udEVudW0gICAgID0gMSA8
PCAyLCAvLyBwcm9wZXJ0eSBkb2Vzbid0IGFwcGVhciBpbiAoZm9yIC4uIGluIC4uKQorICAgICAg
ICAgICAgICAgICAgIERvbnREZWxldGUgICA9IDEgPDwgMywgLy8gcHJvcGVydHkgY2FuJ3QgYmUg
ZGVsZXRlZAorICAgICAgICAgICAgICAgICAgIEludGVybmFsICAgICA9IDEgPDwgNCwgLy8gYW4g
aW50ZXJuYWwgcHJvcGVydHksIHNldCB0byBieXBhc3MgY2hlY2tzCisgICAgICAgICAgICAgICAg
ICAgRnVuY3Rpb24gICAgID0gMSA8PCA1LCAvLyBwcm9wZXJ0eSBpcyBhIGZ1bmN0aW9uIC0gb25s
eSB1c2VkIGJ5IHN0YXRpYyBoYXNodGFibGVzCisgICAgICAgICAgICAgICAgICAgR2V0dGVyU2V0
dGVyID0gMSA8PCA2IH07IC8vIHByb3BlcnR5IGlzIGEgZ2V0dGVyIG9yIHNldHRlcgogICAvKioK
ICAgICogQ2xhc3MgSW5mb3JtYXRpb24KICAgICovCkBAIC00OTgsMTEgKzQ5OCwxMyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAvLyB0byBsb29rIHVwIGluIHRoZSBwcm90b3R5cGUsIGl0IG1pZ2h0
IGFscmVhZHkgZXhpc3QgdGhlcmUpCiAgICAgSlNWYWx1ZSAqZ2V0RGlyZWN0KGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gX3Byb3AuZ2V0KHBy
b3BlcnR5TmFtZSk7IH0KLSAgICBKU1ZhbHVlICoqZ2V0RGlyZWN0TG9jYXRpb24oY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKQotICAgICAgICB7IHJldHVybiBfcHJvcC5nZXRMb2NhdGlv
bihwcm9wZXJ0eU5hbWUpOyB9CisgICAgSlNWYWx1ZSAqKmdldERpcmVjdExvY2F0aW9uKGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgaW50JiBhdHRyaWJ1dGVzKQorICAgICAgICB7IHJl
dHVybiBfcHJvcC5nZXRMb2NhdGlvbihwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOyB9CiAgICAg
dm9pZCBwdXREaXJlY3QoY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2
YWx1ZSwgaW50IGF0dHIgPSAwKTsKICAgICB2b2lkIHB1dERpcmVjdChjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUsIGludCB2YWx1ZSwgaW50IGF0dHIgPSAwKTsKICAgICAKKyAgICB2b2lk
IEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNW
YWx1ZSAqKmxvY2F0aW9uKTsKKwogICAgIHZvaWQgZGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU09iamVjdCAqZ2V0dGVyRnVuYyk7
CiAgICAgdm9pZCBkZWZpbmVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0ICpzZXR0ZXJGdW5jKTsKIApAQCAtNjMyLDE5ICs2MzQs
MTQgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdChFeAogLy8gSXQgbWF5
IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSwgZXNwZWNpYWxseSBh
IHZpcnR1YWwgZnVuY3Rpb24sCiAvLyBidXQgaXQgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZSB0byBw
cm9wZXJ0eSBsb29rdXAgdGhhdCBkZXJpdmVkIGNsYXNzZXMgY2FuIGlubGluZSB0aGVpcgogLy8g
YmFzZSBjbGFzcyBjYWxsIHRvIHRoaXMuCi1pbmxpbmUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGlu
ZSkpIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAg
IGlmIChKU1ZhbHVlICoqbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUp
KSB7Ci0gICAgICAgIGlmICgoKmxvY2F0aW9uKS0+dHlwZSgpID09IEdldHRlclNldHRlclR5cGUp
IHsKLSAgICAgICAgICAgIEdldHRlclNldHRlckltcCAqZ3MgPSBzdGF0aWNfY2FzdDxHZXR0ZXJT
ZXR0ZXJJbXAgKj4oKmxvY2F0aW9uKTsKLSAgICAgICAgICAgIEpTT2JqZWN0ICpnZXR0ZXJGdW5j
ID0gZ3MtPmdldEdldHRlcigpOwotICAgICAgICAgICAgaWYgKGdldHRlckZ1bmMpCi0gICAgICAg
ICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmMpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKHRoaXMpOwotICAgICAg
ICB9IGVsc2UgeworICAgIGludCBhdHRyaWJ1dGVzOworICAgIGlmIChKU1ZhbHVlICoqbG9jYXRp
b24gPSBnZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKSB7CisgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgR2V0dGVyU2V0dGVyKQorICAgICAgICAgICAgZmlsbEdldHRl
clByb3BlcnR5U2xvdChzbG90LCBsb2NhdGlvbik7CisgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWVTbG90KHRoaXMsIGxvY2F0aW9uKTsKLSAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9t
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMv
cHJvcGVydHlfbWFwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41NApkaWZmIC1wIC11IC1y
MS41NCBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmNwcAotLS0gSmF2YVNjcmlwdENv
cmUva2pzL3Byb3BlcnR5X21hcC5jcHAJMTEgRGVjIDIwMDUgMDI6MDU6NDcgLTAwMDAJMS41NAor
KysgSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5jcHAJMTUgRGVjIDIwMDUgMDk6NDI6
MjQgLTAwMDAKQEAgLTIzMSw3ICsyMzEsNyBAQCBKU1ZhbHVlICpQcm9wZXJ0eU1hcDo6Z2V0KGNv
bnN0IElkZW50aWZpCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTVmFsdWUgKipQcm9wZXJ0eU1hcDo6
Z2V0TG9jYXRpb24oY29uc3QgSWRlbnRpZmllciAmbmFtZSkKK0pTVmFsdWUgKipQcm9wZXJ0eU1h
cDo6Z2V0TG9jYXRpb24oY29uc3QgSWRlbnRpZmllciAmbmFtZSwgaW50JiBhdHRyaWJ1dGVzKQog
ewogICAgIGFzc2VydCghbmFtZS5pc051bGwoKSk7CiAgICAgCkBAIC0yNDAsOCArMjQwLDEwIEBA
IEpTVmFsdWUgKipQcm9wZXJ0eU1hcDo6Z2V0TG9jYXRpb24oY29uc3QKICAgICBpZiAoIV90YWJs
ZSkgewogI2lmIFVTRV9TSU5HTEVfRU5UUlkKICAgICAgICAgVVN0cmluZzo6UmVwICprZXkgPSBf
c2luZ2xlRW50cnkua2V5OwotICAgICAgICBpZiAocmVwID09IGtleSkKKyAgICAgICAgaWYgKHJl
cCA9PSBrZXkpIHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBfc2luZ2xlRW50cnkuYXR0cmli
dXRlczsKICAgICAgICAgICAgIHJldHVybiAmX3NpbmdsZUVudHJ5LnZhbHVlOworICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjU2LDggKzI1OCwxMCBAQCBK
U1ZhbHVlICoqUHJvcGVydHlNYXA6OmdldExvY2F0aW9uKGNvbnN0CiAgICAgbnVtQ29sbGlzaW9u
cyArPSBlbnRyaWVzW2ldLmtleSAmJiBlbnRyaWVzW2ldLmtleSAhPSByZXA7CiAjZW5kaWYKICAg
ICB3aGlsZSAoVVN0cmluZzo6UmVwICprZXkgPSBlbnRyaWVzW2ldLmtleSkgewotICAgICAgICBp
ZiAocmVwID09IGtleSkKKyAgICAgICAgaWYgKHJlcCA9PSBrZXkpIHsKKyAgICAgICAgICAgIGF0
dHJpYnV0ZXMgPSBlbnRyaWVzW2ldLmF0dHJpYnV0ZXM7CiAgICAgICAgICAgICByZXR1cm4gJmVu
dHJpZXNbaV0udmFsdWU7CisgICAgICAgIH0KICAgICAgICAgaWYgKGsgPT0gMCkKICAgICAgICAg
ICAgIGsgPSAxIHwgKGggJSBzaXplTWFzayk7CiAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1h
c2s7CkBAIC01NjYsNiArNTcwLDIzIEBAIHN0YXRpYyBpbnQgY29tcGFyZVByb3BlcnR5TWFwRW50
cnlJbmRpY2UKICAgICByZXR1cm4gMDsKIH0KIAorYm9vbCBQcm9wZXJ0eU1hcDo6Y29udGFpbnNH
ZXR0ZXJzT3JTZXR0ZXJzKCkgY29uc3QKK3sKKyAgICBpZiAoIV90YWJsZSkgeworI2lmIFVTRV9T
SU5HTEVfRU5UUlkKKyAgICAgICAgcmV0dXJuIF9zaW5nbGVFbnRyeS5hdHRyaWJ1dGVzICYgR2V0
dGVyU2V0dGVyOworI2VuZGlmCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSAhPSBfdGFibGUtPnNpemU7ICsraSkgeworICAgICAgICBpZiAoX3Rh
YmxlLT5lbnRyaWVzW2ldLmF0dHJpYnV0ZXMgJiBHZXR0ZXJTZXR0ZXIpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFBy
b3BlcnR5TWFwOjphZGRFbnVtZXJhYmxlc1RvUmVmZXJlbmNlTGlzdChSZWZlcmVuY2VMaXN0ICZs
aXN0LCBKU09iamVjdCAqYmFzZSkgY29uc3QKIHsKICAgICBpZiAoIV90YWJsZSkgewpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjcKZGlmZiAtcCAtdSAtcjEuMjcgSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5
X21hcC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmgJMTEgRGVjIDIwMDUg
MDI6MDU6NDcgLTAwMDAJMS4yNworKysgSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5o
CTE1IERlYyAyMDA1IDA5OjQyOjI0IC0wMDAwCkBAIC02MCw3ICs2MCw4IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICBQcm9wZXJ0eU1hcEhhc2hUYWJsZUVudHJ5KCkgOiBrZXkoMCkgeyB9CiAg
ICAgICAgIFVTdHJpbmc6OlJlcCAqa2V5OwogICAgICAgICBKU1ZhbHVlICp2YWx1ZTsKLSAgICAg
ICAgaW50IGF0dHJpYnV0ZXM7CisgICAgICAgIHNob3J0IGF0dHJpYnV0ZXM7CisgICAgICAgIHNo
b3J0IGdsb2JhbEdldHRlclNldHRlckZsYWc7CiAgICAgICAgIGludCBpbmRleDsKICAgICB9Owog
LyoqCkBAIC03OCw3ICs3OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB2b2lkIHJlbW92
ZShjb25zdCBJZGVudGlmaWVyICZuYW1lKTsKICAgICAgICAgSlNWYWx1ZSAqZ2V0KGNvbnN0IElk
ZW50aWZpZXIgJm5hbWUpIGNvbnN0OwogICAgICAgICBKU1ZhbHVlICpnZXQoY29uc3QgSWRlbnRp
ZmllciAmbmFtZSwgaW50ICZhdHRyaWJ1dGVzKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSAqKmdl
dExvY2F0aW9uKGNvbnN0IElkZW50aWZpZXIgJm5hbWUpOworICAgICAgICBKU1ZhbHVlICoqZ2V0
TG9jYXRpb24oY29uc3QgSWRlbnRpZmllciAmbmFtZSwgaW50JiBhdHRyaWJ1dGVzKTsKIAogICAg
ICAgICB2b2lkIG1hcmsoKSBjb25zdDsKICAgICAgICAgdm9pZCBhZGRFbnVtZXJhYmxlc1RvUmVm
ZXJlbmNlTGlzdChSZWZlcmVuY2VMaXN0ICYsIEpTT2JqZWN0ICopIGNvbnN0OwpAQCAtODcsNiAr
ODgsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHZvaWQgc2F2ZShTYXZlZFByb3BlcnRp
ZXMgJikgY29uc3Q7CiAgICAgICAgIHZvaWQgcmVzdG9yZShjb25zdCBTYXZlZFByb3BlcnRpZXMg
JnApOwogCisgICAgICAgIGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpIGNvbnN0IHsg
cmV0dXJuIF9zaW5nbGVFbnRyeS5nbG9iYWxHZXR0ZXJTZXR0ZXJGbGFnOyB9CisgICAgICAgIHZv
aWQgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhib29sIGYpIHsgX3NpbmdsZUVudHJ5Lmds
b2JhbEdldHRlclNldHRlckZsYWcgPSBmOyB9CisKKyAgICAgICAgYm9vbCBjb250YWluc0dldHRl
cnNPclNldHRlcnMoKSBjb25zdDsKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgYm9vbCBr
ZXlzTWF0Y2goY29uc3QgVVN0cmluZzo6UmVwICosIGNvbnN0IFVTdHJpbmc6OlJlcCAqKTsKICAg
ICAgICAgdm9pZCBleHBhbmQoKTsKQEAgLTEwNyw2ICsxMTIsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
IAogaW5saW5lIFByb3BlcnR5TWFwOjpQcm9wZXJ0eU1hcCgpIDogX3RhYmxlKE5VTEwpCiB7Cisg
IF9zaW5nbGVFbnRyeS5nbG9iYWxHZXR0ZXJTZXR0ZXJGbGFnID0gMDsKIH0KIAogfSAvLyBuYW1l
c3BhY2UKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjE5OApkaWZmIC1wIC11IC1yMS4xOTggV2ViQ29yZS9raHRt
bC9lY21hL2tqc193aW5kb3cuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5j
cHAJMTMgRGVjIDIwMDUgMjE6Mjk6MzAgLTAwMDAJMS4xOTgKKysrIFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAkxNSBEZWMgMjAwNSAwOTo0Mjo0OCAtMDAwMApAQCAtOTY5LDcgKzk2
OSw4IEBAIGJvb2wgV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXQKICAgfQogCiAg
IC8vIExvb2sgZm9yIG92ZXJyaWRlcyBmaXJzdAotICBKU1ZhbHVlICoqdmFsID0gZ2V0RGlyZWN0
TG9jYXRpb24ocHJvcGVydHlOYW1lKTsKKyAgaW50IGF0dHJpYnV0ZXM7CisgIEpTVmFsdWUgKip2
YWwgPSBnZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICBpZiAo
dmFsKSB7CiAgICAgaWYgKGlzU2FmZVNjcmlwdChleGVjKSkKICAgICAgIHNsb3Quc2V0VmFsdWVT
bG90KHRoaXMsIHZhbCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5178</attachid>
            <date>2005-12-20 04:24:52 -0800</date>
            <delta_ts>2005-12-26 02:45:42 -0800</delta_ts>
            <desc>latest patch</desc>
            <filename>continuing-speed-attempts.patch.txt</filename>
            <type>text/plain</type>
            <size>11967</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlUHJlZml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlUHJlZml4LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNgpkaWZmIC11IC1wIC1yMS42IEphdmFTY3JpcHRDb3JlUHJlZml4LmgKLS0tIEph
dmFTY3JpcHRDb3JlUHJlZml4LmgJMyBPY3QgMjAwNSAyMToxMTozOSAtMDAwMAkxLjYKKysrIEph
dmFTY3JpcHRDb3JlUHJlZml4LmgJMTkgRGVjIDIwMDUgMDM6MzM6NDYgLTAwMDAKQEAgLTEsOSAr
MSwxNiBAQAogI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIG5ldyAoImlmIHlvdSB1c2UgbmV3
L2RlbGV0ZSBtYWtlIHN1cmUgdG8gaW5jbHVkZSBjb25maWcuaCBhdCB0aGUgdG9wIG9mIHRoZSBm
aWxlIigpKSAKKyNkZWZpbmUgZGVsZXRlICgiaWYgeW91IHVzZSBuZXcvZGVsZXRlIG1ha2Ugc3Vy
ZSB0byBpbmNsdWRlIGNvbmZpZy5oIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUiKCkpIAorI2VuZGlm
CisKKyNpZmRlZiBfX2NwbHVzcGx1cwogI2RlZmluZSBOVUxMIF9fbnVsbAogI2Vsc2UKICNkZWZp
bmUgTlVMTCAoKHZvaWQgKikwKQogI2VuZGlmCiAKKyNpbmNsdWRlICJjb25maWcuaCIKKwogI2lu
Y2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZmxvYXQuaD4K
QEAgLTQwLDggKzQ3LDQgQEAKICNpbmNsdWRlIDxsaXN0PgogI2luY2x1ZGUgPHR5cGVpbmZvPgog
Ci0jaWZkZWYgX19jcGx1c3BsdXMKLSNkZWZpbmUgbmV3ICgiaWYgeW91IHVzZSBuZXcvZGVsZXRl
IG1ha2Ugc3VyZSB0byBpbmNsdWRlIGNvbmZpZy5oIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUiKCkp
IAotI2RlZmluZSBkZWxldGUgKCJpZiB5b3UgdXNlIG5ldy9kZWxldGUgbWFrZSBzdXJlIHRvIGlu
Y2x1ZGUgY29uZmlnLmggYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSIoKSkgCi0jZW5kaWYKICNlbmRp
ZgpJbmRleDoga2pzL29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0ph
dmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU5CmRp
ZmYgLXUgLXAgLXIxLjU5IGtqcy9vYmplY3QuY3BwCi0tLSBranMvb2JqZWN0LmNwcAkxMyBEZWMg
MjAwNSAyMToyNDo1MiAtMDAwMAkxLjU5CisrKyBranMvb2JqZWN0LmNwcAkxOSBEZWMgMjAwNSAw
MzozMzo0NiAtMDAwMApAQCAtMTkwLDYgKzE5MCwxMSBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0CiAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShwcm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIAorc3RhdGljIHZvaWQgdGhy
b3dTZXR0ZXJFcnJvcihFeGVjU3RhdGUgKmV4ZWMpCit7CisgIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCAic2V0dGluZyBhIHByb3BlcnR5IHRoYXQgaGFzIG9ubHkgYSBnZXR0ZXIiKTsKK30K
KwogLy8gRUNNQSA4LjYuMi4yCiB2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0cikK
IHsKQEAgLTIxNSwxMiArMjIwLDE0IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnMKIAogICBKU09iamVjdCAqb2JqID0gdGhpczsKICAgd2hpbGUgKHRydWUpIHsKLSAg
ICBpZiAoSlNWYWx1ZSAqZ3MgPSBvYmotPl9wcm9wLmdldChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAg
ICBpZiAoZ3MtPnR5cGUoKSA9PSBHZXR0ZXJTZXR0ZXJUeXBlKSB7CisgICAgSlNWYWx1ZSAqZ3M7
CisgICAgaW50IGF0dHJpYnV0ZXM7CisgICAgaWYgKG9iai0+X3Byb3AuaGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllcygpICYmIChncyA9IG9iai0+X3Byb3AuZ2V0KHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcykpKSB7CisgICAgICBpZiAoYXR0cmlidXRlcyAmIEdldHRlclNldHRlcikgewogICAgICAg
ICBKU09iamVjdCAqc2V0dGVyRnVuYyA9IHN0YXRpY19jYXN0PEdldHRlclNldHRlckltcCAqPihn
cyktPmdldFNldHRlcigpOwogICAgICAgICAgICAgCiAgICAgICAgIGlmICghc2V0dGVyRnVuYykg
ewotICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAic2V0dGluZyBhIHByb3Bl
cnR5IHRoYXQgaGFzIG9ubHkgYSBnZXR0ZXIiKTsKKyAgICAgICAgICB0aHJvd1NldHRlckVycm9y
KGV4ZWMpOwogICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0y
MzYsNyArMjQzLDcgQEAgdm9pZCBKU09iamVjdDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29ucwog
ICAgICAgfQogICAgIH0KICAgICAgCi0gICAgaWYgKCFvYmotPl9wcm90byB8fCAhb2JqLT5fcHJv
dG8tPmlzT2JqZWN0KCkpCisgICAgaWYgKCFvYmotPl9wcm90by0+aXNPYmplY3QoKSkKICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBvYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCAqPihvYmot
Pl9wcm90byk7CkBAIC0yODcsNiArMjk0LDggQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHkoRXhlY1N0YXRlIAogICAgIGlmICgoYXR0cmlidXRlcyAmIERvbnREZWxldGUpKQogICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIF9wcm9wLnJlbW92ZShwcm9wZXJ0eU5hbWUpOworICAgIGlmIChh
dHRyaWJ1dGVzICYgR2V0dGVyU2V0dGVyKSAKKyAgICAgICAgX3Byb3Auc2V0SGFzR2V0dGVyU2V0
dGVyUHJvcGVydGllcyhfcHJvcC5jb250YWluc0dldHRlcnNPclNldHRlcnMoKSk7CiAgICAgcmV0
dXJuIHRydWU7CiAgIH0KIApAQCAtMzcwLDkgKzM3OSwxMCBAQCB2b2lkIEpTT2JqZWN0OjpkZWZp
bmVHZXR0ZXIoRXhlY1N0YXRlICplCiAgICAgICAgIGdzID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0
dGVySW1wICo+KG8pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGdzID0gbmV3IEdldHRlclNldHRl
ckltcDsKLSAgICAgICAgcHV0RGlyZWN0KHByb3BlcnR5TmFtZSwgZ3MpOworICAgICAgICBwdXRE
aXJlY3QocHJvcGVydHlOYW1lLCBncywgR2V0dGVyU2V0dGVyKTsKICAgICB9CiAgICAgCisgICAg
X3Byb3Auc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyh0cnVlKTsKICAgICBncy0+c2V0R2V0
dGVyKGdldHRlckZ1bmMpOwogfQogCkBAIC0zODYsOCArMzk2LDEwIEBAIHZvaWQgSlNPYmplY3Q6
OmRlZmluZVNldHRlcihFeGVjU3RhdGUgKmUKICAgICB9IGVsc2UgewogICAgICAgICBncyA9IG5l
dyBHZXR0ZXJTZXR0ZXJJbXA7CiAgICAgICAgIHB1dERpcmVjdChwcm9wZXJ0eU5hbWUsIGdzKTsK
KyAgICAgICAgcHV0RGlyZWN0KHByb3BlcnR5TmFtZSwgZ3MsIEdldHRlclNldHRlcik7CiAgICAg
fQogICAgIAorICAgIF9wcm9wLnNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXModHJ1ZSk7CiAg
ICAgZ3MtPnNldFNldHRlcihzZXR0ZXJGdW5jKTsKIH0KIApAQCAtNTIwLDYgKzUzMiwxNiBAQCB2
b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoY29uc3QgSWRlbnRpZmllCiAgICAgX3Byb3AucHV0KHBy
b3BlcnR5TmFtZSwganNOdW1iZXIodmFsdWUpLCBhdHRyKTsKIH0KIAordm9pZCBKU09iamVjdDo6
ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgKipsb2Nh
dGlvbikKK3sKKyAgICBHZXR0ZXJTZXR0ZXJJbXAgKmdzID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0
dGVySW1wICo+KCpsb2NhdGlvbik7CisgICAgSlNPYmplY3QgKmdldHRlckZ1bmMgPSBncy0+Z2V0
R2V0dGVyKCk7CisgICAgaWYgKGdldHRlckZ1bmMpCisgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xv
dCh0aGlzLCBnZXR0ZXJGdW5jKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVk
KHRoaXMpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXJyb3IgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjb25zdCBjaGFyICogY29u
c3QgZXJyb3JOYW1lc0FycltdID0gewpJbmRleDoga2pzL29iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNTEKZGlmZiAtdSAtcCAtcjEuNTEga2pzL29iamVjdC5oCi0tLSBranMvb2Jq
ZWN0LmgJMTMgRGVjIDIwMDUgMjE6MjQ6NTIgLTAwMDAJMS41MQorKysga2pzL29iamVjdC5oCTE5
IERlYyAyMDA1IDAzOjMzOjQ4IC0wMDAwCkBAIC01MCwxMiArNTAsMTMgQEAgbmFtZXNwYWNlIEtK
UyB7CiAKICAgLy8gRUNNQSAyNjItMyA4LjYuMQogICAvLyBQcm9wZXJ0eSBhdHRyaWJ1dGVzCi0g
IGVudW0gQXR0cmlidXRlIHsgTm9uZSAgICAgICA9IDAsCi0gICAgICAgICAgICAgICAgICAgUmVh
ZE9ubHkgICA9IDEgPDwgMSwgLy8gcHJvcGVydHkgY2FuIGJlIG9ubHkgcmVhZCwgbm90IHdyaXR0
ZW4KLSAgICAgICAgICAgICAgICAgICBEb250RW51bSAgID0gMSA8PCAyLCAvLyBwcm9wZXJ0eSBk
b2Vzbid0IGFwcGVhciBpbiAoZm9yIC4uIGluIC4uKQotICAgICAgICAgICAgICAgICAgIERvbnRE
ZWxldGUgPSAxIDw8IDMsIC8vIHByb3BlcnR5IGNhbid0IGJlIGRlbGV0ZWQKLSAgICAgICAgICAg
ICAgICAgICBJbnRlcm5hbCAgID0gMSA8PCA0LCAvLyBhbiBpbnRlcm5hbCBwcm9wZXJ0eSwgc2V0
IHRvIGJ5cGFzcyBjaGVja3MKLSAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiAgID0gMSA8PCA1
IH07IC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gLSBvbmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0
YWJsZXMKKyAgZW51bSBBdHRyaWJ1dGUgeyBOb25lICAgICAgICAgPSAwLAorICAgICAgICAgICAg
ICAgICAgIFJlYWRPbmx5ICAgICA9IDEgPDwgMSwgLy8gcHJvcGVydHkgY2FuIGJlIG9ubHkgcmVh
ZCwgbm90IHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICBEb250RW51bSAgICAgPSAxIDw8IDIs
IC8vIHByb3BlcnR5IGRvZXNuJ3QgYXBwZWFyIGluIChmb3IgLi4gaW4gLi4pCisgICAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZSAgID0gMSA8PCAzLCAvLyBwcm9wZXJ0eSBjYW4ndCBiZSBkZWxl
dGVkCisgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwgICAgID0gMSA8PCA0LCAvLyBhbiBpbnRl
cm5hbCBwcm9wZXJ0eSwgc2V0IHRvIGJ5cGFzcyBjaGVja3MKKyAgICAgICAgICAgICAgICAgICBG
dW5jdGlvbiAgICAgPSAxIDw8IDUsIC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gLSBvbmx5IHVz
ZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMKKyAgICAgICAgICAgICAgICAgICBHZXR0ZXJTZXR0ZXIg
PSAxIDw8IDYgfTsgLy8gcHJvcGVydHkgaXMgYSBnZXR0ZXIgb3Igc2V0dGVyCiAKICAgLyoqCiAg
ICAqIENsYXNzIEluZm9ybWF0aW9uCkBAIC01MDIsNyArNTAzLDkgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIHsgcmV0dXJuIF9wcm9wLmdldExvY2F0aW9uKHByb3BlcnR5TmFtZSk7IH0KICAg
ICB2b2lkIHB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
KnZhbHVlLCBpbnQgYXR0ciA9IDApOwogICAgIHZvaWQgcHV0RGlyZWN0KGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgaW50IHZhbHVlLCBpbnQgYXR0ciA9IDApOwotICAgIAorCisgICAg
dm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSAq
KmxvY2F0aW9uKTsKKwogICAgIHZvaWQgZGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU09iamVjdCAqZ2V0dGVyRnVuYyk7CiAgICAg
dm9pZCBkZWZpbmVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0ICpzZXR0ZXJGdW5jKTsKIApAQCAtNTY2LDExICs1NjksNiBAQCBK
U09iamVjdCAqdGhyb3dFcnJvcihFeGVjU3RhdGUgKiwgRXJyb3JUCiBKU09iamVjdCAqdGhyb3dF
cnJvcihFeGVjU3RhdGUgKiwgRXJyb3JUeXBlLCBjb25zdCBVU3RyaW5nICZtZXNzYWdlKTsKIEpT
T2JqZWN0ICp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIgKm1l
c3NhZ2UpOwogSlNPYmplY3QgKnRocm93RXJyb3IoRXhlY1N0YXRlICosIEVycm9yVHlwZSk7Ci0g
IAotaW5saW5lIGJvb2wgSlNDZWxsOjppc09iamVjdChjb25zdCBDbGFzc0luZm8gKmluZm8pIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgSlNPYmpl
Y3QgKj4odGhpcyktPmluaGVyaXRzKGluZm8pOwotfQogCiBpbmxpbmUgSlNPYmplY3Q6OkpTT2Jq
ZWN0KEpTT2JqZWN0ICpwcm90bykKICAgICA6IF9wcm90byhwcm90byksIF9pbnRlcm5hbFZhbHVl
KDApCkBAIC02MTIsNiArNjEwLDE4IEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppbmhlcml0cyhj
b25zdCBDbGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKy8vIHRoaXMgbWV0aG9kIGlzIGhlcmUg
dG8gYmUgYWZ0ZXIgdGhlIGlubGluZSBkZWNsYXJhdGlvbiBvZiBKU09iamVjdDo6aW5oZXJpdHMK
K2lubGluZSBib29sIEpTQ2VsbDo6aXNPYmplY3QoY29uc3QgQ2xhc3NJbmZvICppbmZvKSBjb25z
dAoreworICAgIHJldHVybiBpc09iamVjdCgpICYmIHN0YXRpY19jYXN0PGNvbnN0IEpTT2JqZWN0
ICo+KHRoaXMpLT5pbmhlcml0cyhpbmZvKTsKK30KKworLy8gdGhpcyBtZXRob2QgaXMgaGVyZSB0
byBiZSBhZnRlciB0aGUgaW5saW5lIGRlY2xhcmF0aW9uIG9mIEpTQ2VsbDo6aXNPYmplY3QKK2lu
bGluZSBib29sIEpTVmFsdWU6OmlzT2JqZWN0KGNvbnN0IENsYXNzSW5mbyAqYykgY29uc3QKK3sK
KyAgICByZXR1cm4gIVNpbXBsZU51bWJlcjo6aXModGhpcykgJiYgZG93bmNhc3QoKS0+aXNPYmpl
Y3QoYyk7Cit9CisKIC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRo
aXMgbGFyZ2UgYnV0IGl0IG1ha2VzIGEgYmlnIGRpZmZlcmVuY2UKIC8vIHNpbmNlIHRoaXMgaXMg
ZnVuY3Rpb24gdmVyeSBob3QgaW4gdmFyaWFibGUgbG9va3VwCiBpbmxpbmUgYm9vbCBKU09iamVj
dDo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC02MzIsMTkgKzY0MiwxMyBAQCBpbmxp
bmUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEV4CiAvLyBJdCBtYXkgc2VlbSBjcmF6
eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBlc3BlY2lhbGx5IGEgdmlydHVhbCBm
dW5jdGlvbiwKIC8vIGJ1dCBpdCBtYWtlcyBhIGJpZyBkaWZmZXJlbmNlIHRvIHByb3BlcnR5IGxv
b2t1cCB0aGF0IGRlcml2ZWQgY2xhc3NlcyBjYW4gaW5saW5lIHRoZWlyCiAvLyBiYXNlIGNsYXNz
IGNhbGwgdG8gdGhpcy4KLWlubGluZSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKK2lubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgYm9vbCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKEpTVmFs
dWUgKipsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSkpIHsKLSAgICAg
ICAgaWYgKCgqbG9jYXRpb24pLT50eXBlKCkgPT0gR2V0dGVyU2V0dGVyVHlwZSkgewotICAgICAg
ICAgICAgR2V0dGVyU2V0dGVySW1wICpncyA9IHN0YXRpY19jYXN0PEdldHRlclNldHRlckltcCAq
PigqbG9jYXRpb24pOwotICAgICAgICAgICAgSlNPYmplY3QgKmdldHRlckZ1bmMgPSBncy0+Z2V0
R2V0dGVyKCk7Ci0gICAgICAgICAgICBpZiAoZ2V0dGVyRnVuYykKLSAgICAgICAgICAgICAgICBz
bG90LnNldEdldHRlclNsb3QodGhpcywgZ2V0dGVyRnVuYyk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChfcHJvcC5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgLyogJiYgKCps
b2NhdGlvbiktPnR5cGUoKSA9PSBHZXR0ZXJTZXR0ZXJUeXBlICovKQorICAgICAgICAgICAgZmls
bEdldHRlclByb3BlcnR5U2xvdChzbG90LCBsb2NhdGlvbik7CisgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KHRoaXMsIGxvY2F0aW9uKTsKLSAgICAgICAgfQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IGtqcy9wcm9wZXJ0eV9tYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlf
bWFwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41NApkaWZmIC11IC1wIC1yMS41NCBranMv
cHJvcGVydHlfbWFwLmNwcAotLS0ga2pzL3Byb3BlcnR5X21hcC5jcHAJMTEgRGVjIDIwMDUgMDI6
MDU6NDcgLTAwMDAJMS41NAorKysga2pzL3Byb3BlcnR5X21hcC5jcHAJMTkgRGVjIDIwMDUgMDM6
MzM6NDggLTAwMDAKQEAgLTU2Niw2ICs1NjYsMjMgQEAgc3RhdGljIGludCBjb21wYXJlUHJvcGVy
dHlNYXBFbnRyeUluZGljZQogICAgIHJldHVybiAwOwogfQogCitib29sIFByb3BlcnR5TWFwOjpj
b250YWluc0dldHRlcnNPclNldHRlcnMoKSBjb25zdAoreworICAgIGlmICghX3RhYmxlKSB7Cisj
aWYgVVNFX1NJTkdMRV9FTlRSWQorICAgICAgICByZXR1cm4gX3NpbmdsZUVudHJ5LmF0dHJpYnV0
ZXMgJiBHZXR0ZXJTZXR0ZXI7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGZvciAoaW50IGkgPSAwOyBpICE9IF90YWJsZS0+c2l6ZTsgKytpKSB7CisgICAgICAg
IGlmIChfdGFibGUtPmVudHJpZXNbaV0uYXR0cmlidXRlcyAmIEdldHRlclNldHRlcikKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IHZvaWQgUHJvcGVydHlNYXA6OmFkZEVudW1lcmFibGVzVG9SZWZlcmVuY2VMaXN0KFJlZmVyZW5j
ZUxpc3QgJmxpc3QsIEpTT2JqZWN0ICpiYXNlKSBjb25zdAogewogICAgIGlmICghX3RhYmxlKSB7
CkluZGV4OiBranMvcHJvcGVydHlfbWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yNwpkaWZmIC11IC1wIC1yMS4yNyBranMvcHJvcGVydHlfbWFwLmgKLS0tIGtqcy9wcm9wZXJ0
eV9tYXAuaAkxMSBEZWMgMjAwNSAwMjowNTo0NyAtMDAwMAkxLjI3CisrKyBranMvcHJvcGVydHlf
bWFwLmgJMTkgRGVjIDIwMDUgMDM6MzM6NDggLTAwMDAKQEAgLTYwLDcgKzYwLDggQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICAgIFByb3BlcnR5TWFwSGFzaFRhYmxlRW50cnkoKSA6IGtleSgwKSB7
IH0KICAgICAgICAgVVN0cmluZzo6UmVwICprZXk7CiAgICAgICAgIEpTVmFsdWUgKnZhbHVlOwot
ICAgICAgICBpbnQgYXR0cmlidXRlczsKKyAgICAgICAgc2hvcnQgYXR0cmlidXRlczsKKyAgICAg
ICAgc2hvcnQgZ2xvYmFsR2V0dGVyU2V0dGVyRmxhZzsKICAgICAgICAgaW50IGluZGV4OwogICAg
IH07CiAvKioKQEAgLTg3LDYgKzg4LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB2b2lk
IHNhdmUoU2F2ZWRQcm9wZXJ0aWVzICYpIGNvbnN0OwogICAgICAgICB2b2lkIHJlc3RvcmUoY29u
c3QgU2F2ZWRQcm9wZXJ0aWVzICZwKTsKIAorICAgICAgICBib29sIGhhc0dldHRlclNldHRlclBy
b3BlcnRpZXMoKSBjb25zdCB7IC8qIHJldHVybiBfc2luZ2xlRW50cnkuZ2xvYmFsR2V0dGVyU2V0
dGVyRmxhZzsgKi8gcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZvaWQgc2V0SGFzR2V0dGVyU2V0
dGVyUHJvcGVydGllcyhib29sIGYpIHsgLyogX3NpbmdsZUVudHJ5Lmdsb2JhbEdldHRlclNldHRl
ckZsYWcgPSBmOyAqLyB9CisKKyAgICAgICAgYm9vbCBjb250YWluc0dldHRlcnNPclNldHRlcnMo
KSBjb25zdDsKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgYm9vbCBrZXlzTWF0Y2goY29u
c3QgVVN0cmluZzo6UmVwICosIGNvbnN0IFVTdHJpbmc6OlJlcCAqKTsKICAgICAgICAgdm9pZCBl
eHBhbmQoKTsKQEAgLTEwNSw4ICsxMTAsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgRW50
cnkgX3NpbmdsZUVudHJ5OwogICAgIH07CiAKLWlubGluZSBQcm9wZXJ0eU1hcDo6UHJvcGVydHlN
YXAoKSA6IF90YWJsZShOVUxMKQoraW5saW5lIFByb3BlcnR5TWFwOjpQcm9wZXJ0eU1hcCgpIDog
X3RhYmxlKDApCiB7CisgICAgX3NpbmdsZUVudHJ5Lmdsb2JhbEdldHRlclNldHRlckZsYWcgPSAw
OwogfQogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDoga2pzL3NpbXBsZV9udW1iZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3NpbXBsZV9udW1iZXIu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC11IC1wIC1yMS4yMSBranMvc2ltcGxl
X251bWJlci5oCi0tLSBranMvc2ltcGxlX251bWJlci5oCTExIERlYyAyMDA1IDAyOjA1OjQ4IC0w
MDAwCTEuMjEKKysrIGtqcy9zaW1wbGVfbnVtYmVyLmgJMTkgRGVjIDIwMDUgMDM6MzM6NDggLTAw
MDAKQEAgLTM5LDcgKzM5LDcgQEAgdXNpbmcgc3RkOjpzaWduYml0OwogI2VuZGlmCiAKICNpZiBk
ZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPiAzKQotI2RlZmluZSBBTFdBWVNfSU5MSU5F
IF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSkKKyNkZWZpbmUgQUxXQVlTX0lOTElORSBp
bmxpbmUgX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKQogI2Vsc2UKICNkZWZpbmUgQUxX
QVlTX0lOTElORSBpbmxpbmUKICNlbmRpZgpJbmRleDoga2pzL3ZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjQxCmRpZmYgLXUgLXAgLXIxLjQxIGtqcy92YWx1ZS5oCi0tLSBranMvdmFs
dWUuaAkxMyBEZWMgMjAwNSAyMToyNDo1MyAtMDAwMAkxLjQxCisrKyBranMvdmFsdWUuaAkxOSBE
ZWMgMjAwNSAwMzozMzo0OCAtMDAwMApAQCAtMzEzLDExICszMTMsNiBAQCBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjppc09iamVjdCgpIGNvbnN0CiAgICAgcmV0dXJuICFTaW1wbGVOdW1iZXI6OmlzKHRo
aXMpICYmIGRvd25jYXN0KCktPmlzT2JqZWN0KCk7CiB9CiAKLWlubGluZSBib29sIEpTVmFsdWU6
OmlzT2JqZWN0KGNvbnN0IENsYXNzSW5mbyAqYykgY29uc3QKLXsKLSAgICByZXR1cm4gIVNpbXBs
ZU51bWJlcjo6aXModGhpcykgJiYgZG93bmNhc3QoKS0+aXNPYmplY3QoYyk7Ci19Ci0KIGlubGlu
ZSBib29sIEpTVmFsdWU6OmdldEJvb2xlYW4oYm9vbCYgdikgY29uc3QKIHsKICAgICByZXR1cm4g
IVNpbXBsZU51bWJlcjo6aXModGhpcykgJiYgZG93bmNhc3QoKS0+Z2V0Qm9vbGVhbih2KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5282</attachid>
            <date>2005-12-26 02:45:42 -0800</date>
            <delta_ts>2005-12-26 09:08:39 -0800</delta_ts>
            <desc>this one gets the regression down to ~1% and doesn&apos;t break anything afaik</desc>
            <filename>getter-setter-speedups.patch.txt</filename>
            <type>text/plain</type>
            <size>13730</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkyOQpkaWZmIC11IC1wIC1y
MS45MjkgQ2hhbmdlTG9nCi0tLSBDaGFuZ2VMb2cJMjUgRGVjIDIwMDUgMDk6MjI6MzIgLTAwMDAJ
MS45MjkKKysrIENoYW5nZUxvZwkyNiBEZWMgMjAwNSAxMDo0NTozNyAtMDAwMApAQCAtMSwzICsx
LDQxIEBACisyMDA1LTEyLTI2ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwlDaGFuZ2VzIGJ5IG1lIGFu
ZCBBbmRlcnMuCisKKwktIGFsc28gZml4ZWQgc29tZSB3YXJuaW5ncyByZXBvcnRlZCBieSAtV2lu
bGluZQorCQorICAgICAgICAqIEphdmFTY3JpcHRDb3JlUHJlZml4Lmg6IE1vdmUgbmV3IGFuZCBk
ZWxldGUgZGVmaW5pdGlvbnMgaGlnaGVyIHNvIHRoZXJlCisJYXJlbid0IGNvbmZsaWN0cyB3aXRo
IHVzZSBpbiBzdGFuZGFyZCBDKysgaGVhZGVycworICAgICAgICAqIGtqcy9vYmplY3QuY3BwOgor
ICAgICAgICAoS0pTOjp0aHJvd1NldHRlckVycm9yKTogTW92ZWQgdGhpcyBwaWVjZSBvZiBwdXQg
aW50byBhIHNlcHJhdGUgZnVuY3Rpb24KKwl0byBhdm9pZCB0aGUgUElDIGJyYW5jaC4KKyAgICAg
ICAgKEtKUzo6SlNPYmplY3Q6OnB1dCk6IFVzZSBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzIHRv
IGF2b2lkIGV4cGVuc2l2ZSBzdHVmZgorCXdoZW4gbm90IG5lZWRlZC4gQWxzbyB1c2UgR2V0dGVy
U2V0dGVyIHByb3BlcnRpZXMgYXR0cmlidXRlLgorICAgICAgICAoS0pTOjpKU09iamVjdDo6ZGVs
ZXRlUHJvcGVydHkpOiBSZWNvbXB1dGUgd2hldGhlciBhbnkgcHJvcGVydGllcyBhcmUgZ2V0dGVy
L3NldHRlcgorCXByb3BlcnRpZXMgYW55IG1vcmUsIGlmIHRoaXMgb25lIHdhcyBvbmUuCisgICAg
ICAgIChLSlM6OkpTT2JqZWN0OjpkZWZpbmVHZXR0ZXIpOiBMZXQgdGhlIFByb3BlcnR5TWFwIGtu
b3cgdGhhdCBpdCBoYXMgZ2V0dGVyL3NldHRlcgorCXByb3BlcnRpZXMgbm93IChhbmQgdXNlIHRo
ZSBuZXcgYXR0cmlidXRlKS4KKyAgICAgICAgKEtKUzo6SlNPYmplY3Q6OmRlZmluZVNldHRlcik6
IERpdHRvLgorICAgICAgICAoS0pTOjpKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdCk6
IE91dC1vZi1saW5lIGhlbHBlciBmb3IgZ2V0T3duUHJvcGVydHlTbG90LAorCXRvIGF2b2lkIGds
b2JhbCB2YXJpYWJsZSBhY2Nlc3MgaW4gdGhlIGhvdCBjb2RlIHBhdGguCisgICAgICAgICoga2pz
L29iamVjdC5oOgorICAgICAgICAoS0pTOjopOiBBZGRlZCBHZXR0ZXJTZXR0ZXIgYXR0cmlidXRl
LgorICAgICAgICAoS0pTOjpKU0NlbGw6OmlzT2JqZWN0KTogTW92ZWQgbG93ZXIgdG8gYmUgYWZ0
ZXIgaW5saW5lIG1ldGhvZHMgaXQgdXNlcy4KKyAgICAgICAgKEtKUzo6SlNWYWx1ZTo6aXNPYmpl
Y3QpOiBkaXR0bworICAgICAgICAoS0pTOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KTog
dHJ5IHRvIGF2b2lkIGltcGFjdCBvZiBnZXR0ZXJzIGFuZCBzZXR0ZXJzCisJYXMgbXVjaCBhcyBw
b3NzaWJsZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGV5IGFyZSBub3QgYmVpbmcgdXNlZAorICAgICAg
ICAqIGtqcy9wcm9wZXJ0eV9tYXAuY3BwOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6Y29u
dGFpbnNHZXR0ZXJzT3JTZXR0ZXJzKTogTmV3IG1ldGhvZCB0byBoZWxwIHdpdGggdGhpcworICAg
ICAgICAqIGtqcy9wcm9wZXJ0eV9tYXAuaDoKKyAgICAgICAgKEtKUzo6UHJvcGVydHlNYXA6Omhh
c0dldHRlclNldHRlclByb3BlcnRpZXMpOiBEaXR0bworICAgICAgICAoS0pTOjpQcm9wZXJ0eU1h
cDo6c2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyk6IERpdHRvCisgICAgICAgIChLSlM6OlBy
b3BlcnR5TWFwOjpQcm9wZXJ0eU1hcCk6IEFkZGVkIGEgY3JhenkgaGFjayB0byBzdG9yZSB0aGUK
KwlnbG9iYWwgImhhcyBnZXR0ZXIvc2V0dGVyIHByb3BlcnRpZXMiIGZsYWcgaW4gdGhlIHByb3Bl
cnR5IG1hcAorCXNpbmdsZSBlbnRyeSwgdG8gYXZvaWQgbWFraW5nIG9iamVjdHMgYW55IGJpZ2dl
ci4KKyAgICAgICAgKiBranMvdmFsdWUuaDogTW92ZWQgc29tZSB0aGluZ3MgdG8gb2JqZWN0Lmgg
dG8gbWFrZSAtV2lubGluZSBoYXBwaWVyCisKIDIwMDUtMTItMjQgIE1hY2llaiBTdGFjaG93aWFr
ICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIGFuZCBEYXZlIEh5
YXR0LgpJbmRleDogSmF2YVNjcmlwdENvcmVQcmVmaXguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVQcmVmaXguaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYgSmF2YVNjcmlwdENvcmVQcmVmaXguaAot
LS0gSmF2YVNjcmlwdENvcmVQcmVmaXguaAkzIE9jdCAyMDA1IDIxOjExOjM5IC0wMDAwCTEuNgor
KysgSmF2YVNjcmlwdENvcmVQcmVmaXguaAkyNiBEZWMgMjAwNSAxMDo0NTozNyAtMDAwMApAQCAt
MSw5ICsxLDE2IEBACiAjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgbmV3ICgiaWYgeW91IHVz
ZSBuZXcvZGVsZXRlIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGNvbmZpZy5oIGF0IHRoZSB0b3Agb2Yg
dGhlIGZpbGUiKCkpIAorI2RlZmluZSBkZWxldGUgKCJpZiB5b3UgdXNlIG5ldy9kZWxldGUgbWFr
ZSBzdXJlIHRvIGluY2x1ZGUgY29uZmlnLmggYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSIoKSkgCisj
ZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCiAjZGVmaW5lIE5VTEwgX19udWxsCiAjZWxzZQog
I2RlZmluZSBOVUxMICgodm9pZCAqKTApCiAjZW5kaWYKIAorI2luY2x1ZGUgImNvbmZpZy5oIgor
CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxmbG9h
dC5oPgpAQCAtNDAsOCArNDcsNCBAQAogI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8dHlwZWlu
Zm8+CiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBuZXcgKCJpZiB5b3UgdXNlIG5ldy9k
ZWxldGUgbWFrZSBzdXJlIHRvIGluY2x1ZGUgY29uZmlnLmggYXQgdGhlIHRvcCBvZiB0aGUgZmls
ZSIoKSkgCi0jZGVmaW5lIGRlbGV0ZSAoImlmIHlvdSB1c2UgbmV3L2RlbGV0ZSBtYWtlIHN1cmUg
dG8gaW5jbHVkZSBjb25maWcuaCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIigpKSAKLSNlbmRpZgog
I2VuZGlmCkluZGV4OiBranMvb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NTkKZGlmZiAtdSAtcCAtcjEuNTkga2pzL29iamVjdC5jcHAKLS0tIGtqcy9vYmplY3QuY3BwCTEz
IERlYyAyMDA1IDIxOjI0OjUyIC0wMDAwCTEuNTkKKysrIGtqcy9vYmplY3QuY3BwCTI2IERlYyAy
MDA1IDEwOjQ1OjM4IC0wMDAwCkBAIC0xOTAsNiArMTkwLDExIEBAIGJvb2wgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3QKICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdChleGVj
LCBJZGVudGlmaWVyOjpmcm9tKHByb3BlcnR5TmFtZSksIHNsb3QpOwogfQogCitzdGF0aWMgdm9p
ZCB0aHJvd1NldHRlckVycm9yKEV4ZWNTdGF0ZSAqZXhlYykKK3sKKyAgdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IsICJzZXR0aW5nIGEgcHJvcGVydHkgdGhhdCBoYXMgb25seSBhIGdldHRlciIp
OworfQorCiAvLyBFQ01BIDguNi4yLjIKIHZvaWQgSlNPYmplY3Q6OnB1dChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSAqdmFsdWUsIGludCBh
dHRyKQogewpAQCAtMjE1LDEyICsyMjAsMTQgQEAgdm9pZCBKU09iamVjdDo6cHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29ucwogCiAgIEpTT2JqZWN0ICpvYmogPSB0aGlzOwogICB3aGlsZSAodHJ1ZSkg
ewotICAgIGlmIChKU1ZhbHVlICpncyA9IG9iai0+X3Byb3AuZ2V0KHByb3BlcnR5TmFtZSkpIHsK
LSAgICAgIGlmIChncy0+dHlwZSgpID09IEdldHRlclNldHRlclR5cGUpIHsKKyAgICBKU1ZhbHVl
ICpnczsKKyAgICBpbnQgYXR0cmlidXRlczsKKyAgICBpZiAob2JqLT5fcHJvcC5oYXNHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgKGdzID0gb2JqLT5fcHJvcC5nZXQocHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzKSkpIHsKKyAgICAgIGlmIChhdHRyaWJ1dGVzICYgR2V0dGVyU2V0dGVyKSB7CiAg
ICAgICAgIEpTT2JqZWN0ICpzZXR0ZXJGdW5jID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0dGVySW1w
ICo+KGdzKS0+Z2V0U2V0dGVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKCFzZXR0ZXJG
dW5jKSB7Ci0gICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJzZXR0aW5nIGEg
cHJvcGVydHkgdGhhdCBoYXMgb25seSBhIGdldHRlciIpOworICAgICAgICAgIHRocm93U2V0dGVy
RXJyb3IoZXhlYyk7CiAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAK
QEAgLTIzNiw3ICsyNDMsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlICpleGVjLCBj
b25zCiAgICAgICB9CiAgICAgfQogICAgICAKLSAgICBpZiAoIW9iai0+X3Byb3RvIHx8ICFvYmot
Pl9wcm90by0+aXNPYmplY3QoKSkKKyAgICBpZiAoIW9iai0+X3Byb3RvLT5pc09iamVjdCgpKQog
ICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIG9iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+
KG9iai0+X3Byb3RvKTsKQEAgLTI4Nyw2ICsyOTQsOCBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eShFeGVjU3RhdGUgCiAgICAgaWYgKChhdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkpCiAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgX3Byb3AucmVtb3ZlKHByb3BlcnR5TmFtZSk7CisgICAg
aWYgKGF0dHJpYnV0ZXMgJiBHZXR0ZXJTZXR0ZXIpIAorICAgICAgICBfcHJvcC5zZXRIYXNHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzKF9wcm9wLmNvbnRhaW5zR2V0dGVyc09yU2V0dGVycygpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKICAgfQogCkBAIC0zNzAsOSArMzc5LDEwIEBAIHZvaWQgSlNPYmplY3Q6
OmRlZmluZUdldHRlcihFeGVjU3RhdGUgKmUKICAgICAgICAgZ3MgPSBzdGF0aWNfY2FzdDxHZXR0
ZXJTZXR0ZXJJbXAgKj4obyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZ3MgPSBuZXcgR2V0dGVy
U2V0dGVySW1wOwotICAgICAgICBwdXREaXJlY3QocHJvcGVydHlOYW1lLCBncyk7CisgICAgICAg
IHB1dERpcmVjdChwcm9wZXJ0eU5hbWUsIGdzLCBHZXR0ZXJTZXR0ZXIpOwogICAgIH0KICAgICAK
KyAgICBfcHJvcC5zZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKHRydWUpOwogICAgIGdzLT5z
ZXRHZXR0ZXIoZ2V0dGVyRnVuYyk7CiB9CiAKQEAgLTM4Niw4ICszOTYsMTAgQEAgdm9pZCBKU09i
amVjdDo6ZGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSAqZQogICAgIH0gZWxzZSB7CiAgICAgICAgIGdz
ID0gbmV3IEdldHRlclNldHRlckltcDsKICAgICAgICAgcHV0RGlyZWN0KHByb3BlcnR5TmFtZSwg
Z3MpOworICAgICAgICBwdXREaXJlY3QocHJvcGVydHlOYW1lLCBncywgR2V0dGVyU2V0dGVyKTsK
ICAgICB9CiAgICAgCisgICAgX3Byb3Auc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyh0cnVl
KTsKICAgICBncy0+c2V0U2V0dGVyKHNldHRlckZ1bmMpOwogfQogCkBAIC01MjAsNiArNTMyLDE2
IEBAIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChjb25zdCBJZGVudGlmaWUKICAgICBfcHJvcC5w
dXQocHJvcGVydHlOYW1lLCBqc051bWJlcih2YWx1ZSksIGF0dHIpOwogfQogCit2b2lkIEpTT2Jq
ZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSAq
KmxvY2F0aW9uKQoreworICAgIEdldHRlclNldHRlckltcCAqZ3MgPSBzdGF0aWNfY2FzdDxHZXR0
ZXJTZXR0ZXJJbXAgKj4oKmxvY2F0aW9uKTsKKyAgICBKU09iamVjdCAqZ2V0dGVyRnVuYyA9IGdz
LT5nZXRHZXR0ZXIoKTsKKyAgICBpZiAoZ2V0dGVyRnVuYykKKyAgICAgICAgc2xvdC5zZXRHZXR0
ZXJTbG90KHRoaXMsIGdldHRlckZ1bmMpOworICAgIGVsc2UKKyAgICAgICAgc2xvdC5zZXRVbmRl
ZmluZWQodGhpcyk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFcnJv
ciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGNvbnN0IGNoYXIg
KiBjb25zdCBlcnJvck5hbWVzQXJyW10gPSB7CkluZGV4OiBranMvb2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS41MQpkaWZmIC11IC1wIC1yMS41MSBranMvb2JqZWN0LmgKLS0tIGtq
cy9vYmplY3QuaAkxMyBEZWMgMjAwNSAyMToyNDo1MiAtMDAwMAkxLjUxCisrKyBranMvb2JqZWN0
LmgJMjYgRGVjIDIwMDUgMTA6NDU6NDEgLTAwMDAKQEAgLTUwLDEyICs1MCwxMyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKIAogICAvLyBFQ01BIDI2Mi0zIDguNi4xCiAgIC8vIFByb3BlcnR5IGF0dHJpYnV0
ZXMKLSAgZW51bSBBdHRyaWJ1dGUgeyBOb25lICAgICAgID0gMCwKLSAgICAgICAgICAgICAgICAg
ICBSZWFkT25seSAgID0gMSA8PCAxLCAvLyBwcm9wZXJ0eSBjYW4gYmUgb25seSByZWFkLCBub3Qg
d3JpdHRlbgotICAgICAgICAgICAgICAgICAgIERvbnRFbnVtICAgPSAxIDw8IDIsIC8vIHByb3Bl
cnR5IGRvZXNuJ3QgYXBwZWFyIGluIChmb3IgLi4gaW4gLi4pCi0gICAgICAgICAgICAgICAgICAg
RG9udERlbGV0ZSA9IDEgPDwgMywgLy8gcHJvcGVydHkgY2FuJ3QgYmUgZGVsZXRlZAotICAgICAg
ICAgICAgICAgICAgIEludGVybmFsICAgPSAxIDw8IDQsIC8vIGFuIGludGVybmFsIHByb3BlcnR5
LCBzZXQgdG8gYnlwYXNzIGNoZWNrcwotICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uICAgPSAx
IDw8IDUgfTsgLy8gcHJvcGVydHkgaXMgYSBmdW5jdGlvbiAtIG9ubHkgdXNlZCBieSBzdGF0aWMg
aGFzaHRhYmxlcworICBlbnVtIEF0dHJpYnV0ZSB7IE5vbmUgICAgICAgICA9IDAsCisgICAgICAg
ICAgICAgICAgICAgUmVhZE9ubHkgICAgID0gMSA8PCAxLCAvLyBwcm9wZXJ0eSBjYW4gYmUgb25s
eSByZWFkLCBub3Qgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgIERvbnRFbnVtICAgICA9IDEg
PDwgMiwgLy8gcHJvcGVydHkgZG9lc24ndCBhcHBlYXIgaW4gKGZvciAuLiBpbiAuLikKKyAgICAg
ICAgICAgICAgICAgICBEb250RGVsZXRlICAgPSAxIDw8IDMsIC8vIHByb3BlcnR5IGNhbid0IGJl
IGRlbGV0ZWQKKyAgICAgICAgICAgICAgICAgICBJbnRlcm5hbCAgICAgPSAxIDw8IDQsIC8vIGFu
IGludGVybmFsIHByb3BlcnR5LCBzZXQgdG8gYnlwYXNzIGNoZWNrcworICAgICAgICAgICAgICAg
ICAgIEZ1bmN0aW9uICAgICA9IDEgPDwgNSwgLy8gcHJvcGVydHkgaXMgYSBmdW5jdGlvbiAtIG9u
bHkgdXNlZCBieSBzdGF0aWMgaGFzaHRhYmxlcworICAgICAgICAgICAgICAgICAgIEdldHRlclNl
dHRlciA9IDEgPDwgNiB9OyAvLyBwcm9wZXJ0eSBpcyBhIGdldHRlciBvciBzZXR0ZXIKIAogICAv
KioKICAgICogQ2xhc3MgSW5mb3JtYXRpb24KQEAgLTUwMiw3ICs1MDMsOSBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICAgICAgeyByZXR1cm4gX3Byb3AuZ2V0TG9jYXRpb24ocHJvcGVydHlOYW1lKTsg
fQogICAgIHZvaWQgcHV0RGlyZWN0KGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNW
YWx1ZSAqdmFsdWUsIGludCBhdHRyID0gMCk7CiAgICAgdm9pZCBwdXREaXJlY3QoY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBpbnQgdmFsdWUsIGludCBhdHRyID0gMCk7Ci0gICAgCisK
KyAgICB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBKU1Zh
bHVlICoqbG9jYXRpb24pOworCiAgICAgdm9pZCBkZWZpbmVHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0ICpnZXR0ZXJGdW5jKTsK
ICAgICB2b2lkIGRlZmluZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNPYmplY3QgKnNldHRlckZ1bmMpOwogCkBAIC01NjYsMTEgKzU2OSw2
IEBAIEpTT2JqZWN0ICp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqLCBFcnJvclQKIEpTT2JqZWN0ICp0
aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IFVTdHJpbmcgJm1lc3NhZ2Up
OwogSlNPYmplY3QgKnRocm93RXJyb3IoRXhlY1N0YXRlICosIEVycm9yVHlwZSwgY29uc3QgY2hh
ciAqbWVzc2FnZSk7CiBKU09iamVjdCAqdGhyb3dFcnJvcihFeGVjU3RhdGUgKiwgRXJyb3JUeXBl
KTsKLSAgCi1pbmxpbmUgYm9vbCBKU0NlbGw6OmlzT2JqZWN0KGNvbnN0IENsYXNzSW5mbyAqaW5m
bykgY29uc3QKLXsKLSAgICByZXR1cm4gaXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBK
U09iamVjdCAqPih0aGlzKS0+aW5oZXJpdHMoaW5mbyk7Ci19CiAKIGlubGluZSBKU09iamVjdDo6
SlNPYmplY3QoSlNPYmplY3QgKnByb3RvKQogICAgIDogX3Byb3RvKHByb3RvKSwgX2ludGVybmFs
VmFsdWUoMCkKQEAgLTYxMiw2ICs2MTAsMTggQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OmluaGVy
aXRzKGNvbnN0IENsYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorLy8gdGhpcyBtZXRob2QgaXMg
aGVyZSB0byBiZSBhZnRlciB0aGUgaW5saW5lIGRlY2xhcmF0aW9uIG9mIEpTT2JqZWN0Ojppbmhl
cml0cworaW5saW5lIGJvb2wgSlNDZWxsOjppc09iamVjdChjb25zdCBDbGFzc0luZm8gKmluZm8p
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgSlNP
YmplY3QgKj4odGhpcyktPmluaGVyaXRzKGluZm8pOworfQorCisvLyB0aGlzIG1ldGhvZCBpcyBo
ZXJlIHRvIGJlIGFmdGVyIHRoZSBpbmxpbmUgZGVjbGFyYXRpb24gb2YgSlNDZWxsOjppc09iamVj
dAoraW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNPYmplY3QoY29uc3QgQ2xhc3NJbmZvICpjKSBjb25z
dAoreworICAgIHJldHVybiAhU2ltcGxlTnVtYmVyOjppcyh0aGlzKSAmJiBkb3duY2FzdCgpLT5p
c09iamVjdChjKTsKK30KKwogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rp
b24gdGhpcyBsYXJnZSBidXQgaXQgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZQogLy8gc2luY2UgdGhp
cyBpcyBmdW5jdGlvbiB2ZXJ5IGhvdCBpbiB2YXJpYWJsZSBsb29rdXAKIGlubGluZSBib29sIEpT
T2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTYzMiwxOSArNjQyLDEzIEBA
IGlubGluZSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXgKIC8vIEl0IG1heSBzZWVt
IGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMgbGFyZ2UsIGVzcGVjaWFsbHkgYSB2aXJ0
dWFsIGZ1bmN0aW9uLAogLy8gYnV0IGl0IG1ha2VzIGEgYmlnIGRpZmZlcmVuY2UgdG8gcHJvcGVy
dHkgbG9va3VwIHRoYXQgZGVyaXZlZCBjbGFzc2VzIGNhbiBpbmxpbmUgdGhlaXIKIC8vIGJhc2Ug
Y2xhc3MgY2FsbCB0byB0aGlzLgotaW5saW5lIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQoraW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBi
b29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAo
SlNWYWx1ZSAqKmxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lKSkgewot
ICAgICAgICBpZiAoKCpsb2NhdGlvbiktPnR5cGUoKSA9PSBHZXR0ZXJTZXR0ZXJUeXBlKSB7Ci0g
ICAgICAgICAgICBHZXR0ZXJTZXR0ZXJJbXAgKmdzID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0dGVy
SW1wICo+KCpsb2NhdGlvbik7Ci0gICAgICAgICAgICBKU09iamVjdCAqZ2V0dGVyRnVuYyA9IGdz
LT5nZXRHZXR0ZXIoKTsKLSAgICAgICAgICAgIGlmIChnZXR0ZXJGdW5jKQotICAgICAgICAgICAg
ICAgIHNsb3Quc2V0R2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsKLSAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKF9wcm9wLmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiBs
b2NhdGlvblswXS0+dHlwZSgpID09IEdldHRlclNldHRlclR5cGUpCisgICAgICAgICAgICBmaWxs
R2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICAgICAgZWxzZQogICAgICAg
ICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgbG9jYXRpb24pOwotICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDoga2pzL3Byb3BlcnR5X21hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9t
YXAuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU2CmRpZmYgLXUgLXAgLXIxLjU2IGtqcy9w
cm9wZXJ0eV9tYXAuY3BwCi0tLSBranMvcHJvcGVydHlfbWFwLmNwcAkyNSBEZWMgMjAwNSAwOToy
MjozNCAtMDAwMAkxLjU2CisrKyBranMvcHJvcGVydHlfbWFwLmNwcAkyNiBEZWMgMjAwNSAxMDo0
NTo0MiAtMDAwMApAQCAtNTY2LDYgKzU2NiwyMyBAQCBzdGF0aWMgaW50IGNvbXBhcmVQcm9wZXJ0
eU1hcEVudHJ5SW5kaWNlCiAgICAgcmV0dXJuIDA7CiB9CiAKK2Jvb2wgUHJvcGVydHlNYXA6OmNv
bnRhaW5zR2V0dGVyc09yU2V0dGVycygpIGNvbnN0Cit7CisgICAgaWYgKCFfdGFibGUpIHsKKyNp
ZiBVU0VfU0lOR0xFX0VOVFJZCisgICAgICAgIHJldHVybiBfc2luZ2xlRW50cnkuYXR0cmlidXRl
cyAmIEdldHRlclNldHRlcjsKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gX3RhYmxlLT5zaXplOyArK2kpIHsKKyAgICAgICAg
aWYgKF90YWJsZS0+ZW50cmllc1tpXS5hdHRyaWJ1dGVzICYgR2V0dGVyU2V0dGVyKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwog
dm9pZCBQcm9wZXJ0eU1hcDo6YWRkRW51bWVyYWJsZXNUb1JlZmVyZW5jZUxpc3QoUmVmZXJlbmNl
TGlzdCAmbGlzdCwgSlNPYmplY3QgKmJhc2UpIGNvbnN0CiB7CiAgICAgaWYgKCFfdGFibGUpIHsK
SW5kZXg6IGtqcy9wcm9wZXJ0eV9tYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
SmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjI3CmRpZmYgLXUgLXAgLXIxLjI3IGtqcy9wcm9wZXJ0eV9tYXAuaAotLS0ga2pzL3Byb3BlcnR5
X21hcC5oCTExIERlYyAyMDA1IDAyOjA1OjQ3IC0wMDAwCTEuMjcKKysrIGtqcy9wcm9wZXJ0eV9t
YXAuaAkyNiBEZWMgMjAwNSAxMDo0NTo0MiAtMDAwMApAQCAtNjAsNyArNjAsOCBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgICAgUHJvcGVydHlNYXBIYXNoVGFibGVFbnRyeSgpIDoga2V5KDApIHsg
fQogICAgICAgICBVU3RyaW5nOjpSZXAgKmtleTsKICAgICAgICAgSlNWYWx1ZSAqdmFsdWU7Ci0g
ICAgICAgIGludCBhdHRyaWJ1dGVzOworICAgICAgICBzaG9ydCBhdHRyaWJ1dGVzOworICAgICAg
ICBzaG9ydCBnbG9iYWxHZXR0ZXJTZXR0ZXJGbGFnOwogICAgICAgICBpbnQgaW5kZXg7CiAgICAg
fTsKIC8qKgpAQCAtODcsNiArODgsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHZvaWQg
c2F2ZShTYXZlZFByb3BlcnRpZXMgJikgY29uc3Q7CiAgICAgICAgIHZvaWQgcmVzdG9yZShjb25z
dCBTYXZlZFByb3BlcnRpZXMgJnApOwogCisgICAgICAgIGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJv
cGVydGllcygpIGNvbnN0IHsgLyogcmV0dXJuIF9zaW5nbGVFbnRyeS5nbG9iYWxHZXR0ZXJTZXR0
ZXJGbGFnOyAqLyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdm9pZCBzZXRIYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzKGJvb2wgZikgeyAvKiBfc2luZ2xlRW50cnkuZ2xvYmFsR2V0dGVyU2V0dGVy
RmxhZyA9IGY7ICovIH0KKworICAgICAgICBib29sIGNvbnRhaW5zR2V0dGVyc09yU2V0dGVycygp
IGNvbnN0OwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBib29sIGtleXNNYXRjaChjb25z
dCBVU3RyaW5nOjpSZXAgKiwgY29uc3QgVVN0cmluZzo6UmVwICopOwogICAgICAgICB2b2lkIGV4
cGFuZCgpOwpAQCAtMTA1LDggKzExMCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBFbnRy
eSBfc2luZ2xlRW50cnk7CiAgICAgfTsKIAotaW5saW5lIFByb3BlcnR5TWFwOjpQcm9wZXJ0eU1h
cCgpIDogX3RhYmxlKE5VTEwpCitpbmxpbmUgUHJvcGVydHlNYXA6OlByb3BlcnR5TWFwKCkgOiBf
dGFibGUoMCkKIHsKKyAgICBfc2luZ2xlRW50cnkuZ2xvYmFsR2V0dGVyU2V0dGVyRmxhZyA9IDA7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBranMvdmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNDEKZGlmZiAtdSAtcCAtcjEuNDEga2pzL3ZhbHVlLmgKLS0tIGtqcy92YWx1ZS5o
CTEzIERlYyAyMDA1IDIxOjI0OjUzIC0wMDAwCTEuNDEKKysrIGtqcy92YWx1ZS5oCTI2IERlYyAy
MDA1IDEwOjQ1OjQ0IC0wMDAwCkBAIC0zMTMsMTEgKzMxMyw2IEBAIGlubGluZSBib29sIEpTVmFs
dWU6OmlzT2JqZWN0KCkgY29uc3QKICAgICByZXR1cm4gIVNpbXBsZU51bWJlcjo6aXModGhpcykg
JiYgZG93bmNhc3QoKS0+aXNPYmplY3QoKTsKIH0KIAotaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNP
YmplY3QoY29uc3QgQ2xhc3NJbmZvICpjKSBjb25zdAotewotICAgIHJldHVybiAhU2ltcGxlTnVt
YmVyOjppcyh0aGlzKSAmJiBkb3duY2FzdCgpLT5pc09iamVjdChjKTsKLX0KLQogaW5saW5lIGJv
b2wgSlNWYWx1ZTo6Z2V0Qm9vbGVhbihib29sJiB2KSBjb25zdAogewogICAgIHJldHVybiAhU2lt
cGxlTnVtYmVyOjppcyh0aGlzKSAmJiBkb3duY2FzdCgpLT5nZXRCb29sZWFuKHYpOwo=
</data>
<flag name="review"
          id="1097"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>