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.96) (envelope-from ) id 1w2shv-000h8H-2N for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 15:21:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2sht-00Bti3-2F for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 15:21:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w2sht-00Bthu-14 for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 15:21:13 +0000 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2shq-00000000x7l-3Idz for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 15:21:13 +0000 Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-661b16ac011so5428a12.2 for ; Wed, 18 Mar 2026 08:21:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773847269; cv=none; d=google.com; s=arc-20240605; b=FPWy/2ceGaXu9WvxtugKsmh6zlRzGyofSktf/49NYjeUr2/5GNnWq3fip0x6xEIAq2 ZeiBVQXG4aMUN4Rwr4ZtBUqMUwif1zBVpaVM1iWmB42hhugCPIfy29jcewyhCSpmvYL5 iLfGkdGcKGlKG4MqqmDAbclZNFhFFANIuu2z0t1+WD7mF38Si8iPuMxjyeRRAn9BqbON PRgKAkU3XlWyXHJ3c66caxztOTdg4dpISpdpOel/aYQIkbXA2EBggLKkgDMX4qoPGWhl Amhf+WoQOfSXcM9kd/7fFcJ9H+g6IodLAMUFx111kEuJl3Fj/xlXqb01ildNCWw9H5Up o80A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=KxTrSdSpoWuYxRGL1Lnpn/wDniTjbdcDz98xns5caG8=; fh=f++R1UPDagM6ceFu8LmHSHEzn77Ot9zth2gw3/fRjpU=; b=KTdzOaUb1/F+N17QIuETHq69KiBkAI4f01+sZy52eVNZWnTU8wEUNib7g25nMwHscf eUctxNuUpJw3RFrBNh8Z6fHwEGO01U7I1YUHT1KdtY+Z7h1P7ujilec/swrJEHdaUKHh vLMRV4uAW1t33geoOV7TCIil4wm4nHazn7LCOS062336o8qUHx8vKnJgOvyYvaVCNGCB GpXhu4mO2PPWPk39Tb8LgpOWjq81UMOCzKYwcoBy2VsdIuph/vXGbJC721YLQmJUaE1f Vr/XRM4AcYu+90VxxErNJAPR0oLlDiS/STNkDjZ0gfGNGei0ScXnmVk0GIKGspFZ9Y3/ /NaA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773847269; x=1774452069; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=KxTrSdSpoWuYxRGL1Lnpn/wDniTjbdcDz98xns5caG8=; b=I7yvivTNQejdW7oVkq/4f2zdFb+XP+AJrufw56MXBhQ2teQ2TQ6IV6ZvQtVK6qZU3k 5zzQFXT93SjOrIiLMfXMmneM3BKKeTJJesdSa59pTR2ZHx1A+dJdcqzlVPN7fr2BukL2 xYokVXFKTYT4KfCl33zPWk7drzjMLNDUzmROxqA82ilOCfJo7YF0bytIH4K8Ffbhfi4R V/6cjpyWBrtpj4QkLm4skawfuJkqNX+HZEZM2ltFAv0AieGVS6cg/QXJsQ44atNB+reP o1sv7zNMxpeWoEMi3Ed98PCSAwMfx7f0qrtTCsWTpR2d9KU9VHMJrVgCLzC2fjLseud1 mGJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773847269; x=1774452069; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=KxTrSdSpoWuYxRGL1Lnpn/wDniTjbdcDz98xns5caG8=; b=n2QoOhcM7a4DkvxV02K+J89QMiNzkUeS/iLbSJT5hQQBpopDgaATmtBjbYwp/ddHHi cup5hqrqnCaq6Z/eVhi3KJElOHZ5bJ3T8tFUPsj0Px+UXRQi9M3wTZHMWDR2JwsXMFso 9LqquhPUGPM57y7UcJVUeQuDdz3YH6zDPrA6lPCrXJUF+TsFHFqrXWywHrYMNProyfHs nYJtgI61ZosN8eXbQi/808OLCi2tfLj207QTZfxtJ5Rg555zDeMitaGB0B6dkv1gOZmi B4Oj/lkrmFtNw/2SWQYMOsErn1RPVJE3nG/yt/j78N5AT4cnkqdatWjmvaMQyVyeZ6SE l7JQ== X-Gm-Message-State: AOJu0YxIw+0RM9Z5Bbgzk8fHTfwuO2T7Dbwj47x4WyU/5g/k9oxtNxbm 8myUIEyGMA8xqbnoX3CLBTzzi9x9Rpref26/wnJH5PrYsOiSLBh4uA9oRrVE6AEXSKmCU6PHU+l OjpumYet7mLjvYBlsK52XIS8EpJp5c/eVvLNJCNA= X-Gm-Gg: ATEYQzwRCflraIm8uZIB3q5buvUttMISe/8JY//+OzhsVZidJSWxHvtqB+jo35nQIgS sAFoi4IWULu+rkIJg7+AyZ654nvFaV32mGaNzMP9l3G7js3wV1+d01eVPaBBtiqOWpqv0OTHDbH I6Wi78otxUf8sCP4j9Mgi/61eQlCsmaz2lmsz/KxaRIpO2aRLW9EIttAsSQf6ygTn3sBua+FXxM N1srlpCiNYrASEH+5dFXUWN40lI9IoBHbh9tRDzeNwhrh6ubYoTgqySTtpkSlPwe6ucXe1V3A7H ypoRCg== X-Received: by 2002:a05:6402:3588:b0:667:b593:a081 with SMTP id 4fb4d7f45d1cf-667b593a920mr2456027a12.25.1773847269134; Wed, 18 Mar 2026 08:21:09 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Sami Imseih Date: Wed, 18 Mar 2026 10:20:56 -0500 X-Gm-Features: AaiRm53pjqPm-kGB7bVwsHwzMJkPRHCfU6uSMyJm2VJeLRjSrlcoJx1GaAqVn2c Message-ID: Subject: Re: dshash_find_or_insert vs. OOM To: Robert Haas Cc: PostgreSQL Hackers , Andres Freund , Thomas Munro Content-Type: multipart/mixed; boundary="0000000000005d4c74064d4e00f1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005d4c74064d4e00f1 Content-Type: text/plain; charset="UTF-8" > Hi, > > For most memory allocation primitives, we offer a "no OOM" version. > dshash_find_or_insert is an exception. Here's a small patch to fix > that. I have some interest in slipping this into v19 even though I am > submitting it quite late, because it would be useful for > pg_stash_advice[1]. Let me know what you think about that. Thanks for the patch! I agree with this idea, as it could act as a good triggering point for a caller to perform an eviction of the dshash if they run out of space, and avoid a hard failure. Passing this as a flag seems OK with me. Not sure what other flags could be added in the future, but the flexibility is a good thing, IMO. I was debating if this should just be a dsh_params option, but maybe for the same dshash a caller may want OOM in some code path, and retry in some other. maybe? > + &BUCKET_FOR_HASH(hash_table, hash), > + flags); > + if (item == NULL) > + { > + Assert((flags & DSHASH_INSERT_NO_OOM) != 0); > + LWLockRelease(PARTITION_LOCK(hash_table, partition_index)); > + return NULL; > + } > ``` > > When OOM happens, Assert((flags & DSHASH_INSERT_NO_OOM) != 0); makes sense. But for resize(), the assert is inside resize(), while for insert_into_bucket(), the assert is in the caller. > That feels a bit inconsistent to me, and I think it hurts readability a little. A reader might wonder why there is no corresponding assert after resize() unless they go read the function body. > > I think either style is fine, but using the same style in both places would be better. > I agree with this. The assert should be if (!resize(hash_table, hash_table->size_log2 + 1, flags)) { Assert((flags & DSHASH_INSERT_NO_OOM) != 0); return NULL; } instead of inside resize(). I did some testing by triggering an OOM, a no-OOM, and an OOM with eviction afterwards, as a sanity check. All looks good. I've attached the tests I created with other basic testing, as dshash lacks direct testing in general, if you're inclined to add them. -- Sami Imseih Amazon Web Services (AWS) --0000000000005d4c74064d4e00f1 Content-Type: application/octet-stream; name="v1-0001-Add-test-module-for-dshash.patch" Content-Disposition: attachment; filename="v1-0001-Add-test-module-for-dshash.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmw6thos0 RnJvbSA4NWQyOGY5ZGYwNjFlNDNhMDJjMzAyZGVmODJhMzcxNjc3YjExNWNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiU2FtaSBJbXNlaWggKEFXUykiCiA8c2ltc2VpaEBkZXYtZHNr LXNpbXNlaWgtMWUtZDMyZjI2N2UudXMtZWFzdC0xLmFtYXpvbi5jb20+CkRhdGU6IFdlZCwgMTgg TWFyIDIwMjYgMTQ6MzQ6MzIgKzAwMDAKU3ViamVjdDogW1BBVENIIHYxIDEvMV0gQWRkIHRlc3Qg bW9kdWxlIGZvciBkc2hhc2gKClRoaXMgaW50cm9kdWNlcyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZHNoYXNoLCB3aGljaCBleGVyY2lzZXMgdGhlIGRzaGFzaApBUEk6IGluc2VydCwgZmluZCwgc2Vx dWVudGlhbCBzY2FuLCBkZWxldGVfY3VycmVudCwgYW5kIGRlbGV0ZV9rZXkuCgpBZGRpdGlvbmFs bHksIGl0IHRlc3RzIHRoZSBPT00gYmVoYXZpb3Igb2YgZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0LCBi b3RoCndpdGggYW5kIHdpdGhvdXQgdGhlIERTSEFTSF9JTlNFUlRfTk9fT09NIGZsYWcsIGluY2x1 ZGluZyB2ZXJpZnlpbmcgdGhhdAppbnNlcnRzIHN1Y2NlZWQgYWZ0ZXIgZXZpY3RpbmcgZW50cmll cyB0byBmcmVlIHNwYWNlLgotLS0KIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkICAgICAgICAg ICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzaGFzaC8uZ2l0aWdub3Jl ICAgICAgIHwgICA0ICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kc2hhc2gvTWFrZWZpbGUgICAg ICAgICB8ICAyMyArKwogLi4uL3Rlc3RfZHNoYXNoL2V4cGVjdGVkL3Rlc3RfZHNoYXNoLm91dCAg ICAgIHwgIDIxICsrCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNoYXNoL21lc29uLmJ1aWxkICAg ICAgfCAgMzMgKysrCiAuLi4vbW9kdWxlcy90ZXN0X2RzaGFzaC9zcWwvdGVzdF9kc2hhc2guc3Fs ICAgfCAgMTMgKysKIC4uLi9tb2R1bGVzL3Rlc3RfZHNoYXNoL3Rlc3RfZHNoYXNoLS0xLjAuc3Fs ICB8ICAxMyArKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzaGFzaC90ZXN0X2RzaGFzaC5jICAg IHwgMjE4ICsrKysrKysrKysrKysrKysrKwogLi4uL21vZHVsZXMvdGVzdF9kc2hhc2gvdGVzdF9k c2hhc2guY29udHJvbCAgIHwgICA0ICsKIDEwIGZpbGVzIGNoYW5nZWQsIDMzMSBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzaGFzaC8uZ2l0 aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzaGFzaC9N YWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kc2hhc2gv ZXhwZWN0ZWQvdGVzdF9kc2hhc2gub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RzaGFzaC9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9kc2hhc2gvc3FsL3Rlc3RfZHNoYXNoLnNxbAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kc2hhc2gvdGVzdF9kc2hhc2gtLTEuMC5zcWwKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNoYXNoL3Rlc3RfZHNoYXNo LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNoYXNoL3Rlc3Rf ZHNoYXNoLmNvbnRyb2wKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIv c3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQppbmRleCBhMTU0MDI2OWNmNS4uZjdhZGFlZjBiNjUg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3RfY3Vz dG9tX3R5cGVzIFwKIAkJICB0ZXN0X2RkbF9kZXBhcnNlIFwKIAkJICB0ZXN0X2RzYSBcCisJCSAg dGVzdF9kc2hhc2ggXAogCQkgIHRlc3RfZHNtX3JlZ2lzdHJ5IFwKIAkJICB0ZXN0X2VzY2FwZSBc CiAJCSAgdGVzdF9leHRlbnNpb25zIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVz b24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDdjMDUyODAzYzk4 Li5hZjQ5OTA0NWVjYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC0yNyw2ICsyNyw3IEBAIHN1YmRp cigndGVzdF9jdXN0b21fc3RhdHMnKQogc3ViZGlyKCd0ZXN0X2N1c3RvbV90eXBlcycpCiBzdWJk aXIoJ3Rlc3RfZGRsX2RlcGFyc2UnKQogc3ViZGlyKCd0ZXN0X2RzYScpCitzdWJkaXIoJ3Rlc3Rf ZHNoYXNoJykKIHN1YmRpcigndGVzdF9kc21fcmVnaXN0cnknKQogc3ViZGlyKCd0ZXN0X2VzY2Fw ZScpCiBzdWJkaXIoJ3Rlc3RfZXh0ZW5zaW9ucycpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZHNoYXNoLy5naXRpZ25vcmUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNoYXNo Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVkY2Iz ZmY5NzIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzaGFzaC8u Z2l0aWdub3JlCkBAIC0wLDAgKzEsNCBAQAorIyBHZW5lcmF0ZWQgc3ViZGlyZWN0b3JpZXMKKy9s b2cvCisvcmVzdWx0cy8KKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZHNoYXNoL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzaGFzaC9NYWtl ZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWVmYmEzYWY1ZmUK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNoYXNoL01ha2VmaWxl CkBAIC0wLDAgKzEsMjMgQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzaGFzaC9NYWtlZmls ZQorCitNT0RVTEVfYmlnID0gdGVzdF9kc2hhc2gKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAor CXRlc3RfZHNoYXNoLm8KK1BHRklMRURFU0MgPSAidGVzdF9kc2hhc2ggLSB0ZXN0IGNvZGUgZm9y IGRzaGFzaCIKKworRVhURU5TSU9OID0gdGVzdF9kc2hhc2gKK0RBVEEgPSB0ZXN0X2RzaGFzaC0t MS4wLnNxbAorCitSRUdSRVNTID0gdGVzdF9kc2hhc2gKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NP TkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitp bmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kc2hh c2gKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9z cmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmli LWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kc2hh c2gvZXhwZWN0ZWQvdGVzdF9kc2hhc2gub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzaGFz aC9leHBlY3RlZC90ZXN0X2RzaGFzaC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjIzZGQ1YzQyNzBiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RzaGFzaC9leHBlY3RlZC90ZXN0X2RzaGFzaC5vdXQKQEAgLTAsMCArMSwyMSBAQAor Q1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RzaGFzaDsKKy0tIEJhc2ljIGluc2VydCwgZmluZCwgc2Vx IHNjYW4sIGRlbGV0ZV9jdXJyZW50LgorU0VMRUNUIHRlc3RfZHNoYXNoX2Jhc2ljKCk7CisgdGVz dF9kc2hhc2hfYmFzaWMgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIFJl Z3VsYXIgZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0IHJhaXNlcyBFUlJPUiBvbiBPT00uCistLSBVc2Ug dGVyc2UgZm9yIHZlcmJvc2l0eSB0byBpZ25vcmUgdGhlIERFVEFJTCBtZXNzYWdlLgorXHNldCBW RVJCT1NJVFkgdGVyc2UKK1NFTEVDVCB0ZXN0X2RzaGFzaF9maW5kX29yX2luc2VydF9vb21fZXJy b3IoKTsKK0VSUk9SOiAgb3V0IG9mIG1lbW9yeQorXHNldCBWRVJCT1NJVFkgZGVmYXVsdAorLS0g RFNIQVNIX0lOU0VSVF9OT19PT006IGZpbGwgdW50aWwgT09NLCBldmljdCA1MCUsIHJldHJ5IGlu c2VydC4KK1NFTEVDVCB0ZXN0X2RzaGFzaF9maW5kX29yX2luc2VydF9vb21fcmV0cnkoKTsKKyB0 ZXN0X2RzaGFzaF9maW5kX29yX2luc2VydF9vb21fcmV0cnkgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZHNoYXNoL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rz aGFzaC9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u NGMwY2U5MzgzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNo YXNoL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI0LTIw MjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3Rlc3RfZHNoYXNoX3Nv dXJjZXMgPSBmaWxlcygKKyAgJ3Rlc3RfZHNoYXNoLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9 PSAnd2luZG93cycKKyAgdGVzdF9kc2hhc2hfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mo d2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Rlc3RfZHNoYXNoJywK KyAgICAnLS1GSUxFREVTQycsICd0ZXN0X2RzaGFzaCAtIHRlc3QgY29kZSBmb3IgZHNoYXNoJyxd KQorZW5kaWYKKwordGVzdF9kc2hhc2ggPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X2RzaGFzaCcsCisg IHRlc3RfZHNoYXNoX3NvdXJjZXMsCisgIGt3YXJnczogcGdfdGVzdF9tb2RfYXJncywKKykKK3Rl c3RfaW5zdGFsbF9saWJzICs9IHRlc3RfZHNoYXNoCisKK3Rlc3RfaW5zdGFsbF9kYXRhICs9IGZp bGVzKAorICAndGVzdF9kc2hhc2guY29udHJvbCcsCisgICd0ZXN0X2RzaGFzaC0tMS4wLnNxbCcs CispCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAndGVzdF9kc2hhc2gnLAorICAnc2QnOiBtZXNv bi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIo KSwKKyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICd0ZXN0X2RzaGFzaCcsCisg ICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kc2hhc2gv c3FsL3Rlc3RfZHNoYXNoLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kc2hhc2gvc3FsL3Rl c3RfZHNoYXNoLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGMz NDI4YzRkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNoYXNo L3NxbC90ZXN0X2RzaGFzaC5zcWwKQEAgLTAsMCArMSwxMyBAQAorQ1JFQVRFIEVYVEVOU0lPTiB0 ZXN0X2RzaGFzaDsKKworLS0gQmFzaWMgaW5zZXJ0LCBmaW5kLCBzZXEgc2NhbiwgZGVsZXRlX2N1 cnJlbnQuCitTRUxFQ1QgdGVzdF9kc2hhc2hfYmFzaWMoKTsKKworLS0gUmVndWxhciBkc2hhc2hf ZmluZF9vcl9pbnNlcnQgcmFpc2VzIEVSUk9SIG9uIE9PTS4KKy0tIFVzZSB0ZXJzZSBmb3IgdmVy Ym9zaXR5IHRvIGlnbm9yZSB0aGUgREVUQUlMIG1lc3NhZ2UuCitcc2V0IFZFUkJPU0lUWSB0ZXJz ZQorU0VMRUNUIHRlc3RfZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0X29vbV9lcnJvcigpOworXHNldCBW RVJCT1NJVFkgZGVmYXVsdAorCistLSBEU0hBU0hfSU5TRVJUX05PX09PTTogZmlsbCB1bnRpbCBP T00sIGV2aWN0IDUwJSwgcmV0cnkgaW5zZXJ0LgorU0VMRUNUIHRlc3RfZHNoYXNoX2ZpbmRfb3Jf aW5zZXJ0X29vbV9yZXRyeSgpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rz aGFzaC90ZXN0X2RzaGFzaC0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kc2hhc2gv dGVzdF9kc2hhc2gtLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjQ1YTU1NDFjZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RzaGFzaC90ZXN0X2RzaGFzaC0tMS4wLnNxbApAQCAtMCwwICsxLDEzIEBACisvKiBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZHNoYXNoL3Rlc3RfZHNoYXNoLS0xLjAuc3FsICovCisKKy0tIGNvbXBs YWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUg RVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9kc2hhc2giIHRvIGxv YWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9kc2hhc2hfYmFzaWMo KSBSRVRVUk5TIFZPSUQKKwlBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVB VEUgRlVOQ1RJT04gdGVzdF9kc2hhc2hfZmluZF9vcl9pbnNlcnRfb29tX2Vycm9yKCkgUkVUVVJO UyBWT0lECisJQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNU SU9OIHRlc3RfZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0X29vbV9yZXRyeSgpIFJFVFVSTlMgVk9JRAor CUFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZHNoYXNoL3Rlc3RfZHNoYXNoLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZHNoYXNoL3Rlc3RfZHNoYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmIxNjU1NGRhZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RzaGFzaC90ZXN0X2RzaGFzaC5jCkBAIC0wLDAgKzEsMjE4IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogdGVzdF9kc2hhc2guYworICoJCVRlc3QgZHluYW1pYyBzaGFyZWQgaGFzaCB0 YWJsZXMgKGRzaGFzaCkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCQlz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZHNoYXNoL3Rlc3RfZHNoYXNoLmMKKyAqCisgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiZm1nci5o IgorI2luY2x1ZGUgImxpYi9kc2hhc2guaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3Ry eS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgi CisKK1BHX01PRFVMRV9NQUdJQzsKKwordHlwZWRlZiBzdHJ1Y3QgVGVzdERzaGFzaEVudHJ5Cit7 CisJaW50CQkJa2V5OworfQkJCVRlc3REc2hhc2hFbnRyeTsKKworc3RhdGljIGNvbnN0IGRzaGFz aF9wYXJhbWV0ZXJzIHRlc3RfcGFyYW1zID0geworCXNpemVvZihpbnQpLAkJCQkvKiBrZXlfc2l6 ZSAqLworCXNpemVvZihUZXN0RHNoYXNoRW50cnkpLAkvKiBlbnRyeV9zaXplICovCisJZHNoYXNo X21lbWNtcCwKKwlkc2hhc2hfbWVtaGFzaCwKKwlkc2hhc2hfbWVtY3B5LAorCUxXVFJBTkNIRV9G SVJTVF9VU0VSX0RFRklORUQJLyogdHJhbmNoZV9pZCwgb3ZlcndyaXR0ZW4gYXQgcnVudGltZSAq LworfTsKKworc3RhdGljIHZvaWQKK2luaXRfdHJhbmNoZSh2b2lkICpwdHIsIHZvaWQgKmFyZykK K3sKKwlpbnQJCSAgICp0cmFuY2hlX2lkID0gKGludCAqKSBwdHI7CisKKwkqdHJhbmNoZV9pZCA9 IExXTG9ja05ld1RyYW5jaGVJZCgidGVzdF9kc2hhc2giKTsKK30KKworLyoKKyAqIHRlc3RfZHNo YXNoX2Jhc2ljCisgKgorICogVGVzdCBpbnNlcnQsIGZpbmQsIHNlcXVlbnRpYWwgc2NhbiwgZGVs ZXRlX2N1cnJlbnQsIGFuZCBkZWxldGVfa2V5LgorICovCitQR19GVU5DVElPTl9JTkZPX1YxKHRl c3RfZHNoYXNoX2Jhc2ljKTsKK0RhdHVtCit0ZXN0X2RzaGFzaF9iYXNpYyhQR19GVU5DVElPTl9B UkdTKQoreworCWludAkJICAgKnRyYW5jaGVfaWQ7CisJYm9vbAkJZm91bmQ7CisJZHNhX2FyZWEg ICAqYXJlYTsKKwlkc2hhc2hfdGFibGUgKmh0OworCWRzaGFzaF9wYXJhbWV0ZXJzIHBhcmFtcyA9 IHRlc3RfcGFyYW1zOworCWRzaGFzaF9zZXFfc3RhdHVzIHN0YXR1czsKKwlUZXN0RHNoYXNoRW50 cnkgKmVudHJ5OworCWludAkJCWNvdW50ID0gMTA7CisJaW50CQkJc2Nhbm5lZDsKKworCXRyYW5j aGVfaWQgPSBHZXROYW1lZERTTVNlZ21lbnQoInRlc3RfZHNoYXNoIiwgc2l6ZW9mKGludCksCisJ CQkJCQkJCQlpbml0X3RyYW5jaGUsICZmb3VuZCwgTlVMTCk7CisJcGFyYW1zLnRyYW5jaGVfaWQg PSAqdHJhbmNoZV9pZDsKKworCWFyZWEgPSBkc2FfY3JlYXRlKCp0cmFuY2hlX2lkKTsKKwlodCA9 IGRzaGFzaF9jcmVhdGUoYXJlYSwgJnBhcmFtcywgTlVMTCk7CisKKwkvKiBJbnNlcnQgZW50cmll cy4gKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisJeworCQllbnRyeSA9IGRz aGFzaF9maW5kX29yX2luc2VydChodCwgJmksICZmb3VuZCk7CisJCWlmIChmb3VuZCkKKwkJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIGR1cGxpY2F0ZSBrZXkgJWQiLCBpKTsKKwkJZHNoYXNoX3Jl bGVhc2VfbG9jayhodCwgZW50cnkpOworCX0KKworCS8qIFZlcmlmeSBhbGwgZW50cmllcyB2aWEg ZmluZC4gKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisJeworCQllbnRyeSA9 IGRzaGFzaF9maW5kKGh0LCAmaSwgZmFsc2UpOworCQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJCWVs b2coRVJST1IsICJrZXkgJWQgbm90IGZvdW5kIiwgaSk7CisJCWRzaGFzaF9yZWxlYXNlX2xvY2so aHQsIGVudHJ5KTsKKwl9CisKKwkvKiBWZXJpZnkgZW50cnkgY291bnQgdmlhIHNlcXVlbnRpYWwg c2Nhbi4gKi8KKwlzY2FubmVkID0gMDsKKwlkc2hhc2hfc2VxX2luaXQoJnN0YXR1cywgaHQsIGZh bHNlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3NlcV9uZXh0KCZzdGF0dXMpKSAhPSBOVUxM KQorCQlzY2FubmVkKys7CisJZHNoYXNoX3NlcV90ZXJtKCZzdGF0dXMpOworCisJaWYgKHNjYW5u ZWQgIT0gY291bnQpCisJCWVsb2coRVJST1IsICJzZXEgc2NhbiByZXR1cm5lZCAlZCBlbnRyaWVz LCBleHBlY3RlZCAlZCIsIHNjYW5uZWQsIGNvdW50KTsKKworCS8qIERlbGV0ZSBhbGwgZW50cmll cyB2aWEgZGVsZXRlX2N1cnJlbnQuICovCisJZHNoYXNoX3NlcV9pbml0KCZzdGF0dXMsIGh0LCB0 cnVlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3NlcV9uZXh0KCZzdGF0dXMpKSAhPSBOVUxM KQorCQlkc2hhc2hfZGVsZXRlX2N1cnJlbnQoJnN0YXR1cyk7CisJZHNoYXNoX3NlcV90ZXJtKCZz dGF0dXMpOworCisJLyogVmVyaWZ5IHRhYmxlIGlzIGVtcHR5LiAqLworCXNjYW5uZWQgPSAwOwor CWRzaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBodCwgZmFsc2UpOworCXdoaWxlICgoZW50cnkgPSBk c2hhc2hfc2VxX25leHQoJnN0YXR1cykpICE9IE5VTEwpCisJCXNjYW5uZWQrKzsKKwlkc2hhc2hf c2VxX3Rlcm0oJnN0YXR1cyk7CisKKwlpZiAoc2Nhbm5lZCAhPSAwKQorCQllbG9nKEVSUk9SLCAi ZXhwZWN0ZWQgZW1wdHkgdGFibGUsIGdvdCAlZCBlbnRyaWVzIiwgc2Nhbm5lZCk7CisKKwlkc2hh c2hfZGVzdHJveShodCk7CisJZHNhX2RldGFjaChhcmVhKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7 Cit9CisKKy8qCisgKiB0ZXN0X2RzaGFzaF9maW5kX29yX2luc2VydF9vb21fZXJyb3IKKyAqCisg KiBUZXN0IHRoYXQgdGhlIHJlZ3VsYXIgZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0ICh3aXRob3V0IERT SEFTSF9JTlNFUlRfTk9fT09NKQorICogcmFpc2VzIEVSUk9SIHdoZW4gdGhlIERTQSBhcmVhIGlz ICJvdXQgb2YgbWVtb3J5Ii4KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2RzaGFzaF9m aW5kX29yX2luc2VydF9vb21fZXJyb3IpOworRGF0dW0KK3Rlc3RfZHNoYXNoX2ZpbmRfb3JfaW5z ZXJ0X29vbV9lcnJvcihQR19GVU5DVElPTl9BUkdTKQoreworCWludAkJICAgKnRyYW5jaGVfaWQ7 CisJYm9vbAkJZm91bmQ7CisJZHNhX2FyZWEgICAqYXJlYTsKKwlkc2hhc2hfdGFibGUgKmh0Owor CWRzaGFzaF9wYXJhbWV0ZXJzIHBhcmFtcyA9IHRlc3RfcGFyYW1zOworCWludAkJCWtleSA9IDA7 CisKKwl0cmFuY2hlX2lkID0gR2V0TmFtZWREU01TZWdtZW50KCJ0ZXN0X2RzaGFzaCIsIHNpemVv ZihpbnQpLAorCQkJCQkJCQkJaW5pdF90cmFuY2hlLCAmZm91bmQsIE5VTEwpOworCXBhcmFtcy50 cmFuY2hlX2lkID0gKnRyYW5jaGVfaWQ7CisKKwlhcmVhID0gZHNhX2NyZWF0ZSgqdHJhbmNoZV9p ZCk7CisJZHNhX3NldF9zaXplX2xpbWl0KGFyZWEsIGRzYV9taW5pbXVtX3NpemUoKSk7CisJaHQg PSBkc2hhc2hfY3JlYXRlKGFyZWEsICZwYXJhbXMsIE5VTEwpOworCisJLyogSW5zZXJ0IHVudGls IE9PTSDigJQgd2l0aG91dCBOT19PT00gZmxhZywgdGhpcyBzaG91bGQgcmFpc2UgRVJST1IuICov CisJZm9yICg7OykKKwl7CisJCVRlc3REc2hhc2hFbnRyeSAqZW50cnk7CisKKwkJZW50cnkgPSBk c2hhc2hfZmluZF9vcl9pbnNlcnQoaHQsICZrZXksICZmb3VuZCk7CisJCWRzaGFzaF9yZWxlYXNl X2xvY2soaHQsIGVudHJ5KTsKKwkJa2V5Kys7CisJfQorCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30K KworLyoKKyAqIHRlc3RfZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0X29vbV9yZXRyeQorICoKKyAqIFRl c3QgRFNIQVNIX0lOU0VSVF9OT19PT006IGZpbGwgdW50aWwgT09NLCBldmljdCA1MCUgb2YgZW50 cmllcywgdGhlbgorICogcmV0cnkgdGhlIGluc2VydCB0byB2ZXJpZnkgcmVjb3Zlcnkgd29ya3Mu CisgKi8KK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9kc2hhc2hfZmluZF9vcl9pbnNlcnRfb29t X3JldHJ5KTsKK0RhdHVtCit0ZXN0X2RzaGFzaF9maW5kX29yX2luc2VydF9vb21fcmV0cnkoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlpbnQJCSAgICp0cmFuY2hlX2lkOworCWJvb2wJCWZvdW5kOwor CWRzYV9hcmVhICAgKmFyZWE7CisJZHNoYXNoX3RhYmxlICpodDsKKwlkc2hhc2hfcGFyYW1ldGVy cyBwYXJhbXMgPSB0ZXN0X3BhcmFtczsKKwlpbnQJCQlpbnNlcnRlZCA9IDA7CisJaW50CQkJa2V5 ID0gMDsKKworCXRyYW5jaGVfaWQgPSBHZXROYW1lZERTTVNlZ21lbnQoInRlc3RfZHNoYXNoIiwg c2l6ZW9mKGludCksCisJCQkJCQkJCQlpbml0X3RyYW5jaGUsICZmb3VuZCwgTlVMTCk7CisJcGFy YW1zLnRyYW5jaGVfaWQgPSAqdHJhbmNoZV9pZDsKKworCWFyZWEgPSBkc2FfY3JlYXRlKCp0cmFu Y2hlX2lkKTsKKwlkc2Ffc2V0X3NpemVfbGltaXQoYXJlYSwgZHNhX21pbmltdW1fc2l6ZSgpKTsK KwlodCA9IGRzaGFzaF9jcmVhdGUoYXJlYSwgJnBhcmFtcywgTlVMTCk7CisKKwkvKiBGaWxsIHVu dGlsIE9PTS4gKi8KKwlmb3IgKDs7KQorCXsKKwkJVGVzdERzaGFzaEVudHJ5ICplbnRyeTsKKwor CQllbnRyeSA9IGRzaGFzaF9maW5kX29yX2luc2VydF9leHRlbmRlZChodCwgJmtleSwgJmZvdW5k LAorCQkJCQkJCQkJCQkgICBEU0hBU0hfSU5TRVJUX05PX09PTSk7CisJCWlmIChlbnRyeSA9PSBO VUxMKQorCQkJYnJlYWs7CisJCWRzaGFzaF9yZWxlYXNlX2xvY2soaHQsIGVudHJ5KTsKKwkJa2V5 Kys7CisJCWluc2VydGVkKys7CisJfQorCisJLyogRXZpY3QgNTAlIG9mIGVudHJpZXMuICovCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBpbnNlcnRlZCAvIDI7IGkrKykKKwkJZHNoYXNoX2RlbGV0ZV9r ZXkoaHQsICZpKTsKKworCS8qIFJldHJ5IOKAlCBzaG91bGQgc3VjY2VlZCBub3cgdGhhdCB0aGVy ZSdzIGZyZWUgc3BhY2UuICovCisJeworCQlUZXN0RHNoYXNoRW50cnkgKmVudHJ5OworCisJCWVu dHJ5ID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0X2V4dGVuZGVkKGh0LCAma2V5LCAmZm91bmQsCisJ CQkJCQkJCQkJCSAgIERTSEFTSF9JTlNFUlRfTk9fT09NKTsKKwkJaWYgKGVudHJ5ID09IE5VTEwp CisJCQllbG9nKEVSUk9SLCAiaW5zZXJ0IGFmdGVyIGV2aWN0aW9uIGZhaWxlZCIpOworCQlkc2hh c2hfcmVsZWFzZV9sb2NrKGh0LCBlbnRyeSk7CisJfQorCisJZHNoYXNoX2Rlc3Ryb3koaHQpOwor CWRzYV9kZXRhY2goYXJlYSk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RzaGFzaC90ZXN0X2RzaGFzaC5jb250cm9sIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RzaGFzaC90ZXN0X2RzaGFzaC5jb250cm9sCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YWIwNjY2ZDIyNwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kc2hhc2gvdGVzdF9kc2hhc2guY29udHJvbApAQCAtMCww ICsxLDQgQEAKK2NvbW1lbnQgPSAnVGVzdCBjb2RlIGZvciBkc2hhc2gnCitkZWZhdWx0X3ZlcnNp b24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvdGVzdF9kc2hhc2gnCityZWxv Y2F0YWJsZSA9IHRydWUKLS0gCjIuNDcuMwoK --0000000000005d4c74064d4e00f1--