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 1wZ36M-000jPv-1T for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 08:55:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wZ36L-00AjhY-1E for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 08:55:25 +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 1wZ36K-00AjhK-1m for pgsql-hackers@lists.postgresql.org; Mon, 15 Jun 2026 08:55:25 +0000 Received: from mail-ej1-x62a.google.com ([2a00:1450:4864:20::62a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wZ36H-00000000Rxd-2ofb for pgsql-hackers@lists.postgresql.org; Mon, 15 Jun 2026 08:55:22 +0000 Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-bed2195323cso442943366b.1 for ; Mon, 15 Jun 2026 01:55:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781513719; cv=none; d=google.com; s=arc-20240605; b=GPMcMlSeZ2RUPocApy3EIdKMgLfp7HBnCpXyue7XS31164Il6dwRjgaJ+CGCmkjMUU Bxcyl6Hgm5aLLHRlrmuCwoGNnQHwBUk3diJUM1cl0Nc7tTfTlJXuKakCp747QUFqkOvX z2LGQzgflv3C6bEkIhzh/hOuki8xr80TjlWkudNWuhKEIXmmFgVh4AEgS+H9WoKCzsZs vxE6eQYRx6zZ/zYfa9kUqbHz0rd7nslio1Dc6YN2QNMCWxQmWHniNE6jpIuz4wGF12E9 WDqxxeqYJGV3w+e4//NPMoOrrMrrOYDIwt+gAhTWQNkvj+QC/TnTV5RayQl0DXe3gx26 S3cw== 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=fsXF9Z1t1HL3YvfwKtvuD+LIHPtLcWOMOI4uTitVWuc=; fh=N8ga1jcOtVUl225p1nuqFLYhZCRkIcEqWGvARKCGRU0=; b=FW9TTY5mxPI3x54ozGVFM7T9q/rthMv+xdxBfojnT9zwFuzM7zuYfLSgmkbc56IJJA 7PeKWxwBOd19TrU85wVeqczvmtpiB9jEvYkosaH+F5KcS1IRV7L+X5eAWk60H+GFwue7 dE4Z3pJ2UCHEP80FEifm00PTcQ5XQKyC5bIdGYiIywndR/R91I+1fCvuNC9v84rOB0TB fai+v0UepYwPtnR5p6EHEhQfQ4MhGAuNqKURqRrKkYmPJbhPP/nBZqnWpSvFj1NK/WTV LnSOCO9FN1qjBg7BfI97x7/URpyo9V34AX2VMJ1DlnGh3caqBuzdMVgrDxUlFqhIw2Ix WbnQ==; 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=enterprisedb.com; s=google; t=1781513719; x=1782118519; 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=fsXF9Z1t1HL3YvfwKtvuD+LIHPtLcWOMOI4uTitVWuc=; b=aySEkboijHvq+BAmIiJb7uCaKp79K2AZnCjGMFCSs2mLu/IFGyryVkq9HKhPehjmrO 7ixQ+fWRUTAPpV/pHO7nH5vftFoGe7T39rk7nFymyMmLPFvdJmsA5tTkDaRVDJazruKe 8lwY0FQWKYG3gCkPjkzoxZI6AUs6hyPx9GHX2qktCpITVODwsUB/pUqDHB7MRNQwC70o tm1n5MBmORKJEIMaejlqVTr4bPFAdWltbYslAzIvOIsNX29DcF7EuKKsor5C3rac1fw5 7CogdKP/z7IEjya/2Jcl6vTDCadn4imJdeKHOYWM2RCSWzcMWgiHAHSBCMztz06+mz9P O/DQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781513719; x=1782118519; 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=fsXF9Z1t1HL3YvfwKtvuD+LIHPtLcWOMOI4uTitVWuc=; b=H4e3ScQUmZm0XG96SG+mNzSisi1kMs0If0So7paxLCRf1vaI57sVX74uQx7YFbGGf0 A5e/kLLhFlUmHnXBd617mgFnSDG3BsppbPBASuKLg15qxX8AuGCPXuf3e64XcdfuE+5q HMY7+bzTDxEdk0U5xpsLRnfWnjuQOre6+oV3dm2rOlunicWgwZ66kJG7n8Gk3DE7wh2h sIIs9CO4+9X0XgfgbDpS7CM2Tnm9xpgq9DQFDf0fpgLaFGVGh4WCLWsdkBGceQHxzzPQ AITxHhlqjWiLYN4df98faF2PZqqsFI/yEvZzghxtYTNCZJUePYt0V3A+3qcxG6E5NU5V gxTQ== X-Forwarded-Encrypted: i=1; AFNElJ8K4RhmQVqTddfLpMXwkjimNuNKOsDGBuPDy6EIIAIJK4E60dceKUPFg/A/L/h6N1pQC7p1EkNKu9FADOA8@lists.postgresql.org X-Gm-Message-State: AOJu0YxDqWW6tl5Uh/OffSVXlnGsrPKZQEeF4OZdynz5/cdaHqGrLNtC X3UT9etBj6CnURiBBD2eWC4E4x7evkgKNTjD3jCzgcx7qwEbWcjYBnroHkW0/JeEvMWeB2ky5Vv U0qV04nT2//inDdDDknue+Xrk7A1y/en2VoCZw+0Dnsb1qL7Q07OxiVAv X-Gm-Gg: Acq92OFGX5/rQW6fVpi2WDiENBhck5dO6gWJ5MAIQJyd/mi5N/r3S1DFluA4Mlwx6ba 3HnA9ceQVKIW7xrhOtWeKMiySLx5PtLsjhicfyyNVrcJ+8OjuP3wJUa50tMD1yDhSc59wydPqHi rnVVkARoDYnWynxyEizKHhOZiTgjjeBGTlQRgxgbCblSbig4CdWIuqtnzzEkkXhJOcvGCVE2Y5G Z9B85iVFcjRvCgUl/eeaFvk5oAXsdsBFuzCfBGEK4iCVIYPmbjwo7zHBEZvBfRN+5E32hCoN7eF RJT1IPBC X-Received: by 2002:a17:906:8456:b0:bea:5ce6:4267 with SMTP id a640c23a62f3a-bfe29328ba4mr428658466b.35.1781513718783; Mon, 15 Jun 2026 01:55:18 -0700 (PDT) MIME-Version: 1.0 References: <20260612.101030.758511100369156914.horikyota.ntt@gmail.com> In-Reply-To: <20260612.101030.758511100369156914.horikyota.ntt@gmail.com> From: Akshay Joshi Date: Mon, 15 Jun 2026 14:25:06 +0530 X-Gm-Features: AVVi8CdEJ1Xs7OGu7M0ebyhUEe653Sox1z53wSdw-fZAF5l0hO7Ei48ymueB2zc Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: Kyotaro Horiguchi Cc: zsolt.parragi@percona.com, pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000005f3c45065446fca8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005f3c45065446fca8 Content-Type: multipart/alternative; boundary="0000000000005f3c43065446fca6" --0000000000005f3c43065446fca6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Kyotaro and Zsolt, I have incorporated the feedback provided by both of you. The v6 patch is updated and ready for your review. On Fri, Jun 12, 2026 at 6:40=E2=80=AFAM Kyotaro Horiguchi wrote: > Hello. > > At Thu, 11 Jun 2026 13:18:07 +0530, Akshay Joshi < > akshay.joshi@enterprisedb.com> wrote in > > Fixed the issue above. The v5 patch is ready for review/testing. > > I have not looked at the patch in detail, but I noticed that some > comments in the patch seem to contain non-ASCII characters. > > > * * re-emitting it as ALTER TABLE =E2=80=A6 ADD CONSTRAINT =E2=80=95 th= e column-emit > > I don't think that is recommended in PostgreSQL source comments, so > these should probably be replaced with plain ASCII equivalents. > > > https://www.postgresql.org/message-id/E1pnhhu-003D6z-Ki%40gemulon.postgre= sql.org > > For reference, I have attached the result of a quick search below. > > Regards, > > -- > Kyotaro Horiguchi > NTT Open Source Software Center > > > Quick search result: > > =3D=3D=3D=3D=3D=3D=3D=3D=3D > 20 matches in 18 lines for "[^[:ascii:]]" in buffer: > v5-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch > 565:+ * re-emitting it as ALTER TABLE =E2=80=A6 ADD CONSTRAINT =E2=80= =95 the > column-emit > 877:+ * defaults =E2=80=95 mirroring > pg_get_database_ddl's pattern of > 934:+ * SEQUENCE NAME = =E2=80=95 > omit when it matches the implicit > 1042:+ * Table-level CHECK constraints =E2=80=95 emitted inline= in the > CREATE TABLE > 1055:+ * applied per-column overrides =E2=80=95 DEFAULT, N= OT NULL, > and any locally > 1155:+ * pg_get_ruledef, pg_get_statisticsobjdef_string) =E2=80=95 whe= n > 1383:+ * ALTER TABLE qualname ALTER COLUMN col SET DEFAULT > expr =E2=80=95 one per > 1422:+ * ALTER TABLE qualname ALTER COLUMN col SET (...) = =E2=80=95 > one per column > 1468:+ * out-of-line by emit_local_constraints (the ALTER > TABLE =E2=80=A6 ADD > 1500:+ * ALTER TABLE =E2=80=A6 ADD CONSTRAINT for each > locally-defined constraint > 1617:+ * ALTER TABLE qualname REPLICA IDENTITY =E2=80=A6 = =E2=80=95 emitted > only when the > 1749:+ * (#if 0) =E2=80=95 they will become a single helper call once = the > standalone > 1830:+ * Pre-compute "." too =E2=80=95 the always-quali= fied > helpers > 1884:+ * Triggers and row-level security policies =E2=80=95 dis= abled > until the > 2680:+-- quoting (its prefix starts with "). Both forms of the prefix= =E2=80=95 > 2681:+-- bare-lowercase and quoted =E2=80=95 must be stripped from out= er > 3197:+-- quoting (its prefix starts with "). Both forms of the prefix= =E2=80=95 > 3198:+-- bare-lowercase and quoted =E2=80=95 must be stripped from out= er > =3D=3D=3D=3D=3D=3D=3D=3D=3D > --0000000000005f3c43065446fca6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Kyotaro and Zsolt,

I have incorporat= ed the feedback provided by both of you.
The v6 patch is updated and rea= dy for your review.

On Fri, Jun 12, 2026 at 6:40= =E2=80=AFAM Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote:
Hello.

At Thu, 11 Jun 2026 13:18:07 +0530, Akshay Joshi <akshay.joshi@enterprisedb.com<= /a>> wrote in
> Fixed the issue above. The v5 patch is ready for review/testing.

I have not looked at the patch in detail, but I noticed that some
comments in the patch seem to contain non-ASCII characters.

> * * re-emitting it as ALTER TABLE =E2=80=A6 ADD CONSTRAINT =E2=80=95 t= he column-emit

I don't think that is recommended in PostgreSQL source comments, so
these should probably be replaced with plain ASCII equivalents.

https://www.postgres= ql.org/message-id/E1pnhhu-003D6z-Ki%40gemulon.postgresql.org

For reference, I have attached the result of a quick search below.

Regards,

--
Kyotaro Horiguchi
NTT Open Source Software Center


Quick search result:

=3D=3D=3D=3D=3D=3D=3D=3D=3D
20 matches in 18 lines for "[^[:ascii:]]" in buffer: v5-0001-Add-= pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch
=C2=A0 =C2=A0 565:+ * re-emitting it as ALTER TABLE =E2=80=A6 ADD CONSTRAIN= T =E2=80=95 the column-emit
=C2=A0 =C2=A0 877:+=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 * defaults =E2=80= =95 mirroring pg_get_database_ddl's pattern of
=C2=A0 =C2=A0 934:+=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 * SEQUENCE NAME =E2=80=95 omit when = it matches the implicit
=C2=A0 =C2=A01042:+=C2=A0 =C2=A0 =C2=A0 =C2=A0 * Table-level CHECK constrai= nts =E2=80=95 emitted inline in the CREATE TABLE
=C2=A0 =C2=A01055:+ *=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0applie= d per-column overrides =E2=80=95 DEFAULT, NOT NULL, and any locally
=C2=A0 =C2=A01155:+ * pg_get_ruledef, pg_get_statisticsobjdef_string) =E2= =80=95 when
=C2=A0 =C2=A01383:+ *=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ALTER = TABLE qualname ALTER COLUMN col SET DEFAULT expr =E2=80=95 one per
=C2=A0 =C2=A01422:+ *=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ALTER = TABLE qualname ALTER COLUMN col SET (...) =E2=80=95 one per column
=C2=A0 =C2=A01468:+ *=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0out-of= -line by emit_local_constraints (the ALTER TABLE =E2=80=A6 ADD
=C2=A0 =C2=A01500:+ *=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ALTER = TABLE =E2=80=A6 ADD CONSTRAINT for each locally-defined constraint
=C2=A0 =C2=A01617:+ *=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ALTER = TABLE qualname REPLICA IDENTITY =E2=80=A6 =E2=80=95 emitted only when the =C2=A0 =C2=A01749:+ * (#if 0) =E2=80=95 they will become a single helper ca= ll once the standalone
=C2=A0 =C2=A01830:+=C2=A0 =C2=A0 =C2=A0 =C2=A0 * Pre-compute "<sche= ma>." too =E2=80=95 the always-qualified helpers
=C2=A0 =C2=A01884:+=C2=A0 =C2=A0 =C2=A0 =C2=A0 * Triggers and row-level sec= urity policies =E2=80=95 disabled until the
=C2=A0 =C2=A02680:+-- quoting (its prefix starts with ").=C2=A0 Both f= orms of the prefix =E2=80=95
=C2=A0 =C2=A02681:+-- bare-lowercase and quoted =E2=80=95 must be stripped = from outer
=C2=A0 =C2=A03197:+-- quoting (its prefix starts with ").=C2=A0 Both f= orms of the prefix =E2=80=95
=C2=A0 =C2=A03198:+-- bare-lowercase and quoted =E2=80=95 must be stripped = from outer
=3D=3D=3D=3D=3D=3D=3D=3D=3D
--0000000000005f3c43065446fca6-- --0000000000005f3c45065446fca8 Content-Type: application/octet-stream; name="v6-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v6-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqez94ut0 RnJvbSA5ODg1NmQ3ODFhN2Q0NjllOWI3NDgzMGM5OTY2OTQ2YjBhNTZiNzFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHY2XSBBZGQgcGdfZ2V0X3RhYmxlX2RkbCgpIHRvIHJlY29uc3RydWN0IENSRUFURSBUQUJM RQogc3RhdGVtZW50cwoKVGhlIGZ1bmN0aW9uIHJlY29uc3RydWN0cyB0aGUgQ1JFQVRFIFRBQkxF IHN0YXRlbWVudCBmb3IgYW4gb3JkaW5hcnkgb3IKcGFydGl0aW9uZWQgdGFibGUsIGZvbGxvd2Vk IGJ5IHRoZSBBTFRFUiBUQUJMRSAvIENSRUFURSBJTkRFWCAvCkNSRUFURSBSVUxFIC8gQ1JFQVRF IFNUQVRJU1RJQ1Mgc3RhdGVtZW50cyBuZWVkZWQgdG8gcmVzdG9yZSBpdHMgZnVsbApkZWZpbml0 aW9uLiAgRWFjaCBzdGF0ZW1lbnQgaXMgcmV0dXJuZWQgYXMgYSBzZXBhcmF0ZSByb3cuCgpTdXBw b3J0ZWQgcGVyLWNvbHVtbiBmZWF0dXJlczogZGF0YSB0eXBlIHdpdGggdHlwZSBtb2RpZmllcnMs IENPTExBVEUsClNUT1JBR0UsIENPTVBSRVNTSU9OIChwZ2x6IC8gbHo0KSwgR0VORVJBVEVEIEFM V0FZUyBBUyAoZXhwcikKU1RPUkVEL1ZJUlRVQUwsIEdFTkVSQVRFRCBBTFdBWVN8QlkgREVGQVVM VCBBUyBJREVOVElUWSAod2l0aCBzZXF1ZW5jZQpvcHRpb25zKSwgREVGQVVMVCwgTk9UIE5VTEws IGFuZCBwZXItY29sdW1uIGF0dG9wdGlvbnMgZW1pdHRlZCBhcwpBTFRFUiBDT0xVTU4gU0VUICgu Li4pLgoKU3VwcG9ydGVkIHRhYmxlLWxldmVsIGZlYXR1cmVzOiBVTkxPR0dFRCwgSU5IRVJJVFMs IFBBUlRJVElPTiBCWSAoUkFOR0UKLyBMSVNUIC8gSEFTSCBwYXJlbnRzKSwgUEFSVElUSU9OIE9G IHBhcmVudCBGT1IgVkFMVUVTIChGUk9NL1RPLCBXSVRICm1vZHVsdXMvcmVtYWluZGVyLCBERUZB VUxUKSwgVVNJTkcgdGFibGUgYWNjZXNzIG1ldGhvZCwgV0lUSAoocmVsb3B0aW9ucyksIFRBQkxF U1BBQ0UsIGFuZCBpbmxpbmUgQ0hFQ0sgY29uc3RyYWludHMgaW4gdGhlCkNSRUFURSBUQUJMRSBi b2R5LgoKU3VwcG9ydGVkIHN1Yi1vYmplY3RzIChyZS11c2luZyBleGlzdGluZyBkZXBhcnNlIGhl bHBlcnMgZnJvbQpydWxldXRpbHMuYyk6IGluZGV4ZXMgdmlhIHBnX2dldF9pbmRleGRlZl9zdHJp bmcsIGNvbnN0cmFpbnRzCihQUklNQVJZIEtFWSwgVU5JUVVFLCBGT1JFSUdOIEtFWSwgRVhDTFVE RSwgbmFtZWQgTk9UIE5VTEwpIHZpYQpwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kLCBydWxl cyB2aWEgcGdfZ2V0X3J1bGVkZWYsIGV4dGVuZGVkCnN0YXRpc3RpY3MgdmlhIHBnX2dldF9zdGF0 aXN0aWNzb2JqZGVmX3N0cmluZywgUkVQTElDQSBJREVOVElUWQpOT1RISU5HL0ZVTEwvVVNJTkcg SU5ERVgsIEFMVEVSIFRBQkxFIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VDVVJJVFksCmFuZCBj aGlsZC1sb2NhbCBERUZBVUxUIG92ZXJyaWRlcyBvbiBpbmhlcml0YW5jZS9wYXJ0aXRpb24gY2hp bGRyZW4uCgpEZWZhdWx0IG9taXNzaW9uIGNvbnZlbnRpb246IGV2ZXJ5IG9wdGlvbmFsIGNsYXVz ZSBpcyBkcm9wcGVkIHdoZW4gaXRzCnZhbHVlIGVxdWFscyB3aGF0IHRoZSBzeXN0ZW0gd291bGQg cmVhcHBseSBvbiByb3VuZC10cmlwLCBpbmNsdWRpbmcKdHlwZS1kZWZhdWx0IENPTExBVEUsIHBl ci10eXBlIFNUT1JBR0UsIHRoZSBhdXRvLWdlbmVyYXRlZCBpZGVudGl0eQpzZXF1ZW5jZSBuYW1l IGFuZCBwYXJhbWV0ZXIgZGVmYXVsdHMsIGhlYXAgYWNjZXNzIG1ldGhvZCwgZGVmYXVsdApSRVBM SUNBIElERU5USVRZLCBkaXNhYmxlZCBSTFMgdG9nZ2xlcywgZW1wdHkgcmVsb3B0aW9ucywgYW5k IHRoZQpkZWZhdWx0IHRhYmxlc3BhY2UuCgpBIHJlZ3Jlc3Npb24gdGVzdCB1bmRlciBzcmMvdGVz dC9yZWdyZXNzIGNvdmVycyBvcmRpbmFyeSB0YWJsZXMsCmlkZW50aXR5IChkZWZhdWx0IGFuZCBj dXN0b20gc2VxdWVuY2Ugb3B0aW9ucyksIGdlbmVyYXRlZCBjb2x1bW5zLApTVE9SQUdFL0NPTVBS RVNTSU9OLCBjb25zdHJhaW50cyAoQ0hFQ0svVU5JUVVFL0ZLIHdpdGggZGVmZXJyYWJsZSksCmZ1 bmN0aW9uYWwgYW5kIHBhcnRpYWwgaW5kZXhlcywgaW5oZXJpdGFuY2UgYW5kIHBhcnRpdGlvbmlu ZywKcGFydGl0aW9uIGNoaWxkcmVuIHdpdGggRk9SIFZBTFVFUyBGUk9NL1RPLCBXSVRIIG1vZHVs dXMvcmVtYWluZGVyLCBhbmQKREVGQVVMVCwgcnVsZXMsIGV4dGVuZGVkIHN0YXRpc3RpY3MsIFJM UyB0b2dnbGVzLCBSRVBMSUNBIElERU5USVRZLApVTkxPR0dFRCB3aXRoIHJlbG9wdGlvbnMsIHBl ci1jb2x1bW4gYXR0b3B0aW9ucywgY2hpbGQgREVGQVVMVApvdmVycmlkZXMsIHByZXR0eSBtb2Rl LCBvd25lcj1mYWxzZSwgYW5kIHRoZSBlcnJvciBwYXRocyBmb3Igdmlld3MsCnNlcXVlbmNlcywg TlVMTCwgdW5rbm93biBvcHRpb25zLCBhbmQgb2RkLXZhcmlhZGljIGFyZ3VtZW50IGNvdW50cy4K CkF1dGhvcjogQWtzaGF5IEpvc2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2 aWV3ZWQtYnk6IE1hcmNvcyBQZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5 OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpSZXZpZXdlZC1ieTog S3lvdGFybyBIb3JpZ3VjaGkgPGhvcmlreW90YS5udHRAZ21haWwuY29tPgotLS0KIGRvYy9zcmMv c2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sICAgICAgICAgICAgICB8ICAgNzkgKwogc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jICAgICAgICAgICAgIHwgICA5MyArCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCAgIDMwICstCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvZGRsdXRpbHMuYyAgICAgICAgICAgICAgfCAxNzI0ICsrKysrKysrKysrKysr KysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmggICAgICAgICAgICAgfCAgICAx ICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgIDcg Kwogc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmggICAgICAgICAgICAgIHwgICAgMyAr CiAuLi4vcmVncmVzcy9leHBlY3RlZC9wZ19nZXRfdGFibGVfZGRsLm91dCAgICAgfCAgNzQyICsr KysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgICB8ICAg IDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90YWJsZV9kZGwuc3FsICAgICB8ICA0 NDAgKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDMxMTggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BnX2dl dF90YWJsZV9kZGwub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwv cGdfZ2V0X3RhYmxlX2RkbC5zcWwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5j LWluZm8uc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCmluZGV4IDhmZmE3 ZTgzMjc1Li4zODQyNDJlZmI4NiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1p bmZvLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKQEAgLTM5NDcs NiArMzk0Nyw4NSBAQCBhY2wgICAgICB8IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289 ci9wb3N0Z3Jlc30KICAgICAgICAgPGxpdGVyYWw+VEFCTEVTUEFDRTwvbGl0ZXJhbD4uCiAgICAg ICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgPGVu dHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4K KyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF90YWJsZV9kZGw8 L3ByaW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0 X3RhYmxlX2RkbDwvZnVuY3Rpb24+CisgICAgICAgICggPHBhcmFtZXRlcj50YWJsZTwvcGFyYW1l dGVyPiA8dHlwZT5yZWdjbGFzczwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwgPGxpdGVyYWw+ VkFSSUFESUM8L2xpdGVyYWw+IDxwYXJhbWV0ZXI+b3B0aW9uczwvcGFyYW1ldGVyPgorICAgICAg ICA8dHlwZT50ZXh0PC90eXBlPiA8L29wdGlvbmFsPiApCisgICAgICAgIDxyZXR1cm52YWx1ZT5z ZXRvZiB0ZXh0PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIFJlY29uc3RydWN0cyB0aGUgPGNvbW1hbmQ+Q1JFQVRFIFRBQkxFPC9jb21tYW5kPiBz dGF0ZW1lbnQgZm9yIHRoZQorICAgICAgICBzcGVjaWZpZWQgb3JkaW5hcnkgb3IgcGFydGl0aW9u ZWQgdGFibGUsIGZvbGxvd2VkIGJ5IHRoZQorICAgICAgICA8Y29tbWFuZD5BTFRFUiBUQUJMRTwv Y29tbWFuZD4sIDxjb21tYW5kPkNSRUFURSBJTkRFWDwvY29tbWFuZD4sCisgICAgICAgIDxjb21t YW5kPkNSRUFURSBSVUxFPC9jb21tYW5kPiwgYW5kIDxjb21tYW5kPkNSRUFURSBTVEFUSVNUSUNT PC9jb21tYW5kPgorICAgICAgICBzdGF0ZW1lbnRzIG5lZWRlZCB0byByZWNyZWF0ZSB0aGUgdGFi bGUncyBjb2x1bW5zLCBjb25zdHJhaW50cywKKyAgICAgICAgaW5kZXhlcywgcnVsZXMsIGV4dGVu ZGVkIHN0YXRpc3RpY3MsIGFuZCByb3ctbGV2ZWwgc2VjdXJpdHkgZmxhZ3MuCisgICAgICAgIElu aGVyaXRlZCBjb2x1bW5zIGFuZCBjb25zdHJhaW50cyBhcmUgZW1pdHRlZCBieSB0aGUgcGFyZW50 IHRhYmxlJ3MKKyAgICAgICAgRERMIGFuZCBhcmUgbm90IGR1cGxpY2F0ZWQgb24gaW5oZXJpdGFu Y2UgY2hpbGRyZW4gb3IgcGFydGl0aW9ucy4KKyAgICAgICAgRWFjaCBzdGF0ZW1lbnQgaXMgcmV0 dXJuZWQgYXMgYSBzZXBhcmF0ZSByb3cuCisgICAgICAgIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBh cmUgc3VwcG9ydGVkOgorICAgICAgICA8bGl0ZXJhbD5wcmV0dHk8L2xpdGVyYWw+IChib29sZWFu KSBmb3IgZm9ybWF0dGVkIG91dHB1dCwKKyAgICAgICAgPGxpdGVyYWw+b3duZXI8L2xpdGVyYWw+ IChib29sZWFuKSB0byBpbmNsdWRlIHRoZQorICAgICAgICA8Y29tbWFuZD5BTFRFUiBUQUJMRSAu Li4gT1dORVIgVE88L2NvbW1hbmQ+IHN0YXRlbWVudCwKKyAgICAgICAgPGxpdGVyYWw+dGFibGVz cGFjZTwvbGl0ZXJhbD4gKGJvb2xlYW4pIHRvIGluY2x1ZGUgdGhlCisgICAgICAgIDxsaXRlcmFs PlRBQkxFU1BBQ0U8L2xpdGVyYWw+IGNsYXVzZSBvbiB0aGUKKyAgICAgICAgPGNvbW1hbmQ+Q1JF QVRFIFRBQkxFPC9jb21tYW5kPiBzdGF0ZW1lbnQsIGFuZCBhIGZhbWlseSBvZgorICAgICAgICA8 bGl0ZXJhbD5pbmNsdWRlc188cmVwbGFjZWFibGU+Y2F0ZWdvcnk8L3JlcGxhY2VhYmxlPjwvbGl0 ZXJhbD4KKyAgICAgICAgYm9vbGVhbnMgdGhhdCBnYXRlIGVtaXNzaW9uIG9mIG9wdGlvbmFsIHN1 Yi1vYmplY3RzOgorICAgICAgICA8bGl0ZXJhbD5pbmNsdWRlc19pbmRleGVzPC9saXRlcmFsPiwK KyAgICAgICAgPGxpdGVyYWw+aW5jbHVkZXNfY29uc3RyYWludHM8L2xpdGVyYWw+LAorICAgICAg ICA8bGl0ZXJhbD5pbmNsdWRlc19ydWxlczwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPmlu Y2x1ZGVzX3N0YXRpc3RpY3M8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5pbmNsdWRlc190 cmlnZ2VyczwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPmluY2x1ZGVzX3BvbGljaWVzPC9s aXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+aW5jbHVkZXNfcmxzPC9saXRlcmFsPiAodGhlCisg ICAgICAgIDxjb21tYW5kPkVOQUJMRTwvY29tbWFuZD4vPGNvbW1hbmQ+Rk9SQ0UgUk9XIExFVkVM IFNFQ1VSSVRZPC9jb21tYW5kPgorICAgICAgICB0b2dnbGVzKSwgYW5kCisgICAgICAgIDxsaXRl cmFsPmluY2x1ZGVzX3JlcGxpY2FfaWRlbnRpdHk8L2xpdGVyYWw+LiAgRWFjaCBvZiB0aGVzZQor ICAgICAgICBkZWZhdWx0cyB0byA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPi4gIFRoZQorICAgICAg ICA8bGl0ZXJhbD5pbmNsdWRlc19wYXJ0aXRpb248L2xpdGVyYWw+IG9wdGlvbiwgd2hpY2ggZGVm YXVsdHMgdG8KKyAgICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCBjb250cm9scyB3aGV0 aGVyIHRoZSBEREwgZm9yIHBhcnRpdGlvbgorICAgICAgICBjaGlsZHJlbiBpcyBhcHBlbmRlZCBh ZnRlciBhIHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudC4KKyAgICAgICA8L3BhcmE+CisgICAgICAg PHBhcmE+CisgICAgICAgIFRoZSA8bGl0ZXJhbD5zY2hlbWFfcXVhbGlmaWVkPC9saXRlcmFsPiBv cHRpb24gKGJvb2xlYW4sIGRlZmF1bHQKKyAgICAgICAgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4p IGNvbnRyb2xzIHdoZXRoZXIgdGhlIHRhcmdldCB0YWJsZSdzIG93bgorICAgICAgICBzY2hlbWEg aXMgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZCBEREwuICBXaGVuIHNldCB0bworICAgICAgICA8 bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIHRoZSB0YWJsZSBuYW1lIGlzIGVtaXR0ZWQgdW5xdWFs aWZpZWQKKyAgICAgICAgaW4gdGhlIDxjb21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gYW5k IGV2ZXJ5IHN1YnNlcXVlbnQKKyAgICAgICAgPGNvbW1hbmQ+QUxURVIgVEFCTEU8L2NvbW1hbmQ+ LCA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+LAorICAgICAgICA8Y29tbWFuZD5DUkVB VEUgUlVMRTwvY29tbWFuZD4sIGFuZAorICAgICAgICA8Y29tbWFuZD5DUkVBVEUgU1RBVElTVElD UzwvY29tbWFuZD4gc3RhdGVtZW50LiAgUmVmZXJlbmNlcyB0bworICAgICAgICBvYmplY3RzIGlu IHRoZSBzYW1lIHNjaGVtYSBhcyB0aGUgdGFyZ2V0IHRhYmxlIChpbmhlcml0YW5jZQorICAgICAg ICBwYXJlbnRzLCBwYXJ0aXRpb24gcGFyZW50cywgaWRlbnRpdHkgc2VxdWVuY2VzLCBhbmQgYW55 CisgICAgICAgIHNhbWUtc2NoZW1hIG9iamVjdCB0aGUgZGVwYXJzZSBoZWxwZXJzIGhhcHBlbiB0 byBtZW50aW9uKSBhcmUKKyAgICAgICAgYWxzbyBlbWl0dGVkIHVucXVhbGlmaWVkLCBzbyB0aGUg c2NyaXB0IGNhbiBiZSByZXBsYXllZCB1bmRlciBhCisgICAgICAgIGRpZmZlcmVudCA8dmFybmFt ZT5zZWFyY2hfcGF0aDwvdmFybmFtZT4gdG8gcmVjcmVhdGUgdGhlIHRhYmxlCisgICAgICAgIGlu IGFub3RoZXIgc2NoZW1hLiAgQ3Jvc3Mtc2NoZW1hIHJlZmVyZW5jZXMgKGZvciBleGFtcGxlIGEK KyAgICAgICAgZm9yZWlnbiBrZXkgdGFyZ2V0IGluIGEgZGlmZmVyZW50IHNjaGVtYSkgcmVtYWlu IHF1YWxpZmllZCBmb3IKKyAgICAgICAgY29ycmVjdG5lc3MuCisgICAgICAgPC9wYXJhPgorICAg ICAgIDxwYXJhPgorICAgICAgICBBbGwgdGhyZWUgZm9ybXMgb2YgPGNvbW1hbmQ+Q1JFQVRFIFRB QkxFPC9jb21tYW5kPiBhcmUgc3VwcG9ydGVkOgorICAgICAgICB0aGUgb3JkaW5hcnkgY29sdW1u LWxpc3QgZm9ybSwgdGhlIHR5cGVkLXRhYmxlIGZvcm0KKyAgICAgICAgKDxsaXRlcmFsPk9GIDxy ZXBsYWNlYWJsZT50eXBlX25hbWU8L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD4sIHdpdGgKKyAgICAg ICAgcGVyLWNvbHVtbiA8bGl0ZXJhbD5XSVRIIE9QVElPTlM8L2xpdGVyYWw+IG92ZXJyaWRlcyBm b3IgbG9jYWwKKyAgICAgICAgZGVmYXVsdHMsIDxsaXRlcmFsPk5PVCBOVUxMPC9saXRlcmFsPiwg YW5kIDxsaXRlcmFsPkNIRUNLPC9saXRlcmFsPgorICAgICAgICBjb25zdHJhaW50cyksIGFuZCB0 aGUgPGxpdGVyYWw+UEFSVElUSU9OIE9GPC9saXRlcmFsPiBmb3JtLgorICAgICAgICA8bGl0ZXJh bD5URU1QT1JBUlk8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5VTkxPR0dFRDwvbGl0ZXJhbD4KKyAg ICAgICAgcGVyc2lzdGVuY2UgbW9kZXMgYXJlIGVtaXR0ZWQgZnJvbQorICAgICAgICA8c3RydWN0 ZmllbGQ+cmVscGVyc2lzdGVuY2U8L3N0cnVjdGZpZWxkPi4gIEZvciB0ZW1wb3JhcnkgdGFibGVz CisgICAgICAgIHJlZ2lzdGVyZWQgaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbiwgdGhlCisgICAgICAg IDxsaXRlcmFsPk9OIENPTU1JVCBERUxFVEUgUk9XUzwvbGl0ZXJhbD4gYW5kCisgICAgICAgIDxs aXRlcmFsPk9OIENPTU1JVCBEUk9QPC9saXRlcmFsPiBjbGF1c2VzIGFyZSBlbWl0dGVkOyB0aGUg ZGVmYXVsdAorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgUFJFU0VSVkUgUk9XUzwvbGl0ZXJh bD4gaXMgb21pdHRlZC4KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgogICAg ICA8L3Rib2R5PgogICAgIDwvdGdyb3VwPgogICAgPC90YWJsZT4KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5o ZXJpdHMuYwppbmRleCA0Yjk4MDJhYWZjYy4uODk3MTUxYmQ2ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X2luaGVyaXRzLmMKQEAgLTIzNiw2ICsyMzYsOTkgQEAgZmluZF9pbmhlcml0YW5jZV9jaGlsZHJl bl9leHRlbmRlZChPaWQgcGFyZW50cmVsSWQsIGJvb2wgb21pdF9kZXRhY2hlZCwKIH0KIAogCisv KgorICogZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzCisgKgorICogUmV0dXJucyBhIGxpc3QgY29u dGFpbmluZyB0aGUgT0lEcyBvZiBhbGwgcmVsYXRpb25zIHRoYXQgdGhlIHJlbGF0aW9uIHdpdGgK KyAqIE9JRCAncmVsaWQnIGluaGVyaXRzICpkaXJlY3RseSogZnJvbSwgaW4gaW5oc2Vxbm8gb3Jk ZXIgKHRoZSBvcmRlciBpbiB3aGljaAorICogdGhleSBzaG91bGQgYXBwZWFyIGluIGFuIElOSEVS SVRTIGNsYXVzZSkuCisgKgorICogVGhlIHNwZWNpZmllZCBsb2NrIHR5cGUgaXMgYWNxdWlyZWQg b24gZWFjaCBwYXJlbnQgcmVsYXRpb24gKGJ1dCBub3Qgb24gdGhlCisgKiBnaXZlbiByZWw7IGNh bGxlciBzaG91bGQgYWxyZWFkeSBoYXZlIGxvY2tlZCBpdCkuICBJZiBsb2NrbW9kZSBpcyBOb0xv Y2sKKyAqIHRoZW4gbm8gbG9ja3MgYXJlIGFjcXVpcmVkLCBidXQgY2FsbGVyIG11c3QgYmV3YXJl IG9mIHJhY2UgY29uZGl0aW9ucworICogYWdhaW5zdCBwb3NzaWJsZSBEUk9QcyBvZiBwYXJlbnQg cmVsYXRpb25zLgorICoKKyAqIFBhcnRpdGlvbiBjaGlsZHJlbiBhbHNvIGhhdmUgYSBwZ19pbmhl cml0cyBlbnRyeSBwb2ludGluZyB0byB0aGUKKyAqIHBhcnRpdGlvbmVkIHBhcmVudDsgY2FsbGVy cyB0aGF0IGRpc3Rpbmd1aXNoIElOSEVSSVRTIGZyb20gUEFSVElUSU9OIE9GCisgKiBtdXN0IGNo ZWNrIHJlbGlzcGFydGl0aW9uIHRoZW1zZWx2ZXMuCisgKi8KK0xpc3QgKgorZmluZF9pbmhlcml0 YW5jZV9wYXJlbnRzKE9pZCByZWxpZCwgTE9DS01PREUgbG9ja21vZGUpCit7CisJTGlzdAkgICAq bGlzdCA9IE5JTDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNj YW5LZXlEYXRhIGtleVsxXTsKKwlIZWFwVHVwbGUJaW5oZXJpdHNUdXBsZTsKKwlPaWQJCQlpbmhw YXJlbnQ7CisJT2lkCQkgICAqb2lkYXJyOworCWludAkJCW1heG9pZHMsCisJCQkJbnVtb2lkcywK KwkJCQlpOworCisJLyoKKwkgKiBTY2FuIHBnX2luaGVyaXRzIHZpYSB0aGUgKGluaHJlbGlkLCBp bmhzZXFubykgaW5kZXggc28gdGhhdCB0aGUgcm93cworCSAqIGNvbWUgb3V0IGluIGluaHNlcW5v IG9yZGVyLCB3aGljaCBpcyB0aGUgb3JkZXIgcmVxdWlyZWQgZm9yIHRoZQorCSAqIElOSEVSSVRT IGNsYXVzZS4KKwkgKi8KKwltYXhvaWRzID0gODsKKwlvaWRhcnIgPSAoT2lkICopIHBhbGxvYyht YXhvaWRzICogc2l6ZW9mKE9pZCkpOworCW51bW9pZHMgPSAwOworCisJcmVsYXRpb24gPSB0YWJs ZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCVNjYW5LZXlJ bml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxpZCwKKwkJCQlCVEVxdWFs U3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxpZCkpOwor CisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWxhdGlvbiwgSW5oZXJpdHNSZWxpZFNlcW5v SW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisKKwl3aGlsZSAoKGluaGVy aXRzVHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSAhPSBOVUxMKQorCXsKKwkJaW5ocGFy ZW50ID0gKChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QoaW5oZXJpdHNUdXBsZSkpLT5pbmhw YXJlbnQ7CisJCWlmIChudW1vaWRzID49IG1heG9pZHMpCisJCXsKKwkJCW1heG9pZHMgKj0gMjsK KwkJCW9pZGFyciA9IChPaWQgKikgcmVwYWxsb2Mob2lkYXJyLCBtYXhvaWRzICogc2l6ZW9mKE9p ZCkpOworCQl9CisJCW9pZGFycltudW1vaWRzKytdID0gaW5ocGFyZW50OworCX0KKworCXN5c3Rh YmxlX2VuZHNjYW4oc2Nhbik7CisKKwl0YWJsZV9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVM b2NrKTsKKworCS8qCisJICogQWNxdWlyZSBsb2NrcyBhbmQgYnVpbGQgdGhlIHJlc3VsdCBsaXN0 LiAgVW5saWtlCisJICogZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbiB3ZSBkbyAqbm90KiBzb3J0 IGJ5IE9JRDogY2FsbGVycyBuZWVkIHRoZQorCSAqIHNlcW5vLW9yZGVyZWQgdHJhdmVyc2FsLgor CSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1vaWRzOyBpKyspCisJeworCQlpbmhwYXJlbnQgPSBv aWRhcnJbaV07CisKKwkJaWYgKGxvY2ttb2RlICE9IE5vTG9jaykKKwkJeworCQkJTG9ja1JlbGF0 aW9uT2lkKGluaHBhcmVudCwgbG9ja21vZGUpOworCisJCQlpZiAoIVNlYXJjaFN5c0NhY2hlRXhp c3RzMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0oaW5ocGFyZW50KSkpCisJCQl7CisJCQkJVW5s b2NrUmVsYXRpb25PaWQoaW5ocGFyZW50LCBsb2NrbW9kZSk7CisJCQkJY29udGludWU7CisJCQl9 CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZF9vaWQobGlzdCwgaW5ocGFyZW50KTsKKwl9CisKKwlw ZnJlZShvaWRhcnIpOworCisJcmV0dXJuIGxpc3Q7Cit9CisKKwogLyoKICAqIGZpbmRfYWxsX2lu aGVyaXRvcnMgLQogICoJCVJldHVybnMgYSBsaXN0IG9mIHJlbGF0aW9uIE9JRHMgaW5jbHVkaW5n IHRoZSBnaXZlbiByZWwgcGx1cwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCAzOGY5ZmZj ZDA0Zi4uN2QyNTc1YzA1ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC03MzksNyAr NzM5LDYgQEAgc3RhdGljIE9iamVjdEFkZHJlc3MgQVRFeGVjU2V0Q29tcHJlc3Npb24oUmVsYXRp b24gcmVsLAogCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqY29sdW1uLCBOb2RlICpuZXdWYWx1ZSwg TE9DS01PREUgbG9ja21vZGUpOwogCiBzdGF0aWMgdm9pZCBpbmRleF9jb3B5X2RhdGEoUmVsYXRp b24gcmVsLCBSZWxGaWxlTG9jYXRvciBuZXdybG9jYXRvcik7Ci1zdGF0aWMgY29uc3QgY2hhciAq c3RvcmFnZV9uYW1lKGNoYXIgYyk7CiAKIHN0YXRpYyB2b2lkIFJhbmdlVmFyQ2FsbGJhY2tGb3JE cm9wUmVsYXRpb24oY29uc3QgUmFuZ2VWYXIgKnJlbCwgT2lkIHJlbE9pZCwKIAkJCQkJCQkJCQkJ T2lkIG9sZFJlbE9pZCwgdm9pZCAqYXJnKTsKQEAgLTI1MTUsNyArMjUxNCw3IEBAIHRydW5jYXRl X2NoZWNrX2FjdGl2aXR5KFJlbGF0aW9uIHJlbCkKICAqIHN0b3JhZ2VfbmFtZQogICoJICByZXR1 cm5zIHRoZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gYSB0eXBzdG9yYWdlL2F0dHN0b3JhZ2UgZW51 bSB2YWx1ZQogICovCi1zdGF0aWMgY29uc3QgY2hhciAqCitjb25zdCBjaGFyICoKIHN0b3JhZ2Vf bmFtZShjaGFyIGMpCiB7CiAJc3dpdGNoIChjKQpAQCAtMTk1NTgsNiArMTk1NTcsMzMgQEAgcmVt b3ZlX29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKQogCX0KIH0KIAorLyoKKyAqIExvb2sgdXAg dGhlIHJlZ2lzdGVyZWQgT04gQ09NTUlUIGFjdGlvbiBmb3IgYSByZWxhdGlvbi4KKyAqCisgKiBS ZXR1cm5zIE9OQ09NTUlUX05PT1Agd2hlbiBub3RoaW5nIHdhcyByZWdpc3RlcmVkLCB3aGljaCBh bHNvIGNvdmVycworICogdGVtcG9yYXJ5IHRhYmxlcyBjcmVhdGVkIHdpdGggdGhlIGRlZmF1bHQg T04gQ09NTUlUIFBSRVNFUlZFIFJPV1MKKyAqIGJlaGF2aW9yIChyZWdpc3Rlcl9vbl9jb21taXRf YWN0aW9uKCkgc2tpcHMgdGhvc2UsIHNpbmNlIG5vIGFjdGlvbiBpcworICogbmVlZGVkIGF0IGNv bW1pdCkuICBFbnRyaWVzIG1hcmtlZCBmb3IgZGVsZXRpb24gaW4gdGhlIGN1cnJlbnQKKyAqIHRy YW5zYWN0aW9uIGFyZSBpZ25vcmVkLgorICovCitPbkNvbW1pdEFjdGlvbgorZ2V0X29uX2NvbW1p dF9hY3Rpb24oT2lkIHJlbGlkKQoreworCUxpc3RDZWxsICAgKmw7CisKKwlmb3JlYWNoKGwsIG9u X2NvbW1pdHMpCisJeworCQlPbkNvbW1pdEl0ZW0gKm9jID0gKE9uQ29tbWl0SXRlbSAqKSBsZmly c3QobCk7CisKKwkJaWYgKG9jLT5yZWxpZCAhPSByZWxpZCkKKwkJCWNvbnRpbnVlOworCQlpZiAo b2MtPmRlbGV0aW5nX3N1YmlkICE9IEludmFsaWRTdWJUcmFuc2FjdGlvbklkKQorCQkJY29udGlu dWU7CisJCXJldHVybiBvYy0+b25jb21taXQ7CisJfQorCXJldHVybiBPTkNPTU1JVF9OT09QOwor fQorCiAvKgogICogUGVyZm9ybSBPTiBDT01NSVQgYWN0aW9ucy4KICAqCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9k ZGx1dGlscy5jCmluZGV4IGYzMmZjZDQ1M2VmLi45ZTQ1NmU1MTJiZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2RkbHV0aWxzLmMKQEAgLTIxLDEyICsyMSwyNSBAQAogI2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5o IgogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFi bGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfY29tcHJlc3Npb24uaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX2F1dGhfbWVtYmVycy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29s bGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGJfcm9sZV9zZXR0 aW5nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf aW5oZXJpdHMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3BvbGljeS5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3RyaWdnZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BhcnRpdGlvbi5oIgorI2luY2x1ZGUg ImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgorI2lu Y2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgog I2luY2x1ZGUgImNvbW1vbi9yZWxwYXRoLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgpAQCAtODcs NiArMTAwLDEwMyBAQCBzdGF0aWMgRGF0dW0gcGdfZ2V0X3RhYmxlc3BhY2VfZGRsX3NyZihGdW5j dGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIHRzaWQsIGJvb2wgaQogc3RhdGljIExpc3QgKnBnX2dl dF9kYXRhYmFzZV9kZGxfaW50ZXJuYWwoT2lkIGRiaWQsIGJvb2wgcHJldHR5LAogCQkJCQkJCQkJ CSAgYm9vbCBub19vd25lciwgYm9vbCBub190YWJsZXNwYWNlKTsKIAorLyoKKyAqIFBlci1jb2x1 bW4gY2FjaGUgb2YgbG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBjb25zdHJhaW50cy4gIEJ1aWx0 IG9uY2UKKyAqIGJ5IGNvbGxlY3RfbG9jYWxfbm90X251bGwoKSBhbmQgY29uc3VsdGVkIGJ5IHRo ZSBjb2x1bW4tZW1pdCBoZWxwZXJzCisgKiBhbmQgdGhlIHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQg bG9vcC4gIEVudHJpZXMgd2l0aCBjb25vaWQgPT0gSW52YWxpZE9pZAorICogbWVhbiB0aGUgY29s dW1uIGhhcyBubyBsb2NhbCBOT1QgTlVMTCBjb25zdHJhaW50IHJvdyBpbiBwZ19jb25zdHJhaW50 CisgKiAodGhlIGNvbHVtbiBtYXkgc3RpbGwgaGF2ZSBhdHRub3RudWxsPXRydWUgb24gYSBwcmUt UEctMTgtdXBncmFkZWQKKyAqIGNhdGFsb2csIGluIHdoaWNoIGNhc2UgZW1pdCBwbGFpbiBpbmxp bmUgTk9UIE5VTEwpLgorICovCit0eXBlZGVmIHN0cnVjdCBMb2NhbE5vdE51bGxFbnRyeQorewor CU9pZAkJCWNvbm9pZDsKKwljaGFyCSAgICpuYW1lOworCWJvb2wJCWlzX2F1dG87CQkvKiBtYXRj aGVzICI8dGFibGU+Xzxjb2w+X25vdF9udWxsIiAqLworCWJvb2wJCW5vX2luaGVyaXQ7Cit9CQkJ TG9jYWxOb3ROdWxsRW50cnk7CisKKy8qCisgKiBXb3JraW5nIGNvbnRleHQgdGhyZWFkZWQgdGhy b3VnaCB0aGUgcGVyLXBhc3MgaGVscGVycyBiZWxvdy4gIElucHV0cworICogKGNhbGxlci1wcm92 aWRlZCBvcHRpb24gZmxhZ3MpIGFyZSBmaWxsZWQgaW4gb25jZSBhdCB0aGUgdG9wIG9mCisgKiBw Z19nZXRfdGFibGVfZGRsX2ludGVybmFsIGFuZCB0cmVhdGVkIGFzIHJlYWQtb25seSB0aGVyZWFm dGVyLiAgRGVyaXZlZAorICogZmllbGRzIChxdWFsbmFtZSwgc2NoZW1hX3ByZWZpeCwgbm5fZW50 cmllcywgc2tpcF9ub3RudWxsX29pZHMpIGFyZQorICogY29tcHV0ZWQgb25jZSBkdXJpbmcgc2V0 dXAuICBFYWNoIHBhc3MgYXBwZW5kcyB0byBjdHgtPmJ1ZiBhbmQgcHVzaGVzCisgKiB0aGUgZmlu aXNoZWQgc3RhdGVtZW50IG9udG8gY3R4LT5zdGF0ZW1lbnRzIHZpYSBhcHBlbmRfc3RtdCgpLgor ICovCit0eXBlZGVmIHN0cnVjdCBUYWJsZURkbENvbnRleHQKK3sKKwlSZWxhdGlvbglyZWw7CisJ T2lkCQkJcmVsaWQ7CisJYm9vbAkJcHJldHR5OworCWJvb2wJCW5vX293bmVyOworCWJvb2wJCW5v X3RhYmxlc3BhY2U7CisJYm9vbAkJaW5jbHVkZV9pbmRleGVzOworCWJvb2wJCWluY2x1ZGVfY29u c3RyYWludHM7CisJYm9vbAkJaW5jbHVkZV9ydWxlczsKKwlib29sCQlpbmNsdWRlX3N0YXRpc3Rp Y3M7CisJYm9vbAkJaW5jbHVkZV90cmlnZ2VyczsKKwlib29sCQlpbmNsdWRlX3BvbGljaWVzOwor CWJvb2wJCWluY2x1ZGVfcmxzOworCWJvb2wJCWluY2x1ZGVfcmVwbGljYV9pZGVudGl0eTsKKwli b29sCQlpbmNsdWRlX3BhcnRpdGlvbjsKKwlib29sCQlzY2hlbWFfcXVhbGlmaWVkOworCisJLyog RGVyaXZlZCBkdXJpbmcgc2V0dXAgKi8KKwlPaWQJCQliYXNlX25hbWVzcGFjZTsKKwljaGFyCSAg ICpxdWFsbmFtZTsKKwljaGFyCSAgICpzY2hlbWFfcHJlZml4OwkvKiBOVUxMIHdoZW4gc2NoZW1h X3F1YWxpZmllZCAqLworCWludAkJCXNhdmVfbmVzdGxldmVsOyAvKiA+PSAwIGlmIHdlIG5hcnJv d2VkIHNlYXJjaF9wYXRoICovCisJTG9jYWxOb3ROdWxsRW50cnkgKm5uX2VudHJpZXM7CisJTGlz dAkgICAqc2tpcF9ub3RudWxsX29pZHM7CisKKwkvKiBNdXRhYmxlIHdvcmtpbmcgc3RhdGUgKi8K KwlTdHJpbmdJbmZvRGF0YSBidWY7CisJTGlzdAkgICAqc3RhdGVtZW50czsKK30JCQlUYWJsZURk bENvbnRleHQ7CisKK3N0YXRpYyBMaXN0ICpwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsKE9pZCBy ZWxpZCwgYm9vbCBwcmV0dHksCisJCQkJCQkJCQkgICBib29sIG5vX293bmVyLCBib29sIG5vX3Rh Ymxlc3BhY2UsCisJCQkJCQkJCQkgICBib29sIGluY2x1ZGVfaW5kZXhlcywKKwkJCQkJCQkJCSAg IGJvb2wgaW5jbHVkZV9jb25zdHJhaW50cywKKwkJCQkJCQkJCSAgIGJvb2wgaW5jbHVkZV9ydWxl cywKKwkJCQkJCQkJCSAgIGJvb2wgaW5jbHVkZV9zdGF0aXN0aWNzLAorCQkJCQkJCQkJICAgYm9v bCBpbmNsdWRlX3RyaWdnZXJzLAorCQkJCQkJCQkJICAgYm9vbCBpbmNsdWRlX3BvbGljaWVzLAor CQkJCQkJCQkJICAgYm9vbCBpbmNsdWRlX3JscywKKwkJCQkJCQkJCSAgIGJvb2wgaW5jbHVkZV9y ZXBsaWNhX2lkZW50aXR5LAorCQkJCQkJCQkJICAgYm9vbCBpbmNsdWRlX3BhcnRpdGlvbiwKKwkJ CQkJCQkJCSAgIGJvb2wgc2NoZW1hX3F1YWxpZmllZCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfY29s dW1uX2RlZnMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJ CQkJICAgYm9vbCBpbmNsdWRlX2NvbnN0cmFpbnRzLAorCQkJCQkJCSAgIGJvb2wgc2NoZW1hX3F1 YWxpZmllZCwKKwkJCQkJCQkgICBMb2NhbE5vdE51bGxFbnRyeSAqIG5uX2VudHJpZXMpOworc3Rh dGljIHZvaWQgYXBwZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMoU3RyaW5nSW5mbyBidWYsIFJl bGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkgIGJvb2wgcHJldHR5LCBib29sIGluY2x1ZGVfY29uc3Ry YWludHMsCisJCQkJCQkJCQkJICBMb2NhbE5vdE51bGxFbnRyeSAqIG5uX2VudHJpZXMpOworc3Rh dGljIHZvaWQgYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cyhTdHJpbmdJbmZvIGJ1Ziwg UmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQlib29sIHByZXR0eSwgYm9vbCAqZmlyc3QpOworc3Rh dGljIGNoYXIgKmZpbmRfYXR0cmRlZl90ZXh0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRu dW0sCisJCQkJCQkJICAgTGlzdCAqKmRwY29udGV4dCk7CitzdGF0aWMgY2hhciAqbG9va3VwX3Jl bG5hbWVfZm9yX2VtaXQoT2lkIHJlbGlkLCBib29sIHNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJ CQkgT2lkIGJhc2VfbmFtZXNwYWNlKTsKK3N0YXRpYyBjaGFyICpzdHJpcF9zY2hlbWFfcHJlZml4 KGNvbnN0IGNoYXIgKnN0bXQsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitzdGF0aWMgTG9jYWxOb3RO dWxsRW50cnkgKiBjb2xsZWN0X2xvY2FsX25vdF9udWxsKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJ CQkJCSAgTGlzdCAqKnNraXBfb2lkcyk7CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdG10KFRhYmxl RGRsQ29udGV4dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRh YmxlRGRsQ29udGV4dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X293bmVyX3N0bXQoVGFibGVE ZGxDb250ZXh0ICogY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfY2hpbGRfZGVmYXVsdF9vdmVycmlk ZXMoVGFibGVEZGxDb250ZXh0ICogY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfYXR0b3B0aW9ucyhU YWJsZURkbENvbnRleHQgKiBjdHgpOworc3RhdGljIHZvaWQgZW1pdF9pbmRleGVzKFRhYmxlRGRs Q29udGV4dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2xvY2FsX2NvbnN0cmFpbnRzKFRhYmxl RGRsQ29udGV4dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3J1bGVzKFRhYmxlRGRsQ29udGV4 dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3N0YXRpc3RpY3MoVGFibGVEZGxDb250ZXh0ICog Y3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfcmVwbGljYV9pZGVudGl0eShUYWJsZURkbENvbnRleHQg KiBjdHgpOworc3RhdGljIHZvaWQgZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKiBj dHgpOworc3RhdGljIHZvaWQgZW1pdF9wYXJ0aXRpb25fY2hpbGRyZW4oVGFibGVEZGxDb250ZXh0 ICogY3R4KTsKKwogCiAvKgogICogcGFyc2VfZGRsX29wdGlvbnMKQEAgLTExODUsMyArMTI5NSwx NjE3IEBAIHBnX2dldF9kYXRhYmFzZV9kZGwoUEdfRlVOQ1RJT05fQVJHUykKIAkJU1JGX1JFVFVS Tl9ET05FKGZ1bmNjdHgpOwogCX0KIH0KKworLyoKKyAqIGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0 CisgKgkJUmV0dXJuIGVpdGhlciB0aGUgc2NoZW1hLXF1YWxpZmllZCBvciB0aGUgYmFyZSBxdW90 ZWQgbmFtZSBvZiBhCisgKgkJcmVsYXRpb24sIGRlcGVuZGluZyBvbiB0aGUgc2NoZW1hX3F1YWxp ZmllZCBmbGFnLgorICoKKyAqIFdoZW4gc2NoZW1hX3F1YWxpZmllZCBpcyB0cnVlIHRoZSBzY2hl bWEtcXVhbGlmaWVkIG5hbWUgaXMgYWx3YXlzCisgKiByZXR1cm5lZC4gIFdoZW4gZmFsc2UsIHRo ZSBiYXJlIHJlbG5hbWUgaXMgcmV0dXJuZWQgb25seSBpZiB0aGUgdGFyZ2V0CisgKiByZWxhdGlv biBsaXZlcyBpbiBiYXNlX25hbWVzcGFjZSAodGhlIG5hbWVzcGFjZSBvZiB0aGUgdGFibGUgd2hv c2UgRERMIGlzCisgKiBiZWluZyBnZW5lcmF0ZWQpOyBvdGhlcndpc2UgdGhlIHNjaGVtYS1xdWFs aWZpZWQgZm9ybSBpcyByZXR1cm5lZCwKKyAqIGJlY2F1c2UgY3Jvc3Mtc2NoZW1hIHJlZmVyZW5j ZXMgKGZvciBleGFtcGxlIGFuIGluaGVyaXRhbmNlIHBhcmVudCBvcgorICogZm9yZWlnbiBrZXkg dGFyZ2V0IGluIGEgZGlmZmVyZW50IHNjaGVtYSkgYXJlIG5vdCBzYWZlIHRvIHN0cmlwLgorICoK KyAqIFRoaXMgcmVwbGFjZXMgdGhlIHVuc2FmZSBwYXR0ZXJuCisgKgkgIHF1b3RlX3F1YWxpZmll ZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShvaWQpKSwK KyAqCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3JlbF9uYW1lKG9pZCkpCisgKiB3 aGljaCBkZXJlZmVyZW5jZXMgTlVMTCB3aGVuIGEgY29uY3VycmVudCB0cmFuc2FjdGlvbiBoYXMg ZHJvcHBlZCB0aGUKKyAqIHJlZmVyZW5jZWQgcmVsYXRpb24gKG9yIGl0cyBzY2hlbWEpIGJldHdl ZW4gd2hlbiB3ZSBjYWNoZWQgaXRzIE9JRCBhbmQKKyAqIHdoZW4gd2UgYXNrIHRoZSBzeXNjYWNo ZSBmb3IgaXRzIG5hbWUuICBIb2xkaW5nIEFjY2Vzc1NoYXJlTG9jayBvbiBhCisgKiBkZXBlbmRl bnQgcmVsYXRpb24gbWFrZXMgdGhpcyByYWNlIHZhbmlzaGluZ2x5IHVubGlrZWx5IGluIHByYWN0 aWNlLCBidXQKKyAqIHdlIHN0aWxsIGRlZmVuZCBhZ2FpbnN0IGl0IGJlY2F1c2UgdGhlIGFsdGVy bmF0aXZlIGlzIGEgU0lHU0VHVi4KKyAqCisgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBm cmVlKClpbmcgdGhlIHJlc3VsdC4KKyAqLworc3RhdGljIGNoYXIgKgorbG9va3VwX3JlbG5hbWVf Zm9yX2VtaXQoT2lkIHJlbGlkLCBib29sIHNjaGVtYV9xdWFsaWZpZWQsIE9pZCBiYXNlX25hbWVz cGFjZSkKK3sKKwlIZWFwVHVwbGUJdHA7CisJRm9ybV9wZ19jbGFzcyByZWx0dXA7CisJY2hhcgkg ICAqbnNwbmFtZTsKKwljaGFyCSAgICpyZXN1bHQ7CisKKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShS RUxPSUQsIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo dHApKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09C SkVDVCksCisJCQkJIGVycm1zZygicmVsYXRpb24gd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3Qi LCByZWxpZCksCisJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkg ZHJvcHBlZC4iKSkpOworCisJcmVsdHVwID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVCh0cCk7 CisKKwkvKiBCYXJlIG5hbWUgb25seSB3aGVuIGNhbGxlciBhc2tlZCBhbmQgdGFyZ2V0IGlzIGlu IHRoZSBiYXNlIG5hbWVzcGFjZS4gKi8KKwlpZiAoIXNjaGVtYV9xdWFsaWZpZWQgJiYgcmVsdHVw LT5yZWxuYW1lc3BhY2UgPT0gYmFzZV9uYW1lc3BhY2UpCisJeworCQlyZXN1bHQgPSBwc3RyZHVw KHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihyZWx0dXAtPnJlbG5hbWUpKSk7CisJCVJlbGVhc2VT eXNDYWNoZSh0cCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJbnNwbmFtZSA9IGdldF9uYW1l c3BhY2VfbmFtZShyZWx0dXAtPnJlbG5hbWVzcGFjZSk7CisJaWYgKG5zcG5hbWUgPT0gTlVMTCkK Kwl7CisJCU9pZAkJCW5zcG9pZCA9IHJlbHR1cC0+cmVsbmFtZXNwYWNlOworCisJCVJlbGVhc2VT eXNDYWNoZSh0cCk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRF RklORURfT0JKRUNUKSwKKwkJCQkgZXJybXNnKCJzY2hlbWEgd2l0aCBPSUQgJXUgZG9lcyBub3Qg ZXhpc3QiLCBuc3BvaWQpLAorCQkJCSBlcnJkZXRhaWwoIkl0IG1heSBoYXZlIGJlZW4gY29uY3Vy cmVudGx5IGRyb3BwZWQuIikpKTsKKwl9CisKKwlyZXN1bHQgPSBxdW90ZV9xdWFsaWZpZWRfaWRl bnRpZmllcihuc3BuYW1lLCBOYW1lU3RyKHJlbHR1cC0+cmVsbmFtZSkpOworCisJcGZyZWUobnNw bmFtZSk7CisJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8q CisgKiBzdHJpcF9zY2hlbWFfcHJlZml4CisgKgkJUmV0dXJuIGEgcGFsbG9jJ2QgY29weSBvZiBz dG10IHdpdGggZXZlcnkgb2NjdXJyZW5jZSBvZiBwcmVmaXgKKyAqCQlyZW1vdmVkLCBleGNlcHQg b2NjdXJyZW5jZXMgdGhhdCBmYWxsIGluc2lkZSBhIHNpbmdsZS1xdW90ZWQgU1FMCisgKgkJc3Ry aW5nIGxpdGVyYWwgb3IgYSBkb3VibGUtcXVvdGVkIFNRTCBpZGVudGlmaWVyLgorICoKKyAqIFVz ZWQgdG8gc3RyaXAgdGhlIHF1YWxpZmllZC1zY2hlbWEgcHJlZml4IChmb3IgZXhhbXBsZSAib2xk X3NjaGVtYS4iKQorICogZnJvbSBEREwgZW1pdHRlZCBieSB0aGUgYWx3YXlzLXF1YWxpZmllZCBy dWxldXRpbHMgaGVscGVycworICogKHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQsIHBnX2dl dF9pbmRleGRlZl9zdHJpbmcsCisgKiBwZ19nZXRfcnVsZWRlZiwgcGdfZ2V0X3N0YXRpc3RpY3Nv YmpkZWZfc3RyaW5nKSB3aGVuIHRoZSBjYWxsZXIgaGFzCisgKiByZXF1ZXN0ZWQgdW5xdWFsaWZp ZWQgb3V0cHV0IHZpYSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLiAgQSBwbGFpbgorICogc3Vic3Ry aW5nIHN0cmlwIHdvdWxkIGNvcnJ1cHQgc3RyaW5nIGxpdGVyYWxzIHdob3NlIGNvbnRlbnRzIGhh cHBlbgorICogdG8gY29udGFpbiAiPHNjaGVtYT4uIiAoZm9yIGV4YW1wbGUgYSBDSEVDSyBjb21w YXJpbmcgYWdhaW5zdAorICogJ215c2NoZW1hLnNlY3JldCcpIG9yIGRvdWJsZS1xdW90ZWQgY29s dW1uL2lkZW50aWZpZXIgbmFtZXMgd2hvc2UKKyAqIGNvbnRlbnRzIGhhcHBlbiB0byBjb250YWlu ICI8c2NoZW1hPi4iIChmb3IgZXhhbXBsZSBhIGNvbHVtbiBuYW1lZAorICogInMud2VpcmQiIHdo ZW4gc3RyaXBwaW5nIHRoZSBwcmVmaXggInMuIiksIHNvIHdlIHRyYWNrIHF1b3Rpbmcgc3RhdGUK KyAqIGFuZCBza2lwIG1hdGNoZXMgdGhhdCBvY2N1ciB3aGlsZSB3ZSBhcmUgaW5zaWRlIGVpdGhl ciBraW5kIG9mCisgKiBxdW90ZWQgdG9rZW4uICBFc2NhcGVkIHF1b3RlcyAoJycgaW5zaWRlIGEg c3RyaW5nLCAiIiBpbnNpZGUgYW4KKyAqIGlkZW50aWZpZXIpIGFyZSBoYW5kbGVkIGJ5IGtlZXBp bmcgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBzZXQgYWNyb3NzCisgKiB0aGVtLgorICovCitzdGF0 aWMgY2hhciAqCitzdHJpcF9zY2hlbWFfcHJlZml4KGNvbnN0IGNoYXIgKnN0bXQsIGNvbnN0IGNo YXIgKnByZWZpeCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJc2l6ZV90CQlwbGVuID0gc3Ry bGVuKHByZWZpeCk7CisJY29uc3QgY2hhciAqcCA9IHN0bXQ7CisJYm9vbAkJaW5fc3RyaW5nID0g ZmFsc2U7CisJYm9vbAkJaW5faWRlbnQgPSBmYWxzZTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYp OworCXdoaWxlICgqcCkKKwl7CisJCS8qCisJCSAqIFRyeSB0aGUgcHJlZml4IG1hdGNoIEJFRk9S RSB0aGUgcXVvdGUtc3RhdGUgdG9nZ2xlcy4gIFRoZSBwcmVmaXgKKwkJICogaXRzZWxmIG1heSBi ZWdpbiB3aXRoIGEgZG91YmxlIHF1b3RlIHdoZW4gdGhlIGJhc2Ugc2NoZW1hIG5hbWUKKwkJICog cmVxdWlyZXMgcXVvdGluZyAoZS5nLiAiTXktU2NoZW1hIi4pLCBhbmQgYXQgdGhhdCBsZWFkaW5n ICIgd2UgbXVzdAorCQkgKiBzdHJpcCB0aGUgd2hvbGUgcHJlZml4IHJhdGhlciB0aGFuIHRyZWF0 IGl0IGFzIHRoZSBvcGVuaW5nIG9mIGEKKwkJICogcmVndWxhciBxdW90ZWQgaWRlbnRpZmllci4g IFRoZSBjaGVjayBpcyBnYXRlZCBvbiAhaW5faWRlbnQgJiYKKwkJICogIWluX3N0cmluZywgc28g b25jZSB3ZSBoYXZlIHRvZ2dsZWQgaW50byBhIHF1b3RlZCB0b2tlbiB3ZSBuZXZlcgorCQkgKiBz dHJpcCBhIGNvaW5jaWRlbnRhbCBzdWJzdHJpbmcgaW5zaWRlIGl0LgorCQkgKi8KKwkJaWYgKCFp bl9zdHJpbmcgJiYgIWluX2lkZW50ICYmIHN0cm5jbXAocCwgcHJlZml4LCBwbGVuKSA9PSAwKQor CQl7CisJCQlwICs9IHBsZW47CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKnAgPT0gJ1wnJyAm JiAhaW5faWRlbnQpCisJCXsKKwkJCS8qIFNRTCAnJyBlc2NhcGU6IGVtaXQgYm90aCBxdW90ZXMg YW5kIHN0YXkgaW5zaWRlIHRoZSBzdHJpbmcuICovCisJCQlpZiAoaW5fc3RyaW5nICYmIHBbMV0g PT0gJ1wnJykKKwkJCXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnXCcnKTsKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnXCcnKTsKKwkJCQlwICs9IDI7CisJCQkJY29u dGludWU7CisJCQl9CisJCQlpbl9zdHJpbmcgPSAhaW5fc3RyaW5nOworCQkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJmJ1ZiwgKnApOworCQkJcCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCpw ID09ICciJyAmJiAhaW5fc3RyaW5nKQorCQl7CisJCQkvKiBTUUwgIiIgZXNjYXBlOiBlbWl0IGJv dGggcXVvdGVzIGFuZCBzdGF5IGluc2lkZSB0aGUgaWRlbnQuICovCisJCQlpZiAoaW5faWRlbnQg JiYgcFsxXSA9PSAnIicpCisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyIn KTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnIicpOworCQkJCXAgKz0gMjsKKwkJ CQljb250aW51ZTsKKwkJCX0KKwkJCWluX2lkZW50ID0gIWluX2lkZW50OworCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoJmJ1ZiwgKnApOworCQkJcCsrOworCQkJY29udGludWU7CisJCX0KKwkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgKnApOworCQlwKys7CisJfQorCXJldHVybiBidWYuZGF0 YTsKK30KKworLyoKKyAqIGNvbGxlY3RfbG9jYWxfbm90X251bGwKKyAqCQlTY2FuIHBnX2NvbnN0 cmFpbnQgb25jZSBmb3IgbG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBjb25zdHJhaW50cworICoJ CW9uIHJlbCwgcmV0dXJuaW5nIGEgcGFsbG9jJ2QgYXJyYXkgaW5kZXhlZCBieSBhdHRudW0gKDEu Lm5hdHRzKS4KKyAqCisgKiBFbnRyaWVzIHdpdGggY29ub2lkPT1JbnZhbGlkT2lkIG1lYW4gIm5v IGxvY2FsIE5PVCBOVUxMIHJvdyBmb3IgdGhpcworICogY29sdW1uIi4gIFdoZW4gdGhlIGNvbnN0 cmFpbnQgbmFtZSBkb2VzIG5vdCBtYXRjaCB0aGUgYXV0by1nZW5lcmF0ZWQKKyAqIHBhdHRlcm4g Ijx0YWJsZW5hbWU+Xzxjb2x1bW5uYW1lPl9ub3RfbnVsbCIsIHRoZSBjb25zdHJhaW50IE9JRCBp cworICogYXBwZW5kZWQgdG8gKnNraXBfb2lkcyBzbyB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWlu dCBsb29wIGNhbiBhdm9pZAorICogcmUtZW1pdHRpbmcgaXQgYXMgQUxURVIgVEFCTEUgLi4uIEFE RCBDT05TVFJBSU5UIC0gdGhlIGNvbHVtbi1lbWl0CisgKiBwYXNzIHdpbGwgcHJvZHVjZSBpdCBp bmxpbmUgYXMgIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgaW5zdGVhZC4KKyAqLworc3RhdGlj IExvY2FsTm90TnVsbEVudHJ5ICoKK2NvbGxlY3RfbG9jYWxfbm90X251bGwoUmVsYXRpb24gcmVs LCBMaXN0ICoqc2tpcF9vaWRzKQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXRE ZXNjcihyZWwpOworCWludAkJCW5hdHRzID0gdHVwZGVzYy0+bmF0dHM7CisJTG9jYWxOb3ROdWxs RW50cnkgKmVudHJpZXM7CisJY29uc3QgY2hhciAqcmVsbmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbCk7CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJ U2NhbktleURhdGEgY29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisKKwllbnRyaWVzID0gKExv Y2FsTm90TnVsbEVudHJ5ICopIHBhbGxvYzAoc2l6ZW9mKExvY2FsTm90TnVsbEVudHJ5KSAqCisJ CQkJCQkJCQkJCShuYXR0cyArIDEpKTsKKworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWlu dFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmNvbktleSwKKwkJ CQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSk7 CisJY29uU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5 cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmY29uS2V5KTsKKworCXdo aWxlIChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQoY29uU2Nhbikp KQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdF VFNUUlVDVChjb25UdXApOworCQlEYXR1bQkJY29ua2V5RGF0OworCQlib29sCQljb25rZXlOdWxs OworCQlBcnJheVR5cGUgICpjb25rZXlBcnI7CisJCWludDE2CSAgICpjb25rZXlWYWxzOworCQlp bnQJCQlhdHRudW07CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJY2hhcgkJYXV0b25hbWVb TkFNRURBVEFMRU5dOworCisJCWlmIChjb24tPmNvbnR5cGUgIT0gQ09OU1RSQUlOVF9OT1ROVUxM KQorCQkJY29udGludWU7CisJCWlmICghY29uLT5jb25pc2xvY2FsKQorCQkJY29udGludWU7CisK KwkJY29ua2V5RGF0ID0gaGVhcF9nZXRhdHRyKGNvblR1cCwgQW51bV9wZ19jb25zdHJhaW50X2Nv bmtleSwKKwkJCQkJCQkJIFJlbGF0aW9uR2V0RGVzY3IoY29uUmVsKSwgJmNvbmtleU51bGwpOwor CQlpZiAoY29ua2V5TnVsbCkKKwkJCWNvbnRpbnVlOworCQljb25rZXlBcnIgPSBEYXR1bUdldEFy cmF5VHlwZVAoY29ua2V5RGF0KTsKKworCQkvKgorCQkgKiBEZWZlbmQgYWdhaW5zdCBhIG1hbGZv cm1lZCBjb25rZXk6IGEgTk9UIE5VTEwgY29uc3RyYWludCBpcyBhbHdheXMKKwkJICogYSBzaW5n bGUtY29sdW1uIDEtRCBpbnQyIGFycmF5LCBidXQgYSBjb3JydXB0ZWQgY2F0YWxvZyBvciBhIGZ1 dHVyZQorCQkgKiBwYXRjaCB0aGF0IHN0b3JlcyB3aWRlciBjb25rZXlzIG11c3RuJ3QgdHJpcCB1 cyBpbnRvIHJlYWRpbmcgcGFzdAorCQkgKiB0aGUgYXJyYXkgaGVhZGVyLgorCQkgKi8KKwkJaWYg KEFSUl9ORElNKGNvbmtleUFycikgIT0gMSB8fAorCQkJQVJSX0RJTVMoY29ua2V5QXJyKVswXSA8 IDEgfHwKKwkJCUFSUl9IQVNOVUxMKGNvbmtleUFycikgfHwKKwkJCUFSUl9FTEVNVFlQRShjb25r ZXlBcnIpICE9IElOVDJPSUQpCisJCQljb250aW51ZTsKKworCQljb25rZXlWYWxzID0gKGludDE2 ICopIEFSUl9EQVRBX1BUUihjb25rZXlBcnIpOworCQlhdHRudW0gPSBjb25rZXlWYWxzWzBdOwor CQlpZiAoYXR0bnVtIDwgMSB8fCBhdHRudW0gPiBuYXR0cykKKwkJCWNvbnRpbnVlOworCisJCWF0 dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgYXR0bnVtIC0gMSk7CisJCXNucHJpbnRmKGF1dG9u YW1lLCBzaXplb2YoYXV0b25hbWUpLCAiJXNfJXNfbm90X251bGwiLAorCQkJCSByZWxuYW1lLCBO YW1lU3RyKGF0dC0+YXR0bmFtZSkpOworCisJCWVudHJpZXNbYXR0bnVtXS5jb25vaWQgPSBjb24t Pm9pZDsKKwkJZW50cmllc1thdHRudW1dLm5hbWUgPSBwc3RyZHVwKE5hbWVTdHIoY29uLT5jb25u YW1lKSk7CisJCWVudHJpZXNbYXR0bnVtXS5pc19hdXRvID0gKHN0cmNtcChOYW1lU3RyKGNvbi0+ Y29ubmFtZSksIGF1dG9uYW1lKSA9PSAwKTsKKwkJZW50cmllc1thdHRudW1dLm5vX2luaGVyaXQg PSBjb24tPmNvbm5vaW5oZXJpdDsKKworCQkvKgorCQkgKiBJbmxpbmUgZW1pc3Npb24gb2YgIkNP TlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgb25seSBoYXBwZW5zIGZvcgorCQkgKiBjb2x1bW5zIHRo YXQgdGhlIGNvbHVtbiBsaXN0IGFjdHVhbGx5IGVtaXRzLCBpLmUuIGF0dGlzbG9jYWwKKwkJICog Y29sdW1ucy4gIEZvciBhIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgc2l0dGluZyBvbiBhbiBp bmhlcml0ZWQKKwkJICogY29sdW1uIHRoZSBpbmxpbmUgcGF0aCBuZXZlciBmaXJlcywgc28gd2Ug bXVzdCBsZWF2ZSB0aGUgY29uc3RyYWludAorCQkgKiBPSUQgb3V0IG9mIHNraXBfb2lkcyBhbmQg bGV0IHRoZSBwb3N0LUNSRUFURSBjb25zdHJhaW50IGxvb3AgZW1pdAorCQkgKiBBTFRFUiBUQUJM RSAuLi4gQUREIENPTlNUUkFJTlQuCisJCSAqLworCQlpZiAoIWVudHJpZXNbYXR0bnVtXS5pc19h dXRvICYmIGF0dC0+YXR0aXNsb2NhbCAmJiBza2lwX29pZHMgIT0gTlVMTCkKKwkJCSpza2lwX29p ZHMgPSBsYXBwZW5kX29pZCgqc2tpcF9vaWRzLCBjb24tPm9pZCk7CisJfQorCXN5c3RhYmxlX2Vu ZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJcmV0dXJuIGVudHJpZXM7Cit9CisKKy8qCisgKiBmaW5kX2F0dHJkZWZfdGV4dAorICoJCVJl dHVybiB0aGUgZGVwYXJzZWQgREVGQVVMVC9HRU5FUkFURUQgZXhwcmVzc2lvbiBmb3IgYXR0bnVt IG9uIHJlbCwKKyAqCQlvciBOVUxMIGlmIG5vIGVudHJ5IGV4aXN0cyBpbiBUdXBsZUNvbnN0ci0+ ZGVmdmFsLgorICoKKyAqIFRoZSBjYWxsZXIgcGFzc2VzIGEgTGlzdCAqKiBzbyB0aGF0IHRoZSBk ZXBhcnNlIGNvbnRleHQgaXMgYnVpbHQgbGF6aWx5CisgKiBhbmQgcmV1c2VkIGFjcm9zcyBjYWxs cyAoZGVwYXJzZV9jb250ZXh0X2ZvciBpcyBub3QgY2hlYXApLiAgUmV0dXJuZWQKKyAqIHN0cmlu ZyBpcyBwYWxsb2MnZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dDsgY2FsbGVyIHBmcmVl J3MgaXQuCisgKi8KK3N0YXRpYyBjaGFyICoKK2ZpbmRfYXR0cmRlZl90ZXh0KFJlbGF0aW9uIHJl bCwgQXR0ck51bWJlciBhdHRudW0sIExpc3QgKipkcGNvbnRleHQpCit7CisJVHVwbGVDb25zdHIg KmNvbnN0ciA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKS0+Y29uc3RyOworCisJaWYgKGNvbnN0ciA9 PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaW50IGogPSAwOyBqIDwgY29uc3RyLT5u dW1fZGVmdmFsOyBqKyspCisJeworCQlpZiAoY29uc3RyLT5kZWZ2YWxbal0uYWRudW0gIT0gYXR0 bnVtKQorCQkJY29udGludWU7CisKKwkJaWYgKCpkcGNvbnRleHQgPT0gTklMKQorCQkJKmRwY29u dGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwK KwkJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisKKwkJcmV0dXJuIGRlcGFyc2Vf ZXhwcmVzc2lvbihzdHJpbmdUb05vZGUoY29uc3RyLT5kZWZ2YWxbal0uYWRiaW4pLAorCQkJCQkJ CQkgICpkcGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJfQorCXJldHVybiBOVUxMOworfQorCisv KgorICogYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cworICoJCUVtaXQgZWFjaCBsb2Nh bGx5LWRlY2xhcmVkIENIRUNLIGNvbnN0cmFpbnQgb24gcmVsIGFzCisgKgkJIkNPTlNUUkFJTlQg bmFtZSA8cGdfZ2V0X2NvbnN0cmFpbnRkZWY+Iiwgc2VwYXJhdGVkIGJ5ICcsJyBmcm9tIGFueQor ICoJCXByZXZpb3VzbHktZW1pdHRlZCBjb2x1bW4gb3IgY29uc3RyYWludC4KKyAqCisgKiAqZmly c3QgdHJhY2tzIHdoZXRoZXIgYW55dGhpbmcgaGFzIGJlZW4gZW1pdHRlZCBvbiB0aGlzIGxpc3Qg eWV0LCBzbyB0aGUKKyAqIGNhbGxlciBjYW4gY2hhaW4gY29sdW1uIGVtaXNzaW9uIGFuZCBjb25z dHJhaW50IGVtaXNzaW9uIHRocm91Z2ggdGhlIHNhbWUKKyAqIGJ1ZmZlci4gIEluaGVyaXRlZCBD SEVDSyBjb25zdHJhaW50cyAoIWNvbmlzbG9jYWwpIGNvbWUgZnJvbSB0aGUgcGFyZW50J3MKKyAq IERETCBhbmQgYXJlbid0IHJlcGVhdGVkIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRf aW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsIGJv b2wgcHJldHR5LAorCQkJCQkJCQlib29sICpmaXJzdCkKK3sKKwlSZWxhdGlvbgljb25SZWw7CisJ U3lzU2NhbkRlc2MgY29uU2NhbjsKKwlTY2FuS2V5RGF0YSBjb25LZXk7CisJSGVhcFR1cGxlCWNv blR1cDsKKworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQlBbnVtX3BnX2NvbnN0cmFp bnRfY29ucmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9i amVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSk7CisJY29uU2NhbiA9IHN5c3Rh YmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFtZUluZGV4SWQsCisJ CQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmY29uS2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1Zh bGlkKGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQoY29uU2NhbikpKQorCXsKKwkJRm9ybV9wZ19j b25zdHJhaW50IGNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb25UdXApOwor CQlEYXR1bQkJZGVmRGF0dW07CisJCWNoYXIJICAgKmRlZmJvZHk7CisKKwkJaWYgKGNvbi0+Y29u dHlwZSAhPSBDT05TVFJBSU5UX0NIRUNLKQorCQkJY29udGludWU7CisJCWlmICghY29uLT5jb25p c2xvY2FsKQorCQkJY29udGludWU7CisKKwkJaWYgKCEqZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihidWYsICcsJyk7CisJCSpmaXJzdCA9IGZhbHNlOworCQlpZiAocHJldHR5KQorCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcbiAgICAiKTsKKwkJZWxzZQorCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCisJCWRlZkRhdHVtID0gT2lkRnVuY3Rpb25DYWxs MShGX1BHX0dFVF9DT05TVFJBSU5UREVGX09JRCwKKwkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0o Y29uLT5vaWQpKTsKKwkJZGVmYm9keSA9IFRleHREYXR1bUdldENTdHJpbmcoZGVmRGF0dW0pOwor CQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIkNPTlNUUkFJTlQgJXMgJXMiLAorCQkJCQkJIHF1b3Rl X2lkZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5hbWUpKSwKKwkJCQkJCSBkZWZib2R5KTsKKwkJ cGZyZWUoZGVmYm9keSk7CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVf Y2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogYXBwZW5kX2NvbHVt bl9kZWZzCisgKgkJQXBwZW5kIHRoZSBjb21tYS1zZXBhcmF0ZWQgY29sdW1uIGRlZmluaXRpb24g bGlzdCBmb3IgYSB0YWJsZS4KKyAqCisgKiBFbWl0cyBlYWNoIG5vbi1kcm9wcGVkLCBsb2NhbGx5 LWRlY2xhcmVkIGNvbHVtbiBhcworICoJCW5hbWUgdHlwZSBbQ09MTEFURSB4XSBbU1RPUkFHRSBz XSBbQ09NUFJFU1NJT04gY10KKyAqCQlbR0VORVJBVEVEIC4uLiB8IERFRkFVTFQgZV0gW05PVCBO VUxMXQorICogZm9sbG93ZWQgYnkgYW55IGxvY2FsbHktZGVjbGFyZWQgaW5saW5lIENIRUNLIGNv bnN0cmFpbnRzLiAgT3B0aW9uYWwKKyAqIGNsYXVzZXMgYXJlIG9taXR0ZWQgd2hlbiB0aGVpciB2 YWx1ZSBtYXRjaGVzIHdoYXQgdGhlIHN5c3RlbSB3b3VsZAorICogcmVhcHBseSBvbiByb3VuZC10 cmlwIChlLmcuIHR5cGUtZGVmYXVsdCBDT0xMQVRFLCB0eXBlLWRlZmF1bHQgU1RPUkFHRSkuCisg Ki8KK3N0YXRpYyB2b2lkCithcHBlbmRfY29sdW1uX2RlZnMoU3RyaW5nSW5mbyBidWYsIFJlbGF0 aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJICAgYm9vbCBpbmNsdWRlX2NvbnN0cmFpbnRzLAor CQkJCSAgIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkgICBMb2NhbE5vdE51bGxFbnRyeSAq IG5uX2VudHJpZXMpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJl bCk7CisJT2lkCQkJYmFzZV9uYW1lc3BhY2UgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpOwor CUxpc3QJICAgKmRwY29udGV4dCA9IE5JTDsKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlmb3Ig KGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJp YnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQljaGFyCSAgICp0eXBzdHI7 CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICog Q29sdW1ucyBpbmhlcml0ZWQgZnJvbSBhIHBhcmVudCBhcmUgZW1pdHRlZCBieSB0aGUgSU5IRVJJ VFMgY2xhdXNlCisJCSAqIChvbmNlIGltcGxlbWVudGVkKSwgbm90IHRoZSBjb2x1bW4gbGlzdCwg dW5sZXNzIHRoZSBjaGlsZAorCQkgKiByZWRlY2xhcmVkIHRoZW0gbG9jYWxseSAoYXR0aXNsb2Nh bD10cnVlKS4KKwkJICovCisJCWlmICghYXR0LT5hdHRpc2xvY2FsKQorCQkJY29udGludWU7CisK KwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJZmly c3QgPSBmYWxzZTsKKworCQlpZiAocHJldHR5KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsICJcbiAgICAiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcp OworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKE5hbWVT dHIoYXR0LT5hdHRuYW1lKSkpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisK KwkJdHlwc3RyID0gZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKGF0dC0+YXR0dHlwaWQsIGF0dC0+ YXR0dHlwbW9kKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHR5cHN0cik7CisJCXBm cmVlKHR5cHN0cik7CisKKwkJLyogQ09MTEFURSBjbGF1c2UsIG9ubHkgaWYgaXQgZGlmZmVycyBm cm9tIHRoZSB0eXBlJ3MgZGVmYXVsdC4gKi8KKwkJaWYgKE9pZElzVmFsaWQoYXR0LT5hdHRjb2xs YXRpb24pICYmCisJCQlhdHQtPmF0dGNvbGxhdGlvbiAhPSBnZXRfdHlwY29sbGF0aW9uKGF0dC0+ YXR0dHlwaWQpKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQ09MTEFURSAlcyIsCisJCQkJ CQkJIGdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKGF0dC0+YXR0Y29sbGF0aW9uKSk7CisKKwkJLyog U1RPUkFHRSBjbGF1c2UsIG9ubHkgaWYgaXQgZGlmZmVycyBmcm9tIHRoZSB0eXBlJ3MgZGVmYXVs dC4gKi8KKwkJaWYgKGF0dC0+YXR0c3RvcmFnZSAhPSBnZXRfdHlwc3RvcmFnZShhdHQtPmF0dHR5 cGlkKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFNUT1JBR0UgJXMiLCBzdG9yYWdlX25h bWUoYXR0LT5hdHRzdG9yYWdlKSk7CisKKwkJLyogQ09NUFJFU1NJT04gY2xhdXNlLCBvbmx5IGlm IGV4cGxpY2l0bHkgc2V0IG9uIHRoZSBjb2x1bW4uICovCisJCWlmIChDb21wcmVzc2lvbk1ldGhv ZElzVmFsaWQoYXR0LT5hdHRjb21wcmVzc2lvbikpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1Ziwg IiBDT01QUkVTU0lPTiAlcyIsCisJCQkJCQkJIEdldENvbXByZXNzaW9uTWV0aG9kTmFtZShhdHQt PmF0dGNvbXByZXNzaW9uKSk7CisKKwkJLyoKKwkJICogTG9vayB1cCB0aGUgZGVmYXVsdC9nZW5l cmF0ZWQgZXhwcmVzc2lvbiB0ZXh0IHVwIGZyb250OyBnZW5lcmF0ZWQKKwkJICogY29sdW1ucyBo YXZlIGF0dGhhc2RlZj10cnVlIHdpdGggYW4gZW50cnkgaW4gcGdfYXR0cmRlZiBqdXN0IGxpa2UK KwkJICogcmVndWxhciBkZWZhdWx0cy4KKwkJICovCisJCXsKKwkJCWNoYXIJICAgKmRlZmV4cHIg PSBOVUxMOworCisJCQlpZiAoYXR0LT5hdHRoYXNkZWYpCisJCQkJZGVmZXhwciA9IGZpbmRfYXR0 cmRlZl90ZXh0KHJlbCwgYXR0LT5hdHRudW0sICZkcGNvbnRleHQpOworCisJCQkvKiBHRU5FUkFU RUQgLyBJREVOVElUWSAvIERFRkFVTFQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gKi8KKwkJCWlm IChhdHQtPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCAmJiBkZWZl eHByKQorCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEdFTkVSQVRFRCBBTFdBWVMgQVMgKCVz KSBTVE9SRUQiLCBkZWZleHByKTsKKwkJCWVsc2UgaWYgKGF0dC0+YXR0Z2VuZXJhdGVkID09IEFU VFJJQlVURV9HRU5FUkFURURfVklSVFVBTCAmJiBkZWZleHByKQorCQkJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiIEdFTkVSQVRFRCBBTFdBWVMgQVMgKCVzKSBWSVJUVUFMIiwgZGVmZXhwcik7CisJ CQllbHNlIGlmIChhdHQtPmF0dGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMg fHwKKwkJCQkJIGF0dC0+YXR0aWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0JZX0RFRkFV TFQpCisJCQl7CisJCQkJY29uc3QgY2hhciAqaWRraW5kID0KKwkJCQkJKGF0dC0+YXR0aWRlbnRp dHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUykKKwkJCQkJPyAiQUxXQVlTIiA6ICJCWSBE RUZBVUxUIjsKKwkJCQlPaWQJCQlzZXFpZCA9IGdldElkZW50aXR5U2VxdWVuY2UocmVsLCBhdHQt PmF0dG51bSwgdHJ1ZSk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBHRU5FUkFURUQg JXMgQVMgSURFTlRJVFkiLCBpZGtpbmQpOworCisJCQkJLyoKKwkJCQkgKiBFbWl0IG9ubHkgdGhl IHNlcXVlbmNlIG9wdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aGVpcgorCQkJCSAqIGRlZmF1bHRz IC0gbWlycm9yaW5nIHBnX2dldF9kYXRhYmFzZV9kZGwncyBwYXR0ZXJuIG9mCisJCQkJICogb21p dHRpbmcgdmFsdWVzIHRoYXQgdGhlIHN5c3RlbSB3b3VsZCByZWFwcGx5IG9uIGl0cyBvd24uCisJ CQkJICovCisJCQkJaWYgKE9pZElzVmFsaWQoc2VxaWQpKQorCQkJCXsKKwkJCQkJSGVhcFR1cGxl CXNlcVR1cCA9IFNlYXJjaFN5c0NhY2hlMShTRVFSRUxJRCwKKwkJCQkJCQkJCQkJCQkJIE9iamVj dElkR2V0RGF0dW0oc2VxaWQpKTsKKworCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZChzZXFUdXAp KQorCQkJCQl7CisJCQkJCQlGb3JtX3BnX3NlcXVlbmNlIHNlcSA9IChGb3JtX3BnX3NlcXVlbmNl KSBHRVRTVFJVQ1Qoc2VxVHVwKTsKKwkJCQkJCVN0cmluZ0luZm9EYXRhIG9wdHM7CisJCQkJCQli b29sCQlmaXJzdF9vcHQgPSB0cnVlOworCQkJCQkJaW50NjQJCWRlZl9taW4sCisJCQkJCQkJCQlk ZWZfbWF4LAorCQkJCQkJCQkJZGVmX3N0YXJ0OworCQkJCQkJaW50NjQJCXR5cF9taW4sCisJCQkJ CQkJCQl0eXBfbWF4OworCisJCQkJCQkvKgorCQkJCQkJICogUGVyLXR5cGUgYm91bmRzIGZvciB0 aGUgc2VxdWVuY2UncyB1bmRlcmx5aW5nCisJCQkJCQkgKiBpbnRlZ2VyIHR5cGUuICBEZWZhdWx0 cyB0byBpbnQ4IGlmIHRoZSBjb2x1bW4gdHlwZQorCQkJCQkJICogaXMgc29tZXRoaW5nIGVsc2Ug KHNob3VsZG4ndCBoYXBwZW4gZm9yIElERU5USVRZLAorCQkJCQkJICogYnV0IGJlIGRlZmVuc2l2 ZSkuCisJCQkJCQkgKi8KKwkJCQkJCXN3aXRjaCAoYXR0LT5hdHR0eXBpZCkKKwkJCQkJCXsKKwkJ CQkJCQljYXNlIElOVDJPSUQ6CisJCQkJCQkJCXR5cF9taW4gPSBQR19JTlQxNl9NSU47CisJCQkJ CQkJCXR5cF9tYXggPSBQR19JTlQxNl9NQVg7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2Ug SU5UNE9JRDoKKwkJCQkJCQkJdHlwX21pbiA9IFBHX0lOVDMyX01JTjsKKwkJCQkJCQkJdHlwX21h eCA9IFBHX0lOVDMyX01BWDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJ CQkJdHlwX21pbiA9IFBHX0lOVDY0X01JTjsKKwkJCQkJCQkJdHlwX21heCA9IFBHX0lOVDY0X01B WDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCWlmIChzZXEtPnNlcWluY3JlbWVu dCA+IDApCisJCQkJCQl7CisJCQkJCQkJZGVmX21pbiA9IDE7CisJCQkJCQkJZGVmX21heCA9IHR5 cF9tYXg7CisJCQkJCQkJZGVmX3N0YXJ0ID0gZGVmX21pbjsKKwkJCQkJCX0KKwkJCQkJCWVsc2UK KwkJCQkJCXsKKwkJCQkJCQlkZWZfbWluID0gdHlwX21pbjsKKwkJCQkJCQlkZWZfbWF4ID0gLTE7 CisJCQkJCQkJZGVmX3N0YXJ0ID0gZGVmX21heDsKKwkJCQkJCX0KKworCQkJCQkJaW5pdFN0cmlu Z0luZm8oJm9wdHMpOworCisJCQkJCQkvKgorCQkJCQkJICogU0VRVUVOQ0UgTkFNRSAtIG9taXQg d2hlbiBpdCBtYXRjaGVzIHRoZSBpbXBsaWNpdAorCQkJCQkJICogIjx0YWJsZW5hbWU+Xzxjb2x1 bW5uYW1lPl9zZXEiIHBhdHRlcm4gaW4gdGhlIHNhbWUKKwkJCQkJCSAqIHNjaGVtYSwgc2luY2Ug Q1JFQVRFIFRBQkxFIHdpbGwgcmVnZW5lcmF0ZSB0aGF0CisJCQkJCQkgKiBleGFjdCBuYW1lLiAg VGhlIHNlcXVlbmNlIGlzIGFuIElOVEVSTkFMIGRlcGVuZGVuY3kKKwkJCQkJCSAqIG9mIHRoZSBj b2x1bW4sIHNvIHRoZSBsb2NrIHdlIGhvbGQgb24gdGhlIHRhYmxlCisJCQkJCQkgKiBhbHNvIHBp bnMgaXQsIGJ1dCB0aGUgbG9va3VwIGhlbHBlciBzdGlsbCBkZWZlbmRzCisJCQkJCQkgKiBhZ2Fp bnN0IGEgbWlzc2luZyBwZ19jbGFzcyByb3cuCisJCQkJCQkgKi8KKwkJCQkJCXsKKwkJCQkJCQlI ZWFwVHVwbGUJc2VxQ2xhc3NUdXA7CisJCQkJCQkJRm9ybV9wZ19jbGFzcyBzZXFDbGFzczsKKwkJ CQkJCQljaGFyCQlhdXRvbmFtZVtOQU1FREFUQUxFTl07CisKKwkJCQkJCQlzZXFDbGFzc1R1cCA9 IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsCisJCQkJCQkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1 bShzZXFpZCkpOworCQkJCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXFDbGFzc1R1cCkpCisJ CQkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklO RURfT0JKRUNUKSwKKwkJCQkJCQkJCQkgZXJybXNnKCJpZGVudGl0eSBzZXF1ZW5jZSB3aXRoIE9J RCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkJCQkJCQlzZXFpZCksCisJCQkJCQkJCQkJIGVy cmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgZHJvcHBlZC4iKSkpOworCQkJ CQkJCXNlcUNsYXNzID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChzZXFDbGFzc1R1cCk7CisK KwkJCQkJCQlzbnByaW50ZihhdXRvbmFtZSwgc2l6ZW9mKGF1dG9uYW1lKSwgIiVzXyVzX3NlcSIs CisJCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCSBOYW1l U3RyKGF0dC0+YXR0bmFtZSkpOworCQkJCQkJCWlmIChzZXFDbGFzcy0+cmVsbmFtZXNwYWNlICE9 IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCkgfHwKKwkJCQkJCQkJc3RyY21wKE5hbWVTdHIoc2Vx Q2xhc3MtPnJlbG5hbWUpLCBhdXRvbmFtZSkgIT0gMCkKKwkJCQkJCQl7CisJCQkJCQkJCWNoYXIJ ICAgKnNlcVF1YWwgPQorCQkJCQkJCQkJbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQoc2VxaWQsCisJ CQkJCQkJCQkJCQkJCQlzY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQkJCQkJYmFzZV9uYW1l c3BhY2UpOworCisJCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc1NFUVVFTkNFIE5B TUUgJXMiLAorCQkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXFRdWFsKTsKKwkJ CQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQkJCXBmcmVlKHNlcVF1YWwpOworCQkJCQkJ CX0KKwkJCQkJCQlSZWxlYXNlU3lzQ2FjaGUoc2VxQ2xhc3NUdXApOworCQkJCQkJfQorCisJCQkJ CQlpZiAoc2VxLT5zZXFzdGFydCAhPSBkZWZfc3RhcnQpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5k U3RyaW5nSW5mbygmb3B0cywgIiVzU1RBUlQgV0lUSCAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJ CQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcXN0YXJ0KTsKKwkJCQkJCQlmaXJzdF9v cHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcWluY3JlbWVudCAhPSAxKQor CQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc0lOQ1JFTUVOVCBCWSAi IElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNl cWluY3JlbWVudCk7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCQlp ZiAoc2VxLT5zZXFtaW4gIT0gZGVmX21pbikKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJ bmZvKCZvcHRzLCAiJXNNSU5WQUxVRSAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJIGZpcnN0 X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcW1pbik7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7 CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFtYXggIT0gZGVmX21heCkKKwkJCQkJCXsKKwkJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNNQVhWQUxVRSAiIElOVDY0X0ZPUk1BVCwK KwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcW1heCk7CisJCQkJCQkJ Zmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFjYWNoZSAhPSAx KQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc0NBQ0hFICIgSU5U NjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxY2Fj aGUpOworCQkJCQkJCWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYgKHNlcS0+ c2VxY3ljbGUpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzQ1lD TEUiLCBmaXJzdF9vcHQgPyAiIiA6ICIgIik7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJ CQkJCQl9CisKKwkJCQkJCWlmICghZmlyc3Rfb3B0KQorCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAiICglcykiLCBvcHRzLmRhdGEpOworCisJCQkJCQlwZnJlZShvcHRzLmRhdGEpOworCQkJ CQkJUmVsZWFzZVN5c0NhY2hlKHNlcVR1cCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNl IGlmIChkZWZleHByKQorCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIERFRkFVTFQgJXMiLCBk ZWZleHByKTsKKworCQkJaWYgKGRlZmV4cHIpCisJCQkJcGZyZWUoZGVmZXhwcik7CisJCX0KKwor CQlpZiAoYXR0LT5hdHRub3RudWxsKQorCQl7CisJCQlMb2NhbE5vdE51bGxFbnRyeSAqbm4gPSAm bm5fZW50cmllc1thdHQtPmF0dG51bV07CisKKwkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmICFu bi0+aXNfYXV0bykKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBDT05TVFJBSU5UICVzIE5P VCBOVUxMIiwKKwkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobm4tPm5hbWUpKTsKKwkJCWVsc2UK KwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBOT1QgTlVMTCIpOworCQkJaWYgKG5u LT5uYW1lICE9IE5VTEwgJiYgbm4tPm5vX2luaGVyaXQpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsICIgTk8gSU5IRVJJVCIpOworCQl9CisJfQorCisJLyoKKwkgKiBUYWJsZS1sZXZl bCBDSEVDSyBjb25zdHJhaW50cyAtIGVtaXR0ZWQgaW5saW5lIGluIHRoZSBDUkVBVEUgVEFCTEUg Ym9keQorCSAqIHNvIHRoZXkgYXBwZWFyIGFsb25nc2lkZSB0aGUgY29sdW1ucyAodGhlIHBnX2R1 bXAgc2hhcGUpLiAgVGhlCisJICogY29uc3RyYWludCBsb29wIGxhdGVyIGluIHBnX2dldF90YWJs ZV9kZGxfaW50ZXJuYWwgc2tpcHMgQ0hFQ0sKKwkgKiBjb25zdHJhaW50cyB0byBhdm9pZCBkb3Vi bGUtZW1pc3Npb24uCisJICovCisJaWYgKGluY2x1ZGVfY29uc3RyYWludHMpCisJCWFwcGVuZF9p bmxpbmVfY2hlY2tfY29uc3RyYWludHMoYnVmLCByZWwsIHByZXR0eSwgJmZpcnN0KTsKK30KKwor LyoKKyAqIGFwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzCisgKgkJRm9yIGEgdHlwZWQgdGFi bGUgKENSRUFURSBUQUJMRSAuLi4gT0YgdHlwZV9uYW1lKSwgYXBwZW5kIHRoZQorICoJCW9wdGlv bmFsICIoY29sIFdJVEggT1BUSU9OUyAuLi4sIC4uLikiIGxpc3QgY2FycnlpbmcgbG9jYWxseQor ICoJCWFwcGxpZWQgcGVyLWNvbHVtbiBvdmVycmlkZXMgLSBERUZBVUxULCBOT1QgTlVMTCwgYW5k IGFueSBsb2NhbGx5CisgKgkJZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludHMuCisgKgorICogQ29s dW1ucyB3aG9zZSB0eXBlIGlzIGZ1bGx5IGRpY3RhdGVkIGJ5IHJlbG9mdHlwZSBlbWl0IG5vdGhp bmcuICBUaGUKKyAqIHBhcmVudGhlc2lzZWQgbGlzdCBpcyBzdXBwcmVzc2VkIGVudGlyZWx5IHdo ZW4gbm8gY29sdW1uIG5lZWRzIGFuCisgKiBvdmVycmlkZSBhbmQgdGhlcmUgYXJlIG5vIGxvY2Fs bHktZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludHMsIG1hdGNoaW5nCisgKiB0aGUgY2Fub25pY2Fs ICJDUkVBVEUgVEFCTEUgeCBPRiB0OyIgc2hhcGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRf dHlwZWRfY29sdW1uX292ZXJyaWRlcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29s IHByZXR0eSwKKwkJCQkJCQkgIGJvb2wgaW5jbHVkZV9jb25zdHJhaW50cywKKwkJCQkJCQkgIExv Y2FsTm90TnVsbEVudHJ5ICogbm5fZW50cmllcykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJl bGF0aW9uR2V0RGVzY3IocmVsKTsKKwlMaXN0CSAgICpkcGNvbnRleHQgPSBOSUw7CisJU3RyaW5n SW5mb0RhdGEgaW5uZXI7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaW5pdFN0cmluZ0luZm8o JmlubmVyKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7 CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJ CWNoYXIJICAgKmRlZmV4cHIgPSBOVUxMOworCQlib29sCQloYXNfZGVmYXVsdDsKKwkJYm9vbAkJ aGFzX25vdG51bGw7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkKQorCQkJY29udGludWU7CisK KwkJaWYgKGF0dC0+YXR0aGFzZGVmKQorCQkJZGVmZXhwciA9IGZpbmRfYXR0cmRlZl90ZXh0KHJl bCwgYXR0LT5hdHRudW0sICZkcGNvbnRleHQpOworCisJCWhhc19kZWZhdWx0ID0gKGRlZmV4cHIg IT0gTlVMTCk7CisJCWhhc19ub3RudWxsID0gYXR0LT5hdHRub3RudWxsOworCisJCWlmICghaGFz X2RlZmF1bHQgJiYgIWhhc19ub3RudWxsKQorCQl7CisJCQlpZiAoZGVmZXhwcikKKwkJCQlwZnJl ZShkZWZleHByKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKCZpbm5lciwgJywnKTsKKwkJZmlyc3QgPSBmYWxzZTsKKwkJaWYgKHBy ZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmlubmVyLCAiXG4gICAgIik7CisJCWVs c2UKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZpbm5lciwgJyAnKTsKKworCQlhcHBlbmRTdHJp bmdJbmZvKCZpbm5lciwgIiVzIFdJVEggT1BUSU9OUyIsCisJCQkJCQkgcXVvdGVfaWRlbnRpZmll cihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpKTsKKwkJaWYgKGhhc19kZWZhdWx0KQorCQkJYXBwZW5k U3RyaW5nSW5mbygmaW5uZXIsICIgREVGQVVMVCAlcyIsIGRlZmV4cHIpOworCQlpZiAoaGFzX25v dG51bGwpCisJCXsKKwkJCUxvY2FsTm90TnVsbEVudHJ5ICpubiA9ICZubl9lbnRyaWVzW2F0dC0+ YXR0bnVtXTsKKworCQkJaWYgKG5uLT5uYW1lICE9IE5VTEwgJiYgIW5uLT5pc19hdXRvKQorCQkJ CWFwcGVuZFN0cmluZ0luZm8oJmlubmVyLCAiIENPTlNUUkFJTlQgJXMgTk9UIE5VTEwiLAorCQkJ CQkJCQkgcXVvdGVfaWRlbnRpZmllcihubi0+bmFtZSkpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmlubmVyLCAiIE5PVCBOVUxMIik7CisJCQlpZiAobm4tPm5hbWUgIT0g TlVMTCAmJiBubi0+bm9faW5oZXJpdCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5l ciwgIiBOTyBJTkhFUklUIik7CisJCX0KKworCQlpZiAoZGVmZXhwcikKKwkJCXBmcmVlKGRlZmV4 cHIpOworCX0KKworCS8qCisJICogTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBjb25zdHJhaW50cyBv biBhIHR5cGVkIHRhYmxlIGJlbG9uZyBpbiB0aGUKKwkgKiBjb2x1bW4tbGlzdCBwYXJlbnRoZXNl cywgc2FtZSBhcyBmb3IgYW4gdW50eXBlZCB0YWJsZS4gIFRoZSBvdXQtb2YtbGluZQorCSAqIGNv bnN0cmFpbnQgbG9vcCBsYXRlciBzdGlsbCBza2lwcyBDSEVDS3MuCisJICovCisJaWYgKGluY2x1 ZGVfY29uc3RyYWludHMpCisJCWFwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMoJmlubmVy LCByZWwsIHByZXR0eSwgJmZpcnN0KTsKKworCWlmICghZmlyc3QpCisJeworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGJ1ZiwgIiAoIik7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBp bm5lci5kYXRhKTsKKwkJaWYgKHByZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCAiXG4pIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKKwl9 CisJcGZyZWUoaW5uZXIuZGF0YSk7Cit9CisKKy8qCisgKiBhcHBlbmRfc3RtdCAvIGFwcGVuZF9z dHJpcHBlZF9zdG10CisgKgkJUHVzaCBjdHgtPmJ1ZiBvbnRvIGN0eC0+c3RhdGVtZW50cy4KKyAq CisgKiBhcHBlbmRfc3RtdCBpcyB1c2VkIGZvciBlbWlzc2lvbnMgd2hlcmUgdGhlIHRhYmxlIHJl ZmVyZW5jZSBpcyBidWlsdAorICogZnJvbSBjdHgtPnF1YWxuYW1lIChhbHJlYWR5IHBhcnRpYWwt cXVhbGlmaWVkIHBlciBzY2hlbWFfcXVhbGlmaWVkKS4KKyAqIGFwcGVuZF9zdHJpcHBlZF9zdG10 IGlzIHVzZWQgYWZ0ZXIgaW52b2tpbmcgYWx3YXlzLXF1YWxpZmllZCBydWxldXRpbHMKKyAqIGhl bHBlcnMgKHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQsIHBnX2dldF9pbmRleGRlZl9zdHJp bmcsCisgKiBwZ19nZXRfcnVsZWRlZiwgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKSAt IHdoZW4KKyAqIHNjaGVtYV9xdWFsaWZpZWQgaXMgZmFsc2UsIHRoZSBiYXNlLXNjaGVtYSBwcmVm aXggaXMgc3RyaXBwZWQgZnJvbQorICogdGhlaXIgb3V0cHV0IHNvIHRoZSBlbWl0dGVkIERETCBp cyByZXBsYXktcmVsb2NhdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3RtdChUYWJs ZURkbENvbnRleHQgKiBjdHgpCit7CisJY3R4LT5zdGF0ZW1lbnRzID0gbGFwcGVuZChjdHgtPnN0 YXRlbWVudHMsIHBzdHJkdXAoY3R4LT5idWYuZGF0YSkpOworfQorCitzdGF0aWMgdm9pZAorYXBw ZW5kX3N0cmlwcGVkX3N0bXQoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCWlmIChjdHgtPnNj aGVtYV9wcmVmaXggIT0gTlVMTCkKKwkJY3R4LT5zdGF0ZW1lbnRzID0gbGFwcGVuZChjdHgtPnN0 YXRlbWVudHMsCisJCQkJCQkJCSAgc3RyaXBfc2NoZW1hX3ByZWZpeChjdHgtPmJ1Zi5kYXRhLAor CQkJCQkJCQkJCQkJCSAgY3R4LT5zY2hlbWFfcHJlZml4KSk7CisJZWxzZQorCQljdHgtPnN0YXRl bWVudHMgPSBsYXBwZW5kKGN0eC0+c3RhdGVtZW50cywgcHN0cmR1cChjdHgtPmJ1Zi5kYXRhKSk7 Cit9CisKKy8qCisgKiBlbWl0X2NyZWF0ZV90YWJsZV9zdG10CisgKgkJQnVpbGQgdGhlIGxlYWRp bmcgQ1JFQVRFIFRBQkxFIHN0YXRlbWVudCwgaW5jbHVkaW5nIHBlcnNpc3RlbmNlCisgKgkJKFRF TVBPUkFSWSAvIFVOTE9HR0VEKSwgYm9keSAoY29sdW1uIGxpc3QgLyBPRiB0eXBlX25hbWUgLwor ICoJCVBBUlRJVElPTiBPRiBwYXJlbnQpLCBJTkhFUklUUywgUEFSVElUSU9OIEJZLCBVU0lORyBt ZXRob2QsCisgKgkJV0lUSCAocmVsb3B0aW9ucyksIFRBQkxFU1BBQ0UsIGFuZCBPTiBDT01NSVQu CisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4 dCAqIGN0eCkKK3sKKwlSZWxhdGlvbglyZWwgPSBjdHgtPnJlbDsKKwljaGFyCQlyZWxwZXJzaXN0 ZW5jZSA9IHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKKwljaGFyCQlyZWxraW5kID0gcmVs LT5yZF9yZWwtPnJlbGtpbmQ7CisJYm9vbAkJaXNfdHlwZWQgPSBPaWRJc1ZhbGlkKHJlbC0+cmRf cmVsLT5yZWxvZnR5cGUpOworCUhlYXBUdXBsZQljbGFzc3R1cDsKKwlEYXR1bQkJcmVsb3B0RGF0 dW07CisJYm9vbAkJcmVsb3B0SXNudWxsOworCisJY2xhc3N0dXAgPSBTZWFyY2hTeXNDYWNoZTEo UkVMT0lELCBPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoY2xhc3N0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig cmVsYXRpb24gJXUiLCBjdHgtPnJlbGlkKTsKKworCXJlbG9wdERhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKFJFTE9JRCwgY2xhc3N0dXAsCisJCQkJCQkJCSAgQW51bV9wZ19jbGFzc19yZWxvcHRpb25z LCAmcmVsb3B0SXNudWxsKTsKKworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiQ1JFQVRFICIpOworCWlmIChyZWxwZXJzaXN0 ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZj dHgtPmJ1ZiwgIlRFTVBPUkFSWSAiKTsKKwllbHNlIGlmIChyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9VTkxPR0dFRCkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYs ICJVTkxPR0dFRCAiKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIlRBQkxFICVzIiwg Y3R4LT5xdWFsbmFtZSk7CisKKwlpZiAocmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQorCXsK KwkJT2lkCQkJcGFyZW50T2lkID0gZ2V0X3BhcnRpdGlvbl9wYXJlbnQoY3R4LT5yZWxpZCwgdHJ1 ZSk7CisJCWNoYXIJICAgKnBhcmVudFF1YWwgPSBsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChwYXJl bnRPaWQsCisJCQkJCQkJCQkJCQkJCSBjdHgtPnNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkJ CQkJCSBjdHgtPmJhc2VfbmFtZXNwYWNlKTsKKwkJY2hhcgkgICAqcGFyZW50UmVsbmFtZSA9IGdl dF9yZWxfbmFtZShwYXJlbnRPaWQpOworCQlEYXR1bQkJYm91bmREYXR1bTsKKwkJYm9vbAkJYm91 bmRJc251bGw7CisJCWNoYXIJICAgKmZvclZhbHVlcyA9IE5VTEw7CisJCWNoYXIJICAgKmJvdW5k U3RyID0gTlVMTDsKKworCQlpZiAocGFyZW50UmVsbmFtZSA9PSBOVUxMKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVy cm1zZygicGFydGl0aW9uIHBhcmVudCB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJ CQkJcGFyZW50T2lkKSwKKwkJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJy ZW50bHkgZHJvcHBlZC4iKSkpOworCisJCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVM T0lELCBjbGFzc3R1cCwKKwkJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwgJmJv dW5kSXNudWxsKTsKKwkJaWYgKCFib3VuZElzbnVsbCkKKwkJeworCQkJTm9kZQkgICAqYm91bmRO b2RlOworCQkJTGlzdAkgICAqZHBjb250ZXh0OworCisJCQlib3VuZFN0ciA9IFRleHREYXR1bUdl dENTdHJpbmcoYm91bmREYXR1bSk7CisJCQlib3VuZE5vZGUgPSBzdHJpbmdUb05vZGUoYm91bmRT dHIpOworCQkJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihwYXJlbnRSZWxuYW1lLCBw YXJlbnRPaWQpOworCQkJZm9yVmFsdWVzID0gZGVwYXJzZV9leHByZXNzaW9uKGJvdW5kTm9kZSwg ZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCQl9CisKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4 LT5idWYsICIgUEFSVElUSU9OIE9GICVzICVzIiwKKwkJCQkJCSBwYXJlbnRRdWFsLCBmb3JWYWx1 ZXMgPyBmb3JWYWx1ZXMgOiAiREVGQVVMVCIpOworCQlpZiAoZm9yVmFsdWVzKQorCQkJcGZyZWUo Zm9yVmFsdWVzKTsKKwkJaWYgKGJvdW5kU3RyKQorCQkJcGZyZWUoYm91bmRTdHIpOworCQlwZnJl ZShwYXJlbnRRdWFsKTsKKwkJcGZyZWUocGFyZW50UmVsbmFtZSk7CisJfQorCWVsc2UgaWYgKGlz X3R5cGVkKQorCXsKKwkJY2hhcgkgICAqdHlwbmFtZSA9IGZvcm1hdF90eXBlX2JlX3F1YWxpZmll ZChyZWwtPnJkX3JlbC0+cmVsb2Z0eXBlKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1 ZiwgIiBPRiAlcyIsIHR5cG5hbWUpOworCQlwZnJlZSh0eXBuYW1lKTsKKworCQlhcHBlbmRfdHlw ZWRfY29sdW1uX292ZXJyaWRlcygmY3R4LT5idWYsIHJlbCwgY3R4LT5wcmV0dHksCisJCQkJCQkJ CQkgIGN0eC0+aW5jbHVkZV9jb25zdHJhaW50cywKKwkJCQkJCQkJCSAgY3R4LT5ubl9lbnRyaWVz KTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcGFyZW50czsKKwkJTGlzdENlbGwgICAqbGM7 CisJCWJvb2wJCWZpcnN0OworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAi ICgiKTsKKworCQlhcHBlbmRfY29sdW1uX2RlZnMoJmN0eC0+YnVmLCByZWwsIGN0eC0+cHJldHR5 LAorCQkJCQkJICAgY3R4LT5pbmNsdWRlX2NvbnN0cmFpbnRzLAorCQkJCQkJICAgY3R4LT5zY2hl bWFfcXVhbGlmaWVkLCBjdHgtPm5uX2VudHJpZXMpOworCisJCWlmIChjdHgtPnByZXR0eSkKKwkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiXG4pIik7CisJCWVsc2UKKwkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJyknKTsKKworCQlwYXJlbnRzID0gZmluZF9p bmhlcml0YW5jZV9wYXJlbnRzKGN0eC0+cmVsaWQsIE5vTG9jayk7CisJCWlmIChwYXJlbnRzICE9 IE5JTCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIgSU5IRVJJ VFMgKCIpOworCQkJZmlyc3QgPSB0cnVlOworCQkJZm9yZWFjaChsYywgcGFyZW50cykKKwkJCXsK KwkJCQlPaWQJCQlwb2lkID0gbGZpcnN0X29pZChsYyk7CisJCQkJY2hhcgkgICAqcG5hbWUgPSBs b29rdXBfcmVsbmFtZV9mb3JfZW1pdChwb2lkLAorCQkJCQkJCQkJCQkJCQkJY3R4LT5zY2hlbWFf cXVhbGlmaWVkLAorCQkJCQkJCQkJCQkJCQkJY3R4LT5iYXNlX25hbWVzcGFjZSk7CisKKwkJCQlp ZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiwgIik7 CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1 ZiwgcG5hbWUpOworCQkJCXBmcmVlKHBuYW1lKTsKKwkJCX0KKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZjdHgtPmJ1ZiwgJyknKTsKKwkJCWxpc3RfZnJlZShwYXJlbnRzKTsKKwkJfQorCX0KKwor CWlmIChyZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQlEYXR1bQkJ cGFydGtleURhdHVtOworCQljaGFyCSAgICpwYXJ0a2V5OworCisJCXBhcnRrZXlEYXR1bSA9IE9p ZEZ1bmN0aW9uQ2FsbDEoRl9QR19HRVRfUEFSVEtFWURFRiwKKwkJCQkJCQkJCQlPYmplY3RJZEdl dERhdHVtKGN0eC0+cmVsaWQpKTsKKwkJcGFydGtleSA9IFRleHREYXR1bUdldENTdHJpbmcocGFy dGtleURhdHVtKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIgUEFSVElUSU9OIEJZ ICVzIiwgcGFydGtleSk7CisJCXBmcmVlKHBhcnRrZXkpOworCX0KKworCWlmIChPaWRJc1ZhbGlk KHJlbC0+cmRfcmVsLT5yZWxhbSkgJiYKKwkJcmVsLT5yZF9yZWwtPnJlbGFtICE9IEhFQVBfVEFC TEVfQU1fT0lEKQorCXsKKwkJY2hhcgkgICAqYW1uYW1lID0gZ2V0X2FtX25hbWUocmVsLT5yZF9y ZWwtPnJlbGFtKTsKKworCQlpZiAoYW1uYW1lICE9IE5VTEwpCisJCXsKKwkJCWFwcGVuZFN0cmlu Z0luZm8oJmN0eC0+YnVmLCAiIFVTSU5HICVzIiwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihh bW5hbWUpKTsKKwkJCXBmcmVlKGFtbmFtZSk7CisJCX0KKwl9CisKKwlpZiAoIXJlbG9wdElzbnVs bCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIFdJVEggKCIpOwor CQlnZXRfcmVsb3B0aW9ucygmY3R4LT5idWYsIHJlbG9wdERhdHVtKTsKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJmN0eC0+YnVmLCAnKScpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShjbGFzc3R1 cCk7CisKKwlpZiAoIWN0eC0+bm9fdGFibGVzcGFjZSAmJiBPaWRJc1ZhbGlkKHJlbC0+cmRfcmVs LT5yZWx0YWJsZXNwYWNlKSkKKwl7CisJCWNoYXIJICAgKnRzbmFtZSA9IGdldF90YWJsZXNwYWNl X25hbWUocmVsLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2UpOworCisJCWlmICh0c25hbWUgIT0gTlVM TCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIgVEFCTEVTUEFDRSAlcyIs CisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIodHNuYW1lKSk7CisJCQlwZnJlZSh0c25hbWUpOwor CQl9CisJfQorCisJaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJ eworCQlPbkNvbW1pdEFjdGlvbiBvYyA9IGdldF9vbl9jb21taXRfYWN0aW9uKGN0eC0+cmVsaWQp OworCisJCWlmIChvYyA9PSBPTkNPTU1JVF9ERUxFVEVfUk9XUykKKwkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmN0eC0+YnVmLCAiIE9OIENPTU1JVCBERUxFVEUgUk9XUyIpOworCQllbHNlIGlm IChvYyA9PSBPTkNPTU1JVF9EUk9QKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5i dWYsICIgT04gQ09NTUlUIERST1AiKTsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4 LT5idWYsICc7Jyk7CisJYXBwZW5kX3N0bXQoY3R4KTsKK30KKworLyoKKyAqIGVtaXRfb3duZXJf c3RtdAorICoJCUFMVEVSIFRBQkxFIHF1YWxuYW1lIE9XTkVSIFRPIHJvbGUuCisgKi8KK3N0YXRp YyB2b2lkCitlbWl0X293bmVyX3N0bXQoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCWNoYXIJ ICAgKm93bmVyOworCisJaWYgKGN0eC0+bm9fb3duZXIpCisJCXJldHVybjsKKworCW93bmVyID0g R2V0VXNlck5hbWVGcm9tSWQoY3R4LT5yZWwtPnJkX3JlbC0+cmVsb3duZXIsIGZhbHNlKTsKKwly ZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1Ziwg IkFMVEVSIFRBQkxFICVzIE9XTkVSIFRPICVzOyIsCisJCQkJCSBjdHgtPnF1YWxuYW1lLCBxdW90 ZV9pZGVudGlmaWVyKG93bmVyKSk7CisJYXBwZW5kX3N0bXQoY3R4KTsKKwlwZnJlZShvd25lcik7 Cit9CisKKy8qCisgKiBlbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzCisgKgkJQUxURVIgVEFC TEUgcXVhbG5hbWUgQUxURVIgQ09MVU1OIGNvbCBTRVQgREVGQVVMVCBleHByIC0gb25lIHBlcgor ICoJCWluaGVyaXRlZCAoYXR0aXNsb2NhbD1mYWxzZSkgbm9uLWdlbmVyYXRlZCBjb2x1bW4gY2Fy cnlpbmcgYQorICoJCWxvY2FsbHktc2V0IGRlZmF1bHQuICBHZW5lcmF0ZWQgY29sdW1ucyBhcmUg c2tpcHBlZDogdGhlaXIKKyAqCQlleHByZXNzaW9uIGlzIGluaGVyaXRlZCBhdXRvbWF0aWNhbGx5 IGFuZCBTRVQgREVGQVVMVCB3b3VsZAorICoJCWZhaWwgYXQgcmVwbGF5LgorICovCitzdGF0aWMg dm9pZAorZW1pdF9jaGlsZF9kZWZhdWx0X292ZXJyaWRlcyhUYWJsZURkbENvbnRleHQgKiBjdHgp Cit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKGN0eC0+cmVsKTsKKwlM aXN0CSAgICpkcGNvbnRleHQgPSBOSUw7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2Mt Pm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRy KHR1cGRlc2MsIGkpOworCQljaGFyCSAgICpkZWZzdHI7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9w cGVkIHx8IGF0dC0+YXR0aXNsb2NhbCB8fCAhYXR0LT5hdHRoYXNkZWYpCisJCQljb250aW51ZTsK KwkJaWYgKGF0dC0+YXR0Z2VuZXJhdGVkICE9ICdcMCcpCisJCQljb250aW51ZTsKKworCQlkZWZz dHIgPSBmaW5kX2F0dHJkZWZfdGV4dChjdHgtPnJlbCwgYXR0LT5hdHRudW0sICZkcGNvbnRleHQp OworCQlpZiAoZGVmc3RyID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlyZXNldFN0cmluZ0lu Zm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkgIkFM VEVSIFRBQkxFICVzIEFMVEVSIENPTFVNTiAlcyBTRVQgREVGQVVMVCAlczsiLAorCQkJCQkJIGN0 eC0+cXVhbG5hbWUsCisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFt ZSkpLAorCQkJCQkJIGRlZnN0cik7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJCXBmcmVlKGRlZnN0 cik7CisJfQorfQorCisvKgorICogZW1pdF9hdHRvcHRpb25zCisgKgkJQUxURVIgVEFCTEUgcXVh bG5hbWUgQUxURVIgQ09MVU1OIGNvbCBTRVQgKC4uLikgLSBvbmUgcGVyIGNvbHVtbgorICoJCXdp dGggbm9uLW51bGwgcGdfYXR0cmlidXRlLmF0dG9wdGlvbnMuICBUaGUgaW5saW5lIGZvcm0gb2Yg dGhlc2UKKyAqCQlvcHRpb25zIGlzbid0IGF2YWlsYWJsZSBpbiBDUkVBVEUgVEFCTEUsIHNvIHRo ZXkgY29tZSBvdXQgaGVyZS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfYXR0b3B0aW9ucyhUYWJs ZURkbENvbnRleHQgKiBjdHgpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERl c2NyKGN0eC0+cmVsKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkr KykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywg aSk7CisJCUhlYXBUdXBsZQlhdHRUdXA7CisJCURhdHVtCQlvcHREYXR1bTsKKwkJYm9vbAkJb3B0 SXNudWxsOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCkKKwkJCWNvbnRpbnVlOworCisJCWF0 dFR1cCA9IFNlYXJjaFN5c0NhY2hlMihBVFROVU0sCisJCQkJCQkJCSBPYmplY3RJZEdldERhdHVt KGN0eC0+cmVsaWQpLAorCQkJCQkJCQkgSW50MTZHZXREYXR1bShhdHQtPmF0dG51bSkpOworCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0VHVwKSkKKwkJCWNvbnRpbnVlOworCisJCW9wdERhdHVt ID0gU3lzQ2FjaGVHZXRBdHRyKEFUVE5VTSwgYXR0VHVwLAorCQkJCQkJCQkgICBBbnVtX3BnX2F0 dHJpYnV0ZV9hdHRvcHRpb25zLCAmb3B0SXNudWxsKTsKKwkJaWYgKCFvcHRJc251bGwpCisJCXsK KwkJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4 LT5idWYsCisJCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBBTFRFUiBDT0xVTU4gJXMgU0VUICgiLAor CQkJCQkJCSBjdHgtPnF1YWxuYW1lLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIo YXR0LT5hdHRuYW1lKSkpOworCQkJZ2V0X3JlbG9wdGlvbnMoJmN0eC0+YnVmLCBvcHREYXR1bSk7 CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIik7Iik7CisJCQlhcHBlbmRf c3RtdChjdHgpOworCQl9CisJCVJlbGVhc2VTeXNDYWNoZShhdHRUdXApOworCX0KK30KKworLyoK KyAqIGVtaXRfaW5kZXhlcworICoJCUNSRUFURSBJTkRFWCBwZXIgbm9uLWNvbnN0cmFpbnQtYmFj a2VkIGluZGV4IG9uIHRoZSByZWxhdGlvbi4KKyAqCQlJbmRleGVzIHRoYXQgYmFjayBQSyAvIFVO SVFVRSAvIEVYQ0xVREUgY29uc3RyYWludHMgYXJlIGVtaXR0ZWQKKyAqCQlvdXQtb2YtbGluZSBi eSBlbWl0X2xvY2FsX2NvbnN0cmFpbnRzICh0aGUgQUxURVIgVEFCTEUgLi4uIEFERAorICoJCUNP TlNUUkFJTlQgc3RhdGVtZW50IGNyZWF0ZXMgdGhlIGluZGV4IGltcGxpY2l0bHkpLgorICovCitz dGF0aWMgdm9pZAorZW1pdF9pbmRleGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCkKK3sKKwlMaXN0 CSAgICppbmRleG9pZHM7CisJTGlzdENlbGwgICAqbGM7CisKKwlpZiAoIWN0eC0+aW5jbHVkZV9p bmRleGVzKQorCQlyZXR1cm47CisKKwlpbmRleG9pZHMgPSBSZWxhdGlvbkdldEluZGV4TGlzdChj dHgtPnJlbCk7CisJZm9yZWFjaChsYywgaW5kZXhvaWRzKQorCXsKKwkJT2lkCQkJaWR4b2lkID0g bGZpcnN0X29pZChsYyk7CisJCWNoYXIJICAgKmlkeGRlZjsKKworCQlpZiAoT2lkSXNWYWxpZChn ZXRfaW5kZXhfY29uc3RyYWludChpZHhvaWQpKSkKKwkJCWNvbnRpbnVlOworCisJCWlkeGRlZiA9 IHBnX2dldF9pbmRleGRlZl9zdHJpbmcoaWR4b2lkKTsKKwkJcmVzZXRTdHJpbmdJbmZvKCZjdHgt PmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiJXM7IiwgaWR4ZGVmKTsKKwkJ YXBwZW5kX3N0cmlwcGVkX3N0bXQoY3R4KTsKKwkJcGZyZWUoaWR4ZGVmKTsKKwl9CisJbGlzdF9m cmVlKGluZGV4b2lkcyk7Cit9CisKKy8qCisgKiBlbWl0X2xvY2FsX2NvbnN0cmFpbnRzCisgKgkJ QUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIGZvciBlYWNoIGxvY2FsbHktZGVmaW5lZCBj b25zdHJhaW50CisgKgkJb24gdGhlIHJlbGF0aW9uLiAgSW5oZXJpdGVkIGNvbnN0cmFpbnRzIChj b25pc2xvY2FsPWZhbHNlKSBjb21lCisgKgkJZnJvbSB0aGUgcGFyZW50J3MgRERMLiAgQ0hFQ0sg Y29uc3RyYWludHMgYXJlIGVtaXR0ZWQgaW5saW5lIGZvcgorICoJCXJlZ3VsYXIvdHlwZWQgdGFi bGVzIChza2lwIGhlcmUpIGJ1dCBvdXQtb2YtbGluZSBmb3IgcGFydGl0aW9uCisgKgkJY2hpbGRy ZW4gKG5vIGNvbHVtbiBsaXN0IHRvIGxpdmUgaW4pLiAgVXNlci1uYW1lZCBOT1QgTlVMTAorICoJ CWNvbnN0cmFpbnRzIGFyZSBlbWl0dGVkIGlubGluZSBieSB0aGUgY29sdW1uLWVtaXQgaGVscGVy cyBhbmQKKyAqCQlhcmUgc2tpcHBlZCB2aWEgc2tpcF9ub3RudWxsX29pZHM7IGF1dG8tbmFtZWQg Tk9UIE5VTExzIGZhbGwKKyAqCQl0aHJvdWdoIGhlcmUgYW5kIGFyZSBkZWR1cCdkIGJ5IG5hbWUg YXQgcmVwbGF5LgorICovCitzdGF0aWMgdm9pZAorZW1pdF9sb2NhbF9jb25zdHJhaW50cyhUYWJs ZURkbENvbnRleHQgKiBjdHgpCit7CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNv blNjYW47CisJU2NhbktleURhdGEgY29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisJYm9vbAkJ aXNfcGFydGl0aW9uID0gY3R4LT5yZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb247CisKKwlpZiAo IWN0eC0+aW5jbHVkZV9jb25zdHJhaW50cykKKwkJcmV0dXJuOworCisJY29uUmVsID0gdGFibGVf b3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5p dCgmY29uS2V5LAorCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQlCVEVxdWFs U3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlk KSk7CisJY29uU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxp ZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmY29uS2V5KTsKKwor CXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQoY29uU2Nh bikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQp IEdFVFNUUlVDVChjb25UdXApOworCQljaGFyCSAgICpjb25kZWY7CisKKwkJaWYgKCFjb24tPmNv bmlzbG9jYWwpCisJCQljb250aW51ZTsKKwkJaWYgKGNvbi0+Y29udHlwZSA9PSBDT05TVFJBSU5U X0NIRUNLICYmICFpc19wYXJ0aXRpb24pCisJCQljb250aW51ZTsKKwkJaWYgKGNvbi0+Y29udHlw ZSA9PSBDT05TVFJBSU5UX05PVE5VTEwgJiYgIWlzX3BhcnRpdGlvbiAmJgorCQkJbGlzdF9tZW1i ZXJfb2lkKGN0eC0+c2tpcF9ub3RudWxsX29pZHMsIGNvbi0+b2lkKSkKKwkJCWNvbnRpbnVlOwor CisJCWNvbmRlZiA9IHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoY29uLT5vaWQpOworCQly ZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYs ICIlczsiLCBjb25kZWYpOworCQlhcHBlbmRfc3RyaXBwZWRfc3RtdChjdHgpOworCQlwZnJlZShj b25kZWYpOworCX0KKwlzeXN0YWJsZV9lbmRzY2FuKGNvblNjYW4pOworCXRhYmxlX2Nsb3NlKGNv blJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKK30KKworLyoKKyAqIGVtaXRfcnVsZXMKKyAqCQlDUkVB VEUgUlVMRSBwZXIgY2FjaGVkIHJld3JpdGUgcnVsZSBvbiB0aGUgcmVsYXRpb24uCisgKi8KK3N0 YXRpYyB2b2lkCitlbWl0X3J1bGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCkKK3sKKwlpZiAoIWN0 eC0+aW5jbHVkZV9ydWxlcyB8fCBjdHgtPnJlbC0+cmRfcnVsZXMgPT0gTlVMTCkKKwkJcmV0dXJu OworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBjdHgtPnJlbC0+cmRfcnVsZXMtPm51bUxvY2tzOyBp KyspCisJeworCQlPaWQJCQlydWxlaWQgPSBjdHgtPnJlbC0+cmRfcnVsZXMtPnJ1bGVzW2ldLT5y dWxlSWQ7CisJCURhdHVtCQlydWxlZGVmOworCQljaGFyCSAgICpydWxlZGVmX3N0cjsKKworCQly dWxlZGVmID0gT2lkRnVuY3Rpb25DYWxsMShGX1BHX0dFVF9SVUxFREVGX09JRCwKKwkJCQkJCQkJ ICAgT2JqZWN0SWRHZXREYXR1bShydWxlaWQpKTsKKwkJcnVsZWRlZl9zdHIgPSBUZXh0RGF0dW1H ZXRDU3RyaW5nKHJ1bGVkZWYpOworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsIHJ1bGVkZWZfc3RyKTsKKwkJYXBwZW5kX3N0 cmlwcGVkX3N0bXQoY3R4KTsKKwkJcGZyZWUocnVsZWRlZl9zdHIpOworCX0KK30KKworLyoKKyAq IGVtaXRfc3RhdGlzdGljcworICoJCUNSRUFURSBTVEFUSVNUSUNTIHBlciBleHRlbmRlZCBzdGF0 aXN0aWNzIG9iamVjdCBvbiB0aGUgcmVsYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X3N0 YXRpc3RpY3MoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCVJlbGF0aW9uCXN0YXRSZWw7CisJ U3lzU2NhbkRlc2Mgc3RhdFNjYW47CisJU2NhbktleURhdGEgc3RhdEtleTsKKwlIZWFwVHVwbGUJ c3RhdFR1cDsKKworCWlmICghY3R4LT5pbmNsdWRlX3N0YXRpc3RpY3MpCisJCXJldHVybjsKKwor CXN0YXRSZWwgPSB0YWJsZV9vcGVuKFN0YXRpc3RpY0V4dFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJU2NhbktleUluaXQoJnN0YXRLZXksCisJCQkJQW51bV9wZ19zdGF0aXN0aWNfZXh0 X3N0eHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmpl Y3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwlzdGF0U2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihzdGF0UmVsLCBTdGF0aXN0aWNFeHRSZWxpZEluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVM TCwgMSwgJnN0YXRLZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoc3RhdFR1cCA9IHN5 c3RhYmxlX2dldG5leHQoc3RhdFNjYW4pKSkKKwl7CisJCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBz dGF0ID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHN0YXRUdXApOworCQljaGFy CSAgICpzdGF0ZGVmID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKHN0YXQtPm9pZCk7 CisKKwkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0 eC0+YnVmLCAiJXM7Iiwgc3RhdGRlZik7CisJCWFwcGVuZF9zdHJpcHBlZF9zdG10KGN0eCk7CisJ CXBmcmVlKHN0YXRkZWYpOworCX0KKwlzeXN0YWJsZV9lbmRzY2FuKHN0YXRTY2FuKTsKKwl0YWJs ZV9jbG9zZShzdGF0UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogZW1pdF9yZXBs aWNhX2lkZW50aXR5CisgKgkJQUxURVIgVEFCTEUgcXVhbG5hbWUgUkVQTElDQSBJREVOVElUWSAu Li4gLSBlbWl0dGVkIG9ubHkgd2hlbiB0aGUKKyAqCQlyZWxyZXBsaWRlbnQgZGlmZmVycyBmcm9t IHRoZSBkZWZhdWx0ICgnZCcgPSB1c2UgcHJpbWFyeSBrZXkpLgorICovCitzdGF0aWMgdm9pZAor ZW1pdF9yZXBsaWNhX2lkZW50aXR5KFRhYmxlRGRsQ29udGV4dCAqIGN0eCkKK3sKKwlpZiAoIWN0 eC0+aW5jbHVkZV9yZXBsaWNhX2lkZW50aXR5KQorCQlyZXR1cm47CisJaWYgKGN0eC0+cmVsLT5y ZF9yZWwtPnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQpCisJCXJldHVy bjsKKworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCXN3aXRjaCAoY3R4LT5yZWwtPnJk X3JlbC0+cmVscmVwbGlkZW50KQorCXsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkc6 CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxFICVz IFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJ CWFwcGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0ZV TEw6CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxF ICVzIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJ CWFwcGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0lO REVYOgorCQkJeworCQkJCU9pZAkJCXJlcGxpZHggPSBSZWxhdGlvbkdldFJlcGxpY2FJbmRleChj dHgtPnJlbCk7CisKKwkJCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJCQl7CisJCQkJCWNo YXIJICAgKmlkeG5hbWUgPSBnZXRfcmVsX25hbWUocmVwbGlkeCk7CisKKwkJCQkJaWYgKGlkeG5h bWUgPT0gTlVMTCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNP REVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJCQkJCSBlcnJtc2coInJlcGxpY2EgaWRlbnRpdHkg aW5kZXggd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJCQkJCXJlcGxpZHgpLAor CQkJCQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVk LiIpKSk7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJCQkgIkFM VEVSIFRBQkxFICVzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggJXM7IiwKKwkJCQkJCQkJ CSBjdHgtPnF1YWxuYW1lLAorCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaWR4bmFtZSkpOwor CQkJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJCQlwZnJlZShpZHhuYW1lKTsKKwkJCQl9CisJCQl9 CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBlbWl0X3Jsc190b2dnbGVzCisgKgkJQUxURVIg VEFCTEUgcXVhbG5hbWUgRU5BQkxFIC8gRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZLgorICovCitz dGF0aWMgdm9pZAorZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKiBjdHgpCit7CisJ aWYgKCFjdHgtPmluY2x1ZGVfcmxzKQorCQlyZXR1cm47CisKKwlpZiAoY3R4LT5yZWwtPnJkX3Jl bC0+cmVscm93c2VjdXJpdHkpCisJeworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJ YXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkgIkFMVEVSIFRBQkxFICVzIEVOQUJM RSBST1cgTEVWRUwgU0VDVVJJVFk7IiwKKwkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJYXBwZW5k X3N0bXQoY3R4KTsKKwl9CisJaWYgKGN0eC0+cmVsLT5yZF9yZWwtPnJlbGZvcmNlcm93c2VjdXJp dHkpCisJeworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5m bygmY3R4LT5idWYsCisJCQkJCQkgIkFMVEVSIFRBQkxFICVzIEZPUkNFIFJPVyBMRVZFTCBTRUNV UklUWTsiLAorCQkJCQkJIGN0eC0+cXVhbG5hbWUpOworCQlhcHBlbmRfc3RtdChjdHgpOworCX0K K30KKworLyoKKyAqIGVtaXRfcGFydGl0aW9uX2NoaWxkcmVuCisgKgkJRm9yIGVhY2ggZGlyZWN0 IHBhcnRpdGlvbiBjaGlsZCBvZiBhIHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudCwKKyAqCQlyZWN1 cnNpdmVseSBjYWxsIHBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwgYW5kIGFwcGVuZCB0aGUgY2hp bGQncworICoJCXN0YXRlbWVudHMuICBFYWNoIGNoaWxkJ3Mgb3duIERETCBoYW5kbGVzIGZ1cnRo ZXIgbGV2ZWxzIHRocm91Z2gKKyAqCQl0aGUgc2FtZSByZWN1cnNpb24uCisgKi8KK3N0YXRpYyB2 b2lkCitlbWl0X3BhcnRpdGlvbl9jaGlsZHJlbihUYWJsZURkbENvbnRleHQgKiBjdHgpCit7CisJ TGlzdAkgICAqY2hpbGRyZW47CisJTGlzdENlbGwgICAqbGM7CisKKwlpZiAoIWN0eC0+aW5jbHVk ZV9wYXJ0aXRpb24gfHwKKwkJY3R4LT5yZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BB UlRJVElPTkVEX1RBQkxFKQorCQlyZXR1cm47CisKKwljaGlsZHJlbiA9IGZpbmRfaW5oZXJpdGFu Y2VfY2hpbGRyZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlmb3JlYWNoKGxjLCBj aGlsZHJlbikKKwl7CisJCU9pZAkJCWNoaWxkb2lkID0gbGZpcnN0X29pZChsYyk7CisJCUxpc3QJ ICAgKmNoaWxkc3RtdHM7CisKKwkJY2hpbGRzdG10cyA9IHBnX2dldF90YWJsZV9kZGxfaW50ZXJu YWwoY2hpbGRvaWQsIGN0eC0+cHJldHR5LAorCQkJCQkJCQkJCQkgICBjdHgtPm5vX293bmVyLAor CQkJCQkJCQkJCQkgICBjdHgtPm5vX3RhYmxlc3BhY2UsCisJCQkJCQkJCQkJCSAgIGN0eC0+aW5j bHVkZV9pbmRleGVzLAorCQkJCQkJCQkJCQkgICBjdHgtPmluY2x1ZGVfY29uc3RyYWludHMsCisJ CQkJCQkJCQkJCSAgIGN0eC0+aW5jbHVkZV9ydWxlcywKKwkJCQkJCQkJCQkJICAgY3R4LT5pbmNs dWRlX3N0YXRpc3RpY3MsCisJCQkJCQkJCQkJCSAgIGN0eC0+aW5jbHVkZV90cmlnZ2VycywKKwkJ CQkJCQkJCQkJICAgY3R4LT5pbmNsdWRlX3BvbGljaWVzLAorCQkJCQkJCQkJCQkgICBjdHgtPmlu Y2x1ZGVfcmxzLAorCQkJCQkJCQkJCQkgICBjdHgtPmluY2x1ZGVfcmVwbGljYV9pZGVudGl0eSwK KwkJCQkJCQkJCQkJICAgY3R4LT5pbmNsdWRlX3BhcnRpdGlvbiwKKwkJCQkJCQkJCQkJICAgY3R4 LT5zY2hlbWFfcXVhbGlmaWVkKTsKKwkJY3R4LT5zdGF0ZW1lbnRzID0gbGlzdF9jb25jYXQoY3R4 LT5zdGF0ZW1lbnRzLCBjaGlsZHN0bXRzKTsKKwl9CisJbGlzdF9mcmVlKGNoaWxkcmVuKTsKK30K KworLyoKKyAqIHBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwKKyAqCQlHZW5lcmF0ZSBEREwgc3Rh dGVtZW50cyB0byByZWNyZWF0ZSBhIHJlZ3VsYXIgb3IgcGFydGl0aW9uZWQgdGFibGUuCisgKgor ICogVGhlIGZpcnN0IGxpc3QgZWxlbWVudCBpcyB0aGUgQ1JFQVRFIFRBQkxFIHN0YXRlbWVudC4g IFN1YnNlcXVlbnQKKyAqIGVsZW1lbnRzIGFyZSB0aGUgQUxURVIgVEFCTEUgLyBDUkVBVEUgSU5E RVggLyBDUkVBVEUgUlVMRSAvCisgKiBDUkVBVEUgU1RBVElTVElDUyBzdGF0ZW1lbnRzIG5lZWRl ZCB0byByZXN0b3JlIHRoZSB0YWJsZSdzIGZ1bGwKKyAqIGRlZmluaXRpb24uCisgKgorICogVHJp Z2dlciBhbmQgcG9saWN5IGVtaXNzaW9uIGFyZSBzY2FmZm9sZGVkIGJ1dCBjdXJyZW50bHkgZGlz YWJsZWQKKyAqICgjaWYgMCkgLSB0aGV5IHdpbGwgYmVjb21lIGEgc2luZ2xlIGhlbHBlciBjYWxs IG9uY2UgdGhlIHN0YW5kYWxvbmUKKyAqIHBnX2dldF90cmlnZ2VyX2RkbCAvIHBnX2dldF9wb2xp Y3lfZGRsIGhlbHBlcnMgbGFuZC4KKyAqLworc3RhdGljIExpc3QgKgorcGdfZ2V0X3RhYmxlX2Rk bF9pbnRlcm5hbChPaWQgcmVsaWQsIGJvb2wgcHJldHR5LAorCQkJCQkJICBib29sIG5vX293bmVy LCBib29sIG5vX3RhYmxlc3BhY2UsCisJCQkJCQkgIGJvb2wgaW5jbHVkZV9pbmRleGVzLAorCQkJ CQkJICBib29sIGluY2x1ZGVfY29uc3RyYWludHMsCisJCQkJCQkgIGJvb2wgaW5jbHVkZV9ydWxl cywKKwkJCQkJCSAgYm9vbCBpbmNsdWRlX3N0YXRpc3RpY3MsCisJCQkJCQkgIGJvb2wgaW5jbHVk ZV90cmlnZ2VycywKKwkJCQkJCSAgYm9vbCBpbmNsdWRlX3BvbGljaWVzLAorCQkJCQkJICBib29s IGluY2x1ZGVfcmxzLAorCQkJCQkJICBib29sIGluY2x1ZGVfcmVwbGljYV9pZGVudGl0eSwKKwkJ CQkJCSAgYm9vbCBpbmNsdWRlX3BhcnRpdGlvbiwKKwkJCQkJCSAgYm9vbCBzY2hlbWFfcXVhbGlm aWVkKQoreworCVRhYmxlRGRsQ29udGV4dCBjdHggPSB7MH07CisJUmVsYXRpb24JcmVsOworCWNo YXIJCXJlbGtpbmQ7CisJQWNsUmVzdWx0CWFjbHJlc3VsdDsKKworCXJlbCA9IHRhYmxlX29wZW4o cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZWxraW5kID0gcmVsLT5yZF9yZWwtPnJlbGtp bmQ7CisKKwkvKgorCSAqIFRoZSBpbml0aWFsIGN1dCBvbmx5IHN1cHBvcnRzIG9yZGluYXJ5IGFu ZCBwYXJ0aXRpb25lZCB0YWJsZXMuICBWaWV3cywKKwkgKiBtYXR2aWV3cywgZm9yZWlnbiB0YWJs ZXMsIHNlcXVlbmNlcywgaW5kZXhlcywgY29tcG9zaXRlIHR5cGVzLCBhbmQKKwkgKiBUT0FTVCB0 YWJsZXMgYXJlIG91dCBvZiBzY29wZSBmb3Igbm93LgorCSAqLworCWlmIChyZWxraW5kICE9IFJF TEtJTkRfUkVMQVRJT04gJiYgcmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQor CXsKKwkJY2hhcgkgICAqcmVsbmFtZSA9IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsKSk7CisKKwkJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCSBl cnJtc2coIlwiJXNcIiBpcyBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUiLAor CQkJCQkJcmVsbmFtZSkpKTsKKwl9CisKKwkvKiBDYWxsZXIgbmVlZHMgU0VMRUNUIG9uIHRoZSB0 YWJsZSB0byByZWFkIGl0cyBkZWZpbml0aW9uLiAqLworCWFjbHJlc3VsdCA9IHBnX2NsYXNzX2Fj bGNoZWNrKHJlbGlkLCBHZXRVc2VySWQoKSwgQUNMX1NFTEVDVCk7CisJaWYgKGFjbHJlc3VsdCAh PSBBQ0xDSEVDS19PSykKKwkJYWNsY2hlY2tfZXJyb3IoYWNscmVzdWx0LCBPQkpFQ1RfVEFCTEUs CisJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCisJY3R4LnJlbCA9IHJl bDsKKwljdHgucmVsaWQgPSByZWxpZDsKKwljdHgucHJldHR5ID0gcHJldHR5OworCWN0eC5ub19v d25lciA9IG5vX293bmVyOworCWN0eC5ub190YWJsZXNwYWNlID0gbm9fdGFibGVzcGFjZTsKKwlj dHguaW5jbHVkZV9pbmRleGVzID0gaW5jbHVkZV9pbmRleGVzOworCWN0eC5pbmNsdWRlX2NvbnN0 cmFpbnRzID0gaW5jbHVkZV9jb25zdHJhaW50czsKKwljdHguaW5jbHVkZV9ydWxlcyA9IGluY2x1 ZGVfcnVsZXM7CisJY3R4LmluY2x1ZGVfc3RhdGlzdGljcyA9IGluY2x1ZGVfc3RhdGlzdGljczsK KwljdHguaW5jbHVkZV90cmlnZ2VycyA9IGluY2x1ZGVfdHJpZ2dlcnM7CisJY3R4LmluY2x1ZGVf cG9saWNpZXMgPSBpbmNsdWRlX3BvbGljaWVzOworCWN0eC5pbmNsdWRlX3JscyA9IGluY2x1ZGVf cmxzOworCWN0eC5pbmNsdWRlX3JlcGxpY2FfaWRlbnRpdHkgPSBpbmNsdWRlX3JlcGxpY2FfaWRl bnRpdHk7CisJY3R4LmluY2x1ZGVfcGFydGl0aW9uID0gaW5jbHVkZV9wYXJ0aXRpb247CisJY3R4 LnNjaGVtYV9xdWFsaWZpZWQgPSBzY2hlbWFfcXVhbGlmaWVkOworCWN0eC5iYXNlX25hbWVzcGFj ZSA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCk7CisJY3R4LnNhdmVfbmVzdGxldmVsID0gLTE7 CisJY3R4LnF1YWxuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQocmVsaWQsIHNjaGVtYV9x dWFsaWZpZWQsCisJCQkJCQkJCQkJICAgY3R4LmJhc2VfbmFtZXNwYWNlKTsKKworCS8qCisJICog V2hlbiBzY2hlbWFfcXVhbGlmaWVkIGlzIGZhbHNlLCBuYXJyb3cgdGhlIGFjdGl2ZSBzZWFyY2hf cGF0aCB0byB0aGUKKwkgKiB0YXJnZXQgdGFibGUncyBvd24gbmFtZXNwYWNlIGZvciB0aGUgZHVy YXRpb24gb2YgRERMIGVtaXNzaW9uLiAgVGhlCisJICogZGVwYXJzZSBjb2RlIGluIHJ1bGV1dGls cyAoYW5kIHRoZSByZWdjbGFzcy9yZWdwcm9jIG91dHB1dCBmdW5jdGlvbnMgd2UKKwkgKiB0cmFu c2l0aXZlbHkgY2FsbCkgZGVjaWRlcyB3aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IGEgbmFtZSBi YXNlZCBvbgorCSAqIHdoZXRoZXIgdGhlIHJlZmVyZW5jZWQgb2JqZWN0IGlzIHJlYWNoYWJsZSB0 aHJvdWdoIHNlYXJjaF9wYXRoLCBzbyB0aGlzCisJICogbWFrZXMgc2FtZS1zY2hlbWEgcmVmZXJl bmNlcyBpbiBERUZBVUxUIGFuZCBDSEVDSyBleHByZXNzaW9ucywgcmVnY2xhc3MKKwkgKiBsaXRl cmFscywgRksgdGFyZ2V0cywgZXRjLiBjb21lIG91dCB1bnF1YWxpZmllZC4gIENyb3NzLXNjaGVt YQorCSAqIHJlZmVyZW5jZXMgc3RheSBxdWFsaWZpZWQsIHdoaWNoIGlzIHRoZSBjb3JyZWN0bmVz cyByZXF1aXJlbWVudC4KKwkgKiBBdEVPWGFjdF9HVUMgY2xlYW5zIHVwIGF0IHhhY3QgZW5kIGlm IGFueXRoaW5nIHRocm93cyBiZXR3ZWVuIGhlcmUgYW5kCisJICogdGhlIGV4cGxpY2l0IHJlc3Rv cmUgYmVsb3c7IG9uIHRoZSBub3JtYWwgcGF0aCB3ZSByZXN0b3JlIHJpZ2h0IGJlZm9yZQorCSAq IHJldHVybmluZy4KKwkgKgorCSAqIFByZS1jb21wdXRlICI8c2NoZW1hPi4iIHRvbyAtIHRoZSBh bHdheXMtcXVhbGlmaWVkIGhlbHBlcnMKKwkgKiAoY29uc3RyYWludGRlZl9jb21tYW5kLCBpbmRl eGRlZl9zdHJpbmcsIHJ1bGVkZWYsCisJICogc3RhdGlzdGljc29iamRlZl9zdHJpbmcpIGlnbm9y ZSBzZWFyY2hfcGF0aCBmb3IgdGhlIHRhcmdldCdzIG93biAiQUxURVIKKwkgKiBUQUJMRSBzY2hl bWEudGJsIi8iT04gc2NoZW1hLnRibCIvIlRPIHNjaGVtYS50YmwiIHByZWZpeCBhbmQgZm9yIHRo ZQorCSAqIHF1YWxpZmllZCBzdGF0aXN0aWNzIG5hbWU7IHdlIHN0cmlwIHRoYXQgc3RyaW5nIG91 cnNlbHZlcyB2aWEKKwkgKiBzdHJpcF9zY2hlbWFfcHJlZml4LgorCSAqLworCWlmICghc2NoZW1h X3F1YWxpZmllZCkKKwl7CisJCWNoYXIJICAgKm5zcG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUo Y3R4LmJhc2VfbmFtZXNwYWNlKTsKKworCQlpZiAobnNwbmFtZSAhPSBOVUxMKQorCQl7CisJCQlj b25zdCBjaGFyICpxbnNwID0gcXVvdGVfaWRlbnRpZmllcihuc3BuYW1lKTsKKworCQkJY3R4LnNj aGVtYV9wcmVmaXggPSBwc3ByaW50ZigiJXMuIiwgcW5zcCk7CisJCQljdHguc2F2ZV9uZXN0bGV2 ZWwgPSBOZXdHVUNOZXN0TGV2ZWwoKTsKKwkJCSh2b2lkKSBzZXRfY29uZmlnX29wdGlvbigic2Vh cmNoX3BhdGgiLCBxbnNwLAorCQkJCQkJCQkJIFBHQ19VU0VSU0VULCBQR0NfU19TRVNTSU9OLAor CQkJCQkJCQkJIEdVQ19BQ1RJT05fU0FWRSwgdHJ1ZSwgMCwgZmFsc2UpOworCQkJcGZyZWUobnNw bmFtZSk7CisJCX0KKwl9CisKKwkvKgorCSAqIENhY2hlIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5V TEwgY29uc3RyYWludCBtZXRhZGF0YSBzbyB0aGUgY29sdW1uLSBlbWl0CisJICogaGVscGVycyBj YW4gcHJvZHVjZSAiQ09OU1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBpbmxpbmUgZm9yIHVzZXItbmFt ZWQKKwkgKiBjb25zdHJhaW50cywgYW5kIHNvIHRoZSBjb25zdHJhaW50IGxvb3AgY2FuIGF2b2lk IGRvdWJsZS1lbWl0dGluZyB0aGVtLgorCSAqLworCWN0eC5ubl9lbnRyaWVzID0gY29sbGVjdF9s b2NhbF9ub3RfbnVsbChyZWwsICZjdHguc2tpcF9ub3RudWxsX29pZHMpOworCisJaW5pdFN0cmlu Z0luZm8oJmN0eC5idWYpOworCisJLyoKKwkgKiBFYWNoIHBhc3MgYmVsb3cgYXBwZW5kcyB6ZXJv IG9yIG1vcmUgZmluaXNoZWQgc3RhdGVtZW50cyB0bworCSAqIGN0eC5zdGF0ZW1lbnRzIHZpYSBh cHBlbmRfc3RtdCAvIGFwcGVuZF9zdHJpcHBlZF9zdG10LiAgT3JkZXIgaXMKKwkgKiBzaWduaWZp Y2FudDogQ1JFQVRFIFRBQkxFIGZpcnN0OyBPV05FUiBhbmQgdGhlIHBlci1jb2x1bW4gQUxURVIg Q09MVU1OCisJICogcGFzc2VzIGJlZm9yZSBzdWItb2JqZWN0IGVtaXNzaW9uOyBzdWItb2JqZWN0 cyBpbiBkZXBlbmRlbmN5LWZyaWVuZGx5CisJICogb3JkZXIgKGluZGV4ZXMgYmVmb3JlIGNvbnN0 cmFpbnRzLCBzaW5jZSBjb25zdHJhaW50LWJhY2tlZCBpbmRleGVzIGFyZQorCSAqIGVtaXR0ZWQg b3V0LW9mLWxpbmUgYnkgdGhlIGNvbnN0cmFpbnQgbG9vcCk7IGFuZCBwYXJ0aXRpb24gY2hpbGRy ZW4KKwkgKiBsYXN0IHNvIHRoZSBwYXJlbnQgYWxyZWFkeSBleGlzdHMgYXQgcmVwbGF5IHRpbWUu CisJICovCisJZW1pdF9jcmVhdGVfdGFibGVfc3RtdCgmY3R4KTsKKwllbWl0X293bmVyX3N0bXQo JmN0eCk7CisJZW1pdF9jaGlsZF9kZWZhdWx0X292ZXJyaWRlcygmY3R4KTsKKwllbWl0X2F0dG9w dGlvbnMoJmN0eCk7CisJZW1pdF9pbmRleGVzKCZjdHgpOworCWVtaXRfbG9jYWxfY29uc3RyYWlu dHMoJmN0eCk7CisJZW1pdF9ydWxlcygmY3R4KTsKKwllbWl0X3N0YXRpc3RpY3MoJmN0eCk7CisJ ZW1pdF9yZXBsaWNhX2lkZW50aXR5KCZjdHgpOworCWVtaXRfcmxzX3RvZ2dsZXMoJmN0eCk7CisK KwkvKgorCSAqIFRyaWdnZXJzIGFuZCByb3ctbGV2ZWwgc2VjdXJpdHkgcG9saWNpZXMgLSBkaXNh YmxlZCB1bnRpbCB0aGUKKwkgKiBzdGFuZGFsb25lIHBnX2dldF90cmlnZ2VyX2RkbCgpIGFuZCBw Z19nZXRfcG9saWN5X2RkbCgpIGhlbHBlcnMgbGFuZC4KKwkgKiBUaGUgc2NhbiArIGxvY2sgKyBm aWx0ZXIgc2NhZmZvbGRpbmcgYmVsb3cgaXMgcHJlc2VydmVkIChpbnNpZGUgI2lmIDApCisJICog c28gd2lyaW5nIHVwIGVhY2ggZW1pc3Npb24gYmVjb21lcyBhIG9uZS1saW5lciBpbiB0aGUgbG9v cCBib2R5IG9uY2UKKwkgKiB0aG9zZSBoZWxwZXJzIGFyZSBhdmFpbGFibGUuCisJICovCisjaWYg MAorCWlmIChpbmNsdWRlX3RyaWdnZXJzKQorCXsKKwkJUmVsYXRpb24JdHJpZ1JlbDsKKwkJU3lz U2NhbkRlc2MgdHJpZ1NjYW47CisJCVNjYW5LZXlEYXRhIHRyaWdLZXk7CisJCUhlYXBUdXBsZQl0 cmlnVHVwOworCisJCXRyaWdSZWwgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nl c3NTaGFyZUxvY2spOworCQlTY2FuS2V5SW5pdCgmdHJpZ0tleSwKKwkJCQkJQW51bV9wZ190cmln Z2VyX3RncmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJ T2JqZWN0SWRHZXREYXR1bShyZWxpZCkpOworCQl0cmlnU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bih0cmlnUmVsLCBUcmlnZ2VyUmVsaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJCSAgdHJ1ZSwgTlVM TCwgMSwgJnRyaWdLZXkpOworCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0cmlnVHVwID0gc3lz dGFibGVfZ2V0bmV4dCh0cmlnU2NhbikpKQorCQl7CisJCQlGb3JtX3BnX3RyaWdnZXIgdHJnID0g KEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJCQlpZiAodHJnLT50Z2lz aW50ZXJuYWwpCisJCQkJY29udGludWU7CisKKwkJCS8qIFRPRE86IGFwcGVuZCBwZ19nZXRfdHJp Z2dlcl9kZGwodHJnLT5vaWQpIG91dHB1dCBoZXJlLiAqLworCQl9CisJCXN5c3RhYmxlX2VuZHNj YW4odHJpZ1NjYW4pOworCQl0YWJsZV9jbG9zZSh0cmlnUmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor CX0KKworCWlmIChpbmNsdWRlX3BvbGljaWVzKQorCXsKKwkJUmVsYXRpb24JcG9sUmVsOworCQlT eXNTY2FuRGVzYyBwb2xTY2FuOworCQlTY2FuS2V5RGF0YSBwb2xLZXk7CisJCUhlYXBUdXBsZQlw b2xUdXA7CisKKwkJcG9sUmVsID0gdGFibGVfb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NT aGFyZUxvY2spOworCQlTY2FuS2V5SW5pdCgmcG9sS2V5LAorCQkJCQlBbnVtX3BnX3BvbGljeV9w b2xyZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmpl Y3RJZEdldERhdHVtKHJlbGlkKSk7CisJCXBvbFNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocG9s UmVsLCBQb2xpY3lQb2xyZWxpZFBvbG5hbWVJbmRleElkLAorCQkJCQkJCQkJIHRydWUsIE5VTEws IDEsICZwb2xLZXkpOworCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChwb2xUdXAgPSBzeXN0YWJs ZV9nZXRuZXh0KHBvbFNjYW4pKSkKKwkJeworCQkJLyogVE9ETzogYXBwZW5kIHBnX2dldF9wb2xp Y3lfZGRsKHJlbGlkLCBwb2xuYW1lKSBvdXRwdXQgaGVyZS4gKi8KKwkJfQorCQlzeXN0YWJsZV9l bmRzY2FuKHBvbFNjYW4pOworCQl0YWJsZV9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJlTG9jayk7 CisJfQorI2Vsc2UKKwkodm9pZCkgaW5jbHVkZV90cmlnZ2VyczsKKwkodm9pZCkgaW5jbHVkZV9w b2xpY2llczsKKyNlbmRpZgorCisJZW1pdF9wYXJ0aXRpb25fY2hpbGRyZW4oJmN0eCk7CisKKwl7 CisJCWludAkJCW5hdHRzID0gUmVsYXRpb25HZXREZXNjcihyZWwpLT5uYXR0czsKKworCQlmb3Ig KGludCBpID0gMTsgaSA8PSBuYXR0czsgaSsrKQorCQkJaWYgKGN0eC5ubl9lbnRyaWVzW2ldLm5h bWUgIT0gTlVMTCkKKwkJCQlwZnJlZShjdHgubm5fZW50cmllc1tpXS5uYW1lKTsKKwl9CisJcGZy ZWUoY3R4Lm5uX2VudHJpZXMpOworCisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2sp OworCXBmcmVlKGN0eC5idWYuZGF0YSk7CisJcGZyZWUoY3R4LnF1YWxuYW1lKTsKKwlpZiAoY3R4 LnNjaGVtYV9wcmVmaXggIT0gTlVMTCkKKwkJcGZyZWUoY3R4LnNjaGVtYV9wcmVmaXgpOworCWxp c3RfZnJlZShjdHguc2tpcF9ub3RudWxsX29pZHMpOworCisJLyoKKwkgKiBQb3AgdGhlIG5hcnJv d2VkIHNlYXJjaF9wYXRoIG5vdyB0aGF0IGFsbCBoZWxwZXJzIGhhdmUgcnVuLiAgRXJyb3JzCisJ ICogdGhyb3duIGVhcmxpZXIgYXJlIGNsZWFuZWQgdXAgYnkgQXRFT1hhY3RfR1VDIGF0IHhhY3Qg ZW5kLgorCSAqLworCWlmIChjdHguc2F2ZV9uZXN0bGV2ZWwgPj0gMCkKKwkJQXRFT1hhY3RfR1VD KHRydWUsIGN0eC5zYXZlX25lc3RsZXZlbCk7CisKKwlyZXR1cm4gY3R4LnN0YXRlbWVudHM7Cit9 CisKKy8qCisgKiBwZ19nZXRfdGFibGVfZGRsCisgKgkJUmV0dXJuIERETCB0byByZWNyZWF0ZSBh IHRhYmxlIGFzIGEgc2V0IG9mIHRleHQgcm93cy4KKyAqLworRGF0dW0KK3BnX2dldF90YWJsZV9k ZGwoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJTGlz dAkgICAqc3RhdGVtZW50czsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlNZW1v cnlDb250ZXh0IG9sZGNvbnRleHQ7CisJCU9pZAkJCXJlbGlkOworCQlEZGxPcHRpb24Jb3B0c1td ID0geworCQkJeyJwcmV0dHkiLCBERExfT1BUX0JPT0x9LAorCQkJeyJvd25lciIsIERETF9PUFRf Qk9PTH0sCisJCQl7InRhYmxlc3BhY2UiLCBERExfT1BUX0JPT0x9LAorCQkJeyJpbmNsdWRlc19p bmRleGVzIiwgRERMX09QVF9CT09MfSwKKwkJCXsiaW5jbHVkZXNfY29uc3RyYWludHMiLCBERExf T1BUX0JPT0x9LAorCQkJeyJpbmNsdWRlc19ydWxlcyIsIERETF9PUFRfQk9PTH0sCisJCQl7Imlu Y2x1ZGVzX3N0YXRpc3RpY3MiLCBERExfT1BUX0JPT0x9LAorCQkJeyJpbmNsdWRlc190cmlnZ2Vy cyIsIERETF9PUFRfQk9PTH0sCisJCQl7ImluY2x1ZGVzX3BvbGljaWVzIiwgRERMX09QVF9CT09M fSwKKwkJCXsiaW5jbHVkZXNfcmxzIiwgRERMX09QVF9CT09MfSwKKwkJCXsiaW5jbHVkZXNfcmVw bGljYV9pZGVudGl0eSIsIERETF9PUFRfQk9PTH0sCisJCQl7ImluY2x1ZGVzX3BhcnRpdGlvbiIs IERETF9PUFRfQk9PTH0sCisJCQl7InNjaGVtYV9xdWFsaWZpZWQiLCBERExfT1BUX0JPT0x9LAor CQl9OworCisJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKwkJb2xkY29udGV4dCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOwor CisJCWlmIChQR19BUkdJU05VTEwoMCkpCisJCXsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKKwkJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwkJfQorCisJCXJlbGlk ID0gUEdfR0VUQVJHX09JRCgwKTsKKwkJcGFyc2VfZGRsX29wdGlvbnMoZmNpbmZvLCAxLCBvcHRz LCBsZW5ndGhvZihvcHRzKSk7CisKKwkJc3RhdGVtZW50cyA9IHBnX2dldF90YWJsZV9kZGxfaW50 ZXJuYWwocmVsaWQsCisJCQkJCQkJCQkJCSAgIG9wdHNbMF0uaXNzZXQgJiYgb3B0c1swXS5ib29s dmFsLAorCQkJCQkJCQkJCQkgICBvcHRzWzFdLmlzc2V0ICYmICFvcHRzWzFdLmJvb2x2YWwsCisJ CQkJCQkJCQkJCSAgIG9wdHNbMl0uaXNzZXQgJiYgIW9wdHNbMl0uYm9vbHZhbCwKKwkJCQkJCQkJ CQkJICAgIW9wdHNbM10uaXNzZXQgfHwgb3B0c1szXS5ib29sdmFsLAorCQkJCQkJCQkJCQkgICAh b3B0c1s0XS5pc3NldCB8fCBvcHRzWzRdLmJvb2x2YWwsCisJCQkJCQkJCQkJCSAgICFvcHRzWzVd Lmlzc2V0IHx8IG9wdHNbNV0uYm9vbHZhbCwKKwkJCQkJCQkJCQkJICAgIW9wdHNbNl0uaXNzZXQg fHwgb3B0c1s2XS5ib29sdmFsLAorCQkJCQkJCQkJCQkgICAhb3B0c1s3XS5pc3NldCB8fCBvcHRz WzddLmJvb2x2YWwsCisJCQkJCQkJCQkJCSAgICFvcHRzWzhdLmlzc2V0IHx8IG9wdHNbOF0uYm9v bHZhbCwKKwkJCQkJCQkJCQkJICAgIW9wdHNbOV0uaXNzZXQgfHwgb3B0c1s5XS5ib29sdmFsLAor CQkJCQkJCQkJCQkgICAhb3B0c1sxMF0uaXNzZXQgfHwgb3B0c1sxMF0uYm9vbHZhbCwKKwkJCQkJ CQkJCQkJICAgb3B0c1sxMV0uaXNzZXQgJiYgb3B0c1sxMV0uYm9vbHZhbCwKKwkJCQkJCQkJCQkJ ICAgIW9wdHNbMTJdLmlzc2V0IHx8IG9wdHNbMTJdLmJvb2x2YWwpOworCQlmdW5jY3R4LT51c2Vy X2ZjdHggPSBzdGF0ZW1lbnRzOworCQlmdW5jY3R4LT5tYXhfY2FsbHMgPSBsaXN0X2xlbmd0aChz dGF0ZW1lbnRzKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJfQor CisJZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisJc3RhdGVtZW50cyA9IChMaXN0ICop IGZ1bmNjdHgtPnVzZXJfZmN0eDsKKworCWlmIChmdW5jY3R4LT5jYWxsX2NudHIgPCBmdW5jY3R4 LT5tYXhfY2FsbHMpCisJeworCQljaGFyCSAgICpzdG10OworCisJCXN0bXQgPSBsaXN0X250aChz dGF0ZW1lbnRzLCBmdW5jY3R4LT5jYWxsX2NudHIpOworCisJCVNSRl9SRVRVUk5fTkVYVChmdW5j Y3R4LCBDU3RyaW5nR2V0VGV4dERhdHVtKHN0bXQpKTsKKwl9CisJZWxzZQorCXsKKwkJbGlzdF9m cmVlX2RlZXAoc3RhdGVtZW50cyk7CisJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwl9Cit9 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmggYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmgKaW5kZXggY2M4NzRhYmFhYmIuLjFlNDYzYjAxMDZk IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmgKKysrIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCkBAIC01NSw2ICs1NSw3IEBAIERFQ0xBUkVf SU5ERVgocGdfaW5oZXJpdHNfcGFyZW50X2luZGV4LCAyMTg3LCBJbmhlcml0c1BhcmVudEluZGV4 SWQsIHBnX2luaGVyaXRzCiBleHRlcm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbihP aWQgcGFyZW50cmVsSWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIGV4dGVybiBMaXN0ICpmaW5kX2lu aGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKE9pZCBwYXJlbnRyZWxJZCwgYm9vbCBvbWl0X2Rl dGFjaGVkLAogCQkJCQkJCQkJCQkJTE9DS01PREUgbG9ja21vZGUsIGJvb2wgKmRldGFjaGVkX2V4 aXN0LCBUcmFuc2FjdGlvbklkICpkZXRhY2hlZF94bWluKTsKK2V4dGVybiBMaXN0ICpmaW5kX2lu aGVyaXRhbmNlX3BhcmVudHMoT2lkIHJlbGlkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiAKIGV4dGVy biBMaXN0ICpmaW5kX2FsbF9pbmhlcml0b3JzKE9pZCBwYXJlbnRyZWxJZCwgTE9DS01PREUgbG9j a21vZGUsCiAJCQkJCQkJCSBMaXN0ICoqbnVtcGFyZW50cyk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dAppbmRleCBiZTE1N2E1ZmJlOS4uZTQ1NmMyMjZmNTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dApAQCAtODYxNSw2ICs4NjE1LDEzIEBACiAgIHByb2FyZ3R5cGVzID0+ICdyZWdkYXRhYmFzZSB0 ZXh0JywgcHJvYWxsYXJndHlwZXMgPT4gJ3tyZWdkYXRhYmFzZSx0ZXh0fScsCiAgIHByb2FyZ21v ZGVzID0+ICd7aSx2fScsIHByb2FyZ2RlZmF1bHRzID0+ICd7TlVMTH0nLAogICBwcm9zcmMgPT4g J3BnX2dldF9kYXRhYmFzZV9kZGwnIH0sCit7IG9pZCA9PiAnODIxNScsIGRlc2NyID0+ICdnZXQg RERMIHRvIHJlY3JlYXRlIGEgdGFibGUnLAorICBwcm9uYW1lID0+ICdwZ19nZXRfdGFibGVfZGRs JywgcHJvcm93cyA9PiAnNTAnLCBwcm92YXJpYWRpYyA9PiAndGV4dCcsCisgIHByb2lzc3RyaWN0 ID0+ICdmJywgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9wYXJhbGxl bCA9PiAncicsCisgIHByb25hcmdkZWZhdWx0cyA9PiAnMScsIHByb3JldHR5cGUgPT4gJ3RleHQn LAorICBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MgdGV4dCcsIHByb2FsbGFyZ3R5cGVzID0+ICd7 cmVnY2xhc3MsdGV4dH0nLAorICBwcm9hcmdtb2RlcyA9PiAne2ksdn0nLCBwcm9hcmdkZWZhdWx0 cyA9PiAne05VTEx9JywKKyAgcHJvc3JjID0+ICdwZ19nZXRfdGFibGVfZGRsJyB9LAogeyBvaWQg PT4gJzI1MDknLAogICBkZXNjciA9PiAnZGVwYXJzZSBhbiBlbmNvZGVkIGV4cHJlc3Npb24gd2l0 aCBwcmV0dHktcHJpbnQgb3B0aW9uJywKICAgcHJvbmFtZSA9PiAncGdfZ2V0X2V4cHInLCBwcm92 b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ3RleHQnLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNt ZHMuaAppbmRleCBjM2Q4NTE4Y2I2Mi4uZDMzNTYzZmRlYWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxl Y21kcy5oCkBAIC05Miw2ICs5Miw3IEBAIGV4dGVybiB2b2lkIGNoZWNrX29mX3R5cGUoSGVhcFR1 cGxlIHR5cGV0dXBsZSk7CiAKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX29uX2NvbW1pdF9hY3Rpb24o T2lkIHJlbGlkLCBPbkNvbW1pdEFjdGlvbiBhY3Rpb24pOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX29u X2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKTsKK2V4dGVybiBPbkNvbW1pdEFjdGlvbiBnZXRfb25f Y29tbWl0X2FjdGlvbihPaWQgcmVsaWQpOwogCiBleHRlcm4gdm9pZCBQcmVDb21taXRfb25fY29t bWl0X2FjdGlvbnModm9pZCk7CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9vbl9jb21taXRfYWN0aW9u cyhib29sIGlzQ29tbWl0KTsKQEAgLTEwOCw0ICsxMDksNiBAQCBleHRlcm4gdm9pZCBSYW5nZVZh ckNhbGxiYWNrT3duc1JlbGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWxhdGlvbiwKIGV4dGVybiBi b29sIFBhcnRDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3RyYWludChSZWxhdGlvbiBzY2FucmVs LAogCQkJCQkJCQkJCQkJIExpc3QgKnBhcnRDb25zdHJhaW50KTsKIAorZXh0ZXJuIGNvbnN0IGNo YXIgKnN0b3JhZ2VfbmFtZShjaGFyIGMpOworCiAjZW5kaWYJCQkJCQkJLyogVEFCTEVDTURTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2Rk bC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BnX2dldF90YWJsZV9kZGwub3V0Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iOGNhYjQyOTBhMAotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5v dXQKQEAgLTAsMCArMSw3NDIgQEAKKy0tCistLSBwZ19nZXRfdGFibGVfZGRsCistLQorLS0gQWxs IHRlc3RzIHBhc3Mgb3duZXI9PmZhbHNlIHNvIHRoZSBBTFRFUiBUQUJMRSBPV05FUiBUTyBsaW5l IGlzIG5vdAorLS0gZW1pdHRlZCwga2VlcGluZyBvdXRwdXQgc3RhYmxlIGFjcm9zcyB0ZXN0IHJ1 bm5lcnMgKHdoaWNoIG1heSBydW4gdW5kZXIKKy0tIGRpZmZlcmVudCByb2xlIG5hbWVzKS4KKy0t CitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworU0VUIHNlYXJjaF9wYXRoID0gcGd0Ymxf ZGRsX3Rlc3Q7CistLSBCYXNpYyB0YWJsZSB3aXRoIFBSSU1BUlkgS0VZLCBOT1QgTlVMTCwgREVG QVVMVCwgQ09MTEFURS4KK0NSRUFURSBUQUJMRSBiYXNpYyAoCisgICAgaWQgaW50IFBSSU1BUlkg S0VZLAorICAgIG5hbWUgdGV4dCBOT1QgTlVMTCBERUZBVUxUICdhbm9uJyBDT0xMQVRFICJDIgor KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljICggaWQg aW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0IENPTExBVEUgIkMiIERFRkFVTFQgJ2Fub24nOjp0 ZXh0IE5PVCBOVUxMKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyBBREQgQ09O U1RSQUlOVCBiYXNpY19pZF9ub3RfbnVsbCBOT1QgTlVMTCBpZDsKKyBBTFRFUiBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5iYXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19uYW1lX25vdF9udWxsIE5PVCBO VUxMIG5hbWU7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJ TlQgYmFzaWNfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDQgcm93cykKKworLS0gSWRlbnRpdHkg Y29sdW1ucyAod2l0aCBkZWZhdWx0IGFuZCBjdXN0b20gc2VxdWVuY2Ugb3B0aW9ucykuCitDUkVB VEUgVEFCTEUgaWRfY29scyAoCisgICAgaWRfYWx3YXlzIGludCBHRU5FUkFURUQgQUxXQVlTIEFT IElERU5USVRZLAorICAgIGlkX2RlZmF1bHQgaW50IEdFTkVSQVRFRCBCWSBERUZBVUxUIEFTIElE RU5USVRZCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jb2xzJzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWRfY29scyAoIGlkX2Fsd2F5cyBp bnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgTk9UIE5VTEwsIGlkX2RlZmF1bHQg aW50ZWdlciBHRU5FUkFURUQgQlkgREVGQVVMVCBBUyBJREVOVElUWSBOT1QgTlVMTCk7CisgQUxU RVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWRfY29scyBBREQgQ09OU1RSQUlOVCBpZF9jb2xzX2lk X2Fsd2F5c19ub3RfbnVsbCBOT1QgTlVMTCBpZF9hbHdheXM7CisgQUxURVIgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuaWRfY29scyBBREQgQ09OU1RSQUlOVCBpZF9jb2xzX2lkX2RlZmF1bHRfbm90X251 bGwgTk9UIE5VTEwgaWRfZGVmYXVsdDsKKygzIHJvd3MpCisKK0NSRUFURSBUQUJMRSBpZF9jdXN0 b20gKAorICAgIHYgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKAorICAgICAgICBT RVFVRU5DRSBOQU1FIGlkX2N1c3RvbV92X3NlcQorICAgICAgICBTVEFSVCBXSVRIIDEwMCBJTkNS RU1FTlQgQlkgNQorICAgICAgICBNSU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAwCisgICAgICAgIENB Q0hFIDEwIENZQ0xFCisgICAgKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn aWRfY3VzdG9tJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90 ZXN0LmlkX2N1c3RvbSAoIHYgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIChT VEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNSBNSU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAwIENB Q0hFIDEwIENZQ0xFKSBOT1QgTlVMTCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWRf Y3VzdG9tIEFERCBDT05TVFJBSU5UIGlkX2N1c3RvbV92X25vdF9udWxsIE5PVCBOVUxMIHY7Ciso MiByb3dzKQorCistLSBHZW5lcmF0ZWQgc3RvcmVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5f Y29scyAoCisgICAgY2VudHMgaW50LAorICAgIGRvbGxhcnMgbnVtZXJpYyBHRU5FUkFURUQgQUxX QVlTIEFTIChjZW50cyAvIDEwMC4wKSBTVE9SRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2dlbl9jb2xzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu Z2VuX2NvbHMgKCBjZW50cyBpbnRlZ2VyLCBkb2xsYXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZ UyBBUyAoKChjZW50cyk6Om51bWVyaWMgLyAxMDAuMCkpIFNUT1JFRCk7CisoMSByb3cpCisKKy0t IFNUT1JBR0UgYW5kIENPTVBSRVNTSU9OIChvbmx5IGVtaXR0ZWQgd2hlbiBub24tZGVmYXVsdCBm b3IgdGhlIHR5cGUpLgorQ1JFQVRFIFRBQkxFIHN0b3JhZ2VfY29scyAoCisgICAgYSB0ZXh0IFNU T1JBR0UgRVhURVJOQUwsCisgICAgYiB0ZXh0IFNUT1JBR0UgTUFJTiwKKyAgICBjIHRleHQgQ09N UFJFU1NJT04gcGdsegorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3RvcmFn ZV9jb2xzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0LnN0b3JhZ2VfY29scyAoIGEgdGV4dCBTVE9SQUdFIEVYVEVSTkFM LCBiIHRleHQgU1RPUkFHRSBNQUlOLCBjIHRleHQgQ09NUFJFU1NJT04gcGdseik7CisoMSByb3cp CisKKy0tIENvbnN0cmFpbnRzOiBDSEVDSywgVU5JUVVFLCBGT1JFSUdOIEtFWSAoREVGRVJSQUJM RSkuCitDUkVBVEUgVEFCTEUgcmVmZCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJM RSBjb25zICgKKyAgICBhIGludCBDSEVDSyAoYSA+IDApLAorICAgIGIgaW50IFVOSVFVRSwKKyAg ICBjIGludCBSRUZFUkVOQ0VTIHJlZmQoaWQpIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVE CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zICggYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdl ciwgQ09OU1RSQUlOVCBjb25zX2FfY2hlY2sgQ0hFQ0sgKChhID4gMCkpKTsKKyBBTFRFUiBUQUJM RSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfYl9rZXkgVU5JUVVFIChi KTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNf Y19ma2V5IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIHJlZmQoaWQpIERFRkVSUkFCTEUgSU5J VElBTExZIERFRkVSUkVEOworKDMgcm93cykKKworLS0gSW5kZXhlczogZnVuY3Rpb25hbCBhbmQg cGFydGlhbC4gIENvbnN0cmFpbnQtYmFja2luZyBpbmRleGVzIGFyZQorLS0gc3VwcHJlc3NlZCAo dGhleSBhcmUgZW1pdHRlZCBieSB0aGUgY29uc3RyYWludCBsb29wKS4KK0NSRUFURSBUQUJMRSBp ZHhkIChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7CitDUkVBVEUgSU5ERVggaWR4ZF9s b3dlciBPTiBpZHhkIChsb3dlcihuYW1lKSk7CitDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9O IGlkeGQgKGlkKSBXSEVSRSBpZCA+IDEwMDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuaWR4ZCAoIGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7Cisg Q1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJl ZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRs X3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisgQUxURVIgVEFC TEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX2lkX25vdF9udWxsIE5P VCBOVUxMIGlkOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgQUREIENPTlNUUkFJ TlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoNSByb3dzKQorCistLSBJbmhlcml0YW5j ZSwgaW5jbHVkaW5nIGEgY2hpbGQgREVGQVVMVCBvdmVycmlkZSBvbiBhbiBpbmhlcml0ZWQgY29s dW1uLgorQ1JFQVRFIFRBQkxFIHBhciAoYSBpbnQgREVGQVVMVCAxLCBiIHRleHQpOworQ1JFQVRF IFRBQkxFIGNoIChjIGludCkgSU5IRVJJVFMgKHBhcik7CitBTFRFUiBUQUJMRSBjaCBBTFRFUiBD T0xVTU4gYSBTRVQgREVGQVVMVCA5OTk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2NoJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaCAoIGMg aW50ZWdlcikgSU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0LnBhcik7CisgQUxURVIgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QuY2ggQUxURVIgQ09MVU1OIGEgU0VUIERFRkFVTFQgOTk5OworKDIgcm93cykK KworLS0gUGVyLWNvbHVtbiBhdHRvcHRpb25zOiBlbWl0dGVkIGFzIEFMVEVSIENPTFVNTiBTRVQg KC4uLikuCitDUkVBVEUgVEFCTEUgYXR0b3B0IChhIGludCwgYiB0ZXh0KTsKK0FMVEVSIFRBQkxF IGF0dG9wdCBBTFRFUiBDT0xVTU4gYSBTRVQgKG5fZGlzdGluY3QgPSAxMDApOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdhdHRvcHQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuYXR0b3B0ICggYSBpbnRlZ2VyLCBiIHRleHQpOworIEFMVEVSIFRBQkxF IHBndGJsX2RkbF90ZXN0LmF0dG9wdCBBTFRFUiBDT0xVTU4gYSBTRVQgKG5fZGlzdGluY3Q9JzEw MCcpOworKDIgcm93cykKKworLS0gUGFydGl0aW9uZWQgdGFibGUgcGFyZW50IChSQU5HRSBhbmQg SEFTSCkuCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlIChpZCBpbnQsIGsgaW50KSBQQVJUSVRJ T04gQlkgUkFOR0UgKGlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVk X3JhbmdlJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSAoIGlkIGludGVnZXIsIGsg aW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJM RSBwYXJ0ZWRfaGFzaCAoaWQgaW50KSBQQVJUSVRJT04gQlkgSEFTSCAoaWQpOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFzaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2hhc2ggKCBpZCBpbnRlZ2VyKSBQ QVJUSVRJT04gQlkgSEFTSCAoaWQpOworKDEgcm93KQorCistLSBQYXJ0aXRpb24gY2hpbGRyZW46 IEZST00vVE8sIFdJVEggKG1vZHVsdXMsIHJlbWFpbmRlciksIERFRkFVTFQuCitDUkVBVEUgVEFC TEUgcGFydGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBhcnRlZF9yYW5nZQorICAgIEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEwMCk7CitBTFRFUiBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBBTFRFUiBD T0xVTU4gayBTRVQgREVGQVVMVCA3OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdw YXJ0ZWRfcmFuZ2VfMSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBndGJs X2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZV8xIEFMVEVSIENPTFVNTiBrIFNF VCBERUZBVUxUIDc7CisoMiByb3dzKQorCitDUkVBVEUgVEFCTEUgcGFydGVkX2hhc2hfMCBQQVJU SVRJT04gT0YgcGFydGVkX2hhc2gKKyAgICBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVt YWluZGVyIDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFzaF8w Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoXzAgUEFSVElUSU9OIE9G IHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCBy ZW1haW5kZXIgMCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBB UlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBh cnRlZF9yYW5nZV9kZWYgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBE RUZBVUxUOworKDEgcm93KQorCistLSBSdWxlcy4KK0NSRUFURSBUQUJMRSBydCAoaWQgaW50KTsK K0NSRUFURSBUQUJMRSBydF9sb2cgKGlkIGludCk7CitDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0 IEFTIE9OIElOU0VSVCBUTyBydAorICAgIERPIEFMU08gSU5TRVJUIElOVE8gcnRfbG9nIFZBTFVF UyAoTkVXLmlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFz cywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LnJ0ICggaWQgaW50ZWdlcik7CisgQ1JFQVRFIFJVTEUgcnRfbG9nX2luc2Vy dCBBUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIE9OIElOU0VSVCBU TyBwZ3RibF9kZGxfdGVzdC5ydCBETyAgSU5TRVJUIElOVE8gcnRfbG9nIChpZCkrCisgICBWQUxV RVMgKG5ldy5pZCk7CisoMiByb3dzKQorCistLSBFeHRlbmRlZCBzdGF0aXN0aWNzLgorQ1JFQVRF IFRBQkxFIHN0eCAoYSBpbnQsIGIgaW50LCBjIGludCk7CitDUkVBVEUgU1RBVElTVElDUyBzdHhf bmR2IChuZGlzdGluY3QpIE9OIGEsIGIgRlJPTSBzdHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnN0eCAo IGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworIENSRUFURSBTVEFUSVNUSUNTIHBn dGJsX2RkbF90ZXN0LnN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0eDsKKygyIHJv d3MpCisKKy0tIFJvdy1sZXZlbCBzZWN1cml0eSB0b2dnbGVzLgorQ1JFQVRFIFRBQkxFIHJscyAo aWQgaW50KTsKK0FMVEVSIFRBQkxFIHJscyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOworQUxU RVIgVEFCTEUgcmxzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncmxzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyAoIGlkIGludGVnZXIpOworIEFMVEVS IFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFk7Ciso MyByb3dzKQorCistLSBSRVBMSUNBIElERU5USVRZOiBlbWl0dGVkIG9ubHkgd2hlbiBub3QgdGhl IGRlZmF1bHQuCitDUkVBVEUgVEFCTEUgcmlfZnVsbCAoYSBpbnQpOworQUxURVIgVEFCTEUgcmlf ZnVsbCBSRVBMSUNBIElERU5USVRZIEZVTEw7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCAoIGEgaW50ZWdlcik7CisgQUxURVIgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCBSRVBMSUNBIElERU5USVRZIEZVTEw7CisoMiByb3dz KQorCitDUkVBVEUgVEFCTEUgcmlfaWR4IChhIGludCBOT1QgTlVMTCk7CitDUkVBVEUgVU5JUVVF IElOREVYIHJpX2lkeF9hIE9OIHJpX2lkeCAoYSk7CitBTFRFUiBUQUJMRSByaV9pZHggUkVQTElD QSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9pZHhfYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncmlfaWR4Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LnJpX2lkeCAoIGEgaW50ZWdlciBOT1QgTlVMTCk7CisgQ1JFQVRFIFVOSVFV RSBJTkRFWCByaV9pZHhfYSBPTiBwZ3RibF9kZGxfdGVzdC5yaV9pZHggVVNJTkcgYnRyZWUgKGEp OworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeCBBREQgQ09OU1RSQUlOVCByaV9p ZHhfYV9ub3RfbnVsbCBOT1QgTlVMTCBhOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJp X2lkeCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX2lkeF9hOworKDQgcm93cykKKwor LS0gVU5MT0dHRUQgKyByZWxvcHRpb25zLgorQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHVubyAoaWQg aW50KSBXSVRIIChmaWxsZmFjdG9yID0gNzApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCd1bm8nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVU5MT0dHRUQgVEFCTEUg cGd0YmxfZGRsX3Rlc3QudW5vICggaWQgaW50ZWdlcikgV0lUSCAoZmlsbGZhY3Rvcj0nNzAnKTsK KygxIHJvdykKKworLS0gVHlwZWQgdGFibGUgKENSRUFURSBUQUJMRSBPRiB0eXBlX25hbWUpLiAg Q29sdW1ucyBpbmhlcml0ZWQgZnJvbSB0aGUKKy0tIHR5cGUgZW1pdCBub3RoaW5nOyBsb2NhbGx5 LWFwcGxpZWQgREVGQVVMVCwgTk9UIE5VTEwgYW5kIENIRUNLIGNvbWUKKy0tIG91dCB0aHJvdWdo IGEgc2luZ2xlICIoY29sIFdJVEggT1BUSU9OUyAuLi4pIiBsaXN0LgorQ1JFQVRFIFRZUEUgdHlw ZWRfdCBBUyAoYSBpbnQsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgdHlwZWRfcGxhaW4gT0YgdHlw ZWRfdDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndHlwZWRfcGxhaW4nOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QudHlwZWRfcGxhaW4gT0YgcGd0YmxfZGRsX3Rlc3QudHlw ZWRfdDsKKygxIHJvdykKKworQ1JFQVRFIFRBQkxFIHR5cGVkX292ZXIgT0YgdHlwZWRfdCAoCisg ICAgYSBXSVRIIE9QVElPTlMgREVGQVVMVCA3IE5PVCBOVUxMLAorICAgIGIgV0lUSCBPUFRJT05T IE5PVCBOVUxMLAorICAgIENPTlNUUkFJTlQgYl9ub25lbXB0eSBDSEVDSyAobGVuZ3RoKGIpID4g MCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3R5cGVkX292ZXInOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QudHlwZWRfb3ZlciBPRiBwZ3RibF9kZGxfdGVzdC50eXBlZF90ICggYSBXSVRI IE9QVElPTlMgREVGQVVMVCA3IE5PVCBOVUxMLCBiIFdJVEggT1BUSU9OUyBOT1QgTlVMTCwgQ09O U1RSQUlOVCBiX25vbmVtcHR5IENIRUNLICgobGVuZ3RoKGIpID4gMCkpKTsKKyBBTFRFUiBUQUJM RSBwZ3RibF9kZGxfdGVzdC50eXBlZF9vdmVyIEFERCBDT05TVFJBSU5UIHR5cGVkX292ZXJfYV9u b3RfbnVsbCBOT1QgTlVMTCBhOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnR5cGVkX292 ZXIgQUREIENPTlNUUkFJTlQgdHlwZWRfb3Zlcl9iX25vdF9udWxsIE5PVCBOVUxMIGI7CisoMyBy b3dzKQorCistLSBUZW1wb3JhcnkgdGFibGVzICsgT04gQ09NTUlULiAgVGVtcCB0YWJsZXMgbGl2 ZSBpbiBhIHNlc3Npb24tbG9jYWwKKy0tIG5hbWVzcGFjZSB3aG9zZSBuYW1lIHZhcmllcyBiZXR3 ZWVuIHJ1bnMsIHNvIHdlIHN0cmlwIHRoZSBzY2hlbWEKKy0tIHByZWZpeC4gIE9OIENPTU1JVCBE Uk9QIG9ubHkgZmlyZXMgYXQgY29tbWl0LCBzbyB0aGUgcXVlcmllcyB0aGF0CistLSBuZWVkIHRv IHNlZSB0aGUgY2F0YWxvZyBlbnRyeSBtdXN0IHJ1biBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBh cworLS0gdGhlIENSRUFURS4KK0JFR0lOOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWZhdWx0 IChpZCBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWxldGUgKGlkIGludCkgT04gQ09N TUlUIERFTEVURSBST1dTOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnQpIE9O IENPTU1JVCBEUk9QOworU0VMRUNUIHJlZ2V4cF9yZXBsYWNlKGxpbmUsICciP3BnX3RlbXBfP1sw LTldKyI/XC4nLCAncGdfdGVtcC4nKSBBUyBsaW5lCitGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Rl bXBfZGVmYXVsdCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKSBBUyBsaW5lCitXSEVSRSBs aW5lIExJS0UgJ0NSRUFURSAlJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSBw Z190ZW1wLnRlbXBfZGVmYXVsdCAoIGlkIGludGVnZXIpOworKDEgcm93KQorCitTRUxFQ1QgcmVn ZXhwX3JlcGxhY2UobGluZSwgJyI/cGdfdGVtcF8/WzAtOV0rIj9cLicsICdwZ190ZW1wLicpIEFT IGxpbmUKK0ZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWxldGUnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJykgQVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVBVEUgJSc7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU RU1QT1JBUlkgVEFCTEUgcGdfdGVtcC50ZW1wX2RlbGV0ZSAoIGlkIGludGVnZXIpIE9OIENPTU1J VCBERUxFVEUgUk9XUzsKKygxIHJvdykKKworU0VMRUNUIHJlZ2V4cF9yZXBsYWNlKGxpbmUsICci P3BnX3RlbXBfP1swLTldKyI/XC4nLCAncGdfdGVtcC4nKSBBUyBsaW5lCitGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3RlbXBfZHJvcCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKSBBUyBsaW5l CitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSBwZ190ZW1wLnRlbXBfZHJvcCAoIGlkIGlu dGVnZXIpIE9OIENPTU1JVCBEUk9QOworKDEgcm93KQorCitST0xMQkFDSzsKKy0tIFByZXR0eSBt b2RlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAn b3duZXInLCAnZmFsc2UnLCAncHJldHR5JywgJ3RydWUnKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LmJhc2ljICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsKKyAgICAgaWQgaW50ZWdlciBOT1QgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICBuYW1lIHRleHQgQ09M TEFURSAiQyIgREVGQVVMVCAnYW5vbic6OnRleHQgTk9UIE5VTEwgICAgICAgICAgICAgICAgICAg ICAgICAgICArCisgKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyBBREQgQ09O U1RSQUlOVCBiYXNpY19pZF9ub3RfbnVsbCBOT1QgTlVMTCBpZDsKKyBBTFRFUiBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5iYXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19uYW1lX25vdF9udWxsIE5PVCBO VUxMIG5hbWU7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJ TlQgYmFzaWNfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDQgcm93cykKKworLS0gaW5jbHVkZXNf KiBnYXRpbmc6IGVhY2ggc3ViLW9iamVjdCBjYXRlZ29yeSBjYW4gYmUgc3VwcHJlc3NlZCBpbmRp dmlkdWFsbHkuCistLSBpbmNsdWRlc19pbmRleGVzPWZhbHNlIGhpZGVzIHRoZSBDUkVBVEUgSU5E RVggc3RhdGVtZW50cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdpbmNsdWRlc19pbmRleGVzJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkICgg aWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxf dGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfaWRfbm90X251bGwgTk9UIE5VTEwgaWQ7Cisg QUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkg UFJJTUFSWSBLRVkgKGlkKTsKKygzIHJvd3MpCisKKy0tIGluY2x1ZGVzX2NvbnN0cmFpbnRzPWZh bHNlIGhpZGVzIGJvdGggaW5saW5lIENIRUNLIGluIENSRUFURSBUQUJMRSBhbmQKKy0tIHRoZSBB TFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgbGluZXMuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZXNfY29uc3RyYWludHMnLCAnZmFsc2UnKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuY29ucyAoIGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworKDEgcm93KQorCist LSBpbmNsdWRlc19ydWxlcz1mYWxzZSBoaWRlcyB0aGUgQ1JFQVRFIFJVTEUuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzX3J1bGVzJywgJ2ZhbHNlJyk7 CisgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUg cGd0YmxfZGRsX3Rlc3QucnQgKCBpZCBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gaW5jbHVkZXNf c3RhdGlzdGljcz1mYWxzZSBoaWRlcyB0aGUgQ1JFQVRFIFNUQVRJU1RJQ1MuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlc19zdGF0aXN0aWNzJywgJ2Zh bHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5zdHggKCBhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyKTsKKygxIHJvdykK KworLS0gaW5jbHVkZXNfcmxzPWZhbHNlIGhpZGVzIHRoZSBFTkFCTEUvRk9SQ0UgUk9XIExFVkVM IFNFQ1VSSVRZIHRvZ2dsZXMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdpbmNsdWRlc19ybHMnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyAoIGlkIGlu dGVnZXIpOworKDEgcm93KQorCistLSBpbmNsdWRlc19yZXBsaWNhX2lkZW50aXR5PWZhbHNlIGhp ZGVzIHRoZSBSRVBMSUNBIElERU5USVRZIGNsYXVzZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlc19yZXBsaWNhX2lkZW50aXR5JywgJ2ZhbHNl Jyk7CisgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9mdWxsICggYSBpbnRlZ2VyKTsKKygxIHJvdykK KworLS0gaW5jbHVkZXNfcGFydGl0aW9uOiBkZWZhdWx0IGlzIGZhbHNlLCBzbyB0aGUgcGFydGl0 aW9uZWQtdGFibGUgcGFyZW50CistLSBEREwgb24gaXRzIG93biBkb2VzIG5vdCBpbmNsdWRlIGl0 cyBjaGlsZHJlbi4gIFNldHRpbmcgaXQgdG8gdHJ1ZQorLS0gYXBwZW5kcyB0aGUgY2hpbGRyZW4n cyBEREwgYWZ0ZXIgdGhlIHBhcmVudC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cGFydGVkX3JhbmdlJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzX3BhcnRpdGlvbicsICd0cnVlJyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSAoIGlkIGludGVnZXIsIGsg aW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LnBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRf cmFuZ2UgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBw Z3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKKyg0IHJvd3MpCisKKy0tIHNjaGVt YV9xdWFsaWZpZWQ9ZmFsc2Ugc3RyaXBzIHRoZSBzY2hlbWEgZnJvbSB0aGUgdGFyZ2V0IHRhYmxl IGl0c2VsZgorLS0gYW5kIGZyb20gc2FtZS1zY2hlbWEgc2libGluZyByZWZlcmVuY2VzIChpbmhl cml0YW5jZS9wYXJ0aXRpb24KKy0tIHBhcmVudHMsIGlkZW50aXR5IHNlcXVlbmNlcyBpbiB0aGUg c2FtZSBzY2hlbWEpLCB3aGlsZSBjcm9zcy1zY2hlbWEKKy0tIHJlZmVyZW5jZXMgYXJlIGtlcHQg cXVhbGlmaWVkIGZvciBjb3JyZWN0bmVzcy4KKy0tCistLSBCYXJlIENSRUFURSBUQUJMRSBmb3Ig YW4gb3JkaW5hcnkgdGFibGUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2lj Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgYmFzaWMgKCBpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRl eHQgQ09MTEFURSAiQyIgREVGQVVMVCAnYW5vbic6OnRleHQgTk9UIE5VTEwpOworIEFMVEVSIFRB QkxFIGJhc2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX2lkX25vdF9udWxsIE5PVCBOVUxMIGlkOwor IEFMVEVSIFRBQkxFIGJhc2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX25hbWVfbm90X251bGwgTk9U IE5VTEwgbmFtZTsKKyBBTFRFUiBUQUJMRSBiYXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19wa2V5 IFBSSU1BUlkgS0VZIChpZCk7CisoNCByb3dzKQorCistLSBJTkhFUklUUyBwYXJlbnQgaW4gdGhl IHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2NoJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIGNoICgg YyBpbnRlZ2VyKSBJTkhFUklUUyAocGFyKTsKKyBBTFRFUiBUQUJMRSBjaCBBTFRFUiBDT0xVTU4g YSBTRVQgREVGQVVMVCA5OTk7CisoMiByb3dzKQorCistLSBQYXJ0aXRpb24gcGFyZW50IGluIHRo ZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2Zh bHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0 ZWRfcmFuZ2UgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwYXJ0 ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworKDIgcm93cykKKworLS0g Q3Jvc3Mtc2NoZW1hIEZLIHRhcmdldCBrZWVwcyBxdWFsaWZpY2F0aW9uLiAgVGhlICdyZWZkJyB0 YWJsZSBpcyBpbgorLS0gcGd0YmxfZGRsX3Rlc3Q7IHBsYWNlIGFuIEZLIHRhcmdldCBpbiBhIGRp ZmZlcmVudCBzY2hlbWEgYW5kIHZlcmlmeSBpdAorLS0gc3RheXMgcXVhbGlmaWVkIGV2ZW4gd2l0 aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfb3RoZXI7 CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX290aGVyLnBhcmVudCAoaWQgaW50IFBSSU1BUlkgS0VZ KTsKK0NSRUFURSBUQUJMRSB4c2NoZW1hX2ZrICgKKyAgICBpZCAgaW50IFBSSU1BUlkgS0VZLAor ICAgIHBpZCBpbnQgUkVGRVJFTkNFUyBwZ3RibF9kZGxfb3RoZXIucGFyZW50CispOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd4c2NoZW1hX2ZrJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZp ZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSB4c2NoZW1hX2ZrICggaWQgaW50 ZWdlciBOT1QgTlVMTCwgcGlkIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHhzY2hlbWFfZmsgQURE IENPTlNUUkFJTlQgeHNjaGVtYV9ma19pZF9ub3RfbnVsbCBOT1QgTlVMTCBpZDsKKyBBTFRFUiBU QUJMRSB4c2NoZW1hX2ZrIEFERCBDT05TVFJBSU5UIHhzY2hlbWFfZmtfcGlkX2ZrZXkgRk9SRUlH TiBLRVkgKHBpZCkgUkVGRVJFTkNFUyBwZ3RibF9kZGxfb3RoZXIucGFyZW50KGlkKTsKKyBBTFRF UiBUQUJMRSB4c2NoZW1hX2ZrIEFERCBDT05TVFJBSU5UIHhzY2hlbWFfZmtfcGtleSBQUklNQVJZ IEtFWSAoaWQpOworKDQgcm93cykKKworLS0gSWRlbnRpdHkgY29sdW1uIHdpdGggYSBjdXN0b20g c2VxdWVuY2UgbmFtZSBpbiB0aGUgc2FtZSBzY2hlbWEgaXMKKy0tIGVtaXR0ZWQgdW5xdWFsaWZp ZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hl bWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUg aWRfY3VzdG9tICggdiBpbnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNUQVJU IFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1IE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAgQ0FDSEUg MTAgQ1lDTEUpIE5PVCBOVUxMKTsKKyBBTFRFUiBUQUJMRSBpZF9jdXN0b20gQUREIENPTlNUUkFJ TlQgaWRfY3VzdG9tX3Zfbm90X251bGwgTk9UIE5VTEwgdjsKKygyIHJvd3MpCisKKy0tIFJvdW5k LXRyaXA6IHdpdGggc2NoZW1hX3F1YWxpZmllZD1mYWxzZSwgYWZ0ZXIgU0VUIHNlYXJjaF9wYXRo IHRoZQorLS0gRERMIGNhbiBiZSByZXBsYXllZCBpbnRvIGEgZGlmZmVyZW50IHRhcmdldCBzY2hl bWEuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9yZXBsYXk7CitETyAkJAorREVDTEFSRQorICAg IHN0bXQgdGV4dDsKK0JFR0lOCisgICAgU0VUIExPQ0FMIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRs X3JlcGxheTsKKyAgICBGT1Igc3RtdCBJTgorICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BndGJsX2RkbF90ZXN0LmJhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAn ZmFsc2UnKSBBUyBsaW5lCisgICAgTE9PUAorICAgICAgICBFWEVDVVRFIHN0bXQ7CisgICAgRU5E IExPT1A7CitFTkQgJCQ7CitTRUxFQ1QgcmVsbmFtZXNwYWNlOjpyZWduYW1lc3BhY2U6OnRleHQs IHJlbG5hbWUKK0ZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gJ3BndGJsX2RkbF9yZXBsYXkuYmFz aWMnOjpyZWdjbGFzczsKKyAgIHJlbG5hbWVzcGFjZSAgIHwgcmVsbmFtZSAKKy0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0KKyBwZ3RibF9kZGxfcmVwbGF5IHwgYmFzaWMKKygxIHJvdykKKwor RFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3JlcGxheSBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfcmVwbGF5LmJhc2ljCitEUk9QIFRBQkxFIHhzY2hlbWFf Zms7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfb3RoZXIgQ0FTQ0FERTsKK05PVElDRTogIGRyb3Ag Y2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX290aGVyLnBhcmVudAorLS0gTG9jYWxseS1kZWNs YXJlZCBDSEVDSyBvbiBhIHBhcnRpdGlvbiBjaGlsZCBoYXMgbm8gaW5saW5lIGNvbHVtbgorLS0g bGlzdCB0byBsaXZlIGluIChQQVJUSVRJT04gT0YgZm9ybSksIHNvIGl0IG11c3QgY29tZSBvdXQg YXMgYQorLS0gc2VwYXJhdGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIHN0YXRlbWVu dC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hrIChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBC WSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9G IHBhcnRlZF9jaGsKKyAgICAoQ09OU1RSQUlOVCBjaGtfaW5saW5lIENIRUNLICh2YWwgPiAwKSkK KyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdwYXJ0ZWRfY2hrX2NoaWxkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfY2hrX2NoaWxkIFBB UlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfY2hrIEZPUiBWQUxVRVMgRlJPTSAoMCkg VE8gKDEwMCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2Noa19jaGlsZCBB REQgQ09OU1RSQUlOVCBjaGtfaW5saW5lIENIRUNLICgodmFsID4gMCkpOworKDIgcm93cykKKwor RFJPUCBUQUJMRSBwYXJ0ZWRfY2hrOworLS0gSW5oZXJpdGFuY2UgY2hpbGRyZW4gb2YgYSBwYXJl bnQgd2l0aCBhIGdlbmVyYXRlZCBjb2x1bW4gc2hvdWxkIG5vdAorLS0gZW1pdCBhbiBBTFRFUiBD T0xVTU4gLi4uIFNFVCBERUZBVUxUIGZvciB0aGUgaW5oZXJpdGVkIGdlbmVyYXRlZAorLS0gY29s dW1uOiB0aGUgR0VORVJBVEVEIGV4cHJlc3Npb24gY2FycmllcyBkb3duIHRocm91Z2ggaW5oZXJp dGFuY2UsCistLSBhbmQgU0VUIERFRkFVTFQgd291bGQgZmFpbCBhdCByZXBsYXkgYWdhaW5zdCBh IGdlbmVyYXRlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgcGFyX2dlbiAoCisgICAgaWQgaW50LAor ICAgIGcgIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChpZCAqIDIpIFNUT1JFRAorKTsKK0NSRUFU RSBUQUJMRSBjaF9nZW4gKCkgSU5IRVJJVFMgKHBhcl9nZW4pOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdjaF9nZW4nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuY2hfZ2VuICgpIElOSEVSSVRTIChwZ3RibF9kZGxfdGVzdC5wYXJfZ2VuKTsKKygxIHJv dykKKworRFJPUCBUQUJMRSBwYXJfZ2VuIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIGNoX2dlbgorLS0gVXNlci1uYW1lZCBOT1QgTlVMTCBjb25zdHJhaW50IG11c3Qg YmUgZW1pdHRlZCBpbmxpbmUgYXMKKy0tICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIHNvIGEg cmVwbGF5IGRvZXMgbm90IGNvbGxpZGUgd2l0aCB0aGUKKy0tIGF1dG8tbmFtZWQgTk9UIE5VTEwg dGhhdCBQb3N0Z3JlU1FMIHdvdWxkIG90aGVyd2lzZSBjcmVhdGUgZnJvbSBhCistLSBwbGFpbiBp bmxpbmUgIk5PVCBOVUxMIi4gIFRoZSBjb25zdHJhaW50IGxvb3Agc2tpcHMgdGhlIHVzZXItbmFt ZWQKKy0tIGVudHJ5IHRvIGF2b2lkIGRvdWJsZS1lbWlzc2lvbi4KK0NSRUFURSBUQUJMRSBubl9u YW1lZCAoCisgICAgYSBpbnQgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCwKKyAgICBiIGludCBO T1QgTlVMTAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fbmFtZWQnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qubm5fbmFtZWQgKCBhIGludGVnZXIgQ09OU1RS QUlOVCBteV9ubiBOT1QgTlVMTCwgYiBpbnRlZ2VyIE5PVCBOVUxMKTsKKyBBTFRFUiBUQUJMRSBw Z3RibF9kZGxfdGVzdC5ubl9uYW1lZCBBREQgQ09OU1RSQUlOVCBubl9uYW1lZF9iX25vdF9udWxs IE5PVCBOVUxMIGI7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIG5uX25hbWVkOworLS0gTG9jYWxs eS1kZWNsYXJlZCBOT1QgTlVMTCBvbiBhbiBpbmhlcml0ZWQgY29sdW1uLiAgVGhlIGNvbHVtbiBp dHNlbGYKKy0tIGlzIG9taXR0ZWQgZnJvbSB0aGUgY2hpbGQncyBjb2x1bW4gbGlzdCAoYXR0aXNs b2NhbD1mYWxzZSksIHNvIHRoZQorLS0gdXNlci1uYW1lZCBOT1QgTlVMTCBtdXN0IGNvbWUgb3V0 IHZpYSB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludAorLS0gbG9vcCByYXRoZXIgdGhhbiBpbmxp bmUuCitDUkVBVEUgVEFCTEUgbm5fcGFyIChhIGludCk7CitDUkVBVEUgVEFCTEUgbm5fY2ggKGIg aW50KSBJTkhFUklUUyAobm5fcGFyKTsKK0FMVEVSIFRBQkxFIG5uX2NoIEFERCBDT05TVFJBSU5U IG15X25uIE5PVCBOVUxMIGE7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX2No Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5ubl9jaCAoIGIgaW50ZWdlcikgSU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0Lm5uX3Bhcik7Cisg QUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qubm5fY2ggQUREIENPTlNUUkFJTlQgbXlfbm4gTk9U IE5VTEwgYTsKKygyIHJvd3MpCisKK0RST1AgVEFCTEUgbm5fcGFyIENBU0NBREU7CitOT1RJQ0U6 ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIG5uX2NoCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNl IG11c3QgZHJvcCB0aGUgc2NoZW1hIHByZWZpeCBmcm9tIERFRkFVTFQKKy0tIGV4cHJlc3Npb25z IGFuZCBpbmxpbmUgQ0hFQ0sgYm9kaWVzIHRoYXQgcmVmZXJlbmNlIHNhbWUtc2NoZW1hCistLSBv YmplY3RzIChzZXF1ZW5jZSB2aWEgbmV4dHZhbCwgZnVuY3Rpb24gdmlhIGRpcmVjdCBjYWxsKS4g IFRoaXMKKy0tIHJlbGllcyBvbiB0aGUgZGVwYXJzZXIgcmVzcGVjdGluZyB0aGUgbmFycm93ZWQg c2VhcmNoX3BhdGggcmF0aGVyCistLSB0aGFuIG9uIHN1YnN0cmluZyBzdHJpcHBpbmcuCitDUkVB VEUgU0NIRU1BIHBndGJsX2RkbF94cmVmOworQ1JFQVRFIFNFUVVFTkNFIHBndGJsX2RkbF94cmVm Lm15c2VxOworQ1JFQVRFIEZVTkNUSU9OIHBndGJsX2RkbF94cmVmLmYoaW50KSBSRVRVUk5TIGlu dCBMQU5HVUFHRSBzcWwgSU1NVVRBQkxFCisgICAgQVMgJ1NFTEVDVCAkMSc7CitDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3hyZWYudCAoCisgICAgaWQgIGludCBERUZBVUxUIG5leHR2YWwoJ3BndGJs X2RkbF94cmVmLm15c2VxJyksCisgICAgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVD SyAocGd0YmxfZGRsX3hyZWYuZih2YWwpID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3BndGJsX2RkbF94cmVmLnQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgdCAoIGlkIGludGVnZXIgREVGQVVMVCBuZXh0dmFsKCdteXNlcSc6OnJlZ2NsYXNzKSwgdmFs IGludGVnZXIsIENPTlNUUkFJTlQgY2hrIENIRUNLICgoZih2YWwpID4gMCkpKTsKKygxIHJvdykK KworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3hyZWYgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2Fz Y2FkZXMgdG8gMyBvdGhlciBvYmplY3RzCitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHNlcXVl bmNlIHBndGJsX2RkbF94cmVmLm15c2VxCitkcm9wIGNhc2NhZGVzIHRvIGZ1bmN0aW9uIHBndGJs X2RkbF94cmVmLmYoaW50ZWdlcikKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3hy ZWYudAorLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5PVCBjb3JydXB0IHN0cmluZyBs aXRlcmFscyB3aG9zZQorLS0gY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBu YW1lIGZvbGxvd2VkIGJ5IGEgZG90LiAgVGhlCistLSBpbi1zdHJpbmcgc3RhdGUgb2YgdGhlIHBy ZWZpeCBzdHJpcHBlciBwcmVzZXJ2ZXMgdGhlbSB2ZXJiYXRpbS4KK0NSRUFURSBTQ0hFTUEgcGd0 YmxfZGRsX3N0cjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfc3RyLnAgKGlkIGludCwgbm90ZSB0 ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfc3Ry LnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfc3RyLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hF Q0sgKG5vdGUgPD4gJ3BndGJsX2RkbF9zdHIuc2VjcmV0JykpCisgICAgRk9SIFZBTFVFUyBGUk9N ICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRs X3N0ci5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25l cicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFs aWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFM VUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNo ayBDSEVDSyAoKG5vdGUgPD4gJ3BndGJsX2RkbF9zdHIuc2VjcmV0Jzo6dGV4dCkpOworKDIgcm93 cykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3N0ciBDQVNDQURFOworTk9USUNFOiAgZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfc3RyLnAKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFs c2UgbXVzdCBOT1QgY29ycnVwdCBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzCistLSB3aG9zZSBj b250ZW50cyBoYXBwZW4gdG8gY29udGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBk b3QKKy0tIChmb3IgZXhhbXBsZSBhIGNvbHVtbiBsaXRlcmFsbHkgbmFtZWQgIjxzY2hlbWE+Lndl aXJkIiBpbnNpZGUgdGhhdAorLS0gc2NoZW1hKS4gIFRoZSBpbi1pZGVudCBzdGF0ZSBvZiB0aGUg cHJlZml4IHN0cmlwcGVyIHByZXNlcnZlcyB0aGVtCistLSB2ZXJiYXRpbS4KK0NSRUFURSBTQ0hF TUEgcGd0YmxfZGRsX3FpZDsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcWlkLnAgKGlkIGludCwg InBndGJsX2RkbF9xaWQud2VpcmQiIGludCkKKyAgICBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsK K0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcWlkLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfcWlk LnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKCJwZ3RibF9kZGxfcWlkLndlaXJkIiA+IDAp KQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BndGJsX2RkbF9xaWQucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFM VUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNo ayBDSEVDSyAoKCJwZ3RibF9kZGxfcWlkLndlaXJkIiA+IDApKTsKKygyIHJvd3MpCisKK0RST1Ag U0NIRU1BIHBndGJsX2RkbF9xaWQgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8g dGFibGUgcGd0YmxfZGRsX3FpZC5wCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIHdoZW4gdGhl IGJhc2Ugc2NoZW1hIG5hbWUgaXRzZWxmIHJlcXVpcmVzCistLSBxdW90aW5nIChpdHMgcHJlZml4 IHN0YXJ0cyB3aXRoICIpLiAgQm90aCBmb3JtcyBvZiB0aGUgcHJlZml4IC0KKy0tIGJhcmUtbG93 ZXJjYXNlIGFuZCBxdW90ZWQgLSBtdXN0IGJlIHN0cmlwcGVkIGZyb20gb3V0ZXIKKy0tIEFMVEVS IFRBQkxFIC8gT04gLyBDUkVBVEUgSU5ERVggcHJlZml4ZXMsIHdoaWxlIGlubmVyIHF1b3RlZAor LS0gaWRlbnRpZmllcnMgdGhhdCBoYXBwZW4gdG8gYmVnaW4gdGhlIHNhbWUgd2F5IG11c3QgYmUg cHJlc2VydmVkLgorQ1JFQVRFIFNDSEVNQSAiUGdUYmwtRGRsLVEiOworQ1JFQVRFIFRBQkxFICJQ Z1RibC1EZGwtUSIuIlQiIChpZCBpbnQsIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hF Q0sgKHZhbCA+IDApKTsKK0NSRUFURSBJTkRFWCAiVF92YWxfaWR4IiBPTiAiUGdUYmwtRGRsLVEi LiJUIiAodmFsKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnIlBnVGJsLURkbC1R Ii4iVCInOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXIn LCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlm aWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgIlQiICggaWQgaW50ZWdlciwgdmFsIGludGVnZXIsIENP TlNUUkFJTlQgY2hrIENIRUNLICgodmFsID4gMCkpKTsKKyBDUkVBVEUgSU5ERVggIlRfdmFsX2lk eCIgT04gIlQiIFVTSU5HIGJ0cmVlICh2YWwpOworKDIgcm93cykKKworRFJPUCBTQ0hFTUEgIlBn VGJsLURkbC1RIiBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSAiUGdU YmwtRGRsLVEiLiJUIgorLS0gRXJyb3I6IG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0 YWJsZS4KK0NSRUFURSBWSUVXIHYgQVMgU0VMRUNUIDEgQVMgeDsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgndic6OnJlZ2NsYXNzKTsKK0VSUk9SOiAgInYiIGlzIG5vdCBhbiBvcmRp bmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZQorQ1JFQVRFIFNFUVVFTkNFIHM7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3MnOjpyZWdjbGFzcyk7CitFUlJPUjogICJzIiBpcyBub3Qg YW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUKKy0tIE5VTEwgYXJndW1lbnQgcmV0dXJu cyBubyByb3dzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKE5VTEwpOworIHBnX2dl dF90YWJsZV9kZGwgCistLS0tLS0tLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKKy0tIFVucmVjb2du aXplZCBvcHRpb24uCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVn Y2xhc3MsICdib2d1cycsICd0cnVlJyk7CitFUlJPUjogIHVucmVjb2duaXplZCBvcHRpb246ICJi b2d1cyIKKy0tIE9kZCBudW1iZXIgb2YgdmFyaWFkaWMgYXJncy4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ3ByZXR0eScpOworRVJST1I6ICB2YXJp YWRpYyBhcmd1bWVudHMgbXVzdCBiZSBuYW1lL3ZhbHVlIHBhaXJzCitISU5UOiAgUHJvdmlkZSBh biBldmVuIG51bWJlciBvZiB2YXJpYWRpYyBhcmd1bWVudHMgdGhhdCBjYW4gYmUgZGl2aWRlZCBp bnRvIHBhaXJzLgorLS0gUm91bmQtdHJpcCB2ZXJpZmljYXRpb24uICBGb3IgZXZlcnkgdGVzdCB0 YWJsZSwgY2FwdHVyZSB0aGUgRERMIHRoZQorLS0gZnVuY3Rpb24gZW1pdHMsIGRyb3AgdGhlIHNj aGVtYSwgcmVwbGF5IGVhY2ggdGFibGUncyBEREwgaW4KKy0tIGRlcGVuZGVuY3kgb3JkZXIsIGFu ZCBjb25maXJtIHRoYXQgcGdfZ2V0X3RhYmxlX2RkbCBvbiB0aGUgcmVjcmVhdGVkCistLSByZWxh dGlvbiBtYXRjaGVzIHRoZSBvcmlnaW5hbCBsaW5lLWZvci1saW5lLiAgVGhlIGZpbmFsIFNFTEVD VCBtdXN0CistLSByZXR1cm4gemVybyByb3dzLgorQ1JFQVRFIFRFTVAgVEFCTEUgcGd0YmxfZGRs X3J0X29yaWcgKG5hbWUgdGV4dCwgb3JkIGludCwgbGluZSB0ZXh0KTsKK0lOU0VSVCBJTlRPIHBn dGJsX2RkbF9ydF9vcmlnCitTRUxFQ1QgdC5uYW1lLCBvLm9yZCwgby5saW5lCitGUk9NIChWQUxV RVMKKyAgICAgICAgKCdiYXNpYycpLCAoJ2lkX2NvbHMnKSwgKCdpZF9jdXN0b20nKSwgKCdnZW5f Y29scycpLCAoJ3N0b3JhZ2VfY29scycpLAorICAgICAgICAoJ3JlZmQnKSwgKCdjb25zJyksICgn aWR4ZCcpLAorICAgICAgICAoJ3BhcicpLCAoJ2NoJyksICgnYXR0b3B0JyksCisgICAgICAgICgn cGFydGVkX3JhbmdlJyksICgncGFydGVkX3JhbmdlXzEnKSwgKCdwYXJ0ZWRfcmFuZ2VfZGVmJyks CisgICAgICAgICgncGFydGVkX2hhc2gnKSwgKCdwYXJ0ZWRfaGFzaF8wJyksCisgICAgICAgICgn cnRfbG9nJyksICgncnQnKSwKKyAgICAgICAgKCdzdHgnKSwgKCdybHMnKSwgKCdyaV9mdWxsJyks ICgncmlfaWR4JyksICgndW5vJykKKyAgICAgKSBBUyB0KG5hbWUpLAorICAgICBMQVRFUkFMIHBn X2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJlZ2NsYXNzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJykgV0lUSCBPUkRJ TkFMSVRZIG8obGluZSwgb3JkKTsKK0RPICQkCitERUNMQVJFCisgICAgdGFibGVzIENPTlNUQU5U IHRleHRbXSA6PSBBUlJBWVsKKyAgICAgICAgJ2Jhc2ljJywgJ2lkX2NvbHMnLCAnaWRfY3VzdG9t JywgJ2dlbl9jb2xzJywgJ3N0b3JhZ2VfY29scycsCisgICAgICAgICdyZWZkJywgJ2NvbnMnLCAn aWR4ZCcsCisgICAgICAgICdwYXInLCAnY2gnLCAnYXR0b3B0JywKKyAgICAgICAgJ3BhcnRlZF9y YW5nZScsICdwYXJ0ZWRfcmFuZ2VfMScsICdwYXJ0ZWRfcmFuZ2VfZGVmJywKKyAgICAgICAgJ3Bh cnRlZF9oYXNoJywgJ3BhcnRlZF9oYXNoXzAnLAorICAgICAgICAncnRfbG9nJywgJ3J0JywKKyAg ICAgICAgJ3N0eCcsICdybHMnLCAncmlfZnVsbCcsICdyaV9pZHgnLCAndW5vJworICAgIF07Cisg ICAgdCB0ZXh0OworICAgIHN0bXQgdGV4dDsKK0JFR0lOCisgICAgRFJPUCBTQ0hFTUEgcGd0Ymxf ZGRsX3Rlc3QgQ0FTQ0FERTsKKyAgICBDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworICAg IEZPUkVBQ0ggdCBJTiBBUlJBWSB0YWJsZXMgTE9PUAorICAgICAgICBGT1Igc3RtdCBJTgorICAg ICAgICAgICAgU0VMRUNUIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZyBXSEVSRSBuYW1lID0g dCBPUkRFUiBCWSBvcmQKKyAgICAgICAgTE9PUAorICAgICAgICAgICAgRVhFQ1VURSBzdG10Owor ICAgICAgICBFTkQgTE9PUDsKKyAgICBFTkQgTE9PUDsKK0VORCAkJDsKK05PVElDRTogIGRyb3Ag Y2FzY2FkZXMgdG8gMjUgb3RoZXIgb2JqZWN0cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBiYXNpYworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBpZF9jb2xzCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIGlkX2N1c3RvbQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fY29scworZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBzdG9yYWdlX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg cmVmZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjb25zCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IGlkeGQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFyCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IGNoCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGF0dG9wdAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBwYXJ0ZWRfcmFuZ2UKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2hhc2gKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgcnQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnRfbG9nCitkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIHN0eAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBybHMKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgcmlfZnVsbAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9pZHgK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgdW5vCitkcm9wIGNhc2NhZGVzIHRvIHR5cGUgdHlwZWRf dAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0eXBlZF9wbGFpbgorZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSB0eXBlZF9vdmVyCitkcm9wIGNhc2NhZGVzIHRvIHZpZXcgdgorZHJvcCBjYXNjYWRlcyB0 byBzZXF1ZW5jZSBzCitXSVRIIGFmdGVyX2RkbCBBUyAoCisgICAgU0VMRUNUIHQubmFtZSwgby5v cmQsIG8ubGluZQorICAgIEZST00gKFNFTEVDVCBESVNUSU5DVCBuYW1lIEZST00gcGd0YmxfZGRs X3J0X29yaWcpIEFTIHQsCisgICAgICAgICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3Ri bF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScpIFdJVEggT1JESU5BTElUWSBvKGxpbmUsIG9y ZCkKKykKKyhTRUxFQ1QgJ21pc3NpbmctaW4tY29weScgQVMga2luZCwgbmFtZSwgb3JkLCBsaW5l IEZST00gcGd0YmxfZGRsX3J0X29yaWcKKyBFWENFUFQKKyBTRUxFQ1QgJ21pc3NpbmctaW4tY29w eScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbCkKK1VOSU9OIEFMTAorKFNFTEVDVCAn ZXh0cmEtaW4tY29weScgQVMga2luZCwgbmFtZSwgb3JkLCBsaW5lIEZST00gYWZ0ZXJfZGRsCisg RVhDRVBUCisgU0VMRUNUICdleHRyYS1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZST00gcGd0 YmxfZGRsX3J0X29yaWcpCitPUkRFUiBCWSBraW5kLCBuYW1lLCBvcmQ7Cisga2luZCB8IG5hbWUg fCBvcmQgfCBsaW5lIAorLS0tLS0tKy0tLS0tLSstLS0tLSstLS0tLS0KKygwIHJvd3MpCisKKy0t IENsZWFudXAuCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfdGVzdCBDQVNDQURFOworTk9USUNFOiAg ZHJvcCBjYXNjYWRlcyB0byAyMCBvdGhlciBvYmplY3RzCitERVRBSUw6ICBkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIGJhc2ljCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2NvbHMKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgaWRfY3VzdG9tCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGdlbl9jb2xz Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0b3JhZ2VfY29scworZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSByZWZkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNvbnMKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgaWR4ZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXIKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgY2gKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgYXR0b3B0Citkcm9wIGNhc2NhZGVzIHRv IHRhYmxlIHBhcnRlZF9yYW5nZQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfaGFzaAor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBydF9sb2cKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnQK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgc3R4Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJscwor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9mdWxsCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJp X2lkeAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB1bm8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVk dWxlCmluZGV4IDhmYTBhNmM0N2ZiLi45ZWNhNjRjY2EzYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVs X3NjaGVkdWxlCkBAIC04MSw3ICs4MSw3IEBAIHRlc3Q6IGNyZWF0ZV90YWJsZV9saWtlIGFsdGVy X2dlbmVyaWMgYWx0ZXJfb3BlcmF0b3IgbWlzYyBhc3luYyBkYnNpemUgbWVyZ2UgbWlzCiAjIGNv bGxhdGUubGludXgudXRmOCBhbmQgY29sbGF0ZS5pY3UudXRmOCB0ZXN0cyBjYW5ub3QgYmUgcnVu IGluIHBhcmFsbGVsIHdpdGggZWFjaCBvdGhlcgogIyBwc3FsIGRlcGVuZHMgb24gY3JlYXRlX2Ft CiAjIGFtdXRpbHMgZGVwZW5kcyBvbiBnZW9tZXRyeSwgY3JlYXRlX2luZGV4X3NwZ2lzdCwgaGFz aF9pbmRleCwgYnJpbgotdGVzdDogcnVsZXMgcHNxbCBwc3FsX2Nyb3NzdGFiIHBzcWxfcGlwZWxp bmUgYW11dGlscyBzdGF0c19leHQgY29sbGF0ZS5saW51eC51dGY4IGNvbGxhdGUud2luZG93cy53 aW4xMjUyCit0ZXN0OiBydWxlcyBwc3FsIHBzcWxfY3Jvc3N0YWIgcHNxbF9waXBlbGluZSBhbXV0 aWxzIHN0YXRzX2V4dCBjb2xsYXRlLmxpbnV4LnV0ZjggY29sbGF0ZS53aW5kb3dzLndpbjEyNTIg cGdfZ2V0X3RhYmxlX2RkbAogCiAjIC0tLS0tLS0tLS0KICMgUnVuIHRoZXNlIGFsb25lIHNvIHRo ZXkgZG9uJ3QgcnVuIG91dCBvZiBwYXJhbGxlbCB3b3JrZXJzCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3BnX2dldF90YWJsZV9kZGwuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi44ODdmNTY1ZDU4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3BnX2dldF90YWJsZV9kZGwuc3FsCkBAIC0wLDAgKzEsNDQwIEBACistLQorLS0gcGdfZ2V0X3Rh YmxlX2RkbAorLS0KKy0tIEFsbCB0ZXN0cyBwYXNzIG93bmVyPT5mYWxzZSBzbyB0aGUgQUxURVIg VEFCTEUgT1dORVIgVE8gbGluZSBpcyBub3QKKy0tIGVtaXR0ZWQsIGtlZXBpbmcgb3V0cHV0IHN0 YWJsZSBhY3Jvc3MgdGVzdCBydW5uZXJzICh3aGljaCBtYXkgcnVuIHVuZGVyCistLSBkaWZmZXJl bnQgcm9sZSBuYW1lcykuCistLQorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKK1NFVCBz ZWFyY2hfcGF0aCA9IHBndGJsX2RkbF90ZXN0OworCistLSBCYXNpYyB0YWJsZSB3aXRoIFBSSU1B UlkgS0VZLCBOT1QgTlVMTCwgREVGQVVMVCwgQ09MTEFURS4KK0NSRUFURSBUQUJMRSBiYXNpYyAo CisgICAgaWQgaW50IFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdGV4dCBOT1QgTlVMTCBERUZBVUxU ICdhbm9uJyBDT0xMQVRFICJDIgorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn YmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIElkZW50aXR5IGNvbHVt bnMgKHdpdGggZGVmYXVsdCBhbmQgY3VzdG9tIHNlcXVlbmNlIG9wdGlvbnMpLgorQ1JFQVRFIFRB QkxFIGlkX2NvbHMgKAorICAgIGlkX2Fsd2F5cyBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVO VElUWSwKKyAgICBpZF9kZWZhdWx0IGludCBHRU5FUkFURUQgQlkgREVGQVVMVCBBUyBJREVOVElU WQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY29scyc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRFIFRBQkxFIGlkX2N1c3RvbSAoCisgICAgdiBp bnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSAoCisgICAgICAgIFNFUVVFTkNFIE5BTUUg aWRfY3VzdG9tX3Zfc2VxCisgICAgICAgIFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1Cisg ICAgICAgIE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAKKyAgICAgICAgQ0FDSEUgMTAgQ1lDTEUK KyAgICApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jdXN0b20nOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIEdlbmVyYXRlZCBzdG9yZWQgY29sdW1u LgorQ1JFQVRFIFRBQkxFIGdlbl9jb2xzICgKKyAgICBjZW50cyBpbnQsCisgICAgZG9sbGFycyBu dW1lcmljIEdFTkVSQVRFRCBBTFdBWVMgQVMgKGNlbnRzIC8gMTAwLjApIFNUT1JFRAorKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZ2VuX2NvbHMnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJyk7CisKKy0tIFNUT1JBR0UgYW5kIENPTVBSRVNTSU9OIChvbmx5IGVtaXR0ZWQg d2hlbiBub24tZGVmYXVsdCBmb3IgdGhlIHR5cGUpLgorQ1JFQVRFIFRBQkxFIHN0b3JhZ2VfY29s cyAoCisgICAgYSB0ZXh0IFNUT1JBR0UgRVhURVJOQUwsCisgICAgYiB0ZXh0IFNUT1JBR0UgTUFJ TiwKKyAgICBjIHRleHQgQ09NUFJFU1NJT04gcGdsegorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnc3RvcmFnZV9jb2xzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOwor CistLSBDb25zdHJhaW50czogQ0hFQ0ssIFVOSVFVRSwgRk9SRUlHTiBLRVkgKERFRkVSUkFCTEUp LgorQ1JFQVRFIFRBQkxFIHJlZmQgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUg Y29ucyAoCisgICAgYSBpbnQgQ0hFQ0sgKGEgPiAwKSwKKyAgICBiIGludCBVTklRVUUsCisgICAg YyBpbnQgUkVGRVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRAor KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnKTsKKworLS0gSW5kZXhlczogZnVuY3Rpb25hbCBhbmQgcGFydGlhbC4gIENv bnN0cmFpbnQtYmFja2luZyBpbmRleGVzIGFyZQorLS0gc3VwcHJlc3NlZCAodGhleSBhcmUgZW1p dHRlZCBieSB0aGUgY29uc3RyYWludCBsb29wKS4KK0NSRUFURSBUQUJMRSBpZHhkIChpZCBpbnQg UFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7CitDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBpZHhk IChsb3dlcihuYW1lKSk7CitDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIGlkeGQgKGlkKSBX SEVSRSBpZCA+IDEwMDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gSW5oZXJpdGFuY2UsIGluY2x1ZGluZyBh IGNoaWxkIERFRkFVTFQgb3ZlcnJpZGUgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4KK0NSRUFURSBU QUJMRSBwYXIgKGEgaW50IERFRkFVTFQgMSwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSBjaCAoYyBp bnQpIElOSEVSSVRTIChwYXIpOworQUxURVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VUIERF RkFVTFQgOTk5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gUGVyLWNvbHVtbiBhdHRvcHRpb25zOiBlbWl0dGVk IGFzIEFMVEVSIENPTFVNTiBTRVQgKC4uLikuCitDUkVBVEUgVEFCTEUgYXR0b3B0IChhIGludCwg YiB0ZXh0KTsKK0FMVEVSIFRBQkxFIGF0dG9wdCBBTFRFUiBDT0xVTU4gYSBTRVQgKG5fZGlzdGlu Y3QgPSAxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdhdHRvcHQnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIFBhcnRpdGlvbmVkIHRhYmxlIHBhcmVudCAo UkFOR0UgYW5kIEhBU0gpLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZSAoaWQgaW50LCBrIGlu dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3BhcnRlZF9yYW5nZSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRF IFRBQkxFIHBhcnRlZF9oYXNoIChpZCBpbnQpIFBBUlRJVElPTiBCWSBIQVNIIChpZCk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9oYXNoJzo6cmVnY2xhc3MsICdvd25l cicsICdmYWxzZScpOworCistLSBQYXJ0aXRpb24gY2hpbGRyZW46IEZST00vVE8sIFdJVEggKG1v ZHVsdXMsIHJlbWFpbmRlciksIERFRkFVTFQuCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlXzEg UEFSVElUSU9OIE9GIHBhcnRlZF9yYW5nZQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEw MCk7CitBTFRFUiBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVM VCA3OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9oYXNoXzAg UEFSVElUSU9OIE9GIHBhcnRlZF9oYXNoCisgICAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIs IHJlbWFpbmRlciAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hh c2hfMCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRFIFRBQkxFIHBhcnRl ZF9yYW5nZV9kZWYgUEFSVElUSU9OIE9GIHBhcnRlZF9yYW5nZSBERUZBVUxUOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfZGVmJzo6cmVnY2xhc3MsICdvd25l cicsICdmYWxzZScpOworCistLSBSdWxlcy4KK0NSRUFURSBUQUJMRSBydCAoaWQgaW50KTsKK0NS RUFURSBUQUJMRSBydF9sb2cgKGlkIGludCk7CitDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFT IE9OIElOU0VSVCBUTyBydAorICAgIERPIEFMU08gSU5TRVJUIElOVE8gcnRfbG9nIFZBTFVFUyAo TkVXLmlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIEV4dGVuZGVkIHN0YXRpc3RpY3MuCitDUkVBVEUgVEFC TEUgc3R4IChhIGludCwgYiBpbnQsIGMgaW50KTsKK0NSRUFURSBTVEFUSVNUSUNTIHN0eF9uZHYg KG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0eDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnc3R4Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBSb3ctbGV2ZWwg c2VjdXJpdHkgdG9nZ2xlcy4KK0NSRUFURSBUQUJMRSBybHMgKGlkIGludCk7CitBTFRFUiBUQUJM RSBybHMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKK0FMVEVSIFRBQkxFIHJscyBGT1JDRSBS T1cgTEVWRUwgU0VDVVJJVFk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gUkVQTElDQSBJREVOVElUWTogZW1p dHRlZCBvbmx5IHdoZW4gbm90IHRoZSBkZWZhdWx0LgorQ1JFQVRFIFRBQkxFIHJpX2Z1bGwgKGEg aW50KTsKK0FMVEVSIFRBQkxFIHJpX2Z1bGwgUkVQTElDQSBJREVOVElUWSBGVUxMOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworCitDUkVBVEUgVEFCTEUgcmlfaWR4IChhIGludCBOT1QgTlVMTCk7CitDUkVBVEUg VU5JUVVFIElOREVYIHJpX2lkeF9hIE9OIHJpX2lkeCAoYSk7CitBTFRFUiBUQUJMRSByaV9pZHgg UkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9pZHhfYTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgncmlfaWR4Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCist LSBVTkxPR0dFRCArIHJlbG9wdGlvbnMuCitDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdW5vIChpZCBp bnQpIFdJVEggKGZpbGxmYWN0b3IgPSA3MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3Vubyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gVHlwZWQgdGFibGUg KENSRUFURSBUQUJMRSBPRiB0eXBlX25hbWUpLiAgQ29sdW1ucyBpbmhlcml0ZWQgZnJvbSB0aGUK Ky0tIHR5cGUgZW1pdCBub3RoaW5nOyBsb2NhbGx5LWFwcGxpZWQgREVGQVVMVCwgTk9UIE5VTEwg YW5kIENIRUNLIGNvbWUKKy0tIG91dCB0aHJvdWdoIGEgc2luZ2xlICIoY29sIFdJVEggT1BUSU9O UyAuLi4pIiBsaXN0LgorQ1JFQVRFIFRZUEUgdHlwZWRfdCBBUyAoYSBpbnQsIGIgdGV4dCk7CitD UkVBVEUgVEFCTEUgdHlwZWRfcGxhaW4gT0YgdHlwZWRfdDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgndHlwZWRfcGxhaW4nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisK K0NSRUFURSBUQUJMRSB0eXBlZF9vdmVyIE9GIHR5cGVkX3QgKAorICAgIGEgV0lUSCBPUFRJT05T IERFRkFVTFQgNyBOT1QgTlVMTCwKKyAgICBiIFdJVEggT1BUSU9OUyBOT1QgTlVMTCwKKyAgICBD T05TVFJBSU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKGxlbmd0aChiKSA+IDApCispOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9vdmVyJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworCistLSBUZW1wb3JhcnkgdGFibGVzICsgT04gQ09NTUlULiAgVGVtcCB0YWJsZXMg bGl2ZSBpbiBhIHNlc3Npb24tbG9jYWwKKy0tIG5hbWVzcGFjZSB3aG9zZSBuYW1lIHZhcmllcyBi ZXR3ZWVuIHJ1bnMsIHNvIHdlIHN0cmlwIHRoZSBzY2hlbWEKKy0tIHByZWZpeC4gIE9OIENPTU1J VCBEUk9QIG9ubHkgZmlyZXMgYXQgY29tbWl0LCBzbyB0aGUgcXVlcmllcyB0aGF0CistLSBuZWVk IHRvIHNlZSB0aGUgY2F0YWxvZyBlbnRyeSBtdXN0IHJ1biBpbiB0aGUgc2FtZSB0cmFuc2FjdGlv biBhcworLS0gdGhlIENSRUFURS4KK0JFR0lOOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWZh dWx0IChpZCBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWxldGUgKGlkIGludCkgT04g Q09NTUlUIERFTEVURSBST1dTOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnQp IE9OIENPTU1JVCBEUk9QOworCitTRUxFQ1QgcmVnZXhwX3JlcGxhY2UobGluZSwgJyI/cGdfdGVt cF8/WzAtOV0rIj9cLicsICdwZ190ZW1wLicpIEFTIGxpbmUKK0ZST00gcGdfZ2V0X3RhYmxlX2Rk bCgndGVtcF9kZWZhdWx0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dI RVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworCitTRUxFQ1QgcmVnZXhwX3JlcGxhY2UobGluZSwg JyI/cGdfdGVtcF8/WzAtOV0rIj9cLicsICdwZ190ZW1wLicpIEFTIGxpbmUKK0ZST00gcGdfZ2V0 X3RhYmxlX2RkbCgndGVtcF9kZWxldGUnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJykgQVMg bGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVBVEUgJSc7CisKK1NFTEVDVCByZWdleHBfcmVwbGFj ZShsaW5lLCAnIj9wZ190ZW1wXz9bMC05XSsiP1wuJywgJ3BnX3RlbXAuJykgQVMgbGluZQorRlJP TSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2Ryb3AnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl JykgQVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVBVEUgJSc7CitST0xMQkFDSzsKKworLS0g UHJldHR5IG1vZGUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScsICdwcmV0dHknLCAndHJ1ZScpOworCistLSBpbmNsdWRl c18qIGdhdGluZzogZWFjaCBzdWItb2JqZWN0IGNhdGVnb3J5IGNhbiBiZSBzdXBwcmVzc2VkIGlu ZGl2aWR1YWxseS4KKy0tIGluY2x1ZGVzX2luZGV4ZXM9ZmFsc2UgaGlkZXMgdGhlIENSRUFURSBJ TkRFWCBzdGF0ZW1lbnRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2luY2x1ZGVzX2luZGV4ZXMnLCAnZmFsc2UnKTsKKworLS0gaW5jbHVkZXNfY29uc3RyYWlu dHM9ZmFsc2UgaGlkZXMgYm90aCBpbmxpbmUgQ0hFQ0sgaW4gQ1JFQVRFIFRBQkxFIGFuZAorLS0g dGhlIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBsaW5lcy4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlc19jb25zdHJhaW50cycsICdmYWxz ZScpOworCistLSBpbmNsdWRlc19ydWxlcz1mYWxzZSBoaWRlcyB0aGUgQ1JFQVRFIFJVTEUuCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzX3J1bGVzJywg J2ZhbHNlJyk7CisKKy0tIGluY2x1ZGVzX3N0YXRpc3RpY3M9ZmFsc2UgaGlkZXMgdGhlIENSRUFU RSBTVEFUSVNUSUNTLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn aW5jbHVkZXNfc3RhdGlzdGljcycsICdmYWxzZScpOworCistLSBpbmNsdWRlc19ybHM9ZmFsc2Ug aGlkZXMgdGhlIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkgdG9nZ2xlcy4KK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmxzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzX3JscycsICdmYWxz ZScpOworCistLSBpbmNsdWRlc19yZXBsaWNhX2lkZW50aXR5PWZhbHNlIGhpZGVzIHRoZSBSRVBM SUNBIElERU5USVRZIGNsYXVzZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlf ZnVsbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdpbmNsdWRlc19yZXBsaWNhX2lkZW50aXR5JywgJ2ZhbHNlJyk7CisKKy0tIGlu Y2x1ZGVzX3BhcnRpdGlvbjogZGVmYXVsdCBpcyBmYWxzZSwgc28gdGhlIHBhcnRpdGlvbmVkLXRh YmxlIHBhcmVudAorLS0gRERMIG9uIGl0cyBvd24gZG9lcyBub3QgaW5jbHVkZSBpdHMgY2hpbGRy ZW4uICBTZXR0aW5nIGl0IHRvIHRydWUKKy0tIGFwcGVuZHMgdGhlIGNoaWxkcmVuJ3MgRERMIGFm dGVyIHRoZSBwYXJlbnQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9y YW5nZSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdpbmNsdWRlc19wYXJ0aXRpb24nLCAndHJ1ZScpOworCistLSBzY2hlbWFfcXVh bGlmaWVkPWZhbHNlIHN0cmlwcyB0aGUgc2NoZW1hIGZyb20gdGhlIHRhcmdldCB0YWJsZSBpdHNl bGYKKy0tIGFuZCBmcm9tIHNhbWUtc2NoZW1hIHNpYmxpbmcgcmVmZXJlbmNlcyAoaW5oZXJpdGFu Y2UvcGFydGl0aW9uCistLSBwYXJlbnRzLCBpZGVudGl0eSBzZXF1ZW5jZXMgaW4gdGhlIHNhbWUg c2NoZW1hKSwgd2hpbGUgY3Jvc3Mtc2NoZW1hCistLSByZWZlcmVuY2VzIGFyZSBrZXB0IHF1YWxp ZmllZCBmb3IgY29ycmVjdG5lc3MuCistLQorLS0gQmFyZSBDUkVBVEUgVEFCTEUgZm9yIGFuIG9y ZGluYXJ5IHRhYmxlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisKKy0tIElOSEVSSVRTIHBhcmVudCBpbiB0 aGUgc2FtZSBzY2hlbWEgaXMgZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworCist LSBQYXJ0aXRpb24gcGFyZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlm aWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisKKy0tIENyb3NzLXNjaGVtYSBGSyB0YXJn ZXQga2VlcHMgcXVhbGlmaWNhdGlvbi4gIFRoZSAncmVmZCcgdGFibGUgaXMgaW4KKy0tIHBndGJs X2RkbF90ZXN0OyBwbGFjZSBhbiBGSyB0YXJnZXQgaW4gYSBkaWZmZXJlbnQgc2NoZW1hIGFuZCB2 ZXJpZnkgaXQKKy0tIHN0YXlzIHF1YWxpZmllZCBldmVuIHdpdGggc2NoZW1hX3F1YWxpZmllZD1m YWxzZS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX290aGVyOworQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF9vdGhlci5wYXJlbnQgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgeHNj aGVtYV9mayAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICBwaWQgaW50IFJFRkVSRU5D RVMgcGd0YmxfZGRsX290aGVyLnBhcmVudAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgneHNjaGVtYV9mayc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisKKy0t IElkZW50aXR5IGNvbHVtbiB3aXRoIGEgY3VzdG9tIHNlcXVlbmNlIG5hbWUgaW4gdGhlIHNhbWUg c2NoZW1hIGlzCistLSBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdpZF9jdXN0b20nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOwor CistLSBSb3VuZC10cmlwOiB3aXRoIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UsIGFmdGVyIFNFVCBz ZWFyY2hfcGF0aCB0aGUKKy0tIERETCBjYW4gYmUgcmVwbGF5ZWQgaW50byBhIGRpZmZlcmVudCB0 YXJnZXQgc2NoZW1hLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcmVwbGF5OworRE8gJCQKK0RF Q0xBUkUKKyAgICBzdG10IHRleHQ7CitCRUdJTgorICAgIFNFVCBMT0NBTCBzZWFyY2hfcGF0aCA9 IHBndGJsX2RkbF9yZXBsYXk7CisgICAgRk9SIHN0bXQgSU4KKyAgICAgICAgU0VMRUNUIGxpbmUg RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfdGVzdC5iYXNpYyc6OnJlZ2NsYXNzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNl JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVh bGlmaWVkJywgJ2ZhbHNlJykgQVMgbGluZQorICAgIExPT1AKKyAgICAgICAgRVhFQ1VURSBzdG10 OworICAgIEVORCBMT09QOworRU5EICQkOworU0VMRUNUIHJlbG5hbWVzcGFjZTo6cmVnbmFtZXNw YWNlOjp0ZXh0LCByZWxuYW1lCitGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9ICdwZ3RibF9kZGxf cmVwbGF5LmJhc2ljJzo6cmVnY2xhc3M7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcmVwbGF5IENB U0NBREU7CitEUk9QIFRBQkxFIHhzY2hlbWFfZms7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfb3Ro ZXIgQ0FTQ0FERTsKKworLS0gTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBvbiBhIHBhcnRpdGlvbiBj aGlsZCBoYXMgbm8gaW5saW5lIGNvbHVtbgorLS0gbGlzdCB0byBsaXZlIGluIChQQVJUSVRJT04g T0YgZm9ybSksIHNvIGl0IG11c3QgY29tZSBvdXQgYXMgYQorLS0gc2VwYXJhdGUgQUxURVIgVEFC TEUgLi4uIEFERCBDT05TVFJBSU5UIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hr IChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxF IHBhcnRlZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9GIHBhcnRlZF9jaGsKKyAgICAoQ09OU1RSQUlO VCBjaGtfaW5saW5lIENIRUNLICh2YWwgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRP ICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfY2hrX2NoaWxk Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworRFJPUCBUQUJMRSBwYXJ0ZWRfY2hrOwor CistLSBJbmhlcml0YW5jZSBjaGlsZHJlbiBvZiBhIHBhcmVudCB3aXRoIGEgZ2VuZXJhdGVkIGNv bHVtbiBzaG91bGQgbm90CistLSBlbWl0IGFuIEFMVEVSIENPTFVNTiAuLi4gU0VUIERFRkFVTFQg Zm9yIHRoZSBpbmhlcml0ZWQgZ2VuZXJhdGVkCistLSBjb2x1bW46IHRoZSBHRU5FUkFURUQgZXhw cmVzc2lvbiBjYXJyaWVzIGRvd24gdGhyb3VnaCBpbmhlcml0YW5jZSwKKy0tIGFuZCBTRVQgREVG QVVMVCB3b3VsZCBmYWlsIGF0IHJlcGxheSBhZ2FpbnN0IGEgZ2VuZXJhdGVkIGNvbHVtbi4KK0NS RUFURSBUQUJMRSBwYXJfZ2VuICgKKyAgICBpZCBpbnQsCisgICAgZyAgaW50IEdFTkVSQVRFRCBB TFdBWVMgQVMgKGlkICogMikgU1RPUkVECispOworQ1JFQVRFIFRBQkxFIGNoX2dlbiAoKSBJTkhF UklUUyAocGFyX2dlbik7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoX2dlbic6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKK0RST1AgVEFCTEUgcGFyX2dlbiBDQVNDQURF OworCistLSBVc2VyLW5hbWVkIE5PVCBOVUxMIGNvbnN0cmFpbnQgbXVzdCBiZSBlbWl0dGVkIGlu bGluZSBhcworLS0gIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgc28gYSByZXBsYXkgZG9lcyBu b3QgY29sbGlkZSB3aXRoIHRoZQorLS0gYXV0by1uYW1lZCBOT1QgTlVMTCB0aGF0IFBvc3RncmVT UUwgd291bGQgb3RoZXJ3aXNlIGNyZWF0ZSBmcm9tIGEKKy0tIHBsYWluIGlubGluZSAiTk9UIE5V TEwiLiAgVGhlIGNvbnN0cmFpbnQgbG9vcCBza2lwcyB0aGUgdXNlci1uYW1lZAorLS0gZW50cnkg dG8gYXZvaWQgZG91YmxlLWVtaXNzaW9uLgorQ1JFQVRFIFRBQkxFIG5uX25hbWVkICgKKyAgICBh IGludCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMLAorICAgIGIgaW50IE5PVCBOVUxMCispOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9uYW1lZCc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnKTsKK0RST1AgVEFCTEUgbm5fbmFtZWQ7CisKKy0tIExvY2FsbHktZGVjbGFy ZWQgTk9UIE5VTEwgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4gIFRoZSBjb2x1bW4gaXRzZWxmCist LSBpcyBvbWl0dGVkIGZyb20gdGhlIGNoaWxkJ3MgY29sdW1uIGxpc3QgKGF0dGlzbG9jYWw9ZmFs c2UpLCBzbyB0aGUKKy0tIHVzZXItbmFtZWQgTk9UIE5VTEwgbXVzdCBjb21lIG91dCB2aWEgdGhl IHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQKKy0tIGxvb3AgcmF0aGVyIHRoYW4gaW5saW5lLgorQ1JF QVRFIFRBQkxFIG5uX3BhciAoYSBpbnQpOworQ1JFQVRFIFRBQkxFIG5uX2NoIChiIGludCkgSU5I RVJJVFMgKG5uX3Bhcik7CitBTFRFUiBUQUJMRSBubl9jaCBBREQgQ09OU1RSQUlOVCBteV9ubiBO T1QgTlVMTCBhOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9jaCc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnKTsKK0RST1AgVEFCTEUgbm5fcGFyIENBU0NBREU7CisKKy0t IHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBkcm9wIHRoZSBzY2hlbWEgcHJlZml4IGZyb20g REVGQVVMVAorLS0gZXhwcmVzc2lvbnMgYW5kIGlubGluZSBDSEVDSyBib2RpZXMgdGhhdCByZWZl cmVuY2Ugc2FtZS1zY2hlbWEKKy0tIG9iamVjdHMgKHNlcXVlbmNlIHZpYSBuZXh0dmFsLCBmdW5j dGlvbiB2aWEgZGlyZWN0IGNhbGwpLiAgVGhpcworLS0gcmVsaWVzIG9uIHRoZSBkZXBhcnNlciBy ZXNwZWN0aW5nIHRoZSBuYXJyb3dlZCBzZWFyY2hfcGF0aCByYXRoZXIKKy0tIHRoYW4gb24gc3Vi c3RyaW5nIHN0cmlwcGluZy4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3hyZWY7CitDUkVBVEUg U0VRVUVOQ0UgcGd0YmxfZGRsX3hyZWYubXlzZXE7CitDUkVBVEUgRlVOQ1RJT04gcGd0YmxfZGRs X3hyZWYuZihpbnQpIFJFVFVSTlMgaW50IExBTkdVQUdFIHNxbCBJTU1VVEFCTEUKKyAgICBBUyAn U0VMRUNUICQxJzsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfeHJlZi50ICgKKyAgICBpZCAgaW50 IERFRkFVTFQgbmV4dHZhbCgncGd0YmxfZGRsX3hyZWYubXlzZXEnKSwKKyAgICB2YWwgaW50LAor ICAgIENPTlNUUkFJTlQgY2hrIENIRUNLIChwZ3RibF9kZGxfeHJlZi5mKHZhbCkgPiAwKQorKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3hyZWYudCc6OnJlZ2Ns YXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2Un KTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF94cmVmIENBU0NBREU7CisKKy0tIHNjaGVtYV9xdWFs aWZpZWQ9ZmFsc2UgbXVzdCBOT1QgY29ycnVwdCBzdHJpbmcgbGl0ZXJhbHMgd2hvc2UKKy0tIGNv bnRlbnRzIGhhcHBlbiB0byBjb250YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRv dC4gIFRoZQorLS0gaW4tc3RyaW5nIHN0YXRlIG9mIHRoZSBwcmVmaXggc3RyaXBwZXIgcHJlc2Vy dmVzIHRoZW0gdmVyYmF0aW0uCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9zdHI7CitDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3N0ci5wIChpZCBpbnQsIG5vdGUgdGV4dCkgUEFSVElUSU9OIEJZIFJB TkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3N0ci5wYyBQQVJUSVRJT04gT0YgcGd0 YmxfZGRsX3N0ci5wCisgICAgKENPTlNUUkFJTlQgY2hrIENIRUNLIChub3RlIDw+ICdwZ3RibF9k ZGxfc3RyLnNlY3JldCcpKQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9zdHIucGMnOjpyZWdjbGFzcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CitE Uk9QIFNDSEVNQSBwZ3RibF9kZGxfc3RyIENBU0NBREU7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9 ZmFsc2UgbXVzdCBOT1QgY29ycnVwdCBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzCistLSB3aG9z ZSBjb250ZW50cyBoYXBwZW4gdG8gY29udGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkg YSBkb3QKKy0tIChmb3IgZXhhbXBsZSBhIGNvbHVtbiBsaXRlcmFsbHkgbmFtZWQgIjxzY2hlbWE+ LndlaXJkIiBpbnNpZGUgdGhhdAorLS0gc2NoZW1hKS4gIFRoZSBpbi1pZGVudCBzdGF0ZSBvZiB0 aGUgcHJlZml4IHN0cmlwcGVyIHByZXNlcnZlcyB0aGVtCistLSB2ZXJiYXRpbS4KK0NSRUFURSBT Q0hFTUEgcGd0YmxfZGRsX3FpZDsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcWlkLnAgKGlkIGlu dCwgInBndGJsX2RkbF9xaWQud2VpcmQiIGludCkKKyAgICBQQVJUSVRJT04gQlkgUkFOR0UgKGlk KTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcWlkLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxf cWlkLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKCJwZ3RibF9kZGxfcWlkLndlaXJkIiA+ IDApKQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9xaWQucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CitEUk9QIFNDSEVNQSBw Z3RibF9kZGxfcWlkIENBU0NBREU7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugd2hlbiB0 aGUgYmFzZSBzY2hlbWEgbmFtZSBpdHNlbGYgcmVxdWlyZXMKKy0tIHF1b3RpbmcgKGl0cyBwcmVm aXggc3RhcnRzIHdpdGggIikuICBCb3RoIGZvcm1zIG9mIHRoZSBwcmVmaXggLQorLS0gYmFyZS1s b3dlcmNhc2UgYW5kIHF1b3RlZCAtIG11c3QgYmUgc3RyaXBwZWQgZnJvbSBvdXRlcgorLS0gQUxU RVIgVEFCTEUgLyBPTiAvIENSRUFURSBJTkRFWCBwcmVmaXhlcywgd2hpbGUgaW5uZXIgcXVvdGVk CistLSBpZGVudGlmaWVycyB0aGF0IGhhcHBlbiB0byBiZWdpbiB0aGUgc2FtZSB3YXkgbXVzdCBi ZSBwcmVzZXJ2ZWQuCitDUkVBVEUgU0NIRU1BICJQZ1RibC1EZGwtUSI7CitDUkVBVEUgVEFCTEUg IlBnVGJsLURkbC1RIi4iVCIgKGlkIGludCwgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBD SEVDSyAodmFsID4gMCkpOworQ1JFQVRFIElOREVYICJUX3ZhbF9pZHgiIE9OICJQZ1RibC1EZGwt USIuIlQiICh2YWwpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCciUGdUYmwtRGRs LVEiLiJUIic6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25l cicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFs aWZpZWQnLCAnZmFsc2UnKTsKK0RST1AgU0NIRU1BICJQZ1RibC1EZGwtUSIgQ0FTQ0FERTsKKwor LS0gRXJyb3I6IG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZS4KK0NSRUFURSBW SUVXIHYgQVMgU0VMRUNUIDEgQVMgeDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn dic6OnJlZ2NsYXNzKTsKKworQ1JFQVRFIFNFUVVFTkNFIHM7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3MnOjpyZWdjbGFzcyk7CisKKy0tIE5VTEwgYXJndW1lbnQgcmV0dXJucyBu byByb3dzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKE5VTEwpOworCistLSBVbnJl Y29nbml6ZWQgb3B0aW9uLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6 OnJlZ2NsYXNzLCAnYm9ndXMnLCAndHJ1ZScpOworCistLSBPZGQgbnVtYmVyIG9mIHZhcmlhZGlj IGFyZ3MuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3Ms ICdwcmV0dHknKTsKKworLS0gUm91bmQtdHJpcCB2ZXJpZmljYXRpb24uICBGb3IgZXZlcnkgdGVz dCB0YWJsZSwgY2FwdHVyZSB0aGUgRERMIHRoZQorLS0gZnVuY3Rpb24gZW1pdHMsIGRyb3AgdGhl IHNjaGVtYSwgcmVwbGF5IGVhY2ggdGFibGUncyBEREwgaW4KKy0tIGRlcGVuZGVuY3kgb3JkZXIs IGFuZCBjb25maXJtIHRoYXQgcGdfZ2V0X3RhYmxlX2RkbCBvbiB0aGUgcmVjcmVhdGVkCistLSBy ZWxhdGlvbiBtYXRjaGVzIHRoZSBvcmlnaW5hbCBsaW5lLWZvci1saW5lLiAgVGhlIGZpbmFsIFNF TEVDVCBtdXN0CistLSByZXR1cm4gemVybyByb3dzLgorQ1JFQVRFIFRFTVAgVEFCTEUgcGd0Ymxf ZGRsX3J0X29yaWcgKG5hbWUgdGV4dCwgb3JkIGludCwgbGluZSB0ZXh0KTsKK0lOU0VSVCBJTlRP IHBndGJsX2RkbF9ydF9vcmlnCitTRUxFQ1QgdC5uYW1lLCBvLm9yZCwgby5saW5lCitGUk9NIChW QUxVRVMKKyAgICAgICAgKCdiYXNpYycpLCAoJ2lkX2NvbHMnKSwgKCdpZF9jdXN0b20nKSwgKCdn ZW5fY29scycpLCAoJ3N0b3JhZ2VfY29scycpLAorICAgICAgICAoJ3JlZmQnKSwgKCdjb25zJyks ICgnaWR4ZCcpLAorICAgICAgICAoJ3BhcicpLCAoJ2NoJyksICgnYXR0b3B0JyksCisgICAgICAg ICgncGFydGVkX3JhbmdlJyksICgncGFydGVkX3JhbmdlXzEnKSwgKCdwYXJ0ZWRfcmFuZ2VfZGVm JyksCisgICAgICAgICgncGFydGVkX2hhc2gnKSwgKCdwYXJ0ZWRfaGFzaF8wJyksCisgICAgICAg ICgncnRfbG9nJyksICgncnQnKSwKKyAgICAgICAgKCdzdHgnKSwgKCdybHMnKSwgKCdyaV9mdWxs JyksICgncmlfaWR4JyksICgndW5vJykKKyAgICAgKSBBUyB0KG5hbWUpLAorICAgICBMQVRFUkFM IHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJlZ2NsYXNz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJykgV0lUSCBP UkRJTkFMSVRZIG8obGluZSwgb3JkKTsKKworRE8gJCQKK0RFQ0xBUkUKKyAgICB0YWJsZXMgQ09O U1RBTlQgdGV4dFtdIDo9IEFSUkFZWworICAgICAgICAnYmFzaWMnLCAnaWRfY29scycsICdpZF9j dXN0b20nLCAnZ2VuX2NvbHMnLCAnc3RvcmFnZV9jb2xzJywKKyAgICAgICAgJ3JlZmQnLCAnY29u cycsICdpZHhkJywKKyAgICAgICAgJ3BhcicsICdjaCcsICdhdHRvcHQnLAorICAgICAgICAncGFy dGVkX3JhbmdlJywgJ3BhcnRlZF9yYW5nZV8xJywgJ3BhcnRlZF9yYW5nZV9kZWYnLAorICAgICAg ICAncGFydGVkX2hhc2gnLCAncGFydGVkX2hhc2hfMCcsCisgICAgICAgICdydF9sb2cnLCAncnQn LAorICAgICAgICAnc3R4JywgJ3JscycsICdyaV9mdWxsJywgJ3JpX2lkeCcsICd1bm8nCisgICAg XTsKKyAgICB0IHRleHQ7CisgICAgc3RtdCB0ZXh0OworQkVHSU4KKyAgICBEUk9QIFNDSEVNQSBw Z3RibF9kZGxfdGVzdCBDQVNDQURFOworICAgIENSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3Q7 CisgICAgRk9SRUFDSCB0IElOIEFSUkFZIHRhYmxlcyBMT09QCisgICAgICAgIEZPUiBzdG10IElO CisgICAgICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnIFdIRVJFIG5h bWUgPSB0IE9SREVSIEJZIG9yZAorICAgICAgICBMT09QCisgICAgICAgICAgICBFWEVDVVRFIHN0 bXQ7CisgICAgICAgIEVORCBMT09QOworICAgIEVORCBMT09QOworRU5EICQkOworCitXSVRIIGFm dGVyX2RkbCBBUyAoCisgICAgU0VMRUNUIHQubmFtZSwgby5vcmQsIG8ubGluZQorICAgIEZST00g KFNFTEVDVCBESVNUSU5DVCBuYW1lIEZST00gcGd0YmxfZGRsX3J0X29yaWcpIEFTIHQsCisgICAg ICAgICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFt ZSk6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lcics ICdmYWxzZScpIFdJVEggT1JESU5BTElUWSBvKGxpbmUsIG9yZCkKKykKKyhTRUxFQ1QgJ21pc3Np bmctaW4tY29weScgQVMga2luZCwgbmFtZSwgb3JkLCBsaW5lIEZST00gcGd0YmxfZGRsX3J0X29y aWcKKyBFWENFUFQKKyBTRUxFQ1QgJ21pc3NpbmctaW4tY29weScsIG5hbWUsIG9yZCwgbGluZSBG Uk9NIGFmdGVyX2RkbCkKK1VOSU9OIEFMTAorKFNFTEVDVCAnZXh0cmEtaW4tY29weScgQVMga2lu ZCwgbmFtZSwgb3JkLCBsaW5lIEZST00gYWZ0ZXJfZGRsCisgRVhDRVBUCisgU0VMRUNUICdleHRy YS1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZST00gcGd0YmxfZGRsX3J0X29yaWcpCitPUkRF UiBCWSBraW5kLCBuYW1lLCBvcmQ7CisKKy0tIENsZWFudXAuCitEUk9QIFNDSEVNQSBwZ3RibF9k ZGxfdGVzdCBDQVNDQURFOwotLSAKMi41MS4wCgo= --0000000000005f3c45065446fca8--