Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p2Hvf-0006W7-Nn for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Dec 2022 20:19:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p2Hve-0003S5-3M for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Dec 2022 20:19:06 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p2Hvd-0003Rv-Hz for pgsql-hackers@lists.postgresql.org; Mon, 05 Dec 2022 20:19:05 +0000 Received: from relay2-d.mail.gandi.net ([217.70.183.194]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p2HvZ-0005Si-Sn for pgsql-hackers@lists.postgresql.org; Mon, 05 Dec 2022 20:19:04 +0000 Received: (Authenticated sender: vik@postgresfriends.org) by mail.gandi.net (Postfix) with ESMTPSA id 40C7B40002 for ; Mon, 5 Dec 2022 20:18:57 +0000 (UTC) Content-Type: multipart/mixed; boundary="------------yQgDh2TPP54RZ168B2fuuptk" Message-ID: Date: Mon, 5 Dec 2022 21:18:57 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: ANY_VALUE aggregate Content-Language: en-US From: Vik Fearing To: PostgreSQL Hackers References: <5cff866c-10a8-d2df-32cb-e9072e6b04a2@postgresfriends.org> In-Reply-To: <5cff866c-10a8-d2df-32cb-e9072e6b04a2@postgresfriends.org> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------yQgDh2TPP54RZ168B2fuuptk Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 12/5/22 15:57, Vik Fearing wrote: > The SQL:2023 Standard defines a new aggregate named ANY_VALUE.  It > returns an implementation-dependent (i.e. non-deterministic) value from > the rows in its group. > > PFA an implementation of this aggregate. Here is v2 of this patch. I had forgotten to update sql_features.txt. -- Vik Fearing --------------yQgDh2TPP54RZ168B2fuuptk Content-Type: text/x-patch; charset=UTF-8; name="0001-Implement-ANY_VALUE-aggregate.v02.patch" Content-Disposition: attachment; filename="0001-Implement-ANY_VALUE-aggregate.v02.patch" Content-Transfer-Encoding: base64 RnJvbSBhOWJiNjFhYWI5Nzg4YWUyNWZkY2QyOGY3ZGNmYjU0YTI2MzY2NWNjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogU2F0LCA5IEFwciAyMDIyIDAwOjA3OjM4ICswMjAwClN1YmplY3Q6 IFtQQVRDSF0gSW1wbGVtZW50IEFOWV9WQUxVRSBhZ2dyZWdhdGUKClNRTDoyMDIzIGRlZmlu ZXMgYW4gQU5ZX1ZBTFVFIGFnZ3JlZ2F0ZSB3aG9zZSBwdXJwb3NlIGlzIHRvIGVtaXQgYW4K aW1wbGVtZW50YXRpb24tZGVwZW5kZW50IChpLmUuIG5vbi1kZXRlcm1pbmlzdGljKSB2YWx1 ZSBmcm9tIHRoZQphZ2dyZWdhdGVkIHJvd3MuCi0tLQogZG9jL3NyYy9zZ21sL2Z1bmMuc2dt bCAgICAgICAgICAgICAgICAgICB8IDE0ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9j YXRhbG9nL3NxbF9mZWF0dXJlcy50eHQgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L21pc2MuYyAgICAgICAgICAgICB8IDEyICsrKysrKysrKysrKwogc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19hZ2dyZWdhdGUuZGF0ICAgICB8ICA0ICsrKysKIHNyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgfCAgOCArKysrKysrKwogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dCB8IDE4ICsrKysrKysrKysrKysrKysrKwog c3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwgICAgICB8ICA1ICsrKysrCiA3 IGZpbGVzIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCAyMDUyZDNj ODQ0Li4xODIzZWU3MWQ3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKQEAgLTE5NzA2LDE2ICsxOTcwNiwzMCBAQCBT RUxFQ1QgTlVMTElGKHZhbHVlLCAnKG5vbmUpJykgLi4uCiAgICAgICAgPHBhcmE+CiAgICAg ICAgIERlc2NyaXB0aW9uCiAgICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICAgPGVudHJ5 PlBhcnRpYWwgTW9kZTwvZW50cnk+CiAgICAgICA8L3Jvdz4KICAgICAgPC90aGVhZD4KIAog ICAgICA8dGJvZHk+CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3Rh YmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRl eHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5hbnlfdmFsdWU8L3ByaW1hcnk+CisgICAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+YW55X3ZhbHVlPC9mdW5jdGlvbj4g KCA8dHlwZT4iYW55IjwvdHlwZT4gKQorICAgICAgICA8cmV0dXJudmFsdWU+PHJlcGxhY2Vh YmxlPnNhbWUgYXMgaW5wdXQgdHlwZTwvcmVwbGFjZWFibGU+PC9yZXR1cm52YWx1ZT4KKyAg ICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIENob29zZXMgYSBub24tZGV0 ZXJtaW5pc3RpYyB2YWx1ZSBmcm9tIHRoZSBub24tbnVsbCBpbnB1dCB2YWx1ZXMuCisgICAg ICAgPC9wYXJhPjwvZW50cnk+CisgICAgICAgPGVudHJ5PlllczwvZW50cnk+CisgICAgICA8 L3Jvdz4KKwogICAgICAgPHJvdz4KICAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9l bnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgogICAgICAgICA8aW5kZXh0ZXJt PgogICAgICAgICAgPHByaW1hcnk+YXJyYXlfYWdnPC9wcmltYXJ5PgogICAgICAgICA8L2lu ZGV4dGVybT4KICAgICAgICAgPGZ1bmN0aW9uPmFycmF5X2FnZzwvZnVuY3Rpb24+ICggPHR5 cGU+YW55bm9uYXJyYXk8L3R5cGU+ICkKICAgICAgICAgPHJldHVybnZhbHVlPmFueWFycmF5 PC9yZXR1cm52YWx1ZT4KICAgICAgICA8L3BhcmE+CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9m ZWF0dXJlcy50eHQKaW5kZXggODcwNGE0MmI2MC4uYjdiNmFkNjMzNCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMudHh0CisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dApAQCAtNTE1LDE2ICs1MTUsMTcgQEAgVDYxNwlG SVJTVF9WQUxVRSBhbmQgTEFTVF9WQUxVRSBmdW5jdGlvbnMJCQlZRVMKIFQ2MTgJTlRIX1ZB TFVFIGZ1bmN0aW9uCQkJTk8JZnVuY3Rpb24gZXhpc3RzLCBidXQgc29tZSBvcHRpb25zIG1p c3NpbmcKIFQ2MTkJTmVzdGVkIHdpbmRvdyBmdW5jdGlvbnMJCQlOTwkKIFQ2MjAJV0lORE9X IGNsYXVzZTogR1JPVVBTIG9wdGlvbgkJCVlFUwkKIFQ2MjEJRW5oYW5jZWQgbnVtZXJpYyBm dW5jdGlvbnMJCQlZRVMJCiBUNjIyCVRyaWdvbm9tZXRyaWMgZnVuY3Rpb25zCQkJWUVTCQog VDYyMwlHZW5lcmFsIGxvZ2FyaXRobSBmdW5jdGlvbnMJCQlZRVMJCiBUNjI0CUNvbW1vbiBs b2dhcml0aG0gZnVuY3Rpb25zCQkJWUVTCQogVDYyNQlMSVNUQUdHCQkJTk8JCitUNjI2CUFO WV9WQUxVRQkJCVlFUwkKIFQ2MzEJSU4gcHJlZGljYXRlIHdpdGggb25lIGxpc3QgZWxlbWVu dAkJCVlFUwkKIFQ2NDEJTXVsdGlwbGUgY29sdW1uIGFzc2lnbm1lbnQJCQlOTwlvbmx5IHNv bWUgc3ludGF4IHZhcmlhbnRzIHN1cHBvcnRlZAogVDY1MQlTUUwtc2NoZW1hIHN0YXRlbWVu dHMgaW4gU1FMIHJvdXRpbmVzCQkJWUVTCQogVDY1MglTUUwtZHluYW1pYyBzdGF0ZW1lbnRz IGluIFNRTCByb3V0aW5lcwkJCU5PCQogVDY1MwlTUUwtc2NoZW1hIHN0YXRlbWVudHMgaW4g ZXh0ZXJuYWwgcm91dGluZXMJCQlZRVMJCiBUNjU0CVNRTC1keW5hbWljIHN0YXRlbWVudHMg aW4gZXh0ZXJuYWwgcm91dGluZXMJCQlOTwkKIFQ2NTUJQ3ljbGljYWxseSBkZXBlbmRlbnQg cm91dGluZXMJCQlZRVMJCiBUODExCUJhc2ljIFNRTC9KU09OIGNvbnN0cnVjdG9yIGZ1bmN0 aW9ucwkJCU5PCQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21pc2MuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9taXNjLmMKaW5kZXggOWMxMzI1MTIzMS4uOTRjOTJk ZTA2ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21pc2MuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvbWlzYy5jCkBAIC05MjgsOCArOTI4LDIwIEBAIHBnX2dl dF9yZXBsaWNhX2lkZW50aXR5X2luZGV4KFBHX0ZVTkNUSU9OX0FSR1MpCiAJaWR4b2lkID0g UmVsYXRpb25HZXRSZXBsaWNhSW5kZXgocmVsKTsKIAl0YWJsZV9jbG9zZShyZWwsIEFjY2Vz c1NoYXJlTG9jayk7CiAKIAlpZiAoT2lkSXNWYWxpZChpZHhvaWQpKQogCQlQR19SRVRVUk5f T0lEKGlkeG9pZCk7CiAJZWxzZQogCQlQR19SRVRVUk5fTlVMTCgpOwogfQorCitEYXR1bQor YW55X3ZhbHVlX3RyYW5zKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJLyogUmV0dXJuIHRoZSBm aXJzdCBub24tbnVsbCBhcmd1bWVudCAqLworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlQ R19SRVRVUk5fREFUVU0oUEdfR0VUQVJHX0RBVFVNKDApKTsKKwlpZiAoIVBHX0FSR0lTTlVM TCgxKSkKKwkJUEdfUkVUVVJOX0RBVFVNKFBHX0dFVEFSR19EQVRVTSgxKSk7CisJUEdfUkVU VVJOX05VTEwoKTsKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19h Z2dyZWdhdGUuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hZ2dyZWdhdGUuZGF0Cmlu ZGV4IGI5MTEwYTUyOTguLjM3NjI2ZDZmMGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfYWdncmVnYXRlLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2Fn Z3JlZ2F0ZS5kYXQKQEAgLTYyMCw5ICs2MjAsMTMgQEAKICAgYWdndHJhbnNmbiA9PiAnb3Jk ZXJlZF9zZXRfdHJhbnNpdGlvbl9tdWx0aScsIGFnZ2ZpbmFsZm4gPT4gJ2N1bWVfZGlzdF9m aW5hbCcsCiAgIGFnZ2ZpbmFsZXh0cmEgPT4gJ3QnLCBhZ2dmaW5hbG1vZGlmeSA9PiAndycs IGFnZ21maW5hbG1vZGlmeSA9PiAndycsCiAgIGFnZ3RyYW5zdHlwZSA9PiAnaW50ZXJuYWwn IH0sCiB7IGFnZ2Zub2lkID0+ICdkZW5zZV9yYW5rKGFueSknLCBhZ2draW5kID0+ICdoJywg YWdnbnVtZGlyZWN0YXJncyA9PiAnMScsCiAgIGFnZ3RyYW5zZm4gPT4gJ29yZGVyZWRfc2V0 X3RyYW5zaXRpb25fbXVsdGknLAogICBhZ2dmaW5hbGZuID0+ICdkZW5zZV9yYW5rX2ZpbmFs JywgYWdnZmluYWxleHRyYSA9PiAndCcsIGFnZ2ZpbmFsbW9kaWZ5ID0+ICd3JywKICAgYWdn bWZpbmFsbW9kaWZ5ID0+ICd3JywgYWdndHJhbnN0eXBlID0+ICdpbnRlcm5hbCcgfSwKIAor IyBhbnlfdmFsdWUKK3sgYWdnZm5vaWQgPT4gJ2FueV92YWx1ZShhbnllbGVtZW50KScsIGFn Z3RyYW5zZm4gPT4gJ2FueV92YWx1ZV90cmFucycsCisgIGFnZ2NvbWJpbmVmbiA9PiAnYW55 X3ZhbHVlX3RyYW5zJywgYWdndHJhbnN0eXBlID0+ICdhbnllbGVtZW50JyB9LAorCiBdCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBmOTMwMWIyNjI3Li4yZWU0Nzk3NTU5IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODQ5LDkgKzExODQ5LDE3IEBACiAg IHByb25hbWUgPT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfcmVjdicsIHByb3ZvbGF0 aWxlID0+ICdzJywKICAgcHJvcmV0dHlwZSA9PiAncGdfYnJpbl9taW5tYXhfbXVsdGlfc3Vt bWFyeScsIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCcsCiAgIHByb3NyYyA9PiAnYnJpbl9t aW5tYXhfbXVsdGlfc3VtbWFyeV9yZWN2JyB9LAogeyBvaWQgPT4gJzQ2NDEnLCBkZXNjciA9 PiAnSS9PJywKICAgcHJvbmFtZSA9PiAnYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFyeV9zZW5k JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAogICBwcm9yZXR0eXBlID0+ICdieXRlYScsIHByb2Fy Z3R5cGVzID0+ICdwZ19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5JywKICAgcHJvc3JjID0+ ICdicmluX21pbm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAKK3sgb2lkID0+ICc4OTgx JywgZGVzY3IgPT4gJ2FyYml0cmFyeSB2YWx1ZSBmcm9tIGFtb25nIGlucHV0IHZhbHVlcycs CisgIHByb25hbWUgPT4gJ2FueV92YWx1ZScsIHByb2tpbmQgPT4gJ2EnLCBwcm9pc3N0cmlj dCA9PiAnZicsCisgIHByb3JldHR5cGUgPT4gJ2FueWVsZW1lbnQnLCBwcm9hcmd0eXBlcyA9 PiAnYW55ZWxlbWVudCcsCisgIHByb3NyYyA9PiAnYWdncmVnYXRlX2R1bW15JyB9LAoreyBv aWQgPT4gJzg5ODInLCBkZXNjciA9PiAnYW55X3ZhbHVlIHRyYW5zaXRpb24gZnVuY3Rpb24n LAorICBwcm9uYW1lID0+ICdhbnlfdmFsdWVfdHJhbnMnLCBwcm9yZXR0eXBlID0+ICdhbnll bGVtZW50JywgcHJvYXJndHlwZXMgPT4gJ2FueWVsZW1lbnQgYW55ZWxlbWVudCcsCisgIHBy b3NyYyA9PiAnYW55X3ZhbHVlX3RyYW5zJyB9LAorCiBdCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9hZ2dyZWdhdGVzLm91dAppbmRleCBmYzJiZDQwYmUyLi5mYjg3YjlhYmYxIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQKQEAgLTIwLDE2 ICsyMCwyOCBAQCBTRUxFQ1QgYXZnKGZvdXIpIEFTIGF2Z18xIEZST00gb25lazsKICgxIHJv dykKIAogU0VMRUNUIGF2ZyhhKSBBUyBhdmdfMzIgRlJPTSBhZ2d0ZXN0IFdIRVJFIGEgPCAx MDA7CiAgICAgICAgYXZnXzMyICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIDMy LjY2NjY2NjY2NjY2NjY2NjcKICgxIHJvdykKIAorU0VMRUNUIGFueV92YWx1ZSh2KSBGUk9N IChWQUxVRVMgKDEpKSBBUyB2ICh2KTsKKyBhbnlfdmFsdWUgCistLS0tLS0tLS0tLQorICAg ICAgICAgMQorKDEgcm93KQorCitTRUxFQ1QgYW55X3ZhbHVlKHYpIEZST00gKFZBTFVFUyAo TlVMTCkpIEFTIHYgKHYpOworIGFueV92YWx1ZSAKKy0tLS0tLS0tLS0tCisgCisoMSByb3cp CisKIC0tIEluIDcuMSwgYXZnKGZsb2F0NCkgaXMgY29tcHV0ZWQgdXNpbmcgZmxvYXQ4IGFy aXRobWV0aWMuCiAtLSBSb3VuZCB0aGUgcmVzdWx0IHRvIDMgZGlnaXRzIHRvIGF2b2lkIHBs YXRmb3JtLXNwZWNpZmljIHJlc3VsdHMuCiBTRUxFQ1QgYXZnKGIpOjpudW1lcmljKDEwLDMp IEFTIGF2Z18xMDdfOTQzIEZST00gYWdndGVzdDsKICBhdmdfMTA3Xzk0MyAKIC0tLS0tLS0t LS0tLS0KICAgICAgMTA3Ljk0MwogKDEgcm93KQogCkBAIC0xODc1LDE2ICsxODg3LDIyIEBA IGhhdmluZyBleGlzdHMgKHNlbGVjdCAxIGZyb20gb25layBiIHdoZXJlIHN1bShkaXN0aW5j dCBhLmZvdXIpID0gYi5mb3VyKTsKIAogc2VsZWN0IG1heChmb28gQ09MTEFURSAiQyIpIGZp bHRlciAod2hlcmUgKGJhciBjb2xsYXRlICJQT1NJWCIpID4gJzAnKQogZnJvbSAodmFsdWVz ICgnYScsICdiJykpIEFTIHYoZm9vLGJhcik7CiAgbWF4IAogLS0tLS0KICBhCiAoMSByb3cp CiAKK1NFTEVDVCBhbnlfdmFsdWUodikgRklMVEVSIChXSEVSRSB2ID4gMikgRlJPTSAoVkFM VUVTICgxKSwgKDIpLCAoMykpIEFTIHYgKHYpOworIGFueV92YWx1ZSAKKy0tLS0tLS0tLS0t CisgICAgICAgICAzCisoMSByb3cpCisKIC0tIG91dGVyIHJlZmVyZW5jZSBpbiBGSUxURVIg KFBvc3RncmVTUUwgZXh0ZW5zaW9uKQogc2VsZWN0IChzZWxlY3QgY291bnQoKikKICAgICAg ICAgZnJvbSAodmFsdWVzICgxKSkgdDAoaW5uZXJfYykpCiBmcm9tICh2YWx1ZXMgKDIpLCgz KSkgdDEob3V0ZXJfYyk7IC0tIGlubmVyIHF1ZXJ5IGlzIGFnZ3JlZ2F0aW9uIHF1ZXJ5CiAg Y291bnQgCiAtLS0tLS0tCiAgICAgIDEKICAgICAgMQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dy ZWdhdGVzLnNxbAppbmRleCBhNGMwMGZmN2E5Li43MjA2ZTQ3NWExIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbApAQCAtMTksMTYgKzE5LDE5IEBAIENPUFkgYWdndGVz dCBGUk9NIDonZmlsZW5hbWUnOwogCiBBTkFMWVpFIGFnZ3Rlc3Q7CiAKIAogU0VMRUNUIGF2 Zyhmb3VyKSBBUyBhdmdfMSBGUk9NIG9uZWs7CiAKIFNFTEVDVCBhdmcoYSkgQVMgYXZnXzMy IEZST00gYWdndGVzdCBXSEVSRSBhIDwgMTAwOwogCitTRUxFQ1QgYW55X3ZhbHVlKHYpIEZS T00gKFZBTFVFUyAoMSkpIEFTIHYgKHYpOworU0VMRUNUIGFueV92YWx1ZSh2KSBGUk9NIChW QUxVRVMgKE5VTEwpKSBBUyB2ICh2KTsKKwogLS0gSW4gNy4xLCBhdmcoZmxvYXQ0KSBpcyBj b21wdXRlZCB1c2luZyBmbG9hdDggYXJpdGhtZXRpYy4KIC0tIFJvdW5kIHRoZSByZXN1bHQg dG8gMyBkaWdpdHMgdG8gYXZvaWQgcGxhdGZvcm0tc3BlY2lmaWMgcmVzdWx0cy4KIAogU0VM RUNUIGF2ZyhiKTo6bnVtZXJpYygxMCwzKSBBUyBhdmdfMTA3Xzk0MyBGUk9NIGFnZ3Rlc3Q7 CiAKIFNFTEVDVCBhdmcoZ3BhKSBBUyBhdmdfM180IEZST00gT05MWSBzdHVkZW50OwogCiAK QEAgLTcxMSwxNiArNzE0LDE4IEBAIGdyb3VwIGJ5IHRlbjsKIAogc2VsZWN0IHRlbiwgc3Vt KGRpc3RpbmN0IGZvdXIpIGZpbHRlciAod2hlcmUgZm91ciA+IDEwKSBmcm9tIG9uZWsgYQog Z3JvdXAgYnkgdGVuCiBoYXZpbmcgZXhpc3RzIChzZWxlY3QgMSBmcm9tIG9uZWsgYiB3aGVy ZSBzdW0oZGlzdGluY3QgYS5mb3VyKSA9IGIuZm91cik7CiAKIHNlbGVjdCBtYXgoZm9vIENP TExBVEUgIkMiKSBmaWx0ZXIgKHdoZXJlIChiYXIgY29sbGF0ZSAiUE9TSVgiKSA+ICcwJykK IGZyb20gKHZhbHVlcyAoJ2EnLCAnYicpKSBBUyB2KGZvbyxiYXIpOwogCitTRUxFQ1QgYW55 X3ZhbHVlKHYpIEZJTFRFUiAoV0hFUkUgdiA+IDIpIEZST00gKFZBTFVFUyAoMSksICgyKSwg KDMpKSBBUyB2ICh2KTsKKwogLS0gb3V0ZXIgcmVmZXJlbmNlIGluIEZJTFRFUiAoUG9zdGdy ZVNRTCBleHRlbnNpb24pCiBzZWxlY3QgKHNlbGVjdCBjb3VudCgqKQogICAgICAgICBmcm9t ICh2YWx1ZXMgKDEpKSB0MChpbm5lcl9jKSkKIGZyb20gKHZhbHVlcyAoMiksKDMpKSB0MShv dXRlcl9jKTsgLS0gaW5uZXIgcXVlcnkgaXMgYWdncmVnYXRpb24gcXVlcnkKIHNlbGVjdCAo c2VsZWN0IGNvdW50KCopIGZpbHRlciAod2hlcmUgb3V0ZXJfYyA8PiAwKQogICAgICAgICBm cm9tICh2YWx1ZXMgKDEpKSB0MChpbm5lcl9jKSkKIGZyb20gKHZhbHVlcyAoMiksKDMpKSB0 MShvdXRlcl9jKTsgLS0gb3V0ZXIgcXVlcnkgaXMgYWdncmVnYXRpb24gcXVlcnkKIHNlbGVj dCAoc2VsZWN0IGNvdW50KGlubmVyX2MpIGZpbHRlciAod2hlcmUgb3V0ZXJfYyA8PiAwKQot LSAKMi4zNC4xCgo= --------------yQgDh2TPP54RZ168B2fuuptk--