From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28251 invoked by alias); 25 Jan 2012 01:25:05 -0000 Received: (qmail 28151 invoked by uid 22791); 25 Jan 2012 01:25:01 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_LOW,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-yx0-f169.google.com (HELO mail-yx0-f169.google.com) (209.85.213.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 25 Jan 2012 01:24:47 +0000 Received: by yenm10 with SMTP id m10so2372956yen.0 for ; Tue, 24 Jan 2012 17:24:46 -0800 (PST) Received: by 10.236.79.37 with SMTP id h25mr5822849yhe.76.1327454686460; Tue, 24 Jan 2012 17:24:46 -0800 (PST) MIME-Version: 1.0 Received: by 10.236.79.37 with SMTP id h25mr5822841yhe.76.1327454686374; Tue, 24 Jan 2012 17:24:46 -0800 (PST) Received: by 10.100.234.30 with HTTP; Tue, 24 Jan 2012 17:24:46 -0800 (PST) Date: Wed, 25 Jan 2012 01:25:00 -0000 Message-ID: Subject: [gold patch] Add inlined fast path for LEB128 routines From: Cary Coutant To: Ian Lance Taylor , Binutils X-System-Of-Record: true X-Gm-Message-State: ALoCoQlTkMSDaxnFGIRdAiYee8B4JRm19RfbEfHT4IGbiz1mIg7YO4pjxo/n02mjV2hJB3aSZaG6KD4GpJpE+A6R/CyJWjqh8ReBi7FXywm8euktr15e8be1wd9J5YfIBN3UTHrCcgXPCWHAViX50BJVGL9k5J6w0Q== Content-Type: multipart/mixed; boundary=20cf300fac83096a5904b75021ff X-IsSubscribed: yes Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2012-01/txt/msg00241.txt.bz2 --20cf300fac83096a5904b75021ff Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1213 This patch adds an inlined fast path for the common case of a single-byte LEB128 number. This provides significant speed-ups for DWARF processing (mostly for the as-yet-unsubmitted changes to generate the .gdb-index section). In my testing, read_unsigned_LEB_128() accounted for more than 5% of the link time when generating a gdb index; with this change, the LEB128 routines are negligible, resulting in a 5% improvement. This should also improve line number lookup and ODR detection. I've also added new unit tests for the LEB128 readers. Tested on x86_64. OK? -cary 2012-01-24 Cary Coutant * int_encoding.cc (read_unsigned_LEB_128): Replaced with inline definition and ... (read_unsigned_LEB_128_x): ... this new function. (read_signed_LEB_128): Replaced with inline definition and ... (read_signed_LEB_128_x): ... this new function. * int_encoding.h (read_unsigned_LEB_128_x): New function. (read_unsigned_LEB_128): Add inline definition. (read_signed_LEB_128_x): New function. (read_signed_LEB_128): Add inline definition. * testsuite/Makefile.am (leb128_unittest): New unit test. * testsuite/Makefile.in: Regenerate. * testsuite/leb128_unittest.cc: New unit test. --20cf300fac83096a5904b75021ff Content-Type: text/plain; charset=US-ASCII; name="gold-fast-leb128-patch.txt" Content-Disposition: attachment; filename="gold-fast-leb128-patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gxto8dr40 Content-length: 18000 MjAxMi0wMS0yNCAgQ2FyeSBDb3V0YW50ICA8Y2NvdXRhbnRAZ29vZ2xlLmNv bT4KCgkqIGludF9lbmNvZGluZy5jYyAocmVhZF91bnNpZ25lZF9MRUJfMTI4 KTogUmVwbGFjZWQgd2l0aCBpbmxpbmUKCWRlZmluaXRpb24gYW5kIC4uLgoJ KHJlYWRfdW5zaWduZWRfTEVCXzEyOF94KTogLi4uIHRoaXMgbmV3IGZ1bmN0 aW9uLgoJKHJlYWRfc2lnbmVkX0xFQl8xMjgpOiBSZXBsYWNlZCB3aXRoIGlu bGluZSBkZWZpbml0aW9uIGFuZCAuLi4KCShyZWFkX3NpZ25lZF9MRUJfMTI4 X3gpOiAuLi4gdGhpcyBuZXcgZnVuY3Rpb24uCgkqIGludF9lbmNvZGluZy5o ICAocmVhZF91bnNpZ25lZF9MRUJfMTI4X3gpOiBOZXcgZnVuY3Rpb24uCgko cmVhZF91bnNpZ25lZF9MRUJfMTI4KTogQWRkIGlubGluZSBkZWZpbml0aW9u LgoJKHJlYWRfc2lnbmVkX0xFQl8xMjhfeCk6IE5ldyBmdW5jdGlvbi4KCShy ZWFkX3NpZ25lZF9MRUJfMTI4KTogQWRkIGlubGluZSBkZWZpbml0aW9uLgoJ KiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0gKGxlYjEyOF91bml0dGVzdCk6IE5l dyB1bml0IHRlc3QuCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5l cmF0ZS4KCSogdGVzdHN1aXRlL2xlYjEyOF91bml0dGVzdC5jYzogTmV3IHVu aXQgdGVzdC4KCgpjb21taXQgM2ZkN2JkMDBjZDhmM2JlMjkzNzdiMDU5ZDdh YzdlN2U0Y2JlNjAxZQpBdXRob3I6IENhcnkgQ291dGFudCA8Y2NvdXRhbnRA Z29vZ2xlLmNvbT4KRGF0ZTogICBUdWUgSmFuIDI0IDE3OjA5OjA5IDIwMTIg LTA4MDAKCiAgICBBZGQgaW5saW5lZCBmYXN0IHBhdGggZm9yIExFQjEyOCBy b3V0aW5lcy4KCmRpZmYgLS1naXQgYS9nb2xkL2ludF9lbmNvZGluZy5jYyBi L2dvbGQvaW50X2VuY29kaW5nLmNjCmluZGV4IDZkNjM1YWMuLmEwNzE1YmMg MTAwNjQ0Ci0tLSBhL2dvbGQvaW50X2VuY29kaW5nLmNjCisrKyBiL2dvbGQv aW50X2VuY29kaW5nLmNjCkBAIC0zMiwxNSArMzIsMTYgQEAgbmFtZXNwYWNl IGdvbGQgewogCiAvLyBSZWFkIGFuIHVuc2lnbmVkIExFQjEyOCBudW1iZXIu ICBFYWNoIGJ5dGUgY29udGFpbnMgNyBiaXRzIG9mCiAvLyBpbmZvcm1hdGlv biwgcGx1cyBvbmUgYml0IHNheWluZyB3aGV0aGVyIHRoZSBudW1iZXIgY29u dGludWVzIG9yCi0vLyBub3QuCisvLyBub3QuICBCWVRFIGNvbnRhaW5zIHRo ZSBmaXJzdCBieXRlIG9mIHRoZSBudW1iZXIsIGFuZCBpcyBndWFyYW50ZWVk CisvLyB0byBoYXZlIHRoZSBjb250aW51YXRpb24gYml0IHNldC4KIAogdWlu dDY0X3QKLXJlYWRfdW5zaWduZWRfTEVCXzEyOChjb25zdCB1bnNpZ25lZCBj aGFyKiBidWZmZXIsIHNpemVfdCogbGVuKQorcmVhZF91bnNpZ25lZF9MRUJf MTI4X3goY29uc3QgdW5zaWduZWQgY2hhciogYnVmZmVyLCBzaXplX3QqIGxl biwKKwkJCXVuc2lnbmVkIGNoYXIgYnl0ZSkKIHsKLSAgdWludDY0X3QgcmVz dWx0ID0gMDsKLSAgc2l6ZV90IG51bV9yZWFkID0gMDsKLSAgdW5zaWduZWQg aW50IHNoaWZ0ID0gMDsKLSAgdW5zaWduZWQgY2hhciBieXRlOworICB1aW50 NjRfdCByZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZSAmIDB4 N2YpOworICBzaXplX3QgbnVtX3JlYWQgPSAxOworICB1bnNpZ25lZCBpbnQg c2hpZnQgPSA3OwogCiAgIGRvCiAgICAgewpAQCAtNjQsMTQgKzY1LDE2IEBA IHJlYWRfdW5zaWduZWRfTEVCXzEyOChjb25zdCB1bnNpZ25lZCBjaGFyKiBi dWZmZXIsIHNpemVfdCogbGVuKQogCiAvLyBSZWFkIGEgc2lnbmVkIExFQjEy OCBudW1iZXIuICBUaGVzZSBhcmUgbGlrZSByZWd1bGFyIExFQjEyOAogLy8g bnVtYmVycywgZXhjZXB0IHRoZSBsYXN0IGJ5dGUgbWF5IGhhdmUgYSBzaWdu IGJpdCBzZXQuCisvLyBCWVRFIGNvbnRhaW5zIHRoZSBmaXJzdCBieXRlIG9m IHRoZSBudW1iZXIsIGFuZCBpcyBndWFyYW50ZWVkCisvLyB0byBoYXZlIHRo ZSBjb250aW51YXRpb24gYml0IHNldC4KIAogaW50NjRfdAotcmVhZF9zaWdu ZWRfTEVCXzEyOChjb25zdCB1bnNpZ25lZCBjaGFyKiBidWZmZXIsIHNpemVf dCogbGVuKQorcmVhZF9zaWduZWRfTEVCXzEyOF94KGNvbnN0IHVuc2lnbmVk IGNoYXIqIGJ1ZmZlciwgc2l6ZV90KiBsZW4sCisJCSAgICAgIHVuc2lnbmVk IGNoYXIgYnl0ZSkKIHsKLSAgaW50NjRfdCByZXN1bHQgPSAwOwotICBpbnQg c2hpZnQgPSAwOwotICBzaXplX3QgbnVtX3JlYWQgPSAwOwotICB1bnNpZ25l ZCBjaGFyIGJ5dGU7CisgIGludDY0X3QgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8 dWludDY0X3Q+KGJ5dGUgJiAweDdmKTsKKyAgaW50IHNoaWZ0ID0gNzsKKyAg c2l6ZV90IG51bV9yZWFkID0gMTsKIAogICBkbwogICAgIHsKZGlmZiAtLWdp dCBhL2dvbGQvaW50X2VuY29kaW5nLmggYi9nb2xkL2ludF9lbmNvZGluZy5o CmluZGV4IDY0ODVhOTMuLmM0ZGVlMzggMTAwNjQ0Ci0tLSBhL2dvbGQvaW50 X2VuY29kaW5nLmgKKysrIGIvZ29sZC9pbnRfZW5jb2RpbmcuaApAQCAtMzgs MTYgKzM4LDQ4IEBAIG5hbWVzcGFjZSBnb2xkCiAvLwogCiAvLyBSZWFkIGEg VUxFQiAxMjggZW5jb2RlZCBpbnRlZ2VyIGZyb20gQlVGRkVSLiAgUmV0dXJu IHRoZSBsZW5ndGggb2YgdGhlCi0vLyBlbmNvZGVkIGludGVnZXIgYXQgdGhl IGxvY2F0aW9uIFBMRU4uIAorLy8gZW5jb2RlZCBpbnRlZ2VyIGF0IHRoZSBs b2NhdGlvbiBQTEVOLiAgVGhlIGNvbW1vbiBjYXNlIG9mIGEgc2luZ2xlLWJ5 dGUKKy8vIHZhbHVlIGlzIGhhbmRsZWQgaW5saW5lLCBhbmQgbXVsdGktYnl0 ZSB2YWx1ZXMgYXJlIHByb2Nlc3NlZCBieSB0aGUgX3gKKy8vIHJvdXRpbmUs IHdoZXJlIEJZVEUgaXMgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHZhbHVlLgog CiB1aW50NjRfdAotcmVhZF91bnNpZ25lZF9MRUJfMTI4KGNvbnN0IHVuc2ln bmVkIGNoYXIqIGJ1ZmZlciwgc2l6ZV90KiBwbGVuKTsKK3JlYWRfdW5zaWdu ZWRfTEVCXzEyOF94KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgc2l6 ZV90KiBwbGVuLAorCQkJdW5zaWduZWQgY2hhciBieXRlKTsKKworaW5saW5l IHVpbnQ2NF90CityZWFkX3Vuc2lnbmVkX0xFQl8xMjgoY29uc3QgdW5zaWdu ZWQgY2hhciogYnVmZmVyLCBzaXplX3QqIHBsZW4pCit7CisgIHVuc2lnbmVk IGNoYXIgYnl0ZSA9ICpidWZmZXIrKzsKKworICBpZiAoYnl0ZSAmIDB4ODAp CisgICAgcmV0dXJuIHJlYWRfdW5zaWduZWRfTEVCXzEyOF94KGJ1ZmZlciwg cGxlbiwgYnl0ZSk7CisKKyAgKnBsZW4gPSAxOworICByZXR1cm4gc3RhdGlj X2Nhc3Q8dWludDY0X3Q+KGJ5dGUpOworfQogCiAvLyBSZWFkIGFuIFNMRUIg MTI4IGVuY29kZWQgaW50ZWdlciBmcm9tIEJVRkZFUi4gIFJldHVybiB0aGUg bGVuZ3RoIG9mIHRoZQotLy8gZW5jb2RlZCBpbnRlZ2VyIGF0IHRoZSBsb2Nh dGlvbiBQTEVOLiAKKy8vIGVuY29kZWQgaW50ZWdlciBhdCB0aGUgbG9jYXRp b24gUExFTi4gIFRoZSBjb21tb24gY2FzZSBvZiBhIHNpbmdsZS1ieXRlCisv LyB2YWx1ZSBpcyBoYW5kbGVkIGlubGluZSwgYW5kIG11bHRpLWJ5dGUgdmFs dWVzIGFyZSBwcm9jZXNzZWQgYnkgdGhlIF94CisvLyByb3V0aW5lLCB3aGVy ZSBCWVRFIGlzIHRoZSBmaXJzdCBieXRlIG9mIHRoZSB2YWx1ZS4KIAogaW50 NjRfdAotcmVhZF9zaWduZWRfTEVCXzEyOChjb25zdCB1bnNpZ25lZCBjaGFy KiBidWZmZXIsIHNpemVfdCogcGxlbik7CityZWFkX3NpZ25lZF9MRUJfMTI4 X3goY29uc3QgdW5zaWduZWQgY2hhciogYnVmZmVyLCBzaXplX3QqIHBsZW4s CisJCSAgICAgIHVuc2lnbmVkIGNoYXIgYnl0ZSk7CisKK2lubGluZSBpbnQ2 NF90CityZWFkX3NpZ25lZF9MRUJfMTI4KGNvbnN0IHVuc2lnbmVkIGNoYXIq IGJ1ZmZlciwgc2l6ZV90KiBwbGVuKQoreworICB1bnNpZ25lZCBjaGFyIGJ5 dGUgPSAqYnVmZmVyKys7CisKKyAgaWYgKGJ5dGUgJiAweDgwKQorICAgIHJl dHVybiByZWFkX3NpZ25lZF9MRUJfMTI4X3goYnVmZmVyLCBwbGVuLCBieXRl KTsKKworICAqcGxlbiA9IDE7CisgIGlmIChieXRlICYgMHg0MCkKKyAgICBy ZXR1cm4gLShzdGF0aWNfY2FzdDxpbnQ2NF90PigxKSA8PCA3KSB8IHN0YXRp Y19jYXN0PGludDY0X3Q+KGJ5dGUpOworICByZXR1cm4gc3RhdGljX2Nhc3Q8 aW50NjRfdD4oYnl0ZSk7Cit9CiAKIC8vIFdyaXRlIGEgVUxFQiAxMjggZW5j b2RlZCBWQUxVRSB0byBCVUZGRVIuCiAKZGlmZiAtLWdpdCBhL2dvbGQvdGVz dHN1aXRlL01ha2VmaWxlLmFtIGIvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUu YW0KaW5kZXggNzk0ZGFjOC4uYzcyMDlmMyAxMDA2NDQKLS0tIGEvZ29sZC90 ZXN0c3VpdGUvTWFrZWZpbGUuYW0KKysrIGIvZ29sZC90ZXN0c3VpdGUvTWFr ZWZpbGUuYW0KQEAgLTk0LDYgKzk0LDkgQEAgb2JqZWN0X3VuaXR0ZXN0X1NP VVJDRVMgPSBvYmplY3RfdW5pdHRlc3QuY2MKIGNoZWNrX1BST0dSQU1TICs9 IGJpbmFyeV91bml0dGVzdAogYmluYXJ5X3VuaXR0ZXN0X1NPVVJDRVMgPSBi aW5hcnlfdW5pdHRlc3QuY2MKIAorY2hlY2tfUFJPR1JBTVMgKz0gbGViMTI4 X3VuaXR0ZXN0CitsZWIxMjhfdW5pdHRlc3RfU09VUkNFUyA9IGxlYjEyOF91 bml0dGVzdC5jYworCiBlbmRpZiBOQVRJVkVfT1JfQ1JPU1NfTElOS0VSCiAK ICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9nb2xk L3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbiBiL2dvbGQvdGVzdHN1aXRlL01ha2Vm aWxlLmluCmluZGV4IGFmNjJjOGQuLmM1YzFhZTYgMTAwNjQ0Ci0tLSBhL2dv bGQvdGVzdHN1aXRlL01ha2VmaWxlLmluCisrKyBiL2dvbGQvdGVzdHN1aXRl L01ha2VmaWxlLmluCkBAIC01NCw3ICs1NCw3IEBAIGNoZWNrX1BST0dSQU1T ID0gJChhbV9fRVhFRVhUXzEpICQoYW1fX0VYRUVYVF8yKSAkKGFtX19FWEVF WFRfMykgXAogCSQoYW1fX0VYRUVYVF8zNCkgJChhbV9fRVhFRVhUXzM1KSAk KGFtX19FWEVFWFRfMzYpIFwKIAkkKGFtX19FWEVFWFRfMzcpICQoYW1fX0VY RUVYVF8zOCkKIEBOQVRJVkVfT1JfQ1JPU1NfTElOS0VSX1RSVUVAYW1fX2Fw cGVuZF8xID0gb2JqZWN0X3VuaXR0ZXN0IFwKLUBOQVRJVkVfT1JfQ1JPU1Nf TElOS0VSX1RSVUVACWJpbmFyeV91bml0dGVzdAorQE5BVElWRV9PUl9DUk9T U19MSU5LRVJfVFJVRUAJYmluYXJ5X3VuaXR0ZXN0IGxlYjEyOF91bml0dGVz dAogCiAjIFRlc3QgLS1kZXRlY3Qtb2RyLXZpb2xhdGlvbnMKIApAQCAtNjQ2 LDcgKzY0Niw4IEBAIGFtX2xpYmdvbGR0ZXN0X2FfT0JKRUNUUyA9IHRlc3Qu JChPQkpFWFQpIHRlc3RtYWluLiQoT0JKRVhUKSBcCiAJdGVzdGZpbGUuJChP QkpFWFQpCiBsaWJnb2xkdGVzdF9hX09CSkVDVFMgPSAkKGFtX2xpYmdvbGR0 ZXN0X2FfT0JKRUNUUykKIEBOQVRJVkVfT1JfQ1JPU1NfTElOS0VSX1RSVUVA YW1fX0VYRUVYVF8xID0gb2JqZWN0X3VuaXR0ZXN0JChFWEVFWFQpIFwKLUBO QVRJVkVfT1JfQ1JPU1NfTElOS0VSX1RSVUVACWJpbmFyeV91bml0dGVzdCQo RVhFRVhUKQorQE5BVElWRV9PUl9DUk9TU19MSU5LRVJfVFJVRUAJYmluYXJ5 X3VuaXR0ZXN0JChFWEVFWFQpIFwKK0BOQVRJVkVfT1JfQ1JPU1NfTElOS0VS X1RSVUVACWxlYjEyOF91bml0dGVzdCQoRVhFRVhUKQogQEdDQ19UUlVFQEBO QVRJVkVfTElOS0VSX1RSVUVAYW1fX0VYRUVYVF8yID0gaWNmX3ZpcnR1YWxf ZnVuY3Rpb25fZm9sZGluZ190ZXN0JChFWEVFWFQpIFwKIEBHQ0NfVFJVRUBA TkFUSVZFX0xJTktFUl9UUlVFQAliYXNpY190ZXN0JChFWEVFWFQpIFwKIEBH Q0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQAliYXNpY19waWNfdGVzdCQo RVhFRVhUKQpAQCAtMTIyMSw2ICsxMjIyLDEzIEBAIGp1c3RzeW1zX2V4ZWNf TElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCiBsYXJn ZV9PQkpFQ1RTID0gJChhbV9sYXJnZV9PQkpFQ1RTKQogbGFyZ2VfTElOSyA9 ICQoQ0NMRCkgJChsYXJnZV9DRkxBR1MpICQoQ0ZMQUdTKSAkKGxhcmdlX0xE RkxBR1MpIFwKIAkkKExERkxBR1MpIC1vICRACitATkFUSVZFX09SX0NST1NT X0xJTktFUl9UUlVFQGFtX2xlYjEyOF91bml0dGVzdF9PQkpFQ1RTID0gIFwK K0BOQVRJVkVfT1JfQ1JPU1NfTElOS0VSX1RSVUVACWxlYjEyOF91bml0dGVz dC4kKE9CSkVYVCkKK2xlYjEyOF91bml0dGVzdF9PQkpFQ1RTID0gJChhbV9s ZWIxMjhfdW5pdHRlc3RfT0JKRUNUUykKK2xlYjEyOF91bml0dGVzdF9MREFE RCA9ICQoTERBREQpCitsZWIxMjhfdW5pdHRlc3RfREVQRU5ERU5DSUVTID0g bGliZ29sZHRlc3QuYSAuLi9saWJnb2xkLmEgXAorCS4uLy4uL2xpYmliZXJ0 eS9saWJpYmVydHkuYSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorCSQoYW1f X0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKIGxvY2Fs X2xhYmVsc190ZXN0X1NPVVJDRVMgPSBsb2NhbF9sYWJlbHNfdGVzdC5jCiBs b2NhbF9sYWJlbHNfdGVzdF9PQkpFQ1RTID0gbG9jYWxfbGFiZWxzX3Rlc3Qu JChPQkpFWFQpCiBsb2NhbF9sYWJlbHNfdGVzdF9MREFERCA9ICQoTERBREQp CkBAIC0xNzAxLDcgKzE3MDksOCBAQCBTT1VSQ0VTID0gJChsaWJnb2xkdGVz dF9hX1NPVVJDRVMpIGJhc2ljX3BpY190ZXN0LmMgYmFzaWNfcGllX3Rlc3Qu YyBcCiAJaW5jcmVtZW50YWxfdGVzdF8zLmMgaW5jcmVtZW50YWxfdGVzdF80 LmMgaW5jcmVtZW50YWxfdGVzdF81LmMgXAogCWluY3JlbWVudGFsX3Rlc3Rf Ni5jICQoaW5pdHByaTFfU09VUkNFUykgJChpbml0cHJpMl9TT1VSQ0VTKSBc CiAJJChpbml0cHJpM2FfU09VUkNFUykgJChpbml0cHJpM2JfU09VUkNFUykg JChqdXN0c3ltc19TT1VSQ0VTKSBcCi0JJChqdXN0c3ltc19leGVjX1NPVVJD RVMpICQobGFyZ2VfU09VUkNFUykgbG9jYWxfbGFiZWxzX3Rlc3QuYyBcCisJ JChqdXN0c3ltc19leGVjX1NPVVJDRVMpICQobGFyZ2VfU09VUkNFUykgXAor CSQobGViMTI4X3VuaXR0ZXN0X1NPVVJDRVMpIGxvY2FsX2xhYmVsc190ZXN0 LmMgXAogCW1hbnlfc2VjdGlvbnNfcl90ZXN0LmMgJChtYW55X3NlY3Rpb25z X3Rlc3RfU09VUkNFUykgXAogCSQob2JqZWN0X3VuaXR0ZXN0X1NPVVJDRVMp IHBlcm1pc3Npb25fdGVzdC5jIHBsdWdpbl90ZXN0XzEuYyBcCiAJcGx1Z2lu X3Rlc3RfMi5jIHBsdWdpbl90ZXN0XzMuYyBwbHVnaW5fdGVzdF80LmMgXApA QCAtMjAxNCw2ICsyMDIzLDcgQEAgTERBREQgPSBsaWJnb2xkdGVzdC5hIC4u L2xpYmdvbGQuYSAuLi8uLi9saWJpYmVydHkvbGliaWJlcnR5LmEgJChMSUJJ TlRMKSBcCiAKIEBOQVRJVkVfT1JfQ1JPU1NfTElOS0VSX1RSVUVAb2JqZWN0 X3VuaXR0ZXN0X1NPVVJDRVMgPSBvYmplY3RfdW5pdHRlc3QuY2MKIEBOQVRJ VkVfT1JfQ1JPU1NfTElOS0VSX1RSVUVAYmluYXJ5X3VuaXR0ZXN0X1NPVVJD RVMgPSBiaW5hcnlfdW5pdHRlc3QuY2MKK0BOQVRJVkVfT1JfQ1JPU1NfTElO S0VSX1RSVUVAbGViMTI4X3VuaXR0ZXN0X1NPVVJDRVMgPSBsZWIxMjhfdW5p dHRlc3QuY2MKIEBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQGNvbnN0 cnVjdG9yX3Rlc3RfU09VUkNFUyA9IGNvbnN0cnVjdG9yX3Rlc3QuY2MKIEBH Q0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQGNvbnN0cnVjdG9yX3Rlc3Rf REVQRU5ERU5DSUVTID0gZ2NjdGVzdGRpci9sZAogQEdDQ19UUlVFQEBOQVRJ VkVfTElOS0VSX1RSVUVAY29uc3RydWN0b3JfdGVzdF9MREZMQUdTID0gLUJn Y2N0ZXN0ZGlyLwpAQCAtMjk0Miw2ICsyOTUyLDkgQEAganVzdHN5bXNfZXhl YyQoRVhFRVhUKTogJChqdXN0c3ltc19leGVjX09CSkVDVFMpICQoanVzdHN5 bXNfZXhlY19ERVBFTkRFTkNJRVMpCiBsYXJnZSQoRVhFRVhUKTogJChsYXJn ZV9PQkpFQ1RTKSAkKGxhcmdlX0RFUEVOREVOQ0lFUykgCiAJQHJtIC1mIGxh cmdlJChFWEVFWFQpCiAJJChsYXJnZV9MSU5LKSAkKGxhcmdlX09CSkVDVFMp ICQobGFyZ2VfTERBREQpICQoTElCUykKK2xlYjEyOF91bml0dGVzdCQoRVhF RVhUKTogJChsZWIxMjhfdW5pdHRlc3RfT0JKRUNUUykgJChsZWIxMjhfdW5p dHRlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGViMTI4X3VuaXR0ZXN0 JChFWEVFWFQpCisJJChDWFhMSU5LKSAkKGxlYjEyOF91bml0dGVzdF9PQkpF Q1RTKSAkKGxlYjEyOF91bml0dGVzdF9MREFERCkgJChMSUJTKQogQEdDQ19G QUxTRUBsb2NhbF9sYWJlbHNfdGVzdCQoRVhFRVhUKTogJChsb2NhbF9sYWJl bHNfdGVzdF9PQkpFQ1RTKSAkKGxvY2FsX2xhYmVsc190ZXN0X0RFUEVOREVO Q0lFUykgCiBAR0NDX0ZBTFNFQAlAcm0gLWYgbG9jYWxfbGFiZWxzX3Rlc3Qk KEVYRUVYVCkKIEBHQ0NfRkFMU0VACSQoTElOSykgJChsb2NhbF9sYWJlbHNf dGVzdF9PQkpFQ1RTKSAkKGxvY2FsX2xhYmVsc190ZXN0X0xEQUREKSAkKExJ QlMpCkBAIC0zMzIyLDYgKzMzMzUsNyBAQCBkaXN0Y2xlYW4tY29tcGlsZToK IEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQ RElSKS9qdXN0c3ltc18xLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBh bV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qdXN0c3ltc19l eGVjLlBvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAg QGFtX19xdW90ZUAuLyQoREVQRElSKS9sYXJnZS1sYXJnZS5Qb0BhbV9fcXVv dGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8k KERFUERJUikvbGViMTI4X3VuaXR0ZXN0LlBvQGFtX19xdW90ZUAKIEBBTURF UF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9s b2NhbF9sYWJlbHNfdGVzdC5Qb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBA YW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWFueV9zZWN0 aW9uc19yX3Rlc3QuUG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19p bmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21hbnlfc2VjdGlvbnNf dGVzdC5Qb0BhbV9fcXVvdGVACkBAIC0zNzQ5LDYgKzM3NjMsOCBAQCBvYmpl Y3RfdW5pdHRlc3QubG9nOiBvYmplY3RfdW5pdHRlc3QkKEVYRUVYVCkKIAlA cD0nb2JqZWN0X3VuaXR0ZXN0JChFWEVFWFQpJzsgJChhbV9fY2hlY2tfcHJl KSAkKExPR19DT01QSUxFKSAiJCR0c3QiICQoYW1fX2NoZWNrX3Bvc3QpCiBi aW5hcnlfdW5pdHRlc3QubG9nOiBiaW5hcnlfdW5pdHRlc3QkKEVYRUVYVCkK IAlAcD0nYmluYXJ5X3VuaXR0ZXN0JChFWEVFWFQpJzsgJChhbV9fY2hlY2tf cHJlKSAkKExPR19DT01QSUxFKSAiJCR0c3QiICQoYW1fX2NoZWNrX3Bvc3Qp CitsZWIxMjhfdW5pdHRlc3QubG9nOiBsZWIxMjhfdW5pdHRlc3QkKEVYRUVY VCkKKwlAcD0nbGViMTI4X3VuaXR0ZXN0JChFWEVFWFQpJzsgJChhbV9fY2hl Y2tfcHJlKSAkKExPR19DT01QSUxFKSAiJCR0c3QiICQoYW1fX2NoZWNrX3Bv c3QpCiBpY2ZfdmlydHVhbF9mdW5jdGlvbl9mb2xkaW5nX3Rlc3QubG9nOiBp Y2ZfdmlydHVhbF9mdW5jdGlvbl9mb2xkaW5nX3Rlc3QkKEVYRUVYVCkKIAlA cD0naWNmX3ZpcnR1YWxfZnVuY3Rpb25fZm9sZGluZ190ZXN0JChFWEVFWFQp JzsgJChhbV9fY2hlY2tfcHJlKSAkKExPR19DT01QSUxFKSAiJCR0c3QiICQo YW1fX2NoZWNrX3Bvc3QpCiBiYXNpY190ZXN0LmxvZzogYmFzaWNfdGVzdCQo RVhFRVhUKQpkaWZmIC0tZ2l0IGEvZ29sZC90ZXN0c3VpdGUvbGViMTI4X3Vu aXR0ZXN0LmNjIGIvZ29sZC90ZXN0c3VpdGUvbGViMTI4X3VuaXR0ZXN0LmNj Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzcwOTMK LS0tIC9kZXYvbnVsbAorKysgYi9nb2xkL3Rlc3RzdWl0ZS9sZWIxMjhfdW5p dHRlc3QuY2MKQEAgLTAsMCArMSw4OCBAQAorLy8gbGViX3VuaXR0ZXN0LmNj IC0tIHRlc3QgcmVhZF9zaWduZWRfTEVCXzEyOCBhbmQgcmVhZF91bnNpZ25l ZF9MRUJfMTI4IAorCisvLyBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKy8vIFdyaXR0ZW4gYnkgQ2FyeSBDb3V0YW50 IDxjY291dGFudEBnb29nbGUuY29tPi4KKworLy8gVGhpcyBmaWxlIGlzIHBh cnQgb2YgZ29sZC4KKworLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8v IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorLy8gKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKy8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9u LAorLy8gTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjaW5jbHVkZSAiZ29sZC5o IgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlICJpbnRf ZW5jb2RpbmcuaCIKKworI2luY2x1ZGUgInRlc3QuaCIKKworbmFtZXNwYWNl IGdvbGRfdGVzdHN1aXRlCit7CisKK3VzaW5nIG5hbWVzcGFjZSBnb2xkOwor Citib29sCitMZWIxMjhfdGVzdChUZXN0X3JlcG9ydCopCit7CisgIHNpemVf dCBsZW47CisKKyAgLy8gVW5zaWduZWQgdGVzdHMuCisgIHN0YXRpYyB1bnNp Z25lZCBjaGFyIHUxW10gPSB7IDAgfTsJCS8vIDAKKyAgc3RhdGljIHVuc2ln bmVkIGNoYXIgdTJbXSA9IHsgMSB9OwkJLy8gMQorICBzdGF0aWMgdW5zaWdu ZWQgY2hhciB1M1tdID0geyAxMjYgfTsJCS8vIDEyNgorICBzdGF0aWMgdW5z aWduZWQgY2hhciB1NFtdID0geyAxMjcgfTsJCS8vIDEyNworICBzdGF0aWMg dW5zaWduZWQgY2hhciB1NVtdID0geyAweDgwKzAsIDEgfTsJLy8gMTI4Cisg IHN0YXRpYyB1bnNpZ25lZCBjaGFyIHU2W10gPSB7IDB4ODArMSwgMSB9Owkv LyAxMjkKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgdTdbXSA9IHsgMHg4MCs1 NywgMTAwIH07CS8vIDEyODU3CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHU4 W10gPSB7IDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsCisJCQkJMHg4MCwgMHg4 MCwgMHg4MCwgMHg4MCwKKwkJCQkweDgwLCAxfTsJLy8gMVVMTCA8PCA2Mwor CisgIC8vIFNpZ25lZCB0ZXN0cy4KKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIg czFbXSA9IHsgMCB9OwkJLy8gMAorICBzdGF0aWMgdW5zaWduZWQgY2hhciBz MltdID0geyAxIH07CQkvLyAxCisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHMz W10gPSB7IDB4N2UgfTsJCS8vIC0yCisgIHN0YXRpYyB1bnNpZ25lZCBjaGFy IHM0W10gPSB7IDB4ODArMTI3LCAwIH07CS8vIDEyNworICBzdGF0aWMgdW5z aWduZWQgY2hhciBzNVtdID0geyAweDgwKzEsIDB4N2YgfTsJLy8gLTEyNwor ICBzdGF0aWMgdW5zaWduZWQgY2hhciBzNltdID0geyAweDgwKzAsIDEgfTsJ Ly8gMTI4CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHM3W10gPSB7IDB4ODAr MCwgMHg3ZiB9OwkvLyAtMTI4CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHM4 W10gPSB7IDB4ODArMSwgMSB9OwkvLyAxMjkKKyAgc3RhdGljIHVuc2lnbmVk IGNoYXIgczlbXSA9IHsgMHhmZiwgMHg3ZSB9OwkvLyAtMTI5CisKKyAgQ0hF Q0socmVhZF91bnNpZ25lZF9MRUJfMTI4KHUxLCAmbGVuKSA9PSAwICYmIGxl biA9PSBzaXplb2YodTEpKTsKKyAgQ0hFQ0socmVhZF91bnNpZ25lZF9MRUJf MTI4KHUyLCAmbGVuKSA9PSAxICYmIGxlbiA9PSBzaXplb2YodTIpKTsKKyAg Q0hFQ0socmVhZF91bnNpZ25lZF9MRUJfMTI4KHUzLCAmbGVuKSA9PSAxMjYg JiYgbGVuID09IHNpemVvZih1MykpOworICBDSEVDSyhyZWFkX3Vuc2lnbmVk X0xFQl8xMjgodTQsICZsZW4pID09IDEyNyAmJiBsZW4gPT0gc2l6ZW9mKHU0 KSk7CisgIENIRUNLKHJlYWRfdW5zaWduZWRfTEVCXzEyOCh1NSwgJmxlbikg PT0gMTI4ICYmIGxlbiA9PSBzaXplb2YodTUpKTsKKyAgQ0hFQ0socmVhZF91 bnNpZ25lZF9MRUJfMTI4KHU2LCAmbGVuKSA9PSAxMjkgJiYgbGVuID09IHNp emVvZih1NikpOworICBDSEVDSyhyZWFkX3Vuc2lnbmVkX0xFQl8xMjgodTcs ICZsZW4pID09IDEyODU3ICYmIGxlbiA9PSBzaXplb2YodTcpKTsKKyAgQ0hF Q0socmVhZF91bnNpZ25lZF9MRUJfMTI4KHU4LCAmbGVuKSA9PSAoMVVMTCA8 PCA2MykgJiYgbGVuID09IHNpemVvZih1OCkpOworCisgIENIRUNLKHJlYWRf c2lnbmVkX0xFQl8xMjgoczEsICZsZW4pID09IDAgJiYgbGVuID09IHNpemVv ZihzMSkpOworICBDSEVDSyhyZWFkX3NpZ25lZF9MRUJfMTI4KHMyLCAmbGVu KSA9PSAxICYmIGxlbiA9PSBzaXplb2YoczIpKTsKKyAgQ0hFQ0socmVhZF9z aWduZWRfTEVCXzEyOChzMywgJmxlbikgPT0gLTIgJiYgbGVuID09IHNpemVv ZihzMykpOworICBDSEVDSyhyZWFkX3NpZ25lZF9MRUJfMTI4KHM0LCAmbGVu KSA9PSAxMjcgJiYgbGVuID09IHNpemVvZihzNCkpOworICBDSEVDSyhyZWFk X3NpZ25lZF9MRUJfMTI4KHM1LCAmbGVuKSA9PSAtMTI3ICYmIGxlbiA9PSBz aXplb2YoczUpKTsKKyAgQ0hFQ0socmVhZF9zaWduZWRfTEVCXzEyOChzNiwg JmxlbikgPT0gMTI4ICYmIGxlbiA9PSBzaXplb2YoczYpKTsKKyAgQ0hFQ0so cmVhZF9zaWduZWRfTEVCXzEyOChzNywgJmxlbikgPT0gLTEyOCAmJiBsZW4g PT0gc2l6ZW9mKHM3KSk7CisgIENIRUNLKHJlYWRfc2lnbmVkX0xFQl8xMjgo czgsICZsZW4pID09IDEyOSAmJiBsZW4gPT0gc2l6ZW9mKHM4KSk7CisgIENI RUNLKHJlYWRfc2lnbmVkX0xFQl8xMjgoczksICZsZW4pID09IC0xMjkgJiYg bGVuID09IHNpemVvZihzOSkpOworCisgIHJldHVybiB0cnVlOworfQorCitS ZWdpc3Rlcl90ZXN0IGxlYjEyOF9yZWdpc3RlcigiTEVCMTI4IiwgTGViMTI4 X3Rlc3QpOworCit9IC8vIEVuZCBuYW1lc3BhY2UgZ29sZF90ZXN0c3VpdGUu Cg== --20cf300fac83096a5904b75021ff--