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 1tf3K0-00HAbh-H0 for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Feb 2025 20:45:33 +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 1tf3Jz-00GgUn-Md for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Feb 2025 20:45:31 +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.94.2) (envelope-from ) id 1tf3Jz-00GgUe-86 for pgsql-hackers@lists.postgresql.org; Mon, 03 Feb 2025 20:45:31 +0000 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tf3Jw-00367e-1Z for pgsql-hackers@postgresql.org; Mon, 03 Feb 2025 20:45:30 +0000 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-2ef748105deso6095113a91.1 for ; Mon, 03 Feb 2025 12:45:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1738615526; x=1739220326; darn=postgresql.org; h=mime-version:user-agent:date:to:from:subject:message-id:from:to:cc :subject:date:message-id:reply-to; bh=OZXAYT24cJaE7dbDLP0nMaKo9D0dv4mQl6StwMTkqQ4=; b=bEziF1L7IOpGuxXBhCOdg77n6tbqtYVXQUDoSsnRyGFfcH5Yao98wIuXH7H1s8KvI1 jyJUg+XCaQaxqoKBpPmBkfxd7vzWOzkJMBv6EAnOQhy2TrwU6h9aCmOV0+/iH9H6yq/+ 5Yhh8xv79QhHxLy3sxXqEpVrCNOfVEeAA/fGJkf4vq+xezFVd8Zvh9thDUElgTLLdaLi KBZ/xmM5lCdTmxqXj0glWSf6LH5fmv//VACMFPjD5RqkEr8fQiPVhhEIVrOe3379nkpx RJo6aOThdAwwkPngHCNTSAC6IgxcPPza7HHEceYoT/Wgc8bXQR2Rqkrnuo+8eNZCHiu9 KxjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738615526; x=1739220326; h=mime-version:user-agent:date:to:from:subject:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=OZXAYT24cJaE7dbDLP0nMaKo9D0dv4mQl6StwMTkqQ4=; b=WHWjQAuJYakZoCcL7htbAt9Ik+0fh2qjz1QgRy1sI7U/FZ/cAXCSNCFyVNyKiJ4Yik oqbVB/81fLh55/y1NUZbWcflb0kXXhAfIzV46KqFomUArTzcKz10E2atMdma63YCGktV ct1lfWpEYlX5PFv0cT6khxi3lWZ/RGjTVZTKgOf0hn8QzTrJSiTeBNaYPMZyzZiALfJC BX03I/i6Z0whpRu+vwWKmrrgWLCQiBiQJfyxvxdVQY8Scckr1XWwIUIrhYf7iwcrodNV /NWn1c9xuBSPtBG1hBIYO2Nx45WOowsc6T0qVr9ntEgVLg0FpXoLxxSjJ1vDeg/3EKpX fuNw== X-Gm-Message-State: AOJu0YzyeGTYuYfYpMvcMq8gzWNXEMigphg+cLhcZ7EwMexhjohWHuR/ PhyXTNT+tN2lIrvOKwjjzwYlsJLem8kLFEqKaWzm3Vi904pRUSYDfMHSqdkB0DVVqftu/Pf5OsY = X-Gm-Gg: ASbGncv+a/GLv9HlUZzh9rFIe81+5n+Q99m67VsPfKL5COfQIk85XBpByaFSaDa/ern 9vDl3+DDDzO5w6yYV4jfU2Z54j3f5qgFinZ/iu4uwDvFZgPGuzKPfiIbkO82+JrVTn6N9q6XJgF Wgywa0C0eHYqBGfHYIl/ikgzYg2qb2CjT311TxQZ0sklhQqGlGY9rf8Fkjmqln+uRcTc9zOrLZC SC6Kdylfp4NDurQa16kuNLgR8f4cwZ1iecuK1MtGA8OmjGy3sDNnyYCLjdbjsQJDPU4SAYrSuq6 hPMHfPwyEOwseVY9tzPJNSW9tdlqKTitigajB6ACzArFPTpydmZUA2UhJw== X-Google-Smtp-Source: AGHT+IHyLtWx5s6fjAaWf5DIhuZwb/G9CqdT2dBgaGWcCdT1bC66KtoXCDeEaAEqBJhl4ppvTREyIg== X-Received: by 2002:a17:90b:5206:b0:2ee:8031:cdbc with SMTP id 98e67ed59e1d1-2f83ac6616dmr28431658a91.23.1738615526454; Mon, 03 Feb 2025 12:45:26 -0800 (PST) Received: from jeff-laptop.lan (c-76-102-242-158.hsd1.ca.comcast.net. [76.102.242.158]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2f83bfbe85bsm11823674a91.42.2025.02.03.12.45.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 12:45:25 -0800 (PST) Message-ID: Subject: injection points for hash aggregation From: Jeff Davis To: pgsql-hackers@postgresql.org Date: Mon, 03 Feb 2025 12:45:24 -0800 Content-Type: multipart/mixed; boundary="=-E1giXv5BD2h69jPN53Lp" User-Agent: Evolution 3.44.4-0ubuntu2 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-E1giXv5BD2h69jPN53Lp Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Attached is a patch that adds a few injection points for hash aggregation. A couple questions on the injection points framework: * The patch allows forcing the partition fan-out to one. I could imagine forcing it to a specific value, is there a way to do that? * The injection_points extension offers the concept of a "local" injection point. While that makes sense for the callback function, it doesn't make sense when using the "local_var =3D 123" style, because that will happen regardless of the condition, right? * Callbacks are given very little context from the injection point itself, so it's hard for me to imagine what a callback might do other than logging the name of the injection point or waiting (as the extension implements). What else would callbacks be good for? --=20 Jeff Davis PostgreSQL Contributor Team - AWS --=-E1giXv5BD2h69jPN53Lp Content-Disposition: attachment; filename="v1-0001-Add-injection-points-for-hash-aggregation.patch" Content-Type: text/x-patch; name="v1-0001-Add-injection-points-for-hash-aggregation.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBmOThlZTk2OTIwZGU0NmE1YmJhNGRhNDA3OTM5NWQ1ZTk1OTQ3MmE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBT dW4sIDIgRmViIDIwMjUgMDU6MjY6NTggLTA4MDAKU3ViamVjdDogW1BBVENIIHYxXSBBZGQgaW5q ZWN0aW9uIHBvaW50cyBmb3IgaGFzaCBhZ2dyZWdhdGlvbi4KCi0tLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUFnZy5jICAgICAgICAgICAgICAgIHwgMjAgKysrKysrCiBzcmMvdGVzdC9tb2R1 bGVzL2luamVjdGlvbl9wb2ludHMvTWFrZWZpbGUgICAgfCAgMiArLQogLi4uL2luamVjdGlvbl9w b2ludHMvZXhwZWN0ZWQvaGFzaGFnZy5vdXQgICAgIHwgNjggKysrKysrKysrKysrKysrKysrKwog c3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL21lc29uLmJ1aWxkIHwgIDEgKwogLi4u L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcWwvaGFzaGFnZy5zcWwgIHwgMjIgKysrKysrCiA1 IGZpbGVzIGNoYW5nZWQsIDExMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2V4cGVjdGVkL2hh c2hhZ2cub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25f cG9pbnRzL3NxbC9oYXNoYWdnLnNxbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVBZ2cuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYwppbmRleCAzMDA1YjVj MGUzYi4uMjY3YTMyMjkxNDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVB Z2cuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQWdnLmMKQEAgLTI2OSw2ICsyNjks NyBAQAogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvZHluYWhhc2gu aCIKICNpbmNsdWRlICJ1dGlscy9leHBhbmRlZGRhdHVtLmgiCisjaW5jbHVkZSAidXRpbHMvaW5q ZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRpbHMvbG9ndGFwZS5oIgogI2luY2x1ZGUgInV0 aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC0xNDg5LDYg KzE0OTAsMTQgQEAgYnVpbGRfaGFzaF90YWJsZXMoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCQkJCQkJ CQkJCSAgIHBlcmhhc2gtPmFnZ25vZGUtPm51bUdyb3VwcywKIAkJCQkJCQkJCQkgICBtZW1vcnkp OwogCisjaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lOVFMKKwkJaWYgKElTX0lOSkVDVElPTl9QT0lO VF9BVFRBQ0hFRCgiaGFzaC1hZ2dyZWdhdGUtb3ZlcnNpemUtdGFibGUiKSkKKwkJeworCQkJbmJ1 Y2tldHMgPSBtZW1vcnkgLyBzaXplb2YoVHVwbGVIYXNoRW50cnlEYXRhKTsKKwkJCUlOSkVDVElP Tl9QT0lOVF9DQUNIRUQoImhhc2gtYWdncmVnYXRlLW92ZXJzaXplLXRhYmxlIik7CisJCX0KKyNl bmRpZgorCiAJCWJ1aWxkX2hhc2hfdGFibGUoYWdnc3RhdGUsIHNldG5vLCBuYnVja2V0cyk7CiAJ fQogCkBAIC0xODgxLDYgKzE4OTAsNyBAQCBoYXNoX2FnZ19jaGVja19saW1pdHMoQWdnU3RhdGUg KmFnZ3N0YXRlKQogc3RhdGljIHZvaWQKIGhhc2hfYWdnX2VudGVyX3NwaWxsX21vZGUoQWdnU3Rh dGUgKmFnZ3N0YXRlKQogeworCUlOSkVDVElPTl9QT0lOVCgiaGFzaC1hZ2dyZWdhdGUtZW50ZXIt c3BpbGwtbW9kZSIpOwogCWFnZ3N0YXRlLT5oYXNoX3NwaWxsX21vZGUgPSB0cnVlOwogCWhhc2hh Z2dfcmVjb21waWxlX2V4cHJlc3Npb25zKGFnZ3N0YXRlLCBhZ2dzdGF0ZS0+dGFibGVfZmlsbGVk LCB0cnVlKTsKIApAQCAtMjY1Miw2ICsyNjYyLDcgQEAgYWdnX3JlZmlsbF9oYXNoX3RhYmxlKEFn Z1N0YXRlICphZ2dzdGF0ZSkKIAkgKi8KIAloYXNoYWdnX3JlY29tcGlsZV9leHByZXNzaW9ucyhh Z2dzdGF0ZSwgdHJ1ZSwgdHJ1ZSk7CiAKKwlJTkpFQ1RJT05fUE9JTlQoImhhc2gtYWdncmVnYXRl LXByb2Nlc3MtYmF0Y2giKTsKIAlmb3IgKDs7KQogCXsKIAkJVHVwbGVUYWJsZVNsb3QgKnNwaWxs c2xvdCA9IGFnZ3N0YXRlLT5oYXNoX3NwaWxsX3JzbG90OwpAQCAtMjkwMCw2ICsyOTExLDE1IEBA IGhhc2hhZ2dfc3BpbGxfaW5pdChIYXNoQWdnU3BpbGwgKnNwaWxsLCBMb2dpY2FsVGFwZVNldCAq dGFwZXNldCwgaW50IHVzZWRfYml0cywKIAlucGFydGl0aW9ucyA9IGhhc2hfY2hvb3NlX251bV9w YXJ0aXRpb25zKGlucHV0X2dyb3VwcywgaGFzaGVudHJ5c2l6ZSwKIAkJCQkJCQkJCQkJIHVzZWRf Yml0cywgJnBhcnRpdGlvbl9iaXRzKTsKIAorI2lmZGVmIFVTRV9JTkpFQ1RJT05fUE9JTlRTCisJ aWYgKElTX0lOSkVDVElPTl9QT0lOVF9BVFRBQ0hFRCgiaGFzaC1hZ2dyZWdhdGUtc2luZ2xlLXBh cnRpdGlvbiIpKQorCXsKKwkJbnBhcnRpdGlvbnMgPSAxOworCQlwYXJ0aXRpb25fYml0cyA9IDA7 CisJCUlOSkVDVElPTl9QT0lOVF9DQUNIRUQoImhhc2gtYWdncmVnYXRlLXNpbmdsZS1wYXJ0aXRp b24iKTsKKwl9CisjZW5kaWYKKwogCXNwaWxsLT5wYXJ0aXRpb25zID0gcGFsbG9jMChzaXplb2Yo TG9naWNhbFRhcGUgKikgKiBucGFydGl0aW9ucyk7CiAJc3BpbGwtPm50dXBsZXMgPSBwYWxsb2Mw KHNpemVvZihpbnQ2NCkgKiBucGFydGl0aW9ucyk7CiAJc3BpbGwtPmhsbF9jYXJkID0gcGFsbG9j MChzaXplb2YoaHlwZXJMb2dMb2dTdGF0ZSkgKiBucGFydGl0aW9ucyk7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1 bGVzL2luamVjdGlvbl9wb2ludHMvTWFrZWZpbGUKaW5kZXggNGYwMTYxZmQzM2EuLmU2ODA5OTFm OGQ0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvTWFrZWZp bGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL01ha2VmaWxlCkBAIC0x MSw3ICsxMSw3IEBAIEVYVEVOU0lPTiA9IGluamVjdGlvbl9wb2ludHMKIERBVEEgPSBpbmplY3Rp b25fcG9pbnRzLS0xLjAuc3FsCiBQR0ZJTEVERVNDID0gImluamVjdGlvbl9wb2ludHMgLSBmYWNp bGl0eSBmb3IgaW5qZWN0aW9uIHBvaW50cyIKIAotUkVHUkVTUyA9IGluamVjdGlvbl9wb2ludHMg cmVpbmRleF9jb25jCitSRUdSRVNTID0gaW5qZWN0aW9uX3BvaW50cyBoYXNoYWdnIHJlaW5kZXhf Y29uYwogUkVHUkVTU19PUFRTID0gLS1kbHBhdGg9JCh0b3BfYnVpbGRkaXIpL3NyYy90ZXN0L3Jl Z3Jlc3MKIAogSVNPTEFUSU9OID0gYmFzaWMgaW5wbGFjZSBzeXNjYWNoZS11cGRhdGUtcHJ1bmVk CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvZXhwZWN0ZWQv aGFzaGFnZy5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvZXhwZWN0ZWQv aGFzaGFnZy5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc5NWE1 MzIxMGM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9p bnRzL2V4cGVjdGVkL2hhc2hhZ2cub3V0CkBAIC0wLDAgKzEsNjggQEAKKy0tIFRlc3QgZm9yIGhh c2ggYWdncmVnYXRpb24KK0NSRUFURSBFWFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsKK1NFTEVD VCBpbmplY3Rpb25fcG9pbnRzX3NldF9sb2NhbCgpOworIGluamVjdGlvbl9wb2ludHNfc2V0X2xv Y2FsIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1Qg aW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ2hhc2gtYWdncmVnYXRlLWVudGVyLXNwaWxsLW1vZGUn LCAnbm90aWNlJyk7CisgaW5qZWN0aW9uX3BvaW50c19hdHRhY2ggCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgn aGFzaC1hZ2dyZWdhdGUtcHJvY2Vzcy1iYXRjaCcsICdub3RpY2UnKTsKKyBpbmplY3Rpb25fcG9p bnRzX2F0dGFjaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VM RUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdoYXNoLWFnZ3JlZ2F0ZS1zaW5nbGUtcGFydGl0 aW9uJywgJ25vdGljZScpOworIGluamVjdGlvbl9wb2ludHNfYXR0YWNoIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitDUkVBVEUgVEFCTEUgaGFzaGFnZ19paih4IElO VEVHRVIpOworSU5TRVJUIElOVE8gaGFzaGFnZ19paiBTRUxFQ1QgZyBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDAwMCkgZzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vycz0wOworU0VUIG1heF9w YXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI9MDsKK1NFVCBlbmFibGVfc29ydD1GQUxTRTsKK1NF VCB3b3JrX21lbT0nMU1CJzsKK1NFVCBoYXNoX21lbV9tdWx0aXBsaWVyPTEuMDsKK1NFTEVDVCBD T1VOVCgqKSBGUk9NIChTRUxFQ1QgRElTVElOQ1QgeCBGUk9NIGhhc2hhZ2dfaWopIHM7CitOT1RJ Q0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgaGFzaC1hZ2dyZWdhdGUt ZW50ZXItc3BpbGwtbW9kZQorTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9u IHBvaW50IGhhc2gtYWdncmVnYXRlLXNpbmdsZS1wYXJ0aXRpb24KK05PVElDRTogIG5vdGljZSB0 cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCBoYXNoLWFnZ3JlZ2F0ZS1wcm9jZXNzLWJhdGNo CitOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgaGFzaC1hZ2dy ZWdhdGUtZW50ZXItc3BpbGwtbW9kZQorTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5q ZWN0aW9uIHBvaW50IGhhc2gtYWdncmVnYXRlLXNpbmdsZS1wYXJ0aXRpb24KK05PVElDRTogIG5v dGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCBoYXNoLWFnZ3JlZ2F0ZS1wcm9jZXNz LWJhdGNoCitOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgaGFz aC1hZ2dyZWdhdGUtZW50ZXItc3BpbGwtbW9kZQorTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBm b3IgaW5qZWN0aW9uIHBvaW50IGhhc2gtYWdncmVnYXRlLXNpbmdsZS1wYXJ0aXRpb24KK05PVElD RTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCBoYXNoLWFnZ3JlZ2F0ZS1w cm9jZXNzLWJhdGNoCitOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9p bnQgaGFzaC1hZ2dyZWdhdGUtZW50ZXItc3BpbGwtbW9kZQorTk9USUNFOiAgbm90aWNlIHRyaWdn ZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhhc2gtYWdncmVnYXRlLXNpbmdsZS1wYXJ0aXRpb24K K05PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCBoYXNoLWFnZ3Jl Z2F0ZS1wcm9jZXNzLWJhdGNoCitOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rp b24gcG9pbnQgaGFzaC1hZ2dyZWdhdGUtZW50ZXItc3BpbGwtbW9kZQorTk9USUNFOiAgbm90aWNl IHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhhc2gtYWdncmVnYXRlLXNpbmdsZS1wYXJ0 aXRpb24KK05PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCBoYXNo LWFnZ3JlZ2F0ZS1wcm9jZXNzLWJhdGNoCitOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBp bmplY3Rpb24gcG9pbnQgaGFzaC1hZ2dyZWdhdGUtZW50ZXItc3BpbGwtbW9kZQorTk9USUNFOiAg bm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhhc2gtYWdncmVnYXRlLXNpbmds ZS1wYXJ0aXRpb24KK05PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2lu dCBoYXNoLWFnZ3JlZ2F0ZS1wcm9jZXNzLWJhdGNoCitOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVk IGZvciBpbmplY3Rpb24gcG9pbnQgaGFzaC1hZ2dyZWdhdGUtZW50ZXItc3BpbGwtbW9kZQorTk9U SUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhhc2gtYWdncmVnYXRl LXNpbmdsZS1wYXJ0aXRpb24KK05PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlv biBwb2ludCBoYXNoLWFnZ3JlZ2F0ZS1wcm9jZXNzLWJhdGNoCitOT1RJQ0U6ICBub3RpY2UgdHJp Z2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgaGFzaC1hZ2dyZWdhdGUtZW50ZXItc3BpbGwtbW9k ZQorTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhhc2gtYWdn cmVnYXRlLXNpbmdsZS1wYXJ0aXRpb24KK05PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGlu amVjdGlvbiBwb2ludCBoYXNoLWFnZ3JlZ2F0ZS1wcm9jZXNzLWJhdGNoCitOT1RJQ0U6ICBub3Rp Y2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgaGFzaC1hZ2dyZWdhdGUtZW50ZXItc3Bp bGwtbW9kZQorTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhh c2gtYWdncmVnYXRlLXNpbmdsZS1wYXJ0aXRpb24KK05PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQg Zm9yIGluamVjdGlvbiBwb2ludCBoYXNoLWFnZ3JlZ2F0ZS1wcm9jZXNzLWJhdGNoCisgY291bnQg IAorLS0tLS0tLS0KKyAxMDAwMDAKKygxIHJvdykKKworRFJPUCBUQUJMRSBoYXNoYWdnX2lqOwor RFJPUCBFWFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvaW5q ZWN0aW9uX3BvaW50cy9tZXNvbi5idWlsZAppbmRleCAyNTkwNDVlNWMyZC4uZDYxMTQ5NzEyZmQg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9tZXNvbi5idWls ZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQKQEAg LTM1LDYgKzM1LDcgQEAgdGVzdHMgKz0gewogICAncmVncmVzcyc6IHsKICAgICAnc3FsJzogWwog ICAgICAgJ2luamVjdGlvbl9wb2ludHMnLAorICAgICAgJ2hhc2hhZ2cnLAogICAgICAgJ3JlaW5k ZXhfY29uYycsCiAgICAgXSwKICAgICAncmVncmVzc19hcmdzJzogWyctLWRscGF0aCcsIG1lc29u LmJ1aWxkX3Jvb3QoKSAvICdzcmMvdGVzdC9yZWdyZXNzJ10sCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvc3FsL2hhc2hhZ2cuc3FsIGIvc3JjL3Rlc3QvbW9k dWxlcy9pbmplY3Rpb25fcG9pbnRzL3NxbC9oYXNoYWdnLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYzg1MmM1OTA3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvc3FsL2hhc2hhZ2cuc3FsCkBAIC0wLDAgKzEs MjIgQEAKKy0tIFRlc3QgZm9yIGhhc2ggYWdncmVnYXRpb24KK0NSRUFURSBFWFRFTlNJT04gaW5q ZWN0aW9uX3BvaW50czsKKworU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc2V0X2xvY2FsKCk7CisK K1NFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgnaGFzaC1hZ2dyZWdhdGUtZW50ZXItc3Bp bGwtbW9kZScsICdub3RpY2UnKTsKK1NFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgnaGFz aC1hZ2dyZWdhdGUtcHJvY2Vzcy1iYXRjaCcsICdub3RpY2UnKTsKK1NFTEVDVCBpbmplY3Rpb25f cG9pbnRzX2F0dGFjaCgnaGFzaC1hZ2dyZWdhdGUtc2luZ2xlLXBhcnRpdGlvbicsICdub3RpY2Un KTsKKworQ1JFQVRFIFRBQkxFIGhhc2hhZ2dfaWooeCBJTlRFR0VSKTsKK0lOU0VSVCBJTlRPIGhh c2hhZ2dfaWogU0VMRUNUIGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CisKK1NF VCBtYXhfcGFyYWxsZWxfd29ya2Vycz0wOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9n YXRoZXI9MDsKK1NFVCBlbmFibGVfc29ydD1GQUxTRTsKK1NFVCB3b3JrX21lbT0nMU1CJzsKK1NF VCBoYXNoX21lbV9tdWx0aXBsaWVyPTEuMDsKKworU0VMRUNUIENPVU5UKCopIEZST00gKFNFTEVD VCBESVNUSU5DVCB4IEZST00gaGFzaGFnZ19paikgczsKKworRFJPUCBUQUJMRSBoYXNoYWdnX2lq OworRFJPUCBFWFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsKLS0gCjIuMzQuMQoK --=-E1giXv5BD2h69jPN53Lp--