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.98.2) (envelope-from ) id 1x9r6Y-00000002GPI-42zk for pgsql-bugs@arkaria.postgresql.org; Thu, 24 Sep 2026 21:35:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.98.2) (envelope-from ) id 1x9r6Y-0000000Eue2-0hHY for pgsql-bugs@arkaria.postgresql.org; Thu, 24 Sep 2026 21:35: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.98.2) (envelope-from ) id 1x9r6X-0000000Eudt-2kQe for pgsql-bugs@lists.postgresql.org; Thu, 24 Sep 2026 21:35:45 +0000 Received: from mail-vs2-x2b.google.com ([2a00:1450:4864:3a::2b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1x9r6U-0000000162i-1ej2 for pgsql-bugs@lists.postgresql.org; Thu, 24 Sep 2026 21:35:44 +0000 Received: by mail-vs2-x2b.google.com with SMTP id 71dfb90a1353d-5cc54711df7so11752e0c.2 for ; Thu, 24 Sep 2026 14:35:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790285741; x=1790890541; darn=lists.postgresql.org; h=content-type:mime-version:references:in-reply-to:message-id:date :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to :content-type; bh=7wJZtKG68xy22vihKOwktVkaIhcA+RVLboEofbDDPU8=; b=nwTag7rsG22XlzmCs6wiGwkol7gahZAlUfRKghy7+s8mXtsavfiWTOgap6UrElksxL ynEmOM+PW4mVq8AUbOuRbiVBExFMgRrZC02wO/SHLUYLD42zkr1yEuCI68QYsjYoOK9m gYjKa0HeA3XkMzSwG+mfr4LqhcErh13x6W5+qoScVlqAGcOv9lqgbvSzKOG4i9HHZ94r P/NLY4axh6aChMEznVkVEvalVhkm85gsiQHjhTObpy6I5jWfnJyAcpNJCqMz15vpp9ni YXtsxkLCD3/1kRQdMNcsiVvq8pjTpNfgeJFI3Nfgwr6mKbRqKXFx3t74qmR7WYuN2sUU qOIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790285741; x=1790890541; h=content-type:mime-version:references:in-reply-to:message-id:date :subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=7wJZtKG68xy22vihKOwktVkaIhcA+RVLboEofbDDPU8=; b=UoU/+oT7xAvo1Kx1w70nqEgM2v9w205sUwb0WnC9e9Mes8BGOhKfsmJd7dG4Jm95Xr MDOxHamcUhUJC+m887+LoGsb5CukLhS7OC9TYWbaCuIXCiFp0eMIO8Z1H/L8LNliJXWX M3OfopC812t5W8t/Yx9Pm0KuCpUqfSx0o5xMZkyBYaf/qp+/ZHZFKoj//istOsuaEwZH eyYCstqSKlaKdbZIrS2j7xoYGj9/6NYZQL+H5un0t+nVRkOGL1w3ghJR+deBvH15us/9 Lr0yhcL8fe3uZegSKV2NZTpk3QNLmmA4MVhPyEH+hq2TxpZEuruMD411K5kgWUXl5XHK 4L1A== X-Forwarded-Encrypted: i=1; AKwUvBzbTebwOPxuN4a3lPV7GgA99ZUE1ZhKECUAwrm0oRBLFY3ZeZ9uRZBjex/Q5pb/bdgd8zx+lQa1acDN@lists.postgresql.org X-Gm-Message-State: AFuF++lWcQIx3fb2TmIAnlYHnRBwO7yEX7sAFPAkbvEhXKdqsV8pIcwg acancefjbBhgX/H5Wo2t99sb81rwTdx5AboWJbXmnx5ucKGe8xXfPYVv X-Gm-Gg: AYBFou1ksKnyWLlaygPBDlEo0ZDd8tc+S4aK/+u5e3+f15+SABNvlfrE6+ZTeCdu5nI IlAK9fBRCuH88c+u3ke0njEPeDXVnSTZrUD7KzGSqS+9PqZjGkX0RTPi9BfVBdg6eiMJaDbgnKD nKE96rBG66+u61Qydpv0xjujKpX+JkzJoCNHrUz2SIQqsV1WkixIORDJt16v8Zod0AZFDC/D6eS xYLSMkYs7NskPM0Y8oxRt7fbiuwgjfwh4xYYAQWiDPGduBmCs1WoxokrmWcZ4iycyqqV7opnK8C vT1ApAQN+/6ZMKdHdGkA2aMLQHI2Vxu7GLj02s/88pjZS3Ju8M2TXgZ32mrEXohf9Oo4b3bXaHR pFrAeQS+9mK4UtUvRr3GImu/af++WBdCfwgnH+LNVsUTIoaNQ/Laf8+NAttwjWQLSPAGBX/rOpV 7kMWiA2HwJOKhZFR5PBJ17M635azKo205lJSkNmskcWzjvK5JQVC0+caEKUBFKswF7iS+PPP3dM ZXGB2WSKCRWDhcEej2ipMhPKPIHyhgcNCeepnxMlEnGkrHKkMFJipKT6wBH/voKzYFvtfuuAF96 zPCxQa4I5nr6tVMsESdS X-Received: by 2002:a05:6122:3648:b0:5c8:3ae2:7a91 with SMTP id 71dfb90a1353d-5cc454b9bfcmr330250e0c.0.1790285741560; Thu, 24 Sep 2026 14:35:41 -0700 (PDT) Received: from 10.38.7.105 ([186.172.21.75]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-5cc5de02279sm777712e0c.0.2026.09.24.14.35.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Sep 2026 14:35:40 -0700 (PDT) From: Manu To: Zsolt Parragi Cc: Daniel Gustafsson , Bharath Rupireddy , Masahiko Sawada , Nikolay Samokhvalov , pgsql-bugs@lists.postgresql.org Subject: Re: autovacuum: automatically propagate updated parameters Date: Thu, 24 Sep 2026 18:35:36 -0300 Message-ID: <179028573649.493682.4321152895319402838@gmail.com> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4537935992878022734==" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --===============4537935992878022734== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Hi, I ran v3 on REL_19_STABLE (e60ee52841d) with --enable-cassert and --enable-injection-points, next to Nikolay's v2 and two cut-down copies of v3, to check the new tests and the polling question from upthread. 1. Each part of the fix has a test that fails without it v3 tests and injection points, no fix: tests 1-3 pass, 4 fails v3 without the SetLatch() in autovac_recalculate_workers_for_balance(): tests 1-4 pass, 5 fails v3: all pass 2. Stability test_autovacuum passed 30 of 30 runs on an idle machine, and 20 of 20 with every CPU busy (one busy loop per core), at about 10 s and 16 s a run. 3. A case the tests don't cover: a worker leaving the balance Test 5 checks a worker joining while the leader waits. A worker leaving goes through another path: FreeWorkerInfo() sets AutoVacRebalance, and the launcher recalculates the count and so does the SetLatch(). I added it as test 6 (attached, on top of v3): the second worker joins and is held as in test 5, the leader goes to 400, then the second worker is released and exits. With v3 the leader, still in ParallelFinish, logs cost_limit=800 by the first check after the worker is gone, and the parallel worker ends at 800. Without the SetLatch() the test stops earlier, at the join, like test 5, so it does not tell the two paths apart. It does show that the launcher path works, which the current tests don't exercise. 4. Polling vs. waking, measured With the parallel worker held before its index and the leader waiting for it for 20 s, the leader's voluntary context switches were: v3: 0 Nikolay's v2: 199 (9.9 per second) The time from pg_reload_conf() to the leader logging the new limit was 7 ms with v3 and 8 ms with v2. So the timed wait costs about ten wakeups a second for as long as the largest index takes, and makes no difference to how fast a reload is picked up. 5. Things I checked in the code, in case they come up - The extra SetLatch() does not cut short a busy worker's cost delay: vacuum_delay_point() sleeps with pg_usleep(), not on the latch, so "a worker that is busy vacuuming ignores the extra wakeup" holds. - No wakeup is lost in the wait. The refresh runs at the top of each pass, before WaitLatch(). A SetLatch() after it makes WaitLatch() return at once, and one between WaitLatch() and ResetLatch() is followed by another pass that reads the current count anyway, since the count is written before the SetLatch(). - The leader also wakes for its workers' messages, but parallel_vacuum_propagate_shared_delay_params() bumps the generation only when a value changed, so those wakeups make no worker re-read its parameters. The scripts and all outputs are in the second attachment. Regards, Manu --===============4537935992878022734== Content-Type: text/plain Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="nocfbot-v3-add-test-worker-leaves.diff.txt" MIME-Version: 1.0 ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRvdmFjdXVtL3QvMDAxX3BhcmFs bGVsX2F1dG92YWN1dW0ucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0b3ZhY3V1bS90LzAw MV9wYXJhbGxlbF9hdXRvdmFjdXVtLnBsCi0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9hdXRv dmFjdXVtL3QvMDAxX3BhcmFsbGVsX2F1dG92YWN1dW0ucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2F1dG92YWN1dW0vdC8wMDFfcGFyYWxsZWxfYXV0b3ZhY3V1bS5wbApAQCAtOCw2ICs4 LDcgQEAKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7Cit1c2UgVGltZTo6SGlSZXMgcXcodXNsZWVwKTsK IAogaWYgKCRFTlZ7ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IG5lICd5ZXMnKQogewpAQCAtMzk1 LDUgKzM5Niw3OCBAQAogJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJTRUxFQ1QgaW5q ZWN0aW9uX3BvaW50c19kZXRhY2goJ2F1dG92YWN1dW0td29ya2VyLWNvc3QtYmFsYW5jZWQnKSIp OwogCisKKyMgVGVzdCA2IChhZGRlZCBmb3IgcmV2aWV3KToKKyMgVGhlIHJldmVyc2Ugb2YgdGVz dCA1OiBhIHdvcmtlciBMRUFWRVMgdGhlIGJhbGFuY2Ugd2hpbGUgdGhlIGxlYWRlciB3YWl0cy4K KyMgVGhhdCByZWJhbGFuY2UgdGFrZXMgYW5vdGhlciBwYXRoOiB0aGUgbGVhdmluZyB3b3JrZXIg c2V0cyBBdXRvVmFjUmViYWxhbmNlCisjIGluIEZyZWVXb3JrZXJJbmZvKCksIGFuZCB0aGUgbGF1 bmNoZXIgcmVjYWxjdWxhdGVzIHRoZSBjb3VudC4KKworJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwo CisJJ3Bvc3RncmVzJywgcXsKKwlTRUxFQ1QgY291bnQoKikgPSAwIEZST00gcGdfc3RhdF9hY3Rp dml0eQorCVdIRVJFIGJhY2tlbmRfdHlwZSA9ICdhdXRvdmFjdXVtIHdvcmtlcicgQU5EIGRhdG5h bWUgPSAncmVncmVzc19kYjInCit9KSBvciBkaWUgInNlY29uZCBhdXRvdmFjdXVtIHdvcmtlciBm cm9tIHRlc3QgNSBkaWQgbm90IGZpbmlzaCI7CisKK3ByZXBhcmVfZm9yX25leHRfdGVzdCgkbm9k ZSwgNik7Ciskbm9kZS0+c2FmZV9wc3FsKCdyZWdyZXNzX2RiMicsCisJJ0FMVEVSIFRBQkxFIGZp bGxlciBTRVQgKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKScpOworJG5vZGUtPnNhZmVfcHNx bCgncmVncmVzc19kYjInLCAnVVBEQVRFIGZpbGxlciBTRVQgaWQgPSBpZCArIDEgV0hFUkUgdHJ1 ZScpOworJGxvZ19vZmZzZXQgPSAtcyAkbm9kZS0+bG9nZmlsZTsKKworc3RhcnRfbGVhZGVyX3dh aXRpbmdfZm9yX3dvcmtlcigkbm9kZSk7CisKKyMgQSBzZWNvbmQgd29ya2VyIGpvaW5zIGFuZCBp cyBoZWxkLCBhcyBpbiB0ZXN0IDU6IHRoZSBsZWFkZXIgZ29lcyB0byA0MDAuCiskbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgnYXV0 b3ZhY3V1bS13b3JrZXItY29zdC1iYWxhbmNlZCcsICd3YWl0JykiCispOworJG5vZGUtPnNhZmVf cHNxbCgncmVncmVzc19kYjInLAorCSdBTFRFUiBUQUJMRSBmaWxsZXIgU0VUIChhdXRvdmFjdXVt X2VuYWJsZWQgPSB0cnVlKScpOworJG5vZGUtPndhaXRfZm9yX2xvZygKKwlxci9BdXRvdmFjdXVt IFZhY3V1bVVwZGF0ZUNvc3RzXChkYj0kcG9zdGdyZXNvaWQsIHJlbD0kdGVzdGF1dG92YWNvaWQs IGRvYmFsYW5jZT15ZXMsIGNvc3RfbGltaXQ9NDAwLC8sCisJJGxvZ19vZmZzZXQpOworCisjIE5v dyBsZXQgdGhlIHNlY29uZCB3b3JrZXIgZmluaXNoIGFuZCBsZWF2ZSwgd2l0aCB0aGUgbGVhZGVy IHN0aWxsIHdhaXRpbmcuCitteSAkbGVhdmVfb2Zmc2V0ID0gLXMgJG5vZGUtPmxvZ2ZpbGU7Cisk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dh a2V1cCgnYXV0b3ZhY3V1bS13b3JrZXItY29zdC1iYWxhbmNlZCcpIik7Ciskbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2RldGFjaCgnYXV0b3Zh Y3V1bS13b3JrZXItY29zdC1iYWxhbmNlZCcpIik7Ciskbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgK KwkncG9zdGdyZXMnLCBxeworCVNFTEVDVCBjb3VudCgqKSA9IDAgRlJPTSBwZ19zdGF0X2FjdGl2 aXR5CisJV0hFUkUgYmFja2VuZF90eXBlID0gJ2F1dG92YWN1dW0gd29ya2VyJyBBTkQgZGF0bmFt ZSA9ICdyZWdyZXNzX2RiMicKK30pIG9yIGRpZSAic2Vjb25kIGF1dG92YWN1dW0gd29ya2VyIGRp ZCBub3QgZmluaXNoIjsKK215ICRsZWZ0X2F0ID0gdGltZTsKKworIyBUaGUgd2FpdGluZyBsZWFk ZXIgc2hvdWxkIGdvIGJhY2sgdG8gdGhlIHdob2xlIGxpbWl0LiAgUG9sbCB0aGUgbG9nIGZvciB1 cAorIyB0byAzMCBzIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgdGltZW91dC4KK215ICRzZWVuID0g MDsKK2ZvciAobXkgJGkgPSAwOyAkaSA8IDMwMDsgJGkrKykKK3sKKwlpZiAoc2x1cnBfZmlsZSgk bm9kZS0+bG9nZmlsZSwgJGxlYXZlX29mZnNldCkgPX4KKwkJL0F1dG92YWN1dW0gVmFjdXVtVXBk YXRlQ29zdHNcKGRiPSRwb3N0Z3Jlc29pZCwgcmVsPSR0ZXN0YXV0b3ZhY29pZCwgZG9iYWxhbmNl PXllcywgY29zdF9saW1pdD04MDAsLykKKwl7CisJCSRzZWVuID0gMTsKKwkJbGFzdDsKKwl9CisJ dXNsZWVwKDEwMF8wMDApOworfQorbXkgJHN0aWxsX3dhaXRpbmcgPSAkbm9kZS0+c2FmZV9wc3Fs KAorCSdwb3N0Z3JlcycsIHF7CisJU0VMRUNUIGNvdW50KCopIEZST00gcGdfc3RhdF9hY3Rpdml0 eQorCVdIRVJFIGJhY2tlbmRfdHlwZSA9ICdhdXRvdmFjdXVtIHdvcmtlcicgQU5EIHdhaXRfZXZl bnQgPSAnUGFyYWxsZWxGaW5pc2gnfSk7Citub3RlKCJsZWFkZXIgc3RpbGwgaW4gUGFyYWxsZWxG aW5pc2ggd2hlbiBjaGVja2VkOiAkc3RpbGxfd2FpdGluZzsgd2FpdGVkICIKKwkgIC4gKHRpbWUg LSAkbGVmdF9hdCkgLiAiIHMiKTsKK29rKCRzZWVuLCAnd2FpdGluZyBsZWFkZXIgcmV0dXJucyB0 byB0aGUgd2hvbGUgbGltaXQgd2hlbiBhIHdvcmtlciBsZWF2ZXMnKTsKKworcmVsZWFzZV93b3Jr ZXIoJG5vZGUpOworJG5vZGUtPndhaXRfZm9yX2xvZygKKwlxci9hdXRvbWF0aWMgdmFjdXVtIG9m IHRhYmxlICJwb3N0Z3Jlc1wucHVibGljXC50ZXN0X2F1dG92YWMiLywKKwkkbGVhdmVfb2Zmc2V0 KTsKK215IEBsaW1pdHM2ID0KKyAgc2x1cnBfZmlsZSgkbm9kZS0+bG9nZmlsZSwgJGxlYXZlX29m ZnNldCkgPX4KKyAgL3BhcmFsbGVsIGF1dG92YWN1dW0gd29ya2VyIHVwZGF0ZWQgY29zdCBwYXJh bXM6IGNvc3RfbGltaXQ9KFxkKyksL2c7Citub3RlKCJwYXJhbGxlbCB3b3JrZXIgY29zdF9saW1p dCBzZXF1ZW5jZSBhZnRlciB0aGUgd29ya2VyIGxlZnQ6IEBsaW1pdHM2Iik7CitpcygkbGltaXRz NlstMV0gLy8gJ25vbmUnLCAnODAwJywgJ3BhcmFsbGVsIHdvcmtlciBlbmRzIGF0IHRoZSB3aG9s ZSBsaW1pdCcpOwogJG5vZGUtPnN0b3A7CiBkb25lX3Rlc3RpbmcoKTsK --===============4537935992878022734== Content-Type: text/plain Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="nocfbot-av-cost-wait-review.txt" MIME-Version: 1.0 IyBSZXZpZXcgb2YgWnNvbHQgdjMgKEJoYXJhdGggYXBwcm9hY2ggKyB0ZXN0cykgZm9yIHRoZSBw YXJhbGxlbCBhdXRvdmFjdXVtCiMgY29zdC1wYXJhbWV0ZXIgd2FpdC4gIEFsbCBidWlsZHMgZnJv bSBSRUxfMTlfU1RBQkxFIGU2MGVlNTI4NDFkLAojIC0tZW5hYmxlLWNhc3NlcnQgLS1lbmFibGUt aW5qZWN0aW9uLXBvaW50cyAtLWVuYWJsZS10YXAtdGVzdHMuCiMgICB6c29sdCAgICsgdjMKIyAg IG5pa3YyICAgKyBOaWtvbGF5IHYyICh0aW1lZCB3YWl0KQojICAgbm9maXggICB2MyB0ZXN0cyBh bmQgaW5qZWN0aW9uIHBvaW50cywgd2l0aG91dCB0aGUgcGFyYWxsZWwuYyBhbmQgYXV0b3ZhY3V1 bS5jIGNoYW5nZXMKIyAgIG5vd2FrZSAgdjMgd2l0aG91dCB0aGUgYXV0b3ZhY3V1bS5jIGNoYW5n ZSAodGhlIFNldExhdGNoKQoKCj09PT09PT09IHN0YWJpbGl0eS5zaCA9PT09PT09PQoKIyEvYmlu L2Jhc2gKIyBSdW4gdGhlIHdob2xlIHRlc3RfYXV0b3ZhY3V1bSBUQVAgc3VpdGUgTiB0aW1lcyBv biBvbmUgYnVpbGQgYW5kIGNvdW50CiMgZmFpbHVyZXM7IGtlZXAgdGhlIGxvZyBvZiBldmVyeSBm YWlsaW5nIHJ1bi4KIyAgIHN0YWJpbGl0eS5zaCA8YnVpbGQ+IDxydW5zPiBbbGFiZWxdCiMgTE9B RD0xIHJ1bnMgaXQgd2hpbGUgZXZlcnkgQ1BVIGlzIGJ1c3kgKG9uZSBidXN5IGxvb3AgcGVyIGNv cmUpLCB0aGUKIyBraW5kIG9mIG1hY2hpbmUgd2hlcmUgdGltaW5nLWRlcGVuZGVudCB0ZXN0cyBi cmVhay4Kc2V0IC11CkI9JDE7IE49JDI7IEw9JHszOi1pZGxlfQpBPSQoY2QgIiQoZGlybmFtZSAi JDAiKSIgJiYgcHdkKQpPVVQ9JEEvc3RhYmlsaXR5LiRCLiRMLnR4dAo6ID4gJE9VVAppZiBbICIk e0xPQUQ6LTB9IiA9IDEgXTsgdGhlbgogIGZvciBfIGluICQoc2VxICIkKG5wcm9jKSIpOyBkbyAo IHdoaWxlIDo7IGRvIDo7IGRvbmUgKSAmIGRvbmUKICB0cmFwICdraWxsICQoam9icyAtcCkgMj4v ZGV2L251bGwnIEVYSVQKZmkKZmFpbD0wCmZvciBpIGluICQoc2VxIDEgJE4pOyBkbwogIHQwPSQo ZGF0ZSArJXMuJU4pCiAgaWYgbWFrZSAtQyAkSE9NRS9wZ2F2L2ItJEIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2F1dG92YWN1dW0gY2hlY2sgPiAvdG1wL2NsYXVkZS0xMDAwL3N0YWIuJEIubG9nIDI+ JjE7IHRoZW4gcj1vazsgZWxzZSByPUZBSUw7IGZhaWw9JCgoZmFpbCsxKSk7CiAgICBta2RpciAt cCAkQS9zdGFiaWxpdHktZmFpbDsgY3AgLXIgJEhPTUUvcGdhdi9iLSRCL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9hdXRvdmFjdXVtL3RtcF9jaGVjay9sb2cgJEEvc3RhYmlsaXR5LWZhaWwvJEIuJEwu cnVuJGkgMj4vZGV2L251bGwKICAgIGNwIC90bXAvY2xhdWRlLTEwMDAvc3RhYi4kQi5sb2cgJEEv c3RhYmlsaXR5LWZhaWwvJEIuJEwucnVuJGkubWFrZS5sb2c7IGZpCiAgcHJpbnRmICclcyBydW4g JTJkICVzICUuMWZzXG4nICIkQi8kTCIgJGkgJHIgIiQoZWNobyAiJChkYXRlICslcy4lTikgLSAk dDAiIHwgYmMpIiB8IHRlZSAtYSAkT1VUCmRvbmUKZWNobyAiJEIvJEw6ICRmYWlsIGZhaWx1cmVz IGluICROIHJ1bnMiIHwgdGVlIC1hICRPVVQKCgo9PT09PT09PSB3YWtldXBzLnNoID09PT09PT09 CgojIS9iaW4vYmFzaAojIEhvdyBvZnRlbiB0aGUgYXV0b3ZhY3V1bSBsZWFkZXIgd2FrZXMgdXAg d2hpbGUgaXQgb25seSB3YWl0cyBmb3IgYSBwYXJhbGxlbAojIHdvcmtlciwgYW5kIGhvdyBmYXN0 IGl0IHBpY2tzIHVwIGEgY29uZmlnIHJlbG9hZCwgd2l0aCBlYWNoIHByb3Bvc2VkIGZpeC4KIyAg IHpzb2x0ICB2MyAod2FpdCBpbiBXYWl0Rm9yUGFyYWxsZWxXb3JrZXJzVG9GaW5pc2goKSwgd29r ZW4gYnkgdGhlIHJlbG9hZAojICAgICAgICAgIHNpZ25hbCBvciBieSBTZXRMYXRjaCgpIG9uIGEg cmViYWxhbmNlKQojICAgbmlrdjIgIHYyICh0aW1lZCB3YWl0IGluIHZhY3V1bXBhcmFsbGVsLmMs IDEwMCBtcykKIyBUaGUgcGFyYWxsZWwgd29ya2VyIGlzIGhlbGQgYXQgdGhlIGJ1aWxkJ3Mgb3du IGluamVjdGlvbiBwb2ludCBiZWZvcmUgaXRzCiMgaW5kZXg7IHRoZSBsZWFkZXIgZ29lcyB0aHJv dWdoIGl0cyBvd24gaW5kZXhlcyBhbmQgdGhlbiB3YWl0cy4gIFdha2V1cHMgYXJlCiMgdGhlIGxl YWRlcidzIHZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzIG92ZXIgSE9MRCBzZWNvbmRzICgvcHJv YykuCiMgICB3YWtldXBzLnNoIFtIT0xEXQpzZXQgLXUKSE9MRD0kezE6LTIwfQpBPSQoY2QgIiQo ZGlybmFtZSAiJDAiKSIgJiYgcHdkKQpmb3IgQiBpbiB6c29sdCBuaWt2MjsgZG8KICBJPSRIT01F L3BnYXYvaS0kQi9iaW4KICBjYXNlICRCIGluCiAgICB6c29sdCkgV1BUPXBhcmFsbGVsLWF1dG92 YWN1dW0td29ya2VyLWJlZm9yZS1pbmRleDsgTFBUPXBhcmFsbGVsLWF1dG92YWN1dW0tbGVhZGVy LWJlZm9yZS1pbmRleCA7OwogICAgbmlrdjIpIFdQVD1wYXJhbGxlbC12YWN1dW0td29ya2VyLWJl Zm9yZS1pbmRleDsgICAgIExQVD1wYXJhbGxlbC12YWN1dW0tbGVhZGVyLWJlZm9yZS1pbmRleCA7 OwogIGVzYWMKICBEPSQobWt0ZW1wIC1kIC90bXAvY2xhdWRlLTEwMDAvd2suWFhYWCk7IFA9NTU0 NDAKICAiJEkvaW5pdGRiIiAtRCAkRCAtQSB0cnVzdCAtLW5vLXN5bmMgLVUgcG9zdGdyZXMgPi9k ZXYvbnVsbAogIGNhdCA+PiAkRC9wb3N0Z3Jlc3FsLmNvbmYgPDxFT0YKcG9ydCA9ICRQCnVuaXhf c29ja2V0X2RpcmVjdG9yaWVzID0gJy90bXAnCmF1dG92YWN1dW1fbWF4X3dvcmtlcnMgPSAxCmF1 dG92YWN1dW1fd29ya2VyX3Nsb3RzID0gMgphdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJz ID0gMgptYXhfd29ya2VyX3Byb2Nlc3NlcyA9IDEwCm1heF9wYXJhbGxlbF93b3JrZXJzID0gMTAK bG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMgpsb2dfbGluZV9wcmVmaXggPSAnJW0gWyVwXSAnCmF1 dG92YWN1dW1fbmFwdGltZSA9ICcxcycKbWluX3BhcmFsbGVsX2luZGV4X3NjYW5fc2l6ZSA9IDAK YXV0b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xkID0gMTAwMDAwCmF1dG92YWN1dW1fYW5hbHl6ZV90 aHJlc2hvbGQgPSAxMDAwMDAKYXV0b3ZhY3V1bV92YWN1dW1faW5zZXJ0X3RocmVzaG9sZCA9IC0x CkVPRgogICIkSS9wZ19jdGwiIC1EICREIC1sICREL2xvZyAtdyBzdGFydCA+L2Rldi9udWxsCiAg cSgpIHsgIiRJL3BzcWwiIC1YIC1xQXQgLWggL3RtcCAtcCAkUCAtVSBwb3N0Z3JlcyAtYyAiJDEi OyB9CiAgcSAiQ1JFQVRFIEVYVEVOU0lPTiBpbmplY3Rpb25fcG9pbnRzIgogIHEgIkNSRUFURSBU QUJMRSB0ZXN0X2F1dG92YWMgKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgYzEgaW50LCBjMiBpbnQs IGMzIGludCkKICAgICAgIFdJVEggKGF1dG92YWN1dW1fcGFyYWxsZWxfd29ya2VycyA9IDEsIGF1 dG92YWN1dW1fdmFjdXVtX3RocmVzaG9sZCA9IDUwLCBhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSkiCiAgcSAiSU5TRVJUIElOVE8gdGVzdF9hdXRvdmFjIChjMSwgYzIsIGMzKSBTRUxFQ1QgZywg ZywgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgZyIKICBxICJDUkVBVEUgSU5ERVgg aTEgT04gdGVzdF9hdXRvdmFjIChjMSkiOyBxICJDUkVBVEUgSU5ERVggaTIgT04gdGVzdF9hdXRv dmFjIChjMikiOyBxICJDUkVBVEUgSU5ERVggaTMgT04gdGVzdF9hdXRvdmFjIChjMykiCiAgcSAi VVBEQVRFIHRlc3RfYXV0b3ZhYyBTRVQgYzEgPSBjMSArIDEiCiAgcSAiU0VMRUNUIGluamVjdGlv bl9wb2ludHNfYXR0YWNoKCckV1BUJywgJ3dhaXQnKSIKICBxICJTRUxFQ1QgaW5qZWN0aW9uX3Bv aW50c19hdHRhY2goJyRMUFQnLCAnd2FpdCcpIgogIHEgIkFMVEVSIFRBQkxFIHRlc3RfYXV0b3Zh YyBTRVQgKGF1dG92YWN1dW1fZW5hYmxlZCA9IHRydWUpIgogIGZvciBfIGluICQoc2VxIDYwKTsg ZG8gWyAiJChxICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHdh aXRfZXZlbnQgPSAnJExQVCciKSIgPSAxIF0gJiYgYnJlYWs7IHNsZWVwIDAuNTsgZG9uZQogIGZv ciBfIGluICQoc2VxIDYwKTsgZG8gWyAiJChxICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19zdGF0 X2FjdGl2aXR5IFdIRVJFIHdhaXRfZXZlbnQgPSAnJFdQVCciKSIgPSAxIF0gJiYgYnJlYWs7IHNs ZWVwIDAuNTsgZG9uZQogIHEgIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dha2V1cCgnJExQVCcp IjsgcSAiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCckTFBUJykiCiAgc2xlZXAgMgog IExFQURFUj0kKHEgIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIGJhY2tl bmRfdHlwZSA9ICdhdXRvdmFjdXVtIHdvcmtlciciKQogIFdFVj0kKHEgIlNFTEVDVCB3YWl0X2V2 ZW50X3R5cGUgfHwgJy8nIHx8IHdhaXRfZXZlbnQgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJF IHBpZCA9ICRMRUFERVIiKQogIHYwPSQoYXdrICcvXnZvbHVudGFyeV9jdHh0X3N3aXRjaGVzL3tw cmludCAkMn0nIC9wcm9jLyRMRUFERVIvc3RhdHVzKQogIHNsZWVwICRIT0xECiAgdjE9JChhd2sg Jy9edm9sdW50YXJ5X2N0eHRfc3dpdGNoZXMve3ByaW50ICQyfScgL3Byb2MvJExFQURFUi9zdGF0 dXMpCiAgIyByZWxvYWQgbGF0ZW5jeTogZnJvbSBwZ19yZWxvYWRfY29uZigpIHRvIHRoZSBsZWFk ZXIncyBWYWN1dW1VcGRhdGVDb3N0cyB3aXRoIHRoZSBuZXcgbGltaXQKICBvZmY9JChzdGF0IC1j ICVzICREL2xvZykKICBxICJBTFRFUiBTWVNURU0gU0VUIGF1dG92YWN1dW1fdmFjdXVtX2Nvc3Rf bGltaXQgPSA3NzciCiAgdDA9JChkYXRlICslcy4lTik7IHEgIlNFTEVDVCBwZ19yZWxvYWRfY29u ZigpIgogIGZvciBfIGluICQoc2VxIDMwMCk7IGRvIHRhaWwgLWMgKyQoKG9mZisxKSkgJEQvbG9n IHwgZ3JlcCAtcSAicGlkXHxjb3N0X2xpbWl0PTc3NyIgJiYgdGFpbCAtYyArJCgob2ZmKzEpKSAk RC9sb2cgfCBncmVwIC1xICJWYWN1dW1VcGRhdGVDb3N0cy4qY29zdF9saW1pdD03NzciICYmIGJy ZWFrOyBzbGVlcCAwLjAxOyBkb25lCiAgdDE9JChkYXRlICslcy4lTikKICBsYXQ9JChlY2hvICIo JHQxIC0gJHQwKSAqIDEwMDAiIHwgYmMpCiAgcHJpbnRmICclLTZzIGxlYWRlciAlcyB3YWl0aW5n IGFzICUtMjhzIHZvbHVudGFyeSB3YWtldXBzIGluICVzczogJTZkICglLjFmL3MpICAgcmVsb2Fk IHNlZW4gYWZ0ZXIgJTUuMGYgbXNcbicgXAogICAgJEIgJExFQURFUiAiJFdFViIgJEhPTEQgJCgo djEgLSB2MCkpICIkKGVjaG8gIigkdjEgLSAkdjApIC8gJEhPTEQiIHwgYmMgLWwpIiAiJGxhdCIK ICBxICJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJyRXUFQnKSI7IHEgIlNFTEVDVCBp bmplY3Rpb25fcG9pbnRzX2RldGFjaCgnJFdQVCcpIgogICIkSS9wZ19jdGwiIC1EICREIC1tIGZh c3QgLXcgc3RvcCA+L2Rldi9udWxsCiAgY3AgJEQvbG9nICRBL3dha2V1cHMuJEIuc2VydmVyLmxv ZwogIHJtIC1yZiAkRApkb25lCgoKPT09PT09PT0gYnVpbGRfcGFydGlhbC5zaCA9PT09PT09PQoK IyEvYmluL2Jhc2gKIyBac29sdCdzIHYzIHdpdGggcGFydHMgb2YgdGhlIGZpeCB0YWtlbiBvdXQs IHRvIGNoZWNrIHRoYXQgZWFjaCB0ZXN0IGZhaWxzCiMgd2l0aG91dCB0aGUgcGFydCBpdCBpcyBt ZWFudCB0byB0ZXN0ICh0aGUgdGVzdHMgYW5kIGluamVjdGlvbiBwb2ludHMgc3RheSk6CiMgICBu b2ZpeCAgICB3aXRob3V0IHRoZSByZWZyZXNoIGluIFdhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0Zp bmlzaCgpIGFuZAojICAgICAgICAgICAgd2l0aG91dCB0aGUgU2V0TGF0Y2goKSBpbiBhdXRvdmFj X3JlY2FsY3VsYXRlX3dvcmtlcnNfZm9yX2JhbGFuY2UoKQojICAgbm93YWtlICAgb25seSB3aXRo b3V0IHRoZSBTZXRMYXRjaCgpCnNldCAtZXUKQkFTRT0ke0JBU0U6LWU2MGVlNTI4NDFkfQpTUkM9 JEhPTUUvUHJveWVjdG9zL3Bvc3RncmVzcWwKVz0kSE9NRS9wZ2F2CkE9JChjZCAiJChkaXJuYW1l ICIkMCIpIiAmJiBwd2QpClA9JChscyAkQS96c29sdC1sYXRlc3Qvbm9jZmJvdC12My0wMDAxLSou cGF0Y2gpCm1rKCkgeyAgIyBuYW1lICBmaWxlcy10by1leGNsdWRlLi4uCiAgbG9jYWwgbmFtZT0k MTsgc2hpZnQKICBsb2NhbCB0cmVlPSRXL3NyYy0kbmFtZQogIGlmIFsgISAtZCAkdHJlZSBdOyB0 aGVuCiAgICBnaXQgLUMgJFNSQyB3b3JrdHJlZSBhZGQgLXEgLS1kZXRhY2ggJHRyZWUgJEJBU0UK ICAgIGxvY2FsIGV4PSgpOyBmb3IgZiBpbiAiJEAiOyBkbyBleCs9KC0tZXhjbHVkZT0iJGYiKTsg ZG9uZQogICAgZ2l0IC1DICR0cmVlIGFwcGx5IC0td2hpdGVzcGFjZT1ub3dhcm4gIiR7ZXhbQF19 IiAiJFAiCiAgICAjIHBhcmFsbGVsX3ZhY3V1bV9yZWZyZXNoX2Nvc3RfcGFyYW1zKCkgc3RheXMg ZGVmaW5lZCBidXQgdW51c2VkIHdoZW4KICAgICMgcGFyYWxsZWwuYyBpcyBleGNsdWRlZDsgdGhh dCBpcyBmaW5lIGZvciBhIHRlc3Qtb25seSBidWlsZC4KICBmaQogIG1rZGlyIC1wICRXL2ItJG5h bWUgJiYgY2QgJFcvYi0kbmFtZQogICR0cmVlL2NvbmZpZ3VyZSAtLXByZWZpeD0kVy9pLSRuYW1l IC0tZW5hYmxlLWNhc3NlcnQgLS1lbmFibGUtaW5qZWN0aW9uLXBvaW50cyBcCiAgICAtLWVuYWJs ZS10YXAtdGVzdHMgLS1xdWlldCA+IGNvbmZpZ3VyZS5sb2cgMj4mMQogIG1ha2UgLWoiJChucHJv YykiIC1zID4gYnVpbGQubG9nIDI+JjEKICBtYWtlIC1zIGluc3RhbGwgPiBpbnN0YWxsLmxvZyAy PiYxCiAgbWFrZSAtQyBzcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMgLXMgaW5zdGFs bCA+PiBpbnN0YWxsLmxvZyAyPiYxCiAgZWNobyAiJG5hbWU6IHdhcm5pbmdzPSQoZ3JlcCAtYyAn d2FybmluZzonIGJ1aWxkLmxvZykgfCAkKGdpdCAtQyAkdHJlZSBkaWZmIC0tc3RhdCB8IHRyICdc bicgJyAnIHwgc2VkICdzLyAgKi8gL2cnKSIKfQptayBub2ZpeCBzcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9wYXJhbGxlbC5jIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCm1r IG5vd2FrZSBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwplY2hvIFBBUlRJQUwt RE9ORQoKCj09PT09PT09IHJ1bl90ZXN0Ni5zaCA9PT09PT09PQoKIyEvYmluL2Jhc2gKIyBSdW4g MDAzX3JlYmFsYW5jZV93b3JrZXJfbGVhdmVzLnBsIChac29sdCdzIHRlc3RzICsgdGVzdCA2KSBv biBvbmUgYnVpbGQuCiMgVGhlIGZpbGUgaXMgY29waWVkIGludG8gdGhlIGJ1aWxkJ3Mgc291cmNl IHRyZWUgZm9yIHRoaXMgcnVuIG9ubHkgYW5kIGlzCiMgcmVtb3ZlZCBhZnRlcndhcmRzLCB3aGF0 ZXZlciB0aGUgb3V0Y29tZSwgc28gaXQgbmV2ZXIgbGVha3MgaW50byBvdGhlciBydW5zLgojICAg cnVuX3Rlc3Q2LnNoIDxidWlsZD4Kc2V0IC11CkI9JDEKQT0kKGNkICIkKGRpcm5hbWUgIiQwIiki ICYmIHB3ZCkKVD0kSE9NRS9wZ2F2L3NyYy0kQi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0b3Zh Y3V1bS90CmNwICRBLzAwM19yZWJhbGFuY2Vfd29ya2VyX2xlYXZlcy5wbCAkVC8KdHJhcCAncm0g LWYgJFQvMDAzX3JlYmFsYW5jZV93b3JrZXJfbGVhdmVzLnBsJyBFWElUCmV4cG9ydCBQR19URVNU X1RJTUVPVVRfREVGQVVMVD02MAptYWtlIC1DICRIT01FL3BnYXYvYi0kQi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYXV0b3ZhY3V1bSBjaGVjayBcCiAgUFJPVkVfVEVTVFM9dC8wMDNfcmViYWxhbmNl X3dvcmtlcl9sZWF2ZXMucGwgPiAkQS90ZXN0Ni4kQi5sb2cgMj4mMQplY2hvICI9PSAkQiBleGl0 PSQ/IgpMPSRIT01FL3BnYXYvYi0kQi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0b3ZhY3V1bS90 bXBfY2hlY2svbG9nCmdyZXAgLWhFICcob2t8bm90IG9rKSBbMC05XSsgLSB8IyBsZWFkZXIgc3Rp bGx8IyBwYXJhbGxlbCB3b3JrZXIgY29zdF9saW1pdCBzZXF1ZW5jZXxkaWU6fExvb2tzIGxpa2Un IFwKICAkTC9yZWdyZXNzX2xvZ18wMDNfcmViYWxhbmNlX3dvcmtlcl9sZWF2ZXMgfCBzZWQgJ3Mv XlxbW15dXSpcXS8vJyB8IGN1dCAtYzEtMTcwCm1rZGlyIC1wICRBL3Rlc3Q2LWxvZ3MvJEIgJiYg Y3AgJEwvKiAkQS90ZXN0Ni1sb2dzLyRCLwoKCj09PT09PT09IHJlc3VsdHM6IHN0YWJpbGl0eSwg aWRsZSA9PT09PT09PQp6c29sdC9pZGxlIHJ1biAgMSBvayA5LjlzCnpzb2x0L2lkbGUgcnVuICAy IG9rIDkuNHMKenNvbHQvaWRsZSBydW4gIDMgb2sgOS41cwp6c29sdC9pZGxlIHJ1biAgNCBvayA5 LjlzCnpzb2x0L2lkbGUgcnVuICA1IG9rIDkuNXMKenNvbHQvaWRsZSBydW4gIDYgb2sgOS41cwp6 c29sdC9pZGxlIHJ1biAgNyBGQUlMIDkuNnMKenNvbHQvaWRsZSBydW4gIDggb2sgOS43cwp6c29s dC9pZGxlIHJ1biAgOSBvayA5LjRzCnpzb2x0L2lkbGUgcnVuIDEwIG9rIDkuN3MKenNvbHQvaWRs ZSBydW4gMTEgb2sgOS43cwp6c29sdC9pZGxlIHJ1biAxMiBvayAxMC43cwp6c29sdC9pZGxlIHJ1 biAxMyBvayA5LjhzCnpzb2x0L2lkbGUgcnVuIDE0IG9rIDkuOHMKenNvbHQvaWRsZSBydW4gMTUg b2sgOS40cwp6c29sdC9pZGxlIHJ1biAxNiBvayA5LjZzCnpzb2x0L2lkbGUgcnVuIDE3IG9rIDku NnMKenNvbHQvaWRsZSBydW4gMTggb2sgOS42cwp6c29sdC9pZGxlIHJ1biAxOSBvayA5LjVzCnpz b2x0L2lkbGUgcnVuIDIwIG9rIDkuM3MKenNvbHQvaWRsZSBydW4gMjEgb2sgOS43cwp6c29sdC9p ZGxlIHJ1biAyMiBvayAxMC4wcwp6c29sdC9pZGxlIHJ1biAyMyBvayA5LjhzCnpzb2x0L2lkbGUg cnVuIDI0IG9rIDkuN3MKenNvbHQvaWRsZSBydW4gMjUgb2sgOS4ycwp6c29sdC9pZGxlIHJ1biAy NiBvayA5LjVzCnpzb2x0L2lkbGUgcnVuIDI3IG9rIDkuNnMKenNvbHQvaWRsZSBydW4gMjggb2sg OS42cwp6c29sdC9pZGxlIHJ1biAyOSBvayA5LjRzCnpzb2x0L2lkbGUgcnVuIDMwIG9rIDkuNHMK enNvbHQvaWRsZTogMSBmYWlsdXJlcyBpbiAzMCBydW5zCk5PVEU6IHJ1biA3IGFib3ZlIGlzIG5v dCBhIHRlc3QgZmFpbHVyZTogcHJvdmUgZ2xvYmJlZCB0LzAwM19yZWJhbGFuY2Vfd29ya2VyX2xl YXZlcy5wbCwgYSBmaWxlIEkgcGxhY2VkIGluIHRoZSBzb3VyY2UgdHJlZSBieSBtaXN0YWtlIGFu ZCByZW1vdmVkIGR1cmluZyB0aGUgcnVuICgnQ2Fubm90IGRldGVjdCBzb3VyY2UnKS4gdC8wMDFf cGFyYWxsZWxfYXV0b3ZhY3V1bS5wbCBpdHNlbGYgcGFzc2VkIGluIHJ1biA3IChzZWUgc3RhYmls aXR5LWZhaWwvenNvbHQuaWRsZS5ydW43Lm1ha2UubG9nKS4gVmFsaWQgcmVzdWx0OiAwMDEgcGFz c2VkIDMwIG9mIDMwLgoKPT09PT09PT0gcmVzdWx0czogc3RhYmlsaXR5LCBldmVyeSBDUFUgYnVz eSA9PT09PT09PQp6c29sdC9sb2FkIHJ1biAgMSBvayAxNi42cwp6c29sdC9sb2FkIHJ1biAgMiBv ayAxNi43cwp6c29sdC9sb2FkIHJ1biAgMyBvayAxNi4xcwp6c29sdC9sb2FkIHJ1biAgNCBvayAx Ni40cwp6c29sdC9sb2FkIHJ1biAgNSBvayAxNS43cwp6c29sdC9sb2FkIHJ1biAgNiBvayAxNi45 cwp6c29sdC9sb2FkIHJ1biAgNyBvayAxNi44cwp6c29sdC9sb2FkIHJ1biAgOCBvayAxNi41cwp6 c29sdC9sb2FkIHJ1biAgOSBvayAxNi4zcwp6c29sdC9sb2FkIHJ1biAxMCBvayAxOC41cwp6c29s dC9sb2FkIHJ1biAxMSBvayAxNi45cwp6c29sdC9sb2FkIHJ1biAxMiBvayAxOC4zcwp6c29sdC9s b2FkIHJ1biAxMyBvayAxOS4wcwp6c29sdC9sb2FkIHJ1biAxNCBvayAxNi41cwp6c29sdC9sb2Fk IHJ1biAxNSBvayAxNi44cwp6c29sdC9sb2FkIHJ1biAxNiBvayAxNi45cwp6c29sdC9sb2FkIHJ1 biAxNyBvayAxNi44cwp6c29sdC9sb2FkIHJ1biAxOCBvayAxNi4zcwp6c29sdC9sb2FkIHJ1biAx OSBvayAxNy41cwp6c29sdC9sb2FkIHJ1biAyMCBvayAxNy4ycwp6c29sdC9sb2FkOiAwIGZhaWx1 cmVzIGluIDIwIHJ1bnMKCj09PT09PT09IHJlc3VsdHM6IHYzIHRlc3RzIG9uIHRoZSBjdXQtZG93 biBidWlsZHMgPT09PT09PT0KLS0gbm9maXgKKDEuMzk1cykgb2sgMSAtIHBhcmFsbGVsIGF1dG92 YWN1dW0gb24gdGVzdF9hdXRvdmFjIHRhYmxlCigxLjE1OXMpIG9rIDIgLSB2YWN1dW0gZGVsYXkg cGFyYW1ldGVyIGNoYW5nZXMgYXJlIHByb3BhZ2F0ZWQgdG8gcGFyYWxsZWwgdmFjdXVtIHdvcmtl cnMKKDAuMDAwcykgb2sgMyAtIHBhcmFsbGVsIHdvcmtlcnMgc2VlIHRoZSByZWJhbGFuY2VkIGNv c3QgbGltaXQKKDMwLjk0M3MpICMgZGllOiB0aW1lZCBvdXQgd2FpdGluZyBmb3IgZmlsZSBwZ2F2 L2Itbm9maXgvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2F1dG92YWN1dW0vdG1wX2NoZWNrL2xvZy8w MDFfcGFyYWxsZWxfYXV0b3ZhY3V1bV9tYWluLmxvZyBjbwooMC4xMDRzKSAjIExvb2tzIGxpa2Ug eW91ciB0ZXN0IGV4aXRlZCB3aXRoIDI1NSBqdXN0IGFmdGVyIDMuCi0tIG5vd2FrZQooMS4zMjFz KSBvayAxIC0gcGFyYWxsZWwgYXV0b3ZhY3V1bSBvbiB0ZXN0X2F1dG92YWMgdGFibGUKKDEuMTQ0 cykgb2sgMiAtIHZhY3V1bSBkZWxheSBwYXJhbWV0ZXIgY2hhbmdlcyBhcmUgcHJvcGFnYXRlZCB0 byBwYXJhbGxlbCB2YWN1dW0gd29ya2VycwooMC4wMDBzKSBvayAzIC0gcGFyYWxsZWwgd29ya2Vy cyBzZWUgdGhlIHJlYmFsYW5jZWQgY29zdCBsaW1pdAooMC44NzJzKSBvayA0IC0gY29uZmlnIHJl bG9hZCByZWFjaGVzIHBhcmFsbGVsIHdvcmtlcnMgd2hpbGUgdGhlIGxlYWRlciB3YWl0cwooMzEu NTM5cykgIyBkaWU6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBmaWxlIHBnYXYvYi1ub3dha2Uvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2F1dG92YWN1dW0vdG1wX2NoZWNrL2xvZy8wMDFfcGFyYWxsZWxf YXV0b3ZhY3V1bV9tYWluLmxvZyBjCigwLjEwM3MpICMgTG9va3MgbGlrZSB5b3VyIHRlc3QgZXhp dGVkIHdpdGggMjU1IGp1c3QgYWZ0ZXIgNC4KCj09PT09PT09IHJlc3VsdHM6IHYzIHRlc3RzICsg dGVzdCA2ID09PT09PT09Cj09IHpzb2x0IGV4aXQ9MAooMS40NDRzKSBvayAxIC0gcGFyYWxsZWwg YXV0b3ZhY3V1bSBvbiB0ZXN0X2F1dG92YWMgdGFibGUKKDEuMTQ3cykgb2sgMiAtIHZhY3V1bSBk ZWxheSBwYXJhbWV0ZXIgY2hhbmdlcyBhcmUgcHJvcGFnYXRlZCB0byBwYXJhbGxlbCB2YWN1dW0g d29ya2VycwooMS43NTlzKSAjIHBhcmFsbGVsIHdvcmtlciBjb3N0X2xpbWl0IHNlcXVlbmNlOiAy NTAKKDAuMDAwcykgb2sgMyAtIHBhcmFsbGVsIHdvcmtlcnMgc2VlIHRoZSByZWJhbGFuY2VkIGNv c3QgbGltaXQKKDEuMTk0cykgb2sgNCAtIGNvbmZpZyByZWxvYWQgcmVhY2hlcyBwYXJhbGxlbCB3 b3JrZXJzIHdoaWxlIHRoZSBsZWFkZXIgd2FpdHMKKDEuNjg0cykgb2sgNSAtIGNvc3QgbGltaXQg cmViYWxhbmNlIHJlYWNoZXMgcGFyYWxsZWwgd29ya2VycyB3aGlsZSB0aGUgbGVhZGVyIHdhaXRz CigwLjk4M3MpICMgbGVhZGVyIHN0aWxsIGluIFBhcmFsbGVsRmluaXNoIHdoZW4gY2hlY2tlZDog MTsgd2FpdGVkIDAgcwooMC4wMDBzKSBvayA2IC0gd2FpdGluZyBsZWFkZXIgcmV0dXJucyB0byB0 aGUgd2hvbGUgbGltaXQgd2hlbiBhIHdvcmtlciBsZWF2ZXMKKDAuMTA1cykgIyBwYXJhbGxlbCB3 b3JrZXIgY29zdF9saW1pdCBzZXF1ZW5jZSBhZnRlciB0aGUgd29ya2VyIGxlZnQ6IDgwMAooMC4w MDBzKSBvayA3IC0gcGFyYWxsZWwgd29ya2VyIGVuZHMgYXQgdGhlIHdob2xlIGxpbWl0Cj09IG5v d2FrZSBleGl0PTIKKDEuMzMycykgb2sgMSAtIHBhcmFsbGVsIGF1dG92YWN1dW0gb24gdGVzdF9h dXRvdmFjIHRhYmxlCigxLjI1NnMpIG9rIDIgLSB2YWN1dW0gZGVsYXkgcGFyYW1ldGVyIGNoYW5n ZXMgYXJlIHByb3BhZ2F0ZWQgdG8gcGFyYWxsZWwgdmFjdXVtIHdvcmtlcnMKKDEuNjU3cykgIyBw YXJhbGxlbCB3b3JrZXIgY29zdF9saW1pdCBzZXF1ZW5jZTogMjUwCigwLjAwMHMpIG9rIDMgLSBw YXJhbGxlbCB3b3JrZXJzIHNlZSB0aGUgcmViYWxhbmNlZCBjb3N0IGxpbWl0CigxLjA5MXMpIG9r IDQgLSBjb25maWcgcmVsb2FkIHJlYWNoZXMgcGFyYWxsZWwgd29ya2VycyB3aGlsZSB0aGUgbGVh ZGVyIHdhaXRzCig2MS42MDVzKSAjIGRpZTogdGltZWQgb3V0IHdhaXRpbmcgZm9yIGZpbGUgcGdh di9iLW5vd2FrZS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYXV0b3ZhY3V1bS90bXBfY2hlY2svbG9n LzAwM19yZWJhbGFuY2Vfd29ya2VyX2xlYXZlc19tYWluLmxvZyBjb250ZW50cyB0byBtYXRjaAoo MC4xMDRzKSAjIExvb2tzIGxpa2UgeW91ciB0ZXN0IGV4aXRlZCB3aXRoIDI1NSBqdXN0IGFmdGVy IDQuCgo9PT09PT09PSByZXN1bHRzOiBsZWFkZXIgd2FrZXVwcyB3aGlsZSB3YWl0aW5nIDIwIHMg PT09PT09PT0KenNvbHQgIGxlYWRlciAyNzIyMzggd2FpdGluZyBhcyBJUEMvUGFyYWxsZWxGaW5p c2ggICAgICAgICAgIHZvbHVudGFyeSB3YWtldXBzIGluIDIwczogICAgICAwICgwLjAvcykgICBy ZWxvYWQgc2VlbiBhZnRlciAgICAgNyBtcwpuaWt2MiAgbGVhZGVyIDI3ODk4NSB3YWl0aW5nIGFz IElQQy9QYXJhbGxlbEZpbmlzaCAgICAgICAgICAgdm9sdW50YXJ5IHdha2V1cHMgaW4gMjBzOiAg ICAxOTkgKDkuOS9zKSAgIHJlbG9hZCBzZWVuIGFmdGVyICAgICA4IG1zCg== --===============4537935992878022734==--