Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:45490 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 94452 invoked from network); 4 Sep 2009 16:15:22 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 4 Sep 2009 16:15:22 -0000 Received: from [127.0.0.1] ([127.0.0.1:7483]) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ECSTREAM id 45/5E-21163-A1D31AA4 for ; Fri, 04 Sep 2009 12:15:22 -0400 Authentication-Results: pb1.pair.com smtp.mail=mgdm@php.net; spf=unknown; sender-id=unknown Authentication-Results: pb1.pair.com header.from=mgdm@php.net; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 80.68.93.37 as permitted sender) X-PHP-List-Original-Sender: mgdm@php.net X-Host-Fingerprint: 80.68.93.37 river.mgdm.net Received: from [80.68.93.37] ([80.68.93.37:54230] helo=river.mgdm.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id BC/AD-21163-9D931AA4 for ; Fri, 04 Sep 2009 12:01:30 -0400 Received: from [10.1.10.110] (emcukhs1.plus.com [84.92.198.99]) (Authenticated sender: michael) by river.mgdm.net (Postfix) with ESMTPSA id 46AD7F8001 for ; Fri, 4 Sep 2009 17:01:25 +0100 (BST) Message-ID: <4AA139D7.70307@php.net> Date: Fri, 04 Sep 2009 17:01:27 +0100 User-Agent: Thunderbird 2.0.0.23 (X11/20090817) MIME-Version: 1.0 To: internals@lists.php.net Content-Type: multipart/mixed; boundary="------------000009060707040205070608" Subject: Patch: FNV-1 support for ext/hash From: mgdm@php.net (Michael Maclean) --------------000009060707040205070608 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Earlier on someone on IRC mentioned that ext/hash had no support for the FNV-1 hash function (http://en.wikipedia.org/wiki/Fowler-Noll-Vo_hash_function), so I decided to have a go at adding it. The result of this is the attached patch. Currently it only supports 32-bit and 64-bit versions. I've written it against PHP 5.3 SVN, I presume it'll apply to HEAD but I haven't checked yet. Any comments? Cheers, Michael --------------000009060707040205070608 Content-Type: text/plain; name="fnv-patch.txt" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="fnv-patch.txt" ZGlmZiAteCBydW4tdGVzdHMucGhwIC14ICdNYWtlKicgLXggbHRtYWluLnNoIC14ICcqLnN2 bionIC14ICcqY29uZmlnKicgLXggJyoubTQnIC14ICcqYXV0byonIC14ICdidWlsZConIC1O IC11IC1yIHBocC1zcmMtNS4zL2V4dC9oYXNoL2hhc2guYyBoYXNoL2hhc2guYwotLS0gcGhw LXNyYy01LjMvZXh0L2hhc2gvaGFzaC5jCTIwMDktMDktMDQgMTQ6MjI6MTkuMDAwMDAwMDAw ICswMTAwCisrKyBoYXNoL2hhc2guYwkyMDA5LTA5LTA0IDExOjU5OjUzLjAwMDAwMDAwMCAr MDEwMApAQCAtNzQsNyArNzQsMTEgQEAKIAl7IlJJUEVNRDMyMCIsICJyaXBlbWQzMjAiLCAy NX0sCiAJe05VTEwsIE5VTEwsIDI2fSwgLyogc3VwcG9ydCBuZWVkcyB0byBiZSBhZGRlZCBm b3Igc25lZnJ1IDEyOCAqLwogCXsiU05FRlJVMjU2IiwgInNuZWZydTI1NiIsIDI3fSwKLQl7 Ik1EMiIsICJtZDIiLCAyOH0KKwl7Ik1EMiIsICJtZDIiLCAyOH0sCisJeyJGTlYxMzIiLCAi Zm52MTMyIiwgMjl9LAorCXsiRk5WMWEzMiIsICJmbnYxYTMyIiwgMzB9LAorCXsiRk5WMTY0 IiwgImZudjE2NCIsIDMxfSwKKwl7IkZOVjFhNjQiLCAiZm52MWE2NCIsIDMyfSwKIH07CiAj ZW5kaWYKIApAQCAtODQxLDYgKzg0NSw4IEBACiAJcGhwX2hhc2hfcmVnaXN0ZXJfYWxnbygi Y3JjMzJiIiwJCSZwaHBfaGFzaF9jcmMzMmJfb3BzKTsKIAlwaHBfaGFzaF9yZWdpc3Rlcl9h bGdvKCJzYWxzYTEwIiwJCSZwaHBfaGFzaF9zYWxzYTEwX29wcyk7CiAJcGhwX2hhc2hfcmVn aXN0ZXJfYWxnbygic2Fsc2EyMCIsCQkmcGhwX2hhc2hfc2Fsc2EyMF9vcHMpOworCXBocF9o YXNoX3JlZ2lzdGVyX2FsZ28oImZudjEzMiIsCQkmcGhwX2hhc2hfZm52MTMyX29wcyk7CisJ cGhwX2hhc2hfcmVnaXN0ZXJfYWxnbygiZm52MTY0IiwJCSZwaHBfaGFzaF9mbnYxNjRfb3Bz KTsKIAogCVBIUF9IQVNIX0hBVkFMX1JFR0lTVEVSKDMsMTI4KTsKIAlQSFBfSEFTSF9IQVZB TF9SRUdJU1RFUigzLDE2MCk7CmRpZmYgLXggcnVuLXRlc3RzLnBocCAteCAnTWFrZSonIC14 IGx0bWFpbi5zaCAteCAnKi5zdm4qJyAteCAnKmNvbmZpZyonIC14ICcqLm00JyAteCAnKmF1 dG8qJyAteCAnYnVpbGQqJyAtTiAtdSAtciBwaHAtc3JjLTUuMy9leHQvaGFzaC9oYXNoX2Zu di5jIGhhc2gvaGFzaF9mbnYuYwotLS0gcGhwLXNyYy01LjMvZXh0L2hhc2gvaGFzaF9mbnYu YwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgaGFzaC9oYXNoX2Zu di5jCTIwMDktMDktMDQgMTU6MTQ6MzMuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMjIx IEBACisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQSFAgVmVyc2lvbiA1ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisg ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKworICB8IENvcHlyaWdodCAoYykgMTk5Ny0yMDA5IFRoZSBQ SFAgR3JvdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rCisgIHwgVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHZlcnNpb24g My4wMSBvZiB0aGUgUEhQIGxpY2Vuc2UsICAgICAgfAorICB8IHRoYXQgaXMgYnVuZGxlZCB3 aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLCBhbmQgaXMgICAgICAgIHwK KyAgfCBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhlIGZvbGxv d2luZyB1cmw6ICAgICAgICAgICB8CisgIHwgaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2Uv M18wMS50eHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IElmIHlv dSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBQSFAgbGljZW5zZSBhbmQgYXJlIHVu YWJsZSB0byAgIHwKKyAgfCBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIs IHBsZWFzZSBzZW5kIGEgbm90ZSB0byAgICAgICAgICB8CisgIHwgbGljZW5zZUBwaHAubmV0 IHNvIHdlIGNhbiBtYWlsIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuICAgICAgICAgICAgICAg fAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBBdXRob3JzOiBNaWNoYWVsIFdhbGxuZXIg PG1pa2VAcGhwLm5ldD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAg ICAgICAgU2FyYSBHb2xlbW9uIDxwb2xsaXRhQHBocC5uZXQ+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfAorICB8ICAgICAgICAgIE1pY2hhZWwgTWFjbGVhbiA8bWdkbUBwaHAu bmV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rCisqLworCisvKiAkSWQ6IGhhc2hfc2Fsc2EuYyAyNzIzNzAgMjAwOC0xMi0zMSAxMTox NTo0OVogc2ViYXN0aWFuICQgKi8KKworI2luY2x1ZGUgInBocF9oYXNoLmgiCisjaW5jbHVk ZSAicGhwX2hhc2hfZm52LmgiCisKK2NvbnN0IHBocF9oYXNoX29wcyBwaHBfaGFzaF9mbnYx MzJfb3BzID0geworCShwaHBfaGFzaF9pbml0X2Z1bmNfdCkgUEhQX0ZOVjEzMkluaXQsCisJ KHBocF9oYXNoX3VwZGF0ZV9mdW5jX3QpIFBIUF9GTlYxMzJVcGRhdGUsCisJKHBocF9oYXNo X2ZpbmFsX2Z1bmNfdCkgUEhQX0ZOVjEzMkZpbmFsLAorCShwaHBfaGFzaF9jb3B5X2Z1bmNf dCkgcGhwX2hhc2hfY29weSwKKwk0LAorCTQsCisJc2l6ZW9mKFBIUF9GTlYxMzJfQ1RYKQor fTsKKworICAgIGNvbnN0IHBocF9oYXNoX29wcyBwaHBfaGFzaF9mbnYxYTMyX29wcyA9IHsK KwkocGhwX2hhc2hfaW5pdF9mdW5jX3QpIFBIUF9GTlYxMzJJbml0LAorCShwaHBfaGFzaF91 cGRhdGVfZnVuY190KSBQSFBfRk5WMWEzMlVwZGF0ZSwKKyAJKHBocF9oYXNoX2ZpbmFsX2Z1 bmNfdCkgUEhQX0ZOVjEzMkZpbmFsLCAKKwkocGhwX2hhc2hfY29weV9mdW5jX3QpIHBocF9o YXNoX2NvcHksCisJNCwKKwk0LAorCXNpemVvZihQSFBfRk5WMTMyX0NUWCkKK307CisKK2Nv bnN0IHBocF9oYXNoX29wcyBwaHBfaGFzaF9mbnYxNjRfb3BzID0geworCShwaHBfaGFzaF9p bml0X2Z1bmNfdCkgUEhQX0ZOVjE2NEluaXQsCisJKHBocF9oYXNoX3VwZGF0ZV9mdW5jX3Qp IFBIUF9GTlYxNjRVcGRhdGUsCisJKHBocF9oYXNoX2ZpbmFsX2Z1bmNfdCkgUEhQX0ZOVjE2 NEZpbmFsLCAKKwkocGhwX2hhc2hfY29weV9mdW5jX3QpIHBocF9oYXNoX2NvcHksCisJOCwK Kwk0LAorCXNpemVvZihQSFBfRk5WMTY0X0NUWCkKK307CisKK2NvbnN0IHBocF9oYXNoX29w cyBwaHBfaGFzaF9mbnYxYTY0X29wcyA9IHsKKwkocGhwX2hhc2hfaW5pdF9mdW5jX3QpIFBI UF9GTlYxNjRJbml0LAorCShwaHBfaGFzaF91cGRhdGVfZnVuY190KSBQSFBfRk5WMWE2NFVw ZGF0ZSwKKyAJKHBocF9oYXNoX2ZpbmFsX2Z1bmNfdCkgUEhQX0ZOVjE2NEZpbmFsLCAgCisJ KHBocF9oYXNoX2NvcHlfZnVuY190KSBwaHBfaGFzaF9jb3B5LAorCTgsCisJNCwKKwlzaXpl b2YoUEhQX0ZOVjE2NF9DVFgpCit9OworCisvKiB7e3sgUEhQX0ZOVjEzMkluaXQKKyAqIDMy LWJpdCBGTlYtMSBoYXNoIGluaXRpYWxpc2F0aW9uCisgKi8KK1BIUF9IQVNIX0FQSSB2b2lk IFBIUF9GTlYxMzJJbml0KFBIUF9GTlYxMzJfQ1RYICpjb250ZXh0KQoreworICAgIGNvbnRl eHQtPnN0YXRlID0gUEhQX0ZOVjFfMzJfSU5JVDsKK30KKy8qIH19fSAqLworCitQSFBfSEFT SF9BUEkgdm9pZCBQSFBfRk5WMTMyVXBkYXRlKFBIUF9GTlYxMzJfQ1RYICpjb250ZXh0LCBj b25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgdW5zaWduZWQgaW50IGlucHV0 TGVuKQoreworICAgIGNvbnRleHQtPnN0YXRlID0gZm52XzMyX2J1Zigodm9pZCAqKWlucHV0 LCBpbnB1dExlbiwgY29udGV4dC0+c3RhdGUsIDApOworfQorCitQSFBfSEFTSF9BUEkgdm9p ZCBQSFBfRk5WMWEzMlVwZGF0ZShQSFBfRk5WMTMyX0NUWCAqY29udGV4dCwgY29uc3QgdW5z aWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgIHVuc2lnbmVkIGludCBpbnB1dExlbikKK3sK KyAgICBjb250ZXh0LT5zdGF0ZSA9IGZudl8zMl9idWYoKHZvaWQgKilpbnB1dCwgaW5wdXRM ZW4sIGNvbnRleHQtPnN0YXRlLCAxKTsKK30KKworUEhQX0hBU0hfQVBJIHZvaWQgUEhQX0ZO VjEzMkZpbmFsKHVuc2lnbmVkIGNoYXIgZGlnZXN0WzRdLCBQSFBfRk5WMTMyX0NUWCAqIGNv bnRleHQpCit7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgbWVtY3B5KGRpZ2VzdCwg JmNvbnRleHQtPnN0YXRlLCA0KTsKKyNlbHNlCisgICAgaW50IGkgPSAwOworICAgIHVuc2ln bmVkIGNoYXIgKmMgPSAodW5zaWduZWQgY2hhciAqKSAmY29udGV4dC0+c3RhdGU7CisKKyAg ICBmb3IoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgZGlnZXN0W2ldID0gY1szIC0g aV07CisgICAgfQorI2VuZGlmCit9CisKKy8qIHt7eyBQSFBfRk5WMTY0SW5pdAorICogNjQt Yml0IEZOVi0xIGhhc2ggaW5pdGlhbGlzYXRpb24KKyAqLworUEhQX0hBU0hfQVBJIHZvaWQg UEhQX0ZOVjE2NEluaXQoUEhQX0ZOVjE2NF9DVFggKmNvbnRleHQpCit7CisgICAgY29udGV4 dC0+c3RhdGUgPSBQSFBfRk5WMV82NF9JTklUOworfQorLyogfX19ICovCisKK1BIUF9IQVNI X0FQSSB2b2lkIFBIUF9GTlYxNjRVcGRhdGUoUEhQX0ZOVjE2NF9DVFggKmNvbnRleHQsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICB1bnNpZ25lZCBpbnQgaW5wdXRM ZW4pCit7CisgICAgY29udGV4dC0+c3RhdGUgPSBmbnZfNjRfYnVmKCh2b2lkICopaW5wdXQs IGlucHV0TGVuLCBjb250ZXh0LT5zdGF0ZSwgMCk7Cit9CisKK1BIUF9IQVNIX0FQSSB2b2lk IFBIUF9GTlYxYTY0VXBkYXRlKFBIUF9GTlYxNjRfQ1RYICpjb250ZXh0LCBjb25zdCB1bnNp Z25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgdW5zaWduZWQgaW50IGlucHV0TGVuKQorewor ICAgIGNvbnRleHQtPnN0YXRlID0gZm52XzY0X2J1Zigodm9pZCAqKWlucHV0LCBpbnB1dExl biwgY29udGV4dC0+c3RhdGUsIDEpOworfQorCitQSFBfSEFTSF9BUEkgdm9pZCBQSFBfRk5W MTY0RmluYWwodW5zaWduZWQgY2hhciBkaWdlc3RbOF0sIFBIUF9GTlYxNjRfQ1RYICogY29u dGV4dCkKK3sKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgICBtZW1jcHkoZGlnZXN0LCAm Y29udGV4dC0+c3RhdGUsIDgpOworI2Vsc2UKKyAgICBpbnQgaSA9IDA7CisgICAgdW5zaWdu ZWQgY2hhciAqYyA9ICh1bnNpZ25lZCBjaGFyICopICZjb250ZXh0LT5zdGF0ZTsKKworICAg IGZvcihpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICBkaWdlc3RbaV0gPSBjWzcgLSBp XTsKKyAgICB9CisjZW5kaWYKK30KKworCisvKgorICogZm52XzMyX2J1ZiAtIHBlcmZvcm0g YSAzMiBiaXQgRm93bGVyL05vbGwvVm8gaGFzaCBvbiBhIGJ1ZmZlcgorICoKKyAqIGlucHV0 OgorICogIGJ1ZiAtIHN0YXJ0IG9mIGJ1ZmZlciB0byBoYXNoCisgKiAgbGVuIC0gbGVuZ3Ro IG9mIGJ1ZmZlciBpbiBvY3RldHMKKyAqICBodmFsICAgIC0gcHJldmlvdXMgaGFzaCB2YWx1 ZSBvciAwIGlmIGZpcnN0IGNhbGwKKyAqICBhbHRlcm5hdGUgLSBpZiA+IDAgdXNlIHRoZSBh bHRlcm5hdGUgdmVyc2lvbgorICoKKyAqIHJldHVybnM6CisgKiAgMzIgYml0IGhhc2ggYXMg YSBzdGF0aWMgaGFzaCB0eXBlCisgKi8KK3N0YXRpYyBwaHBfaGFzaF91aW50MzIKK2Zudl8z Ml9idWYodm9pZCAqYnVmLCBzaXplX3QgbGVuLCBwaHBfaGFzaF91aW50MzIgaHZhbCwgaW50 IGFsdGVybmF0ZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpicCA9ICh1bnNpZ25lZCBjaGFy ICopYnVmOyAgIC8qIHN0YXJ0IG9mIGJ1ZmZlciAqLworICAgIHVuc2lnbmVkIGNoYXIgKmJl ID0gYnAgKyBsZW47ICAgICAgIC8qIGJleW9uZCBlbmQgb2YgYnVmZmVyICovCisKKyAgICAv KgorICAgICAqIEZOVi0xIGhhc2ggZWFjaCBvY3RldCBpbiB0aGUgYnVmZmVyCisgICAgICov CisgICAgd2hpbGUgKGJwIDwgYmUpIHsKKworICAgICAgICBpZihhbHRlcm5hdGUgPT0gMCkg eworICAgICAgICAgICAgLyogbXVsdGlwbHkgYnkgdGhlIDMyIGJpdCBGTlYgbWFnaWMgcHJp bWUgbW9kIDJeMzIgKi8KKyAgICAgICAgICAgIGh2YWwgKj0gUEhQX0ZOVl8zMl9QUklNRTsK KworICAgICAgICAgICAgLyogeG9yIHRoZSBib3R0b20gd2l0aCB0aGUgY3VycmVudCBvY3Rl dCAqLworICAgICAgICAgICAgaHZhbCBePSAocGhwX2hhc2hfdWludDMyKSpicCsrOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogeG9yIHRoZSBib3R0b20gd2l0aCB0aGUg Y3VycmVudCBvY3RldCAqLworICAgICAgICAgICAgaHZhbCBePSAocGhwX2hhc2hfdWludDMy KSpicCsrOworCisgICAgICAgICAgICAvKiBtdWx0aXBseSBieSB0aGUgMzIgYml0IEZOViBt YWdpYyBwcmltZSBtb2QgMl4zMiAqLworICAgICAgICAgICAgaHZhbCAqPSBQSFBfRk5WXzMy X1BSSU1FOworICAgICAgICB9CisgICAgfQorCisgICAgLyogcmV0dXJuIG91ciBuZXcgaGFz aCB2YWx1ZSAqLworICAgIHJldHVybiBodmFsOworfQorCisvKgorICogZm52XzY0X2J1ZiAt IHBlcmZvcm0gYSA2NCBiaXQgRm93bGVyL05vbGwvVm8gaGFzaCBvbiBhIGJ1ZmZlcgorICoK KyAqIGlucHV0OgorICogIGJ1ZiAtIHN0YXJ0IG9mIGJ1ZmZlciB0byBoYXNoCisgKiAgbGVu IC0gbGVuZ3RoIG9mIGJ1ZmZlciBpbiBvY3RldHMKKyAqICBodmFsICAgIC0gcHJldmlvdXMg aGFzaCB2YWx1ZSBvciAwIGlmIGZpcnN0IGNhbGwKKyAqICBhbHRlcm5hdGUgLSBpZiA+IDAg dXNlIHRoZSBhbHRlcm5hdGUgdmVyc2lvbgorICoKKyAqIHJldHVybnM6CisgKiAgNjQgYml0 IGhhc2ggYXMgYSBzdGF0aWMgaGFzaCB0eXBlCisgKi8KK3N0YXRpYyBwaHBfaGFzaF91aW50 NjQKK2Zudl82NF9idWYodm9pZCAqYnVmLCBzaXplX3QgbGVuLCBwaHBfaGFzaF91aW50NjQg aHZhbCwgaW50IGFsdGVybmF0ZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpicCA9ICh1bnNp Z25lZCBjaGFyICopYnVmOyAgIC8qIHN0YXJ0IG9mIGJ1ZmZlciAqLworICAgIHVuc2lnbmVk IGNoYXIgKmJlID0gYnAgKyBsZW47ICAgICAgIC8qIGJleW9uZCBlbmQgb2YgYnVmZmVyICov CisKKyAgICAvKgorICAgICAqIEZOVi0xIGhhc2ggZWFjaCBvY3RldCBvZiB0aGUgYnVmZmVy CisgICAgICovCisgICAgd2hpbGUgKGJwIDwgYmUpIHsKKworICAgICAgICBpZihhbHRlcm5h dGUgPT0gMCkgeworICAgICAgICAgICAgLyogbXVsdGlwbHkgYnkgdGhlIDY0IGJpdCBGTlYg bWFnaWMgcHJpbWUgbW9kIDJeNjQgKi8KKyAgICAgICAgICAgIGh2YWwgKj0gUEhQX0ZOVl82 NF9QUklNRTsKKworICAgICAgICAgICAgLyogeG9yIHRoZSBib3R0b20gd2l0aCB0aGUgY3Vy cmVudCBvY3RldCAqLworICAgICAgICAgICAgaHZhbCBePSAocGhwX2hhc2hfdWludDY0KSpi cCsrOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIHhvciB0aGUgYm90dG9t IHdpdGggdGhlIGN1cnJlbnQgb2N0ZXQgKi8KKyAgICAgICAgICAgIGh2YWwgXj0gKHBocF9o YXNoX3VpbnQ2NCkqYnArKzsKKworICAgICAgICAgICAgLyogbXVsdGlwbHkgYnkgdGhlIDY0 IGJpdCBGTlYgbWFnaWMgcHJpbWUgbW9kIDJeNjQgKi8KKyAgICAgICAgICAgIGh2YWwgKj0g UEhQX0ZOVl82NF9QUklNRTsKKyAgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiByZXR1cm4g b3VyIG5ldyBoYXNoIHZhbHVlICovCisgICAgcmV0dXJuIGh2YWw7Cit9CisKKwpkaWZmIC14 IHJ1bi10ZXN0cy5waHAgLXggJ01ha2UqJyAteCBsdG1haW4uc2ggLXggJyouc3ZuKicgLXgg Jypjb25maWcqJyAteCAnKi5tNCcgLXggJyphdXRvKicgLXggJ2J1aWxkKicgLU4gLXUgLXIg cGhwLXNyYy01LjMvZXh0L2hhc2gvcGhwX2hhc2hfZm52LmggaGFzaC9waHBfaGFzaF9mbnYu aAotLS0gcGhwLXNyYy01LjMvZXh0L2hhc2gvcGhwX2hhc2hfZm52LmgJMTk3MC0wMS0wMSAw MTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIGhhc2gvcGhwX2hhc2hfZm52LmgJMjAwOS0w OS0wNCAxNTowODo0My4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAg Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUEhQIFZlcnNpb24gNSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKKyAgfCBDb3B5cmlnaHQgKGMpIDE5OTctMjAwOSBUaGUgUEhQIEdyb3VwICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor ICB8IFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDMuMDEgb2YgdGhl IFBIUCBsaWNlbnNlLCAgICAgIHwKKyAgfCB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBh Y2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlzICAgICAgICB8CisgIHwgYXZhaWxh YmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoZSBmb2xsb3dpbmcgdXJsOiAg ICAgICAgICAgfAorICB8IGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzNfMDEudHh0ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBJZiB5b3UgZGlkIG5vdCBy ZWNlaXZlIGEgY29weSBvZiB0aGUgUEhQIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gICB8 CisgIHwgb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2Vu ZCBhIG5vdGUgdG8gICAgICAgICAgfAorICB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4g bWFpbCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwKKyAgKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rCisgIHwgQXV0aG9yczogTWljaGFlbCBXYWxsbmVyIDxtaWtlQHBocC5u ZXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIFNhcmEg R29sZW1vbiA8cG9sbGl0YUBwaHAubmV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKKyAgfCAgICAgICAgICBNaWNoYWVsIE1hY2xlYW4gPG1nZG1AcGhwLm5ldD4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKwor LyogJElkOiBoYXNoX3NhbHNhLmMgMjcyMzcwIDIwMDgtMTItMzEgMTE6MTU6NDlaIHNlYmFz dGlhbiAkICovCisKKyNpZm5kZWYgUEhQX0hBU0hfRk5WX0gKKyNkZWZpbmUgUEhQX0hBU0hf Rk5WX0gKKworI2RlZmluZSBQSFBfRk5WMV8zMl9JTklUICgocGhwX2hhc2hfdWludDMyKTB4 ODExYzlkYzUpCisjZGVmaW5lIFBIUF9GTlYxXzMyQV9JTklUIFBIUF9GTlYxXzMyX0lOSVQK KworI2RlZmluZSBQSFBfRk5WXzMyX1BSSU1FICgocGhwX2hhc2hfdWludDMyKTB4MDEwMDAx OTMpCisKKyNkZWZpbmUgUEhQX0ZOVjFfNjRfSU5JVCAoKHBocF9oYXNoX3VpbnQ2NCkweGNi ZjI5Y2U0ODQyMjIzMjVVTEwpCisjZGVmaW5lIFBIUF9GTlYxQV82NF9JTklUIEZOVjFfNjRf SU5JVAorCisjZGVmaW5lIFBIUF9GTlZfNjRfUFJJTUUgKChwaHBfaGFzaF91aW50NjQpMHgx MDAwMDAwMDFiM1VMTCkKKworCisvKgorICogaGFzaCB0eXBlcworICovCitlbnVtIHBocF9m bnZfdHlwZSB7CisgICAgUEhQX0ZOVl9OT05FICA9IDAsCS8qIGludmFsaWQgRk5WIGhhc2gg dHlwZSAqLworICAgIFBIUF9GTlYwXzMyICAgPSAxLAkvKiBGTlYtMCAzMiBiaXQgaGFzaCAq LworICAgIFBIUF9GTlYxXzMyICAgPSAyLAkvKiBGTlYtMSAzMiBiaXQgaGFzaCAqLworICAg IFBIUF9GTlYxYV8zMiAgPSAzLAkvKiBGTlYtMWEgMzIgYml0IGhhc2ggKi8KKyAgICBQSFBf Rk5WMF82NCAgID0gNCwJLyogRk5WLTAgNjQgYml0IGhhc2ggKi8KKyAgICBQSFBfRk5WMV82 NCAgID0gNSwJLyogRk5WLTEgNjQgYml0IGhhc2ggKi8KKyAgICBQSFBfRk5WMWFfNjQgID0g NiwJLyogRk5WLTFhIDY0IGJpdCBoYXNoICovCit9OworCit0eXBlZGVmIHN0cnVjdCB7Cisg ICAgcGhwX2hhc2hfdWludDMyIHN0YXRlOworfSBQSFBfRk5WMTMyX0NUWDsKKwordHlwZWRl ZiBzdHJ1Y3QgeworICAgIHBocF9oYXNoX3VpbnQ2NCBzdGF0ZTsKK30gUEhQX0ZOVjE2NF9D VFg7CisKKworUEhQX0hBU0hfQVBJIHZvaWQgUEhQX0ZOVjEzMkluaXQoUEhQX0ZOVjEzMl9D VFggKmNvbnRleHQpOworUEhQX0hBU0hfQVBJIHZvaWQgUEhQX0ZOVjEzMlVwZGF0ZShQSFBf Rk5WMTMyX0NUWCAqY29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2ln bmVkIGludCBpbnB1dExlbik7CitQSFBfSEFTSF9BUEkgdm9pZCBQSFBfRk5WMWEzMlVwZGF0 ZShQSFBfRk5WMTMyX0NUWCAqY29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQs IHVuc2lnbmVkIGludCBpbnB1dExlbik7CitQSFBfSEFTSF9BUEkgdm9pZCBQSFBfRk5WMTMy RmluYWwodW5zaWduZWQgY2hhciBkaWdlc3RbMTZdLCBQSFBfRk5WMTMyX0NUWCAqIGNvbnRl eHQpOworCitQSFBfSEFTSF9BUEkgdm9pZCBQSFBfRk5WMTY0SW5pdChQSFBfRk5WMTY0X0NU WCAqY29udGV4dCk7CitQSFBfSEFTSF9BUEkgdm9pZCBQSFBfRk5WMTY0VXBkYXRlKFBIUF9G TlYxNjRfQ1RYICpjb250ZXh0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWdu ZWQgaW50IGlucHV0TGVuKTsKK1BIUF9IQVNIX0FQSSB2b2lkIFBIUF9GTlYxYTY0VXBkYXRl KFBIUF9GTlYxNjRfQ1RYICpjb250ZXh0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwg dW5zaWduZWQgaW50IGlucHV0TGVuKTsKK1BIUF9IQVNIX0FQSSB2b2lkIFBIUF9GTlYxNjRG aW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIFBIUF9GTlYxNjRfQ1RYICogY29udGV4 dCk7CisKK3N0YXRpYyBwaHBfaGFzaF91aW50MzIgZm52XzMyX2J1Zih2b2lkICpidWYsIHNp emVfdCBsZW4sIHBocF9oYXNoX3VpbnQzMiBodmFsLCBpbnQgYWx0ZXJuYXRlKTsKK3N0YXRp YyBwaHBfaGFzaF91aW50NjQgZm52XzY0X2J1Zih2b2lkICpidWYsIHNpemVfdCBsZW4sIHBo cF9oYXNoX3VpbnQ2NCBodmFsLCBpbnQgYWx0ZXJuYXRlKTsKKworI2VuZGlmCmRpZmYgLXgg cnVuLXRlc3RzLnBocCAteCAnTWFrZSonIC14IGx0bWFpbi5zaCAteCAnKi5zdm4qJyAteCAn KmNvbmZpZyonIC14ICcqLm00JyAteCAnKmF1dG8qJyAteCAnYnVpbGQqJyAtTiAtdSAtciBw aHAtc3JjLTUuMy9leHQvaGFzaC9waHBfaGFzaC5oIGhhc2gvcGhwX2hhc2guaAotLS0gcGhw LXNyYy01LjMvZXh0L2hhc2gvcGhwX2hhc2guaAkyMDA5LTA5LTA0IDE0OjIyOjE5LjAwMDAw MDAwMCArMDEwMAorKysgaGFzaC9waHBfaGFzaC5oCTIwMDktMDktMDQgMTE6MjY6NTUuMDAw MDAwMDAwICswMTAwCkBAIC04MCw2ICs4MCwxMCBAQAogZXh0ZXJuIGNvbnN0IHBocF9oYXNo X29wcyBwaHBfaGFzaF9jcmMzMmJfb3BzOwogZXh0ZXJuIGNvbnN0IHBocF9oYXNoX29wcyBw aHBfaGFzaF9zYWxzYTEwX29wczsKIGV4dGVybiBjb25zdCBwaHBfaGFzaF9vcHMgcGhwX2hh c2hfc2Fsc2EyMF9vcHM7CitleHRlcm4gY29uc3QgcGhwX2hhc2hfb3BzIHBocF9oYXNoX2Zu djEzMl9vcHM7CitleHRlcm4gY29uc3QgcGhwX2hhc2hfb3BzIHBocF9oYXNoX2ZudjFhMzJf b3BzOworZXh0ZXJuIGNvbnN0IHBocF9oYXNoX29wcyBwaHBfaGFzaF9mbnYxNjRfb3BzOwor ZXh0ZXJuIGNvbnN0IHBocF9oYXNoX29wcyBwaHBfaGFzaF9mbnYxYTY0X29wczsKIAogI2Rl ZmluZSBQSFBfSEFTSF9IQVZBTF9PUFMocCxiKQlleHRlcm4gY29uc3QgcGhwX2hhc2hfb3Bz IHBocF9oYXNoXyMjcCMjaGF2YWwjI2IjI19vcHM7CiAK --------------000009060707040205070608--