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 1w3L0W-0017rt-2F for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 21:34:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w3L0V-0031Pz-0U for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 21:34:19 +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 1w3L0U-0031Pq-2a for pgsql-hackers@lists.postgresql.org; Thu, 19 Mar 2026 21:34:19 +0000 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w3L0S-000000004cL-1v5g for pgsql-hackers@postgresql.org; Thu, 19 Mar 2026 21:34:18 +0000 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-5a27a7f711eso1169453e87.2 for ; Thu, 19 Mar 2026 14:34:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773956055; cv=none; d=google.com; s=arc-20240605; b=C+qr+yVfekokVnc73DjrR6/1RzHFrhjeH7TAyw8HykHJf7XBKGSkfH7g7wzccygF95 9aIFbRyoE3M70W37FB4CaCokIAWKzEvKJWuzZvLPCrN+Ict1JoQobBmzWA1KFy993LG3 O9LhFHCGKvNY8R4kCkMxCr8ybELBn5zO23nT5Fa13IRXecgrQ8OY8sTGB0YSHvyqAPVQ DmIOrA+cIXHzv5I0Av3Uh2iKv3dm0/L309QBh99cl1cz0ALaLRP5uGIw4XcnRjdFrIKP qV5ht5XeMDnQZho4zlumjpFEOg0oKmLD1ySCXCFznmtnDW9er77DjHw7UdnLOryPiOmU 3vYQ== 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=NtA7pvZFBjMpgTWDXGhoyRPAtqQsMj/s7niSWFkcqYQ=; fh=gr6HTH1SaQe7Y9uqzrXkw12r4AE3mn+djM1Xr9Sg1Ug=; b=OYVovNS2oyTv8kA+ugBgcjf08QxXLxbLkT+aMBm5J2ZKQoBmEUUJhwPQaW8/yaxFBD OVjAfSXveIIOBlnVptTBFg4cm86vWlh9B4WH+O0T26vQ2LwT8Q5nlAqx/Ys4z/e/1jVK nsl3nEXk75l6zwpsu4Vzr/oGvl2fF4sOYpobzsW0YsVdwvAIrw8FC89k01XTdfBukm15 ZwzrmmCcPT9kZgwwIHSaAaKlleLZMBZP7LmWui1mfFN34Sjb5PWUpCwKc7w+Sxcs69Jh PqcpiE2klhAGHwMPx6BLA7WIuU3TwQqAh3eWmskDuH8/Eb9lGqJ7ejS5Vq5tiCkB4U5T ikJA==; darn=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=1773956055; x=1774560855; darn=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=NtA7pvZFBjMpgTWDXGhoyRPAtqQsMj/s7niSWFkcqYQ=; b=bh8L+V+IFWfF3by+LxDtAJWOk+f0DxfPXI1lAC7epnz0fWGCRlMdB/F8rnNNKjVm8X kJYACccwihyed5sNRLSO3Z2pX3vCVcN1PjD2erKZ2U0L5uWxgmkUq3GPcCvoAtlDioWz pN98wgcB9lEsAJZNFcMYO2B6JqRA9V2M6C/7qKDdp2E5L6TiCMzd+1A8YCSrdd9nI1ms 3tNgooji8wl9xTvoiPANuntj0N0nysk0snX+/jftTfwab9M63ambUfQtv88wpUZNp34b Q3UeBsFU8A04WAGRIOPXPhFTE1C8egbytKCAegRL919yWuZdZBgU3HE9xB/SwSB5Pid4 ptgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773956055; x=1774560855; 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=NtA7pvZFBjMpgTWDXGhoyRPAtqQsMj/s7niSWFkcqYQ=; b=U2zFeDLSEwgsul+fk5ZUvg7E+u2Yz3zhzHiYeOOTImSCN6g7GXl7NlRxhGtBJVs5dd aJx1JABWitjA47FEZee/DkT1yisDef852DhwNyRsb+oMQlrAx2LsIVKoPTcnF3ZTk/sB pS1DRX7a3rd+uleZekyO9fMobl90MtvZOeKcgMQ3JADCcAIgbevgBiBjqQJx4VGqhACk huHADZJv9McJnhG1t8k2rSVlTpslDfUKTBDXsI/1yI/m/TZ0tLcKrjiljLzcyic3xHp5 iEILwlNLKGnniUjVAHcKcPKkJlIkt3igpHLHqXoSCH7q1Ei2ac/VKQkaRKrFo8E1Aqgb 5FUQ== X-Forwarded-Encrypted: i=1; AJvYcCWUhAsIuN3RLTPT2VsX1hUrEDIQFpEWW5ZmsNGspitQHvZqDgfrXCF3R9YVaOqzUfrbR0oN9eF8p7bYt+J+@postgresql.org X-Gm-Message-State: AOJu0Yzn/VmBWBQiPC4sa7iUOoiy9/rZqMdPmU2+NpdCYZcge+uIIaIf BIDMSxMXE8nNYdBHBKv9OKwvYlY0vHxRM37nvBCkJ934JYA2epfxrdeaqARgLUnzJWsu1zidGg3 G2uDSpEuw+qeYEIEjCw60+tm9koxRvg9+i7zJ X-Gm-Gg: ATEYQzzGZxxqITPMf6KvSFQnfDQc8ggWOp/MQl/yN3S9AXoPcscwVMWpGK7Smux0cc2 fAK39fc57bKg7Vz0AQG9JY7tl875UeL21R1yKkJirHL2z6N3PCmn+0hlYwluaWAXq8pWyQAwEid 0lpNjJu5nsq0MUGEQbD5MSktYjQJ9tN9f3pZWDhK8AaNbcNZBYza/7uJMyC4BHso15piwMSPaJ3 VLPwZQAMMQKhivjTc8WuFpSlfMfy6oA+pq9Y3Au+zfalfaLedhOtZy4qzzje7UImldloWMguvmI ZCbPoh9T X-Received: by 2002:ac2:46e8:0:b0:5a2:86bf:39aa with SMTP id 2adb3069b0e04-5a286bf39admr18848e87.2.1773956054297; Thu, 19 Mar 2026 14:34:14 -0700 (PDT) MIME-Version: 1.0 References: <1791665551.452444.1761209220211.ref@mail.yahoo.com> <1895971769.8343.1761240853939@mail.yahoo.com> <574624399.175025.1761290201491@mail.yahoo.com> <953203149.383019.1761345585325@mail.yahoo.com> <6F76FA61-E2DC-44EF-9504-889D9BDB4EBD@yandex-team.ru> <1154454839.957923.1761604611424@mail.yahoo.com> <87ldkv8cog.fsf@wibble.ilmari.org> <87ikfz7zcu.fsf@wibble.ilmari.org> <9CB824CC-70DC-4165-AC6A-9664F47209EE@yandex-team.ru> <878qbn51kb.fsf@wibble.ilmari.org> In-Reply-To: <878qbn51kb.fsf@wibble.ilmari.org> From: Masahiko Sawada Date: Thu, 19 Mar 2026 14:33:36 -0700 X-Gm-Features: AaiRm51D9Nkeqte5syu7yUdZhuj-ASydKMfeNqwsXoXZ3yB3v7hHIxPf9VXxOTc Message-ID: Subject: Re: Add uuid_to_base32hex() and base32hex_to_uuid() built-in functions To: =?UTF-8?Q?Dagfinn_Ilmari_Manns=C3=A5ker?= Cc: Aleksander Alekseev , pgsql-hackers , Andrey Borodin Content-Type: multipart/mixed; boundary="00000000000076cb11064d675494" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000076cb11064d675494 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Mar 19, 2026 at 7:36=E2=80=AFAM Dagfinn Ilmari Manns=C3=A5ker wrote: > > Masahiko Sawada writes: > > > I've made some minor changes to both patches (e.g., rewording the > > documentation changes and commit messages etc), and attached the > > updated patches. > > > > I'm going to push these patches unless there is no further comment. > > Just one minor nitpick on my patch, which is that it should use > palloc_object(), which I wasn't aware of when I wrote it originally. > > > diff --git a/src/backend/utils/adt/bytea.c b/src/backend/utils/adt/byte= a.c > > index fd7662d41ee..4dc83671aa5 100644 > > --- a/src/backend/utils/adt/bytea.c > > +++ b/src/backend/utils/adt/bytea.c > [...] > > + if (len !=3D UUID_LEN) > > + ereport(ERROR, > > + (errcode(ERRCODE_INVALID_BINARY_REPRESENT= ATION), > > + errmsg("invalid input length for type %s= ", "uuid"), > > + errdetail("Expected %d bytes, got %d.", = UUID_LEN, len))); > > + > > + uuid =3D (pg_uuid_t *) palloc(sizeof(pg_uuid_t)); > > this should be: > > + uuid =3D palloc_object(pg_uuid_t); > > > + memcpy(uuid->data, VARDATA_ANY(v), UUID_LEN); > > + PG_RETURN_UUID_P(uuid); > > +} > > + Good catch. I've pushed the 0001 patch after incorporating this change. For 0002 patch, I don't push it yet as I've found a bug in the decoding code during the self-review: + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid symbol \"%.*s\" found while decoding base32hex sequence", + pg_mblen((const char *) &c), (const char *) &c)= )); We should not use pg_mblen() anymore (c.f., CVE-2026-2006). And since 'c' is just a single byte on the stack, it leads to a buffer over-read if the invalid character is a multi-byte character. Also, a small nitpick is that we can use uint32 instead of uint64 for 'bits_buffer'. I've attached the updated patch as well as the difference from the previous version. Regards, --=20 Masahiko Sawada Amazon Web Services: https://aws.amazon.com --00000000000076cb11064d675494 Content-Type: text/x-patch; charset="UTF-8"; name="fix_issue_masahiko.patch" Content-Disposition: attachment; filename="fix_issue_masahiko.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxzjxz11 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9lbmNvZGUuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9lbmNvZGUuYwppbmRleCAyMTRkODM1YzYyNC4uZGM4NmRmMjdlZmEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9lbmNvZGUuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvZW5jb2RlLmMKQEAgLTg4NSwxNyArODg1LDE3IEBAIGJhc2UzMmhleF9lbmNvZGUo Y29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLCBjaGFyICpkc3QpCiBzdGF0aWMgdWludDY0 CiBiYXNlMzJoZXhfZGVjb2RlKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwgY2hhciAq ZHN0KQogewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSAoY29uc3QgdW5zaWduZWQgY2hh ciAqKSBzcmM7Ci0JdWludDY0CQliaXRzX2J1ZmZlciA9IDA7CisJY29uc3QgY2hhcgkqc3JjZW5k ID0gc3JjICsgc3JjbGVuLAorCQkqcyA9IHNyYzsKKwl1aW50MzIJCWJpdHNfYnVmZmVyID0gMDsK IAlpbnQJCQliaXRzX2luX2J1ZmZlciA9IDA7CiAJdWludDY0CQlvdXRwdXRfcG9zID0gMDsKLQlz aXplX3QJCWk7CiAJaW50CQkJcG9zID0gMDsJCS8qIHBvc2l0aW9uIHdpdGhpbiA4LWNoYXJhY3Rl ciBncm91cCAoMC03KSAqLwogCWJvb2wJCWVuZCA9IGZhbHNlOwkvKiBoYXZlIHdlIHNlZW4gcGFk ZGluZz8gKi8KIAotCWZvciAoaSA9IDA7IGkgPCBzcmNsZW47IGkrKykKKwl3aGlsZSAocyA8IHNy Y2VuZCkKIAl7Ci0JCXVuc2lnbmVkIGNoYXIgYyA9IGRhdGFbaV07CisJCWNoYXIgYyA9ICpzKys7 CiAJCWludAkJCXZhbDsKIAogCQkvKiBTa2lwIHdoaXRlc3BhY2UgKi8KQEAgLTkyNyw3ICs5Mjcs NyBAQCBiYXNlMzJoZXhfZGVjb2RlKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwgY2hh ciAqZHN0KQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJCSBlcnJtc2coImludmFsaWQgc3ltYm9sIFwiJS4qc1wi IGZvdW5kIHdoaWxlIGRlY29kaW5nIGJhc2UzMmhleCBzZXF1ZW5jZSIsCi0JCQkJCQkJcGdfbWJs ZW4oKGNvbnN0IGNoYXIgKikgJmMpLCAoY29uc3QgY2hhciAqKSAmYykpKTsKKwkJCQkJCQlwZ19t Ymxlbl9yYW5nZShzIC0gMSwgc3JjZW5kKSwgcyAtIDEpKSk7CiAKIAkJLyogRGVjb2RlIGJhc2Uz MmhleCBjaGFyYWN0ZXIgKDAtOSwgQS1WLCBjYXNlLWluc2Vuc2l0aXZlKSAqLwogCQlpZiAoYyA+ PSAnMCcgJiYgYyA8PSAnOScpCkBAIC05NDAsNyArOTQwLDcgQEAgYmFzZTMyaGV4X2RlY29kZShj b25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sIGNoYXIgKmRzdCkKIAkJCWVyZXBvcnQoRVJS T1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJ CQkgZXJybXNnKCJpbnZhbGlkIHN5bWJvbCBcIiUuKnNcIiBmb3VuZCB3aGlsZSBkZWNvZGluZyBi YXNlMzJoZXggc2VxdWVuY2UiLAotCQkJCQkJCXBnX21ibGVuKChjb25zdCBjaGFyICopICZjKSwg KGNvbnN0IGNoYXIgKikgJmMpKSk7CisJCQkJCQkJcGdfbWJsZW5fcmFuZ2UocyAtIDEsIHNyY2Vu ZCksIHMgLSAxKSkpOwogCiAJCS8qIEFkZCA1IGJpdHMgdG8gYnVmZmVyICovCiAJCWJpdHNfYnVm ZmVyID0gKGJpdHNfYnVmZmVyIDw8IDUpIHwgdmFsOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zdHJpbmdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Ry aW5ncy5vdXQKaW5kZXggNzVhNGE0ZjM4YTYuLjAxNjZhNTdiMGQ0IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0cmluZ3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3RyaW5ncy5vdXQKQEAgLTI3MTYsNiArMjcxNiw4IEBAIFNFTEVDVCBkZWNvZGUo JzExPScsICdiYXNlMzJoZXgnKTsgIC0tIE9LLCBub24temVybyBwYWRkaW5nIGJpdHMgYXJlIGFj Y2VwdGVkIChjCiAgXHgwOAogKDEgcm93KQogCitTRUxFQ1QgZGVjb2RlKCfjgYInLCAnYmFzZTMy aGV4Jyk7IC0tIGVycm9yCitFUlJPUjogIGludmFsaWQgc3ltYm9sICLjgYIiIGZvdW5kIHdoaWxl IGRlY29kaW5nIGJhc2UzMmhleCBzZXF1ZW5jZQogLS0KIC0tIGJhc2U2NHVybCBlbmNvZGluZy9k ZWNvZGluZwogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0cmluZ3Muc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RyaW5ncy5zcWwKaW5kZXggOWY4NmYyY2FjMTkuLjEz ZmNmZTIxMjQxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdHJpbmdzLnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdHJpbmdzLnNxbApAQCAtODYxLDYgKzg2MSw3IEBA IFNFTEVDVCBkZWNvZGUoJz0nLCAnYmFzZTMyaGV4Jyk7ICAtLSBlcnJvcgogU0VMRUNUIGRlY29k ZSgnVycsICdiYXNlMzJoZXgnKTsgIC0tIGVycm9yCiBTRUxFQ1QgZGVjb2RlKCcyNEgzNkgwPTI0 JywgJ2Jhc2UzMmhleCcpOyAtLSBlcnJvcgogU0VMRUNUIGRlY29kZSgnMTE9JywgJ2Jhc2UzMmhl eCcpOyAgLS0gT0ssIG5vbi16ZXJvIHBhZGRpbmcgYml0cyBhcmUgYWNjZXB0ZWQgKGNvbnNpc3Rl bnQgd2l0aCBiYXNlNjQpCitTRUxFQ1QgZGVjb2RlKCfjgYInLCAnYmFzZTMyaGV4Jyk7IC0tIGVy cm9yCiAKIAogLS0K --00000000000076cb11064d675494 Content-Type: text/x-patch; charset="UTF-8"; name="v8-0001-Add-base32hex-support-to-encode-and-decode-functi.patch" Content-Disposition: attachment; filename="v8-0001-Add-base32hex-support-to-encode-and-decode-functi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxzjxyw0 RnJvbSAxMGIzZGYzNjNlZDVjMWZmNDkxZTRlMDA2ZjZiMDUyOGZjOTMwYWQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXkgQm9yb2RpbiA8YW1ib3JvZGluQGFjbS5vcmc+CkRh dGU6IFdlZCwgMjkgT2N0IDIwMjUgMTU6NTM6MTIgKzA0MDAKU3ViamVjdDogW1BBVENIIHY4XSBB ZGQgYmFzZTMyaGV4IHN1cHBvcnQgdG8gZW5jb2RlKCkgYW5kIGRlY29kZSgpIGZ1bmN0aW9ucy4K TUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04 CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoaXMgYWRkcyBzdXBwb3J0IGZvciBi YXNlMzJoZXggZW5jb2RpbmcgYW5kIGRlY29kaW5nLCBhcyBkZWZpbmVkIGluClJGQyA0NjQ4IFNl Y3Rpb24gNy4gVW5saWtlIHN0YW5kYXJkIGJhc2UzMiwgYmFzZTMyaGV4IHVzZXMgdGhlCmV4dGVu ZGVkIGhleCBhbHBoYWJldCAoMC05LCBBLVYpIHdoaWNoIHByZXNlcnZlcyB0aGUgbGV4aWNvZ3Jh cGhpY2FsCm9yZGVyIG9mIHRoZSBlbmNvZGVkIGRhdGEuCgpUaGlzIGlzIHBhcnRpY3VsYXJseSB1 c2VmdWwgZm9yIHJlcHJlc2VudGluZyBVVUlEdjcgdmFsdWVzIGluIGEKY29tcGFjdCBzdHJpbmcg Zm9ybWF0IHdoaWxlIG1haW50YWluaW5nIHRoZWlyIHRpbWUtb3JkZXJlZCBzb3J0CnByb3BlcnR5 LgoKVGhlIGVuY29kZSgpIGZ1bmN0aW9uIHByb2R1Y2VzIG91dHB1dCBwYWRkZWQgd2l0aCAnPScs IHdoaWxlIGRlY29kZSgpCmFjY2VwdHMgYm90aCBwYWRkZWQgYW5kIHVucGFkZGVkIGlucHV0LiBG b2xsb3dpbmcgdGhlIGJlaGF2aW9yIG9mCm90aGVyIGVuY29kaW5nIHR5cGVzLCBkZWNvZGluZyBp cyBjYXNlLWluc2Vuc2l0aXZlLgoKU3VnZ2VzdGVkLWJ5OiBTZXJnZXkgUHJva2hvcmVua28gPHNl cmdleXByb2tob3JlbmtvQHlhaG9vLmNvbS5hdT4KQXV0aG9yOiBBbmRyZXkgQm9yb2RpbiA8eDRt bW1AeWFuZGV4LXRlYW0ucnU+CkNvLWF1dGhvcmVkLWJ5OiBBbGVrc2FuZGVyIEFsZWtzZWV2IDxh bGVrc2FuZGVyQHRpZ2VyZGF0YS5jb20+ClJldmlld2VkLWJ5OiBNYXNhaGlrbyBTYXdhZGEgPHNh d2FkYS5tc2hrQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6INCY0LvRjNGPINCn0LXRgNC00LDQutC+ 0LIgPGkuY2hlcmRha292LnBnQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9DQUo3YzZUT3JhbXIxVVRMY3lCMTI4TFdNcWl0YTFZNyUzRGFycTNLSGFVJTNEcWlrZjV5 S09RJTQwbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWJpbmFyeXN0 cmluZy5zZ21sIHwgIDI3ICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9lbmNvZGUuYyAgICAg ICAgICAgfCAxNTMgKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3RyaW5ncy5vdXQgICAgfCAxMTkgKysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3V1aWQub3V0ICAgICAgIHwgIDE2ICsrKwogc3JjL3Rlc3QvcmVncmVz cy9zcWwvc3RyaW5ncy5zcWwgICAgICAgICB8ICAzMSArKysrLQogc3JjL3Rlc3QvcmVncmVzcy9z cWwvdXVpZC5zcWwgICAgICAgICAgICB8ICAgOSArKwogNiBmaWxlcyBjaGFuZ2VkLCAzNDcgaW5z ZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVu Yy9mdW5jLWJpbmFyeXN0cmluZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1iaW5hcnlz dHJpbmcuc2dtbAppbmRleCBiMjU2MzgxZTAxZi4uM2Y3N2Y2ZDIwYjAgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9mdW5jL2Z1bmMtYmluYXJ5c3RyaW5nLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2Z1bmMvZnVuYy1iaW5hcnlzdHJpbmcuc2dtbApAQCAtNzI5LDYgKzcyOSw3IEBACiAgICAgICAg PHBhcmFtZXRlcj5mb3JtYXQ8L3BhcmFtZXRlcj4gdmFsdWVzIGFyZToKICAgICAgICA8bGluayBs aW5rZW5kPSJlbmNvZGUtZm9ybWF0LWJhc2U2NCI+PGxpdGVyYWw+YmFzZTY0PC9saXRlcmFsPjwv bGluaz4sCiAgICAgICAgPGxpbmsgbGlua2VuZD0iZW5jb2RlLWZvcm1hdC1iYXNlNjR1cmwiPjxs aXRlcmFsPmJhc2U2NHVybDwvbGl0ZXJhbD48L2xpbms+LAorICAgICAgIDxsaW5rIGxpbmtlbmQ9 ImVuY29kZS1mb3JtYXQtYmFzZTMyaGV4Ij48bGl0ZXJhbD5iYXNlMzJoZXg8L2xpdGVyYWw+PC9s aW5rPiwKICAgICAgICA8bGluayBsaW5rZW5kPSJlbmNvZGUtZm9ybWF0LWVzY2FwZSI+PGxpdGVy YWw+ZXNjYXBlPC9saXRlcmFsPjwvbGluaz4sCiAgICAgICAgPGxpbmsgbGlua2VuZD0iZW5jb2Rl LWZvcm1hdC1oZXgiPjxsaXRlcmFsPmhleDwvbGl0ZXJhbD48L2xpbms+LgogICAgICAgPC9wYXJh PgpAQCAtODA0LDYgKzgwNSwzMiBAQAogICAgICA8L2xpc3RpdGVtPgogICAgIDwvdmFybGlzdGVu dHJ5PgogCisgICAgPHZhcmxpc3RlbnRyeSBpZD0iZW5jb2RlLWZvcm1hdC1iYXNlMzJoZXgiPgor ICAgICA8dGVybT5iYXNlMzJoZXgKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+ YmFzZTMyaGV4IGZvcm1hdDwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPjwvdGVybT4KKyAg ICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgVGhlIDxsaXRlcmFsPmJhc2UzMmhl eDwvbGl0ZXJhbD4gZm9ybWF0IGlzIHRoYXQgb2YKKyAgICAgICA8dWxpbmsgdXJsPSJodHRwczov L2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzQ2NDgjc2VjdGlvbi03Ij4KKyAgICAg ICBSRkMgNDY0OCBTZWN0aW9uIDc8L3VsaW5rPi4gIEl0IHVzZXMgdGhlIGV4dGVuZGVkIGhleCBh bHBoYWJldAorICAgICAgICg8bGl0ZXJhbD4wPC9saXRlcmFsPi08bGl0ZXJhbD45PC9saXRlcmFs PiBhbmQKKyAgICAgICA8bGl0ZXJhbD5BPC9saXRlcmFsPi08bGl0ZXJhbD5WPC9saXRlcmFsPikg d2hpY2ggcHJlc2VydmVzIHRoZSBsZXhpY29ncmFwaGljYWwKKyAgICAgICBzb3J0IG9yZGVyIG9m IHRoZSBlbmNvZGVkIGRhdGEuIFRoZSA8ZnVuY3Rpb24+ZW5jb2RlPC9mdW5jdGlvbj4gZnVuY3Rp b24KKyAgICAgICBwcm9kdWNlcyBvdXRwdXQgcGFkZGVkIHdpdGggPGxpdGVyYWw+Jz0nPC9saXRl cmFsPiwgd2hpbGUgPGZ1bmN0aW9uPmRlY29kZTwvZnVuY3Rpb24+CisgICAgICAgYWNjZXB0cyBi b3RoIHBhZGRlZCBhbmQgdW5wYWRkZWQgaW5wdXQuIERlY29kaW5nIGlzIGNhc2UtaW5zZW5zaXRp dmUgYW5kIGlnbm9yZXMKKyAgICAgICB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCisgICAgICA8L3Bh cmE+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGlzIGZvcm1hdCBpcyB1c2VmdWwgZm9yIGVuY29k aW5nIFVVSURzIGluIGEgY29tcGFjdCwgc29ydGFibGUgZm9ybWF0OgorICAgICAgIDxsaXRlcmFs PnN1YnN0cmluZyhlbmNvZGUodXVpZF92YWx1ZTo6Ynl0ZWEsICdiYXNlMzJoZXgnKSBGUk9NIDEg Rk9SIDI2KTwvbGl0ZXJhbD4KKyAgICAgICBwcm9kdWNlcyBhIDI2LWNoYXJhY3RlciBzdHJpbmcg Y29tcGFyZWQgdG8gdGhlIHN0YW5kYXJkIDM2LWNoYXJhY3RlcgorICAgICAgIFVVSUQgcmVwcmVz ZW50YXRpb24uCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0 ZW50cnk+CisKICAgICA8dmFybGlzdGVudHJ5IGlkPSJlbmNvZGUtZm9ybWF0LWVzY2FwZSI+CiAg ICAgIDx0ZXJtPmVzY2FwZQogICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2VuY29kZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2VuY29kZS5jCmlu ZGV4IGY1ZjgzNWU5NDRhLi5kYzg2ZGYyN2VmYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2VuY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9lbmNvZGUuYwpAQCAt NjUsOCArNjUsOCBAQCBiaW5hcnlfZW5jb2RlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWVyZXBvcnQo RVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJ CQkJIGVycm1zZygidW5yZWNvZ25pemVkIGVuY29kaW5nOiBcIiVzXCIiLCBuYW1lYnVmKSwKLQkJ CQkgZXJyaGludCgiVmFsaWQgZW5jb2RpbmdzIGFyZSBcIiVzXCIsIFwiJXNcIiwgXCIlc1wiLCBh bmQgXCIlc1wiLiIsCi0JCQkJCQkgImJhc2U2NCIsICJiYXNlNjR1cmwiLCAiZXNjYXBlIiwgImhl eCIpKSk7CisJCQkJIGVycmhpbnQoIlZhbGlkIGVuY29kaW5ncyBhcmUgXCIlc1wiLCBcIiVzXCIs IFwiJXNcIiwgXCIlc1wiLCBhbmQgXCIlc1wiLiIsCisJCQkJCQkgImJhc2U2NCIsICJiYXNlNjR1 cmwiLCAiYmFzZTMyaGV4IiwgImVzY2FwZSIsICJoZXgiKSkpOwogCiAJZGF0YXB0ciA9IFZBUkRB VEFfQU5ZKGRhdGEpOwogCWRhdGFsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKTsKQEAgLTEx NSw4ICsxMTUsOCBAQCBiaW5hcnlfZGVjb2RlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWVyZXBvcnQo RVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJ CQkJIGVycm1zZygidW5yZWNvZ25pemVkIGVuY29kaW5nOiBcIiVzXCIiLCBuYW1lYnVmKSwKLQkJ CQkgZXJyaGludCgiVmFsaWQgZW5jb2RpbmdzIGFyZSBcIiVzXCIsIFwiJXNcIiwgXCIlc1wiLCBh bmQgXCIlc1wiLiIsCi0JCQkJCQkgImJhc2U2NCIsICJiYXNlNjR1cmwiLCAiZXNjYXBlIiwgImhl eCIpKSk7CisJCQkJIGVycmhpbnQoIlZhbGlkIGVuY29kaW5ncyBhcmUgXCIlc1wiLCBcIiVzXCIs IFwiJXNcIiwgXCIlc1wiLCBhbmQgXCIlc1wiLiIsCisJCQkJCQkgImJhc2U2NCIsICJiYXNlNjR1 cmwiLCAiYmFzZTMyaGV4IiwgImVzY2FwZSIsICJoZXgiKSkpOwogCiAJZGF0YXB0ciA9IFZBUkRB VEFfQU5ZKGRhdGEpOwogCWRhdGFsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKTsKQEAgLTgy NSw2ICs4MjUsMTQ1IEBAIGVzY19kZWNfbGVuKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xl bikKIAlyZXR1cm4gbGVuOwogfQogCisvKgorICogQkFTRTMySEVYCisgKi8KKworc3RhdGljIGNv bnN0IGNoYXIgYmFzZTMyaGV4X3RhYmxlW10gPSAiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BR UlNUVVYiOworCitzdGF0aWMgdWludDY0CitiYXNlMzJoZXhfZW5jX2xlbihjb25zdCBjaGFyICpz cmMsIHNpemVfdCBzcmNsZW4pCit7CisJLyogNSBieXRlcyBlbmNvZGUgdG8gOCBjaGFyYWN0ZXJz LCByb3VuZCB1cCB0byBtdWx0aXBsZSBvZiA4IGZvciBwYWRkaW5nICovCisJcmV0dXJuICgodWlu dDY0KSBzcmNsZW4gKyA0KSAvIDUgKiA4OworfQorCitzdGF0aWMgdWludDY0CitiYXNlMzJoZXhf ZGVjX2xlbihjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4pCit7CisJLyogRGVjb2RlIGxl bmd0aCBpcyAoc3JjbGVuICogNSkgLyA4LCBidXQgd2UgbWF5IGhhdmUgcGFkZGluZyAqLworCXJl dHVybiAoKHVpbnQ2NCkgc3JjbGVuICogNSkgLyA4OworfQorCitzdGF0aWMgdWludDY0CitiYXNl MzJoZXhfZW5jb2RlKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwgY2hhciAqZHN0KQor eworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBz cmM7CisJdWludDY0CQliaXRzX2J1ZmZlciA9IDA7CisJaW50CQkJYml0c19pbl9idWZmZXIgPSAw OworCXVpbnQ2NAkJb3V0cHV0X3BvcyA9IDA7CisJc2l6ZV90CQlpOworCisJZm9yIChpID0gMDsg aSA8IHNyY2xlbjsgaSsrKQorCXsKKwkJLyogQWRkIDggYml0cyB0byB0aGUgYnVmZmVyICovCisJ CWJpdHNfYnVmZmVyID0gKGJpdHNfYnVmZmVyIDw8IDgpIHwgZGF0YVtpXTsKKwkJYml0c19pbl9i dWZmZXIgKz0gODsKKworCQkvKiBFeHRyYWN0IDUtYml0IGNodW5rcyB3aGlsZSB3ZSBoYXZlIGVu b3VnaCBiaXRzICovCisJCXdoaWxlIChiaXRzX2luX2J1ZmZlciA+PSA1KQorCQl7CisJCQliaXRz X2luX2J1ZmZlciAtPSA1OworCQkJLyogRXh0cmFjdCB0b3AgNSBiaXRzICovCisJCQlkc3Rbb3V0 cHV0X3BvcysrXSA9IGJhc2UzMmhleF90YWJsZVsoYml0c19idWZmZXIgPj4gYml0c19pbl9idWZm ZXIpICYgMHgxRl07CisJCQkvKiBDbGVhciB0aGUgZXh0cmFjdGVkIGJpdHMgYnkgbWFza2luZyAq LworCQkJYml0c19idWZmZXIgJj0gKCgxVUxMIDw8IGJpdHNfaW5fYnVmZmVyKSAtIDEpOworCQl9 CisJfQorCisJLyogSGFuZGxlIHJlbWFpbmluZyBiaXRzIChpZiBhbnkpICovCisJaWYgKGJpdHNf aW5fYnVmZmVyID4gMCkKKwkJZHN0W291dHB1dF9wb3MrK10gPSBiYXNlMzJoZXhfdGFibGVbKGJp dHNfYnVmZmVyIDw8ICg1IC0gYml0c19pbl9idWZmZXIpKSAmIDB4MUZdOworCisJLyogQWRkIHBh ZGRpbmcgdG8gbWFrZSBsZW5ndGggYSBtdWx0aXBsZSBvZiA4IChwZXIgUkZDIDQ2NDgpICovCisJ d2hpbGUgKG91dHB1dF9wb3MgJSA4ICE9IDApCisJCWRzdFtvdXRwdXRfcG9zKytdID0gJz0nOwor CisJcmV0dXJuIG91dHB1dF9wb3M7Cit9CisKK3N0YXRpYyB1aW50NjQKK2Jhc2UzMmhleF9kZWNv ZGUoY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLCBjaGFyICpkc3QpCit7CisJY29uc3Qg Y2hhcgkqc3JjZW5kID0gc3JjICsgc3JjbGVuLAorCQkqcyA9IHNyYzsKKwl1aW50MzIJCWJpdHNf YnVmZmVyID0gMDsKKwlpbnQJCQliaXRzX2luX2J1ZmZlciA9IDA7CisJdWludDY0CQlvdXRwdXRf cG9zID0gMDsKKwlpbnQJCQlwb3MgPSAwOwkJLyogcG9zaXRpb24gd2l0aGluIDgtY2hhcmFjdGVy IGdyb3VwICgwLTcpICovCisJYm9vbAkJZW5kID0gZmFsc2U7CS8qIGhhdmUgd2Ugc2VlbiBwYWRk aW5nPyAqLworCisJd2hpbGUgKHMgPCBzcmNlbmQpCisJeworCQljaGFyIGMgPSAqcysrOworCQlp bnQJCQl2YWw7CisKKwkJLyogU2tpcCB3aGl0ZXNwYWNlICovCisJCWlmIChjID09ICcgJyB8fCBj ID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJykKKwkJCWNvbnRpbnVlOworCisJCWlm IChjID09ICc9JykKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBmaXJzdCBwYWRkaW5nIGlzIG9ubHkg dmFsaWQgYXQgcG9zaXRpb25zIDIsIDQsIDUsIG9yIDcKKwkJCSAqIHdpdGhpbiBhbiA4LWNoYXJh Y3RlciBncm91cCAoY29ycmVzcG9uZGluZyB0byAxLCAyLCAzLCBvciA0CisJCQkgKiBpbnB1dCBi eXRlcykuIFdlIG9ubHkgY2hlY2sgdGhlIHBvc2l0aW9uIGZvciB0aGUgZmlyc3QgJz0nCisJCQkg KiBjaGFyYWN0ZXIuCisJCQkgKi8KKwkJCWlmICghZW5kKQorCQkJeworCQkJCWlmIChwb3MgIT0g MiAmJiBwb3MgIT0gNCAmJiBwb3MgIT0gNSAmJiBwb3MgIT0gNykKKwkJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJCQkgZXJybXNnKCJ1bmV4cGVjdGVkIFwiPVwiIHdoaWxlIGRlY29kaW5nIGJhc2UzMmhleCBz ZXF1ZW5jZSIpKSk7CisJCQkJZW5kID0gdHJ1ZTsKKwkJCX0KKwkJCXBvcysrOworCQkJY29udGlu dWU7CisJCX0KKworCQkvKiBObyBkYXRhIGNoYXJhY3RlcnMgYWxsb3dlZCBhZnRlciBwYWRkaW5n ICovCisJCWlmIChlbmQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBzeW1ib2wg XCIlLipzXCIgZm91bmQgd2hpbGUgZGVjb2RpbmcgYmFzZTMyaGV4IHNlcXVlbmNlIiwKKwkJCQkJ CQlwZ19tYmxlbl9yYW5nZShzIC0gMSwgc3JjZW5kKSwgcyAtIDEpKSk7CisKKwkJLyogRGVjb2Rl IGJhc2UzMmhleCBjaGFyYWN0ZXIgKDAtOSwgQS1WLCBjYXNlLWluc2Vuc2l0aXZlKSAqLworCQlp ZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCisJCQl2YWwgPSBjIC0gJzAnOworCQllbHNlIGlmIChj ID49ICdBJyAmJiBjIDw9ICdWJykKKwkJCXZhbCA9IGMgLSAnQScgKyAxMDsKKwkJZWxzZSBpZiAo YyA+PSAnYScgJiYgYyA8PSAndicpCisJCQl2YWwgPSBjIC0gJ2EnICsgMTA7CisJCWVsc2UKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkgZXJybXNnKCJpbnZhbGlkIHN5bWJvbCBcIiUuKnNcIiBmb3VuZCB3aGls ZSBkZWNvZGluZyBiYXNlMzJoZXggc2VxdWVuY2UiLAorCQkJCQkJCXBnX21ibGVuX3JhbmdlKHMg LSAxLCBzcmNlbmQpLCBzIC0gMSkpKTsKKworCQkvKiBBZGQgNSBiaXRzIHRvIGJ1ZmZlciAqLwor CQliaXRzX2J1ZmZlciA9IChiaXRzX2J1ZmZlciA8PCA1KSB8IHZhbDsKKwkJYml0c19pbl9idWZm ZXIgKz0gNTsKKwkJcG9zKys7CisKKwkJLyogRXh0cmFjdCA4LWJpdCBieXRlcyB3aGVuIHdlIGhh dmUgZW5vdWdoIGJpdHMgKi8KKwkJd2hpbGUgKGJpdHNfaW5fYnVmZmVyID49IDgpCisJCXsKKwkJ CWJpdHNfaW5fYnVmZmVyIC09IDg7CisJCQlkc3Rbb3V0cHV0X3BvcysrXSA9ICh1bnNpZ25lZCBj aGFyKSAoYml0c19idWZmZXIgPj4gYml0c19pbl9idWZmZXIpOworCQkJLyogQ2xlYXIgdGhlIGV4 dHJhY3RlZCBiaXRzICovCisJCQliaXRzX2J1ZmZlciAmPSAoKDFVTEwgPDwgYml0c19pbl9idWZm ZXIpIC0gMSk7CisJCX0KKworCQkvKiBSZXNldCBwb3NpdGlvbiBhZnRlciBlYWNoIGNvbXBsZXRl IDgtY2hhcmFjdGVyIGdyb3VwICovCisJCWlmIChwb3MgPT0gOCkKKwkJCXBvcyA9IDA7CisJfQor CisJcmV0dXJuIG91dHB1dF9wb3M7Cit9CisKIC8qCiAgKiBDb21tb24KICAqLwpAQCAtODU0LDYg Kzk5MywxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0CiAJCQlwZ19iYXNlNjR1cmxfZW5jX2xlbiwg cGdfYmFzZTY0dXJsX2RlY19sZW4sIHBnX2Jhc2U2NHVybF9lbmNvZGUsIHBnX2Jhc2U2NHVybF9k ZWNvZGUKIAkJfQogCX0sCisJeworCQkiYmFzZTMyaGV4IiwKKwkJeworCQkJYmFzZTMyaGV4X2Vu Y19sZW4sIGJhc2UzMmhleF9kZWNfbGVuLCBiYXNlMzJoZXhfZW5jb2RlLCBiYXNlMzJoZXhfZGVj b2RlCisJCX0KKwl9LAogCXsKIAkJImVzY2FwZSIsCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RyaW5ncy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N0cmluZ3Mub3V0CmluZGV4IGYzODY4OGI1YzM3Li4wMTY2YTU3YjBkNCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdHJpbmdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N0cmluZ3Mub3V0CkBAIC0yNjAwLDE0ICsyNjAwLDEyNyBAQCBTRUxFQ1Qg ZGVjb2RlKGVuY29kZSgnXHgxMjM0NTY3ODkwYWJjZGVmMDAnLCAnZXNjYXBlJyksICdlc2NhcGUn KTsKIC0tIHJlcG9ydCBhbiBlcnJvciB3aXRoIGEgaGludCBsaXN0aW5nIHZhbGlkIGVuY29kaW5n cyB3aGVuIGFuIGludmFsaWQgZW5jb2RpbmcgaXMgc3BlY2lmaWVkCiBTRUxFQ1QgZW5jb2RlKCdc eDAxJzo6Ynl0ZWEsICdpbnZhbGlkJyk7ICAtLSBlcnJvcgogRVJST1I6ICB1bnJlY29nbml6ZWQg ZW5jb2Rpbmc6ICJpbnZhbGlkIgotSElOVDogIFZhbGlkIGVuY29kaW5ncyBhcmUgImJhc2U2NCIs ICJiYXNlNjR1cmwiLCAiZXNjYXBlIiwgYW5kICJoZXgiLgorSElOVDogIFZhbGlkIGVuY29kaW5n cyBhcmUgImJhc2U2NCIsICJiYXNlNjR1cmwiLCAiYmFzZTMyaGV4IiwgImVzY2FwZSIsIGFuZCAi aGV4Ii4KIFNFTEVDVCBkZWNvZGUoJzAwJywgJ2ludmFsaWQnKTsgICAgICAgICAgIC0tIGVycm9y CiBFUlJPUjogIHVucmVjb2duaXplZCBlbmNvZGluZzogImludmFsaWQiCi1ISU5UOiAgVmFsaWQg ZW5jb2RpbmdzIGFyZSAiYmFzZTY0IiwgImJhc2U2NHVybCIsICJlc2NhcGUiLCBhbmQgImhleCIu CitISU5UOiAgVmFsaWQgZW5jb2RpbmdzIGFyZSAiYmFzZTY0IiwgImJhc2U2NHVybCIsICJiYXNl MzJoZXgiLCAiZXNjYXBlIiwgYW5kICJoZXgiLgogLS0KLS0tIGJhc2U2NHVybCBlbmNvZGluZy9k ZWNvZGluZworLS0gYmFzZTMyaGV4IGVuY29kaW5nL2RlY29kaW5nCiAtLQogU0VUIGJ5dGVhX291 dHB1dCBUTyBoZXg7CitTRUxFQ1QgZW5jb2RlKCcnLCAnYmFzZTMyaGV4Jyk7ICAtLSAnJworIGVu Y29kZSAKKy0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBlbmNvZGUoJ1x4MTEnLCAnYmFz ZTMyaGV4Jyk7ICAtLSAnMjQ9PT09PT0nCisgIGVuY29kZSAgCistLS0tLS0tLS0tCisgMjQ9PT09 PT0KKygxIHJvdykKKworU0VMRUNUIGVuY29kZSgnXHgxMTIyJywgJ2Jhc2UzMmhleCcpOyAgLS0g JzI0SDA9PT09JworICBlbmNvZGUgIAorLS0tLS0tLS0tLQorIDI0SDA9PT09CisoMSByb3cpCisK K1NFTEVDVCBlbmNvZGUoJ1x4MTEyMjMzJywgJ2Jhc2UzMmhleCcpOyAgLS0gJzI0SDM2PT09Jwor ICBlbmNvZGUgIAorLS0tLS0tLS0tLQorIDI0SDM2PT09CisoMSByb3cpCisKK1NFTEVDVCBlbmNv ZGUoJ1x4MTEyMjMzNDQnLCAnYmFzZTMyaGV4Jyk7ICAtLSAnMjRIMzZIMD0nCisgIGVuY29kZSAg CistLS0tLS0tLS0tCisgMjRIMzZIMD0KKygxIHJvdykKKworU0VMRUNUIGVuY29kZSgnXHgxMTIy MzM0NDU1JywgJ2Jhc2UzMmhleCcpOyAgLS0gJzI0SDM2SDJMJworICBlbmNvZGUgIAorLS0tLS0t LS0tLQorIDI0SDM2SDJMCisoMSByb3cpCisKK1NFTEVDVCBlbmNvZGUoJ1x4MTEyMjMzNDQ1NTY2 JywgJ2Jhc2UzMmhleCcpOyAgLS0gJzI0SDM2SDJMQ089PT09PT0nCisgICAgICBlbmNvZGUgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIDI0SDM2SDJMQ089PT09PT0KKygxIHJvdykKKworU0VM RUNUIGRlY29kZSgnJywgJ2Jhc2UzMmhleCcpOyAgLS0gJycKKyBkZWNvZGUgCistLS0tLS0tLQor IFx4CisoMSByb3cpCisKK1NFTEVDVCBkZWNvZGUoJzI0PT09PT09JywgJ2Jhc2UzMmhleCcpOyAg LS0gXHgxMQorIGRlY29kZSAKKy0tLS0tLS0tCisgXHgxMQorKDEgcm93KQorCitTRUxFQ1QgZGVj b2RlKCcyNEgwPT09PScsICdiYXNlMzJoZXgnKTsgIC0tIFx4MTEyMgorIGRlY29kZSAKKy0tLS0t LS0tCisgXHgxMTIyCisoMSByb3cpCisKK1NFTEVDVCBkZWNvZGUoJzI0SDM2PT09JywgJ2Jhc2Uz MmhleCcpOyAgLS0gXHgxMTIyMzMKKyAgZGVjb2RlICAKKy0tLS0tLS0tLS0KKyBceDExMjIzMwor KDEgcm93KQorCitTRUxFQ1QgZGVjb2RlKCcyNEgzNkgwPScsICdiYXNlMzJoZXgnKTsgIC0tIFx4 MTEyMjMzNDQKKyAgIGRlY29kZSAgIAorLS0tLS0tLS0tLS0tCisgXHgxMTIyMzM0NAorKDEgcm93 KQorCitTRUxFQ1QgZGVjb2RlKCcyNEgzNkgyTCcsICdiYXNlMzJoZXgnKTsgIC0tIFx4MTEyMjMz NDQ1NQorICAgIGRlY29kZSAgICAKKy0tLS0tLS0tLS0tLS0tCisgXHgxMTIyMzM0NDU1CisoMSBy b3cpCisKK1NFTEVDVCBkZWNvZGUoJzI0SDM2SDJMQ089PT09PT0nLCAnYmFzZTMyaGV4Jyk7ICAt LSBceDExMjIzMzQ0NTU2NgorICAgICBkZWNvZGUgICAgIAorLS0tLS0tLS0tLS0tLS0tLQorIFx4 MTEyMjMzNDQ1NTY2CisoMSByb3cpCisKK1NFTEVDVCBkZWNvZGUoJzI0JywgJ2Jhc2UzMmhleCcp OyAgLS0gT0ssIHBhZGRpbmcgYD1gIGFyZSBvcHRpb25hbAorIGRlY29kZSAKKy0tLS0tLS0tCisg XHgxMQorKDEgcm93KQorCitTRUxFQ1QgZGVjb2RlKCcyNGgzNmgybGNvJywgJ2Jhc2UzMmhleCcp OyAgLS0gT0ssIHRoZSBlbmNvZGluZyBpcyBjYXNlLWluc2Vuc2l0aXZlCisgICAgIGRlY29kZSAg ICAgCistLS0tLS0tLS0tLS0tLS0tCisgXHgxMTIyMzM0NDU1NjYKKygxIHJvdykKKworU0VMRUNU IGRlY29kZSgnPScsICdiYXNlMzJoZXgnKTsgIC0tIGVycm9yCitFUlJPUjogIHVuZXhwZWN0ZWQg Ij0iIHdoaWxlIGRlY29kaW5nIGJhc2UzMmhleCBzZXF1ZW5jZQorU0VMRUNUIGRlY29kZSgnVycs ICdiYXNlMzJoZXgnKTsgIC0tIGVycm9yCitFUlJPUjogIGludmFsaWQgc3ltYm9sICJXIiBmb3Vu ZCB3aGlsZSBkZWNvZGluZyBiYXNlMzJoZXggc2VxdWVuY2UKK1NFTEVDVCBkZWNvZGUoJzI0SDM2 SDA9MjQnLCAnYmFzZTMyaGV4Jyk7IC0tIGVycm9yCitFUlJPUjogIGludmFsaWQgc3ltYm9sICIy IiBmb3VuZCB3aGlsZSBkZWNvZGluZyBiYXNlMzJoZXggc2VxdWVuY2UKK1NFTEVDVCBkZWNvZGUo JzExPScsICdiYXNlMzJoZXgnKTsgIC0tIE9LLCBub24temVybyBwYWRkaW5nIGJpdHMgYXJlIGFj Y2VwdGVkIChjb25zaXN0ZW50IHdpdGggYmFzZTY0KQorIGRlY29kZSAKKy0tLS0tLS0tCisgXHgw OAorKDEgcm93KQorCitTRUxFQ1QgZGVjb2RlKCfjgYInLCAnYmFzZTMyaGV4Jyk7IC0tIGVycm9y CitFUlJPUjogIGludmFsaWQgc3ltYm9sICLjgYIiIGZvdW5kIHdoaWxlIGRlY29kaW5nIGJhc2Uz MmhleCBzZXF1ZW5jZQorLS0KKy0tIGJhc2U2NHVybCBlbmNvZGluZy9kZWNvZGluZworLS0KIC0t IFNpbXBsZSBlbmNvZGluZy9kZWNvZGluZwogU0VMRUNUIGVuY29kZSgnXHg2OWI3M2VmZicsICdi YXNlNjR1cmwnKTsgIC0tIGFiYy1fdwogIGVuY29kZSAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvdXVpZC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3V1aWQu b3V0CmluZGV4IGQxNTdlZjdkMGIzLi5kMmE0NWEwZjA3YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC91dWlkLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3V1aWQub3V0CkBAIC0zMjcsNSArMzI3LDIxIEBAIFNFTEVDVCB2ID0gdjo6Ynl0ZWE6OnV1aWQg YXMgbWF0Y2hlZCBGUk9NIGdlbl9yYW5kb21fdXVpZCgpIHY7CiAgdAogKDEgcm93KQogCistLSBt YWtlIHN1cmUgYmFzZTMyaGV4IGVuY29kaW5nIHdvcmtzIHdpdGggVVVJRHMgYW5kIHByZXNlcnZl cyBvcmRlcmluZworU0VMRUNUIG9yaWcsIGVuY29kZShvcmlnOjpieXRlYSwgJ2Jhc2UzMmhleCcp IEFTIGVuYworRlJPTSB1bm5lc3QoQVJSQVlbCisgICAgJzEyM2U0NTY3LWU4OWItMTJkMy1hNDU2 LTQyNjYxNDE3NDAwMCcsCisgICAgJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAw MCcsCisgICAgJzExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMScsCisgICAgJ2Zm ZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZiddOjp1dWlkW10KKykgQVMgb3JpZyBP UkRFUiBCWSBlbmM7CisgICAgICAgICAgICAgICAgIG9yaWcgICAgICAgICAgICAgICAgIHwgICAg ICAgICAgICAgICBlbmMgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMDAwMDAw MDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIHwgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDA9PT09PT0KKyAxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTEgfCAyNDhIMjQ4 SDI0OEgyNDhIMjQ4SDI0OEgyND09PT09PQorIDEyM2U0NTY3LWU4OWItMTJkMy1hNDU2LTQyNjYx NDE3NDAwMCB8IDI4VjRBUFY4SkM5RDc5Mk04OUoxODVRMDAwPT09PT09CisgZmZmZmZmZmYtZmZm Zi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmIHwgVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlM9PT09 PT0KKyg0IHJvd3MpCisKIC0tIGNsZWFuIHVwCiBEUk9QIFRBQkxFIGd1aWQxLCBndWlkMiwgZ3Vp ZDMgQ0FTQ0FERTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0cmluZ3Muc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RyaW5ncy5zcWwKaW5kZXggZDhhMDk3Mzc2NjguLjEz ZmNmZTIxMjQxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdHJpbmdzLnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdHJpbmdzLnNxbApAQCAtODM1LDEwICs4MzUsMzkg QEAgU0VMRUNUIGVuY29kZSgnXHgwMSc6OmJ5dGVhLCAnaW52YWxpZCcpOyAgLS0gZXJyb3IKIFNF TEVDVCBkZWNvZGUoJzAwJywgJ2ludmFsaWQnKTsgICAgICAgICAgIC0tIGVycm9yCiAKIC0tCi0t LSBiYXNlNjR1cmwgZW5jb2RpbmcvZGVjb2RpbmcKKy0tIGJhc2UzMmhleCBlbmNvZGluZy9kZWNv ZGluZwogLS0KIFNFVCBieXRlYV9vdXRwdXQgVE8gaGV4OwogCitTRUxFQ1QgZW5jb2RlKCcnLCAn YmFzZTMyaGV4Jyk7ICAtLSAnJworU0VMRUNUIGVuY29kZSgnXHgxMScsICdiYXNlMzJoZXgnKTsg IC0tICcyND09PT09PScKK1NFTEVDVCBlbmNvZGUoJ1x4MTEyMicsICdiYXNlMzJoZXgnKTsgIC0t ICcyNEgwPT09PScKK1NFTEVDVCBlbmNvZGUoJ1x4MTEyMjMzJywgJ2Jhc2UzMmhleCcpOyAgLS0g JzI0SDM2PT09JworU0VMRUNUIGVuY29kZSgnXHgxMTIyMzM0NCcsICdiYXNlMzJoZXgnKTsgIC0t ICcyNEgzNkgwPScKK1NFTEVDVCBlbmNvZGUoJ1x4MTEyMjMzNDQ1NScsICdiYXNlMzJoZXgnKTsg IC0tICcyNEgzNkgyTCcKK1NFTEVDVCBlbmNvZGUoJ1x4MTEyMjMzNDQ1NTY2JywgJ2Jhc2UzMmhl eCcpOyAgLS0gJzI0SDM2SDJMQ089PT09PT0nCisKK1NFTEVDVCBkZWNvZGUoJycsICdiYXNlMzJo ZXgnKTsgIC0tICcnCitTRUxFQ1QgZGVjb2RlKCcyND09PT09PScsICdiYXNlMzJoZXgnKTsgIC0t IFx4MTEKK1NFTEVDVCBkZWNvZGUoJzI0SDA9PT09JywgJ2Jhc2UzMmhleCcpOyAgLS0gXHgxMTIy CitTRUxFQ1QgZGVjb2RlKCcyNEgzNj09PScsICdiYXNlMzJoZXgnKTsgIC0tIFx4MTEyMjMzCitT RUxFQ1QgZGVjb2RlKCcyNEgzNkgwPScsICdiYXNlMzJoZXgnKTsgIC0tIFx4MTEyMjMzNDQKK1NF TEVDVCBkZWNvZGUoJzI0SDM2SDJMJywgJ2Jhc2UzMmhleCcpOyAgLS0gXHgxMTIyMzM0NDU1CitT RUxFQ1QgZGVjb2RlKCcyNEgzNkgyTENPPT09PT09JywgJ2Jhc2UzMmhleCcpOyAgLS0gXHgxMTIy MzM0NDU1NjYKKworU0VMRUNUIGRlY29kZSgnMjQnLCAnYmFzZTMyaGV4Jyk7ICAtLSBPSywgcGFk ZGluZyBgPWAgYXJlIG9wdGlvbmFsCitTRUxFQ1QgZGVjb2RlKCcyNGgzNmgybGNvJywgJ2Jhc2Uz MmhleCcpOyAgLS0gT0ssIHRoZSBlbmNvZGluZyBpcyBjYXNlLWluc2Vuc2l0aXZlCitTRUxFQ1Qg ZGVjb2RlKCc9JywgJ2Jhc2UzMmhleCcpOyAgLS0gZXJyb3IKK1NFTEVDVCBkZWNvZGUoJ1cnLCAn YmFzZTMyaGV4Jyk7ICAtLSBlcnJvcgorU0VMRUNUIGRlY29kZSgnMjRIMzZIMD0yNCcsICdiYXNl MzJoZXgnKTsgLS0gZXJyb3IKK1NFTEVDVCBkZWNvZGUoJzExPScsICdiYXNlMzJoZXgnKTsgIC0t IE9LLCBub24temVybyBwYWRkaW5nIGJpdHMgYXJlIGFjY2VwdGVkIChjb25zaXN0ZW50IHdpdGgg YmFzZTY0KQorU0VMRUNUIGRlY29kZSgn44GCJywgJ2Jhc2UzMmhleCcpOyAtLSBlcnJvcgorCisK Ky0tCistLSBiYXNlNjR1cmwgZW5jb2RpbmcvZGVjb2RpbmcKKy0tCisKIC0tIFNpbXBsZSBlbmNv ZGluZy9kZWNvZGluZwogU0VMRUNUIGVuY29kZSgnXHg2OWI3M2VmZicsICdiYXNlNjR1cmwnKTsg IC0tIGFiYy1fdwogU0VMRUNUIGRlY29kZSgnYWJjLV93JywgJ2Jhc2U2NHVybCcpOyAgICAgIC0t IFx4NjliNzNlZmYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3V1aWQuc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvdXVpZC5zcWwKaW5kZXggZjUxMmY0ZGVhMWQuLmVlMTQ4MDI2 MzBhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC91dWlkLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC91dWlkLnNxbApAQCAtMTUyLDUgKzE1MiwxNCBAQCBTRUxFQ1QgJ1x4 MDE5YTJmODU5Y2VkNzIyNWI5OWQ5YzU1MDQ0YTI1NjMnOjpieXRlYTo6dXVpZDsKIFNFTEVDVCAn XHgxMjM0NTY3ODkwYWJjZGVmJzo6Ynl0ZWE6OnV1aWQ7IC0tIGVycm9yCiBTRUxFQ1QgdiA9IHY6 OmJ5dGVhOjp1dWlkIGFzIG1hdGNoZWQgRlJPTSBnZW5fcmFuZG9tX3V1aWQoKSB2OwogCistLSBt YWtlIHN1cmUgYmFzZTMyaGV4IGVuY29kaW5nIHdvcmtzIHdpdGggVVVJRHMgYW5kIHByZXNlcnZl cyBvcmRlcmluZworU0VMRUNUIG9yaWcsIGVuY29kZShvcmlnOjpieXRlYSwgJ2Jhc2UzMmhleCcp IEFTIGVuYworRlJPTSB1bm5lc3QoQVJSQVlbCisgICAgJzEyM2U0NTY3LWU4OWItMTJkMy1hNDU2 LTQyNjYxNDE3NDAwMCcsCisgICAgJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAw MCcsCisgICAgJzExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMScsCisgICAgJ2Zm ZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZiddOjp1dWlkW10KKykgQVMgb3JpZyBP UkRFUiBCWSBlbmM7CisKIC0tIGNsZWFuIHVwCiBEUk9QIFRBQkxFIGd1aWQxLCBndWlkMiwgZ3Vp ZDMgQ0FTQ0FERTsKLS0gCjIuNTMuMAoK --00000000000076cb11064d675494--