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 1vFt2V-002xRP-Ck for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Nov 2025 11:47:59 +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 1vFt2U-002gzg-A6 for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Nov 2025 11:47:57 +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.94.2) (envelope-from ) id 1vFt2T-002gxM-JV for pgsql-hackers@lists.postgresql.org; Mon, 03 Nov 2025 11:47:57 +0000 Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vFt2Q-005D19-1a for pgsql-hackers@postgresql.org; Mon, 03 Nov 2025 11:47:55 +0000 Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-591eb980286so4165949e87.2 for ; Mon, 03 Nov 2025 03:47:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1762170473; x=1762775273; 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=UOK8FmdXjVvYpWTNViFDpGNRJ062K9rccbyFOsJ6N08=; b=iC/iUq6GkmKGEpIQFvqsAJyBFxgIsRRI+d/QTr2qkFWFoDGMII/T31/BBPOdfTakvI I++wHtUuyFC4J7SSWMK5Wy4W18Go4oakMtI3KdwY94Hvaru0wXro3wwHNZcDAjVcyk2w ToCBMIulT4HNvGTqW8R5QFbzf4oXDbMu1SdN52WSZ3wNesTv4XaJe9aGuE/p5cyburmn KGrZ0fjij+OOTJ4SGH0QmljquVkAGaoO6KlJwZHoa+e0znsFCzwXOrYA+yqspm9yxkne 6RTj476Z5aXb86Y1aCVvJa2hnbpk/iTr0ZXgTC3EMVJ53rzBMzZKsvhm1DMibkHlWIRC BVeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762170473; x=1762775273; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=UOK8FmdXjVvYpWTNViFDpGNRJ062K9rccbyFOsJ6N08=; b=TqYiw/0tDdzrG4W9KmUejdszerDeTzgAPvxjsfgMddc2MzNcbxqz24ARnMeaE5tB0V XpRnUg8FY0AJSPgSM6o+RvcvNKV001Xl4CPxKRQvErgwABoglESiiED3tvRKz4MstBE+ dJquOX8J/nWe3kbj8ntWnH1DfS8VVYI4nLRolwx9UuOCDWizxx9/K2yetwEDDQcAqmf5 GyzGo4FdLI/LBzNhh/e/zoyGAm9zvRM11gTzAH5vXuqNBE+SrF3pcLzcoxUt8N7U0Q2Y rUkvv2Yr5bEW30iIUKbG04aA0g0q0o4GmY9JAIcWvW00Z1nu1gc69lo28308F5ZcbkHR 3zBQ== X-Forwarded-Encrypted: i=1; AJvYcCUMpKkpQiBYtdB72q9cCBIHiE0tFhcxMKuo5TUEeWdb3AD0tKt568TMSRAAbpS4CGc0B9p8msdKifAjjlvw@postgresql.org X-Gm-Message-State: AOJu0YxQbzsfsh0IUS/KvhKLUlskVvys7Z5kZ/aU7fKAOTAlFIMztSvP W+ZIAWA+qBvXGti8u4Mo1SUWnCs22dXIhLB5m+RkWeJSvAKY7TKXQK7KcsAzJGUXgSEY1mmen+J T8G550VBY1/iuBmSu5Dcc94DzZPg6Xn96XISOBKFyQpnHiru14wbmbg== X-Gm-Gg: ASbGnctwePH15lk9sC/pOitNJ0G+NIMfKh/X3plBGfvVuwGlEuRwMCmhZL9EFPas6Bv jR41WfyfwjExsBaOjzdhg6TmsSHYVk/3bXSCPe1RfqnJvBaUvdsiq3xxelTdghoRq6LVPqCqQBe gQwrz6b0/OXLw1z5UkrrR1RdU2PMUwGFjNJTZO72kY0FAOmXlYmnG55mNeZf1Qg+FSSuUI/GPsm ES1fDF4cuN9UqYkdSHjdxrIlnK5Q2K0IgqTGMOSFM0ejmdVc9rkskWHi1QNawU= X-Google-Smtp-Source: AGHT+IFTbuWoY715Va+pk6DRkG8TqZ1R80Nna8khfGa4DdgsJDr3D01J9jKreX61bY9Nuv/+ZMOCSmwOXLvLYtdHjkY= X-Received: by 2002:a05:6512:61a:b0:594:2441:f645 with SMTP id 2adb3069b0e04-5942441fa6cmr1736875e87.15.1762170472486; Mon, 03 Nov 2025 03:47:52 -0800 (PST) MIME-Version: 1.0 References: <202510151529.s3fpwsgben57@alvherre.pgsql> In-Reply-To: From: Akshay Joshi Date: Mon, 3 Nov 2025 17:17:40 +0530 X-Gm-Features: AWmQ_blsaomD-qFxdS8kbELNZNn7J2L4DnT94_f2oKMLfXpohkqlhLGj1IVX6YE Message-ID: Subject: Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement To: Mark Wong Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000000c03de0642af49a2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000c03de0642af49a2 Content-Type: multipart/alternative; boundary="0000000000000c03dd0642af49a0" --0000000000000c03dd0642af49a0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Hackers, Added a new #define GET_DDL_PRETTY_FLAGS because the existing #define GET_PRETTY_FLAGS is not suitable for formatting reconstructed DDLs. The existing #define GET_PRETTY_FLAGS always indents the code, regardless of whether the flag is set to true or false, which is not the desired behavior for pg_get__ddl functions. Updated the logic of the get_formatted_string function based on Tim Waizenegger=E2=80=99s suggestion. I am attaching the new v6 patch, which is ready for review. On Tue, Oct 28, 2025 at 3:08=E2=80=AFPM Akshay Joshi wrote: > Thanks, Mark, for your review comments and the updated patch. > > I=E2=80=99ve incorporated your changes and prepared a combined v5 patch. = The v5 > patch is attached for further review. > > On Mon, Oct 27, 2025 at 10:15=E2=80=AFPM Mark Wong wr= ote: > >> Hi everyone, >> >> On Thu, Oct 16, 2025 at 01:47:53PM +0530, Akshay Joshi wrote: >> > >> > >> > On Wed, Oct 15, 2025 at 10:55=E2=80=AFPM =C3=81lvaro Herrera >> wrote: >> > >> > Hello, >> > >> > I have reviewed this patch before and provided a number of comment= s >> that >> > have been addressed by Akshay (so I encourage you to list my name >> and >> > this address in a Reviewed-by trailer line in the commit message). >> One >> > thing I had not noticed is that while this function has a "pretty" >> flag, >> > it doesn't use it to pass anything to pg_get_expr_worker()'s >> prettyFlags >> > argument, and I think it should -- probably just >> > >> > prettyFlags =3D GET_PRETTY_FLAGS(pretty); >> > >> > same as pg_get_querydef() does. >> >> Kinda sorta similar thought, I've noticed some existing functions like >> pg_get_constraintdef make the "pretty" flag optional, so I'm wondering >> if that scheme is also preferred here. >> >> I've attached a small diff to the original >> 0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch to >> illustrate the additional work to follow suit, if so desired. >> >> Regards, >> Mark >> -- >> Mark Wong >> EDB https://enterprisedb.com >> > --0000000000000c03dd0642af49a0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

Added a new=C2=A0#define GET_DDL_= PRETTY_FLAGS=C2=A0because the existing=C2=A0#define GET_PRETTY= _FLAGS=C2=A0is not suitable for formatting reconstructed DDLs. The e= xisting #define=C2=A0GET_PRETTY_FLAGS= =C2=A0always indents the code, regardless of whether the flag is set= to=C2=A0true=C2=A0or=C2=A0false, which is not th= e desired behavior for=C2=A0pg_get_<object>_ddl=C2=A0fun= ctions.

Updated the logic of the=C2=A0get_formatted_string=C2=A0function based on Tim Waizenegger=E2=80=99s suggestion.

I a= m attaching the new v6 patch, which is ready for review.

On Tue, Oct 28, 2025 at 3:08=E2=80=AFPM Akshay Joshi <akshay.joshi@enterprisedb.com> wro= te:

Thanks, Mark, for your review comments and the updated patch.

I=E2=80=99ve incorporated your changes and prepared a combined v5 patch.= The v5 patch is attached for further review.


--0000000000000c03dd0642af49a0-- --0000000000000c03de0642af49a2 Content-Type: application/octet-stream; name="v6-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch" Content-Disposition: attachment; filename="v6-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhj2sf7c0 RnJvbSAwZDUwNWRjMTVkODliYTU5YTg0NWQ0MDU3YTY3MDk2ZDRlNWY0Mjg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBGcmksIDEwIE9jdCAyMDI1IDE1OjQ2OjEzICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2Nl0gQWRkIHBnX2dldF9wb2xpY3lfZGRsKCkgZnVuY3Rpb24gdG8gcmVjb25zdHJ1Y3Qg Q1JFQVRFCiBQT0xJQ1kgc3RhdGVtZW50cwpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6 IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJp dAoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c3RlbSBmdW5jdGlvbjoKcGdfZ2V0X3Bv bGljeV9kZGwocmVnY2xhc3MgdGFibGUsIG5hbWUgcG9saWN5X25hbWUsIGJvb2wgcHJldHR5KSwK d2hpY2ggcmVjb25zdHJ1Y3RzIHRoZSBDUkVBVEUgUE9MSUNZIHN0YXRlbWVudCBmb3IgdGhlIHNw ZWNpZmllZCBwb2xpY3kuCgpVc2FnZSBleGFtcGxlczoKU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRs KCdybHNfdGFibGUnLCAncG9sMScpOyAtLSBub24tcHJldHR5IGZvcm1hdHRlZCBEREwKU0VMRUNU IHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGFibGUnLCAncG9sMScsIHRydWUpOyAgLS0gcHJldHR5 IGZvcm1hdHRlZCBEREwKClJlZmVyZW5jZTogUEctMTYzCkF1dGhvcjogQWtzaGF5IEpvc2hpIDxh a3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IMOBbHZhcm8gSGVycmVy YSA8YWx2aGVycmVAa3VyaWxlbXUuZGU+Ci0tLQogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZv LnNnbWwgICAgICAgICAgfCAgNTUgKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wb2xpY3ku YyAgICAgICAgICAgICB8ICAyNyArKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YyAgICAgICAgIHwgMjI3ICsrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3Bv bGljeS5oICAgICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93 c2VjdXJpdHkub3V0IHwgMjA3ICsrKysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9yb3dzZWN1cml0eS5zcWwgICAgICB8ICA4MCArKysrKysrKwogNyBmaWxlcyBjaGFuZ2Vk LCA2MDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNn bWwKaW5kZXggYzM5MzgzMmQ5NGMuLjIyMTBhNDlhNDc4IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvZnVuYy9mdW5jLWluZm8uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8u c2dtbApAQCAtMzc5Nyw0ICszNzk3LDU5IEBAIGFjbCAgICAgIHwge3Bvc3RncmVzPWFyd2REeHRt L3Bvc3RncmVzLGZvbz1yL3Bvc3RncmVzfQogCiAgIDwvc2VjdDI+CiAKKyAgPHNlY3QyIGlkPSJm dW5jdGlvbnMtZ2V0LW9iamVjdC1kZGwiPgorICAgPHRpdGxlPkdldCBPYmplY3QgRERMIEZ1bmN0 aW9uczwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGlu IDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1nZXQtb2JqZWN0LWRkbC10YWJsZSIvPgorICAgIHJl dHVybiB0aGUgRGF0YSBEZWZpbml0aW9uIExhbmd1YWdlIChEREwpIHN0YXRlbWVudCBmb3IgYW55 IGdpdmVuIGRhdGFiYXNlIG9iamVjdC4KKyAgICBUaGlzIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQg YXMgYSBzZXQgb2YgZGlzdGluY3QgZnVuY3Rpb25zIGZvciBlYWNoIG9iamVjdCB0eXBlLgorICAg PC9wYXJhPgorCisgICA8dGFibGUgaWQ9ImZ1bmN0aW9ucy1nZXQtb2JqZWN0LWRkbC10YWJsZSI+ CisgICAgPHRpdGxlPkdldCBPYmplY3QgRERMIEZ1bmN0aW9uczwvdGl0bGU+CisgICAgPHRncm91 cCBjb2xzPSIxIj4KKyAgICAgPHRoZWFkPgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9s ZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAg ICBGdW5jdGlvbgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRGVzY3Jp cHRpb24KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICA8L3RoZWFk PgorCisgICAgIDx0Ym9keT4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNf dGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4 dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF9wb2xpY3lfZGRsPC9wcmltYXJ5PgorICAg ICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dldF9wb2xpY3lfZGRsPC9m dW5jdGlvbj4KKyAgICAgICAgKCA8cGFyYW1ldGVyPnRhYmxlPC9wYXJhbWV0ZXI+IDx0eXBlPnJl Z2NsYXNzPC90eXBlPiwgPHBhcmFtZXRlcj5wb2xpY3lfbmFtZTwvcGFyYW1ldGVyPiA8dHlwZT5u YW1lPC90eXBlPiwgPG9wdGlvbmFsPiA8cGFyYW1ldGVyPnByZXR0eTwvcGFyYW1ldGVyPiA8dHlw ZT5ib29sZWFuPC90eXBlPiA8L29wdGlvbmFsPiApCisgICAgICAgIDxyZXR1cm52YWx1ZT50ZXh0 PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJl Y29uc3RydWN0cyB0aGUgPGNvbW1hbmQ+Q1JFQVRFIFBPTElDWTwvY29tbWFuZD4gc3RhdGVtZW50 IGZyb20gdGhlCisgICAgICAgIHN5c3RlbSBjYXRhbG9ncyBmb3IgYSBzcGVjaWZpZWQgdGFibGUg YW5kIHBvbGljeSBuYW1lLiBUaGUgcmVzdWx0IGlzIGEKKyAgICAgICAgY29tcHJlaGVuc2l2ZSA8 Y29tbWFuZD5DUkVBVEUgUE9MSUNZPC9jb21tYW5kPiBzdGF0ZW1lbnQuCisgICAgICAgPC9wYXJh PjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAg IDwvdGFibGU+CisKKyAgPHBhcmE+CisgICBNb3N0IG9mIHRoZSBmdW5jdGlvbnMgdGhhdCByZWNv bnN0cnVjdCAoZGVjb21waWxlKSBkYXRhYmFzZSBvYmplY3RzIGhhdmUgYW4KKyAgIG9wdGlvbmFs IDxwYXJhbWV0ZXI+cHJldHR5PC9wYXJhbWV0ZXI+IGZsYWcsIHdoaWNoIGlmCisgICA8bGl0ZXJh bD50cnVlPC9saXRlcmFsPiBjYXVzZXMgdGhlIHJlc3VsdCB0byBiZQorICAgPHF1b3RlPnByZXR0 eS1wcmludGVkPC9xdW90ZT4uIFByZXR0eS1wcmludGluZyBhZGRzIHRhYiBjaGFyYWN0ZXIgYW5k IG5ldworICAgbGluZSBjaGFyYWN0ZXIgZm9yIGxlZ2liaWxpdHkuIFBhc3NpbmcgPGxpdGVyYWw+ ZmFsc2U8L2xpdGVyYWw+IGZvciB0aGUKKyAgIDxwYXJhbWV0ZXI+cHJldHR5PC9wYXJhbWV0ZXI+ IHBhcmFtZXRlciB5aWVsZHMgdGhlIHNhbWUgcmVzdWx0IGFzIG9taXR0aW5nCisgICB0aGUgcGFy YW1ldGVyLgorICA8L3BhcmE+CisKKyAgPC9zZWN0Mj4KKwogICA8L3NlY3QxPgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9saWN5LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9w b2xpY3kuYwppbmRleCA4MzA1Njk2MGZlNC4uMWFiZTBjNDQzNTMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3BvbGljeS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvbGlj eS5jCkBAIC0xMjgsNiArMTI4LDMzIEBAIHBhcnNlX3BvbGljeV9jb21tYW5kKGNvbnN0IGNoYXIg KmNtZF9uYW1lKQogCXJldHVybiBwb2xjbWQ7CiB9CiAKKy8qCisgKiBnZXRfcG9saWN5X2NtZF9u YW1lIC0KKyAqCSBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBjaGFyIHJlcHJlc2VudGF0aW9u IHRvIGZ1bGwgY29tbWFuZCBzdHJpbmdzLgorICoKKyAqIGNtZCAtICBWYWxpZCB2YWx1ZXMgYXJl ICcqJywgJ3InLCAnYScsICd3JyBhbmQgJ2QnLgorICoKKyAqLworY2hhciAqCitnZXRfcG9saWN5 X2NtZF9uYW1lKGNoYXIgY21kKQoreworCXN3aXRjaCAoY21kKQorCXsKKwkJY2FzZSAnKic6CisJ CQlyZXR1cm4gIkFMTCI7CisJCWNhc2UgQUNMX1NFTEVDVF9DSFI6CisJCQlyZXR1cm4gIlNFTEVD VCI7CisJCWNhc2UgQUNMX0lOU0VSVF9DSFI6CisJCQlyZXR1cm4gIklOU0VSVCI7CisJCWNhc2Ug QUNMX1VQREFURV9DSFI6CisJCQlyZXR1cm4gIlVQREFURSI7CisJCWNhc2UgQUNMX0RFTEVURV9D SFI6CisJCQlyZXR1cm4gIkRFTEVURSI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5y ZWNvZ25pemVkIHBvbGljeSBjb21tYW5kIik7CisJfQorfQorCiAvKgogICogcG9saWN5X3JvbGVf bGlzdF90b19hcnJheQogICoJIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgbGlzdCBvZiBS b2xlU3BlY3MgdG8gYW4gYXJyYXkgb2YKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCA3 OWVjMTM2MjMxYi4uNWJmOGExZTY0NjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAg LTMzLDEyICszMywxNCBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3BhcnRpdGlv bmVkX3RhYmxlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJjb21tYW5kcy90 YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvcG9saWN5LmgiCiAjaW5jbHVkZSAiY29t bW9uL2tleXdvcmRzLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCiAjaW5jbHVkZSAiZnVu Y2FwaS5oIgpAQCAtOTQsNiArOTYsMTAgQEAKIAkoKHByZXR0eSkgPyAoUFJFVFRZRkxBR19QQVJF TiB8IFBSRVRUWUZMQUdfSU5ERU5UIHwgUFJFVFRZRkxBR19TQ0hFTUEpIFwKIAkgOiBQUkVUVFlG TEFHX0lOREVOVCkKIAorI2RlZmluZSBHRVRfRERMX1BSRVRUWV9GTEFHUyhwcmV0dHkpIFwKKwko KHByZXR0eSkgPyAoUFJFVFRZRkxBR19QQVJFTiB8IFBSRVRUWUZMQUdfSU5ERU5UIHwgUFJFVFRZ RkxBR19TQ0hFTUEpIFwKKwkgOiAwKQorCiAvKiBEZWZhdWx0IGxpbmUgbGVuZ3RoIGZvciBwcmV0 dHktcHJpbnQgd3JhcHBpbmc6IDAgbWVhbnMgd3JhcCBhbHdheXMgKi8KICNkZWZpbmUgV1JBUF9D T0xVTU5fREVGQVVMVAkJMAogCkBAIC01NDYsNiArNTUyLDEyIEBAIHN0YXRpYyB2b2lkIGdldF9q c29uX3RhYmxlX25lc3RlZF9jb2x1bW5zKFRhYmxlRnVuYyAqdGYsIEpzb25UYWJsZVBsYW4gKnBs YW4sCiAJCQkJCQkJCQkJICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJCQkJCQkJICBi b29sIHNob3dpbXBsaWNpdCwKIAkJCQkJCQkJCQkgIGJvb2wgbmVlZGNvbW1hKTsKK3N0YXRpYyB2 b2lkIGdldF9mb3JtYXR0ZWRfc3RyaW5nKFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCQkgaW50IHBy ZXR0eUZsYWdzLAorCQkJCQkJCQkgaW50IG5vT2ZUYWJDaGFycywKKwkJCQkJCQkJIGNvbnN0IGNo YXIgKmZtdCwuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYoNCwgNSk7CitzdGF0aWMgY2hhciAqcGdf Z2V0X3BvbGljeV9kZGxfd29ya2VyKE9pZCB0YWJsZUlELCBOYW1lIHBvbGljeU5hbWUsCisJCQkJ CQkJCQkgIGludCBwcmV0dHlGbGFncyk7CiAKICNkZWZpbmUgb25seV9tYXJrZXIocnRlKSAgKChy dGUpLT5pbmggPyAiIiA6ICJPTkxZICIpCiAKQEAgLTEzNzM4LDMgKzEzNzUwLDIxOCBAQCBnZXRf cmFuZ2VfcGFydGJvdW5kX3N0cmluZyhMaXN0ICpib3VuZF9kYXR1bXMpCiAKIAlyZXR1cm4gYnVm LT5kYXRhOwogfQorCisvKgorICogZ2V0X2Zvcm1hdHRlZF9zdHJpbmcKKyAqCisgKiBSZXR1cm4g YSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nLgorICoKKyAqIHByZXR0eUZsYWdzIC0g QmFzZWQgb24gcHJldHR5RmxhZ3MgdGhlIG91dHB1dCBpbmNsdWRlcyB0YWJzIChcdCkgYW5kCisg KiAgICAgICAgICAgICAgIG5ld2xpbmVzIChcbikuCisgKiBub09mVGFiQ2hhcnMgLSBpbmRlbnQg d2l0aCBzcGVjaWZpZWQgbm8gb2YgdGFicy4KKyAqIGZtdCAtIHByaW50Zi1zdHlsZSBmb3JtYXQg c3RyaW5nIHVzZWQgYnkgYXBwZW5kU3RyaW5nSW5mb1ZBLgorICovCitzdGF0aWMgdm9pZAorZ2V0 X2Zvcm1hdHRlZF9zdHJpbmcoU3RyaW5nSW5mbyBidWYsIGludCBwcmV0dHlGbGFncywgaW50IG5v T2ZUYWJDaGFycywgY29uc3QgY2hhciAqZm10LC4uLikKK3sKKwl2YV9saXN0CQlhcmdzOworCisJ aWYgKHByZXR0eUZsYWdzICYgUFJFVFRZRkxBR19JTkRFTlQpCisJeworCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihidWYsICdcbicpOworCQkvKiBJbmRlbnQgd2l0aCB0YWJzICovCisJCWZvciAoaW50 IGkgPSAwOyBpIDwgbm9PZlRhYkNoYXJzOyBpKyspCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGJ1ZiwgJ1x0Jyk7CisJCX0KKwl9CisJZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihi dWYsICcgJyk7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWFwcGVuZFN0cmluZ0luZm9WQShi dWYsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworfQorCisvKgorICogcGdfZ2V0X3BvbGlj eV9kZGwKKyAqCisgKiBHZW5lcmF0ZSBhIENSRUFURSBQT0xJQ1kgc3RhdGVtZW50IGZvciB0aGUg c3BlY2lmaWVkIHBvbGljeS4KKyAqCisgKiB0YWJsZUlEIC0gVGFibGUgSUQgb2YgdGhlIHBvbGlj eS4KKyAqIHBvbGljeU5hbWUgLSBOYW1lIG9mIHRoZSBwb2xpY3kgZm9yIHdoaWNoIHRvIGdlbmVy YXRlIHRoZSBEREwuCisgKiBwcmV0dHkgLSBJZiB0cnVlLCBmb3JtYXQgdGhlIERETCB3aXRoIGlu ZGVudGF0aW9uIGFuZCBsaW5lIGJyZWFrcy4KKyAqLworRGF0dW0KK3BnX2dldF9wb2xpY3lfZGRs KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJdGFibGVJRCA9IFBHX0dFVEFSR19PSUQoMCk7 CisJTmFtZQkJcG9saWN5TmFtZSA9IFBHX0dFVEFSR19OQU1FKDEpOworCWNoYXIJICAgKnJlczsK KworCXJlcyA9IHBnX2dldF9wb2xpY3lfZGRsX3dvcmtlcih0YWJsZUlELCBwb2xpY3lOYW1lLCBm YWxzZSk7CisKKwlpZiAocmVzID09IE5VTEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlQR19S RVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykpOworfQorCitEYXR1bQorcGdfZ2V0X3Bv bGljeV9kZGxfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJdGFibGVJRCA9IFBHX0dF VEFSR19PSUQoMCk7CisJTmFtZQkJcG9saWN5TmFtZSA9IFBHX0dFVEFSR19OQU1FKDEpOworCWJv b2wJCXByZXR0eSA9IFBHX0dFVEFSR19CT09MKDIpOworCWludAkJCXByZXR0eUZsYWdzOworCWNo YXIJICAgKnJlczsKKworCXByZXR0eUZsYWdzID0gR0VUX0RETF9QUkVUVFlfRkxBR1MocHJldHR5 KTsKKwlyZXMgPSBwZ19nZXRfcG9saWN5X2RkbF93b3JrZXIodGFibGVJRCwgcG9saWN5TmFtZSwg cHJldHR5RmxhZ3MpOworCisJaWYgKHJlcyA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOwor CisJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMpKTsKK30KKworc3RhdGljIGNo YXIgKgorcGdfZ2V0X3BvbGljeV9kZGxfd29ya2VyKE9pZCB0YWJsZUlELCBOYW1lIHBvbGljeU5h bWUsIGludCBwcmV0dHlGbGFncykKK3sKKwlib29sCQlhdHRySXNOdWxsOworCURhdHVtCQl2YWx1 ZURhdHVtOworCUhlYXBUdXBsZQl0dXBsZVBvbGljeTsKKwlSZWxhdGlvbglwZ1BvbGljeVJlbDsK KwljaGFyCSAgICp0YXJnZXRUYWJsZTsKKwlTY2FuS2V5RGF0YSBza2V5WzJdOworCVN5c1NjYW5E ZXNjIHNzY2FuOworCUZvcm1fcGdfcG9saWN5IHBvbGljeUZvcm07CisJU3RyaW5nSW5mb0RhdGEg YnVmOworCisJLyogVmFsaWRhdGUgdGhhdCB0aGUgcmVsYXRpb24gZXhpc3RzICovCisJaWYgKCFP aWRJc1ZhbGlkKHRhYmxlSUQpIHx8IGdldF9yZWxfbmFtZSh0YWJsZUlEKSA9PSBOVUxMKQorCQly ZXR1cm4gTlVMTDsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCisJdGFyZ2V0VGFibGUgPSBn ZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZSh0YWJsZUlEKTsKKwkvKiBGaW5kIHBvbGlj eSB0byBiZWdpbiBzY2FuICovCisJcGdQb2xpY3lSZWwgPSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0 aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKiBTZXQga2V5IC0gcG9saWN5J3MgcmVsYXRp b24gaWQuICovCisJU2NhbktleUluaXQoJnNrZXlbMF0sCisJCQkJQW51bV9wZ19wb2xpY3lfcG9s cmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElk R2V0RGF0dW0odGFibGVJRCkpOworCisJLyogU2V0IGtleSAtIHBvbGljeSdzIG5hbWUuICovCisJ U2NhbktleUluaXQoJnNrZXlbMV0sCisJCQkJQW51bV9wZ19wb2xpY3lfcG9sbmFtZSwKKwkJCQlC VEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfTkFNRUVRLAorCQkJCUNTdHJpbmdHZXREYXR1bShOYW1l U3RyKCpwb2xpY3lOYW1lKSkpOworCisJc3NjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdQb2xp Y3lSZWwsCisJCQkJCQkJICAgUG9saWN5UG9scmVsaWRQb2xuYW1lSW5kZXhJZCwgdHJ1ZSwgTlVM TCwgMiwKKwkJCQkJCQkgICBza2V5KTsKKworCXR1cGxlUG9saWN5ID0gc3lzdGFibGVfZ2V0bmV4 dChzc2Nhbik7CisJLyogQ2hlY2sgdGhhdCB0aGUgcG9saWN5IGlzIGZvdW5kLCByYWlzZSBhbiBl cnJvciBpZiBub3QuICovCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlUG9saWN5KSkKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAor CQkJCSBlcnJtc2coInBvbGljeSBcIiVzXCIgZm9yIHRhYmxlIFwiJXNcIiBkb2VzIG5vdCBleGlz dCIsCisJCQkJCQlOYW1lU3RyKCpwb2xpY3lOYW1lKSwKKwkJCQkJCXRhcmdldFRhYmxlKSkpOwor CisJcG9saWN5Rm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHR1cGxlUG9saWN5KTsK KworCS8qIEJ1aWxkIHRoZSBDUkVBVEUgUE9MSUNZIHN0YXRlbWVudCAqLworCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIkNSRUFURSBQT0xJQ1kgJXMgT04gJXMiLAorCQkJCQkgcXVvdGVfaWRlbnRp ZmllcihOYW1lU3RyKCpwb2xpY3lOYW1lKSksCisJCQkJCSB0YXJnZXRUYWJsZSk7CisKKwkvKiBD aGVjayB0aGUgdHlwZSBpcyBQRVJNSVNTSVZFIG9yIFJFU1RSSUNUSVZFICovCisJZ2V0X2Zvcm1h dHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5RmxhZ3MsIDEsCisJCQkJCQkgcG9saWN5Rm9ybS0+cG9s cGVybWlzc2l2ZSA/ICJBUyBQRVJNSVNTSVZFIiA6ICJBUyBSRVNUUklDVElWRSIpOworCisJLyog Q2hlY2sgY29tbWFuZCB0byB3aGljaCB0aGUgcG9saWN5IGFwcGxpZXMgKi8KKwlnZXRfZm9ybWF0 dGVkX3N0cmluZygmYnVmLCBwcmV0dHlGbGFncywgMSwgIkZPUiAlcyIsCisJCQkJCQkgZ2V0X3Bv bGljeV9jbWRfbmFtZShwb2xpY3lGb3JtLT5wb2xjbWQpKTsKKworCS8qIENoZWNrIGlmIHRoZSBw b2xpY3kgaGFzIGEgVE8gbGlzdCAqLworCXZhbHVlRGF0dW0gPSBoZWFwX2dldGF0dHIodHVwbGVQ b2xpY3ksCisJCQkJCQkJICBBbnVtX3BnX3BvbGljeV9wb2xyb2xlcywKKwkJCQkJCQkgIFJlbGF0 aW9uR2V0RGVzY3IocGdQb2xpY3lSZWwpLAorCQkJCQkJCSAgJmF0dHJJc051bGwpOworCWlmICgh YXR0cklzTnVsbCkKKwl7CisJCUFycmF5VHlwZSAgKnBvbGljeV9yb2xlcyA9IERhdHVtR2V0QXJy YXlUeXBlUENvcHkodmFsdWVEYXR1bSk7CisJCWludAkJCW5pdGVtcyA9IEFSUl9ESU1TKHBvbGlj eV9yb2xlcylbMF07CisJCU9pZAkJICAgKnJvbGVzID0gKE9pZCAqKSBBUlJfREFUQV9QVFIocG9s aWN5X3JvbGVzKTsKKwkJU3RyaW5nSW5mb0RhdGEgcm9sZV9uYW1lczsKKworCQlpbml0U3RyaW5n SW5mbygmcm9sZV9uYW1lcyk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykK KwkJeworCQkJaWYgKE9pZElzVmFsaWQocm9sZXNbaV0pKQorCQkJeworCQkJCWNoYXIJICAgKnJv bGVuYW1lID0gR2V0VXNlck5hbWVGcm9tSWQocm9sZXNbaV0sIGZhbHNlKTsKKworCQkJCWlmIChp ID4gMCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcm9sZV9uYW1lcywgIiwgIik7CisJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcm9sZV9uYW1lcywgcm9sZW5hbWUpOworCQkJfQor CQl9CisKKwkJaWYgKHJvbGVfbmFtZXMubGVuID4gMCkKKwkJCWdldF9mb3JtYXR0ZWRfc3RyaW5n KCZidWYsIHByZXR0eUZsYWdzLCAxLCAiVE8gJXMiLCByb2xlX25hbWVzLmRhdGEpOworCQllbHNl CisKKwkJCS8qCisJCQkgKiBXaGVuIG5vIHNwZWNpZmljIHJvbGUgaXMgcHJvdmlkZWQsIGdlbmVy YXRlIHRoZSBUTyBjbGF1c2Ugd2l0aAorCQkJICogdGhlIFBVQkxJQyByb2xlLgorCQkJICovCisJ CQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlGbGFncywgMSwgIlRPIFBVQkxJQyIp OworCX0KKworCS8qIENoZWNrIGlmIHRoZSBwb2xpY3kgaGFzIGEgVVNJTkcgZXhwciAqLworCXZh bHVlRGF0dW0gPSBoZWFwX2dldGF0dHIodHVwbGVQb2xpY3ksCisJCQkJCQkJICBBbnVtX3BnX3Bv bGljeV9wb2xxdWFsLAorCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ1BvbGljeVJlbCksCisJ CQkJCQkJICAmYXR0cklzTnVsbCk7CisJaWYgKCFhdHRySXNOdWxsKQorCXsKKwkJdGV4dAkgICAq ZXhwcnRleHQgPSBEYXR1bUdldFRleHRQUCh2YWx1ZURhdHVtKTsKKwkJdGV4dAkgICAqdXNpbmdF eHByZXNzaW9uID0gcGdfZ2V0X2V4cHJfd29ya2VyKGV4cHJ0ZXh0LAorCQkJCQkJCQkJCQkJCQkg cG9saWN5Rm9ybS0+cG9scmVsaWQsCisJCQkJCQkJCQkJCQkJCSBwcmV0dHlGbGFncyk7CisKKwkJ Z2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5RmxhZ3MsIDEsICJVU0lORyAoJXMpIiwK KwkJCQkJCQkgdGV4dF90b19jc3RyaW5nKHVzaW5nRXhwcmVzc2lvbikpOworCX0KKworCS8qIENo ZWNrIGlmIHRoZSBwb2xpY3kgaGFzIGEgV0lUSCBDSEVDSyBleHByICovCisJdmFsdWVEYXR1bSA9 IGhlYXBfZ2V0YXR0cih0dXBsZVBvbGljeSwKKwkJCQkJCQkgIEFudW1fcGdfcG9saWN5X3BvbHdp dGhjaGVjaywKKwkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocGdQb2xpY3lSZWwpLAorCQkJCQkJ CSAgJmF0dHJJc051bGwpOworCWlmICghYXR0cklzTnVsbCkKKwl7CisJCXRleHQJICAgKmV4cHJ0 ZXh0ID0gRGF0dW1HZXRUZXh0UFAodmFsdWVEYXR1bSk7CisJCXRleHQJICAgKmNoZWNrRXhwcmVz c2lvbiA9IHBnX2dldF9leHByX3dvcmtlcihleHBydGV4dCwKKwkJCQkJCQkJCQkJCQkJIHBvbGlj eUZvcm0tPnBvbHJlbGlkLAorCQkJCQkJCQkJCQkJCQkgcHJldHR5RmxhZ3MpOworCisJCWdldF9m b3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eUZsYWdzLCAxLCAiV0lUSCBDSEVDSyAoJXMpIiwK KwkJCQkJCQkgdGV4dF90b19jc3RyaW5nKGNoZWNrRXhwcmVzc2lvbikpOworCX0KKworCWFwcGVu ZFN0cmluZ0luZm9DaGFyKCZidWYsICc7Jyk7CisKKwkvKiBDbGVhbiB1cC4gKi8KKwlzeXN0YWJs ZV9lbmRzY2FuKHNzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ1BvbGljeVJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKKworCXJldHVybiBidWYuZGF0YTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4 IDkxMjFhMzgyZjc2Li42OTY4M2ZiMzdmNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC00 MDIxLDYgKzQwMjEsMTIgQEAKICAgcHJvbmFtZSA9PiAncGdfZ2V0X2Z1bmN0aW9uX3NxbGJvZHkn LCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHByb3JldHR5cGUgPT4gJ3RleHQnLCBwcm9hcmd0eXBl cyA9PiAnb2lkJywKICAgcHJvc3JjID0+ICdwZ19nZXRfZnVuY3Rpb25fc3FsYm9keScgfSwKK3sg b2lkID0+ICc4ODExJywgZGVzY3IgPT4gJ2dldCBDUkVBVEUgc3RhdGVtZW50IGZvciBwb2xpY3kn LAorICBwcm9uYW1lID0+ICdwZ19nZXRfcG9saWN5X2RkbCcsIHByb3JldHR5cGUgPT4gJ3RleHQn LAorICBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MgbmFtZScsIHByb3NyYyA9PiAncGdfZ2V0X3Bv bGljeV9kZGwnIH0sCit7IG9pZCA9PiAnODgxMicsIGRlc2NyID0+ICdnZXQgQ1JFQVRFIHN0YXRl bWVudCBmb3IgcG9saWN5IHdpdGggcHJldHR5IG9wdGlvbicsCisgIHByb25hbWUgPT4gJ3BnX2dl dF9wb2xpY3lfZGRsJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdy ZWdjbGFzcyBuYW1lIGJvb2wnLCBwcm9zcmMgPT4gJ3BnX2dldF9wb2xpY3lfZGRsX2V4dCcgfSwK IAogeyBvaWQgPT4gJzE2ODYnLCBkZXNjciA9PiAnbGlzdCBvZiBTUUwga2V5d29yZHMnLAogICBw cm9uYW1lID0+ICdwZ19nZXRfa2V5d29yZHMnLCBwcm9jb3N0ID0+ICcxMCcsIHByb3Jvd3MgPT4g JzUwMCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9wb2xpY3kuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3BvbGljeS5oCmluZGV4IGYwNmFhMWRmNDM5Li40MGU0NWI3MzhmNCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcG9saWN5LmgKKysrIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvcG9saWN5LmgKQEAgLTM1LDQgKzM1LDYgQEAgZXh0ZXJuIE9iamVjdEFkZHJl c3MgcmVuYW1lX3BvbGljeShSZW5hbWVTdG10ICpzdG10KTsKIAogZXh0ZXJuIGJvb2wgcmVsYXRp b25faGFzX3BvbGljaWVzKFJlbGF0aW9uIHJlbCk7CiAKK2V4dGVybiBjaGFyICpnZXRfcG9saWN5 X2NtZF9uYW1lKGNoYXIgY21kKTsKKwogI2VuZGlmCQkJCQkJCS8qIFBPTElDWV9IICovCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3NlY3VyaXR5Lm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93c2VjdXJpdHkub3V0CmluZGV4IGM5NThlZjRkNzBhLi40 ZWJlMzI3MTFjZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb3dzZWN1 cml0eS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb3dzZWN1cml0eS5vdXQK QEAgLTUxMDEsMTEgKzUxMDEsMjE0IEBAIHJlc2V0IHJsc190ZXN0LmJsYWg7CiBkcm9wIGZ1bmN0 aW9uIHJsc19mKHRleHQpOwogZHJvcCB0YWJsZSBybHNfdCwgdGVzdF90OwogLS0KKy0tIFRlc3Qg Zm9yIHBnX2dldF9wb2xpY3lfZGRsKHRhYmxlTmFtZSwgcG9saWN5TmFtZSwgcHJldHR5KSBmdW5j dGlvbi4KKy0tCitDUkVBVEUgVEFCTEUgcmxzX3RibF8xICgKKyAgICBkaWQgICAgICAgICBpbnQg cHJpbWFyeSBrZXksCisgICAgY2lkICAgICAgICAgaW50LAorICAgIGRsZXZlbCAgICAgIGludCBu b3QgbnVsbCwKKyAgICBkYXV0aG9yICAgICBuYW1lLAorICAgIGR0aXRsZSAgICAgIHRleHQKKyk7 CitHUkFOVCBBTEwgT04gcmxzX3RibF8xIFRPIHB1YmxpYzsKK0NSRUFURSBUQUJMRSBybHNfdGJs XzIgKAorICAgIHBndXNlciAgICAgIG5hbWUgcHJpbWFyeSBrZXksCisgICAgc2VjbHYgICAgICAg aW50CispOworR1JBTlQgU0VMRUNUIE9OIHJsc190YmxfMiBUTyBwdWJsaWM7CistLSBUZXN0IFBF Uk1JU1NJVkUgYW5kIFJFU1RSSUNUSVZFCitDUkVBVEUgUE9MSUNZIHJsc19wMSBPTiBybHNfdGJs XzEgQVMgUEVSTUlTU0lWRQorICAgIFVTSU5HIChkbGV2ZWwgPD0gKFNFTEVDVCBzZWNsdiBGUk9N IHJsc190YmxfMiBXSEVSRSBwZ3VzZXIgPSBjdXJyZW50X3VzZXIpKTsKK0NSRUFURSBQT0xJQ1kg cmxzX3AyIE9OIHJsc190YmxfMSBBUyBSRVNUUklDVElWRSBVU0lORyAoY2lkIDw+IDQ0IEFORCBj aWQgPCA1MCk7CistLSBUZXN0IEZPUiBBTEwgfCBTRUxFQ1QgfCBJTlNFUlQgfCBVUERBVEUgfCBE RUxFVEUKK0NSRUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJsc190YmxfMSBGT1IgQUxMIFVTSU5HIChk YXV0aG9yID0gY3VycmVudF91c2VyKTsKK0NSRUFURSBQT0xJQ1kgcmxzX3A0IE9OIHJsc190Ymxf MSBGT1IgU0VMRUNUIFVTSU5HIChjaWQgJSAyID0gMCk7CitDUkVBVEUgUE9MSUNZIHJsc19wNSBP TiBybHNfdGJsXzEgRk9SIElOU0VSVCBXSVRIIENIRUNLIChjaWQgJSAyID0gMSk7CitDUkVBVEUg UE9MSUNZIHJsc19wNiBPTiBybHNfdGJsXzEgRk9SIFVQREFURSBVU0lORyAoY2lkICUgMiA9IDAp OworQ1JFQVRFIFBPTElDWSBybHNfcDcgT04gcmxzX3RibF8xIEZPUiBERUxFVEUgVVNJTkcgKGNp ZCA8IDgpOworLS0gVGVzdCBUTyB7IHJvbGVfbmFtZSAuLi4gfQorQ1JFQVRFIFBPTElDWSBybHNf cDggT04gcmxzX3RibF8xIFRPIHJlZ3Jlc3NfcmxzX2RhdmUsIHJlZ3Jlc3NfcmxzX2FsaWNlIFVT SU5HICh0cnVlKTsKK0NSRUFURSBQT0xJQ1kgcmxzX3A5IE9OIHJsc190YmxfMSBUTyByZWdyZXNz X3Jsc19leGVtcHRfdXNlciBXSVRIIENIRUNLIChjaWQgPSAoU0VMRUNUIHNlY2x2IEZST00gcmxz X3RibF8yKSk7CistLSBUZXN0IE5VTEwgdmFsdWUKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbChO VUxMLCAncmxzX3AxJyk7CisgcGdfZ2V0X3BvbGljeV9kZGwgCistLS0tLS0tLS0tLS0tLS0tLS0t CisgCisoMSByb3cpCisKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgndGFiMScsIE5VTEwpOwor RVJST1I6ICByZWxhdGlvbiAidGFiMSIgZG9lcyBub3QgZXhpc3QKK0xJTkUgMTogU0VMRUNUIHBn X2dldF9wb2xpY3lfZGRsKCd0YWIxJywgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBeCitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoTlVMTCwgTlVMTCk7CisgcGdfZ2V0 X3BvbGljeV9kZGwgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIFRlc3Qg LTEgYXMgdGFibGUgb2lkCisgU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKC0xLCAncmxzX3AxJyk7 CisgcGdfZ2V0X3BvbGljeV9kZGwgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisK Ky0tIFRhYmxlIGRvZXMgbm90IGV4aXN0CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3RhYjEn LCAncmxzX3AxJyk7CitFUlJPUjogIHJlbGF0aW9uICJ0YWIxIiBkb2VzIG5vdCBleGlzdAorTElO RSAxOiBTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3RhYjEnLCAncmxzX3AxJyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSBQb2xpY3kgZG9lcyBub3QgZXhpc3QKK1NF TEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3BvbDEnKTsKK0VSUk9SOiAgcG9s aWN5ICJwb2wxIiBmb3IgdGFibGUgInJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEiIGRvZXMg bm90IGV4aXN0CistLSBXaXRob3V0IFByZXR0eSBmb3JtYXR0ZWQKK1NFTEVDVCBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMScpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBQT0xJQ1kgcmxzX3AxIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5y bHNfdGJsXzEgQVMgUEVSTUlTU0lWRSBGT1IgQUxMIFRPIFBVQkxJQyBVU0lORyAoKGRsZXZlbCA8 PSAoU0VMRUNUIHJsc190YmxfMi5zZWNsdiBGUk9NIHJsc190YmxfMiBXSEVSRSAocmxzX3RibF8y LnBndXNlciA9IENVUlJFTlRfVVNFUikpKSk7CisoMSByb3cpCisKK1NFTEVDVCBwZ19nZXRfcG9s aWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMicpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFBPTElDWSBybHNfcDIgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBB UyBSRVNUUklDVElWRSBGT1IgQUxMIFRPIFBVQkxJQyBVU0lORyAoKChjaWQgPD4gNDQpIEFORCAo Y2lkIDwgNTApKSk7CisoMSByb3cpCisKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3Ri bF8xJywgJ3Jsc19wMycpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJsc19wMyBP TiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIEFTIFBFUk1JU1NJVkUgRk9SIEFMTCBUTyBQ VUJMSUMgVVNJTkcgKChkYXV0aG9yID0gQ1VSUkVOVF9VU0VSKSk7CisoMSByb3cpCisKK1NFTEVD VCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNCcpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg UE9MSUNZIHJsc19wNCBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIEFTIFBFUk1JU1NJ VkUgRk9SIFNFTEVDVCBUTyBQVUJMSUMgVVNJTkcgKCgoY2lkICUgMikgPSAwKSk7CisoMSByb3cp CisKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNScpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Bv bGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFBPTElDWSBybHNfcDUgT04gcmVncmVzc19ybHNfc2NoZW1hLnJs c190YmxfMSBBUyBQRVJNSVNTSVZFIEZPUiBJTlNFUlQgVE8gUFVCTElDIFdJVEggQ0hFQ0sgKCgo Y2lkICUgMikgPSAxKSk7CisoMSByb3cpCisKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxz X3RibF8xJywgJ3Jsc19wNicsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFBPTElDWSBybHNfcDYgT04g cmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBBUyBQRVJNSVNTSVZFIEZPUiBVUERBVEUgVE8g UFVCTElDIFVTSU5HICgoKGNpZCAlIDIpID0gMCkpOworKDEgcm93KQorCitTRUxFQ1QgcGdfZ2V0 X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDcnLCBmYWxzZSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBQT0xJQ1kgcmxzX3A3 IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgQVMgUEVSTUlTU0lWRSBGT1IgREVMRVRF IFRPIFBVQkxJQyBVU0lORyAoKGNpZCA8IDgpKTsKKygxIHJvdykKKworU0VMRUNUIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A4JywgZmFsc2UpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgUE9MSUNZIHJsc19wOCBPTiByZWdyZXNzX3Jsc19z Y2hlbWEucmxzX3RibF8xIEFTIFBFUk1JU1NJVkUgRk9SIEFMTCBUTyByZWdyZXNzX3Jsc19kYXZl LCByZWdyZXNzX3Jsc19hbGljZSBVU0lORyAodHJ1ZSk7CisoMSByb3cpCisKK1NFTEVDVCBwZ19n ZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOScsIGZhbHNlKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFBPTElDWSBybHNf cDkgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBBUyBQRVJNSVNTSVZFIEZPUiBBTEwg VE8gcmVncmVzc19ybHNfZXhlbXB0X3VzZXIgV0lUSCBDSEVDSyAoKGNpZCA9IChTRUxFQ1Qgcmxz X3RibF8yLnNlY2x2IEZST00gcmxzX3RibF8yKSkpOworKDEgcm93KQorCistLSBXaXRoIFByZXR0 eSBmb3JtYXR0ZWQKK1xwc2V0IGZvcm1hdCB1bmFsaWduZWQKK1NFTEVDVCBwZ19nZXRfcG9saWN5 X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMScsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NS RUFURSBQT0xJQ1kgcmxzX3AxIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKwlBUyBQ RVJNSVNTSVZFCisJRk9SIEFMTAorCVRPIFBVQkxJQworCVVTSU5HIChkbGV2ZWwgPD0gKCggU0VM RUNUIHJsc190YmxfMi5zZWNsdgorICAgRlJPTSBybHNfdGJsXzIKKyAgV0hFUkUgcmxzX3RibF8y LnBndXNlciA9IENVUlJFTlRfVVNFUikpKTsKKygxIHJvdykKK1NFTEVDVCBwZ19nZXRfcG9saWN5 X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMicsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NS RUFURSBQT0xJQ1kgcmxzX3AyIE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKwlBUyBS RVNUUklDVElWRQorCUZPUiBBTEwKKwlUTyBQVUJMSUMKKwlVU0lORyAoY2lkIDw+IDQ0IEFORCBj aWQgPCA1MCk7CisoMSByb3cpCitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScs ICdybHNfcDMnLCB0cnVlKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZIHJsc19w MyBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisJQVMgUEVSTUlTU0lWRQorCUZPUiBB TEwKKwlUTyBQVUJMSUMKKwlVU0lORyAoZGF1dGhvciA9IENVUlJFTlRfVVNFUik7CisoMSByb3cp CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDQnLCB0cnVlKTsK K3BnX2dldF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZIHJsc19wNCBPTiByZWdyZXNzX3Jsc19z Y2hlbWEucmxzX3RibF8xCisJQVMgUEVSTUlTU0lWRQorCUZPUiBTRUxFQ1QKKwlUTyBQVUJMSUMK KwlVU0lORyAoKGNpZCAlIDIpID0gMCk7CisoMSByb3cpCitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9k ZGwoJ3Jsc190YmxfMScsICdybHNfcDUnLCB0cnVlKTsKK3BnX2dldF9wb2xpY3lfZGRsCitDUkVB VEUgUE9MSUNZIHJsc19wNSBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xCisJQVMgUEVS TUlTU0lWRQorCUZPUiBJTlNFUlQKKwlUTyBQVUJMSUMKKwlXSVRIIENIRUNLICgoY2lkICUgMikg PSAxKTsKKygxIHJvdykKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Js c19wNicsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3A2IE9O IHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKwlBUyBQRVJNSVNTSVZFCisJRk9SIFVQREFU RQorCVRPIFBVQkxJQworCVVTSU5HICgoY2lkICUgMikgPSAwKTsKKygxIHJvdykKK1NFTEVDVCBw Z19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNycsIHRydWUpOworcGdfZ2V0X3Bv bGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3A3IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNf dGJsXzEKKwlBUyBQRVJNSVNTSVZFCisJRk9SIERFTEVURQorCVRPIFBVQkxJQworCVVTSU5HIChj aWQgPCA4KTsKKygxIHJvdykKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywg J3Jsc19wOCcsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3A4 IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKwlBUyBQRVJNSVNTSVZFCisJRk9SIEFM TAorCVRPIHJlZ3Jlc3NfcmxzX2RhdmUsIHJlZ3Jlc3NfcmxzX2FsaWNlCisJVVNJTkcgKHRydWUp OworKDEgcm93KQorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A5 JywgdHJ1ZSk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDkgT04gcmVn cmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorCUFTIFBFUk1JU1NJVkUKKwlGT1IgQUxMCisJVE8g cmVncmVzc19ybHNfZXhlbXB0X3VzZXIKKwlXSVRIIENIRUNLIChjaWQgPSAoKCBTRUxFQ1Qgcmxz X3RibF8yLnNlY2x2CisgICBGUk9NIHJsc190YmxfMikpKTsKKygxIHJvdykKKy0tIENsZWFuIHVw IG9iamVjdHMgY3JlYXRlZCBmb3IgdGVzdGluZyBwZ19nZXRfcG9saWN5X2RkbCBmdW5jdGlvbi4K K0RST1AgUE9MSUNZIHJsc19wMSBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDIgT04g cmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3AzIE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZ IHJsc19wNCBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDUgT04gcmxzX3RibF8xOwor RFJPUCBQT0xJQ1kgcmxzX3A2IE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNyBPTiBy bHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDggT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kg cmxzX3A5IE9OIHJsc190YmxfMTsKKy0tCiAtLSBDbGVhbiB1cCBvYmplY3RzCiAtLQogUkVTRVQg U0VTU0lPTiBBVVRIT1JJWkFUSU9OOwogRFJPUCBTQ0hFTUEgcmVncmVzc19ybHNfc2NoZW1hIENB U0NBREU7Ci1OT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIDMwIG90aGVyIG9iamVjdHMKK05PVElD RTogIGRyb3AgY2FzY2FkZXMgdG8gMzIgb3RoZXIgb2JqZWN0cwogREVUQUlMOiAgZHJvcCBjYXNj YWRlcyB0byBmdW5jdGlvbiBmX2xlYWsodGV4dCkKIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgdWFj Y291bnQKIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgY2F0ZWdvcnkKQEAgLTUxMzYsNiArNTMzOSw4 IEBAIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgZGVwMQogZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBk ZXAyCiBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGRvYl90MQogZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBkb2JfdDIKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmxzX3RibF8xCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHJsc190YmxfMgogRFJPUCBVU0VSIHJlZ3Jlc3NfcmxzX2FsaWNlOwogRFJPUCBV U0VSIHJlZ3Jlc3NfcmxzX2JvYjsKIERST1AgVVNFUiByZWdyZXNzX3Jsc19jYXJvbDsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3NlY3VyaXR5LnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3Jvd3NlY3VyaXR5LnNxbAppbmRleCA1ZDkyM2M1Y2EzYi4uYjkwZjUzMDk1Nzgg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3NlY3VyaXR5LnNxbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwKQEAgLTI1NDIsNiArMjU0Miw4NiBA QCByZXNldCBybHNfdGVzdC5ibGFoOwogZHJvcCBmdW5jdGlvbiBybHNfZih0ZXh0KTsKIGRyb3Ag dGFibGUgcmxzX3QsIHRlc3RfdDsKIAorLS0KKy0tIFRlc3QgZm9yIHBnX2dldF9wb2xpY3lfZGRs KHRhYmxlTmFtZSwgcG9saWN5TmFtZSwgcHJldHR5KSBmdW5jdGlvbi4KKy0tCitDUkVBVEUgVEFC TEUgcmxzX3RibF8xICgKKyAgICBkaWQgICAgICAgICBpbnQgcHJpbWFyeSBrZXksCisgICAgY2lk ICAgICAgICAgaW50LAorICAgIGRsZXZlbCAgICAgIGludCBub3QgbnVsbCwKKyAgICBkYXV0aG9y ICAgICBuYW1lLAorICAgIGR0aXRsZSAgICAgIHRleHQKKyk7CitHUkFOVCBBTEwgT04gcmxzX3Ri bF8xIFRPIHB1YmxpYzsKK0NSRUFURSBUQUJMRSBybHNfdGJsXzIgKAorICAgIHBndXNlciAgICAg IG5hbWUgcHJpbWFyeSBrZXksCisgICAgc2VjbHYgICAgICAgaW50CispOworR1JBTlQgU0VMRUNU IE9OIHJsc190YmxfMiBUTyBwdWJsaWM7CisKKy0tIFRlc3QgUEVSTUlTU0lWRSBhbmQgUkVTVFJJ Q1RJVkUKK0NSRUFURSBQT0xJQ1kgcmxzX3AxIE9OIHJsc190YmxfMSBBUyBQRVJNSVNTSVZFCisg ICAgVVNJTkcgKGRsZXZlbCA8PSAoU0VMRUNUIHNlY2x2IEZST00gcmxzX3RibF8yIFdIRVJFIHBn dXNlciA9IGN1cnJlbnRfdXNlcikpOworQ1JFQVRFIFBPTElDWSBybHNfcDIgT04gcmxzX3RibF8x IEFTIFJFU1RSSUNUSVZFIFVTSU5HIChjaWQgPD4gNDQgQU5EIGNpZCA8IDUwKTsKKworLS0gVGVz dCBGT1IgQUxMIHwgU0VMRUNUIHwgSU5TRVJUIHwgVVBEQVRFIHwgREVMRVRFCitDUkVBVEUgUE9M SUNZIHJsc19wMyBPTiBybHNfdGJsXzEgRk9SIEFMTCBVU0lORyAoZGF1dGhvciA9IGN1cnJlbnRf dXNlcik7CitDUkVBVEUgUE9MSUNZIHJsc19wNCBPTiBybHNfdGJsXzEgRk9SIFNFTEVDVCBVU0lO RyAoY2lkICUgMiA9IDApOworQ1JFQVRFIFBPTElDWSBybHNfcDUgT04gcmxzX3RibF8xIEZPUiBJ TlNFUlQgV0lUSCBDSEVDSyAoY2lkICUgMiA9IDEpOworQ1JFQVRFIFBPTElDWSBybHNfcDYgT04g cmxzX3RibF8xIEZPUiBVUERBVEUgVVNJTkcgKGNpZCAlIDIgPSAwKTsKK0NSRUFURSBQT0xJQ1kg cmxzX3A3IE9OIHJsc190YmxfMSBGT1IgREVMRVRFIFVTSU5HIChjaWQgPCA4KTsKKworLS0gVGVz dCBUTyB7IHJvbGVfbmFtZSAuLi4gfQorQ1JFQVRFIFBPTElDWSBybHNfcDggT04gcmxzX3RibF8x IFRPIHJlZ3Jlc3NfcmxzX2RhdmUsIHJlZ3Jlc3NfcmxzX2FsaWNlIFVTSU5HICh0cnVlKTsKK0NS RUFURSBQT0xJQ1kgcmxzX3A5IE9OIHJsc190YmxfMSBUTyByZWdyZXNzX3Jsc19leGVtcHRfdXNl ciBXSVRIIENIRUNLIChjaWQgPSAoU0VMRUNUIHNlY2x2IEZST00gcmxzX3RibF8yKSk7CisKKy0t IFRlc3QgTlVMTCB2YWx1ZQorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKE5VTEwsICdybHNfcDEn KTsKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgndGFiMScsIE5VTEwpOworU0VMRUNUIHBnX2dl dF9wb2xpY3lfZGRsKE5VTEwsIE5VTEwpOworCistLSBUZXN0IC0xIGFzIHRhYmxlIG9pZAorIFNF TEVDVCBwZ19nZXRfcG9saWN5X2RkbCgtMSwgJ3Jsc19wMScpOworCistLSBUYWJsZSBkb2VzIG5v dCBleGlzdAorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCd0YWIxJywgJ3Jsc19wMScpOworLS0g UG9saWN5IGRvZXMgbm90IGV4aXN0CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190Ymxf MScsICdwb2wxJyk7CisKKy0tIFdpdGhvdXQgUHJldHR5IGZvcm1hdHRlZAorU0VMRUNUIHBnX2dl dF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxJyk7CitTRUxFQ1QgcGdfZ2V0X3BvbGlj eV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDInKTsKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgn cmxzX3RibF8xJywgJ3Jsc19wMycpOworU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJs XzEnLCAncmxzX3A0Jyk7CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdy bHNfcDUnKTsKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNics IGZhbHNlKTsKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNycs IGZhbHNlKTsKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOCcs IGZhbHNlKTsKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOScs IGZhbHNlKTsKKworLS0gV2l0aCBQcmV0dHkgZm9ybWF0dGVkCitccHNldCBmb3JtYXQgdW5hbGln bmVkCitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEnLCB0cnVl KTsKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMicsIHRydWUp OworU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AzJywgdHJ1ZSk7 CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDQnLCB0cnVlKTsK K1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNScsIHRydWUpOwor U0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A2JywgdHJ1ZSk7CitT RUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDcnLCB0cnVlKTsKK1NF TEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOCcsIHRydWUpOworU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A5JywgdHJ1ZSk7CisKKy0t IENsZWFuIHVwIG9iamVjdHMgY3JlYXRlZCBmb3IgdGVzdGluZyBwZ19nZXRfcG9saWN5X2RkbCBm dW5jdGlvbi4KK0RST1AgUE9MSUNZIHJsc19wMSBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBy bHNfcDIgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3AzIE9OIHJsc190YmxfMTsKK0RS T1AgUE9MSUNZIHJsc19wNCBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDUgT04gcmxz X3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A2IE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJs c19wNyBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDggT04gcmxzX3RibF8xOworRFJP UCBQT0xJQ1kgcmxzX3A5IE9OIHJsc190YmxfMTsKKwogLS0KIC0tIENsZWFuIHVwIG9iamVjdHMK IC0tCi0tIAoyLjUxLjAKCg== --0000000000000c03de0642af49a2--