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 1vFWBX-00CghO-3S for pgpool-hackers@arkaria.postgresql.org; Sun, 02 Nov 2025 11:23:46 +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 1vFWBT-00AmIW-LG for pgpool-hackers@arkaria.postgresql.org; Sun, 02 Nov 2025 11:23:42 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vFWBT-00AmIM-9v for pgpool-hackers@lists.postgresql.org; Sun, 02 Nov 2025 11:23:42 +0000 Received: from mail-yw1-x1136.google.com ([2607:f8b0:4864:20::1136]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vFWBO-005Z75-1A for pgpool-hackers@lists.postgresql.org; Sun, 02 Nov 2025 11:23:41 +0000 Received: by mail-yw1-x1136.google.com with SMTP id 00721157ae682-786635a8ce4so6037257b3.2 for ; Sun, 02 Nov 2025 03:23:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tailorbrands.com; s=google; t=1762082616; x=1762687416; 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=i+pAcOD1dYrhTg1HGDH2RdTPUgLihKgH/P1Q2qtTlco=; b=AgigcnPgxqiWAfopbRulX7a1b5YhQqjALR3yjd1udjfgJBL8boIWky6LINsKOTDsAb b6rI3mNObJ1ZDcIoVVN3JuG9pXhCeul/Q9W+KXwPekvF4OBqJsiYzksk3Re4xu17fCDA aXvCEODg+ls+iyfVuGQOyvdK3lJVFKvYQinPX6WR6TR8e13S0JNgxvbfVfGjxhKc95lJ /SxnWeAYx7LrgSAm9NpGy3MY4YooYjipxad8m3OodL5XnfaGAQAj36cLVgbBuKMMibFB /OzXH3tW0624lXzdbFGgcK4J6Mhl2XRO9JyrkImUyNPQf6Ad7B0hO5MPiS+oqJXJGiqB iw/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762082616; x=1762687416; 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=i+pAcOD1dYrhTg1HGDH2RdTPUgLihKgH/P1Q2qtTlco=; b=J1lSMGAxoLo80OIa+raZEl8+e183T+x3Ht08vkIrjdzTnoEdRT9i61Mbf5848WY2M+ l2AbQVpgRS1FqjUhatKo8rZ3HDiPwWMxxDN0h6qbcGmYp4brAyZwS5zssO8bQzzlXNJd AYf8p6M/8G/tJRhaA+QWz97RtAMVUzKPB5nylOvA5vMEdHJWHgRHRtmruRVma3X7Jdwr pVObTJ49OvVY6w5gvrj14fbhmoTwNXwDU09HvFkFgt7JkcmYA3FUSd0k0xrINgAEGFAJ 2duvllu5+juHYwwde2eEKQk+Zd2J6dWt5V8mXqZDC/us/TgozGgPiAf0o05h/Mi7AZy+ +XRw== X-Gm-Message-State: AOJu0YyNhsvJIdDUSQApM8LRNh3S6ycJ4ZCEu+R+mxH6OVbKo1/kCczQ jsx7GNqPuFCAgT30EBQcBKsWaYxsMHVfI68WLCsRPqYAkJdcDeqKbNOKbt4VK8woptyiiGme+gZ m6F3QMdVE4JfXZS5gFoEYbyBzZw8n/+AaW/m6toVAQBonVatSx4FUMHgzUHIB X-Gm-Gg: ASbGnctjcoj6E8nFL6heqTiujKm+bNwaWL2xKR+TX726zIeoV30wEmshKQ4WwwwLwAl GXE4Hh4kwPZs2JA5iiiM4xGouM/WA1KBEgbw31Lmrg0/7HQo4q99EWMODOCTafq4QGM6l7H76Ew XPcUnM8yp+aWPXdmz4JrUnnQTNnh+6kCFpxKxzj67NLk6Xp1iEbbmH6+M0aawnhzEzSyix5GIAp kgsV9IOC5mNpfm8lt8G1zvR6nRjx+ukcByjnaORVV3oJr2um626nF305RV5iCJdq9FDfzK+k2/w Nzpuc8R0eFwdwhocAyQi5LKksTJKME3fwhBoMvsc0HEnB9HUgqE9vI/sQ65hHuVXGNFP X-Google-Smtp-Source: AGHT+IGP02wMM9ElWkoV07df8CjHVMstpdt/KTB10HS1JNW5+8oMOSVBKyrx6gqzYYxaOlwoYrX35KHuBqEGR/kfWeg= X-Received: by 2002:a05:690c:3381:b0:786:655e:8641 with SMTP id 00721157ae682-786655e8d3amr27061387b3.0.1762082616105; Sun, 02 Nov 2025 03:23:36 -0800 (PST) MIME-Version: 1.0 References: <20250930.183509.1786375391511683043.ishii@postgresql.org> <20251031.084526.310963640592087194.ishii@postgresql.org> <20251101.153614.73929001756644634.ishii@postgresql.org> In-Reply-To: <20251101.153614.73929001756644634.ishii@postgresql.org> From: Nadav Shatz Date: Sun, 2 Nov 2025 13:23:22 +0200 X-Gm-Features: AWmQ_bn1BdajxnFOv_1hYILZzB_iyawa9kNlpoviuvTcJdKR8braZ_NqdZLUaOo Message-ID: Subject: Re: Proposal: recent access based routing for primary-replica setups To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000006653a406429ad489" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006653a406429ad489 Content-Type: multipart/alternative; boundary="0000000000006653a206429ad487" --0000000000006653a206429ad487 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable thanks and sorry for the issues, please find attached updated version. On Sat, Nov 1, 2025 at 8:36=E2=80=AFAM Tatsuo Ishii = wrote: > >> Hi, > >> > >> I'm back at work - wdyt of this version? > > > > Thanks for the patch! I will look into it weekend. > > Here are review comments. > > 1. git apply complains trailing whitespace and new blank line. > > $ git apply ~/0001-external-replication-delay-implementation.patch > /home/t-ishii/0001-external-replication-delay-implementation.patch:225: > trailing whitespace. > > /home/t-ishii/0001-external-replication-delay-implementation.patch:232: > trailing whitespace. > > /home/t-ishii/0001-external-replication-delay-implementation.patch:246: > trailing whitespace. > > warning: 3 lines add whitespace errors. > $ git apply ~/0002-external-replication-delay-tests-and-docs.patch > /home/t-ishii/0002-external-replication-delay-tests-and-docs.patch:639: > new blank line at EOF. > + > warning: 1 line adds whitespace errors. > > 2. You can use psprintf() instead of palloc() + snprintf() to make the > code simpler. > > + if (!bi || bi->backend_hostname[0] =3D=3D '\0' || bi->backend_por= t <=3D > 0) > + { > + /* Fallback if hostname or port is not set */ > + out =3D palloc(32); > + snprintf(out, 32, "unknown_node_%d", node_id); > + return out; > + } > > 3. Ditto as above. > > + /* Use hostname:port format */ > + hlen =3D strlen(bi->backend_hostname); > + /* max port chars ~5, plus colon and NUL */ > + out_len =3D hlen + 1 + 5 + 1; > + out =3D palloc(out_len); > + snprintf(out, out_len, "%s:%d", bi->backend_hostname, > bi->backend_port); > + return out; > > 4. There are a few compiler warnings. > > streaming_replication/pool_worker_child.c: In function =E2=80=98do_worker= _child=E2=80=99: > streaming_replication/pool_worker_child.c:269:33: warning: this =E2=80=98= else=E2=80=99 > clause does not guard... [-Wmisleading-indentation] > 269 | else > | ^~~~ > streaming_replication/pool_worker_child.c:273:41: note: ...this statement= , > but the latter is misleadingly indented as if it were guarded by the =E2= =80=98else=E2=80=99 > 273 | node_status =3D > verify_backend_node_status(slots); > | ^~~~~~~~~~~ > > 5. 041.external_replication_delay failed. > > timeout: failed to run command './test.sh': Permission denied > > After running "chmod 755" to fix the issue, still the test fails. From > src/test/regression/log/041.external_replication_delay: > > ./test.sh: line 45: syntax error near unexpected token `(' > ./test.sh: line 45: `echo =3D=3D=3D Test0: External command receives repl= ica > identifiers only (primary omitted) =3D=3D=3D' > > Best regards, > -- > Tatsuo Ishii > SRA OSS K.K. > English: http://www.sraoss.co.jp/index_en/ > Japanese:http://www.sraoss.co.jp > --=20 Nadav Shatz Tailor Brands | CTO --0000000000006653a206429ad487 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
thanks and sorry=C2=A0for the issues, please find attached= updated version.

On Sat, Nov 1, 2025 at 8:36=E2=80=AF= AM Tatsuo Ishii <ishii@postgresq= l.org> wrote:
>> Hi,
>>
>> I'm back at work - wdyt of this version?
>
> Thanks for the patch! I will look into it weekend.

Here are review comments.

1. git apply complains trailing whitespace and new blank line.

$ git apply ~/0001-external-replication-delay-implementation.patch
/home/t-ishii/0001-external-replication-delay-implementation.patch:225: tra= iling whitespace.

/home/t-ishii/0001-external-replication-delay-implementation.patch:232: tra= iling whitespace.

/home/t-ishii/0001-external-replication-delay-implementation.patch:246: tra= iling whitespace.

warning: 3 lines add whitespace errors.
$ git apply ~/0002-external-replication-delay-tests-and-docs.patch
/home/t-ishii/0002-external-replication-delay-tests-and-docs.patch:639: new= blank line at EOF.
+
warning: 1 line adds whitespace errors.

2. You can use psprintf() instead of palloc() + snprintf() to make the code= simpler.

+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (!bi || bi->backend_hostname[0] =3D=3D &#= 39;\0' || bi->backend_port <=3D 0)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0{
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Fallback if host= name or port is not set */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0out =3D palloc(32);=
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0snprintf(out, 32, &= quot;unknown_node_%d", node_id);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return out;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0}

3. Ditto as above.

+=C2=A0 =C2=A0 =C2=A0 =C2=A0/* Use hostname:port format */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0hlen =3D strlen(bi->backend_hostname);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0/* max port chars ~5, plus colon and NUL */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0out_len =3D hlen + 1 + 5 + 1;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0out =3D palloc(out_len);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0snprintf(out, out_len, "%s:%d", bi-&g= t;backend_hostname, bi->backend_port);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0return out;

4. There are a few compiler warnings.

streaming_replication/pool_worker_child.c: In function =E2=80=98do_worker_c= hild=E2=80=99:
streaming_replication/pool_worker_child.c:269:33: warning: this =E2=80=98el= se=E2=80=99 clause does not guard... [-Wmisleading-indentation]
=C2=A0 269 |=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0else
=C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0^~~~
streaming_replication/pool_worker_child.c:273:41: note: ...this statement, = but the latter is misleadingly indented as if it were guarded by the =E2=80= =98else=E2=80=99
=C2=A0 273 |=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0node_status =3D verify_backend_node_status(slots);
=C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0^~~~~~~~~~~

5. 041.external_replication_delay failed.

timeout: failed to run command './test.sh': Permission denied

After running "chmod 755" to fix the issue, still the test fails.= From
src/test/regression/log/041.external_replication_delay:

./test.sh: line 45: syntax error near unexpected token `('
./test.sh: line 45: `echo =3D=3D=3D Test0: External command receives replic= a identifiers only (primary omitted) =3D=3D=3D'

Best regards,
--
Tatsuo Ishii
SRA OSS K.K.
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--0000000000006653a206429ad487-- --0000000000006653a406429ad489 Content-Type: application/octet-stream; name="external-replication-delay-full.patch" Content-Disposition: attachment; filename="external-replication-delay-full.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhhmhfxt0 RnJvbSA5YWUzNmVjMDBlMTQwYTJjYzg5OGVkOTJiZTkyOGQ5ZGM3MzFmNzVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogU3VuLCAyIE5vdiAyMDI1IDEzOjA4OjMzICswMjAwClN1YmplY3Q6IFtQQVRDSF0gZmVh dDogZXh0ZXJuYWwgcmVwbGljYXRpb24gZGVsYXkgaW5qZWN0aW9uIHZpYSBleHRlcm5hbAogY29t bWFuZAoKSW1wbGVtZW50YXRpb246Ci0gQWRkIHJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQg Y29uZmlndXJhdGlvbiBzdHJpbmcgb3B0aW9uCi0gQ29tbWFuZCByZWNlaXZlcyByZXBsaWNhIG5v ZGUgaWRlbnRpZmllcnMgaW4gaG9zdDpwb3J0IGZvcm1hdAotIFByaW1hcnkgbm9kZSBvbWl0dGVk IGZyb20gY29tbWFuZCBhcmd1bWVudHMgYW5kIG91dHB1dAotIEhhbmRsZSAtMSBmb3IgZG93biBu b2RlcyAobG9nIHdpdGhvdXQgdHJpZ2dlcmluZyBmYWlsb3ZlcikKLSBDb21tYW5kIG91dHB1dHMg b25lIGRlbGF5IHZhbHVlIChtcykgcGVyIHJlcGxpY2EKLSBGYWxscyBiYWNrIHRvIGJ1aWx0aW4g cXVlcmllcyBpZiBjb21tYW5kIG5vdCBjb25maWd1cmVkCi0gVGltZW91dCBoYW5kbGluZyB3aXRo IHJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0Ci0gVXNlIHBzcHJpbnRmKCkgZm9yIGNs ZWFuZXIgY29kZQotIEZpeCBpbmRlbnRhdGlvbiBhbmQgcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3Bh Y2UKClRlc3RzOgotIFZlcmlmeSBjb21tYW5kIHJlY2VpdmVzIHJlcGxpY2FzIG9ubHkgKHByaW1h cnkgb21pdHRlZCkKLSBWZXJpZnkgaG9zdDpwb3J0IGlkZW50aWZpZXIgZm9ybWF0Ci0gVGVzdCAt MSBoYW5kbGluZyBmb3IgZG93biBub2RlcwotIFRlc3QgaW50ZWdlciBhbmQgZmxvYXQgZGVsYXkg dmFsdWVzCi0gVGVzdCB2YWxpZGF0aW9uLCB0aW1lb3V0cywgYW5kIGVycm9yIGhhbmRsaW5nCi0g VGVzdCB3cm9uZyBvdXRwdXQgY291bnRzIGFuZCBlZGdlIGNhc2VzCgpEb2N1bWVudGF0aW9uOgot IERvY3VtZW50IHJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgd2l0aCByZXBsaWNhLW9ubHkg c2VtYW50aWNzCi0gRG9jdW1lbnQgLTEgZm9yIGRvd24gbm9kZXMKLSBQcm92aWRlIGV4YW1wbGVz IHdpdGggY29ycmVjdCBvdXRwdXQgZm9ybWF0Ci0gVXBkYXRlIHJlcGxpY2F0aW9uX2RlbGF5X3Nv dXJjZV90aW1lb3V0IGRvY3MKLS0tCiBkb2Mvc3JjL3NnbWwvc3RyZWFtLWNoZWNrLnNnbWwgICAg ICAgICAgICAgICAgfCAgNjggKysrCiBzcmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5j ICAgICAgICAgICAgfCAgMjEgKwogc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaCAgICAgICAgICAg ICAgICAgICAgIHwgICAzICstCiBzcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBsZS1zdHJlYW0g ICAgICAgICAgfCAgMTQgKwogc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9j aGlsZC5jIHwgMzM2ICsrKysrKysrKysrKysrLQogLi4uLzA0MS5leHRlcm5hbF9yZXBsaWNhdGlv bl9kZWxheS9SRUFETUUgICAgIHwgIDU5ICsrKwogLi4uLzA0MS5leHRlcm5hbF9yZXBsaWNhdGlv bl9kZWxheS90ZXN0LnNoICAgIHwgNDAxICsrKysrKysrKysrKysrKysrKwogLi4uL3Rlc3RfcGFy c2luZy5zaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDU0ICsrKwogLi4uL3Rlc3RfdmFs aWRhdGlvbi5zaCAgICAgICAgICAgICAgICAgICAgICAgIHwgMzIzICsrKysrKysrKysrKysrCiA5 IGZpbGVzIGNoYW5nZWQsIDEyNzQgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0MS5leHRlcm5hbF9yZXBs aWNhdGlvbl9kZWxheS9SRUFETUUKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvdGVzdC9yZWdyZXNz aW9uL3Rlc3RzLzA0MS5leHRlcm5hbF9yZXBsaWNhdGlvbl9kZWxheS90ZXN0LnNoCiBjcmVhdGUg bW9kZSAxMDA3NTUgc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDEuZXh0ZXJuYWxfcmVwbGlj YXRpb25fZGVsYXkvdGVzdF9wYXJzaW5nLnNoCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL3Rlc3Qv cmVncmVzc2lvbi90ZXN0cy8wNDEuZXh0ZXJuYWxfcmVwbGljYXRpb25fZGVsYXkvdGVzdF92YWxp ZGF0aW9uLnNoCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N0cmVhbS1jaGVjay5zZ21sIGIv ZG9jL3NyYy9zZ21sL3N0cmVhbS1jaGVjay5zZ21sCmluZGV4IGQyY2EzY2E0OS4uZmM0Nzk5MDgw IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvc3RyZWFtLWNoZWNrLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL3N0cmVhbS1jaGVjay5zZ21sCkBAIC0zMDksNiArMzA5LDc0IEBAIEdSQU5UIHBnX21v bml0b3IgVE8gc3JfY2hlY2tfdXNlcjsKICAgICA8L2xpc3RpdGVtPgogICA8L3Zhcmxpc3RlbnRy eT4KIAorICA8dmFybGlzdGVudHJ5IGlkPSJndWMtcmVwbGljYXRpb24tZGVsYXktc291cmNlLWNt ZCIgeHJlZmxhYmVsPSJyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kIj4KKyAgIDx0ZXJtPjx2 YXJuYW1lPnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQ8L3Zhcm5hbWU+ICg8dHlwZT5zdHJp bmc8L3R5cGU+KQorICAgIDxpbmRleHRlcm0+CisgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnJlcGxp Y2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQ8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVy PC9wcmltYXJ5PgorICAgIDwvaW5kZXh0ZXJtPgorICAgPC90ZXJtPgorICAgPGxpc3RpdGVtPgor ICAgIDxwYXJhPgorICAgICBTcGVjaWZpZXMgYW4gZXh0ZXJuYWwgY29tbWFuZCB0byByZXRyaWV2 ZSByZXBsaWNhdGlvbiBkZWxheSBpbmZvcm1hdGlvbiBmb3IgcmVwbGljYSBub2Rlcy4KKyAgICAg V2hlbiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgYW5kIG5vdCBlbXB0eSwgPHByb2R1Y3RuYW1lPlBn cG9vbC1JSTwvcHJvZHVjdG5hbWU+IHVzZXMgdGhlCisgICAgIGV4dGVybmFsIGNvbW1hbmQgaW5z dGVhZCBvZiBidWlsdC1pbiBkYXRhYmFzZSBxdWVyaWVzIHRvIG9idGFpbiByZXBsaWNhdGlvbiBk ZWxheXMuCisgICAgIFRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIGFzIHRoZSA8cHJvZHVjdG5hbWU+ UGdwb29sLUlJPC9wcm9kdWN0bmFtZT4gcHJvY2VzcyB1c2VyLgorICAgIDwvcGFyYT4KKyAgICA8 cGFyYT4KKyAgICAgVGhlIGNvbW1hbmQgcmVjZWl2ZXMgcmVwbGljYSBub2RlIGlkZW50aWZpZXJz IGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzLCB3aXRoIHRoZSBwcmltYXJ5CisgICAgIG5vZGUgb21p dHRlZC4gRWFjaCBpZGVudGlmaWVyIGlzIGluIHRoZSBmb3JtYXQgPGxpdGVyYWw+Jmx0O2hvc3Ru YW1lJmd0OzombHQ7cG9ydCZndDs8L2xpdGVyYWw+LAorICAgICBmb3IgZXhhbXBsZSA8bGl0ZXJh bD5zZXJ2ZXIxOjU0MzIgc2VydmVyMjo1NDMyPC9saXRlcmFsPi4gVGhlIG9yZGVyIG1hdGNoZXMK KyAgICAgPHByb2R1Y3RuYW1lPlBncG9vbC1JSTwvcHJvZHVjdG5hbWU+J3MgYmFja2VuZCBvcmRl ciAoZXhjbHVkaW5nIHRoZSBwcmltYXJ5KSwgYWxsb3dpbmcgdGhlCisgICAgIHNjcmlwdCB0byBj b3JyZWxhdGUgZXh0ZXJuYWwgbWV0cmljcyAoc3VjaCBhcyBmcm9tIEFXUyBDbG91ZFdhdGNoIGZv ciBBdXJvcmEpIHRvIHRoZSBjb3JyZWN0IG5vZGVzLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4K KyAgICAgVGhlIGNvbW1hbmQgbXVzdCB3cml0ZSBhIHNpbmdsZSBsaW5lIHRvIHN0ZG91dCBjb250 YWluaW5nIG9uZSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBkZWxheSB2YWx1ZQorICAgICBwZXIgcmVw bGljYSwgaW4gbWlsbGlzZWNvbmRzLCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgYXJndW1lbnRz LiBUaGUgcHJpbWFyeSBub2RlJ3MgZGVsYXkgaXMKKyAgICAgaW1wbGljaXRseSB6ZXJvIGFuZCBz aG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuIERlbGF5IHZhbHVlcyBjYW4gYmUg aW50ZWdlcnMgb3IKKyAgICAgZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKyAgICA8L3BhcmE+Cisg ICAgPHBhcmE+CisgICAgIFNwZWNpYWwgdmFsdWU6IDxsaXRlcmFsPi0xPC9saXRlcmFsPiBpbmRp Y2F0ZXMgYSByZXBsaWNhIHRoYXQgaXMgZG93biBidXQgbm90IHlldCBkZXRlY3RlZAorICAgICBi eSA8cHJvZHVjdG5hbWU+UGdwb29sLUlJPC9wcm9kdWN0bmFtZT4ncyBoZWFsdGggY2hlY2tzLiA8 cHJvZHVjdG5hbWU+UGdwb29sLUlJPC9wcm9kdWN0bmFtZT4KKyAgICAgd2lsbCBsb2cgdGhpcyBj b25kaXRpb24gYnV0IHJlbHkgb24gaXRzIG93biBoZWFsdGgtY2hlY2sgbG9naWMgdG8gZGVjaWRl IHdoZXRoZXIgdG8gdHJpZ2dlcgorICAgICBmYWlsb3Zlcjsgbm8gZmFpbG92ZXIgaXMgdHJpZ2dl cmVkIHNvbGVseSBieSByZWNlaXZpbmcgPGxpdGVyYWw+LTE8L2xpdGVyYWw+LgorICAgIDwvcGFy YT4KKyAgICA8cGFyYT4KKyAgICAgRXhhbXBsZSBmb3IgYSAzLW5vZGUgY2x1c3RlciAoMSBwcmlt YXJ5ICsgMiByZXBsaWNhcyk6IGlmIHRoZSBjb21tYW5kIHJlY2VpdmVzIGFyZ3VtZW50cworICAg ICA8bGl0ZXJhbD5zZXJ2ZXIxOjU0MzIgc2VydmVyMjo1NDMyPC9saXRlcmFsPiwgaXQgc2hvdWxk IG91dHB1dCA8bGl0ZXJhbD4iMjUuNSAxMDAiPC9saXRlcmFsPgorICAgICB0byBpbmRpY2F0ZSB0 aGUgZmlyc3QgcmVwbGljYSBoYXMgMjUuNW1zIGRlbGF5IGFuZCB0aGUgc2Vjb25kIGhhcyAxMDBt cyBkZWxheS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIERlZmF1bHQgaXMgZW1wdHkg KHVzZSBidWlsdC1pbiByZXBsaWNhdGlvbiBkZWxheSBxdWVyaWVzKS4KKyAgICA8L3BhcmE+Cisg ICAgPHBhcmE+CisgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGJ5IHJlbG9hZGlu ZyB0aGUgPHByb2R1Y3RuYW1lPlBncG9vbC1JSTwvPiBjb25maWd1cmF0aW9ucy4KKyAgICA8L3Bh cmE+CisgICA8L2xpc3RpdGVtPgorICA8L3Zhcmxpc3RlbnRyeT4KKworICA8dmFybGlzdGVudHJ5 IGlkPSJndWMtcmVwbGljYXRpb24tZGVsYXktc291cmNlLXRpbWVvdXQiIHhyZWZsYWJlbD0icmVw bGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQiPgorICAgPHRlcm0+PHZhcm5hbWU+cmVwbGlj YXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBl PikKKyAgICA8aW5kZXh0ZXJtPgorICAgICA8cHJpbWFyeT48dmFybmFtZT5yZXBsaWNhdGlvbl9k ZWxheV9zb3VyY2VfdGltZW91dDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3By aW1hcnk+CisgICAgPC9pbmRleHRlcm0+CisgICA8L3Rlcm0+CisgICA8bGlzdGl0ZW0+CisgICAg PHBhcmE+CisgICAgIFNwZWNpZmllcyB0aGUgdGltZW91dCBpbiBzZWNvbmRzIGZvciB0aGUgZXh0 ZXJuYWwgY29tbWFuZCBzcGVjaWZpZWQgYnkKKyAgICAgPHhyZWYgbGlua2VuZD0iZ3VjLXJlcGxp Y2F0aW9uLWRlbGF5LXNvdXJjZS1jbWQiPi4KKyAgICAgSWYgdGhlIGNvbW1hbmQgZG9lcyBub3Qg ZmluaXNoIHdpdGhpbiB0aGUgdGltZW91dCwgPHByb2R1Y3RuYW1lPlBncG9vbC1JSTwvcHJvZHVj dG5hbWU+CisgICAgIGxvZ3MgYW4gZXJyb3IgYW5kIGNvbnRpbnVlcyB1c2luZyB0aGUgYnVpbHQt aW4gbWV0aG9kLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgRGVmYXVsdCBpcyAxMCBz ZWNvbmRzLiBWYWxpZCByYW5nZSBpcyAxLTM2MDAgc2Vjb25kcy4KKyAgICA8L3BhcmE+CisgICAg PHBhcmE+CisgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGJ5IHJlbG9hZGluZyB0 aGUgPHByb2R1Y3RuYW1lPlBncG9vbC1JSTwvPiBjb25maWd1cmF0aW9ucy4KKyAgICA8L3BhcmE+ CisgICA8L2xpc3RpdGVtPgorICA8L3Zhcmxpc3RlbnRyeT4KKwogICA8dmFybGlzdGVudHJ5IGlk PSJndWMtbG9nLXN0YW5kYnktZGVsYXkiIHhyZWZsYWJlbD0ibG9nX3N0YW5kYnlfZGVsYXkiPgog ICAgPHRlcm0+PHZhcm5hbWU+bG9nX3N0YW5kYnlfZGVsYXk8L3Zhcm5hbWU+ICg8dHlwZT5lbnVt PC90eXBlPikKICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2NvbmZpZy9wb29sX2Nv bmZpZ192YXJpYWJsZXMuYyBiL3NyYy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMKaW5k ZXggNjJhMDU5NzlhLi5hMzVkMjIwMGYgMTAwNjQ0Ci0tLSBhL3NyYy9jb25maWcvcG9vbF9jb25m aWdfdmFyaWFibGVzLmMKKysrIGIvc3JjL2NvbmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYwpA QCAtOTgwLDYgKzk4MCwxNiBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19zdHJpbmcgQ29uZmlndXJl TmFtZXNTdHJpbmdbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7 InJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQiLCBDRkdDWFRfUkVMT0FELCBTVFJFQU1JTkdf UkVQTElDQVRJT05fQ09ORklHLAorCQkJIkV4dGVybmFsIGNvbW1hbmQgdG8gcmV0cmlldmUgcmVw bGljYXRpb24gZGVsYXkgaW5mb3JtYXRpb24uIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9TVFJJTkcs IGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJj ZV9jbWQsCisJCSIiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwogCXsKIAkJeyJm YWlsYmFja19jb21tYW5kIiwgQ0ZHQ1hUX1JFTE9BRCwgRkFJTE9WRVJfQ09ORklHLAogCQkJIkNv bW1hbmQgdG8gZXhlY3V0ZSB3aGVuIGJhY2tlbmQgbm9kZSBpcyBhdHRhY2hlZC4iLApAQCAtMjMz NCw2ICsyMzQ0LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1lc0lu dFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsicmVwbGljYXRpb25fZGVs YXlfc291cmNlX3RpbWVvdXQiLCBDRkdDWFRfUkVMT0FELCBTVFJFQU1JTkdfUkVQTElDQVRJT05f Q09ORklHLAorCQkJIlRpbWVvdXQgZm9yIGV4dGVybmFsIHJlcGxpY2F0aW9uIGRlbGF5IGNvbW1h bmQgZXhlY3V0aW9uIGluIHNlY29uZHMuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNl LCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1l b3V0LAorCQkxMCwKKwkJMSwgMzYwMCwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAkvKiBF bmQtb2YtbGlzdCBtYXJrZXIgKi8KIAlFTVBUWV9DT05GSUdfSU5UCiB9OwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaCBiL3NyYy9pbmNsdWRlL3Bvb2xfY29uZmlnLmgKaW5k ZXggOTE2MGEzMWM4Li41YmM2NDY4MDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvb2xfY29u ZmlnLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaApAQCAtODYsNyArODYsNiBAQCB0 eXBlZGVmIGVudW0gTG9nU3RhbmRieURlbGF5TW9kZXMKIAlMU0RfTk9ORQogfSBMb2dTdGFuZGJ5 RGVsYXlNb2RlczsKIAotCiB0eXBlZGVmIGVudW0gTWVtQ2FjaGVNZXRob2QKIHsKIAlTSE1FTV9D QUNIRSA9IDEsCkBAIC0zNjMsNiArMzYyLDggQEAgdHlwZWRlZiBzdHJ1Y3QKIAljaGFyCSAgICpz cl9jaGVja19wYXNzd29yZDsJLyogcGFzc3dvcmQgZm9yIHNyX2NoZWNrX3VzZXIgKi8KIAljaGFy CSAgICpzcl9jaGVja19kYXRhYmFzZTsJLyogUG9zdGdyZVNRTCBkYXRhYmFzZSBuYW1lIGZvciBz dHJlYW1pbmcKIAkJCQkJCQkJCSAqIHJlcGxpY2F0aW9uIGNoZWNrICovCisJY2hhcgkgICAqcmVw bGljYXRpb25fZGVsYXlfc291cmNlX2NtZDsJLyogZXh0ZXJuYWwgY29tbWFuZCBmb3IgcmVwbGlj YXRpb24gZGVsYXkgKi8KKwlpbnQJCQlyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGltZW91dDsJ LyogdGltZW91dCBmb3IgZXh0ZXJuYWwgY29tbWFuZCBpbiBzZWNvbmRzICovCiAJY2hhcgkgICAq ZmFpbG92ZXJfY29tbWFuZDsJLyogZXhlY3V0ZSBjb21tYW5kIHdoZW4gZmFpbG92ZXIgaGFwcGVu cyAqLwogCWNoYXIJICAgKmZvbGxvd19wcmltYXJ5X2NvbW1hbmQ7IC8qIGV4ZWN1dGUgY29tbWFu ZCB3aGVuIGZhaWxvdmVyIGlzCiAJCQkJCQkJCQkJICogZW5kZWQgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbSBiL3NyYy9zYW1wbGUvcGdwb29sLmNv bmYuc2FtcGxlLXN0cmVhbQppbmRleCBiYTZiOTIzYjAuLjM0NDYyZmQ1OSAxMDA2NDQKLS0tIGEv c3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCisrKyBiL3NyYy9zYW1wbGUvcGdw b29sLmNvbmYuc2FtcGxlLXN0cmVhbQpAQCAtNTE5LDYgKzUxOSwyMCBAQCBiYWNrZW5kX2NsdXN0 ZXJpbmdfbW9kZSA9IHN0cmVhbWluZ19yZXBsaWNhdGlvbgogCiAjc3JfY2hlY2tfZGF0YWJhc2Ug PSAncG9zdGdyZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRGF0YWJh c2UgbmFtZSBmb3Igc3RyZWFtaW5nIHJlcGxpY2F0aW9uIGNoZWNrCisKKyNyZXBsaWNhdGlvbl9k ZWxheV9zb3VyY2VfY21kID0gJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBFeHRlcm5hbCBjb21tYW5kIHRvIHJldHJpZXZlIHJlcGxpY2F0aW9uIGRlbGF5IGluZm9ybWF0 aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgc2V0LCBwZ3Bvb2wg dXNlcyB0aGlzIGNvbW1hbmQgaW5zdGVhZCBvZiBidWlsdC1pbiBxdWVyaWVzCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgQ29tbWFuZCByZWNlaXZlcyByZXBsaWNhIG5vZGUg aWRlbnRpZmllcnMgKGhvc3Q6cG9ydCkgYXMgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgUHJpbWFyeSBub2RlIGlzIG9taXR0ZWQgZnJvbSBhcmd1bWVudHMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDb21tYW5kIHNob3VsZCBvdXRw dXQgb25lIGRlbGF5IHZhbHVlIChpbiBtcykgcGVyIHJlcGxpY2EKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIyBVc2UgLTEgdG8gaW5kaWNhdGUgYSByZXBsaWNhIHRoYXQgaXMg ZG93biBidXQgbm90IHlldCBkZXRlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIEZvcm1hdDogIjI1IDEwMCIgZm9yIDIgcmVwbGljYXMgKGUuZy4sIDMtbm9kZSBjbHVz dGVyIHdpdGggMSBwcmltYXJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IENvbW1hbmQgcnVucyBhcyB0aGUgcGdwb29sIHByb2Nlc3MgdXNlcgorI3JlcGxpY2F0aW9uX2Rl bGF5X3NvdXJjZV90aW1lb3V0ID0gMTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBUaW1lb3V0IGZvciBleHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbiBpbiBzZWNvbmRzCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDEtMzYwMCBzZWNvbmRz IChkZWZhdWx0OiAxMCkKKwogI2RlbGF5X3RocmVzaG9sZCA9IDAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIyBUaHJlc2hvbGQgYmVmb3JlIG5vdCBkaXNwYXRjaGluZyBxdWVy eSB0byBzdGFuZGJ5IG5vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBV bml0IGlzIGluIGJ5dGVzCmRpZmYgLS1naXQgYS9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bv b2xfd29ya2VyX2NoaWxkLmMgYi9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2Vy X2NoaWxkLmMKaW5kZXggNWJmMTljMzdkLi44MWRjODI5MjIgMTAwNjQ0Ci0tLSBhL3NyYy9zdHJl YW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYworKysgYi9zcmMvc3RyZWFtaW5n X3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMKQEAgLTc2LDYgKzc2LDggQEAgc3RhdGlj IHZvbGF0aWxlIHNpZ19hdG9taWNfdCByZXN0YXJ0X3JlcXVlc3QgPSAwOwogc3RhdGljIHZvaWQg ZXN0YWJsaXNoX3BlcnNpc3RlbnRfY29ubmVjdGlvbih2b2lkKTsKIHN0YXRpYyB2b2lkIGRpc2Nh cmRfcGVyc2lzdGVudF9jb25uZWN0aW9uKHZvaWQpOwogc3RhdGljIHZvaWQgY2hlY2tfcmVwbGlj YXRpb25fdGltZV9sYWcodm9pZCk7CitzdGF0aWMgdm9pZCBjaGVja19yZXBsaWNhdGlvbl90aW1l X2xhZ193aXRoX2NtZCh2b2lkKTsKK3N0YXRpYyBjaGFyICpidWlsZF9pbnN0YW5jZV9pZGVudGlm aWVyX2Zvcl9ub2RlKGludCBub2RlX2lkKTsKIHN0YXRpYyB2b2lkIENoZWNrUmVwbGljYXRpb25U aW1lTGFnRXJyb3JDYih2b2lkICphcmcpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg dGV4dF90b19sc24oY2hhciAqdGV4dCk7CiBzdGF0aWMgUkVUU0lHVFlQRSBteV9zaWduYWxfaGFu ZGxlcihpbnQgc2lnKTsKQEAgLTI1OSwxMSArMjYxLDE2IEBAIGRvX3dvcmtlcl9jaGlsZCh2b2lk ICpwYXJhbXMpCiAJCQkJCVBPT0xfTk9ERV9TVEFUVVMgKm5vZGVfc3RhdHVzOwogCQkJCQlpbnQJ CQlpOwogCi0JCQkJCS8qIERvIHJlcGxpY2F0aW9uIHRpbWUgbGFnIGNoZWNraW5nICovCi0JCQkJ CWNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnKCk7CisJCQkvKiBEbyByZXBsaWNhdGlvbiB0aW1l IGxhZyBjaGVja2luZyAqLworCQkJLyogVXNlIGV4dGVybmFsIGNvbW1hbmQgaWYgcmVwbGljYXRp b25fZGVsYXlfc291cmNlX2NtZCBpcyBjb25maWd1cmVkICovCisJCQlpZiAocG9vbF9jb25maWct PnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgJiYKKwkJCQlzdHJsZW4ocG9vbF9jb25maWct PnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQpID4gMCkKKwkJCQljaGVja19yZXBsaWNhdGlv bl90aW1lX2xhZ193aXRoX2NtZCgpOworCQkJZWxzZQorCQkJCWNoZWNrX3JlcGxpY2F0aW9uX3Rp bWVfbGFnKCk7CiAKLQkJCQkJLyogQ2hlY2sgbm9kZSBzdGF0dXMgKi8KLQkJCQkJbm9kZV9zdGF0 dXMgPSB2ZXJpZnlfYmFja2VuZF9ub2RlX3N0YXR1cyhzbG90cyk7CisJCQkvKiBDaGVjayBub2Rl IHN0YXR1cyAqLworCQkJbm9kZV9zdGF0dXMgPSB2ZXJpZnlfYmFja2VuZF9ub2RlX3N0YXR1cyhz bG90cyk7CiAKIAogCQkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0JBQ0tFTkRTOyBpKyspCkBAIC02 NTksNiArNjY2LDMyNyBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xhZyh2b2lkKQogCWVycm9y X2NvbnRleHRfc3RhY2sgPSBjYWxsYmFjay5wcmV2aW91czsKIH0KIAorI2RlZmluZSBNQVhfQ01E X09VVFBVVCA0MDk2CisjZGVmaW5lIE1BWF9SRUFTT05BQkxFX0RFTEFZX01TIDM2MDAwMDAuMCAg LyogMSBob3VyIGluIG1pbGxpc2Vjb25kcyAqLworCisvKiBHbG9iYWwgdmFyaWFibGUgdG8gdHJh Y2sgY29tbWFuZCB0aW1lb3V0ICovCitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IGNvbW1h bmRfdGltZW91dF9vY2N1cnJlZCA9IDA7CisKKy8qCisgKiBTaWduYWwgaGFuZGxlciBmb3IgY29t bWFuZCB0aW1lb3UKKyAqLworc3RhdGljIHZvaWQKK2NvbW1hbmRfdGltZW91dF9oYW5kbGVyKGlu dCBzaWcpCit7CisJY29tbWFuZF90aW1lb3V0X29jY3VycmVkID0gMTsKK30KKworCisKKy8qCisg KiBDaGVjayByZXBsaWNhdGlvbiB0aW1lIGxhZyB1c2luZyBleHRlcm5hbCBjb21tYW5kCisgKgor ICogVGhlIGV4dGVybmFsIGNvbW1hbmQgcmVjZWl2ZXMgb25seSByZXBsaWNhIChzdGFuZGJ5KSBu b2RlIGlkZW50aWZpZXJzIGFzIGFyZ3VtZW50cywKKyAqIG9taXR0aW5nIHRoZSBwcmltYXJ5IG5v ZGUuIEl0IHJldHVybnMgZGVsYXkgdmFsdWVzIGluIG1pbGxpc2Vjb25kcyBmb3IgZWFjaCByZXBs aWNhLgorICogQSB2YWx1ZSBvZiAtMSBpbmRpY2F0ZXMgYSBub2RlIHRoYXQgaXMgZG93biBidXQg bm90IHlldCBkZXRlY3RlZCBieSBwZ3Bvb2wncyBoZWFsdGggY2hlY2tzLgorICovCitzdGF0aWMg dm9pZAorY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWdfd2l0aF9jbWQodm9pZCkKK3sKKwlGSUxF CQkgICAqZnA7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJY2hhcgkJICAgKmxpbmU7CisJY2hhcgkJ ICAgKnRva2VuOworCWNoYXIJCSAgICpzYXZlcHRyOworCWludAkJCQlyZXBsaWNhX2lkeDsKKwlp bnQJCQkJbnVtX3JlcGxpY2FzOworCWRvdWJsZQkJCWRlbGF5X21zOworCXVpbnQ2NAkJCWRlbGF5 OworCWludAkJCQl0b2tlbl9jb3VudCA9IDA7CisJQmFja2VuZEluZm8JICAgKmJraW5mbzsKKwlF cnJvckNvbnRleHRDYWxsYmFjayBjYWxsYmFjazsKKworCWlmIChOVU1fQkFDS0VORFMgPD0gMSkK Kwl7CisJCS8qIElmIHRoZXJlJ3Mgb25seSBvbmUgbm9kZSwgdGhlcmUncyBubyBwb2ludCB0byBk byBjaGVja2luZyAqLworCQlyZXR1cm47CisJfQorCisJaWYgKFJFQUxfUFJJTUFSWV9OT0RFX0lE IDwgMCkKKwl7CisJCS8qIE5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUncyBubyBwcmltYXJ5ICov CisJCXJldHVybjsKKwl9CisKKwlpZiAoIVZBTElEX0JBQ0tFTkQoUkVBTF9QUklNQVJZX05PREVf SUQpKQorCXsKKwkJLyogTm8gbmVlZCB0byBjaGVjayByZXBsaWNhdGlvbiBkZWxheSBpZiBwcmlt YXJ5IGlzIGRvd24gKi8KKwkJcmV0dXJuOworCX0KKworCWlmICghcG9vbF9jb25maWctPnJlcGxp Y2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgfHwKKwkJc3RybGVuKHBvb2xfY29uZmlnLT5yZXBsaWNh dGlvbl9kZWxheV9zb3VyY2VfY21kKSA9PSAwKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJ CShlcnJtc2coInJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgaXMgbm90IGNvbmZpZ3VyZWQi KSwKKwkJCQkgZXJyaGludCgiU2V0IHJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgdG8gdXNl IGV4dGVybmFsIGNvbW1hbmQgbW9kZSIpKSk7CisJCS8qIEZhbGwgYmFjayB0byBidWlsdGluIG1l dGhvZCAqLworCQljaGVja19yZXBsaWNhdGlvbl90aW1lX2xhZygpOworCQlyZXR1cm47CisJfQor CisJLyogQWxsb2NhdGUgYnVmZmVyIGZvciBjb21tYW5kIG91dHB1dCAqLworCWxpbmUgPSBwYWxs b2MoTUFYX0NNRF9PVVRQVVQpOworCWZwID0gTlVMTDsKKworCS8qCisJICogUmVnaXN0ZXIgYSBl cnJvciBjb250ZXh0IGNhbGxiYWNrIHRvIHRocm93IHByb3BlciBjb250ZXh0IG1lc3NhZ2UKKwkg Ki8KKwljYWxsYmFjay5jYWxsYmFjayA9IENoZWNrUmVwbGljYXRpb25UaW1lTGFnRXJyb3JDYjsK KwljYWxsYmFjay5hcmcgPSBOVUxMOworCWNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4 dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmNhbGxiYWNrOworCisJLyogRXhlY3V0 ZSBjb21tYW5kIGFzIGN1cnJlbnQgcHJvY2VzcyB1c2VyICovCisJUEdfVFJZKCk7CisJeworCQlj b25zdCBjaGFyICpiYXNlX2NvbW1hbmQgPSBwb29sX2NvbmZpZy0+cmVwbGljYXRpb25fZGVsYXlf c291cmNlX2NtZDsKKwkJc2l6ZV90IHRvdGFsX2xlbiA9IHN0cmxlbihiYXNlX2NvbW1hbmQpICsg MTsgLyogKzEgZm9yIE5VTCAqLworCisJCS8qIEJ1aWxkIGNvbW1hbmQgd2l0aCByZXBsaWNhLW9u bHkgYXJndW1lbnRzIChvbWl0IHByaW1hcnkpICovCisJCS8qIENhbGN1bGF0ZSB0b3RhbCBjb21t YW5kIGxlbmd0aCBpbmNsdWRpbmcgc3BhY2Utc2VwYXJhdGVkIHJlcGxpY2EgaWRlbnRpZmllcnMg Ki8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fQkFDS0VORFM7IGkrKykKKwkJeworCQkJaWYg KGkgPT0gUkVBTF9QUklNQVJZX05PREVfSUQpCisJCQkJY29udGludWU7IC8qIFNraXAgcHJpbWFy eSBub2RlICovCisKKwkJCWNoYXIgKmlkZW50ID0gYnVpbGRfaW5zdGFuY2VfaWRlbnRpZmllcl9m b3Jfbm9kZShpKTsKKwkJCXRvdGFsX2xlbiArPSAxIC8qIHNwYWNlICovICsgc3RybGVuKGlkZW50 KTsKKwkJCXBmcmVlKGlkZW50KTsKKwkJfQorCisJCWNvbW1hbmQgPSBwYWxsb2ModG90YWxfbGVu KTsKKwkJc3RybGNweShjb21tYW5kLCBiYXNlX2NvbW1hbmQsIHRvdGFsX2xlbik7CisKKwkJLyog QXBwZW5kIHJlcGxpY2EgaWRlbnRpZmllcnMgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1f QkFDS0VORFM7IGkrKykKKwkJeworCQkJaWYgKGkgPT0gUkVBTF9QUklNQVJZX05PREVfSUQpCisJ CQkJY29udGludWU7IC8qIFNraXAgcHJpbWFyeSBub2RlICovCisKKwkJCWNoYXIgKmlkZW50ID0g YnVpbGRfaW5zdGFuY2VfaWRlbnRpZmllcl9mb3Jfbm9kZShpKTsKKwkJCXN0cmxjYXQoY29tbWFu ZCwgIiAiLCB0b3RhbF9sZW4pOworCQkJc3RybGNhdChjb21tYW5kLCBpZGVudCwgdG90YWxfbGVu KTsKKwkJCXBmcmVlKGlkZW50KTsKKwkJfQorCisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJt c2coImV4ZWN1dGluZyByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kOiAlcyIsIGNvbW1hbmQpKSk7 CisKKwkJLyogU2V0IHVwIHRpbWVvdXQgZm9yIGNvbW1hbmQgZXhlY3V0aW9uICovCisJCWNvbW1h bmRfdGltZW91dF9vY2N1cnJlZCA9IDA7CisJCXNpZ25hbChTSUdBTFJNLCBjb21tYW5kX3RpbWVv dXRfaGFuZGxlcik7CisJCWFsYXJtKHBvb2xfY29uZmlnLT5yZXBsaWNhdGlvbl9kZWxheV9zb3Vy Y2VfdGltZW91dCk7CisKKwkJZnAgPSBwb3Blbihjb21tYW5kLCAiciIpOworCQlpZiAoZnAgPT0g TlVMTCkKKwkJeworCQkJYWxhcm0oMCk7IC8qIENhbmNlbCBhbGFybSAqLworCQkJc2lnbmFsKFNJ R0FMUk0sIFNJR19ERkwpOworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycm1zZygiZmFpbGVk IHRvIGV4ZWN1dGUgcmVwbGljYXRpb24gZGVsYXkgY29tbWFuZDogJXMiLCBjb21tYW5kKSwKKwkJ CQkJIGVycmRldGFpbCgicG9wZW4gZmFpbGVkOiAlbSIpKSk7CisJCX0KKworCQlpZiAoZmdldHMo bGluZSwgTUFYX0NNRF9PVVRQVVQsIGZwKSA9PSBOVUxMKQorCQl7CisJCQlpbnQgcGNsb3NlX3Jl c3VsdCA9IHBjbG9zZShmcCk7CisJCQlmcCA9IE5VTEw7CisJCQlhbGFybSgwKTsgLyogQ2FuY2Vs IGFsYXJtICovCisJCQlzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7CisKKwkJCWlmIChjb21tYW5k X3RpbWVvdXRfb2NjdXJyZWQpCisJCQl7CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJt c2coInJlcGxpY2F0aW9uIGRlbGF5IGNvbW1hbmQgdGltZWQgb3V0IGFmdGVyICVkIHNlY29uZHM6 ICVzIiwKKwkJCQkJCQkJcG9vbF9jb25maWctPnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1l b3V0LCBjb21tYW5kKSwKKwkJCQkJCSBlcnJoaW50KCJDb25zaWRlciBpbmNyZWFzaW5nIHJlcGxp Y2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0IG9yIG9wdGltaXppbmcgdGhlIGNvbW1hbmQiKSkp OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJybXNn KCJmYWlsZWQgdG8gcmVhZCBvdXRwdXQgZnJvbSByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kOiAl cyIsIGNvbW1hbmQpLAorCQkJCQkJIGVycmRldGFpbCgiY29tbWFuZCBleGl0IHN0YXR1czogJWQi LCBwY2xvc2VfcmVzdWx0KSkpOworCQkJfQorCQl9CisKKwkJYWxhcm0oMCk7IC8qIENhbmNlbCBh bGFybSAqLworCQlzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7CisKKwkJLyogQ2hlY2sgaWYgb3V0 cHV0IHdhcyB0cnVuY2F0ZWQgKi8KKwkJaWYgKHN0cmxlbihsaW5lKSA9PSBNQVhfQ01EX09VVFBV VCAtIDEgJiYgbGluZVtNQVhfQ01EX09VVFBVVCAtIDJdICE9ICdcbicpCisJCXsKKwkJCWVyZXBv cnQoV0FSTklORywKKwkJCQkJKGVycm1zZygicmVwbGljYXRpb24gZGVsYXkgY29tbWFuZCBvdXRw dXQgbWF5IGhhdmUgYmVlbiB0cnVuY2F0ZWQiKSkpOworCQl9CisKKwkJcGNsb3NlKGZwKTsKKwkJ ZnAgPSBOVUxMOworCQlwZnJlZShjb21tYW5kKTsKKwkJY29tbWFuZCA9IE5VTEw7CisKKwkJLyog U2V0IHByaW1hcnkgbm9kZSBkZWxheSB0byAwICovCisJCWJraW5mbyA9IHBvb2xfZ2V0X25vZGVf aW5mbyhSRUFMX1BSSU1BUllfTk9ERV9JRCk7CisJCWJraW5mby0+c3RhbmRieV9kZWxheSA9IDA7 CisJCWJraW5mby0+c3RhbmRieV9kZWxheV9ieV90aW1lID0gdHJ1ZTsKKworCQkvKiBDb3VudCBl eHBlY3RlZCByZXBsaWNhcyAqLworCQludW1fcmVwbGljYXMgPSBOVU1fQkFDS0VORFMgLSAxOyAv KiBUb3RhbCBub2RlcyBtaW51cyBwcmltYXJ5ICovCisKKwkJLyogQ291bnQgdG9rZW5zIGluIG91 dHB1dCBmb3IgdmFsaWRhdGlvbiAqLworCQljaGFyICpsaW5lX2NvcHkgPSBwc3RyZHVwKGxpbmUp OworCQljaGFyICp0ZW1wX3Rva2VuID0gc3RydG9rKGxpbmVfY29weSwgIiBcdFxuIik7CisJCXdo aWxlICh0ZW1wX3Rva2VuICE9IE5VTEwpCisJCXsKKwkJCXRva2VuX2NvdW50Kys7CisJCQl0ZW1w X3Rva2VuID0gc3RydG9rKE5VTEwsICIgXHRcbiIpOworCQl9CisJCXBmcmVlKGxpbmVfY29weSk7 CisKKwkJaWYgKHRva2VuX2NvdW50ICE9IG51bV9yZXBsaWNhcykKKwkJeworCQkJZXJlcG9ydChX QVJOSU5HLAorCQkJCQkoZXJybXNnKCJyZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIHJldHVybmVk ICVkIHZhbHVlcywgZXhwZWN0ZWQgJWQgKG9uZSBwZXIgcmVwbGljYSwgZXhjbHVkaW5nIHByaW1h cnkpIiwKKwkJCQkJCQl0b2tlbl9jb3VudCwgbnVtX3JlcGxpY2FzKSwKKwkJCQkJIGVycmhpbnQo IkNvbW1hbmQgc2hvdWxkIG91dHB1dCBvbmUgZGVsYXkgdmFsdWUgcGVyIHJlcGxpY2Egbm9kZSIp KSk7CisJCX0KKworCQkvKiBQYXJzZSB0aGUgb3V0cHV0IC0gb25lIGRlbGF5IHZhbHVlIHBlciBy ZXBsaWNhIGluIG9yZGVyICovCisJCXRva2VuID0gc3RydG9rX3IobGluZSwgIiBcdFxuIiwgJnNh dmVwdHIpOworCQlyZXBsaWNhX2lkeCA9IDA7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1f QkFDS0VORFMgJiYgdG9rZW4gIT0gTlVMTDsgaSsrKQorCQl7CisJCQlpZiAoaSA9PSBSRUFMX1BS SU1BUllfTk9ERV9JRCkKKwkJCQljb250aW51ZTsgLyogU2tpcCBwcmltYXJ5IC0gaXQncyBub3Qg aW4gdGhlIG91dHB1dCAqLworCisJCQlpZiAoIVZBTElEX0JBQ0tFTkQoaSkpCisJCQl7CisJCQkJ LyogU2tpcCBpbnZhbGlkIGJhY2tlbmQgYnV0IGNvbnN1bWUgdG9rZW4gKi8KKwkJCQl0b2tlbiA9 IHN0cnRva19yKE5VTEwsICIgXHRcbiIsICZzYXZlcHRyKTsKKwkJCQlyZXBsaWNhX2lkeCsrOwor CQkJCWNvbnRpbnVlOworCQkJfQorCisJCQljaGFyICplbmRwdHI7CisJCQlkZWxheV9tcyA9IHN0 cnRvZCh0b2tlbiwgJmVuZHB0cik7CisKKwkJCS8qIFZhbGlkYXRlIHRoZSBjb252ZXJzaW9uICov CisJCQlpZiAoKmVuZHB0ciAhPSAnXDAnKQorCQkJeworCQkJCWVyZXBvcnQoV0FSTklORywKKwkJ CQkJCShlcnJtc2coImludmFsaWQgZGVsYXkgdmFsdWUgJyVzJyBmb3Igbm9kZSAlZCwgdHJlYXRp bmcgYXMgMCIsCisJCQkJCQkJCXRva2VuLCBpKSkpOworCQkJCWRlbGF5X21zID0gMDsKKwkJCX0K KworCQkJYmtpbmZvID0gcG9vbF9nZXRfbm9kZV9pbmZvKGkpOworCisJCQkvKiBIYW5kbGUgLTEg Zm9yIGRvd24gbm9kZXMgKi8KKwkJCWlmIChkZWxheV9tcyA9PSAtMS4wKQorCQkJeworCQkJCWVy ZXBvcnQoTE9HLAorCQkJCQkJKGVycm1zZygibm9kZSAlZCByZXBvcnRlZCBhcyBkb3duIGJ5IGV4 dGVybmFsIGNvbW1hbmQgKGRlbGF5IC0xKSwgcmVseWluZyBvbiBoZWFsdGggY2hlY2sgZm9yIGZh aWxvdmVyIGRlY2lzaW9uIiwKKwkJCQkJCQkJaSkpKTsKKwkJCQkvKiBLZWVwIHByZXZpb3VzIGRl bGF5IHZhbHVlLCBkb24ndCB0cmlnZ2VyIGZhaWxvdmVyICovCisJCQkJdG9rZW4gPSBzdHJ0b2tf cihOVUxMLCAiIFx0XG4iLCAmc2F2ZXB0cik7CisJCQkJcmVwbGljYV9pZHgrKzsKKwkJCQljb250 aW51ZTsKKwkJCX0KKworCQkJLyogVmFsaWRhdGUgZGVsYXkgdmFsdWUgcmFuZ2UgKi8KKwkJCWlm IChkZWxheV9tcyA8IDApCisJCQl7CisJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJKGVycm1z ZygibmVnYXRpdmUgZGVsYXkgdmFsdWUgJS4zZiBmb3Igbm9kZSAlZCAob3RoZXIgdGhhbiAtMSks IHRyZWF0aW5nIGFzIDAiLAorCQkJCQkJCQlkZWxheV9tcywgaSkpKTsKKwkJCQlkZWxheV9tcyA9 IDA7CisJCQl9CisJCQllbHNlIGlmIChkZWxheV9tcyA+IE1BWF9SRUFTT05BQkxFX0RFTEFZX01T KQorCQkJeworCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJtc2coImV4dHJlbWVseSBs YXJnZSBkZWxheSB2YWx1ZSAlLjNmIGZvciBub2RlICVkIiwKKwkJCQkJCQkJZGVsYXlfbXMsIGkp KSk7CisJCQl9CisKKwkJCS8qIENvbnZlcnQgZGVsYXkgZnJvbSBtaWxsaXNlY29uZHMgdG8gbWlj cm9zZWNvbmRzIGZvciBpbnRlcm5hbCBzdG9yYWdlICovCisJCQlkZWxheSA9ICh1aW50NjQpKGRl bGF5X21zICogMTAwMCk7CisJCQlia2luZm8tPnN0YW5kYnlfZGVsYXkgPSBkZWxheTsKKwkJCWJr aW5mby0+c3RhbmRieV9kZWxheV9ieV90aW1lID0gdHJ1ZTsKKworCQkJLyogTG9nIGRlbGF5IGlm IG5lY2Vzc2FyeSAqLworCQkJdWludDY0IGRlbGF5X3RocmVzaG9sZF9ieV90aW1lID0gcG9vbF9j b25maWctPmRlbGF5X3RocmVzaG9sZF9ieV90aW1lICogMTAwMDsgLyogdGhyZXNob2xkIGlzIGlu IG1pbGxpc2Vjb25kcywgY29udmVydCB0byBtaWNyb3NlY29uZHMgKi8KKworCQkJaWYgKChwb29s X2NvbmZpZy0+bG9nX3N0YW5kYnlfZGVsYXkgPT0gTFNEX0FMV0FZUyAmJiBkZWxheV9tcyA+IDAp IHx8CisJCQkJKHBvb2xfY29uZmlnLT5sb2dfc3RhbmRieV9kZWxheSA9PSBMU0RfT1ZFUl9USFJF U0hPTEQgJiYKKwkJCQkgYmtpbmZvLT5zdGFuZGJ5X2RlbGF5ID4gZGVsYXlfdGhyZXNob2xkX2J5 X3RpbWUpKQorCQkJeworCQkJCWVyZXBvcnQoTE9HLAorCQkJCQkJKGVycm1zZygiUmVwbGljYXRp b24gb2Ygbm9kZTogJWQgaXMgYmVoaW5kICUuM2Ygc2Vjb25kKHMpIGZyb20gdGhlIHByaW1hcnkg c2VydmVyIChub2RlOiAlZCkgW2V4dGVybmFsIGNvbW1hbmRdIiwKKwkJCQkJCQkJaSwgZGVsYXlf bXMgLyAxMDAwLCBSRUFMX1BSSU1BUllfTk9ERV9JRCkpKTsKKwkJCX0KKworCQkJdG9rZW4gPSBz dHJ0b2tfcihOVUxMLCAiIFx0XG4iLCAmc2F2ZXB0cik7CisJCQlyZXBsaWNhX2lkeCsrOworCQl9 CisKKwl9CisJUEdfQ0FUQ0goKTsKKwl7CisJCS8qIENsZWFudXAgaW4gY2FzZSBvZiBlcnJvciAq LworCQlhbGFybSgwKTsgLyogQ2FuY2VsIGFueSBwZW5kaW5nIGFsYXJtICovCisJCXNpZ25hbChT SUdBTFJNLCBTSUdfREZMKTsKKwkJaWYgKGZwKQorCQl7CisJCQlwY2xvc2UoZnApOworCQkJZnAg PSBOVUxMOworCQl9CisJCWlmIChsaW5lKQorCQkJcGZyZWUobGluZSk7CisJCWlmIChjb21tYW5k KQorCQkJcGZyZWUoY29tbWFuZCk7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBjYWxsYmFjay5w cmV2aW91czsKKwkJUEdfUkVfVEhST1coKTsKKwl9CisJUEdfRU5EX1RSWSgpOworCisJLyogTm9y bWFsIGNsZWFudXAgKi8KKwlpZiAobGluZSkKKwkJcGZyZWUobGluZSk7CisKKwllcnJvcl9jb250 ZXh0X3N0YWNrID0gY2FsbGJhY2sucHJldmlvdXM7Cit9CisKKy8qCisgKiBidWlsZF9pbnN0YW5j ZV9pZGVudGlmaWVyX2Zvcl9ub2RlCisgKiAgQnVpbGQgYW4gaWRlbnRpZmllciBzdHJpbmcgZm9y IGEgYmFja2VuZCBub2RlIGZvciBwYXNzaW5nIHRvIGV4dGVybmFsIGNvbW1hbmRzLgorICogIEZv cm1hdDogIjxob3N0bmFtZT46PHBvcnQ+IgorICovCitzdGF0aWMgY2hhciAqCitidWlsZF9pbnN0 YW5jZV9pZGVudGlmaWVyX2Zvcl9ub2RlKGludCBub2RlX2lkKQoreworCUJhY2tlbmRJbmZvICpi aSA9IHBvb2xfZ2V0X25vZGVfaW5mbyhub2RlX2lkKTsKKworCWlmICghYmkgfHwgYmktPmJhY2tl bmRfaG9zdG5hbWVbMF0gPT0gJ1wwJyB8fCBiaS0+YmFja2VuZF9wb3J0IDw9IDApCisJeworCQkv KiBGYWxsYmFjayBpZiBob3N0bmFtZSBvciBwb3J0IGlzIG5vdCBzZXQgKi8KKwkJcmV0dXJuIHBz cHJpbnRmKCJ1bmtub3duX25vZGVfJWQiLCBub2RlX2lkKTsKKwl9CisKKwkvKiBVc2UgaG9zdG5h bWU6cG9ydCBmb3JtYXQgKi8KKwlyZXR1cm4gcHNwcmludGYoIiVzOiVkIiwgYmktPmJhY2tlbmRf aG9zdG5hbWUsIGJpLT5iYWNrZW5kX3BvcnQpOworfQorCiBzdGF0aWMgdm9pZAogQ2hlY2tSZXBs aWNhdGlvblRpbWVMYWdFcnJvckNiKHZvaWQgKmFyZykKIHsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Npb24vdGVzdHMvMDQxLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5L1JFQURNRSBi L3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQxLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5 L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmI0ZGY1ZGE0MAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQxLmV4dGVybmFs X3JlcGxpY2F0aW9uX2RlbGF5L1JFQURNRQpAQCAtMCwwICsxLDU5IEBACitFeHRlcm5hbCBSZXBs aWNhdGlvbiBEZWxheSBDb21tYW5kIFRlc3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoZSBleHRlcm5hbCBjb21tYW5kIHJl cGxpY2F0aW9uIGRlbGF5IHNvdXJjZSBmZWF0dXJlLgorCitUZXN0IENvdmVyYWdlOgorLSBFeHRl cm5hbCBjb21tYW5kIHJlY2VpdmVzIHJlcGxpY2Egbm9kZSBpZGVudGlmaWVycyBvbmx5IChwcmlt YXJ5IG9taXR0ZWQpCistIEluc3RhbmNlIGlkZW50aWZpZXJzIGluIGhvc3Q6cG9ydCBmb3JtYXQK Ky0gQmFzaWMgZXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24gd2l0aCBpbnRlZ2VyIGFuZCBmbG9h dCBtaWxsaXNlY29uZCB2YWx1ZXMKKy0gRGVsYXkgdGhyZXNob2xkIGZ1bmN0aW9uYWxpdHkgd2l0 aCBleHRlcm5hbCBjb21tYW5kcworLSBDb21tYW5kIGV4ZWN1dGlvbiBhcyBwZ3Bvb2wgcHJvY2Vz cyB1c2VyIChubyBzdSB3cmFwcGVyKQorLSBFcnJvciBoYW5kbGluZyBmb3IgbWlzc2luZy9pbnZh bGlkIGNvbW1hbmRzCistIENvbW1hbmQgZXhlY3V0aW9uIGZhaWx1cmUgc2NlbmFyaW9zCistIENv bW1hbmQgdGltZW91dCBoYW5kbGluZyB3aXRoIGNvbmZpZ3VyYWJsZSB0aW1lb3V0IHZhbHVlcwor LSBJbnB1dCB2YWxpZGF0aW9uIGZvciBpbnZhbGlkLCBuZWdhdGl2ZSAob3RoZXIgdGhhbiAtMSks IGFuZCBleHRyZW1lbHkgbGFyZ2UgZGVsYXkgdmFsdWVzCistIEhhbmRsaW5nIG9mIC0xIGZvciBk b3duIG5vZGVzIChsb2dnZWQgYnV0IG5vIGltbWVkaWF0ZSBmYWlsb3ZlcikKKy0gV3JvbmcgbnVt YmVyIG9mIG91dHB1dCB2YWx1ZXMgdmFsaWRhdGlvbgorLSBNdWx0aXBsZSAtMSB2YWx1ZXMgKG11 bHRpcGxlIGRvd24gcmVwbGljYXMpCistIE1peGVkIHNjZW5hcmlvcyAoc29tZSByZXBsaWNhcyB1 cCwgc29tZSBkb3duKQorLSBPdXRwdXQgdHJ1bmNhdGlvbiBkZXRlY3Rpb24KKworRmlsZXM6Cist IHRlc3Quc2g6IE1haW4gdGVzdCBzY3JpcHQKKy0gdGVzdF9wYXJzaW5nLnNoOiBVbml0IHRlc3Qg Zm9yIHBhcnNpbmcgbG9naWMKKy0gdGVzdF92YWxpZGF0aW9uLnNoOiBWYWxpZGF0aW9uIGFuZCBl ZGdlIGNhc2UgdGVzdGluZworLSBSRUFETUU6IFRoaXMgZG9jdW1lbnRhdGlvbgorCitLZXkgQ2hh bmdlcyBmcm9tIE9yaWdpbmFsIFZlcnNpb246CistIFByaW1hcnkgbm9kZSBpcyBvbWl0dGVkIGZy b20gY29tbWFuZCBhcmd1bWVudHMKKy0gQ29tbWFuZCByZWNlaXZlcyBvbmx5IHJlcGxpY2EgaWRl bnRpZmllcnMKKy0gSW5zdGFuY2UgaWRlbnRpZmllcnMgYXJlIGluIGhvc3Q6cG9ydCBmb3JtYXQg KG5vdCBhcHBsaWNhdGlvbl9uYW1lKQorLSBPdXRwdXQgZm9ybWF0OiBvbmUgZGVsYXkgcGVyIHJl cGxpY2EgKG5vdCBwZXIgYWxsIG5vZGVzKQorLSAtMSB2YWx1ZSBpbmRpY2F0ZXMgZG93biByZXBs aWNhIHdpdGhvdXQgdHJpZ2dlcmluZyBmYWlsb3ZlcgorLSBGb3JtYXQgZXhhbXBsZTogIjI1IDEw MCIgZm9yIDIgcmVwbGljYXMgKDMtbm9kZSBjbHVzdGVyID0gMSBwcmltYXJ5ICsgMiByZXBsaWNh cykKKworVGhlIHRlc3QgY3JlYXRlcyB0ZW1wb3JhcnkgY29tbWFuZCBzY3JpcHRzIHRoYXQgb3V0 cHV0IGRlbGF5IHZhbHVlcyBpbiB0aGUgZm9ybWF0OgorInJlcGxpY2ExX2RlbGF5IHJlcGxpY2Ey X2RlbGF5IC4uLiIKKworV2hlcmUgZGVsYXlzIGFyZSBpbiBtaWxsaXNlY29uZHMgYW5kIGNhbiBi ZSBpbnRlZ2VyIG9yIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KK1NwZWNpYWwgdmFsdWUgLTEgaW5k aWNhdGVzIGEgcmVwbGljYSB0aGF0IGlzIGRvd24gYnV0IG5vdCB5ZXQgZGV0ZWN0ZWQgYnkgcGdw b29sLgorCitUZXN0IEVudmlyb25tZW50OgorLSBVc2VzIHN0cmVhbWluZyByZXBsaWNhdGlvbiBt b2RlIHdpdGggMyBub2RlcworLSBOb2RlIDAgaXMgcHJpbWFyeSAob21pdHRlZCBmcm9tIGNvbW1h bmQgYXJndW1lbnRzKQorLSBOb2RlcyAxIGFuZCAyIGFyZSByZXBsaWNhcyAoaW5jbHVkZWQgaW4g Y29tbWFuZCBhcmd1bWVudHMpCistIENvbmZpZ3VyZXMgc3JfY2hlY2tfcGVyaW9kID0gMSBzZWNv bmQgZm9yIGZhc3RlciB0ZXN0aW5nCistIFRlc3RzIHZhcmlvdXMgZGVsYXkgc2NlbmFyaW9zIGFu ZCB0aHJlc2hvbGQgYmVoYXZpb3JzCisKK0V4cGVjdGVkIEJlaGF2aW9yOgorLSBFeHRlcm5hbCBj b21tYW5kcyByZWNlaXZlIHJlcGxpY2EgaWRlbnRpZmllcnMgaW4gaG9zdDpwb3J0IGZvcm1hdAor LSBQcmltYXJ5IG5vZGUgaWRlbnRpZmllciBpcyBuZXZlciBwYXNzZWQgdG8gY29tbWFuZAorLSBD b21tYW5kIG91dHB1dHMgb25lIGRlbGF5IHZhbHVlIHBlciByZXBsaWNhCistIC0xIHZhbHVlcyBh cmUgbG9nZ2VkIGJ1dCBkb24ndCB0cmlnZ2VyIGltbWVkaWF0ZSBmYWlsb3ZlcgorLSBEZWxheSB2 YWx1ZXMgYXJlIHBhcnNlZCBjb3JyZWN0bHkgKGJvdGggaW50IGFuZCBmbG9hdCkKKy0gVGhyZXNo b2xkIGNvbXBhcmlzb25zIHdvcmsgcHJvcGVybHkKKy0gRXJyb3IgY29uZGl0aW9ucyBhcmUgaGFu ZGxlZCBncmFjZWZ1bGx5CistIENvbW1hbmRzIHRpbWVvdXQgYXBwcm9wcmlhdGVseSBiYXNlZCBv biBjb25maWd1cmF0aW9uCistIFRpbWVvdXQgZXJyb3JzIHByb3ZpZGUgaGVscGZ1bCBtZXNzYWdl cyBhbmQgaGludHMKKy0gVGVzdHMgYXJlIHJlbGlhYmxlIHdpdGggcHJvcGVyIHdhaXQgbWVjaGFu aXNtcyBpbnN0ZWFkIG9mIGZpeGVkIHNsZWVwcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz c2lvbi90ZXN0cy8wNDEuZXh0ZXJuYWxfcmVwbGljYXRpb25fZGVsYXkvdGVzdC5zaCBiL3NyYy90 ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQxLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5L3Rlc3Qu c2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwLi5mMDJhMDg2YjEKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0MS5leHRlcm5hbF9yZXBs aWNhdGlvbl9kZWxheS90ZXN0LnNoCkBAIC0wLDAgKzEsNDAxIEBACisjIS91c3IvYmluL2VudiBi YXNoCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIyB0ZXN0IHNjcmlwdCBmb3IgZXh0ZXJuYWwgY29tbWFuZCByZXBs aWNhdGlvbiBkZWxheSBzb3VyY2UKKyMKK3NvdXJjZSAkVEVTVExJQlMKK1RFU1RESVI9dGVzdGRp cgorUEdfQ1RMPSRQR0JJTi9wZ19jdGwKK1BTUUw9IiRQR0JJTi9wc3FsIC1YICIKKworcm0gLWZy ICRURVNURElSCitta2RpciAkVEVTVERJUgorY2QgJFRFU1RESVIKKworIyBjcmVhdGUgdGVzdCBl bnZpcm9ubWVudAorZWNobyAtbiAiY3JlYXRpbmcgdGVzdCBlbnZpcm9ubWVudC4uLiIKKyRQR1BP T0xfU0VUVVAgLW0gcyAtbiAzIHx8IGV4aXQgMQorZWNobyAiZG9uZS4iCitzb3VyY2UgLi9iYXNo cmMucG9ydHMKK2V4cG9ydCBQR1BPUlQ9JFBHUE9PTF9QT1JUCisKKyMgQ3JlYXRlIGV4dGVybmFs IGNvbW1hbmQgc2NyaXB0cyBmb3IgdGVzdGluZworIyBOT1RFOiBDb21tYW5kcyBub3cgb25seSBv dXRwdXQgZGVsYXkgdmFsdWVzIGZvciBSRVBMSUNBUyAobm90IHByaW1hcnkpCitjYXQgPiBkZWxh eV9jbWRfc3RhdGljLnNoIDw8ICdFT0YnCisjIS9iaW4vYmFzaAorIyBTdGF0aWMgZGVsYXkgdmFs dWVzIGZvciByZXBsaWNhczogbm9kZTE9MjVtcywgbm9kZTI9NTBtcyAobm9kZTAgaXMgcHJpbWFy eSwgbm90IGluY2x1ZGVkKQorZWNobyAiMjUgNTAiCitFT0YKK2NobW9kICt4IGRlbGF5X2NtZF9z dGF0aWMuc2gKKworY2F0ID4gZGVsYXlfY21kX2Zsb2F0LnNoIDw8ICdFT0YnCisjIS9iaW4vYmFz aAorIyBGbG9hdCBkZWxheSB2YWx1ZXMgZm9yIHJlcGxpY2FzOiBub2RlMT0yNS41bXMsIG5vZGUy PTEwMC43NW1zCitlY2hvICIyNS41IDEwMC43NSIKK0VPRgorY2htb2QgK3ggZGVsYXlfY21kX2Zs b2F0LnNoCisKK2NhdCA+IGRlbGF5X2NtZF9oaWdoLnNoIDw8ICdFT0YnCisjIS9iaW4vYmFzaAor IyBIaWdoIGRlbGF5IHZhbHVlcyB0byB0ZXN0IHRocmVzaG9sZDogbm9kZTE9MjAwMG1zLCBub2Rl Mj0zMDAwbXMKK2VjaG8gIjIwMDAgMzAwMCIKK0VPRgorY2htb2QgK3ggZGVsYXlfY21kX2hpZ2gu c2gKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvICI9PT0gVGVzdDA6 IEV4dGVybmFsIGNvbW1hbmQgcmVjZWl2ZXMgcmVwbGljYSBpZGVudGlmaWVycyBvbmx5IChwcmlt YXJ5IG9taXR0ZWQpID09PSIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBD b21tYW5kIHRoYXQgY2FwdHVyZXMgaXRzIGFyZ3VtZW50cyBhbmQgb3V0cHV0cyB2YWxpZCBkZWxh eXMgZm9yIDIgcmVwbGljYXMKK2NhdCA+IGRlbGF5X2NtZF9hcmdzLnNoIDw8ICdFT0YnCisjIS9i aW4vYmFzaAorcHJpbnRmICIlcyAiICIkQCIgPiBhcmdzLnR4dAorZWNobyAiMjUgNTAiCitFT0YK K2NobW9kICt4IGRlbGF5X2NtZF9hcmdzLnNoCisKK2VjaG8gInJlcGxpY2F0aW9uX2RlbGF5X3Nv dXJjZV9jbWQgPSAnLi9kZWxheV9jbWRfYXJncy5zaCciID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNo byAic3JfY2hlY2tfcGVyaW9kID0gMSIgPj4gZXRjL3BncG9vbC5jb25mCitlY2hvICJsb2dfbWlu X21lc3NhZ2VzID0gJ0RFQlVHMSciID4+IGV0Yy9wZ3Bvb2wuY29uZgorIyBSZWR1Y2UgbWVtb3J5 IHJlcXVpcmVtZW50cyBmb3IgbWFjT1Mgc2hhcmVkIG1lbW9yeSBsaW1pdHMKK2VjaG8gIm51bV9p bml0X2NoaWxkcmVuID0gNCIgPj4gZXRjL3BncG9vbC5jb25mCitlY2hvICJtYXhfcG9vbCA9IDIi ID4+IGV0Yy9wZ3Bvb2wuY29uZgorIyBEaXNhYmxlIHF1ZXJ5IGNhY2hpbmcgdG8gYXZvaWQgc2hh cmVkIG1lbW9yeSBpc3N1ZXMgb24gbWFjT1MKK2VjaG8gIm1lbW9yeV9jYWNoZV9lbmFibGVkID0g b2ZmIiA+PiBldGMvcGdwb29sLmNvbmYKKworLi9zdGFydGFsbAord2FpdF9mb3JfcGdwb29sX3N0 YXJ0dXAKKworZWNobyAiV2FpdGluZyBmb3Igc3JfY2hlY2sgdG8gcGFzcyBhcmdzLi4uIgorZm9y IGkgaW4gezEuLjEwfTsgZG8KKyAgICBpZiBbIC1mIGFyZ3MudHh0IF07IHRoZW4KKyAgICAgICAg YnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworaWYgWyAhIC1mIGFyZ3MudHh0IF07 IHRoZW4KKyAgICBlY2hvIGZhaWw6IGRpZCBub3QgY2FwdHVyZSBjb21tYW5kIGFyZ3VtZW50cwor ICAgIC4vc2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKK0FSR1NfQ09OVEVOVD0kKGNhdCBh cmdzLnR4dCB8IHNlZCAncy9bWzpzcGFjZTpdXSokLy8nKQorIyBTaG91bGQgcmVjZWl2ZSAyIHJl cGxpY2EgaWRlbnRpZmllcnMgaW4gaG9zdDpwb3J0IGZvcm1hdCAobG9jYWxob3N0OjExMDAzIGxv Y2FsaG9zdDoxMTAwNCBvciBzZXJ2ZXIxOjExMDAzIHNlcnZlcjI6MTEwMDQpCisjIFByaW1hcnkg KGxvY2FsaG9zdDoxMTAwMiBvciBzZXJ2ZXIwOjExMDAyKSBzaG91bGQgYmUgb21pdHRlZAoraWYg ISBlY2hvICIkQVJHU19DT05URU5UIiB8IGdyZXAgLXFFICIoc2VydmVyMXxsb2NhbGhvc3QpOjEx MDAzIjsgdGhlbgorICAgIGVjaG8gImZhaWw6IGV4cGVjdGVkIHJlcGxpY2ExOjExMDAzIGluIGFy Z3VtZW50cywgZ290OiAnJEFSR1NfQ09OVEVOVCciCisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4 aXQgMQorZmkKK2lmICEgZWNobyAiJEFSR1NfQ09OVEVOVCIgfCBncmVwIC1xRSAiKHNlcnZlcjJ8 bG9jYWxob3N0KToxMTAwNCI7IHRoZW4KKyAgICBlY2hvICJmYWlsOiBleHBlY3RlZCByZXBsaWNh MjoxMTAwNCBpbiBhcmd1bWVudHMsIGdvdDogJyRBUkdTX0NPTlRFTlQnIgorICAgIC4vc2h1dGRv d25hbGwKKyAgICBleGl0IDEKK2ZpCitpZiBlY2hvICIkQVJHU19DT05URU5UIiB8IGdyZXAgLXFF ICIoc2VydmVyMHxsb2NhbGhvc3QpOjExMDAyIjsgdGhlbgorICAgIGVjaG8gImZhaWw6IHByaW1h cnkgc2hvdWxkIG5vdCBiZSBpbiBhcmd1bWVudHMsIGdvdDogJyRBUkdTX0NPTlRFTlQnIgorICAg IC4vc2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6IGFyZ3VtZW50IG9yZGVy IGNvcnJlY3QgLSByZXBsaWNhcyBvbmx5LCBwcmltYXJ5IG9taXR0ZWQsIGhvc3Q6cG9ydCBmb3Jt YXQKKy4vc2h1dGRvd25hbGwKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitl Y2hvICI9PT0gVGVzdDE6IEJhc2ljIGV4dGVybmFsIGNvbW1hbmQgd2l0aCBpbnRlZ2VyIG1pbGxp c2Vjb25kIHZhbHVlcyA9PT0iCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Vj aG8gInJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgPSAnLi9kZWxheV9jbWRfc3RhdGljLnNo JyIgPj4gZXRjL3BncG9vbC5jb25mCitlY2hvICJzcl9jaGVja19wZXJpb2QgPSAxIiA+PiBldGMv cGdwb29sLmNvbmYKK2VjaG8gImxvZ19zdGFuZGJ5X2RlbGF5ID0gJ2Fsd2F5cyciID4+IGV0Yy9w Z3Bvb2wuY29uZgorZWNobyAibG9nX21pbl9tZXNzYWdlcyA9ICdERUJVRzEnIiA+PiBldGMvcGdw b29sLmNvbmYKKworLi9zdGFydGFsbAord2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAKKworJFBTUUwg dGVzdCA8PEVPRgorQ1JFQVRFIFRBQkxFIHQxKGkgSU5URUdFUik7CitFT0YKKworIyBXYWl0IGZv ciBzcl9jaGVjayB0byBydW4gYW5kIHBvcHVsYXRlIGRlbGF5IHZhbHVlcworIyBzcl9jaGVja19w ZXJpb2QgaXMgMSBzZWNvbmQsIHNvIHdhaXQgYSBiaXQgbG9uZ2VyIHRvIGVuc3VyZSBpdCBydW5z CitlY2hvICJXYWl0aW5nIGZvciBzcl9jaGVjayB0byBydW4uLi4iCitmb3IgaSBpbiB7MS4uMTB9 OyBkbworICAgIGlmIGdyZXAgLXEgImV4ZWN1dGluZyByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5k IiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJDb21tYW5k IGV4ZWN1dGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsKKyAgICBmaQorICAg IHNsZWVwIDEKK2RvbmUKKworJFBTUUwgdGVzdCA8PEVPRgorU0hPVyBQT09MX05PREVTOworRU9G CisKKyMgQ2hlY2sgdGhhdCBkZWxheSB2YWx1ZXMgYXJlIHBvcHVsYXRlZCBpbiB0aGUgbG9nCitn cmVwICJleGVjdXRpbmcgcmVwbGljYXRpb24gZGVsYXkgY29tbWFuZCIgbG9nL3BncG9vbC5sb2cg Pi9kZXYvbnVsbCAyPiYxCitpZiBbICQ/ICE9IDAgXTt0aGVuCisgICAgZWNobyBmYWlsOiBleHRl cm5hbCBjb21tYW5kIHdhcyBub3QgZXhlY3V0ZWQKKyAgICBlY2hvICJMb2cgY29udGVudHM6Igor ICAgIHRhaWwgLTIwIGxvZy9wZ3Bvb2wubG9nCisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQg MQorZmkKKworIyBWZXJpZnkgYWN0dWFsIGRlbGF5IHZhbHVlcyB3ZXJlIHBhcnNlZAoraWYgISAk UFNRTCAtdCAtYyAiU0hPVyBQT09MX05PREVTIiB0ZXN0IHwgZ3JlcCAtRSAiWzAtOV0rXC5bMC05 XSsiID4vZGV2L251bGw7IHRoZW4KKyAgICBlY2hvICJXYXJuaW5nOiBObyBkZWxheSB2YWx1ZXMg Zm91bmQgaW4gUE9PTF9OT0RFUyBvdXRwdXQiCitmaQorCisjIENoZWNrIGZvciBkZWxheSBsb2cg bWVzc2FnZXMKK2dyZXAgIlJlcGxpY2F0aW9uIG9mIG5vZGUuKmV4dGVybmFsIGNvbW1hbmQiIGxv Zy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07dGhlbgorICAgIGVj aG8gZmFpbDogZXh0ZXJuYWwgY29tbWFuZCBkZWxheSBsb2dnaW5nIG5vdCBmb3VuZAorICAgIC4v c2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6IGJhc2ljIGV4dGVybmFsIGNv bW1hbmQgdGVzdCBzdWNjZWVkZWQKKy4vc2h1dGRvd25hbGwKKworIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCitlY2hvICI9PT0gVGVzdDI6IEV4dGVybmFsIGNvbW1hbmQgd2l0aCBm bG9hdGluZy1wb2ludCBtaWxsaXNlY29uZCB2YWx1ZXMgPT09IgorIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisjIFVwZGF0ZSBjb25maWd1cmF0aW9uIHRvIHVzZSBmbG9hdCBjb21t YW5kCitzZWQgLWkuYmFrICJzfGRlbGF5X2NtZF9zdGF0aWMuc2h8ZGVsYXlfY21kX2Zsb2F0LnNo fCIgZXRjL3BncG9vbC5jb25mCisKKy4vc3RhcnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVw CisKKyMgV2FpdCBmb3Igc3JfY2hlY2sgdG8gcnVuIHdpdGggZmxvYXQgdmFsdWVzCitlY2hvICJX YWl0aW5nIGZvciBzcl9jaGVjayB3aXRoIGZsb2F0IHZhbHVlcy4uLiIKK2ZvciBpIGluIHsxLi4x MH07IGRvCisgICAgaWYgZ3JlcCAtcSAiZXhlY3V0aW5nIHJlcGxpY2F0aW9uIGRlbGF5IGNvbW1h bmQuKmRlbGF5X2NtZF9mbG9hdC5zaCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4K KyAgICAgICAgZWNobyAiRmxvYXQgY29tbWFuZCBleGVjdXRlZCBhZnRlciAke2l9IHNlY29uZHMi CisgICAgICAgIGJyZWFrCisgICAgZmkKKyAgICBzbGVlcCAxCitkb25lCisKKyRQU1FMIHRlc3Qg PDxFT0YKK1NIT1cgUE9PTF9OT0RFUzsKK0VPRgorCisjIENoZWNrIHRoYXQgZmxvYXQgdmFsdWVz IGFyZSBoYW5kbGVkIGNvcnJlY3RseQorZ3JlcCAiZXhlY3V0aW5nIHJlcGxpY2F0aW9uIGRlbGF5 IGNvbW1hbmQuKmRlbGF5X2NtZF9mbG9hdC5zaCIgbG9nL3BncG9vbC5sb2cgPi9kZXYvbnVsbCAy PiYxCitpZiBbICQ/ICE9IDAgXTt0aGVuCisgICAgZWNobyBmYWlsOiBmbG9hdCBjb21tYW5kIHdh cyBub3QgZXhlY3V0ZWQKKyAgICAuL3NodXRkb3duYWxsCisgICAgZXhpdCAxCitmaQorCitlY2hv IG9rOiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgdGVzdCBzdWNjZWVkZWQKKy4vc2h1dGRvd25hbGwK KworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvICI9PT0gVGVzdDM6IEV4 dGVybmFsIGNvbW1hbmQgd2l0aCBkZWxheSB0aHJlc2hvbGQgPT09IgorIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisjIFVwZGF0ZSBjb25maWd1cmF0aW9uIHRvIHVzZSBoaWdoIGRl bGF5IGNvbW1hbmQgYW5kIHNldCB0aHJlc2hvbGQKK3NlZCAtaS5iYWsgInN8ZGVsYXlfY21kX2Zs b2F0LnNofGRlbGF5X2NtZF9oaWdoLnNofCIgZXRjL3BncG9vbC5jb25mCitlY2hvICJkZWxheV90 aHJlc2hvbGRfYnlfdGltZSA9IDEwMDAiID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAiYmFja2Vu ZF93ZWlnaHQwID0gMCIgPj4gZXRjL3BncG9vbC5jb25mICAjIEZvcmNlIHF1ZXJpZXMgdG8gc3Rh bmRieSBub3JtYWxseQorZWNobyAiYmFja2VuZF93ZWlnaHQyID0gMCIgPj4gZXRjL3BncG9vbC5j b25mICAjIE9ubHkgdXNlIG5vZGUgMSBhcyBzdGFuZGJ5CisKKy4vc3RhcnRhbGwKK3dhaXRfZm9y X3BncG9vbF9zdGFydHVwCisKKyMgV2FpdCBmb3Igc3JfY2hlY2sgdG8gcnVuIGFuZCBkZXRlY3Qg aGlnaCBkZWxheXMKK2VjaG8gIldhaXRpbmcgZm9yIHNyX2NoZWNrIHdpdGggaGlnaCBkZWxheSB2 YWx1ZXMuLi4iCitmb3IgaSBpbiB7MS4uMTB9OyBkbworICAgIGlmIGdyZXAgLXEgImV4ZWN1dGlu ZyByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kLipkZWxheV9jbWRfaGlnaC5zaCIgbG9nL3BncG9v bC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiSGlnaCBkZWxheSBjb21tYW5k IGV4ZWN1dGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsKKyAgICBmaQorICAg IHNsZWVwIDEKK2RvbmUKKworJFBTUUwgdGVzdCA8PEVPRgorU0VMRUNUICogRlJPTSB0MSBMSU1J VCAxOworRU9GCisKKyMgV2l0aCBoaWdoIGRlbGF5cyAoMjAwMG1zID4gMTAwMG1zIHRocmVzaG9s ZCksIHF1ZXJ5IHNob3VsZCBnbyB0byBwcmltYXJ5IChub2RlIDApCitncmVwICJTRUxFQ1QgXCog RlJPTSB0MSBMSU1JVCAxLipEQiBub2RlIGlkOiAwIiBsb2cvcGdwb29sLmxvZyA+L2Rldi9udWxs IDI+JjEKK2lmIFsgJD8gIT0gMCBdO3RoZW4KKyAgICBlY2hvIGZhaWw6IHF1ZXJ5IHdhcyBub3Qg c2VudCB0byBwcmltYXJ5IG5vZGUgZGVzcGl0ZSBoaWdoIGRlbGF5CisgICAgLi9zaHV0ZG93bmFs bAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazogZGVsYXkgdGhyZXNob2xkIHRlc3Qgc3VjY2Vl ZGVkCisuL3NodXRkb3duYWxsCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ZWNobyAiPT09IFRlc3Q0OiBFeHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbiBhcyBwcm9jZXNzIHVz ZXIgPT09IgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgdGhhdCBj b21tYW5kIHJ1bnMgYXMgdGhlIGN1cnJlbnQgcGdwb29sIHByb2Nlc3MgdXNlcgorc2VkIC1pLmJh ayAic3xkZWxheV9jbWRfaGlnaC5zaHxkZWxheV9jbWRfc3RhdGljLnNofCIgZXRjL3BncG9vbC5j b25mCisKKy4vc3RhcnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyMgV2FpdCBmb3Ig c3JfY2hlY2sgdG8gcnVuCitlY2hvICJXYWl0aW5nIGZvciBzcl9jaGVjayB0byBydW4gYXMgcHJv Y2VzcyB1c2VyLi4uIgorZm9yIGkgaW4gezEuLjEwfTsgZG8KKyAgICBpZiBncmVwIC1xICJleGVj dXRpbmcgcmVwbGljYXRpb24gZGVsYXkgY29tbWFuZC4qZGVsYXlfY21kX3N0YXRpYy5zaCIgbG9n L3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiQ29tbWFuZCBleGVj dXRlZCBhcyBwcm9jZXNzIHVzZXIgYWZ0ZXIgJHtpfSBzZWNvbmRzIgorICAgICAgICBicmVhawor ICAgIGZpCisgICAgc2xlZXAgMQorZG9uZQorCisjIENoZWNrIHRoYXQgY29tbWFuZCB3YXMgZXhl Y3V0ZWQgKHdpdGhvdXQgc3Ugd3JhcHBlcikKK2dyZXAgImV4ZWN1dGluZyByZXBsaWNhdGlvbiBk ZWxheSBjb21tYW5kLipkZWxheV9jbWRfc3RhdGljLnNoIiBsb2cvcGdwb29sLmxvZyA+L2Rldi9u dWxsIDI+JjEKK2lmIFsgJD8gIT0gMCBdO3RoZW4KKyAgICBlY2hvIGZhaWw6IGNvbW1hbmQgd2Fz IG5vdCBleGVjdXRlZCBhcyBwcm9jZXNzIHVzZXIKKyAgICAuL3NodXRkb3duYWxsCisgICAgZXhp dCAxCitmaQorCisjIFZlcmlmeSBubyBzdSBjb21tYW5kIHdhcyB1c2VkCitpZiBncmVwIC1xICJl eGVjdXRpbmcgcmVwbGljYXRpb24gZGVsYXkgY29tbWFuZC4qc3UuKiIgbG9nL3BncG9vbC5sb2cg Mj4vZGV2L251bGw7IHRoZW4KKyAgICBlY2hvIGZhaWw6IGNvbW1hbmQgc2hvdWxkIG5vdCB1c2Ug c3Ugd3JhcHBlcgorICAgIC4vc2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6 IHByb2Nlc3MgdXNlciBleGVjdXRpb24gdGVzdCBzdWNjZWVkZWQKKy4vc2h1dGRvd25hbGwKKwor IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvICI9PT0gVGVzdDU6IEVycm9y IGhhbmRsaW5nIC0gbWlzc2luZyBjb21tYW5kID09PSIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIyBUZXN0IGVycm9yIGhhbmRsaW5nIHdoZW4gY29tbWFuZCBpcyBub3QgY29u ZmlndXJlZAorc2VkIC1pLmJhayAic3xyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kID0gJy4v ZGVsYXlfY21kX3N0YXRpYy5zaCd8cmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZCA9ICcnfCIg ZXRjL3BncG9vbC5jb25mCisKKy4vc3RhcnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVwCisK KyMgV2l0aCBlbXB0eSBjb21tYW5kLCBzaG91bGQgZmFsbCBiYWNrIHRvIGJ1aWx0aW4gbWV0aG9k CisjIE5vIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgZXhwZWN0ZWQgLSBqdXN0IHZlcmlmeSBpdCBk b2Vzbid0IGNyYXNoCitzbGVlcCAzCisKK2VjaG8gb2s6IGVtcHR5IGNvbW1hbmQgdGVzdCBzdWNj ZWVkZWQgKGZhbGxiYWNrIHRvIGJ1aWx0aW4pCisuL3NodXRkb3duYWxsCisKKyMgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyAiPT09IFRlc3Q2OiBFcnJvciBoYW5kbGluZyAt IGNvbW1hbmQgZXhlY3V0aW9uIGZhaWx1cmUgPT09IgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisjIFRlc3QgZXJyb3IgaGFuZGxpbmcgd2hlbiBjb21tYW5kIGZhaWxzCitlY2hv ICJyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kID0gJy4vbm9uZXhpc3RlbnRfY29tbWFuZC5z aCciID4+IGV0Yy9wZ3Bvb2wuY29uZgorCisuL3N0YXJ0YWxsCit3YWl0X2Zvcl9wZ3Bvb2xfc3Rh cnR1cAorCisjIFdhaXQgZm9yIHNyX2NoZWNrIHRvIHJ1biB3aXRoIGZhaWxpbmcgY29tbWFuZAor ZWNobyAiV2FpdGluZyBmb3Igc3JfY2hlY2sgd2l0aCBmYWlsaW5nIGNvbW1hbmQuLi4iCitmb3Ig aSBpbiB7MS4uNX07IGRvCisgICAgaWYgZ3JlcCAtcSAiZmFpbGVkIHRvIGV4ZWN1dGUgcmVwbGlj YXRpb24gZGVsYXkgY29tbWFuZCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAg ICAgICAgZWNobyAiQ29tbWFuZCBmYWlsdXJlIGRldGVjdGVkIGFmdGVyICR7aX0gc2Vjb25kcyIK KyAgICAgICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBDaGVjayBmb3Ig ZXJyb3IgbWVzc2FnZSBhYm91dCBjb21tYW5kIGV4ZWN1dGlvbiBmYWlsdXJlCitncmVwICJmYWls ZWQgdG8gZXhlY3V0ZSByZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIiBsb2cvcGdwb29sLmxvZyA+ L2Rldi9udWxsIDI+JjEKK2lmIFsgJD8gIT0gMCBdO3RoZW4KKyAgICBlY2hvIGZhaWw6IGNvbW1h bmQgZXhlY3V0aW9uIGZhaWx1cmUgbm90IGRldGVjdGVkCisgICAgLi9zaHV0ZG93bmFsbAorICAg IGV4aXQgMQorZmkKKworZWNobyBvazogY29tbWFuZCBmYWlsdXJlIHRlc3Qgc3VjY2VlZGVkCisu L3NodXRkb3duYWxsCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyAi PT09IFRlc3Q3OiBDb21tYW5kIHRpbWVvdXQgaGFuZGxpbmcgPT09IgorIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisjIENyZWF0ZSBhIGNvbW1hbmQgdGhhdCB0YWtlcyBsb25nZXIg dGhhbiB0aGUgdGltZW91dAorY2F0ID4gZGVsYXlfY21kX3Nsb3cuc2ggPDwgJ0VPRicKKyMhL2Jp bi9iYXNoCisjIFNsb3cgY29tbWFuZCB0aGF0IHRha2VzIDE1IHNlY29uZHMgKGxvbmdlciB0aGFu IGRlZmF1bHQgMTBzIHRpbWVvdXQpCitzbGVlcCAxNQorZWNobyAiMjUgNTAiCitFT0YKK2NobW9k ICt4IGRlbGF5X2NtZF9zbG93LnNoCisKKyMgU2V0IGEgc2hvcnQgdGltZW91dCBhbmQgdXNlIHRo ZSBzbG93IGNvbW1hbmQKK3NlZCAtaS5iYWsgInN8cmVwbGljYXRpb25fZGVsYXlfc291cmNlX2Nt ZCA9ICcuL25vbmV4aXN0ZW50X2NvbW1hbmQuc2gnfHJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9j bWQgPSAnLi9kZWxheV9jbWRfc2xvdy5zaCd8IiBldGMvcGdwb29sLmNvbmYKK2VjaG8gInJlcGxp Y2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0ID0gMyIgPj4gZXRjL3BncG9vbC5jb25mCisKKy4v c3RhcnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyMgV2FpdCBmb3Igc3JfY2hlY2sg dG8gcnVuIGFuZCB0aW1lb3V0CitlY2hvICJXYWl0aW5nIGZvciBjb21tYW5kIHRpbWVvdXQuLi4i Citmb3IgaSBpbiB7MS4uMTV9OyBkbworICAgIGlmIGdyZXAgLXEgInJlcGxpY2F0aW9uIGRlbGF5 IGNvbW1hbmQgdGltZWQgb3V0IiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsgdGhlbgorICAg ICAgICBlY2hvICJDb21tYW5kIHRpbWVvdXQgZGV0ZWN0ZWQgYWZ0ZXIgJHtpfSBzZWNvbmRzIgor ICAgICAgICBicmVhaworICAgIGZpCisgICAgc2xlZXAgMQorZG9uZQorCisjIENoZWNrIGZvciB0 aW1lb3V0IGVycm9yIG1lc3NhZ2UKK2dyZXAgInJlcGxpY2F0aW9uIGRlbGF5IGNvbW1hbmQgdGlt ZWQgb3V0IGFmdGVyIDMgc2Vjb25kcyIgbG9nL3BncG9vbC5sb2cgPi9kZXYvbnVsbCAyPiYxCitp ZiBbICQ/ICE9IDAgXTt0aGVuCisgICAgZWNobyBmYWlsOiBjb21tYW5kIHRpbWVvdXQgbm90IGRl dGVjdGVkCisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazogY29t bWFuZCB0aW1lb3V0IHRlc3Qgc3VjY2VlZGVkCisuL3NodXRkb3duYWxsCisKKyMgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyAiPT09IFRlc3Q4OiBIYW5kbGluZyBvZiAtMSBm b3IgZG93biBub2RlcyA9PT0iCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMg Q3JlYXRlIGEgY29tbWFuZCB0aGF0IHJldHVybnMgLTEgZm9yIG9uZSByZXBsaWNhCitjYXQgPiBk ZWxheV9jbWRfd2l0aF9kb3duX25vZGUuc2ggPDwgJ0VPRicKKyMhL2Jpbi9iYXNoCisjIFJldHVy biAtMSBmb3IgZmlyc3QgcmVwbGljYSAoaW5kaWNhdGluZyBpdCdzIGRvd24pLCBub3JtYWwgdmFs dWUgZm9yIHNlY29uZAorZWNobyAiLTEgNTAiCitFT0YKK2NobW9kICt4IGRlbGF5X2NtZF93aXRo X2Rvd25fbm9kZS5zaAorCisjIFJlc2V0IGNvbmZpZworcm0gLWYgZXRjL3BncG9vbC5jb25mLmJh aworc2VkIC1pLmJhayAic3xkZWxheV9jbWRfc2xvdy5zaHxkZWxheV9jbWRfd2l0aF9kb3duX25v ZGUuc2h8IiBldGMvcGdwb29sLmNvbmYKK3NlZCAtaS5iYWsgInN8cmVwbGljYXRpb25fZGVsYXlf c291cmNlX3RpbWVvdXQgPSAzfHJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0ID0gMTB8 IiBldGMvcGdwb29sLmNvbmYKKworLi9zdGFydGFsbAord2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAK KworIyBXYWl0IGZvciBzcl9jaGVjayB0byBwcm9jZXNzIC0xIHZhbHVlCitlY2hvICJXYWl0aW5n IGZvciBzcl9jaGVjayB0byBwcm9jZXNzIC0xIHZhbHVlLi4uIgorZm9yIGkgaW4gezEuLjEwfTsg ZG8KKyAgICBpZiBncmVwIC1xICJub2RlLipyZXBvcnRlZCBhcyBkb3duIGJ5IGV4dGVybmFsIGNv bW1hbmQuKmRlbGF5IC0xIiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAg ICBlY2hvICItMSBoYW5kbGluZyBkZXRlY3RlZCBhZnRlciAke2l9IHNlY29uZHMiCisgICAgICAg IGJyZWFrCisgICAgZmkKKyAgICBzbGVlcCAxCitkb25lCisKKyMgQ2hlY2sgZm9yIC0xIGxvZ2dp bmcgbWVzc2FnZQorZ3JlcCAibm9kZS4qcmVwb3J0ZWQgYXMgZG93biBieSBleHRlcm5hbCBjb21t YW5kLipkZWxheSAtMS4qcmVseWluZyBvbiBoZWFsdGggY2hlY2siIGxvZy9wZ3Bvb2wubG9nID4v ZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07dGhlbgorICAgIGVjaG8gZmFpbDogLTEgaGFu ZGxpbmcgbWVzc2FnZSBub3QgZm91bmQKKyAgICAuL3NodXRkb3duYWxsCisgICAgZXhpdCAxCitm aQorCisjIFZlcmlmeSB0aGF0IHBncG9vbCBkaWRuJ3QgY3Jhc2ggb3IgdHJpZ2dlciBmYWlsb3Zl ciBqdXN0IGZyb20gLTEKK2lmIGdyZXAgLXEgImZhaWxvdmVyIiBsb2cvcGdwb29sLmxvZyAyPi9k ZXYvbnVsbDsgdGhlbgorICAgIGVjaG8gImZhaWw6IC0xIHNob3VsZCBub3QgdHJpZ2dlciBpbW1l ZGlhdGUgZmFpbG92ZXIiCisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNo byBvazogLTEgaGFuZGxpbmcgdGVzdCBzdWNjZWVkZWQKKy4vc2h1dGRvd25hbGwKKworZWNobyAi QWxsIGV4dGVybmFsIHJlcGxpY2F0aW9uIGRlbGF5IHRlc3RzIHBhc3NlZCEiCitleGl0IDAKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQxLmV4dGVybmFsX3JlcGxpY2F0 aW9uX2RlbGF5L3Rlc3RfcGFyc2luZy5zaCBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQx LmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5L3Rlc3RfcGFyc2luZy5zaApuZXcgZmlsZSBtb2Rl IDEwMDc1NQppbmRleCAwMDAwMDAwMDAuLjgyZmRhZDE0NAotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQxLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5L3Rl c3RfcGFyc2luZy5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vYmFzaAorIy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyMgVW5pdCB0ZXN0IGZvciBleHRlcm5hbCBjb21tYW5kIHBhcnNpbmcgbG9naWMKKyMgVGhpcyB0 ZXN0cyB0aGUgcGFyc2luZyB3aXRob3V0IG5lZWRpbmcgYSBmdWxsIHBncG9vbCBzZXR1cAorIwor CitlY2hvICI9PT0gVGVzdGluZyBleHRlcm5hbCBjb21tYW5kIG91dHB1dCBwYXJzaW5nID09PSIK KworIyBUZXN0IDE6IEludGVnZXIgdmFsdWVzCitlY2hvICJUZXN0IDE6IEludGVnZXIgbWlsbGlz ZWNvbmQgdmFsdWVzIgorZWNobyAiMCAyNSA1MCIgPiB0ZXN0X291dHB1dC50eHQKK2VjaG8gIkV4 cGVjdGVkOiAwbXMsIDI1bXMsIDUwbXMiCitlY2hvICJPdXRwdXQ6ICQoY2F0IHRlc3Rfb3V0cHV0 LnR4dCkiCitlY2hvICIiCisKKyMgVGVzdCAyOiBGbG9hdCB2YWx1ZXMKK2VjaG8gIlRlc3QgMjog RmxvYXRpbmctcG9pbnQgbWlsbGlzZWNvbmQgdmFsdWVzIgorZWNobyAiMCAyNS41IDEwMC43NSIg PiB0ZXN0X291dHB1dF9mbG9hdC50eHQKK2VjaG8gIkV4cGVjdGVkOiAwbXMsIDI1LjVtcywgMTAw Ljc1bXMiCitlY2hvICJPdXRwdXQ6ICQoY2F0IHRlc3Rfb3V0cHV0X2Zsb2F0LnR4dCkiCitlY2hv ICIiCisKKyMgVGVzdCAzOiBIaWdoIHByZWNpc2lvbiBmbG9hdCB2YWx1ZXMKK2VjaG8gIlRlc3Qg MzogSGlnaCBwcmVjaXNpb24gdmFsdWVzIgorZWNobyAiMCAwLjAwMSA5OTkuOTk5IiA+IHRlc3Rf b3V0cHV0X3ByZWNpc2lvbi50eHQKK2VjaG8gIkV4cGVjdGVkOiAwbXMsIDAuMDAxbXMsIDk5OS45 OTltcyIKK2VjaG8gIk91dHB1dDogJChjYXQgdGVzdF9vdXRwdXRfcHJlY2lzaW9uLnR4dCkiCitl Y2hvICIiCisKKyMgVGVzdCA0OiBFZGdlIGNhc2UgLSB6ZXJvIHZhbHVlcworZWNobyAiVGVzdCA0 OiBBbGwgemVybyB2YWx1ZXMiCitlY2hvICIwIDAgMCIgPiB0ZXN0X291dHB1dF96ZXJvcy50eHQK K2VjaG8gIkV4cGVjdGVkOiAwbXMsIDBtcywgMG1zIgorZWNobyAiT3V0cHV0OiAkKGNhdCB0ZXN0 X291dHB1dF96ZXJvcy50eHQpIgorZWNobyAiIgorCisjIFRlc3QgNTogRWRnZSBjYXNlIC0gbGFy Z2UgdmFsdWVzCitlY2hvICJUZXN0IDU6IExhcmdlIGRlbGF5IHZhbHVlcyIKK2VjaG8gIjAgNTAw MCAxMDAwMCIgPiB0ZXN0X291dHB1dF9sYXJnZS50eHQKK2VjaG8gIkV4cGVjdGVkOiAwbXMsIDUw MDBtcywgMTAwMDBtcyIKK2VjaG8gIk91dHB1dDogJChjYXQgdGVzdF9vdXRwdXRfbGFyZ2UudHh0 KSIKK2VjaG8gIiIKKworIyBUZXN0IDY6IE1peGVkIGludGVnZXIgYW5kIGZsb2F0IHZhbHVlcwor ZWNobyAiVGVzdCA2OiBNaXhlZCBpbnRlZ2VyIGFuZCBmbG9hdCB2YWx1ZXMiCitlY2hvICIwIDI1 IDUwLjUiID4gdGVzdF9vdXRwdXRfbWl4ZWQudHh0CitlY2hvICJFeHBlY3RlZDogMG1zLCAyNW1z LCA1MC41bXMiCitlY2hvICJPdXRwdXQ6ICQoY2F0IHRlc3Rfb3V0cHV0X21peGVkLnR4dCkiCitl Y2hvICIiCisKKyMgQ2xlYW51cAorcm0gLWYgdGVzdF9vdXRwdXRfKi50eHQKKworZWNobyAiQWxs IHBhcnNpbmcgdGVzdHMgY29tcGxldGVkLiBUaGVzZSBvdXRwdXRzIHNob3VsZCBiZSBwYXJzZWFi bGUgYnkgdGhlIGV4dGVybmFsIGNvbW1hbmQgZmVhdHVyZS4iCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzaW9uL3Rlc3RzLzA0MS5leHRlcm5hbF9yZXBsaWNhdGlvbl9kZWxheS90ZXN0X3Zh bGlkYXRpb24uc2ggYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0MS5leHRlcm5hbF9yZXBs aWNhdGlvbl9kZWxheS90ZXN0X3ZhbGlkYXRpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k ZXggMDAwMDAwMDAwLi4yY2Q0YTdmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzaW9uL3Rlc3RzLzA0MS5leHRlcm5hbF9yZXBsaWNhdGlvbl9kZWxheS90ZXN0X3ZhbGlkYXRp b24uc2gKQEAgLTAsMCArMSwzMjMgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisjIHRlc3Qgc2NyaXB0IGZvciBleHRlcm5hbCBjb21tYW5kIHZhbGlkYXRpb24gYW5kIGVkZ2Ug Y2FzZXMKKyMKK3NvdXJjZSAkVEVTVExJQlMKK1RFU1RESVI9dGVzdGRpcl92YWxpZGF0aW9uCitQ R19DVEw9JFBHQklOL3BnX2N0bAorUFNRTD0iJFBHQklOL3BzcWwgLVggIgorCitybSAtZnIgJFRF U1RESVIKK21rZGlyICRURVNURElSCitjZCAkVEVTVERJUgorCisjIGNyZWF0ZSB0ZXN0IGVudmly b25tZW50CitlY2hvIC1uICJjcmVhdGluZyB0ZXN0IGVudmlyb25tZW50Li4uIgorJFBHUE9PTF9T RVRVUCAtbSBzIC1uIDMgfHwgZXhpdCAxCitlY2hvICJkb25lLiIKK3NvdXJjZSAuL2Jhc2hyYy5w b3J0cworZXhwb3J0IFBHUE9SVD0kUEdQT09MX1BPUlQKKworIyBDcmVhdGUgdGVzdCBjb21tYW5k IHNjcmlwdHMKKyMgTk9URTogQWxsIGNvbW1hbmRzIG91dHB1dCB2YWx1ZXMgZm9yIFJFUExJQ0FT IG9ubHkgKHByaW1hcnkgb21pdHRlZCkKK2NhdCA+IGRlbGF5X2NtZF92YWxpZGF0aW9uLnNoIDw8 ICdFT0YnCisjIS9iaW4vYmFzaAorIyBUZXN0IHZhbGlkYXRpb246IG91dHB1dCB3aXRoIGludmFs aWQgdmFsdWVzIGZvciAyIHJlcGxpY2FzCitlY2hvICJpbnZhbGlkX3ZhbHVlIDUwLjUiCitFT0YK K2NobW9kICt4IGRlbGF5X2NtZF92YWxpZGF0aW9uLnNoCisKK2NhdCA+IGRlbGF5X2NtZF9uZWdh dGl2ZS5zaCA8PCAnRU9GJworIyEvYmluL2Jhc2gKKyMgVGVzdCBuZWdhdGl2ZSB2YWx1ZXMgKG90 aGVyIHRoYW4gLTEpCitlY2hvICItMjUgNTAiCitFT0YKK2NobW9kICt4IGRlbGF5X2NtZF9uZWdh dGl2ZS5zaAorCitjYXQgPiBkZWxheV9jbWRfbGFyZ2Uuc2ggPDwgJ0VPRicKKyMhL2Jpbi9iYXNo CisjIFRlc3QgZXh0cmVtZWx5IGxhcmdlIHZhbHVlcworZWNobyAiOTk5OTk5OSA1MCIKK0VPRgor Y2htb2QgK3ggZGVsYXlfY21kX2xhcmdlLnNoCisKK2NhdCA+IGRlbGF5X2NtZF93cm9uZ19jb3Vu dC5zaCA8PCAnRU9GJworIyEvYmluL2Jhc2gKKyMgVGVzdCB3cm9uZyBudW1iZXIgb2YgdmFsdWVz IChvbmx5IDEgaW5zdGVhZCBvZiAyIGZvciAyIHJlcGxpY2FzKQorZWNobyAiMjUiCitFT0YKK2No bW9kICt4IGRlbGF5X2NtZF93cm9uZ19jb3VudC5zaAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KK2VjaG8gIj09PSBUZXN0MTogVmFsaWRhdGlvbiBvZiBpbnZhbGlkIGRlbGF5 IHZhbHVlcyA9PT0iCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gInJl cGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgPSAnLi9kZWxheV9jbWRfdmFsaWRhdGlvbi5zaCci ID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAic3JfY2hlY2tfcGVyaW9kID0gMSIgPj4gZXRjL3Bn cG9vbC5jb25mCitlY2hvICJsb2dfc3RhbmRieV9kZWxheSA9ICdhbHdheXMnIiA+PiBldGMvcGdw b29sLmNvbmYKK2VjaG8gImxvZ19taW5fbWVzc2FnZXMgPSAnREVCVUcxJyIgPj4gZXRjL3BncG9v bC5jb25mCisjIFJlZHVjZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBtYWNPUyBzaGFyZWQgbWVt b3J5IGxpbWl0cworZWNobyAibnVtX2luaXRfY2hpbGRyZW4gPSA0IiA+PiBldGMvcGdwb29sLmNv bmYKK2VjaG8gIm1heF9wb29sID0gMiIgPj4gZXRjL3BncG9vbC5jb25mCisjIERpc2FibGUgcXVl cnkgY2FjaGluZyB0byBhdm9pZCBzaGFyZWQgbWVtb3J5IGlzc3VlcyBvbiBtYWNPUworZWNobyAi bWVtb3J5X2NhY2hlX2VuYWJsZWQgPSBvZmYiID4+IGV0Yy9wZ3Bvb2wuY29uZgorCisuL3N0YXJ0 YWxsCit3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCiskUFNRTCB0ZXN0IDw8RU9GCitDUkVBVEUg VEFCTEUgdDEoaSBJTlRFR0VSKTsKK0VPRgorCisjIFdhaXQgZm9yIHNyX2NoZWNrIHRvIHJ1bgor ZWNobyAiV2FpdGluZyBmb3IgdmFsaWRhdGlvbiB0ZXN0Li4uIgorZm9yIGkgaW4gezEuLjEwfTsg ZG8KKyAgICBpZiBncmVwIC1xICJpbnZhbGlkIGRlbGF5IHZhbHVlIiBsb2cvcGdwb29sLmxvZyAy Pi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJWYWxpZGF0aW9uIGVycm9yIGRldGVjdGVk IGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEK K2RvbmUKKworIyBDaGVjayBmb3IgdmFsaWRhdGlvbiB3YXJuaW5nCitncmVwICJpbnZhbGlkIGRl bGF5IHZhbHVlICdpbnZhbGlkX3ZhbHVlJyBmb3Igbm9kZSIgbG9nL3BncG9vbC5sb2cgPi9kZXYv bnVsbCAyPiYxCitpZiBbICQ/ICE9IDAgXTt0aGVuCisgICAgZWNobyBmYWlsOiB2YWxpZGF0aW9u IHdhcm5pbmcgbm90IGZvdW5kCisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKwor ZWNobyBvazogaW52YWxpZCB2YWx1ZSB2YWxpZGF0aW9uIHRlc3Qgc3VjY2VlZGVkCisuL3NodXRk b3duYWxsCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyAiPT09IFRl c3QyOiBOZWdhdGl2ZSBkZWxheSB2YWx1ZXMgKG90aGVyIHRoYW4gLTEpID09PSIKKyMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2VkIC1pLmJhayAic3xkZWxheV9jbWRfdmFsaWRh dGlvbi5zaHxkZWxheV9jbWRfbmVnYXRpdmUuc2h8IiBldGMvcGdwb29sLmNvbmYKKworLi9zdGFy dGFsbAord2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAKKworIyBXYWl0IGZvciBzcl9jaGVjayB0byBy dW4KK2VjaG8gIldhaXRpbmcgZm9yIG5lZ2F0aXZlIHZhbHVlIHRlc3QuLi4iCitmb3IgaSBpbiB7 MS4uMTB9OyBkbworICAgIGlmIGdyZXAgLXEgIm5lZ2F0aXZlIGRlbGF5IHZhbHVlLipvdGhlciB0 aGFuIC0xIiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJO ZWdhdGl2ZSB2YWx1ZSB3YXJuaW5nIGRldGVjdGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAg ICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBDaGVjayBmb3IgbmVnYXRp dmUgdmFsdWUgd2FybmluZworZ3JlcCAibmVnYXRpdmUgZGVsYXkgdmFsdWUuKm90aGVyIHRoYW4g LTEuKnRyZWF0aW5nIGFzIDAiIGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAk PyAhPSAwIF07dGhlbgorICAgIGVjaG8gZmFpbDogbmVnYXRpdmUgdmFsdWUgd2FybmluZyBub3Qg Zm91bmQKKyAgICAuL3NodXRkb3duYWxsCisgICAgZXhpdCAxCitmaQorCitlY2hvIG9rOiBuZWdh dGl2ZSB2YWx1ZSB2YWxpZGF0aW9uIHRlc3Qgc3VjY2VlZGVkCisuL3NodXRkb3duYWxsCisKKyMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyAiPT09IFRlc3QzOiBFeHRyZW1l bHkgbGFyZ2UgZGVsYXkgdmFsdWVzID09PSIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorc2VkIC1pLmJhayAic3xkZWxheV9jbWRfbmVnYXRpdmUuc2h8ZGVsYXlfY21kX2xhcmdl LnNofCIgZXRjL3BncG9vbC5jb25mCisKKy4vc3RhcnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFy dHVwCisKKyMgV2FpdCBmb3Igc3JfY2hlY2sgdG8gcnVuCitlY2hvICJXYWl0aW5nIGZvciBsYXJn ZSB2YWx1ZSB0ZXN0Li4uIgorZm9yIGkgaW4gezEuLjEwfTsgZG8KKyAgICBpZiBncmVwIC1xICJl eHRyZW1lbHkgbGFyZ2UgZGVsYXkgdmFsdWUiIGxvZy9wZ3Bvb2wubG9nIDI+L2Rldi9udWxsOyB0 aGVuCisgICAgICAgIGVjaG8gIkxhcmdlIHZhbHVlIHdhcm5pbmcgZGV0ZWN0ZWQgYWZ0ZXIgJHtp fSBzZWNvbmRzIgorICAgICAgICBicmVhaworICAgIGZpCisgICAgc2xlZXAgMQorZG9uZQorCisj IENoZWNrIGZvciBsYXJnZSB2YWx1ZSB3YXJuaW5nCitncmVwICJleHRyZW1lbHkgbGFyZ2UgZGVs YXkgdmFsdWUuKmZvciBub2RlIiBsb2cvcGdwb29sLmxvZyA+L2Rldi9udWxsIDI+JjEKK2lmIFsg JD8gIT0gMCBdO3RoZW4KKyAgICBlY2hvIGZhaWw6IGxhcmdlIHZhbHVlIHdhcm5pbmcgbm90IGZv dW5kCisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazogbGFyZ2Ug dmFsdWUgdmFsaWRhdGlvbiB0ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFsbAorCisjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gIj09PSBUZXN0NDogV3JvbmcgbnVtYmVy IG9mIG91dHB1dCB2YWx1ZXMgPT09IgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitzZWQgLWkuYmFrICJzfGRlbGF5X2NtZF9sYXJnZS5zaHxkZWxheV9jbWRfd3JvbmdfY291bnQu c2h8IiBldGMvcGdwb29sLmNvbmYKKworLi9zdGFydGFsbAord2FpdF9mb3JfcGdwb29sX3N0YXJ0 dXAKKworIyBXYWl0IGZvciBzcl9jaGVjayB0byBydW4KK2VjaG8gIldhaXRpbmcgZm9yIHdyb25n IGNvdW50IHRlc3QuLi4iCitmb3IgaSBpbiB7MS4uMTB9OyBkbworICAgIGlmIGdyZXAgLXEgInJl dHVybmVkLip2YWx1ZXMsIGV4cGVjdGVkLipyZXBsaWNhIiBsb2cvcGdwb29sLmxvZyAyPi9kZXYv bnVsbDsgdGhlbgorICAgICAgICBlY2hvICJXcm9uZyBjb3VudCB3YXJuaW5nIGRldGVjdGVkIGFm dGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2Rv bmUKKworIyBDaGVjayBmb3Igd3JvbmcgY291bnQgd2FybmluZworZ3JlcCAicmV0dXJuZWQuKnZh bHVlcywgZXhwZWN0ZWQuKnJlcGxpY2EuKkNvbW1hbmQgc2hvdWxkIG91dHB1dCBvbmUgZGVsYXkg dmFsdWUgcGVyIHJlcGxpY2EiIGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAk PyAhPSAwIF07dGhlbgorICAgIGVjaG8gZmFpbDogd3JvbmcgY291bnQgdmFsaWRhdGlvbiB0ZXN0 IG5vdCBmb3VuZAorICAgIC4vc2h1dGRvd25hbGwKKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6 IHdyb25nIGNvdW50IHZhbGlkYXRpb24gdGVzdCBzdWNjZWVkZWQKKy4vc2h1dGRvd25hbGwKKwor IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvICI9PT0gVGVzdDU6IE11bHRp cGxlIC0xIHZhbHVlcyA9PT0iCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Nh dCA+IGRlbGF5X2NtZF9tdWx0aV9kb3duLnNoIDw8ICdFT0YnCisjIS9iaW4vYmFzaAorIyBUZXN0 IG11bHRpcGxlIHJlcGxpY2FzIGRvd24KK2VjaG8gIi0xIC0xIgorRU9GCitjaG1vZCAreCBkZWxh eV9jbWRfbXVsdGlfZG93bi5zaAorCitzZWQgLWkuYmFrICJzfGRlbGF5X2NtZF93cm9uZ19jb3Vu dC5zaHxkZWxheV9jbWRfbXVsdGlfZG93bi5zaHwiIGV0Yy9wZ3Bvb2wuY29uZgorCisuL3N0YXJ0 YWxsCit3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisjIFdhaXQgZm9yIHNyX2NoZWNrIHRvIHJ1 bgorZWNobyAiV2FpdGluZyBmb3IgbXVsdGktZG93biB0ZXN0Li4uIgorZm9yIGkgaW4gezEuLjEw fTsgZG8KKyAgICBpZiBncmVwIC1xICJub2RlLipyZXBvcnRlZCBhcyBkb3duIGJ5IGV4dGVybmFs IGNvbW1hbmQiIGxvZy9wZ3Bvb2wubG9nIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8g Ik11bHRpcGxlIGRvd24gbm9kZXMgZGV0ZWN0ZWQgYWZ0ZXIgJHtpfSBzZWNvbmRzIgorICAgICAg ICBicmVhaworICAgIGZpCisgICAgc2xlZXAgMQorZG9uZQorCisjIENoZWNrIGZvciBtdWx0aXBs ZSAtMSBoYW5kbGluZworRE9XTl9DT1VOVD0kKGdyZXAgLWMgIm5vZGUuKnJlcG9ydGVkIGFzIGRv d24gYnkgZXh0ZXJuYWwgY29tbWFuZC4qZGVsYXkgLTEiIGxvZy9wZ3Bvb2wubG9nKQoraWYgWyAi JERPV05fQ09VTlQiIC1sdCAyIF07IHRoZW4KKyAgICBlY2hvIGZhaWw6IGV4cGVjdGVkIDIgZG93 biBub2RlIG1lc3NhZ2VzLCBmb3VuZCAkRE9XTl9DT1VOVAorICAgIC4vc2h1dGRvd25hbGwKKyAg ICBleGl0IDEKK2ZpCisKK2VjaG8gb2s6IG11bHRpcGxlIC0xIGhhbmRsaW5nIHRlc3Qgc3VjY2Vl ZGVkCisuL3NodXRkb3duYWxsCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ZWNobyAiPT09IFRlc3Q2OiBDb21tYW5kIHRpbWVvdXQgd2l0aCBkaWZmZXJlbnQgdGltZW91dCB2 YWx1ZXMgPT09IgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjYXQgPiBkZWxh eV9jbWRfdGltZW91dC5zaCA8PCAnRU9GJworIyEvYmluL2Jhc2gKKyMgQ29tbWFuZCB0aGF0IHRh a2VzIDUgc2Vjb25kcworc2xlZXAgNQorZWNobyAiMjUgNTAiCitFT0YKK2NobW9kICt4IGRlbGF5 X2NtZF90aW1lb3V0LnNoCisKKyMgVGVzdCB3aXRoIHRpbWVvdXQgc2hvcnRlciB0aGFuIGNvbW1h bmQgZHVyYXRpb24KK3NlZCAtaS5iYWsgInN8ZGVsYXlfY21kX211bHRpX2Rvd24uc2h8ZGVsYXlf Y21kX3RpbWVvdXQuc2h8IiBldGMvcGdwb29sLmNvbmYKK2VjaG8gInJlcGxpY2F0aW9uX2RlbGF5 X3NvdXJjZV90aW1lb3V0ID0gMiIgPj4gZXRjL3BncG9vbC5jb25mCisKKy4vc3RhcnRhbGwKK3dh aXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyMgV2FpdCBmb3IgdGltZW91dAorZWNobyAiV2FpdGlu ZyBmb3IgdGltZW91dCB0ZXN0ICgycyB0aW1lb3V0LCA1cyBjb21tYW5kKS4uLiIKK2ZvciBpIGlu IHsxLi4xMH07IGRvCisgICAgaWYgZ3JlcCAtcSAicmVwbGljYXRpb24gZGVsYXkgY29tbWFuZCB0 aW1lZCBvdXQgYWZ0ZXIgMiBzZWNvbmRzIiBsb2cvcGdwb29sLmxvZyAyPi9kZXYvbnVsbDsgdGhl bgorICAgICAgICBlY2hvICJUaW1lb3V0IGRldGVjdGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAg ICAgICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBDaGVjayBmb3IgdGlt ZW91dCBtZXNzYWdlCitncmVwICJyZXBsaWNhdGlvbiBkZWxheSBjb21tYW5kIHRpbWVkIG91dCBh ZnRlciAyIHNlY29uZHMiIGxvZy9wZ3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAh PSAwIF07dGhlbgorICAgIGVjaG8gZmFpbDogdGltZW91dCBub3QgZGV0ZWN0ZWQKKyAgICAuL3No dXRkb3duYWxsCisgICAgZXhpdCAxCitmaQorCitlY2hvIG9rOiB0aW1lb3V0IHRlc3Qgc3VjY2Vl ZGVkCisuL3NodXRkb3duYWxsCisKKyMgVGVzdCB3aXRoIHRpbWVvdXQgbG9uZ2VyIHRoYW4gY29t bWFuZCBkdXJhdGlvbgorc2VkIC1pLmJhayAic3xyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGlt ZW91dCA9IDJ8cmVwbGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQgPSAxMHwiIGV0Yy9wZ3Bv b2wuY29uZgorCisuL3N0YXJ0YWxsCit3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisjIFdhaXQg Zm9yIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uCitlY2hvICJXYWl0aW5nIGZvciBzdWNjZXNzZnVsIGV4 ZWN1dGlvbiAoMTBzIHRpbWVvdXQsIDVzIGNvbW1hbmQpLi4uIgorZm9yIGkgaW4gezEuLjE1fTsg ZG8KKyAgICBpZiBncmVwIC1xICJleGVjdXRpbmcgcmVwbGljYXRpb24gZGVsYXkgY29tbWFuZC4q ZGVsYXlfY21kX3RpbWVvdXQuc2giIGxvZy9wZ3Bvb2wubG9nIDI+L2Rldi9udWxsOyB0aGVuCisg ICAgICAgIGVjaG8gIkNvbW1hbmQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IGFmdGVyICR7aX0gc2Vj b25kcyIKKyAgICAgICAgYnJlYWsKKyAgICBmaQorICAgIHNsZWVwIDEKK2RvbmUKKworIyBTaG91 bGQgbm90IHRpbWVvdXQgdGhpcyB0aW1lCitpZiBncmVwIC1xICJyZXBsaWNhdGlvbiBkZWxheSBj b21tYW5kIHRpbWVkIG91dCIgbG9nL3BncG9vbC5sb2cgMj4vZGV2L251bGw7IHRoZW4KKyAgICBl Y2hvIGZhaWw6IGNvbW1hbmQgc2hvdWxkIG5vdCBoYXZlIHRpbWVkIG91dCB3aXRoIDEwcyB0aW1l b3V0CisgICAgLi9zaHV0ZG93bmFsbAorICAgIGV4aXQgMQorZmkKKworZWNobyBvazogZXh0ZW5k ZWQgdGltZW91dCB0ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFsbAorCisjIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gIj09PSBUZXN0NzogTWl4IG9mIHZhbGlkIGRlbGF5 cyBhbmQgLTEgPT09IgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjYXQgPiBk ZWxheV9jbWRfbWl4ZWQuc2ggPDwgJ0VPRicKKyMhL2Jpbi9iYXNoCisjIE9uZSByZXBsaWNhIHVw ICgyNW1zKSwgb25lIGRvd24gKC0xKQorZWNobyAiMjUgLTEiCitFT0YKK2NobW9kICt4IGRlbGF5 X2NtZF9taXhlZC5zaAorCitzZWQgLWkuYmFrICJzfGRlbGF5X2NtZF90aW1lb3V0LnNofGRlbGF5 X2NtZF9taXhlZC5zaHwiIGV0Yy9wZ3Bvb2wuY29uZgorCisuL3N0YXJ0YWxsCit3YWl0X2Zvcl9w Z3Bvb2xfc3RhcnR1cAorCisjIFdhaXQgZm9yIHNyX2NoZWNrCitlY2hvICJXYWl0aW5nIGZvciBt aXhlZCBkZWxheSB0ZXN0Li4uIgorZm9yIGkgaW4gezEuLjEwfTsgZG8KKyAgICBpZiBncmVwIC1x ICJub2RlLipyZXBvcnRlZCBhcyBkb3duIGJ5IGV4dGVybmFsIGNvbW1hbmQiIGxvZy9wZ3Bvb2wu bG9nIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gIk1peGVkIGRlbGF5IGhhbmRsaW5n IGRldGVjdGVkIGFmdGVyICR7aX0gc2Vjb25kcyIKKyAgICAgICAgYnJlYWsKKyAgICBmaQorICAg IHNsZWVwIDEKK2RvbmUKKworIyBTaG91bGQgbG9nIG9uZSAtMSBhbmQgcHJvY2VzcyBvbmUgbm9y bWFsIGRlbGF5CitncmVwICJub2RlLipyZXBvcnRlZCBhcyBkb3duIGJ5IGV4dGVybmFsIGNvbW1h bmQuKmRlbGF5IC0xIiBsb2cvcGdwb29sLmxvZyA+L2Rldi9udWxsIDI+JjEKK2lmIFsgJD8gIT0g MCBdO3RoZW4KKyAgICBlY2hvIGZhaWw6IC0xIG5vdCBsb2dnZWQKKyAgICAuL3NodXRkb3duYWxs CisgICAgZXhpdCAxCitmaQorCisjIFNob3VsZCBhbHNvIGxvZyB0aGUgbm9ybWFsIHJlcGxpY2Eg ZGVsYXkKK2dyZXAgIlJlcGxpY2F0aW9uIG9mIG5vZGUuKmV4dGVybmFsIGNvbW1hbmQiIGxvZy9w Z3Bvb2wubG9nID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAhPSAwIF07dGhlbgorICAgIGVjaG8g Ik5vdGU6IE5vcm1hbCByZXBsaWNhIGRlbGF5IGxvZ2dpbmcgbWF5IG5vdCBiZSB2aXNpYmxlIHdp dGggbG9nX3N0YW5kYnlfZGVsYXkgc2V0dGluZ3MiCitmaQorCitlY2hvIG9rOiBtaXhlZCBkZWxh eSBoYW5kbGluZyB0ZXN0IHN1Y2NlZWRlZAorLi9zaHV0ZG93bmFsbAorCitlY2hvICJBbGwgdmFs aWRhdGlvbiB0ZXN0cyBwYXNzZWQhIgorZXhpdCAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQotLSAKMi41MS4xCgo= --0000000000006653a406429ad489--