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 1w1unw-000iP9-27 for pgsql-hackers@arkaria.postgresql.org; Sun, 15 Mar 2026 23:23:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w1unu-006HKL-0A for pgsql-hackers@arkaria.postgresql.org; Sun, 15 Mar 2026 23:23:26 +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.96) (envelope-from ) id 1w1unt-006HKD-1M for pgsql-hackers@lists.postgresql.org; Sun, 15 Mar 2026 23:23:26 +0000 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w1unr-00000000JDA-31mC for pgsql-hackers@lists.postgresql.org; Sun, 15 Mar 2026 23:23:25 +0000 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-59dea72099eso4014401e87.0 for ; Sun, 15 Mar 2026 16:23:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773617002; cv=none; d=google.com; s=arc-20240605; b=DA2jAsTBf4ig/eg0t0kTuG18aS08qa9yeOuHRTvkoQ2sRRtZUJx6CKpoeB4UCgPlDI S4SyQZmgO9EuNpU614c1FYCOkHn66QVOLHf/fG84Olqe0xgRBhdPJO1L6jCO+OcDG6kd c5VvplF18SoxZs5O9vlq85TDI7FIEHLQxPijK4uNJhLG5c2H45R/nFSUenMI16S1EmQU 1iKhRKMgh+ja4HMDGZnSUL8DTOF6YUwwNCRfoLxDAIGmtW74WWFkgqtRiazpnbUgAzg6 nxBIMgB6fCSD/BKIUn5x6fJChu8nXqCHnfISys/uualPrVXrtkaEkbu7UklSrqcG86Ov vmyw== 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=bx5TEQZNMi+r+cPSs6GIeDqd2dELu0/VyQBjZ8fz5zg=; fh=aYHLxXiUMecuKqCAHdO1R2gtX6Tqt/lkbLfIGWRAyAw=; b=MsX6+Wbx+KBIfZyYItlXDD6DKqbGKZyEE6aF6+gnvno8v3e2etXM0eDWk6gARmh1CM C/niG1MUeJ5GPGuvajudwyGeg7Zhfkhb33m4N1raV+1BT+OE4Z1WYasJaCC0hffcpx7A lh9XM2x6f8zIPgWdavrc+rdoOx6zfkPwi8rAbvOOtpfwL3KfOM2gs3KTXDxFi3atJuHG r16jAJuhSpaEZGJDsjcp7RswuEnMz+SK/CI3DmEsS+mUBWZh0Hkagc8lodyvxYuehHf3 fGiOYv49KpQzUxf+jynsQUg4usf87dLRL/6jrSHtRSON9cglFJW1uVn57LcUjS4v1lHK yJdA==; darn=lists.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=1773617002; x=1774221802; darn=lists.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=bx5TEQZNMi+r+cPSs6GIeDqd2dELu0/VyQBjZ8fz5zg=; b=QzKeNZBrixgp3TVyk0UJ23djHf29iH08+u6FH6m0d9jlDjm7DEO1enJn44Q967lAKO 6C+PxqzPg4fUuwdo+ilthrSmxnTH5SoFuG8lL4UVxKJvJOaSC4tdmRx81HVcyBk/oFwN FGXq4h48+AbbHflviUQCggB8lg7LBRLSQnJguHLr2XfZZda2JXr6KK3STNc3UtN9bEgJ AZfiGdyZ4dg3JhhKjFw5l9iToo78hYGuPC7mauTDhADaHPluIFd8bj5p/HhofuW11AS4 S8aLExP5qxp2CVuExH9ovzfa+5DP81YSNFsPhgyZFRyimRvzli6AY2bJY6RJYe51b1Tr BF5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773617002; x=1774221802; 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=bx5TEQZNMi+r+cPSs6GIeDqd2dELu0/VyQBjZ8fz5zg=; b=TMkci/Fo7+Vnc0wPHkNibGncBAmg2dCteUp5g/87s0WjndKDeSp97WmMQ2ZnYZn3n2 BnN5W/+N5QbyRzUlWDE17xD3NcrWsseaBNhRH88ARb8Y0NyHrKnhbmDBRR9XXnV+QV+4 ww5ef1FdIwOTMaWALR3uJQdV7QcUqQqyLDOI3emWuClZsKiC9mkGNjDEofDrTx+jOjZJ JI3S5XNSLRRvGYc4o31cMwvFdC/0fZjKHzBQa0esQI5hrazb9eGLi4oTFpdfSVM8ODj5 pcUKP3C8FzZ6YlvDqmFNG54kTcL8m4OE6Iwl33teSmoK3Kuvu4/kwYXhkwN3lKU0s42d lltg== X-Forwarded-Encrypted: i=1; AJvYcCWd0xb6o74vXtGUktXzPAMeIxkL906hEGsptR5KUL+JP+gQjggfblr+T+DviIQzYO7MEup9s2Mp/oHQYTtj@lists.postgresql.org X-Gm-Message-State: AOJu0YzQf6fYvaMGMht9r2j5ZwsqpQRW9Dn4zkACd/sxNOuteD7Ft0W0 a/G9fogHkdNbkg6CdG+a5NsORxBYakvqjnl7X+jelht6UpM2I8Jk1uq59HyzvSDnpI/mmBCax9z EirfjZZTmC3VVWvBjJHpg36dVBjr04bc= X-Gm-Gg: ATEYQzxvPqV5rNhvuJm4RqUTZW6Jree5mlHv02AcrHNIF2O0IV439nPhKm3YMj2xCOE mGy53EVMDT5cmg4RHQSTtJ5fyBfohUzDMnrkvHevvqn4PHsVpvejmeLpi3tfsGh7IayknRc3Na4 Zbm99Cd0DFtPYnVggTClEF+YzkXUe47uqXN+Uzpyye3Wr58DD/oB073QO8oAbDzjWlzwYQlIdYB 91HwxbDjjogh2T7+jyOhbzRaIRG/7wlaLBCbxGuwumPC9ZVh4PIE2/XC7FPYrb09wkFFKNkSNt5 7ti+ X-Received: by 2002:a05:6512:154b:10b0:5a1:2f9e:ec8f with SMTP id 2adb3069b0e04-5a1627039ecmr2568297e87.10.1773617002080; Sun, 15 Mar 2026 16:23:22 -0700 (PDT) MIME-Version: 1.0 References: <48261e54-c4f1-4bde-a4a9-4f3698a6b380@app.fastmail.com> In-Reply-To: From: Gyan Sreejith Date: Sun, 15 Mar 2026 19:23:11 -0400 X-Gm-Features: AaiRm519pI9CKTJModF_p_kfOuLHPGOiF3uuoHGQWQYmdpCGdg26EcdTocqhJo4 Message-ID: Subject: Re: [Proposal] Adding Log File Capability to pg_createsubscriber To: vignesh C Cc: Amit Kapila , Euler Taveira , "kuroda.hayato@fujitsu.com" , "pgsql-hackers@lists.postgresql.org" , Peter Smith Content-Type: multipart/mixed; boundary="000000000000607f54064d186346" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000607f54064d186346 Content-Type: multipart/alternative; boundary="000000000000607f53064d186344" --000000000000607f53064d186344 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Mar 11, 2026 at 6:05=E2=80=AFAM vignesh C wro= te: > On Tue, 10 Mar 2026 at 04:26, Gyan Sreejith > wrote: > > > > On Thu, Mar 5, 2026 at 9:49=E2=80=AFAM Euler Taveira wrote: > > > >> Don't duplicate code. If you are reusing a function, my advice is to > move it to > >> src/common. You can always use "ifdef FRONTEND" to use the appropriate > log > >> message (elog/ereport vs pg_error, for example). > > > > > > I have made all the changes except for this one, and I am deferring to > Amit Kapila regarding the marks. > > Few comments: > 1) You are not checking log level because of which the contents are > logged irrespective of the log level: > +#undef pg_log_info > +#define pg_log_info(...) do{\ > + if (internal_log_file_fp !=3D NULL) \ > + internal_log_file_write(__VA_ARGS__); \ > + else \ > + pg_log_generic(PG_LOG_INFO,PG_LOG_PRIMARY,__VA_ARGS__);\ > +} while(0) > + > +#undef pg_log_info_hint > +#define pg_log_info_hint(...) do{\ > + if (internal_log_file_fp !=3D NULL) \ > + internal_log_file_write(__VA_ARGS__); \ > + else \ > + pg_log_generic(PG_LOG_INFO, PG_LOG_HINT, __VA_ARGS__);\ > +} while(0) > + > +#undef pg_log_debug > +#define pg_log_debug(...) do{\ > + if (internal_log_file_fp !=3D NULL) \ > + internal_log_file_write(__VA_ARGS__); \ > + else \ > + if (unlikely(__pg_log_level <=3D PG_LOG_DEBUG)) \ > + pg_log_generic(PG_LOG_DEBUG, PG_LOG_PRIMARY, > __VA_ARGS__); \ > +} while(0) The log level is passed to and checked by pg_log_generic_v() which is called by pg_log_generic(). > > 2) Instead of just checking if the file is created or not, let's check > for some contents from the file: > Added checks to ensure that the log files are not empty, thanks! > > 3) This change is not required, let's remove this: > --- a/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl > +++ b/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl > @@ -13,7 +13,8 @@ program_help_ok('pg_createsubscriber'); > program_version_ok('pg_createsubscriber'); > program_options_handling_ok('pg_createsubscriber'); > > -my $datadir =3D PostgreSQL::Test::Utils::tempdir; > +my $datadir =3D PostgreSQL::Test::Utils::tempdir + "/datadir"; Fixed > > 4) No need of '{' as it is a single line statement > if (opt->log_dir !=3D NULL) > { > appendPQExpBuffer(pg_ctl_cmd, " -l %s/%s/%s.log", opt->log_dir, > log_timestamp, SERVER_LOG_FILE_NAME); > } > Fixed Thank you! I have attached the changes. Regards, Gyan --000000000000607f53064d186344 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Wed, Mar 11, 2026= at 6:05=E2=80=AFAM vignesh C <vignesh21@gmail.com> wrote:
On Tue, 10 Mar 2026 at 04:26, Gyan Sreej= ith <gyan.s= reejith@gmail.com> wrote:
>
> On Thu, Mar 5, 2026 at 9:49=E2=80=AFAM Euler Taveira <euler@eulerto.com> wrote:<= br> >
>> Don't duplicate code. If you are reusing a function, my advice= is to move it to
>> src/common. You can always use "ifdef FRONTEND" to use t= he appropriate log
>> message (elog/ereport vs pg_error, for example).
>
>
> I have made all the changes except for this one, and I am deferring to= Amit Kapila regarding the marks.

Few comments:
1) You are not checking log level because of which the contents are
logged irrespective of the log level:
+#undef pg_log_info
+#define pg_log_info(...) do{\
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (internal_log_file_fp !=3D NULL) \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0internal_log_file_w= rite(__VA_ARGS__); \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0else \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pg_log_generic(PG_L= OG_INFO,PG_LOG_PRIMARY,__VA_ARGS__);\
+} while(0)
+
+#undef pg_log_info_hint
+#define pg_log_info_hint(...) do{\
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (internal_log_file_fp !=3D NULL) \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0internal_log_file_w= rite(__VA_ARGS__); \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0else \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pg_log_generic(PG_L= OG_INFO, PG_LOG_HINT, __VA_ARGS__);\
+} while(0)
+
+#undef pg_log_debug
+#define pg_log_debug(...) do{\
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (internal_log_file_fp !=3D NULL) \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0internal_log_file_w= rite(__VA_ARGS__); \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0else \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (unlikely(__pg_l= og_level <=3D PG_LOG_DEBUG)) \
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0pg_log_generic(PG_LOG_DEBUG, PG_LOG_PRIMARY,
__VA_ARGS__); \
+} while(0)
The log level is passed to and checked by pg_l= og_generic_v() which is called by pg_log_generic().=C2=A0
=C2=A0
2) Instead of just checking if the file is created or not, let's check<= br> for some contents from the file:
Added checks to ensur= e that the log files are not empty, thanks!=C2=A0

3) This change is not required, let's remove this:
--- a/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl
+++ b/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl
@@ -13,7 +13,8 @@ program_help_ok('pg_createsubscriber');
=C2=A0program_version_ok('pg_createsubscriber');
=C2=A0program_options_handling_ok('pg_createsubscriber');

-my $datadir =3D PostgreSQL::Test::Utils::tempdir;
+my $datadir =3D PostgreSQL::Test::Utils::tempdir + "/datadir";
Fixed=C2=A0
=C2=A0
4) No need of '{' as it is a single line statement
if (opt->log_dir !=3D NULL)
{
appendPQExpBuffer(pg_ctl_cmd, " -l %s/%s/%s.log", opt->log_dir= ,
log_timestamp, SERVER_LOG_FILE_NAME);
}
Fixed=C2=A0

Thank you! I ha= ve attached the changes.
Regards,
Gyan=C2=A0
--000000000000607f53064d186344-- --000000000000607f54064d186346 Content-Type: application/x-patch; name="v8-0001-Add-a-new-argument-l-logdir-to-pg_createsubscribe.patch" Content-Disposition: attachment; filename="v8-0001-Add-a-new-argument-l-logdir-to-pg_createsubscribe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmsck8nu0 RnJvbSA3YTIwNzNjNGJlOTJlNzM2MTllM2YxOWVhMTc1ZGM1ZTIyNGM0YTE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHeWFuIFNyZWVqaXRoIDxneWFuLnNyZWVqaXRoQGdtYWlsLmNv bT4KRGF0ZTogU3VuLCAxNSBNYXIgMjAyNiAxODo0MDoxNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djhdIEFkZCBhIG5ldyBhcmd1bWVudCAtbCA8bG9nZGlyPiB0byBwZ19jcmVhdGVzdWJzY3JpYmVy LgoKRW5hYmxpbmcgdGhlIG9wdGlvbiB0byB3cml0ZSBtZXNzYWdlcyB0byBsb2cgZmlsZXMgaW4g dGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCkEgbmV3IGRpcmVjdG9yeSBpcyBjcmVhdGVkIGlmIHJl cXVpcmVkLiBBIHN1YmRpcmVjdG9yeSBpcyBjcmVhdGVkIHdpdGggdGltZXN0YW1wIGFzIGl0cyBu YW1lLCBhbmQgaXQgd2lsbCBjb250YWluIHR3byBuZXcgbG9nZmlsZXM6CjEuIHBnX2NyZWF0ZXN1 YnNjcmliZXJfc2VydmVyLmxvZyAgLSBjYXB0dXJlcyBtZXNzYWdlcyByZWxhdGVkIHRvIHN0YXJ0 aW5nIGFuZCBzdG9wcGluZyB0aGUgc3RhbmRieSBzZXJ2ZXIuCjIuIHBnX2NyZWF0ZXN1YnNjcmli ZXJfaW50ZXJuYWwubG9nIC0gY2FwdHVyZXMgaW50ZXJuYWwgZGlhZ25vc3RpYyBvdXRwdXQgZnJv bSBwZ19jcmVhdGVzdWJzY3JpYmVyLgoKRm9yIGV4YW1wbGUsIGlmIHdlIHNwZWNpZnkgLWwgYWJj IGFzIGFuIGFyZ3VtZW50LCBhbmQgaWYgdGhlIHRpbWVzdGFtcCBvbiBydW5uaW5nIGl0IGlzIDIw MjYwMTE5VDIwNDMxNy4yMDQsIGEgZGlyZWN0b3J5IGFiYyBpcyBjcmVhdGVkIGlmIGl0IGRvZXNu J3QgZXhpc3QgYWxyZWFkeSwgd2l0aCAyMDI2MDExOVQyMDQzMTcuMjA0IGFzIGl0cyBzdWJkaXJl Y3RvcnkgYW5kIGl0IHdpbGwgY29udGFpbiB0aGUgdHdvIGxvZyBmaWxlcyBwZ19jcmVhdGVzdWJz Y3JpYmVyX3NlcnZlci5sb2cgYW5kIHBnX2NyZWF0ZXN1YnNjcmliZXJfaW50ZXJuYWwubG9nCi0t LQogZG9jL3NyYy9zZ21sL3JlZi9wZ19jcmVhdGVzdWJzY3JpYmVyLnNnbWwgICAgIHwgIDIyICsr Kwogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2NyZWF0ZXN1YnNjcmliZXIuYyAgIHwgMTY1ICsr KysrKysrKysrKysrKysrLQogLi4uL3QvMDQwX3BnX2NyZWF0ZXN1YnNjcmliZXIucGwgICAgICAg ICAgICAgIHwgIDE3ICsrCiAzIGZpbGVzIGNoYW5nZWQsIDIwMSBpbnNlcnRpb25zKCspLCAzIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfY3JlYXRlc3Vic2Ny aWJlci5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19jcmVhdGVzdWJzY3JpYmVyLnNnbWwKaW5k ZXggY2Y0NWZmMzU3M2QuLjY3YTY4M2U2NmM3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVm L3BnX2NyZWF0ZXN1YnNjcmliZXIuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2NyZWF0 ZXN1YnNjcmliZXIuc2dtbApAQCAtMTM2LDYgKzEzNiwyOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50 YXRpb24KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgIDx2YXJs aXN0ZW50cnk+CisgICAgIDx0ZXJtPjxvcHRpb24+LWwgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmRpcmVjdG9yeTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICA8dGVy bT48b3B0aW9uPi0tbG9nZGlyPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5kaXJlY3Rv cnk8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAg PHBhcmE+CisgICAgICAgU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbG9nIGRpcmVjdG9yeS4gQSBu ZXcgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgd2l0aCB0aGlzIG5hbWUgaWYgaXQgZG9lcyBub3QgZXhp c3QuIEEgc3ViZGlyZWN0b3J5IHdpdGggYSB0aW1lc3RhbXAgaW5kaWNhdGluZyB0aGUgdGltZSBh dCB3aGljaCBwZ19jcmVhdGVzdWJzY3JpYmVyIHdhcyBydW4gd2lsbCBiZSBjcmVhdGVkLiBUaGUg Zm9sbG93aW5nIHR3byBsb2cgZmlsZXMgd2lsbCBiZSBjcmVhdGVkaW4gdGhlIHN1YmRpcmVjdG9y eSB3aXRoIGEgdW1hc2sgb2YgMDc3IHNvIHRoYXQgYWNjZXNzIGlzIGRpc2FsbG93ZWQgdG8gb3Ro ZXIgdXNlcnMgYnkgZGVmYXVsdC4KKyAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlz dGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBwZ19jcmVhdGVzdWJzY3JpYmVyX3Nl cnZlci5sb2cgd2hpY2ggY2FwdHVyZXMgbG9ncyByZWxhdGVkIHRvIHN0b3BwaW5nIGFuZCBzdGFy dGluZyB0aGUgc3RhbmRieSBzZXJ2ZXIsCisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlz dGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIHBn X2NyZWF0ZXN1YnNjcmliZXJfaW50ZXJuYWwubG9nIHdoaWNoIGNhcHR1cmVzIGludGVybmFsIGRp YWdub3N0aWMgb3V0cHV0ICh2YWxpZGF0aW9ucywgY2hlY2tzLCBldGMuKQorICAgICAgICAgPC9w YXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAg PC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgPHZh cmxpc3RlbnRyeT4KICAgICAgPHRlcm0+PG9wdGlvbj4tbjwvb3B0aW9uPjwvdGVybT4KICAgICAg PHRlcm0+PG9wdGlvbj4tLWRyeS1ydW48L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2Jhc2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJlci5jIGIvc3JjL2Jpbi9wZ19iYXNl YmFja3VwL3BnX2NyZWF0ZXN1YnNjcmliZXIuYwppbmRleCAyYmM4NDUwNWFhYi4uMzQ5NWJkYjg4 Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVy LmMKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2NyZWF0ZXN1YnNjcmliZXIuYwpAQCAt NDksMTAgKzQ5LDE0IEBACiAjZGVmaW5lIElOQ0xVREVEX0NPTkZfRklMRQkJCSJwZ19jcmVhdGVz dWJzY3JpYmVyLmNvbmYiCiAjZGVmaW5lIElOQ0xVREVEX0NPTkZfRklMRV9ESVNBQkxFRAlJTkNM VURFRF9DT05GX0ZJTEUgIi5kaXNhYmxlZCIKIAorI2RlZmluZSBTRVJWRVJfTE9HX0ZJTEVfTkFN RSAicGdfY3JlYXRlc3Vic2NyaWJlcl9zZXJ2ZXIiCisjZGVmaW5lIElOVEVSTkFMX0xPR19GSUxF X05BTUUgInBnX2NyZWF0ZXN1YnNjcmliZXJfaW50ZXJuYWwiCisKIC8qIENvbW1hbmQtbGluZSBv cHRpb25zICovCiBzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMKIHsKIAljaGFyCSAgICpj b25maWdfZmlsZTsJLyogY29uZmlndXJhdGlvbiBmaWxlICovCisJY2hhcgkgICAqbG9nX2RpcjsJ CS8qIGxvZyBkaXJlY3RvcnkgbmFtZSAqLwogCWNoYXIJICAgKnB1Yl9jb25uaW5mb19zdHI7CS8q IHB1Ymxpc2hlciBjb25uZWN0aW9uIHN0cmluZyAqLwogCWNoYXIJICAgKnNvY2tldF9kaXI7CQkv KiBkaXJlY3RvcnkgZm9yIFVuaXgtZG9tYWluIHNvY2tldCwgaWYgYW55ICovCiAJY2hhcgkgICAq c3ViX3BvcnQ7CQkvKiBzdWJzY3JpYmVyIHBvcnQgbnVtYmVyICovCkBAIC0xNDYsNiArMTUwLDkg QEAgc3RhdGljIHZvaWQgZHJvcF9leGlzdGluZ19zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpzdWJuYW1lLAogCQkJCQkJCQkJICAgY29uc3QgY2hhciAqZGJuYW1lKTsKIHN0 YXRpYyB2b2lkIGdldF9wdWJsaXNoZXJfZGF0YWJhc2VzKHN0cnVjdCBDcmVhdGVTdWJzY3JpYmVy T3B0aW9ucyAqb3B0LAogCQkJCQkJCQkJYm9vbCBkYm5hbWVzcGVjaWZpZWQpOworc3RhdGljIHZv aWQKKwkJCWludGVybmFsX2xvZ19maWxlX3dyaXRlKGNvbnN0IGNoYXIgKmZvcm1hdCwuLi4pIF9f YXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSk7CisKIAogI2RlZmluZQlXQUlUX0lO VEVSVkFMCTEJCS8qIDEgc2Vjb25kICovCiAKQEAgLTE2Nyw2ICsxNzQsMTAgQEAgc3RhdGljIHBn X3Bybmdfc3RhdGUgcHJuZ19zdGF0ZTsKIHN0YXRpYyBjaGFyICpwZ19jdGxfcGF0aCA9IE5VTEw7 CiBzdGF0aWMgY2hhciAqcGdfcmVzZXR3YWxfcGF0aCA9IE5VTEw7CiAKK3N0YXRpYyBGSUxFICpp bnRlcm5hbF9sb2dfZmlsZV9mcCA9IE5VTEw7CS8qIEZpbGUgcHRyIHRvIGxvZyBhbGwgbWVzc2Fn ZXMgdG8gKi8KK3N0YXRpYyBjaGFyICpsb2dfdGltZXN0YW1wID0gTlVMTDsJLyogVGltZXN0YW1w IHRvIGJlIHVzZWQgaW4gYWxsIGxvZyBmaWxlCisJCQkJCQkJCQkgKiBuYW1lcyAqLworCiAvKiBz dGFuZGJ5IC8gc3Vic2NyaWJlciBkYXRhIGRpcmVjdG9yeSAqLwogc3RhdGljIGNoYXIgKnN1YnNj cmliZXJfZGlyID0gTlVMTDsKIApAQCAtMTc0LDYgKzE4NSwxMjMgQEAgc3RhdGljIGJvb2wgcmVj b3ZlcnlfZW5kZWQgPSBmYWxzZTsKIHN0YXRpYyBib29sIHN0YW5kYnlfcnVubmluZyA9IGZhbHNl Owogc3RhdGljIGJvb2wgcmVjb3ZlcnlfcGFyYW1zX3NldCA9IGZhbHNlOwogCisjdW5kZWYgcGdf bG9nX2luZm8KKyNkZWZpbmUgcGdfbG9nX2luZm8oLi4uKSBkb3tcCisJaWYgKGludGVybmFsX2xv Z19maWxlX2ZwICE9IE5VTEwpIFwKKwkJaW50ZXJuYWxfbG9nX2ZpbGVfd3JpdGUoX19WQV9BUkdT X18pOyBcCisJZWxzZSBcCisJCXBnX2xvZ19nZW5lcmljKFBHX0xPR19JTkZPLCBQR19MT0dfUFJJ TUFSWSwgX19WQV9BUkdTX18pO1wKK30gd2hpbGUoMCkKKworI3VuZGVmIHBnX2xvZ19pbmZvX2hp bnQKKyNkZWZpbmUgcGdfbG9nX2luZm9faGludCguLi4pIGRve1wKKwlpZiAoaW50ZXJuYWxfbG9n X2ZpbGVfZnAgIT0gTlVMTCkgXAorCQlpbnRlcm5hbF9sb2dfZmlsZV93cml0ZShfX1ZBX0FSR1Nf Xyk7IFwKKwllbHNlIFwKKwkJcGdfbG9nX2dlbmVyaWMoUEdfTE9HX0lORk8sIFBHX0xPR19ISU5U LCBfX1ZBX0FSR1NfXyk7XAorfSB3aGlsZSgwKQorCisjdW5kZWYgcGdfbG9nX2RlYnVnCisjZGVm aW5lIHBnX2xvZ19kZWJ1ZyguLi4pIGRve1wKKwlpZiAoaW50ZXJuYWxfbG9nX2ZpbGVfZnAgIT0g TlVMTCkgXAorCQlpbnRlcm5hbF9sb2dfZmlsZV93cml0ZShfX1ZBX0FSR1NfXyk7IFwKKwllbHNl IFwKKwkJaWYgKHVubGlrZWx5KF9fcGdfbG9nX2xldmVsIDw9IFBHX0xPR19ERUJVRykpIFwKKwkJ CXBnX2xvZ19nZW5lcmljKFBHX0xPR19ERUJVRywgUEdfTE9HX1BSSU1BUlksIF9fVkFfQVJHU19f KTsgXAorfSB3aGlsZSgwKQorCisjdW5kZWYgcGdfZmF0YWwKKyNkZWZpbmUgcGdfZmF0YWwoLi4u KSBkb3tcCisJaWYgKGludGVybmFsX2xvZ19maWxlX2ZwICE9IE5VTEwpIFwKKwkJaW50ZXJuYWxf bG9nX2ZpbGVfd3JpdGUoX19WQV9BUkdTX18pOyBcCisJcGdfbG9nX2dlbmVyaWMoUEdfTE9HX0VS Uk9SLCBQR19MT0dfUFJJTUFSWSwgX19WQV9BUkdTX18pOyBcCisJZXhpdCgxKTsgXAorfSB3aGls ZSgwKQorCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfbG9nX2ZpbGVfd3JpdGUoY29uc3QgY2hhciAq Zm9ybWF0LC4uLikKK3sKKwlpZiAoaW50ZXJuYWxfbG9nX2ZpbGVfZnAgIT0gTlVMTCkKKwl7CisJ CXZhX2xpc3QJCWFyZ3M7CisKKwkJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKwkJdmZwcmludGYo aW50ZXJuYWxfbG9nX2ZpbGVfZnAsIGZvcm1hdCwgYXJncyk7CisJCWZwcmludGYoaW50ZXJuYWxf bG9nX2ZpbGVfZnAsICJcbiIpOworCQlmZmx1c2goaW50ZXJuYWxfbG9nX2ZpbGVfZnApOworCQl2 YV9lbmQoYXJncyk7CisJfQorfQorCisvKgorICogT3BlbiBhIG5ldyBsb2dmaWxlIHdpdGggcHJv cGVyIHBlcm1pc3Npb25zLgorICogRnJvbSBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dl ci5jCisgKi8KK3N0YXRpYyBGSUxFICoKK2xvZ2ZpbGVfb3Blbihjb25zdCBjaGFyICpmaWxlbmFt ZSwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwlGSUxFCSAgICpmaDsKKwltb2RlX3QJCW91bWFzazsK KworCW91bWFzayA9IHVtYXNrKChtb2RlX3QpICgofihTX0lSVVNSIHwgU19JV1VTUikpICYgKFNf SVJXWFUgfCBTX0lSV1hHIHwgU19JUldYTykpKTsKKwlmaCA9IGZvcGVuKGZpbGVuYW1lLCBtb2Rl KTsKKwl1bWFzayhvdW1hc2spOworCisJaWYgKGZoKQorCXsKKwkJc2V0dmJ1ZihmaCwgTlVMTCwg UEdfSU9MQkYsIDApOworCisjaWZkZWYgV0lOMzIKKwkJLyogdXNlIENSTEYgbGluZSBlbmRpbmdz IG9uIFdpbmRvd3MgKi8KKwkJX3NldG1vZGUoX2ZpbGVubyhmaCksIF9PX1RFWFQpOworI2VuZGlm CisJfQorCWVsc2UKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGxvZyBmaWxlIFwiJXNcIjog JW0iLAorCQkJCSBmaWxlbmFtZSk7CisKKwlyZXR1cm4gZmg7Cit9CisKK3N0YXRpYyB2b2lkCitt YWtlX2RpcihjaGFyICpkaXIpCit7CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKworCWlmIChzdGF0 KGRpciwgJnN0YXRidWYpICE9IDApCisJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCXsKKwkJCWlm IChta2RpcihkaXIsIFNfSVJXWFUpID09IDApCisJCQkJcGdfbG9nX2luZm8oImRpcmVjdG9yeSAl cyBjcmVhdGVkIiwgZGlyKTsKKwkJCWVsc2UKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0 ZSBsb2cgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkaXIpOworCQl9Cit9CisKK3N0YXRpYyB2b2lk CittYWtlX291dHB1dF9kaXJzKGNoYXIgKmxvZ19kaXIpCit7CisJY2hhcgkJdGltZXN0YW1wWzEy OF07CisJc3RydWN0IHRpbWV2YWwgdHZhbDsKKwl0aW1lX3QJCW5vdzsKKwlzdHJ1Y3QgdG0JdG1i dWY7CisJY2hhcgkJdGltZXN0YW1wX2RpcltNQVhQR1BBVEhdOworCWludAkJCWxlbjsKKworCWdl dHRpbWVvZmRheSgmdHZhbCwgTlVMTCk7CisJbm93ID0gdHZhbC50dl9zZWM7CisJc3RyZnRpbWUo dGltZXN0YW1wLCBzaXplb2YodGltZXN0YW1wKSwgIiVZJW0lZFQlSCVNJVMiLCBsb2NhbHRpbWVf cigmbm93LCAmdG1idWYpKTsKKwkvKiBhcHBlbmQgbWlsbGlzZWNvbmRzICovCisJc25wcmludGYo dGltZXN0YW1wICsgc3RybGVuKHRpbWVzdGFtcCksIHNpemVvZih0aW1lc3RhbXApIC0gc3RybGVu KHRpbWVzdGFtcCksCisJCQkgIi4lMDN1IiwgKHVuc2lnbmVkIGludCkgKHR2YWwudHZfdXNlYyAv IDEwMDApKTsKKwlsb2dfdGltZXN0YW1wID0gcGdfc3RyZHVwKHRpbWVzdGFtcCk7CisKKwltYWtl X2Rpcihsb2dfZGlyKTsKKwlsZW4gPSBzbnByaW50Zih0aW1lc3RhbXBfZGlyLCBNQVhQR1BBVEgs ICIlcy8lcyIsIGxvZ19kaXIsIHRpbWVzdGFtcCk7CisJaWYgKGxlbiA+PSBNQVhQR1BBVEgpCisJ CXBnX2ZhdGFsKCJkaXJlY3RvcnkgcGF0aCBmb3IgbG9nIGZpbGVzLCAlcy8lcywgaXMgdG9vIGxv bmciLCBsb2dfZGlyLCB0aW1lc3RhbXApOworCW1ha2VfZGlyKHRpbWVzdGFtcF9kaXIpOworfQog CiAvKgogICogQ2xlYW4gdXAgb2JqZWN0cyBjcmVhdGVkIGJ5IHBnX2NyZWF0ZXN1YnNjcmliZXIu CkBAIC0yNjksNiArMzk3LDEyIEBAIGNsZWFudXBfb2JqZWN0c19hdGV4aXQodm9pZCkKIAogCWlm IChzdGFuZGJ5X3J1bm5pbmcpCiAJCXN0b3Bfc3RhbmRieV9zZXJ2ZXIoc3Vic2NyaWJlcl9kaXIp OworCisJaWYgKGludGVybmFsX2xvZ19maWxlX2ZwICE9IE5VTEwpCisJeworCQlmY2xvc2UoaW50 ZXJuYWxfbG9nX2ZpbGVfZnApOworCQlpbnRlcm5hbF9sb2dfZmlsZV9mcCA9IE5VTEw7CisJfQog fQogCiBzdGF0aWMgdm9pZApAQCAtMjgzLDYgKzQxNyw3IEBAIHVzYWdlKHZvaWQpCiAJCQkgIiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZXMgYW5kIGRhdGFiYXNlcyB0 aGF0IGRvbid0IGFsbG93IGNvbm5lY3Rpb25zXG4iKSk7CiAJcHJpbnRmKF8oIiAgLWQsIC0tZGF0 YWJhc2U9REJOQU1FICAgICAgICAgICBkYXRhYmFzZSBpbiB3aGljaCB0byBjcmVhdGUgYSBzdWJz Y3JpcHRpb25cbiIpKTsKIAlwcmludGYoXygiICAtRCwgLS1wZ2RhdGE9REFUQURJUiAgICAgICAg ICAgIGxvY2F0aW9uIGZvciB0aGUgc3Vic2NyaWJlciBkYXRhIGRpcmVjdG9yeVxuIikpOworCXBy aW50ZihfKCIgIC1sLCAtLWxvZ2Rpcj1MT0dESVIgICAgICAgICAgICAgbG9jYXRpb24gZm9yIHRo ZSBuZXcgbG9nIGRpcmVjdG9yeVxuIikpOwogCXByaW50ZihfKCIgIC1uLCAtLWRyeS1ydW4gICAg ICAgICAgICAgICAgICAgZHJ5IHJ1biwganVzdCBzaG93IHdoYXQgd291bGQgYmUgZG9uZVxuIikp OwogCXByaW50ZihfKCIgIC1wLCAtLXN1YnNjcmliZXItcG9ydD1QT1JUICAgICAgc3Vic2NyaWJl ciBwb3J0IG51bWJlciAoZGVmYXVsdCAlcylcbiIpLCBERUZBVUxUX1NVQl9QT1JUKTsKIAlwcmlu dGYoXygiICAtUCwgLS1wdWJsaXNoZXItc2VydmVyPUNPTk5TVFIgIHB1Ymxpc2hlciBjb25uZWN0 aW9uIHN0cmluZ1xuIikpOwpAQCAtNzAyLDYgKzgzNyw3IEBAIG1vZGlmeV9zdWJzY3JpYmVyX3N5 c2lkKGNvbnN0IHN0cnVjdCBDcmVhdGVTdWJzY3JpYmVyT3B0aW9ucyAqb3B0KQogCWJvb2wJCWNy Y19vazsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAorCWNoYXIJICAgKm91dF9maWxlOwogCWNoYXIJ ICAgKmNtZF9zdHI7CiAKIAlwZ19sb2dfaW5mbygibW9kaWZ5aW5nIHN5c3RlbSBpZGVudGlmaWVy IG9mIHN1YnNjcmliZXIiKTsKQEAgLTczNSw4ICs4NzEsMTQgQEAgbW9kaWZ5X3N1YnNjcmliZXJf c3lzaWQoY29uc3Qgc3RydWN0IENyZWF0ZVN1YnNjcmliZXJPcHRpb25zICpvcHQpCiAJZWxzZQog CQlwZ19sb2dfaW5mbygicnVubmluZyBwZ19yZXNldHdhbCBvbiB0aGUgc3Vic2NyaWJlciIpOwog Ci0JY21kX3N0ciA9IHBzcHJpbnRmKCJcIiVzXCIgLUQgXCIlc1wiID4gXCIlc1wiIiwgcGdfcmVz ZXR3YWxfcGF0aCwKLQkJCQkJICAgc3Vic2NyaWJlcl9kaXIsIERFVk5VTEwpOworCisJaWYgKG9w dC0+bG9nX2RpciAhPSBOVUxMKQorCQlvdXRfZmlsZSA9IHBzcHJpbnRmKCIlcy8lcy8lcy5sb2ci LCBvcHQtPmxvZ19kaXIsIGxvZ190aW1lc3RhbXAsIFNFUlZFUl9MT0dfRklMRV9OQU1FKTsKKwll bHNlCisJCW91dF9maWxlID0gREVWTlVMTDsKKworCWNtZF9zdHIgPSBwc3ByaW50ZigiXCIlc1wi IC1EIFwiJXNcIiA+PiBcIiVzXCIiLCBwZ19yZXNldHdhbF9wYXRoLAorCQkJCQkgICBzdWJzY3Jp YmVyX2Rpciwgb3V0X2ZpbGUpOwogCiAJcGdfbG9nX2RlYnVnKCJwZ19yZXNldHdhbCBjb21tYW5k IGlzOiAlcyIsIGNtZF9zdHIpOwogCkBAIC0xNjUwLDYgKzE3OTIsOSBAQCBzdGFydF9zdGFuZGJ5 X3NlcnZlcihjb25zdCBzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCwgYm9vbCBy ZXN0cmljdGVkXwogCWlmIChyZXN0cmljdF9sb2dpY2FsX3dvcmtlcikKIAkJYXBwZW5kUFFFeHBC dWZmZXJTdHIocGdfY3RsX2NtZCwgIiAtbyBcIi1jIG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dv cmtlcnM9MFwiIik7CiAKKwlpZiAob3B0LT5sb2dfZGlyICE9IE5VTEwpCisJCWFwcGVuZFBRRXhw QnVmZmVyKHBnX2N0bF9jbWQsICIgLWwgJXMvJXMvJXMubG9nIiwgb3B0LT5sb2dfZGlyLCBsb2df dGltZXN0YW1wLCBTRVJWRVJfTE9HX0ZJTEVfTkFNRSk7CisKIAlwZ19sb2dfZGVidWcoInBnX2N0 bCBjb21tYW5kIGlzOiAlcyIsIHBnX2N0bF9jbWQtPmRhdGEpOwogCXJjID0gc3lzdGVtKHBnX2N0 bF9jbWQtPmRhdGEpOwogCXBnX2N0bF9zdGF0dXMocGdfY3RsX2NtZC0+ZGF0YSwgcmMpOwpAQCAt MjE4MSw2ICsyMzI2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsiYWxsIiwg bm9fYXJndW1lbnQsIE5VTEwsICdhJ30sCiAJCXsiZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgJ2QnfSwKIAkJeyJwZ2RhdGEiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0Qn fSwKKwkJeyJsb2dkaXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2wnfSwKIAkJeyJkcnkt cnVuIiwgbm9fYXJndW1lbnQsIE5VTEwsICduJ30sCiAJCXsic3Vic2NyaWJlci1wb3J0IiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCiAJCXsicHVibGlzaGVyLXNlcnZlciIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LApAQCAtMjIxNSw2ICsyMzYxLDcgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJY2hhcgkgICAqY29uc2lzdGVudF9sc247CiAKIAljaGFyCQlw aWRmaWxlW01BWFBHUEFUSF07CisJY2hhcgkgICAqaW50ZXJuYWxfbG9nX2ZpbGU7CiAKIAlwZ19s b2dnaW5nX2luaXQoYXJndlswXSk7CiAJcGdfbG9nZ2luZ19zZXRfbGV2ZWwoUEdfTE9HX1dBUk5J TkcpOwpAQCAtMjIzOSw2ICsyMzg2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ LyogRGVmYXVsdCBzZXR0aW5ncyAqLwogCXN1YnNjcmliZXJfZGlyID0gTlVMTDsKIAlvcHQuY29u ZmlnX2ZpbGUgPSBOVUxMOworCW9wdC5sb2dfZGlyID0gTlVMTDsKIAlvcHQucHViX2Nvbm5pbmZv X3N0ciA9IE5VTEw7CiAJb3B0LnNvY2tldF9kaXIgPSBOVUxMOwogCW9wdC5zdWJfcG9ydCA9IERF RkFVTFRfU1VCX1BPUlQ7CkBAIC0yMjY3LDcgKzI0MTUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAogCWdldF9yZXN0cmljdGVkX3Rva2VuKCk7CiAKLQl3aGlsZSAoKGMgPSBnZXRv cHRfbG9uZyhhcmdjLCBhcmd2LCAiYWQ6RDpucDpQOnM6dDpUVTp2IiwKKwl3aGlsZSAoKGMgPSBn ZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWQ6RDpsOm5wOlA6czp0OlRVOnYiLAogCQkJCQkJCWxv bmdfb3B0aW9ucywgJm9wdGlvbl9pbmRleCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQpAQCAt MjI4OCw2ICsyNDM2LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCXN1YnNj cmliZXJfZGlyID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJY2Fub25pY2FsaXplX3BhdGgoc3Vi c2NyaWJlcl9kaXIpOwogCQkJCWJyZWFrOworCQkJY2FzZSAnbCc6CisJCQkJb3B0LmxvZ19kaXIg PSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQljYW5vbmljYWxpemVfcGF0aChvcHQubG9nX2Rpcik7 CisJCQkJbWFrZV9vdXRwdXRfZGlycyhvcHQubG9nX2Rpcik7CisJCQkJaW50ZXJuYWxfbG9nX2Zp bGUgPSBwc3ByaW50ZigiJXMvJXMvJXMubG9nIiwgb3B0LmxvZ19kaXIsIGxvZ190aW1lc3RhbXAs IElOVEVSTkFMX0xPR19GSUxFX05BTUUpOworCQkJCWlmICgoaW50ZXJuYWxfbG9nX2ZpbGVfZnAg PSBsb2dmaWxlX29wZW4oaW50ZXJuYWxfbG9nX2ZpbGUsICJhIikpID09IE5VTEwpCisJCQkJCXBn X2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBsb2cgZmlsZSBcIiVzXCI6ICVtIiwgaW50ZXJuYWxfbG9n X2ZpbGUpOworCQkJCWJyZWFrOwogCQkJY2FzZSAnbic6CiAJCQkJZHJ5X3J1biA9IHRydWU7CiAJ CQkJYnJlYWs7CkBAIC0yNjIxLDUgKzI3NzcsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAogCXBnX2xvZ19pbmZvKCJEb25lISIpOwogCisJaWYgKGludGVybmFsX2xvZ19maWxlX2Zw ICE9IE5VTEwpCisJCWZjbG9zZShpbnRlcm5hbF9sb2dfZmlsZV9mcCk7CisKIAlyZXR1cm4gMDsK IH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzA0MF9wZ19jcmVhdGVzdWJz Y3JpYmVyLnBsIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX2NyZWF0ZXN1YnNjcmli ZXIucGwKaW5kZXggMGMyN2ZjYTdiYjcuLjNhODJmODkzZTI4IDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2Jhc2ViYWNrdXAvdC8wNDBfcGdfY3JlYXRlc3Vic2NyaWJlci5wbAorKysgYi9zcmMvYmlu L3BnX2Jhc2ViYWNrdXAvdC8wNDBfcGdfY3JlYXRlc3Vic2NyaWJlci5wbApAQCAtMTQsNiArMTQs NyBAQCBwcm9ncmFtX3ZlcnNpb25fb2soJ3BnX2NyZWF0ZXN1YnNjcmliZXInKTsKIHByb2dyYW1f b3B0aW9uc19oYW5kbGluZ19vaygncGdfY3JlYXRlc3Vic2NyaWJlcicpOwogCiBteSAkZGF0YWRp ciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworbXkgJGxvZ2RpciA9IFBvc3Rn cmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyICsgIi9sb2dkaXIiOwogCiAjIEdlbmVyYXRlIGEg ZGF0YWJhc2Ugd2l0aCBhIG5hbWUgbWFkZSBvZiBhIHJhbmdlIG9mIEFTQ0lJIGNoYXJhY3RlcnMu CiAjIEV4dHJhY3RlZCBmcm9tIDAwMl9wZ191cGdyYWRlLnBsLgpAQCAtMzYyLDkgKzM2MywyNSBA QCBjb21tYW5kX29rKAogCQknLS1zdWJzY3JpcHRpb24nID0+ICdzdWIyJywKIAkJJy0tZGF0YWJh c2UnID0+ICRkYjEsCiAJCSctLWRhdGFiYXNlJyA9PiAkZGIyLAorCQknLS1sb2dkaXInID0+ICRs b2dkaXIsCiAJXSwKIAkncnVuIHBnX2NyZWF0ZXN1YnNjcmliZXIgLS1kcnktcnVuIG9uIG5vZGUg UycpOwogCisjIENoZWNrIHRoYXQgdGhlIGxvZyBmaWxlcyB3ZXJlIGNyZWF0ZWQKK215IEBzZXJ2 ZXJfbG9nX2ZpbGVzID0gZ2xvYiAiJGxvZ2Rpci8qL3BnX2NyZWF0ZXN1YnNjcmliZXJfc2VydmVy LmxvZyI7Citpcyggc2NhbGFyKEBzZXJ2ZXJfbG9nX2ZpbGVzKSwgMSwgIgorICAgIHBnX2NyZWF0 ZXN1YnNjcmliZXJfc2VydmVyLmxvZyBmaWxlIHdhcyBjcmVhdGVkIik7CitteSAkc2VydmVyX2xv Z19maWxlX3NpemUgPSAtcyBzaGlmdChAc2VydmVyX2xvZ19maWxlcyk7Citpc250KCRzZXJ2ZXJf bG9nX2ZpbGVfc2l6ZSwgMCwKKwkicGdfY3JlYXRlc3Vic2NyaWJlcl9zZXJ2ZXIubG9nIGZpbGUg bm90IGVtcHR5Iik7CisKK215IEBpbnRlcm5hbF9sb2dfZmlsZXMgPSBnbG9iICIkbG9nZGlyLyov cGdfY3JlYXRlc3Vic2NyaWJlcl9pbnRlcm5hbC5sb2ciOworaXMoIHNjYWxhcihAaW50ZXJuYWxf bG9nX2ZpbGVzKSwgMSwgIgorICAgIHBnX2NyZWF0ZXN1YnNjcmliZXJfaW50ZXJuYWwubG9nIGZp bGUgd2FzIGNyZWF0ZWQiKTsKK215ICRpbnRlcm5hbF9sb2dfZmlsZV9zaXplID0gLXMgc2hpZnQo QGludGVybmFsX2xvZ19maWxlcyk7Citpc250KCRpbnRlcm5hbF9sb2dfZmlsZV9zaXplLCAwLAor CSJwZ19jcmVhdGVzdWJzY3JpYmVyX2ludGVybmFsLmxvZyBmaWxlIG5vdCBlbXB0eSIpOworCiAj IENoZWNrIGlmIG5vZGUgUyBpcyBzdGlsbCBhIHN0YW5kYnkKICRub2RlX3MtPnN0YXJ0OwogaXMo JG5vZGVfcy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgcGdfY2F0YWxvZy5wZ19pc19p bl9yZWNvdmVyeSgpJyksCi0tIAoyLjQzLjAKCg== --000000000000607f54064d186346--