Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dcsYt-00026T-Aq for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Aug 2017 12:15:39 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1dcsYs-0001Jr-TX for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Aug 2017 12:15:38 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dcsYs-0001JI-41; Wed, 02 Aug 2017 12:15:38 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by magus.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dcsYn-0001DC-Ba; Wed, 02 Aug 2017 12:15:37 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id E2E9021C1AD5; Wed, 2 Aug 2017 15:15:32 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1501676132; bh=oloullpodn0qRjXWskHzzgVTzUrbRxARJ4yLwL2N2Uo=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=kjcJXMUTtmAFs3PhRrMnSqKvv8yAOIKHugo0A+yS9og1o3W/Wh6JB/JpHFL3ijNBS zKJxooLRwV9K8sGNTaDErMuAwgCQcA0ia/2Ac4j4EpayWKfup7HUaKXiQlU2KGE1zX 9ISHnt5YBUpj34hNITfUYFzNmCNwOwTQ8PdODz8U= Content-Type: multipart/mixed; boundary="=_06fc23f06ebdba4721e8f7ef83ca5f42" Date: Wed, 02 Aug 2017 15:15:32 +0300 From: Victor Drobny To: Aleksander Alekseev Cc: Pgsql Hackers , pgsql-hackers-owner@postgresql.org Subject: Re: Red-Black tree traversal tests Organization: Postgres Professional In-Reply-To: <2e864bd9888f41f7f6c9808ee2b8a5a0@postgrespro.ru> References: <20170801095446.GA22764@e733.localdomain> <20170801095835.GB22764@e733.localdomain> <2e864bd9888f41f7f6c9808ee2b8a5a0@postgrespro.ru> Message-ID: <419a79bae64398144716c38b85359539@postgrespro.ru> X-Sender: v.drobny@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org --=_06fc23f06ebdba4721e8f7ef83ca5f42 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed I forgot to attach the patch. Sorry. Here it is. -- ------ Victor Drobny Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_06fc23f06ebdba4721e8f7ef83ca5f42 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=rbtree_test.patch Content-Disposition: attachment; filename=rbtree_test.patch; size=20763 ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMv dGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IDNjZTk5MDQuLmI3ZWQwYWYg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTMsNiArMTMsNyBAQCBT VUJESVJTID0gXAogCQkgIHRlc3RfZXh0ZW5zaW9ucyBcCiAJCSAgdGVzdF9w YXJzZXIgXAogCQkgIHRlc3RfcGdfZHVtcCBcCisJCSAgdGVzdF9yYnRyZWUg XAogCQkgIHRlc3RfcmxzX2hvb2tzIFwKIAkJICB0ZXN0X3NobV9tcSBcCiAJ CSAgd29ya2VyX3NwaQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3JidHJlZS8uZ2l0aWdub3JlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X3JidHJlZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjVkY2IzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfcmJ0cmVlLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0 IEBACisjIEdlbmVyYXRlZCBzdWJkaXJlY3RvcmllcworL2xvZy8KKy9yZXN1 bHRzLworL3RtcF9jaGVjay8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9yYnRyZWUvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfcmJ0cmVlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjExYTEwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjEg QEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS9NYWtlZmlsZQor CitNT0RVTEVfYmlnID0gdGVzdF9yYnRyZWUKK09CSlMgPSB0ZXN0Lm8gJChX SU4zMlJFUykKK1BHRklMRURFU0MgPSAidGVzdF9yYnRyZWUgLSByYnRyZWUg dHJpdmVyc2FsIHRlc3RpbmciCisKK0VYVEVOU0lPTiA9IHRlc3RfcmJ0cmVl CitEQVRBID0gdGVzdF9yYnRyZWUtLTEuMC5zcWwKKworUkVHUkVTUyA9IHRl c3RfcmJ0cmVlCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19j b25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQor aW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfcmJ0cmVlCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgor aW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAor aW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwu bWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf cmJ0cmVlL1JFQURNRSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9yYnRyZWUv UkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhm NDI4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfcmJ0cmVlL1JFQURNRQpAQCAtMCwwICsxLDIwIEBACit0ZXN0X3JidHJl ZSBpcyBhIG1vZHVsZSB0ZXN0cyBmb3IgY2hlY2tpbmcgdGhlIGNvcnJlY3Ru ZXNzIG9mIGFsbCBraW5kcyBvZgordHJhdmVyc2FsIG9mIHJlZC1ibGFjayB0 cmVlLiBSaWdodCBub3cgcmJ0cmVlIGluIHBvc3RncmVzIGhhcyA0IGtpbmRz IG9mCit0cmF2ZXJzYWxzOiBMZWZ0LUN1cnJlbnQtUmlnaHQsIFJpZ2h0LUN1 cnJlbnQtTGVmdCwgQ3VycmVudC1MZWZ0LVJpZ2h0IGFuZAorTGVmdC1SaWdo dC1DdXJyZW50LgorCitUaGlzIGV4dGVudGlvbiBoYXMgNCBmdW5jdGlvbnMu IEVhY2ggZnVuY3Rpb24gY2hlY2tzIG9uZSB0cmF2ZXJzYWwuCitUaGUgY2hl Y2tpbmcgdGhlIGNvcnJlY3RuZXNzIG9mIGZpcnN0IHR3byB0eXBlcyBhcmUg YmFzZWQgb24gdGhlIGZhY3QgdGhhdAorcmVkLWJsYWNrIHRyZWUgaXMgYSBi aW5hcnkgc2VhcmNoIHRyZWUsIHNvIHRoZSBlbGVtZW50cyBzaG91bGQgYmUg aXRlcmF0ZWQgaW4KK2luY3JlYXNpbmcoZm9yIExlZnQtQ3VycmVudC1SaWdo dCkgb3IgZGVjcmVhc2luZyhmb3IgUmlnaHQtQ3VycmVudC1MZWZ0KQorb3Jk ZXIuCitJbiBvcmRlciB0byB2ZXJpZnkgbGFzdCB0d28gc3RyYXRlZ2llcywg d2Ugd2lsbCBjaGVjayB0aGUgc2VxdWVuY2UgaWYgaXQgaXMKK2NvcnJlY3Qg b3Igbm90LiBGb3IgZ2l2ZW4gcHJlLSBvciBwb3N0LSBvcmRlciB0cmF2ZXJz aW5nIG9mIGJpbmFyeSBzZWFyY2ggdHJlZQoraXQgaXMgYWx3YXlzIHBvc3Np YmxlIHRvIHNheSBpcyBpdCBjb3JyZWN0IG9yIG5vdCBhbmQgdG8gcmVidWls ZCBvcmlnaW5hbCB0cmVlLgorVGhlIGlkZWEgaXMgYmFzZWQgb24gdGhlIGZh Y3QgdGhhdCBpbiBzdWNoIHRyYXZlcnNhbCBzZXF1ZW5jZSBpcyBhbHdheXMK K3Bvc3NpYmxlIHRvIGRldGVybWluZSBjdXJyZW50IG5vZGUsIGxlZnQgc3Vi dHJlZSBhbmQgcmlnaHQgc3VidHJlZS4KKworQWxzbywgdGhpcyBtb2R1bGUg aXMgY2hlY2tpbmcgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBmaW5kLCBkZWxl dGUgYW5kIGxlZnRtb3N0CitvcGVyYXRpb24uCisKK1RoZXNlIHRlc3RzIGFy ZSBwZXJmb3JtZWQgb24gcmVkLWJsYWNrIHRyZWVzIHRoYXQgc3RvcmUgaW50 ZWdlcnMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS9leHBlY3RlZC90ZXN0 X3JidHJlZS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL2V4 cGVjdGVkL3Rlc3RfcmJ0cmVlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5jZDQ0MzViCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS9leHBlY3RlZC90ZXN0X3JidHJl ZS5vdXQKQEAgLTAsMCArMSw0MyBAQAorQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0 X3JidHJlZTsKK1NFTEVDVCB0ZXN0bGVmdHJpZ2h0KCk7CisgdGVzdGxlZnRy aWdodCAKKy0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1Qg dGVzdHJpZ2h0bGVmdCgpOworIHRlc3RyaWdodGxlZnQgCistLS0tLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIHRlc3RkaXJlY3QoKTsKKyB0 ZXN0ZGlyZWN0IAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVD VCB0ZXN0aW52ZXJ0ZWQoKTsKKyB0ZXN0aW52ZXJ0ZWQgCistLS0tLS0tLS0t LS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgdGVzdGZpbmQoKTsKKyB0ZXN0 ZmluZCAKKy0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIHRlc3Rs ZWZ0bW9zdCgpOworIHRlc3RsZWZ0bW9zdCAKKy0tLS0tLS0tLS0tLS0tCisg CisoMSByb3cpCisKK1NFTEVDVCB0ZXN0ZGVsZXRlKCk7CisgdGVzdGRlbGV0 ZSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL2ludF9yYnRyZWUuaCBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9yYnRyZWUvaW50X3JidHJlZS5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNTM2MTYKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL2lu dF9yYnRyZWUuaApAQCAtMCwwICsxLDQ5IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogaW50X3JidHJlZS5oCisgKgkJRGVm aW5pdGlvbnMgZm9yIGludGVnZXIgcmVkLWJsYWNrIHRyZWUKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTMtMjAxNywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCXNy Yy90ZXN0L21vZHVsZXMvdGVzdF9yYnRyZWUvaW50X3JidHJlZS5oCisgKgor ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5k ZWYgSU5UX1JCVFJFRV9ICisjZGVmaW5lIElOVF9SQlRSRUVfSAorCisjaW5j bHVkZSAibGliL3JidHJlZS5oIgorCit0eXBlZGVmIHN0cnVjdCBJbnRSQlRy ZWVOb2RlCit7CisJUkJOb2RlCQlyYm5vZGU7CisJaW50CQkJa2V5OworCit9 IEludFJCVHJlZU5vZGU7CisKK3N0YXRpYyBpbnQKK2NtcChjb25zdCBSQk5v ZGUgKmEsIGNvbnN0IFJCTm9kZSAqYiwgdm9pZCAqYXJnKQoreworCWNvbnN0 IEludFJCVHJlZU5vZGUgKmVhID0gKGNvbnN0IEludFJCVHJlZU5vZGUgKikg YTsKKwljb25zdCBJbnRSQlRyZWVOb2RlICplYiA9IChjb25zdCBJbnRSQlRy ZWVOb2RlICopIGI7CisKKwlyZXR1cm4gZWEtPmtleSAtIGViLT5rZXk7Cit9 CisKK3N0YXRpYyBSQk5vZGUgKgorYWxsb2Modm9pZCAqYXJnKQoreworCUlu dFJCVHJlZU5vZGUgKmVhOworCWVhID0gbWFsbG9jKHNpemVvZihJbnRSQlRy ZWVOb2RlKSk7CisJcmV0dXJuIChSQk5vZGUgKikgZWE7Cit9CisKK3N0YXRp YyB2b2lkCitmcihSQk5vZGUgKiBub2RlLCB2b2lkICphcmcpCit7CisJZnJl ZShub2RlKTsKK30KKworI2VuZGlmIC8vIElOVF9SQlRSRUVfSApkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS9zcWwvdGVzdF9y YnRyZWUuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS9zcWwv dGVzdF9yYnRyZWUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjNiZWRmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfcmJ0cmVlL3NxbC90ZXN0X3JidHJlZS5zcWwKQEAgLTAs MCArMSw5IEBACitDUkVBVEUgRVhURU5TSU9OIHRlc3RfcmJ0cmVlOworCitT RUxFQ1QgdGVzdGxlZnRyaWdodCgpOworU0VMRUNUIHRlc3RyaWdodGxlZnQo KTsKK1NFTEVDVCB0ZXN0ZGlyZWN0KCk7CitTRUxFQ1QgdGVzdGludmVydGVk KCk7CitTRUxFQ1QgdGVzdGZpbmQoKTsKK1NFTEVDVCB0ZXN0bGVmdG1vc3Qo KTsKK1NFTEVDVCB0ZXN0ZGVsZXRlKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3Ji dHJlZS90ZXN0LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL3Rl c3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjFl N2M1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X3JidHJlZS90ZXN0LmMKQEAgLTAsMCArMSw1NzcgQEAKK++7vy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0LmMKKyAqCQlU ZXN0IGNvcnJlY3RuZXNzIG9mIHJlZC1ibGFjayB0cmVlIHRyYXZlcnNhbHMu CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTcsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqCQlzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL3Rlc3QuYwor ICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImZtZ3IuaCIKKyNp bmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKwor I2luY2x1ZGUgImludF9yYnRyZWUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+ CisKK1BHX01PRFVMRV9NQUdJQzsKKworUEdfRlVOQ1RJT05fSU5GT19WMSh0 ZXN0bGVmdHJpZ2h0KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdHJpZ2h0 bGVmdCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RkaXJlY3QpOworUEdf RlVOQ1RJT05fSU5GT19WMSh0ZXN0aW52ZXJ0ZWQpOworUEdfRlVOQ1RJT05f SU5GT19WMSh0ZXN0ZmluZCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3Rs ZWZ0bW9zdCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RkZWxldGUpOwor Cit2b2lkCQlfUEdfaW5pdCh2b2lkKTsKKworI2RlZmluZSBURVNUX1NJWkUg MTAwMDAwCisKKy8qCisgKiBDaGVja2luZyB0aGUgY29ycmVjdG5lc3Mgb2Yg bGVmdC1yaWdodCB0cmF2ZXJzYWwuCisgKiBMZWZ0LXJpZ2h0IHRyYXZlcnNh bCBpcyBjb3JyZWN0IGlmIGVsZW1lbnRzIGFyZQorICogZ2l2ZW4gaW4gdGhl IGluY3JlYXNpbmcgb3JkZXIuCisgKi8KK0RhdHVtCit0ZXN0bGVmdHJpZ2h0 KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJSW50UkJUcmVlTm9kZQkgICAqbm9k ZTsKKwlSQlRyZWUJCQkgICAqdHJlZSA9IHJiX2NyZWF0ZShzaXplb2YoSW50 UkJUcmVlTm9kZSksIGNtcCwgTlVMTCwgYWxsb2MsIGZyLCBOVUxMKTsKKwlS QlRyZWVJdGVyYXRvcgkJaXRlcjsKKwlpbnQJCQkJCWk7CisJaW50CQkJCQls YXN0S2V5ID0gLTE7CisJaW50CQkJCQlzaXplID0gVEVTVF9TSVpFOworCisJ LyogZmlsbGluZyB0cmVlIGJ5IGNvbnNlY3V0aXZlIG5hdHVyYWwgbnVtYmVy cyAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJeworCQlJbnRS QlRyZWVOb2RlIG5vZGU7CisJCWJvb2wgaXNOZXc7CisJCW5vZGUua2V5ID0g aTsKKwkJcmJfaW5zZXJ0KHRyZWUsIChSQk5vZGUgKikgJm5vZGUsICZpc05l dyk7CisJfQorCisJcmJfYmVnaW5faXRlcmF0ZSh0cmVlLCBMZWZ0UmlnaHRX YWxrLCAmaXRlcik7CisKKwkvKiBpdGVyYXRlIG92ZXIgdGhlIHRyZWUgKi8K Kwl3aGlsZSAoKG5vZGUgPSAoSW50UkJUcmVlTm9kZSAqKXJiX2l0ZXJhdGUo Jml0ZXIpKSAhPSBOVUxMKQorCXsKKwkJLyogY2hlY2tpbmcgdGhhdCBvcmRl ciBpcyBpbmNyZWFzaW5nICovCisJCWlmIChub2RlLT5rZXkgPD0gbGFzdEtl eSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf V0FSTklORyksCisJCQkJCSBlcnJtc2coImxlZnQtcmlnaHQgd2FsayBnaXZl IGVsZW1lbnRzIG5vdCBpbiBzb3J0ZWQgb3JkZXIiKSkpOworCQlsYXN0S2V5 ID0gbm9kZS0+a2V5OworCX0KKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisK Ky8qCisgKiBDaGVja2luZyB0aGUgY29ycmVjdG5lc3Mgb2YgcmlnaHQtbGVm dCB0cmF2ZXJzYWwuCisgKiBSaWdodC1sZWZ0IHRyYXZlcnNhbCBpcyBjb3Jy ZWN0IGlmIGVsZW1lbnRzIGFyZQorICogZ2l2ZW4gaW4gdGhlIGRlY3JlYXNp bmcgb3JkZXIuCisgKi8KK0RhdHVtCit0ZXN0cmlnaHRsZWZ0KFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJSW50UkJUcmVlTm9kZQkgICAqbm9kZTsKKwlSQlRy ZWUJCQkgICAqdHJlZSA9IHJiX2NyZWF0ZShzaXplb2YoSW50UkJUcmVlTm9k ZSksIGNtcCwgTlVMTCwgYWxsb2MsIGZyLCBOVUxMKTsKKwlSQlRyZWVJdGVy YXRvcgkJaXRlcjsKKwlpbnQJCQkJCWk7CisJaW50CQkJCQlzaXplID0gVEVT VF9TSVpFOworCWludAkJCQkJbGFzdEtleSA9IHNpemUgKyAxOworCisJLyog ZmlsbGluZyB0cmVlIGJ5IGNvbnNlY3V0aXZlIG5hdHVyYWwgbnVtYmVycyAq LworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJeworCQlJbnRSQlRy ZWVOb2RlIG5vZGU7CisJCWJvb2wgaXNOZXc7CisJCW5vZGUua2V5ID0gaTsK KwkJcmJfaW5zZXJ0KHRyZWUsIChSQk5vZGUgKikgJm5vZGUsICZpc05ldyk7 CisJfQorCisJcmJfYmVnaW5faXRlcmF0ZSh0cmVlLCBSaWdodExlZnRXYWxr LCAmaXRlcik7CisKKwkvKiBpdGVyYXRlIG92ZXIgdGhlIHRyZWUgKi8KKwl3 aGlsZSAoKG5vZGUgPSAoSW50UkJUcmVlTm9kZSAqKXJiX2l0ZXJhdGUoJml0 ZXIpKSAhPSBOVUxMKQorCXsKKwkJLyogY2hlY2tpbmcgdGhhdCBvcmRlciBp cyBkZWNyZWFzaW5nICovCisJCWlmIChub2RlLT5rZXkgPj0gbGFzdEtleSkK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfV0FS TklORyksCisJCQkJCSBlcnJtc2coInJpZ2h0LWxlZnQgd2FsayBnaXZlIGVs ZW1lbnRzIG5vdCBpbiBzb3J0ZWQgb3JkZXIiKSkpOworCQlsYXN0S2V5ID0g bm9kZS0+a2V5OworCX0KKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8q CisgKiBHZXR0aW5nIE5JTCBlbGVtZW50IG9mIHRoZSB0cmVlCisgKi8KK3N0 YXRpYyBSQk5vZGUgKgorR2V0TmlsKFJCTm9kZSAqbm9kZSkKK3sKKwlpZiAo KHZvaWQgKilub2RlID09ICh2b2lkICopbm9kZS0+bGVmdCkKKwkJcmV0dXJu IG5vZGU7CisJcmV0dXJuIEdldE5pbChub2RlLT5sZWZ0KTsKK30KKworLyoK KyAqIENoZWNraW5nIHRoZSBjb3JyZWN0bmVzcyBvZiBnaXZlbiBwcmVvcmRl ciB0cmF2ZXJzYWwuCisgKiBGb3IgdGhlIHByZW9yZGVyIHRyYXZlcnNhbCB0 aGUgcm9vdCBrZXkgaXMgYWx3YXlzIG9uIHRoZSBmaXJzdCBwb3NpdGlvbi4K KyAqIE5PVEU6IEJTVCBoYXMgb25seSBvbmUgcHJlb3JkZXIgdHJhdmVyc2Fs IGFuZCB2aWNlIHZlcnNhLgorICogQW55IHByZW9yZGVyIHRyYXZlcnNhbCBj b3JyZXNwb25kcyB0byBvbmx5IG9uZSBCU1QuCisgKiAgICAgZTEgZTIgZTMg Li4uIGVrIC4uLiBlbGVuCisgKiAgICAgXiAgXiAgICAgICAgIF4KKyAqICBo ZWFkICBsZWZ0ICAgICByaWdodAorICogZTEgPiBlaSBmb3IgYWxsIGkgaW4g WzI7IGsgLSAxXQorICogZTEgPCBlaSBmb3IgYWxsIGkgaW4gW2s7IGxlbl0K KyAqLworc3RhdGljIGJvb2wKK1ZhbGlkYXRlUHJlb3JkZXJJbnQoaW50ICog YXJyYXksIGludCBsZW4pCit7CisJaW50CSAgICpsZWZ0ID0gYXJyYXkgKyAx OworCWludAkgICAqcmlnaHQgPSBsZWZ0OworCWludAkgICAqdG1wOworCisJ aWYgKGxlbiA8PSAxKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIHNlYXJjaGlu ZyBmb3IgdGhlIHJpZ2h0IHN1YnRyZWUgKi8KKwl3aGlsZSAocmlnaHQgPCBh cnJheSArIGxlbiAmJiAqcmlnaHQgPD0gKmFycmF5KQorCQlyaWdodCsrOwor CisJLyogY2hlY2tpbmcgdGhhdCByaWdodCBzdWJ0cmVlIGhhcyBvbmx5IGVs ZW1lbnRzCisJICogdGhhdCBhcmUgYmlnZ2VyIHRoYW4gY3VycmVudCAqLwor CXRtcCA9IHJpZ2h0OworCXdoaWxlICh0bXAgPCBhcnJheSArIGxlbikKKwl7 CisJCWlmICgqdG1wIDw9ICphcnJheSkKKwkJCXJldHVybiBmYWxzZTsKKwkJ dG1wKys7CisJfQorCisJLyogY2hlY2tpbmcgbGVmdCBzdWJ0cmVlIGFuZCBy aWdodCBzdWJ0cmVlIHJlY3Vyc2l2ZWx5ICovCisJcmV0dXJuIFZhbGlkYXRl UHJlb3JkZXJJbnQobGVmdCwgcmlnaHQgLSBsZWZ0KSAmJgorCQkgICBWYWxp ZGF0ZVByZW9yZGVySW50KHJpZ2h0LCBhcnJheSArIGxlbiAtIHJpZ2h0KTsK K30KKworLyogQ2hlY2tpbmcgdHJhdmVyc2FsIGJ5IHRyYXZlcnNpbmcgdGhl IHRyZWUgKi8KK3N0YXRpYyBib29sCitWYWxpZGF0ZVByZW9yZGVySW50VHJl ZShJbnRSQlRyZWVOb2RlICpub2RlLCBpbnQgKmFycmF5LCBpbnQgbGVuLCB2 b2lkICpudWxsKQoreworCWludAkgICAqcmlnaHQgPSBhcnJheTsKKwlpbnQJ CXJpZ2h0VmFsdWU7CisJaW50CQlsZWZ0VmFsdWU7CisJaW50CQlpOworCWlm IChub2RlID09IG51bGwpCisJCXJldHVybiBsZW4gPT0gMDsKKwlpZiAobm9k ZS0+a2V5ICE9ICphcnJheSkKKwkJcmV0dXJuIGZhbHNlOworCS8qIElmIG5v ZGUgaGFzIGxlZnQgY2hpbGQgLT4gY2hlY2sgaXQgKi8KKwlpZiAoKHZvaWQg Kilub2RlLT5yYm5vZGUubGVmdCAhPSBudWxsKQorCXsKKwkJbGVmdFZhbHVl ID0gKChJbnRSQlRyZWVOb2RlICopbm9kZS0+cmJub2RlLmxlZnQpLT5rZXk7 CisJCWlmIChsZWZ0VmFsdWUgIT0gYXJyYXlbMV0pCisJCQlyZXR1cm4gZmFs c2U7CisJCS8qIHNlYXJjaGluZyBmb3IgcmlnaHQgcGFydCAqLworCQlpZiAo KHZvaWQgKilub2RlLT5yYm5vZGUucmlnaHQgIT0gbnVsbCkKKwkJeworCQkJ cmlnaHRWYWx1ZSA9ICgoSW50UkJUcmVlTm9kZSAqKW5vZGUtPnJibm9kZS5y aWdodCktPmtleTsKKwkJCWkgPSAwOworCQkJd2hpbGUgKGFycmF5W2ldICE9 IHJpZ2h0VmFsdWUpCisJCQl7CisJCQkJaSsrOworCQkJCWlmIChpID4gbGVu KQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlyaWdodCA9IGFycmF5 ICsgaTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJpZ2h0ID0gYXJyYXkgKyBs ZW47CisJCX0KKwkJaWYgKCFWYWxpZGF0ZVByZW9yZGVySW50VHJlZSgoSW50 UkJUcmVlTm9kZSAqKW5vZGUtPnJibm9kZS5sZWZ0LCBhcnJheSArIDEsIHJp Z2h0IC0gYXJyYXkgLSAxLCBudWxsKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9 CisKKwkvKiBJZiBub2RlIGhhcyByaWdodCBjaGlsZCAtPiBjaGVjayBpdCAq LworCWlmICgodm9pZCAqKW5vZGUtPnJibm9kZS5yaWdodCAhPSBudWxsKQor CXsKKwkJcmlnaHRWYWx1ZSA9ICgoSW50UkJUcmVlTm9kZSAqKW5vZGUtPnJi bm9kZS5yaWdodCktPmtleTsKKwkJLyogaWYgbGVmdCBjaGlsZCBpcyBub3Qg bnVsbCAtPiByaWdodCBpcyBwcm9wZXJseSBzZXQsIG90aGVyd2lzZSBzZXQg aXQgbm93ICovCisJCWlmIChyaWdodCA9PSBhcnJheSkKKwkJCXJpZ2h0Kys7 CisJCWlmIChyaWdodFZhbHVlICE9ICpyaWdodCkKKwkJCXJldHVybiBmYWxz ZTsKKwkJcmV0dXJuIFZhbGlkYXRlUHJlb3JkZXJJbnRUcmVlKChJbnRSQlRy ZWVOb2RlICopbm9kZS0+cmJub2RlLnJpZ2h0LCByaWdodCwgYXJyYXkgKyBs ZW4gLSByaWdodCwgbnVsbCk7CisJfQorCXJldHVybiB0cnVlOworfQorCisv KgorICogQ2hlY2tpbmcgdGhlIGNvcnJlY3RuZXNzIG9mIHByZW9yZGVyKGRp cmVjdCkgdHJhdmVyc2FsLgorICogRmlyc3RseSwgdGhlIGNvcnJlY3RuZXNz IG9mIHRoZSBzZXF1ZW5jZSBieSBpdHNlbGYgaXMgY2hlY2tlZC4KKyAqIFNl Y29uZGx5LCBhIGNvcnJlc3BvbmRhbmNlIHRvIHRoZSB0cmVlIGlzIGNoZWNr ZWQuCisgKi8KK0RhdHVtCit0ZXN0ZGlyZWN0KFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJSW50UkJUcmVlTm9kZQkgICAqbm9kZTsKKwlSQlRyZWUJCQkgICAq dHJlZSA9IHJiX2NyZWF0ZShzaXplb2YoSW50UkJUcmVlTm9kZSksIGNtcCwg TlVMTCwgYWxsb2MsIGZyLCBOVUxMKTsKKwlSQlRyZWVJdGVyYXRvcgkJaXRl cjsKKwl2b2lkCQkJICAgKm51bGw7CisJaW50CQkJCQlzaXplID0gVEVTVF9T SVpFOworCWludAkJCQkgICAqZWxlbWVudHM7CisJaW50CQkJCQlpOworCisJ Zm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwl7CisJCUludFJCVHJlZU5v ZGUJbm9kZTsKKwkJYm9vbAkJCWlzTmV3OworCQlub2RlLmtleSA9IGk7CisJ CXJiX2luc2VydCh0cmVlLCAoUkJOb2RlICopICZub2RlLCAmaXNOZXcpOwor CX0KKworCWVsZW1lbnRzID0gKGludCAqKSBtYWxsb2Moc2l6ZW9mKGludCkg KiBzaXplKTsKKwlyYl9iZWdpbl9pdGVyYXRlKHRyZWUsIERpcmVjdFdhbGss ICZpdGVyKTsKKwlpID0gMDsKKworCXdoaWxlICgobm9kZSA9IChJbnRSQlRy ZWVOb2RlICopcmJfaXRlcmF0ZSgmaXRlcikpICE9IE5VTEwpCisJeworCQll bGVtZW50c1tpKytdID0gbm9kZS0+a2V5OworCX0KKworCWlmIChpICE9IHNp emUgfHwgIVZhbGlkYXRlUHJlb3JkZXJJbnQoZWxlbWVudHMsIHNpemUpKQor CXsKKwkJZnJlZShlbGVtZW50cyk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9XQVJOSU5HKSwKKwkJCQkgZXJybXNnKCJwcmVv cmRlciB3YWxrIGdpdmUgZWxlbWVudHMgbm90IGluIHRoZSBjb3JyZWN0IG9y ZGVyIikpKTsKKworCX0KKworCW51bGwgPSAodm9pZCAqKUdldE5pbCgqKFJC Tm9kZSAqKil0cmVlKTsKKwlpZiAoIVZhbGlkYXRlUHJlb3JkZXJJbnRUcmVl KCooSW50UkJUcmVlTm9kZSAqKil0cmVlLCBlbGVtZW50cywgc2l6ZSwgbnVs bCkpCisJeworCQlmcmVlKGVsZW1lbnRzKTsKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX1dBUk5JTkcpLAorCQkJCSBlcnJtc2co InByZW9yZGVyIHdhbGsgZ2l2ZSBlbGVtZW50cyBub3QgaW4gdGhlIGNvcnJl Y3Qgb3JkZXIgaW4gdHJlZSBjaGVjayIpKSk7CisKKwl9CisKKwlmcmVlKGVs ZW1lbnRzKTsKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogQ2hl Y2tpbmcgdGhlIGNvcnJlY3RuZXNzIG9mIGdpdmVuIHBvc3RvcmRlciB0cmF2 ZXJzYWwKKyAqIEZvciB0aGUgcG9zdG9yZGVyIHRyYXZlcnNhbCB0aGUgcm9v dCBrZXkgaXMgYWx3YXlzIHRoZSBsYXN0LgorICogTk9URTogQlNUIGhhcyBv bmx5IG9uZSBwb3N0b3JkZXIgdHJhdmVyc2FsIGFuZCB2aWNlIHZlcnNhCisg KiBBbnkgcG9zdG9yZGVyIHRyYXZlcnNhbCBjb3JyZXNwb25kcyB0byBvbmx5 IG9uZSBCU1QKKyAqLworc3RhdGljIGJvb2wKK1ZhbGlkYXRlUG9zdG9yZGVy SW50KGludCAqIGFycmF5LCBpbnQgbGVuKQoreworCWludAkJICAgKmxlZnQg PSBhcnJheTsKKwlpbnQJCSAgICpyaWdodCA9IGxlZnQ7CisJaW50CQkgICAq dG1wOworCisJaWYgKGxlbiA8PSAxKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8q IHNlYXJjaGluZyBmb3IgdGhlIHJpZ2h0IHN1YnRyZWUgKi8KKwl3aGlsZSAo cmlnaHQgPCBhcnJheSArIGxlbiAmJiAqcmlnaHQgPD0gYXJyYXlbbGVuIC0g MV0pCisJCXJpZ2h0Kys7CisKKwkvKiBjaGVja2luZyB0aGF0IHJpZ2h0IHN1 YnRyZWUgaGFzIG9ubHkgZWxlbWVudHMKKwkgKiB0aGF0IGFyZSBiaWdnZXIg dGhhbiBjdXJyZW50ICovCisJdG1wID0gcmlnaHQ7CisJd2hpbGUgKHRtcCA8 IGFycmF5ICsgbGVuIC0gMSkKKwl7CisJCWlmICgqdG1wIDw9IGFycmF5W2xl biAtIDFdKQorCQkJcmV0dXJuIGZhbHNlOworCQl0bXArKzsKKwl9CisKKwkv KiBDaGVja2luZyBsZWZ0IHN1YnRyZWUgYW5kIHJpZ2h0IHN1YnRyZWUgcmVj dXJzaXZlbHkgKi8KKwlyZXR1cm4gVmFsaWRhdGVQb3N0b3JkZXJJbnQobGVm dCwgcmlnaHQgLSBsZWZ0KSAmJgorCQkgICBWYWxpZGF0ZVBvc3RvcmRlcklu dChyaWdodCwgYXJyYXkgKyBsZW4gLSByaWdodCAtIDEpOworfQorCisvKiBD aGVja2luZyB0cmF2ZXJzYWwgYnkgdHJhdmVyc2luZyB0aGUgdHJlZSAqLwor c3RhdGljIGJvb2wKK1ZhbGlkYXRlUG9zdG9yZGVySW50VHJlZShJbnRSQlRy ZWVOb2RlICpub2RlLCBpbnQgKmFycmF5LCBpbnQgbGVuLCB2b2lkICpudWxs LCBpbnQgZGVwdGgpCit7CisJaW50CQkgICAqcmlnaHQgPSBhcnJheTsKKwlp bnQJCQlsZWZ0VmFsdWU7CisJaW50CQkJaTsKKwlpZiAobm9kZSA9PSBudWxs KQorCQlyZXR1cm4gbGVuID09IDA7CisJaWYgKG5vZGUtPmtleSAhPSBhcnJh eVtsZW4gLSAxXSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogSWYgbm9kZSBo YXMgbGVmdCBjaGlsZCAtPiBjaGVjayBpdCAqLworCWlmICgodm9pZCAqKW5v ZGUtPnJibm9kZS5sZWZ0ICE9IG51bGwpCisJeworCQlsZWZ0VmFsdWUgPSAo KEludFJCVHJlZU5vZGUgKilub2RlLT5yYm5vZGUubGVmdCktPmtleTsKKwkJ Lyogc2VhcmNoaW5nIGZvciByaWdodCBwYXJ0ICovCisJCWlmICgodm9pZCAq KW5vZGUtPnJibm9kZS5yaWdodCAhPSBudWxsKQorCQl7CisJCQlpID0gMDsK KwkJCXdoaWxlIChhcnJheVtpXSAhPSBsZWZ0VmFsdWUpCisJCQl7CisJCQkJ aSsrOworCQkJCWlmIChpID49IGxlbikKKwkJCQkJcmV0dXJuIGZhbHNlOwor CQkJfQorCQkJcmlnaHQgPSBhcnJheSArIGkgKyAxOworCQl9CisJCWVsc2UK KwkJeworCQkJcmlnaHQgPSBhcnJheSArIGxlbiAtIDE7CisJCX0KKwkJaWYg KCFWYWxpZGF0ZVBvc3RvcmRlckludFRyZWUoKEludFJCVHJlZU5vZGUgKilu b2RlLT5yYm5vZGUubGVmdCwgYXJyYXksIHJpZ2h0IC0gYXJyYXksIG51bGws IGRlcHRoICsgMSkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogSWYg bm9kZSBoYXMgcmlnaHQgY2hpbGQgLT4gY2hlY2sgaXQgKi8KKwlpZiAoKHZv aWQgKilub2RlLT5yYm5vZGUucmlnaHQgIT0gbnVsbCkKKwl7CisJCXJldHVy biBWYWxpZGF0ZVBvc3RvcmRlckludFRyZWUoKEludFJCVHJlZU5vZGUgKilu b2RlLT5yYm5vZGUucmlnaHQsIHJpZ2h0LCBhcnJheSArIGxlbiAtIHJpZ2h0 IC0gMSwgbnVsbCwgZGVwdGggKyAxKTsKKwl9CisJcmV0dXJuIHRydWU7Cit9 CisKKy8qCisgKiBDaGVja2luZyB0aGUgY29ycmVjdG5lc3Mgb2YgcG9zb3Jk ZXIoaW52ZXJ0ZWQpIHRyYXZlcnNhbC4KKyAqIEZpcnN0bHksIHRoZSBjb3Jy ZWN0bmVzcyBvZiB0aGUgc2VxdWVuY2UgYnkgaXRzZWxmIGlzIGNoZWNrZWQu CisgKiBTZWNvbmRseSwgYSBjb3JyZXNwb25kYW5jZSB0byB0aGUgdHJlZSBp cyBjaGVja2VkLgorICovCitEYXR1bQordGVzdGludmVydGVkKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJSW50UkJUcmVlTm9kZQkgICAqbm9kZTsKKwlSQlRy ZWUJCQkgICAqdHJlZSA9IHJiX2NyZWF0ZShzaXplb2YoSW50UkJUcmVlTm9k ZSksIGNtcCwgTlVMTCwgYWxsb2MsIGZyLCBOVUxMKTsKKwlSQlRyZWVJdGVy YXRvcgkJaXRlcjsKKwl2b2lkCQkJICAgKm51bGw7CisJaW50CQkJCQlzaXpl ID0gVEVTVF9TSVpFOworCWludAkJCQkgICAqZWxlbWVudHM7CisJaW50CQkJ CQlpOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwl7CisJCUlu dFJCVHJlZU5vZGUgbm9kZTsKKwkJYm9vbCBpc05ldzsKKwkJbm9kZS5rZXkg PSBpOworCQlyYl9pbnNlcnQodHJlZSwgKFJCTm9kZSAqKSAmbm9kZSwgJmlz TmV3KTsKKwl9CisKKwllbGVtZW50cyA9IChpbnQgKikgbWFsbG9jKHNpemVv ZihpbnQpICogc2l6ZSk7CisJcmJfYmVnaW5faXRlcmF0ZSh0cmVlLCBJbnZl cnRlZFdhbGssICZpdGVyKTsKKwlpID0gMDsKKworCXdoaWxlICgobm9kZSA9 IChJbnRSQlRyZWVOb2RlICopcmJfaXRlcmF0ZSgmaXRlcikpICE9IE5VTEwp CisJeworCQllbGVtZW50c1tpKytdID0gbm9kZS0+a2V5OworCX0KKworCWlm IChpICE9IHNpemUgfHwgIVZhbGlkYXRlUG9zdG9yZGVySW50KGVsZW1lbnRz LCBzaXplKSkKKwl7CisJCWZyZWUoZWxlbWVudHMpOworCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfV0FSTklORyksCisJCQkJIGVy cm1zZygicG9zdG9yZGVyIHdhbGsgZ2l2ZSBlbGVtZW50cyBub3QgaW4gdGhl IGNvcnJlY3Qgb3JkZXIiKSkpOworCisJfQorCisJbnVsbCA9ICh2b2lkICop R2V0TmlsKCooUkJOb2RlICoqKXRyZWUpOworCWlmICghVmFsaWRhdGVQb3N0 b3JkZXJJbnRUcmVlKCooSW50UkJUcmVlTm9kZSAqKil0cmVlLCBlbGVtZW50 cywgc2l6ZSwgbnVsbCwgMCkpCisJeworCQlmcmVlKGVsZW1lbnRzKTsKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1dBUk5JTkcp LAorCQkJCSBlcnJtc2coInBvc3RvcmRlciB3YWxrIGdpdmUgZWxlbWVudHMg bm90IGluIHRoZSBjb3JyZWN0IG9yZGVyIGluIHRyZWUgY2hlY2siKSkpOwor CisJfQorCisJZnJlZShlbGVtZW50cyk7CisJUEdfUkVUVVJOX1ZPSUQoKTsK K30KKworLyoKKyAqIENoZWNraW5nIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUg cGdfZmluZCBvcGVyYXRpb24gYnkgaW5zZXJ0aW5nIGFuZCBkZWxldGluZwor ICogaW50ZWdlcnMuCisgKi8KK0RhdHVtCit0ZXN0ZmluZChQR19GVU5DVElP Tl9BUkdTKQoreworCVJCVHJlZQkJCSAgICp0cmVlID0gcmJfY3JlYXRlKHNp emVvZihJbnRSQlRyZWVOb2RlKSwgY21wLCBOVUxMLCBhbGxvYywgZnIsIE5V TEwpOworCWludAkJCQkJc2l6ZSA9IFRFU1RfU0laRTsKKwlpbnQJCQkJCWk7 CisKKwkvLyBJbnNlcnQgaW50ZWdlcnMgZnJvbSAwIHRvIHNpemUKKwlmb3Ig KGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCXsKKwkJSW50UkJUcmVlTm9kZSBu b2RlOworCQlib29sIGlzTmV3OworCQlub2RlLmtleSA9IGk7CisJCXJiX2lu c2VydCh0cmVlLCAoUkJOb2RlICopICZub2RlLCAmaXNOZXcpOworCX0KKwor CWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJeworCQlJbnRSQlRyZWVO b2RlIG5vZGUsIHJlc3VsdE5vZGU7CisJCW5vZGUua2V5ID0gaTsKKwkJcmVz dWx0Tm9kZSA9ICooSW50UkJUcmVlTm9kZSAqKXJiX2ZpbmQodHJlZSwgKFJC Tm9kZSAqKSZub2RlKTsKKwkJaWYgKG5vZGUua2V5ICE9IHJlc3VsdE5vZGUu a2V5KQorCQl7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfV0FSTklORyksCisJCQkJIGVycm1zZygiZmluZCBvcGVyYXRpb24g aW4gcmJ0cmVlIGdhdmUgd3JvbmcgcmVzdWx0IikpKTsKKwkJfQorCX0KKwlQ R19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogQ2hlY2tpbmcgdGhlIGNv cnJlY3RuZXNzIG9mIHRoZSBwZ19sZWZ0bW9zdCBvcGVyYXRpb24uIFRoaXMg b3BlcmF0aW9uIHNob2xkCisgKiBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVz dCBlbGVtZW50IG9mIHRoZSB0cmVlLgorICovCitEYXR1bQordGVzdGxlZnRt b3N0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJSW50UkJUcmVlTm9kZQkgICAq cmVzdWx0OworCVJCVHJlZQkJCSAgICp0cmVlID0gcmJfY3JlYXRlKHNpemVv ZihJbnRSQlRyZWVOb2RlKSwgY21wLCBOVUxMLCBhbGxvYywgZnIsIE5VTEwp OworCWludAkJCQkJc2l6ZSA9IFRFU1RfU0laRTsKKwlpbnQJCQkJCWk7CisJ aW50CQkJCSAgICpwZXJtdXRhdGlvbjsKKworCXBlcm11dGF0aW9uID0gKGlu dCAqKWNhbGxvYyhzaXplLCBzaXplb2YoaW50KSk7CisKKwkvLyBHZW5lcmF0 aW5nIHJhbmRvbSBwZXJtdXRhdGlvbgorCWZvciAoaSA9IDE7IGkgPCBzaXpl OyBpKyspCisJeworCQlpbnQJCWogPSByYW5kKCkgJSBpOworCisJCXBlcm11 dGF0aW9uW2ldID0gcGVybXV0YXRpb25bal07CisJCXBlcm11dGF0aW9uW2pd ID0gaTsKKwl9CisKKwkvLyBDaGVja2luZyB0aGF0IGVtcHR5IHRyZWUgaGFz IG5vIGxlZnRtb3N0IGVsZW1lbnQKKwlpZiAocmJfbGVmdG1vc3QodHJlZSkg IT0gTlVMTCkKKwl7CisJCWZyZWUocGVybXV0YXRpb24pOworCQllcmVwb3J0 KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9XQVJOSU5HKSwKKwkJCSBl cnJtc2coImxlZnRtb3N0IG5vZGUgb2YgZW1wdHkgdHJlZSBpcyBub3QgTlVM TCIpKSk7CisJfQorCisJLy8gUG9wdWxhdGluZyB0aGUgdHJlZSBieSBpbnRl Z2VycworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJeworCQlJbnRS QlRyZWVOb2RlIG5vZGU7CisJCWJvb2wgaXNOZXc7CisJCW5vZGUua2V5ID0g cGVybXV0YXRpb25baV07CisJCXJiX2luc2VydCh0cmVlLCAoUkJOb2RlICop ICZub2RlLCAmaXNOZXcpOworCX0KKworCS8vIENoZWNraW5nIHRoYXQgbGVm dG1vc3QgZWxlbWVudCBpcyB0aGUgc21hbGxlc3Qgb25lCisJcmVzdWx0ID0g KEludFJCVHJlZU5vZGUgKilyYl9sZWZ0bW9zdCh0cmVlKTsKKwlpZiAoMCAh PSByZXN1bHQtPmtleSkKKwl7CisJCWZyZWUocGVybXV0YXRpb24pOworCQll cmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9XQVJOSU5HKSwK KwkJCSBlcnJtc2coImxlZnRtb3N0IG9wZXJhdGlvbiBpbiByYnRyZWUgZ2F2 ZSB3cm9uZyByZXN1bHQiKSkpOworCX0KKwlmcmVlKHBlcm11dGF0aW9uKTsK KwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogQ2hlY2tpbmcgdGhl IGNvcnJlY3RuZXNzIG9mIHRoZSBwZ19kZWxldGUgb3BlcmF0aW9uLgorICov CitEYXR1bQordGVzdGRlbGV0ZShQR19GVU5DVElPTl9BUkdTKQoreworCVJC VHJlZQkJCSAgICp0cmVlID0gcmJfY3JlYXRlKHNpemVvZihJbnRSQlRyZWVO b2RlKSwgY21wLCBOVUxMLCBhbGxvYywgZnIsIE5VTEwpOworCWludAkJCQkJ c2l6ZSA9IFRFU1RfU0laRTsKKwlpbnQJCQkJCWksIGo7CisJaW50CQkJCSAg ICpkZWxldGVJZHM7CisKKwlkZWxldGVJZHMgPSAoaW50ICopY2FsbG9jKHNp emUgLyAxMCwgc2l6ZW9mKGludCkpOworCisJLy8gQ2hvb3NpbmcgaWRzIHRv IGRlbGV0ZQorCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gMTA7IGkrKykKKwl7 CisJCWludAkJayA9IHJhbmQoKSAlIHNpemU7CisJCWRlbGV0ZUlkc1tpXSA9 IGs7CisJfQorCisJLy8gUG9wdWxhdGluZyB0aGUgdHJlZSBieSBpbnRlZ2Vy cworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJeworCQlJbnRSQlRy ZWVOb2RlIG5vZGU7CisJCWJvb2wgaXNOZXc7CisJCW5vZGUua2V5ID0gaTsK KwkJcmJfaW5zZXJ0KHRyZWUsIChSQk5vZGUgKikgJm5vZGUsICZpc05ldyk7 CisJfQorCisJLy8gRGVsZXRpbmcgMTAlIG9mIGVsZW1lbnRzCisJZm9yIChp ID0gMDsgaSA8IHNpemUgLyAxMDsgaSsrKQorCXsKKwkJSW50UkJUcmVlTm9k ZQkJZmluZDsKKwkJSW50UkJUcmVlTm9kZQkgICAqbm9kZTsKKworCQlmaW5k LmtleSA9IGRlbGV0ZUlkc1tpXTsKKwkJLy8gSW4gb3JkZXIgbm9kZSB0byBi ZSBkZWxldGVkIGlzIHNob3VsZCBiZSB0YWtlbiBieSBwZ19maW5kCisJCW5v ZGUgPSAoSW50UkJUcmVlTm9kZSAqKXJiX2ZpbmQodHJlZSwgKFJCTm9kZSAq KSZmaW5kKTsKKwkJcmJfZGVsZXRlKHRyZWUsIChSQk5vZGUgKilub2RlKTsK Kwl9CisKKwkvLyBDaGVja2luZyB0aGF0IGRlbGV0ZWQgZWxlbWVudHMgYXJl IGRlbGV0ZWQKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCXsKKwkJ Ym9vbAkJCQlpc0RlbGV0ZWQgPSBmYWxzZTsKKwkJSW50UkJUcmVlTm9kZQkg ICAqcmVzdWx0OworCQlJbnRSQlRyZWVOb2RlCQlub2RlOworCisJCWZvciAo aiA9IDA7IGogPCBzaXplIC8gMTAgJiYgIWlzRGVsZXRlZDsgaisrKQorCQkJ aWYgKGkgPT0gZGVsZXRlSWRzW2pdKQorCQkJCWlzRGVsZXRlZCA9IHRydWU7 CisKKwkJbm9kZS5rZXkgPSBpOworCQlyZXN1bHQgPSAoSW50UkJUcmVlTm9k ZSAqKXJiX2ZpbmQodHJlZSwgKFJCTm9kZSAqKSZub2RlKTsKKwkJLy8gRGVs ZXRlIGVsZW1lbnQgc2hvdWxkIGJlIGVwc29uZWQKKwkJaWYgKGlzRGVsZXRl ZCAmJiByZXN1bHQgIT0gTlVMTCkKKwkJeworCQkJZnJlZShkZWxldGVJZHMp OworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1dB Uk5JTkcpLAorCQkJCSBlcnJtc2coImRlbGV0ZWQgZWxlbWVudCBwcmVzZW50 cyBpbiB0aGUgcmJ0cmVlIikpKTsKKwkJfQorCQkvLyBBbGl2ZSBlbGVtZW50 IHNob3VsZCBiZSBwcmVzZW50ZWQKKwkJaWYgKCFpc0RlbGV0ZWQgJiYgcmVz dWx0LT5rZXkgIT0gaSkKKwkJeworCQkJZnJlZShkZWxldGVJZHMpOworCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1dBUk5JTkcp LAorCQkJCSBlcnJtc2coImRlbGV0ZSBvcGVyYXRpb24gY29ycnVwdGVkIHJi dHJlZSIpKSk7CisJCX0KKwl9CisKKwlmcmVlKGRlbGV0ZUlkcyk7CisJUEdf UkVUVVJOX1ZPSUQoKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcmJ0cmVlL3Rl c3RfcmJ0cmVlLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3Ji dHJlZS90ZXN0X3JidHJlZS0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi40YjIwODE5Ci0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS90ZXN0X3JidHJlZS0tMS4w LnNxbApAQCAtMCwwICsxLDMyIEBACisvKiBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfcmJ0cmVlL3Rlc3RfcmJ0cmVlLS0xLjAuc3FsICovCisKKy0tIGNvbXBs YWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFu IHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRF TlNJT04gdGVzdF9yYnRyZWUiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAor CitDUkVBVEUgRlVOQ1RJT04gdGVzdGxlZnRyaWdodCgpCisJUkVUVVJOUyBw Z19jYXRhbG9nLnZvaWQgU1RSSUNUCisJQVMgJ01PRFVMRV9QQVRITkFNRScg TEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RyaWdodGxlZnQo KQorCVJFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNUUklDVAorCUFTICdNT0RV TEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0 ZXN0ZGlyZWN0KCkKKwlSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QK KwlBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUg RlVOQ1RJT04gdGVzdGludmVydGVkKCkKKwlSRVRVUk5TIHBnX2NhdGFsb2cu dm9pZCBTVFJJQ1QKKwlBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBD OworCitDUkVBVEUgRlVOQ1RJT04gdGVzdGZpbmQoKQorCVJFVFVSTlMgcGdf Y2F0YWxvZy52b2lkIFNUUklDVAorCUFTICdNT0RVTEVfUEFUSE5BTUUnIExB TkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0bGVmdG1vc3QoKQor CVJFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNUUklDVAorCUFTICdNT0RVTEVf UEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0 ZGVsZXRlKCkKKwlSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKKwlB UyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9yYnRyZWUvdGVzdF9yYnRyZWUuY29udHJvbCBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9yYnRyZWUvdGVzdF9yYnRyZWUuY29udHJvbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFkZTZhCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3JidHJlZS90ZXN0 X3JidHJlZS5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAorY29tbWVudCA9ICdU ZXN0IHJidHJlZSB0cml2ZXJzYWwnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4w JworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvdGVzdF9yYnRyZWUnCity ZWxvY2F0YWJsZSA9IHRydWUK --=_06fc23f06ebdba4721e8f7ef83ca5f42 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --=_06fc23f06ebdba4721e8f7ef83ca5f42--