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 1whQtW-000Dem-1n for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 11:56:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whQtU-0074v4-13 for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 11:56:49 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whQtT-0074uw-2K for pgsql-hackers@lists.postgresql.org; Wed, 08 Jul 2026 11:56:48 +0000 Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whQtQ-00000000EWW-11gH for pgsql-hackers@lists.postgresql.org; Wed, 08 Jul 2026 11:56:47 +0000 Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-6984169c126so1019447a12.1 for ; Wed, 08 Jul 2026 04:56:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783511803; cv=none; d=google.com; s=arc-20260327; b=g598Cg0vZgnqqGQCIYhEQxDIdGYIt9Rnrh5ljLq3+UNpTIpzEoB7s/cjslhKSe2MhV 60cb2p4hYNam6lFvjVYemJtnLJIfN9CENy+J3YxORF5WAOz+JIYFPdiegWeLMwDvMs5I 24es7SifKuAHokAZjwi3XHke6Wh1kvenMgSX718NY8hXp4NPS8mailjhbk+mSxkyUhHE bY6UuahWgItKk9YBJIP/v51CLLsK1cFnxtXRpVzEa0h0eqz84LEK/xSIA1YLj1I8dadj UO2eRSEM1/LmdZ5e+R2ArZfCKYIsrFsbcewVjrOPGGliClGqx9lwScCq5cQqPPWFxVGf 8exA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=ILLT+SIPEYfTDBYa/JvcI+bg2EBJ7oLUvozM0PNVdpY=; fh=wT9JNkgf/Ie3A/uSyHHnwsduDyqBd3sk5oJpsdkvvS0=; b=K7AZVer/pMn4+xxMZzpu1Y9ZZ9iArBB5ri2YnsKJjNAkgcIx7dC9aOV4cfWHb+NbS5 gkauCwj79opRJSju/42YmBjSoN/p1pkFtDh5nZva37qkOlPK7OINT9DVB+5Ad3qc5OMc 9Y+xgT5RsfSKdMALlSrEOq8495S+I7S6KUpMDoitqOCvDivDUpzSiLEwTUH/kFDmI2KP 6Kh2SggNghJ1MyybFQUolE6JwrsziAoVlTca5pfl1bgkFyT3M00dhJiUNBg6e9wZO+wI t75Rtx82rTSaqtwOcaqUh1WY8UuPnz6R2FMzd6bzlsOlTeFbyF42XZOj/Xxthncq3nQc xnXw==; 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=1783511803; x=1784116603; darn=lists.postgresql.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ILLT+SIPEYfTDBYa/JvcI+bg2EBJ7oLUvozM0PNVdpY=; b=D/L5IXF5exthFZvZaQrHpTdZLs2BrQ+v4jJYPMXz2Koc+GtJ0Q8fXD+7wF94unCchf 5415uNuwMrPu+Ft0+d3D+KtFJ2L/uEWUmgL3qOwuT1T4bZ7BZx3W4wXyXIGZ0Gd8V8Rk x7F7lxTcQOxZ2mB+o23qRh/m5yuA+/pe93R+NWz1luRNBm+VQxi3Oix+P+6LpFHxHy8+ pMQpyqe7EKpLZm9FvOUpfa1ZQabvQSxsBF+rXjwrxGk8FjS7v35IJi+BDJWEvdQKXEzJ T/SsL48zM+Z3i1cxbCvB6wDttIZ6oesNirHOhRebD33HuBhWv0Huom3qtUKkoaRVbDwD vkfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783511803; x=1784116603; h=content-type: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:content-type; bh=ILLT+SIPEYfTDBYa/JvcI+bg2EBJ7oLUvozM0PNVdpY=; b=ihJifl8HoaUkJfWD79Unzre7/8fkB5UkWFXdD/uunln4FK2NR7jUso818KSAUBaRwP pWaFsdWrnCV5K8m4xpWR67xolSuVnjfS4JweCz7MzNuAaj8+qNNWuRFoDYrLx1s0KobK JwoOtCRXlUtN4dh4+7riBuOExX7X16CIgfRGpLQwc0SZb7898iK1tw7soYGLqgbhPlhT NIDPtCGm4DpgR4w8dZzMeFU0sXY2sAgrQX9+XiREpMx21WDBW7dsOl0fYuzzOp+xtVti U4IYH5elLohJg0Hgosq5wiH808Ua0hgd7JQIR0IiN20teE6OToUeidcKttOLN5oZttTw MgIg== X-Forwarded-Encrypted: i=1; AHgh+RruGtvwtSWS5RSGe7/kgVm0OVcQn85GN1vclPp34jaHW8qYPrhdyfmllNoYpNksoQ1e3HD0T+QBFFoTPpVS@lists.postgresql.org X-Gm-Message-State: AOJu0YyA2uIGYlgdZoTENiab+mJW8Hd66asrPk+8q06L3qTH6avNrVqo gxB25/H7y7xVLMMmo8lxxfHaoDlfGDhvDAR9bJUSt1t8EZXqpyU7vcaO1oWbJjm+Cr2yv+j1x0h UF8xeK25rhc0k85XHTddgKyfSr2pW20QBUEkE+/we X-Gm-Gg: AfdE7ck3NNAXZxTAQ9ZluwB3f1JxkqrezjxG4LzbWb6u1o8I9SzoDl1RPr24Il86hcr hfnKlry3XO6XDOo7m6cgKqLJN5wZjHbnrvHtzrzr/cp5k07UVsy/K51PyIBLdHJydI9wmb7bMBd zQ7hzIOTCAf2zlcR/Q8u02qJgqE2e1BeHpeGJqvhvnpchatwGo/ba7GQNeNJfj3lr8kt5pM0Ko8 P4d7GUr/SICwitkPQXQT6ieT1fXYmYcoa9sJynQRfPYwNvDLrdy2kkuDqWEmw075VV8I8LUQg== X-Received: by 2002:a17:907:d5a0:b0:bec:64d4:3872 with SMTP id a640c23a62f3a-c15cded0c89mr90203766b.24.1783511802736; Wed, 08 Jul 2026 04:56:42 -0700 (PDT) MIME-Version: 1.0 References: <983C7B03-D9C3-4F15-8913-7616EC5E6414@gmail.com> <20260623.162104.775158751399277188.horikyota.ntt@gmail.com> In-Reply-To: From: Akshay Joshi Date: Wed, 8 Jul 2026 17:26:30 +0530 X-Gm-Features: AVVi8Ceg3yrBiDxbkwbOdwzOufegJ2oF7pnl52PMbRkM0oquXc6REOy-Z-smun0 Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: Rui Zhao Cc: Zsolt Parragi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000074c8ef06561833b6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000074c8ef06561833b6 Content-Type: multipart/alternative; boundary="00000000000074c8ed06561833b4" --00000000000074c8ed06561833b4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thank you for the thorough round-trip analysis; this caught real bugs. I have fixed several of the issues you highlighted, though a few fall outside this function's current scope. *Out of Scope (Documented in the Function Description)* Issue 1 (Serial Columns): Owned sequences are independent catalog objects. This is the same reason *pg_get_table_ddl* does not emit CREATE TYPE for composite types used in columns. While the nextval() default is correctly emitted, the sequence itself requires separate capture. I have added an explicit note to the documentation to call this out. Issue 2c (Reordered Partition Columns): You correctly noted that this scenario requires a standalone CREATE + ATTACH PARTITION fallback. Detecting column-order divergence and falling back to the non-PARTITION OF syntax is a larger architecture change, so I have deferred it to a follow-up task. I have documented this as a known limitation for now. Issue 6 (COMMENT/GRANT): These are intentionally omitted, consistent with how we handle triggers and policies. I have added them to the documented list of exclusions. The v18 patch is now ready for your review. On Tue, Jul 7, 2026 at 10:23=E2=80=AFPM Rui Zhao wro= te: > Hi Akshay, > > Re-tested v17 on current master (73dfe79fd6) -- all five issues are fixed= , > and make check passes here. > > I then ran a round-trip check against pg_dump: for each table, replay the > pg_get_table_ddl() output into a clone of the database and diff > "pg_dump -t" of both sides (both sides being pg_dump output, any survivin= g > diff is semantic, not formatting). Corpus: the create_sql scenarios from > 002_pg_dump.pl, then the whole regression database. 483 of 560 tables > round-trip identically; setting aside the documented no-output kinds > (trigger/policy), the rest reduce to: > > 1) serial columns produce non-replayable DDL -- the output references the > sequence but never creates it: > > CREATE TABLE ser (id serial, v text); > > SELECT d FROM pg_get_table_ddl('ser'::regclass, owner =3D> false) d; > -- CREATE TABLE public.ser (id integer DEFAULT > nextval('public.ser_id_seq'::regclass) NOT NULL, v text); > > CREATE TABLE public.ser (id integer DEFAULT > nextval('public.ser_id_seq'::regclass) NOT NULL, v text); > -- ERROR: relation "public.ser_id_seq" does not exist (on an > empty database) > > pg_dump emits CREATE SEQUENCE + OWNED BY + SET DEFAULT. This accounts for > 14 regression failures, including whole partition trees. > > 2) Partition/inheritance children that diverged from their parent don't > survive the PARTITION OF / INHERITS rebuild. Three variants: > > - a dropped default silently comes back: > > CREATE TABLE dp (a int DEFAULT 99) PARTITION BY LIST (a); > CREATE TABLE dp1 PARTITION OF dp FOR VALUES IN (1); > ALTER TABLE ONLY dp1 ALTER COLUMN a DROP DEFAULT; > > SELECT d FROM pg_get_table_ddl('dp'::regclass, owner =3D> false) = d; > -- CREATE TABLE public.dp (a integer DEFAULT 99) PARTITION BY > LIST (a); > -- CREATE TABLE public.dp1 PARTITION OF public.dp FOR VALUES IN > (1); > > SELECT pg_get_expr(adbin, adrelid) FROM pg_attrdef > WHERE adrelid =3D 'dp1'::regclass; > -- source: (0 rows) > -- replayed: 99 =3D> INSERTs into dp1 now get 99, not NULL > > - a child's own NOT NULL constraint name is lost: > > CREATE TABLE np (a int NOT NULL) PARTITION BY LIST (a); > CREATE TABLE np1 (a int CONSTRAINT np1_nn NOT NULL); > ALTER TABLE np ATTACH PARTITION np1 FOR VALUES IN (1); > > SELECT d FROM pg_get_table_ddl('np'::regclass, owner =3D> false) = d; > -- CREATE TABLE public.np (a integer NOT NULL) PARTITION BY LIST > (a); > -- CREATE TABLE public.np1 PARTITION OF public.np FOR VALUES IN > (1); > > SELECT conname FROM pg_constraint > WHERE conrelid =3D 'np1'::regclass AND contype =3D 'n'; > -- source: np1_nn > -- replayed: np_a_not_null > > and when the column itself is inherited, the emitted constraint > errors instead of merging: > > CREATE TABLE p5 (a int); > CREATE TABLE c5 () INHERITS (p5); > ALTER TABLE c5 ADD CONSTRAINT c5_nn NOT NULL a; > ALTER TABLE p5 ADD CONSTRAINT p5_nn NOT NULL a; > > SELECT d FROM pg_get_table_ddl('c5'::regclass, owner =3D> false) = d; > -- CREATE TABLE public.c5 () INHERITS (public.p5); > -- ALTER TABLE public.c5 ADD CONSTRAINT c5_nn NOT NULL a; > > ALTER TABLE public.c5 ADD CONSTRAINT c5_nn NOT NULL a; -- > replay, p5 recreated first > -- ERROR: cannot create not-null constraint "c5_nn" on > column "a" of table "c5" > -- DETAIL: A not-null constraint named "p5_nn" already > exists for this column. > > - a partition attached from a table with different column order is > rebuilt in the parent's order: > > CREATE TABLE p (a int, b int, c int) PARTITION BY LIST (a); > CREATE TABLE c1 (c int, b int, a int); > ALTER TABLE p ATTACH PARTITION c1 FOR VALUES IN (1); > > SELECT d FROM pg_get_table_ddl('p'::regclass, owner =3D> false) d= ; > -- CREATE TABLE public.p (a integer, b integer, c integer) > PARTITION BY LIST (a); > -- CREATE TABLE public.c1 PARTITION OF public.p FOR VALUES IN (1= ); > -- =3D> replayed c1 columns are a, b, c (source: c, b, a), so > -- SELECT * / COPY / positional INSERT all shift > > pg_dump handles all three: it emits the named constraint inline in the > child's CREATE body (the merge with the inherited constraint at CREATE > time keeps the local name, and attislocal / conislocal / coninhcount all > survive), and falls back to standalone CREATE + ATTACH PARTITION for > shapes a PARTITION OF / INHERITS clause can't express. The first two > variants have lightweight fixes that keep the PARTITION OF / INHERITS > shape -- > > CREATE TABLE c5 (CONSTRAINT c5_nn NOT NULL a) INHERITS (p5); > CREATE TABLE np1 PARTITION OF np (CONSTRAINT np1_nn NOT NULL a) > FOR VALUES IN (1); > > plus a counter-statement for the divergent-default case (ALTER TABLE > ONLY dp1 ALTER COLUMN a DROP DEFAULT). Only the reordered-column case > really needs the standalone shape. The commit message lists child-local > DEFAULT overrides and named NOT NULL constraints as supported, so I'm > treating these as bugs rather than scope cuts. > > 3) emit_typed_column_storage() (ddlutils.c:2331, 2342) emits ALTER TABLE > without ONLY; SET STORAGE / SET COMPRESSION recurse: > > CREATE TYPE mytype AS (a int, b text); > CREATE TABLE typed_t OF mytype; > ALTER TABLE typed_t ALTER COLUMN b SET STORAGE external; > CREATE TABLE tchild () INHERITS (typed_t); > ALTER TABLE ONLY tchild ALTER COLUMN b SET STORAGE main; > > ALTER TABLE public.typed_t ALTER COLUMN b SET STORAGE EXTERNAL; > -- replay v17's output > -- =3D> tchild's attstorage flips m -> e > > pg_dump uses ALTER TABLE ONLY here. (The other emitted ALTER TABLEs are > fine: OWNER / REPLICA IDENTITY / RLS / SET (options) don't recurse, and > ADD CONSTRAINT must stay ONLY-less since the dump relies on its recursion > to rebuild the children's suppressed inherited copies.) > > 4) Some per-table state pg_dump preserves is missing. Index statistics > targets: > > CREATE TABLE ist (c1 int); > CREATE INDEX ist_idx ON ist ((c1 + 1)); > ALTER INDEX ist_idx ALTER COLUMN 1 SET STATISTICS 400; > > SELECT d FROM pg_get_table_ddl('ist'::regclass, owner =3D> false) d; > -- CREATE TABLE public.ist (c1 integer); > -- CREATE INDEX ist_idx ON public.ist USING btree (((c1 + 1))); > -- no SET STATISTICS > > Same story for ALTER TABLE ... CLUSTER ON (the index comes back without > the indisclustered marker) and for ALTER TABLE ... DISABLE RULE (the rule > is emitted but comes back enabled, which changes behavior -- and rule is > a covered kind). > > 5) emit_indexes doesn't check indisvalid, so an invalid index is emitted > as a normal one: > > CREATE TABLE inv (x int); > INSERT INTO inv VALUES (1), (1); > CREATE UNIQUE INDEX CONCURRENTLY inv_uidx ON inv (x); > -- ERROR: could not create unique index "inv_uidx" (leaves > indisvalid =3D false) > > SELECT d FROM pg_get_table_ddl('inv'::regclass, owner =3D> false) d; > -- CREATE TABLE public.inv (x integer); > -- CREATE UNIQUE INDEX inv_uidx ON public.inv USING btree (x); > > pg_dump skips those (getIndexes: "i.indisvalid OR t2.relkind =3D 'p'"). > > 6) Minor: COMMENT ON and GRANT/REVOKE are not emitted. If that's > intentional -- like trigger/policy -- worth saying so in the doc. > > Thanks, > Rui > --00000000000074c8ed06561833b4 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thank y= ou for the thorough round-trip analysis; this caught real bugs. I have fixe= d several of the issues you highlighted, though a few fall outside this fun= ction's current scope.

Out of Scope (Documented in the Functi= on Description)

Issue 1 (Serial Columns): Owned sequences are indepe= ndent catalog objects. This is the same reason pg_get_table_ddl does= not emit CREATE TYPE for composite types used in columns. While the nextva= l() default is correctly emitted, the sequence itself requires separate cap= ture. I have added an explicit note to the documentation to call this out.<= br>
Issue 2c (Reordered Partition Columns): You correctly noted that thi= s scenario requires a standalone CREATE + ATTACH PARTITION fallback. Detect= ing column-order divergence and falling back to the non-PARTITION OF syntax= is a larger architecture change, so I have deferred it to a follow-up task= . I have documented this as a known limitation for now.

Issue 6 (COM= MENT/GRANT): These are intentionally omitted, consistent with how we handle= triggers and policies. I have added them to the documented list of exclusi= ons.

The v18=C2=A0patch= is now ready for your review.

On Tue, Jul 7, 2026 at 10:23=E2= =80=AFPM Rui Zhao <zhaorui126@gmail.com> wrote:
Hi Akshay,

Re-tested v17 on current master (73dfe79fd6) -- all five issues are fixed,<= br> and make check passes here.

I then ran a round-trip check against pg_dump: for each table, replay the pg_get_table_ddl() output into a clone of the database and diff
"pg_dump -t" of both sides (both sides being pg_dump output, any = surviving
diff is semantic, not formatting). Corpus: the create_sql scenarios from 002_= pg_dump.pl, then the whole regression database. 483 of 560 tables
round-trip identically; setting aside the documented no-output kinds
(trigger/policy), the rest reduce to:

1) serial columns produce non-replayable DDL -- the output references the sequence but never creates it:

=C2=A0 =C2=A0 CREATE TABLE ser (id serial, v text);

=C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('ser'::regclass, owner= =3D> false) d;
=C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.ser (id integer DEFAULT
nextval('public.ser_id_seq'::regclass) NOT NULL, v text);

=C2=A0 =C2=A0 CREATE TABLE public.ser (id integer DEFAULT
nextval('public.ser_id_seq'::regclass) NOT NULL, v text);
=C2=A0 =C2=A0 --=C2=A0 ERROR:=C2=A0 relation "public.ser_id_seq" = does not exist=C2=A0 =C2=A0 (on an
empty database)

pg_dump emits CREATE SEQUENCE + OWNED BY + SET DEFAULT. This accounts for 14 regression failures, including whole partition trees.

2) Partition/inheritance children that diverged from their parent don't=
survive the PARTITION OF / INHERITS rebuild. Three variants:

=C2=A0 - a dropped default silently comes back:

=C2=A0 =C2=A0 =C2=A0 =C2=A0 CREATE TABLE dp (a int DEFAULT 99) PARTITION BY= LIST (a);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 CREATE TABLE dp1 PARTITION OF dp FOR VALUES IN = (1);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ALTER TABLE ONLY dp1 ALTER COLUMN a DROP DEFAUL= T;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('dp'::re= gclass, owner =3D> false) d;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.dp (a integer DEFA= ULT 99) PARTITION BY LIST (a);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.dp1 PARTITION OF p= ublic.dp FOR VALUES IN (1);

=C2=A0 =C2=A0 =C2=A0 =C2=A0 SELECT pg_get_expr(adbin, adrelid) FROM pg_attr= def
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 WHERE adrelid =3D 'dp1'::regclas= s;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 source:=C2=A0 =C2=A0(0 rows)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 replayed: 99=C2=A0 =C2=A0 =3D> INSE= RTs into dp1 now get 99, not NULL

=C2=A0 - a child's own NOT NULL constraint name is lost:

=C2=A0 =C2=A0 =C2=A0 =C2=A0 CREATE TABLE np (a int NOT NULL) PARTITION BY L= IST (a);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 CREATE TABLE np1 (a int CONSTRAINT np1_nn NOT N= ULL);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ALTER TABLE np ATTACH PARTITION np1 FOR VALUES = IN (1);

=C2=A0 =C2=A0 =C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('np'::re= gclass, owner =3D> false) d;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.np (a integer NOT NULL)= PARTITION BY LIST (a);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.np1 PARTITION OF <= a href=3D"http://public.np" rel=3D"noreferrer" target=3D"_blank">public.np<= /a> FOR VALUES IN (1);

=C2=A0 =C2=A0 =C2=A0 =C2=A0 SELECT conname FROM pg_constraint
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 WHERE conrelid =3D 'np1'::regcla= ss AND contype =3D 'n';
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 source:=C2=A0 =C2=A0np1_nn
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 replayed: np_a_not_null

=C2=A0 =C2=A0 and when the column itself is inherited, the emitted constrai= nt
=C2=A0 =C2=A0 errors instead of merging:

=C2=A0 =C2=A0 =C2=A0 =C2=A0 CREATE TABLE p5 (a int);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 CREATE TABLE c5 () INHERITS (p5);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ALTER TABLE c5 ADD CONSTRAINT c5_nn NOT NULL a;=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ALTER TABLE p5 ADD CONSTRAINT p5_nn NOT NULL a;=

=C2=A0 =C2=A0 =C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('c5'::re= gclass, owner =3D> false) d;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.c5 () INHERITS (pu= blic.p5);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 ALTER TABLE public.c5 ADD CONSTRAINT c= 5_nn NOT NULL a;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 ALTER TABLE public.c5 ADD CONSTRAINT c5_nn NOT = NULL a;=C2=A0 =C2=A0 --
replay, p5 recreated first
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 ERROR:=C2=A0 cannot create not-null co= nstraint "c5_nn" on
column "a" of table "c5"
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 DETAIL:=C2=A0 A not-null constraint na= med "p5_nn" already
exists for this column.

=C2=A0 - a partition attached from a table with different column order is =C2=A0 =C2=A0 rebuilt in the parent's order:

=C2=A0 =C2=A0 =C2=A0 =C2=A0 CREATE TABLE p (a int, b int, c int) PARTITION = BY LIST (a);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 CREATE TABLE c1 (c int, b int, a int);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ALTER TABLE p ATTACH PARTITION c1 FOR VALUES IN= (1);

=C2=A0 =C2=A0 =C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('p'::reg= class, owner =3D> false) d;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.p (a integer, b in= teger, c integer)
PARTITION BY LIST (a);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.c1 PARTITION OF pu= blic.p FOR VALUES IN (1);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 =3D> replayed c1 columns are a, b, = c (source: c, b, a), so
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --=C2=A0 =C2=A0 =C2=A0SELECT * / COPY / positio= nal INSERT all shift

pg_dump handles all three: it emits the named constraint inline in the
child's CREATE body (the merge with the inherited constraint at CREATE<= br> time keeps the local name, and attislocal / conislocal / coninhcount all survive), and falls back to standalone CREATE + ATTACH PARTITION for
shapes a PARTITION OF / INHERITS clause can't express. The first two variants have lightweight fixes that keep the PARTITION OF / INHERITS
shape --

=C2=A0 =C2=A0 CREATE TABLE c5 (CONSTRAINT c5_nn NOT NULL a) INHERITS (p5);<= br> =C2=A0 =C2=A0 CREATE TABLE np1 PARTITION OF np (CONSTRAINT np1_nn NOT NULL = a)
FOR VALUES IN (1);

plus a counter-statement for the divergent-default case (ALTER TABLE
ONLY dp1 ALTER COLUMN a DROP DEFAULT). Only the reordered-column case
really needs the standalone shape. The commit message lists child-local
DEFAULT overrides and named NOT NULL constraints as supported, so I'm treating these as bugs rather than scope cuts.

3) emit_typed_column_storage() (ddlutils.c:2331, 2342) emits ALTER TABLE without ONLY; SET STORAGE / SET COMPRESSION recurse:

=C2=A0 =C2=A0 CREATE TYPE mytype AS (a int, b text);
=C2=A0 =C2=A0 CREATE TABLE typed_t OF mytype;
=C2=A0 =C2=A0 ALTER TABLE typed_t ALTER COLUMN b SET STORAGE external;
=C2=A0 =C2=A0 CREATE TABLE tchild () INHERITS (typed_t);
=C2=A0 =C2=A0 ALTER TABLE ONLY tchild ALTER COLUMN b SET STORAGE main;

=C2=A0 =C2=A0 ALTER TABLE public.typed_t ALTER COLUMN b SET STORAGE EXTERNA= L;
-- replay v17's output
=C2=A0 =C2=A0 --=C2=A0 =3D> tchild's attstorage flips m -> e

pg_dump uses ALTER TABLE ONLY here. (The other emitted ALTER TABLEs are
fine: OWNER / REPLICA IDENTITY / RLS / SET (options) don't recurse, and=
ADD CONSTRAINT must stay ONLY-less since the dump relies on its recursion to rebuild the children's suppressed inherited copies.)

4) Some per-table state pg_dump preserves is missing. Index statistics
targets:

=C2=A0 =C2=A0 CREATE TABLE ist (c1 int);
=C2=A0 =C2=A0 CREATE INDEX ist_idx ON ist ((c1 + 1));
=C2=A0 =C2=A0 ALTER INDEX ist_idx ALTER COLUMN 1 SET STATISTICS 400;

=C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('ist'::regclass, owner= =3D> false) d;
=C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.ist (c1 integer);
=C2=A0 =C2=A0 --=C2=A0 CREATE INDEX ist_idx ON public.ist USING btree (((c1= + 1)));
=C2=A0-- no SET STATISTICS

Same story for ALTER TABLE ... CLUSTER ON (the index comes back without
the indisclustered marker) and for ALTER TABLE ... DISABLE RULE (the rule is emitted but comes back enabled, which changes behavior -- and rule is a covered kind).

5) emit_indexes doesn't check indisvalid, so an invalid index is emitte= d
as a normal one:

=C2=A0 =C2=A0 CREATE TABLE inv (x int);
=C2=A0 =C2=A0 INSERT INTO inv VALUES (1), (1);
=C2=A0 =C2=A0 CREATE UNIQUE INDEX CONCURRENTLY inv_uidx ON inv (x);
=C2=A0 =C2=A0 --=C2=A0 ERROR:=C2=A0 could not create unique index "inv= _uidx"=C2=A0 =C2=A0 (leaves
indisvalid =3D false)

=C2=A0 =C2=A0 SELECT d FROM pg_get_table_ddl('inv'::regclass, owner= =3D> false) d;
=C2=A0 =C2=A0 --=C2=A0 CREATE TABLE public.inv (x integer);
=C2=A0 =C2=A0 --=C2=A0 CREATE UNIQUE INDEX inv_uidx ON public.inv USING btr= ee (x);

pg_dump skips those (getIndexes: "i.indisvalid OR t2.relkind =3D '= p'").

6) Minor: COMMENT ON and GRANT/REVOKE are not emitted. If that's
intentional -- like trigger/policy -- worth saying so in the doc.

Thanks,
Rui
--00000000000074c8ed06561833b4-- --00000000000074c8ef06561833b6 Content-Type: application/octet-stream; name="v18-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v18-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrc0uzez0 RnJvbSAzNzE4ZmRiZGFhMTZhODIwZjViMzA0N2YxZmQ1MjExYTFmYWZmNGE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHYxOF0gQWRkIHBnX2dldF90YWJsZV9kZGwoKSB0byByZWNvbnN0cnVjdCBDUkVBVEUgVEFC TEUKIHN0YXRlbWVudHMKClRoZSBmdW5jdGlvbiByZWNvbnN0cnVjdHMgdGhlIENSRUFURSBUQUJM RSBzdGF0ZW1lbnQgZm9yIGFuIG9yZGluYXJ5IG9yCnBhcnRpdGlvbmVkIHRhYmxlLCBmb2xsb3dl ZCBieSB0aGUgQUxURVIgVEFCTEUgLyBDUkVBVEUgSU5ERVggLwpDUkVBVEUgUlVMRSAvIENSRUFU RSBTVEFUSVNUSUNTIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlc3RvcmUgaXRzIGZ1bGwKZGVmaW5p dGlvbi4gIEVhY2ggc3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgoKU3Vw cG9ydGVkIHBlci1jb2x1bW4gZmVhdHVyZXM6IGRhdGEgdHlwZSB3aXRoIHR5cGUgbW9kaWZpZXJz LCBDT0xMQVRFLApTVE9SQUdFLCBDT01QUkVTU0lPTiAocGdseiAvIGx6NCksIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGV4cHIpClNUT1JFRC9WSVJUVUFMLCBHRU5FUkFURUQgQUxXQVlTfEJZIERFRkFV TFQgQVMgSURFTlRJVFkgKHdpdGggc2VxdWVuY2UKb3B0aW9ucyksIERFRkFVTFQsIE5PVCBOVUxM IChpbmNsdWRpbmcgbmFtZWQgTk9UIE5VTEwgY29uc3RyYWludHMpLCBhbmQKcGVyLWNvbHVtbiBh dHRvcHRpb25zIGVtaXR0ZWQgYXMgQUxURVIgQ09MVU1OIFNFVCAoLi4uKS4KClN1cHBvcnRlZCB0 YWJsZS1sZXZlbCBmZWF0dXJlczogVU5MT0dHRUQsIElOSEVSSVRTLCBQQVJUSVRJT04gQlkgKFJB TkdFCi8gTElTVCAvIEhBU0ggcGFyZW50cyksIFBBUlRJVElPTiBPRiBwYXJlbnQgRk9SIFZBTFVF UyAoRlJPTS9UTywgV0lUSAptb2R1bHVzL3JlbWFpbmRlciwgREVGQVVMVCksIFVTSU5HIHRhYmxl IGFjY2VzcyBtZXRob2QsIFdJVEgKKHJlbG9wdGlvbnMpLCBUQUJMRVNQQUNFLCBhbmQgaW5saW5l IENIRUNLIGNvbnN0cmFpbnRzIGluIHRoZSBDUkVBVEUKVEFCTEUgYm9keS4KClN1cHBvcnRlZCBz dWItb2JqZWN0cyAocmUtdXNpbmcgZXhpc3RpbmcgZGVwYXJzZSBoZWxwZXJzIGZyb20KcnVsZXV0 aWxzLmMpOiBpbmRleGVzIChpbmNsdWRpbmcgcGFydGlhbCBhbmQgZnVuY3Rpb25hbCkgdmlhCnBn X2dldF9pbmRleGRlZl9kZGw7IGNvbnN0cmFpbnRzIChQUklNQVJZIEtFWSB3aXRoIFdJVEhPVVQg T1ZFUkxBUFMgZm9yCnRlbXBvcmFsIGtleXMsIFVOSVFVRSB3aXRoIE5VTExTIE5PVCBESVNUSU5D VCBhbmQgSU5DTFVERSBjb2x1bW5zLApGT1JFSUdOIEtFWSB3aXRoIE9OIERFTEVURS9VUERBVEUg cmVmZXJlbnRpYWwgYWN0aW9ucyBhbmQgTUFUQ0ggY2xhdXNlLApOT1QgRU5GT1JDRUQgZm9yZWln biBrZXlzLCBFWENMVURFLCBuYW1lZCBOT1QgTlVMTCkgdmlhCnBnX2dldF9jb25zdHJhaW50ZGVm X2JvZHk7IHJ1bGVzIHZpYSBwZ19nZXRfcnVsZWRlZl9kZGw7IGV4dGVuZGVkCnN0YXRpc3RpY3Mg dmlhIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbDsgUkVQTElDQSBJREVOVElUWQpOT1RISU5H L0ZVTEwvVVNJTkcgSU5ERVg7IEFMVEVSIFRBQkxFIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VD VVJJVFk7CmFuZCBjaGlsZC1sb2NhbCBERUZBVUxUIG92ZXJyaWRlcyBvbiBpbmhlcml0YW5jZS9w YXJ0aXRpb24gY2hpbGRyZW4uCkRETCBmb3IgcGFydGl0aW9uIGNoaWxkcmVuIG9mIGEgcGFydGl0 aW9uZWQtdGFibGUgcGFyZW50IGlzIGFwcGVuZGVkCmFmdGVyIHRoZSBwYXJlbnQgYnkgZGVmYXVs dC4KClRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9sbG93cyB0aGUgbmFtZWQtcGFyYW1ldGVyIGNv bnZlbnRpb24KZXN0YWJsaXNoZWQgYnkgcGdfZ2V0X3JvbGVfZGRsKCksIHBnX2dldF90YWJsZXNw YWNlX2RkbCgpLCBhbmQKcGdfZ2V0X2RhdGFiYXNlX2RkbCgpOgoKICBwZ19nZXRfdGFibGVfZGRs KHJlbGF0aW9uICAgICAgICAgcmVnY2xhc3MsCiAgICAgICAgICAgICAgICAgICBwcmV0dHkgICAg ICAgICAgIGJvb2xlYW4gIERFRkFVTFQgZmFsc2UsCiAgICAgICAgICAgICAgICAgICBvd25lciAg ICAgICAgICAgIGJvb2xlYW4gIERFRkFVTFQgdHJ1ZSwKICAgICAgICAgICAgICAgICAgIHRhYmxl c3BhY2UgICAgICAgYm9vbGVhbiAgREVGQVVMVCB0cnVlLAogICAgICAgICAgICAgICAgICAgc2No ZW1hX3F1YWxpZmllZCBib29sZWFuICBERUZBVUxUIHRydWUsCiAgICAgICAgICAgICAgICAgICBv bmx5X2tpbmRzICAgICAgIHRleHRbXSAgIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgICAgICAg IGV4Y2VwdF9raW5kcyAgICAgdGV4dFtdICAgREVGQVVMVCBOVUxMKQoKcHJldHR5IGNvbnRyb2xz IHByZXR0eS1wcmludGVkIG91dHB1dC4gIG93bmVyIGNvbnRyb2xzIGVtaXNzaW9uIG9mIHRoZQpB TFRFUiBUQUJMRSAuLi4gT1dORVIgVE8gc3RhdGVtZW50LiAgdGFibGVzcGFjZSBjb250cm9scyB0 aGUgVEFCTEVTUEFDRQpjbGF1c2Ugb24gQ1JFQVRFIFRBQkxFLiAgc2NoZW1hX3F1YWxpZmllZCBj b250cm9scyB3aGV0aGVyIG9iamVjdCBuYW1lcwphcmUgZW1pdHRlZCB3aXRoIHRoZWlyIHNjaGVt YSBwcmVmaXg6IHdoZW4gdHJ1ZSAodGhlIGRlZmF1bHQpIHRoZQphY3RpdmUgc2VhcmNoX3BhdGgg aXMgdGVtcG9yYXJpbHkgbmFycm93ZWQgdG8gcGdfY2F0YWxvZyBzbyBldmVyeQpkZXBhcnNlIGhl bHBlciBwcm9kdWNlcyBmdWxseS1xdWFsaWZpZWQgbmFtZXM7IHdoZW4gZmFsc2UgaXQgaXMgbmFy cm93ZWQKdG8gdGhlIHRhcmdldCB0YWJsZSdzIG93biBzY2hlbWEgc28gc2FtZS1zY2hlbWEgcmVm ZXJlbmNlcyBjb21lIG91dAp1bnF1YWxpZmllZCB3aGlsZSBjcm9zcy1zY2hlbWEgcmVmZXJlbmNl cyByZW1haW4gcXVhbGlmaWVkIGZvcgpjb3JyZWN0bmVzcy4gIFRlbXBvcmFyeSB0YWJsZXMgYXJl IG5ldmVyIHNjaGVtYS1xdWFsaWZpZWQgcmVnYXJkbGVzcyBvZgp0aGlzIHNldHRpbmc6IHRoZSBU RU1QT1JBUlkga2V5d29yZCBhbHJlYWR5IHBsYWNlcyB0aGVtIGluIHBnX3RlbXAsIGFuZAplbWl0 dGluZyBwZ190ZW1wX05OLnJlbG5hbWUgd291bGQgcHJvZHVjZSBub24tcmVwbGF5YWJsZSBEREwu CgpPYmplY3QtY2xhc3MgZmlsdGVyaW5nIHVzZXMgdHdvIG11dHVhbGx5LWV4Y2x1c2l2ZSB0ZXh0 LWFycmF5CnBhcmFtZXRlcnMsIG9ubHlfa2luZHMgYW5kIGV4Y2VwdF9raW5kcy4gIFdoZW4gb25s eV9raW5kcyBpcyBzZXQsIG9ubHkKdGhlIGxpc3RlZCBraW5kcyBhcmUgZW1pdHRlZDsgd2hlbiBl eGNlcHRfa2luZHMgaXMgc2V0LCBldmVyeSBraW5kCmV4Y2VwdCB0aGUgbGlzdGVkIG9uZXMgaXMg ZW1pdHRlZDsgd2hlbiBuZWl0aGVyIGlzIHNldCBldmVyeSBraW5kIGlzCmVtaXR0ZWQuICBFYWNo IGFycmF5IGVsZW1lbnQgaXMgbWF0Y2hlZCBjYXNlLWluc2Vuc2l0aXZlbHkgd2l0aApsZWFkaW5n L3RyYWlsaW5nIHdoaXRlc3BhY2UgdHJpbW1lZDsgYW4gdW5yZWNvZ25pemVkIG5hbWUgcmFpc2Vz IGFuCmVycm9yLiAgVGhlIGtpbmQgdm9jYWJ1bGFyeSBpczoKCiAgdGFibGUsIGluZGV4LCBwcmlt YXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWlnbl9rZXksIGV4Y2x1c2lvbiwKICBydWxlLCBz dGF0aXN0aWNzLCBybHMsIHJlcGxpY2FfaWRlbnRpdHksIHBhcnRpdGlvbgoKdHJpZ2dlciBhbmQg cG9saWN5IGFyZSBhY2NlcHRlZCBpbiB0aGUgdm9jYWJ1bGFyeSBidXQgY3VycmVudGx5IHByb2R1 Y2UKbm8gb3V0cHV0OyB0aGV5IGFyZSByZXNlcnZlZCBmb3Igd2hlbiBzdGFuZGFsb25lIHBnX2dl dF90cmlnZ2VyX2RkbCgpCmFuZCBwZ19nZXRfcG9saWN5X2RkbCgpIGhlbHBlcnMgYmVjb21lIGF2 YWlsYWJsZS4KCk5PVCBOVUxMIGlzIG5vdCBwYXJ0IG9mIHRoZSB2b2NhYnVsYXJ5OiBpdCBpcyBh bHdheXMgZW1pdHRlZCB0byBwcmV2ZW50CnByb2R1Y2luZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkg YWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQgcmVqZWN0LgpXaGVuIHJlcGxpY2FfaWRlbnRp dHkgaXMgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIgYW5kIHRoZSB0YWJsZSdzIFJFUExJQ0EKSURFTlRJ VFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCB0aGF0IHRoZSBmaWx0ZXIgd291bGQg c3VwcHJlc3MsCnRoZSBmdW5jdGlvbiByYWlzZXMgYW4gZXJyb3IgYmVmb3JlIGVtaXR0aW5nIGFu eSBvdXRwdXQsIHNvIHRoZQpnZW5lcmF0ZWQgRERMIG5ldmVyIHJlZmVyZW5jZXMgYW4gaW5kZXgg aXQgZGlkIG5vdCBwcm9kdWNlLgoKRGVmYXVsdCBvbWlzc2lvbiBjb252ZW50aW9uOiBldmVyeSBv cHRpb25hbCBjbGF1c2UgaXMgb21pdHRlZCB3aGVuIGl0cwp2YWx1ZSBtYXRjaGVzIHdoYXQgdGhl IHNlcnZlciB3b3VsZCByZWFwcGx5IG9uIHJvdW5kLXRyaXAsIGluY2x1ZGluZwp0eXBlLWRlZmF1 bHQgQ09MTEFURSwgcGVyLXR5cGUgU1RPUkFHRSwgdGhlIGF1dG8tZ2VuZXJhdGVkIGlkZW50aXR5 CnNlcXVlbmNlIG5hbWUgYW5kIHBhcmFtZXRlciBkZWZhdWx0cywgaGVhcCBhY2Nlc3MgbWV0aG9k LCBkZWZhdWx0ClJFUExJQ0EgSURFTlRJVFksIGRpc2FibGVkIFJMUyB0b2dnbGVzLCBlbXB0eSBy ZWxvcHRpb25zLCBhbmQgdGhlCmRlZmF1bHQgdGFibGVzcGFjZS4KCkF1dGhvcjogQWtzaGF5IEpv c2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IE1hcmNvcyBQ ZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6 c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpSZXZpZXdlZC1ieTogS3lvdGFybyBIb3JpZ3VjaGkg PGhvcmlreW90YS5udHRAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5j aGFvQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFJ1aSBaaGFvIDx6aGFvcnVpMTI2QGdtYWlsLmNv bT4KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCAgICAgICAgICAgICAgfCAg MTkzICsrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgICAgICAgICAgICAgfCAg IDkzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAg MzAgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jICAgICAgICAgICAgICB8IDI2 NjAgKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAg ICAgICAgICAgICB8ICAgODcgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCAg ICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAg ICAgICAgICAgIHwgICAgOCArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaCAgICAg ICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAg ICAgICAgICB8ICAgIDQgKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5v dXQgICAgIHwgMTYxMiArKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVk dWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFi bGVfZGRsLnNxbCAgICAgfCAgOTM3ICsrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgICAgICAgICAgIHwgICAgMiArCiAxMyBmaWxlcyBjaGFuZ2VkLCA1NjE1IGluc2Vy dGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbAoKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1p bmZvLnNnbWwKaW5kZXggNjllZjM4NTdjZmEuLjlkZDg1YjQyMDZlIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5j LWluZm8uc2dtbApAQCAtMzk2MCw2ICszOTYwLDE5OSBAQCBhY2wgICAgICB8IHtwb3N0Z3Jlcz1h cndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jlc30KICAgICAgICAgaXMgZmFsc2UsIHRoZSA8 bGl0ZXJhbD5PV05FUjwvbGl0ZXJhbD4gY2xhdXNlIGlzIG9taXR0ZWQuCiAgICAgICAgPC9wYXJh PjwvZW50cnk+CiAgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9 ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAg PGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF90YWJsZV9kZGw8L3ByaW1hcnk+ CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X3RhYmxlX2Rk bDwvZnVuY3Rpb24+CisgICAgICAgICggPHBhcmFtZXRlcj5yZWxhdGlvbjwvcGFyYW1ldGVyPiA8 dHlwZT5yZWdjbGFzczwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5wcmV0 dHk8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4KKyAgICAgICAgPGxpdGVyYWw+REVG QVVMVDwvbGl0ZXJhbD4gZmFsc2U8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+LCA8cGFy YW1ldGVyPm93bmVyPC9wYXJhbWV0ZXI+IDx0eXBlPmJvb2xlYW48L3R5cGU+CisgICAgICAgIDxs aXRlcmFsPkRFRkFVTFQ8L2xpdGVyYWw+IHRydWU8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9u YWw+LCA8cGFyYW1ldGVyPnRhYmxlc3BhY2U8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlw ZT4KKyAgICAgICAgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gdHJ1ZTwvb3B0aW9uYWw+Cisg ICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+c2NoZW1hX3F1YWxpZmllZDwvcGFyYW1ldGVy PiA8dHlwZT5ib29sZWFuPC90eXBlPgorICAgICAgICA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFs PiB0cnVlPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5vbmx5X2tp bmRzPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHRbXTwvdHlwZT4KKyAgICAgICAgPGxpdGVyYWw+REVG QVVMVDwvbGl0ZXJhbD4gTlVMTDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4sIDxwYXJh bWV0ZXI+ZXhjZXB0X2tpbmRzPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHRbXTwvdHlwZT4KKyAgICAg ICAgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gTlVMTDwvb3B0aW9uYWw+ICkKKyAgICAgICAg PHJldHVybnZhbHVlPnNldG9mIHRleHQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAg ICAgICA8cGFyYT4KKyAgICAgICAgUmVjb25zdHJ1Y3RzIHRoZSA8Y29tbWFuZD5DUkVBVEUgVEFC TEU8L2NvbW1hbmQ+IHN0YXRlbWVudCBmb3IgdGhlCisgICAgICAgIHNwZWNpZmllZCBvcmRpbmFy eSBvciBwYXJ0aXRpb25lZCB0YWJsZSwgZm9sbG93ZWQgYnkgdGhlCisgICAgICAgIDxjb21tYW5k PkFMVEVSIFRBQkxFPC9jb21tYW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPiwK KyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQgPGNvbW1hbmQ+Q1JF QVRFIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+CisgICAgICAgIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJl Y3JlYXRlIHRoZSB0YWJsZSdzIGNvbHVtbnMsIGNvbnN0cmFpbnRzLAorICAgICAgICBpbmRleGVz LCBydWxlcywgZXh0ZW5kZWQgc3RhdGlzdGljcywgYW5kIHJvdy1sZXZlbCBzZWN1cml0eSBmbGFn cy4KKyAgICAgICAgVGhpcyBpbmNsdWRlcyBwZXItaW5kZXggc3RhdGlzdGljcyB0YXJnZXRzCisg ICAgICAgICg8Y29tbWFuZD5BTFRFUiBJTkRFWCAuLi4gU0VUIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+ KSwKKyAgICAgICAgdGhlIGNsdXN0ZXJpbmcgaW5kZXggKDxjb21tYW5kPkFMVEVSIFRBQkxFIC4u LiBDTFVTVEVSIE9OPC9jb21tYW5kPiksCisgICAgICAgIGFuZCBub24tZGVmYXVsdCBydWxlIGZp cmluZyBzdGF0ZXMKKyAgICAgICAgKDxjb21tYW5kPkFMVEVSIFRBQkxFIC4uLiBESVNBQkxFL0VO QUJMRSBSVUxFPC9jb21tYW5kPikuCisgICAgICAgIEluaGVyaXRlZCBjb2x1bW5zIGFuZCBjb25z dHJhaW50cyBhcmUgZW1pdHRlZCBieSB0aGUgcGFyZW50IHRhYmxlJ3MKKyAgICAgICAgRERMIGFu ZCBhcmUgbm90IGR1cGxpY2F0ZWQgb24gaW5oZXJpdGFuY2UgY2hpbGRyZW4gb3IgcGFydGl0aW9u cy4KKyAgICAgICAgRWFjaCBzdGF0ZW1lbnQgaXMgcmV0dXJuZWQgYXMgYSBzZXBhcmF0ZSByb3cu CisgICAgICAgIEZvcmVpZ24ta2V5IGNvbnN0cmFpbnRzIGFyZSBhbHdheXMgZW1pdHRlZCBhZnRl ciBhbGwgb3RoZXIKKyAgICAgICAgY29uc3RyYWludHMgc28gdGhhdCBzZWxmLXJlZmVyZW5jaW5n IGZvcmVpZ24ga2V5cyAod2hlcmUgdGhlCisgICAgICAgIHJlZmVyZW5jZWQgcHJpbWFyeSBvciB1 bmlxdWUga2V5IGlzIG9uIHRoZSBzYW1lIHRhYmxlKSBjYW4gYmUKKyAgICAgICAgYWRkZWQgb25j ZSB0aGF0IGtleSBhbHJlYWR5IGV4aXN0cy4KKyAgICAgICAgV2hlbiA8cGFyYW1ldGVyPnByZXR0 eTwvcGFyYW1ldGVyPiBpcyB0cnVlLCB0aGUgb3V0cHV0IGlzCisgICAgICAgIHByZXR0eS1wcmlu dGVkLiAgV2hlbiA8cGFyYW1ldGVyPm93bmVyPC9wYXJhbWV0ZXI+IGlzIGZhbHNlLCB0aGUKKyAg ICAgICAgPGNvbW1hbmQ+QUxURVIgVEFCTEUgLi4uIE9XTkVSIFRPPC9jb21tYW5kPiBzdGF0ZW1l bnQgaXMgb21pdHRlZC4KKyAgICAgICAgV2hlbiA8cGFyYW1ldGVyPnRhYmxlc3BhY2U8L3BhcmFt ZXRlcj4gaXMgZmFsc2UsIHRoZQorICAgICAgICA8bGl0ZXJhbD5UQUJMRVNQQUNFPC9saXRlcmFs PiBjbGF1c2UgaXMgb21pdHRlZCBmcm9tIHRoZQorICAgICAgICA8Y29tbWFuZD5DUkVBVEUgVEFC TEU8L2NvbW1hbmQ+IHN0YXRlbWVudC4gIFRoZQorICAgICAgICA8cGFyYW1ldGVyPm9ubHlfa2lu ZHM8L3BhcmFtZXRlcj4gYW5kIDxwYXJhbWV0ZXI+ZXhjZXB0X2tpbmRzPC9wYXJhbWV0ZXI+Cisg ICAgICAgIHBhcmFtZXRlcnMgZGVzY3JpYmVkIGJlbG93IGNvbnRyb2wgd2hpY2ggb2JqZWN0IGNs YXNzZXMgYXJlIGVtaXR0ZWQuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAg ICBUaGUgPHBhcmFtZXRlcj5vbmx5X2tpbmRzPC9wYXJhbWV0ZXI+IGFuZCA8cGFyYW1ldGVyPmV4 Y2VwdF9raW5kczwvcGFyYW1ldGVyPgorICAgICAgICBwYXJhbWV0ZXJzIGVhY2ggdGFrZSBhIHRl eHQgYXJyYXkgb2Ygb2JqZWN0LWNsYXNzIGtpbmQgbmFtZXMKKyAgICAgICAgYW5kIGFyZSBtdXR1 YWxseSBleGNsdXNpdmUgKHNwZWNpZnlpbmcgYm90aCByYWlzZXMgYW4KKyAgICAgICAgZXJyb3Ip LiAgV2hlbiA8cGFyYW1ldGVyPm9ubHlfa2luZHM8L3BhcmFtZXRlcj4gaXMgc2V0LCBvbmx5IHRo ZQorICAgICAgICBsaXN0ZWQga2luZHMgYXJlIGVtaXR0ZWQ7IHdoZW4gPHBhcmFtZXRlcj5leGNl cHRfa2luZHM8L3BhcmFtZXRlcj4gaXMKKyAgICAgICAgc2V0LCBldmVyeSBraW5kIDxlbXBoYXNp cz5leGNlcHQ8L2VtcGhhc2lzPiB0aGUgbGlzdGVkIG9uZXMgaXMKKyAgICAgICAgZW1pdHRlZC4g IFdoZW4gbmVpdGhlciBpcyBzZXQgKHRoZSBkZWZhdWx0KSwgZXZlcnkga2luZCBpcworICAgICAg ICBlbWl0dGVkLiAgTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBpbiBlYWNoIGFycmF5 IGVsZW1lbnQKKyAgICAgICAgaXMgaWdub3JlZCBhbmQgbWF0Y2hpbmcgaXMgY2FzZS1pbnNlbnNp dGl2ZTsgYW4gdW5yZWNvZ25pemVkCisgICAgICAgIGtpbmQgbmFtZSByYWlzZXMgYW4gZXJyb3Iu CisgICAgICAgIFRoZSBraW5kIHZvY2FidWxhcnkgaXMKKyAgICAgICAgPGxpdGVyYWw+dGFibGU8 L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5pbmRleDwvbGl0ZXJhbD4sCisgICAgICAgIDxs aXRlcmFsPnByaW1hcnlfa2V5PC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+dW5pcXVlPC9s aXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+Y2hlY2s8L2xpdGVyYWw+LAorICAgICAgICA8bGl0 ZXJhbD5mb3JlaWduX2tleTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPmV4Y2x1c2lvbjwv bGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnJ1bGU8L2xpdGVyYWw+LAorICAgICAgICA8bGl0 ZXJhbD5zdGF0aXN0aWNzPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+dHJpZ2dlcjwvbGl0 ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnBvbGljeTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRl cmFsPnJsczwvbGl0ZXJhbD4gKHRoZQorICAgICAgICA8Y29tbWFuZD5FTkFCTEU8L2NvbW1hbmQ+ Lzxjb21tYW5kPkZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTwvY29tbWFuZD4KKyAgICAgICAgdG9n Z2xlcyksCisgICAgICAgIDxsaXRlcmFsPnJlcGxpY2FfaWRlbnRpdHk8L2xpdGVyYWw+LCBhbmQK KyAgICAgICAgPGxpdGVyYWw+cGFydGl0aW9uPC9saXRlcmFsPiAodGhlIERETCBmb3IgZWFjaCBk aXJlY3QKKyAgICAgICAgcGFydGl0aW9uIGNoaWxkIG9mIGEgcGFydGl0aW9uZWQtdGFibGUgcGFy ZW50KS4KKyAgICAgICAgTm90ZSB0aGF0IDxsaXRlcmFsPnRyaWdnZXI8L2xpdGVyYWw+IGFuZCA8 bGl0ZXJhbD5wb2xpY3k8L2xpdGVyYWw+CisgICAgICAgIGFyZSBhY2NlcHRlZCBpbiB0aGUgdm9j YWJ1bGFyeSBidXQgY3VycmVudGx5IHByb2R1Y2Ugbm8gb3V0cHV0OworICAgICAgICB0aGV5IGFy ZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSB3aGVuIHN0YW5kYWxvbmUKKyAgICAgICAgPGZ1bmN0 aW9uPnBnX2dldF90cmlnZ2VyX2RkbDwvZnVuY3Rpb24+IGFuZAorICAgICAgICA8ZnVuY3Rpb24+ cGdfZ2V0X3BvbGljeV9kZGw8L2Z1bmN0aW9uPiBoZWxwZXJzIGJlY29tZSBhdmFpbGFibGUuICBU aGUKKyAgICAgICAgPGxpdGVyYWw+dGFibGU8L2xpdGVyYWw+IGtpbmQgZ3JvdXBzIHRoZQorICAg ICAgICA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2NvbW1hbmQ+IHN0YXRlbWVudCB0b2dldGhlciB3 aXRoIHRoZQorICAgICAgICByZWxhdGVkIHBlci10YWJsZSA8Y29tbWFuZD5BTFRFUiBUQUJMRTwv Y29tbWFuZD4gcGFzc2VzOgorICAgICAgICA8Y29tbWFuZD5PV05FUiBUTzwvY29tbWFuZD4sIGNo aWxkLWRlZmF1bHQKKyAgICAgICAgPGNvbW1hbmQ+U0VUIERFRkFVTFQ8L2NvbW1hbmQ+LCBhbmQg cGVyLWNvbHVtbgorICAgICAgICA8Y29tbWFuZD5TRVQgKDxyZXBsYWNlYWJsZT5hdHRvcHRpb25z PC9yZXBsYWNlYWJsZT4pPC9jb21tYW5kPi4KKyAgICAgICAgPGxpdGVyYWw+Tk9UIE5VTEw8L2xp dGVyYWw+IGNvbnN0cmFpbnRzIGFyZSBub3QgcGFydCBvZiB0aGUKKyAgICAgICAgdm9jYWJ1bGFy eTsgdGhleSBhcmUgYWx3YXlzIGVtaXR0ZWQgYXMgcGFydCBvZiB0aGUgdGFibGUgdG8KKyAgICAg ICAgYXZvaWQgcHJvZHVjaW5nIHNjaGVtYXMgdGhhdCBzaWxlbnRseSBhY2NlcHQKKyAgICAgICAg PGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gdmFsdWVzIHRoZSBzb3VyY2Ugd291bGQgaGF2ZSByZWpl Y3RlZC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzZWNvbmQgcGFzcyBvZiBhIHR3by1wYXNz IHNjaGVtYSBjbG9uZSB0aGF0CisgICAgICAgIGFkZHMgY3Jvc3MtdGFibGUgZm9yZWlnbiBrZXlz IGFmdGVyIGRhdGEgaGFzIGxvYWRlZCBjYW4gYmUKKyAgICAgICAgd3JpdHRlbiBhcworICAgICAg ICA8bGl0ZXJhbD5vbmx5X2tpbmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddPC9saXRlcmFsPiwg YW5kIHRoZQorICAgICAgICBwdWIvc3ViLXN0eWxlIGNsb25lIHRoYXQga2VlcHMgYSBwcmltYXJ5 IGtleSBidXQgZHJvcHMgZXZlcnkKKyAgICAgICAgb3RoZXIgY29uc3RyYWludCBjYW4gYmUgd3Jp dHRlbiBhcworICAgICAgICA8bGl0ZXJhbD5leGNlcHRfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZScs J2NoZWNrJywnZm9yZWlnbl9rZXknLCdleGNsdXNpb24nXTwvbGl0ZXJhbD4uCisgICAgICAgPC9w YXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIHRoZSB0YWJsZSBoYXMKKyAgICAgICAg PGxpdGVyYWw+UkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWDwvbGl0ZXJhbD4gYW5kIHRoZQor ICAgICAgICA8bGl0ZXJhbD5yZXBsaWNhX2lkZW50aXR5PC9saXRlcmFsPiBraW5kIGlzIGluIHRo ZSBhY3RpdmUKKyAgICAgICAgZmlsdGVyLCB0aGUga2luZCB0aGF0IGVtaXRzIHRoZSByZWZlcmVu Y2VkIGluZGV4CisgICAgICAgICg8bGl0ZXJhbD5wcmltYXJ5X2tleTwvbGl0ZXJhbD4sIDxsaXRl cmFsPnVuaXF1ZTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPmV4Y2x1c2lvbjwvbGl0ZXJh bD4sIG9yIDxsaXRlcmFsPmluZGV4PC9saXRlcmFsPikgbXVzdAorICAgICAgICBhbHNvIGJlIGlu IHRoZSBmaWx0ZXIuICBPdGhlcndpc2UgdGhlIGVtaXR0ZWQKKyAgICAgICAgPGNvbW1hbmQ+QUxU RVIgVEFCTEUgLi4uIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVg8L2NvbW1hbmQ+CisgICAg ICAgIHdvdWxkIHJlZmVyZW5jZSBhbiBpbmRleCB0aGUgc2FtZSBEREwgbmV2ZXIgcHJvZHVjZWQs IGFuZCB0aGUKKyAgICAgICAgZnVuY3Rpb24gcmVwb3J0cyBhbiBlcnJvciBiZWZvcmUgZW1pdHRp bmcgYW55IHN0YXRlbWVudHMuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAg ICBUaGUgPHBhcmFtZXRlcj5zY2hlbWFfcXVhbGlmaWVkPC9wYXJhbWV0ZXI+IHBhcmFtZXRlciAo ZGVmYXVsdAorICAgICAgICA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPikgY29udHJvbHMgd2hldGhl ciB0aGUgdGFyZ2V0IHRhYmxlJ3Mgb3duCisgICAgICAgIHNjaGVtYSBpcyBpbmNsdWRlZCBpbiB0 aGUgZ2VuZXJhdGVkIERETC4gIFdoZW4gc2V0IHRvCisgICAgICAgIDxsaXRlcmFsPmZhbHNlPC9s aXRlcmFsPiwgdGhlIHRhYmxlIG5hbWUgaXMgZW1pdHRlZCB1bnF1YWxpZmllZAorICAgICAgICBp biB0aGUgPGNvbW1hbmQ+Q1JFQVRFIFRBQkxFPC9jb21tYW5kPiBhbmQgZXZlcnkgc3Vic2VxdWVu dAorICAgICAgICA8Y29tbWFuZD5BTFRFUiBUQUJMRTwvY29tbWFuZD4sIDxjb21tYW5kPkNSRUFU RSBJTkRFWDwvY29tbWFuZD4sCisgICAgICAgIDxjb21tYW5kPkNSRUFURSBSVUxFPC9jb21tYW5k PiwgYW5kCisgICAgICAgIDxjb21tYW5kPkNSRUFURSBTVEFUSVNUSUNTPC9jb21tYW5kPiBzdGF0 ZW1lbnQuICBSZWZlcmVuY2VzIHRvCisgICAgICAgIG9iamVjdHMgaW4gdGhlIHNhbWUgc2NoZW1h IGFzIHRoZSB0YXJnZXQgdGFibGUgKGluaGVyaXRhbmNlCisgICAgICAgIHBhcmVudHMsIHBhcnRp dGlvbiBwYXJlbnRzLCBpZGVudGl0eSBzZXF1ZW5jZXMsIGFuZCBhbnkKKyAgICAgICAgc2FtZS1z Y2hlbWEgb2JqZWN0IHRoZSBkZXBhcnNlIGhlbHBlcnMgaGFwcGVuIHRvIG1lbnRpb24pIGFyZQor ICAgICAgICBhbHNvIGVtaXR0ZWQgdW5xdWFsaWZpZWQsIHNvIHRoZSBzY3JpcHQgY2FuIGJlIHJl cGxheWVkIHVuZGVyIGEKKyAgICAgICAgZGlmZmVyZW50IDx2YXJuYW1lPnNlYXJjaF9wYXRoPC92 YXJuYW1lPiB0byByZWNyZWF0ZSB0aGUgdGFibGUKKyAgICAgICAgaW4gYW5vdGhlciBzY2hlbWEu ICBDcm9zcy1zY2hlbWEgcmVmZXJlbmNlcyAoZm9yIGV4YW1wbGUgYQorICAgICAgICBmb3JlaWdu IGtleSB0YXJnZXQgaW4gYSBkaWZmZXJlbnQgc2NoZW1hKSByZW1haW4gcXVhbGlmaWVkIGZvcgor ICAgICAgICBjb3JyZWN0bmVzcy4gIFBhcnRpdGlvbiBjaGlsZHJlbiB0aGF0IHJlc2lkZSBpbiBh IGRpZmZlcmVudAorICAgICAgICBzY2hlbWEgdGhhbiB0aGUgdGFyZ2V0IHRhYmxlIGFyZSBhbHdh eXMgZW1pdHRlZCB3aXRoIGZ1bGwgc2NoZW1hCisgICAgICAgIHF1YWxpZmljYXRpb24gcmVnYXJk bGVzcyBvZiB0aGlzIHBhcmFtZXRlciwgYmVjYXVzZSB0aGUgb3V0cHV0CisgICAgICAgIHdvdWxk IG90aGVyd2lzZSBwbGFjZSB0aGUgY2hpbGQgaW4gdGhlIHdyb25nIHNjaGVtYSB3aGVuCisgICAg ICAgIHJlcGxheWVkLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQWxs IHRocmVlIGZvcm1zIG9mIDxjb21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gYXJlIHN1cHBv cnRlZDoKKyAgICAgICAgdGhlIG9yZGluYXJ5IGNvbHVtbi1saXN0IGZvcm0sIHRoZSB0eXBlZC10 YWJsZSBmb3JtCisgICAgICAgICg8bGl0ZXJhbD5PRiA8cmVwbGFjZWFibGU+dHlwZV9uYW1lPC9y ZXBsYWNlYWJsZT48L2xpdGVyYWw+LCB3aXRoCisgICAgICAgIHBlci1jb2x1bW4gPGxpdGVyYWw+ V0lUSCBPUFRJT05TPC9saXRlcmFsPiBvdmVycmlkZXMgZm9yIGxvY2FsCisgICAgICAgIGRlZmF1 bHRzLCA8bGl0ZXJhbD5OT1QgTlVMTDwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5DSEVDSzwvbGl0 ZXJhbD4KKyAgICAgICAgY29uc3RyYWludHMpLCBhbmQgdGhlIDxsaXRlcmFsPlBBUlRJVElPTiBP RjwvbGl0ZXJhbD4gZm9ybS4KKyAgICAgICAgPGxpdGVyYWw+VEVNUE9SQVJZPC9saXRlcmFsPiBh bmQgPGxpdGVyYWw+VU5MT0dHRUQ8L2xpdGVyYWw+CisgICAgICAgIHBlcnNpc3RlbmNlIG1vZGVz IGFyZSBlbWl0dGVkIGZyb20KKyAgICAgICAgPHN0cnVjdGZpZWxkPnJlbHBlcnNpc3RlbmNlPC9z dHJ1Y3RmaWVsZD4uICBGb3IgdGVtcG9yYXJ5IHRhYmxlcworICAgICAgICByZWdpc3RlcmVkIGlu IHRoZSBjdXJyZW50IHNlc3Npb24sIHRoZQorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgREVM RVRFIFJPV1M8L2xpdGVyYWw+IGFuZAorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgRFJPUDwv bGl0ZXJhbD4gY2xhdXNlcyBhcmUgZW1pdHRlZDsgdGhlIGRlZmF1bHQKKyAgICAgICAgPGxpdGVy YWw+T04gQ09NTUlUIFBSRVNFUlZFIFJPV1M8L2xpdGVyYWw+IGlzIG9taXR0ZWQuCisgICAgICAg PC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIHRhYmxlLXJlbGF0 ZWQgb2JqZWN0cyBhcmUgaW50ZW50aW9uYWxseSBvdXRzaWRlIHRoZQorICAgICAgICBzY29wZSBv ZiB0aGlzIGZ1bmN0aW9uIGFuZCBhcmUgbm90IGVtaXR0ZWQ6CisgICAgICAgIDxpdGVtaXplZGxp c3Q+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIDxl bXBoYXNpcz5TZXF1ZW5jZXM8L2VtcGhhc2lzPiBvd25lZCBieSBzZXJpYWwgY29sdW1ucworICAg ICAgICAgICAoPHR5cGU+c2VyaWFsPC90eXBlPiwgPHR5cGU+Ymlnc2VyaWFsPC90eXBlPiwKKyAg ICAgICAgICAgPHR5cGU+c21hbGxzZXJpYWw8L3R5cGU+KSAmbWRhc2g7c2VxdWVuY2VzIGFyZSBp bmRlcGVuZGVudCBjYXRhbG9nCisgICAgICAgICAgIG9iamVjdHMuICBVc2UgPGZ1bmN0aW9uPnBn X2dldF9zZXF1ZW5jZV9kZGw8L2Z1bmN0aW9uPiAoaWYKKyAgICAgICAgICAgYXZhaWxhYmxlKSBv ciA8cHJvZHVjdG5hbWU+cGdfZHVtcDwvcHJvZHVjdG5hbWU+IHRvIGNhcHR1cmUgdGhlbQorICAg ICAgICAgICBhbG9uZ3NpZGUgdGhlIHRhYmxlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAg IDwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAg ICAgICAgIDxlbXBoYXNpcz5QYXJ0aXRpb24gY2hpbGRyZW4gd2hvc2UgY29sdW1uIG9yZGVyIGRp ZmZlcnMgZnJvbSB0aGUKKyAgICAgICAgICAgcGFyZW50PC9lbXBoYXNpcz4gJm1kYXNoO3RoZSA8 bGl0ZXJhbD5QQVJUSVRJT04gT0Y8L2xpdGVyYWw+IHN5bnRheAorICAgICAgICAgICBjYW4gb25s eSByZXByb2R1Y2UgdGhlIHBhcmVudCdzIGNvbHVtbiBvcmRlci4gIFN1Y2ggcGFydGl0aW9ucwor ICAgICAgICAgICByZXF1aXJlIGEgc3RhbmRhbG9uZSA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2Nv bW1hbmQ+IGZvbGxvd2VkIGJ5CisgICAgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxFIC4uLiBB VFRBQ0ggUEFSVElUSU9OPC9jb21tYW5kPiwgd2hpY2gKKyAgICAgICAgICAgPHByb2R1Y3RuYW1l PnBnX2R1bXA8L3Byb2R1Y3RuYW1lPiBwZXJmb3JtcyBhdXRvbWF0aWNhbGx5LgorICAgICAgICAg IDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgICAgPHBhcmE+CisgICAgICAgICAgIDxlbXBoYXNpcz5UcmlnZ2VycyBhbmQgcm93LWxldmVs IHNlY3VyaXR5IHBvbGljaWVzPC9lbXBoYXNpcz4gJm1kYXNoOworICAgICAgICAgICByZXNlcnZl ZCBmb3IgZnV0dXJlIHVzZSB3aGVuIHN0YW5kYWxvbmUKKyAgICAgICAgICAgPGZ1bmN0aW9uPnBn X2dldF90cmlnZ2VyX2RkbDwvZnVuY3Rpb24+IGFuZAorICAgICAgICAgICA8ZnVuY3Rpb24+cGdf Z2V0X3BvbGljeV9kZGw8L2Z1bmN0aW9uPiBoZWxwZXJzIGFyZSBhdmFpbGFibGUuCisgICAgICAg ICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgPGVtcGhhc2lzPjxjb21tYW5kPkNPTU1FTlQgT048 L2NvbW1hbmQ+IGFuZAorICAgICAgICAgICA8Y29tbWFuZD5HUkFOVDwvY29tbWFuZD4vPGNvbW1h bmQ+UkVWT0tFPC9jb21tYW5kPjwvZW1waGFzaXM+ICZtZGFzaDsKKyAgICAgICAgICAgdGhlc2Ug YXJlIHNlcGFyYXRlIGZyb20gdGhlIHRhYmxlJ3Mgc3RydWN0dXJhbCBEREwgYW5kIGFyZSBub3QK KyAgICAgICAgICAgZW1pdHRlZC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAg ICAgIDwvcm93PgogICAgICA8L3Rib2R5PgogICAgIDwvdGdyb3VwPgogICAgPC90YWJsZT4KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfaW5oZXJpdHMuYwppbmRleCA0Yjk4MDJhYWZjYy4uODk3MTUxYmQ2ZDEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYworKysgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKQEAgLTIzNiw2ICsyMzYsOTkgQEAgZmluZF9pbmhl cml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQgcGFyZW50cmVsSWQsIGJvb2wgb21pdF9kZXRh Y2hlZCwKIH0KIAogCisvKgorICogZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzCisgKgorICogUmV0 dXJucyBhIGxpc3QgY29udGFpbmluZyB0aGUgT0lEcyBvZiBhbGwgcmVsYXRpb25zIHRoYXQgdGhl IHJlbGF0aW9uIHdpdGgKKyAqIE9JRCAncmVsaWQnIGluaGVyaXRzICpkaXJlY3RseSogZnJvbSwg aW4gaW5oc2Vxbm8gb3JkZXIgKHRoZSBvcmRlciBpbiB3aGljaAorICogdGhleSBzaG91bGQgYXBw ZWFyIGluIGFuIElOSEVSSVRTIGNsYXVzZSkuCisgKgorICogVGhlIHNwZWNpZmllZCBsb2NrIHR5 cGUgaXMgYWNxdWlyZWQgb24gZWFjaCBwYXJlbnQgcmVsYXRpb24gKGJ1dCBub3Qgb24gdGhlCisg KiBnaXZlbiByZWw7IGNhbGxlciBzaG91bGQgYWxyZWFkeSBoYXZlIGxvY2tlZCBpdCkuICBJZiBs b2NrbW9kZSBpcyBOb0xvY2sKKyAqIHRoZW4gbm8gbG9ja3MgYXJlIGFjcXVpcmVkLCBidXQgY2Fs bGVyIG11c3QgYmV3YXJlIG9mIHJhY2UgY29uZGl0aW9ucworICogYWdhaW5zdCBwb3NzaWJsZSBE Uk9QcyBvZiBwYXJlbnQgcmVsYXRpb25zLgorICoKKyAqIFBhcnRpdGlvbiBjaGlsZHJlbiBhbHNv IGhhdmUgYSBwZ19pbmhlcml0cyBlbnRyeSBwb2ludGluZyB0byB0aGUKKyAqIHBhcnRpdGlvbmVk IHBhcmVudDsgY2FsbGVycyB0aGF0IGRpc3Rpbmd1aXNoIElOSEVSSVRTIGZyb20gUEFSVElUSU9O IE9GCisgKiBtdXN0IGNoZWNrIHJlbGlzcGFydGl0aW9uIHRoZW1zZWx2ZXMuCisgKi8KK0xpc3Qg KgorZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzKE9pZCByZWxpZCwgTE9DS01PREUgbG9ja21vZGUp Cit7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlTeXNTY2Fu RGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleVsxXTsKKwlIZWFwVHVwbGUJaW5oZXJpdHNUdXBs ZTsKKwlPaWQJCQlpbmhwYXJlbnQ7CisJT2lkCQkgICAqb2lkYXJyOworCWludAkJCW1heG9pZHMs CisJCQkJbnVtb2lkcywKKwkJCQlpOworCisJLyoKKwkgKiBTY2FuIHBnX2luaGVyaXRzIHZpYSB0 aGUgKGluaHJlbGlkLCBpbmhzZXFubykgaW5kZXggc28gdGhhdCB0aGUgcm93cworCSAqIGNvbWUg b3V0IGluIGluaHNlcW5vIG9yZGVyLCB3aGljaCBpcyB0aGUgb3JkZXIgcmVxdWlyZWQgZm9yIHRo ZQorCSAqIElOSEVSSVRTIGNsYXVzZS4KKwkgKi8KKwltYXhvaWRzID0gODsKKwlvaWRhcnIgPSAo T2lkICopIHBhbGxvYyhtYXhvaWRzICogc2l6ZW9mKE9pZCkpOworCW51bW9pZHMgPSAwOworCisJ cmVsYXRpb24gPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxp ZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXRE YXR1bShyZWxpZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWxhdGlvbiwgSW5o ZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisK Kwl3aGlsZSAoKGluaGVyaXRzVHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSAhPSBOVUxM KQorCXsKKwkJaW5ocGFyZW50ID0gKChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QoaW5oZXJp dHNUdXBsZSkpLT5pbmhwYXJlbnQ7CisJCWlmIChudW1vaWRzID49IG1heG9pZHMpCisJCXsKKwkJ CW1heG9pZHMgKj0gMjsKKwkJCW9pZGFyciA9IChPaWQgKikgcmVwYWxsb2Mob2lkYXJyLCBtYXhv aWRzICogc2l6ZW9mKE9pZCkpOworCQl9CisJCW9pZGFycltudW1vaWRzKytdID0gaW5ocGFyZW50 OworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisKKwl0YWJsZV9jbG9zZShyZWxhdGlv biwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogQWNxdWlyZSBsb2NrcyBhbmQgYnVpbGQg dGhlIHJlc3VsdCBsaXN0LiAgVW5saWtlCisJICogZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbiB3 ZSBkbyAqbm90KiBzb3J0IGJ5IE9JRDogY2FsbGVycyBuZWVkIHRoZQorCSAqIHNlcW5vLW9yZGVy ZWQgdHJhdmVyc2FsLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1vaWRzOyBpKyspCisJewor CQlpbmhwYXJlbnQgPSBvaWRhcnJbaV07CisKKwkJaWYgKGxvY2ttb2RlICE9IE5vTG9jaykKKwkJ eworCQkJTG9ja1JlbGF0aW9uT2lkKGluaHBhcmVudCwgbG9ja21vZGUpOworCisJCQlpZiAoIVNl YXJjaFN5c0NhY2hlRXhpc3RzMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0oaW5ocGFyZW50KSkp CisJCQl7CisJCQkJVW5sb2NrUmVsYXRpb25PaWQoaW5ocGFyZW50LCBsb2NrbW9kZSk7CisJCQkJ Y29udGludWU7CisJCQl9CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZF9vaWQobGlzdCwgaW5ocGFy ZW50KTsKKwl9CisKKwlwZnJlZShvaWRhcnIpOworCisJcmV0dXJuIGxpc3Q7Cit9CisKKwogLyoK ICAqIGZpbmRfYWxsX2luaGVyaXRvcnMgLQogICoJCVJldHVybnMgYSBsaXN0IG9mIHJlbGF0aW9u IE9JRHMgaW5jbHVkaW5nIHRoZSBnaXZlbiByZWwgcGx1cwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YwppbmRleCA5NWFiYWY0ODkwYy4uMDZhZmE2ODExZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jCkBAIC03NDYsNyArNzQ2LDYgQEAgc3RhdGljIE9iamVjdEFkZHJlc3MgQVRFeGVjU2V0Q29t cHJlc3Npb24oUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqY29sdW1uLCBO b2RlICpuZXdWYWx1ZSwgTE9DS01PREUgbG9ja21vZGUpOwogCiBzdGF0aWMgdm9pZCBpbmRleF9j b3B5X2RhdGEoUmVsYXRpb24gcmVsLCBSZWxGaWxlTG9jYXRvciBuZXdybG9jYXRvcik7Ci1zdGF0 aWMgY29uc3QgY2hhciAqc3RvcmFnZV9uYW1lKGNoYXIgYyk7CiAKIHN0YXRpYyB2b2lkIFJhbmdl VmFyQ2FsbGJhY2tGb3JEcm9wUmVsYXRpb24oY29uc3QgUmFuZ2VWYXIgKnJlbCwgT2lkIHJlbE9p ZCwKIAkJCQkJCQkJCQkJT2lkIG9sZFJlbE9pZCwgdm9pZCAqYXJnKTsKQEAgLTI1MjQsNyArMjUy Myw3IEBAIHRydW5jYXRlX2NoZWNrX2FjdGl2aXR5KFJlbGF0aW9uIHJlbCkKICAqIHN0b3JhZ2Vf bmFtZQogICoJICByZXR1cm5zIHRoZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gYSB0eXBzdG9yYWdl L2F0dHN0b3JhZ2UgZW51bSB2YWx1ZQogICovCi1zdGF0aWMgY29uc3QgY2hhciAqCitjb25zdCBj aGFyICoKIHN0b3JhZ2VfbmFtZShjaGFyIGMpCiB7CiAJc3dpdGNoIChjKQpAQCAtMTk4MzcsNiAr MTk4MzYsMzMgQEAgcmVtb3ZlX29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKQogCX0KIH0KIAor LyoKKyAqIExvb2sgdXAgdGhlIHJlZ2lzdGVyZWQgT04gQ09NTUlUIGFjdGlvbiBmb3IgYSByZWxh dGlvbi4KKyAqCisgKiBSZXR1cm5zIE9OQ09NTUlUX05PT1Agd2hlbiBub3RoaW5nIHdhcyByZWdp c3RlcmVkLCB3aGljaCBhbHNvIGNvdmVycworICogdGVtcG9yYXJ5IHRhYmxlcyBjcmVhdGVkIHdp dGggdGhlIGRlZmF1bHQgT04gQ09NTUlUIFBSRVNFUlZFIFJPV1MKKyAqIGJlaGF2aW9yIChyZWdp c3Rlcl9vbl9jb21taXRfYWN0aW9uKCkgc2tpcHMgdGhvc2UsIHNpbmNlIG5vIGFjdGlvbiBpcwor ICogbmVlZGVkIGF0IGNvbW1pdCkuICBFbnRyaWVzIG1hcmtlZCBmb3IgZGVsZXRpb24gaW4gdGhl IGN1cnJlbnQKKyAqIHRyYW5zYWN0aW9uIGFyZSBpZ25vcmVkLgorICovCitPbkNvbW1pdEFjdGlv bgorZ2V0X29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKQoreworCUxpc3RDZWxsICAgKmw7CisK Kwlmb3JlYWNoKGwsIG9uX2NvbW1pdHMpCisJeworCQlPbkNvbW1pdEl0ZW0gKm9jID0gKE9uQ29t bWl0SXRlbSAqKSBsZmlyc3QobCk7CisKKwkJaWYgKG9jLT5yZWxpZCAhPSByZWxpZCkKKwkJCWNv bnRpbnVlOworCQlpZiAob2MtPmRlbGV0aW5nX3N1YmlkICE9IEludmFsaWRTdWJUcmFuc2FjdGlv bklkKQorCQkJY29udGludWU7CisJCXJldHVybiBvYy0+b25jb21taXQ7CisJfQorCXJldHVybiBP TkNPTU1JVF9OT09QOworfQorCiAvKgogICogUGVyZm9ybSBPTiBDT01NSVQgYWN0aW9ucy4KICAq CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCmluZGV4IGE3MGYxYzI4NjU1Li5lNjU2MzNmNmZkZSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogVGhpcyBm aWxlIGNvbnRhaW5zIHRoZSBwZ19nZXRfKl9kZGwgZmFtaWx5IG9mIGZ1bmN0aW9ucyB0aGF0IGdl bmVyYXRlCiAgKiBEREwgc3RhdGVtZW50cyB0byByZWNyZWF0ZSBkYXRhYmFzZSBvYmplY3RzIHN1 Y2ggYXMgcm9sZXMsIHRhYmxlc3BhY2VzLAotICogYW5kIGRhdGFiYXNlcywgYWxvbmcgd2l0aCBj b21tb24gaW5mcmFzdHJ1Y3R1cmUgZm9yIG9wdGlvbiBwYXJzaW5nIGFuZAorICogZGF0YWJhc2Vz LCBhbmQgdGFibGVzLCBhbG9uZyB3aXRoIGNvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3IKICAqIHBy ZXR0eS1wcmludGluZy4KICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKQEAgLTIxLDMwICsyMSw5MiBAQAog I2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMu aCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfY29t cHJlc3Npb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGFydGl0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfYXV0aF9tZW1iZXJzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b2xsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYl9yb2xlX3Nl dHRpbmcuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luZGV4LmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19pbmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcG9saWN5LmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgorI2lu Y2x1ZGUgInJld3JpdGUvcmV3cml0ZURlZmluZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJl bS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3RhYmxlc3BhY2UuaCIKLSNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgogI2luY2x1ZGUgImZ1 bmNhcGkuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5oIgogI2lu Y2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCi0jaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlLmgiCiAjaW5j bHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCiAjaW5jbHVk ZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNs dWRlICJ1dGlscy92YXJsZW5hLmgiCiAKKy8qCisgKiBPYmplY3QtY2xhc3Mga2luZHMgdGhhdCB0 aGUgb25seSAvIGV4Y2VwdCBvcHRpb25zIG9uCisgKiBwZ19nZXRfdGFibGVfZGRsIGNhbiBmaWx0 ZXIgb24uICBNZW1iZXJzIGFyZSBzdG9yZWQgYXMgaW50ZWdlcnMgaW4gYQorICogQml0bWFwc2V0 IG9uIFRhYmxlRGRsQ29udGV4dC4gIEtlZXAgdGFibGVfZGRsX2tpbmRfbmFtZXNbXSBpbiBzeW5j CisgKiB3aXRoIHRoZSBvcmRlciBvZiBhZGRpdGlvbnMgaGVyZS4KKyAqLwordHlwZWRlZiBlbnVt IFRhYmxlRGRsS2luZAoreworCVRBQkxFX0RETF9LSU5EX1RBQkxFLAorCVRBQkxFX0RETF9LSU5E X0lOREVYLAorCVRBQkxFX0RETF9LSU5EX1BSSU1BUllfS0VZLAorCVRBQkxFX0RETF9LSU5EX1VO SVFVRSwKKwlUQUJMRV9ERExfS0lORF9DSEVDSywKKwlUQUJMRV9ERExfS0lORF9GT1JFSUdOX0tF WSwKKwlUQUJMRV9ERExfS0lORF9FWENMVVNJT04sCisJVEFCTEVfRERMX0tJTkRfUlVMRSwKKwlU QUJMRV9ERExfS0lORF9TVEFUSVNUSUNTLAorCVRBQkxFX0RETF9LSU5EX1RSSUdHRVIsCisJVEFC TEVfRERMX0tJTkRfUE9MSUNZLAorCVRBQkxFX0RETF9LSU5EX1JMUywKKwlUQUJMRV9ERExfS0lO RF9SRVBMSUNBX0lERU5USVRZLAorCVRBQkxFX0RETF9LSU5EX1BBUlRJVElPTiwKK30JCQlUYWJs ZURkbEtpbmQ7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKK3sKKwljb25zdCBjaGFyICpuYW1lOwor CVRhYmxlRGRsS2luZCBraW5kOworfQkJCXRhYmxlX2RkbF9raW5kX25hbWVzW10gPQoreworCXsi dGFibGUiLCBUQUJMRV9ERExfS0lORF9UQUJMRX0sCisJeyJpbmRleCIsIFRBQkxFX0RETF9LSU5E X0lOREVYfSwKKwl7InByaW1hcnlfa2V5IiwgVEFCTEVfRERMX0tJTkRfUFJJTUFSWV9LRVl9LAor CXsidW5pcXVlIiwgVEFCTEVfRERMX0tJTkRfVU5JUVVFfSwKKwl7ImNoZWNrIiwgVEFCTEVfRERM X0tJTkRfQ0hFQ0t9LAorCXsiZm9yZWlnbl9rZXkiLCBUQUJMRV9ERExfS0lORF9GT1JFSUdOX0tF WX0sCisJeyJleGNsdXNpb24iLCBUQUJMRV9ERExfS0lORF9FWENMVVNJT059LAorCXsicnVsZSIs IFRBQkxFX0RETF9LSU5EX1JVTEV9LAorCXsic3RhdGlzdGljcyIsIFRBQkxFX0RETF9LSU5EX1NU QVRJU1RJQ1N9LAorCXsidHJpZ2dlciIsIFRBQkxFX0RETF9LSU5EX1RSSUdHRVJ9LAorCXsicG9s aWN5IiwgVEFCTEVfRERMX0tJTkRfUE9MSUNZfSwKKwl7InJscyIsIFRBQkxFX0RETF9LSU5EX1JM U30sCisJeyJyZXBsaWNhX2lkZW50aXR5IiwgVEFCTEVfRERMX0tJTkRfUkVQTElDQV9JREVOVElU WX0sCisJeyJwYXJ0aXRpb24iLCBUQUJMRV9ERExfS0lORF9QQVJUSVRJT059LAorfTsKKworc3Rh dGljIEJpdG1hcHNldCAqcGFyc2Vfa2luZF9hcnJheShjb25zdCBjaGFyICpwYXJhbW5hbWUsIEFy cmF5VHlwZSAqYXJyKTsKIHN0YXRpYyB2b2lkIGFwcGVuZF9kZGxfb3B0aW9uKFN0cmluZ0luZm8g YnVmLCBib29sIHByZXR0eSwgaW50IGluZGVudCwKIAkJCQkJCQkgIGNvbnN0IGNoYXIgKmZtdCwg Li4uKQogCQkJcGdfYXR0cmlidXRlX3ByaW50Zig0LCA1KTsKQEAgLTU3LDYgKzExOSwxOTYgQEAg c3RhdGljIERhdHVtIHBnX2dldF90YWJsZXNwYWNlX2RkbF9zcmYoRnVuY3Rpb25DYWxsSW5mbyBm Y2luZm8sIE9pZCB0c2lkKTsKIHN0YXRpYyBMaXN0ICpwZ19nZXRfZGF0YWJhc2VfZGRsX2ludGVy bmFsKE9pZCBkYmlkLCBib29sIHByZXR0eSwKIAkJCQkJCQkJCQkgIGJvb2wgbm9fb3duZXIsIGJv b2wgbm9fdGFibGVzcGFjZSk7CiAKKy8qCisgKiBQZXItY29sdW1uIGNhY2hlIG9mIGxvY2FsbHkt ZGVjbGFyZWQgTk9UIE5VTEwgY29uc3RyYWludHMuICBCdWlsdCBvbmNlCisgKiBieSBjb2xsZWN0 X2xvY2FsX25vdF9udWxsKCkgYW5kIGNvbnN1bHRlZCBieSB0aGUgY29sdW1uLWVtaXQgaGVscGVy cworICogYW5kIHRoZSBwb3N0LUNSRUFURSBjb25zdHJhaW50IGxvb3AuICBFbnRyaWVzIHdpdGgg Y29ub2lkID09IEludmFsaWRPaWQKKyAqIG1lYW4gdGhlIGNvbHVtbiBoYXMgbm8gbG9jYWwgTk9U IE5VTEwgY29uc3RyYWludCByb3cgaW4gcGdfY29uc3RyYWludAorICogKHRoZSBjb2x1bW4gbWF5 IHN0aWxsIGhhdmUgYXR0bm90bnVsbD10cnVlIG9uIGEgcHJlLVBHLTE4LXVwZ3JhZGVkCisgKiBj YXRhbG9nLCBpbiB3aGljaCBjYXNlIGVtaXQgcGxhaW4gaW5saW5lIE5PVCBOVUxMKS4KKyAqCisg KiBpbmhlcml0ZWRfbm90bnVsbCBpcyBzZXQgd2hlbiBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgcm93 IGV4aXN0cyBpbgorICogcGdfY29uc3RyYWludCBidXQgY29uaXNsb2NhbD1mYWxzZSAocHVyZWx5 IGluaGVyaXRlZCkuICBJbiB0aGF0IGNhc2UKKyAqIHRoZSBOT1QgTlVMTCBtdXN0IG5vdCBiZSBl bWl0dGVkIGluIHRoZSBjb2x1bW4gbGlzdDogdGhlIElOSEVSSVRTIC8KKyAqIFBBUlRJVElPTiBP RiBjbGF1c2UgYWxyZWFkeSBwcm9wYWdhdGVzIGl0LCBhbmQgZW1pdHRpbmcgaXQgaGVyZSB3b3Vs ZAorICogZmxpcCBjb25pc2xvY2FsIHRvIHRydWUgb24gcmVwbGF5LgorICovCit0eXBlZGVmIHN0 cnVjdCBMb2NhbE5vdE51bGxFbnRyeQoreworCU9pZAkJCWNvbm9pZDsKKwljaGFyCSAgICpuYW1l OworCWJvb2wJCWlzX2F1dG87CQkvKiBtYXRjaGVzICI8dGFibGU+Xzxjb2w+X25vdF9udWxsIiAq LworCWJvb2wJCW5vX2luaGVyaXQ7CisJYm9vbAkJaW5oZXJpdGVkX25vdG51bGw7CS8qIHJvdyBl eGlzdHMgYnV0IGNvbmlzbG9jYWw9ZmFsc2UgKi8KK30JCQlMb2NhbE5vdE51bGxFbnRyeTsKKwor LyoKKyAqIFdvcmtpbmcgY29udGV4dCB0aHJlYWRlZCB0aHJvdWdoIHRoZSBwZXItcGFzcyBoZWxw ZXJzIGJlbG93LiAgSW5wdXRzCisgKiAoY2FsbGVyLXByb3ZpZGVkIG9wdGlvbiBmbGFncykgYXJl IGZpbGxlZCBpbiBvbmNlIGF0IHRoZSB0b3Agb2YKKyAqIHBnX2dldF90YWJsZV9kZGxfaW50ZXJu YWwgYW5kIHRyZWF0ZWQgYXMgcmVhZC1vbmx5IHRoZXJlYWZ0ZXIuICBEZXJpdmVkCisgKiBmaWVs ZHMgKHF1YWxuYW1lLCBubl9lbnRyaWVzLCBza2lwX25vdG51bGxfb2lkcykgYXJlIGNvbXB1dGVk IG9uY2UKKyAqIGR1cmluZyBzZXR1cC4gIEVhY2ggcGFzcyBhcHBlbmRzIHRvIGN0eC0+YnVmIGFu ZCBwdXNoZXMgdGhlIGZpbmlzaGVkCisgKiBzdGF0ZW1lbnQgb250byBjdHgtPnN0YXRlbWVudHMg dmlhIGFwcGVuZF9zdG10KCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IFRhYmxlRGRsQ29udGV4dAor eworCVJlbGF0aW9uCXJlbDsKKwlPaWQJCQlyZWxpZDsKKwlib29sCQlwcmV0dHk7CisJYm9vbAkJ bm9fb3duZXI7CisJYm9vbAkJbm9fdGFibGVzcGFjZTsKKwlib29sCQlzY2hlbWFfcXVhbGlmaWVk OworCisJLyoKKwkgKiBPYmplY3QtY2xhc3MgZmlsdGVyaW5nLiAgSWYgb25seV9raW5kcyBpcyBu b24tTlVMTCwgb25seSB0aGUKKwkgKiBraW5kcyBpbiB0aGF0IHNldCBhcmUgZW1pdHRlZDsgaWYg ZXhjZXB0X2tpbmRzIGlzIG5vbi1OVUxMLCBhbGwKKwkgKiBraW5kcyAqZXhjZXB0KiB0aG9zZSBp biB0aGF0IHNldCBhcmUgZW1pdHRlZDsgaWYgYm90aCBhcmUgTlVMTCwKKwkgKiBldmVyeSBraW5k IGlzIGVtaXR0ZWQgKHRoZSBkZWZhdWx0KS4gIFRoZSB0d28gYXJlIG11dHVhbGx5CisJICogZXhj bHVzaXZlIGF0IHRoZSB1c2VyLWZhY2luZyBsYXllciAodGhlIFNSRiBlbnRyeSByZWplY3RzCisJ ICogc3BlY2lmeWluZyBib3RoKS4KKwkgKi8KKwlCaXRtYXBzZXQgICpvbmx5X2tpbmRzOworCUJp dG1hcHNldCAgKmV4Y2VwdF9raW5kczsKKworCS8qIERlcml2ZWQgZHVyaW5nIHNldHVwICovCisJ T2lkCQkJYmFzZV9uYW1lc3BhY2U7CisJY2hhcgkgICAqcXVhbG5hbWU7CisJaW50CQkJc2F2ZV9u ZXN0bGV2ZWw7IC8qID49IDAgaWYgd2UgbmFycm93ZWQgc2VhcmNoX3BhdGggKi8KKwlMb2NhbE5v dE51bGxFbnRyeSAqbm5fZW50cmllczsKKwlMaXN0CSAgICpza2lwX25vdG51bGxfb2lkczsKKwor CS8qIE11dGFibGUgd29ya2luZyBzdGF0ZSAqLworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlMaXN0 CSAgICpzdGF0ZW1lbnRzOworfQkJCVRhYmxlRGRsQ29udGV4dDsKKworc3RhdGljIExpc3QgKnBn X2dldF90YWJsZV9kZGxfaW50ZXJuYWwoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIGJv b2wgaXNfa2luZF9pbmNsdWRlZChjb25zdCBUYWJsZURkbENvbnRleHQgKmN0eCwgVGFibGVEZGxL aW5kIGtpbmQpOworc3RhdGljIHZvaWQgYXBwZW5kX2NvbHVtbl9kZWZzKFN0cmluZ0luZm8gYnVm LCBSZWxhdGlvbiByZWwsIGJvb2wgcHJldHR5LAorCQkJCQkJCSAgIGJvb2wgaW5jbHVkZV9jaGVj aywKKwkJCQkJCQkgICBib29sIHNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJICAgTG9jYWxOb3RO dWxsRW50cnkgKm5uX2VudHJpZXMpOworc3RhdGljIHZvaWQgYXBwZW5kX3R5cGVkX2NvbHVtbl9v dmVycmlkZXMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkgIGJvb2wg cHJldHR5LCBib29sIGluY2x1ZGVfY2hlY2ssCisJCQkJCQkJCQkJICBMb2NhbE5vdE51bGxFbnRy eSAqbm5fZW50cmllcyk7CitzdGF0aWMgdm9pZCBhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFp bnRzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJCWJvb2wgcHJldHR5 LCBib29sICpmaXJzdCk7CitzdGF0aWMgY2hhciAqZmluZF9hdHRyZGVmX3RleHQoUmVsYXRpb24g cmVsLCBBdHRyTnVtYmVyIGF0dG51bSwKKwkJCQkJCQkgICBMaXN0ICoqZHBjb250ZXh0KTsKK3N0 YXRpYyBib29sIGNoaWxkX2RlZmF1bHRfaW5oZXJpdGVkX2Zyb21fcGFyZW50KE9pZCBjaGlsZE9p ZCwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICphdHRuYW1lLAorCQkJCQkJCQkJCQkJIGNvbnN0 IGNoYXIgKmNoaWxkX2FkYmluKTsKK3N0YXRpYyBjaGFyICpsb29rdXBfcmVsbmFtZV9mb3JfZW1p dChPaWQgcmVsaWQsIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCSBPaWQgYmFzZV9u YW1lc3BhY2UpOworc3RhdGljIExvY2FsTm90TnVsbEVudHJ5ICpjb2xsZWN0X2xvY2FsX25vdF9u dWxsKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCSAgTGlzdCAqKnNraXBfb2lkcyk7CitzdGF0 aWMgYm9vbCBwYXJlbnRfaGFzX2RlZmF1bHRfZm9yX2NvbChPaWQgY2hpbGRPaWQsIGNvbnN0IGNo YXIgKmF0dG5hbWUpOworCitzdGF0aWMgdm9pZCBhcHBlbmRfc3RtdChUYWJsZURkbENvbnRleHQg KmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4 dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfb3duZXJfc3RtdChUYWJsZURkbENvbnRleHQgKmN0 eCk7CitzdGF0aWMgdm9pZCBlbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzKFRhYmxlRGRsQ29u dGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfYXR0b3B0aW9ucyhUYWJsZURkbENvbnRleHQg KmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3R5cGVkX2NvbHVtbl9zdG9yYWdlKFRhYmxlRGRsQ29u dGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfaW5kZXhlcyhUYWJsZURkbENvbnRleHQgKmN0 eCk7CitzdGF0aWMgdm9pZCBlbWl0X2NsdXN0ZXJfb24oVGFibGVEZGxDb250ZXh0ICpjdHgpOwor c3RhdGljIHZvaWQgZW1pdF9sb2NhbF9jb25zdHJhaW50cyhUYWJsZURkbENvbnRleHQgKmN0eCk7 CitzdGF0aWMgdm9pZCBlbWl0X3J1bGVzKFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2 b2lkIGVtaXRfc3RhdGlzdGljcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBl bWl0X3JlcGxpY2FfaWRlbnRpdHkoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQg ZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0 X3BhcnRpdGlvbl9jaGlsZHJlbihUYWJsZURkbENvbnRleHQgKmN0eCk7CisKKworLyoKKyAqIHBh cnNlX2tpbmRfYXJyYXkKKyAqCQlQYXJzZSBhIHRleHRbXSBvZiBvYmplY3QtY2xhc3Mga2luZCBu YW1lcyBpbnRvIGEgQml0bWFwc2V0IG9mCisgKgkJVGFibGVEZGxLaW5kIHZhbHVlcy4KKyAqCisg KiBFYWNoIGVsZW1lbnQgaXMgbWF0Y2hlZCBjYXNlLWluc2Vuc2l0aXZlbHk7IHN1cnJvdW5kaW5n IHdoaXRlc3BhY2UgaXMKKyAqIHN0cmlwcGVkLiAgTlVMTCBlbGVtZW50cyBhcmUgcmVqZWN0ZWQu ICBVbmtub3duIGtpbmQgbmFtZXMgcmFpc2UgYW4gZXJyb3IKKyAqIGNpdGluZyB0aGUgc3VwcGxp ZWQgcGFyYW1ldGVyIG5hbWUuICBBbiBlbXB0eSBhcnJheSBpcyBhbHNvIHJlamVjdGVkLgorICog RHVwbGljYXRlIGVudHJpZXMgYXJlIHNpbGVudGx5IGRlLWR1cGxpY2F0ZWQgYnkgdGhlIEJpdG1h cHNldC4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitwYXJzZV9raW5kX2FycmF5KGNvbnN0IGNo YXIgKnBhcmFtbmFtZSwgQXJyYXlUeXBlICphcnIpCit7CisJRGF0dW0JICAgKmVsZW1zOworCWJv b2wJICAgKm51bGxzOworCWludAkJCW5lbGVtczsKKwlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxM OworCisJZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihhcnIsIFRFWFRPSUQsICZlbGVtcywgJm51 bGxzLCAmbmVsZW1zKTsKKworCWlmIChuZWxlbXMgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNn KCJwYXJhbWV0ZXIgXCIlc1wiIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUga2luZCIsCisJCQkJ CQlwYXJhbW5hbWUpKSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5lbGVtczsgaSsrKQorCXsK KwkJY2hhcgkgICAqcmF3OworCQljaGFyCSAgICp0b2tlbjsKKwkJY2hhcgkgICAqZW5kOworCQli b29sCQlmb3VuZCA9IGZhbHNlOworCisJCWlmIChudWxsc1tpXSkKKwkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkg ZXJybXNnKCJwYXJhbWV0ZXIgXCIlc1wiIG11c3Qgbm90IGNvbnRhaW4gTlVMTCBlbGVtZW50cyIs CisJCQkJCQkJcGFyYW1uYW1lKSkpOworCisJCXJhdyA9IHRleHRfdG9fY3N0cmluZyhEYXR1bUdl dFRleHRQUChlbGVtc1tpXSkpOworCisJCS8qIFRyaW0gbGVhZGluZyB3aGl0ZXNwYWNlLiAqLwor CQl0b2tlbiA9IHJhdzsKKwkJd2hpbGUgKCp0b2tlbiA9PSAnICcgfHwgKnRva2VuID09ICdcdCcp CisJCQl0b2tlbisrOworCisJCS8qIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi8KKwkJZW5k ID0gdG9rZW4gKyBzdHJsZW4odG9rZW4pOworCQl3aGlsZSAoZW5kID4gdG9rZW4gJiYgKGVuZFst MV0gPT0gJyAnIHx8IGVuZFstMV0gPT0gJ1x0JykpCisJCQllbmQtLTsKKwkJKmVuZCA9ICdcMCc7 CisKKwkJZm9yIChzaXplX3QgaiA9IDA7IGogPCBsZW5ndGhvZih0YWJsZV9kZGxfa2luZF9uYW1l cyk7IGorKykKKwkJeworCQkJaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIHRhYmxlX2RkbF9raW5k X25hbWVzW2pdLm5hbWUpID09IDApCisJCQl7CisJCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIo cmVzdWx0LAorCQkJCQkJCQkJCShpbnQpIHRhYmxlX2RkbF9raW5kX25hbWVzW2pdLmtpbmQpOwor CQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGtpbmQgXCIlc1wiIGluIHBh cmFtZXRlciBcIiVzXCIiLAorCQkJCQkJCXRva2VuLCBwYXJhbW5hbWUpKSk7CisKKwkJcGZyZWUo cmF3KTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogaXNfa2luZF9pbmNsdWRl ZAorICoJCURldGVybWluZSB3aGV0aGVyIERETCBmb3IgdGhlIGdpdmVuIG9iamVjdC1jbGFzcyBr aW5kIHNob3VsZCBiZQorICoJCWVtaXR0ZWQgdW5kZXIgdGhlIGN1cnJlbnQgb3B0aW9ucy4KKyAq Lworc3RhdGljIGJvb2wKK2lzX2tpbmRfaW5jbHVkZWQoY29uc3QgVGFibGVEZGxDb250ZXh0ICpj dHgsIFRhYmxlRGRsS2luZCBraW5kKQoreworCWlmIChjdHgtPm9ubHlfa2luZHMgIT0gTlVMTCkK KwkJcmV0dXJuIGJtc19pc19tZW1iZXIoKGludCkga2luZCwgY3R4LT5vbmx5X2tpbmRzKTsKKwlp ZiAoY3R4LT5leGNlcHRfa2luZHMgIT0gTlVMTCkKKwkJcmV0dXJuICFibXNfaXNfbWVtYmVyKChp bnQpIGtpbmQsIGN0eC0+ZXhjZXB0X2tpbmRzKTsKKwlyZXR1cm4gdHJ1ZTsKK30KIAogLyoKICAq IEhlbHBlciB0byBhcHBlbmQgYSBmb3JtYXR0ZWQgc3RyaW5nIHdpdGggb3B0aW9uYWwgcHJldHR5 LXByaW50aW5nLgpAQCAtOTc1LDMgKzEyMjcsMjQwNSBAQCBwZ19nZXRfZGF0YWJhc2VfZGRsKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKIAl9CiB9CisKKy8q CisgKiBsb29rdXBfcmVsbmFtZV9mb3JfZW1pdAorICoJCVJldHVybiBlaXRoZXIgdGhlIHNjaGVt YS1xdWFsaWZpZWQgb3IgdGhlIGJhcmUgcXVvdGVkIG5hbWUgb2YgYQorICoJCXJlbGF0aW9uLCBk ZXBlbmRpbmcgb24gdGhlIHNjaGVtYV9xdWFsaWZpZWQgZmxhZy4KKyAqCisgKiBUZW1wb3Jhcnkg cmVsYXRpb25zIGFyZSBuZXZlciBzY2hlbWEtcXVhbGlmaWVkIHJlZ2FyZGxlc3Mgb2YKKyAqIHNj aGVtYV9xdWFsaWZpZWQ6IHRoZSBURU1QT1JBUlkga2V5d29yZCBpbiBDUkVBVEUgVEVNUE9SQVJZ IFRBQkxFCisgKiBhbHJlYWR5IHBsYWNlcyB0aGUgdGFibGUgaW4gdGhlIHNlc3Npb24ncyB0ZW1w IHNjaGVtYSwgc28gZW1pdHRpbmcKKyAqIHBnX3RlbXBfTk4ucmVsbmFtZSB3b3VsZCBwcm9kdWNl IERETCB0aGF0IGNhbm5vdCBiZSByZXBsYXllZC4KKyAqCisgKiBXaGVuIHNjaGVtYV9xdWFsaWZp ZWQgaXMgdHJ1ZSB0aGUgc2NoZW1hLXF1YWxpZmllZCBuYW1lIGlzIGFsd2F5cworICogcmV0dXJu ZWQgZm9yIG5vbi10ZW1wb3JhcnkgcmVsYXRpb25zLiAgV2hlbiBmYWxzZSwgdGhlIGJhcmUgcmVs bmFtZQorICogaXMgcmV0dXJuZWQgb25seSBpZiB0aGUgdGFyZ2V0IHJlbGF0aW9uIGxpdmVzIGlu IGJhc2VfbmFtZXNwYWNlICh0aGUKKyAqIG5hbWVzcGFjZSBvZiB0aGUgdGFibGUgd2hvc2UgRERM IGlzIGJlaW5nIGdlbmVyYXRlZCk7IG90aGVyd2lzZSB0aGUKKyAqIHNjaGVtYS1xdWFsaWZpZWQg Zm9ybSBpcyByZXR1cm5lZCwgYmVjYXVzZSBjcm9zcy1zY2hlbWEgcmVmZXJlbmNlcworICogKGZv ciBleGFtcGxlIGFuIGluaGVyaXRhbmNlIHBhcmVudCBvciBmb3JlaWduIGtleSB0YXJnZXQgaW4g YQorICogZGlmZmVyZW50IHNjaGVtYSkgYXJlIG5vdCBzYWZlIHRvIG9taXQuCisgKgorICogVGhp cyByZXBsYWNlcyB0aGUgdW5zYWZlIHBhdHRlcm4KKyAqCSAgcXVvdGVfcXVhbGlmaWVkX2lkZW50 aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKG9pZCkpLAorICoJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcmVsX25hbWUob2lkKSkKKyAqIHdoaWNoIGRl cmVmZXJlbmNlcyBOVUxMIHdoZW4gYSBjb25jdXJyZW50IHRyYW5zYWN0aW9uIGhhcyBkcm9wcGVk IHRoZQorICogcmVmZXJlbmNlZCByZWxhdGlvbiAob3IgaXRzIHNjaGVtYSkgYmV0d2VlbiB3aGVu IHdlIGNhY2hlZCBpdHMgT0lEIGFuZAorICogd2hlbiB3ZSBhc2sgdGhlIHN5c2NhY2hlIGZvciBp dHMgbmFtZS4gIEhvbGRpbmcgQWNjZXNzU2hhcmVMb2NrIG9uIGEKKyAqIGRlcGVuZGVudCByZWxh dGlvbiBtYWtlcyB0aGlzIHJhY2UgdmFuaXNoaW5nbHkgdW5saWtlbHkgaW4gcHJhY3RpY2UsIGJ1 dAorICogd2Ugc3RpbGwgZGVmZW5kIGFnYWluc3QgaXQgYmVjYXVzZSB0aGUgYWx0ZXJuYXRpdmUg aXMgYSBTSUdTRUdWLgorICoKKyAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcGZyZWUoKWlu ZyB0aGUgcmVzdWx0LgorICovCitzdGF0aWMgY2hhciAqCitsb29rdXBfcmVsbmFtZV9mb3JfZW1p dChPaWQgcmVsaWQsIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwgT2lkIGJhc2VfbmFtZXNwYWNlKQor eworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX2NsYXNzIHJlbHR1cDsKKwljaGFyCSAgICpuc3Bu YW1lOworCWNoYXIJICAgKnJlc3VsdDsKKworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwg T2JqZWN0SWRHZXREYXR1bShyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwK KwkJCQkgZXJybXNnKCJyZWxhdGlvbiB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIHJlbGlk KSwKKwkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVk LiIpKSk7CisKKwlyZWx0dXAgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHRwKTsKKworCS8q CisJICogVGVtcG9yYXJ5IHJlbGF0aW9ucyBhcmUgbmV2ZXIgc2NoZW1hLXF1YWxpZmllZDogdGhl IFRFTVBPUkFSWSBrZXl3b3JkCisJICogYWxyZWFkeSBwbGFjZXMgdGhlbSBpbiBwZ190ZW1wLCBh bmQgcGdfdGVtcF9OTi5yZWxuYW1lIGNhbm5vdCBiZQorCSAqIHJlcGxheWVkIGluIGFueSBvdGhl ciBzZXNzaW9uLgorCSAqLworCWlmIChpc1RlbXBOYW1lc3BhY2UocmVsdHVwLT5yZWxuYW1lc3Bh Y2UpKQorCXsKKwkJcmVzdWx0ID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIocmVs dHVwLT5yZWxuYW1lKSkpOworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQlyZXR1cm4gcmVzdWx0 OworCX0KKworCS8qIEJhcmUgbmFtZSBvbmx5IHdoZW4gY2FsbGVyIGFza2VkIGFuZCB0YXJnZXQg aXMgaW4gdGhlIGJhc2UgbmFtZXNwYWNlLiAqLworCWlmICghc2NoZW1hX3F1YWxpZmllZCAmJiBy ZWx0dXAtPnJlbG5hbWVzcGFjZSA9PSBiYXNlX25hbWVzcGFjZSkKKwl7CisJCXJlc3VsdCA9IHBz dHJkdXAocXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKHJlbHR1cC0+cmVsbmFtZSkpKTsKKwkJUmVs ZWFzZVN5c0NhY2hlKHRwKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwluc3BuYW1lID0gZ2V0 X25hbWVzcGFjZV9uYW1lKHJlbHR1cC0+cmVsbmFtZXNwYWNlKTsKKwlpZiAobnNwbmFtZSA9PSBO VUxMKQorCXsKKwkJT2lkCQkJbnNwb2lkID0gcmVsdHVwLT5yZWxuYW1lc3BhY2U7CisKKwkJUmVs ZWFzZVN5c0NhY2hlKHRwKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coInNjaGVtYSB3aXRoIE9JRCAldSBkb2Vz IG5vdCBleGlzdCIsIG5zcG9pZCksCisJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBj b25jdXJyZW50bHkgZHJvcHBlZC4iKSkpOworCX0KKworCXJlc3VsdCA9IHF1b3RlX3F1YWxpZmll ZF9pZGVudGlmaWVyKG5zcG5hbWUsIE5hbWVTdHIocmVsdHVwLT5yZWxuYW1lKSk7CisKKwlwZnJl ZShuc3BuYW1lKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyoKKyAqIGNvbGxlY3RfbG9jYWxfbm90X251bGwKKyAqCQlTY2FuIHBnX2NvbnN0cmFpbnQg b25jZSBmb3IgbG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBjb25zdHJhaW50cworICoJCW9uIHJl bCwgcmV0dXJuaW5nIGEgcGFsbG9jJ2QgYXJyYXkgaW5kZXhlZCBieSBhdHRudW0gKDEuLm5hdHRz KS4KKyAqCisgKiBFbnRyaWVzIHdpdGggY29ub2lkPT1JbnZhbGlkT2lkIG1lYW4gIm5vIGxvY2Fs IE5PVCBOVUxMIHJvdyBmb3IgdGhpcworICogY29sdW1uIi4gIFdoZW4gdGhlIGNvbnN0cmFpbnQg bmFtZSBkb2VzIG5vdCBtYXRjaCB0aGUgYXV0by1nZW5lcmF0ZWQKKyAqIHBhdHRlcm4gIjx0YWJs ZW5hbWU+Xzxjb2x1bW5uYW1lPl9ub3RfbnVsbCIsIHRoZSBjb25zdHJhaW50IE9JRCBpcworICog YXBwZW5kZWQgdG8gKnNraXBfb2lkcyBzbyB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludCBsb29w IGNhbiBhdm9pZAorICogcmUtZW1pdHRpbmcgaXQgYXMgQUxURVIgVEFCTEUgLi4uIEFERCBDT05T VFJBSU5UIC0gdGhlIGNvbHVtbi1lbWl0CisgKiBwYXNzIHdpbGwgcHJvZHVjZSBpdCBpbmxpbmUg YXMgIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgaW5zdGVhZC4KKyAqLworc3RhdGljIExvY2Fs Tm90TnVsbEVudHJ5ICoKK2NvbGxlY3RfbG9jYWxfbm90X251bGwoUmVsYXRpb24gcmVsLCBMaXN0 ICoqc2tpcF9vaWRzKQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihy ZWwpOworCWludAkJCW5hdHRzID0gdHVwZGVzYy0+bmF0dHM7CisJTG9jYWxOb3ROdWxsRW50cnkg KmVudHJpZXM7CisJY29uc3QgY2hhciAqcmVsbmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCk7CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2Nhbktl eURhdGEgY29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisKKwllbnRyaWVzID0gKExvY2FsTm90 TnVsbEVudHJ5ICopIHBhbGxvYzAoc2l6ZW9mKExvY2FsTm90TnVsbEVudHJ5KSAqCisJCQkJCQkJ CQkJCShuYXR0cyArIDEpKTsKKworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0 aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQlBbnVt X3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09J REVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSk7CisJY29u U2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFt ZUluZGV4SWQsCisJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmY29uS2V5KTsKKworCXdoaWxlIChI ZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQoY29uU2NhbikpKQorCXsK KwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVD VChjb25UdXApOworCQlEYXR1bQkJY29ua2V5RGF0OworCQlib29sCQljb25rZXlOdWxsOworCQlB cnJheVR5cGUgICpjb25rZXlBcnI7CisJCWludDE2CSAgICpjb25rZXlWYWxzOworCQlpbnQJCQlh dHRudW07CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJY2hhcgkgICAqYXV0b25hbWU7CisK KwkJaWYgKGNvbi0+Y29udHlwZSAhPSBDT05TVFJBSU5UX05PVE5VTEwpCisJCQljb250aW51ZTsK KworCQljb25rZXlEYXQgPSBoZWFwX2dldGF0dHIoY29uVHVwLCBBbnVtX3BnX2NvbnN0cmFpbnRf Y29ua2V5LAorCQkJCQkJCQkgUmVsYXRpb25HZXREZXNjcihjb25SZWwpLCAmY29ua2V5TnVsbCk7 CisJCWlmIChjb25rZXlOdWxsKQorCQkJY29udGludWU7CisJCWNvbmtleUFyciA9IERhdHVtR2V0 QXJyYXlUeXBlUChjb25rZXlEYXQpOworCisJCS8qCisJCSAqIERlZmVuZCBhZ2FpbnN0IGEgbWFs Zm9ybWVkIGNvbmtleTogYSBOT1QgTlVMTCBjb25zdHJhaW50IGlzIGFsd2F5cworCQkgKiBhIHNp bmdsZS1jb2x1bW4gMS1EIGludDIgYXJyYXksIGJ1dCBhIGNvcnJ1cHRlZCBjYXRhbG9nIG9yIGEg ZnV0dXJlCisJCSAqIHBhdGNoIHRoYXQgc3RvcmVzIHdpZGVyIGNvbmtleXMgbXVzdG4ndCB0cmlw IHVzIGludG8gcmVhZGluZyBwYXN0CisJCSAqIHRoZSBhcnJheSBoZWFkZXIuCisJCSAqLworCQlp ZiAoQVJSX05ESU0oY29ua2V5QXJyKSAhPSAxIHx8CisJCQlBUlJfRElNUyhjb25rZXlBcnIpWzBd IDwgMSB8fAorCQkJQVJSX0hBU05VTEwoY29ua2V5QXJyKSB8fAorCQkJQVJSX0VMRU1UWVBFKGNv bmtleUFycikgIT0gSU5UMk9JRCkKKwkJCWNvbnRpbnVlOworCisJCWNvbmtleVZhbHMgPSAoaW50 MTYgKikgQVJSX0RBVEFfUFRSKGNvbmtleUFycik7CisJCWF0dG51bSA9IGNvbmtleVZhbHNbMF07 CisJCWlmIChhdHRudW0gPCAxIHx8IGF0dG51bSA+IG5hdHRzKQorCQkJY29udGludWU7CisKKwkJ LyoKKwkJICogSW5oZXJpdGVkLW9ubHkgY29uc3RyYWludDogcmVjb3JkIHRoZSBmYWN0IHNvIGNv bHVtbi1lbWl0IGhlbHBlcnMKKwkJICogY2FuIHN1cHByZXNzIGlubGluZSBOT1QgTlVMTCAodGhl IHBhcmVudCdzIElOSEVSSVRTIGNsYXVzZSBhbHJlYWR5CisJCSAqIHByb3BhZ2F0ZXMgaXQ7IHJl LWVtaXR0aW5nIGl0IHdvdWxkIGZsaXAgY29uaXNsb2NhbCB0byB0cnVlIG9uCisJCSAqIHJlcGxh eSkuCisJCSAqLworCQlpZiAoIWNvbi0+Y29uaXNsb2NhbCkKKwkJeworCQkJZW50cmllc1thdHRu dW1dLmluaGVyaXRlZF9ub3RudWxsID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYXR0 ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBhdHRudW0gLSAxKTsKKwkJYXV0b25hbWUgPSBtYWtl T2JqZWN0TmFtZShyZWxuYW1lLCBOYW1lU3RyKGF0dC0+YXR0bmFtZSksICJub3RfbnVsbCIpOwor CisJCWVudHJpZXNbYXR0bnVtXS5jb25vaWQgPSBjb24tPm9pZDsKKwkJZW50cmllc1thdHRudW1d Lm5hbWUgPSBwc3RyZHVwKE5hbWVTdHIoY29uLT5jb25uYW1lKSk7CisJCWVudHJpZXNbYXR0bnVt XS5pc19hdXRvID0gKHN0cmNtcChOYW1lU3RyKGNvbi0+Y29ubmFtZSksIGF1dG9uYW1lKSA9PSAw KTsKKwkJZW50cmllc1thdHRudW1dLm5vX2luaGVyaXQgPSBjb24tPmNvbm5vaW5oZXJpdDsKKwkJ cGZyZWUoYXV0b25hbWUpOworCisJCS8qCisJCSAqIFRyYWNrIHdoaWNoIE5PVCBOVUxMIE9JRHMg bXVzdCBub3QgYmUgcmUtZW1pdHRlZCBvdXQtb2YtbGluZSBieQorCQkgKiBlbWl0X2xvY2FsX2Nv bnN0cmFpbnRzOgorCQkgKgorCQkgKiAtIEZvciBhdHRpc2xvY2FsIGNvbHVtbnM6IHRoZSBpbmxp bmUgcGFzcyBpbiBhcHBlbmRfY29sdW1uX2RlZnMKKwkJICogICBtYXRlcmlhbGl6ZXMgdGhlIGNv bnN0cmFpbnQ7IGEgc2Vjb25kIEFMVEVSIFRBQkxFIHdvdWxkIGNvbGxpZGUuCisJCSAqCisJCSAq IC0gRm9yIGluaGVyaXRlZCBjb2x1bW5zIHdpdGggYSB1c2VyLWRlZmluZWQgbmFtZSAoIWlzX2F1 dG8pOgorCQkgKiAgIGVtaXRfY3JlYXRlX3RhYmxlX3N0bXQgZW1pdHMgdGhlc2UgYXMgdGFibGUt bGV2ZWwgQ09OU1RSQUlOVAorCQkgKiAgIGNsYXVzZXMgaW4gdGhlIENSRUFURSBUQUJMRSBvciBQ QVJUSVRJT04gT0YgYm9keSBzbyB0aGUgbmFtZSBpcworCQkgKiAgIHByZXNlcnZlZCB3aGVuIHRo ZSBpbmhlcml0ZWQgTk9UIE5VTEwgaXMgZXN0YWJsaXNoZWQuICBBbgorCQkgKiAgIG91dC1vZi1s aW5lIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUKKwkJ ICogICBhbHJlYWR5LXByb3BhZ2F0ZWQgaW5oZXJpdGVkIE5PVCBOVUxMLgorCQkgKgorCQkgKiAt IEZvciBpbmhlcml0ZWQgY29sdW1ucyB3aXRoIGFuIGF1dG8tbmFtZSBvbiBhIHBhcnRpdGlvbiBj aGlsZDoKKwkJICogICBQQVJUSVRJT04gT0YgcmUtY3JlYXRlcyBhbiBlcXVpdmFsZW50IGNvbnN0 cmFpbnQgKHBvc3NpYmx5IHVuZGVyCisJCSAqICAgdGhlIHBhcmVudC1kZXJpdmVkIG5hbWUpLCBt YWtpbmcgdGhlIG91dC1vZi1saW5lIEFMVEVSIFRBQkxFCisJCSAqICAgcmVkdW5kYW50IGFuZCBj b2xsaXNpb24tcHJvbmUuICBTdXBwcmVzcyBpdDsgdGhlIGF1dG8tbmFtZQorCQkgKiAgIGNoYW5n ZSBpcyBhY2NlcHRhYmxlLgorCQkgKgorCQkgKiBGb3IgaW5oZXJpdGVkIGNvbHVtbnMgd2l0aCBh biBhdXRvLW5hbWUgb24gYSBwbGFpbiBJTkhFUklUUyBjaGlsZCwKKwkJICogdGhlIG91dC1vZi1s aW5lIEFMVEVSIFRBQkxFIGlzIHN0aWxsIHNhZmUgYW5kIHByZXNlcnZlcyB0aGUgbmFtZS4KKwkJ ICovCisJCWlmIChza2lwX29pZHMgIT0gTlVMTCAmJgorCQkJKGF0dC0+YXR0aXNsb2NhbCB8fAor CQkJICFlbnRyaWVzW2F0dG51bV0uaXNfYXV0byB8fAorCQkJIHJlbC0+cmRfcmVsLT5yZWxpc3Bh cnRpdGlvbikpCisJCQkqc2tpcF9vaWRzID0gbGFwcGVuZF9vaWQoKnNraXBfb2lkcywgY29uLT5v aWQpOworCX0KKwlzeXN0YWJsZV9lbmRzY2FuKGNvblNjYW4pOworCXRhYmxlX2Nsb3NlKGNvblJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBlbnRyaWVzOworfQorCisvKgorICogZmlu ZF9hdHRyZGVmX3RleHQKKyAqCQlSZXR1cm4gdGhlIGRlcGFyc2VkIERFRkFVTFQvR0VORVJBVEVE IGV4cHJlc3Npb24gZm9yIGF0dG51bSBvbiByZWwsCisgKgkJb3IgTlVMTCBpZiBubyBlbnRyeSBl eGlzdHMgaW4gVHVwbGVDb25zdHItPmRlZnZhbC4KKyAqCisgKiBUaGUgY2FsbGVyIHBhc3NlcyBh IExpc3QgKiogc28gdGhhdCB0aGUgZGVwYXJzZSBjb250ZXh0IGlzIGJ1aWx0IGxhemlseQorICog YW5kIHJldXNlZCBhY3Jvc3MgY2FsbHMgKGRlcGFyc2VfY29udGV4dF9mb3IgaXMgbm90IGNoZWFw KS4gIFJldHVybmVkCisgKiBzdHJpbmcgaXMgcGFsbG9jJ2QgaW4gdGhlIGN1cnJlbnQgbWVtb3J5 IGNvbnRleHQ7IGNhbGxlciBwZnJlZSdzIGl0LgorICovCitzdGF0aWMgY2hhciAqCitmaW5kX2F0 dHJkZWZfdGV4dChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBMaXN0ICoqZHBjb250 ZXh0KQoreworCVR1cGxlQ29uc3RyICpjb25zdHIgPSBSZWxhdGlvbkdldERlc2NyKHJlbCktPmNv bnN0cjsKKworCWlmIChjb25zdHIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGlu dCBqID0gMDsgaiA8IGNvbnN0ci0+bnVtX2RlZnZhbDsgaisrKQorCXsKKwkJaWYgKGNvbnN0ci0+ ZGVmdmFsW2pdLmFkbnVtICE9IGF0dG51bSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgqZHBjb250 ZXh0ID09IE5JTCkKKwkJCSpkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGlkKHJlbCkp OworCisJCXJldHVybiBkZXBhcnNlX2V4cHJlc3Npb24oc3RyaW5nVG9Ob2RlKGNvbnN0ci0+ZGVm dmFsW2pdLmFkYmluKSwKKwkJCQkJCQkJICAqZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCX0K KwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGFwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWlu dHMKKyAqCQlFbWl0IGVhY2ggbG9jYWxseS1kZWNsYXJlZCBDSEVDSyBjb25zdHJhaW50IG9uIHJl bCBhcworICoJCSJDT05TVFJBSU5UIG5hbWUgPHBnX2dldF9jb25zdHJhaW50ZGVmPiIsIHNlcGFy YXRlZCBieSAnLCcgZnJvbSBhbnkKKyAqCQlwcmV2aW91c2x5LWVtaXR0ZWQgY29sdW1uIG9yIGNv bnN0cmFpbnQuCisgKgorICogKmZpcnN0IHRyYWNrcyB3aGV0aGVyIGFueXRoaW5nIGhhcyBiZWVu IGVtaXR0ZWQgb24gdGhpcyBsaXN0IHlldCwgc28gdGhlCisgKiBjYWxsZXIgY2FuIGNoYWluIGNv bHVtbiBlbWlzc2lvbiBhbmQgY29uc3RyYWludCBlbWlzc2lvbiB0aHJvdWdoIHRoZSBzYW1lCisg KiBidWZmZXIuICBJbmhlcml0ZWQgQ0hFQ0sgY29uc3RyYWludHMgKCFjb25pc2xvY2FsKSBjb21l IGZyb20gdGhlIHBhcmVudCdzCisgKiBEREwgYW5kIGFyZW4ndCByZXBlYXRlZCBoZXJlLgorICov CitzdGF0aWMgdm9pZAorYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cyhTdHJpbmdJbmZv IGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHByZXR0eSwKKwkJCQkJCQkJYm9vbCAqZmlyc3QpCit7 CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2NhbktleURhdGEg Y29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisKKwljb25SZWwgPSB0YWJsZV9vcGVuKENvbnN0 cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZjb25LZXks CisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51 bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVs KSkpOworCWNvblNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVs aWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgdHJ1ZSwgTlVMTCwgMSwgJmNvbktleSk7CisK Kwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChjb25UdXAgPSBzeXN0YWJsZV9nZXRuZXh0KGNvblNj YW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb24gPSAoRm9ybV9wZ19jb25zdHJhaW50 KSBHRVRTVFJVQ1QoY29uVHVwKTsKKwkJRGF0dW0JCWRlZkRhdHVtOworCQljaGFyCSAgICpkZWZi b2R5OworCisJCWlmIChjb24tPmNvbnR5cGUgIT0gQ09OU1RSQUlOVF9DSEVDSykKKwkJCWNvbnRp bnVlOworCQlpZiAoIWNvbi0+Y29uaXNsb2NhbCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghKmZp cnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnLCcpOworCQlpZiAocHJldHR5KQor CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcbiAgICAiKTsKKwkJZWxzZSBpZiAoISpm aXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKwkJKmZpcnN0ID0gZmFs c2U7CisKKwkJZGVmRGF0dW0gPSBPaWRGdW5jdGlvbkNhbGwxKEZfUEdfR0VUX0NPTlNUUkFJTlRE RUZfT0lELAorCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShjb24tPm9pZCkpOworCQlkZWZib2R5 ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkZWZEYXR1bSk7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVm LCAiQ09OU1RSQUlOVCAlcyAlcyIsCisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGNv bi0+Y29ubmFtZSkpLAorCQkJCQkJIGRlZmJvZHkpOworCQlwZnJlZShkZWZib2R5KTsKKwl9CisJ c3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1No YXJlTG9jayk7Cit9CisKKy8qCisgKiBhcHBlbmRfY29sdW1uX2RlZnMKKyAqCQlBcHBlbmQgdGhl IGNvbW1hLXNlcGFyYXRlZCBjb2x1bW4gZGVmaW5pdGlvbiBsaXN0IGZvciBhIHRhYmxlLgorICoK KyAqIEVtaXRzIGVhY2ggbm9uLWRyb3BwZWQsIGxvY2FsbHktZGVjbGFyZWQgY29sdW1uIGFzCisg KgkJbmFtZSB0eXBlIFtDT0xMQVRFIHhdIFtTVE9SQUdFIHNdIFtDT01QUkVTU0lPTiBjXQorICoJ CVtHRU5FUkFURUQgLi4uIHwgREVGQVVMVCBlXSBbTk9UIE5VTExdCisgKiBmb2xsb3dlZCBieSBh bnkgbG9jYWxseS1kZWNsYXJlZCBpbmxpbmUgQ0hFQ0sgY29uc3RyYWludHMuICBPcHRpb25hbAor ICogY2xhdXNlcyBhcmUgb21pdHRlZCB3aGVuIHRoZWlyIHZhbHVlIG1hdGNoZXMgd2hhdCB0aGUg c3lzdGVtIHdvdWxkCisgKiByZWFwcGx5IG9uIHJvdW5kLXRyaXAgKGUuZy4gdHlwZS1kZWZhdWx0 IENPTExBVEUsIHR5cGUtZGVmYXVsdCBTVE9SQUdFKS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVu ZF9jb2x1bW5fZGVmcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHByZXR0eSwK KwkJCQkgICBib29sIGluY2x1ZGVfY2hlY2ssCisJCQkJICAgYm9vbCBzY2hlbWFfcXVhbGlmaWVk LAorCQkJCSAgIExvY2FsTm90TnVsbEVudHJ5ICpubl9lbnRyaWVzKQoreworCVR1cGxlRGVzYwl0 dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCU9pZAkJCWJhc2VfbmFtZXNwYWNlID0g UmVsYXRpb25HZXROYW1lc3BhY2UocmVsKTsKKwlMaXN0CSAgICpkcGNvbnRleHQgPSBOSUw7CisJ Ym9vbAkJZmlyc3QgPSB0cnVlOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0 czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBk ZXNjLCBpKTsKKwkJY2hhcgkgICAqdHlwc3RyOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCkK KwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIENvbHVtbnMgaW5oZXJpdGVkIGZyb20gYSBwYXJl bnQgYXJlIGNvdmVyZWQgYnkgdGhlIElOSEVSSVRTIGNsYXVzZSwKKwkJICogbm90IHRoZSBjb2x1 bW4gbGlzdCwgdW5sZXNzIHRoZSBjaGlsZCByZWRlY2xhcmVkIHRoZW0gbG9jYWxseQorCQkgKiAo YXR0aXNsb2NhbD10cnVlKS4KKwkJICovCisJCWlmICghYXR0LT5hdHRpc2xvY2FsKQorCQkJY29u dGludWU7CisKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywn KTsKKwkJaWYgKHByZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gICAg Iik7CisJCWVsc2UgaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAn KTsKKwkJZmlyc3QgPSBmYWxzZTsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVv dGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpKTsKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoYnVmLCAnICcpOworCisJCXR5cHN0ciA9IGZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChh dHQtPmF0dHR5cGlkLCBhdHQtPmF0dHR5cG1vZCk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCB0eXBzdHIpOworCQlwZnJlZSh0eXBzdHIpOworCisJCS8qIENPTExBVEUgY2xhdXNlLCBv bmx5IGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUgdHlwZSdzIGRlZmF1bHQuICovCisJCWlmIChPaWRJ c1ZhbGlkKGF0dC0+YXR0Y29sbGF0aW9uKSAmJgorCQkJYXR0LT5hdHRjb2xsYXRpb24gIT0gZ2V0 X3R5cGNvbGxhdGlvbihhdHQtPmF0dHR5cGlkKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi IENPTExBVEUgJXMiLAorCQkJCQkJCSBnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZShhdHQtPmF0dGNv bGxhdGlvbikpOworCisJCS8qIFNUT1JBR0UgY2xhdXNlLCBvbmx5IGlmIGl0IGRpZmZlcnMgZnJv bSB0aGUgdHlwZSdzIGRlZmF1bHQuICovCisJCWlmIChhdHQtPmF0dHN0b3JhZ2UgIT0gZ2V0X3R5 cHN0b3JhZ2UoYXR0LT5hdHR0eXBpZCkpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBTVE9S QUdFICVzIiwgc3RvcmFnZV9uYW1lKGF0dC0+YXR0c3RvcmFnZSkpOworCisJCS8qIENPTVBSRVNT SU9OIGNsYXVzZSwgb25seSBpZiBleHBsaWNpdGx5IHNldCBvbiB0aGUgY29sdW1uLiAqLworCQlp ZiAoQ29tcHJlc3Npb25NZXRob2RJc1ZhbGlkKGF0dC0+YXR0Y29tcHJlc3Npb24pKQorCQkJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICIgQ09NUFJFU1NJT04gJXMiLAorCQkJCQkJCSBHZXRDb21wcmVz c2lvbk1ldGhvZE5hbWUoYXR0LT5hdHRjb21wcmVzc2lvbikpOworCisJCS8qCisJCSAqIExvb2sg dXAgdGhlIGRlZmF1bHQvZ2VuZXJhdGVkIGV4cHJlc3Npb24gdGV4dCB1cCBmcm9udDsgZ2VuZXJh dGVkCisJCSAqIGNvbHVtbnMgaGF2ZSBhdHRoYXNkZWY9dHJ1ZSB3aXRoIGFuIGVudHJ5IGluIHBn X2F0dHJkZWYganVzdCBsaWtlCisJCSAqIHJlZ3VsYXIgZGVmYXVsdHMuCisJCSAqLworCQl7CisJ CQljaGFyCSAgICpkZWZleHByID0gTlVMTDsKKworCQkJaWYgKGF0dC0+YXR0aGFzZGVmKQorCQkJ CWRlZmV4cHIgPSBmaW5kX2F0dHJkZWZfdGV4dChyZWwsIGF0dC0+YXR0bnVtLCAmZHBjb250ZXh0 KTsKKworCQkJLyogR0VORVJBVEVEIC8gSURFTlRJVFkgLyBERUZBVUxUIGFyZSBtdXR1YWxseSBl eGNsdXNpdmUuICovCisJCQlpZiAoYXR0LT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVS QVRFRF9TVE9SRUQgJiYgZGVmZXhwcikKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBHRU5F UkFURUQgQUxXQVlTIEFTICglcykgU1RPUkVEIiwgZGVmZXhwcik7CisJCQllbHNlIGlmIChhdHQt PmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwgJiYgZGVmZXhwcikK KwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBHRU5FUkFURUQgQUxXQVlTIEFTICglcykgVklS VFVBTCIsIGRlZmV4cHIpOworCQkJZWxzZSBpZiAoYXR0LT5hdHRpZGVudGl0eSA9PSBBVFRSSUJV VEVfSURFTlRJVFlfQUxXQVlTIHx8CisJCQkJCSBhdHQtPmF0dGlkZW50aXR5ID09IEFUVFJJQlVU RV9JREVOVElUWV9CWV9ERUZBVUxUKQorCQkJeworCQkJCWNvbnN0IGNoYXIgKmlka2luZCA9CisJ CQkJCShhdHQtPmF0dGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMpCisJCQkJ CT8gIkFMV0FZUyIgOiAiQlkgREVGQVVMVCI7CisJCQkJT2lkCQkJc2VxaWQgPSBnZXRJZGVudGl0 eVNlcXVlbmNlKHJlbCwgYXR0LT5hdHRudW0sIHRydWUpOworCisJCQkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIgR0VORVJBVEVEICVzIEFTIElERU5USVRZIiwgaWRraW5kKTsKKworCQkJCS8qCisJ CQkJICogRW1pdCBvbmx5IHRoZSBzZXF1ZW5jZSBvcHRpb25zIHRoYXQgZGlmZmVyIGZyb20gdGhl aXIKKwkJCQkgKiBkZWZhdWx0cyAtIG1pcnJvcmluZyBwZ19nZXRfZGF0YWJhc2VfZGRsJ3MgcGF0 dGVybiBvZgorCQkJCSAqIG9taXR0aW5nIHZhbHVlcyB0aGF0IHRoZSBzeXN0ZW0gd291bGQgcmVh cHBseSBvbiBpdHMgb3duLgorCQkJCSAqLworCQkJCWlmIChPaWRJc1ZhbGlkKHNlcWlkKSkKKwkJ CQl7CisJCQkJCUhlYXBUdXBsZQlzZXFUdXAgPSBTZWFyY2hTeXNDYWNoZTEoU0VRUkVMSUQsCisJ CQkJCQkJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKHNlcWlkKSk7CisKKwkJCQkJaWYgKEhlYXBU dXBsZUlzVmFsaWQoc2VxVHVwKSkKKwkJCQkJeworCQkJCQkJRm9ybV9wZ19zZXF1ZW5jZSBzZXEg PSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcVR1cCk7CisJCQkJCQlTdHJpbmdJbmZv RGF0YSBvcHRzOworCQkJCQkJYm9vbAkJZmlyc3Rfb3B0ID0gdHJ1ZTsKKwkJCQkJCWludDY0CQlk ZWZfbWluLAorCQkJCQkJCQkJZGVmX21heCwKKwkJCQkJCQkJCWRlZl9zdGFydDsKKwkJCQkJCWlu dDY0CQl0eXBfbWluLAorCQkJCQkJCQkJdHlwX21heDsKKworCQkJCQkJLyoKKwkJCQkJCSAqIFBl ci10eXBlIGJvdW5kcyBmb3IgdGhlIHNlcXVlbmNlJ3MgdW5kZXJseWluZworCQkJCQkJICogaW50 ZWdlciB0eXBlLiAgRGVmYXVsdHMgdG8gaW50OCBpZiB0aGUgY29sdW1uIHR5cGUKKwkJCQkJCSAq IGlzIHNvbWV0aGluZyBlbHNlIChzaG91bGRuJ3QgaGFwcGVuIGZvciBJREVOVElUWSwKKwkJCQkJ CSAqIGJ1dCBiZSBkZWZlbnNpdmUpLgorCQkJCQkJICovCisJCQkJCQlzd2l0Y2ggKGF0dC0+YXR0 dHlwaWQpCisJCQkJCQl7CisJCQkJCQkJY2FzZSBJTlQyT0lEOgorCQkJCQkJCQl0eXBfbWluID0g UEdfSU5UMTZfTUlOOworCQkJCQkJCQl0eXBfbWF4ID0gUEdfSU5UMTZfTUFYOworCQkJCQkJCQli cmVhazsKKwkJCQkJCQljYXNlIElOVDRPSUQ6CisJCQkJCQkJCXR5cF9taW4gPSBQR19JTlQzMl9N SU47CisJCQkJCQkJCXR5cF9tYXggPSBQR19JTlQzMl9NQVg7CisJCQkJCQkJCWJyZWFrOworCQkJ CQkJCWRlZmF1bHQ6CisJCQkJCQkJCXR5cF9taW4gPSBQR19JTlQ2NF9NSU47CisJCQkJCQkJCXR5 cF9tYXggPSBQR19JTlQ2NF9NQVg7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlp ZiAoc2VxLT5zZXFpbmNyZW1lbnQgPiAwKQorCQkJCQkJeworCQkJCQkJCWRlZl9taW4gPSAxOwor CQkJCQkJCWRlZl9tYXggPSB0eXBfbWF4OworCQkJCQkJCWRlZl9zdGFydCA9IGRlZl9taW47CisJ CQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJZGVmX21pbiA9IHR5cF9taW47CisJ CQkJCQkJZGVmX21heCA9IC0xOworCQkJCQkJCWRlZl9zdGFydCA9IGRlZl9tYXg7CisJCQkJCQl9 CisKKwkJCQkJCWluaXRTdHJpbmdJbmZvKCZvcHRzKTsKKworCQkJCQkJLyoKKwkJCQkJCSAqIFNF UVVFTkNFIE5BTUUgLSBvbWl0IHdoZW4gaXQgbWF0Y2hlcyB0aGUgaW1wbGljaXQKKwkJCQkJCSAq ICI8dGFibGVuYW1lPl88Y29sdW1ubmFtZT5fc2VxIiBwYXR0ZXJuIGluIHRoZSBzYW1lCisJCQkJ CQkgKiBzY2hlbWEsIHNpbmNlIENSRUFURSBUQUJMRSB3aWxsIHJlZ2VuZXJhdGUgdGhhdAorCQkJ CQkJICogZXhhY3QgbmFtZS4gIFRoZSBzZXF1ZW5jZSBpcyBhbiBJTlRFUk5BTCBkZXBlbmRlbmN5 CisJCQkJCQkgKiBvZiB0aGUgY29sdW1uLCBzbyB0aGUgbG9jayB3ZSBob2xkIG9uIHRoZSB0YWJs ZQorCQkJCQkJICogYWxzbyBwaW5zIGl0LCBidXQgdGhlIGxvb2t1cCBoZWxwZXIgc3RpbGwgZGVm ZW5kcworCQkJCQkJICogYWdhaW5zdCBhIG1pc3NpbmcgcGdfY2xhc3Mgcm93LgorCQkJCQkJICov CisJCQkJCQl7CisJCQkJCQkJSGVhcFR1cGxlCXNlcUNsYXNzVHVwOworCQkJCQkJCUZvcm1fcGdf Y2xhc3Mgc2VxQ2xhc3M7CisJCQkJCQkJY2hhcgkgICAqYXV0b25hbWU7CisKKwkJCQkJCQlzZXFD bGFzc1R1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsCisJCQkJCQkJCQkJCQkJCSAgT2JqZWN0 SWRHZXREYXR1bShzZXFpZCkpOworCQkJCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXFDbGFz c1R1cCkpCisJCQkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJCQkJCQkgZXJybXNnKCJpZGVudGl0eSBzZXF1ZW5j ZSB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkJCQkJCQlzZXFpZCksCisJCQkJ CQkJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgZHJvcHBlZC4i KSkpOworCQkJCQkJCXNlcUNsYXNzID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChzZXFDbGFz c1R1cCk7CisKKwkJCQkJCQlhdXRvbmFtZSA9IG1ha2VPYmplY3ROYW1lKFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGF0dC0+YXR0bmFtZSksICJz ZXEiKTsKKwkJCQkJCQlpZiAoc2VxQ2xhc3MtPnJlbG5hbWVzcGFjZSAhPSBSZWxhdGlvbkdldE5h bWVzcGFjZShyZWwpIHx8CisJCQkJCQkJCXN0cmNtcChOYW1lU3RyKHNlcUNsYXNzLT5yZWxuYW1l KSwgYXV0b25hbWUpICE9IDApCisJCQkJCQkJeworCQkJCQkJCQljaGFyCSAgICpzZXFRdWFsID0K KwkJCQkJCQkJCWxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KHNlcWlkLAorCQkJCQkJCQkJCQkJCQkJ c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJCQkJCWJhc2VfbmFtZXNwYWNlKTsKKworCQkJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNTRVFVRU5DRSBOQU1FICVzIiwKKwkJCQkJ CQkJCQkJCSBmaXJzdF9vcHQgPyAiIiA6ICIgIiwgc2VxUXVhbCk7CisJCQkJCQkJCWZpcnN0X29w dCA9IGZhbHNlOworCQkJCQkJCQlwZnJlZShzZXFRdWFsKTsKKwkJCQkJCQl9CisJCQkJCQkJcGZy ZWUoYXV0b25hbWUpOworCQkJCQkJCVJlbGVhc2VTeXNDYWNoZShzZXFDbGFzc1R1cCk7CisJCQkJ CQl9CisKKwkJCQkJCWlmIChzZXEtPnNlcXN0YXJ0ICE9IGRlZl9zdGFydCkKKwkJCQkJCXsKKwkJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNTVEFSVCBXSVRIICIgSU5UNjRfRk9STUFU LAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2Vxc3RhcnQpOworCQkJ CQkJCWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYgKHNlcS0+c2VxaW5jcmVt ZW50ICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzSU5D UkVNRU5UIEJZICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAi ICIsIHNlcS0+c2VxaW5jcmVtZW50KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJ CX0KKwkJCQkJCWlmIChzZXEtPnNlcW1pbiAhPSBkZWZfbWluKQorCQkJCQkJeworCQkJCQkJCWFw cGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc01JTlZBTFVFICIgSU5UNjRfRk9STUFULAorCQkJCQkJ CQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxbWluKTsKKwkJCQkJCQlmaXJzdF9v cHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcW1heCAhPSBkZWZfbWF4KQor CQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc01BWFZBTFVFICIgSU5U NjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxbWF4 KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNl cWNhY2hlICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVz Q0FDSEUgIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQkJCQkJCSBmaXJzdF9vcHQgPyAiIiA6ICIgIiwg c2VxLT5zZXFjYWNoZSk7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJ CQlpZiAoc2VxLT5zZXFjeWNsZSkKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZv cHRzLCAiJXNDWUNMRSIsIGZpcnN0X29wdCA/ICIiIDogIiAiKTsKKwkJCQkJCQlmaXJzdF9vcHQg PSBmYWxzZTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKCFmaXJzdF9vcHQpCisJCQkJCQkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIgKCVzKSIsIG9wdHMuZGF0YSk7CisKKwkJCQkJCXBmcmVlKG9wdHMu ZGF0YSk7CisJCQkJCQlSZWxlYXNlU3lzQ2FjaGUoc2VxVHVwKTsKKwkJCQkJfQorCQkJCX0KKwkJ CX0KKwkJCWVsc2UgaWYgKGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgREVG QVVMVCAlcyIsIGRlZmV4cHIpOworCisJCQlpZiAoZGVmZXhwcikKKwkJCQlwZnJlZShkZWZleHBy KTsKKwkJfQorCisJCWlmIChhdHQtPmF0dG5vdG51bGwpCisJCXsKKwkJCUxvY2FsTm90TnVsbEVu dHJ5ICpubiA9ICZubl9lbnRyaWVzW2F0dC0+YXR0bnVtXTsKKworCQkJLyoKKwkJCSAqIFN1cHBy ZXNzIE5PVCBOVUxMIHdoZW4gdGhlIGNvbnN0cmFpbnQgaXMgaW5oZXJpdGVkLW9ubHkKKwkJCSAq IChjb25pc2xvY2FsPWZhbHNlKS4gIFRoZSBJTkhFUklUUyBjbGF1c2UgYWxyZWFkeSBwcm9wYWdh dGVzIGl0OworCQkJICogZW1pdHRpbmcgaXQgaGVyZSB3b3VsZCBtYWtlIGNvbmlzbG9jYWwgdHJ1 ZSBvbiByZXBsYXkuICBXaGVuCisJCQkgKiB0aGVyZSBpcyBubyBwZ19jb25zdHJhaW50IHJvdyBh dCBhbGwgKHByZS1QRzE4IGNhdGFsb2cgd2l0aAorCQkJICogYXR0bm90bnVsbD10cnVlKSwgaW5o ZXJpdGVkX25vdG51bGwgaXMgZmFsc2Ugc28gd2UgZmFsbCB0aHJvdWdoCisJCQkgKiBhbmQgZW1p dCBwbGFpbiBOT1QgTlVMTCBhcyBiZWZvcmUuCisJCQkgKi8KKwkJCWlmICghbm4tPmluaGVyaXRl ZF9ub3RudWxsKQorCQkJeworCQkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmICFubi0+aXNfYXV0 bykKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQ09OU1RSQUlOVCAlcyBOT1QgTlVMTCIs CisJCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihubi0+bmFtZSkpOworCQkJCWVsc2UKKwkJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgTk9UIE5VTEwiKTsKKwkJCQlpZiAobm4tPm5h bWUgIT0gTlVMTCAmJiBubi0+bm9faW5oZXJpdCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsICIgTk8gSU5IRVJJVCIpOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBUYWJsZS1s ZXZlbCBDSEVDSyBjb25zdHJhaW50cyAtIGVtaXR0ZWQgaW5saW5lIGluIHRoZSBDUkVBVEUgVEFC TEUgYm9keQorCSAqIHNvIHRoZXkgYXBwZWFyIGFsb25nc2lkZSB0aGUgY29sdW1ucyAodGhlIHBn X2R1bXAgc2hhcGUpLiAgVGhlCisJICogY29uc3RyYWludCBsb29wIGxhdGVyIGluIHBnX2dldF90 YWJsZV9kZGxfaW50ZXJuYWwgc2tpcHMgQ0hFQ0sKKwkgKiBjb25zdHJhaW50cyB0byBhdm9pZCBk b3VibGUtZW1pc3Npb24uCisJICovCisJaWYgKGluY2x1ZGVfY2hlY2spCisJCWFwcGVuZF9pbmxp bmVfY2hlY2tfY29uc3RyYWludHMoYnVmLCByZWwsIHByZXR0eSwgJmZpcnN0KTsKK30KKworLyoK KyAqIGFwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzCisgKgkJRm9yIGEgdHlwZWQgdGFibGUg KENSRUFURSBUQUJMRSAuLi4gT0YgdHlwZV9uYW1lKSwgYXBwZW5kIHRoZQorICoJCW9wdGlvbmFs ICIoY29sIFdJVEggT1BUSU9OUyAuLi4sIC4uLikiIGxpc3QgY2FycnlpbmcgbG9jYWxseQorICoJ CWFwcGxpZWQgcGVyLWNvbHVtbiBvdmVycmlkZXMgLSBERUZBVUxULCBOT1QgTlVMTCwgYW5kIGFu eSBsb2NhbGx5CisgKgkJZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludHMuCisgKgorICogQ29sdW1u cyB3aG9zZSB0eXBlIGlzIGZ1bGx5IGRpY3RhdGVkIGJ5IHJlbG9mdHlwZSBlbWl0IG5vdGhpbmcu ICBUaGUKKyAqIHBhcmVudGhlc2lzZWQgbGlzdCBpcyBzdXBwcmVzc2VkIGVudGlyZWx5IHdoZW4g bm8gY29sdW1uIG5lZWRzIGFuCisgKiBvdmVycmlkZSBhbmQgdGhlcmUgYXJlIG5vIGxvY2FsbHkt ZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludHMsIG1hdGNoaW5nCisgKiB0aGUgY2Fub25pY2FsICJD UkVBVEUgVEFCTEUgeCBPRiB0OyIgc2hhcGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfdHlw ZWRfY29sdW1uX292ZXJyaWRlcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHBy ZXR0eSwKKwkJCQkJCQkgIGJvb2wgaW5jbHVkZV9jaGVjaywKKwkJCQkJCQkgIExvY2FsTm90TnVs bEVudHJ5ICpubl9lbnRyaWVzKQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXRE ZXNjcihyZWwpOworCUxpc3QJICAgKmRwY29udGV4dCA9IE5JTDsKKwlTdHJpbmdJbmZvRGF0YSBp bm5lcjsKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlpbml0U3RyaW5nSW5mbygmaW5uZXIpOwor CisJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCXsKKwkJRm9ybV9w Z19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBpKTsKKwkJY2hhcgkgICAq ZGVmZXhwciA9IE5VTEw7CisJCWJvb2wJCWhhc19kZWZhdWx0OworCQlib29sCQloYXNfbm90bnVs bDsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoYXR0 LT5hdHRoYXNkZWYpCisJCQlkZWZleHByID0gZmluZF9hdHRyZGVmX3RleHQocmVsLCBhdHQtPmF0 dG51bSwgJmRwY29udGV4dCk7CisKKwkJaGFzX2RlZmF1bHQgPSAoZGVmZXhwciAhPSBOVUxMKTsK KwkJLyogaW5oZXJpdGVkLW9ubHkgTk9UIE5VTEwgaXMgbm90IGFuIG92ZXJyaWRlOyB0cmVhdCBh cyBhYnNlbnQgKi8KKwkJaGFzX25vdG51bGwgPSBhdHQtPmF0dG5vdG51bGwgJiYKKwkJCSFubl9l bnRyaWVzW2F0dC0+YXR0bnVtXS5pbmhlcml0ZWRfbm90bnVsbDsKKworCQlpZiAoIWhhc19kZWZh dWx0ICYmICFoYXNfbm90bnVsbCkKKwkJeworCQkJaWYgKGRlZmV4cHIpCisJCQkJcGZyZWUoZGVm ZXhwcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcigmaW5uZXIsICcsJyk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZpbm5lciwgIlxuICAgICIpOworCQllbHNlIGlmICghZmlyc3QpCisJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcigmaW5uZXIsICcgJyk7CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJYXBw ZW5kU3RyaW5nSW5mbygmaW5uZXIsICIlcyBXSVRIIE9QVElPTlMiLAorCQkJCQkJIHF1b3RlX2lk ZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJCWlmIChoYXNfZGVmYXVsdCkKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmlubmVyLCAiIERFRkFVTFQgJXMiLCBkZWZleHByKTsKKwkJaWYg KGhhc19ub3RudWxsKQorCQl7CisJCQlMb2NhbE5vdE51bGxFbnRyeSAqbm4gPSAmbm5fZW50cmll c1thdHQtPmF0dG51bV07CisKKwkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmICFubi0+aXNfYXV0 bykKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZpbm5lciwgIiBDT05TVFJBSU5UICVzIE5PVCBOVUxM IiwKKwkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobm4tPm5hbWUpKTsKKwkJCWVsc2UKKwkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5lciwgIiBOT1QgTlVMTCIpOworCQkJaWYgKG5uLT5u YW1lICE9IE5VTEwgJiYgbm4tPm5vX2luaGVyaXQpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmaW5uZXIsICIgTk8gSU5IRVJJVCIpOworCQl9CisKKwkJaWYgKGRlZmV4cHIpCisJCQlwZnJl ZShkZWZleHByKTsKKwl9CisKKwkvKgorCSAqIExvY2FsbHktZGVjbGFyZWQgQ0hFQ0sgY29uc3Ry YWludHMgb24gYSB0eXBlZCB0YWJsZSBiZWxvbmcgaW4gdGhlCisJICogY29sdW1uLWxpc3QgcGFy ZW50aGVzZXMsIHNhbWUgYXMgZm9yIGFuIHVudHlwZWQgdGFibGUuICBUaGUgb3V0LW9mLWxpbmUK KwkgKiBjb25zdHJhaW50IGxvb3AgbGF0ZXIgc3RpbGwgc2tpcHMgQ0hFQ0tzLgorCSAqLworCWlm IChpbmNsdWRlX2NoZWNrKQorCQlhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzKCZpbm5l ciwgcmVsLCBwcmV0dHksICZmaXJzdCk7CisKKwlpZiAoIWZpcnN0KQorCXsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICIgKCIpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg aW5uZXIuZGF0YSk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgIlxuKSIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CisJ fQorCXBmcmVlKGlubmVyLmRhdGEpOworfQorCisvKgorICogYXBwZW5kX3N0bXQKKyAqCQlQdXNo IGN0eC0+YnVmIG9udG8gY3R4LT5zdGF0ZW1lbnRzLgorICoKKyAqIFVzZWQgZm9yIGFsbCBEREwg ZW1pc3Npb25zLiAgV2hlbiBzY2hlbWFfcXVhbGlmaWVkIGlzIGZhbHNlLCB0aGUKKyAqIGFjdGl2 ZSBzZWFyY2hfcGF0aCBoYXMgYWxyZWFkeSBiZWVuIG5hcnJvd2VkIHRvIHRoZSBiYXNlIHNjaGVt YSwgc28KKyAqIHJ1bGV1dGlscyBoZWxwZXJzIChwZ19nZXRfaW5kZXhkZWZfZGRsLCBwZ19nZXRf cnVsZWRlZl9kZGwsCisgKiBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5LCBwZ19nZXRfc3RhdGlz dGljc29iamRlZl9kZGwpIHByb2R1Y2UKKyAqIHVucXVhbGlmaWVkIG5hbWVzIGZvciBzYW1lLXNj aGVtYSBvYmplY3RzIGF1dG9tYXRpY2FsbHkuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3Rt dChUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwljdHgtPnN0YXRlbWVudHMgPSBsYXBwZW5kKGN0 eC0+c3RhdGVtZW50cywgcHN0cmR1cChjdHgtPmJ1Zi5kYXRhKSk7Cit9CisKKy8qCisgKiBlbWl0 X2NyZWF0ZV90YWJsZV9zdG10CisgKgkJQnVpbGQgdGhlIGxlYWRpbmcgQ1JFQVRFIFRBQkxFIHN0 YXRlbWVudCwgaW5jbHVkaW5nIHBlcnNpc3RlbmNlCisgKgkJKFRFTVBPUkFSWSAvIFVOTE9HR0VE KSwgYm9keSAoY29sdW1uIGxpc3QgLyBPRiB0eXBlX25hbWUgLworICoJCVBBUlRJVElPTiBPRiBw YXJlbnQpLCBJTkhFUklUUywgUEFSVElUSU9OIEJZLCBVU0lORyBtZXRob2QsCisgKgkJV0lUSCAo cmVsb3B0aW9ucyksIFRBQkxFU1BBQ0UsIGFuZCBPTiBDT01NSVQuCisgKi8KK3N0YXRpYyB2b2lk CitlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCVJlbGF0 aW9uCXJlbCA9IGN0eC0+cmVsOworCWNoYXIJCXJlbHBlcnNpc3RlbmNlID0gcmVsLT5yZF9yZWwt PnJlbHBlcnNpc3RlbmNlOworCWNoYXIJCXJlbGtpbmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsK Kwlib29sCQlpc190eXBlZCA9IE9pZElzVmFsaWQocmVsLT5yZF9yZWwtPnJlbG9mdHlwZSk7CisJ SGVhcFR1cGxlCWNsYXNzdHVwOworCURhdHVtCQlyZWxvcHREYXR1bTsKKwlib29sCQlyZWxvcHRJ c251bGw7CisKKwljbGFzc3R1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0 RGF0dW0oY3R4LT5yZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc3R1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGN0eC0+ cmVsaWQpOworCisJcmVsb3B0RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCBjbGFzc3R1 cCwKKwkJCQkJCQkJICBBbnVtX3BnX2NsYXNzX3JlbG9wdGlvbnMsICZyZWxvcHRJc251bGwpOwor CisJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Y3R4LT5idWYsICJDUkVBVEUgIik7CisJaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RF TkNFX1RFTVApCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiVEVNUE9SQVJZ ICIpOworCWVsc2UgaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VE KQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIlVOTE9HR0VEICIpOworCWFw cGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiVEFCTEUgJXMiLCBjdHgtPnF1YWxuYW1lKTsKKwor CWlmIChyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCisJeworCQlPaWQJCQlwYXJlbnRPaWQg PSBnZXRfcGFydGl0aW9uX3BhcmVudChjdHgtPnJlbGlkLCB0cnVlKTsKKwkJY2hhcgkgICAqcGFy ZW50UXVhbCA9IGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KHBhcmVudE9pZCwKKwkJCQkJCQkJCQkJ CQkJIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJCQkJIGN0eC0+YmFzZV9uYW1l c3BhY2UpOworCQljaGFyCSAgICpwYXJlbnRSZWxuYW1lID0gZ2V0X3JlbF9uYW1lKHBhcmVudE9p ZCk7CisJCURhdHVtCQlib3VuZERhdHVtOworCQlib29sCQlib3VuZElzbnVsbDsKKwkJY2hhcgkg ICAqZm9yVmFsdWVzID0gTlVMTDsKKwkJY2hhcgkgICAqYm91bmRTdHIgPSBOVUxMOworCisJCWlm IChwYXJlbnRSZWxuYW1lID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29k ZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkgZXJybXNnKCJwYXJ0aXRpb24gcGFy ZW50IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQlwYXJlbnRPaWQpLAorCQkJ CQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIpKSk7 CisKKwkJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIGNsYXNzdHVwLAorCQkJ CQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLCAmYm91bmRJc251bGwpOworCQlpZiAo IWJvdW5kSXNudWxsKQorCQl7CisJCQlOb2RlCSAgICpib3VuZE5vZGU7CisJCQlMaXN0CSAgICpk cGNvbnRleHQ7CisKKwkJCWJvdW5kU3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZERhdHVt KTsKKwkJCWJvdW5kTm9kZSA9IHN0cmluZ1RvTm9kZShib3VuZFN0cik7CisJCQlkcGNvbnRleHQg PSBkZXBhcnNlX2NvbnRleHRfZm9yKHBhcmVudFJlbG5hbWUsIHBhcmVudE9pZCk7CisJCQlmb3JW YWx1ZXMgPSBkZXBhcnNlX2V4cHJlc3Npb24oYm91bmROb2RlLCBkcGNvbnRleHQsIGZhbHNlLCBm YWxzZSk7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBQQVJUSVRJT04g T0YgJXMiLCBwYXJlbnRRdWFsKTsKKworCQkvKgorCQkgKiBJbmNsdWRlIE5PVCBOVUxMIGNvbnN0 cmFpbnRzIGluIHRoZSBQQVJUSVRJT04gT0YgY29sdW1uIHNwZWMKKwkJICogd2hlbiB0aGUgY2hp bGQncyBjb25zdHJhaW50IG5hbWUgZGlmZmVycyBmcm9tIHdoYXQgYXV0b21hdGljCisJCSAqIGlu aGVyaXRhbmNlIHdvdWxkIGdpdmUuICBXaGVuIFBBUlRJVElPTiBPRiBydW5zLCB0aGUgcGFyZW50 J3MKKwkJICogTk9UIE5VTEwgcHJvcGFnYXRlcyB0byB0aGUgY2hpbGQgdW5kZXIgdGhlIHBhcmVu dCdzIGNvbnN0cmFpbnQKKwkJICogbmFtZS4gIElmIHRoZSBjaGlsZCBjYXJyaWVzIGEgZGlmZmVy ZW50IG5hbWUgLSB3aGV0aGVyIGZyb20gYQorCQkgKiB1c2VyLXNwZWNpZmllZCBDT05TVFJBSU5U IGNsYXVzZSBvciBmcm9tIGEgcHJlLWV4aXN0aW5nIHRhYmxlCisJCSAqIHRoYXQgd2FzIGxhdGVy IGF0dGFjaGVkIGFzIGEgcGFydGl0aW9uIC0gd2UgbXVzdCBzcGVjaWZ5IGl0IGluCisJCSAqIHRo ZSBjb2x1bW4gc3BlYyBzbyB0aGUgbmFtZSBpcyBwcmVzZXJ2ZWQgb24gcmVwbGF5LgorCQkgKgor CQkgKiBXZSBzY2FuIHBnX2NvbnN0cmFpbnQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gcmVseWluZyBv biBubl9lbnRyaWVzLAorCQkgKiBiZWNhdXNlIGFmdGVyIEFUVEFDSCBQQVJUSVRJT04gdGhlIGNo aWxkJ3MgY29uc3RyYWludCBjYW4gaGF2ZQorCQkgKiBjb25pc2xvY2FsPWZhbHNlIChwdXJlbHkg aW5oZXJpdGVkKSB3aGlsZSBzdGlsbCBjYXJyeWluZyB0aGUKKwkJICogb3JpZ2luYWwgbG9jYWwg bmFtZSAtIGEgY2FzZSB0aGF0IGNvbGxlY3RfbG9jYWxfbm90X251bGwgdHJhY2tzCisJCSAqIG9u bHkgYXMgaW5oZXJpdGVkX25vdG51bGwgd2l0aG91dCBwcmVzZXJ2aW5nIHRoZSBuYW1lLgorCQkg Ki8KKwkJeworCQkJUmVsYXRpb24JY29uUmVsOworCQkJU3lzU2NhbkRlc2MgY29uU2NhbjsKKwkJ CVNjYW5LZXlEYXRhIGNvbktleTsKKwkJCUhlYXBUdXBsZQljb25UdXA7CisJCQlTdHJpbmdJbmZv RGF0YSBjb2xzcGVjOworCQkJYm9vbAkJaGFzc3BlY3MgPSBmYWxzZTsKKworCQkJaW5pdFN0cmlu Z0luZm8oJmNvbHNwZWMpOworCisJCQljb25SZWwgPSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQkJ CUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJCUJURXF1YWxTdHJhdGVneU51bWJl ciwgRl9PSURFUSwKKwkJCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkpOworCQkJY29u U2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFt ZUluZGV4SWQsCisJCQkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25LZXkpOworCisJCQl3aGls ZSAoSGVhcFR1cGxlSXNWYWxpZChjb25UdXAgPSBzeXN0YWJsZV9nZXRuZXh0KGNvblNjYW4pKSkK KwkJCXsKKwkJCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkg R0VUU1RSVUNUKGNvblR1cCk7CisJCQkJRGF0dW0JCWNvbmtleURhdDsKKwkJCQlib29sCQljb25r ZXlOdWxsOworCQkJCUFycmF5VHlwZSAgKmNvbmtleUFycjsKKwkJCQlBdHRyTnVtYmVyCWF0dG51 bTsKKwkJCQljaGFyCSAgICpjb25uYW1lOworCQkJCWNoYXIJICAgKnBhcmVudF9jb25uYW1lOwor CQkJCWNoYXIJICAgKmF0dG5hbWU7CisKKwkJCQlpZiAoY29uLT5jb250eXBlICE9IENPTlNUUkFJ TlRfTk9UTlVMTCkKKwkJCQkJY29udGludWU7CisKKwkJCQljb25rZXlEYXQgPSBoZWFwX2dldGF0 dHIoY29uVHVwLCBBbnVtX3BnX2NvbnN0cmFpbnRfY29ua2V5LAorCQkJCQkJCQkJCSBSZWxhdGlv bkdldERlc2NyKGNvblJlbCksICZjb25rZXlOdWxsKTsKKwkJCQlpZiAoY29ua2V5TnVsbCkKKwkJ CQkJY29udGludWU7CisJCQkJY29ua2V5QXJyID0gRGF0dW1HZXRBcnJheVR5cGVQKGNvbmtleURh dCk7CisJCQkJaWYgKEFSUl9ORElNKGNvbmtleUFycikgIT0gMSB8fCBBUlJfRElNUyhjb25rZXlB cnIpWzBdIDwgMSB8fAorCQkJCQlBUlJfSEFTTlVMTChjb25rZXlBcnIpIHx8IEFSUl9FTEVNVFlQ RShjb25rZXlBcnIpICE9IElOVDJPSUQpCisJCQkJCWNvbnRpbnVlOworCQkJCWF0dG51bSA9ICgo aW50MTYgKikgQVJSX0RBVEFfUFRSKGNvbmtleUFycikpWzBdOworCisJCQkJYXR0bmFtZSA9IGdl dF9hdHRuYW1lKGN0eC0+cmVsaWQsIGF0dG51bSwgdHJ1ZSk7CisJCQkJaWYgKGF0dG5hbWUgPT0g TlVMTCkKKwkJCQkJY29udGludWU7CisKKwkJCQljb25uYW1lID0gcHN0cmR1cChOYW1lU3RyKGNv bi0+Y29ubmFtZSkpOworCisJCQkJLyoKKwkJCQkgKiBDaGVjayBpZiB0aGlzIG5hbWUgaXMgd2hh dCBQQVJUSVRJT04gT0Ygd291bGQgYXV0by1jcmVhdGUuCisJCQkJICogVGhlIHBhcmVudCBwcm9w YWdhdGVzIGl0cyBvd24gTk9UIE5VTEwgbmFtZSB0byB0aGUgY2hpbGQuCisJCQkJICogTG9vayB1 cCB0aGUgcGFyZW50J3MgTk9UIE5VTEwgY29uc3RyYWludCBuYW1lIGZvciB0aGlzIGNvbHVtbi4K KwkJCQkgKi8KKwkJCQlwYXJlbnRfY29ubmFtZSA9IE5VTEw7CisJCQkJeworCQkJCQlBdHRyTnVt YmVyCXBhcmVudEF0dG51bSA9IGdldF9hdHRudW0ocGFyZW50T2lkLCBhdHRuYW1lKTsKKworCQkJ CQlpZiAocGFyZW50QXR0bnVtICE9IEludmFsaWRBdHRyTnVtYmVyKQorCQkJCQl7CisJCQkJCQlS ZWxhdGlvbglwY29uUmVsID0KKwkJCQkJCQl0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklk LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQkJU2NhbktleURhdGEgcGNvbktleTsKKwkJCQkJCVN5 c1NjYW5EZXNjIHBjb25TY2FuOworCQkJCQkJSGVhcFR1cGxlCXBjb25UdXA7CisKKwkJCQkJCVNj YW5LZXlJbml0KCZwY29uS2V5LAorCQkJCQkJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlk LAorCQkJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQkJCQkJT2Jq ZWN0SWRHZXREYXR1bShwYXJlbnRPaWQpKTsKKwkJCQkJCXBjb25TY2FuID0gc3lzdGFibGVfYmVn aW5zY2FuKHBjb25SZWwsCisJCQkJCQkJCQkJCQkJICBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJ bmRleElkLAorCQkJCQkJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnBjb25LZXkpOworCQkJCQkJ d2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQocGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQocGNvblNj YW4pKSkKKwkJCQkJCXsKKwkJCQkJCQlGb3JtX3BnX2NvbnN0cmFpbnQgcGNvbiA9CisJCQkJCQkJ CShGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChwY29uVHVwKTsKKwkJCQkJCQlEYXR1bQkJ cGNvbmtleURhdDsKKwkJCQkJCQlib29sCQlwY29ua2V5TnVsbDsKKwkJCQkJCQlBcnJheVR5cGUg ICpwY29ua2V5QXJyOworCisJCQkJCQkJaWYgKHBjb24tPmNvbnR5cGUgIT0gQ09OU1RSQUlOVF9O T1ROVUxMKQorCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQlwY29ua2V5RGF0ID0gaGVhcF9nZXRh dHRyKHBjb25UdXAsCisJCQkJCQkJCQkJCQkJICBBbnVtX3BnX2NvbnN0cmFpbnRfY29ua2V5LAor CQkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwY29uUmVsKSwKKwkJCQkJCQkJCQkJCQkg ICZwY29ua2V5TnVsbCk7CisJCQkJCQkJaWYgKHBjb25rZXlOdWxsKQorCQkJCQkJCQljb250aW51 ZTsKKwkJCQkJCQlwY29ua2V5QXJyID0gRGF0dW1HZXRBcnJheVR5cGVQKHBjb25rZXlEYXQpOwor CQkJCQkJCWlmIChBUlJfTkRJTShwY29ua2V5QXJyKSA9PSAxICYmCisJCQkJCQkJCUFSUl9ESU1T KHBjb25rZXlBcnIpWzBdID49IDEgJiYKKwkJCQkJCQkJIUFSUl9IQVNOVUxMKHBjb25rZXlBcnIp ICYmCisJCQkJCQkJCUFSUl9FTEVNVFlQRShwY29ua2V5QXJyKSA9PSBJTlQyT0lEICYmCisJCQkJ CQkJCSgoaW50MTYgKikgQVJSX0RBVEFfUFRSKHBjb25rZXlBcnIpKVswXSA9PQorCQkJCQkJCQlw YXJlbnRBdHRudW0pCisJCQkJCQkJeworCQkJCQkJCQlwYXJlbnRfY29ubmFtZSA9IHBzdHJkdXAo TmFtZVN0cihwY29uLT5jb25uYW1lKSk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJ CX0KKwkJCQkJCXN5c3RhYmxlX2VuZHNjYW4ocGNvblNjYW4pOworCQkJCQkJdGFibGVfY2xvc2Uo cGNvblJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8qCisJCQkJ ICogVGhlIGNoaWxkJ3MgTk9UIE5VTEwgbmVlZHMgaW5saW5lIHNwZWNpZmljYXRpb24gd2hlbiBp dHMgbmFtZQorCQkJCSAqIGRpZmZlcnMgZnJvbSB0aGUgcGFyZW50J3MgY29uc3RyYWludCBuYW1l ICh3aGljaCBpcyB3aGF0CisJCQkJICogUEFSVElUSU9OIE9GIHdvdWxkIGF1dG9tYXRpY2FsbHkg cHJvcGFnYXRlKS4gIElmIHRoZSBwYXJlbnQgaGFzCisJCQkJICogbm8gTk9UIE5VTEwgb24gdGhp cyBjb2x1bW4sIHRoZSBjaGlsZCdzIGNvbnN0cmFpbnQgd2FzIHB1cmVseQorCQkJCSAqIGxvY2Fs IGFuZCBhbHNvIG5lZWRzIHRvIGJlIHNwZWNpZmllZCBpbmxpbmUuCisJCQkJICovCisJCQkJaWYg KHBhcmVudF9jb25uYW1lID09IE5VTEwgfHwKKwkJCQkJc3RyY21wKGNvbm5hbWUsIHBhcmVudF9j b25uYW1lKSAhPSAwKQorCQkJCXsKKwkJCQkJYm9vbAkJbm9faW5oZXJpdCA9IGNvbi0+Y29ubm9p bmhlcml0OworCisJCQkJCWlmIChoYXNzcGVjcykKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KCZjb2xzcGVjLCAnLCcpOworCQkJCQlpZiAoY3R4LT5wcmV0dHkpCisJCQkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZjb2xzcGVjLCAiXG4gICAgIik7CisJCQkJCWVsc2UgaWYgKGhhc3NwZWNz KQorCQkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmNvbHNwZWMsICcgJyk7CisJCQkJCWhhc3Nw ZWNzID0gdHJ1ZTsKKworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZjb2xzcGVjLCAiQ09OU1RSQUlO VCAlcyBOT1QgTlVMTCAlcyIsCisJCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihjb25uYW1lKSwK KwkJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGF0dG5hbWUpKTsKKwkJCQkJaWYgKG5vX2luaGVy aXQpCisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjb2xzcGVjLCAiIE5PIElOSEVSSVQi KTsKKworCQkJCQkvKgorCQkJCQkgKiBBbHNvIGFkZCB0byBza2lwX25vdG51bGxfb2lkcyBzbyBl bWl0X2xvY2FsX2NvbnN0cmFpbnRzCisJCQkJCSAqIGRvZXMgbm90IHRyeSB0byBlbWl0IGl0IGFn YWluIGFzIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5ULgorCQkJCQkgKi8KKwkJCQkJY3R4LT5z a2lwX25vdG51bGxfb2lkcyA9CisJCQkJCQlsYXBwZW5kX29pZChjdHgtPnNraXBfbm90bnVsbF9v aWRzLCBjb24tPm9pZCk7CisJCQkJfQorCisJCQkJcGZyZWUoY29ubmFtZSk7CisJCQkJcGZyZWUo YXR0bmFtZSk7CisJCQkJaWYgKHBhcmVudF9jb25uYW1lKQorCQkJCQlwZnJlZShwYXJlbnRfY29u bmFtZSk7CisJCQl9CisKKwkJCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJCQl0YWJsZV9j bG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWlmIChoYXNzcGVjcykKKwkJCXsK KwkJCQlpZiAoY3R4LT5wcmV0dHkpCisJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAi IChcbiVzXG4pIiwgY29sc3BlYy5kYXRhKTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0lu Zm8oJmN0eC0+YnVmLCAiICglcykiLCBjb2xzcGVjLmRhdGEpOworCQkJfQorCQkJcGZyZWUoY29s c3BlYy5kYXRhKTsKKwkJfQorCisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiICVzIiwg Zm9yVmFsdWVzID8gZm9yVmFsdWVzIDogIkRFRkFVTFQiKTsKKwkJaWYgKGZvclZhbHVlcykKKwkJ CXBmcmVlKGZvclZhbHVlcyk7CisJCWlmIChib3VuZFN0cikKKwkJCXBmcmVlKGJvdW5kU3RyKTsK KwkJcGZyZWUocGFyZW50UXVhbCk7CisJCXBmcmVlKHBhcmVudFJlbG5hbWUpOworCX0KKwllbHNl IGlmIChpc190eXBlZCkKKwl7CisJCWNoYXIJICAgKnR5cG5hbWUgPSBmb3JtYXRfdHlwZV9iZV9x dWFsaWZpZWQocmVsLT5yZF9yZWwtPnJlbG9mdHlwZSk7CisKKwkJYXBwZW5kU3RyaW5nSW5mbygm Y3R4LT5idWYsICIgT0YgJXMiLCB0eXBuYW1lKTsKKwkJcGZyZWUodHlwbmFtZSk7CisKKwkJYXBw ZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMoJmN0eC0+YnVmLCByZWwsIGN0eC0+cHJldHR5LAor CQkJCQkJCQkJICBpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfQ0hFQ0spLAor CQkJCQkJCQkJICBjdHgtPm5uX2VudHJpZXMpOworCX0KKwllbHNlCisJeworCQlMaXN0CSAgICpw YXJlbnRzOworCQlMaXN0Q2VsbCAgICpsYzsKKwkJYm9vbAkJZmlyc3Q7CisJCWludAkJCWJ1Zl9s ZW5fYmVmb3JlOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiICgiKTsK KworCQlidWZfbGVuX2JlZm9yZSA9IGN0eC0+YnVmLmxlbjsKKwkJYXBwZW5kX2NvbHVtbl9kZWZz KCZjdHgtPmJ1ZiwgcmVsLCBjdHgtPnByZXR0eSwKKwkJCQkJCSAgIGlzX2tpbmRfaW5jbHVkZWQo Y3R4LCBUQUJMRV9ERExfS0lORF9DSEVDSyksCisJCQkJCQkgICBjdHgtPnNjaGVtYV9xdWFsaWZp ZWQsIGN0eC0+bm5fZW50cmllcyk7CisKKwkJLyoKKwkJICogRm9yIElOSEVSSVRTIGNoaWxkcmVu LCBpbmhlcml0ZWQgY29sdW1ucyB3aXRoIGEgbG9jYWwgTk9UIE5VTEwKKwkJICogY2Fycnlpbmcg YSB1c2VyLWRlZmluZWQgbmFtZSBuZWVkIGEgdGFibGUtbGV2ZWwgQ09OU1RSQUlOVCBjbGF1c2UK KwkJICogaGVyZS4gIFdpdGhvdXQgaXQsIHdoZW4gdGhlIHBhcmVudCdzIE5PVCBOVUxMIGlzIGFk ZGVkIGFuZAorCQkgKiBwcm9wYWdhdGVzIHRvIHRoZSBjaGlsZCwgYSBzdWJzZXF1ZW50IG91dC1v Zi1saW5lIEFMVEVSIFRBQkxFIEFERAorCQkgKiBDT05TVFJBSU5UIGZhaWxzIGJlY2F1c2UgYSBO T1QgTlVMTCBhbHJlYWR5IGNvdmVycyB0aGUgY29sdW1uLgorCQkgKiBFbWl0dGluZyB0aGUgY29u c3RyYWludCBpbmxpbmUgYXQgQ1JFQVRFIFRBQkxFIHRpbWUgY2F1c2VzIGl0IHRvCisJCSAqIG1l cmdlIGNvcnJlY3RseSB3aXRoIHRoZSBwYXJlbnQncyBwcm9wYWdhdGVkIGNvbnN0cmFpbnQuCisJ CSAqLworCQl7CisJCQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsK KwkJCWJvb2wJCWFueV9jb250ZW50ID0gKGN0eC0+YnVmLmxlbiA+IGJ1Zl9sZW5fYmVmb3JlKTsK KworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCQkJeworCQkJ CUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCQkJ TG9jYWxOb3ROdWxsRW50cnkgKm5uOworCisJCQkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0 dC0+YXR0aXNsb2NhbCkKKwkJCQkJY29udGludWU7CisKKwkJCQlubiA9ICZjdHgtPm5uX2VudHJp ZXNbYXR0LT5hdHRudW1dOworCQkJCWlmIChubi0+Y29ub2lkID09IEludmFsaWRPaWQgfHwgbm4t PmlzX2F1dG8pCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKGFueV9jb250ZW50KQorCQkJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICcsJyk7CisJCQkJaWYgKGN0eC0+cHJldHR5 KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIlxuICAgICIpOworCQkJ CWVsc2UgaWYgKGFueV9jb250ZW50KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5i dWYsICcgJyk7CisJCQkJYW55X2NvbnRlbnQgPSB0cnVlOworCisJCQkJYXBwZW5kU3RyaW5nSW5m bygmY3R4LT5idWYsICJDT05TVFJBSU5UICVzIE5PVCBOVUxMICVzIiwKKwkJCQkJCQkJIHF1b3Rl X2lkZW50aWZpZXIobm4tPm5hbWUpLAorCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3Ry KGF0dC0+YXR0bmFtZSkpKTsKKwkJCQlpZiAobm4tPm5vX2luaGVyaXQpCisJCQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIE5PIElOSEVSSVQiKTsKKwkJCX0KKwkJfQorCisJ CWlmIChjdHgtPnByZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAi XG4pIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJyknKTsK KworCQlwYXJlbnRzID0gZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzKGN0eC0+cmVsaWQsIE5vTG9j ayk7CisJCWlmIChwYXJlbnRzICE9IE5JTCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmY3R4LT5idWYsICIgSU5IRVJJVFMgKCIpOworCQkJZmlyc3QgPSB0cnVlOworCQkJZm9yZWFj aChsYywgcGFyZW50cykKKwkJCXsKKwkJCQlPaWQJCQlwb2lkID0gbGZpcnN0X29pZChsYyk7CisJ CQkJY2hhcgkgICAqcG5hbWUgPSBsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChwb2lkLAorCQkJCQkJ CQkJCQkJCQkJY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQkJCQkJY3R4LT5iYXNl X25hbWVzcGFjZSk7CisKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZjdHgtPmJ1ZiwgIiwgIik7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgcG5hbWUpOworCQkJCXBmcmVlKHBuYW1lKTsKKwkJCX0K KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJyknKTsKKwkJCWxpc3RfZnJlZShw YXJlbnRzKTsKKwkJfQorCX0KKworCWlmIChyZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURf VEFCTEUpCisJeworCQlEYXR1bQkJcGFydGtleURhdHVtOworCQljaGFyCSAgICpwYXJ0a2V5Owor CisJCXBhcnRrZXlEYXR1bSA9IE9pZEZ1bmN0aW9uQ2FsbDEoRl9QR19HRVRfUEFSVEtFWURFRiwK KwkJCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwkJcGFydGtleSA9IFRl eHREYXR1bUdldENTdHJpbmcocGFydGtleURhdHVtKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4 LT5idWYsICIgUEFSVElUSU9OIEJZICVzIiwgcGFydGtleSk7CisJCXBmcmVlKHBhcnRrZXkpOwor CX0KKworCWlmIChPaWRJc1ZhbGlkKHJlbC0+cmRfcmVsLT5yZWxhbSkgJiYKKwkJcmVsLT5yZF9y ZWwtPnJlbGFtICE9IEhFQVBfVEFCTEVfQU1fT0lEKQorCXsKKwkJY2hhcgkgICAqYW1uYW1lID0g Z2V0X2FtX25hbWUocmVsLT5yZF9yZWwtPnJlbGFtKTsKKworCQlpZiAoYW1uYW1lICE9IE5VTEwp CisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiIFVTSU5HICVzIiwKKwkJCQkJ CQkgcXVvdGVfaWRlbnRpZmllcihhbW5hbWUpKTsKKwkJCXBmcmVlKGFtbmFtZSk7CisJCX0KKwl9 CisKKwlpZiAoIXJlbG9wdElzbnVsbCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0 eC0+YnVmLCAiIFdJVEggKCIpOworCQlnZXRfcmVsb3B0aW9ucygmY3R4LT5idWYsIHJlbG9wdERh dHVtKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmN0eC0+YnVmLCAnKScpOworCX0KKworCVJl bGVhc2VTeXNDYWNoZShjbGFzc3R1cCk7CisKKwlpZiAocmVscGVyc2lzdGVuY2UgPT0gUkVMUEVS U0lTVEVOQ0VfVEVNUCkKKwl7CisJCU9uQ29tbWl0QWN0aW9uIG9jID0gZ2V0X29uX2NvbW1pdF9h Y3Rpb24oY3R4LT5yZWxpZCk7CisKKwkJaWYgKG9jID09IE9OQ09NTUlUX0RFTEVURV9ST1dTKQor CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIgT04gQ09NTUlUIERFTEVURSBS T1dTIik7CisJCWVsc2UgaWYgKG9jID09IE9OQ09NTUlUX0RST1ApCisJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiBPTiBDT01NSVQgRFJPUCIpOworCX0KKworCWlmICghY3R4 LT5ub190YWJsZXNwYWNlICYmIE9pZElzVmFsaWQocmVsLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2Up KQorCXsKKwkJY2hhcgkgICAqdHNuYW1lID0gZ2V0X3RhYmxlc3BhY2VfbmFtZShyZWwtPnJkX3Jl bC0+cmVsdGFibGVzcGFjZSk7CisKKwkJaWYgKHRzbmFtZSAhPSBOVUxMKQorCQl7CisJCQlhcHBl bmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBUQUJMRVNQQUNFICVzIiwKKwkJCQkJCQkgcXVvdGVf aWRlbnRpZmllcih0c25hbWUpKTsKKwkJCXBmcmVlKHRzbmFtZSk7CisJCX0KKwl9CisKKwlhcHBl bmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICc7Jyk7CisJYXBwZW5kX3N0bXQoY3R4KTsKK30K KworLyoKKyAqIGVtaXRfb3duZXJfc3RtdAorICoJCUFMVEVSIFRBQkxFIHF1YWxuYW1lIE9XTkVS IFRPIHJvbGUuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X293bmVyX3N0bXQoVGFibGVEZGxDb250 ZXh0ICpjdHgpCit7CisJY2hhcgkgICAqb3duZXI7CisKKwlpZiAoY3R4LT5ub19vd25lcikKKwkJ cmV0dXJuOworCisJb3duZXIgPSBHZXRVc2VyTmFtZUZyb21JZChjdHgtPnJlbC0+cmRfcmVsLT5y ZWxvd25lciwgZmFsc2UpOworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCWFwcGVuZFN0 cmluZ0luZm8oJmN0eC0+YnVmLCAiQUxURVIgVEFCTEUgJXMgT1dORVIgVE8gJXM7IiwKKwkJCQkJ IGN0eC0+cXVhbG5hbWUsIHF1b3RlX2lkZW50aWZpZXIob3duZXIpKTsKKwlhcHBlbmRfc3RtdChj dHgpOworCXBmcmVlKG93bmVyKTsKK30KKworLyoKKyAqIGNoaWxkX2RlZmF1bHRfaW5oZXJpdGVk X2Zyb21fcGFyZW50CisgKgkJUmV0dXJuIHRydWUgaWYgY2hpbGRfYWRiaW4gaXMgaWRlbnRpY2Fs IHRvIHRoZSBhZGJpbiBzdG9yZWQgZm9yCisgKgkJYXR0bmFtZSBvbiBhbnkgaW1tZWRpYXRlIHBh cmVudCBvZiBjaGlsZE9pZC4KKyAqCisgKgkJUG9zdGdyZVNRTCBjb3BpZXMgdGhlIGFkYmluIGV4 cHJlc3Npb24gdmVyYmF0aW0gZnJvbSBwYXJlbnQgdG8gY2hpbGQKKyAqCQl3aGVuIGEgcGFydGl0 aW9uIGlzIGNyZWF0ZWQsIHNvIGEgYnl0ZS1mb3ItYnl0ZSBtYXRjaCBtZWFucyB0aGUgY2hpbGQK KyAqCQlkaWQgbm90IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxvY2FsbHkuICBGb3IgcmVndWxhciBp bmhlcml0YW5jZSB0aGUKKyAqCQlwYXJlbnQgdHlwaWNhbGx5IGhhcyBubyBkZWZhdWx0IGF0IGFs bCAoYXR0aGFzZGVmPWZhbHNlKSwgc28gdGhlCisgKgkJZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBh bmQgdGhlIG92ZXJyaWRlIGlzIGNvcnJlY3RseSBlbWl0dGVkLgorICovCitzdGF0aWMgYm9vbAor Y2hpbGRfZGVmYXVsdF9pbmhlcml0ZWRfZnJvbV9wYXJlbnQoT2lkIGNoaWxkT2lkLCBjb25zdCBj aGFyICphdHRuYW1lLAorCQkJCQkJCQkJY29uc3QgY2hhciAqY2hpbGRfYWRiaW4pCit7CisJTGlz dAkgICAqcGFyZW50czsKKwlMaXN0Q2VsbCAgICpsYzsKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsK KworCXBhcmVudHMgPSBmaW5kX2luaGVyaXRhbmNlX3BhcmVudHMoY2hpbGRPaWQsIE5vTG9jayk7 CisKKwlmb3JlYWNoKGxjLCBwYXJlbnRzKQorCXsKKwkJT2lkCQkJcGFyZW50T2lkID0gbGZpcnN0 X29pZChsYyk7CisJCVJlbGF0aW9uCXBhcmVudFJlbDsKKwkJQXR0ck51bWJlcglwYXJlbnRBdHRu dW07CisJCVR1cGxlQ29uc3RyICpjb25zdHI7CisKKwkJcGFyZW50UmVsID0gdHJ5X3RhYmxlX29w ZW4ocGFyZW50T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlpZiAocGFyZW50UmVsID09IE5VTEwp CisJCQljb250aW51ZTsKKworCQlwYXJlbnRBdHRudW0gPSBnZXRfYXR0bnVtKHBhcmVudE9pZCwg YXR0bmFtZSk7CisJCWlmIChwYXJlbnRBdHRudW0gIT0gSW52YWxpZEF0dHJOdW1iZXIpCisJCXsK KwkJCUZvcm1fcGdfYXR0cmlidXRlIHBhcmVudEF0dCA9CisJCQkJVHVwbGVEZXNjQXR0cihSZWxh dGlvbkdldERlc2NyKHBhcmVudFJlbCksIHBhcmVudEF0dG51bSAtIDEpOworCisJCQlpZiAocGFy ZW50QXR0LT5hdHRoYXNkZWYpCisJCQl7CisJCQkJY29uc3RyID0gUmVsYXRpb25HZXREZXNjcihw YXJlbnRSZWwpLT5jb25zdHI7CisJCQkJaWYgKGNvbnN0ciAhPSBOVUxMKQorCQkJCXsKKwkJCQkJ Zm9yIChpbnQgaiA9IDA7IGogPCBjb25zdHItPm51bV9kZWZ2YWw7IGorKykKKwkJCQkJeworCQkJ CQkJaWYgKGNvbnN0ci0+ZGVmdmFsW2pdLmFkbnVtID09IHBhcmVudEF0dG51bSAmJgorCQkJCQkJ CXN0cmNtcChjb25zdHItPmRlZnZhbFtqXS5hZGJpbiwgY2hpbGRfYWRiaW4pID09IDApCisJCQkJ CQl7CisJCQkJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJ fQorCQkJCX0KKwkJCX0KKwkJfQorCisJCXRhYmxlX2Nsb3NlKHBhcmVudFJlbCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWJyZWFrOworCX0KKworCWxpc3RfZnJlZShwYXJl bnRzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogcGFyZW50X2hhc19kZWZhdWx0X2Zv cl9jb2wKKyAqCQlSZXR1cm4gdHJ1ZSBpZiBhbnkgaW1tZWRpYXRlIHBhcmVudCBvZiBjaGlsZE9p ZCBoYXMgYSBub24tZ2VuZXJhdGVkCisgKgkJREVGQVVMVCBleHByZXNzaW9uIG9uIHRoZSBjb2x1 bW4gbmFtZWQgYXR0bmFtZS4KKyAqCisgKgkJVXNlZCB0byBkZXRlY3QgaW5oZXJpdGVkIGNvbHVt bnMgd2hlcmUgdGhlIGNoaWxkIGRyb3BwZWQgdGhlIHBhcmVudCdzCisgKgkJZGVmYXVsdDogYWZ0 ZXIgUEFSVElUSU9OIE9GIC8gSU5IRVJJVFMgdGhlIHBhcmVudCBkZWZhdWx0IGlzIHJlLWFwcGxp ZWQsCisgKgkJc28gd2UgbXVzdCBlbWl0IEFMVEVSIFRBQkxFIE9OTFkgY2hpbGQgQUxURVIgQ09M VU1OIGNvbCBEUk9QIERFRkFVTFQuCisgKi8KK3N0YXRpYyBib29sCitwYXJlbnRfaGFzX2RlZmF1 bHRfZm9yX2NvbChPaWQgY2hpbGRPaWQsIGNvbnN0IGNoYXIgKmF0dG5hbWUpCit7CisJTGlzdAkg ICAqcGFyZW50czsKKwlMaXN0Q2VsbCAgICpsYzsKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKwor CXBhcmVudHMgPSBmaW5kX2luaGVyaXRhbmNlX3BhcmVudHMoY2hpbGRPaWQsIE5vTG9jayk7CisJ Zm9yZWFjaChsYywgcGFyZW50cykKKwl7CisJCU9pZAkJCXBhcmVudE9pZCA9IGxmaXJzdF9vaWQo bGMpOworCQlBdHRyTnVtYmVyCXBhcmVudEF0dG51bSA9IGdldF9hdHRudW0ocGFyZW50T2lkLCBh dHRuYW1lKTsKKworCQlpZiAocGFyZW50QXR0bnVtICE9IEludmFsaWRBdHRyTnVtYmVyKQorCQl7 CisJCQlIZWFwVHVwbGUJYXR0VHVwID0gU2VhcmNoU3lzQ2FjaGUyKEFUVE5VTSwKKwkJCQkJCQkJ CQkJCSBPYmplY3RJZEdldERhdHVtKHBhcmVudE9pZCksCisJCQkJCQkJCQkJCQkgSW50MTZHZXRE YXR1bShwYXJlbnRBdHRudW0pKTsKKworCQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQoYXR0VHVwKSkK KwkJCXsKKwkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBwYXJlbnRBdHQgPSAoRm9ybV9wZ19hdHRyaWJ1 dGUpIEdFVFNUUlVDVChhdHRUdXApOworCisJCQkJaWYgKHBhcmVudEF0dC0+YXR0aGFzZGVmICYm IHBhcmVudEF0dC0+YXR0Z2VuZXJhdGVkID09ICdcMCcpCisJCQkJCXJlc3VsdCA9IHRydWU7CisJ CQkJUmVsZWFzZVN5c0NhY2hlKGF0dFR1cCk7CisJCQl9CisJCX0KKwkJaWYgKHJlc3VsdCkKKwkJ CWJyZWFrOworCX0KKwlsaXN0X2ZyZWUocGFyZW50cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKwor LyoKKyAqIGVtaXRfY2hpbGRfZGVmYXVsdF9vdmVycmlkZXMKKyAqCQlBTFRFUiBUQUJMRSBPTkxZ IHF1YWxuYW1lIEFMVEVSIENPTFVNTiBjb2wgU0VUIERFRkFVTFQgZXhwciAtIG9uZSBwZXIKKyAq CQlpbmhlcml0ZWQgKGF0dGlzbG9jYWw9ZmFsc2UpIG5vbi1nZW5lcmF0ZWQgY29sdW1uIHRoYXQg Y2FycmllcyBhCisgKgkJZGVmYXVsdCB3aGljaCBkaWZmZXJzIGZyb20gZXZlcnkgaW1tZWRpYXRl IHBhcmVudCdzIGRlZmF1bHQuICBVc2luZworICoJCU9OTFkgcHJldmVudHMgdGhlIHN0YXRlbWVu dCBmcm9tIGNhc2NhZGluZyBpbnRvIGdyYW5kY2hpbGRyZW4gYW5kCisgKgkJb3ZlcndyaXRpbmcg dGhlaXIgb3duIGRlZmF1bHRzLiAgRGVmYXVsdHMgdGhhdCBhcmUgc2ltcGx5IGluaGVyaXRlZAor ICoJCXVuY2hhbmdlZCBmcm9tIGEgcGFyZW50IGFyZSBza2lwcGVkIHRvIGF2b2lkIHJlZHVuZGFu dCBvdXRwdXQuCisgKgkJR2VuZXJhdGVkIGNvbHVtbnMgYXJlIHNraXBwZWQ6IHRoZWlyIGV4cHJl c3Npb24gaXMgaW5oZXJpdGVkCisgKgkJYXV0b21hdGljYWxseSBhbmQgU0VUIERFRkFVTFQgd291 bGQgZmFpbCBhdCByZXBsYXkuCisgKgorICoJCUFsc28gZW1pdHMgQUxURVIgVEFCTEUgT05MWSAu Li4gRFJPUCBERUZBVUxUIGZvciBpbmhlcml0ZWQgY29sdW1ucworICoJCXdoZXJlIHRoZSBjaGls ZCBleHBsaWNpdGx5IGRyb3BwZWQgdGhlIHBhcmVudCdzIGRlZmF1bHQ6IGFmdGVyCisgKgkJUEFS VElUSU9OIE9GIC8gSU5IRVJJVFMgdGhlIHBhcmVudCBkZWZhdWx0IGlzIHJlLWFwcGxpZWQsIGFu ZCB0aGUKKyAqCQlEUk9QIERFRkFVTFQgaXMgbmVlZGVkIHRvIHJlc3RvcmUgdGhlIGNoaWxkJ3Mg c3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzKFRh YmxlRGRsQ29udGV4dCAqY3R4KQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXRE ZXNjcihjdHgtPnJlbCk7CisJVHVwbGVDb25zdHIgKmNvbnN0ciA9IHR1cGRlc2MtPmNvbnN0cjsK KwlMaXN0CSAgICpkcGNvbnRleHQgPSBOSUw7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRl c2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NB dHRyKHR1cGRlc2MsIGkpOworCQljb25zdCBjaGFyICphZGJpbiA9IE5VTEw7CisJCWNoYXIJICAg KmRlZnN0cjsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQgfHwgYXR0LT5hdHRpc2xvY2FsKQor CQkJY29udGludWU7CisJCWlmIChhdHQtPmF0dGdlbmVyYXRlZCAhPSAnXDAnKQorCQkJY29udGlu dWU7CisKKwkJaWYgKCFhdHQtPmF0dGhhc2RlZikKKwkJeworCQkJLyoKKwkJCSAqIENvbHVtbiBo YXMgbm8gZGVmYXVsdCBidXQgYSBwYXJlbnQgZG9lczogYWZ0ZXIgUEFSVElUSU9OIE9GIC8KKwkJ CSAqIElOSEVSSVRTIHRoZSBwYXJlbnQncyBkZWZhdWx0IGlzIHJlLWFwcGxpZWQsIHNvIGVtaXQg RFJPUAorCQkJICogREVGQVVMVCB0byByZXN0b3JlIHRoZSBkcm9wcGVkIHN0YXRlLgorCQkJICov CisJCQlpZiAocGFyZW50X2hhc19kZWZhdWx0X2Zvcl9jb2woY3R4LT5yZWxpZCwgTmFtZVN0cihh dHQtPmF0dG5hbWUpKSkKKwkJCXsKKwkJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkJICJBTFRFUiBUQUJMRSBPTkxZ ICVzIEFMVEVSIENPTFVNTiAlcyBEUk9QIERFRkFVTFQ7IiwKKwkJCQkJCQkJIGN0eC0+cXVhbG5h bWUsCisJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRuYW1lKSkpOwor CQkJCWFwcGVuZF9zdG10KGN0eCk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIExv Y2F0ZSB0aGUgcmF3IGFkYmluIGZvciBwYXJlbnQtY29tcGFyaXNvbiBhbmQgZm9yIGRlcGFyc2Uu ICovCisJCWlmIChjb25zdHIgIT0gTlVMTCkKKwkJeworCQkJZm9yIChpbnQgaiA9IDA7IGogPCBj b25zdHItPm51bV9kZWZ2YWw7IGorKykKKwkJCXsKKwkJCQlpZiAoY29uc3RyLT5kZWZ2YWxbal0u YWRudW0gPT0gYXR0LT5hdHRudW0pCisJCQkJeworCQkJCQlhZGJpbiA9IGNvbnN0ci0+ZGVmdmFs W2pdLmFkYmluOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGFkYmluID09 IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBTa2lwIGNvbHVtbnMgd2hvc2UgZGVm YXVsdCBleHByZXNzaW9uIGlzIGlkZW50aWNhbCB0byBhIHBhcmVudCdzOworCQkgKiB0aGUgY2hp bGQgbWVyZWx5IGluaGVyaXRlZCBpdCAodHlwaWNhbCBmb3IgcGFydGl0aW9uIGNoaWxkcmVuKS4K KwkJICogQW4gZXhwbGljaXQgbG9jYWwgb3ZlcnJpZGUgd2lsbCBoYXZlIGEgZGlmZmVyZW50IGFk YmluLgorCQkgKi8KKwkJaWYgKGNoaWxkX2RlZmF1bHRfaW5oZXJpdGVkX2Zyb21fcGFyZW50KGN0 eC0+cmVsaWQsCisJCQkJCQkJCQkJCQlOYW1lU3RyKGF0dC0+YXR0bmFtZSksCisJCQkJCQkJCQkJ CQlhZGJpbikpCisJCQljb250aW51ZTsKKworCQlkZWZzdHIgPSBmaW5kX2F0dHJkZWZfdGV4dChj dHgtPnJlbCwgYXR0LT5hdHRudW0sICZkcGNvbnRleHQpOworCQlpZiAoZGVmc3RyID09IE5VTEwp CisJCQljb250aW51ZTsKKworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5k U3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkgIkFMVEVSIFRBQkxFIE9OTFkgJXMgQUxURVIg Q09MVU1OICVzIFNFVCBERUZBVUxUICVzOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJ CSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRuYW1lKSksCisJCQkJCQkgZGVmc3Ry KTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJcGZyZWUoZGVmc3RyKTsKKwl9Cit9CisKKy8qCisg KiBlbWl0X2F0dG9wdGlvbnMKKyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBBTFRFUiBDT0xVTU4g Y29sIFNFVCAoLi4uKSAtIG9uZSBwZXIgY29sdW1uCisgKgkJd2l0aCBub24tbnVsbCBwZ19hdHRy aWJ1dGUuYXR0b3B0aW9ucy4gIFRoZSBpbmxpbmUgZm9ybSBvZiB0aGVzZQorICoJCW9wdGlvbnMg aXNuJ3QgYXZhaWxhYmxlIGluIENSRUFURSBUQUJMRSwgc28gdGhleSBjb21lIG91dCBoZXJlLgor ICovCitzdGF0aWMgdm9pZAorZW1pdF9hdHRvcHRpb25zKFRhYmxlRGRsQ29udGV4dCAqY3R4KQor eworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihjdHgtPnJlbCk7CisKKwlm b3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0 dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQlIZWFwVHVwbGUJYXR0 VHVwOworCQlEYXR1bQkJb3B0RGF0dW07CisJCWJvb2wJCW9wdElzbnVsbDsKKworCQlpZiAoYXR0 LT5hdHRpc2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQlhdHRUdXAgPSBTZWFyY2hTeXNDYWNo ZTIoQVRUTlVNLAorCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSwKKwkJCQkJ CQkJIEludDE2R2V0RGF0dW0oYXR0LT5hdHRudW0pKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGF0dFR1cCkpCisJCQljb250aW51ZTsKKworCQlvcHREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihB VFROVU0sIGF0dFR1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19hdHRyaWJ1dGVfYXR0b3B0aW9ucywg Jm9wdElzbnVsbCk7CisJCWlmICghb3B0SXNudWxsKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8o JmN0eC0+YnVmKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxU RVIgVEFCTEUgJXMgQUxURVIgQ09MVU1OICVzIFNFVCAoIiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFt ZSwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpKTsKKwkJ CWdldF9yZWxvcHRpb25zKCZjdHgtPmJ1Ziwgb3B0RGF0dW0pOworCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmY3R4LT5idWYsICIpOyIpOworCQkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJfQorCQlS ZWxlYXNlU3lzQ2FjaGUoYXR0VHVwKTsKKwl9Cit9CisKKy8qCisgKiBlbWl0X3R5cGVkX2NvbHVt bl9zdG9yYWdlCisgKgkJRm9yIHR5cGVkIHRhYmxlcyAoQ1JFQVRFIFRBQkxFIC4uLiBPRiB0eXBl X25hbWUpLCBlbWl0IHBlci1jb2x1bW4KKyAqCQlTVE9SQUdFIGFuZCBDT01QUkVTU0lPTiBvdmVy cmlkZXMgYXMgQUxURVIgVEFCTEUgc3RhdGVtZW50cy4KKyAqCisgKgkJVGhlIHR5cGVkLXRhYmxl IGdyYW1tYXIgYWxsb3dzIG9ubHkgREVGQVVMVCAvIE5PVCBOVUxMIC8gQ0hFQ0sgaW4gdGhlCisg KgkJQ1JFQVRFIFRBQkxFIGNvbHVtbi1vcHRpb25zIGxpc3QgKGNvbHVtbk9wdGlvbnMgLT4gQ29s UXVhbExpc3QpLCBzbworICoJCVNUT1JBR0UgYW5kIENPTVBSRVNTSU9OIGNhbm5vdCBhcHBlYXIg aW5saW5lIHRoZXJlLiAgVGhleSBtdXN0IGJlCisgKgkJZW1pdHRlZCBwb3N0LUNSRUFURSwgbWF0 Y2hpbmcgd2hhdCBwZ19kdW1wIHByb2R1Y2VzLgorICovCitzdGF0aWMgdm9pZAorZW1pdF90eXBl ZF9jb2x1bW5fc3RvcmFnZShUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlUdXBsZURlc2MJdHVw ZGVzYzsKKworCWlmICghT2lkSXNWYWxpZChjdHgtPnJlbC0+cmRfcmVsLT5yZWxvZnR5cGUpKQor CQlyZXR1cm47CisKKwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihjdHgtPnJlbCk7CisKKwlm b3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0 dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCisJCWlmIChhdHQtPmF0 dGlzZHJvcHBlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChhdHQtPmF0dHN0b3JhZ2UgIT0gZ2V0 X3R5cHN0b3JhZ2UoYXR0LT5hdHR0eXBpZCkpCisJCXsKKwkJCXJlc2V0U3RyaW5nSW5mbygmY3R4 LT5idWYpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJICJBTFRFUiBU QUJMRSBPTkxZICVzIEFMVEVSIENPTFVNTiAlcyBTRVQgU1RPUkFHRSAlczsiLAorCQkJCQkJCSBj dHgtPnF1YWxuYW1lLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRu YW1lKSksCisJCQkJCQkJIHN0b3JhZ2VfbmFtZShhdHQtPmF0dHN0b3JhZ2UpKTsKKwkJCWFwcGVu ZF9zdG10KGN0eCk7CisJCX0KKworCQlpZiAoQ29tcHJlc3Npb25NZXRob2RJc1ZhbGlkKGF0dC0+ YXR0Y29tcHJlc3Npb24pKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgT05MWSAl cyBBTFRFUiBDT0xVTU4gJXMgU0VUIENPTVBSRVNTSU9OICVzOyIsCisJCQkJCQkJIGN0eC0+cXVh bG5hbWUsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSwK KwkJCQkJCQkgR2V0Q29tcHJlc3Npb25NZXRob2ROYW1lKGF0dC0+YXR0Y29tcHJlc3Npb24pKTsK KwkJCWFwcGVuZF9zdG10KGN0eCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBlbWl0X2luZGV4ZXMK KyAqCQlDUkVBVEUgSU5ERVggcGVyIG5vbi1jb25zdHJhaW50LWJhY2tlZCBpbmRleCBvbiB0aGUg cmVsYXRpb24uCisgKgkJSW5kZXhlcyB0aGF0IGJhY2sgUEsgLyBVTklRVUUgLyBFWENMVURFIGNv bnN0cmFpbnRzIGFyZSBlbWl0dGVkCisgKgkJb3V0LW9mLWxpbmUgYnkgZW1pdF9sb2NhbF9jb25z dHJhaW50cyAodGhlIEFMVEVSIFRBQkxFIC4uLiBBREQKKyAqCQlDT05TVFJBSU5UIHN0YXRlbWVu dCBjcmVhdGVzIHRoZSBpbmRleCBpbXBsaWNpdGx5KS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRf aW5kZXhlcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlMaXN0CSAgICppbmRleG9pZHM7CisJ TGlzdENlbGwgICAqbGM7CisKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExf S0lORF9JTkRFWCkpCisJCXJldHVybjsKKworCWluZGV4b2lkcyA9IFJlbGF0aW9uR2V0SW5kZXhM aXN0KGN0eC0+cmVsKTsKKwlmb3JlYWNoKGxjLCBpbmRleG9pZHMpCisJeworCQlPaWQJCQlpZHhv aWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJSGVhcFR1cGxlCWluZFR1cDsKKwkJRm9ybV9wZ19pbmRl eCBpZHhmb3JtOworCQljaGFyCSAgICppZHhkZWY7CisJCWludDE2CQlpbmRua2V5YXR0czsKKwor CQlpZiAoT2lkSXNWYWxpZChnZXRfaW5kZXhfY29uc3RyYWludChpZHhvaWQpKSkKKwkJCWNvbnRp bnVlOworCisJCS8qCisJCSAqIFNraXAgaW5kZXhlcyB0aGF0IHdlcmUgaW5oZXJpdGVkIGZyb20g YSBwYXJlbnQgcGFydGl0aW9uZWQgaW5kZXguCisJCSAqIFRoZXkgYXJlIGNyZWF0ZWQgYXV0b21h dGljYWxseSB3aGVuIHRoZSBwYXJlbnQgaW5kZXggRERMIGlzCisJCSAqIHJlcGxheWVkIGFuZCB0 aGUgcGFydGl0aW9uIGlzIGF0dGFjaGVkLCBzbyBlbWl0dGluZyB0aGVtIHNlcGFyYXRlbHkKKwkJ ICogd291bGQgcHJvZHVjZSBhICJyZWxhdGlvbiBhbHJlYWR5IGV4aXN0cyIgZXJyb3Igb24gcmVw bGF5LgorCQkgKi8KKwkJaWYgKGdldF9yZWxfcmVsaXNwYXJ0aXRpb24oaWR4b2lkKSkKKwkJCWNv bnRpbnVlOworCisJCWluZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJ ZEdldERhdHVtKGlkeG9pZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaW5kVHVwKSkKKwkJ CWNvbnRpbnVlOworCQlpZHhmb3JtID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChpbmRUdXAp OworCisJCS8qIFNraXAgaW52YWxpZCBpbmRleGVzOyB0aGV5IG1heSBiZSBsZWZ0IG92ZXIgZnJv bSBhIGZhaWxlZCBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZLiAqLworCQlpZiAoIWlkeGZvcm0t PmluZGlzdmFsaWQpCisJCXsKKwkJCVJlbGVhc2VTeXNDYWNoZShpbmRUdXApOworCQkJY29udGlu dWU7CisJCX0KKworCQlpbmRua2V5YXR0cyA9IGlkeGZvcm0tPmluZG5rZXlhdHRzOworCQlSZWxl YXNlU3lzQ2FjaGUoaW5kVHVwKTsKKworCQlpZHhkZWYgPSBwZ19nZXRfaW5kZXhkZWZfZGRsKGlk eG9pZCk7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZv KCZjdHgtPmJ1ZiwgIiVzOyIsIGlkeGRlZik7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJCXBmcmVl KGlkeGRlZik7CisKKwkJLyoKKwkJICogRW1pdCBBTFRFUiBJTkRFWCAuLi4gQUxURVIgQ09MVU1O IG4gU0VUIFNUQVRJU1RJQ1MgZm9yIGFueSBrZXkKKwkJICogY29sdW1uIHRoYXQgaGFzIGEgbm9u LWRlZmF1bHQgc3RhdGlzdGljcyB0YXJnZXQuICBFeHByZXNzaW9uCisJCSAqIGNvbHVtbnMgKGlu ZG5rZXlhdHRzIGNvdmVycyB0aGVtKSBhcmUgdGhlIG9ubHkga2luZCB0aGF0IGNhbiBoYXZlCisJ CSAqIGEgc3RhdGlzdGljcyB0YXJnZXQgb24gYW4gaW5kZXguCisJCSAqLworCQl7CisJCQljaGFy CSAgICppZHhxdWFsbmFtZSA9IGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KGlkeG9pZCwKKwkJCQkJ CQkJCQkJCQkJCSAgY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQkJCQkJICBjdHgt PmJhc2VfbmFtZXNwYWNlKTsKKworCQkJZm9yIChpbnQgaiA9IDE7IGogPD0gaW5kbmtleWF0dHM7 IGorKykKKwkJCXsKKwkJCQlIZWFwVHVwbGUJYXR0VHVwID0gU2VhcmNoU3lzQ2FjaGUyKEFUVE5V TSwKKwkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShpZHhvaWQpLAorCQkJCQkJCQkJCQkJ CSBJbnQxNkdldERhdHVtKGopKTsKKworCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKGF0dFR1cCkp CisJCQkJeworCQkJCQlib29sCQlpc251bGw7CisJCQkJCURhdHVtCQlzdGF0dGFyZ2V0RGF0dW0g PQorCQkJCQkJU3lzQ2FjaGVHZXRBdHRyKEFUVE5VTSwgYXR0VHVwLAorCQkJCQkJCQkJCUFudW1f cGdfYXR0cmlidXRlX2F0dHN0YXR0YXJnZXQsCisJCQkJCQkJCQkJJmlzbnVsbCk7CisKKwkJCQkJ aWYgKCFpc251bGwgJiYgRGF0dW1HZXRJbnQxNihzdGF0dGFyZ2V0RGF0dW0pID49IDApCisJCQkJ CXsKKwkJCQkJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQkJCQkJYXBwZW5kU3RyaW5n SW5mbygmY3R4LT5idWYsCisJCQkJCQkJCQkJICJBTFRFUiBJTkRFWCAlcyBBTFRFUiBDT0xVTU4g JWQgU0VUIFNUQVRJU1RJQ1MgJWQ7IiwKKwkJCQkJCQkJCQkgaWR4cXVhbG5hbWUsIGosCisJCQkJ CQkJCQkJIChpbnQpIERhdHVtR2V0SW50MTYoc3RhdHRhcmdldERhdHVtKSk7CisJCQkJCQlhcHBl bmRfc3RtdChjdHgpOworCQkJCQl9CisJCQkJCVJlbGVhc2VTeXNDYWNoZShhdHRUdXApOworCQkJ CX0KKwkJCX0KKwkJCXBmcmVlKGlkeHF1YWxuYW1lKTsKKwkJfQorCX0KKwlsaXN0X2ZyZWUoaW5k ZXhvaWRzKTsKK30KKworLyoKKyAqIGVtaXRfY2x1c3Rlcl9vbgorICoJCUFMVEVSIFRBQkxFIHF1 YWxuYW1lIENMVVNURVIgT04gaW5kZXhfbmFtZSAtIGVtaXR0ZWQgd2hlbiBhbnkgaW5kZXgKKyAq CQlvbiB0aGUgcmVsYXRpb24gaGFzIGluZGlzY2x1c3RlcmVkPXRydWUuCisgKi8KK3N0YXRpYyB2 b2lkCitlbWl0X2NsdXN0ZXJfb24oVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJTGlzdAkgICAq aW5kZXhvaWRzOworCUxpc3RDZWxsICAgKmxjOworCisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0 eCwgVEFCTEVfRERMX0tJTkRfSU5ERVgpKQorCQlyZXR1cm47CisKKwlpbmRleG9pZHMgPSBSZWxh dGlvbkdldEluZGV4TGlzdChjdHgtPnJlbCk7CisJZm9yZWFjaChsYywgaW5kZXhvaWRzKQorCXsK KwkJT2lkCQkJaWR4b2lkID0gbGZpcnN0X29pZChsYyk7CisJCUhlYXBUdXBsZQlpbmRUdXA7CisJ CUZvcm1fcGdfaW5kZXggaWR4Zm9ybTsKKworCQlpbmRUdXAgPSBTZWFyY2hTeXNDYWNoZTEoSU5E RVhSRUxJRCwgT2JqZWN0SWRHZXREYXR1bShpZHhvaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGluZFR1cCkpCisJCQljb250aW51ZTsKKwkJaWR4Zm9ybSA9IChGb3JtX3BnX2luZGV4KSBH RVRTVFJVQ1QoaW5kVHVwKTsKKworCQlpZiAoaWR4Zm9ybS0+aW5kaXNjbHVzdGVyZWQpCisJCXsK KwkJCWNoYXIJICAgKmlkeG5hbWUgPSBnZXRfcmVsX25hbWUoaWR4b2lkKTsKKworCQkJUmVsZWFz ZVN5c0NhY2hlKGluZFR1cCk7CisJCQlpZiAoaWR4bmFtZSAhPSBOVUxMKQorCQkJeworCQkJCXJl c2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVm LAorCQkJCQkJCQkgIkFMVEVSIFRBQkxFICVzIENMVVNURVIgT04gJXM7IiwKKwkJCQkJCQkJIGN0 eC0+cXVhbG5hbWUsCisJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGlkeG5hbWUpKTsKKwkJCQlh cHBlbmRfc3RtdChjdHgpOworCQkJCXBmcmVlKGlkeG5hbWUpOworCQkJfQorCQkJYnJlYWs7CQkJ CS8qIGF0IG1vc3Qgb25lIGluZGV4IHBlciB0YWJsZSBjYW4gYmUgY2x1c3RlcmVkICovCisJCX0K KwkJUmVsZWFzZVN5c0NhY2hlKGluZFR1cCk7CisJfQorCWxpc3RfZnJlZShpbmRleG9pZHMpOwor fQorCisvKgorICogZW1pdF9sb2NhbF9jb25zdHJhaW50cworICoJCUFMVEVSIFRBQkxFIC4uLiBB REQgQ09OU1RSQUlOVCBmb3IgZWFjaCBsb2NhbGx5LWRlZmluZWQgY29uc3RyYWludAorICoJCW9u IHRoZSByZWxhdGlvbi4gIEluaGVyaXRlZCBjb25zdHJhaW50cyAoY29uaXNsb2NhbD1mYWxzZSkg Y29tZQorICoJCWZyb20gdGhlIHBhcmVudCdzIERETC4gIENIRUNLIGNvbnN0cmFpbnRzIGFyZSBl bWl0dGVkIGlubGluZSBmb3IKKyAqCQlyZWd1bGFyL3R5cGVkIHRhYmxlcyAoc2tpcCBoZXJlKSBi dXQgb3V0LW9mLWxpbmUgZm9yIHBhcnRpdGlvbgorICoJCWNoaWxkcmVuIChubyBjb2x1bW4gbGlz dCB0byBsaXZlIGluKS4KKyAqCisgKgkJTk9UIE5VTEwgY29uc3RyYWludHMgYXJlIHRyYWNrZWQg dmlhIHNraXBfbm90bnVsbF9vaWRzIHRvIGF2b2lkCisgKgkJZG91YmxlLWVtaXNzaW9uLiAgVGhl IHNldCBjb3ZlcnM6IChhKSBsb2NhbCBjb2x1bW5zLCB3aGVyZSB0aGUKKyAqCQljb2x1bW4tZW1p dCBoZWxwZXJzIG1hdGVyaWFsaXNlIHRoZSBjb25zdHJhaW50IGlubGluZTsgKGIpIGluaGVyaXRl ZAorICoJCWNvbHVtbnMgd2l0aCBhIHVzZXItZGVmaW5lZCBuYW1lLCB3aGVyZSBlbWl0X2NyZWF0 ZV90YWJsZV9zdG10CisgKgkJZW1pdHMgYSB0YWJsZS1sZXZlbCBDT05TVFJBSU5UIGNsYXVzZSBz byB0aGUgbmFtZSBzdXJ2aXZlcyB0aGUKKyAqCQlQQVJUSVRJT04gT0YgLyBJTkhFUklUUyByZXBs YXk7IGFuZCAoYykgYXV0by1uYW1lZCBOT1QgTlVMTHMgb24KKyAqCQlwYXJ0aXRpb24gY2hpbGRy ZW4sIHdoaWNoIGFyZSByZS1jcmVhdGVkIGJ5IFBBUlRJVElPTiBPRiBhbmQgd291bGQKKyAqCQlj b2xsaWRlIHdpdGggYW4gb3V0LW9mLWxpbmUgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQuICBB bnkgTk9UCisgKgkJTlVMTCBub3QgaW4gc2tpcF9ub3RudWxsX29pZHMgaXMgZW1pdHRlZCBoZXJl IChlLmcuIGluaGVyaXRlZAorICoJCWNvbHVtbnMgd2l0aCBhbiBhdXRvLW5hbWUgb24gYSBwbGFp biBJTkhFUklUUyBjaGlsZCkuCisgKgorICoJCUVhY2ggY29udHlwZSBpcyBnYXRlZCBvbiB0aGUg bWF0Y2hpbmcga2luZCBpbiB0aGUgb25seSAvIGV4Y2VwdAorICoJCXZvY2FidWxhcnksIHNvIGNh bGxlcnMgY2FuIHByb2R1Y2UgZS5nLiBhbiBGSy1vbmx5IHBhc3MKKyAqCQkob25seSA9PiAnZm9y ZWlnbl9rZXknKSBvciBhIHB1Yi9zdWIgY2xvbmUgdGhhdCBrZWVwcyBvbmx5CisgKgkJdGhlIHBy aW1hcnkga2V5IChleGNlcHQgPT4gJ3VuaXF1ZSxjaGVjayxmb3JlaWduX2tleSxleGNsdXNpb24n KS4KKyAqCQlOT1QgTlVMTCBpcyBpbnRlbnRpb25hbGx5IG5vdCBpbiB0aGUgdm9jYWJ1bGFyeSAt IGFsd2F5cyBlbWl0dGVkCisgKgkJc28gY2xvbmVkIHNjaGVtYXMgZG9uJ3Qgc2lsZW50bHkgYWNj ZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQKKyAqCQloYXZlIHJlamVjdGVkLgorICovCitzdGF0 aWMgdm9pZAorZW1pdF9sb2NhbF9jb25zdHJhaW50cyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sK KwlSZWxhdGlvbgljb25SZWw7CisJU3lzU2NhbkRlc2MgY29uU2NhbjsKKwlTY2FuS2V5RGF0YSBj b25LZXk7CisJSGVhcFR1cGxlCWNvblR1cDsKKwlib29sCQlpc19wYXJ0aXRpb24gPSBjdHgtPnJl bC0+cmRfcmVsLT5yZWxpc3BhcnRpdGlvbjsKKwlMaXN0CSAgICpma19zdG10cyA9IE5JTDsKKwor CWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJU2NhbktleUluaXQoJmNvbktleSwKKwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVs aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0 RGF0dW0oY3R4LT5yZWxpZCkpOworCWNvblNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVs LCBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgdHJ1ZSwgTlVMTCwg MSwgJmNvbktleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChjb25UdXAgPSBzeXN0YWJs ZV9nZXRuZXh0KGNvblNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb24gPSAoRm9y bV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29uVHVwKTsKKworCQlpZiAoIWNvbi0+Y29uaXNs b2NhbCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEVhY2ggY29udHlwZSBpcyBnYXRlZCBv biBpdHMga2luZCBpbiB0aGUgb25seSAvIGV4Y2VwdAorCQkgKiB2b2NhYnVsYXJ5LiAgQ0hFQ0sg aXMgYWxzbyBza2lwcGVkIGZvciBub24tcGFydGl0aW9uIHJlbGF0aW9ucworCQkgKiBiZWNhdXNl IGFwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMgZW1pdHMgdGhvc2UgaW5saW5lIGluCisJ CSAqIHRoZSBDUkVBVEUgVEFCTEUgYm9keTsgcGFydGl0aW9uIGNoaWxkcmVuIGhhdmUgbm8gY29s dW1uIGxpc3QKKwkJICogdG8gbGl2ZSBpbiwgc28gdGhleSBjb21lIHRocm91Z2ggdGhpcyBsb29w LiAgTk9UIE5VTEwgaXMgbm90IGEKKwkJICogZmlsdGVyYWJsZSBraW5kIC0gZW1pdHRlZCB1bmNv bmRpdGlvbmFsbHkgdG8gYXZvaWQgcHJvZHVjaW5nCisJCSAqIHNjaGVtYXMgdGhhdCBzaWxlbnRs eSBhY2NlcHQgTlVMTHMgdGhlIHNvdXJjZSB3b3VsZCBoYXZlCisJCSAqIHJlamVjdGVkLgorCQkg Ki8KKwkJc3dpdGNoIChjb24tPmNvbnR5cGUpCisJCXsKKwkJCWNhc2UgQ09OU1RSQUlOVF9QUklN QVJZOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BSSU1B UllfS0VZKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRf VU5JUVVFOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1VO SVFVRSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0NI RUNLOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0NIRUNL KSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKgorCQkJCSAqIEZvciBub24tcGFydGl0aW9uIHJl bGF0aW9ucywgQ0hFQ0sgaXMgbm9ybWFsbHkgZW1pdHRlZAorCQkJCSAqIGlubGluZSBpbiB0aGUg Q1JFQVRFIFRBQkxFIGJvZHkgYnkKKwkJCQkgKiBhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFp bnRzLCBzbyB3ZSBza2lwIGl0IGhlcmUgdG8KKwkJCQkgKiBhdm9pZCBkb3VibGUgZW1pc3Npb24u ICBCdXQgd2hlbiBLSU5EX1RBQkxFIGlzIG5vdCBpbgorCQkJCSAqIHRoZSBhY3RpdmUgZmlsdGVy IChlLmcuIG9ubHk9PidjaGVjaycgb3IgYSBjbG9uZSB0aGF0CisJCQkJICogdGFyZ2V0cyBvbmx5 IHN1Yi1vYmplY3RzKSwgdGhlIGlubGluZSBwYXNzIG5ldmVyIHJ1bnM7CisJCQkJICogZmFsbCB0 aHJvdWdoIGFuZCBlbWl0IGVhY2ggQ0hFQ0sgdmlhIEFMVEVSIFRBQkxFIHNvIHRoZQorCQkJCSAq IHVzZXIgYWN0dWFsbHkgZ2V0cyB0aGUgY29uc3RyYWludCB0aGV5IGFza2VkIGZvci4KKwkJCQkg Ki8KKwkJCQlpZiAoIWlzX3BhcnRpdGlvbiAmJgorCQkJCQlpc19raW5kX2luY2x1ZGVkKGN0eCwg VEFCTEVfRERMX0tJTkRfVEFCTEUpKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNh c2UgQ09OU1RSQUlOVF9GT1JFSUdOOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRB QkxFX0RETF9LSU5EX0ZPUkVJR05fS0VZKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJ CQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChj dHgsIFRBQkxFX0RETF9LSU5EX0VYQ0xVU0lPTikpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFr OworCQkJY2FzZSBDT05TVFJBSU5UX05PVE5VTEw6CisJCQkJLyoKKwkJCQkgKiBPdXQtb2YtbGlu ZSBOT1QgTlVMTCBpcyBjb25jZXB0dWFsbHkgcGFydCBvZiB0aGUKKwkJCQkgKiB0YWJsZSBkZWZp bml0aW9uOiBnYXRpbmcgaXQgb24gS0lORF9UQUJMRSBtZWFucyBhbgorCQkJCSAqIG9ubHk9Zm9y ZWlnbl9rZXkgc2Vjb25kIHBhc3MgZG9lcyBub3QgcmUtZW1pdAorCQkJCSAqIE5PVCBOVUxMcyB0 aGF0IHRoZSBmaXJzdCBwYXNzIGFscmVhZHkgY3JlYXRlZCwKKwkJCQkgKiB3aGlsZSB0aGUgbm8t b3B0aW9ucyBkZWZhdWx0IHN0aWxsIGVtaXRzIHRoZW0uCisJCQkJICoKKwkJCQkgKiBza2lwX25v dG51bGxfb2lkcyBjb3ZlcnMgYWxsIGNhc2VzIHdoZXJlIE5PVCBOVUxMIHdhcworCQkJCSAqIGFs cmVhZHkgbWF0ZXJpYWxpc2VkIGlubGluZTogbG9jYWwgY29sdW1ucyAodmlhCisJCQkJICogYXBw ZW5kX2NvbHVtbl9kZWZzKSwgaW5oZXJpdGVkIGNvbHVtbnMgd2l0aCBhIHVzZXItZGVmaW5lZAor CQkJCSAqIG5hbWUgKHZpYSB0aGUgdGFibGUtbGV2ZWwgQ09OU1RSQUlOVCBjbGF1c2UgZW1pdHRl ZCBieQorCQkJCSAqIGVtaXRfY3JlYXRlX3RhYmxlX3N0bXQpLCBhbmQgYXV0by1uYW1lZCBOT1Qg TlVMTHMgb24KKwkJCQkgKiBwYXJ0aXRpb24gY2hpbGRyZW4gKHJlLWNyZWF0ZWQgYnkgUEFSVElU SU9OIE9GKS4KKwkJCQkgKi8KKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9E RExfS0lORF9UQUJMRSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChsaXN0X21lbWJlcl9vaWQo Y3R4LT5za2lwX25vdG51bGxfb2lkcywgY29uLT5vaWQpKQorCQkJCQljb250aW51ZTsKKwkJCQli cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyoKKwkJCQkgKiBBbnkgZnV0dXJlIGNvbnR5cGUgdGhl IHZvY2FidWxhcnkgZG9lcyBub3QgeWV0IGNvdmVyOgorCQkJCSAqIGZhbGwgdGhyb3VnaCBhbmQg ZW1pdCBpdCB2aWEgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZCwKKwkJCQkgKiBtYXRjaGlu ZyB0aGUgb3JpZ2luYWwgbG9vcCdzICJlbWl0IHVubGVzcyBmaWx0ZXJlZCIKKwkJCQkgKiBiZWhh dmlvci4gIFRoaXMgaXMgdW5yZWFjaGFibGUgaW4gY3VycmVudCBQRyAoZXZlcnkKKwkJCQkgKiBj b250eXBlIGFib3ZlIGlzIGVudW1lcmF0ZWQpIGJ1dCBrZXB0IGRlZmVuc2l2ZSBhZ2FpbnN0CisJ CQkJICogYSBuZXcgY29udHlwZSBiZWluZyBpbnRyb2R1Y2VkLgorCQkJCSAqLworCQkJCWJyZWFr OworCQl9CisKKwkJeworCQkJY2hhcgkgICAqY29uYm9keSA9IHBnX2dldF9jb25zdHJhaW50ZGVm X2JvZHkoY29uLT5vaWQpOworCisJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJCWFw cGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiQUxURVIgVEFCTEUgJXMgQUREIENPTlNUUkFJTlQg JXMgJXM7IiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmll cihOYW1lU3RyKGNvbi0+Y29ubmFtZSkpLAorCQkJCQkJCSBjb25ib2R5KTsKKworCQkJLyoKKwkJ CSAqIERlZmVyIEZLIHN0YXRlbWVudHMgc28gdGhleSBhcmUgZW1pdHRlZCBhZnRlciBhbGwgb3Ro ZXIKKwkJCSAqIGNvbnN0cmFpbnRzLiAgQSBzZWxmLXJlZmVyZW5jaW5nIEZLIChSRUZFUkVOQ0VT IHNhbWVfdGFibGUpCisJCQkgKiByZXF1aXJlcyB0aGUgUEsvVU5JUVVFIGl0IHRhcmdldHMgdG8g ZXhpc3QgZmlyc3QsIGFuZCBiZWNhdXNlCisJCQkgKiB0aGUgY2F0YWxvZyBzY2FuIHJldHVybnMg Y29uc3RyYWludHMgaW4gbmFtZSBvcmRlciwgYW4gRksgd2hvc2UKKwkJCSAqIG5hbWUgc29ydHMg YmVmb3JlIHRoZSBQSyBuYW1lIHdvdWxkIG90aGVyd2lzZSBiZSBlbWl0dGVkIGZpcnN0CisJCQkg KiBhbmQgZmFpbCB3aXRoICJ0aGVyZSBpcyBubyB1bmlxdWUgY29uc3RyYWludCBtYXRjaGluZyBn aXZlbgorCQkJICoga2V5cyIuCisJCQkgKi8KKwkJCWlmIChjb24tPmNvbnR5cGUgPT0gQ09OU1RS QUlOVF9GT1JFSUdOKQorCQkJCWZrX3N0bXRzID0gbGFwcGVuZChma19zdG10cywgcHN0cmR1cChj dHgtPmJ1Zi5kYXRhKSk7CisJCQllbHNlCisJCQkJYXBwZW5kX3N0bXQoY3R4KTsKKworCQkJcGZy ZWUoY29uYm9keSk7CisJCX0KKwl9CisJc3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJs ZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKiBBcHBlbmQgZGVmZXJyZWQg Rksgc3RhdGVtZW50cyBhZnRlciBhbGwgb3RoZXIgY29uc3RyYWludHMuICovCisJY3R4LT5zdGF0 ZW1lbnRzID0gbGlzdF9jb25jYXQoY3R4LT5zdGF0ZW1lbnRzLCBma19zdG10cyk7Cit9CisKKy8q CisgKiBlbWl0X3J1bGVzCisgKgkJQ1JFQVRFIFJVTEUgcGVyIGNhY2hlZCByZXdyaXRlIHJ1bGUg b24gdGhlIHJlbGF0aW9uLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9ydWxlcyhUYWJsZURkbENv bnRleHQgKmN0eCkKK3sKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lO RF9SVUxFKSB8fAorCQljdHgtPnJlbC0+cmRfcnVsZXMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBjdHgtPnJlbC0+cmRfcnVsZXMtPm51bUxvY2tzOyBpKyspCisJ eworCQlPaWQJCQlydWxlaWQgPSBjdHgtPnJlbC0+cmRfcnVsZXMtPnJ1bGVzW2ldLT5ydWxlSWQ7 CisJCWNoYXIJCWVuYWJsZWQgPSBjdHgtPnJlbC0+cmRfcnVsZXMtPnJ1bGVzW2ldLT5lbmFibGVk OworCQljaGFyCSAgICpydWxlZGVmX3N0cjsKKworCQlydWxlZGVmX3N0ciA9IHBnX2dldF9ydWxl ZGVmX2RkbChydWxlaWQpOworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsIHJ1bGVkZWZfc3RyKTsKKwkJYXBwZW5kX3N0bXQo Y3R4KTsKKwkJcGZyZWUocnVsZWRlZl9zdHIpOworCisJCS8qCisJCSAqIElmIHRoZSBydWxlJ3Mg ZmlyaW5nIHN0YXRlIGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdCAoT1JJR0lOKSwKKwkJICogZW1p dCB0aGUgYXBwcm9wcmlhdGUgQUxURVIgVEFCTEUgLi4uIEVOQUJMRS9ESVNBQkxFIFJVTEUuCisJ CSAqIFdlIG5lZWQgdGhlIHJ1bGUncyBuYW1lIGZyb20gcGdfcmV3cml0ZSBmb3IgdGhpcyBzdGF0 ZW1lbnQuCisJCSAqLworCQlpZiAoZW5hYmxlZCAhPSBSVUxFX0ZJUkVTX09OX09SSUdJTikKKwkJ eworCQkJUmVsYXRpb24JcmV3cml0ZVJlbDsKKwkJCVNjYW5LZXlEYXRhIHNjYW5rZXk7CisJCQlT eXNTY2FuRGVzYyBzY2FuOworCQkJSGVhcFR1cGxlCXJ1bGVUdXA7CisJCQljaGFyCSAgICpydWxl bmFtZTsKKworCQkJcmV3cml0ZVJlbCA9IHRhYmxlX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJCQlTY2FuS2V5SW5pdCgmc2NhbmtleSwKKwkJCQkJCUFudW1fcGdf cmV3cml0ZV9vaWQsCisJCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJ CQlPYmplY3RJZEdldERhdHVtKHJ1bGVpZCkpOworCQkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihyZXdyaXRlUmVsLCBSZXdyaXRlT2lkSW5kZXhJZCwKKwkJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwg MSwgJnNjYW5rZXkpOworCQkJcnVsZVR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQocnVsZVR1cCkpCisJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIHJ1bGUgJXUiLCBydWxlaWQpOworCQkJcnVsZW5hbWUgPSBwc3RyZHVw KE5hbWVTdHIoKChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChydWxlVHVwKSktPnJ1bGVuYW1l KSk7CisJCQlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCQkJdGFibGVfY2xvc2UocmV3cml0ZVJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJc3dpdGNoIChlbmFibGVkKQorCQkJeworCQkJCWNh c2UgUlVMRV9ESVNBQkxFRDoKKwkJCQkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCQkJ CWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBE SVNBQkxFIFJVTEUgJXM7IiwKKwkJCQkJCQkJCSBjdHgtPnF1YWxuYW1lLAorCQkJCQkJCQkJIHF1 b3RlX2lkZW50aWZpZXIocnVsZW5hbWUpKTsKKwkJCQkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJCQkJ YnJlYWs7CisJCQkJY2FzZSBSVUxFX0ZJUkVTX09OX1JFUExJQ0E6CisJCQkJCXJlc2V0U3RyaW5n SW5mbygmY3R4LT5idWYpOworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJ CQkJCSAiQUxURVIgVEFCTEUgJXMgRU5BQkxFIFJFUExJQ0EgUlVMRSAlczsiLAorCQkJCQkJCQkJ IGN0eC0+cXVhbG5hbWUsCisJCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihydWxlbmFtZSkpOwor CQkJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFJVTEVfRklSRVNf QUxXQVlTOgorCQkJCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJCQkJYXBwZW5kU3Ry aW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJCQkgIkFMVEVSIFRBQkxFICVzIEVOQUJMRSBBTFdB WVMgUlVMRSAlczsiLAorCQkJCQkJCQkJIGN0eC0+cXVhbG5hbWUsCisJCQkJCQkJCQkgcXVvdGVf aWRlbnRpZmllcihydWxlbmFtZSkpOworCQkJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJCQlicmVh azsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCX0KKwkJCXBmcmVlKHJ1bGVuYW1lKTsK KwkJfQorCX0KK30KKworLyoKKyAqIGVtaXRfc3RhdGlzdGljcworICoJCUNSRUFURSBTVEFUSVNU SUNTIHBlciBleHRlbmRlZCBzdGF0aXN0aWNzIG9iamVjdCBvbiB0aGUgcmVsYXRpb24uCisgKi8K K3N0YXRpYyB2b2lkCitlbWl0X3N0YXRpc3RpY3MoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJ UmVsYXRpb24Jc3RhdFJlbDsKKwlTeXNTY2FuRGVzYyBzdGF0U2NhbjsKKwlTY2FuS2V5RGF0YSBz dGF0S2V5OworCUhlYXBUdXBsZQlzdGF0VHVwOworCisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0 eCwgVEFCTEVfRERMX0tJTkRfU1RBVElTVElDUykpCisJCXJldHVybjsKKworCXN0YXRSZWwgPSB0 YWJsZV9vcGVuKFN0YXRpc3RpY0V4dFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2Nh bktleUluaXQoJnN0YXRLZXksCisJCQkJQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0eHJlbGlkLAor CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVt KGN0eC0+cmVsaWQpKTsKKwlzdGF0U2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihzdGF0UmVsLCBT dGF0aXN0aWNFeHRSZWxpZEluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnN0YXRL ZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoc3RhdFR1cCA9IHN5c3RhYmxlX2dldG5l eHQoc3RhdFNjYW4pKSkKKwl7CisJCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0ID0gKEZvcm1f cGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHN0YXRUdXApOworCQljaGFyCSAgICpzdGF0ZGVm ID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfZGRsKHN0YXQtPm9pZCk7CisKKwkJcmVzZXRTdHJp bmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiJXM7Iiwg c3RhdGRlZik7CisJCWFwcGVuZF9zdG10KGN0eCk7CisJCXBmcmVlKHN0YXRkZWYpOworCX0KKwlz eXN0YWJsZV9lbmRzY2FuKHN0YXRTY2FuKTsKKwl0YWJsZV9jbG9zZShzdGF0UmVsLCBBY2Nlc3NT aGFyZUxvY2spOworfQorCisvKgorICogZW1pdF9yZXBsaWNhX2lkZW50aXR5CisgKgkJQUxURVIg VEFCTEUgcXVhbG5hbWUgUkVQTElDQSBJREVOVElUWSAuLi4gLSBlbWl0dGVkIG9ubHkgd2hlbiB0 aGUKKyAqCQlyZWxyZXBsaWRlbnQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0ICgnZCcgPSB1c2Ug cHJpbWFyeSBrZXkpLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9yZXBsaWNhX2lkZW50aXR5KFRh YmxlRGRsQ29udGV4dCAqY3R4KQoreworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxF X0RETF9LSU5EX1JFUExJQ0FfSURFTlRJVFkpKQorCQlyZXR1cm47CisJaWYgKGN0eC0+cmVsLT5y ZF9yZWwtPnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQpCisJCXJldHVy bjsKKworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCXN3aXRjaCAoY3R4LT5yZWwtPnJk X3JlbC0+cmVscmVwbGlkZW50KQorCXsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkc6 CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxFICVz IFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJ CWFwcGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0ZV TEw6CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxF ICVzIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJ CWFwcGVuZF9zdG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0lO REVYOgorCQkJeworCQkJCU9pZAkJCXJlcGxpZHggPSBSZWxhdGlvbkdldFJlcGxpY2FJbmRleChj dHgtPnJlbCk7CisKKwkJCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJCQl7CisJCQkJCWNo YXIJICAgKmlkeG5hbWUgPSBnZXRfcmVsX25hbWUocmVwbGlkeCk7CisKKwkJCQkJaWYgKGlkeG5h bWUgPT0gTlVMTCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNP REVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJCQkJCSBlcnJtc2coInJlcGxpY2EgaWRlbnRpdHkg aW5kZXggd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJCQkJCXJlcGxpZHgpLAor CQkJCQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVk LiIpKSk7CisKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJCQkgIkFM VEVSIFRBQkxFICVzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggJXM7IiwKKwkJCQkJCQkJ CSBjdHgtPnF1YWxuYW1lLAorCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaWR4bmFtZSkpOwor CQkJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJCQlwZnJlZShpZHhuYW1lKTsKKwkJCQl9CisJCQl9 CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBlbWl0X3Jsc190b2dnbGVzCisgKgkJQUxURVIg VEFCTEUgcXVhbG5hbWUgRU5BQkxFIC8gRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZLgorICovCitz dGF0aWMgdm9pZAorZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlp ZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9STFMpKQorCQlyZXR1cm47 CisKKwlpZiAoY3R4LT5yZWwtPnJkX3JlbC0+cmVscm93c2VjdXJpdHkpCisJeworCQlyZXNldFN0 cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJ CQkgIkFMVEVSIFRBQkxFICVzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7IiwKKwkJCQkJCSBj dHgtPnF1YWxuYW1lKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwl9CisJaWYgKGN0eC0+cmVsLT5y ZF9yZWwtPnJlbGZvcmNlcm93c2VjdXJpdHkpCisJeworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+ YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkgIkFMVEVSIFRBQkxF ICVzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsiLAorCQkJCQkJIGN0eC0+cXVhbG5hbWUpOwor CQlhcHBlbmRfc3RtdChjdHgpOworCX0KK30KKworLyoKKyAqIGVtaXRfcGFydGl0aW9uX2NoaWxk cmVuCisgKgkJRm9yIGVhY2ggZGlyZWN0IHBhcnRpdGlvbiBjaGlsZCBvZiBhIHBhcnRpdGlvbmVk LXRhYmxlIHBhcmVudCwKKyAqCQlyZWN1cnNpdmVseSBjYWxsIHBnX2dldF90YWJsZV9kZGxfaW50 ZXJuYWwgYW5kIGFwcGVuZCB0aGUgY2hpbGQncworICoJCXN0YXRlbWVudHMuICBFYWNoIGNoaWxk J3Mgb3duIERETCBoYW5kbGVzIGZ1cnRoZXIgbGV2ZWxzIHRocm91Z2gKKyAqCQl0aGUgc2FtZSBy ZWN1cnNpb24uCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X3BhcnRpdGlvbl9jaGlsZHJlbihUYWJs ZURkbENvbnRleHQgKmN0eCkKK3sKKwlMaXN0CSAgICpjaGlsZHJlbjsKKwlMaXN0Q2VsbCAgICps YzsKKworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BBUlRJVElP TikgfHwKKwkJY3R4LT5yZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVE X1RBQkxFKQorCQlyZXR1cm47CisKKwljaGlsZHJlbiA9IGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRy ZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlmb3JlYWNoKGxjLCBjaGlsZHJlbikK Kwl7CisJCU9pZAkJCWNoaWxkb2lkID0gbGZpcnN0X29pZChsYyk7CisJCVRhYmxlRGRsQ29udGV4 dCBjaGlsZGN0eCA9IHswfTsKKwkJTGlzdAkgICAqY2hpbGRzdG10czsKKworCQkvKgorCQkgKiBF YWNoIHJlY3Vyc2l2ZSBpbnZvY2F0aW9uIHJlLWRlcml2ZXMgaXRzIG93biByZWwsIG5hbWVzcGFj ZSwKKwkJICogcXVhbG5hbWUsIE5PVCBOVUxMIGNhY2hlLCBidWZmZXIsIGFuZCBzdGF0ZW1lbnQg bGlzdCBpbnNpZGUKKwkJICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbC4gIFRoZSB1c2VyLXN1 cHBsaWVkIG9wdGlvbiBmaWVsZHMKKwkJICogY2Fycnkgb3ZlciB2ZXJiYXRpbSB3aXRoIG9uZSBl eGNlcHRpb246IEtJTkRfUEFSVElUSU9OIGlzIGEKKwkJICogImdhdGUiIGtpbmQgdGhhdCBjb250 cm9scyB3aGV0aGVyIHdlIHJlY3Vyc2UgYXQgYWxsLCBub3QgYQorCQkgKiBraW5kIHRoYXQgdGhl IGNoaWxkcmVuIHRoZW1zZWx2ZXMgZXZlciBlbWl0LiAgSWYgd2UgcHJvcGFnYXRlZAorCQkgKiBh biBvbmx5LXNldCB0aGF0IGNvbnRhaW5lZCBQQVJUSVRJT04gaW50byBhIGNoaWxkLCB0aGUgY2hp bGQKKwkJICogd291bGQgbm90IGVtaXQgaXRzIG93biBDUkVBVEUgVEFCTEUgKEtJTkRfVEFCTEUg YWJzZW50KSBub3IKKwkJICogYW55IHN1Yi1vYmplY3RzLCBhbmQgdGhlIHJlY3Vyc2lvbiB3b3Vs ZCBwcm9kdWNlIG5vdGhpbmcuICBTbworCQkgKiBzdHJpcCBQQVJUSVRJT04gb3V0IG9mIG9ubHlf a2luZHMgd2hlbiByZWN1cnNpbmc7IGlmIHRoYXQKKwkJICogZW1wdGllcyB0aGUgc2V0LCBkcm9w IHRoZSBmaWx0ZXIgZW50aXJlbHkgc28gdGhlIGNoaWxkIGVtaXRzCisJCSAqIGl0cyBmdWxsIERE TC4gIGV4Y2VwdF9raW5kcyBwYXNzZXMgdGhyb3VnaCB1bmNoYW5nZWQgYmVjYXVzZQorCQkgKiBQ QVJUSVRJT04gaW4gdGhlIGV4Y2VwdC1zZXQgYWxyZWFkeSBzdG9wcGVkIHVzIGZyb20gZ2V0dGlu ZworCQkgKiBoZXJlLgorCQkgKi8KKwkJY2hpbGRjdHgucmVsaWQgPSBjaGlsZG9pZDsKKwkJY2hp bGRjdHgucHJldHR5ID0gY3R4LT5wcmV0dHk7CisJCWNoaWxkY3R4Lm5vX293bmVyID0gY3R4LT5u b19vd25lcjsKKwkJY2hpbGRjdHgubm9fdGFibGVzcGFjZSA9IGN0eC0+bm9fdGFibGVzcGFjZTsK KwkJY2hpbGRjdHguc2NoZW1hX3F1YWxpZmllZCA9IGN0eC0+c2NoZW1hX3F1YWxpZmllZDsKKwkJ Y2hpbGRjdHgub25seV9raW5kcyA9IGN0eC0+b25seV9raW5kczsKKwkJY2hpbGRjdHguZXhjZXB0 X2tpbmRzID0gY3R4LT5leGNlcHRfa2luZHM7CisKKwkJLyoKKwkJICogV2hlbiBzY2hlbWFfcXVh bGlmaWVkIGlzIGZhbHNlLCB0aGUgY29udHJhY3QgaXMgdGhhdCB0aGUgb3V0cHV0CisJCSAqIGlz IHJlcGxheWFibGUgd2l0aCB0aGUgcGFyZW50J3Mgc2NoZW1hIGluIHNlYXJjaF9wYXRoLiAgVGhh dAorCQkgKiBjb250cmFjdCBjYW5ub3QgaG9sZCBmb3IgYSBjaGlsZCB0aGF0IGxpdmVzIGluIGEg ZGlmZmVyZW50IHNjaGVtYToKKwkJICogaXRzIG93biBuYW1lIHdvdWxkIGJlIGFtYmlndW91cyAo bGFuZGluZyBpbiB3aGF0ZXZlciBzY2hlbWEgaXMKKwkJICogZmlyc3QgaW4gc2VhcmNoX3BhdGgp IGFuZCByZWZlcmVuY2VzIGJhY2sgdG8gdGhlIHBhcmVudCB3b3VsZCBoYXZlCisJCSAqIHRvIGJl IHNjaGVtYS1xdWFsaWZpZWQgYW55d2F5LiAgRm9yY2UgZnVsbCBxdWFsaWZpY2F0aW9uIHNvIHRo ZQorCQkgKiBjaGlsZCdzIERETCBpcyB1bmFtYmlndW91cyByZWdhcmRsZXNzIG9mIHRoZSBjYWxs ZXIncyBzZWFyY2hfcGF0aC4KKwkJICovCisJCWlmICghY2hpbGRjdHguc2NoZW1hX3F1YWxpZmll ZCAmJgorCQkJZ2V0X3JlbF9uYW1lc3BhY2UoY2hpbGRvaWQpICE9IGN0eC0+YmFzZV9uYW1lc3Bh Y2UpCisJCQljaGlsZGN0eC5zY2hlbWFfcXVhbGlmaWVkID0gdHJ1ZTsKKworCQlpZiAoY2hpbGRj dHgub25seV9raW5kcyAhPSBOVUxMICYmCisJCQlibXNfaXNfbWVtYmVyKChpbnQpIFRBQkxFX0RE TF9LSU5EX1BBUlRJVElPTiwKKwkJCQkJCSAgY2hpbGRjdHgub25seV9raW5kcykpCisJCXsKKwkJ CUJpdG1hcHNldCAgKmNoaWxkX29ubHkgPSBibXNfY29weShjaGlsZGN0eC5vbmx5X2tpbmRzKTsK KworCQkJY2hpbGRfb25seSA9IGJtc19kZWxfbWVtYmVyKGNoaWxkX29ubHksCisJCQkJCQkJCQkJ KGludCkgVEFCTEVfRERMX0tJTkRfUEFSVElUSU9OKTsKKwkJCWlmIChibXNfaXNfZW1wdHkoY2hp bGRfb25seSkpCisJCQl7CisJCQkJYm1zX2ZyZWUoY2hpbGRfb25seSk7CisJCQkJY2hpbGRjdHgu b25seV9raW5kcyA9IE5VTEw7CisJCQl9CisJCQllbHNlCisJCQkJY2hpbGRjdHgub25seV9raW5k cyA9IGNoaWxkX29ubHk7CisJCX0KKworCQljaGlsZHN0bXRzID0gcGdfZ2V0X3RhYmxlX2RkbF9p bnRlcm5hbCgmY2hpbGRjdHgpOworCQljdHgtPnN0YXRlbWVudHMgPSBsaXN0X2NvbmNhdChjdHgt PnN0YXRlbWVudHMsIGNoaWxkc3RtdHMpOworCX0KKwlsaXN0X2ZyZWUoY2hpbGRyZW4pOworfQor CisvKgorICogcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbAorICoJCUdlbmVyYXRlIERETCBzdGF0 ZW1lbnRzIHRvIHJlY3JlYXRlIGEgcmVndWxhciBvciBwYXJ0aXRpb25lZCB0YWJsZS4KKyAqCisg KiBUaGUgY2FsbGVyIGluaXRpYWxpemVzICpjdHggd2l0aCB0aGUgdXNlci1zdXBwbGllZCBvcHRp b24gZmllbGRzCisgKiAocmVsaWQsIHByZXR0eSwgbm9fb3duZXIsIG5vX3RhYmxlc3BhY2UsIHNj aGVtYV9xdWFsaWZpZWQsCisgKiBvbmx5X2tpbmRzLCBleGNlcHRfa2luZHMpLiAgVGhpcyBmdW5j dGlvbiBvcGVucyB0aGUgcmVsYXRpb24sCisgKiB2YWxpZGF0ZXMgYWNjZXNzLCBwb3B1bGF0ZXMg dGhlIGRlcml2ZWQgZmllbGRzIChyZWwsIHF1YWxuYW1lLAorICogbm5fZW50cmllcywgLi4uKSwg cnVucyB0aGUgZW1pc3Npb24gcGFzc2VzLCBhbmQgcmV0dXJucyB0aGUKKyAqIGFjY3VtdWxhdGVk IHN0YXRlbWVudCBsaXN0LgorICoKKyAqIEVhY2ggZW1pc3Npb24gaGVscGVyIGNvbnN1bHRzIGlz X2tpbmRfaW5jbHVkZWQoKSB0byBkZWNpZGUgd2hldGhlcgorICogaXQgc2hvdWxkIHJ1bi4gIFRo ZSB0YWJsZS1wcm9wZXIgcGFzc2VzIChDUkVBVEUgVEFCTEUgLyBPV05FUiAvCisgKiBBTFRFUiBD T0xVTU4gLi4uIFNFVCBERUZBVUxUIC8gQUxURVIgQ09MVU1OIC4uLiBTRVQgKC4uLikpIGFyZQor ICogZ3JvdXBlZCB1bmRlciBLSU5EX1RBQkxFIHNvIHRoZSBGSy1vbmx5IC8gc3ViLW9iamVjdC1v bmx5IHdvcmtmbG93CisgKiBpcyBleHByZXNzaWJsZSBhcyBhIHNpbmdsZSBvbmx5IG9yIGV4Y2Vw dCBsaXN0LgorICoKKyAqIFRyaWdnZXIgYW5kIHBvbGljeSBlbWlzc2lvbiBhcmUgc2NhZmZvbGRl ZCBidXQgY3VycmVudGx5IGRpc2FibGVkCisgKiAoI2lmIDApIC0gdGhleSB3aWxsIGJlY29tZSBh IHNpbmdsZSBoZWxwZXIgY2FsbCBvbmNlIHRoZSBzdGFuZGFsb25lCisgKiBwZ19nZXRfdHJpZ2dl cl9kZGwgLyBwZ19nZXRfcG9saWN5X2RkbCBoZWxwZXJzIGxhbmQuCisgKi8KK3N0YXRpYyBMaXN0 ICoKK3BnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJ UmVsYXRpb24JcmVsOworCWNoYXIJCXJlbGtpbmQ7CisJQWNsUmVzdWx0CWFjbHJlc3VsdDsKKwor CXJlbCA9IHRhYmxlX29wZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJlbGtp bmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsKKworCS8qCisJICogVGhlIGluaXRpYWwgY3V0IG9u bHkgc3VwcG9ydHMgb3JkaW5hcnkgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcy4gIFZpZXdzLAorCSAq IG1hdHZpZXdzLCBmb3JlaWduIHRhYmxlcywgc2VxdWVuY2VzLCBpbmRleGVzLCBjb21wb3NpdGUg dHlwZXMsIGFuZAorCSAqIFRPQVNUIHRhYmxlcyBhcmUgb3V0IG9mIHNjb3BlIGZvciBub3cuCisJ ICovCisJaWYgKHJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAmJiByZWxraW5kICE9IFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQljaGFyCSAgICpyZWxuYW1lID0gcHN0cmR1cChS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vz c1NoYXJlTG9jayk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9O R19PQkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhbiBvcmRpbmFyeSBv ciBwYXJ0aXRpb25lZCB0YWJsZSIsCisJCQkJCQlyZWxuYW1lKSkpOworCX0KKworCS8qIENhbGxl ciBuZWVkcyBTRUxFQ1Qgb24gdGhlIHRhYmxlIHRvIHJlYWQgaXRzIGRlZmluaXRpb24uICovCisJ YWNscmVzdWx0ID0gcGdfY2xhc3NfYWNsY2hlY2soY3R4LT5yZWxpZCwgR2V0VXNlcklkKCksIEFD TF9TRUxFQ1QpOworCWlmIChhY2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNrX2Vy cm9yKGFjbHJlc3VsdCwgT0JKRUNUX1RBQkxFLAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKTsKKworCS8qCisJICogVmFsaWRhdGlvbjogaWYgdGhlIHRhYmxlIGhhcyBSRVBM SUNBIElERU5USVRZIFVTSU5HIElOREVYIGFuZCB0aGUKKwkgKiByZWZlcmVuY2VkIGluZGV4IHdv dWxkIG5vdCBiZSBlbWl0dGVkIHVuZGVyIHRoZSBhY3RpdmUgZmlsdGVyLCB0aGUKKwkgKiBlbWl0 dGVkIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlIHdvdWxkIHJlZmVyZW5jZSBhbiBpbmRleCB0aGUg c2FtZSBEREwKKwkgKiBuZXZlciBwcm9kdWNlZC4gIERldGVybWluZSB3aGljaCBraW5kIHdvdWxk IGVtaXQgdGhlIGluZGV4IChvbmUgb2YKKwkgKiBwcmltYXJ5X2tleSAvIHVuaXF1ZSAvIGV4Y2x1 c2lvbiBmb3IgY29uc3RyYWludC1iYWNrZWQgaW5kZXhlcywKKwkgKiBvdGhlcndpc2UgdGhlIGdl bmVyaWMgImluZGV4IiBraW5kKSBhbmQgcmVxdWlyZSBpdCB0byBiZSBpbiBzY29wZQorCSAqIHdo ZW5ldmVyICJyZXBsaWNhX2lkZW50aXR5IiBpcy4gIFRoZSBjaGVjayB1c2VzIGlzX2tpbmRfaW5j bHVkZWQgc28KKwkgKiBpdCBjb3ZlcnMgYm90aCBmb3JtcyBuYXR1cmFsbHk6IGFuICJleGNlcHQi IGxpc3QgdGhhdCBvbWl0cyB0aGUKKwkgKiBzb3VyY2Uga2luZCwgYW5kIGFuICJvbmx5IiBsaXN0 IHRoYXQgb21pdHMgaXQuCisJICovCisJaWYgKHJlbC0+cmRfcmVsLT5yZWxyZXBsaWRlbnQgPT0g UkVQTElDQV9JREVOVElUWV9JTkRFWCAmJgorCQlpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVf RERMX0tJTkRfUkVQTElDQV9JREVOVElUWSkpCisJeworCQlPaWQJCQlyZXBsaWR4ID0gUmVsYXRp b25HZXRSZXBsaWNhSW5kZXgocmVsKTsKKworCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJ eworCQkJVGFibGVEZGxLaW5kIGlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfSU5ERVg7CisJCQlP aWQJCQljb25vaWQgPSBnZXRfaW5kZXhfY29uc3RyYWludChyZXBsaWR4KTsKKworCQkJaWYgKE9p ZElzVmFsaWQoY29ub2lkKSkKKwkJCXsKKwkJCQlIZWFwVHVwbGUJY29uVHVwID0gU2VhcmNoU3lz Q2FjaGUxKENPTlNUUk9JRCwKKwkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjb25vaWQp KTsKKworCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCQkJeworCQkJCQlGb3Jt X3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1 cCk7CisKKwkJCQkJc3dpdGNoIChjb24tPmNvbnR5cGUpCisJCQkJCXsKKwkJCQkJCWNhc2UgQ09O U1RSQUlOVF9QUklNQVJZOgorCQkJCQkJCWlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfUFJJTUFS WV9LRVk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIENPTlNUUkFJTlRfVU5JUVVFOgorCQkJ CQkJCWlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfVU5JUVVFOworCQkJCQkJCWJyZWFrOworCQkJ CQkJY2FzZSBDT05TVFJBSU5UX0VYQ0xVU0lPTjoKKwkJCQkJCQlpZHhfa2luZCA9IFRBQkxFX0RE TF9LSU5EX0VYQ0xVU0lPTjsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJ YnJlYWs7CisJCQkJCX0KKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGNvblR1cCk7CisJCQkJfQorCQkJ fQorCisJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBpZHhfa2luZCkpCisJCQl7CisJCQkJ Y2hhcgkgICAqcmVsbmFtZSA9IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7 CisJCQkJY29uc3QgY2hhciAqaWR4X25hbWUgPSB0YWJsZV9kZGxfa2luZF9uYW1lc1soaW50KSBp ZHhfa2luZF0ubmFtZTsKKworCQkJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJSRVBMSUNBIElERU5USVRZIGZvciB0YWJsZSBc IiVzXCIgcmVxdWlyZXMga2luZCBcIiVzXCIgdG8gYmUgZW1pdHRlZCIsCisJCQkJCQkJCXJlbG5h bWUsIGlkeF9uYW1lKSwKKwkJCQkJCSBlcnJkZXRhaWwoIlRoZSB0YWJsZSdzIFJFUExJQ0EgSURF TlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgXCIl c1wiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4iLAorCQkJCQkJCQkg ICBpZHhfbmFtZSksCisJCQkJCQkgZXJyaGludCgiRWl0aGVyIGFkZCBcIiVzXCIgdG8gdGhlIGZp bHRlciBvciByZW1vdmUgXCJyZXBsaWNhX2lkZW50aXR5XCIgZnJvbSBpdC4iLAorCQkJCQkJCQkg aWR4X25hbWUpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFBvcHVsYXRlIGRlcml2ZWQg ZmllbGRzIG5vdyB0aGF0IHRoZSByZWxhdGlvbiBpcyBvcGVuIGFuZCB2YWxpZGF0ZWQuCisJICog VGhlIHJlbWFpbmluZyBkZXJpdmVkIGZpZWxkcyAobm5fZW50cmllcywgc2tpcF9ub3RudWxsX29p ZHMsIGJ1ZiwKKwkgKiBzdGF0ZW1lbnRzKSBzdGFydCB6ZXJvZWQgdmlhIHRoZSBjYWxsZXIncyBg VGFibGVEZGxDb250ZXh0IGN0eCA9IHswfWAKKwkgKiBpbml0aWFsaXplcjsgdGhlIE5PVCBOVUxM IGNhY2hlIGlzIHBvcHVsYXRlZCBieSBjb2xsZWN0X2xvY2FsX25vdF9udWxsLAorCSAqIHRoZSBi dWZmZXIgaXMgaW5pdFN0cmluZ0luZm8nZCwgYW5kIGVhY2ggZW1pdCBwYXNzIGFwcGVuZHMgdG8K KwkgKiBzdGF0ZW1lbnRzIHZpYSBsYXBwZW5kLgorCSAqLworCWN0eC0+cmVsID0gcmVsOworCWN0 eC0+YmFzZV9uYW1lc3BhY2UgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpOworCWN0eC0+c2F2 ZV9uZXN0bGV2ZWwgPSAtMTsKKwljdHgtPnF1YWxuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2Vt aXQoY3R4LT5yZWxpZCwgY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQljdHgtPmJh c2VfbmFtZXNwYWNlKTsKKworCS8qCisJICogVGVtcG9yYXJpbHkgb3ZlcnJpZGUgc2VhcmNoX3Bh dGggc28gdGhhdCB0aGUgcnVsZXV0aWxzIGhlbHBlcnMKKwkgKiAocGdfZ2V0X2luZGV4ZGVmX2Rk bCwgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keSwKKwkgKiBwZ19nZXRfc3RhdGlzdGljc29iamRl Zl9kZGwsIHBnX2dldF9ydWxlZGVmX2RkbCwgZXRjLikgcHJvZHVjZSBuYW1lcworCSAqIHRoYXQg bWF0Y2ggdGhlIHNjaGVtYV9xdWFsaWZpZWQgZmxhZy4gIFRob3NlIGhlbHBlcnMgZGVjaWRlIHdo ZXRoZXIgdG8KKwkgKiBxdWFsaWZ5IGEgbmFtZSBieSBjYWxsaW5nIFJlbGF0aW9uSXNWaXNpYmxl KCksIHdoaWNoIGNoZWNrcyB3aGV0aGVyIHRoZQorCSAqIG9iamVjdCdzIHNjaGVtYSBhcHBlYXJz IGluIHRoZSBhY3RpdmUgc2VhcmNoX3BhdGguCisJICoKKwkgKiBzY2hlbWFfcXVhbGlmaWVkID0g ZmFsc2U6IG5hcnJvdyB0byB0aGUgYmFzZSBzY2hlbWEgc28gdGhhdCBzYW1lLXNjaGVtYQorCSAq IHJlZmVyZW5jZXMgaW4gREVGQVVMVCBleHByZXNzaW9ucywgRksgdGFyZ2V0cywgaW5kZXhlcywg cnVsZXMsIGFuZAorCSAqIHN0YXRpc3RpY3MgY29tZSBvdXQgdW5xdWFsaWZpZWQgYXV0b21hdGlj YWxseS4gIENyb3NzLXNjaGVtYSByZWZlcmVuY2VzCisJICogc3RheSBxdWFsaWZpZWQsIHdoaWNo IGlzIHRoZSBjb3JyZWN0bmVzcyByZXF1aXJlbWVudC4KKwkgKgorCSAqIHNjaGVtYV9xdWFsaWZp ZWQgPSB0cnVlOiBuYXJyb3cgdG8gcGdfY2F0YWxvZyBvbmx5IHNvIHRoYXQgb2JqZWN0cyBpbgor CSAqIHRoZSBiYXNlIHNjaGVtYSAob3IgYW55IHVzZXIgc2NoZW1hIHRoZSBjYWxsZXIgcGxhY2Vk IG9uIHNlYXJjaF9wYXRoKQorCSAqIGFyZSBub3QgcmVhY2hhYmxlIHdpdGhvdXQgcXVhbGlmaWNh dGlvbiwgZm9yY2luZyBmdWxseS1xdWFsaWZpZWQgb3V0cHV0CisJICogZnJvbSBldmVyeSBoZWxw ZXIgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGVyJ3Mgc2Vzc2lvbiBzZWFyY2hfcGF0aC4KKwkgKgor CSAqIEF0RU9YYWN0X0dVQyBjbGVhbnMgdXAgYXQgeGFjdCBlbmQgaWYgYW55dGhpbmcgdGhyb3dz IGJldHdlZW4gaGVyZSBhbmQKKwkgKiB0aGUgZXhwbGljaXQgcmVzdG9yZSBiZWxvdzsgb24gdGhl IG5vcm1hbCBwYXRoIHdlIHJlc3RvcmUgcmlnaHQgYmVmb3JlCisJICogcmV0dXJuaW5nLgorCSAq LworCWlmICghY3R4LT5zY2hlbWFfcXVhbGlmaWVkKQorCXsKKwkJY2hhcgkgICAqbnNwbmFtZSA9 IGdldF9uYW1lc3BhY2VfbmFtZShjdHgtPmJhc2VfbmFtZXNwYWNlKTsKKworCQlpZiAobnNwbmFt ZSAhPSBOVUxMKQorCQl7CisJCQljb25zdCBjaGFyICpxbnNwID0gcXVvdGVfaWRlbnRpZmllcihu c3BuYW1lKTsKKworCQkJY3R4LT5zYXZlX25lc3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgpOwor CQkJKHZvaWQpIHNldF9jb25maWdfb3B0aW9uKCJzZWFyY2hfcGF0aCIsIHFuc3AsCisJCQkJCQkJ CQkgUEdDX1VTRVJTRVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJCQkgR1VDX0FDVElPTl9TQVZF LCB0cnVlLCAwLCBmYWxzZSk7CisJCQlpZiAocW5zcCAhPSBuc3BuYW1lKQorCQkJCXBmcmVlKChj aGFyICopIHFuc3ApOworCQkJcGZyZWUobnNwbmFtZSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJ Y3R4LT5zYXZlX25lc3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgpOworCQkodm9pZCkgc2V0X2Nv bmZpZ19vcHRpb24oInNlYXJjaF9wYXRoIiwgInBnX2NhdGFsb2ciLAorCQkJCQkJCQkgUEdDX1VT RVJTRVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJCSBHVUNfQUNUSU9OX1NBVkUsIHRydWUsIDAs IGZhbHNlKTsKKwl9CisKKwkvKgorCSAqIENhY2hlIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwg Y29uc3RyYWludCBtZXRhZGF0YSBzbyB0aGUgY29sdW1uLSBlbWl0CisJICogaGVscGVycyBjYW4g cHJvZHVjZSAiQ09OU1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBpbmxpbmUgZm9yIHVzZXItbmFtZWQK KwkgKiBjb25zdHJhaW50cywgYW5kIHNvIHRoZSBjb25zdHJhaW50IGxvb3AgY2FuIGF2b2lkIGRv dWJsZS1lbWl0dGluZyB0aGVtLgorCSAqLworCWN0eC0+bm5fZW50cmllcyA9IGNvbGxlY3RfbG9j YWxfbm90X251bGwocmVsLCAmY3R4LT5za2lwX25vdG51bGxfb2lkcyk7CisKKwlpbml0U3RyaW5n SW5mbygmY3R4LT5idWYpOworCisJLyoKKwkgKiBFbWlzc2lvbiBwYXNzZXMuICBPcmRlciBpcyBz aWduaWZpY2FudDogQ1JFQVRFIFRBQkxFIGZpcnN0OyBPV05FUiBhbmQKKwkgKiB0aGUgcGVyLWNv bHVtbiBBTFRFUiBDT0xVTU4gcGFzc2VzIGJlZm9yZSBzdWItb2JqZWN0IGVtaXNzaW9uOworCSAq IHN1Yi1vYmplY3RzIGluIGRlcGVuZGVuY3ktZnJpZW5kbHkgb3JkZXIgKGluZGV4ZXMgYmVmb3Jl IGNvbnN0cmFpbnRzLAorCSAqIHNpbmNlIGNvbnN0cmFpbnQtYmFja2VkIGluZGV4ZXMgYXJlIGVt aXR0ZWQgb3V0LW9mLWxpbmUgYnkgdGhlCisJICogY29uc3RyYWludCBsb29wKTsgcGFydGl0aW9u IGNoaWxkcmVuIGxhc3Qgc28gdGhlIHBhcmVudCBhbHJlYWR5IGV4aXN0cworCSAqIGF0IHJlcGxh eSB0aW1lLiAgRWFjaCBoZWxwZXIgZ2F0ZXMgaXRzZWxmIG9uIGlzX2tpbmRfaW5jbHVkZWQgZm9y IHRoZQorCSAqIHJlbGV2YW50IFRBQkxFX0RETF9LSU5EXyo7IHRoZSBmb3VyICJ0YWJsZSBpdHNl bGYiIHBhc3NlcyBhcmUgZ3JvdXBlZAorCSAqIGhlcmUgdW5kZXIgS0lORF9UQUJMRSBzbyBhbGwg b2YgQ1JFQVRFIFRBQkxFIC8gT1dORVIgLyBTRVQgREVGQVVMVCAvCisJICogU0VUICguLi4pIGRy b3Agb3V0IHRvZ2V0aGVyIHdoZW4gdGhlIHVzZXIgYXNrcyBmb3Igb25seSBzdWItb2JqZWN0cwor CSAqIChlLmcuIG9ubHkgPT4gJ2ZvcmVpZ25fa2V5JyBmb3IgdGhlIHNlY29uZCBwYXNzIG9mIGEg dHdvLXBhc3MgRksKKwkgKiBjbG9uZSkuCisJICovCisJaWYgKGlzX2tpbmRfaW5jbHVkZWQoY3R4 LCBUQUJMRV9ERExfS0lORF9UQUJMRSkpCisJeworCQllbWl0X2NyZWF0ZV90YWJsZV9zdG10KGN0 eCk7CisJCWVtaXRfb3duZXJfc3RtdChjdHgpOworCQllbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJp ZGVzKGN0eCk7CisJCWVtaXRfYXR0b3B0aW9ucyhjdHgpOworCQllbWl0X3R5cGVkX2NvbHVtbl9z dG9yYWdlKGN0eCk7CisJfQorCWVtaXRfaW5kZXhlcyhjdHgpOworCWVtaXRfY2x1c3Rlcl9vbihj dHgpOworCWVtaXRfbG9jYWxfY29uc3RyYWludHMoY3R4KTsKKwllbWl0X3J1bGVzKGN0eCk7CisJ ZW1pdF9zdGF0aXN0aWNzKGN0eCk7CisJZW1pdF9yZXBsaWNhX2lkZW50aXR5KGN0eCk7CisJZW1p dF9ybHNfdG9nZ2xlcyhjdHgpOworCisJLyoKKwkgKiBUcmlnZ2VycyBhbmQgcm93LWxldmVsIHNl Y3VyaXR5IHBvbGljaWVzIC0gZGlzYWJsZWQgdW50aWwgdGhlCisJICogc3RhbmRhbG9uZSBwZ19n ZXRfdHJpZ2dlcl9kZGwoKSBhbmQgcGdfZ2V0X3BvbGljeV9kZGwoKSBoZWxwZXJzIGxhbmQuCisJ ICogVGhlIHNjYW4gKyBsb2NrICsgZmlsdGVyIHNjYWZmb2xkaW5nIGJlbG93IGlzIHByZXNlcnZl ZCAoaW5zaWRlICNpZiAwKQorCSAqIHNvIHdpcmluZyB1cCBlYWNoIGVtaXNzaW9uIGJlY29tZXMg YSBvbmUtbGluZXIgaW4gdGhlIGxvb3AgYm9keSBvbmNlCisJICogdGhvc2UgaGVscGVycyBhcmUg YXZhaWxhYmxlLgorCSAqLworI2lmIDAKKwlpZiAoaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxF X0RETF9LSU5EX1RSSUdHRVIpKQorCXsKKwkJUmVsYXRpb24JdHJpZ1JlbDsKKwkJU3lzU2NhbkRl c2MgdHJpZ1NjYW47CisJCVNjYW5LZXlEYXRhIHRyaWdLZXk7CisJCUhlYXBUdXBsZQl0cmlnVHVw OworCisJCXRyaWdSZWwgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFy ZUxvY2spOworCQlTY2FuS2V5SW5pdCgmdHJpZ0tleSwKKwkJCQkJQW51bV9wZ190cmlnZ2VyX3Rn cmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0 SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7CisJCXRyaWdTY2FuID0gc3lzdGFibGVfYmVnaW5zY2Fu KHRyaWdSZWwsIFRyaWdnZXJSZWxpZE5hbWVJbmRleElkLAorCQkJCQkJCQkJICB0cnVlLCBOVUxM LCAxLCAmdHJpZ0tleSk7CisJCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHRyaWdUdXAgPSBzeXN0 YWJsZV9nZXRuZXh0KHRyaWdTY2FuKSkpCisJCXsKKwkJCUZvcm1fcGdfdHJpZ2dlciB0cmcgPSAo Rm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkJCWlmICh0cmctPnRnaXNp bnRlcm5hbCkKKwkJCQljb250aW51ZTsKKworCQkJLyogVE9ETzogYXBwZW5kIHBnX2dldF90cmln Z2VyX2RkbCh0cmctPm9pZCkgb3V0cHV0IGhlcmUuICovCisJCX0KKwkJc3lzdGFibGVfZW5kc2Nh bih0cmlnU2Nhbik7CisJCXRhYmxlX2Nsb3NlKHRyaWdSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJ fQorCisJaWYgKGlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9QT0xJQ1kpKQor CXsKKwkJUmVsYXRpb24JcG9sUmVsOworCQlTeXNTY2FuRGVzYyBwb2xTY2FuOworCQlTY2FuS2V5 RGF0YSBwb2xLZXk7CisJCUhlYXBUdXBsZQlwb2xUdXA7CisKKwkJcG9sUmVsID0gdGFibGVfb3Bl bihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlTY2FuS2V5SW5pdCgmcG9s S2V5LAorCQkJCQlBbnVtX3BnX3BvbGljeV9wb2xyZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwkJ cG9sU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihwb2xSZWwsIFBvbGljeVBvbHJlbGlkUG9sbmFt ZUluZGV4SWQsCisJCQkJCQkJCQkgdHJ1ZSwgTlVMTCwgMSwgJnBvbEtleSk7CisJCXdoaWxlIChI ZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCA9IHN5c3RhYmxlX2dldG5leHQocG9sU2NhbikpKQorCQl7 CisJCQkvKiBUT0RPOiBhcHBlbmQgcGdfZ2V0X3BvbGljeV9kZGwocmVsaWQsIHBvbG5hbWUpIG91 dHB1dCBoZXJlLiAqLworCQl9CisJCXN5c3RhYmxlX2VuZHNjYW4ocG9sU2Nhbik7CisJCXRhYmxl X2Nsb3NlKHBvbFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl9CisjZW5kaWYKKworCWVtaXRfcGFy dGl0aW9uX2NoaWxkcmVuKGN0eCk7CisKKwl7CisJCWludAkJCW5hdHRzID0gUmVsYXRpb25HZXRE ZXNjcihyZWwpLT5uYXR0czsKKworCQlmb3IgKGludCBpID0gMTsgaSA8PSBuYXR0czsgaSsrKQor CQkJaWYgKGN0eC0+bm5fZW50cmllc1tpXS5uYW1lICE9IE5VTEwpCisJCQkJcGZyZWUoY3R4LT5u bl9lbnRyaWVzW2ldLm5hbWUpOworCX0KKwlwZnJlZShjdHgtPm5uX2VudHJpZXMpOworCisJdGFi bGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXBmcmVlKGN0eC0+YnVmLmRhdGEpOwor CXBmcmVlKGN0eC0+cXVhbG5hbWUpOworCWxpc3RfZnJlZShjdHgtPnNraXBfbm90bnVsbF9vaWRz KTsKKworCS8qCisJICogUG9wIHRoZSBuYXJyb3dlZCBzZWFyY2hfcGF0aCBub3cgdGhhdCBhbGwg aGVscGVycyBoYXZlIHJ1bi4gIEVycm9ycworCSAqIHRocm93biBlYXJsaWVyIGFyZSBjbGVhbmVk IHVwIGJ5IEF0RU9YYWN0X0dVQyBhdCB4YWN0IGVuZC4KKwkgKi8KKwlpZiAoY3R4LT5zYXZlX25l c3RsZXZlbCA+PSAwKQorCQlBdEVPWGFjdF9HVUModHJ1ZSwgY3R4LT5zYXZlX25lc3RsZXZlbCk7 CisKKwlyZXR1cm4gY3R4LT5zdGF0ZW1lbnRzOworfQorCisvKgorICogcGdfZ2V0X3RhYmxlX2Rk bAorICoJCVJldHVybiBEREwgdG8gcmVjcmVhdGUgYSB0YWJsZSBhcyBhIHNldCBvZiB0ZXh0IHJv d3MuCisgKi8KK0RhdHVtCitwZ19nZXRfdGFibGVfZGRsKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ RnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCUxpc3QJICAgKnN0YXRlbWVudHM7CisKKwlpZiAo U1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCQlU YWJsZURkbENvbnRleHQgY3R4ID0gezB9OworCisJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lO SVQoKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0 aV9jYWxsX21lbW9yeV9jdHgpOworCisJCWlmIChQR19BUkdJU05VTEwoMCkpCisJCXsKKwkJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJCVNSRl9SRVRVUk5fRE9ORShmdW5j Y3R4KTsKKwkJfQorCisJCWlmICghUEdfQVJHSVNOVUxMKDUpICYmICFQR19BUkdJU05VTEwoNikp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiXCJvbmx5X2tpbmRzXCIgYW5kIFwiZXhjZXB0X2tp bmRzXCIgcGFyYW1ldGVycyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIikpKTsKKworCQkvKiBPcHRp b24gZGVmYXVsdHMgKG1hdGNoIHByb2FyZ2RlZmF1bHRzIGluIHBnX3Byb2MuZGF0KS4gKi8KKwkJ Y3R4LnJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKKwkJY3R4LnByZXR0eSA9IGZhbHNlOworCQlj dHgubm9fb3duZXIgPSBmYWxzZTsJCS8qIG93bmVyIERFRkFVTFQgdHJ1ZSAgLT4gbm9fb3duZXIg PSBmYWxzZSAqLworCQljdHgubm9fdGFibGVzcGFjZSA9IGZhbHNlOwkvKiB0YWJsZXNwYWNlIERF RkFVTFQgdHJ1ZSAtPiBub190YWJsZXNwYWNlID0gZmFsc2UgKi8KKwkJY3R4LnNjaGVtYV9xdWFs aWZpZWQgPSB0cnVlOworCQljdHgub25seV9raW5kcyA9IE5VTEw7CisJCWN0eC5leGNlcHRfa2lu ZHMgPSBOVUxMOworCisJCS8qIE92ZXJyaWRlIGRlZmF1bHRzIHdpdGggYW55IGV4cGxpY2l0bHkg c3VwcGxpZWQgdmFsdWVzLiAqLworCQlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJCWN0eC5wcmV0 dHkgPSBQR19HRVRBUkdfQk9PTCgxKTsKKwkJaWYgKCFQR19BUkdJU05VTEwoMikpCisJCQljdHgu bm9fb3duZXIgPSAhUEdfR0VUQVJHX0JPT0woMik7CisJCWlmICghUEdfQVJHSVNOVUxMKDMpKQor CQkJY3R4Lm5vX3RhYmxlc3BhY2UgPSAhUEdfR0VUQVJHX0JPT0woMyk7CisJCWlmICghUEdfQVJH SVNOVUxMKDQpKQorCQkJY3R4LnNjaGVtYV9xdWFsaWZpZWQgPSBQR19HRVRBUkdfQk9PTCg0KTsK KwkJaWYgKCFQR19BUkdJU05VTEwoNSkpCisJCQljdHgub25seV9raW5kcyA9IHBhcnNlX2tpbmRf YXJyYXkoIm9ubHlfa2luZHMiLAorCQkJCQkJCQkJCQkgIFBHX0dFVEFSR19BUlJBWVRZUEVfUCg1 KSk7CisJCWlmICghUEdfQVJHSVNOVUxMKDYpKQorCQkJY3R4LmV4Y2VwdF9raW5kcyA9IHBhcnNl X2tpbmRfYXJyYXkoImV4Y2VwdF9raW5kcyIsCisJCQkJCQkJCQkJCQlQR19HRVRBUkdfQVJSQVlU WVBFX1AoNikpOworCisJCXN0YXRlbWVudHMgPSBwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsKCZj dHgpOworCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBzdGF0ZW1lbnRzOworCQlmdW5jY3R4LT5tYXhf Y2FsbHMgPSBsaXN0X2xlbmd0aChzdGF0ZW1lbnRzKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisJfQorCisJZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisJ c3RhdGVtZW50cyA9IChMaXN0ICopIGZ1bmNjdHgtPnVzZXJfZmN0eDsKKworCWlmIChmdW5jY3R4 LT5jYWxsX2NudHIgPCBmdW5jY3R4LT5tYXhfY2FsbHMpCisJeworCQljaGFyCSAgICpzdG10Owor CisJCXN0bXQgPSBsaXN0X250aChzdGF0ZW1lbnRzLCBmdW5jY3R4LT5jYWxsX2NudHIpOworCisJ CVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBDU3RyaW5nR2V0VGV4dERhdHVtKHN0bXQpKTsKKwl9 CisJZWxzZQorCXsKKwkJbGlzdF9mcmVlX2RlZXAoc3RhdGVtZW50cyk7CisJCVNSRl9SRVRVUk5f RE9ORShmdW5jY3R4KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv cnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggODE5 NjMxNzgxYzAuLjJmM2U1NDNmNDU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv cnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0y Myw2ICsyMyw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUg ImFjY2Vzcy9yZWxhdGlvbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUg ImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQu aCIKQEAgLTM3MCw3ICszNzEsNyBAQCBzdGF0aWMgdm9pZCBtYWtlX3Byb3BncmFwaGRlZl9lbGVt ZW50cyhTdHJpbmdJbmZvIGJ1ZiwgT2lkIHBncmVsaWQsIGNoYXIgcGdla2luZAogc3RhdGljIHZv aWQgbWFrZV9wcm9wZ3JhcGhkZWZfbGFiZWxzKFN0cmluZ0luZm8gYnVmLCBPaWQgZWxpZCwgY29u c3QgY2hhciAqZWxhbGlhcywgT2lkIGVscmVsaWQpOwogc3RhdGljIHZvaWQgbWFrZV9wcm9wZ3Jh cGhkZWZfcHJvcGVydGllcyhTdHJpbmdJbmZvIGJ1ZiwgT2lkIGVsbGFiZWxpZCwgT2lkIGVscmVs aWQpOwogc3RhdGljIGNoYXIgKnBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihPaWQgc3RhdGV4 dGlkLCBib29sIGNvbHVtbnNfb25seSwKLQkJCQkJCQkJCQkgYm9vbCBtaXNzaW5nX29rKTsKKwkJ CQkJCQkJCQkgYm9vbCBtaXNzaW5nX29rLCBpbnQgcHJldHR5RmxhZ3MpOwogc3RhdGljIGNoYXIg KnBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihPaWQgcmVsaWQsIGludCBwcmV0dHlGbGFncywKIAkJ CQkJCQkJCSAgYm9vbCBhdHRyc09ubHksIGJvb2wgbWlzc2luZ19vayk7CiBzdGF0aWMgY2hhciAq cGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2VyKE9pZCBjb25zdHJhaW50SWQsIGJvb2wgZnVsbENv bW1hbmQsCkBAIC02MDUsNiArNjA2LDE5IEBAIHBnX2dldF9ydWxlZGVmX2V4dChQR19GVU5DVElP Tl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8q CisgKiBwZ19nZXRfcnVsZWRlZl9kZGwKKyAqCQlMaWtlIHBnX2dldF9ydWxlZGVmIGJ1dCB1c2Vz IHRoZSBhY3RpdmUgc2VhcmNoX3BhdGggdG8gZGVjaWRlCisgKgkJd2hldGhlciB0byBzY2hlbWEt cXVhbGlmeSB0aGUgcnVsZSdzIHRhcmdldCByZWxhdGlvbiBuYW1lLgorICoJCUZvciB1c2UgYnkg cGdfZ2V0X3RhYmxlX2RkbCB3aGljaCBoYXMgYWxyZWFkeSBzZXQgc2VhcmNoX3BhdGgKKyAqCQl0 byB0aGUgYmFzZSBzY2hlbWEgd2hlbiBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLgorICovCitjaGFy ICoKK3BnX2dldF9ydWxlZGVmX2RkbChPaWQgcnVsZW9pZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3J1 bGVkZWZfd29ya2VyKHJ1bGVvaWQsIFBSRVRUWUZMQUdfSU5ERU5UIHwgUFJFVFRZRkxBR19TQ0hF TUEpOworfQorCiAKIHN0YXRpYyBjaGFyICoKIHBnX2dldF9ydWxlZGVmX3dvcmtlcihPaWQgcnVs ZW9pZCwgaW50IHByZXR0eUZsYWdzKQpAQCAtMTI0Myw2ICsxMjU3LDIyIEBAIHBnX2dldF9pbmRl eGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpCiAJCQkJCQkJCSAgMCwgZmFsc2UpOwogfQogCisv KgorICogcGdfZ2V0X2luZGV4ZGVmX2RkbAorICoJCUxpa2UgcGdfZ2V0X2luZGV4ZGVmX3N0cmlu ZyBidXQgdXNlcyB0aGUgYWN0aXZlIHNlYXJjaF9wYXRoIHRvCisgKgkJZGVjaWRlIHdoZXRoZXIg dG8gc2NoZW1hLXF1YWxpZnkgdGhlIGluZGV4ZWQgcmVsYXRpb24gbmFtZS4KKyAqCQlGb3IgdXNl IGJ5IHBnX2dldF90YWJsZV9kZGwgd2hpY2ggaGFzIGFscmVhZHkgc2V0IHNlYXJjaF9wYXRoCisg KgkJdG8gdGhlIGJhc2Ugc2NoZW1hIHdoZW4gc2NoZW1hX3F1YWxpZmllZD1mYWxzZS4KKyAqLwor Y2hhciAqCitwZ19nZXRfaW5kZXhkZWZfZGRsKE9pZCBpbmRleHJlbGlkKQoreworCXJldHVybiBw Z19nZXRfaW5kZXhkZWZfd29ya2VyKGluZGV4cmVsaWQsIDAsIE5VTEwsCisJCQkJCQkJCSAgZmFs c2UsIGZhbHNlLAorCQkJCQkJCQkgIHRydWUsIHRydWUsCisJCQkJCQkJCSAgUFJFVFRZRkxBR19T Q0hFTUEsIGZhbHNlKTsKK30KKwogLyogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IGp1c3QgcmVwb3J0 cyB0aGUga2V5LWNvbHVtbiBkZWZpbml0aW9ucyAqLwogY2hhciAqCiBwZ19nZXRfaW5kZXhkZWZf Y29sdW1ucyhPaWQgaW5kZXhyZWxpZCwgYm9vbCBwcmV0dHkpCkBAIC0xOTcxLDcgKzIwMDEsNyBA QCBwZ19nZXRfc3RhdGlzdGljc29iamRlZihQR19GVU5DVElPTl9BUkdTKQogCU9pZAkJCXN0YXRl eHRpZCA9IFBHX0dFVEFSR19PSUQoMCk7CiAJY2hhcgkgICAqcmVzOwogCi0JcmVzID0gcGdfZ2V0 X3N0YXRpc3RpY3NvYmpfd29ya2VyKHN0YXRleHRpZCwgZmFsc2UsIHRydWUpOworCXJlcyA9IHBn X2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIGZhbHNlLCB0cnVlLCAwKTsKIAog CWlmIChyZXMgPT0gTlVMTCkKIAkJUEdfUkVUVVJOX05VTEwoKTsKQEAgLTE5ODYsNyArMjAxNiwy MCBAQCBwZ19nZXRfc3RhdGlzdGljc29iamRlZihQR19GVU5DVElPTl9BUkdTKQogY2hhciAqCiBw Z19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0YXRleHRpZCkKIHsKLQlyZXR1cm4g cGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKHN0YXRleHRpZCwgZmFsc2UsIGZhbHNlKTsKKwly ZXR1cm4gcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKHN0YXRleHRpZCwgZmFsc2UsIGZhbHNl LCAwKTsKK30KKworLyoKKyAqIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX2RkbAorICoJCUxpa2Ug cGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nIGJ1dCB1c2VzIHRoZSBhY3RpdmUgc2VhcmNo X3BhdGgKKyAqCQl0byBkZWNpZGUgd2hldGhlciB0byBzY2hlbWEtcXVhbGlmeSB0aGUgc3RhdGlz dGljcyBvYmplY3QgbmFtZS4KKyAqCQlGb3IgdXNlIGJ5IHBnX2dldF90YWJsZV9kZGwgd2hpY2gg aGFzIGFscmVhZHkgc2V0IHNlYXJjaF9wYXRoCisgKgkJdG8gdGhlIGJhc2Ugc2NoZW1hIHdoZW4g c2NoZW1hX3F1YWxpZmllZD1mYWxzZS4KKyAqLworY2hhciAqCitwZ19nZXRfc3RhdGlzdGljc29i amRlZl9kZGwoT2lkIHN0YXRleHRpZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3N0YXRpc3RpY3NvYmpf d29ya2VyKHN0YXRleHRpZCwgZmFsc2UsIGZhbHNlLCBQUkVUVFlGTEFHX1NDSEVNQSk7CiB9CiAK IC8qCkBAIC0xOTk5LDcgKzIwNDIsNyBAQCBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9jb2x1bW5z KFBHX0ZVTkNUSU9OX0FSR1MpCiAJT2lkCQkJc3RhdGV4dGlkID0gUEdfR0VUQVJHX09JRCgwKTsK IAljaGFyCSAgICpyZXM7CiAKLQlyZXMgPSBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3Rh dGV4dGlkLCB0cnVlLCB0cnVlKTsKKwlyZXMgPSBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIo c3RhdGV4dGlkLCB0cnVlLCB0cnVlLCAwKTsKIAogCWlmIChyZXMgPT0gTlVMTCkKIAkJUEdfUkVU VVJOX05VTEwoKTsKQEAgLTIwMTEsNyArMjA1NCw4IEBAIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVm X2NvbHVtbnMoUEdfRlVOQ1RJT05fQVJHUykKICAqIEludGVybmFsIHdvcmtob3JzZSB0byBkZWNv bXBpbGUgYW4gZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QuCiAgKi8KIHN0YXRpYyBjaGFyICoK LXBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihPaWQgc3RhdGV4dGlkLCBib29sIGNvbHVtbnNf b25seSwgYm9vbCBtaXNzaW5nX29rKQorcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKE9pZCBz dGF0ZXh0aWQsIGJvb2wgY29sdW1uc19vbmx5LCBib29sIG1pc3Npbmdfb2ssCisJCQkJCQkJaW50 IHByZXR0eUZsYWdzKQogewogCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0ZXh0cmVjOwogCUhl YXBUdXBsZQlzdGF0ZXh0dHVwOwpAQCAtMjA3MSwxMCArMjExNSwxOCBAQCBwZ19nZXRfc3RhdGlz dGljc29ial93b3JrZXIoT2lkIHN0YXRleHRpZCwgYm9vbCBjb2x1bW5zX29ubHksIGJvb2wgbWlz c2luZ19vaykKIAogCWlmICghY29sdW1uc19vbmx5KQogCXsKLQkJbnNwID0gZ2V0X25hbWVzcGFj ZV9uYW1lX29yX3RlbXAoc3RhdGV4dHJlYy0+c3R4bmFtZXNwYWNlKTsKLQkJYXBwZW5kU3RyaW5n SW5mbygmYnVmLCAiQ1JFQVRFIFNUQVRJU1RJQ1MgJXMiLAotCQkJCQkJIHF1b3RlX3F1YWxpZmll ZF9pZGVudGlmaWVyKG5zcCwKLQkJCQkJCQkJCQkJCQlOYW1lU3RyKHN0YXRleHRyZWMtPnN0eG5h bWUpKSk7CisJCWlmICgocHJldHR5RmxhZ3MgJiBQUkVUVFlGTEFHX1NDSEVNQSkgJiYKKwkJCVN0 YXRpc3RpY3NPYmpJc1Zpc2libGUoc3RhdGV4dGlkKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZiwgIkNSRUFURSBTVEFUSVNUSUNTICVzIiwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1l U3RyKHN0YXRleHRyZWMtPnN0eG5hbWUpKSk7CisJCWVsc2UKKwkJeworCQkJbnNwID0gZ2V0X25h bWVzcGFjZV9uYW1lX29yX3RlbXAoc3RhdGV4dHJlYy0+c3R4bmFtZXNwYWNlKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm8oJmJ1ZiwgIkNSRUFURSBTVEFUSVNUSUNTICVzIiwKKwkJCQkJCQkgcXVvdGVf cXVhbGlmaWVkX2lkZW50aWZpZXIobnNwLAorCQkJCQkJCQkJCQkJCQlOYW1lU3RyKHN0YXRleHRy ZWMtPnN0eG5hbWUpKSk7CisJCQlwZnJlZShuc3ApOworCQl9CiAKIAkJLyoKIAkJICogRGVjb2Rl IHRoZSBzdHhraW5kIGNvbHVtbiBzbyB0aGF0IHdlIGtub3cgd2hpY2ggc3RhdHMgdHlwZXMgdG8K QEAgLTIxNjUsMTAgKzIyMTcsOSBAQCBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoT2lkIHN0 YXRleHRpZCwgYm9vbCBjb2x1bW5zX29ubHksIGJvb2wgbWlzc2luZ19vaykKIAl7CiAJCU5vZGUJ ICAgKmV4cHIgPSAoTm9kZSAqKSBsZmlyc3QobGMpOwogCQljaGFyCSAgICpzdHI7Ci0JCWludAkJ CXByZXR0eUZsYWdzID0gUFJFVFRZRkxBR19QQVJFTjsKIAogCQlzdHIgPSBkZXBhcnNlX2V4cHJl c3Npb25fcHJldHR5KGV4cHIsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSwKLQkJCQkJCQkJCQlwcmV0 dHlGbGFncywgMCk7CisJCQkJCQkJCQkJUFJFVFRZRkxBR19QQVJFTiwgMCk7CiAKIAkJaWYgKGNv bG5vID4gMCkKIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIiwgIik7CkBAIC0yNTQ2 LDYgKzI1OTcsMjAgQEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZChPaWQgY29uc3RyYWlu dElkKQogCXJldHVybiBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCB0 cnVlLCAwLCBmYWxzZSk7CiB9CiAKKy8qCisgKiBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5Cisg KgkJUmV0dXJucyB0aGUgY29uc3RyYWludCBkZWZpbml0aW9uIGJvZHkgd2l0aG91dCB0aGUKKyAq CQkiQUxURVIgVEFCTEUgbmFtZSBBREQgQ09OU1RSQUlOVCBjbmFtZSIgcHJlZml4LgorICoJCUZL IHRhcmdldCByZWxhdGlvbiBuYW1lcyBpbiB0aGUgYm9keSBhbHJlYWR5IHVzZQorICoJCWdlbmVy YXRlX3JlbGF0aW9uX25hbWUgKHNlYXJjaF9wYXRoLWF3YXJlKS4gIEZvciB1c2UgYnkKKyAqCQlw Z19nZXRfdGFibGVfZGRsIHdoaWNoIGJ1aWxkcyB0aGUgQUxURVIgVEFCTEUgcHJlZml4IGl0c2Vs Zi4KKyAqLworY2hhciAqCitwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5KE9pZCBjb25zdHJhaW50 SWQpCit7CisJcmV0dXJuIHBnX2dldF9jb25zdHJhaW50ZGVmX3dvcmtlcihjb25zdHJhaW50SWQs IGZhbHNlLCAwLCBmYWxzZSk7Cit9CisKIC8qCiAgKiBBcyBvZiA5LjQsIHdlIG5vdyB1c2UgYW4g TVZDQyBzbmFwc2hvdCBmb3IgdGhpcy4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19pbmhlcml0cy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCmlu ZGV4IGNjODc0YWJhYWJiLi4xZTQ2M2IwMTA2ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19pbmhlcml0cy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMu aApAQCAtNTUsNiArNTUsNyBAQCBERUNMQVJFX0lOREVYKHBnX2luaGVyaXRzX3BhcmVudF9pbmRl eCwgMjE4NywgSW5oZXJpdHNQYXJlbnRJbmRleElkLCBwZ19pbmhlcml0cwogZXh0ZXJuIExpc3Qg KmZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oT2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2Nr bW9kZSk7CiBleHRlcm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChP aWQgcGFyZW50cmVsSWQsIGJvb2wgb21pdF9kZXRhY2hlZCwKIAkJCQkJCQkJCQkJCUxPQ0tNT0RF IGxvY2ttb2RlLCBib29sICpkZXRhY2hlZF9leGlzdCwgVHJhbnNhY3Rpb25JZCAqZGV0YWNoZWRf eG1pbik7CitleHRlcm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzKE9pZCByZWxpZCwg TE9DS01PREUgbG9ja21vZGUpOwogCiBleHRlcm4gTGlzdCAqZmluZF9hbGxfaW5oZXJpdG9ycyhP aWQgcGFyZW50cmVsSWQsIExPQ0tNT0RFIGxvY2ttb2RlLAogCQkJCQkJCQkgTGlzdCAqKm51bXBh cmVudHMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggM2NiODQzNTlhZGYuLmQ4NmFmNTZi YTc4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTg2MzQsNiArODYzNCwxNCBAQAogICBw cm9hcmd0eXBlcyA9PiAncmVnZGF0YWJhc2UgYm9vbCBib29sIGJvb2wnLAogICBwcm9hcmduYW1l cyA9PiAne2RhdGFiYXNlLHByZXR0eSxvd25lcix0YWJsZXNwYWNlfScsCiAgIHByb2FyZ2RlZmF1 bHRzID0+ICd7ZmFsc2UsdHJ1ZSx0cnVlfScsIHByb3NyYyA9PiAncGdfZ2V0X2RhdGFiYXNlX2Rk bCcgfSwKK3sgb2lkID0+ICc4MjE1JywgZGVzY3IgPT4gJ2dldCBEREwgdG8gcmVjcmVhdGUgYSB0 YWJsZScsCisgIHByb25hbWUgPT4gJ3BnX2dldF90YWJsZV9kZGwnLCBwcm9yb3dzID0+ICc1MCcs CisgIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4g J3MnLCBwcm9wYXJhbGxlbCA9PiAncicsCisgIHByb25hcmdkZWZhdWx0cyA9PiAnNicsIHByb3Jl dHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MgYm9vbCBib29sIGJv b2wgYm9vbCBfdGV4dCBfdGV4dCcsCisgIHByb2FyZ25hbWVzID0+ICd7cmVsYXRpb24scHJldHR5 LG93bmVyLHRhYmxlc3BhY2Usc2NoZW1hX3F1YWxpZmllZCxvbmx5X2tpbmRzLGV4Y2VwdF9raW5k c30nLAorICBwcm9hcmdkZWZhdWx0cyA9PiAne2ZhbHNlLHRydWUsdHJ1ZSx0cnVlLE5VTEwsTlVM TH0nLAorICBwcm9zcmMgPT4gJ3BnX2dldF90YWJsZV9kZGwnIH0sCiB7IG9pZCA9PiAnMjUwOScs CiAgIGRlc2NyID0+ICdkZXBhcnNlIGFuIGVuY29kZWQgZXhwcmVzc2lvbiB3aXRoIHByZXR0eS1w cmludCBvcHRpb24nLAogICBwcm9uYW1lID0+ICdwZ19nZXRfZXhwcicsIHByb3ZvbGF0aWxlID0+ ICdzJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21t YW5kcy90YWJsZWNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCmluZGV4 IGMzZDg1MThjYjYyLi5kMzM1NjNmZGVhZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvdGFibGVjbWRzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmgKQEAg LTkyLDYgKzkyLDcgQEAgZXh0ZXJuIHZvaWQgY2hlY2tfb2ZfdHlwZShIZWFwVHVwbGUgdHlwZXR1 cGxlKTsKIAogZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQs IE9uQ29tbWl0QWN0aW9uIGFjdGlvbik7CiBleHRlcm4gdm9pZCByZW1vdmVfb25fY29tbWl0X2Fj dGlvbihPaWQgcmVsaWQpOworZXh0ZXJuIE9uQ29tbWl0QWN0aW9uIGdldF9vbl9jb21taXRfYWN0 aW9uKE9pZCByZWxpZCk7CiAKIGV4dGVybiB2b2lkIFByZUNvbW1pdF9vbl9jb21taXRfYWN0aW9u cyh2b2lkKTsKIGV4dGVybiB2b2lkIEF0RU9YYWN0X29uX2NvbW1pdF9hY3Rpb25zKGJvb2wgaXND b21taXQpOwpAQCAtMTA4LDQgKzEwOSw2IEBAIGV4dGVybiB2b2lkIFJhbmdlVmFyQ2FsbGJhY2tP d25zUmVsYXRpb24oY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9uLAogZXh0ZXJuIGJvb2wgUGFydENv bnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50KFJlbGF0aW9uIHNjYW5yZWwsCiAJCQkJCQkJ CQkJCQkgTGlzdCAqcGFydENvbnN0cmFpbnQpOwogCitleHRlcm4gY29uc3QgY2hhciAqc3RvcmFn ZV9uYW1lKGNoYXIgYyk7CisKICNlbmRpZgkJCQkJCQkvKiBUQUJMRUNNRFNfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9y dWxldXRpbHMuaAppbmRleCAyNWMwNWUyZjY0OS4uYzNiM2RjNjVjOTMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1 dGlscy5oCkBAIC0yNSw2ICsyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10IFBsYW5u ZWRTdG10OwogI2RlZmluZSBSVUxFX0lOREVYREVGX0tFWVNfT05MWQkJMHgwMgkvKiBpZ25vcmUg aW5jbHVkZWQgYXR0cmlidXRlcyAqLwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX3N0 cmluZyhPaWQgaW5kZXhyZWxpZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2RkbChP aWQgaW5kZXhyZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnMoT2lk IGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZf Y29sdW1uc19leHRlbmRlZChPaWQgaW5kZXhyZWxpZCwKIAkJCQkJCQkJCQkJICB1aW50MTYgZmxh Z3MpOwpAQCAtMzQsNiArMzUsNyBAQCBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29s dW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGNv bnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklkLCBjaGFyICphbGlhc25hbWUpOwogCiBleHRl cm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZChPaWQgY29uc3RyYWludElkKTsK K2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5KE9pZCBjb25zdHJhaW50SWQp OwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpleHByLCBMaXN0ICpkcGNv bnRleHQsCiAJCQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hvd2ltcGxpY2l0KTsKIGV4 dGVybiBMaXN0ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIgKmFsaWFzbmFtZSwgT2lk IHJlbGlkKTsKQEAgLTU0LDUgKzU2LDcgQEAgZXh0ZXJuIGNoYXIgKmdldF9yYW5nZV9wYXJ0Ym91 bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVtcyk7CiBleHRlcm4gdm9pZCBnZXRfcmVsb3B0aW9u cyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucyk7CiAKIGV4dGVybiBjaGFyICpwZ19n ZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0YXRleHRpZCk7CitleHRlcm4gY2hhciAq cGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfZGRsKE9pZCBzdGF0ZXh0aWQpOworZXh0ZXJuIGNoYXIg KnBnX2dldF9ydWxlZGVmX2RkbChPaWQgcnVsZW9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxF VVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wZ19nZXRf dGFibGVfZGRsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2Rk bC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhlM2I5NGMxMWY2 Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wZ19nZXRfdGFi bGVfZGRsLm91dApAQCAtMCwwICsxLDE2MTIgQEAKKy0tCistLSBwZ19nZXRfdGFibGVfZGRsCist LQorLS0gQWxsIHRlc3RzIHBhc3Mgb3duZXI9PmZhbHNlIHNvIHRoZSBBTFRFUiBUQUJMRSBPV05F UiBUTyBsaW5lIGlzIG5vdAorLS0gZW1pdHRlZCwga2VlcGluZyBvdXRwdXQgc3RhYmxlIGFjcm9z cyB0ZXN0IHJ1bm5lcnMgKHdoaWNoIG1heSBydW4gdW5kZXIKKy0tIGRpZmZlcmVudCByb2xlIG5h bWVzKS4KKy0tCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworU0VUIHNlYXJjaF9wYXRo ID0gcGd0YmxfZGRsX3Rlc3Q7CistLSBCYXNpYyB0YWJsZSB3aXRoIFBSSU1BUlkgS0VZLCBOT1Qg TlVMTCwgREVGQVVMVCwgQ09MTEFURS4KK0NSRUFURSBUQUJMRSBiYXNpYyAoCisgICAgaWQgaW50 IFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdGV4dCBOT1QgTlVMTCBERUZBVUxUICdhbm9uJyBDT0xM QVRFICJDIgorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMg KGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZBVUxUICdhbm9u Jzo6dGV4dCBOT1QgTlVMTCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYmFzaWMgQURE IENPTlNUUkFJTlQgYmFzaWNfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDIgcm93cykKKworLS0g SWRlbnRpdHkgY29sdW1ucyAod2l0aCBkZWZhdWx0IGFuZCBjdXN0b20gc2VxdWVuY2Ugb3B0aW9u cykuCitDUkVBVEUgVEFCTEUgaWRfY29scyAoCisgICAgaWRfYWx3YXlzIGludCBHRU5FUkFURUQg QUxXQVlTIEFTIElERU5USVRZLAorICAgIGlkX2RlZmF1bHQgaW50IEdFTkVSQVRFRCBCWSBERUZB VUxUIEFTIElERU5USVRZCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9j b2xzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZF9jb2xzIChpZF9hbHdh eXMgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIE5PVCBOVUxMLCBpZF9kZWZh dWx0IGludGVnZXIgR0VORVJBVEVEIEJZIERFRkFVTFQgQVMgSURFTlRJVFkgTk9UIE5VTEwpOwor KDEgcm93KQorCitDUkVBVEUgVEFCTEUgaWRfY3VzdG9tICgKKyAgICB2IGludCBHRU5FUkFURUQg QUxXQVlTIEFTIElERU5USVRZICgKKyAgICAgICAgU0VRVUVOQ0UgTkFNRSBpZF9jdXN0b21fdl9z ZXEKKyAgICAgICAgU1RBUlQgV0lUSCAxMDAgSU5DUkVNRU5UIEJZIDUKKyAgICAgICAgTUlOVkFM VUUgNTAgTUFYVkFMVUUgMTAwMAorICAgICAgICBDQUNIRSAxMCBDWUNMRQorICAgICkKKyk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkX2N1c3RvbSAodiBpbnRlZ2VyIEdFTkVS QVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1IE1J TlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAgQ0FDSEUgMTAgQ1lDTEUpIE5PVCBOVUxMKTsKKygxIHJv dykKKworLS0gR2VuZXJhdGVkIHN0b3JlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgZ2VuX2NvbHMg KAorICAgIGNlbnRzIGludCwKKyAgICBkb2xsYXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBB UyAoY2VudHMgLyAxMDAuMCkgU1RPUkVECispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdnZW5fY29scyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuZ2VuX2NvbHMg KGNlbnRzIGludGVnZXIsIGRvbGxhcnMgbnVtZXJpYyBHRU5FUkFURUQgQUxXQVlTIEFTICgoKGNl bnRzKTo6bnVtZXJpYyAvIDEwMC4wKSkgU1RPUkVEKTsKKygxIHJvdykKKworLS0gR2VuZXJhdGVk IHZpcnR1YWwgY29sdW1uLgorQ1JFQVRFIFRBQkxFIGdlbl92aXJ0dWFsICgKKyAgICBiYXNlIGlu dCwKKyAgICBkZXJpdmVkIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChiYXNlICogMikgVklSVFVB TAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZ2VuX3ZpcnR1YWwnOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5nZW5fdmlydHVhbCAoYmFzZSBpbnRlZ2VyLCBkZXJpdmVkIGludGVnZXIgR0VORVJBVEVEIEFM V0FZUyBBUyAoKGJhc2UgKiAyKSkgVklSVFVBTCk7CisoMSByb3cpCisKKy0tIFNUT1JBR0UgYW5k IENPTVBSRVNTSU9OIChvbmx5IGVtaXR0ZWQgd2hlbiBub24tZGVmYXVsdCBmb3IgdGhlIHR5cGUp LgorQ1JFQVRFIFRBQkxFIHN0b3JhZ2VfY29scyAoCisgICAgYSB0ZXh0IFNUT1JBR0UgRVhURVJO QUwsCisgICAgYiB0ZXh0IFNUT1JBR0UgTUFJTiwKKyAgICBjIHRleHQgQ09NUFJFU1NJT04gcGds egorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3RvcmFnZV9jb2xzJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3Quc3RvcmFnZV9jb2xzIChhIHRleHQgU1RPUkFHRSBFWFRFUk5BTCwgYiB0ZXh0IFNUT1JBR0Ug TUFJTiwgYyB0ZXh0IENPTVBSRVNTSU9OIHBnbHopOworKDEgcm93KQorCistLSBDb25zdHJhaW50 czogQ0hFQ0ssIFVOSVFVRSwgRk9SRUlHTiBLRVkgKERFRkVSUkFCTEUpLgorQ1JFQVRFIFRBQkxF IHJlZmQgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgY29ucyAoCisgICAgYSBp bnQgQ0hFQ0sgKGEgPiAwKSwKKyAgICBiIGludCBVTklRVUUsCisgICAgYyBpbnQgUkVGRVJFTkNF UyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRAorKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRlZ2Vy LCBjIGludGVnZXIsIENPTlNUUkFJTlQgY29uc19hX2NoZWNrIENIRUNLICgoYSA+IDApKSk7Cisg QUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2Jfa2V5 IFVOSVFVRSAoYik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RS QUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVz dC5yZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsKKygzIHJvd3MpCisKKy0t IFVOSVFVRSBOVUxMUyBOT1QgRElTVElOQ1QgKFBHIDE1KTogbnVsbCB2YWx1ZXMgYXJlIHRyZWF0 ZWQgYXMgZXF1YWwgZm9yCistLSB1bmlxdWVuZXNzIHB1cnBvc2VzLCBzbyB0aGUgTlVMTFMgTk9U IERJU1RJTkNUIGNsYXVzZSBtdXN0IGJlIGVtaXR0ZWQuCitDUkVBVEUgVEFCTEUgbnVsbHNfbmQg KAorICAgIGEgaW50LAorICAgIGIgaW50LAorICAgIFVOSVFVRSBOVUxMUyBOT1QgRElTVElOQ1Qg KGEsIGIpCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdudWxsc19uZCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm51bGxzX25kIChhIGludGVnZXIs IGIgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QubnVsbHNfbmQgQUREIENP TlNUUkFJTlQgbnVsbHNfbmRfYV9iX2tleSBVTklRVUUgTlVMTFMgTk9UIERJU1RJTkNUIChhLCBi KTsKKygyIHJvd3MpCisKKy0tIElOQ0xVREUgY29sdW1ucyBvbiBhIGNvbnN0cmFpbnQtYmFja2Vk IFVOSVFVRSBpbmRleCAoUEcgMTEpOiB0aGUKKy0tIGNvdmVyaW5nIGNvbHVtbnMgYXBwZWFyIGlu IGFuIElOQ0xVREUgKC4uLikgY2xhdXNlIG9uIHRoZSBBTFRFUiBUQUJMRQorLS0gQUREIENPTlNU UkFJTlQgc3RhdGVtZW50LCBub3QgaW4gdGhlIGtleSBjb2x1bW4gbGlzdC4KK0NSRUFURSBUQUJM RSBpZHhfaW5jICgKKyAgICBpZCAgIGludCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQsCisg ICAgZXh0cmEgdGV4dCwKKyAgICBVTklRVUUgKG5hbWUpIElOQ0xVREUgKGV4dHJhKQorKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4X2luYyc6OnJlZ2NsYXNzLCBvd25lciA9 PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhfaW5jIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBu YW1lIHRleHQsIGV4dHJhIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeF9p bmMgQUREIENPTlNUUkFJTlQgaWR4X2luY19uYW1lX2V4dHJhX2tleSBVTklRVUUgKG5hbWUpIElO Q0xVREUgKGV4dHJhKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhfaW5jIEFERCBD T05TVFJBSU5UIGlkeF9pbmNfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDMgcm93cykKKworLS0g Rk9SRUlHTiBLRVkgd2l0aCBPTiBERUxFVEUgLyBPTiBVUERBVEUgcmVmZXJlbnRpYWwgYWN0aW9u cyBhbmQgTUFUQ0gKKy0tIGNsYXVzZS4gIEVhY2ggdmFyaWFudCBtdXN0IGFwcGVhciB2ZXJiYXRp bSBpbiB0aGUgcmVjb25zdHJ1Y3RlZCBEREwuCitDUkVBVEUgVEFCTEUgZmtfYWN0c190Z3QgKGlk IGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZmtfYWN0cyAoCisgICAgYSBpbnQsCisg ICAgYiBpbnQsCisgICAgYyBpbnQsCisgICAgZCBpbnQsCisgICAgQ09OU1RSQUlOVCBma19jYXNj YWRlICBGT1JFSUdOIEtFWSAoYSkgUkVGRVJFTkNFUyBma19hY3RzX3RndChpZCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE9OIERFTEVURSBDQVNDQURFIE9OIFVQREFURSBSRVNUUklDVCwK KyAgICBDT05TVFJBSU5UIGZrX3NldG51bGwgIEZPUkVJR04gS0VZIChiKSBSRUZFUkVOQ0VTIGZr X2FjdHNfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT04gREVMRVRFIFNFVCBO VUxMLAorICAgIENPTlNUUkFJTlQgZmtfc2V0ZGVmICAgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5D RVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPTiBERUxFVEUg U0VUIERFRkFVTFQsCisgICAgQ09OU1RSQUlOVCBma19tYXRjaCAgICBGT1JFSUdOIEtFWSAoZCkg UkVGRVJFTkNFUyBma19hY3RzX3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1B VENIIEZVTEwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2ZrX2FjdHMnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmZrX2FjdHMgKGEgaW50ZWdlciwgYiBp bnRlZ2VyLCBjIGludGVnZXIsIGQgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuZmtfYWN0cyBBREQgQ09OU1RSQUlOVCBma19jYXNjYWRlIEZPUkVJR04gS0VZIChhKSBSRUZF UkVOQ0VTIHBndGJsX2RkbF90ZXN0LmZrX2FjdHNfdGd0KGlkKSBPTiBVUERBVEUgUkVTVFJJQ1Qg T04gREVMRVRFIENBU0NBREU7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuZmtfYWN0cyBB REQgQ09OU1RSQUlOVCBma19tYXRjaCBGT1JFSUdOIEtFWSAoZCkgUkVGRVJFTkNFUyBwZ3RibF9k ZGxfdGVzdC5ma19hY3RzX3RndChpZCkgTUFUQ0ggRlVMTDsKKyBBTFRFUiBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5ma19hY3RzIEFERCBDT05TVFJBSU5UIGZrX3NldGRlZiBGT1JFSUdOIEtFWSAoYykg UkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5ma19hY3RzX3RndChpZCkgT04gREVMRVRFIFNFVCBE RUZBVUxUOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmZrX2FjdHMgQUREIENPTlNUUkFJ TlQgZmtfc2V0bnVsbCBGT1JFSUdOIEtFWSAoYikgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5m a19hY3RzX3RndChpZCkgT04gREVMRVRFIFNFVCBOVUxMOworKDUgcm93cykKKworLS0gTk9UIEVO Rk9SQ0VEIGZvcmVpZ24ga2V5IChQRyAxNyk6IHRoZSBjb25zdHJhaW50IGlzIHJlY29yZGVkIGlu IHRoZQorLS0gY2F0YWxvZyBidXQgbm90IHZhbGlkYXRlZCBieSB0aGUgZW5naW5lOyBOT1QgRU5G T1JDRUQgbXVzdCBhcHBlYXIgaW4KKy0tIHRoZSByZWNvbnN0cnVjdGVkIERETC4KK0NSRUFURSBU QUJMRSBub3RlbmZfdGd0IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIG5vdGVu ZiAoCisgICAgYSBpbnQsCisgICAgQ09OU1RSQUlOVCBub3RlbmZfZmsgRk9SRUlHTiBLRVkgKGEp IFJFRkVSRU5DRVMgbm90ZW5mX3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBOT1Qg RU5GT1JDRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25vdGVuZic6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qubm90ZW5mIChhIGludGVnZXIpOwor IEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5vdGVuZiBBREQgQ09OU1RSQUlOVCBub3RlbmZf ZmsgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgcGd0YmxfZGRsX3Rlc3Qubm90ZW5mX3RndChp ZCkgTk9UIEVORk9SQ0VEOworKDIgcm93cykKKworLS0gU2VsZi1yZWZlcmVuY2luZyBGSzogdGhl IFBLIG11c3QgYXBwZWFyIGJlZm9yZSB0aGUgRksgdGhhdCByZWZlcmVuY2VzIGl0LgorLS0gVGhl IGNhdGFsb2cgc2NhbiByZXR1cm5zIGNvbnN0cmFpbnRzIGluIG5hbWUgb3JkZXI7IHdpdGhvdXQg dGhlIGZpeCwKKy0tICJzZWxmX3JlZl9wYXJlbnRfaWRfZmtleSIgc29ydHMgYmVmb3JlICJzZWxm X3JlZl9wa2V5IiBhbmQgdGhlIEZLIEFERAorLS0gQ09OU1RSQUlOVCBmYWlscyB3aXRoICJ0aGVy ZSBpcyBubyB1bmlxdWUgY29uc3RyYWludCBtYXRjaGluZyBnaXZlbiBrZXlzIi4KK0NSRUFURSBU QUJMRSBzZWxmX3JlZiAoCisgICAgaWQgICAgICAgIGludCBQUklNQVJZIEtFWSwKKyAgICBwYXJl bnRfaWQgaW50IFJFRkVSRU5DRVMgc2VsZl9yZWYoaWQpCispOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdzZWxmX3JlZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Quc2VsZl9yZWYgKGlkIGludGVnZXIgTk9UIE5VTEwsIHBh cmVudF9pZCBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5zZWxmX3JlZiBB REQgQ09OU1RSQUlOVCBzZWxmX3JlZl9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisgQUxURVIgVEFC TEUgcGd0YmxfZGRsX3Rlc3Quc2VsZl9yZWYgQUREIENPTlNUUkFJTlQgc2VsZl9yZWZfcGFyZW50 X2lkX2ZrZXkgRk9SRUlHTiBLRVkgKHBhcmVudF9pZCkgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVz dC5zZWxmX3JlZihpZCk7CisoMyByb3dzKQorCistLSBXSVRIT1VUIE9WRVJMQVBTIG9uIGEgUFJJ TUFSWSBLRVkgKFBHIDE3KTogdGhlIHJhbmdlLXR5cGUgcGVyaW9kCistLSBjb2x1bW4gZm9ybXMg YSB0ZW1wb3JhbCBwcmltYXJ5IGtleTsgV0lUSE9VVCBPVkVSTEFQUyBtdXN0IGFwcGVhcgorLS0g aW5zaWRlIHRoZSBrZXkgY29sdW1uIGxpc3QgaW4gdGhlIHJlY29uc3RydWN0ZWQgQUxURVIgVEFC TEUuCistLSBCb3RoIGNvbHVtbnMgdXNlIHJhbmdlIHR5cGVzIHdpdGggbmF0aXZlIEdpU1Qgc3Vw cG9ydCBzbyBubworLS0gYnRyZWVfZ2lzdCBleHRlbnNpb24gaXMgbmVlZGVkLgorQ1JFQVRFIFRB QkxFIHRlbXBvcmFsX3BrICgKKyAgICBncnAgIGludDRyYW5nZSwKKyAgICBkdXJpbmcgZGF0ZXJh bmdlLAorICAgIFBSSU1BUlkgS0VZIChncnAsIGR1cmluZyBXSVRIT1VUIE9WRVJMQVBTKQorKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcG9yYWxfcGsnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnRl bXBvcmFsX3BrIChncnAgaW50NHJhbmdlIE5PVCBOVUxMLCBkdXJpbmcgZGF0ZXJhbmdlIE5PVCBO VUxMKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC50ZW1wb3JhbF9wayBBREQgQ09OU1RS QUlOVCB0ZW1wb3JhbF9wa19wa2V5IFBSSU1BUlkgS0VZIChncnAsIGR1cmluZyBXSVRIT1VUIE9W RVJMQVBTKTsKKygyIHJvd3MpCisKKy0tIEluZGV4ZXM6IGZ1bmN0aW9uYWwgYW5kIHBhcnRpYWwu ICBDb25zdHJhaW50LWJhY2tpbmcgaW5kZXhlcyBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZXkgYXJl IGVtaXR0ZWQgYnkgdGhlIGNvbnN0cmFpbnQgbG9vcCkuCitDUkVBVEUgVEFCTEUgaWR4ZCAoaWQg aW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOworQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04g aWR4ZCAobG93ZXIobmFtZSkpOworQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBpZHhkIChp ZCkgV0hFUkUgaWQgPiAxMDA7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxf dGVzdC5pZHhkIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQpOworIENSRUFURSBJTkRF WCBpZHhkX2xvd2VyIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5h bWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQg VVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2Rk bF90ZXN0LmlkeGQgQUREIENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7Ciso NCByb3dzKQorCistLSBJbmhlcml0YW5jZSwgaW5jbHVkaW5nIGEgY2hpbGQgREVGQVVMVCBvdmVy cmlkZSBvbiBhbiBpbmhlcml0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhciAoYSBpbnQgREVG QVVMVCAxLCBiIHRleHQpOworQ1JFQVRFIFRBQkxFIGNoIChjIGludCkgSU5IRVJJVFMgKHBhcik7 CitBTFRFUiBUQUJMRSBjaCBBTFRFUiBDT0xVTU4gYSBTRVQgREVGQVVMVCA5OTk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LmNoIChjIGludGVnZXIpIElOSEVSSVRTIChwZ3RibF9kZGxfdGVzdC5wYXIp OworIEFMVEVSIFRBQkxFIE9OTFkgcGd0YmxfZGRsX3Rlc3QuY2ggQUxURVIgQ09MVU1OIGEgU0VU IERFRkFVTFQgOTk5OworKDIgcm93cykKKworLS0gUGVyLWNvbHVtbiBhdHRvcHRpb25zOiBlbWl0 dGVkIGFzIEFMVEVSIENPTFVNTiBTRVQgKC4uLikuCitDUkVBVEUgVEFCTEUgYXR0b3B0IChhIGlu dCwgYiB0ZXh0KTsKK0FMVEVSIFRBQkxFIGF0dG9wdCBBTFRFUiBDT0xVTU4gYSBTRVQgKG5fZGlz dGluY3QgPSAxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdhdHRvcHQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmF0dG9wdCAoYSBpbnRlZ2VyLCBi IHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmF0dG9wdCBBTFRFUiBDT0xVTU4g YSBTRVQgKG5fZGlzdGluY3Q9JzEwMCcpOworKDIgcm93cykKKworLS0gUGFydGl0aW9uZWQgdGFi bGUgcGFyZW50cyAoUkFOR0UsIEhBU0gsIGFuZCBMSVNUKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRf cmFuZ2UgKGlkIGludCwgayBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfcmFuZ2UgKGlkIGludGVnZXIsIGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7 CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaCAoaWQgaW50KSBQQVJUSVRJT04g QlkgSEFTSCAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFz aCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRf aGFzaCAoaWQgaW50ZWdlcikgUEFSVElUSU9OIEJZIEhBU0ggKGlkKTsKKygxIHJvdykKKworQ1JF QVRFIFRBQkxFIHBhcnRlZF9saXN0IChpZCBpbnQsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkg TElTVCAocmVnaW9uKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2xp c3QnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9saXN0IChpZCBpbnRlZ2VyLCByZWdp b24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CisoMSByb3cpCisKKy0tIFBhcnRp dGlvbiBjaGlsZHJlbjogRlJPTS9UTywgV0lUSCAobW9kdWx1cywgcmVtYWluZGVyKSwgREVGQVVM VC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04gT0YgcGFydGVkX3Jhbmdl CisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0FMVEVSIFRBQkxFIHBhcnRlZF9y YW5nZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgUEFSVElU SU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBGT1IgVkFMVUVTIEZST00gKDApIFRP ICgxMDApOworIEFMVEVSIFRBQkxFIE9OTFkgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEg QUxURVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKKygyIHJvd3MpCisKK0NSRUFURSBUQUJMRSBw YXJ0ZWRfaGFzaF8wIFBBUlRJVElPTiBPRiBwYXJ0ZWRfaGFzaAorICAgIEZPUiBWQUxVRVMgV0lU SCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3BhcnRlZF9oYXNoXzAnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNo XzAgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoIEZPUiBWQUxVRVMgV0lU SCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0 ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5w YXJ0ZWRfcmFuZ2UgREVGQVVMVDsKKygxIHJvdykKKworLS0gTm9uLWNvbnN0cmFpbnQtYmFja2Vk IGluZGV4IG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IHRoZSBwYXJlbnQncyBpbmRleCBEREwKKy0t IG11c3QgYXBwZWFyIG9uY2U7IHRoZSBhdXRvLWNyZWF0ZWQgY2hpbGQgcGFydGl0aW9uIGluZGV4 ZXMgKHJlbGlzcGFydGl0aW9uPXQpCistLSBtdXN0IGJlIHN1cHByZXNzZWQgc28gdGhlIERETCBy b3VuZC10cmlwcyB3aXRob3V0ICJyZWxhdGlvbiBhbHJlYWR5IGV4aXN0cyIuCitDUkVBVEUgVEFC TEUgcGFydGVkX2lkeCAoaWQgaW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJl Z2lvbik7CitDUkVBVEUgVEFCTEUgcGFydGVkX2lkeF9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfaWR4 IEZPUiBWQUxVRVMgSU4gKCdhJyk7CitDUkVBVEUgVU5JUVVFIElOREVYIHBhcnRlZF9pZHhfdWlk eCBPTiBwYXJ0ZWRfaWR4IChpZCwgcmVnaW9uKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncGFydGVkX2lkeCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5w YXJ0ZWRfaWR4IChpZCBpbnRlZ2VyLCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJl Z2lvbik7CisgQ1JFQVRFIFVOSVFVRSBJTkRFWCBwYXJ0ZWRfaWR4X3VpZHggT04gcGd0YmxfZGRs X3Rlc3QucGFydGVkX2lkeCBVU0lORyBidHJlZSAoaWQsIHJlZ2lvbik7CisgQ1JFQVRFIFRBQkxF IHBndGJsX2RkbF90ZXN0LnBhcnRlZF9pZHhfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3Qu cGFydGVkX2lkeCBGT1IgVkFMVUVTIElOICgnYScpOworKDMgcm93cykKKworLS0gUGxhaW4gKG5v bi11bmlxdWUpIENSRUFURSBJTkRFWCBvbiBwYXJ0aXRpb25lZCB0YWJsZTogdGhlIGF1dG8tY3Jl YXRlZCBjaGlsZAorLS0gaW5kZXggKHJlbGlzcGFydGl0aW9uPXRydWUpIGlzIHN1cHByZXNzZWQs IGp1c3QgbGlrZSB0aGUgVU5JUVVFIGNhc2UuCitDUkVBVEUgVEFCTEUgcGFydGVkX3BsYWluIChp ZCBpbnQsIHZhbCB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBw YXJ0ZWRfcGxhaW5fYSBQQVJUSVRJT04gT0YgcGFydGVkX3BsYWluIEZPUiBWQUxVRVMgRlJPTSAo MCkgVE8gKDEwMCk7CitDUkVBVEUgSU5ERVggcGFydGVkX3BsYWluX2lkX2lkeCBPTiBwYXJ0ZWRf cGxhaW4gKGlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3BsYWlu Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QucGFydGVkX3BsYWluIChpZCBpbnRlZ2VyLCB2YWwgdGV4dCkgUEFSVElUSU9OIEJZ IFJBTkdFIChpZCk7CisgQ1JFQVRFIElOREVYIHBhcnRlZF9wbGFpbl9pZF9pZHggT04gcGd0Ymxf ZGRsX3Rlc3QucGFydGVkX3BsYWluIFVTSU5HIGJ0cmVlIChpZCk7CisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LnBhcnRlZF9wbGFpbl9hIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5w YXJ0ZWRfcGxhaW4gRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKygzIHJvd3MpCisKKy0t IENvbnN0cmFpbnQtYmFja2VkIFBSSU1BUlkgS0VZIG9uIHBhcnRpdGlvbmVkIHRhYmxlOiB0aGUg Y2hpbGQncyBpbmhlcml0ZWQKKy0tIGNvbnN0cmFpbnQgKGNvbmlzbG9jYWw9ZmFsc2UpIGFuZCBp dHMgYmFja2luZyBpbmRleCBhcmUgYm90aCBzdXBwcmVzc2VkLgorQ1JFQVRFIFRBQkxFIHBhcnRl ZF9wayAoaWQgaW50LCByZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CitD UkVBVEUgVEFCTEUgcGFydGVkX3BrX2EgUEFSVElUSU9OIE9GIHBhcnRlZF9wayBGT1IgVkFMVUVT IElOICgnYScpOworQUxURVIgVEFCTEUgcGFydGVkX3BrIEFERCBQUklNQVJZIEtFWSAoaWQsIHJl Z2lvbik7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9wayc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRf cGsgKGlkIGludGVnZXIgTk9UIE5VTEwsIHJlZ2lvbiB0ZXh0IE5PVCBOVUxMKSBQQVJUSVRJT04g QlkgTElTVCAocmVnaW9uKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcGsg QUREIENPTlNUUkFJTlQgcGFydGVkX3BrX3BrZXkgUFJJTUFSWSBLRVkgKGlkLCByZWdpb24pOwor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcGtfYSBQQVJUSVRJT04gT0YgcGd0 YmxfZGRsX3Rlc3QucGFydGVkX3BrIEZPUiBWQUxVRVMgSU4gKCdhJyk7CisoMyByb3dzKQorCist LSBNdWx0aS1sZXZlbCAoc3ViLXBhcnRpdGlvbmVkKSB0YWJsZSB3aXRoIGEgQ1JFQVRFIElOREVY IG9uIHRoZSByb290LgorLS0gVGhlIG1pZC1sZXZlbCBwYXJ0aXRpb25lZCBpbmRleCAocmVsaXNw YXJ0aXRpb249dHJ1ZSwgcmVsa2luZD0nSScpIGFuZCB0aGUKKy0tIGxlYWYgaW5kZXggKHJlbGlz cGFydGl0aW9uPXRydWUsIHJlbGtpbmQ9J2knKSBhcmUgYm90aCBzdXBwcmVzc2VkLgorQ1JFQVRF IFRBQkxFIHBhcnRlZF9zdWIgKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNU IChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdWJfYSBQQVJUSVRJT04gT0YgcGFydGVk X3N1YgorICAgIEZPUiBWQUxVRVMgSU4gKCdhJykgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitD UkVBVEUgVEFCTEUgcGFydGVkX3N1Yl9hMSBQQVJUSVRJT04gT0YgcGFydGVkX3N1Yl9hIEZPUiBW QUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitDUkVBVEUgSU5ERVggcGFydGVkX3N1Yl9pZF9pZHgg T04gcGFydGVkX3N1YiAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0 ZWRfc3ViJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdWIgKGlkIGludGVn ZXIsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKKyBDUkVBVEUgSU5E RVggcGFydGVkX3N1Yl9pZF9pZHggT04gcGd0YmxfZGRsX3Rlc3QucGFydGVkX3N1YiBVU0lORyBi dHJlZSAoaWQpOworIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfc3ViX2EgUEFS VElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdWIgRk9SIFZBTFVFUyBJTiAoJ2EnKSBQ QVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFy dGVkX3N1Yl9hMSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3N1Yl9hIEZPUiBW QUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisoNCByb3dzKQorCistLSBQYXJ0aXRpb24gY2hpbGQg d2l0aCBpdHMgb3duIGxvY2FsbHktZGVmaW5lZCBpbmRleCAocmVsaXNwYXJ0aXRpb249ZmFsc2Up OgorLS0gdGhpcyBpcyBOT1QgaW5oZXJpdGVkIGZyb20gYW55IHBhcmVudCBwYXJ0aXRpb25lZCBp bmRleCBhbmQgbXVzdCBiZSBlbWl0dGVkLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGlsZF9pZHgg KGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRF IFRBQkxFIHBhcnRlZF9jaGlsZF9pZHhfYSBQQVJUSVRJT04gT0YgcGFydGVkX2NoaWxkX2lkeCBG T1IgVkFMVUVTIElOICgnYScpOworQ1JFQVRFIElOREVYIHBhcnRlZF9jaGlsZF9pZHhfYV9pZCBP TiBwYXJ0ZWRfY2hpbGRfaWR4X2EgKGlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX2NoaWxkX2lkeCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfY2hpbGRfaWR4IChpZCBpbnRlZ2VyLCBy ZWdpb24gdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKHJlZ2lvbik7CisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LnBhcnRlZF9jaGlsZF9pZHhfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rl c3QucGFydGVkX2NoaWxkX2lkeCBGT1IgVkFMVUVTIElOICgnYScpOworIENSRUFURSBJTkRFWCBw YXJ0ZWRfY2hpbGRfaWR4X2FfaWQgT04gcGd0YmxfZGRsX3Rlc3QucGFydGVkX2NoaWxkX2lkeF9h IFVTSU5HIGJ0cmVlIChpZCk7CisoMyByb3dzKQorCistLSBNaXg6IHBhcmVudCBoYXMgYSBDUkVB VEUgSU5ERVggKGF1dG8tcHJvcGFnYXRlZCB0byBjaGlsZCwgcmVsaXNwYXJ0aXRpb249dHJ1ZSwK Ky0tIHN1cHByZXNzZWQpIEFORCB0aGUgY2hpbGQgaGFzIGl0cyBvd24gbG9jYWwgaW5kZXggKHJl bGlzcGFydGl0aW9uPWZhbHNlLCBlbWl0dGVkKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfbWl4ZWQg KGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRF IFRBQkxFIHBhcnRlZF9taXhlZF9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfbWl4ZWQgRk9SIFZBTFVF UyBJTiAoJ2EnKTsKK0NSRUFURSBJTkRFWCBwYXJ0ZWRfbWl4ZWRfaWQgT04gcGFydGVkX21peGVk IChpZCk7CitDUkVBVEUgSU5ERVggcGFydGVkX21peGVkX2FfcmVnaW9uIE9OIHBhcnRlZF9taXhl ZF9hIChyZWdpb24pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbWl4 ZWQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRf bWl4ZWQgKGlkIGludGVnZXIsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9u KTsKKyBDUkVBVEUgSU5ERVggcGFydGVkX21peGVkX2lkIE9OIHBndGJsX2RkbF90ZXN0LnBhcnRl ZF9taXhlZCBVU0lORyBidHJlZSAoaWQpOworIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5w YXJ0ZWRfbWl4ZWRfYSBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX21peGVkIEZP UiBWQUxVRVMgSU4gKCdhJyk7CisgQ1JFQVRFIElOREVYIHBhcnRlZF9taXhlZF9hX3JlZ2lvbiBP TiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfbWl4ZWRfYSBVU0lORyBidHJlZSAocmVnaW9uKTsKKyg0 IHJvd3MpCisKKy0tIEZLIG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IGRlY2xhcmVkIG9uIHRoZSBw YXJlbnQ7IHBhcnRpdGlvbiBjaGlsZHJlbiBpbmhlcml0CistLSB0aGUgY29uc3RyYWludCB3aXRo IGNvbmlzbG9jYWw9ZmFsc2UgYW5kIG11c3Qgbm90IHJlLWVtaXQgaXQuCitDUkVBVEUgVEFCTEUg cGFydGVkX2ZrX3RndCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRf ZmsgKGlkIGludCwgdGd0X2lkIGludCBSRUZFUkVOQ0VTIHBhcnRlZF9ma190Z3QoaWQpKQorICAg IFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9ma19hIFBBUlRJ VElPTiBPRiBwYXJ0ZWRfZmsgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2ZrJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9mayAoaWQgaW50ZWdl ciwgdGd0X2lkIGludGVnZXIpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworIEFMVEVSIFRBQkxF IHBndGJsX2RkbF90ZXN0LnBhcnRlZF9mayBBREQgQ09OU1RSQUlOVCBwYXJ0ZWRfZmtfdGd0X2lk X2ZrZXkgRk9SRUlHTiBLRVkgKHRndF9pZCkgUkVGRVJFTkNFUyBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfZmtfdGd0KGlkKTsKKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2ZrX2Eg UEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9mayBGT1IgVkFMVUVTIEZST00gKDAp IFRPICgxMDApOworKDMgcm93cykKKworLS0gU3RhdGlzdGljcyBkZWNsYXJlZCBleHBsaWNpdGx5 IG9uIGEgcGFydGl0aW9uIGNoaWxkIChub3QgYXV0by1wcm9wYWdhdGVkKToKKy0tIHRoZSBjaGls ZCdzIHN0YXRpc3RpY3Mgb2JqZWN0IGFwcGVhcnMgaW5zaWRlIHRoZSBjaGlsZCdzIERETCBibG9j ay4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfc3R4IChpZCBpbnQsIHJlZ2lvbiB0ZXh0LCB2YWwgZmxv YXQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdHhf YSBQQVJUSVRJT04gT0YgcGFydGVkX3N0eCBGT1IgVkFMVUVTIElOICgnYScpOworQ1JFQVRFIFNU QVRJU1RJQ1MgcGFydGVkX3N0eF9zdGF0IChuZGlzdGluY3QpIE9OIGlkLCByZWdpb24gRlJPTSBw YXJ0ZWRfc3R4OworQ1JFQVRFIFNUQVRJU1RJQ1MgcGFydGVkX3N0eF9hX3N0YXQgKG5kaXN0aW5j dCkgT04gaWQsIHZhbCBGUk9NIHBhcnRlZF9zdHhfYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncGFydGVkX3N0eCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3N0eCAoaWQgaW50ZWdlciwgcmVn aW9uIHRleHQsIHZhbCBkb3VibGUgcHJlY2lzaW9uKSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9u KTsKKyBDUkVBVEUgU1RBVElTVElDUyBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfc3R4X3N0YXQgKG5k aXN0aW5jdCkgT04gaWQsIHJlZ2lvbiBGUk9NIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdHg7Cisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdHhfYSBQQVJUSVRJT04gT0YgcGd0 YmxfZGRsX3Rlc3QucGFydGVkX3N0eCBGT1IgVkFMVUVTIElOICgnYScpOworIENSRUFURSBTVEFU SVNUSUNTIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9zdHhfYV9zdGF0IChuZGlzdGluY3QpIE9OIGlk LCB2YWwgRlJPTSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfc3R4X2E7CisoNCByb3dzKQorCitEUk9Q IFRBQkxFIHBhcnRlZF9zdHg7CistLSBOTyBJTkhFUklUIENIRUNLIGNvbnN0cmFpbnQ6IHRoZSBO TyBJTkhFUklUIGZsYWcgbXVzdCBhcHBlYXIgdmVyYmF0aW0gaW4gdGhlCistLSBpbmxpbmUgY29u c3RyYWludCBkZWZpbml0aW9uIGluc2lkZSB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkuCitDUkVBVEUg VEFCTEUgbm9pbmhjaGsgKGlkIGludCwgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIHZhbF9wb3Mg Q0hFQ0sgKHZhbCA+IDApIE5PIElOSEVSSVQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdub2luaGNoayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwZ3RibF9kZGxfdGVzdC5ub2luaGNoayAoaWQgaW50ZWdlciwgdmFsIGludGVnZXIsIENP TlNUUkFJTlQgdmFsX3BvcyBDSEVDSyAoKHZhbCA+IDApKSBOTyBJTkhFUklUKTsKKygxIHJvdykK KworRFJPUCBUQUJMRSBub2luaGNoazsKKy0tIE11bHRpcGxlIGluaGVyaXRhbmNlIHBhcmVudHM6 IHRoZSBJTkhFUklUUyBjbGF1c2UgbXVzdCBsaXN0IGJvdGggcGFyZW50cyBpbgorLS0gZGVjbGFy YXRpb24gb3JkZXI7IG9ubHkgdGhlIGxvY2FsbHktZGVmaW5lZCBjb2x1bW4gYXBwZWFycyBpbiB0 aGUgY29sdW1uIGxpc3QuCitDUkVBVEUgVEFCTEUgbWlfcDEgKGEgaW50IERFRkFVTFQgMSk7CitD UkVBVEUgVEFCTEUgbWlfcDIgKGIgdGV4dCBERUZBVUxUICd4Jyk7CitDUkVBVEUgVEFCTEUgbWlf Y2hpbGQgKGMgZmxvYXQpIElOSEVSSVRTIChtaV9wMSwgbWlfcDIpOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdtaV9jaGlsZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5taV9jaGlsZCAoYyBkb3VibGUgcHJlY2lz aW9uKSBJTkhFUklUUyAocGd0YmxfZGRsX3Rlc3QubWlfcDEsIHBndGJsX2RkbF90ZXN0Lm1pX3Ay KTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBtaV9wMSwgbWlfcDIgQ0FTQ0FERTsKK05PVElDRTog IGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgbWlfY2hpbGQKKy0tIFJ1bGVzLgorQ1JFQVRFIFRBQkxF IHJ0IChpZCBpbnQpOworQ1JFQVRFIFRBQkxFIHJ0X2xvZyAoaWQgaW50KTsKK0NSRUFURSBSVUxF IHJ0X2xvZ19pbnNlcnQgQVMgT04gSU5TRVJUIFRPIHJ0CisgICAgRE8gQUxTTyBJTlNFUlQgSU5U TyBydF9sb2cgVkFMVUVTIChORVcuaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdydCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0 IChpZCBpbnRlZ2VyKTsKKyBDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgT04gSU5TRVJUIFRP IHBndGJsX2RkbF90ZXN0LnJ0IERPICBJTlNFUlQgSU5UTyBwZ3RibF9kZGxfdGVzdC5ydF9sb2cg KGlkKSsKKyAgIFZBTFVFUyAobmV3LmlkKTsKKygyIHJvd3MpCisKKy0tIEV4dGVuZGVkIHN0YXRp c3RpY3MuCitDUkVBVEUgVEFCTEUgc3R4IChhIGludCwgYiBpbnQsIGMgaW50KTsKK0NSRUFURSBT VEFUSVNUSUNTIHN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0eDsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnN0eCAoYSBpbnRlZ2VyLCBiIGlu dGVnZXIsIGMgaW50ZWdlcik7CisgQ1JFQVRFIFNUQVRJU1RJQ1MgcGd0YmxfZGRsX3Rlc3Quc3R4 X25kdiAobmRpc3RpbmN0KSBPTiBhLCBiIEZST00gcGd0YmxfZGRsX3Rlc3Quc3R4OworKDIgcm93 cykKKworLS0gUm93LWxldmVsIHNlY3VyaXR5IHRvZ2dsZXMuCitDUkVBVEUgVEFCTEUgcmxzIChp ZCBpbnQpOworQUxURVIgVEFCTEUgcmxzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CitBTFRF UiBUQUJMRSBybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyAoaWQgaW50ZWdlcik7CisgQUxURVIgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucmxzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CisgQUxURVIg VEFCTEUgcGd0YmxfZGRsX3Rlc3QucmxzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKKygzIHJv d3MpCisKKy0tIFJFUExJQ0EgSURFTlRJVFk6IGVtaXR0ZWQgb25seSB3aGVuIG5vdCB0aGUgZGVm YXVsdC4KK0NSRUFURSBUQUJMRSByaV9mdWxsIChhIGludCk7CitBTFRFUiBUQUJMRSByaV9mdWxs IFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cmlfZnVsbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCAoYSBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5yaV9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKKygyIHJvd3MpCisKK0NS RUFURSBUQUJMRSByaV9pZHggKGEgaW50IE5PVCBOVUxMKTsKK0NSRUFURSBVTklRVUUgSU5ERVgg cmlfaWR4X2EgT04gcmlfaWR4IChhKTsKK0FMVEVSIFRBQkxFIHJpX2lkeCBSRVBMSUNBIElERU5U SVRZIFVTSU5HIElOREVYIHJpX2lkeF9hOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdyaV9pZHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeCAo YSBpbnRlZ2VyIE5PVCBOVUxMKTsKKyBDUkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9hIE9OIHBn dGJsX2RkbF90ZXN0LnJpX2lkeCBVU0lORyBidHJlZSAoYSk7CisgQUxURVIgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QucmlfaWR4IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfaWR4X2E7Ciso MyByb3dzKQorCistLSBVTkxPR0dFRCArIHJlbG9wdGlvbnMuCitDUkVBVEUgVU5MT0dHRUQgVEFC TEUgdW5vIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA3MCk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3Vubyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFVOTE9HR0VE IFRBQkxFIHBndGJsX2RkbF90ZXN0LnVubyAoaWQgaW50ZWdlcikgV0lUSCAoZmlsbGZhY3Rvcj0n NzAnKTsKKygxIHJvdykKKworLS0gVHlwZWQgdGFibGUgKENSRUFURSBUQUJMRSBPRiB0eXBlX25h bWUpLiAgQ29sdW1ucyBpbmhlcml0ZWQgZnJvbSB0aGUKKy0tIHR5cGUgZW1pdCBub3RoaW5nOyBs b2NhbGx5LWFwcGxpZWQgREVGQVVMVCwgTk9UIE5VTEwgYW5kIENIRUNLIGNvbWUKKy0tIG91dCB0 aHJvdWdoIGEgc2luZ2xlICIoY29sIFdJVEggT1BUSU9OUyAuLi4pIiBsaXN0LgorQ1JFQVRFIFRZ UEUgdHlwZWRfdCBBUyAoYSBpbnQsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgdHlwZWRfcGxhaW4g T0YgdHlwZWRfdDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndHlwZWRfcGxhaW4n OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnR5cGVkX3BsYWluIE9GIHBndGJsX2RkbF90ZXN0 LnR5cGVkX3Q7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSB0eXBlZF9vdmVyIE9GIHR5cGVkX3Qg KAorICAgIGEgV0lUSCBPUFRJT05TIERFRkFVTFQgNyBOT1QgTlVMTCwKKyAgICBiIFdJVEggT1BU SU9OUyBOT1QgTlVMTCwKKyAgICBDT05TVFJBSU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKGxlbmd0aChi KSA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9vdmVyJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QudHlwZWRfb3ZlciBPRiBwZ3RibF9kZGxfdGVzdC50eXBlZF90IChhIFdJVEgg T1BUSU9OUyBERUZBVUxUIDcgTk9UIE5VTEwsIGIgV0lUSCBPUFRJT05TIE5PVCBOVUxMLCBDT05T VFJBSU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKChsZW5ndGgoYikgPiAwKSkpOworKDEgcm93KQorCist LSBUZW1wb3JhcnkgdGFibGVzICsgT04gQ09NTUlULiAgVGVtcCB0YWJsZXMgbXVzdCBuZXZlciBi ZSBlbWl0dGVkIHdpdGgKKy0tIHRoZSBzZXNzaW9uLXByaXZhdGUgcGdfdGVtcF9OTiBzY2hlbWEg cHJlZml4IC0tIHRoZSBURU1QT1JBUlkga2V5d29yZAorLS0gYWxyZWFkeSBwbGFjZXMgdGhlIHRh YmxlIGluIHBnX3RlbXAgYW5kIHRoZSBwcmVmaXggaXMgbm9uLXJlcGxheWFibGUuCistLSBPTiBD T01NSVQgRFJPUCBvbmx5IGZpcmVzIGF0IGNvbW1pdCwgc28gdGhlIHF1ZXJpZXMgdGhhdCBuZWVk IHRvIHNlZQorLS0gdGhlIGNhdGFsb2cgZW50cnkgbXVzdCBydW4gaW4gdGhlIHNhbWUgdHJhbnNh Y3Rpb24gYXMgdGhlIENSRUFURS4KK0JFR0lOOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWZh dWx0IChpZCBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWxldGUgKGlkIGludCkgT04g Q09NTUlUIERFTEVURSBST1dTOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnQp IE9OIENPTU1JVCBEUk9QOworU0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1w X2RlZmF1bHQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUg TElLRSAnQ1JFQVRFICUnOworICAgICAgICAgICAgICAgICAgICAgICBsaW5lICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50ZWdl cik7CisoMSByb3cpCisKK1NFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9k ZWxldGUnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElL RSAnQ1JFQVRFICUnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg VEVNUE9SQVJZIFRBQkxFIHRlbXBfZGVsZXRlIChpZCBpbnRlZ2VyKSBPTiBDT01NSVQgREVMRVRF IFJPV1M7CisoMSByb3cpCisKK1NFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVt cF9kcm9wJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJ S0UgJ0NSRUFURSAlJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSB0 ZW1wX2Ryb3AgKGlkIGludGVnZXIpIE9OIENPTU1JVCBEUk9QOworKDEgcm93KQorCitST0xMQkFD SzsKKy0tIFByZXR0eSBtb2RlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNp Yyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgcHJldHR5ID0+IHRydWUpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuYmFzaWMgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KworICAgICBpZCBpbnRlZ2VyIE5PVCBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZB VUxUICdhbm9uJzo6dGV4dCBOT1QgTlVMTCAgICAgICAgICAgICAgICAgICAgICsKKyApOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkg UFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIG9ubHlfa2luZHMgLyBleGNlcHRfa2lu ZHMgZ2F0aW5nOiBlYWNoIGVtaXRzIGVpdGhlciBvbmx5IHRoZSBsaXN0ZWQga2luZHMKKy0tIChv bmx5X2tpbmRzKSBvciBldmVyeSBraW5kIGV4Y2VwdCB0aGUgbGlzdGVkIG9uZXMgKGV4Y2VwdF9r aW5kcykuICBUaGUgdHdvCistLSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgS2luZCB2b2NhYnVs YXJ5OiB0YWJsZSwgaW5kZXgsCistLSBwcmltYXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWln bl9rZXksIGV4Y2x1c2lvbiwgcnVsZSwKKy0tIHN0YXRpc3RpY3MsIHRyaWdnZXIsIHBvbGljeSwg cmxzLCByZXBsaWNhX2lkZW50aXR5LCBwYXJ0aXRpb24uCistLSBOT1QgTlVMTCBpcyBub3QgaW4g dGhlIHZvY2FidWxhcnkgLSBhbHdheXMgZW1pdHRlZCB0byBwcmV2ZW50CistLSBwcm9kdWNpbmcg c2NoZW1hcyB0aGF0IHNpbGVudGx5IGFjY2VwdCBOVUxMcyB0aGUgc291cmNlIHdvdWxkCistLSBo YXZlIHJlamVjdGVkLgorLS0KKy0tIGV4Y2VwdF9raW5kcz1pbmRleCBoaWRlcyB0aGUgQ1JFQVRF IElOREVYIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQn OjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgn XSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7 CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3Br ZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIGV4Y2VwdF9raW5kcz1wcmltYXJ5 X2tleSx1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9uIGhpZGVzIGV2ZXJ5CistLSB0 YWJsZS1sZXZlbCBjb25zdHJhaW50LiAgSW5saW5lIENIRUNLIGluIHRoZSBDUkVBVEUgVEFCTEUg Ym9keSBpcworLS0gc3VwcHJlc3NlZCB0b28uCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJB WVsncHJpbWFyeV9rZXknLCd1bmlxdWUnLCdjaGVjaycsJ2ZvcmVpZ25fa2V5JywnZXhjbHVzaW9u J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlcik7CisoMSByb3cpCisK Ky0tIGV4Y2VwdF9raW5kcz1mb3JlaWduX2tleSBzdXBwcmVzc2VzIG9ubHkgRk9SRUlHTiBLRVkg Y29uc3RyYWludHM7CistLSBQUklNQVJZIEtFWSwgVU5JUVVFLCBDSEVDSywgYW5kIG5hbWVkIE5P VCBOVUxMIHN0YXkuICBUaGlzIGlzIHRoZQorLS0gZmlyc3QgcGFzcyBvZiB0aGUgdHdvLXBhc3Mg RkstY2xvbmUgd29ya2Zsb3c6IGVtaXQgdGFibGVzIHdpdGhvdXQKKy0tIGNyb3NzLXRhYmxlIEZL cywgbG9hZCBkYXRhLCB0aGVuIHJlLXJ1biB3aXRoIG9ubHlfa2luZHM9Zm9yZWlnbl9rZXkKKy0t IHRvIGFkZCB0aGVtIG9uY2UgYWxsIHRhcmdldHMgZXhpc3QuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29u cyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlciwgQ09OU1RSQUlOVCBjb25zX2FfY2hl Y2sgQ0hFQ0sgKChhID4gMCkpKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFE RCBDT05TVFJBSU5UIGNvbnNfYl9rZXkgVU5JUVVFIChiKTsKKygyIHJvd3MpCisKKy0tIG9ubHlf a2luZHM9Zm9yZWlnbl9rZXkgaXMgdGhlIHNlY29uZCBwYXNzIG9mIHRoZSB0d28tcGFzcyBGSy1j bG9uZQorLS0gd29ya2Zsb3c6IGVtaXQgb25seSB0aGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05T VFJBSU5UIC4uLiBGT1JFSUdOCistLSBLRVkgcm93czsgdGhlIENSRUFURSBUQUJMRSBhbmQgZXZl cnkgbm9uLUZLIHN1Yi1vYmplY3QgYXJlCistLSBzdXBwcmVzc2VkICh0aGUgdGFibGUgYWxyZWFk eSBleGlzdHMgZnJvbSB0aGUgZmlyc3QgcGFzcykuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJS QVlbJ2ZvcmVpZ25fa2V5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMg QUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcGd0 YmxfZGRsX3Rlc3QucmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMSBy b3cpCisKKy0tIEEgdGFibGUgd2l0aCBubyBmb3JlaWduIGtleXMgcHJvZHVjZXMgbm8gcm93cyB1 bmRlcgorLS0gb25seV9raW5kcz1mb3JlaWduX2tleS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncmVmZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsnZm9yZWlnbl9rZXknXSk7CisgcGdfZ2V0X3RhYmxlX2RkbCAKKy0tLS0tLS0tLS0tLS0t LS0tLQorKDAgcm93cykKKworLS0gb25seV9raW5kcz10YWJsZSBlbWl0cyBvbmx5IHRoZSBiYXJl IENSRUFURSBUQUJMRSAod2l0aCBhbnkgaW5saW5lCistLSBjb2x1bW4tbGV2ZWwgTk9UIE5VTEwg YW5kIENIRUNLKSAtIG5vIGluZGV4ZXMsIG5vIFBSSU1BUlkgS0VZIEFMVEVSLAorLS0gbm8gb3Ro ZXIgc3ViLW9iamVjdHMuICBVc2VmdWwgZm9yIGNhcHR1cmluZyBhIHRhYmxlJ3Mgc2hhcGUgd2l0 aG91dAorLS0gcHVsbGluZyBpbiBldmVyeXRoaW5nIGF0dGFjaGVkIHRvIGl0LgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBv bmx5X2tpbmRzID0+IEFSUkFZWyd0YWJsZSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBu YW1lIHRleHQpOworKDEgcm93KQorCistLSBvbmx5X2tpbmRzPWNoZWNrIG9uIGEgbm9uLXBhcnRp dGlvbiB0YWJsZS4gIFRoZSBjb25zdHJhaW50IGxvb3AgbXVzdCBlbWl0CistLSBjb2x1bW4tbGV2 ZWwgYW5kIHRhYmxlLWxldmVsIENIRUNLIGNvbnN0cmFpbnRzIHZpYSBBTFRFUiBUQUJMRSBoZXJl LAorLS0gYmVjYXVzZSB0aGUgaW5saW5lIHBhdGggaW4gQ1JFQVRFIFRBQkxFIG5ldmVyIHJ1bnMg KEtJTkRfVEFCTEUgaXMKKy0tIG5vdCBpbiB0aGUgZmlsdGVyKS4KK0NSRUFURSBUQUJMRSBjaGtf b25seSAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICBxdHkgaW50IENIRUNLIChxdHkg PiAwKSwKKyAgICBDT05TVFJBSU5UIGNoa19vbmx5X2lkX3BvcyBDSEVDSyAoaWQgPiAwKQorKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2hrX29ubHknOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2NoZWNrJ10pOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaGtfb25seSBBREQgQ09OU1RSQUlOVCBjaGtf b25seV9pZF9wb3MgQ0hFQ0sgKChpZCA+IDApKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVz dC5jaGtfb25seSBBREQgQ09OU1RSQUlOVCBjaGtfb25seV9xdHlfY2hlY2sgQ0hFQ0sgKChxdHkg PiAwKSk7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIGNoa19vbmx5OworLS0gb25seV9raW5kcz1w YXJ0aXRpb24gb24gYSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQ6IGVhY2ggY2hpbGQncyBmdWxs IERETAorLS0gaXMgZW1pdHRlZCAoQ1JFQVRFIFRBQkxFIC4uLiBQQVJUSVRJT04gT0YgLi4uKS4g IFRoZSAicGFydGl0aW9uIgorLS0ga2V5d29yZCBpcyBhIGdhdGUgYXQgdGhlIHBhcmVudCBsZXZl bDsgaXQgaXMgc3RyaXBwZWQgZnJvbSB0aGUKKy0tIHByb3BhZ2F0ZWQgZmlsdGVyIHNvIHRoZSBj aGlsZCBkb2VzIG5vdCBleGNsdWRlIGl0cyBvd24KKy0tIENSRUFURSBUQUJMRS4KK0NSRUFURSBU QUJMRSBwX29ubHkgKGlkIGludCwgdmFsIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOwor Q1JFQVRFIFRBQkxFIHBfb25seV9hIFBBUlRJVElPTiBPRiBwX29ubHkgRk9SIFZBTFVFUyBGUk9N ICgwKSBUTyAoMTAwKTsKK0NSRUFURSBUQUJMRSBwX29ubHlfYiBQQVJUSVRJT04gT0YgcF9vbmx5 IEZPUiBWQUxVRVMgRlJPTSAoMTAwKSBUTyAoMjAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncF9vbmx5Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+ IEFSUkFZWydwYXJ0aXRpb24nXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wX29ubHlfYSBQQVJUSVRJT04g T0YgcGd0YmxfZGRsX3Rlc3QucF9vbmx5IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7Cisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBfb25seV9iIFBBUlRJVElPTiBPRiBwZ3RibF9k ZGxfdGVzdC5wX29ubHkgRk9SIFZBTFVFUyBGUk9NICgxMDApIFRPICgyMDApOworKDIgcm93cykK KworRFJPUCBUQUJMRSBwX29ubHk7CistLSBvbmx5X2tpbmRzIGFuZCBleGNlcHRfa2luZHMgYXJl IG11dHVhbGx5IGV4Y2x1c2l2ZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29u cyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnZm9yZWlnbl9rZXknXSk7CitF UlJPUjogICJvbmx5X2tpbmRzIiBhbmQgImV4Y2VwdF9raW5kcyIgcGFyYW1ldGVycyBhcmUgbXV0 dWFsbHkgZXhjbHVzaXZlCistLSBQdWIvc3ViIHNjaGVtYSBjbG9uZToga2VlcCB0aGUgdGFibGUg YW5kIGl0cyBwcmltYXJ5IGtleSwgZHJvcCB0aGUKKy0tIHJlc3Qgb2YgdGhlIGNvbnN0cmFpbnRz IHNvIHRoZSBzdWJzY3JpYmVyIGNhbiByZXBsaWNhdGUgd2l0aG91dAorLS0gcHVsbGluZyBjcm9z cy10YWJsZSBkZXBlbmRlbmNpZXMgYWxvbmcuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJB WVsndW5pcXVlJywnY2hlY2snLCdmb3JlaWduX2tleScsJ2V4Y2x1c2lvbiddKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKGEg aW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworKDEgcm93KQorCistLSBleGNlcHRfa2lu ZHM9cnVsZSBoaWRlcyB0aGUgQ1JFQVRFIFJVTEUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJS QVlbJ3J1bGUnXSk7CisgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0IChpZCBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0g ZXhjZXB0X2tpbmRzPXN0YXRpc3RpY3MgaGlkZXMgdGhlIENSRUFURSBTVEFUSVNUSUNTLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5zdHggKGEgaW50ZWdlciwg YiBpbnRlZ2VyLCBjIGludGVnZXIpOworKDEgcm93KQorCistLSBleGNlcHRfa2luZHM9cmxzIGhp ZGVzIHRoZSBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIHRvZ2dsZXMuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwg ZXhjZXB0X2tpbmRzID0+IEFSUkFZWydybHMnXSk7CisgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmxzIChpZCBpbnRl Z2VyKTsKKygxIHJvdykKKworLS0gZXhjZXB0X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkgaGlkZXMg dGhlIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4g QVJSQVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7CisgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCAo YSBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gUGFydGl0aW9uIGNoaWxkcmVuIGFyZSBlbWl0dGVk IGJ5IGRlZmF1bHQ7IGV4Y2VwdF9raW5kcz1wYXJ0aXRpb24KKy0tIHN1cHByZXNzZXMgdGhlbSBz byBvbmx5IHRoZSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQgY29tZXMgb3V0LgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncGFydGl0aW9uJ10pOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgKGlkIGludGVnZXIs IGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CisoMSByb3cpCisKKy0tIFdoaXRl c3BhY2UgYXJvdW5kIGtpbmQgbmFtZXMgaXMgYWxsb3dlZDsgY2FzZSBpcyBmb2xkZWQuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnICBJTkRFWCAgJywnICBSVUxFICAnXSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJs X2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQUxURVIg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFS WSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugc3RyaXBz IHRoZSBzY2hlbWEgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlIGl0c2VsZgorLS0gYW5kIGZyb20gc2Ft ZS1zY2hlbWEgc2libGluZyByZWZlcmVuY2VzIChpbmhlcml0YW5jZS9wYXJ0aXRpb24KKy0tIHBh cmVudHMsIGlkZW50aXR5IHNlcXVlbmNlcyBpbiB0aGUgc2FtZSBzY2hlbWEpLCB3aGlsZSBjcm9z cy1zY2hlbWEKKy0tIHJlZmVyZW5jZXMgYXJlIGtlcHQgcXVhbGlmaWVkIGZvciBjb3JyZWN0bmVz cy4KKy0tCistLSBCYXJlIENSRUFURSBUQUJMRSBmb3IgYW4gb3JkaW5hcnkgdGFibGUuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4g ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgYmFzaWMgKGlk IGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZBVUxUICdhbm9uJzo6 dGV4dCBOT1QgTlVMTCk7CisgQUxURVIgVEFCTEUgYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNf cGtleSBQUklNQVJZIEtFWSAoaWQpOworKDIgcm93cykKKworLS0gSU5IRVJJVFMgcGFyZW50IGlu IHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBjaCAoYyBpbnRlZ2VyKSBJTkhFUklUUyAocGFyKTsKKyBBTFRFUiBUQUJMRSBPTkxZIGNo IEFMVEVSIENPTFVNTiBhIFNFVCBERUZBVUxUIDk5OTsKKygyIHJvd3MpCisKKy0tIFBhcnRpdGlv biBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFs aWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJ T04gT0YgcGFydGVkX3JhbmdlIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIg VEFCTEUgT05MWSBwYXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3Owor KDIgcm93cykKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHRhcmdldCBrZWVwcyBxdWFsaWZpY2F0aW9u LiAgVGhlICdyZWZkJyB0YWJsZSBpcyBpbgorLS0gcGd0YmxfZGRsX3Rlc3Q7IHBsYWNlIGFuIEZL IHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEgYW5kIHZlcmlmeSBpdAorLS0gc3RheXMgcXVh bGlmaWVkIGV2ZW4gd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLgorQ1JFQVRFIFNDSEVNQSBw Z3RibF9kZGxfb3RoZXI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX290aGVyLnBhcmVudCAoaWQg aW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSB4c2NoZW1hX2ZrICgKKyAgICBpZCAgaW50 IFBSSU1BUlkgS0VZLAorICAgIHBpZCBpbnQgUkVGRVJFTkNFUyBwZ3RibF9kZGxfb3RoZXIucGFy ZW50CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd4c2NoZW1hX2ZrJzo6cmVn Y2xhc3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj aGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHhzY2hlbWFf ZmsgKGlkIGludGVnZXIgTk9UIE5VTEwsIHBpZCBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSB4c2No ZW1hX2ZrIEFERCBDT05TVFJBSU5UIHhzY2hlbWFfZmtfcGtleSBQUklNQVJZIEtFWSAoaWQpOwor IEFMVEVSIFRBQkxFIHhzY2hlbWFfZmsgQUREIENPTlNUUkFJTlQgeHNjaGVtYV9ma19waWRfZmtl eSBGT1JFSUdOIEtFWSAocGlkKSBSRUZFUkVOQ0VTIHBndGJsX2RkbF9vdGhlci5wYXJlbnQoaWQp OworKDMgcm93cykKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHdob3NlIHRhcmdldCBzY2hlbWEgbmFt ZSBlbmRzIHdpdGggdGhlIGJhc2Ugc2NoZW1hIG5hbWUKKy0tIChlLmcuICJ4cGd0YmxfZGRsX3Rl c3QiIGVuZHMgd2l0aCAicGd0YmxfZGRsX3Rlc3QiKS4gIEEgcG9zdC1ob2MgdGV4dAorLS0gc3Ry aXAgd291bGQgbWFuZ2xlICJ4cGd0YmxfZGRsX3Rlc3QucmVmdGJsIiBpbnRvICJ4cmVmdGJsIjsg ZGVjaWRpbmcKKy0tIHF1YWxpZmljYXRpb24gYXQgZ2VuZXJhdGlvbiB0aW1lIGF2b2lkcyB0aGUg cHJvYmxlbSBlbnRpcmVseS4KK0NSRUFURSBTQ0hFTUEgeHBndGJsX2RkbF90ZXN0OworQ1JFQVRF IFRBQkxFIHhwZ3RibF9kZGxfdGVzdC5yZWZ0YmwgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVB VEUgVEFCTEUgc3VmZml4X3NjaGVtYV9mayAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAg ICByZWYgaW50IFJFRkVSRU5DRVMgeHBndGJsX2RkbF90ZXN0LnJlZnRibAorKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3VmZml4X3NjaGVtYV9mayc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlm aWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBzdWZmaXhfc2NoZW1hX2ZrIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCByZWYgaW50ZWdlcik7 CisgQUxURVIgVEFCTEUgc3VmZml4X3NjaGVtYV9mayBBREQgQ09OU1RSQUlOVCBzdWZmaXhfc2No ZW1hX2ZrX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKyBBTFRFUiBUQUJMRSBzdWZmaXhfc2NoZW1h X2ZrIEFERCBDT05TVFJBSU5UIHN1ZmZpeF9zY2hlbWFfZmtfcmVmX2ZrZXkgRk9SRUlHTiBLRVkg KHJlZikgUkVGRVJFTkNFUyB4cGd0YmxfZGRsX3Rlc3QucmVmdGJsKGlkKTsKKygzIHJvd3MpCisK K0RST1AgVEFCTEUgc3VmZml4X3NjaGVtYV9mazsKK0RST1AgU0NIRU1BIHhwZ3RibF9kZGxfdGVz dCBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB4cGd0YmxfZGRsX3Rl c3QucmVmdGJsCistLSBJZGVudGl0eSBjb2x1bW4gd2l0aCBhIGN1c3RvbSBzZXF1ZW5jZSBuYW1l IGluIHRoZSBzYW1lIHNjaGVtYSBpcworLS0gZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4g ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBpZF9jdXN0b20gKHYgaW50ZWdl ciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIChTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQg QlkgNSBNSU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAwIENBQ0hFIDEwIENZQ0xFKSBOT1QgTlVMTCk7 CisoMSByb3cpCisKKy0tIFJvdW5kLXRyaXA6IHdpdGggc2NoZW1hX3F1YWxpZmllZD1mYWxzZSwg YWZ0ZXIgU0VUIHNlYXJjaF9wYXRoIHRoZQorLS0gRERMIGNhbiBiZSByZXBsYXllZCBpbnRvIGEg ZGlmZmVyZW50IHRhcmdldCBzY2hlbWEuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9yZXBsYXk7 CitETyAkJAorREVDTEFSRQorICAgIHN0bXQgdGV4dDsKK0JFR0lOCisgICAgU0VUIExPQ0FMIHNl YXJjaF9wYXRoID0gcGd0YmxfZGRsX3JlcGxheTsKKyAgICBGT1Igc3RtdCBJTgorICAgICAgICBT RUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF90ZXN0LmJhc2ljJzo6 cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj aGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpIEFTIGxpbmUKKyAgICBMT09QCisgICAgICAgIEVYRUNV VEUgc3RtdDsKKyAgICBFTkQgTE9PUDsKK0VORCAkJDsKK1NFTEVDVCByZWxuYW1lc3BhY2U6OnJl Z25hbWVzcGFjZTo6dGV4dCwgcmVsbmFtZQorRlJPTSBwZ19jbGFzcyBXSEVSRSBvaWQgPSAncGd0 YmxfZGRsX3JlcGxheS5iYXNpYyc6OnJlZ2NsYXNzOworICAgcmVsbmFtZXNwYWNlICAgfCByZWxu YW1lIAorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLQorIHBndGJsX2RkbF9yZXBsYXkgfCBi YXNpYworKDEgcm93KQorCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcmVwbGF5IENBU0NBREU7CitO T1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBndGJsX2RkbF9yZXBsYXkuYmFzaWMKK0RS T1AgVEFCTEUgeHNjaGVtYV9mazsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9vdGhlciBDQVNDQURF OworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfb3RoZXIucGFyZW50 CistLSBDcm9zcy1zY2hlbWEgcGFydGl0aW9uIGNoaWxkIHdpdGggc2NoZW1hX3F1YWxpZmllZD1m YWxzZTogdGhlIGNoaWxkIG11c3QKKy0tIGNhcnJ5IGl0cyBvd24gc2NoZW1hIHByZWZpeCBzbyB0 aGUgb3V0cHV0IGlzIHVuYW1iaWd1b3VzIHJlZ2FyZGxlc3Mgb2YgdGhlCistLSBjYWxsZXIncyBz ZWFyY2hfcGF0aC4gIEJlZm9yZSB0aGUgZml4LCB0aGUgY2hpbGQgd2FzIGVtaXR0ZWQgYXMgdGhl IGJhcmUKKy0tIG5hbWUgInB0X2MiIChsYW5kaW5nIGluIHdoaWNoZXZlciBzY2hlbWEgaXMgZmly c3QgaW4gc2VhcmNoX3BhdGgpIHdoaWxlCistLSB0aGUgcGFyZW50IHJlZmVyZW5jZSBpbnNpZGUg dGhlIENSRUFURSBUQUJMRSBjYW1lIG91dCBhcyB0aGUgZnVsbHktcXVhbGlmaWVkCistLSAicGd0 YmxfZGRsX3BhcnRfcy5wdCIsIG1ha2luZyB0aGUgRERMIGluY29uc2lzdGVudCBhbmQgdW5yZXBs YXlhYmxlLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcGFydF9zOworQ1JFQVRFIFNDSEVNQSBw Z3RibF9kZGxfcGFydF9vdGhlcjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfcGFydF9zLnB0IChp ZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF9wYXJ0X290aGVyLnB0X2MKKyAgICBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3BhcnRf cy5wdAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9wYXJ0X3MucHQnOjpyZWdjbGFzcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcHQgKGlkIGludGVnZXIsIHZh bCBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3BhcnRfb3RoZXIucHRfYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3BhcnRfcy5wdCBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMDApOworKDIgcm93cykKKworRFJPUCBTQ0hFTUEgcGd0Ymxf ZGRsX3BhcnRfcyBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3Ri bF9kZGxfcGFydF9zLnB0CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcGFydF9vdGhlciBDQVNDQURF OworLS0gTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBvbiBhIHBhcnRpdGlvbiBjaGlsZCBoYXMgbm8g aW5saW5lIGNvbHVtbgorLS0gbGlzdCB0byBsaXZlIGluIChQQVJUSVRJT04gT0YgZm9ybSksIHNv IGl0IG11c3QgY29tZSBvdXQgYXMgYQorLS0gc2VwYXJhdGUgQUxURVIgVEFCTEUgLi4uIEFERCBD T05TVFJBSU5UIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hrIChpZCBpbnQsIHZh bCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGtf Y2hpbGQgUEFSVElUSU9OIE9GIHBhcnRlZF9jaGsKKyAgICAoQ09OU1RSQUlOVCBjaGtfaW5saW5l IENIRUNLICh2YWwgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfY2hrX2NoaWxkJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFy dGVkX2Noa19jaGlsZCBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2NoayBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBh cnRlZF9jaGtfY2hpbGQgQUREIENPTlNUUkFJTlQgY2hrX2lubGluZSBDSEVDSyAoKHZhbCA+IDAp KTsKKygyIHJvd3MpCisKK0RST1AgVEFCTEUgcGFydGVkX2NoazsKKy0tIEluaGVyaXRhbmNlIGNo aWxkcmVuIG9mIGEgcGFyZW50IHdpdGggYSBnZW5lcmF0ZWQgY29sdW1uIHNob3VsZCBub3QKKy0t IGVtaXQgYW4gQUxURVIgQ09MVU1OIC4uLiBTRVQgREVGQVVMVCBmb3IgdGhlIGluaGVyaXRlZCBn ZW5lcmF0ZWQKKy0tIGNvbHVtbjogdGhlIEdFTkVSQVRFRCBleHByZXNzaW9uIGNhcnJpZXMgZG93 biB0aHJvdWdoIGluaGVyaXRhbmNlLAorLS0gYW5kIFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQg cmVwbGF5IGFnYWluc3QgYSBnZW5lcmF0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhcl9nZW4g KAorICAgIGlkIGludCwKKyAgICBnICBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaWQgKiAyKSBT VE9SRUQKKyk7CitDUkVBVEUgVEFCTEUgY2hfZ2VuICgpIElOSEVSSVRTIChwYXJfZ2VuKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2hfZ2VuJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwZ3RibF9kZGxfdGVzdC5jaF9nZW4gKCkgSU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0LnBh cl9nZW4pOworKDEgcm93KQorCitEUk9QIFRBQkxFIHBhcl9nZW4gQ0FTQ0FERTsKK05PVElDRTog IGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgY2hfZ2VuCistLSBBIHVzZXItbmFtZWQgTk9UIE5VTEwg b24gYSBsb2NhbCBjb2x1bW4gaXMgZW1pdHRlZCBpbmxpbmUgYXMKKy0tICJDT05TVFJBSU5UIG5h bWUgTk9UIE5VTEwiIHNvIHRoZSBvcmlnaW5hbCBuYW1lIGlzIHByZXNlcnZlZC4gIEFuCistLSBh dXRvLW5hbWVkIE5PVCBOVUxMIG9uIGEgbG9jYWwgY29sdW1uIGlzIGVtaXR0ZWQgYXMgYSBwbGFp biBpbmxpbmUKKy0tICJOT1QgTlVMTCIgLSBQRyByZS1jcmVhdGVzIHRoZSBhdXRvLW5hbWVkIGNv bnN0cmFpbnQgd2hlbiBDUkVBVEUKKy0tIFRBQkxFIHJ1bnMsIHNvIHRoZSBjb25zdHJhaW50IGxv b3Agc2tpcHMgYm90aCBmb3JtcyB0byBhdm9pZCB0aGUKKy0tIHJlZHVuZGFudCAoYW5kIG9uIHRh YmxlLXJlbmFtZSBvciBzZXF1ZW5jZS1jb2xsaXNpb24sIGJyb2tlbikKKy0tIEFMVEVSIFRBQkxF IC4uLiBBREQgQ09OU1RSQUlOVCAuLi4gTk9UIE5VTEwgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxF IG5uX25hbWVkICgKKyAgICBhIGludCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMLAorICAgIGIg aW50IE5PVCBOVUxMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9uYW1l ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5uX25hbWVkIChhIGludGVnZXIgQ09OU1RS QUlOVCBteV9ubiBOT1QgTlVMTCwgYiBpbnRlZ2VyIE5PVCBOVUxMKTsKKygxIHJvdykKKworRFJP UCBUQUJMRSBubl9uYW1lZDsKKy0tIFJlbmFtaW5nIHRoZSB0YWJsZSBhZnRlciBhbiBJREVOVElU WSBOT1QgTlVMTCBjb2x1bW4gd2FzIGRlY2xhcmVkCistLSBsZWF2ZXMgdGhlIGF1dG8tbmFtZWQg Y29uc3RyYWludCBmcm96ZW4gYXQgdGhlIG9yaWdpbmFsIG5hbWUsIHdoaWNoCistLSBubyBsb25n ZXIgbWF0Y2hlcyB0aGUgcG9zdC1yZW5hbWUgIjx0YWJsZT5fPGNvbD5fbm90X251bGwiIHBhdHRl cm4uCistLSBUaGUgZW1pdHRlZCBEREwgbXVzdCBzdGlsbCByb3VuZC10cmlwOiB0aGUgY29uc3Ry YWludCBsb29wIG11c3Qgbm90CistLSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgYSBz ZWNvbmQgTk9UIE5VTEwsIHNpbmNlIENSRUFURSBUQUJMRQorLS0gd2l0aCB0aGUgaW5saW5lIElE RU5USVRZIGFscmVhZHkgY3JlYXRlcyBhbiBhdXRvLU5PVC1OVUxMIHVuZGVyIHRoZQorLS0gbmV3 IHRhYmxlIG5hbWUgYW5kIFBHIG9ubHkgcGVybWl0cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbi4K K0NSRUFURSBUQUJMRSBubl9yZW5hbWVkICgKKyAgICBhIGludCBHRU5FUkFURUQgQUxXQVlTIEFT IElERU5USVRZIE5PVCBOVUxMCispOworQUxURVIgVEFCTEUgbm5fcmVuYW1lZCBSRU5BTUUgVE8g bm5fcmVuYW1lZDI7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX3JlbmFtZWQy Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5ubl9yZW5hbWVkMiAoYSBpbnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURF TlRJVFkgKFNFUVVFTkNFIE5BTUUgcGd0YmxfZGRsX3Rlc3Qubm5fcmVuYW1lZF9hX3NlcSkgQ09O U1RSQUlOVCBubl9yZW5hbWVkX2Ffbm90X251bGwgTk9UIE5VTEwpOworKDEgcm93KQorCitEUk9Q IFRBQkxFIG5uX3JlbmFtZWQyOworLS0gTG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBvbiBhbiBp bmhlcml0ZWQgY29sdW1uLiAgVGhlIGNvbHVtbiBpdHNlbGYKKy0tIGlzIG9taXR0ZWQgZnJvbSB0 aGUgY2hpbGQncyBvd24gY29sdW1uIGxpc3QgKGF0dGlzbG9jYWw9ZmFsc2UpLCBzbyB0aGUKKy0t IHVzZXItbmFtZWQgTk9UIE5VTEwgaXMgZW1pdHRlZCBhcyBhIHRhYmxlLWxldmVsIENPTlNUUkFJ TlQgY2xhdXNlIGluCistLSB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkuICBUaGlzIHByZXNlcnZlcyB0 aGUgbmFtZSBhbmQgcHJldmVudHMgYSBjb2xsaXNpb24KKy0tIHdoZW4gdGhlIHBhcmVudCBsYXRl ciBwcm9wYWdhdGVzIGl0cyBvd24gTk9UIE5VTEwgdG8gdGhlIGNoaWxkLgorQ1JFQVRFIFRBQkxF IG5uX3BhciAoYSBpbnQpOworQ1JFQVRFIFRBQkxFIG5uX2NoIChiIGludCkgSU5IRVJJVFMgKG5u X3Bhcik7CitBTFRFUiBUQUJMRSBubl9jaCBBREQgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCBh OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9jaCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qubm5fY2ggKGIgaW50ZWdlciwg Q09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCBhKSBJTkhFUklUUyAocGd0YmxfZGRsX3Rlc3Qubm5f cGFyKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBubl9wYXIgQ0FTQ0FERTsKK05PVElDRTogIGRy b3AgY2FzY2FkZXMgdG8gdGFibGUgbm5fY2gKKy0tIFBhcnRpdGlvbiBjaGlsZCB3aGVyZSB0aGUg cGFyZW50J3MgZGVmYXVsdCB3YXMgZXhwbGljaXRseSBkcm9wcGVkLgorLS0gQWZ0ZXIgUEFSVElU SU9OIE9GIHRoZSBwYXJlbnQgZGVmYXVsdCBpcyByZS1hcHBsaWVkOyBEUk9QIERFRkFVTFQKKy0t IG11c3QgYmUgZW1pdHRlZCB0byByZXN0b3JlIHRoZSBkcm9wcGVkIHN0YXRlLgorQ1JFQVRFIFRB QkxFIGRyb3BfZGVmX3BhciAoYSBpbnQgREVGQVVMVCA5OSkgUEFSVElUSU9OIEJZIExJU1QgKGEp OworQ1JFQVRFIFRBQkxFIGRyb3BfZGVmX2NoaWxkIFBBUlRJVElPTiBPRiBkcm9wX2RlZl9wYXIg Rk9SIFZBTFVFUyBJTiAoMSk7CitBTFRFUiBUQUJMRSBPTkxZIGRyb3BfZGVmX2NoaWxkIEFMVEVS IENPTFVNTiBhIERST1AgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn ZHJvcF9kZWZfY2hpbGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LmRyb3BfZGVmX2NoaWxkIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5kcm9wX2RlZl9wYXIg Rk9SIFZBTFVFUyBJTiAoMSk7CisgQUxURVIgVEFCTEUgT05MWSBwZ3RibF9kZGxfdGVzdC5kcm9w X2RlZl9jaGlsZCBBTFRFUiBDT0xVTU4gYSBEUk9QIERFRkFVTFQ7CisoMiByb3dzKQorCitEUk9Q IFRBQkxFIGRyb3BfZGVmX3BhcjsKKy0tIE5hbWVkIE5PVCBOVUxMIG9uIGEgcGFydGl0aW9uIGNo aWxkIHRoYXQgd2FzIGF0dGFjaGVkIGZyb20gYSBwcmUtZXhpc3RpbmcKKy0tIHRhYmxlLiAgVGhl IG5hbWUgbXVzdCBiZSBwcmVzZXJ2ZWQgdmlhIHRoZSBQQVJUSVRJT04gT0YgY29sdW1uIHNwZWMg bGlzdAorLS0gc28gdGhlIGNoaWxkIGtlZXBzIGl0cyBsb2NhbCBuYW1lIHJhdGhlciB0aGFuIGlu aGVyaXRpbmcgdGhlIHBhcmVudCdzCistLSBhdXRvLWdlbmVyYXRlZCBuYW1lLgorQ1JFQVRFIFRB QkxFIG5uX3BhcnRfcGFyIChhIGludCBOT1QgTlVMTCkgUEFSVElUSU9OIEJZIExJU1QgKGEpOwor Q1JFQVRFIFRBQkxFIG5uX3BhcnRfY2ggKGEgaW50IENPTlNUUkFJTlQgbm5fcGFydF9jaF9ubiBO T1QgTlVMTCk7CitBTFRFUiBUQUJMRSBubl9wYXJ0X3BhciBBVFRBQ0ggUEFSVElUSU9OIG5uX3Bh cnRfY2ggRk9SIFZBTFVFUyBJTiAoMSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J25uX3BhcnRfY2gnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0Lm5uX3BhcnRfY2ggUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0Lm5uX3BhcnRfcGFy IChDT05TVFJBSU5UIG5uX3BhcnRfY2hfbm4gTk9UIE5VTEwgYSkgRk9SIFZBTFVFUyBJTiAoMSk7 CisoMSByb3cpCisKK0RST1AgVEFCTEUgbm5fcGFydF9wYXI7CistLSBOYW1lZCBOT1QgTlVMTCBp biBhbiBJTkhFUklUUyBjaGlsZCB3aGVyZSB0aGUgcGFyZW50IGFsc28gZ2V0cyBhIE5PVCBOVUxM CistLSBsYXRlcjogdGhlIGNoaWxkIG5hbWUgbXVzdCBzdXJ2aXZlIHZpYSB0aGUgaW5saW5lIENP TlNUUkFJTlQgY2xhdXNlIHNvIGl0CistLSBkb2VzIG5vdCBjb2xsaWRlIHdpdGggdGhlIHByb3Bh Z2F0ZWQgcGFyZW50IE5PVCBOVUxMLgorQ1JFQVRFIFRBQkxFIG5uX2luaF9wYXIgKGEgaW50KTsK K0NSRUFURSBUQUJMRSBubl9pbmhfY2ggKGIgaW50KSBJTkhFUklUUyAobm5faW5oX3Bhcik7CitB TFRFUiBUQUJMRSBubl9pbmhfY2ggQUREIENPTlNUUkFJTlQgbm5faW5oX2NoX25uIE5PVCBOVUxM IGE7CitBTFRFUiBUQUJMRSBubl9pbmhfcGFyIEFERCBDT05TVFJBSU5UIG5uX2luaF9wYXJfbm4g Tk9UIE5VTEwgYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5faW5oX2NoJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ubl9pbmhfY2ggKGIgaW50ZWdlciwgQ09OU1RSQUlO VCBubl9pbmhfY2hfbm4gTk9UIE5VTEwgYSkgSU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0Lm5uX2lu aF9wYXIpOworKDEgcm93KQorCitEUk9QIFRBQkxFIG5uX2luaF9wYXIgQ0FTQ0FERTsKK05PVElD RTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgbm5faW5oX2NoCistLSBJbnZhbGlkIGluZGV4IChs ZWZ0IGJ5IGEgZmFpbGVkIENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkpIG11c3QgYmUgc2tpcHBl ZC4KK0NSRUFURSBUQUJMRSBpbnZfaWR4ICh4IGludCk7CitJTlNFUlQgSU5UTyBpbnZfaWR4IFZB TFVFUyAoMSksICgxKTsKK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGludl9pZHhf dWlkeCBPTiBpbnZfaWR4ICh4KTsKK0VSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5k ZXggImludl9pZHhfdWlkeCIKK0RFVEFJTDogIEtleSAoeCk9KDEpIGlzIGR1cGxpY2F0ZWQuCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2ludl9pZHgnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UpOworICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lmludl9pZHggKHggaW50ZWdlcik7CisoMSBy b3cpCisKK0RST1AgVEFCTEUgaW52X2lkeDsKKy0tIENMVVNURVIgT046IGVtaXR0ZWQgYWZ0ZXIg dGhlIGluZGV4IGlzIGNyZWF0ZWQuCitDUkVBVEUgVEFCTEUgY2x1c3Rlcl90YmwgKGlkIGludCwg dmFsIHRleHQpOworQ1JFQVRFIElOREVYIGNsdXN0ZXJfdGJsX2lkIE9OIGNsdXN0ZXJfdGJsIChp ZCk7CitDTFVTVEVSIGNsdXN0ZXJfdGJsIFVTSU5HIGNsdXN0ZXJfdGJsX2lkOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjbHVzdGVyX3RibCc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY2x1c3Rlcl90YmwgKGlkIGludGVnZXIsIHZhbCB0ZXh0 KTsKKyBDUkVBVEUgSU5ERVggY2x1c3Rlcl90YmxfaWQgT04gcGd0YmxfZGRsX3Rlc3QuY2x1c3Rl cl90YmwgVVNJTkcgYnRyZWUgKGlkKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jbHVz dGVyX3RibCBDTFVTVEVSIE9OIGNsdXN0ZXJfdGJsX2lkOworKDMgcm93cykKKworRFJPUCBUQUJM RSBjbHVzdGVyX3RibDsKKy0tIERpc2FibGVkIHJ1bGU6IERJU0FCTEUgUlVMRSBtdXN0IGJlIGVt aXR0ZWQgYWZ0ZXIgQ1JFQVRFIFJVTEUuCitDUkVBVEUgVEFCTEUgZGlzYWJsZWRfcnVsZV90Ymwg KGlkIGludCk7CitDUkVBVEUgUlVMRSBkcl9ydWxlIEFTIE9OIElOU0VSVCBUTyBkaXNhYmxlZF9y dWxlX3RibCBETyBOT1RISU5HOworQUxURVIgVEFCTEUgZGlzYWJsZWRfcnVsZV90YmwgRElTQUJM RSBSVUxFIGRyX3J1bGU7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Rpc2FibGVk X3J1bGVfdGJsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5kaXNhYmxlZF9ydWxlX3RibCAo aWQgaW50ZWdlcik7CisgQ1JFQVRFIFJVTEUgZHJfcnVsZSBBUyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICBPTiBJTlNFUlQgVE8gcGd0YmxfZGRsX3Rl c3QuZGlzYWJsZWRfcnVsZV90YmwgRE8gTk9USElORzsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxf dGVzdC5kaXNhYmxlZF9ydWxlX3RibCBESVNBQkxFIFJVTEUgZHJfcnVsZTsKKygzIHJvd3MpCisK K0RST1AgVEFCTEUgZGlzYWJsZWRfcnVsZV90Ymw7CistLSBJbmRleCBzdGF0aXN0aWNzIHRhcmdl dCBvbiBhbiBleHByZXNzaW9uIGluZGV4IGNvbHVtbi4KK0NSRUFURSBUQUJMRSBpZHhfc3RhdF90 YmwgKGMxIGludCk7CitDUkVBVEUgSU5ERVggaWR4X3N0YXRfaWR4IE9OIGlkeF9zdGF0X3RibCAo KGMxICsgMSkpOworQUxURVIgSU5ERVggaWR4X3N0YXRfaWR4IEFMVEVSIENPTFVNTiAxIFNFVCBT VEFUSVNUSUNTIDQwMDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4X3N0YXRf dGJsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LmlkeF9zdGF0X3RibCAoYzEgaW50ZWdlcik7CisgQ1JFQVRFIElOREVYIGlkeF9zdGF0 X2lkeCBPTiBwZ3RibF9kZGxfdGVzdC5pZHhfc3RhdF90YmwgVVNJTkcgYnRyZWUgKCgoYzEgKyAx KSkpOworIEFMVEVSIElOREVYIHBndGJsX2RkbF90ZXN0LmlkeF9zdGF0X2lkeCBBTFRFUiBDT0xV TU4gMSBTRVQgU1RBVElTVElDUyA0MDA7CisoMyByb3dzKQorCitEUk9QIFRBQkxFIGlkeF9zdGF0 X3RibDsKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBkcm9wIHRoZSBzY2hlbWEgcHJl Zml4IGZyb20gREVGQVVMVAorLS0gZXhwcmVzc2lvbnMgYW5kIGlubGluZSBDSEVDSyBib2RpZXMg dGhhdCByZWZlcmVuY2Ugc2FtZS1zY2hlbWEKKy0tIG9iamVjdHMgKHNlcXVlbmNlIHZpYSBuZXh0 dmFsLCBmdW5jdGlvbiB2aWEgZGlyZWN0IGNhbGwpLiAgVGhpcworLS0gcmVsaWVzIG9uIHRoZSBk ZXBhcnNlciByZXNwZWN0aW5nIHRoZSBuYXJyb3dlZCBzZWFyY2hfcGF0aCByYXRoZXIKKy0tIHRo YW4gb24gc3Vic3RyaW5nIHN0cmlwcGluZy4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3hyZWY7 CitDUkVBVEUgU0VRVUVOQ0UgcGd0YmxfZGRsX3hyZWYubXlzZXE7CitDUkVBVEUgRlVOQ1RJT04g cGd0YmxfZGRsX3hyZWYuZihpbnQpIFJFVFVSTlMgaW50IExBTkdVQUdFIHNxbCBJTU1VVEFCTEUK KyAgICBBUyAnU0VMRUNUICQxJzsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfeHJlZi50ICgKKyAg ICBpZCAgaW50IERFRkFVTFQgbmV4dHZhbCgncGd0YmxfZGRsX3hyZWYubXlzZXEnKSwKKyAgICB2 YWwgaW50LAorICAgIENPTlNUUkFJTlQgY2hrIENIRUNLIChwZ3RibF9kZGxfeHJlZi5mKHZhbCkg PiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3hyZWYu dCc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZh bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4g ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSB0IChpZCBpbnRlZ2VyIERFRkFVTFQgbmV4dHZh bCgnbXlzZXEnOjpyZWdjbGFzcyksIHZhbCBpbnRlZ2VyLCBDT05TVFJBSU5UIGNoayBDSEVDSyAo KGYodmFsKSA+IDApKSk7CisoMSByb3cpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF94cmVmIENB U0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIDMgb3RoZXIgb2JqZWN0cworREVUQUlM OiAgZHJvcCBjYXNjYWRlcyB0byBzZXF1ZW5jZSBwZ3RibF9kZGxfeHJlZi5teXNlcQorZHJvcCBj YXNjYWRlcyB0byBmdW5jdGlvbiBwZ3RibF9kZGxfeHJlZi5mKGludGVnZXIpCitkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIHBndGJsX2RkbF94cmVmLnQKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ug bXVzdCBOT1QgY29ycnVwdCBzdHJpbmcgbGl0ZXJhbHMgd2hvc2UKKy0tIGNvbnRlbnRzIGhhcHBl biB0byBjb250YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRvdC4gIFN0cmluZwor LS0gbGl0ZXJhbCB0ZXh0IGlzIG91dHB1dCB2ZXJiYXRpbSBieSB0aGUgZGVwYXJzZXIgYW5kIGlz IHVuYWZmZWN0ZWQgYnkKKy0tIHNlYXJjaF9wYXRoIG5hcnJvd2luZy4KK0NSRUFURSBTQ0hFTUEg cGd0YmxfZGRsX3N0cjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfc3RyLnAgKGlkIGludCwgbm90 ZSB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxf c3RyLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfc3RyLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsg Q0hFQ0sgKG5vdGUgPD4gJ3BndGJsX2RkbF9zdHIuc2VjcmV0JykpCisgICAgRk9SIFZBTFVFUyBG Uk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0Ymxf ZGRsX3N0ci5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93 bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFs aWZpZWQgPT4gZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBjIFBBUlRJVElPTiBPRiBwIEZPUiBWQUxV RVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIgVEFCTEUgcGMgQUREIENPTlNUUkFJTlQgY2hr IENIRUNLICgobm90ZSA8PiAncGd0YmxfZGRsX3N0ci5zZWNyZXQnOjp0ZXh0KSk7CisoMiByb3dz KQorCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfc3RyIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIHBndGJsX2RkbF9zdHIucAorLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxz ZSBtdXN0IE5PVCBjb3JydXB0IGRvdWJsZS1xdW90ZWQgaWRlbnRpZmllcnMKKy0tIHdob3NlIGNv bnRlbnRzIGhhcHBlbiB0byBjb250YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRv dAorLS0gKGZvciBleGFtcGxlIGEgY29sdW1uIGxpdGVyYWxseSBuYW1lZCAiPHNjaGVtYT4ud2Vp cmQiIGluc2lkZSB0aGF0CistLSBzY2hlbWEpLiAgVGhlIG1lY2hhbmlzbSBpcyBwdXJlbHkgc2Vh cmNoX3BhdGggbmFycm93aW5nOiB0aGUgZGVwYXJzZXIKKy0tIG91dHB1dHMgYXR0cmlidXRlIG5h bWVzIHZlcmJhdGltIGZyb20gcGdfYXR0cmlidXRlLCBzbyB0aGUgcXVvdGVkCistLSBpZGVudGlm aWVyIGNvbnRlbnQgaXMgbmV2ZXIgZXhhbWluZWQgZm9yIHNjaGVtYSBwcmVmaXhlcy4gIFRoaXMg aG9sZHMKKy0tIGV2ZW4gd2hlbiB0aGUgc2NoZW1hIG5hbWUgaXMgYSBzaW5nbGUgbGV0dGVyLgor Q1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcWlkOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xaWQu cCAoaWQgaW50LCAicGd0YmxfZGRsX3FpZC53ZWlyZCIgaW50KQorICAgIFBBUlRJVElPTiBCWSBS QU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xaWQucGMgUEFSVElUSU9OIE9GIHBn dGJsX2RkbF9xaWQucAorICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAoInBndGJsX2RkbF9xaWQu d2VpcmQiID4gMCkpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3FpZC5wYyc6OnJlZ2NsYXNzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNjaGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGMgUEFSVElUSU9OIE9GIHAg Rk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwYyBBREQgQ09OU1RS QUlOVCBjaGsgQ0hFQ0sgKCgicGd0YmxfZGRsX3FpZC53ZWlyZCIgPiAwKSk7CisoMiByb3dzKQor CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcWlkIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIHBndGJsX2RkbF9xaWQucAorLS0gU2FtZSB3aXRoIGEgc2hvcnQgKHNpbmds ZS1sZXR0ZXIpIHNjaGVtYSBuYW1lIHRvIGNvbmZpcm0gdGhlcmUgaXMgbm8KKy0tIG1pbmltdW0t bGVuZ3RoIGFzc3VtcHRpb24gaW4gdGhlIHN0cmlwcGluZyBwYXRoLgorQ1JFQVRFIFNDSEVNQSBw Z3RibF9kZGxfcTE7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3ExLnAgKGlkIGludCwgInBndGJs X2RkbF9xMS53ZWlyZCIgaW50KQorICAgIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF9xMS5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3ExLnAKKyAgICAo Q09OU1RSQUlOVCBjaGsgQ0hFQ0sgKCJwZ3RibF9kZGxfcTEud2VpcmQiID4gMCkpCisgICAgRk9S IFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGd0YmxfZGRsX3ExLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2No ZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgcGMgUEFSVElUSU9OIE9GIHAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAo MTAwKTsKKyBBTFRFUiBUQUJMRSBwYyBBREQgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKCgicGd0Ymxf ZGRsX3ExLndlaXJkIiA+IDApKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9x MSBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfcTEu cAorLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSB3aGVuIHRoZSBiYXNlIHNjaGVtYSBuYW1lIGl0 c2VsZiByZXF1aXJlcworLS0gcXVvdGluZyAoaXRzIHByZWZpeCBzdGFydHMgd2l0aCAiKS4gIEJv dGggZm9ybXMgb2YgdGhlIHByZWZpeCAtCistLSBiYXJlLWxvd2VyY2FzZSBhbmQgcXVvdGVkIC0g bXVzdCBiZSBzdHJpcHBlZCBmcm9tIG91dGVyCistLSBBTFRFUiBUQUJMRSAvIE9OIC8gQ1JFQVRF IElOREVYIHByZWZpeGVzLCB3aGlsZSBpbm5lciBxdW90ZWQKKy0tIGlkZW50aWZpZXJzIHRoYXQg aGFwcGVuIHRvIGJlZ2luIHRoZSBzYW1lIHdheSBtdXN0IGJlIHByZXNlcnZlZC4KK0NSRUFURSBT Q0hFTUEgIlBnVGJsLURkbC1RIjsKK0NSRUFURSBUQUJMRSAiUGdUYmwtRGRsLVEiLiJUIiAoaWQg aW50LCB2YWwgaW50LAorICAgIENPTlNUUkFJTlQgY2hrIENIRUNLICh2YWwgPiAwKSk7CitDUkVB VEUgSU5ERVggIlRfdmFsX2lkeCIgT04gIlBnVGJsLURkbC1RIi4iVCIgKHZhbCk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJyJQZ1RibC1EZGwtUSIuIlQiJzo6cmVnY2xhc3MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFICJU IiAoaWQgaW50ZWdlciwgdmFsIGludGVnZXIsIENPTlNUUkFJTlQgY2hrIENIRUNLICgodmFsID4g MCkpKTsKKyBDUkVBVEUgSU5ERVggIlRfdmFsX2lkeCIgT04gIlQiIFVTSU5HIGJ0cmVlICh2YWwp OworKDIgcm93cykKKworRFJPUCBTQ0hFTUEgIlBnVGJsLURkbC1RIiBDQVNDQURFOworTk9USUNF OiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSAiUGdUYmwtRGRsLVEiLiJUIgorLS0gRXJyb3I6IG5v dCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZS4KK0NSRUFURSBWSUVXIHYgQVMgU0VM RUNUIDEgQVMgeDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndic6OnJlZ2NsYXNz KTsKK0VSUk9SOiAgInYiIGlzIG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZQor Q1JFQVRFIFNFUVVFTkNFIHM7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3MnOjpy ZWdjbGFzcyk7CitFUlJPUjogICJzIiBpcyBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQg dGFibGUKKy0tIE5VTEwgYXJndW1lbnQgcmV0dXJucyBubyByb3dzLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKE5VTEwpOworIHBnX2dldF90YWJsZV9kZGwgCistLS0tLS0tLS0tLS0t LS0tLS0KKygwIHJvd3MpCisKKy0tIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdmFsaWRh dGlvbjogaWYgdGhlIHJlZmVyZW5jZWQgaW5kZXgKKy0tIHdvdWxkIG5vdCBiZSBlbWl0dGVkIChi ZWNhdXNlIGl0cyBzb3VyY2Uga2luZCBpcyBzdXBwcmVzc2VkKSBidXQKKy0tIHJlcGxpY2FfaWRl bnRpdHkgaXRzZWxmIHdvdWxkIGJlLCB0aGUgZnVuY3Rpb24gcmFpc2VzIGFuIGVycm9yIHNvCist LSB0aGUgZW1pdHRlZCBEREwgbmV2ZXIgZGFuZ2xlcy4gIEV4ZXJjaXNlIGFsbCB0aHJlZSBjb25z dHJhaW50LWJhY2tlZAorLS0gZm9ybXMgKFBLLCBVTklRVUUsIEVYQ0xVU0lPTikgYW5kIGEgYmFy ZSBDUkVBVEUgVU5JUVVFIElOREVYLCBpbgorLS0gYm90aCB0aGUgZXhjZXB0LWxpc3QgYW5kIG9u bHktbGlzdCBzaGFwZXMuCistLQorLS0gUEstYmFja2VkOiBleGNlcHRfa2luZHM9cHJpbWFyeV9r ZXkgd2l0aG91dCBleGNlcHRfa2luZHM9cmVwbGljYV9pZGVudGl0eS4KK0NSRUFURSBUQUJMRSBy aV9wa19leGNsIChhIGludCBQUklNQVJZIEtFWSk7CitBTFRFUiBUQUJMRSByaV9wa19leGNsIFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfcGtfZXhjbF9wa2V5OworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdyaV9wa19leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl LCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3ByaW1hcnlfa2V5J10pOworRVJST1I6ICBSRVBMSUNB IElERU5USVRZIGZvciB0YWJsZSAicmlfcGtfZXhjbCIgcmVxdWlyZXMga2luZCAicHJpbWFyeV9r ZXkiIHRvIGJlIGVtaXR0ZWQKK0RFVEFJTDogIFRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkg VVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgInByaW1hcnlf a2V5IiBraW5kLCB3aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIuCitISU5UOiAgRWl0 aGVyIGFkZCAicHJpbWFyeV9rZXkiIHRvIHRoZSBmaWx0ZXIgb3IgcmVtb3ZlICJyZXBsaWNhX2lk ZW50aXR5IiBmcm9tIGl0LgorLS0gU2FtZSBjYWxsIGJ1dCBhbHNvIGV4Y2x1ZGluZyByZXBsaWNh X2lkZW50aXR5IHN1Y2NlZWRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9w a19leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlb J3ByaW1hcnlfa2V5JywncmVwbGljYV9pZGVudGl0eSddKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9wa19leGNsIChhIGludGVnZXIgTk9UIE5VTEwpOwor KDEgcm93KQorCitEUk9QIFRBQkxFIHJpX3BrX2V4Y2w7CistLSBVTklRVUUtY29uc3RyYWludC1i YWNrZWQgcmVwbGljYSBpZGVudGl0eSBpbmRleC4KK0NSRUFURSBUQUJMRSByaV91bmlxX2V4Y2wg KGEgaW50IE5PVCBOVUxMIFVOSVFVRSwgYiBpbnQpOworQUxURVIgVEFCTEUgcmlfdW5pcV9leGNs IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfdW5pcV9leGNsX2Ffa2V5OworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV91bmlxX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndW5pcXVlJ10pOworRVJST1I6ICBSRVBM SUNBIElERU5USVRZIGZvciB0YWJsZSAicmlfdW5pcV9leGNsIiByZXF1aXJlcyBraW5kICJ1bmlx dWUiIHRvIGJlIGVtaXR0ZWQKK0RFVEFJTDogIFRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkg VVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgInVuaXF1ZSIg a2luZCwgd2hpY2ggaXMgbm90IGluIHRoZSBhY3RpdmUgZmlsdGVyLgorSElOVDogIEVpdGhlciBh ZGQgInVuaXF1ZSIgdG8gdGhlIGZpbHRlciBvciByZW1vdmUgInJlcGxpY2FfaWRlbnRpdHkiIGZy b20gaXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3VuaXFfZXhjbCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnLCdy ZXBsaWNhX2lkZW50aXR5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfdW5pcV9leGNsIChhIGludGVnZXIg Tk9UIE5VTEwsIGIgaW50ZWdlcik7CisoMSByb3cpCisKK0RST1AgVEFCTEUgcmlfdW5pcV9leGNs OworLS0gQmFyZSBDUkVBVEUgVU5JUVVFIElOREVYIChubyBiYWNraW5nIGNvbnN0cmFpbnQpIHVz ZWQgYXMgUkVQTElDQQorLS0gSURFTlRJVFk6IHRoZSBpbmRleCBpcyBlbWl0dGVkIGJ5IHRoZSAi aW5kZXgiIGtpbmQsIHNvIGV4Y2x1ZGluZworLS0gImluZGV4IiB3aXRob3V0IGFsc28gZXhjbHVk aW5nICJyZXBsaWNhX2lkZW50aXR5IiBtdXN0IGVycm9yLgorQ1JFQVRFIFRBQkxFIHJpX2lkeF9l eGNsIChhIGludCBOT1QgTlVMTCwgYiBpbnQpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhf ZXhjbF9hX3VuaXEgT04gcmlfaWR4X2V4Y2wgKGEpOworQUxURVIgVEFCTEUgcmlfaWR4X2V4Y2wg UkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9pZHhfZXhjbF9hX3VuaXE7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeF9leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2luZGV4J10pOworRVJST1I6ICBSRVBMSUNB IElERU5USVRZIGZvciB0YWJsZSAicmlfaWR4X2V4Y2wiIHJlcXVpcmVzIGtpbmQgImluZGV4IiB0 byBiZSBlbWl0dGVkCitERVRBSUw6ICBUaGUgdGFibGUncyBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHJlZmVyZW5jZXMgYW4gaW5kZXggcHJvZHVjZWQgYnkgdGhlICJpbmRleCIga2luZCwg d2hpY2ggaXMgbm90IGluIHRoZSBhY3RpdmUgZmlsdGVyLgorSElOVDogIEVpdGhlciBhZGQgImlu ZGV4IiB0byB0aGUgZmlsdGVyIG9yIHJlbW92ZSAicmVwbGljYV9pZGVudGl0eSIgZnJvbSBpdC4K K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4X2V4Y2wnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnLCdyZXBsaWNhX2lk ZW50aXR5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeF9leGNsIChhIGludGVnZXIgTk9UIE5VTEwsIGIg aW50ZWdlcik7CisoMSByb3cpCisKK0RST1AgVEFCTEUgcmlfaWR4X2V4Y2w7CistLSBJbmNsdWRl LXNpZGUgYW5hbG9nOiBvbmx5X2tpbmRzPXJlcGxpY2FfaWRlbnRpdHkgbXVzdCBpbmNsdWRlIHRo ZSBraW5kCistLSB0aGF0IGVtaXRzIHRoZSBpbmRleCwgb3IgdGhlIGZ1bmN0aW9uIGVycm9ycy4K K0NSRUFURSBUQUJMRSByaV9vbmx5IChhIGludCBOT1QgTlVMTCBVTklRVUUsIGIgaW50KTsKK0FM VEVSIFRBQkxFIHJpX29ubHkgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9vbmx5X2Ff a2V5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9vbmx5Jzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydyZXBsaWNhX2lkZW50aXR5J10p OworRVJST1I6ICBSRVBMSUNBIElERU5USVRZIGZvciB0YWJsZSAicmlfb25seSIgcmVxdWlyZXMg a2luZCAidW5pcXVlIiB0byBiZSBlbWl0dGVkCitERVRBSUw6ICBUaGUgdGFibGUncyBSRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYIHJlZmVyZW5jZXMgYW4gaW5kZXggcHJvZHVjZWQgYnkgdGhl ICJ1bmlxdWUiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4KK0hJTlQ6 ICBFaXRoZXIgYWRkICJ1bmlxdWUiIHRvIHRoZSBmaWx0ZXIgb3IgcmVtb3ZlICJyZXBsaWNhX2lk ZW50aXR5IiBmcm9tIGl0LgorLS0gSW5jbHVkaW5nIGJvdGgga2luZHMgc3VjY2VlZHMuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX29ubHknOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZScsJ3JlcGxpY2FfaWRlbnRpdHknXSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRF UiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9vbmx5IEFERCBDT05TVFJBSU5UIHJpX29ubHlfYV9r ZXkgVU5JUVVFIChhKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9vbmx5IFJFUExJ Q0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfb25seV9hX2tleTsKKygyIHJvd3MpCisKK0RST1Ag VEFCTEUgcmlfb25seTsKKy0tIFBlci1raW5kIG9ubHlfa2luZHMgLyBleGNlcHRfa2luZHMgY292 ZXJhZ2UuICBGb3IgZWFjaCBraW5kIGluIHRoZSB2b2NhYnVsYXJ5LAorLS0gdmVyaWZ5IHRoYXQg b25seV9raW5kcz1LIGVtaXRzIGp1c3QgdGhhdCBraW5kJ3Mgb3V0cHV0IGFuZCB0aGF0IGV4Y2Vw dF9raW5kcz1LCistLSBvbWl0cyBqdXN0IHRoYXQga2luZCdzIG91dHB1dC4gIEtpbmRzIHdpdGgg bm8gZml4dHVyZSBhYm92ZSAodHJpZ2dlciwKKy0tIHBvbGljeSkgYXJlIHN0aWxsIHJlY29nbml6 ZWQgYnV0IGN1cnJlbnRseSBlbWl0IG5vdGhpbmc7IG9ubHlfa2luZHM9SworLS0gcmV0dXJucyB6 ZXJvIHJvd3MgZm9yIHRoZW0uICBGaXh0dXJlcyB1c2VkOgorLS0gICBpZHhkOiBQSyArIHR3byBz ZWNvbmRhcnkgQ1JFQVRFIElOREVYCistLSAgIGNvbnM6IFBLICsgVU5JUVVFICsgQ0hFQ0sgKyBG SyAoY29uc3RyYWludC1iYWNrZWQpCistLSAgIHJ0OiAgIENSRUFURSBSVUxFCistLSAgIHN0eDog IENSRUFURSBTVEFUSVNUSUNTCistLSAgIHJsczogIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VD VVJJVFkKKy0tICAgcmlfZnVsbDogUkVQTElDQSBJREVOVElUWSBGVUxMIChubyBzb3VyY2Uta2lu ZCBkZXBlbmRlbmN5KQorQ1JFQVRFIFRBQkxFIGV4Y2xfZml4IChybmcgaW50NHJhbmdlLAorICAg IEVYQ0xVREUgVVNJTkcgZ2lzdCAocm5nIFdJVEggJiYpKTsKKy0tIG9ubHlfa2luZHM9SzogZW1p dCBvbmx5IGtpbmQgSydzIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlb J2luZGV4J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIHBndGJsX2RkbF90ZXN0 LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0 aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAx MDApOworKDIgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tl eSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBU QUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklNQVJZ IEtFWSAoaWQpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Nv bnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3VuaXF1 ZSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJs X2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19iX2tleSBVTklRVUUgKGIpOworKDEg cm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2V4Y2xfZml4Jzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydleGNsdXNpb24nXSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5leGNsX2ZpeCBBREQgQ09OU1RSQUlOVCBleGNsX2ZpeF9ybmdfZXhjbCBFWENM VURFIFVTSU5HIGdpc3QgKHJuZyBXSVRIICYmKTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdydCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5k cyA9PiBBUlJBWVsncnVsZSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgT04gSU5TRVJUIFRPIHBn dGJsX2RkbF90ZXN0LnJ0IERPICBJTlNFUlQgSU5UTyBwZ3RibF9kZGxfdGVzdC5ydF9sb2cgKGlk KSsKKyAgIFZBTFVFUyAobmV3LmlkKTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4g QVJSQVlbJ3N0YXRpc3RpY3MnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBTVEFUSVNUSUNTIHBndGJsX2Rk bF90ZXN0LnN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHBndGJsX2RkbF90ZXN0LnN0 eDsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3JscyddKTsKKyAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VS SVRZOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBGT1JDRSBST1cgTEVWRUwgU0VD VVJJVFk7CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1 bGwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3JlcGxp Y2FfaWRlbnRpdHknXSk7CisgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9m dWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKKygxIHJvdykKKworLS0gdHJpZ2dlciAvIHBvbGlj eSBhcmUgbm90IHlldCBpbXBsZW1lbnRlZDsgdW5jb21tZW50IHdoZW4KKy0tIHBnX2dldF90cmln Z2VyX2RkbCAvIHBnX2dldF9wb2xpY3lfZGRsIGhlbHBlcnMgbGFuZC4KKy0tIFNFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9u bHlfa2luZHMgPT4gQVJSQVlbJ3RyaWdnZXInXSk7CistLSBTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+ IEFSUkFZWydwb2xpY3knXSk7CistLSBleGNlcHRfa2luZHM9SzogZW1pdCBldmVyeXRoaW5nIGV4 Y2VwdCBraW5kIEsncyBzdGF0ZW1lbnRzLiAgUEsvVU5JUVVFLworLS0gSU5ERVggYXJlIGV4ZXJj aXNlZCBvbiB0YWJsZXMgd2l0aG91dCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYCistLSBz byB0aGUgdmFsaWRhdGlvbiBkb2VzIG5vdCB0cmlwLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4g QVJSQVlbJ3ByaW1hcnlfa2V5J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5p ZHhkIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQpOworIENSRUFURSBJTkRFWCBpZHhk X2xvd2VyIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsK KyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcg YnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAxMDApOworKDMgcm93cykKKworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRf a2luZHMgPT4gQVJSQVlbJ3VuaXF1ZSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlciwgQ09OU1RSQUlOVCBjb25z X2FfY2hlY2sgQ0hFQ0sgKChhID4gMCkpKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5j b25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19ma2V5IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VT IHBndGJsX2RkbF90ZXN0LnJlZmQoaWQpIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEOwor KDIgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2NoZWNrJ10pOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIgaW50ZWdlciwg YyBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJB SU5UIGNvbnNfYl9rZXkgVU5JUVVFIChiKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5j b25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19ma2V5IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VT IHBndGJsX2RkbF90ZXN0LnJlZmQoaWQpIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEOwor KDMgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdleGNsX2ZpeCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydleGNsdXNpb24n XSk7CisgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmV4Y2xfZml4IChybmcgaW50NHJhbmdl KTsKKygxIHJvdykKKworLS0gdHJpZ2dlciAvIHBvbGljeSBhcmUgbm90IHlldCBpbXBsZW1lbnRl ZDsgdW5jb21tZW50IHdoZW4KKy0tIHBnX2dldF90cmlnZ2VyX2RkbCAvIHBnX2dldF9wb2xpY3lf ZGRsIGhlbHBlcnMgbGFuZC4KKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFz aWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsndHJp Z2dlciddKTsKKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdj bGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncG9saWN5J10pOwor LS0gZXhjZXB0X2tpbmRzPXRhYmxlIHN1cHByZXNzZXMgdGhlIENSRUFURSBUQUJMRSArIE9XTkVS ICsgY2hpbGQtZGVmYXVsdAorLS0gU0VUIERFRkFVTFQgKyBhdHRvcHRpb25zIHBhc3NlcywgbGVh dmluZyBvbmx5IHRoZSBzdWItb2JqZWN0IHBhc3Nlcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+ IEFSUkFZWyd0YWJsZSddKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBwZ3RibF9k ZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChsb3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlk eGRfcGFydGlhbCBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUg KGlkID4gMTAwKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJB SU5UIGlkeGRfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDMgcm93cykKKworLS0gTXVsdGkta2lu ZCBjb21wb3NpdGlvbnMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3RhYmxlJywnaW5k ZXgnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGludGVnZXIg Tk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gcGd0Ymxf ZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBp ZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJF IChpZCA+IDEwMCk7CisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3By aW1hcnlfa2V5JywnZm9yZWlnbl9rZXknXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtFWSAoYykgUkVGRVJF TkNFUyBwZ3RibF9kZGxfdGVzdC5yZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJF RDsKKygxIHJvdykKKworLS0gRHVwbGljYXRlIGVudHJpZXMgaW4gdGhlIGxpc3QgYXJlIHNpbGVu dGx5IGRlLWR1cGxpY2F0ZWQgYnkgdGhlCistLSBCaXRtYXBzZXQuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2lu ZHMgPT4gQVJSQVlbJ2luZGV4JywnaW5kZXgnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIElOREVYIGlkeGRfbG93 ZXIgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENS RUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJl ZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIGV4Y2xfZml4 OworLS0gS2luZC1maWx0ZXIgdGVzdHMgb24gcGFydGl0aW9uZWQgdGFibGVzIHdpdGggaW5kZXhl cy4KKy0tCistLSBvbmx5X2tpbmRzPWluZGV4IG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IG9ubHkg dGhlIHJvb3QgQ1JFQVRFIElOREVYIGlzCistLSBlbWl0dGVkOyBubyBDUkVBVEUgVEFCTEUsIG5v IHBhcnRpdGlvbiBjaGlsZHJlbiAoS0lORF9QQVJUSVRJT04gYWJzZW50KS4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX21peGVkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlfa2luZHMgPT4gQVJSQVlb J2luZGV4J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBJTkRFWCBwYXJ0ZWRfbWl4ZWRfaWQgT04gcGd0YmxfZGRsX3Rlc3QucGFydGVk X21peGVkIFVTSU5HIGJ0cmVlIChpZCk7CisoMSByb3cpCisKKy0tIGV4Y2VwdF9raW5kcz1pbmRl eCBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiBDUkVBVEUgVEFCTEUgZm9yIHRoZSBwYXJlbnQKKy0t IGFuZCBhbGwgY2hpbGRyZW4gYXJlIGVtaXR0ZWQ7IG5vIGluZGV4IHN0YXRlbWVudHMuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9taXhlZCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRfa2luZHMg PT4gQVJSQVlbJ2luZGV4J10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfbWl4ZWQgKGlkIGlu dGVnZXIsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKKyBDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX21peGVkX2EgUEFSVElUSU9OIE9GIHBndGJsX2Rk bF90ZXN0LnBhcnRlZF9taXhlZCBGT1IgVkFMVUVTIElOICgnYScpOworKDIgcm93cykKKworLS0g b25seV9raW5kcz1wcmltYXJ5X2tleSBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiBvbmx5IHRoZSBB TFRFUiBUQUJMRSBBREQKKy0tIENPTlNUUkFJTlQgUEsgb24gdGhlIHBhcmVudDsgdGhlIGNoaWxk J3MgaW5oZXJpdGVkIFBLIChjb25pc2xvY2FsPWZhbHNlKQorLS0gaXMgc2tpcHBlZDsgbm8gQ1JF QVRFIFRBQkxFLCBubyBwYXJ0aXRpb24gY2hpbGRyZW4uCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3BhcnRlZF9wayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleSdd KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfcGsgQUREIENPTlNUUkFJTlQgcGFydGVkX3BrX3BrZXkgUFJJTUFSWSBLRVkgKGlkLCByZWdp b24pOworKDEgcm93KQorCistLSBvbmx5X2tpbmRzPUsgb24gYSB0YWJsZSB0aGF0IGRvZXMgbm90 IGhhdmUgYW55IEsgb2YgdGhhdCBraW5kIGlzIGEgdmFsaWQKKy0tIGZpbHRlciBhbmQgcmV0dXJu cyB6ZXJvIHJvd3MuICBUZXN0ZWQgcHJldmlvdXNseSB3aXRoIGZvcmVpZ25fa2V5CistLSBvbiAn cmVmZCc7IGhlcmUgYWxzbyBydWxlLCBzdGF0aXN0aWNzLCBybHMsIHJlcGxpY2FfaWRlbnRpdHks IGFuZAorLS0gZXhjbHVzaW9uIG9uICdiYXNpYycgKHdoaWNoIGhhcyBvbmx5IFBLICsgY29sdW1u cykuCitTRUxFQ1QgY291bnQoKikgQVMgcnVsZV9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlb J3J1bGUnXSk7CisgcnVsZV9yb3dzIAorLS0tLS0tLS0tLS0KKyAgICAgICAgIDAKKygxIHJvdykK KworU0VMRUNUIGNvdW50KCopIEFTIHN0YXRzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsn c3RhdGlzdGljcyddKTsKKyBzdGF0c19yb3dzIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgMAor KDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgQVMgcmxzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsncmxzJ10pOworIHJsc19yb3dzIAorLS0tLS0tLS0tLQorICAgICAgICAwCisoMSByb3cp CisKK1NFTEVDVCBjb3VudCgqKSBBUyByaV9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn YmFzaWMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3Jl cGxpY2FfaWRlbnRpdHknXSk7Cisgcmlfcm93cyAKKy0tLS0tLS0tLQorICAgICAgIDAKKygxIHJv dykKKworU0VMRUNUIGNvdW50KCopIEFTIGV4Y2xfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZ WydleGNsdXNpb24nXSk7CisgZXhjbF9yb3dzIAorLS0tLS0tLS0tLS0KKyAgICAgICAgIDAKKygx IHJvdykKKworLS0gSW5wdXQtdmFsaWRhdGlvbiBlZGdlIGNhc2VzIGZvciB0aGUga2luZCBhcnJh eS4gIEFsbAorLS0gb2YgdGhlc2UgcmFpc2UgYW4gZXJyb3I7IHRoZSBmdW5jdGlvbiBuZXZlciBy ZWFjaGVzIHJlbGF0aW9uIG9wZW4uCistLSBFbXB0eSBhcnJheToKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb25seV9raW5kcyA9PiBBUlJBWVtdOjp0 ZXh0W10pOworRVJST1I6ICBwYXJhbWV0ZXIgIm9ubHlfa2luZHMiIG11c3Qgc3BlY2lmeSBhdCBs ZWFzdCBvbmUga2luZAorLS0gTlVMTCBlbGVtZW50OgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRzID0+IEFSUkFZW05VTEw6OnRleHRd KTsKK0VSUk9SOiAgcGFyYW1ldGVyICJvbmx5X2tpbmRzIiBtdXN0IG5vdCBjb250YWluIE5VTEwg ZWxlbWVudHMKKy0tIFVucmVjb2duaXplZCBraW5kOgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRzID0+IEFSUkFZWydub19zdWNoX2tp bmQnXSk7CitFUlJPUjogIHVucmVjb2duaXplZCBraW5kICJub19zdWNoX2tpbmQiIGluIHBhcmFt ZXRlciAib25seV9raW5kcyIKKy0tIFNhbWUga2luZCBzcGVjaWZpZWQgdGhyb3VnaCBib3RoIHBh cmFtZXRlcnMgaXMgc3RpbGwgbXV0ZXgtcmVqZWN0ZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb25seV9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CitFUlJPUjogICJvbmx5X2tp bmRzIiBhbmQgImV4Y2VwdF9raW5kcyIgcGFyYW1ldGVycyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZl CistLSBSb3VuZC10cmlwIHZlcmlmaWNhdGlvbi4gIEZvciBldmVyeSB0ZXN0IHRhYmxlLCBjYXB0 dXJlIHRoZSBEREwgdGhlCistLSBmdW5jdGlvbiBlbWl0cywgZHJvcCB0aGUgc2NoZW1hLCByZXBs YXkgZWFjaCB0YWJsZSdzIERETCBpbgorLS0gZGVwZW5kZW5jeSBvcmRlciwgYW5kIGNvbmZpcm0g dGhhdCBwZ19nZXRfdGFibGVfZGRsIG9uIHRoZSByZWNyZWF0ZWQKKy0tIHJlbGF0aW9uIG1hdGNo ZXMgdGhlIG9yaWdpbmFsIGxpbmUtZm9yLWxpbmUuICBUaGUgZmluYWwgU0VMRUNUIG11c3QKKy0t IHJldHVybiB6ZXJvIHJvd3MuCitDUkVBVEUgVEVNUCBUQUJMRSBwZ3RibF9kZGxfcnRfb3JpZyAo bmFtZSB0ZXh0LCBvcmQgaW50LCBsaW5lIHRleHQpOworSU5TRVJUIElOVE8gcGd0YmxfZGRsX3J0 X29yaWcKK1NFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKK0ZST00gKFZBTFVFUworICAgICAg ICAoJ2Jhc2ljJyksICgnaWRfY29scycpLCAoJ2lkX2N1c3RvbScpLCAoJ2dlbl9jb2xzJyksICgn Z2VuX3ZpcnR1YWwnKSwgKCdzdG9yYWdlX2NvbHMnKSwKKyAgICAgICAgKCdyZWZkJyksICgnY29u cycpLCAoJ251bGxzX25kJyksICgnaWR4X2luYycpLAorICAgICAgICAoJ2ZrX2FjdHNfdGd0Jyks ICgnZmtfYWN0cycpLCAoJ25vdGVuZl90Z3QnKSwgKCdub3RlbmYnKSwgKCdzZWxmX3JlZicpLCAo J3RlbXBvcmFsX3BrJyksCisgICAgICAgICgnaWR4ZCcpLAorICAgICAgICAoJ3BhcicpLCAoJ2No JyksICgnYXR0b3B0JyksCisgICAgICAgICgncGFydGVkX3JhbmdlJyksICgncGFydGVkX3Jhbmdl XzEnKSwgKCdwYXJ0ZWRfcmFuZ2VfZGVmJyksCisgICAgICAgICgncGFydGVkX2hhc2gnKSwgKCdw YXJ0ZWRfaGFzaF8wJyksCisgICAgICAgICgncGFydGVkX2xpc3QnKSwKKyAgICAgICAgKCdwYXJ0 ZWRfaWR4JyksICgncGFydGVkX2lkeF9hJyksCisgICAgICAgICgncGFydGVkX3BsYWluJyksICgn cGFydGVkX3BsYWluX2EnKSwKKyAgICAgICAgKCdwYXJ0ZWRfcGsnKSwgKCdwYXJ0ZWRfcGtfYScp LAorICAgICAgICAoJ3BhcnRlZF9zdWInKSwgKCdwYXJ0ZWRfc3ViX2EnKSwgKCdwYXJ0ZWRfc3Vi X2ExJyksCisgICAgICAgICgncGFydGVkX2NoaWxkX2lkeCcpLCAoJ3BhcnRlZF9jaGlsZF9pZHhf YScpLAorICAgICAgICAoJ3BhcnRlZF9taXhlZCcpLCAoJ3BhcnRlZF9taXhlZF9hJyksCisgICAg ICAgICgncGFydGVkX2ZrX3RndCcpLCAoJ3BhcnRlZF9maycpLCAoJ3BhcnRlZF9ma19hJyksCisg ICAgICAgICgncnRfbG9nJyksICgncnQnKSwKKyAgICAgICAgKCdzdHgnKSwgKCdybHMnKSwgKCdy aV9mdWxsJyksICgncmlfaWR4JyksICgndW5vJykKKyAgICAgKSBBUyB0KG5hbWUpLAorICAgICBM QVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJl Z2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UpIFdJ VEggT1JESU5BTElUWSBvKGxpbmUsIG9yZCk7CitETyAkJAorREVDTEFSRQorICAgIHRhYmxlcyBD T05TVEFOVCB0ZXh0W10gOj0gQVJSQVlbCisgICAgICAgICdiYXNpYycsICdpZF9jb2xzJywgJ2lk X2N1c3RvbScsICdnZW5fY29scycsICdnZW5fdmlydHVhbCcsICdzdG9yYWdlX2NvbHMnLAorICAg ICAgICAncmVmZCcsICdjb25zJywgJ251bGxzX25kJywgJ2lkeF9pbmMnLAorICAgICAgICAnZmtf YWN0c190Z3QnLCAnZmtfYWN0cycsICdub3RlbmZfdGd0JywgJ25vdGVuZicsICdzZWxmX3JlZics ICd0ZW1wb3JhbF9waycsCisgICAgICAgICdpZHhkJywKKyAgICAgICAgJ3BhcicsICdjaCcsICdh dHRvcHQnLAorICAgICAgICAncGFydGVkX3JhbmdlJywgJ3BhcnRlZF9yYW5nZV8xJywgJ3BhcnRl ZF9yYW5nZV9kZWYnLAorICAgICAgICAncGFydGVkX2hhc2gnLCAncGFydGVkX2hhc2hfMCcsCisg ICAgICAgICdwYXJ0ZWRfbGlzdCcsCisgICAgICAgICdwYXJ0ZWRfaWR4JywgJ3BhcnRlZF9pZHhf YScsCisgICAgICAgICdwYXJ0ZWRfcGxhaW4nLCAncGFydGVkX3BsYWluX2EnLAorICAgICAgICAn cGFydGVkX3BrJywgJ3BhcnRlZF9wa19hJywKKyAgICAgICAgJ3BhcnRlZF9zdWInLCAncGFydGVk X3N1Yl9hJywgJ3BhcnRlZF9zdWJfYTEnLAorICAgICAgICAncGFydGVkX2NoaWxkX2lkeCcsICdw YXJ0ZWRfY2hpbGRfaWR4X2EnLAorICAgICAgICAncGFydGVkX21peGVkJywgJ3BhcnRlZF9taXhl ZF9hJywKKyAgICAgICAgJ3BhcnRlZF9ma190Z3QnLCAncGFydGVkX2ZrJywgJ3BhcnRlZF9ma19h JywKKyAgICAgICAgJ3J0X2xvZycsICdydCcsCisgICAgICAgICdzdHgnLCAncmxzJywgJ3JpX2Z1 bGwnLCAncmlfaWR4JywgJ3VubycKKyAgICBdOworICAgIHQgdGV4dDsKKyAgICBzdG10IHRleHQ7 CitCRUdJTgorICAgIERST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NBREU7CisgICAgQ1JF QVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKKyAgICBGT1JFQUNIIHQgSU4gQVJSQVkgdGFibGVz IExPT1AKKyAgICAgICAgRk9SIHN0bXQgSU4KKyAgICAgICAgICAgIFNFTEVDVCBsaW5lIEZST00g cGd0YmxfZGRsX3J0X29yaWcgV0hFUkUgbmFtZSA9IHQgT1JERVIgQlkgb3JkCisgICAgICAgIExP T1AKKyAgICAgICAgICAgIEJFR0lOCisgICAgICAgICAgICAgICAgRVhFQ1VURSBzdG10OworICAg ICAgICAgICAgRVhDRVBUSU9OIFdIRU4gZHVwbGljYXRlX3RhYmxlIFRIRU4KKyAgICAgICAgICAg ICAgICBOVUxMOyAgLS0gcGFydGl0aW9uIGNoaWxkIGFscmVhZHkgY3JlYXRlZCBieSBpdHMgcGFy ZW50J3MgRERMCisgICAgICAgICAgICBFTkQ7CisgICAgICAgIEVORCBMT09QOworICAgIEVORCBM T09QOworRU5EICQkOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byA0MyBvdGhlciBvYmplY3Rz CitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGJhc2ljCitkcm9wIGNhc2NhZGVzIHRv IHRhYmxlIGlkX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWRfY3VzdG9tCitkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIGdlbl9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGdlbl92aXJ0 dWFsCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0b3JhZ2VfY29scworZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSByZWZkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNvbnMKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgbnVsbHNfbmQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgaWR4X2luYworZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBma19hY3RzX3RndAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma19h Y3RzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIG5vdGVuZl90Z3QKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgbm90ZW5mCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHNlbGZfcmVmCitkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIHRlbXBvcmFsX3BrCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkeGQKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgcGFyCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNoCitkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIGF0dG9wdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRf cmFuZ2UKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2hhc2gKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgcGFydGVkX2xpc3QKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2lkeAor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfcGxhaW4KK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgcGFydGVkX3BrCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9zdWIKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgcGFydGVkX2NoaWxkX2lkeAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBw YXJ0ZWRfbWl4ZWQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2ZrX3RndAorZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfZmsKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnQKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgcnRfbG9nCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0eAor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBybHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfZnVs bAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg dW5vCitkcm9wIGNhc2NhZGVzIHRvIHR5cGUgdHlwZWRfdAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSB0eXBlZF9wbGFpbgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0eXBlZF9vdmVyCitkcm9wIGNh c2NhZGVzIHRvIHZpZXcgdgorZHJvcCBjYXNjYWRlcyB0byBzZXF1ZW5jZSBzCitXSVRIIGFmdGVy X2RkbCBBUyAoCisgICAgU0VMRUNUIHQubmFtZSwgby5vcmQsIG8ubGluZQorICAgIEZST00gKFNF TEVDVCBESVNUSU5DVCBuYW1lIEZST00gcGd0YmxfZGRsX3J0X29yaWcpIEFTIHQsCisgICAgICAg ICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6 OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+IGZh bHNlKSBXSVRIIE9SRElOQUxJVFkgbyhsaW5lLCBvcmQpCispCisoU0VMRUNUICdtaXNzaW5nLWlu LWNvcHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnCisg RVhDRVBUCisgU0VMRUNUICdtaXNzaW5nLWluLWNvcHknLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBh ZnRlcl9kZGwpCitVTklPTiBBTEwKKyhTRUxFQ1QgJ2V4dHJhLWluLWNvcHknIEFTIGtpbmQsIG5h bWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbAorIEVYQ0VQVAorIFNFTEVDVCAnZXh0cmEtaW4t Y29weScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKQorT1JERVIgQlkg a2luZCwgbmFtZSwgb3JkOworIGtpbmQgfCBuYW1lIHwgb3JkIHwgbGluZSAKKy0tLS0tLSstLS0t LS0rLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCistLSBDbGVhbnVwLgorRFJPUCBTQ0hFTUEgcGd0 YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMzggb3RoZXIg b2JqZWN0cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBiYXNpYworZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBpZF9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2N1c3RvbQor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBn ZW5fdmlydHVhbAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzdG9yYWdlX2NvbHMKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgcmVmZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjb25zCitkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIG51bGxzX25kCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkeF9pbmMK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgZmtfYWN0c190Z3QKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgZmtfYWN0cworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBub3RlbmZfdGd0Citkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIG5vdGVuZgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzZWxmX3JlZgorZHJv cCBjYXNjYWRlcyB0byB0YWJsZSB0ZW1wb3JhbF9waworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBp ZHhkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBj aAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBhdHRvcHQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg cGFydGVkX3JhbmdlCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9oYXNoCitkcm9wIGNh c2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9saXN0Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRl ZF9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX3BsYWluCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHBhcnRlZF9waworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfc3ViCitk cm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9jaGlsZF9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgcGFydGVkX21peGVkCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9ma190Z3QK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2ZrCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHJ0X2xvZworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBydAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBzdHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmxzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHJpX2Z1bGwKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfaWR4Citkcm9wIGNhc2NhZGVzIHRv IHRhYmxlIHVubwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggOGZhMGE2YzQ3ZmIu LjllY2E2NGNjYTNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVk dWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKQEAgLTgxLDcgKzgx LDcgQEAgdGVzdDogY3JlYXRlX3RhYmxlX2xpa2UgYWx0ZXJfZ2VuZXJpYyBhbHRlcl9vcGVyYXRv ciBtaXNjIGFzeW5jIGRic2l6ZSBtZXJnZSBtaXMKICMgY29sbGF0ZS5saW51eC51dGY4IGFuZCBj b2xsYXRlLmljdS51dGY4IHRlc3RzIGNhbm5vdCBiZSBydW4gaW4gcGFyYWxsZWwgd2l0aCBlYWNo IG90aGVyCiAjIHBzcWwgZGVwZW5kcyBvbiBjcmVhdGVfYW0KICMgYW11dGlscyBkZXBlbmRzIG9u IGdlb21ldHJ5LCBjcmVhdGVfaW5kZXhfc3BnaXN0LCBoYXNoX2luZGV4LCBicmluCi10ZXN0OiBy dWxlcyBwc3FsIHBzcWxfY3Jvc3N0YWIgcHNxbF9waXBlbGluZSBhbXV0aWxzIHN0YXRzX2V4dCBj b2xsYXRlLmxpbnV4LnV0ZjggY29sbGF0ZS53aW5kb3dzLndpbjEyNTIKK3Rlc3Q6IHJ1bGVzIHBz cWwgcHNxbF9jcm9zc3RhYiBwc3FsX3BpcGVsaW5lIGFtdXRpbHMgc3RhdHNfZXh0IGNvbGxhdGUu bGludXgudXRmOCBjb2xsYXRlLndpbmRvd3Mud2luMTI1MiBwZ19nZXRfdGFibGVfZGRsCiAKICMg LS0tLS0tLS0tLQogIyBSdW4gdGhlc2UgYWxvbmUgc28gdGhleSBkb24ndCBydW4gb3V0IG9mIHBh cmFsbGVsIHdvcmtlcnMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BnX2dldF90 YWJsZV9kZGwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0X3RhYmxlX2RkbC5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5ZWExMmQ3NjExCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0X3RhYmxlX2RkbC5zcWwK QEAgLTAsMCArMSw5MzcgQEAKKy0tCistLSBwZ19nZXRfdGFibGVfZGRsCistLQorLS0gQWxsIHRl c3RzIHBhc3Mgb3duZXI9PmZhbHNlIHNvIHRoZSBBTFRFUiBUQUJMRSBPV05FUiBUTyBsaW5lIGlz IG5vdAorLS0gZW1pdHRlZCwga2VlcGluZyBvdXRwdXQgc3RhYmxlIGFjcm9zcyB0ZXN0IHJ1bm5l cnMgKHdoaWNoIG1heSBydW4gdW5kZXIKKy0tIGRpZmZlcmVudCByb2xlIG5hbWVzKS4KKy0tCitD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworU0VUIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRs X3Rlc3Q7CisKKy0tIEJhc2ljIHRhYmxlIHdpdGggUFJJTUFSWSBLRVksIE5PVCBOVUxMLCBERUZB VUxULCBDT0xMQVRFLgorQ1JFQVRFIFRBQkxFIGJhc2ljICgKKyAgICBpZCBpbnQgUFJJTUFSWSBL RVksCisgICAgbmFtZSB0ZXh0IE5PVCBOVUxMIERFRkFVTFQgJ2Fub24nIENPTExBVEUgIkMiCisp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisKKy0tIElkZW50aXR5IGNvbHVtbnMgKHdpdGggZGVmYXVsdCBhbmQgY3Vz dG9tIHNlcXVlbmNlIG9wdGlvbnMpLgorQ1JFQVRFIFRBQkxFIGlkX2NvbHMgKAorICAgIGlkX2Fs d2F5cyBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSwKKyAgICBpZF9kZWZhdWx0IGlu dCBHRU5FUkFURUQgQlkgREVGQVVMVCBBUyBJREVOVElUWQorKTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnaWRfY29scyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKK0NS RUFURSBUQUJMRSBpZF9jdXN0b20gKAorICAgIHYgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURF TlRJVFkgKAorICAgICAgICBTRVFVRU5DRSBOQU1FIGlkX2N1c3RvbV92X3NlcQorICAgICAgICBT VEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNQorICAgICAgICBNSU5WQUxVRSA1MCBNQVhWQUxV RSAxMDAwCisgICAgICAgIENBQ0hFIDEwIENZQ0xFCisgICAgKQorKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsK KworLS0gR2VuZXJhdGVkIHN0b3JlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgZ2VuX2NvbHMgKAor ICAgIGNlbnRzIGludCwKKyAgICBkb2xsYXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBBUyAo Y2VudHMgLyAxMDAuMCkgU1RPUkVECispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdnZW5fY29scyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEdlbmVyYXRlZCB2 aXJ0dWFsIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5fdmlydHVhbCAoCisgICAgYmFzZSBpbnQs CisgICAgZGVyaXZlZCBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYmFzZSAqIDIpIFZJUlRVQUwK Kyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2dlbl92aXJ0dWFsJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gU1RPUkFHRSBhbmQgQ09NUFJFU1NJT04gKG9ubHkg ZW1pdHRlZCB3aGVuIG5vbi1kZWZhdWx0IGZvciB0aGUgdHlwZSkuCitDUkVBVEUgVEFCTEUgc3Rv cmFnZV9jb2xzICgKKyAgICBhIHRleHQgU1RPUkFHRSBFWFRFUk5BTCwKKyAgICBiIHRleHQgU1RP UkFHRSBNQUlOLAorICAgIGMgdGV4dCBDT01QUkVTU0lPTiBwZ2x6CispOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdzdG9yYWdlX2NvbHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UpOworCistLSBDb25zdHJhaW50czogQ0hFQ0ssIFVOSVFVRSwgRk9SRUlHTiBLRVkgKERFRkVS UkFCTEUpLgorQ1JFQVRFIFRBQkxFIHJlZmQgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUg VEFCTEUgY29ucyAoCisgICAgYSBpbnQgQ0hFQ0sgKGEgPiAwKSwKKyAgICBiIGludCBVTklRVUUs CisgICAgYyBpbnQgUkVGRVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZF UlJFRAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFVOSVFVRSBOVUxMUyBOT1QgRElTVElOQ1QgKFBHIDE1 KTogbnVsbCB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgZXF1YWwgZm9yCistLSB1bmlxdWVuZXNzIHB1 cnBvc2VzLCBzbyB0aGUgTlVMTFMgTk9UIERJU1RJTkNUIGNsYXVzZSBtdXN0IGJlIGVtaXR0ZWQu CitDUkVBVEUgVEFCTEUgbnVsbHNfbmQgKAorICAgIGEgaW50LAorICAgIGIgaW50LAorICAgIFVO SVFVRSBOVUxMUyBOT1QgRElTVElOQ1QgKGEsIGIpCispOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdudWxsc19uZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIElO Q0xVREUgY29sdW1ucyBvbiBhIGNvbnN0cmFpbnQtYmFja2VkIFVOSVFVRSBpbmRleCAoUEcgMTEp OiB0aGUKKy0tIGNvdmVyaW5nIGNvbHVtbnMgYXBwZWFyIGluIGFuIElOQ0xVREUgKC4uLikgY2xh dXNlIG9uIHRoZSBBTFRFUiBUQUJMRQorLS0gQUREIENPTlNUUkFJTlQgc3RhdGVtZW50LCBub3Qg aW4gdGhlIGtleSBjb2x1bW4gbGlzdC4KK0NSRUFURSBUQUJMRSBpZHhfaW5jICgKKyAgICBpZCAg IGludCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQsCisgICAgZXh0cmEgdGV4dCwKKyAgICBV TklRVUUgKG5hbWUpIElOQ0xVREUgKGV4dHJhKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnaWR4X2luYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIEZPUkVJ R04gS0VZIHdpdGggT04gREVMRVRFIC8gT04gVVBEQVRFIHJlZmVyZW50aWFsIGFjdGlvbnMgYW5k IE1BVENICistLSBjbGF1c2UuICBFYWNoIHZhcmlhbnQgbXVzdCBhcHBlYXIgdmVyYmF0aW0gaW4g dGhlIHJlY29uc3RydWN0ZWQgRERMLgorQ1JFQVRFIFRBQkxFIGZrX2FjdHNfdGd0IChpZCBpbnQg UFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZrX2FjdHMgKAorICAgIGEgaW50LAorICAgIGIg aW50LAorICAgIGMgaW50LAorICAgIGQgaW50LAorICAgIENPTlNUUkFJTlQgZmtfY2FzY2FkZSAg Rk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPTiBERUxFVEUgQ0FTQ0FERSBPTiBVUERBVEUgUkVTVFJJQ1QsCisgICAg Q09OU1RSQUlOVCBma19zZXRudWxsICBGT1JFSUdOIEtFWSAoYikgUkVGRVJFTkNFUyBma19hY3Rz X3RndChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9OIERFTEVURSBTRVQgTlVMTCwK KyAgICBDT05TVFJBSU5UIGZrX3NldGRlZiAgIEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIGZr X2FjdHNfdGd0KGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT04gREVMRVRFIFNFVCBE RUZBVUxULAorICAgIENPTlNUUkFJTlQgZmtfbWF0Y2ggICAgRk9SRUlHTiBLRVkgKGQpIFJFRkVS RU5DRVMgZmtfYWN0c190Z3QoaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVRDSCBG VUxMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdma19hY3RzJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gTk9UIEVORk9SQ0VEIGZvcmVpZ24ga2V5IChQRyAx Nyk6IHRoZSBjb25zdHJhaW50IGlzIHJlY29yZGVkIGluIHRoZQorLS0gY2F0YWxvZyBidXQgbm90 IHZhbGlkYXRlZCBieSB0aGUgZW5naW5lOyBOT1QgRU5GT1JDRUQgbXVzdCBhcHBlYXIgaW4KKy0t IHRoZSByZWNvbnN0cnVjdGVkIERETC4KK0NSRUFURSBUQUJMRSBub3RlbmZfdGd0IChpZCBpbnQg UFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIG5vdGVuZiAoCisgICAgYSBpbnQsCisgICAgQ09O U1RSQUlOVCBub3RlbmZfZmsgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgbm90ZW5mX3RndChp ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBOT1QgRU5GT1JDRUQKKyk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ25vdGVuZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7 CisKKy0tIFNlbGYtcmVmZXJlbmNpbmcgRks6IHRoZSBQSyBtdXN0IGFwcGVhciBiZWZvcmUgdGhl IEZLIHRoYXQgcmVmZXJlbmNlcyBpdC4KKy0tIFRoZSBjYXRhbG9nIHNjYW4gcmV0dXJucyBjb25z dHJhaW50cyBpbiBuYW1lIG9yZGVyOyB3aXRob3V0IHRoZSBmaXgsCistLSAic2VsZl9yZWZfcGFy ZW50X2lkX2ZrZXkiIHNvcnRzIGJlZm9yZSAic2VsZl9yZWZfcGtleSIgYW5kIHRoZSBGSyBBREQK Ky0tIENPTlNUUkFJTlQgZmFpbHMgd2l0aCAidGhlcmUgaXMgbm8gdW5pcXVlIGNvbnN0cmFpbnQg bWF0Y2hpbmcgZ2l2ZW4ga2V5cyIuCitDUkVBVEUgVEFCTEUgc2VsZl9yZWYgKAorICAgIGlkICAg ICAgICBpbnQgUFJJTUFSWSBLRVksCisgICAgcGFyZW50X2lkIGludCBSRUZFUkVOQ0VTIHNlbGZf cmVmKGlkKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc2VsZl9yZWYnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBXSVRIT1VUIE9WRVJMQVBTIG9uIGEgUFJJ TUFSWSBLRVkgKFBHIDE3KTogdGhlIHJhbmdlLXR5cGUgcGVyaW9kCistLSBjb2x1bW4gZm9ybXMg YSB0ZW1wb3JhbCBwcmltYXJ5IGtleTsgV0lUSE9VVCBPVkVSTEFQUyBtdXN0IGFwcGVhcgorLS0g aW5zaWRlIHRoZSBrZXkgY29sdW1uIGxpc3QgaW4gdGhlIHJlY29uc3RydWN0ZWQgQUxURVIgVEFC TEUuCistLSBCb3RoIGNvbHVtbnMgdXNlIHJhbmdlIHR5cGVzIHdpdGggbmF0aXZlIEdpU1Qgc3Vw cG9ydCBzbyBubworLS0gYnRyZWVfZ2lzdCBleHRlbnNpb24gaXMgbmVlZGVkLgorQ1JFQVRFIFRB QkxFIHRlbXBvcmFsX3BrICgKKyAgICBncnAgIGludDRyYW5nZSwKKyAgICBkdXJpbmcgZGF0ZXJh bmdlLAorICAgIFBSSU1BUlkgS0VZIChncnAsIGR1cmluZyBXSVRIT1VUIE9WRVJMQVBTKQorKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcG9yYWxfcGsnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworCistLSBJbmRleGVzOiBmdW5jdGlvbmFsIGFuZCBwYXJ0aWFsLiAg Q29uc3RyYWludC1iYWNraW5nIGluZGV4ZXMgYXJlCistLSBzdXBwcmVzc2VkICh0aGV5IGFyZSBl bWl0dGVkIGJ5IHRoZSBjb25zdHJhaW50IGxvb3ApLgorQ1JFQVRFIFRBQkxFIGlkeGQgKGlkIGlu dCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKK0NSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIGlk eGQgKGxvd2VyKG5hbWUpKTsKK0NSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gaWR4ZCAoaWQp IFdIRVJFIGlkID4gMTAwOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gSW5oZXJpdGFuY2UsIGluY2x1ZGluZyBh IGNoaWxkIERFRkFVTFQgb3ZlcnJpZGUgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4KK0NSRUFURSBU QUJMRSBwYXIgKGEgaW50IERFRkFVTFQgMSwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSBjaCAoYyBp bnQpIElOSEVSSVRTIChwYXIpOworQUxURVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VUIERF RkFVTFQgOTk5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFBlci1jb2x1bW4gYXR0b3B0aW9uczogZW1pdHRlZCBh cyBBTFRFUiBDT0xVTU4gU0VUICguLi4pLgorQ1JFQVRFIFRBQkxFIGF0dG9wdCAoYSBpbnQsIGIg dGV4dCk7CitBTFRFUiBUQUJMRSBhdHRvcHQgQUxURVIgQ09MVU1OIGEgU0VUIChuX2Rpc3RpbmN0 ID0gMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYXR0b3B0Jzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlKTsKKworLS0gUGFydGl0aW9uZWQgdGFibGUgcGFyZW50cyAoUkFO R0UsIEhBU0gsIGFuZCBMSVNUKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2UgKGlkIGludCwg ayBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCitDUkVB VEUgVEFCTEUgcGFydGVkX2hhc2ggKGlkIGludCkgUEFSVElUSU9OIEJZIEhBU0ggKGlkKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hhc2gnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UpOworCitDUkVBVEUgVEFCTEUgcGFydGVkX2xpc3QgKGlkIGludCwgcmVnaW9u IHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdwYXJ0ZWRfbGlzdCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0t IFBhcnRpdGlvbiBjaGlsZHJlbjogRlJPTS9UTywgV0lUSCAobW9kdWx1cywgcmVtYWluZGVyKSwg REVGQVVMVC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04gT0YgcGFydGVk X3JhbmdlCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0FMVEVSIFRBQkxFIHBh cnRlZF9yYW5nZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlKTsKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9oYXNoXzAgUEFSVElUSU9OIE9GIHBhcnRlZF9o YXNoCisgICAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hhc2hfMCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBP RiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIE5vbi1j b25zdHJhaW50LWJhY2tlZCBpbmRleCBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiB0aGUgcGFyZW50 J3MgaW5kZXggRERMCistLSBtdXN0IGFwcGVhciBvbmNlOyB0aGUgYXV0by1jcmVhdGVkIGNoaWxk IHBhcnRpdGlvbiBpbmRleGVzIChyZWxpc3BhcnRpdGlvbj10KQorLS0gbXVzdCBiZSBzdXBwcmVz c2VkIHNvIHRoZSBEREwgcm91bmQtdHJpcHMgd2l0aG91dCAicmVsYXRpb24gYWxyZWFkeSBleGlz dHMiLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9pZHggKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJ VElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9pZHhfYSBQQVJUSVRJ T04gT0YgcGFydGVkX2lkeCBGT1IgVkFMVUVTIElOICgnYScpOworQ1JFQVRFIFVOSVFVRSBJTkRF WCBwYXJ0ZWRfaWR4X3VpZHggT04gcGFydGVkX2lkeCAoaWQsIHJlZ2lvbik7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9pZHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UpOworCistLSBQbGFpbiAobm9uLXVuaXF1ZSkgQ1JFQVRFIElOREVYIG9uIHBhcnRpdGlvbmVk IHRhYmxlOiB0aGUgYXV0by1jcmVhdGVkIGNoaWxkCistLSBpbmRleCAocmVsaXNwYXJ0aXRpb249 dHJ1ZSkgaXMgc3VwcHJlc3NlZCwganVzdCBsaWtlIHRoZSBVTklRVUUgY2FzZS4KK0NSRUFURSBU QUJMRSBwYXJ0ZWRfcGxhaW4gKGlkIGludCwgdmFsIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAo aWQpOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9wbGFpbl9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcGxh aW4gRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0NSRUFURSBJTkRFWCBwYXJ0ZWRfcGxh aW5faWRfaWR4IE9OIHBhcnRlZF9wbGFpbiAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwYXJ0ZWRfcGxhaW4nOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBD b25zdHJhaW50LWJhY2tlZCBQUklNQVJZIEtFWSBvbiBwYXJ0aXRpb25lZCB0YWJsZTogdGhlIGNo aWxkJ3MgaW5oZXJpdGVkCistLSBjb25zdHJhaW50IChjb25pc2xvY2FsPWZhbHNlKSBhbmQgaXRz IGJhY2tpbmcgaW5kZXggYXJlIGJvdGggc3VwcHJlc3NlZC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRf cGsgKGlkIGludCwgcmVnaW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JF QVRFIFRBQkxFIHBhcnRlZF9wa19hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcGsgRk9SIFZBTFVFUyBJ TiAoJ2EnKTsKK0FMVEVSIFRBQkxFIHBhcnRlZF9wayBBREQgUFJJTUFSWSBLRVkgKGlkLCByZWdp b24pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcGsnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworCistLSBNdWx0aS1sZXZlbCAoc3ViLXBhcnRpdGlvbmVkKSB0 YWJsZSB3aXRoIGEgQ1JFQVRFIElOREVYIG9uIHRoZSByb290LgorLS0gVGhlIG1pZC1sZXZlbCBw YXJ0aXRpb25lZCBpbmRleCAocmVsaXNwYXJ0aXRpb249dHJ1ZSwgcmVsa2luZD0nSScpIGFuZCB0 aGUKKy0tIGxlYWYgaW5kZXggKHJlbGlzcGFydGl0aW9uPXRydWUsIHJlbGtpbmQ9J2knKSBhcmUg Ym90aCBzdXBwcmVzc2VkLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9zdWIgKGlkIGludCwgcmVnaW9u IHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRlZF9z dWJfYSBQQVJUSVRJT04gT0YgcGFydGVkX3N1YgorICAgIEZPUiBWQUxVRVMgSU4gKCdhJykgUEFS VElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGFydGVkX3N1Yl9hMSBQQVJUSVRJ T04gT0YgcGFydGVkX3N1Yl9hIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitDUkVBVEUg SU5ERVggcGFydGVkX3N1Yl9pZF9pZHggT04gcGFydGVkX3N1YiAoaWQpOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfc3ViJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNl KTsKKworLS0gUGFydGl0aW9uIGNoaWxkIHdpdGggaXRzIG93biBsb2NhbGx5LWRlZmluZWQgaW5k ZXggKHJlbGlzcGFydGl0aW9uPWZhbHNlKToKKy0tIHRoaXMgaXMgTk9UIGluaGVyaXRlZCBmcm9t IGFueSBwYXJlbnQgcGFydGl0aW9uZWQgaW5kZXggYW5kIG11c3QgYmUgZW1pdHRlZC4KK0NSRUFU RSBUQUJMRSBwYXJ0ZWRfY2hpbGRfaWR4IChpZCBpbnQsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04g QlkgTElTVCAocmVnaW9uKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hpbGRfaWR4X2EgUEFSVElU SU9OIE9GIHBhcnRlZF9jaGlsZF9pZHggRk9SIFZBTFVFUyBJTiAoJ2EnKTsKK0NSRUFURSBJTkRF WCBwYXJ0ZWRfY2hpbGRfaWR4X2FfaWQgT04gcGFydGVkX2NoaWxkX2lkeF9hIChpZCk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9jaGlsZF9pZHgnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworCistLSBNaXg6IHBhcmVudCBoYXMgYSBDUkVBVEUgSU5ERVggKGF1 dG8tcHJvcGFnYXRlZCB0byBjaGlsZCwgcmVsaXNwYXJ0aXRpb249dHJ1ZSwKKy0tIHN1cHByZXNz ZWQpIEFORCB0aGUgY2hpbGQgaGFzIGl0cyBvd24gbG9jYWwgaW5kZXggKHJlbGlzcGFydGl0aW9u PWZhbHNlLCBlbWl0dGVkKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfbWl4ZWQgKGlkIGludCwgcmVn aW9uIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChyZWdpb24pOworQ1JFQVRFIFRBQkxFIHBhcnRl ZF9taXhlZF9hIFBBUlRJVElPTiBPRiBwYXJ0ZWRfbWl4ZWQgRk9SIFZBTFVFUyBJTiAoJ2EnKTsK K0NSRUFURSBJTkRFWCBwYXJ0ZWRfbWl4ZWRfaWQgT04gcGFydGVkX21peGVkIChpZCk7CitDUkVB VEUgSU5ERVggcGFydGVkX21peGVkX2FfcmVnaW9uIE9OIHBhcnRlZF9taXhlZF9hIChyZWdpb24p OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfbWl4ZWQnOjpyZWdjbGFz cywgb3duZXIgPT4gZmFsc2UpOworCistLSBGSyBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiBkZWNs YXJlZCBvbiB0aGUgcGFyZW50OyBwYXJ0aXRpb24gY2hpbGRyZW4gaW5oZXJpdAorLS0gdGhlIGNv bnN0cmFpbnQgd2l0aCBjb25pc2xvY2FsPWZhbHNlIGFuZCBtdXN0IG5vdCByZS1lbWl0IGl0Lgor Q1JFQVRFIFRBQkxFIHBhcnRlZF9ma190Z3QgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUg VEFCTEUgcGFydGVkX2ZrIChpZCBpbnQsIHRndF9pZCBpbnQgUkVGRVJFTkNFUyBwYXJ0ZWRfZmtf dGd0KGlkKSkKKyAgICBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwYXJ0 ZWRfZmtfYSBQQVJUSVRJT04gT0YgcGFydGVkX2ZrIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEw MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9mayc6OnJlZ2NsYXNz LCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFN0YXRpc3RpY3MgZGVjbGFyZWQgZXhwbGljaXRseSBv biBhIHBhcnRpdGlvbiBjaGlsZCAobm90IGF1dG8tcHJvcGFnYXRlZCk6CistLSB0aGUgY2hpbGQn cyBzdGF0aXN0aWNzIG9iamVjdCBhcHBlYXJzIGluc2lkZSB0aGUgY2hpbGQncyBEREwgYmxvY2su CitDUkVBVEUgVEFCTEUgcGFydGVkX3N0eCAoaWQgaW50LCByZWdpb24gdGV4dCwgdmFsIGZsb2F0 KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfc3R4X2Eg UEFSVElUSU9OIE9GIHBhcnRlZF9zdHggRk9SIFZBTFVFUyBJTiAoJ2EnKTsKK0NSRUFURSBTVEFU SVNUSUNTIHBhcnRlZF9zdHhfc3RhdCAobmRpc3RpbmN0KSBPTiBpZCwgcmVnaW9uIEZST00gcGFy dGVkX3N0eDsKK0NSRUFURSBTVEFUSVNUSUNTIHBhcnRlZF9zdHhfYV9zdGF0IChuZGlzdGluY3Qp IE9OIGlkLCB2YWwgRlJPTSBwYXJ0ZWRfc3R4X2E7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3BhcnRlZF9zdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJM RSBwYXJ0ZWRfc3R4OworCistLSBOTyBJTkhFUklUIENIRUNLIGNvbnN0cmFpbnQ6IHRoZSBOTyBJ TkhFUklUIGZsYWcgbXVzdCBhcHBlYXIgdmVyYmF0aW0gaW4gdGhlCistLSBpbmxpbmUgY29uc3Ry YWludCBkZWZpbml0aW9uIGluc2lkZSB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkuCitDUkVBVEUgVEFC TEUgbm9pbmhjaGsgKGlkIGludCwgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIHZhbF9wb3MgQ0hF Q0sgKHZhbCA+IDApIE5PIElOSEVSSVQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdub2luaGNoayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIG5vaW5o Y2hrOworCistLSBNdWx0aXBsZSBpbmhlcml0YW5jZSBwYXJlbnRzOiB0aGUgSU5IRVJJVFMgY2xh dXNlIG11c3QgbGlzdCBib3RoIHBhcmVudHMgaW4KKy0tIGRlY2xhcmF0aW9uIG9yZGVyOyBvbmx5 IHRoZSBsb2NhbGx5LWRlZmluZWQgY29sdW1uIGFwcGVhcnMgaW4gdGhlIGNvbHVtbiBsaXN0Lgor Q1JFQVRFIFRBQkxFIG1pX3AxIChhIGludCBERUZBVUxUIDEpOworQ1JFQVRFIFRBQkxFIG1pX3Ay IChiIHRleHQgREVGQVVMVCAneCcpOworQ1JFQVRFIFRBQkxFIG1pX2NoaWxkIChjIGZsb2F0KSBJ TkhFUklUUyAobWlfcDEsIG1pX3AyKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn bWlfY2hpbGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJMRSBtaV9wMSwg bWlfcDIgQ0FTQ0FERTsKKworLS0gUnVsZXMuCitDUkVBVEUgVEFCTEUgcnQgKGlkIGludCk7CitD UkVBVEUgVEFCTEUgcnRfbG9nIChpZCBpbnQpOworQ1JFQVRFIFJVTEUgcnRfbG9nX2luc2VydCBB UyBPTiBJTlNFUlQgVE8gcnQKKyAgICBETyBBTFNPIElOU0VSVCBJTlRPIHJ0X2xvZyBWQUxVRVMg KE5FVy5pZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlKTsKKworLS0gRXh0ZW5kZWQgc3RhdGlzdGljcy4KK0NSRUFURSBUQUJM RSBzdHggKGEgaW50LCBiIGludCwgYyBpbnQpOworQ1JFQVRFIFNUQVRJU1RJQ1Mgc3R4X25kdiAo bmRpc3RpbmN0KSBPTiBhLCBiIEZST00gc3R4OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBSb3ctbGV2ZWwgc2Vj dXJpdHkgdG9nZ2xlcy4KK0NSRUFURSBUQUJMRSBybHMgKGlkIGludCk7CitBTFRFUiBUQUJMRSBy bHMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKK0FMVEVSIFRBQkxFIHJscyBGT1JDRSBST1cg TEVWRUwgU0VDVVJJVFk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFJFUExJQ0EgSURFTlRJVFk6IGVtaXR0ZWQg b25seSB3aGVuIG5vdCB0aGUgZGVmYXVsdC4KK0NSRUFURSBUQUJMRSByaV9mdWxsIChhIGludCk7 CitBTFRFUiBUQUJMRSByaV9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7 CisKK0NSRUFURSBUQUJMRSByaV9pZHggKGEgaW50IE5PVCBOVUxMKTsKK0NSRUFURSBVTklRVUUg SU5ERVggcmlfaWR4X2EgT04gcmlfaWR4IChhKTsKK0FMVEVSIFRBQkxFIHJpX2lkeCBSRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYIHJpX2lkeF9hOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdyaV9pZHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBVTkxPR0dF RCArIHJlbG9wdGlvbnMuCitDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdW5vIChpZCBpbnQpIFdJVEgg KGZpbGxmYWN0b3IgPSA3MCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Vubyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CisKKy0tIFR5cGVkIHRhYmxlIChDUkVBVEUgVEFC TEUgT0YgdHlwZV9uYW1lKS4gIENvbHVtbnMgaW5oZXJpdGVkIGZyb20gdGhlCistLSB0eXBlIGVt aXQgbm90aGluZzsgbG9jYWxseS1hcHBsaWVkIERFRkFVTFQsIE5PVCBOVUxMIGFuZCBDSEVDSyBj b21lCistLSBvdXQgdGhyb3VnaCBhIHNpbmdsZSAiKGNvbCBXSVRIIE9QVElPTlMgLi4uKSIgbGlz dC4KK0NSRUFURSBUWVBFIHR5cGVkX3QgQVMgKGEgaW50LCBiIHRleHQpOworQ1JFQVRFIFRBQkxF IHR5cGVkX3BsYWluIE9GIHR5cGVkX3Q7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J3R5cGVkX3BsYWluJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKKworQ1JFQVRFIFRBQkxF IHR5cGVkX292ZXIgT0YgdHlwZWRfdCAoCisgICAgYSBXSVRIIE9QVElPTlMgREVGQVVMVCA3IE5P VCBOVUxMLAorICAgIGIgV0lUSCBPUFRJT05TIE5PVCBOVUxMLAorICAgIENPTlNUUkFJTlQgYl9u b25lbXB0eSBDSEVDSyAobGVuZ3RoKGIpID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3R5cGVkX292ZXInOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworCistLSBU ZW1wb3JhcnkgdGFibGVzICsgT04gQ09NTUlULiAgVGVtcCB0YWJsZXMgbXVzdCBuZXZlciBiZSBl bWl0dGVkIHdpdGgKKy0tIHRoZSBzZXNzaW9uLXByaXZhdGUgcGdfdGVtcF9OTiBzY2hlbWEgcHJl Zml4IC0tIHRoZSBURU1QT1JBUlkga2V5d29yZAorLS0gYWxyZWFkeSBwbGFjZXMgdGhlIHRhYmxl IGluIHBnX3RlbXAgYW5kIHRoZSBwcmVmaXggaXMgbm9uLXJlcGxheWFibGUuCistLSBPTiBDT01N SVQgRFJPUCBvbmx5IGZpcmVzIGF0IGNvbW1pdCwgc28gdGhlIHF1ZXJpZXMgdGhhdCBuZWVkIHRv IHNlZQorLS0gdGhlIGNhdGFsb2cgZW50cnkgbXVzdCBydW4gaW4gdGhlIHNhbWUgdHJhbnNhY3Rp b24gYXMgdGhlIENSRUFURS4KK0JFR0lOOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWZhdWx0 IChpZCBpbnQpOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWxldGUgKGlkIGludCkgT04gQ09N TUlUIERFTEVURSBST1dTOworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnQpIE9O IENPTU1JVCBEUk9QOworCitTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBf ZGVmYXVsdCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSkgQVMgbGluZQorV0hFUkUgbGluZSBM SUtFICdDUkVBVEUgJSc7CisKK1NFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVt cF9kZWxldGUnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpIEFTIGxpbmUKK1dIRVJFIGxpbmUg TElLRSAnQ1JFQVRFICUnOworCitTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Rl bXBfZHJvcCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSkgQVMgbGluZQorV0hFUkUgbGluZSBM SUtFICdDUkVBVEUgJSc7CitST0xMQkFDSzsKKworLS0gUHJldHR5IG1vZGUuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBw cmV0dHkgPT4gdHJ1ZSk7CisKKy0tIG9ubHlfa2luZHMgLyBleGNlcHRfa2luZHMgZ2F0aW5nOiBl YWNoIGVtaXRzIGVpdGhlciBvbmx5IHRoZSBsaXN0ZWQga2luZHMKKy0tIChvbmx5X2tpbmRzKSBv ciBldmVyeSBraW5kIGV4Y2VwdCB0aGUgbGlzdGVkIG9uZXMgKGV4Y2VwdF9raW5kcykuICBUaGUg dHdvCistLSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgS2luZCB2b2NhYnVsYXJ5OiB0YWJsZSwg aW5kZXgsCistLSBwcmltYXJ5X2tleSwgdW5pcXVlLCBjaGVjaywgZm9yZWlnbl9rZXksIGV4Y2x1 c2lvbiwgcnVsZSwKKy0tIHN0YXRpc3RpY3MsIHRyaWdnZXIsIHBvbGljeSwgcmxzLCByZXBsaWNh X2lkZW50aXR5LCBwYXJ0aXRpb24uCistLSBOT1QgTlVMTCBpcyBub3QgaW4gdGhlIHZvY2FidWxh cnkgLSBhbHdheXMgZW1pdHRlZCB0byBwcmV2ZW50CistLSBwcm9kdWNpbmcgc2NoZW1hcyB0aGF0 IHNpbGVudGx5IGFjY2VwdCBOVUxMcyB0aGUgc291cmNlIHdvdWxkCistLSBoYXZlIHJlamVjdGVk LgorLS0KKy0tIGV4Y2VwdF9raW5kcz1pbmRleCBoaWRlcyB0aGUgQ1JFQVRFIElOREVYIHN0YXRl bWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CisKKy0tIGV4 Y2VwdF9raW5kcz1wcmltYXJ5X2tleSx1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9u IGhpZGVzIGV2ZXJ5CistLSB0YWJsZS1sZXZlbCBjb25zdHJhaW50LiAgSW5saW5lIENIRUNLIGlu IHRoZSBDUkVBVEUgVEFCTEUgYm9keSBpcworLS0gc3VwcHJlc3NlZCB0b28uCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4 Y2VwdF9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknLCd1bmlxdWUnLCdjaGVjaycsJ2ZvcmVp Z25fa2V5JywnZXhjbHVzaW9uJ10pOworCistLSBleGNlcHRfa2luZHM9Zm9yZWlnbl9rZXkgc3Vw cHJlc3NlcyBvbmx5IEZPUkVJR04gS0VZIGNvbnN0cmFpbnRzOworLS0gUFJJTUFSWSBLRVksIFVO SVFVRSwgQ0hFQ0ssIGFuZCBuYW1lZCBOT1QgTlVMTCBzdGF5LiAgVGhpcyBpcyB0aGUKKy0tIGZp cnN0IHBhc3Mgb2YgdGhlIHR3by1wYXNzIEZLLWNsb25lIHdvcmtmbG93OiBlbWl0IHRhYmxlcyB3 aXRob3V0CistLSBjcm9zcy10YWJsZSBGS3MsIGxvYWQgZGF0YSwgdGhlbiByZS1ydW4gd2l0aCBv bmx5X2tpbmRzPWZvcmVpZ25fa2V5CistLSB0byBhZGQgdGhlbSBvbmNlIGFsbCB0YXJnZXRzIGV4 aXN0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2ZvcmVpZ25fa2V5J10pOworCist LSBvbmx5X2tpbmRzPWZvcmVpZ25fa2V5IGlzIHRoZSBzZWNvbmQgcGFzcyBvZiB0aGUgdHdvLXBh c3MgRkstY2xvbmUKKy0tIHdvcmtmbG93OiBlbWl0IG9ubHkgdGhlIEFMVEVSIFRBQkxFIC4uLiBB REQgQ09OU1RSQUlOVCAuLi4gRk9SRUlHTgorLS0gS0VZIHJvd3M7IHRoZSBDUkVBVEUgVEFCTEUg YW5kIGV2ZXJ5IG5vbi1GSyBzdWItb2JqZWN0IGFyZQorLS0gc3VwcHJlc3NlZCAodGhlIHRhYmxl IGFscmVhZHkgZXhpc3RzIGZyb20gdGhlIGZpcnN0IHBhc3MpLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRz ID0+IEFSUkFZWydmb3JlaWduX2tleSddKTsKKworLS0gQSB0YWJsZSB3aXRoIG5vIGZvcmVpZ24g a2V5cyBwcm9kdWNlcyBubyByb3dzIHVuZGVyCistLSBvbmx5X2tpbmRzPWZvcmVpZ25fa2V5Lgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyZWZkJzo6cmVnY2xhc3MsIG93bmVyID0+ IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddKTsKKworLS0gb25seV9r aW5kcz10YWJsZSBlbWl0cyBvbmx5IHRoZSBiYXJlIENSRUFURSBUQUJMRSAod2l0aCBhbnkgaW5s aW5lCistLSBjb2x1bW4tbGV2ZWwgTk9UIE5VTEwgYW5kIENIRUNLKSAtIG5vIGluZGV4ZXMsIG5v IFBSSU1BUlkgS0VZIEFMVEVSLAorLS0gbm8gb3RoZXIgc3ViLW9iamVjdHMuICBVc2VmdWwgZm9y IGNhcHR1cmluZyBhIHRhYmxlJ3Mgc2hhcGUgd2l0aG91dAorLS0gcHVsbGluZyBpbiBldmVyeXRo aW5nIGF0dGFjaGVkIHRvIGl0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhk Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWyd0YWJsZSdd KTsKKworLS0gb25seV9raW5kcz1jaGVjayBvbiBhIG5vbi1wYXJ0aXRpb24gdGFibGUuICBUaGUg Y29uc3RyYWludCBsb29wIG11c3QgZW1pdAorLS0gY29sdW1uLWxldmVsIGFuZCB0YWJsZS1sZXZl bCBDSEVDSyBjb25zdHJhaW50cyB2aWEgQUxURVIgVEFCTEUgaGVyZSwKKy0tIGJlY2F1c2UgdGhl IGlubGluZSBwYXRoIGluIENSRUFURSBUQUJMRSBuZXZlciBydW5zIChLSU5EX1RBQkxFIGlzCist LSBub3QgaW4gdGhlIGZpbHRlcikuCitDUkVBVEUgVEFCTEUgY2hrX29ubHkgKAorICAgIGlkICBp bnQgUFJJTUFSWSBLRVksCisgICAgcXR5IGludCBDSEVDSyAocXR5ID4gMCksCisgICAgQ09OU1RS QUlOVCBjaGtfb25seV9pZF9wb3MgQ0hFQ0sgKGlkID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2Noa19vbmx5Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5 X2tpbmRzID0+IEFSUkFZWydjaGVjayddKTsKK0RST1AgVEFCTEUgY2hrX29ubHk7CisKKy0tIG9u bHlfa2luZHM9cGFydGl0aW9uIG9uIGEgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50OiBlYWNoIGNo aWxkJ3MgZnVsbCBEREwKKy0tIGlzIGVtaXR0ZWQgKENSRUFURSBUQUJMRSAuLi4gUEFSVElUSU9O IE9GIC4uLikuICBUaGUgInBhcnRpdGlvbiIKKy0tIGtleXdvcmQgaXMgYSBnYXRlIGF0IHRoZSBw YXJlbnQgbGV2ZWw7IGl0IGlzIHN0cmlwcGVkIGZyb20gdGhlCistLSBwcm9wYWdhdGVkIGZpbHRl ciBzbyB0aGUgY2hpbGQgZG9lcyBub3QgZXhjbHVkZSBpdHMgb3duCistLSBDUkVBVEUgVEFCTEUu CitDUkVBVEUgVEFCTEUgcF9vbmx5IChpZCBpbnQsIHZhbCB0ZXh0KSBQQVJUSVRJT04gQlkgUkFO R0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwX29ubHlfYSBQQVJUSVRJT04gT0YgcF9vbmx5IEZPUiBW QUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitDUkVBVEUgVEFCTEUgcF9vbmx5X2IgUEFSVElUSU9O IE9GIHBfb25seSBGT1IgVkFMVUVTIEZST00gKDEwMCkgVE8gKDIwMCk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3Bfb25seSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsncGFydGl0aW9uJ10pOworRFJPUCBUQUJMRSBwX29ubHk7CisKKy0t IG9ubHlfa2luZHMgYW5kIGV4Y2VwdF9raW5kcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlfa2luZHMgPT4gQVJSQVlb J2ZvcmVpZ25fa2V5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0X2tp bmRzID0+IEFSUkFZWydmb3JlaWduX2tleSddKTsKKworLS0gUHViL3N1YiBzY2hlbWEgY2xvbmU6 IGtlZXAgdGhlIHRhYmxlIGFuZCBpdHMgcHJpbWFyeSBrZXksIGRyb3AgdGhlCistLSByZXN0IG9m IHRoZSBjb25zdHJhaW50cyBzbyB0aGUgc3Vic2NyaWJlciBjYW4gcmVwbGljYXRlIHdpdGhvdXQK Ky0tIHB1bGxpbmcgY3Jvc3MtdGFibGUgZGVwZW5kZW5jaWVzIGFsb25nLgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNl cHRfa2luZHMgPT4gQVJSQVlbJ3VuaXF1ZScsJ2NoZWNrJywnZm9yZWlnbl9rZXknLCdleGNsdXNp b24nXSk7CisKKy0tIGV4Y2VwdF9raW5kcz1ydWxlIGhpZGVzIHRoZSBDUkVBVEUgUlVMRS4KK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFs c2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncnVsZSddKTsKKworLS0gZXhjZXB0X2tpbmRzPXN0 YXRpc3RpY3MgaGlkZXMgdGhlIENSRUFURSBTVEFUSVNUSUNTLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKKworLS0gZXhjZXB0X2tpbmRzPXJscyBoaWRlcyB0 aGUgRU5BQkxFL0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWSB0b2dnbGVzLgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2Vw dF9raW5kcyA9PiBBUlJBWVsncmxzJ10pOworCistLSBleGNlcHRfa2luZHM9cmVwbGljYV9pZGVu dGl0eSBoaWRlcyB0aGUgUkVQTElDQSBJREVOVElUWSBjbGF1c2UuCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2Vw dF9raW5kcyA9PiBBUlJBWVsncmVwbGljYV9pZGVudGl0eSddKTsKKworLS0gUGFydGl0aW9uIGNo aWxkcmVuIGFyZSBlbWl0dGVkIGJ5IGRlZmF1bHQ7IGV4Y2VwdF9raW5kcz1wYXJ0aXRpb24KKy0t IHN1cHByZXNzZXMgdGhlbSBzbyBvbmx5IHRoZSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQgY29t ZXMgb3V0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsncGFydGl0aW9u J10pOworCistLSBXaGl0ZXNwYWNlIGFyb3VuZCBraW5kIG5hbWVzIGlzIGFsbG93ZWQ7IGNhc2Ug aXMgZm9sZGVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJyAgSU5ERVggICcsJyAg UlVMRSAgJ10pOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIHN0cmlwcyB0aGUgc2NoZW1h IGZyb20gdGhlIHRhcmdldCB0YWJsZSBpdHNlbGYKKy0tIGFuZCBmcm9tIHNhbWUtc2NoZW1hIHNp YmxpbmcgcmVmZXJlbmNlcyAoaW5oZXJpdGFuY2UvcGFydGl0aW9uCistLSBwYXJlbnRzLCBpZGVu dGl0eSBzZXF1ZW5jZXMgaW4gdGhlIHNhbWUgc2NoZW1hKSwgd2hpbGUgY3Jvc3Mtc2NoZW1hCist LSByZWZlcmVuY2VzIGFyZSBrZXB0IHF1YWxpZmllZCBmb3IgY29ycmVjdG5lc3MuCistLQorLS0g QmFyZSBDUkVBVEUgVEFCTEUgZm9yIGFuIG9yZGluYXJ5IHRhYmxlLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKKwor LS0gSU5IRVJJVFMgcGFyZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlm aWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlm aWVkID0+IGZhbHNlKTsKKworLS0gUGFydGl0aW9uIHBhcmVudCBpbiB0aGUgc2FtZSBzY2hlbWEg aXMgZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CisKKy0tIENyb3Nz LXNjaGVtYSBGSyB0YXJnZXQga2VlcHMgcXVhbGlmaWNhdGlvbi4gIFRoZSAncmVmZCcgdGFibGUg aXMgaW4KKy0tIHBndGJsX2RkbF90ZXN0OyBwbGFjZSBhbiBGSyB0YXJnZXQgaW4gYSBkaWZmZXJl bnQgc2NoZW1hIGFuZCB2ZXJpZnkgaXQKKy0tIHN0YXlzIHF1YWxpZmllZCBldmVuIHdpdGggc2No ZW1hX3F1YWxpZmllZD1mYWxzZS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX290aGVyOworQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF9vdGhlci5wYXJlbnQgKGlkIGludCBQUklNQVJZIEtFWSk7CitD UkVBVEUgVEFCTEUgeHNjaGVtYV9mayAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICBw aWQgaW50IFJFRkVSRU5DRVMgcGd0YmxfZGRsX290aGVyLnBhcmVudAorKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgneHNjaGVtYV9mayc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZh bHNlKTsKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHdob3NlIHRhcmdldCBzY2hlbWEgbmFtZSBlbmRz IHdpdGggdGhlIGJhc2Ugc2NoZW1hIG5hbWUKKy0tIChlLmcuICJ4cGd0YmxfZGRsX3Rlc3QiIGVu ZHMgd2l0aCAicGd0YmxfZGRsX3Rlc3QiKS4gIEEgcG9zdC1ob2MgdGV4dAorLS0gc3RyaXAgd291 bGQgbWFuZ2xlICJ4cGd0YmxfZGRsX3Rlc3QucmVmdGJsIiBpbnRvICJ4cmVmdGJsIjsgZGVjaWRp bmcKKy0tIHF1YWxpZmljYXRpb24gYXQgZ2VuZXJhdGlvbiB0aW1lIGF2b2lkcyB0aGUgcHJvYmxl bSBlbnRpcmVseS4KK0NSRUFURSBTQ0hFTUEgeHBndGJsX2RkbF90ZXN0OworQ1JFQVRFIFRBQkxF IHhwZ3RibF9kZGxfdGVzdC5yZWZ0YmwgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFC TEUgc3VmZml4X3NjaGVtYV9mayAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICByZWYg aW50IFJFRkVSRU5DRVMgeHBndGJsX2RkbF90ZXN0LnJlZnRibAorKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnc3VmZml4X3NjaGVtYV9mayc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+ IGZhbHNlKTsKK0RST1AgVEFCTEUgc3VmZml4X3NjaGVtYV9mazsKK0RST1AgU0NIRU1BIHhwZ3Ri bF9kZGxfdGVzdCBDQVNDQURFOworCistLSBJZGVudGl0eSBjb2x1bW4gd2l0aCBhIGN1c3RvbSBz ZXF1ZW5jZSBuYW1lIGluIHRoZSBzYW1lIHNjaGVtYSBpcworLS0gZW1pdHRlZCB1bnF1YWxpZmll ZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3Ms IG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9x dWFsaWZpZWQgPT4gZmFsc2UpOworCistLSBSb3VuZC10cmlwOiB3aXRoIHNjaGVtYV9xdWFsaWZp ZWQ9ZmFsc2UsIGFmdGVyIFNFVCBzZWFyY2hfcGF0aCB0aGUKKy0tIERETCBjYW4gYmUgcmVwbGF5 ZWQgaW50byBhIGRpZmZlcmVudCB0YXJnZXQgc2NoZW1hLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9k ZGxfcmVwbGF5OworRE8gJCQKK0RFQ0xBUkUKKyAgICBzdG10IHRleHQ7CitCRUdJTgorICAgIFNF VCBMT0NBTCBzZWFyY2hfcGF0aCA9IHBndGJsX2RkbF9yZXBsYXk7CisgICAgRk9SIHN0bXQgSU4K KyAgICAgICAgU0VMRUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfdGVz dC5iYXNpYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKSBBUyBsaW5lCisgICAgTE9PUAorICAg ICAgICBFWEVDVVRFIHN0bXQ7CisgICAgRU5EIExPT1A7CitFTkQgJCQ7CitTRUxFQ1QgcmVsbmFt ZXNwYWNlOjpyZWduYW1lc3BhY2U6OnRleHQsIHJlbG5hbWUKK0ZST00gcGdfY2xhc3MgV0hFUkUg b2lkID0gJ3BndGJsX2RkbF9yZXBsYXkuYmFzaWMnOjpyZWdjbGFzczsKK0RST1AgU0NIRU1BIHBn dGJsX2RkbF9yZXBsYXkgQ0FTQ0FERTsKK0RST1AgVEFCTEUgeHNjaGVtYV9mazsKK0RST1AgU0NI RU1BIHBndGJsX2RkbF9vdGhlciBDQVNDQURFOworCistLSBDcm9zcy1zY2hlbWEgcGFydGl0aW9u IGNoaWxkIHdpdGggc2NoZW1hX3F1YWxpZmllZD1mYWxzZTogdGhlIGNoaWxkIG11c3QKKy0tIGNh cnJ5IGl0cyBvd24gc2NoZW1hIHByZWZpeCBzbyB0aGUgb3V0cHV0IGlzIHVuYW1iaWd1b3VzIHJl Z2FyZGxlc3Mgb2YgdGhlCistLSBjYWxsZXIncyBzZWFyY2hfcGF0aC4gIEJlZm9yZSB0aGUgZml4 LCB0aGUgY2hpbGQgd2FzIGVtaXR0ZWQgYXMgdGhlIGJhcmUKKy0tIG5hbWUgInB0X2MiIChsYW5k aW5nIGluIHdoaWNoZXZlciBzY2hlbWEgaXMgZmlyc3QgaW4gc2VhcmNoX3BhdGgpIHdoaWxlCist LSB0aGUgcGFyZW50IHJlZmVyZW5jZSBpbnNpZGUgdGhlIENSRUFURSBUQUJMRSBjYW1lIG91dCBh cyB0aGUgZnVsbHktcXVhbGlmaWVkCistLSAicGd0YmxfZGRsX3BhcnRfcy5wdCIsIG1ha2luZyB0 aGUgRERMIGluY29uc2lzdGVudCBhbmQgdW5yZXBsYXlhYmxlLgorQ1JFQVRFIFNDSEVNQSBwZ3Ri bF9kZGxfcGFydF9zOworQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcGFydF9vdGhlcjsKK0NSRUFU RSBUQUJMRSBwZ3RibF9kZGxfcGFydF9zLnB0IChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBC WSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9wYXJ0X290aGVyLnB0X2MKKyAg ICBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3BhcnRfcy5wdAorICAgIEZPUiBWQUxVRVMgRlJPTSAo MCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9w YXJ0X3MucHQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25l ciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfcXVhbGlm aWVkID0+IGZhbHNlKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9wYXJ0X3MgQ0FTQ0FERTsKK0RS T1AgU0NIRU1BIHBndGJsX2RkbF9wYXJ0X290aGVyIENBU0NBREU7CisKKy0tIExvY2FsbHktZGVj bGFyZWQgQ0hFQ0sgb24gYSBwYXJ0aXRpb24gY2hpbGQgaGFzIG5vIGlubGluZSBjb2x1bW4KKy0t IGxpc3QgdG8gbGl2ZSBpbiAoUEFSVElUSU9OIE9GIGZvcm0pLCBzbyBpdCBtdXN0IGNvbWUgb3V0 IGFzIGEKKy0tIHNlcGFyYXRlIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBzdGF0ZW1l bnQuCitDUkVBVEUgVEFCTEUgcGFydGVkX2NoayAoaWQgaW50LCB2YWwgaW50KSBQQVJUSVRJT04g QlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hrX2NoaWxkIFBBUlRJVElPTiBP RiBwYXJ0ZWRfY2hrCisgICAgKENPTlNUUkFJTlQgY2hrX2lubGluZSBDSEVDSyAodmFsID4gMCkp CisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgncGFydGVkX2Noa19jaGlsZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7 CitEUk9QIFRBQkxFIHBhcnRlZF9jaGs7CisKKy0tIEluaGVyaXRhbmNlIGNoaWxkcmVuIG9mIGEg cGFyZW50IHdpdGggYSBnZW5lcmF0ZWQgY29sdW1uIHNob3VsZCBub3QKKy0tIGVtaXQgYW4gQUxU RVIgQ09MVU1OIC4uLiBTRVQgREVGQVVMVCBmb3IgdGhlIGluaGVyaXRlZCBnZW5lcmF0ZWQKKy0t IGNvbHVtbjogdGhlIEdFTkVSQVRFRCBleHByZXNzaW9uIGNhcnJpZXMgZG93biB0aHJvdWdoIGlu aGVyaXRhbmNlLAorLS0gYW5kIFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQgcmVwbGF5IGFnYWlu c3QgYSBnZW5lcmF0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhcl9nZW4gKAorICAgIGlkIGlu dCwKKyAgICBnICBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaWQgKiAyKSBTVE9SRUQKKyk7CitD UkVBVEUgVEFCTEUgY2hfZ2VuICgpIElOSEVSSVRTIChwYXJfZ2VuKTsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY2hfZ2VuJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RS T1AgVEFCTEUgcGFyX2dlbiBDQVNDQURFOworCistLSBBIHVzZXItbmFtZWQgTk9UIE5VTEwgb24g YSBsb2NhbCBjb2x1bW4gaXMgZW1pdHRlZCBpbmxpbmUgYXMKKy0tICJDT05TVFJBSU5UIG5hbWUg Tk9UIE5VTEwiIHNvIHRoZSBvcmlnaW5hbCBuYW1lIGlzIHByZXNlcnZlZC4gIEFuCistLSBhdXRv LW5hbWVkIE5PVCBOVUxMIG9uIGEgbG9jYWwgY29sdW1uIGlzIGVtaXR0ZWQgYXMgYSBwbGFpbiBp bmxpbmUKKy0tICJOT1QgTlVMTCIgLSBQRyByZS1jcmVhdGVzIHRoZSBhdXRvLW5hbWVkIGNvbnN0 cmFpbnQgd2hlbiBDUkVBVEUKKy0tIFRBQkxFIHJ1bnMsIHNvIHRoZSBjb25zdHJhaW50IGxvb3Ag c2tpcHMgYm90aCBmb3JtcyB0byBhdm9pZCB0aGUKKy0tIHJlZHVuZGFudCAoYW5kIG9uIHRhYmxl LXJlbmFtZSBvciBzZXF1ZW5jZS1jb2xsaXNpb24sIGJyb2tlbikKKy0tIEFMVEVSIFRBQkxFIC4u LiBBREQgQ09OU1RSQUlOVCAuLi4gTk9UIE5VTEwgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxFIG5u X25hbWVkICgKKyAgICBhIGludCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMLAorICAgIGIgaW50 IE5PVCBOVUxMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9uYW1lZCc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIG5uX25hbWVkOworCistLSBS ZW5hbWluZyB0aGUgdGFibGUgYWZ0ZXIgYW4gSURFTlRJVFkgTk9UIE5VTEwgY29sdW1uIHdhcyBk ZWNsYXJlZAorLS0gbGVhdmVzIHRoZSBhdXRvLW5hbWVkIGNvbnN0cmFpbnQgZnJvemVuIGF0IHRo ZSBvcmlnaW5hbCBuYW1lLCB3aGljaAorLS0gbm8gbG9uZ2VyIG1hdGNoZXMgdGhlIHBvc3QtcmVu YW1lICI8dGFibGU+Xzxjb2w+X25vdF9udWxsIiBwYXR0ZXJuLgorLS0gVGhlIGVtaXR0ZWQgRERM IG11c3Qgc3RpbGwgcm91bmQtdHJpcDogdGhlIGNvbnN0cmFpbnQgbG9vcCBtdXN0IG5vdAorLS0g QUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIGEgc2Vjb25kIE5PVCBOVUxMLCBzaW5jZSBD UkVBVEUgVEFCTEUKKy0tIHdpdGggdGhlIGlubGluZSBJREVOVElUWSBhbHJlYWR5IGNyZWF0ZXMg YW4gYXV0by1OT1QtTlVMTCB1bmRlciB0aGUKKy0tIG5ldyB0YWJsZSBuYW1lIGFuZCBQRyBvbmx5 IHBlcm1pdHMgb25lIE5PVCBOVUxMIHBlciBjb2x1bW4uCitDUkVBVEUgVEFCTEUgbm5fcmVuYW1l ZCAoCisgICAgYSBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSBOT1QgTlVMTAorKTsK K0FMVEVSIFRBQkxFIG5uX3JlbmFtZWQgUkVOQU1FIFRPIG5uX3JlbmFtZWQyOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9yZW5hbWVkMic6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSk7CitEUk9QIFRBQkxFIG5uX3JlbmFtZWQyOworCistLSBMb2NhbGx5LWRlY2xhcmVkIE5P VCBOVUxMIG9uIGFuIGluaGVyaXRlZCBjb2x1bW4uICBUaGUgY29sdW1uIGl0c2VsZgorLS0gaXMg b21pdHRlZCBmcm9tIHRoZSBjaGlsZCdzIG93biBjb2x1bW4gbGlzdCAoYXR0aXNsb2NhbD1mYWxz ZSksIHNvIHRoZQorLS0gdXNlci1uYW1lZCBOT1QgTlVMTCBpcyBlbWl0dGVkIGFzIGEgdGFibGUt bGV2ZWwgQ09OU1RSQUlOVCBjbGF1c2UgaW4KKy0tIHRoZSBDUkVBVEUgVEFCTEUgYm9keS4gIFRo aXMgcHJlc2VydmVzIHRoZSBuYW1lIGFuZCBwcmV2ZW50cyBhIGNvbGxpc2lvbgorLS0gd2hlbiB0 aGUgcGFyZW50IGxhdGVyIHByb3BhZ2F0ZXMgaXRzIG93biBOT1QgTlVMTCB0byB0aGUgY2hpbGQu CitDUkVBVEUgVEFCTEUgbm5fcGFyIChhIGludCk7CitDUkVBVEUgVEFCTEUgbm5fY2ggKGIgaW50 KSBJTkhFUklUUyAobm5fcGFyKTsKK0FMVEVSIFRBQkxFIG5uX2NoIEFERCBDT05TVFJBSU5UIG15 X25uIE5PVCBOVUxMIGE7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX2NoJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlKTsKK0RST1AgVEFCTEUgbm5fcGFyIENBU0NBREU7CisK Ky0tIFBhcnRpdGlvbiBjaGlsZCB3aGVyZSB0aGUgcGFyZW50J3MgZGVmYXVsdCB3YXMgZXhwbGlj aXRseSBkcm9wcGVkLgorLS0gQWZ0ZXIgUEFSVElUSU9OIE9GIHRoZSBwYXJlbnQgZGVmYXVsdCBp cyByZS1hcHBsaWVkOyBEUk9QIERFRkFVTFQKKy0tIG11c3QgYmUgZW1pdHRlZCB0byByZXN0b3Jl IHRoZSBkcm9wcGVkIHN0YXRlLgorQ1JFQVRFIFRBQkxFIGRyb3BfZGVmX3BhciAoYSBpbnQgREVG QVVMVCA5OSkgUEFSVElUSU9OIEJZIExJU1QgKGEpOworQ1JFQVRFIFRBQkxFIGRyb3BfZGVmX2No aWxkIFBBUlRJVElPTiBPRiBkcm9wX2RlZl9wYXIgRk9SIFZBTFVFUyBJTiAoMSk7CitBTFRFUiBU QUJMRSBPTkxZIGRyb3BfZGVmX2NoaWxkIEFMVEVSIENPTFVNTiBhIERST1AgREVGQVVMVDsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZHJvcF9kZWZfY2hpbGQnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UpOworRFJPUCBUQUJMRSBkcm9wX2RlZl9wYXI7CisKKy0tIE5hbWVkIE5P VCBOVUxMIG9uIGEgcGFydGl0aW9uIGNoaWxkIHRoYXQgd2FzIGF0dGFjaGVkIGZyb20gYSBwcmUt ZXhpc3RpbmcKKy0tIHRhYmxlLiAgVGhlIG5hbWUgbXVzdCBiZSBwcmVzZXJ2ZWQgdmlhIHRoZSBQ QVJUSVRJT04gT0YgY29sdW1uIHNwZWMgbGlzdAorLS0gc28gdGhlIGNoaWxkIGtlZXBzIGl0cyBs b2NhbCBuYW1lIHJhdGhlciB0aGFuIGluaGVyaXRpbmcgdGhlIHBhcmVudCdzCistLSBhdXRvLWdl bmVyYXRlZCBuYW1lLgorQ1JFQVRFIFRBQkxFIG5uX3BhcnRfcGFyIChhIGludCBOT1QgTlVMTCkg UEFSVElUSU9OIEJZIExJU1QgKGEpOworQ1JFQVRFIFRBQkxFIG5uX3BhcnRfY2ggKGEgaW50IENP TlNUUkFJTlQgbm5fcGFydF9jaF9ubiBOT1QgTlVMTCk7CitBTFRFUiBUQUJMRSBubl9wYXJ0X3Bh ciBBVFRBQ0ggUEFSVElUSU9OIG5uX3BhcnRfY2ggRk9SIFZBTFVFUyBJTiAoMSk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX3BhcnRfY2gnOjpyZWdjbGFzcywgb3duZXIgPT4g ZmFsc2UpOworRFJPUCBUQUJMRSBubl9wYXJ0X3BhcjsKKworLS0gTmFtZWQgTk9UIE5VTEwgaW4g YW4gSU5IRVJJVFMgY2hpbGQgd2hlcmUgdGhlIHBhcmVudCBhbHNvIGdldHMgYSBOT1QgTlVMTAor LS0gbGF0ZXI6IHRoZSBjaGlsZCBuYW1lIG11c3Qgc3Vydml2ZSB2aWEgdGhlIGlubGluZSBDT05T VFJBSU5UIGNsYXVzZSBzbyBpdAorLS0gZG9lcyBub3QgY29sbGlkZSB3aXRoIHRoZSBwcm9wYWdh dGVkIHBhcmVudCBOT1QgTlVMTC4KK0NSRUFURSBUQUJMRSBubl9pbmhfcGFyIChhIGludCk7CitD UkVBVEUgVEFCTEUgbm5faW5oX2NoIChiIGludCkgSU5IRVJJVFMgKG5uX2luaF9wYXIpOworQUxU RVIgVEFCTEUgbm5faW5oX2NoIEFERCBDT05TVFJBSU5UIG5uX2luaF9jaF9ubiBOT1QgTlVMTCBh OworQUxURVIgVEFCTEUgbm5faW5oX3BhciBBREQgQ09OU1RSQUlOVCBubl9pbmhfcGFyX25uIE5P VCBOVUxMIGE7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX2luaF9jaCc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIG5uX2luaF9wYXIgQ0FTQ0FERTsK KworLS0gSW52YWxpZCBpbmRleCAobGVmdCBieSBhIGZhaWxlZCBDUkVBVEUgSU5ERVggQ09OQ1VS UkVOVExZKSBtdXN0IGJlIHNraXBwZWQuCitDUkVBVEUgVEFCTEUgaW52X2lkeCAoeCBpbnQpOwor SU5TRVJUIElOVE8gaW52X2lkeCBWQUxVRVMgKDEpLCAoMSk7CitDUkVBVEUgVU5JUVVFIElOREVY IENPTkNVUlJFTlRMWSBpbnZfaWR4X3VpZHggT04gaW52X2lkeCAoeCk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2ludl9pZHgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOwor RFJPUCBUQUJMRSBpbnZfaWR4OworCistLSBDTFVTVEVSIE9OOiBlbWl0dGVkIGFmdGVyIHRoZSBp bmRleCBpcyBjcmVhdGVkLgorQ1JFQVRFIFRBQkxFIGNsdXN0ZXJfdGJsIChpZCBpbnQsIHZhbCB0 ZXh0KTsKK0NSRUFURSBJTkRFWCBjbHVzdGVyX3RibF9pZCBPTiBjbHVzdGVyX3RibCAoaWQpOwor Q0xVU1RFUiBjbHVzdGVyX3RibCBVU0lORyBjbHVzdGVyX3RibF9pZDsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY2x1c3Rlcl90YmwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2Up OworRFJPUCBUQUJMRSBjbHVzdGVyX3RibDsKKworLS0gRGlzYWJsZWQgcnVsZTogRElTQUJMRSBS VUxFIG11c3QgYmUgZW1pdHRlZCBhZnRlciBDUkVBVEUgUlVMRS4KK0NSRUFURSBUQUJMRSBkaXNh YmxlZF9ydWxlX3RibCAoaWQgaW50KTsKK0NSRUFURSBSVUxFIGRyX3J1bGUgQVMgT04gSU5TRVJU IFRPIGRpc2FibGVkX3J1bGVfdGJsIERPIE5PVEhJTkc7CitBTFRFUiBUQUJMRSBkaXNhYmxlZF9y dWxlX3RibCBESVNBQkxFIFJVTEUgZHJfcnVsZTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnZGlzYWJsZWRfcnVsZV90YmwnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UpOworRFJP UCBUQUJMRSBkaXNhYmxlZF9ydWxlX3RibDsKKworLS0gSW5kZXggc3RhdGlzdGljcyB0YXJnZXQg b24gYW4gZXhwcmVzc2lvbiBpbmRleCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgaWR4X3N0YXRfdGJs IChjMSBpbnQpOworQ1JFQVRFIElOREVYIGlkeF9zdGF0X2lkeCBPTiBpZHhfc3RhdF90YmwgKChj MSArIDEpKTsKK0FMVEVSIElOREVYIGlkeF9zdGF0X2lkeCBBTFRFUiBDT0xVTU4gMSBTRVQgU1RB VElTVElDUyA0MDA7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeF9zdGF0X3Ri bCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSk7CitEUk9QIFRBQkxFIGlkeF9zdGF0X3RibDsK KworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IGRyb3AgdGhlIHNjaGVtYSBwcmVmaXgg ZnJvbSBERUZBVUxUCistLSBleHByZXNzaW9ucyBhbmQgaW5saW5lIENIRUNLIGJvZGllcyB0aGF0 IHJlZmVyZW5jZSBzYW1lLXNjaGVtYQorLS0gb2JqZWN0cyAoc2VxdWVuY2UgdmlhIG5leHR2YWws IGZ1bmN0aW9uIHZpYSBkaXJlY3QgY2FsbCkuICBUaGlzCistLSByZWxpZXMgb24gdGhlIGRlcGFy c2VyIHJlc3BlY3RpbmcgdGhlIG5hcnJvd2VkIHNlYXJjaF9wYXRoIHJhdGhlcgorLS0gdGhhbiBv biBzdWJzdHJpbmcgc3RyaXBwaW5nLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfeHJlZjsKK0NS RUFURSBTRVFVRU5DRSBwZ3RibF9kZGxfeHJlZi5teXNlcTsKK0NSRUFURSBGVU5DVElPTiBwZ3Ri bF9kZGxfeHJlZi5mKGludCkgUkVUVVJOUyBpbnQgTEFOR1VBR0Ugc3FsIElNTVVUQUJMRQorICAg IEFTICdTRUxFQ1QgJDEnOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF94cmVmLnQgKAorICAgIGlk ICBpbnQgREVGQVVMVCBuZXh0dmFsKCdwZ3RibF9kZGxfeHJlZi5teXNlcScpLAorICAgIHZhbCBp bnQsCisgICAgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKHBndGJsX2RkbF94cmVmLmYodmFsKSA+IDAp CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfeHJlZi50Jzo6 cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2Us CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxz ZSk7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfeHJlZiBDQVNDQURFOworCistLSBzY2hlbWFfcXVh bGlmaWVkPWZhbHNlIG11c3QgTk9UIGNvcnJ1cHQgc3RyaW5nIGxpdGVyYWxzIHdob3NlCistLSBj b250ZW50cyBoYXBwZW4gdG8gY29udGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBk b3QuICBTdHJpbmcKKy0tIGxpdGVyYWwgdGV4dCBpcyBvdXRwdXQgdmVyYmF0aW0gYnkgdGhlIGRl cGFyc2VyIGFuZCBpcyB1bmFmZmVjdGVkIGJ5CistLSBzZWFyY2hfcGF0aCBuYXJyb3dpbmcuCitD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF9zdHI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3N0ci5w IChpZCBpbnQsIG5vdGUgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3N0ci5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3N0ci5wCisgICAgKENP TlNUUkFJTlQgY2hrIENIRUNLIChub3RlIDw+ICdwZ3RibF9kZGxfc3RyLnNlY3JldCcpKQorICAg IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3BndGJsX2RkbF9zdHIucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzY2hlbWFfcXVhbGlmaWVkID0+IGZhbHNlKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9zdHIg Q0FTQ0FERTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5PVCBjb3JydXB0IGRv dWJsZS1xdW90ZWQgaWRlbnRpZmllcnMKKy0tIHdob3NlIGNvbnRlbnRzIGhhcHBlbiB0byBjb250 YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRvdAorLS0gKGZvciBleGFtcGxlIGEg Y29sdW1uIGxpdGVyYWxseSBuYW1lZCAiPHNjaGVtYT4ud2VpcmQiIGluc2lkZSB0aGF0CistLSBz Y2hlbWEpLiAgVGhlIG1lY2hhbmlzbSBpcyBwdXJlbHkgc2VhcmNoX3BhdGggbmFycm93aW5nOiB0 aGUgZGVwYXJzZXIKKy0tIG91dHB1dHMgYXR0cmlidXRlIG5hbWVzIHZlcmJhdGltIGZyb20gcGdf YXR0cmlidXRlLCBzbyB0aGUgcXVvdGVkCistLSBpZGVudGlmaWVyIGNvbnRlbnQgaXMgbmV2ZXIg ZXhhbWluZWQgZm9yIHNjaGVtYSBwcmVmaXhlcy4gIFRoaXMgaG9sZHMKKy0tIGV2ZW4gd2hlbiB0 aGUgc2NoZW1hIG5hbWUgaXMgYSBzaW5nbGUgbGV0dGVyLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9k ZGxfcWlkOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xaWQucCAoaWQgaW50LCAicGd0YmxfZGRs X3FpZC53ZWlyZCIgaW50KQorICAgIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF9xaWQucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9xaWQucAorICAgIChD T05TVFJBSU5UIGNoayBDSEVDSyAoInBndGJsX2RkbF9xaWQud2VpcmQiID4gMCkpCisgICAgRk9S IFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGd0YmxfZGRsX3FpZC5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj aGVtYV9xdWFsaWZpZWQgPT4gZmFsc2UpOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3FpZCBDQVND QURFOworLS0gU2FtZSB3aXRoIGEgc2hvcnQgKHNpbmdsZS1sZXR0ZXIpIHNjaGVtYSBuYW1lIHRv IGNvbmZpcm0gdGhlcmUgaXMgbm8KKy0tIG1pbmltdW0tbGVuZ3RoIGFzc3VtcHRpb24gaW4gdGhl IHN0cmlwcGluZyBwYXRoLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcTE7CitDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3ExLnAgKGlkIGludCwgInBndGJsX2RkbF9xMS53ZWlyZCIgaW50KQorICAg IFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xMS5wYyBQ QVJUSVRJT04gT0YgcGd0YmxfZGRsX3ExLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKCJw Z3RibF9kZGxfcTEud2VpcmQiID4gMCkpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAw KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3ExLnBjJzo6cmVn Y2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7 CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcTEgQ0FTQ0FERTsKKworLS0gc2NoZW1hX3F1YWxpZmll ZD1mYWxzZSB3aGVuIHRoZSBiYXNlIHNjaGVtYSBuYW1lIGl0c2VsZiByZXF1aXJlcworLS0gcXVv dGluZyAoaXRzIHByZWZpeCBzdGFydHMgd2l0aCAiKS4gIEJvdGggZm9ybXMgb2YgdGhlIHByZWZp eCAtCistLSBiYXJlLWxvd2VyY2FzZSBhbmQgcXVvdGVkIC0gbXVzdCBiZSBzdHJpcHBlZCBmcm9t IG91dGVyCistLSBBTFRFUiBUQUJMRSAvIE9OIC8gQ1JFQVRFIElOREVYIHByZWZpeGVzLCB3aGls ZSBpbm5lciBxdW90ZWQKKy0tIGlkZW50aWZpZXJzIHRoYXQgaGFwcGVuIHRvIGJlZ2luIHRoZSBz YW1lIHdheSBtdXN0IGJlIHByZXNlcnZlZC4KK0NSRUFURSBTQ0hFTUEgIlBnVGJsLURkbC1RIjsK K0NSRUFURSBUQUJMRSAiUGdUYmwtRGRsLVEiLiJUIiAoaWQgaW50LCB2YWwgaW50LAorICAgIENP TlNUUkFJTlQgY2hrIENIRUNLICh2YWwgPiAwKSk7CitDUkVBVEUgSU5ERVggIlRfdmFsX2lkeCIg T04gIlBnVGJsLURkbC1RIi4iVCIgKHZhbCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJyJQZ1RibC1EZGwtUSIuIlQiJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2NoZW1hX3F1YWxpZmllZCA9PiBmYWxzZSk7CitEUk9QIFNDSEVNQSAiUGdUYmwtRGRsLVEiIENB U0NBREU7CisKKy0tIEVycm9yOiBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUu CitDUkVBVEUgVklFVyB2IEFTIFNFTEVDVCAxIEFTIHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3YnOjpyZWdjbGFzcyk7CisKK0NSRUFURSBTRVFVRU5DRSBzOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzJzo6cmVnY2xhc3MpOworCistLSBOVUxMIGFyZ3VtZW50 IHJldHVybnMgbm8gcm93cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbChOVUxMKTsK KworLS0gUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB2YWxpZGF0aW9uOiBpZiB0aGUgcmVm ZXJlbmNlZCBpbmRleAorLS0gd291bGQgbm90IGJlIGVtaXR0ZWQgKGJlY2F1c2UgaXRzIHNvdXJj ZSBraW5kIGlzIHN1cHByZXNzZWQpIGJ1dAorLS0gcmVwbGljYV9pZGVudGl0eSBpdHNlbGYgd291 bGQgYmUsIHRoZSBmdW5jdGlvbiByYWlzZXMgYW4gZXJyb3Igc28KKy0tIHRoZSBlbWl0dGVkIERE TCBuZXZlciBkYW5nbGVzLiAgRXhlcmNpc2UgYWxsIHRocmVlIGNvbnN0cmFpbnQtYmFja2VkCist LSBmb3JtcyAoUEssIFVOSVFVRSwgRVhDTFVTSU9OKSBhbmQgYSBiYXJlIENSRUFURSBVTklRVUUg SU5ERVgsIGluCistLSBib3RoIHRoZSBleGNlcHQtbGlzdCBhbmQgb25seS1saXN0IHNoYXBlcy4K Ky0tCistLSBQSy1iYWNrZWQ6IGV4Y2VwdF9raW5kcz1wcmltYXJ5X2tleSB3aXRob3V0IGV4Y2Vw dF9raW5kcz1yZXBsaWNhX2lkZW50aXR5LgorQ1JFQVRFIFRBQkxFIHJpX3BrX2V4Y2wgKGEgaW50 IFBSSU1BUlkgS0VZKTsKK0FMVEVSIFRBQkxFIHJpX3BrX2V4Y2wgUkVQTElDQSBJREVOVElUWSBV U0lORyBJTkRFWCByaV9wa19leGNsX3BrZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3JpX3BrX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9 PiBBUlJBWVsncHJpbWFyeV9rZXknXSk7CistLSBTYW1lIGNhbGwgYnV0IGFsc28gZXhjbHVkaW5n IHJlcGxpY2FfaWRlbnRpdHkgc3VjY2VlZHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3JpX3BrX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9 PiBBUlJBWVsncHJpbWFyeV9rZXknLCdyZXBsaWNhX2lkZW50aXR5J10pOworRFJPUCBUQUJMRSBy aV9wa19leGNsOworCistLSBVTklRVUUtY29uc3RyYWludC1iYWNrZWQgcmVwbGljYSBpZGVudGl0 eSBpbmRleC4KK0NSRUFURSBUQUJMRSByaV91bmlxX2V4Y2wgKGEgaW50IE5PVCBOVUxMIFVOSVFV RSwgYiBpbnQpOworQUxURVIgVEFCTEUgcmlfdW5pcV9leGNsIFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggcmlfdW5pcV9leGNsX2Ffa2V5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdyaV91bmlxX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsndW5pcXVlJ10pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdy aV91bmlxX2V4Y2wnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBB UlJBWVsndW5pcXVlJywncmVwbGljYV9pZGVudGl0eSddKTsKK0RST1AgVEFCTEUgcmlfdW5pcV9l eGNsOworCistLSBCYXJlIENSRUFURSBVTklRVUUgSU5ERVggKG5vIGJhY2tpbmcgY29uc3RyYWlu dCkgdXNlZCBhcyBSRVBMSUNBCistLSBJREVOVElUWTogdGhlIGluZGV4IGlzIGVtaXR0ZWQgYnkg dGhlICJpbmRleCIga2luZCwgc28gZXhjbHVkaW5nCistLSAiaW5kZXgiIHdpdGhvdXQgYWxzbyBl eGNsdWRpbmcgInJlcGxpY2FfaWRlbnRpdHkiIG11c3QgZXJyb3IuCitDUkVBVEUgVEFCTEUgcmlf aWR4X2V4Y2wgKGEgaW50IE5PVCBOVUxMLCBiIGludCk7CitDUkVBVEUgVU5JUVVFIElOREVYIHJp X2lkeF9leGNsX2FfdW5pcSBPTiByaV9pZHhfZXhjbCAoYSk7CitBTFRFUiBUQUJMRSByaV9pZHhf ZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX2lkeF9leGNsX2FfdW5pcTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4X2V4Y2wnOjpyZWdjbGFzcywgb3du ZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeF9leGNsJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ2luZGV4JywncmVwbGljYV9pZGVudGl0eSddKTsK K0RST1AgVEFCTEUgcmlfaWR4X2V4Y2w7CisKKy0tIEluY2x1ZGUtc2lkZSBhbmFsb2c6IG9ubHlf a2luZHM9cmVwbGljYV9pZGVudGl0eSBtdXN0IGluY2x1ZGUgdGhlIGtpbmQKKy0tIHRoYXQgZW1p dHMgdGhlIGluZGV4LCBvciB0aGUgZnVuY3Rpb24gZXJyb3JzLgorQ1JFQVRFIFRBQkxFIHJpX29u bHkgKGEgaW50IE5PVCBOVUxMIFVOSVFVRSwgYiBpbnQpOworQUxURVIgVEFCTEUgcmlfb25seSBS RVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX29ubHlfYV9rZXk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3JpX29ubHknOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9u bHlfa2luZHMgPT4gQVJSQVlbJ3JlcGxpY2FfaWRlbnRpdHknXSk7CistLSBJbmNsdWRpbmcgYm90 aCBraW5kcyBzdWNjZWVkcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfb25s eSc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndW5pcXVl JywncmVwbGljYV9pZGVudGl0eSddKTsKK0RST1AgVEFCTEUgcmlfb25seTsKKworLS0gUGVyLWtp bmQgb25seV9raW5kcyAvIGV4Y2VwdF9raW5kcyBjb3ZlcmFnZS4gIEZvciBlYWNoIGtpbmQgaW4g dGhlIHZvY2FidWxhcnksCistLSB2ZXJpZnkgdGhhdCBvbmx5X2tpbmRzPUsgZW1pdHMganVzdCB0 aGF0IGtpbmQncyBvdXRwdXQgYW5kIHRoYXQgZXhjZXB0X2tpbmRzPUsKKy0tIG9taXRzIGp1c3Qg dGhhdCBraW5kJ3Mgb3V0cHV0LiAgS2luZHMgd2l0aCBubyBmaXh0dXJlIGFib3ZlICh0cmlnZ2Vy LAorLS0gcG9saWN5KSBhcmUgc3RpbGwgcmVjb2duaXplZCBidXQgY3VycmVudGx5IGVtaXQgbm90 aGluZzsgb25seV9raW5kcz1LCistLSByZXR1cm5zIHplcm8gcm93cyBmb3IgdGhlbS4gIEZpeHR1 cmVzIHVzZWQ6CistLSAgIGlkeGQ6IFBLICsgdHdvIHNlY29uZGFyeSBDUkVBVEUgSU5ERVgKKy0t ICAgY29uczogUEsgKyBVTklRVUUgKyBDSEVDSyArIEZLIChjb25zdHJhaW50LWJhY2tlZCkKKy0t ICAgcnQ6ICAgQ1JFQVRFIFJVTEUKKy0tICAgc3R4OiAgQ1JFQVRFIFNUQVRJU1RJQ1MKKy0tICAg cmxzOiAgRU5BQkxFL0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWQorLS0gICByaV9mdWxsOiBSRVBM SUNBIElERU5USVRZIEZVTEwgKG5vIHNvdXJjZS1raW5kIGRlcGVuZGVuY3kpCitDUkVBVEUgVEFC TEUgZXhjbF9maXggKHJuZyBpbnQ0cmFuZ2UsCisgICAgRVhDTFVERSBVU0lORyBnaXN0IChybmcg V0lUSCAmJikpOworCistLSBvbmx5X2tpbmRzPUs6IGVtaXQgb25seSBraW5kIEsncyBzdGF0ZW1l bnRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93 bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWydpbmRleCddKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4g QVJSQVlbJ3VuaXF1ZSddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZXhjbF9m aXgnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2V4Y2x1 c2lvbiddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25s eV9raW5kcyA9PiBBUlJBWVsnc3RhdGlzdGljcyddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncmxzJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5X2tpbmRzID0+IEFS UkFZWydybHMnXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3JlcGxpY2FfaWRl bnRpdHknXSk7CistLSB0cmlnZ2VyIC8gcG9saWN5IGFyZSBub3QgeWV0IGltcGxlbWVudGVkOyB1 bmNvbW1lbnQgd2hlbgorLS0gcGdfZ2V0X3RyaWdnZXJfZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwg aGVscGVycyBsYW5kLgorLS0gU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6 OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsndHJpZ2dlcidd KTsKKy0tIFNFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywg b3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3BvbGljeSddKTsKKworLS0gZXhj ZXB0X2tpbmRzPUs6IGVtaXQgZXZlcnl0aGluZyBleGNlcHQga2luZCBLJ3Mgc3RhdGVtZW50cy4g IFBLL1VOSVFVRS8KKy0tIElOREVYIGFyZSBleGVyY2lzZWQgb24gdGFibGVzIHdpdGhvdXQgUkVQ TElDQSBJREVOVElUWSBVU0lORyBJTkRFWAorLS0gc28gdGhlIHZhbGlkYXRpb24gZG9lcyBub3Qg dHJpcC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCBv d25lciA9PiBmYWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleSddKTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCBvd25lciA9PiBm YWxzZSwgZXhjZXB0X2tpbmRzID0+IEFSUkFZWyd1bmlxdWUnXSk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9r aW5kcyA9PiBBUlJBWVsnY2hlY2snXSk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2V4Y2xfZml4Jzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJS QVlbJ2V4Y2x1c2lvbiddKTsKKy0tIHRyaWdnZXIgLyBwb2xpY3kgYXJlIG5vdCB5ZXQgaW1wbGVt ZW50ZWQ7IHVuY29tbWVudCB3aGVuCistLSBwZ19nZXRfdHJpZ2dlcl9kZGwgLyBwZ19nZXRfcG9s aWN5X2RkbCBoZWxwZXJzIGxhbmQuCistLSBTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2Jhc2ljJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlb J3RyaWdnZXInXSk7CistLSBTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6 cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBleGNlcHRfa2luZHMgPT4gQVJSQVlbJ3BvbGljeSdd KTsKKy0tIGV4Y2VwdF9raW5kcz10YWJsZSBzdXBwcmVzc2VzIHRoZSBDUkVBVEUgVEFCTEUgKyBP V05FUiArIGNoaWxkLWRlZmF1bHQKKy0tIFNFVCBERUZBVUxUICsgYXR0b3B0aW9ucyBwYXNzZXMs IGxlYXZpbmcgb25seSB0aGUgc3ViLW9iamVjdCBwYXNzZXMuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIGV4Y2VwdF9raW5k cyA9PiBBUlJBWVsndGFibGUnXSk7CisKKy0tIE11bHRpLWtpbmQgY29tcG9zaXRpb25zLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsIG93bmVyID0+IGZh bHNlLCBvbmx5X2tpbmRzID0+IEFSUkFZWyd0YWJsZScsJ2luZGV4J10pOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsIG93bmVyID0+IGZhbHNlLCBvbmx5 X2tpbmRzID0+IEFSUkFZWydwcmltYXJ5X2tleScsJ2ZvcmVpZ25fa2V5J10pOworLS0gRHVwbGlj YXRlIGVudHJpZXMgaW4gdGhlIGxpc3QgYXJlIHNpbGVudGx5IGRlLWR1cGxpY2F0ZWQgYnkgdGhl CistLSBCaXRtYXBzZXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ2luZGV4JywnaW5k ZXgnXSk7CisKK0RST1AgVEFCTEUgZXhjbF9maXg7CisKKy0tIEtpbmQtZmlsdGVyIHRlc3RzIG9u IHBhcnRpdGlvbmVkIHRhYmxlcyB3aXRoIGluZGV4ZXMuCistLQorLS0gb25seV9raW5kcz1pbmRl eCBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlOiBvbmx5IHRoZSByb290IENSRUFURSBJTkRFWCBpcwor LS0gZW1pdHRlZDsgbm8gQ1JFQVRFIFRBQkxFLCBubyBwYXJ0aXRpb24gY2hpbGRyZW4gKEtJTkRf UEFSVElUSU9OIGFic2VudCkuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRl ZF9taXhlZCc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvbmx5X2tpbmRzID0+IEFSUkFZWydpbmRleCddKTsKKworLS0gZXhjZXB0X2tp bmRzPWluZGV4IG9uIGEgcGFydGl0aW9uZWQgdGFibGU6IENSRUFURSBUQUJMRSBmb3IgdGhlIHBh cmVudAorLS0gYW5kIGFsbCBjaGlsZHJlbiBhcmUgZW1pdHRlZDsgbm8gaW5kZXggc3RhdGVtZW50 cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX21peGVkJzo6cmVnY2xh c3MsIG93bmVyID0+IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2Vw dF9raW5kcyA9PiBBUlJBWVsnaW5kZXgnXSk7CisKKy0tIG9ubHlfa2luZHM9cHJpbWFyeV9rZXkg b24gYSBwYXJ0aXRpb25lZCB0YWJsZTogb25seSB0aGUgQUxURVIgVEFCTEUgQURECistLSBDT05T VFJBSU5UIFBLIG9uIHRoZSBwYXJlbnQ7IHRoZSBjaGlsZCdzIGluaGVyaXRlZCBQSyAoY29uaXNs b2NhbD1mYWxzZSkKKy0tIGlzIHNraXBwZWQ7IG5vIENSRUFURSBUQUJMRSwgbm8gcGFydGl0aW9u IGNoaWxkcmVuLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcGsnOjpy ZWdjbGFzcywgb3duZXIgPT4gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b25seV9raW5kcyA9PiBBUlJBWVsncHJpbWFyeV9rZXknXSk7CisKKy0tIG9ubHlfa2luZHM9SyBv biBhIHRhYmxlIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgSyBvZiB0aGF0IGtpbmQgaXMgYSB2YWxp ZAorLS0gZmlsdGVyIGFuZCByZXR1cm5zIHplcm8gcm93cy4gIFRlc3RlZCBwcmV2aW91c2x5IHdp dGggZm9yZWlnbl9rZXkKKy0tIG9uICdyZWZkJzsgaGVyZSBhbHNvIHJ1bGUsIHN0YXRpc3RpY3Ms IHJscywgcmVwbGljYV9pZGVudGl0eSwgYW5kCistLSBleGNsdXNpb24gb24gJ2Jhc2ljJyAod2hp Y2ggaGFzIG9ubHkgUEsgKyBjb2x1bW5zKS4KK1NFTEVDVCBjb3VudCgqKSBBUyBydWxlX3Jvd3MK KyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxz ZSwgb25seV9raW5kcyA9PiBBUlJBWVsncnVsZSddKTsKK1NFTEVDVCBjb3VudCgqKSBBUyBzdGF0 c19yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgb3duZXIg PT4gZmFsc2UsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ3N0YXRpc3RpY3MnXSk7CitTRUxFQ1QgY291 bnQoKikgQVMgcmxzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2Ns YXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncmxzJ10pOworU0VMRUNU IGNvdW50KCopIEFTIHJpX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJl Z2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBBUlJBWVsncmVwbGljYV9pZGVu dGl0eSddKTsKK1NFTEVDVCBjb3VudCgqKSBBUyBleGNsX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvd25lciA9PiBmYWxzZSwgb25seV9raW5kcyA9PiBB UlJBWVsnZXhjbHVzaW9uJ10pOworCistLSBJbnB1dC12YWxpZGF0aW9uIGVkZ2UgY2FzZXMgZm9y IHRoZSBraW5kIGFycmF5LiAgQWxsCistLSBvZiB0aGVzZSByYWlzZSBhbiBlcnJvcjsgdGhlIGZ1 bmN0aW9uIG5ldmVyIHJlYWNoZXMgcmVsYXRpb24gb3Blbi4KKy0tIEVtcHR5IGFycmF5OgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBvbmx5X2tpbmRz ID0+IEFSUkFZW106OnRleHRbXSk7CistLSBOVUxMIGVsZW1lbnQ6CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG9ubHlfa2luZHMgPT4gQVJSQVlbTlVM TDo6dGV4dF0pOworLS0gVW5yZWNvZ25pemVkIGtpbmQ6CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsIG9ubHlfa2luZHMgPT4gQVJSQVlbJ25vX3N1Y2hf a2luZCddKTsKKy0tIFNhbWUga2luZCBzcGVjaWZpZWQgdGhyb3VnaCBib3RoIHBhcmFtZXRlcnMg aXMgc3RpbGwgbXV0ZXgtcmVqZWN0ZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seV9r aW5kcyA9PiBBUlJBWVsnaW5kZXgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl eGNlcHRfa2luZHMgPT4gQVJSQVlbJ3J1bGUnXSk7CisKKy0tIFJvdW5kLXRyaXAgdmVyaWZpY2F0 aW9uLiAgRm9yIGV2ZXJ5IHRlc3QgdGFibGUsIGNhcHR1cmUgdGhlIERETCB0aGUKKy0tIGZ1bmN0 aW9uIGVtaXRzLCBkcm9wIHRoZSBzY2hlbWEsIHJlcGxheSBlYWNoIHRhYmxlJ3MgRERMIGluCist LSBkZXBlbmRlbmN5IG9yZGVyLCBhbmQgY29uZmlybSB0aGF0IHBnX2dldF90YWJsZV9kZGwgb24g dGhlIHJlY3JlYXRlZAorLS0gcmVsYXRpb24gbWF0Y2hlcyB0aGUgb3JpZ2luYWwgbGluZS1mb3It bGluZS4gIFRoZSBmaW5hbCBTRUxFQ1QgbXVzdAorLS0gcmV0dXJuIHplcm8gcm93cy4KK0NSRUFU RSBURU1QIFRBQkxFIHBndGJsX2RkbF9ydF9vcmlnIChuYW1lIHRleHQsIG9yZCBpbnQsIGxpbmUg dGV4dCk7CitJTlNFUlQgSU5UTyBwZ3RibF9kZGxfcnRfb3JpZworU0VMRUNUIHQubmFtZSwgby5v cmQsIG8ubGluZQorRlJPTSAoVkFMVUVTCisgICAgICAgICgnYmFzaWMnKSwgKCdpZF9jb2xzJyks ICgnaWRfY3VzdG9tJyksICgnZ2VuX2NvbHMnKSwgKCdnZW5fdmlydHVhbCcpLCAoJ3N0b3JhZ2Vf Y29scycpLAorICAgICAgICAoJ3JlZmQnKSwgKCdjb25zJyksICgnbnVsbHNfbmQnKSwgKCdpZHhf aW5jJyksCisgICAgICAgICgnZmtfYWN0c190Z3QnKSwgKCdma19hY3RzJyksICgnbm90ZW5mX3Rn dCcpLCAoJ25vdGVuZicpLCAoJ3NlbGZfcmVmJyksICgndGVtcG9yYWxfcGsnKSwKKyAgICAgICAg KCdpZHhkJyksCisgICAgICAgICgncGFyJyksICgnY2gnKSwgKCdhdHRvcHQnKSwKKyAgICAgICAg KCdwYXJ0ZWRfcmFuZ2UnKSwgKCdwYXJ0ZWRfcmFuZ2VfMScpLCAoJ3BhcnRlZF9yYW5nZV9kZWYn KSwKKyAgICAgICAgKCdwYXJ0ZWRfaGFzaCcpLCAoJ3BhcnRlZF9oYXNoXzAnKSwKKyAgICAgICAg KCdwYXJ0ZWRfbGlzdCcpLAorICAgICAgICAoJ3BhcnRlZF9pZHgnKSwgKCdwYXJ0ZWRfaWR4X2En KSwKKyAgICAgICAgKCdwYXJ0ZWRfcGxhaW4nKSwgKCdwYXJ0ZWRfcGxhaW5fYScpLAorICAgICAg ICAoJ3BhcnRlZF9waycpLCAoJ3BhcnRlZF9wa19hJyksCisgICAgICAgICgncGFydGVkX3N1Yicp LCAoJ3BhcnRlZF9zdWJfYScpLCAoJ3BhcnRlZF9zdWJfYTEnKSwKKyAgICAgICAgKCdwYXJ0ZWRf Y2hpbGRfaWR4JyksICgncGFydGVkX2NoaWxkX2lkeF9hJyksCisgICAgICAgICgncGFydGVkX21p eGVkJyksICgncGFydGVkX21peGVkX2EnKSwKKyAgICAgICAgKCdwYXJ0ZWRfZmtfdGd0JyksICgn cGFydGVkX2ZrJyksICgncGFydGVkX2ZrX2EnKSwKKyAgICAgICAgKCdydF9sb2cnKSwgKCdydCcp LAorICAgICAgICAoJ3N0eCcpLCAoJ3JscycpLCAoJ3JpX2Z1bGwnKSwgKCdyaV9pZHgnKSwgKCd1 bm8nKQorICAgICApIEFTIHQobmFtZSksCisgICAgIExBVEVSQUwgcGdfZ2V0X3RhYmxlX2RkbCgo J3BndGJsX2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvd25lciA9PiBmYWxzZSkgV0lUSCBPUkRJTkFMSVRZIG8obGluZSwgb3Jk KTsKKworRE8gJCQKK0RFQ0xBUkUKKyAgICB0YWJsZXMgQ09OU1RBTlQgdGV4dFtdIDo9IEFSUkFZ WworICAgICAgICAnYmFzaWMnLCAnaWRfY29scycsICdpZF9jdXN0b20nLCAnZ2VuX2NvbHMnLCAn Z2VuX3ZpcnR1YWwnLCAnc3RvcmFnZV9jb2xzJywKKyAgICAgICAgJ3JlZmQnLCAnY29ucycsICdu dWxsc19uZCcsICdpZHhfaW5jJywKKyAgICAgICAgJ2ZrX2FjdHNfdGd0JywgJ2ZrX2FjdHMnLCAn bm90ZW5mX3RndCcsICdub3RlbmYnLCAnc2VsZl9yZWYnLCAndGVtcG9yYWxfcGsnLAorICAgICAg ICAnaWR4ZCcsCisgICAgICAgICdwYXInLCAnY2gnLCAnYXR0b3B0JywKKyAgICAgICAgJ3BhcnRl ZF9yYW5nZScsICdwYXJ0ZWRfcmFuZ2VfMScsICdwYXJ0ZWRfcmFuZ2VfZGVmJywKKyAgICAgICAg J3BhcnRlZF9oYXNoJywgJ3BhcnRlZF9oYXNoXzAnLAorICAgICAgICAncGFydGVkX2xpc3QnLAor ICAgICAgICAncGFydGVkX2lkeCcsICdwYXJ0ZWRfaWR4X2EnLAorICAgICAgICAncGFydGVkX3Bs YWluJywgJ3BhcnRlZF9wbGFpbl9hJywKKyAgICAgICAgJ3BhcnRlZF9waycsICdwYXJ0ZWRfcGtf YScsCisgICAgICAgICdwYXJ0ZWRfc3ViJywgJ3BhcnRlZF9zdWJfYScsICdwYXJ0ZWRfc3ViX2Ex JywKKyAgICAgICAgJ3BhcnRlZF9jaGlsZF9pZHgnLCAncGFydGVkX2NoaWxkX2lkeF9hJywKKyAg ICAgICAgJ3BhcnRlZF9taXhlZCcsICdwYXJ0ZWRfbWl4ZWRfYScsCisgICAgICAgICdwYXJ0ZWRf ZmtfdGd0JywgJ3BhcnRlZF9maycsICdwYXJ0ZWRfZmtfYScsCisgICAgICAgICdydF9sb2cnLCAn cnQnLAorICAgICAgICAnc3R4JywgJ3JscycsICdyaV9mdWxsJywgJ3JpX2lkeCcsICd1bm8nCisg ICAgXTsKKyAgICB0IHRleHQ7CisgICAgc3RtdCB0ZXh0OworQkVHSU4KKyAgICBEUk9QIFNDSEVN QSBwZ3RibF9kZGxfdGVzdCBDQVNDQURFOworICAgIENSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3Rl c3Q7CisgICAgRk9SRUFDSCB0IElOIEFSUkFZIHRhYmxlcyBMT09QCisgICAgICAgIEZPUiBzdG10 IElOCisgICAgICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnIFdIRVJF IG5hbWUgPSB0IE9SREVSIEJZIG9yZAorICAgICAgICBMT09QCisgICAgICAgICAgICBCRUdJTgor ICAgICAgICAgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICAgICAgICAgIEVYQ0VQVElPTiBXSEVO IGR1cGxpY2F0ZV90YWJsZSBUSEVOCisgICAgICAgICAgICAgICAgTlVMTDsgIC0tIHBhcnRpdGlv biBjaGlsZCBhbHJlYWR5IGNyZWF0ZWQgYnkgaXRzIHBhcmVudCdzIERETAorICAgICAgICAgICAg RU5EOworICAgICAgICBFTkQgTE9PUDsKKyAgICBFTkQgTE9PUDsKK0VORCAkJDsKKworV0lUSCBh ZnRlcl9kZGwgQVMgKAorICAgIFNFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKKyAgICBGUk9N IChTRUxFQ1QgRElTVElOQ1QgbmFtZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKSBBUyB0LAorICAg ICAgICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0YmxfZGRsX3Rlc3QuJyB8fCB0Lm5h bWUpOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9 PiBmYWxzZSkgV0lUSCBPUkRJTkFMSVRZIG8obGluZSwgb3JkKQorKQorKFNFTEVDVCAnbWlzc2lu Zy1pbi1jb3B5JyBBUyBraW5kLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3Jp ZworIEVYQ0VQVAorIFNFTEVDVCAnbWlzc2luZy1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZS T00gYWZ0ZXJfZGRsKQorVU5JT04gQUxMCisoU0VMRUNUICdleHRyYS1pbi1jb3B5JyBBUyBraW5k LCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBhZnRlcl9kZGwKKyBFWENFUFQKKyBTRUxFQ1QgJ2V4dHJh LWluLWNvcHknLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZykKK09SREVS IEJZIGtpbmQsIG5hbWUsIG9yZDsKKworLS0gQ2xlYW51cC4KK0RST1AgU0NIRU1BIHBndGJsX2Rk bF90ZXN0IENBU0NBREU7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGZmYjQxM2FiNjEy Li5iZTUzOWU5YWM3MiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2NDgsNiArMTY0 OCw3IEBAIExpc3RlbmVyRW50cnkKIExvSW5mbwogTG9hZFN0bXQKIExvY2FsQnVmZmVyTG9va3Vw RW50CitMb2NhbE5vdE51bGxFbnRyeQogTG9jYWxQZ0JhY2tlbmRTdGF0dXMKIExvY2FsVHJhbnNh Y3Rpb25JZAogTG9jYXRpb24KQEAgLTMxNTIsNiArMzE1Myw3IEBAIFRhYmxlRnVuY1NjYW4KIFRh YmxlRnVuY1NjYW5TdGF0ZQogVGFibGVGdW5jVHlwZQogVGFibGVJbmZvCitUYWJsZURkbENvbnRl eHQKIFRhYmxlTGlrZUNsYXVzZQogVGFibGVTYW1wbGVDbGF1c2UKIFRhYmxlU2NhbkRlc2MKLS0g CjIuNTEuMAoK --00000000000074c8ef06561833b6--