From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30780 invoked by alias); 5 Apr 2007 19:42:19 -0000 Received: (qmail 30772 invoked by uid 22791); 5 Apr 2007 19:42:19 -0000 X-Spam-Check-By: sourceware.org Received: from outbound-blu.frontbridge.com (HELO outbound7-blu-R.bigfish.com) (65.55.251.16) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 05 Apr 2007 20:42:12 +0100 Received: from outbound7-blu.bigfish.com (localhost.localdomain [127.0.0.1]) by outbound7-blu-R.bigfish.com (Postfix) with ESMTP id C1E09212881 for ; Thu, 5 Apr 2007 19:42:10 +0000 (UTC) Received: from mail100-blu-R.bigfish.com (unknown [10.1.252.3]) by outbound7-blu.bigfish.com (Postfix) with ESMTP id 9023C16300A4 for ; Thu, 5 Apr 2007 19:42:10 +0000 (UTC) Received: from mail100-blu (localhost.localdomain [127.0.0.1]) by mail100-blu-R.bigfish.com (Postfix) with ESMTP id CD20C73032C for ; Thu, 5 Apr 2007 19:42:09 +0000 (UTC) X-BigFish: VP Received: by mail100-blu (MessageSwitch) id 1175802129743218_317; Thu, 5 Apr 2007 19:42:09 +0000 (UCT) Received: from ausb3extmailp01.amd.com (unknown [163.181.251.8]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail100-blu.bigfish.com (Postfix) with ESMTP id 1E6B6136005A for ; Thu, 5 Apr 2007 19:42:08 +0000 (UTC) Received: from SAUSGW02.amd.com (sausgw02.amd.com [163.181.250.22]) by ausb3extmailp01.amd.com (Switch-3.2.5/Switch-3.2.5) with ESMTP id l35JfEn1013367 for ; Thu, 5 Apr 2007 14:42:04 -0500 Received: from 163.181.22.102 by SAUSGW01.amd.com with ESMTP (AMD SMTP Relay (Email Firewall v6.1.0)); Thu, 05 Apr 2007 14:41:58 -0500 X-Server-Uuid: 8C3DB987-180B-4465-9446-45C15473FD3E Received: from sausexmb2.amd.com ([163.181.3.157]) by sausexbh2.amd.com with Microsoft SMTPSVC(6.0.3790.2499); Thu, 5 Apr 2007 14:41:58 -0500 Content-class: urn:content-classes:message MIME-Version: 1.0 Subject: [patch] Vectorizer cost model implementation Date: Thu, 05 Apr 2007 19:42:00 -0000 Message-ID: In-Reply-To: <24b520d20704051041n4229b9a2k8571e2a07e02210e@mail.gmail.com> From: "Linthicum, Tony" To: "GCC Patches" X-WSS-ID: 6A0B8E8C2EW3296107-01-01 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C777BA.768D978A" X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2007-04/txt/msg00193.txt.bz2 This is a multi-part message in MIME format. ------_=_NextPart_001_01C777BA.768D978A Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Content-length: 328 Hello All, This patch contains the initial implementation for a cost model for the vectorizer. The patch is currently missing loop versioning for dynamically trip counted loops and some cost model specific tests. My colleague, Harsha Jagasia, will be providing follow on patches for those things shortly. Thank you. Tony ------_=_NextPart_001_01C777BA.768D978A Content-Type: application/octet-stream; name=patch Content-Transfer-Encoding: base64 Content-Description: patch Content-Disposition: attachment; filename=patch Content-length: 26206 SW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC5leHAKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LmV4cAkocmV2aXNpb24gMTIzNDc3KQorKysgZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LmV4cAkod29ya2luZyBjb3B5KQpAQCAt MjMsNyArMjMsNyBAQAogc2V0IERFRkFVTFRfVkVDVENGTEFHUyAiIgogCiAj IFRoZXNlIGZsYWdzIGFyZSB1c2VkIGZvciBhbGwgdGFyZ2V0cy4KLWxhcHBl bmQgREVGQVVMVF9WRUNUQ0ZMQUdTICItTzIiICItZnRyZWUtdmVjdG9yaXpl IgorbGFwcGVuZCBERUZBVUxUX1ZFQ1RDRkxBR1MgIi1PMiIgIi1mdHJlZS12 ZWN0b3JpemUiICItZm5vLXZlY3QtY29zdC1tb2RlbCIKIAogIyBJZiB0aGUg dGFyZ2V0IHN5c3RlbSBzdXBwb3J0cyB2ZWN0b3IgaW5zdHJ1Y3Rpb25zLCB0 aGUgZGVmYXVsdCBhY3Rpb24KICMgZm9yIGEgdGVzdCBpcyAncnVuJywgb3Ro ZXJ3aXNlIGl0J3MgJ2NvbXBpbGUnLiAgU2F2ZSBjdXJyZW50IGRlZmF1bHQu CkluZGV4OiBnY2MvdHJlZS12ZWN0b3JpemVyLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gZ2NjL3RyZWUtdmVjdG9yaXplci5jCShyZXZpc2lvbiAx MjM0NzcpCisrKyBnY2MvdHJlZS12ZWN0b3JpemVyLmMJKHdvcmtpbmcgY29w eSkKQEAgLTEzNjcsNiArMTM2Nyw5IEBACiAgIGVsc2UKICAgICBTVE1UX1ZJ TkZPX0RFRl9UWVBFIChyZXMpID0gdmVjdF9sb29wX2RlZjsKICAgU1RNVF9W SU5GT19TQU1FX0FMSUdOX1JFRlMgKHJlcykgPSBWRUNfYWxsb2MgKGRyX3As IGhlYXAsIDUpOworICBTVE1UX1ZJTkZPX0lOU0lERV9PRl9MT09QX0NPU1Qg KHJlcykgPSAwOworICBTVE1UX1ZJTkZPX09VVFNJREVfT0ZfTE9PUF9DT1NU IChyZXMpID0gMDsKKyAgU1RNVF9WSU5GT19NRU1fQ09VTlRfRk9SX0NPU1Qg KHJlcykgPSAwOwogICBEUl9HUk9VUF9GSVJTVF9EUiAocmVzKSA9IE5VTExf VFJFRTsKICAgRFJfR1JPVVBfTkVYVF9EUiAocmVzKSA9IE5VTExfVFJFRTsK ICAgRFJfR1JPVVBfU0laRSAocmVzKSA9IDA7CkBAIC0yMjE2LDYgKzIyMTks NyBAQAogICAgICBvbmx5IG92ZXIgaW5pdGlhbCBsb29wcyBza2lwcGluZyBu ZXdseSBnZW5lcmF0ZWQgb25lcy4gICovCiAgIEZPUl9FQUNIX0xPT1AgKGxp LCBsb29wLCAwKQogICAgIHsKKyAgICAgIGludCByZXF1aXJlZF9pdGVyczsK ICAgICAgIGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbzsKIAogICAgICAgdmVj dF9sb29wX2xvY2F0aW9uID0gZmluZF9sb29wX2xvY2F0aW9uIChsb29wKTsK QEAgLTIyMjUsNyArMjIyOSwyNSBAQAogICAgICAgaWYgKCFsb29wX3ZpbmZv IHx8ICFMT09QX1ZJTkZPX1ZFQ1RPUklaQUJMRV9QIChsb29wX3ZpbmZvKSkK IAljb250aW51ZTsKIAorICAgICAgcmVxdWlyZWRfaXRlcnMgPSB2ZWN0X21v ZGVsX3JlcXVpcmVkX2l0ZXJzIChsb29wX3ZpbmZvKTsKKyAgICAgIGlmIChy ZXF1aXJlZF9pdGVycyA8IDApCisJeworCSAgaWYgKHZlY3RfcHJpbnRfZHVt cF9pbmZvIChSRVBPUlRfREVUQUlMUykpCisJICAgIGZwcmludGYgKHZlY3Rf ZHVtcCwgIlZlY3RvciBib2R5IGxlc3MgcHJvZml0YWJsZSB0aGFuIHNjYWxh ci5cbiIpOworCSAgY29udGludWU7CisJfQorCisgICAgICBpZiAoTE9PUF9W SU5GT19OSVRFUlNfS05PV05fUCAobG9vcF92aW5mbykgJiYKKwkgIExPT1Bf VklORk9fSU5UX05JVEVSUyAobG9vcF92aW5mbykgPCAodW5zaWduZWQpIHJl cXVpcmVkX2l0ZXJzKQorCSAgICB7CisJICAgICAgICBpZiAodmVjdF9wcmlu dF9kdW1wX2luZm8gKFJFUE9SVF9ERVRBSUxTKSkKKwkJICBmcHJpbnRmICh2 ZWN0X2R1bXAsCisJCQkgICAiTm90IHZlY3Rvcml6ZWQ6IG1pbiBpdGVyczog JWQsIGFjdHVhbDogJWx1XG4iLAorCQkJICAgcmVxdWlyZWRfaXRlcnMsIExP T1BfVklORk9fSU5UX05JVEVSUyAobG9vcF92aW5mbykpOworCQljb250aW51 ZTsKKwkgICAgfQogICAgICAgdmVjdF90cmFuc2Zvcm1fbG9vcCAobG9vcF92 aW5mbyk7CisKICAgICAgIG51bV92ZWN0b3JpemVkX2xvb3BzKys7CiAgICAg fQogICB2ZWN0X2xvb3BfbG9jYXRpb24gPSBVTktOT1dOX0xPQzsKSW5kZXg6 IGdjYy90cmVlLXZlY3Rvcml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvdHJlZS12ZWN0b3JpemVyLmgJKHJldmlzaW9uIDEyMzQ3NykK KysrIGdjYy90cmVlLXZlY3Rvcml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt MjY0LDYgKzI2NCwxNCBAQAogICAvKiBGb3IgbG9hZHMgb25seSwgaWYgdGhl cmUgaXMgYSBzdG9yZSB3aXRoIHRoZSBzYW1lIGxvY2F0aW9uLCB0aGlzIGZp ZWxkIGlzCiAgICAgIFRSVUUuICAqLwogICBib29sIHJlYWRfd3JpdGVfZGVw OworCisgIC8qIFZlY3Rvcml6YXRpb24gY29zdHMgYXNzb2NpYXRlZCB3aXRo IHN0YXRlbWVudCAqLworICBzdHJ1Y3QgIAorICB7CisgICAgaW50IG91dHNp ZGVfb2ZfbG9vcDsgICAgIC8qIFN0YXRlbWVudHMgZ2VuZXJhdGVkIG91dHNp ZGUgbG9vcC4gICovCisgICAgaW50IGluc2lkZV9vZl9sb29wOyAgICAgIC8q IFN0YXRlbWVudHMgZ2VuZXJhdGVkIGluc2lkZSBsb29wLiAgKi8KKyAgICBp bnQgbWVtX2NvdW50OyAgICAgICAgICAgLyogU3RyaWRlZCBsb2FkL3N0b3Jl IGNvdW50IGZvciBjb3N0IGFuYWx5c2lzICovCisgIH0gY29zdDsKIH0gKnN0 bXRfdmVjX2luZm87CiAKIC8qIEFjY2VzcyBGdW5jdGlvbnMuICAqLwpAQCAt Mjk2LDcgKzMwNCwxOSBAQAogI2RlZmluZSBEUl9HUk9VUF9SRUFEX1dSSVRF X0RFUEVOREVOQ0UoUykgIChTKS0+cmVhZF93cml0ZV9kZXAKIAogI2RlZmlu ZSBTVE1UX1ZJTkZPX1JFTEVWQU5UX1AoUykgICAgICAgICAgKChTKS0+cmVs ZXZhbnQgIT0gdmVjdF91bnVzZWRfaW5fbG9vcCkKKyNkZWZpbmUgU1RNVF9W SU5GT19PVVRTSURFX09GX0xPT1BfQ09TVChTKSAoUyktPmNvc3Qub3V0c2lk ZV9vZl9sb29wCisjZGVmaW5lIFNUTVRfVklORk9fSU5TSURFX09GX0xPT1Bf Q09TVChTKSAgKFMpLT5jb3N0Lmluc2lkZV9vZl9sb29wCisjZGVmaW5lIFNU TVRfVklORk9fTUVNX0NPVU5UX0ZPUl9DT1NUKFMpICAgKFMpLT5jb3N0Lm1l bV9jb3VudAogCisvKiBUaGVzZSBhcmUgc29tZSBkZWZpbmVzIGZvciB0aGUg aW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdmVjdG9yaXplcidzCisg ICBjb3N0IG1vZGVsLiAgVGhlc2Ugd2lsbCBsYXRlciBiZSB0YXJnZXQgc3Bl Y2lmaWMgaG9va3MuICAqLworI2RlZmluZSBUQVJHX0NPTkRfQlJBTkNIX0NP U1QgICAgICAgIDMKKyNkZWZpbmUgVEFSR19WRUNfU1RNVF9DT1NUICAgICAg ICAgICAxCisjZGVmaW5lIFRBUkdfVkVDX1RPX1NDQUxBUl9DT1NUICAgICAg MQorI2RlZmluZSBUQVJHX1ZFQ19MT0FEX0NPU1QgICAgICAgICAgIDEKKyNk ZWZpbmUgVEFSR19WRUNfVU5BTElHTkVEX0xPQURfQ09TVCAyCisjZGVmaW5l IFRBUkdfVkVDX1NUT1JFX0NPU1QgICAgICAgICAgMQorCiBzdGF0aWMgaW5s aW5lIHZvaWQgc2V0X3N0bXRfaW5mbyAoc3RtdF9hbm5fdCBhbm4sIHN0bXRf dmVjX2luZm8gc3RtdF9pbmZvKTsKIHN0YXRpYyBpbmxpbmUgc3RtdF92ZWNf aW5mbyB2aW5mb19mb3Jfc3RtdCAodHJlZSBzdG10KTsKIApAQCAtNDI4LDYg KzQ0OCw3IEBACiBleHRlcm4gYm9vbCB2ZWN0b3JpemFibGVfY29uZGl0aW9u ICh0cmVlLCBibG9ja19zdG10X2l0ZXJhdG9yICosIHRyZWUgKik7CiBleHRl cm4gYm9vbCB2ZWN0b3JpemFibGVfbGl2ZV9vcGVyYXRpb24gKHRyZWUsIGJs b2NrX3N0bXRfaXRlcmF0b3IgKiwgdHJlZSAqKTsKIGV4dGVybiBib29sIHZl Y3Rvcml6YWJsZV9yZWR1Y3Rpb24gKHRyZWUsIGJsb2NrX3N0bXRfaXRlcmF0 b3IgKiwgdHJlZSAqKTsKK2V4dGVybiBpbnQgIHZlY3RfbW9kZWxfcmVxdWly ZWRfaXRlcnMgKGxvb3BfdmVjX2luZm8pOwogLyogRHJpdmVyIGZvciB0cmFu c2Zvcm1hdGlvbiBzdGFnZS4gICovCiBleHRlcm4gdm9pZCB2ZWN0X3RyYW5z Zm9ybV9sb29wIChsb29wX3ZlY19pbmZvKTsKIApJbmRleDogZ2NjL2NvbW1v bi5vcHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NvbW1vbi5v cHQJKHJldmlzaW9uIDEyMzQ3NykKKysrIGdjYy9jb21tb24ub3B0CSh3b3Jr aW5nIGNvcHkpCkBAIC0xMTAxLDYgKzExMDEsMTAgQEAKIENvbW1vbiBSZXBv cnQgVmFyKGZsYWdfdHJlZV92ZWN0b3JpemUpIE9wdGltaXphdGlvbgogRW5h YmxlIGxvb3AgdmVjdG9yaXphdGlvbiBvbiB0cmVlcwogCitmbm8tdmVjdC1j b3N0LW1vZGVsCitDb21tb24gUmVwb3J0IFZhcihmbGFnX25vX3ZlY3RfY29z dF9tb2RlbCkgT3B0aW1pemF0aW9uCitEaXNhYmxlIHVzZSBvZiBjb3N0IG1v ZGVsIGluIHZlY3Rvcml6YXRpb24KKwogZnRyZWUtdmVjdC1sb29wLXZlcnNp b24KIENvbW1vbiBSZXBvcnQgVmFyKGZsYWdfdHJlZV92ZWN0X2xvb3BfdmVy c2lvbikgSW5pdCgxKSBPcHRpbWl6YXRpb24KIEVuYWJsZSBsb29wIHZlcnNp b25pbmcgd2hlbiBkb2luZyBsb29wIHZlY3Rvcml6YXRpb24gb24gdHJlZXMK SW5kZXg6IGdjYy90cmVlLXZlY3QtdHJhbnNmb3JtLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gZ2NjL3RyZWUtdmVjdC10cmFuc2Zvcm0uYwkocmV2 aXNpb24gMTIzNDc3KQorKysgZ2NjL3RyZWUtdmVjdC10cmFuc2Zvcm0uYwko d29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMzQ5IEBACiBzdGF0aWMgaW50 IHZlY3RfbWluX3dvcnRod2hpbGVfZmFjdG9yIChlbnVtIHRyZWVfY29kZSk7 CiAKIAorLyogRnVuY3Rpb24gdmVjdF9tb2RlbF9yZXF1aXJlZF9pdGVycwor CisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHJlcXVpcmVk IGZvciB0aGUgdmVjdG9yIHZlcnNpb24gb2YgdGhlCisgICBsb29wIHRvIGJl IHByb2ZpdGFibGUgcmVsYXRpdmUgdG8gdGhlIGNvc3Qgb2YgdGhlIHNjYWxh ciB2ZXJzaW9uIG9mIHRoZQorICAgbG9vcC4gICovCisKK2ludAordmVjdF9t b2RlbF9yZXF1aXJlZF9pdGVycyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv KQoreworICBpbnQgaTsKKyAgaW50IG1pbl9pdGVyczsKKyAgZGl2X3Qgb3Zl cmhlYWQ7CisgIGludCBwZWVsX2l0ZXJzOworICBpbnQgdmVjX2luc2lkZV9j b3N0ID0gMDsKKyAgaW50IHZlY19vdXRzaWRlX2Nvc3QgPSAwOworICBpbnQg c2NhbGFyX3NpbmdsZV9pdGVyX2Nvc3QgPSAwOworICBpbnQgdmYgPSBMT09Q X1ZJTkZPX1ZFQ1RfRkFDVE9SIChsb29wX3ZpbmZvKTsKKyAgc3RydWN0IGxv b3AgKmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxvb3BfdmluZm8pOworICBi YXNpY19ibG9jayAqYmJzID0gTE9PUF9WSU5GT19CQlMgKGxvb3BfdmluZm8p OworICBpbnQgbmJicyA9IGxvb3AtPm51bV9ub2RlczsKKworICAvKiBDb3N0 IG1vZGVsIGRpc2FibGVkLiAgKi8KKyAgaWYgKGZsYWdfbm9fdmVjdF9jb3N0 X21vZGVsKQorICAgIHJldHVybiAwOworCisgIC8qIFJlcXVpcmVzIGEgbG9v cCB0byBmaW5pc2ggdXAgcmVtYWluaW5nIGl0ZXJhdGlvbnMgYWZ0ZXIKKyAg ICAgdmVjdG9yIGxvb3AuICBBZGQgYWRkaXRpb25hbCBjb3N0IGZvciB0aGUg dGVzdC4gKi8KKyAgaWYgKCFMT09QX1ZJTkZPX05JVEVSU19LTk9XTl9QIChs b29wX3ZpbmZvKSkKKyAgICB2ZWNfb3V0c2lkZV9jb3N0ICs9IFRBUkdfQ09O RF9CUkFOQ0hfQ09TVDsKKworICAvKiBSZXF1aXJlcyBsb29wIHZlcnNpb25p bmcgdGVzdHMuICAqLworICBpZiAoTE9PUF9WSU5GT19NQVlfTUlTQUxJR05f U1RNVFMgKGxvb3BfdmluZm8pKQorICAgIHZlY19vdXRzaWRlX2Nvc3QgKz0g VEFSR19DT05EX0JSQU5DSF9DT1NUOworCisgIC8qIFJlcXVpcmVzIGd1YXJk IGNvZGUgZm9yIHBlZWxpbmcuICAqLworICBpZiAoTE9PUF9QRUVMSU5HX0ZP Ul9BTElHTk1FTlQgKGxvb3BfdmluZm8pKQorICAgIHZlY19vdXRzaWRlX2Nv c3QgKz0gVEFSR19DT05EX0JSQU5DSF9DT1NUOworCisgIC8qIENvdW50IHN0 YXRlbWVudHMgaW4gc2NhbGFyIGxvb3AuICBVc2luZyB0aGlzIGFzIHNjYWxh ciBjb3N0IGZvciBhIHNpbmdsZQorICAgICBpdGVyYXRpb24gZm9yIG5vdy4g ICovCisgIGZvciAoaSA9IDA7IGkgPCBuYmJzOyBpKyspCisgICAgeworICAg ICAgYmxvY2tfc3RtdF9pdGVyYXRvciBzaTsKKyAgICAgIGJhc2ljX2Jsb2Nr IGJiID0gYmJzW2ldOworCisgICAgICBmb3IgKHNpID0gYnNpX3N0YXJ0IChi Yik7ICFic2lfZW5kX3AgKHNpKTsgYnNpX25leHQgKCZzaSkpCisJeworCSAg dHJlZSBzdG10ID0gYnNpX3N0bXQgKHNpKTsKKyAgICAgICAgICBzdG10X3Zl Y19pbmZvIHN0bXRfaW5mbyA9IHZpbmZvX2Zvcl9zdG10IChzdG10KTsKKwkg IGlmICghU1RNVF9WSU5GT19SRUxFVkFOVF9QIChzdG10X2luZm8pCisJICAg ICAgJiYgIVNUTVRfVklORk9fTElWRV9QIChzdG10X2luZm8pKQorCSAgICBj b250aW51ZTsKKwkgIHNjYWxhcl9zaW5nbGVfaXRlcl9jb3N0Kys7CisJICB2 ZWNfaW5zaWRlX2Nvc3QgKz0gU1RNVF9WSU5GT19JTlNJREVfT0ZfTE9PUF9D T1NUIChzdG10X2luZm8pOworCSAgdmVjX291dHNpZGVfY29zdCArPSBTVE1U X1ZJTkZPX09VVFNJREVfT0ZfTE9PUF9DT1NUIChzdG10X2luZm8pOworCX0K KyAgICB9CisKKyAgLyogQWRkIGluIGNvc3RzIG9mIHBlZWxlZCBpbnN0cnVj dGlvbnMsIGlmIGFueS4gICovCisgIHBlZWxfaXRlcnMgPSBMT09QX1BFRUxJ TkdfRk9SX0FMSUdOTUVOVCAobG9vcF92aW5mbyk7CisgIHZlY19vdXRzaWRl X2Nvc3QgKz0gcGVlbF9pdGVycyAqIHNjYWxhcl9zaW5nbGVfaXRlcl9jb3N0 OworCisgIC8qIENhbGN1bGF0ZSBudW1iZXIgb2YgaXRlcmF0aW9ucyByZXF1 aXJlZCB0byBtYWtlIHRoZSB2ZWN0b3IgdmVyc2lvbiAKKyAgICAgcHJvZml0 YWJsZSwgcmVsYXRpdmUgdG8gdGhlIGxvb3AgYm9kaWVzIG9ubHkuICAqLwor ICBpZiAoc2NhbGFyX3NpbmdsZV9pdGVyX2Nvc3QgPiB2ZWNfaW5zaWRlX2Nv c3QpCisgICAgbWluX2l0ZXJzID0gMTsKKyAgZWxzZQorICAgIHsKKyAgICAg IGRpdl90IG1pbl90bXAgPSBkaXYgKHZlY19pbnNpZGVfY29zdCwgc2NhbGFy X3NpbmdsZV9pdGVyX2Nvc3QpOworICAgICAgbWluX2l0ZXJzID0gbWluX3Rt cC5yZW0gPT0gMCA/IG1pbl90bXAucXVvdCA6IG1pbl90bXAucXVvdCArIDE7 CisgICAgfQorCisgIC8qIElmIHRoZSBtaW5pbXVtIG51bWJlciBvZiBpdGVy YXRpb25zIHJlcXVpcmVkIGZvciBsb29wIGJvZHkgcHJvZml0YWJpbGl0eQor ICAgICBpcyBncmVhdGVyIHRoYW4gdGhlIHZlY3Rvcml6YXRpb24gZmFjdG9y LCB0aGVuIHRoZSB2ZWN0b3IgdmVyc2lvbiBjYW4KKyAgICAgbmV2ZXIgYmUg cHJvZml0YWJsZS4gICovCisgIGlmIChtaW5faXRlcnMgPiB2ZikKKyAgICB7 CisgICAgICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRB SUxTKSkKKwlmcHJpbnRmICh2ZWN0X2R1bXAsICJDb3N0OiBtaW4gaXRlcmF0 aW9ucyAlZCBncmVhdGVyIHRoYW4gVkYgJWRcbiIsCisJCSBtaW5faXRlcnMs IHZmKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgZWxzZQorICAg IHsKKyAgICAgIC8qIE5vdyB3ZSd2ZSBkZXRlcm1pbmVkIHRoZSBtaW5pbXVt IG51bWJlciBvZiBpdGVyYXRpb25zIHJlcXVpcmVkIGZvciB0aGUKKwkgYm9k eSBvZiB0aGUgdmVjdG9yIGxvb3AgdG8gYmUgcHJvZml0YWJsZS4gIFdlIG11 c3Qgbm93IGRldGVybWluZSBob3cgCisJIG1hbnkgbW9yZSBpdGVyYXRpb25z IGFyZSByZXF1aXJlZCB0byBvdmVyY29tZSB0aGUgYWRkaXRpb25hbCBvdmVy aGVhZAorCSB0aGF0IHRoZSB2ZWN0b3IgbG9vcCByZXF1aXJlcywgaWYgYW55 LiAgVGhlIG92ZXJoZWFkIGlzIGNvbnRhaW5lZCBpbiAKKwkgdGhlICJvdXRz aWRlIG9mIGxvb3AiIGNvc3RzIGdhdGhlcmVkIGFib3ZlLiAgKi8KKyAgICAg IGlmICgobWluX2l0ZXJzICogc2NhbGFyX3NpbmdsZV9pdGVyX2Nvc3QpIDwK KwkgICh2ZWNfaW5zaWRlX2Nvc3QgKyB2ZWNfb3V0c2lkZV9jb3N0KSkKKwl7 CisJICBvdmVyaGVhZCA9IGRpdiAodmVjX291dHNpZGVfY29zdCwgc2NhbGFy X3NpbmdsZV9pdGVyX2Nvc3QpOworCisJICBpZiAob3ZlcmhlYWQucmVtID4g MCkKKwkgICAgbWluX2l0ZXJzICs9IChvdmVyaGVhZC5xdW90ICsgMSk7CisJ ICBlbHNlCisJICAgIG1pbl9pdGVycyArPSBvdmVyaGVhZC5xdW90OworCX0K KyAgICB9CisKKyAgaWYgKHZlY3RfcHJpbnRfZHVtcF9pbmZvIChSRVBPUlRf REVUQUlMUykpCisgICAgeworICAgICAgZnByaW50ZiAodmVjdF9kdW1wLCAi Q29zdCBtb2RlbCBhbmFseXNpczogXG4iKTsKKyAgICAgIGZwcmludGYgKHZl Y3RfZHVtcCwgIiAgVmVjdG9yIGluc2lkZSBvZiBsb29wIGNvc3Q6ICVkXG4i LAorCSAgICAgICB2ZWNfaW5zaWRlX2Nvc3QpOworICAgICAgZnByaW50ZiAo dmVjdF9kdW1wLCAiICBWZWN0b3Igb3V0c2lkZSBvZiBsb29wIGNvc3Q6ICVk XG4iLAorCSAgICAgICB2ZWNfb3V0c2lkZV9jb3N0KTsKKyAgICAgIGZwcmlu dGYgKHZlY3RfZHVtcCwgIiAgU2NhbGFyIGNvc3Q6ICVkXG4iLCBzY2FsYXJf c2luZ2xlX2l0ZXJfY29zdCk7CisgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAs ICIgIENhbGN1bGF0ZWQgbWluaW11bSBpdGVycyBmb3IgcHJvZml0YWJpbGl0 eTogJWRcbiIsCisJICAgICAgIG1pbl9pdGVycyk7CisgICAgICBmcHJpbnRm ICh2ZWN0X2R1bXAsICIgIEFjdHVhbCBtaW5pbXVtIGl0ZXJzIGZvciBwcm9m aXRhYmlsaXR5OiAlZFxuIiwKKwkgICAgICAgbWluX2l0ZXJzIDwgdmYgPyB2 ZiA6IG1pbl9pdGVycyk7CisgICAgfQorCisgIHJldHVybiBtaW5faXRlcnMg PCB2ZiA/IHZmIDogbWluX2l0ZXJzOworfQorCisgICAgCisvKiBGdW5jdGlv biB2ZWN0X21vZGVsX3JlZHVjdGlvbl9jb3N0LiAgCisKKyAgIE1vZGVscyBj b3N0IGZvciBhIHJlZHVjdGlvbiBvcGVyYXRpb24sIGluY2x1ZGluZyB0aGUg dmVjdG9yIG9wcyAKKyAgIGdlbmVyYXRlZCB3aXRoaW4gdGhlIHN0cmlwLW1p bmUgbG9vcCwgdGhlIGluaXRpYWwgZGVmaW5pdGlvbiBiZWZvcmUKKyAgIHRo ZSBsb29wLCBhbmQgdGhlIGVwaWxvZyBjb2RlIHRoYXQgbXVzdCBiZSBnZW5l cmF0ZWQuICAqLworCitzdGF0aWMgdm9pZAordmVjdF9tb2RlbF9yZWR1Y3Rp b25fY29zdCAoc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sIGVudW0gdHJlZV9j b2RlIHJlZHVjX2NvZGUsCisJCQkgICBpbnQgbmNvcGllcykKK3sKKyAgaW50 IG91dGVyX2Nvc3QgPSAwOworICBlbnVtIHRyZWVfY29kZSBjb2RlOworICBv cHRhYiBvcHRhYjsKKyAgdHJlZSB2ZWN0eXBlOworICB0cmVlIG9yaWdfc3Rt dDsKKyAgdHJlZSByZWR1Y3Rpb25fb3A7CisgIGVudW0gbWFjaGluZV9tb2Rl IG1vZGU7CisgIHRyZWUgb3BlcmF0aW9uID0gR0lNUExFX1NUTVRfT1BFUkFO RCAoU1RNVF9WSU5GT19TVE1UIChzdG10X2luZm8pLCAxKTsKKyAgaW50IG9w X3R5cGUgPSBUUkVFX0NPREVfTEVOR1RIIChUUkVFX0NPREUgKG9wZXJhdGlv bikpOworCisgIC8qIENvc3Qgb2YgcmVkdWN0aW9uIG9wIGluc2lkZSBsb29w ICovCisgIFNUTVRfVklORk9fSU5TSURFX09GX0xPT1BfQ09TVCAoc3RtdF9p bmZvKSArPSBuY29waWVzICogVEFSR19WRUNfU1RNVF9DT1NUOworCisgIHJl ZHVjdGlvbl9vcCA9IFRSRUVfT1BFUkFORCAob3BlcmF0aW9uLCBvcF90eXBl LTEpOworICB2ZWN0eXBlID0gZ2V0X3ZlY3R5cGVfZm9yX3NjYWxhcl90eXBl IChUUkVFX1RZUEUgKHJlZHVjdGlvbl9vcCkpOworICBtb2RlID0gVFlQRV9N T0RFICh2ZWN0eXBlKTsKKyAgb3JpZ19zdG10ID0gU1RNVF9WSU5GT19SRUxB VEVEX1NUTVQgKHN0bXRfaW5mbyk7CisKKyAgaWYgKCFvcmlnX3N0bXQpIAor ICAgIG9yaWdfc3RtdCA9IFNUTVRfVklORk9fU1RNVCAoc3RtdF9pbmZvKTsK KworICBjb2RlID0gVFJFRV9DT0RFIChHSU1QTEVfU1RNVF9PUEVSQU5EIChv cmlnX3N0bXQsIDEpKTsKKworICAvKiBBZGQgaW4gY29zdCBmb3IgaW50aWFs IGRlZmluaXRpb24uICAqLworICBvdXRlcl9jb3N0ICs9IFRBUkdfVkVDX1NU TVRfQ09TVDsKKworICAvKiBEZXRlcm1pbmUgaWYgdGhlIGluaXRpYWwgZGVm aW5pdGlvbiB3aWxsIGJlIHVzZWQgdG8gYWRqdXN0IHRoZSBmaW5hbAorICAg ICByZXN1bHQgaW4gdGhlIGVwaWxvZy4gICovCisjaWZkZWYgQURKVVNUX0lO X0VQSUxPRworICBpZiAoY29kZSAhPSBNSU5fRVhQUiB8fCBjb2RlICE9IE1B WF9FWFBSKQorICAgIHsKKyAgICAgIG91dGVyX2Nvc3QgKz0gVEFSR19WRUNf U1RNVF9DT1NUOworICAgIH0KKyNlbmRpZgkKKworICAvKiBEZXRlcm1pbmUg Y29zdCBvZiBlcGlsb2cgY29kZS4gICovCisgIGlmIChyZWR1Y19jb2RlIDwg TlVNX1RSRUVfQ09ERVMpIAorICAgIC8qIFdlIGhhdmUgYSByZWR1Y3Rpb24g b3BlcmF0b3IgdGhhdCB3aWxsIHJlZHVjZSB0aGUgdmVjdG9yIGluIG9uZSAK KyAgICAgICBzdGF0ZW1lbnQuICBBbHNvIHJlcXVpcmVzIHNjYWxhciBleHRy YWN0LiAgKi8KKyAgICBvdXRlcl9jb3N0ICs9IDIgKiBUQVJHX1ZFQ19TVE1U X0NPU1Q7CisgIGVsc2UgCisgICAgeworICAgICAgaW50IHZlY19zaXplX2lu X2JpdHMgPSB0cmVlX2xvd19jc3QgKFRZUEVfU0laRSAodmVjdHlwZSksIDEp OworICAgICAgdHJlZSBiaXRzaXplID0KKwlUWVBFX1NJWkUgKFRSRUVfVFlQ RSAoIEdJTVBMRV9TVE1UX09QRVJBTkQgKG9yaWdfc3RtdCwgMCkpKTsKKyAg ICAgIGludCBlbGVtZW50X2JpdHNpemUgPSB0cmVlX2xvd19jc3QgKGJpdHNp emUsIDEpOworICAgICAgaW50IG5lbGVtZW50cyA9IHZlY19zaXplX2luX2Jp dHMgLyBlbGVtZW50X2JpdHNpemU7CisKKyAgICAgIG9wdGFiID0gb3B0YWJf Zm9yX3RyZWVfY29kZSAoY29kZSwgdmVjdHlwZSk7CisKKyAgICAgIC8qIFdl IGhhdmUgYSB3aG9sZSB2ZWN0b3Igc2hpZnQgYXZhaWxhYmxlICovCisgICAg ICBpZiAoIVZFQ1RPUl9NT0RFX1AgKG1vZGUpIHx8IG9wdGFiLT5oYW5kbGVy c1ttb2RlXS5pbnNuX2NvZGUgPT0KKwkgIENPREVfRk9SX25vdGhpbmcpIAor CXsKKwkgIC8qIEZpbmFsIHJlZHVjdGlvbiB2aWEgdmVjdG9yIHNoaWZ0cyBh bmQgdGhlIHJlZHVjdGlvbiBvcGVyYXRvci4gIAorCSAgICAgQWxzbyByZXF1 aXJlcyBzY2FsYXIgZXh0cmFjdC4gICovCisJICBvdXRlcl9jb3N0ICs9ICgo ZXhhY3RfbG9nMihuZWxlbWVudHMpICogMiArIDEpICogVEFSR19WRUNfU1RN VF9DT1NUKTsKKwl9IAorICAgICAgZWxzZQorCXsKKwkgIC8qIFVzZSBleHRy YWN0cyBhbmQgcmVkdWN0aW9uIG9wIGZvciBmaW5hbCByZWR1Y3Rpb24uICBG b3IgTiAKKwkgICAgIGVsZW1lbnRzLCB3ZSBoYXZlIE4gZXh0cmFjdHMgYW5k IE4tMSByZWR1Y3Rpb24gb3BzLiAgKi8KKwkgIG91dGVyX2Nvc3QgKz0gKChu ZWxlbWVudHMgKyBuZWxlbWVudHMgLSAxKSAqIFRBUkdfVkVDX1NUTVRfQ09T VCk7CisJfQorICAgIH0KKworICBTVE1UX1ZJTkZPX09VVFNJREVfT0ZfTE9P UF9DT1NUIChzdG10X2luZm8pID0gb3V0ZXJfY29zdDsKK30KKworCisvKiBG dW5jdGlvbiB2ZWN0X21vZGVsX3NpbXBsZV9jb3N0LiAgCisKKyAgIE1vZGVs cyBjb3N0IGZvciBzaW1wbGUgb3BlcmF0aW9ucywgaS5lLiB0aG9zZSB0aGF0 IG9ubHkgZW1pdCBuY29waWVzIG9mIGEgCisgICBzaW5nbGUgb3AuICBSaWdo dCBub3csIHRoaXMgZG9lcyBub3QgYWNjb3VudCBmb3IgbXVsdGlwbGUgaW5z bnMgdGhhdCBjb3VsZAorICAgYmUgZ2VuZXJhdGVkIGZvciB0aGUgc2luZ2xl IHZlY3RvciBvcC4gIFdlIHdpbGwgaGFuZGxlIHRoYXQgc2hvcnRseS4gICov CisKK3N0YXRpYyB2b2lkCit2ZWN0X21vZGVsX3NpbXBsZV9jb3N0IChzdG10 X3ZlY19pbmZvIHN0bXRfaW5mbywgaW50IG5jb3BpZXMpCit7CisgIFNUTVRf VklORk9fSU5TSURFX09GX0xPT1BfQ09TVCAoc3RtdF9pbmZvKSA9IG5jb3Bp ZXMgKiBUQVJHX1ZFQ19TVE1UX0NPU1Q7Cit9CisKKy8qIEZ1bmN0aW9uIHZl Y3RfY29zdF9zdHJpZGVkX2dyb3VwX3NpemUgCisgCisgICBGb3IgYSBsb2Fk IG9yIHN0b3JlLCByZXR1cm5zIHRoZSBncm91cF9zaXplIGlmIGl0J3MgdGhl IGxhc3Qgc3RvcmUsIGFuZCAxCisgICBpZiBpdCBpcyBub3QuICAqLworc3Rh dGljIGludAordmVjdF9jb3N0X3N0cmlkZWRfZ3JvdXBfc2l6ZSAoc3RtdF92 ZWNfaW5mbyBzdG10X2luZm8pCit7CisgIHRyZWUgZmlyc3Rfc3RtdCA9IERS X0dST1VQX0ZJUlNUX0RSIChzdG10X2luZm8pOworICBzdG10X3ZlY19pbmZv IGZpcnN0X2luZm8gPSB2aW5mb19mb3Jfc3RtdCAoZmlyc3Rfc3RtdCk7Cisg IGludCBncm91cF9zaXplID0gRFJfR1JPVVBfU0laRSAoZmlyc3RfaW5mbyk7 CisgIFNUTVRfVklORk9fTUVNX0NPVU5UX0ZPUl9DT1NUIChmaXJzdF9pbmZv KSsrOworICAgIAorICAvKiBJcyBpdCB0aGUgbGFzdCBpbiB0aGUgZ3JvdXA/ ICAqLworICBpZiAoU1RNVF9WSU5GT19NRU1fQ09VTlRfRk9SX0NPU1QgKGZp cnN0X2luZm8pIDwgZ3JvdXBfc2l6ZSkKKyAgICBncm91cF9zaXplID0gMTsK KworICByZXR1cm4gZ3JvdXBfc2l6ZTsKK30KKworCisvKiBGdW5jdGlvbiB2 ZWN0X21vZGVsX3N0b3JlX2Nvc3QKKworICAgTW9kZWxzIGNvc3QgZm9yIHN0 b3Jlcy4gIEluIHRoZSBjYXNlIG9mIHN0cmlkZWQgYWNjZXNzZXMsIHRoZSBs YXN0IGFjY2VzcworICAgaGFzIHRoZSBvdmVyaGVhZCBvZiB0aGUgc3RyaWRl ZCBhY2Nlc3MgYXR0cmlidXRlZCB0byBpdC4gICovCisKK3N0YXRpYyB2b2lk Cit2ZWN0X21vZGVsX3N0b3JlX2Nvc3QgKHN0bXRfdmVjX2luZm8gc3RtdF9p bmZvLCBpbnQgbmNvcGllcykKK3sKKyAgaW50IGNvc3QgPSAwOworICBpbnQg Z3JvdXBfc2l6ZTsKKworICAvKiBTdHJpZGVkIGFjY2Vzcz8gICovCisKKyAg aWYgKERSX0dST1VQX0ZJUlNUX0RSIChzdG10X2luZm8pKSAKKyAgICB7Cisg ICAgICBncm91cF9zaXplID0gdmVjdF9jb3N0X3N0cmlkZWRfZ3JvdXBfc2l6 ZSAoc3RtdF9pbmZvKTsKKyAgICB9CisgIGVsc2UgCisgICAgLyogTm90IGEg c3RyaWRlZCBhY2Nlc3MuICAqLworICAgIGdyb3VwX3NpemUgPSAxOworCisg IC8qIElzIHRoaXMgdGhlIGxhc3QgYWNjZXNzIGluIGEgZ3JvdXAgb2Ygc3Rv cmVzIHByb3ZpZGluZyBzdHJpZGVkIGFjZXNzPyAgCisgICAgIElmIHNvLCBh ZGQgaW4gdGhlIGNvc3Qgb2YgdGhlIHBlcm11dGVzLiAgKi8KKyAgaWYgKGdy b3VwX3NpemUgPiAxKSAKKyAgICB7CisgICAgICAvKiBVc2VzIGEgaGlnaCBh bmQgbG93IGludGVybGVhdmUgb3BlcmF0aW9uIGZvciBlYWNoIG5lZWRlZCBw ZXJtdXRlLiAgKi8KKyAgICAgIGNvc3QgPSBuY29waWVzICogZXhhY3RfbG9n Mihncm91cF9zaXplKSAqIGdyb3VwX3NpemUgKgorCVRBUkdfVkVDX1RPX1ND QUxBUl9DT1NUOworICAgIH0KKworICAvKiBDb3N0cyBvZiB0aGUgc3RvcmVz LiAgKi8KKyAgY29zdCArPSBuY29waWVzICogVEFSR19WRUNfU1RPUkVfQ09T VDsKKworICBTVE1UX1ZJTkZPX0lOU0lERV9PRl9MT09QX0NPU1QgKHN0bXRf aW5mbykgPSBjb3N0OworfQorCisvKiBGdW5jdGlvbiB2ZWN0X21vZGVsX2xv YWRfY29zdAorCisgICBNb2RlbHMgY29zdCBmb3IgbG9hZHMuICBJbiB0aGUg Y2FzZSBvZiBzdHJpZGVkIGFjY2Vzc2VzLCB0aGUgbGFzdCBhY2Nlc3MKKyAg IGhhcyB0aGUgb3ZlcmhlYWQgb2YgdGhlIHN0cmlkZWQgYWNjZXNzIGF0dHJp YnV0ZWQgdG8gaXQuICBTaW5jZSB1bmFsaWduZWQKKyAgIGFjY2Vzc2VzIGFy ZSBzdXBwb3J0ZWQgZm9yIGxvYWRzLCB3ZSBhbHNvIGFjY291bnQgZm9yIHRo ZSBjb3N0cyBvZiB0aGUgCisgICBhY2Nlc3Mgc2NoZW1lIGNob3Nlbi4gICov CisKK3N0YXRpYyB2b2lkCit2ZWN0X21vZGVsX2xvYWRfY29zdCAoc3RtdF92 ZWNfaW5mbyBzdG10X2luZm8sIGludCBuY29waWVzKQorCQkgCit7CisgIGlu dCBpbm5lcl9jb3N0ID0gMDsKKyAgaW50IGdyb3VwX3NpemU7CisgIGludCBh bGlnbm1lbnRfc3VwcG9ydF9jaGVtZTsKKyAgdHJlZSBmaXJzdF9zdG10Owor ICBzdHJ1Y3QgZGF0YV9yZWZlcmVuY2UgKmRyID0gU1RNVF9WSU5GT19EQVRB X1JFRiAoc3RtdF9pbmZvKSwgKmZpcnN0X2RyOworCisgIC8qIFN0cmlkZWQg YWNlc3Nlcz8gKi8KKyAgZmlyc3Rfc3RtdCA9IERSX0dST1VQX0ZJUlNUX0RS IChzdG10X2luZm8pOworICBpZiAoZmlyc3Rfc3RtdCkKKyAgICB7CisgICAg ICBncm91cF9zaXplID0gdmVjdF9jb3N0X3N0cmlkZWRfZ3JvdXBfc2l6ZSAo c3RtdF9pbmZvKTsKKyAgICAgIGZpcnN0X2RyID0gU1RNVF9WSU5GT19EQVRB X1JFRiAodmluZm9fZm9yX3N0bXQgKGZpcnN0X3N0bXQpKTsKKyAgICB9Cisg IGVsc2UKKyAgICB7CisgICAgICAvKiBOb3QgYSBzdHJpZGVkIGFjY2VzcyAq LworICAgICAgZ3JvdXBfc2l6ZSA9IDE7CisgICAgICBmaXJzdF9kciA9IGRy OworICAgIH0KKyAgYWxpZ25tZW50X3N1cHBvcnRfY2hlbWUgPSB2ZWN0X3N1 cHBvcnRhYmxlX2RyX2FsaWdubWVudCAoZmlyc3RfZHIpOworCisgIC8qIElz IHRoaXMgdGhlIGxhc3QgYWNjZXNzIGluIGEgZ3JvdXAgb2YgbG9hZHMgcHJv dmlkaW5nIHN0cmlkZWQgYWNlc3M/ICAKKyAgICAgSWYgc28sIGFkZCBpbiB0 aGUgY29zdCBvZiB0aGUgcGVybXV0ZXMuICAqLworICBpZiAoZ3JvdXBfc2l6 ZSA+IDEpIAorICAgIHsKKyAgICAgIC8qIFVzZXMgYSBoaWdoIGFuZCBsb3cg aW50ZXJsZWF2ZSBvcGVyYXRpb24gZm9yIGVhY2ggbmVlZGVkIHBlcm11dGUu ICAqLworICAgICAgaW5uZXJfY29zdCA9IG5jb3BpZXMgKiBleGFjdF9sb2cy KGdyb3VwX3NpemUpICogZ3JvdXBfc2l6ZSAqCisJVEFSR19WRUNfU1RNVF9D T1NUOworICAgIH0KKworICAvKiBUaGUgbG9hZHMgdGhlbXNlbHZlcyAqLwor ICBzd2l0Y2ggKGFsaWdubWVudF9zdXBwb3J0X2NoZW1lKQorICAgIHsKKyAg ICBjYXNlIGRyX2FsaWduZWQ6CisgICAgICBpbm5lcl9jb3N0ICs9IG5jb3Bp ZXMgKiBUQVJHX1ZFQ19MT0FEX0NPU1Q7CisgICAgICBicmVhazsKKworICAg IGNhc2UgZHJfdW5hbGlnbmVkX3N1cHBvcnRlZDoKKyAgICAgIC8qIEhlcmUs IHdlIGFzc2lnbiBhbiBhZGRpdGlvbmFsIGNvc3QgZm9yIHRoZSB1bmFsaWdu ZWQgbG9hZC4gICovCisgICAgICBpbm5lcl9jb3N0ICs9IG5jb3BpZXMgKiBU QVJHX1ZFQ19VTkFMSUdORURfTE9BRF9DT1NUOworCisgICAgY2FzZSBkcl91 bmFsaWduZWRfc29mdHdhcmVfcGlwZWxpbmU6CisgICAgICB7CisJaW50IG91 dGVyX2Nvc3Q7CisKKwkvKiBVbmFsaWduZWQgc29mdHdhcmUgcGlwZWxpbmUg aGFzIGEgbG9hZCBvZiBhbiBhZGRyZXNzLCBhbiBpbnRpYWwKKwkgICBsb2Fk LCBhbmQgcG9zc2libHkgYSBtYXNrIG9wZXJhdGlvbiB0byAicHJpbWUiIHRo ZSBsb29wLiAgSW5zaWRlCisJICAgdGhlIGxvb3AsIHRoZXJlIGlzIGEgbG9h ZCBvcCBhbmQgYSByZWFsaWdubWVudCBvcC4gICovCisJb3V0ZXJfY29zdCA9 IDIgKiBUQVJHX1ZFQ19TVE1UX0NPU1Q7CisJaWYgKHRhcmdldG0udmVjdG9y aXplLmJ1aWx0aW5fbWFza19mb3JfbG9hZCkKKwkgIG91dGVyX2Nvc3QgKz0g VEFSR19WRUNfU1RNVF9DT1NUOworCVNUTVRfVklORk9fT1VUU0lERV9PRl9M T09QX0NPU1QgKHN0bXRfaW5mbykgPSBvdXRlcl9jb3N0OworCQorCWlubmVy X2Nvc3QgKz0gKDIqbmNvcGllcykgKiBUQVJHX1ZFQ19MT0FEX0NPU1Q7CisJ YnJlYWs7CisgICAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgZ2NjX3Vu cmVhY2hhYmxlICgpOworICAgIH0KKworICBTVE1UX1ZJTkZPX0lOU0lERV9P Rl9MT09QX0NPU1QgKHN0bXRfaW5mbykgPSBpbm5lcl9jb3N0OworfQorCiAv KiBGdW5jdGlvbiB2ZWN0X2dldF9uZXdfdmVjdF92YXIuCiAKICAgIFJldHVy bnMgYSBuYW1lIGZvciBhIG5ldyB2YXJpYWJsZS4gVGhlIGN1cnJlbnQgbmFt aW5nIHNjaGVtZSBhcHBlbmRzIHRoZSAKQEAgLTE2OTUsNiArMjAzOCw3IEBA CiAgIGlmICghdmVjX3N0bXQpIC8qIHRyYW5zZm9ybWF0aW9uIG5vdCByZXF1 aXJlZC4gICovCiAgICAgewogICAgICAgU1RNVF9WSU5GT19UWVBFIChzdG10 X2luZm8pID0gcmVkdWNfdmVjX2luZm9fdHlwZTsKKyAgICAgIHZlY3RfbW9k ZWxfcmVkdWN0aW9uX2Nvc3QgKHN0bXRfaW5mbywgZXBpbG9nX3JlZHVjX2Nv ZGUsIG5jb3BpZXMpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA IC0xODg5LDkgKzIyMzMsMTMgQEAKIAogICBnY2NfYXNzZXJ0IChaRVJPX1NT QV9PUEVSQU5EUyAoc3RtdCwgU1NBX09QX0FMTF9WSVJUVUFMUykpOwogCisg IG5jb3BpZXMgPSAoTE9PUF9WSU5GT19WRUNUX0ZBQ1RPUiAobG9vcF92aW5m bykKKwkgICAgIC8gVFlQRV9WRUNUT1JfU1VCUEFSVFMgKHZlY3R5cGVfb3V0 KSk7CisKICAgaWYgKCF2ZWNfc3RtdCkgLyogdHJhbnNmb3JtYXRpb24gbm90 IHJlcXVpcmVkLiAgKi8KICAgICB7CiAgICAgICBTVE1UX1ZJTkZPX1RZUEUg KHN0bXRfaW5mbykgPSBjYWxsX3ZlY19pbmZvX3R5cGU7CisgICAgICB2ZWN0 X21vZGVsX3NpbXBsZV9jb3N0IChzdG10X2luZm8sIG5jb3BpZXMpOwogICAg ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xOTAwLDggKzIyNDgsNiBA QAogICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRBSUxT KSkKICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICJ0cmFuc2Zvcm0gb3BlcmF0 aW9uLiIpOwogCi0gIG5jb3BpZXMgPSAoTE9PUF9WSU5GT19WRUNUX0ZBQ1RP UiAobG9vcF92aW5mbykKLQkgICAgIC8gVFlQRV9WRUNUT1JfU1VCUEFSVFMg KHZlY3R5cGVfb3V0KSk7CiAgIGdjY19hc3NlcnQgKG5jb3BpZXMgPj0gMSk7 CiAKICAgLyogSGFuZGxlIGRlZi4gICovCkBAIC0yMTU4LDYgKzI1MDQsNyBA QAogICBpZiAoIXZlY19zdG10KSAvKiB0cmFuc2Zvcm1hdGlvbiBub3QgcmVx dWlyZWQuICAqLwogICAgIHsKICAgICAgIFNUTVRfVklORk9fVFlQRSAoc3Rt dF9pbmZvKSA9IGFzc2lnbm1lbnRfdmVjX2luZm9fdHlwZTsKKyAgICAgIHZl Y3RfbW9kZWxfc2ltcGxlX2Nvc3QgKHN0bXRfaW5mbywgbmNvcGllcyk7CiAg ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIzNTcsNiArMjcwNCw3 IEBACiAgIGlmICghdmVjX3N0bXQpIC8qIHRyYW5zZm9ybWF0aW9uIG5vdCBy ZXF1aXJlZC4gICovCiAgICAgewogICAgICAgU1RNVF9WSU5GT19UWVBFIChz dG10X2luZm8pID0gb3BfdmVjX2luZm9fdHlwZTsKKyAgICAgIHZlY3RfbW9k ZWxfc2ltcGxlX2Nvc3QgKHN0bXRfaW5mbywgbmNvcGllcyk7CiAgICAgICBy ZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI1ODEsNiArMjkyOSw3IEBACiAg IGlmICghdmVjX3N0bXQpIC8qIHRyYW5zZm9ybWF0aW9uIG5vdCByZXF1aXJl ZC4gICovCiAgICAgewogICAgICAgU1RNVF9WSU5GT19UWVBFIChzdG10X2lu Zm8pID0gdHlwZV9kZW1vdGlvbl92ZWNfaW5mb190eXBlOworICAgICAgdmVj dF9tb2RlbF9zaW1wbGVfY29zdCAoc3RtdF9pbmZvLCBuY29waWVzKTsKICAg ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCkBAIC0yNzk1LDYgKzMxNDQsNyBAQAogICBpZiAo IXZlY19zdG10KSAvKiB0cmFuc2Zvcm1hdGlvbiBub3QgcmVxdWlyZWQuICAq LwogICAgIHsKICAgICAgIFNUTVRfVklORk9fVFlQRSAoc3RtdF9pbmZvKSA9 IHR5cGVfcHJvbW90aW9uX3ZlY19pbmZvX3R5cGU7CisgICAgICB2ZWN0X21v ZGVsX3NpbXBsZV9jb3N0IChzdG10X2luZm8sIDIqbmNvcGllcyk7CiAgICAg ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTMxMDIsMTQgKzM0NTIsMTIg QEAKICAgaWYgKCF2ZWNfc3RtdCkgLyogdHJhbnNmb3JtYXRpb24gbm90IHJl cXVpcmVkLiAgKi8KICAgICB7CiAgICAgICBTVE1UX1ZJTkZPX1RZUEUgKHN0 bXRfaW5mbykgPSBzdG9yZV92ZWNfaW5mb190eXBlOworICAgICAgdmVjdF9t b2RlbF9zdG9yZV9jb3N0IChzdG10X2luZm8sIG5jb3BpZXMpOwogICAgICAg cmV0dXJuIHRydWU7CiAgICAgfQogCiAgIC8qKiBUcmFuc2Zvcm0uICAqKi8K IAotICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRBSUxT KSkKLSAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICJ0cmFuc2Zvcm0gc3RvcmUu IG5jb3BpZXMgPSAlZCIsbmNvcGllcyk7Ci0KICAgaWYgKHN0cmlkZWRfc3Rv cmUpCiAgICAgewogICAgICAgZmlyc3Rfc3RtdCA9IERSX0dST1VQX0ZJUlNU X0RSIChzdG10X2luZm8pOwpAQCAtMzEzNCw2ICszNDgyLDEwIEBACiAgICAg ICBncm91cF9zaXplID0gMTsKICAgICB9CiAgIAorCisgIGlmICh2ZWN0X3By aW50X2R1bXBfaW5mbyAoUkVQT1JUX0RFVEFJTFMpKQorICAgIGZwcmludGYg KHZlY3RfZHVtcCwgInRyYW5zZm9ybSBzdG9yZS4gbmNvcGllcyA9ICVkIixu Y29waWVzKTsKKwogICBkcl9jaGFpbiA9IFZFQ19hbGxvYyAodHJlZSwgaGVh cCwgZ3JvdXBfc2l6ZSk7CiAgIG9wcm5kcyA9IFZFQ19hbGxvYyAodHJlZSwg aGVhcCwgZ3JvdXBfc2l6ZSk7CiAKQEAgLTM3NjQsMTQgKzQxMTYsMTQgQEAK ICAgaWYgKCF2ZWNfc3RtdCkgLyogdHJhbnNmb3JtYXRpb24gbm90IHJlcXVp cmVkLiAgKi8KICAgICB7CiAgICAgICBTVE1UX1ZJTkZPX1RZUEUgKHN0bXRf aW5mbykgPSBsb2FkX3ZlY19pbmZvX3R5cGU7CisgICAgICB2ZWN0X21vZGVs X2xvYWRfY29zdCAoc3RtdF9pbmZvLCBuY29waWVzKTsKICAgICAgIHJldHVy biB0cnVlOwogICAgIH0KIAotICAvKiogVHJhbnNmb3JtLiAgKiovCi0KICAg aWYgKHZlY3RfcHJpbnRfZHVtcF9pbmZvIChSRVBPUlRfREVUQUlMUykpCiAg ICAgZnByaW50ZiAodmVjdF9kdW1wLCAidHJhbnNmb3JtIGxvYWQuIik7CiAK KyAgLyoqIFRyYW5zZm9ybS4gICoqLwogICBpZiAoc3RyaWRlZF9sb2FkKQog ICAgIHsKICAgICAgIGZpcnN0X3N0bXQgPSBEUl9HUk9VUF9GSVJTVF9EUiAo c3RtdF9pbmZvKTsKQEAgLTM3OTMsNiArNDE0NSw3IEBACiAgICAgfQogCiAg IGFsaWdubWVudF9zdXBwb3J0X2NoZW1lID0gdmVjdF9zdXBwb3J0YWJsZV9k cl9hbGlnbm1lbnQgKGZpcnN0X2RyKTsKKwogICBnY2NfYXNzZXJ0IChhbGln bm1lbnRfc3VwcG9ydF9jaGVtZSk7CiAKIAo= ------_=_NextPart_001_01C777BA.768D978A--