<?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>125771</bug_id>
          
          <creation_ts>2013-12-16 01:40:46 -0800</creation_ts>
          <short_desc>Add a simple register allocator to WebCore for x86_64</short_desc>
          <delta_ts>2013-12-17 02:36:26 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>barraclough</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>960020</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-16 01:40:46 -0800</bug_when>
    <thetext>Add a simple register allocator to WebCore for x86_64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960023</commentid>
    <comment_count>1</comment_count>
      <attachid>219303</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-16 01:47:15 -0800</bug_when>
    <thetext>Created attachment 219303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960277</commentid>
    <comment_count>2</comment_count>
      <attachid>219303</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-16 15:52:50 -0800</bug_when>
    <thetext>Comment on attachment 219303
Patch

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

r=me

&gt; Source/WebCore/cssjit/RegisterAllocator.h:51
&gt; +    void reserveRegister(JSC::MacroAssembler::RegisterID registerID)

I think you could call this &quot;allocateRegister&quot;. It fits nicely in the C++ function overloading model: The extra argument explains the difference in behavior from the version of allocateRegister that doesn&apos;t take an argument.

&gt; Source/WebCore/cssjit/RegisterAllocator.h:63
&gt; +    void returnRegister(JSC::MacroAssembler::RegisterID registerID)

I would call this &quot;deallocateRegister&quot;, to match more closely with &quot;allocateRegister&quot;.

&gt; Source/WebCore/cssjit/RegisterAllocator.h:66
&gt; +        m_allocatedRegisters.remove(m_allocatedRegisters.reverseFind(registerID));

I think you should add a comment here explaining that we use reverseFind because we almost always return registers in a stack-like order.

&gt; Source/WebCore/cssjit/RegisterAllocator.h:110
&gt; +    m_registers.append(JSC::X86Registers::eax);
&gt; +    m_registers.append(JSC::X86Registers::ecx);
&gt; +    m_registers.append(JSC::X86Registers::esi);
&gt; +    m_registers.append(JSC::X86Registers::edi);
&gt; +    m_registers.append(JSC::X86Registers::r8);
&gt; +    m_registers.append(JSC::X86Registers::r9);
&gt; +    m_registers.append(JSC::X86Registers::r10);
&gt; +    m_registers.append(JSC::X86Registers::r11);

I think this would be clearer if:

(a) The list of registers were in a static const array, and you looped over the array, calling append;

and

(b) You added a comment explaining that these are the caller-save registers, and we use them because we want to avoid saving registers at the head of our JITed function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960440</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-17 02:36:26 -0800</bug_when>
    <thetext>Committed r160697: &lt;http://trac.webkit.org/changeset/160697&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219303</attachid>
            <date>2013-12-16 01:47:15 -0800</date>
            <delta_ts>2013-12-16 15:52:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125771-20131216014713.patch</filename>
            <type>text/plain</type>
            <size>12202</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwNjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDMwNzExY2FlNmI1YTgwNDgxZTRmY2M3
NzVkMDJmZDE2NTM2ZGMwNDIuLjM5ODZiZGYzNDhhMTEzODk5ZWMwOTg3MjQ2YWYyMWMyMDY5MDYw
YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMTItMTYgIEJlbmphbWluIFBvdWxhaW4gIDxi
ZW5qYW1pbkB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIHNpbXBsZSByZWdpc3RlciBhbGxv
Y2F0b3IgdG8gV2ViQ29yZSBmb3IgeDg2XzY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOiBBZGQgYSBuZXcgZmxhZyAiQ1NT
X1NFTEVDVE9SX0pJVCIgdG8gZ3VhcmQKKyAgICAgICAgYW4gZXhwZXJpbWVudGFsIEpJVCBjb21w
aWxlciBpbiBXZWJDb3JlLgorCiAyMDEzLTEyLTEzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIFJlbW92ZSBQcmUtVlMyMDEzIHN1cHBvcnQgY29k
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBjODIwNjAyYTY3M2I0YWQ5OTNiZDQzNWQ2NDNmM2M0NWQ2ODNkMDIy
Li4wM2YxNTcxNTBiOWU5YTU0YmJiZDQ4ZjM1ZDUyMWNiNmYxMGIyMDdiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTMtMTItMTYgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIHNpbXBsZSByZWdpc3RlciBhbGxvY2F0b3IgdG8g
V2ViQ29yZSBmb3IgeDg2XzY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjU3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgYSBicmFpbiBkZWFkIHJlZ2lzdGVyIGFsbG9jYXRvciB0byBzaW1wbGlm
eSB0aGUgdXNlIG9mIHJlZ2lzdGVycworICAgICAgICB3aGVuIHdyaXR0aW5nIGNvZGUgZ2VuZXJh
dG9ycy4KKworICAgICAgICBSZWdpc3RlckFsbG9jYXRvciBoYXMgdHdvIHB1cnBvc2VzOgorICAg
ICAgICAtbWFrZSBpdCBlYXN5IHRvIG5hbWUgcmVnaXN0ZXJzIHByb3Blcmx5LgorICAgICAgICAt
bWFrZSBpdCBoYXJkIHRvIHJldXNlIGEgcmVnaXN0ZXIgYWNjaWRlbnRhbGx5LgorCisgICAgICAg
IEEgaGVscGVyIGNsYXNzIExvY2FsUmVnaXN0ZXIgaXMgYWxzbyBkZWZpbmVkIHRvIHByb3ZpZGUg
YW4gZWFzeQorICAgICAgICB3YXkgdG8gd29yayB3aXRoIHJlZ2lzdGVycyB3aXRoaW4gYSBDKysg
c2NvcGUuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgTG9jYWxSZWdpc3RlciBlbGVtZW50UG9p
bnRlcihhbGxvY2F0b3IpOworICAgICAgICAgICAgYXNzZW1ibGVyLmxvYWQoYWRkcmVzcywgZWxl
bWVudFBvaW50ZXIpOworCisgICAgICAgIFJlZ2lzdGVyQWxsb2NhdG9yIG1ha2VzIG5vIGF0dGVt
cHQgYXQgb3B0aW1pemluZyByZWdpc3RlciBhbGxvY2F0aW9ucywgYnV0IGl0IHJlZHVjZXMKKyAg
ICAgICAgaW1wbGljaXQgZGVwZW5kZW5jaWVzIGJ5IHJldHVybmluZyB1c2VkIHJlZ2lzdGVyIGF0
IHRoZSBlbmQgb2YgdGhlIHF1ZXVlLCBtYWtpbmcgaXQgbGVzcworICAgICAgICBsaWtlbHkgdGhl
eSB3aWxsIGJlIHJldXNlZCBiZWZvcmUgdGhlaXIgbGFzdCBpbnN0cnVjdGlvbiBpcyBleGVjdXRl
ZC4KKworICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnQgdW5p
eCB4ODZfNjQsIGl0IG9ubHkgdXNlcyBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJzLgorCisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzc2ppdC9S
ZWdpc3RlckFsbG9jYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyQWxs
b2NhdG9yOjphbGxvY2F0ZVJlZ2lzdGVyKTogUHJvdmlkZXMgYW55IGF2YWlsYWJsZSByZWdpc3Rl
ci4KKyAgICAgICAgVG8gcmVzdHJpY3QgcnVudGltZSBleHBsb2l0YXRpb24gb2YgY29tcGlsZXIg
YnVncywgdGhlIG1ldGhvZCBjcmFzaGVzIGluIHJlbGVhc2UKKyAgICAgICAgaWYgdGhlIHJlZ2lz
dGVyIHBvb2wgaXMgZW1wdHkuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyQWxsb2NhdG9y
OjpyZXNlcnZlUmVnaXN0ZXIpOiBSZXNlcnZlIGEgcGFydGljdWxhciByZWdpc3Rlci4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdGVyQWxsb2NhdG9yOjpyZXR1cm5SZWdpc3Rlcik6IFJldHVybiBh
IHByZXZpb3VzbHkgYWxsb2NhdGVkIG9yIHJlc2VydmVkIHJlZ2lzdGVyLgorCisgICAgICAgIChX
ZWJDb3JlOjpSZWdpc3RlckFsbG9jYXRvcjo6YWxsb2NhdGVkUmVnaXN0ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxvY2FsUmVnaXN0ZXI6OkxvY2FsUmVnaXN0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxSZWdpc3Rlcjo6fkxvY2FsUmVnaXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TG9j
YWxSZWdpc3Rlcjo6b3BlcmF0b3IgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWdpc3RlckFsbG9jYXRvcjo6UmVnaXN0ZXJBbGxvY2F0b3IpOgor
CiAyMDEzLTEyLTE1ICBGcsOpZMOpcmljIFdhbmcgIDxmcmVkLndhbmdAZnJlZS5mcj4KIAogICAg
ICAgICBBZGQgc3VwcG9ydCBmb3IgbWFjdGlvbkB0b2dnbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDIwMjk5
MzVmZmFkMTIxYzljMWE4NDIzNTJlNTgyYzAwN2Q1NjZiYjQuLjk4OTBkYmI3YjRhMjJlMjVlNzNm
MTY2MjlkNmM5MWI1N2I3YTc5NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
LmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtODc5LDYgKzg3OSwxMSBAQAog
I2VuZGlmCiAjZW5kaWYKIAorLyogQ1NTIFNlbGVjdG9yIEpJVCBDb21waWxlciAqLworI2lmICFk
ZWZpbmVkKEVOQUJMRV9DU1NfU0VMRUNUT1JfSklUKQorI2RlZmluZSBFTkFCTEVfQ1NTX1NFTEVD
VE9SX0pJVCAwCisjZW5kaWYKKwogLyogQWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgKi8KICNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKFdJTikgJiYgIVVTRShX
SU5HREkpICYmICFQTEFURk9STShXSU5fQ0FJUk8pKQogI2RlZmluZSBXVEZfVVNFX0FDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HIDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAwZTQwODZmZjEyNzFiYTcxMzgwYTUxOGU1N2Q3NjNlNjdj
ODk2Njg3Li41Nzc3MzBkMTRiYTVjNDdhYjRiYmY1NjRlYWQzN2NmZmY1NzM0ZWRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05
MDksNiArOTA5LDcgQEAKIAkJMjY1NTQxM0ExNDg5ODExQzAwMERGQzVEIC8qIEtleUV2ZW50SU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY1NTQx
MzgxNDg5ODExQzAwMERGQzVEIC8qIEtleUV2ZW50SU9TLm1tICovOyB9OwogCQkyNjU1NDE1MjE0
ODlCMjMzMDAwREZDNUQgLyogQ3Vyc29ySU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2NTU0MTRCMTQ4OUFBMkIwMDBERkM1RCAvKiBDdXJzb3JJ
T1MuY3BwICovOyB9OwogCQkyNjkyMzk5NjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9u
Q2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI2OTIzOTkyMTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5o
ICovOyB9OworCQkyNkI5OTk4RjE4MDNBRTcyMDBEMDExMjEgLyogUmVnaXN0ZXJBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2Qjk5OThF
MTgwM0FFNzIwMEQwMTEyMSAvKiBSZWdpc3RlckFsbG9jYXRvci5oICovOyB9OwogCQkyNkMxNUNG
NjE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZVdpdGhPcGVyYXRpb25RdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNkMxNUNGNDE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVD
RlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5jcHAgKi87IH07CiAJCTI2
QzE1Q0Y3MTg1N0UxNUUwMEYxNUMwMyAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRl
bGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNkMxNUNGNTE4NTdFMTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5oICovOyB9OwogCQky
NkMxN0EzRTE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEy
IC8qIEZpbGVTeXN0ZW1JT1MuaCAqLzsgfTsKQEAgLTc1NjAsNiArNzU2MSw3IEBACiAJCTI2NTU0
MTRCMTQ4OUFBMkIwMDBERkM1RCAvKiBDdXJzb3JJT1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQ3Vyc29ySU9TLmNwcDsgcGF0aCA9IGlvcy9DdXJzb3JJT1MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjkyMzk5MTE1MDVFMUFBMDA5RTU3RkMg
LyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyNjkyMzk5MjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hh
bmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJWZXJzaW9u
Q2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZCOTk5OEUxODAz
QUU3MjAwRDAxMTIxIC8qIFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFJlZ2lzdGVyQWxsb2NhdG9yLmg7IHBhdGggPSBjc3NqaXQvUmVnaXN0ZXJB
bGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZDMTVDRjQxODU3RTE1
RDAwRjE1QzAzIC8qIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3Bl
cmF0aW9uUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QzE1Q0Y1MTg1N0UxNUQwMEYxNUMwMyAv
KiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlSGFuZGxlQ0ZVUkxD
b25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVN5c3RlbUlPUy5oOyBwYXRoID0g
aW9zL0ZpbGVTeXN0ZW1JT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzOTc3
LDYgKzEzOTc5LDcgQEAKIAkJCQkxQTU2OUNDNDBEN0UyQjYwMDA3QzM5ODMgLyogYnJpZGdlICov
LAogCQkJCUUxRkY4RjVCMTgwNzM2MkIwMDEzMjY3NCAvKiBjcnlwdG8gKi8sCiAJCQkJRjUyM0Qx
ODQwMkRFNDJFODAxODYzNUNBIC8qIGNzcyAqLywKKwkJCQkyNkI5OTk4RDE4MDNBREZBMDBEMDEx
MjEgLyogY3Nzaml0ICovLAogCQkJCUY1MjNEMzI0MDJERTQ0NzgwMTg2MzVDQSAvKiBkb20gKi8s
CiAJCQkJOTMzMDlEODYwOTlFNjQ5MTAwNTZFNTgxIC8qIGVkaXRpbmcgKi8sCiAJCQkJOTc2RDZD
NTcxMjJCOEExODAwMUZEMUY3IC8qIGZpbGVhcGkgKi8sCkBAIC0xNDYzOSw2ICsxNDY0MiwxNCBA
QAogCQkJdGFiV2lkdGggPSA0OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQkyNkI5OTk4RDE4
MDNBREZBMDBEMDExMjEgLyogY3Nzaml0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQkyNkI5OTk4RTE4MDNBRTcyMDBEMDExMjEgLyogUmVnaXN0ZXJBbGxv
Y2F0b3IuaCAqLywKKwkJCSk7CisJCQluYW1lID0gY3Nzaml0OworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKIAkJMjlBODEyMDQwRkJCOUI0MTAwNTEwMjkzIC8qIGFjY2Vzc2liaWxp
dHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjQzNTYs
NiArMjQzNjcsNyBAQAogCQkJCTk4MzFBRTRBMTU0MjI1QzkwMEZFMjY0NCAvKiBSZWZlcnJlclBv
bGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBQjQxODIxM0UzNTZFODAwRDhBQUYzIC8qIFJl
Z2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkNEREU4RDAxNzcwQkIyMjAwMTZFMDcyIC8qIFJl
Z2lvbk92ZXJzZXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjZCOTk5OEYxODAzQUU3MjAw
RDAxMTIxIC8qIFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMUI0
QzBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyQzNEQTJEMEQwMDZDMUQwMEVGNkYyNiAvKiBSZWd1bGFyRXhwcmVzc2lvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMDEwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlbW92ZUNT
U1Byb3BlcnR5Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3NqaXQvUmVnaXN0ZXJBbGxvY2F0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9S
ZWdpc3RlckFsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkNjZjY2NhMjA3ZjIxZGM5YzY2MmJmYzFk
NDliNzUxMjA3OGI0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQv
UmVnaXN0ZXJBbGxvY2F0b3IuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUmVnaXN0ZXJBbGxvY2F0b3JfaAorI2RlZmluZSBSZWdpc3RlckFsbG9jYXRvcl9oCisKKyNp
ZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01h
Y3JvQXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlZ2lzdGVyQWxsb2NhdG9y
IHsKK3B1YmxpYzoKKyAgICBSZWdpc3RlckFsbG9jYXRvcigpOworCisgICAgSlNDOjpNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBhbGxvY2F0ZVJlZ2lzdGVyKCkKKyAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3JlZ2lzdGVycy5pc0VtcHR5KCkpOworCisgICAgICAgIEpTQzo6TWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnaXN0ZXJJRCA9IG1fcmVnaXN0ZXJzLnRha2VGaXJz
dCgpOworICAgICAgICBBU1NFUlQoIW1fYWxsb2NhdGVkUmVnaXN0ZXJzLmNvbnRhaW5zKHJlZ2lz
dGVySUQpKTsKKyAgICAgICAgbV9hbGxvY2F0ZWRSZWdpc3RlcnMuYXBwZW5kKHJlZ2lzdGVySUQp
OworICAgICAgICByZXR1cm4gcmVnaXN0ZXJJRDsKKyAgICB9CisKKyAgICB2b2lkIHJlc2VydmVS
ZWdpc3RlcihKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZ2lzdGVySUQpCisgICAg
eworICAgICAgICBBU1NFUlQoIW1fYWxsb2NhdGVkUmVnaXN0ZXJzLmNvbnRhaW5zKHJlZ2lzdGVy
SUQpKTsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9yZWdpc3RlcnMuYmVnaW4oKSwgZW5kID0g
bV9yZWdpc3RlcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKCpp
dCA9PSByZWdpc3RlcklEKSB7CisgICAgICAgICAgICAgICAgbV9yZWdpc3RlcnMucmVtb3ZlKGl0
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBtX2FsbG9jYXRlZFJlZ2lzdGVycy5hcHBlbmQocmVnaXN0ZXJJRCk7CisgICAgfQorCisg
ICAgdm9pZCByZXR1cm5SZWdpc3RlcihKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJl
Z2lzdGVySUQpCisgICAgeworICAgICAgICBBU1NFUlQobV9hbGxvY2F0ZWRSZWdpc3RlcnMuY29u
dGFpbnMocmVnaXN0ZXJJRCkpOworICAgICAgICBtX2FsbG9jYXRlZFJlZ2lzdGVycy5yZW1vdmUo
bV9hbGxvY2F0ZWRSZWdpc3RlcnMucmV2ZXJzZUZpbmQocmVnaXN0ZXJJRCkpOworICAgICAgICBt
X3JlZ2lzdGVycy5hcHBlbmQocmVnaXN0ZXJJRCk7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9y
PEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQsIDg+JiBhbGxvY2F0ZWRSZWdpc3RlcnMo
KSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRlZFJlZ2lzdGVyczsgfQorCitwcml2YXRlOgorICAg
IERlcXVlPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQsIDg+IG1fcmVnaXN0ZXJzOwor
ICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklELCA4PiBtX2FsbG9jYXRl
ZFJlZ2lzdGVyczsKK307CisKK2NsYXNzIExvY2FsUmVnaXN0ZXIgeworcHVibGljOgorICAgIGV4
cGxpY2l0IExvY2FsUmVnaXN0ZXIoUmVnaXN0ZXJBbGxvY2F0b3ImIGFsbG9jYXRvcikKKyAgICAg
ICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgICwgbV9yZWdpc3RlcihhbGxvY2F0
b3IuYWxsb2NhdGVSZWdpc3RlcigpKQorICAgIHsKKyAgICB9CisKKyAgICB+TG9jYWxSZWdpc3Rl
cigpCisgICAgeworICAgICAgICBtX2FsbG9jYXRvci5yZXR1cm5SZWdpc3RlcihtX3JlZ2lzdGVy
KTsKKyAgICB9CisKKyAgICBvcGVyYXRvciBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBSZWdpc3RlckFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CisgICAgSlNDOjpNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtX3JlZ2lzdGVyOworfTsKKworaW5saW5lIFJlZ2lzdGVy
QWxsb2NhdG9yOjpSZWdpc3RlckFsbG9jYXRvcigpCit7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBt
X3JlZ2lzdGVycy5hcHBlbmQoSlNDOjpYODZSZWdpc3RlcnM6OmVheCk7CisgICAgbV9yZWdpc3Rl
cnMuYXBwZW5kKEpTQzo6WDg2UmVnaXN0ZXJzOjplY3gpOworICAgIG1fcmVnaXN0ZXJzLmFwcGVu
ZChKU0M6Olg4NlJlZ2lzdGVyczo6ZXNpKTsKKyAgICBtX3JlZ2lzdGVycy5hcHBlbmQoSlNDOjpY
ODZSZWdpc3RlcnM6OmVkaSk7CisgICAgbV9yZWdpc3RlcnMuYXBwZW5kKEpTQzo6WDg2UmVnaXN0
ZXJzOjpyOCk7CisgICAgbV9yZWdpc3RlcnMuYXBwZW5kKEpTQzo6WDg2UmVnaXN0ZXJzOjpyOSk7
CisgICAgbV9yZWdpc3RlcnMuYXBwZW5kKEpTQzo6WDg2UmVnaXN0ZXJzOjpyMTApOworICAgIG1f
cmVnaXN0ZXJzLmFwcGVuZChKU0M6Olg4NlJlZ2lzdGVyczo6cjExKTsKKyNlbHNlCisjZXJyb3Ig
UmVnaXN0ZXJBbGxvY2F0b3IgaGFzIG5vIGRlZmluZWQgcmVnaXN0ZXJzIGZvciB0aGUgYXJjaGl0
ZWN0dXJlLgorI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQorCisjZW5kaWYgLy8gUmVnaXN0ZXJBbGxvY2F0b3Jf
aAorCg==
</data>
<flag name="review"
          id="242899"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>