Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uyFJg-005ZYI-CI for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Sep 2025 19:56:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uyFJd-00DLSL-7i for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Sep 2025 19:56:46 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uyFJc-00DLSD-Gk for pgsql-hackers@lists.postgresql.org; Mon, 15 Sep 2025 19:56:45 +0000 Received: from fhigh-a5-smtp.messagingengine.com ([103.168.172.156]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1uyFJa-000b0f-2E for pgsql-hackers@lists.postgresql.org; Mon, 15 Sep 2025 19:56:44 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfhigh.phl.internal (Postfix) with ESMTP id 6236A140013D; Mon, 15 Sep 2025 15:56:42 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Mon, 15 Sep 2025 15:56:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm1; t=1757966202; x=1758052602; bh=wg/OVF/CfG euPX7MvcTT5IpQ47VCsJInRG/sGVflH1I=; b=gWm0bRVmTnm6qiU1+pKMQ5OqWk 0fLvCkLnl1y47mAypcixmhM0v/xF24rhsQjuAFoIy4ZfEdmL1lZ9D54biq+KkNZg 12MO/6AibcAyJQCfNhaiaV0yf1dsagvzC6frFFhZ6V7/0oqyiXMLsvDPtGBhZ3F6 X9uuOaIwoTZEiP4rFdwYl7iv9wcKDmEHC2Y7sK0X5BKrzHQ/SeZgKqOzNNZk29wX aF9zcqDKvQ9APonOmt3TYUG5KnP/ZMmt8ICQIPEZgopOVFw3yI27OTlLqzG572B7 BsFIniWoaS6jn8QS46M6ReIDPbT/8KyjTHRhGUla+egfovmVDwnz+0v1TXsA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1757966202; x=1758052602; bh=wg/OVF/CfGeuPX7MvcTT5IpQ47VCsJInRG/ sGVflH1I=; b=Eh6wbCuK1STIvjee4d1xMacAyIjNi35qVRayhEg/FMQWJgOen2h 63HkMahWU5Xier/d9al3nJzysWn3+i619tgSSUvYY9W/0a2/BYsdS56sxXTsqAbW YBhcdx+En3XKoQR8sulpetuTGQiJPPFEAiCGHy4TTeRcH08phVD/mD8+rWPO4J9W SjrtC7Gs3xYeBHe/Gd5v7wb/3oo3hwo/dcXqOp0O2LsOLrVV734Wg3l3zsSLSLl7 qDv8rr6AFmRX2VNEyT6GhoCiLMCHrYn02ha5yiE+bf8O1Iag7dYa5lGFDMjgekFi Av10lYjnc8GHGyRnCn93QkkQ1hQreBarE0A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdefkeehkecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjug hrpeffhffvvefkjghfuffogggtsehmtdhmreertdejnecuhfhrohhmpefirhgvghcuuehu rhguuceoghhrvghgsegsuhhrugdrmhgvqeenucggtffrrghtthgvrhhnpeehtdeguefhgf egteetleeiuddvueekgeevtddujeefieffteeggfeigfelhfffhfenucffohhmrghinhep vghnthgvrhhprhhishgvuggsrdgtohhmnecuvehluhhsthgvrhfuihiivgeptdenucfrrg hrrghmpehmrghilhhfrhhomhepghhrvghgsegsuhhrugdrmhgvpdhnsggprhgtphhtthho peehpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehrohgsvghrthhmhhgrrghsse hgmhgrihhlrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghrsheslhhishht shdrphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtohepnhgrthhhrghnuggsohhssh grrhhtsehgmhgrihhlrdgtohhmpdhrtghpthhtohepshgrfigruggrrdhmshhhkhesghhm rghilhdrtghomhdprhgtphhtthhopehmihgthhgrvghlsehprghquhhivghrrdighiii X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 15 Sep 2025 15:56:41 -0400 (EDT) Date: Mon, 15 Sep 2025 15:56:30 -0400 From: Greg Burd To: Robert Haas Cc: PostgreSQL Hackers , Nathan Bossart , Masahiko Sawada , Michael Paquier Message-ID: <1CA731DE-B1BD-45C2-95B5-7E83FFE0E35C@greg.burd.me> In-Reply-To: <0FE0B26D-B94A-4BA7-BCA4-338C020609D9@greg.burd.me> References: <0FE0B26D-B94A-4BA7-BCA4-338C020609D9@greg.burd.me> Subject: Re: [PATCH] Add tests for Bitmapset X-Mailer: Mailspring MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="68c86f6e_162c0d8c_6415" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --68c86f6e_162c0d8c_6415 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Sep 15 2025, at 3:03 pm, Greg Burd wrote: > On Sep 15 2025, at 2:54 pm, Robert Haas wrote= : > =20 >> On Mon, Sep 15, 2025 at 2:00=E2=80=AFPM Greg Burd wro= te: >>> =46or reference radixtree has: >>> =20 >>> coverage: HEAD >>> lines......: 98.3 >>> functions..: 97.2 >>> branches...: 89.4 >> =20 >> + /* Test negative member in bms=5Fmake=5Fsingleton */ >> + error=5Fcaught =3D false; >> + PG=5FTRY(); >> + =7B >> + bms=5Fmake=5Fsingleton(-1); >> + =7D >> + PG=5FCATCH(); >> + =7B >> + error=5Fcaught =3D true; >> + =46lushErrorState(); >> + =7D >> + PG=5FEND=5FTRY(); >> + EXPECT=5FTRUE(error=5Fcaught); >> =20 >> This is an anti-pattern for PostgreSQL code. You can't just flush an >> error without aborting a transaction or subtransaction to recover. >> Even if it could be shown that this were harmless here, I think it's a= >> terrible idea to have code like this in the tree, as it encourages >> people to do exactly the wrong thing. > =20 > =46air enough, I'll rework it. > =20 >> But backing up a step, this also doesn't really seem like the right >> way to test the error conditions. It deliberately throws away the >> error message. All this verifies is that you caught an error. If you >> let the error escape to the client you could have the expected output >> test that you got the expected message. >> =20 >> I think it would be a better idea to structure this as a set of >> SQL-callable functions and move a bunch of the logic into SQL. > =20 > I'll give that approach a try, thanks for the suggestion. > =20 > -greg Robert, Reworked as indicated, thanks for pointing out the anti-pattern I'd missed. best. -greg >> -- =20 >> Robert Haas >> EDB: http://www.enterprisedb.com --68c86f6e_162c0d8c_6415 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v3-0001-Add-a-module-that-tests-Bitmapset.patch" RnJvbSBlODNiMGU3YTNkNjJiMTRhMTRjNTdhYjZjZTU5OTZlZmNkZTM4YWYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogV2VkLCAx MyBBdWcgMjAyNSAxNTo0MDozMSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjNdIEFkZCBhIG1vZHVs ZSB0aGF0IHRlc3RzIEJpdG1hcHNldAoKQmFzaWMgdGVzdHMgZm9yIEJpdG1hcHNldCB0byBlbnN1 cmUgZnVuY3Rpb25hbGl0eSBhbmQgaGVscCBwcmV2ZW50CnVuaW50ZW50aW9uYWwgYnJlYWtpbmcg Y2hhbmdlcyBpbiB0aGUgZnV0dXJlLgotLS0KIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC8u Z2l0aWdub3JlICAgIHwgICA0ICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvTWFr ZWZpbGUgICAgICB8ICAyMyArCiAuLi4vZXhwZWN0ZWQvdGVzdF9iaXRtYXBzZXQub3V0ICAgICAg ICAgICAgICAgfCAgNDYgKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvbWVzb24u YnVpbGQgICB8ICAzMyArCiAuLi4vdGVzdF9iaXRtYXBzZXQvc3FsL3Rlc3RfYml0bWFwc2V0LnNx bCAgICAgfCAgMzIgKwogLi4uL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LS0xLjAuc3Fs ICAgIHwgIDM4ICsKIC4uLi9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmMg ICB8IDcyOCArKysrKysrKysrKysrKysrKysKIC4uLi90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1h cHNldC5jb250cm9sICAgICB8ICAgNCArCiAxMCBmaWxlcyBjaGFuZ2VkLCA5MTAgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv LmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRt YXBzZXQvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Yml0bWFwc2V0L2V4cGVjdGVkL3Rlc3RfYml0bWFwc2V0Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3NxbC90ZXN0X2JpdG1hcHNl dC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0 L3Rlc3RfYml0bWFwc2V0LS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5jb250cm9sCgpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMv TWFrZWZpbGUKaW5kZXggOTAzYThhYzE1MWEuLjk0MDcxZWMwZTE2IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKQEAg LTE2LDYgKzE2LDcgQEAgU1VCRElSUyA9IFwKIAkJICBzcGdpc3RfbmFtZV9vcHMgXAogCQkgIHRl c3RfYWlvIFwKIAkJICB0ZXN0X2JpbmFyeWhlYXAgXAorCQkgIHRlc3RfYml0bWFwc2V0IFwKIAkJ ICB0ZXN0X2Jsb29tZmlsdGVyIFwKIAkJICB0ZXN0X2NvcHlfY2FsbGJhY2tzIFwKIAkJICB0ZXN0 X2N1c3RvbV9ybWdycyBcCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxk IGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAppbmRleCA5M2JlMGY1NzI4OS4uZDhmNWM5 Yzc0OTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMTUsNiArMTUsNyBAQCBzdWJkaXIoJ3NwZ2lz dF9uYW1lX29wcycpCiBzdWJkaXIoJ3NzbF9wYXNzcGhyYXNlX2NhbGxiYWNrJykKIHN1YmRpcign dGVzdF9haW8nKQogc3ViZGlyKCd0ZXN0X2JpbmFyeWhlYXAnKQorc3ViZGlyKCd0ZXN0X2JpdG1h cHNldCcpCiBzdWJkaXIoJ3Rlc3RfYmxvb21maWx0ZXInKQogc3ViZGlyKCd0ZXN0X2NvcHlfY2Fs bGJhY2tzJykKIHN1YmRpcigndGVzdF9jdXN0b21fcm1ncnMnKQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC8uZ2l0aWdub3JlIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2JpdG1hcHNldC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi41ZGNiM2ZmOTcyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9iaXRtYXBzZXQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKKyMgR2VuZXJhdGVkIHN1 YmRpcmVjdG9yaWVzCisvbG9nLworL3Jlc3VsdHMvCisvdG1wX2NoZWNrLwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9iaXRtYXBzZXQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjY3MTk5ZDQwZDczCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2JpdG1hcHNldC9NYWtlZmlsZQpAQCAtMCwwICsxLDIzIEBACisjIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9iaXRtYXBzZXQvTWFrZWZpbGUKKworTU9EVUxFX2JpZyA9IHRlc3RfYml0bWFw c2V0CitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0ZXN0X2JpdG1hcHNldC5vCitQR0ZJTEVE RVNDID0gInRlc3RfYml0bWFwc2V0IC0gdGVzdCBjb2RlIGZvciBzcmMvaW5jbHVkZS9ub2Rlcy9i aXRtYXBzZXQuaCIKKworRVhURU5TSU9OID0gdGVzdF9iaXRtYXBzZXQKK0RBVEEgPSB0ZXN0X2Jp dG1hcHNldC0tMS4wLnNxbAorCitSRUdSRVNTID0gdGVzdF9iaXRtYXBzZXQKKworaWZkZWYgVVNF X1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklH KSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9iaXRtYXBzZXQKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQo dG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2Rpcikv Y29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9iaXRtYXBzZXQvZXhwZWN0ZWQvdGVzdF9iaXRtYXBzZXQub3V0IGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9leHBlY3RlZC90ZXN0X2JpdG1hcHNldC5vdXQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjljYzJmOWY5NTUyCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9leHBlY3RlZC90ZXN0 X2JpdG1hcHNldC5vdXQKQEAgLTAsMCArMSw0NiBAQAorQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2Jp dG1hcHNldDsKKy0tCistLSBBbGwgdGhlIGxvZ2ljIGlzIGluIHRoZSB0ZXN0X2JpdG1hcHNldCgp IGZ1bmN0aW9uLiBJdCB3aWxsIHRocm93CistLSBhbiBlcnJvciBpZiBzb21ldGhpbmcgZmFpbHMu CistLQorLS0gUnVuIHRoZSBtYWluIGNvbXByZWhlbnNpdmUgdGVzdHMKK1NFTEVDVCB0ZXN0X2Jp dG1hcHNldCgpOworTk9USUNFOiAgc3RhcnRpbmcgYml0bWFwc2V0IHRlc3RzCitOT1RJQ0U6ICB0 ZXN0aW5nIGVtcHR5IGJpdG1hcHNldCBvcGVyYXRpb25zCitOT1RJQ0U6ICB0ZXN0aW5nIHNpbmds ZSBlbGVtZW50IGJpdG1hcHNldCBvcGVyYXRpb25zCitOT1RJQ0U6ICB0ZXN0aW5nIG11bHRpcGxl IGVsZW1lbnRzIGFuZCBzZXQgb3BlcmF0aW9ucworTk9USUNFOiAgdGVzdGluZyBwcmV2X21lbWJl ciBlZGdlIGNhc2VzCitOT1RJQ0U6ICB0ZXN0aW5nIGVkZ2UgY2FzZXMgYW5kIGJvdW5kYXJ5IGNv bmRpdGlvbnMKK05PVElDRTogIHRlc3RpbmcgaXRlcmF0aW9uIGZ1bmN0aW9ucworTk9USUNFOiAg dGVzdGluZyBjb21wcmVoZW5zaXZlIHNldCBvcGVyYXRpb25zCitOT1RJQ0U6ICB0ZXN0aW5nIHJh bmRvbWl6ZWQgb3BlcmF0aW9ucworTk9USUNFOiAgcmFuZG9taXplZCB0ZXN0aW5nIGNvbXBsZXRl ZCBzdWNjZXNzZnVsbHkKK05PVElDRTogIHRlc3RpbmcgYWR2YW5jZWQgZnVuY3Rpb25zCitOT1RJ Q0U6ICBhbGwgYml0bWFwc2V0IHRlc3RzIHBhc3NlZAorIHRlc3RfYml0bWFwc2V0IAorLS0tLS0t LS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBUZXN0IGVycm9yIGNvbmRpdGlvbnMgLSB0aGVz ZSBzaG91bGQgYWxsIGZhaWwgd2l0aCBzcGVjaWZpYyBlcnJvciBtZXNzYWdlcworLS0gVGVzdCBi bXNfbWFrZV9zaW5nbGV0b24gd2l0aCBuZWdhdGl2ZSBtZW1iZXIKK1NFTEVDVCB0ZXN0X2Jtc19t YWtlX3NpbmdsZXRvbl9uZWdhdGl2ZSgpOyAtLSBUaGlzIHNob3VsZCBFUlJPUgorRVJST1I6ICBu ZWdhdGl2ZSBiaXRtYXBzZXQgbWVtYmVyIG5vdCBhbGxvd2VkCistLSBUZXN0IGJtc19pc19tZW1i ZXIgd2l0aCBuZWdhdGl2ZSBtZW1iZXIKK1NFTEVDVCB0ZXN0X2Jtc19pc19tZW1iZXJfbmVnYXRp dmUoKTsgLS0gVGhpcyBzaG91bGQgRVJST1IKK0VSUk9SOiAgbmVnYXRpdmUgYml0bWFwc2V0IG1l bWJlciBub3QgYWxsb3dlZAorLS0gVGVzdCBibXNfYWRkX21lbWJlciB3aXRoIG5lZ2F0aXZlIG1l bWJlcgorU0VMRUNUIHRlc3RfYm1zX2FkZF9tZW1iZXJfbmVnYXRpdmUoKTsgLS0gVGhpcyBzaG91 bGQgRVJST1IKK0VSUk9SOiAgbmVnYXRpdmUgYml0bWFwc2V0IG1lbWJlciBub3QgYWxsb3dlZAor LS0gVGVzdCBibXNfZGVsX21lbWJlciB3aXRoIG5lZ2F0aXZlIG1lbWJlcgorU0VMRUNUIHRlc3Rf Ym1zX2RlbF9tZW1iZXJfbmVnYXRpdmUoKTsgLS0gVGhpcyBzaG91bGQgRVJST1IKK0VSUk9SOiAg bmVnYXRpdmUgYml0bWFwc2V0IG1lbWJlciBub3QgYWxsb3dlZAorLS0gVGVzdCBibXNfYWRkX3Jh bmdlIHdpdGggbmVnYXRpdmUgbG93ZXIgYm91bmQKK1NFTEVDVCB0ZXN0X2Jtc19hZGRfcmFuZ2Vf bmVnYXRpdmUoKTsgLS0gVGhpcyBzaG91bGQgRVJST1IKK0VSUk9SOiAgbmVnYXRpdmUgYml0bWFw c2V0IG1lbWJlciBub3QgYWxsb3dlZAorLS0gVGVzdCBibXNfc2luZ2xldG9uX21lbWJlciBvbiBl bXB0eSBzZXQKK1NFTEVDVCB0ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyX2VtcHR5KCk7IC0tIFRo aXMgc2hvdWxkIEVSUk9SCitFUlJPUjogIGJpdG1hcHNldCBpcyBlbXB0eQorLS0gVGVzdCBibXNf c2luZ2xldG9uX21lbWJlciBvbiBtdWx0aXBsZSBtZW1iZXIgc2V0CitTRUxFQ1QgdGVzdF9ibXNf c2luZ2xldG9uX21lbWJlcl9tdWx0aXBsZSgpOyAtLSBUaGlzIHNob3VsZCBFUlJPUgorRVJST1I6 ICBiaXRtYXBzZXQgaGFzIG11bHRpcGxlIG1lbWJlcnMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9iaXRtYXBzZXQvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Yml0bWFwc2V0L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi44NDhmN2E0NGViOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9iaXRtYXBzZXQvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5cmlnaHQgKGMp IDIwMjQtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordGVzdF9i aXRtYXBzZXRfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9iaXRtYXBzZXQuYycsCispCisKK2lm IGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X2JpdG1hcHNldF9zb3VyY2VzICs9IHJj X2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUn LCAndGVzdF9iaXRtYXBzZXQnLAorICAgICctLUZJTEVERVNDJywgJ3Rlc3RfYml0bWFwc2V0IC0g dGVzdCBjb2RlIGZvciBzcmMvaW5jbHVkZS9ub2Rlcy9iaXRtYXBzZXQuaCcsXSkKK2VuZGlmCisK K3Rlc3RfYml0bWFwc2V0ID0gc2hhcmVkX21vZHVsZSgndGVzdF9iaXRtYXBzZXQnLAorICB0ZXN0 X2JpdG1hcHNldF9zb3VyY2VzLAorICBrd2FyZ3M6IHBnX3Rlc3RfbW9kX2FyZ3MsCispCit0ZXN0 X2luc3RhbGxfbGlicyArPSB0ZXN0X2JpdG1hcHNldAorCit0ZXN0X2luc3RhbGxfZGF0YSArPSBm aWxlcygKKyAgJ3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wnLAorICAndGVzdF9iaXRtYXBzZXQtLTEu MC5zcWwnLAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3Rlc3RfYml0bWFwc2V0JywKKyAg J3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRf YnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAndGVzdF9i aXRtYXBzZXQnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYml0bWFwc2V0L3NxbC90ZXN0X2JpdG1hcHNldC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYml0bWFwc2V0L3NxbC90ZXN0X2JpdG1hcHNldC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE1Yjk0NmIxNjYxCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9zcWwvdGVzdF9iaXRtYXBzZXQuc3FsCkBAIC0w LDAgKzEsMzIgQEAKK0NSRUFURSBFWFRFTlNJT04gdGVzdF9iaXRtYXBzZXQ7CisKKy0tCistLSBB bGwgdGhlIGxvZ2ljIGlzIGluIHRoZSB0ZXN0X2JpdG1hcHNldCgpIGZ1bmN0aW9uLiBJdCB3aWxs IHRocm93CistLSBhbiBlcnJvciBpZiBzb21ldGhpbmcgZmFpbHMuCistLQorCistLSBSdW4gdGhl IG1haW4gY29tcHJlaGVuc2l2ZSB0ZXN0cworU0VMRUNUIHRlc3RfYml0bWFwc2V0KCk7CisKKy0t IFRlc3QgZXJyb3IgY29uZGl0aW9ucyAtIHRoZXNlIHNob3VsZCBhbGwgZmFpbCB3aXRoIHNwZWNp ZmljIGVycm9yIG1lc3NhZ2VzCisKKy0tIFRlc3QgYm1zX21ha2Vfc2luZ2xldG9uIHdpdGggbmVn YXRpdmUgbWVtYmVyCitTRUxFQ1QgdGVzdF9ibXNfbWFrZV9zaW5nbGV0b25fbmVnYXRpdmUoKTsg LS0gVGhpcyBzaG91bGQgRVJST1IKKworLS0gVGVzdCBibXNfaXNfbWVtYmVyIHdpdGggbmVnYXRp dmUgbWVtYmVyCitTRUxFQ1QgdGVzdF9ibXNfaXNfbWVtYmVyX25lZ2F0aXZlKCk7IC0tIFRoaXMg c2hvdWxkIEVSUk9SCisKKy0tIFRlc3QgYm1zX2FkZF9tZW1iZXIgd2l0aCBuZWdhdGl2ZSBtZW1i ZXIKK1NFTEVDVCB0ZXN0X2Jtc19hZGRfbWVtYmVyX25lZ2F0aXZlKCk7IC0tIFRoaXMgc2hvdWxk IEVSUk9SCisKKy0tIFRlc3QgYm1zX2RlbF9tZW1iZXIgd2l0aCBuZWdhdGl2ZSBtZW1iZXIKK1NF TEVDVCB0ZXN0X2Jtc19kZWxfbWVtYmVyX25lZ2F0aXZlKCk7IC0tIFRoaXMgc2hvdWxkIEVSUk9S CisKKy0tIFRlc3QgYm1zX2FkZF9yYW5nZSB3aXRoIG5lZ2F0aXZlIGxvd2VyIGJvdW5kCitTRUxF Q1QgdGVzdF9ibXNfYWRkX3JhbmdlX25lZ2F0aXZlKCk7IC0tIFRoaXMgc2hvdWxkIEVSUk9SCisK Ky0tIFRlc3QgYm1zX3NpbmdsZXRvbl9tZW1iZXIgb24gZW1wdHkgc2V0CitTRUxFQ1QgdGVzdF9i bXNfc2luZ2xldG9uX21lbWJlcl9lbXB0eSgpOyAtLSBUaGlzIHNob3VsZCBFUlJPUgorCistLSBU ZXN0IGJtc19zaW5nbGV0b25fbWVtYmVyIG9uIG11bHRpcGxlIG1lbWJlciBzZXQKK1NFTEVDVCB0 ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyX211bHRpcGxlKCk7IC0tIFRoaXMgc2hvdWxkIEVSUk9S CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFw c2V0LS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1h cHNldC0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWY3 MmMxY2UyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFw c2V0L3Rlc3RfYml0bWFwc2V0LS0xLjAuc3FsCkBAIC0wLDAgKzEsMzggQEAKKy8qIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQtLTEuMC5zcWwgKi8KKworLS0g Y29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENS RUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2JpdG1hcHNl dCIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKKy0tIE1haW4gdGVzdCBmdW5jdGlvbgorQ1JF QVRFIEZVTkNUSU9OIHRlc3RfYml0bWFwc2V0KCkKK1JFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNU UklDVAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworLS0gRXJyb3IgY29uZGl0 aW9uIHRlc3RpbmcgZnVuY3Rpb25zCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfbWFrZV9zaW5n bGV0b25fbmVnYXRpdmUoKQorUkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQgU1RSSUNUCitBUyAnTU9E VUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfaXNf bWVtYmVyX25lZ2F0aXZlKCkKK1JFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNUUklDVAorQVMgJ01P RFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2Fk ZF9tZW1iZXJfbmVnYXRpdmUoKQorUkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQgU1RSSUNUCitBUyAn TU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNf ZGVsX21lbWJlcl9uZWdhdGl2ZSgpCitSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKK0FT ICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jt c19hZGRfcmFuZ2VfbmVnYXRpdmUoKQorUkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQgU1RSSUNUCitB UyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9i bXNfc2luZ2xldG9uX21lbWJlcl9lbXB0eSgpCitSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJ Q1QKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0 ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyX211bHRpcGxlKCkKK1JFVFVSTlMgcGdfY2F0YWxvZy52 b2lkIFNUUklDVAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQuYyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2E1NDY5YmM2YWUKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmMKQEAgLTAs MCArMSw3MjggQEAKKy8qCisgKiB0ZXN0X2JpdG1hcHNldC5jCisgKiAgICAgIFRlc3QgbW9kdWxl IGZvciBiaXRtYXBzZXQgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIG1vZHVsZSB0ZXN0cyB0 aGUgYml0bWFwc2V0IGltcGxlbWVudGF0aW9uIGluIFBvc3RncmVTUUwsCisgKiBjb3ZlcmluZyBh bGwgcHVibGljIEFQSSBmdW5jdGlvbnMsIGVkZ2UgY2FzZXMsIGFuZCBtZW1vcnkgdXNhZ2UuCisg KgorICogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5jCisg Ki8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tb24vcGdfcHJuZy5o IgorI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNs dWRlICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCisKK1BH X01PRFVMRV9NQUdJQzsKKworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2JpdG1hcHNldCk7CitQ R19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uX25lZ2F0aXZlKTsKK1BH X0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfaXNfbWVtYmVyX25lZ2F0aXZlKTsKK1BHX0ZVTkNU SU9OX0lORk9fVjEodGVzdF9ibXNfYWRkX21lbWJlcl9uZWdhdGl2ZSk7CitQR19GVU5DVElPTl9J TkZPX1YxKHRlc3RfYm1zX2RlbF9tZW1iZXJfbmVnYXRpdmUpOworUEdfRlVOQ1RJT05fSU5GT19W MSh0ZXN0X2Jtc19hZGRfcmFuZ2VfbmVnYXRpdmUpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0 X2Jtc19zaW5nbGV0b25fbWVtYmVyX2VtcHR5KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9i bXNfc2luZ2xldG9uX21lbWJlcl9tdWx0aXBsZSk7CisKKyNkZWZpbmUgRVhQRUNUX1RSVUUoZXhw cikgXAorICAgIGRvIHsgXAorCWlmICghKGV4cHIpKSBcCisJICAgIGVsb2coRVJST1IsIFwKKwkJ ICIlcyB3YXMgdW5leHBlY3RlZGx5IGZhbHNlIGluIGZpbGUgXCIlc1wiIGxpbmUgJXUiLCBcCisJ CSAjZXhwciwgX19GSUxFX18sIF9fTElORV9fKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZp bmUgRVhQRUNUX0ZBTFNFKGV4cHIpIFwKKyAgICBkbyB7IFwKKwlpZiAoZXhwcikgXAorCSAgICBl bG9nKEVSUk9SLCBcCisJCSAiJXMgd2FzIHVuZXhwZWN0ZWRseSB0cnVlIGluIGZpbGUgXCIlc1wi IGxpbmUgJXUiLCBcCisJCSAjZXhwciwgX19GSUxFX18sIF9fTElORV9fKTsgXAorICAgIH0gd2hp bGUgKDApCisKKyNkZWZpbmUgRVhQRUNUX0VRX0lOVChyZXN1bHRfZXhwciwgZXhwZWN0ZWRfZXhw cikgXAorICAgIGRvIHsgXAorCWludCBfcmVzdWx0ID0gKHJlc3VsdF9leHByKTsgXAorCWludCBf ZXhwZWN0ZWQgPSAoZXhwZWN0ZWRfZXhwcik7IFwKKwlpZiAoX3Jlc3VsdCAhPSBfZXhwZWN0ZWQp IFwKKwkgICAgZWxvZyhFUlJPUiwgXAorCQkgIiVzIHlpZWxkZWQgJWQsIGV4cGVjdGVkICVkICgl cykgaW4gZmlsZSBcIiVzXCIgbGluZSAldSIsIFwKKwkJICNyZXN1bHRfZXhwciwgX3Jlc3VsdCwg X2V4cGVjdGVkLCAjZXhwZWN0ZWRfZXhwciwgX19GSUxFX18sIF9fTElORV9fKTsgXAorICAgIH0g d2hpbGUgKDApCisKKyNkZWZpbmUgRVhQRUNUX05VTEwoZXhwcikgXAorICAgIGRvIHsgXAorCWlm ICgoZXhwcikgIT0gTlVMTCkgXAorCSAgICBlbG9nKEVSUk9SLCBcCisJCSAiJXMgd2FzIHVuZXhw ZWN0ZWRseSBub24tTlVMTCBpbiBmaWxlIFwiJXNcIiBsaW5lICV1IiwgXAorCQkgI2V4cHIsIF9f RklMRV9fLCBfX0xJTkVfXyk7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVYUEVDVF9O T1RfTlVMTChleHByKSBcCisgICAgZG8geyBcCisJaWYgKChleHByKSA9PSBOVUxMKSBcCisJICAg IGVsb2coRVJST1IsIFwKKwkJICIlcyB3YXMgdW5leHBlY3RlZGx5IE5VTEwgaW4gZmlsZSBcIiVz XCIgbGluZSAldSIsIFwKKwkJICNleHByLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisgICAgfSB3 aGlsZSAoMCkKKworI2lmZGVmIERFQlVHCisKK3N0YXRpYyB2b2lkCitlbG9nX2JpdG1hcHNldChp bnQgZWxldmVsLCBjb25zdCBjaGFyICpsYWJlbCwgY29uc3QgQml0bWFwc2V0ICpibXMpCit7CisJ U3RyaW5nSW5mb0RhdGEgYnVmOworCWludAkJCW1lbWJlcjsKKwlib29sCQlmaXJzdCA9IHRydWU7 CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKworCWlmIChsYWJlbCkKKwkJYXBwZW5kU3RyaW5n SW5mbygmYnVmLCAiJXM6ICIsIGxhYmVsKTsKKworCWlmICghYm1zX2lzX2VtcHR5KGJtcykpCisJ eworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAneycpOworCQltZW1iZXIgPSAtMTsKKwkJ d2hpbGUgKChtZW1iZXIgPSBibXNfbmV4dF9tZW1iZXIoYm1zLCBtZW1iZXIpKSA+PSAwKQorCQl7 CisJCQlpZiAoIWZpcnN0KQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIiwgIik7 CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIG1lbWJlcik7CisJCQlmaXJzdCA9IGZh bHNlOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICd9Jyk7CisJfQorCWVsc2UK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiRU1QVFkiKTsKKworCWVsb2coZWxldmVs LCAiJXMiLCBidWYuZGF0YSk7CisJcGZyZWUoYnVmLmRhdGEpOworfQorCisjZW5kaWYKKworRGF0 dW0KK3Rlc3RfYm1zX21ha2Vfc2luZ2xldG9uX25lZ2F0aXZlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJLyogVGhpcyBzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIG5lZ2F0aXZlIG1lbWJlciAqLwor CWJtc19tYWtlX3NpbmdsZXRvbigtMSk7CisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworRGF0dW0K K3Rlc3RfYm1zX2lzX21lbWJlcl9uZWdhdGl2ZShQR19GVU5DVElPTl9BUkdTKQoreworCS8qIFRo aXMgc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBuZWdhdGl2ZSBtZW1iZXIgKi8KKwlibXNfaXNf bWVtYmVyKC01LCBOVUxMKTsKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCitEYXR1bQordGVzdF9i bXNfYWRkX21lbWJlcl9uZWdhdGl2ZShQR19GVU5DVElPTl9BUkdTKQoreworCS8qIFRoaXMgc2hv dWxkIHRocm93IGFuIGVycm9yIGZvciBuZWdhdGl2ZSBtZW1iZXIgKi8KKwlibXNfYWRkX21lbWJl cihOVUxMLCAtMTApOworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19k ZWxfbWVtYmVyX25lZ2F0aXZlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJLyogVGhpcyBzaG91bGQg dGhyb3cgYW4gZXJyb3IgZm9yIG5lZ2F0aXZlIG1lbWJlciAqLworCWJtc19kZWxfbWVtYmVyKE5V TEwsIC0yMCk7CisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworRGF0dW0KK3Rlc3RfYm1zX2FkZF9y YW5nZV9uZWdhdGl2ZShQR19GVU5DVElPTl9BUkdTKQoreworCS8qIFRoaXMgc2hvdWxkIHRocm93 IGFuIGVycm9yIGZvciBuZWdhdGl2ZSBsb3dlciBib3VuZCAqLworCWJtc19hZGRfcmFuZ2UoTlVM TCwgLTUsIDEwKTsKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCitEYXR1bQordGVzdF9ibXNfc2lu Z2xldG9uX21lbWJlcl9lbXB0eShQR19GVU5DVElPTl9BUkdTKQoreworCS8qIFRoaXMgc2hvdWxk IHRocm93IGFuIGVycm9yIGZvciBlbXB0eSBzZXQgKi8KKwlibXNfc2luZ2xldG9uX21lbWJlcihO VUxMKTsKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCitEYXR1bQordGVzdF9ibXNfc2luZ2xldG9u X21lbWJlcl9tdWx0aXBsZShQR19GVU5DVElPTl9BUkdTKQoreworCUJpdG1hcHNldCAgKmJtcyA9 IE5VTEw7CisKKwkvKiBDcmVhdGUgYSBzZXQgd2l0aCBtdWx0aXBsZSBtZW1iZXJzICovCisJYm1z ID0gYm1zX2FkZF9tZW1iZXIoYm1zLCAxKTsKKwlibXMgPSBibXNfYWRkX21lbWJlcihibXMsIDIp OworCisJLyogVGhpcyBzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIG11bHRpcGxlIG1lbWJlcnMg Ki8KKwlibXNfc2luZ2xldG9uX21lbWJlcihibXMpOworCisJYm1zX2ZyZWUoYm1zKTsKKwlQR19S RVRVUk5fVk9JRCgpOworfQorCisKKy8qIFRlc3QgaGFzaCBmdW5jdGlvbnMgYW5kIGFkdmFuY2Vk IG9wZXJhdGlvbnMgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X2FkdmFuY2VkX2Z1bmN0aW9ucyh2b2lk KQoreworCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMOworCUJpdG1hcHNldCAgKmJtczIgPSBOVUxM OworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisJTGlzdAkgICAqaW50X2xpc3QgPSBOSUw7 CisJdWludDMyCQloYXNoMSwKKwkJCQloYXNoMjsKKwlCaXRtYXBzZXQgICpwdHIxLAorCQkJICAg KnB0cjI7CisKKwllbG9nKE5PVElDRSwgInRlc3RpbmcgYWR2YW5jZWQgZnVuY3Rpb25zIik7CisK KwkvKiBUZXN0IGhhc2ggZnVuY3Rpb25zICovCisJYm1zMSA9IGJtc19hZGRfbWVtYmVyKGJtczEs IDEwKTsKKwlibXMxID0gYm1zX2FkZF9tZW1iZXIoYm1zMSwgMjApOworCWJtczIgPSBibXNfYWRk X21lbWJlcihibXMyLCAxMCk7CisJYm1zMiA9IGJtc19hZGRfbWVtYmVyKGJtczIsIDIwKTsKKwor CWhhc2gxID0gYm1zX2hhc2hfdmFsdWUoYm1zMSk7CisJaGFzaDIgPSBibXNfaGFzaF92YWx1ZShi bXMyKTsKKwlFWFBFQ1RfRVFfSU5UKGhhc2gxLCBoYXNoMik7CisKKwkvKiBUZXN0IGJpdG1hcF9o YXNoIGFuZCBiaXRtYXBfbWF0Y2ggKi8KKwlwdHIxID0gYm1zMTsKKwlwdHIyID0gYm1zMjsKKwlF WFBFQ1RfRVFfSU5UKGJpdG1hcF9oYXNoKCZwdHIxLCBzaXplb2YoQml0bWFwc2V0ICopKSwKKwkJ CQkgIGJpdG1hcF9oYXNoKCZwdHIyLCBzaXplb2YoQml0bWFwc2V0ICopKSk7CisJRVhQRUNUX0VR X0lOVChiaXRtYXBfbWF0Y2goJnB0cjEsICZwdHIyLCBzaXplb2YoQml0bWFwc2V0ICopKSwgMCk7 CisKKwkvKiBUZXN0IGJtc19vdmVybGFwX2xpc3QgKi8KKwlpbnRfbGlzdCA9IGxhcHBlbmRfaW50 KGludF9saXN0LCA1KTsKKwlpbnRfbGlzdCA9IGxhcHBlbmRfaW50KGludF9saXN0LCAxMCk7CisJ aW50X2xpc3QgPSBsYXBwZW5kX2ludChpbnRfbGlzdCwgMzApOworCisJRVhQRUNUX1RSVUUoYm1z X292ZXJsYXBfbGlzdChibXMxLCBpbnRfbGlzdCkpOworCUVYUEVDVF9GQUxTRShibXNfb3Zlcmxh cF9saXN0KE5VTEwsIGludF9saXN0KSk7CisJRVhQRUNUX0ZBTFNFKGJtc19vdmVybGFwX2xpc3Qo Ym1zMSwgTklMKSk7CisKKwkvKiBUZXN0IGJtc19hZGRfcmFuZ2UgKi8KKwlyZXN1bHQgPSBibXNf YWRkX3JhbmdlKE5VTEwsIDUsIDgpOworCUVYUEVDVF9FUV9JTlQoYm1zX251bV9tZW1iZXJzKHJl c3VsdCksIDQpOwkvKiA1LCA2LCA3LCA4ICovCisJZm9yIChpbnQgaSA9IDU7IGkgPD0gODsgaSsr KQorCQlFWFBFQ1RfVFJVRShibXNfaXNfbWVtYmVyKGksIHJlc3VsdCkpOworCWJtc19mcmVlKHJl c3VsdCk7CisKKwkvKiBUZXN0IGVtcHR5IHJhbmdlICovCisJcmVzdWx0ID0gYm1zX2FkZF9yYW5n ZShOVUxMLCAxMCwgNSk7CisJRVhQRUNUX05VTEwocmVzdWx0KTsKKworCS8qIFRlc3QgcmVjeWNs aW5nIG9wZXJhdGlvbnMgKi8KKwlyZXN1bHQgPSBibXNfYWRkX21lbWJlcnMoYm1zMSwgYm1zMik7 CisJRVhQRUNUX1RSVUUoYm1zMSA9PSByZXN1bHQpOwkvKiBibXMxIGlzIHJlY3ljbGVkICovCisJ RVhQRUNUX0VRX0lOVChibXNfbnVtX21lbWJlcnMocmVzdWx0KSwgMik7CisKKwlyZXN1bHQgPSBi bXNfcmVwbGFjZV9tZW1iZXJzKHJlc3VsdCwgYm1zMik7CisJRVhQRUNUX1RSVUUoYm1zX2VxdWFs KHJlc3VsdCwgYm1zMikpOworCisJYm1zX2ZyZWUocmVzdWx0KTsJCQkvKiB3aGljaCBpcyBibXMx ICovCisJYm1zX2ZyZWUoYm1zMik7CisJbGlzdF9mcmVlKGludF9saXN0KTsKK30KKworLyogVGVz dCBwcmV2X21lbWJlciBlZGdlIGNhc2VzICovCitzdGF0aWMgdm9pZAordGVzdF9wcmV2X21lbWJl cl9lZGdlX2Nhc2VzKHZvaWQpCit7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKworCWVsb2co Tk9USUNFLCAidGVzdGluZyBwcmV2X21lbWJlciBlZGdlIGNhc2VzIik7CisKKwkvKiBUZXN0IHBy ZXZfbWVtYmVyIHdpdGggLTEgb24gZW1wdHkgc2V0ICovCisJRVhQRUNUX0VRX0lOVChibXNfcHJl dl9tZW1iZXIoYm1zLCAtMSksIC0yKTsKKworCS8qIFRlc3QgcHJldl9tZW1iZXIgd2l0aCAtMSBv biBub24tZW1wdHkgc2V0IChmaW5kIGhpZ2hlc3QpICovCisJYm1zID0gYm1zX2FkZF9tZW1iZXIo Ym1zLCAxMDApOworCUVYUEVDVF9FUV9JTlQoYm1zX3ByZXZfbWVtYmVyKGJtcywgLTEpLCAxMDAp OworCisJYm1zX2ZyZWUoYm1zKTsKK30KKworLyogUmFuZG9taXplZCB0ZXN0aW5nIHNpbWlsYXIg dG8gdGVzdF9yYWRpeHRyZWUuYyAqLworc3RhdGljIHZvaWQKK3Rlc3RfcmFuZG9tX29wZXJhdGlv bnModm9pZCkKK3sKKwlCaXRtYXBzZXQgICpibXMxID0gTlVMTDsKKwlCaXRtYXBzZXQgICpibXMy ID0gTlVMTDsKKwlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOworCXBnX3Bybmdfc3RhdGUgc3Rh dGU7CisJdWludDY0CQlzZWVkID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCWludAkJCW51bV9v cHMgPSA1MDAwOworCWludAkJCW1heF9yYW5nZSA9IDIwMDA7CisJaW50CQkgICAqbWVtYmVyczsK KwlpbnQJCQludW1fbWVtYmVycyA9IDA7CisKKwllbG9nKE5PVElDRSwgInRlc3RpbmcgcmFuZG9t aXplZCBvcGVyYXRpb25zIik7CisKKwlwZ19wcm5nX3NlZWQoJnN0YXRlLCBzZWVkKTsKKwltZW1i ZXJzID0gcGFsbG9jKHNpemVvZihpbnQpICogbnVtX29wcyk7CisKKwkvKiBQaGFzZSAxOiBSYW5k b20gaW5zZXJ0aW9ucyAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX29wcyAvIDI7IGkrKykK Kwl7CisJCWludAkJCW1lbWJlciA9IHBnX3BybmdfdWludDMyKCZzdGF0ZSkgJSBtYXhfcmFuZ2U7 CisKKwkJaWYgKCFibXNfaXNfbWVtYmVyKG1lbWJlciwgYm1zMSkpCisJCXsKKwkJCW1lbWJlcnNb bnVtX21lbWJlcnMrK10gPSBtZW1iZXI7CisJCQlibXMxID0gYm1zX2FkZF9tZW1iZXIoYm1zMSwg bWVtYmVyKTsKKwkJfQorCX0KKworCS8qIFBoYXNlIDI6IFJhbmRvbSBzZXQgb3BlcmF0aW9ucyAq LworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX29wcyAvIDQ7IGkrKykKKwl7CisJCWludAkJCW1l bWJlciA9IHBnX3BybmdfdWludDMyKCZzdGF0ZSkgJSBtYXhfcmFuZ2U7CisKKwkJYm1zMiA9IGJt c19hZGRfbWVtYmVyKGJtczIsIG1lbWJlcik7CisJfQorCisJLyogVGVzdCB1bmlvbiAqLworCXJl c3VsdCA9IGJtc191bmlvbihibXMxLCBibXMyKTsKKwlFWFBFQ1RfTk9UX05VTEwocmVzdWx0KTsK KworCS8qIFZlcmlmeSB1bmlvbiBjb250YWlucyBhbGwgbWVtYmVycyBmcm9tIGZpcnN0IHNldCAq LworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX21lbWJlcnM7IGkrKykKKwl7CisJCWlmICghYm1z X2lzX21lbWJlcihtZW1iZXJzW2ldLCByZXN1bHQpKQorCQkJZWxvZyhFUlJPUiwgInVuaW9uIG1p c3NpbmcgbWVtYmVyICVkIiwgbWVtYmVyc1tpXSk7CisJfQorCWJtc19mcmVlKHJlc3VsdCk7CisK KwkvKiBUZXN0IGludGVyc2VjdGlvbiAqLworCXJlc3VsdCA9IGJtc19pbnRlcnNlY3QoYm1zMSwg Ym1zMik7CisJaWYgKHJlc3VsdCAhPSBOVUxMKQorCXsKKwkJaW50CQkJbWVtYmVyID0gLTE7CisK KwkJd2hpbGUgKChtZW1iZXIgPSBibXNfbmV4dF9tZW1iZXIocmVzdWx0LCBtZW1iZXIpKSA+PSAw KQorCQl7CisJCQlpZiAoIWJtc19pc19tZW1iZXIobWVtYmVyLCBibXMxKSB8fCAhYm1zX2lzX21l bWJlcihtZW1iZXIsIGJtczIpKQorCQkJCWVsb2coRVJST1IsICJpbnRlcnNlY3Rpb24gY29udGFp bnMgaW52YWxpZCBtZW1iZXIgJWQiLCBtZW1iZXIpOworCQl9CisJCWJtc19mcmVlKHJlc3VsdCk7 CisJfQorCisJLyogUGhhc2UgMzogVGVzdCByYW5nZSBvcGVyYXRpb25zICovCisJcmVzdWx0ID0g TlVMTDsKKwlmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKwl7CisJCWludAkJCWxvd2VyID0g cGdfcHJuZ191aW50MzIoJnN0YXRlKSAlIDEwMDsKKwkJaW50CQkJdXBwZXIgPSBsb3dlciArIChw Z19wcm5nX3VpbnQzMigmc3RhdGUpICUgMjApOworCisJCXJlc3VsdCA9IGJtc19hZGRfcmFuZ2Uo cmVzdWx0LCBsb3dlciwgdXBwZXIpOworCX0KKwlpZiAocmVzdWx0ICE9IE5VTEwpCisJeworCQlF WFBFQ1RfVFJVRShibXNfbnVtX21lbWJlcnMocmVzdWx0KSA+IDApOworCQlibXNfZnJlZShyZXN1 bHQpOworCX0KKworCS8qIENsZWFudXAgKi8KKwlwZnJlZShtZW1iZXJzKTsKKwlibXNfZnJlZShi bXMxKTsKKwlibXNfZnJlZShibXMyKTsKKworCWVsb2coTk9USUNFLCAicmFuZG9taXplZCB0ZXN0 aW5nIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiKTsKK30KKworLyogVGVzdCBlbXB0eSBiaXRtYXBz ZXQgb3BlcmF0aW9ucyAqLworc3RhdGljIHZvaWQKK3Rlc3RfZW1wdHlfYml0bWFwc2V0KHZvaWQp Cit7CisJQml0bWFwc2V0ICAqcmVzdWx0LAorCQkJICAgKmJtcyA9IE5VTEw7CisKKwllbG9nKE5P VElDRSwgInRlc3RpbmcgZW1wdHkgYml0bWFwc2V0IG9wZXJhdGlvbnMiKTsKKworCS8qIFRlc3Qg b3BlcmF0aW9ucyBvbiBOVUxMIGJpdG1hcHNldCAqLworCUVYUEVDVF9UUlVFKGJtc19pc19lbXB0 eShibXMpKTsKKwlFWFBFQ1RfRVFfSU5UKGJtc19udW1fbWVtYmVycyhibXMpLCAwKTsKKwlFWFBF Q1RfRkFMU0UoYm1zX2lzX21lbWJlcigwLCBibXMpKTsKKwlFWFBFQ1RfRkFMU0UoYm1zX2lzX21l bWJlcigxLCBibXMpKTsKKwlFWFBFQ1RfRkFMU0UoYm1zX2lzX21lbWJlcigxMDAsIGJtcykpOwor CUVYUEVDVF9FUV9JTlQoYm1zX25leHRfbWVtYmVyKGJtcywgLTEpLCAtMik7CisJRVhQRUNUX0VR X0lOVChibXNfcHJldl9tZW1iZXIoYm1zLCAtMSksIC0yKTsKKworCS8qIFRlc3QgaGFzaCBvZiBl bXB0eSBzZXQgKi8KKwlFWFBFQ1RfRVFfSU5UKGJtc19oYXNoX3ZhbHVlKGJtcyksIDApOworCisJ LyogVGVzdCBjb21wYXJpc29uIHdpdGggZW1wdHkgc2V0cyAqLworCUVYUEVDVF9FUV9JTlQoYm1z X2NvbXBhcmUoYm1zLCBOVUxMKSwgMCk7CisKKwkvKiBUZXN0IGNvcHkgb2YgZW1wdHkgc2V0ICov CisJcmVzdWx0ID0gYm1zX2NvcHkoYm1zKTsKKwlFWFBFQ1RfTlVMTChyZXN1bHQpOworCisJLyog VGVzdCB1bmlvbiB3aXRoIGVtcHR5IHNldCAqLworCXJlc3VsdCA9IGJtc191bmlvbihibXMsIE5V TEwpOworCUVYUEVDVF9OVUxMKHJlc3VsdCk7CisKKwkvKiBUZXN0IGludGVyc2VjdGlvbiB3aXRo IGVtcHR5IHNldCAqLworCXJlc3VsdCA9IGJtc19pbnRlcnNlY3QoYm1zLCBOVUxMKTsKKwlFWFBF Q1RfTlVMTChyZXN1bHQpOworCisJLyogVGVzdCBkaWZmZXJlbmNlIHdpdGggZW1wdHkgc2V0ICov CisJcmVzdWx0ID0gYm1zX2RpZmZlcmVuY2UoYm1zLCBOVUxMKTsKKwlFWFBFQ1RfTlVMTChyZXN1 bHQpOworCisJLyogVGVzdCBlcXVhbCBjb21wYXJpc29uICovCisJRVhQRUNUX1RSVUUoYm1zX2Vx dWFsKGJtcywgTlVMTCkpOworCUVYUEVDVF9UUlVFKGJtc19lcXVhbChOVUxMLCBibXMpKTsKKwor CS8qIFRlc3Qgc3Vic2V0IG9wZXJhdGlvbnMgKi8KKwlFWFBFQ1RfVFJVRShibXNfaXNfc3Vic2V0 KGJtcywgTlVMTCkpOworCUVYUEVDVF9UUlVFKGJtc19pc19zdWJzZXQoTlVMTCwgYm1zKSk7CisK KwkvKiBUZXN0IG92ZXJsYXAgKi8KKwlFWFBFQ1RfRkFMU0UoYm1zX292ZXJsYXAoYm1zLCBOVUxM KSk7CisJRVhQRUNUX0ZBTFNFKGJtc19vdmVybGFwKE5VTEwsIGJtcykpOworfQorCisvKiBUZXN0 IHNpbmdsZSBlbGVtZW50IGJpdG1hcHNldCBvcGVyYXRpb25zICovCitzdGF0aWMgdm9pZAordGVz dF9zaW5nbGVfZWxlbWVudCh2b2lkKQoreworCUJpdG1hcHNldCAgKnJlc3VsdCwKKwkJCSAgICpi bXMgPSBOVUxMOworCWludAkJCXRlc3RfbWVtYmVyID0gNDI7CisKKwllbG9nKE5PVElDRSwgInRl c3Rpbmcgc2luZ2xlIGVsZW1lbnQgYml0bWFwc2V0IG9wZXJhdGlvbnMiKTsKKworCS8qIEFkZCBz aW5nbGUgZWxlbWVudCAqLworCWJtcyA9IGJtc19hZGRfbWVtYmVyKGJtcywgdGVzdF9tZW1iZXIp OworCUVYUEVDVF9OT1RfTlVMTChibXMpOworCUVYUEVDVF9GQUxTRShibXNfaXNfZW1wdHkoYm1z KSk7CisJRVhQRUNUX0VRX0lOVChibXNfbnVtX21lbWJlcnMoYm1zKSwgMSk7CisJRVhQRUNUX1RS VUUoYm1zX2lzX21lbWJlcih0ZXN0X21lbWJlciwgYm1zKSk7CisJRVhQRUNUX0ZBTFNFKGJtc19p c19tZW1iZXIodGVzdF9tZW1iZXIgLSAxLCBibXMpKTsKKwlFWFBFQ1RfRkFMU0UoYm1zX2lzX21l bWJlcih0ZXN0X21lbWJlciArIDEsIGJtcykpOworCisJLyogVGVzdCBpdGVyYXRpb24gKi8KKwlF WFBFQ1RfRVFfSU5UKGJtc19uZXh0X21lbWJlcihibXMsIC0xKSwgdGVzdF9tZW1iZXIpOworCUVY UEVDVF9FUV9JTlQoYm1zX25leHRfbWVtYmVyKGJtcywgdGVzdF9tZW1iZXIpLCAtMik7CisJRVhQ RUNUX0VRX0lOVChibXNfcHJldl9tZW1iZXIoYm1zLCB0ZXN0X21lbWJlciArIDEpLCB0ZXN0X21l bWJlcik7CisJRVhQRUNUX0VRX0lOVChibXNfcHJldl9tZW1iZXIoYm1zLCB0ZXN0X21lbWJlciks IC0yKTsKKworCS8qIFRlc3QgY29weSAqLworCXJlc3VsdCA9IGJtc19jb3B5KGJtcyk7CisJRVhQ RUNUX05PVF9OVUxMKHJlc3VsdCk7CisJRVhQRUNUX1RSVUUoYm1zX2VxdWFsKGJtcywgcmVzdWx0 KSk7CisJRVhQRUNUX1RSVUUoYm1zX2lzX21lbWJlcih0ZXN0X21lbWJlciwgcmVzdWx0KSk7CisK KwkvKiBUZXN0IG1lbWJlciBpbmRleCAqLworCUVYUEVDVF9FUV9JTlQoYm1zX21lbWJlcl9pbmRl eChibXMsIDQyKSwgMCk7CisJRVhQRUNUX0VRX0lOVChibXNfbWVtYmVyX2luZGV4KGJtcywgNDMp LCAtMSk7CisKKwkvKiBUZXN0IGNvbXBhcmlzb24gKi8KKwlFWFBFQ1RfRVFfSU5UKGJtc19jb21w YXJlKGJtcywgcmVzdWx0KSwgMCk7CisKKwkvKiBUZXN0IHJlbW92ZSBtZW1iZXIgKi8KKwlyZXN1 bHQgPSBibXNfZGVsX21lbWJlcihyZXN1bHQsIHRlc3RfbWVtYmVyKTsKKwlFWFBFQ1RfTlVMTChy ZXN1bHQpOworCisJLyogVGVzdCBjb21wYXJpc29uIGFnYWluICovCisJRVhQRUNUX0VRX0lOVChi bXNfY29tcGFyZShibXMsIHJlc3VsdCksIDEpOworCisJLyogVGVzdCByZW1vdmUgbm9uLWV4aXN0 ZW50IG1lbWJlciAqLworCXJlc3VsdCA9IGJtc19jb3B5KGJtcyk7CisJRVhQRUNUX05PVF9OVUxM KHJlc3VsdCk7CisJcmVzdWx0ID0gYm1zX2RlbF9tZW1iZXIocmVzdWx0LCB0ZXN0X21lbWJlciAr IDEpOworCUVYUEVDVF9OT1RfTlVMTChyZXN1bHQpOworCUVYUEVDVF9UUlVFKGJtc19lcXVhbChi bXMsIHJlc3VsdCkpOworCisJYm1zX2ZyZWUoYm1zKTsKKwlibXNfZnJlZShyZXN1bHQpOworfQor CisvKiBUZXN0IG11bHRpcGxlIGVsZW1lbnRzIGFuZCBzZXQgb3BlcmF0aW9ucyAqLworc3RhdGlj IHZvaWQKK3Rlc3RfbXVsdGlwbGVfZWxlbWVudHModm9pZCkKK3sKKwlCaXRtYXBzZXQgICpibXMx ID0gTlVMTDsKKwlCaXRtYXBzZXQgICpibXMyID0gTlVMTDsKKwlCaXRtYXBzZXQgICpyZXN1bHQg PSBOVUxMOworCWludAkJCWVsZW1lbnRzMVtdID0gezEsIDUsIDEwLCAxNSwgMjAsIDEwMH07CisJ aW50CQkJZWxlbWVudHMyW10gPSB7MywgNSwgMTIsIDE1LCAyNSwgMjAwfTsKKwlpbnQJCQludW1f ZWxlbWVudHMxID0gc2l6ZW9mKGVsZW1lbnRzMSkgLyBzaXplb2YoZWxlbWVudHMxWzBdKTsKKwlp bnQJCQludW1fZWxlbWVudHMyID0gc2l6ZW9mKGVsZW1lbnRzMikgLyBzaXplb2YoZWxlbWVudHMy WzBdKTsKKworCWVsb2coTk9USUNFLCAidGVzdGluZyBtdWx0aXBsZSBlbGVtZW50cyBhbmQgc2V0 IG9wZXJhdGlvbnMiKTsKKworCS8qIEJ1aWxkIGZpcnN0IHNldCAqLworCWZvciAoaW50IGkgPSAw OyBpIDwgbnVtX2VsZW1lbnRzMTsgaSsrKQorCQlibXMxID0gYm1zX2FkZF9tZW1iZXIoYm1zMSwg ZWxlbWVudHMxW2ldKTsKKworCUVYUEVDVF9FUV9JTlQoYm1zX251bV9tZW1iZXJzKGJtczEpLCBu dW1fZWxlbWVudHMxKTsKKworCS8qIEJ1aWxkIHNlY29uZCBzZXQgKi8KKwlmb3IgKGludCBpID0g MDsgaSA8IG51bV9lbGVtZW50czI7IGkrKykKKwkJYm1zMiA9IGJtc19hZGRfbWVtYmVyKGJtczIs IGVsZW1lbnRzMltpXSk7CisKKwlFWFBFQ1RfRVFfSU5UKGJtc19udW1fbWVtYmVycyhibXMyKSwg bnVtX2VsZW1lbnRzMik7CisKKwkvKiBUZXN0IG1lbWJlcnNoaXAgKi8KKwlmb3IgKGludCBpID0g MDsgaSA8IG51bV9lbGVtZW50czE7IGkrKykKKwkJRVhQRUNUX1RSVUUoYm1zX2lzX21lbWJlcihl bGVtZW50czFbaV0sIGJtczEpKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2VsZW1lbnRz MjsgaSsrKQorCQlFWFBFQ1RfVFJVRShibXNfaXNfbWVtYmVyKGVsZW1lbnRzMltpXSwgYm1zMikp OworCisJLyogVGVzdCB1bmlvbiAqLworCXJlc3VsdCA9IGJtc191bmlvbihibXMxLCBibXMyKTsK KwlFWFBFQ1RfTk9UX05VTEwocmVzdWx0KTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9lbGVt ZW50czE7IGkrKykKKwkJRVhQRUNUX1RSVUUoYm1zX2lzX21lbWJlcihlbGVtZW50czFbaV0sIHJl c3VsdCkpOworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2VsZW1lbnRzMjsgaSsrKQorCQlFWFBF Q1RfVFJVRShibXNfaXNfbWVtYmVyKGVsZW1lbnRzMltpXSwgcmVzdWx0KSk7CisJRVhQRUNUX0VR X0lOVChibXNfbnVtX21lbWJlcnMocmVzdWx0KSwgMTApOyAvKiAxLDMsNSwxMCwxMiwxNSwyMCwy NSwxMDAsMjAwICovCisJYm1zX2ZyZWUocmVzdWx0KTsKKworCS8qIFRlc3QgaW50ZXJzZWN0aW9u ICovCisJcmVzdWx0ID0gYm1zX2ludGVyc2VjdChibXMxLCBibXMyKTsKKwlFWFBFQ1RfTk9UX05V TEwocmVzdWx0KTsKKwlFWFBFQ1RfVFJVRShibXNfaXNfbWVtYmVyKDUsIHJlc3VsdCkpOworCUVY UEVDVF9UUlVFKGJtc19pc19tZW1iZXIoMTUsIHJlc3VsdCkpOworCUVYUEVDVF9FUV9JTlQoYm1z X251bV9tZW1iZXJzKHJlc3VsdCksIDIpOwkvKiA1LCAxNSAqLworCWJtc19mcmVlKHJlc3VsdCk7 CisKKwkvKiBUZXN0IGRpZmZlcmVuY2UgKi8KKwlyZXN1bHQgPSBibXNfZGlmZmVyZW5jZShibXMx LCBibXMyKTsKKwlFWFBFQ1RfTk9UX05VTEwocmVzdWx0KTsKKwlFWFBFQ1RfVFJVRShibXNfaXNf bWVtYmVyKDEsIHJlc3VsdCkpOworCUVYUEVDVF9UUlVFKGJtc19pc19tZW1iZXIoMTAsIHJlc3Vs dCkpOworCUVYUEVDVF9UUlVFKGJtc19pc19tZW1iZXIoMjAsIHJlc3VsdCkpOworCUVYUEVDVF9U UlVFKGJtc19pc19tZW1iZXIoMTAwLCByZXN1bHQpKTsKKwlFWFBFQ1RfRkFMU0UoYm1zX2lzX21l bWJlcig1LCByZXN1bHQpKTsKKwlFWFBFQ1RfRkFMU0UoYm1zX2lzX21lbWJlcigxNSwgcmVzdWx0 KSk7CisJRVhQRUNUX0VRX0lOVChibXNfbnVtX21lbWJlcnMocmVzdWx0KSwgNCk7CS8qIDEsIDEw LCAyMCwgMTAwICovCisJYm1zX2ZyZWUocmVzdWx0KTsKKworCS8qIFRlc3Qgb3ZlcmxhcCAqLwor CUVYUEVDVF9UUlVFKGJtc19vdmVybGFwKGJtczEsIGJtczIpKTsKKworCS8qIFRlc3Qgc3Vic2V0 IG9wZXJhdGlvbnMgKi8KKwlyZXN1bHQgPSBOVUxMOworCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVy KHJlc3VsdCwgNSk7CisJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIocmVzdWx0LCAxNSk7CisJRVhQ RUNUX1RSVUUoYm1zX2lzX3N1YnNldChyZXN1bHQsIGJtczEpKTsKKwlFWFBFQ1RfVFJVRShibXNf aXNfc3Vic2V0KHJlc3VsdCwgYm1zMikpOworCUVYUEVDVF9GQUxTRShibXNfaXNfc3Vic2V0KGJt czEsIHJlc3VsdCkpOworCWJtc19mcmVlKHJlc3VsdCk7CisKKwkvKiBUZXN0IHN1YnNldCBjb21w YXJpc29uICovCisJYm1zMiA9IGJtc19hZGRfbWVtYmVyKE5VTEwsIDUpOworCUVYUEVDVF9FUV9J TlQoYm1zX3N1YnNldF9jb21wYXJlKGJtczIsIGJtczEpLCBCTVNfU1VCU0VUMSk7CisJRVhQRUNU X0VRX0lOVChibXNfc3Vic2V0X2NvbXBhcmUoYm1zMSwgYm1zMiksIEJNU19TVUJTRVQyKTsKKwor CXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKE5VTEwsIDk5OSk7CisJRVhQRUNUX0VRX0lOVChibXNf c3Vic2V0X2NvbXBhcmUoYm1zMiwgcmVzdWx0KSwgQk1TX0RJRkZFUkVOVCk7CisJYm1zX2ZyZWUo cmVzdWx0KTsKKworCWJtc19mcmVlKGJtczEpOworCWJtc19mcmVlKGJtczIpOworfQorCisvKiBU ZXN0IGVkZ2UgY2FzZXMgYW5kIGJvdW5kYXJ5IGNvbmRpdGlvbnMgKi8KK3N0YXRpYyB2b2lkCit0 ZXN0X2VkZ2VfY2FzZXModm9pZCkKK3sKKwlpbnQJCQlsYXJnZV9lbGVtZW50ID0gMTAwMDA7CisJ aW50CQkJY291bnQ7CisJaW50CQkJbWVtYmVyOworCUJpdG1hcHNldCAgKnJlc3VsdDsKKwlCaXRt YXBzZXQgICpibXMgPSBOVUxMOworCisJZWxvZyhOT1RJQ0UsICJ0ZXN0aW5nIGVkZ2UgY2FzZXMg YW5kIGJvdW5kYXJ5IGNvbmRpdGlvbnMiKTsKKworCS8qIFRlc3QgZWxlbWVudCAwICovCisJYm1z ID0gYm1zX2FkZF9tZW1iZXIoYm1zLCAwKTsKKwlFWFBFQ1RfVFJVRShibXNfaXNfbWVtYmVyKDAs IGJtcykpOworCUVYUEVDVF9FUV9JTlQoYm1zX251bV9tZW1iZXJzKGJtcyksIDEpOworCUVYUEVD VF9FUV9JTlQoYm1zX25leHRfbWVtYmVyKGJtcywgLTEpLCAwKTsKKwlibXNfZnJlZShibXMpOwor CWJtcyA9IE5VTEw7CisKKwkvKiBUZXN0IGxhcmdlIGVsZW1lbnQgbnVtYmVycyAqLworCWJtcyA9 IGJtc19hZGRfbWVtYmVyKGJtcywgbGFyZ2VfZWxlbWVudCk7CisJRVhQRUNUX1RSVUUoYm1zX2lz X21lbWJlcihsYXJnZV9lbGVtZW50LCBibXMpKTsKKwlFWFBFQ1RfRVFfSU5UKGJtc19udW1fbWVt YmVycyhibXMpLCAxKTsKKwlibXNfZnJlZShibXMpOworCWJtcyA9IE5VTEw7CisKKwkvKiBUZXN0 IGFkZGluZyBzYW1lIGVsZW1lbnQgbXVsdGlwbGUgdGltZXMgKi8KKwlibXMgPSBibXNfYWRkX21l bWJlcihibXMsIDQyKTsKKwlibXMgPSBibXNfYWRkX21lbWJlcihibXMsIDQyKTsKKwlFWFBFQ1Rf RVFfSU5UKGJtc19udW1fbWVtYmVycyhibXMpLCAxKTsKKwlFWFBFQ1RfVFJVRShibXNfaXNfbWVt YmVyKDQyLCBibXMpKTsKKwlibXNfZnJlZShibXMpOworCWJtcyA9IE5VTEw7CisKKwkvKiBUZXN0 IHJlbW92aW5nIGZyb20gc2luZ2xlLWVsZW1lbnQgc2V0ICovCisJYm1zID0gYm1zX2FkZF9tZW1i ZXIoYm1zLCA5OSk7CisJcmVzdWx0ID0gYm1zX2RlbF9tZW1iZXIoYm1zLCA5OSk7CisJRVhQRUNU X05VTEwocmVzdWx0KTsKKwlibXNfZnJlZShibXMpOworCWJtcyA9IE5VTEw7CisKKwkvKiBUZXN0 IGRlbnNlIHJhbmdlICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgaSsrKQorCQlibXMgPSBi bXNfYWRkX21lbWJlcihibXMsIGkpOworCUVYUEVDVF9FUV9JTlQoYm1zX251bV9tZW1iZXJzKGJt cyksIDY0KTsKKworCS8qIFRlc3QgaXRlcmF0aW9uIG92ZXIgZGVuc2UgcmFuZ2UgKi8KKwljb3Vu dCA9IDA7CisJbWVtYmVyID0gLTE7CisJd2hpbGUgKChtZW1iZXIgPSBibXNfbmV4dF9tZW1iZXIo Ym1zLCBtZW1iZXIpKSA+PSAwKQorCXsKKwkJRVhQRUNUX0VRX0lOVChtZW1iZXIsIGNvdW50KTsK KwkJY291bnQrKzsKKwl9CisJRVhQRUNUX0VRX0lOVChjb3VudCwgNjQpOworCisJYm1zX2ZyZWUo Ym1zKTsKK30KKworLyogVGVzdCBpdGVyYXRvciBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkCit0 ZXN0X2l0ZXJhdGlvbih2b2lkKQoreworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJaW50CQkJ bWVtYmVyOworCWludAkJCWluZGV4OworCWludAkJCWVsZW1lbnRzW10gPSB7MiwgNywgMTUsIDMx LCA2MywgMTI3LCAyNTUsIDUxMSwgMTAyM307CisJaW50CQkJbnVtX2VsZW1lbnRzID0gc2l6ZW9m KGVsZW1lbnRzKSAvIHNpemVvZihlbGVtZW50c1swXSk7CisKKwllbG9nKE5PVElDRSwgInRlc3Rp bmcgaXRlcmF0aW9uIGZ1bmN0aW9ucyIpOworCisJLyogQnVpbGQgdGVzdCBzZXQgKi8KKwlmb3Ig KGludCBpID0gMDsgaSA8IG51bV9lbGVtZW50czsgaSsrKQorCQlibXMgPSBibXNfYWRkX21lbWJl cihibXMsIGVsZW1lbnRzW2ldKTsKKworCS8qIFRlc3QgZm9yd2FyZCBpdGVyYXRpb24gKi8KKwlt ZW1iZXIgPSAtMTsKKwlpbmRleCA9IDA7CisJd2hpbGUgKChtZW1iZXIgPSBibXNfbmV4dF9tZW1i ZXIoYm1zLCBtZW1iZXIpKSA+PSAwKQorCXsKKwkJRVhQRUNUX0VRX0lOVChtZW1iZXIsIGVsZW1l bnRzW2luZGV4XSk7CisJCWluZGV4Kys7CisJfQorCUVYUEVDVF9FUV9JTlQoaW5kZXgsIG51bV9l bGVtZW50cyk7CisKKwkvKiBUZXN0IGJhY2t3YXJkIGl0ZXJhdGlvbiAqLworCW1lbWJlciA9IGJt cy0+bndvcmRzICogQklUU19QRVJfQklUTUFQV09SRDsKKwlpbmRleCA9IG51bV9lbGVtZW50cyAt IDE7CisJd2hpbGUgKChtZW1iZXIgPSBibXNfcHJldl9tZW1iZXIoYm1zLCBtZW1iZXIpKSA+PSAw KQorCXsKKwkJRVhQRUNUX0VRX0lOVChtZW1iZXIsIGVsZW1lbnRzW2luZGV4XSk7CisJCWluZGV4 LS07CisJfQorCUVYUEVDVF9FUV9JTlQoaW5kZXgsIC0xKTsKKworCS8qIFRlc3QgaXRlcmF0aW9u IGJvdW5kcyAqLworCUVYUEVDVF9FUV9JTlQoYm1zX25leHRfbWVtYmVyKGJtcywgMTAyMyksIC0y KTsKKwlFWFBFQ1RfRVFfSU5UKGJtc19wcmV2X21lbWJlcihibXMsIDIpLCAtMik7CisKKwlibXNf ZnJlZShibXMpOworfQorCisvKiBUZXN0IHNldCBvcGVyYXRpb25zIHdpdGggdmFyaW91cyBjb21i aW5hdGlvbnMgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X3NldF9vcGVyYXRpb25zKHZvaWQpCit7CisJ Qml0bWFwc2V0ICAqZW1wdHkgPSBOVUxMOworCUJpdG1hcHNldCAgKnNpbmdsZSA9IE5VTEw7CisJ Qml0bWFwc2V0ICAqbXVsdGkgPSBOVUxMOworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisJ Qml0bWFwc2V0ICAqc2luZ2xlX2NvcHkgPSBOVUxMOworCisJZWxvZyhOT1RJQ0UsICJ0ZXN0aW5n IGNvbXByZWhlbnNpdmUgc2V0IG9wZXJhdGlvbnMiKTsKKworCXNpbmdsZSA9IGJtc19tYWtlX3Np bmdsZXRvbigxMCk7CisJbXVsdGkgPSBibXNfYWRkX3JhbmdlKG11bHRpLCA5LCAxMSk7CisKKwly ZXN1bHQgPSBibXNfdW5pb24oc2luZ2xlLCBtdWx0aSk7CisJRVhQRUNUX0VRX0lOVChibXNfbnVt X21lbWJlcnMoc2luZ2xlKSwgMSk7CisJRVhQRUNUX0VRX0lOVChibXNfbnVtX21lbWJlcnMobXVs dGkpLCAzKTsKKwlFWFBFQ1RfRVFfSU5UKGJtc19udW1fbWVtYmVycyhyZXN1bHQpLCAzKTsKKwlF WFBFQ1RfVFJVRShibXNfaXNfbWVtYmVyKDksIHJlc3VsdCkpOworCUVYUEVDVF9UUlVFKGJtc19p c19tZW1iZXIoMTAsIHJlc3VsdCkpOworCUVYUEVDVF9UUlVFKGJtc19pc19tZW1iZXIoMTEsIHJl c3VsdCkpOworCWJtc19mcmVlKHJlc3VsdCk7CisKKwkvKiBVbmlvbiBvcGVyYXRpb25zICovCisJ cmVzdWx0ID0gYm1zX3VuaW9uKGVtcHR5LCBzaW5nbGUpOworCUVYUEVDVF9UUlVFKGJtc19lcXVh bChyZXN1bHQsIHNpbmdsZSkpOworCWJtc19mcmVlKHJlc3VsdCk7CisKKwlyZXN1bHQgPSBibXNf dW5pb24oc2luZ2xlLCBlbXB0eSk7CisJRVhQRUNUX1RSVUUoYm1zX2VxdWFsKHJlc3VsdCwgc2lu Z2xlKSk7CisJYm1zX2ZyZWUocmVzdWx0KTsKKworCS8qIEludGVyc2VjdGlvbiBvcGVyYXRpb25z ICovCisJcmVzdWx0ID0gYm1zX2ludGVyc2VjdChlbXB0eSwgc2luZ2xlKTsKKwlFWFBFQ1RfTlVM TChyZXN1bHQpOworCisJcmVzdWx0ID0gYm1zX2ludGVyc2VjdChzaW5nbGUsIG11bHRpKTsKKwlF WFBFQ1RfRVFfSU5UKGJtc19udW1fbWVtYmVycyhyZXN1bHQpLCAxKTsKKwlFWFBFQ1RfVFJVRShi bXNfaXNfbWVtYmVyKDEwLCByZXN1bHQpKTsKKwlibXNfZnJlZShyZXN1bHQpOworCisJLyogRGlm ZmVyZW5jZSBvcGVyYXRpb25zICovCisJcmVzdWx0ID0gYm1zX2RpZmZlcmVuY2Uoc2luZ2xlLCBt dWx0aSk7CisJRVhQRUNUX05VTEwocmVzdWx0KTsKKworCXJlc3VsdCA9IGJtc19kaWZmZXJlbmNl KG11bHRpLCBzaW5nbGUpOworCUVYUEVDVF9FUV9JTlQoYm1zX251bV9tZW1iZXJzKHJlc3VsdCks IDIpOworCUVYUEVDVF9UUlVFKGJtc19pc19tZW1iZXIoOSwgcmVzdWx0KSk7CisJRVhQRUNUX0ZB TFNFKGJtc19pc19tZW1iZXIoMTAsIHJlc3VsdCkpOworCUVYUEVDVF9UUlVFKGJtc19pc19tZW1i ZXIoMTEsIHJlc3VsdCkpOworCWJtc19mcmVlKHJlc3VsdCk7CisKKwkvKiBFcXVhbGl0eSB0ZXN0 cyAqLworCUVYUEVDVF9GQUxTRShibXNfZXF1YWwoc2luZ2xlLCBtdWx0aSkpOworCUVYUEVDVF9U UlVFKGJtc19lcXVhbChlbXB0eSwgTlVMTCkpOworCisJc2luZ2xlX2NvcHkgPSBibXNfY29weShz aW5nbGUpOworCUVYUEVDVF9UUlVFKGJtc19lcXVhbChzaW5nbGUsIHNpbmdsZV9jb3B5KSk7CisJ Ym1zX2ZyZWUoc2luZ2xlX2NvcHkpOworCisJYm1zX2ZyZWUoc2luZ2xlKTsKKwlibXNfZnJlZSht dWx0aSk7Cit9CisKKy8qIE1haW4gdGVzdCBmdW5jdGlvbiAqLworRGF0dW0KK3Rlc3RfYml0bWFw c2V0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJZWxvZyhOT1RJQ0UsICJzdGFydGluZyBiaXRtYXBz ZXQgdGVzdHMiKTsKKworCXRlc3RfZW1wdHlfYml0bWFwc2V0KCk7CisJdGVzdF9zaW5nbGVfZWxl bWVudCgpOworCXRlc3RfbXVsdGlwbGVfZWxlbWVudHMoKTsKKwl0ZXN0X3ByZXZfbWVtYmVyX2Vk Z2VfY2FzZXMoKTsKKwl0ZXN0X2VkZ2VfY2FzZXMoKTsKKwl0ZXN0X2l0ZXJhdGlvbigpOworCXRl c3Rfc2V0X29wZXJhdGlvbnMoKTsKKwl0ZXN0X3JhbmRvbV9vcGVyYXRpb25zKCk7CisJdGVzdF9h ZHZhbmNlZF9mdW5jdGlvbnMoKTsKKworCWVsb2coTk9USUNFLCAiYWxsIGJpdG1hcHNldCB0ZXN0 cyBwYXNzZWQiKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhkMDJlYzhiZjBhCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5jb250 cm9sCkBAIC0wLDAgKzEsNCBAQAorY29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIEJpdG1hcHNldCcK K2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci90ZXN0 X2JpdG1hcHNldCcKK3JlbG9jYXRhYmxlID0gdHJ1ZQotLSAKMi40OS4wCgo= --68c86f6e_162c0d8c_6415--