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 1vvdGO-00B869-1f for pgpool-hackers@arkaria.postgresql.org; Thu, 26 Feb 2026 15:26:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vvdGN-00DfVq-1Y for pgpool-hackers@arkaria.postgresql.org; Thu, 26 Feb 2026 15:26:51 +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 1vvdGM-00DfVg-2x for pgpool-hackers@lists.postgresql.org; Thu, 26 Feb 2026 15:26:51 +0000 Received: from mail-yx1-xb136.google.com ([2607:f8b0:4864:20::b136]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vvdGI-00000001Pe0-2lDL for pgpool-hackers@lists.postgresql.org; Thu, 26 Feb 2026 15:26:50 +0000 Received: by mail-yx1-xb136.google.com with SMTP id 956f58d0204a3-64acd19e1dfso847243d50.0 for ; Thu, 26 Feb 2026 07:26:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772119605; cv=none; d=google.com; s=arc-20240605; b=dmzfRsngAEoyvArO8J8ZbR4qMNeOKGeo5OFLYe0KS8BtvZ/Ez5mpAlFs2jzfoaTYy8 n+5BdFtqhUjcflVe/MScYRYB6tyKyCyDJdDmgSd+A58Nn4EPQXNGcGYWrE+6Yh8hoWBs ZmbpI3uivkvJJXIx7Z3D6pJqf1/H0BzPjXXEqmdQl2YRysRSXOcX+8Xjcy1FyFn2naau JnRG95k51QBY/kQTwkNUX/YzshnHHs8meXjgmG+mO5JcMvuAXA2MurC696MCjJwOyziT GRFne4zZ++PR10/AJa/GFUFVcH3N3FgyL6BZqht4AtlVbxxp4UZ+dfh6TrhvwbW7WUDU i8vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=fStZHV9zHS3nNptuhmeKz/ll+tAQdyPmAwgh3DbNEgQ=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=RbKi4KDerGNqFXZdFcdEqWyEG5p928hrkufM6pf1CcM2PcfWSvZ9dmUPjFIH14gR0J 1fdsBKjsTFLMub0DIMB4H9M3bADNuTZI5gFgOfDOLZUo2DXWpa+Ie3uM9FhGZ7dBEs2M NQyVw9S1vtJg7mq6FHQk+GgUfHenkN/MNFtNO/mVG6QdqfreURyvxCsiXasRpZVO7rGA tCcx8k2+hJecG2jecrs6FhioA/KDoWJgxSsd1NEvE5R6wz9qgi8YY+uhCldf/Zgmn/CG k9OViF7IYKI4UjJYwx5U5jJwfQ9fc6NSmuMwjP1NY15+86T7igUUPI3bhU4oggUI4EDr WNIQ==; 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=tailorbrands.com; s=google; t=1772119605; x=1772724405; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=fStZHV9zHS3nNptuhmeKz/ll+tAQdyPmAwgh3DbNEgQ=; b=EGwMiFnfak9QBpcPj8W8q/+qMJF2ip1J3J4YsxHeyr71wckE9MZtlbgW0iciVISz42 tTC99yhztxpwetW0ipZy2hNy5MUo7rJ4duObpM40iIMe3Kh4MNBYVTIyWN4ZDI7kNbi9 WHfnFHeayfPanLtD+wpMw6Y03AYkyoHHEdna3liOi/0f/44lA3c3HK7vf+8wJCVlsfIN wZl6pX73xGo+HK8Tb3sjblzqJFLRc3VKw4IaJx+aZoqIFY5Kbl1O84fh1k8xHA2btWxu TWLhkIIQHB5Aa447/Tx4wkqyfB2WbJlMIzFkD3a0ZlwMJfuDcVlX5FS3Uvc5tRcz1OKO FqNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772119605; x=1772724405; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=fStZHV9zHS3nNptuhmeKz/ll+tAQdyPmAwgh3DbNEgQ=; b=FFqsDkLnEE0pf8Yz+eh9NXS3NGl9BF65GQH1+Qq/7U4OxP0q7Xs2AGxJJvZnvsu8Xp KWh+IESUHyXEzqZIiqy741595jebVhY1C2LhyWUxylGaqkOlRCZyzfrZ+aL9t+BXV+8S 9OMtHT+dV8ebwYMeqZuelfA/cWvIdMQEREaiN6LBkkHbjZ8zQ6O2kXAtcPuYK2FVTeUH h7NpqWTqz0Hty1XLvb/JxLMZLwQ3KHPBY8pdT3rr7afrjQkSLiBofh9TbCvJB/2gUAWl kJgMbFrGeG1Dy3mP4K15TvFA/p66JJx9UcOO+z+7G9uF7syWtHua3ZolwnjIztCuPOQj Y8HA== X-Gm-Message-State: AOJu0Yyc+JuhcNxU8qI66IkBfrpovT7quhcpaTNLwcJFA4vDBtrpQqUg yy+3y5otUHH/kPTA+d5wsQosScjA3nJDUulfWwzOKAOzicDScjJ9thWTaVdk9Z4fYKQYSVVUTXs W3oqbirxtDVRV4rRjS1Op9lOeIu2GmxzPHHuWOysQR+ABZ1IfXQt3FIcAXw== X-Gm-Gg: ATEYQzyKuXhtA4etQmeekd+QW3p3rs8iriuWog6Ep/p8voZZSH8lxxRDb4uivKOX5e3 IFIa2Hcx+7uauuCWwQkg1QzqiSOWmLHDosMUZZ8kQw9QxZedMUTdsXKpkLjcGWb/rKBD+1ioOpb I+k2VKHCXz7oPypnh40gLEN0+vc/lhPo7lJHa4KwsXudHFjJIYMBk5I7PnaYsYbsDIU322mQsPB 9AoweiC4rIy6+VfnUnmeL+HP51GWOxUZ9Ok6C7SiFax3UYXUW+iDOM3iqu7IBcKY5LxoR+F6rAA nxRtoB7w5Ct1+P7Lf0qAFAcECaA6qM2a7HEBDdH0wh2FMSfhT16Ki6/IRr+e99Dzq9rb3GKQ7ql rSjdsQRrAYPVvg6uy10t1/IjFVwAw6tMI5JLu0hKi719duYHwYAcDv0JMgJSd8qTg/lCfLhCaoa QAmvXhlw== X-Received: by 2002:a53:ac8f:0:b0:645:443d:10a2 with SMTP id 956f58d0204a3-64c789d30femr16815547d50.26.1772119604899; Thu, 26 Feb 2026 07:26:44 -0800 (PST) MIME-Version: 1.0 References: <20260219.085121.1424536813757196179.ishii@postgresql.org> <20260226.164742.1123136102374463742.ishii@postgresql.org> In-Reply-To: <20260226.164742.1123136102374463742.ishii@postgresql.org> From: Nadav Shatz Date: Thu, 26 Feb 2026 17:26:33 +0200 X-Gm-Features: AaiRm50sx8DnRT_YnI8gDxyOzKHdG310jMrQbP6O3CDdBgtxwqUaY1TizuJfITs Message-ID: Subject: Re: Proposal: Recent mutated table tracking in memory To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000008d061b064bbbbf0c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008d061b064bbbbf0c Content-Type: multipart/alternative; boundary="0000000000008d0619064bbbbf0a" --0000000000008d0619064bbbbf0a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Tatsuo, Thank you for the thorough review and the thoughtful pushback on the cross-session security concern. You're right that "dml_adaptive just hits himself in the foot, your patch allows him to hit someone else's foot" =E2= =80=94 that asymmetry needs a technical answer, not just a threat-model argument. I've addressed this in the updated patch with two mechanisms: *1. Maximum staleness cap (`track_table_mutation_max_staleness`)* New configuration parameter (default: 60 seconds, range: 0=E2=80=933600000 = ms). This bounds how long any single table entry can continuously force primary routing, measured from the first write that created the entry. Even under sustained writes, the entry expires after this period. If the table is written to again after expiry, a fresh entry is created. This directly addresses the concern: the worst-case cross-session impact is bounded and configurable. An operator can look at this parameter and know: "no matter what, a table's staleness effect on other sessions cannot exceed X seconds continuously." For legitimately busy tables, the brief gap between forced expiry and the next write re-marking the table is negligible =E2=80=94 typically milliseco= nds, since writes are frequent. The correctness guarantee is preserved. *2. Database-scoped isolation (documented)* The tracking is already scoped by database OID =E2=80=94 writes in one data= base never affect routing decisions for sessions in a different database. I've documented this explicitly as a security boundary in the docs. In multi-tenant deployments with separate databases, tenants are isolated from each other's write activity. Combined with the existing safeguards (committed writes only, bounded table map size, opt-in mode), the cross-session impact is now bounded in both duration and scope. I've also addressed the other review comments =E2=80=94 they should be appl= ied in the patch as well. tests and code structure. Thanks! On Thu, Feb 26, 2026 at 9:47=E2=80=AFAM Tatsuo Ishii = wrote: > > Added some handling for possible causes - works now. > > Here are comments for the patch. > > - Some code lines are too long. We recommend to limit each source code > line up to 78 chars. You can use following script to detect too long > lines (you can ignore reports other than *.[c]) See > https://wiki.postgresql.org/wiki/Committing_checklist > > git diff origin/master | grep -E '^(\+|diff)' | sed 's/^+//' | expand -t4 > | awk "length > 78 || /^diff/" > > --- /dev/null > +++ > b/src/test/regression/tests/043.track_table_mutation_watchdog/.gitignore > > Please avoid to install .gitignore. .gitignore file are maintained by > pgpool core developers. > > +++ > b/src/test/regression/tests/043.track_table_mutation_watchdog/leader.conf > > To test watchdog, you should use the standard watchdog_setup too. > > +++ b/src/utils/pool_track_table_mutation.c > > +static inline void > +query_cache_lock(void) > > "query_cache_*" is confusing since we already have query cache > feature. Please use different name. > > +static int > +track_table_mutation_get_database_oid_internal(void) > +{ > : > : > + /* Ensure we have a valid query context */ > + if (session_context->query_context =3D=3D NULL) > + return oid; > > Why does this need? The query context is not used in this function. > > +/* ---------------- > + * Public API implementation > + * ---------------- > + */ > > Please add a comments on what these function do. > > +Size > +pool_track_table_mutation_shmem_size(void) > > +void > +pool_track_table_mutation_init(void) > > +void > +pool_track_table_mutation_child_init(void) > > +bool > +pool_track_table_mutation_in_cold_start(void) > > +void > +pool_track_table_mutation_trigger_global_cold_start(void) > > +bool > +pool_track_table_mutation_table_is_stale(int table_oid, int dboid) > > __sync_fetch_and_add are old functions. I recommend to replace with > ordinary statements using semaphore to protect the critical region. > > + > __sync_fetch_and_add(&track_table_mutation_shmem->state.stats_queries_ch= ecked, > 1); > > Please add a comments on what these function do. > > +pool_track_table_mutation_mark_tables_written(const int *table_oids, int > num_tables, int dboid) > > +void > +pool_track_table_mutation_update_ttl(uint64 delay_us) > > +bool > +pool_track_table_mutation_get_cached_parse(uint64 hash, bool *is_write, > > +void > +pool_track_table_mutation_cache_parse(uint64 hash, bool is_write, > + const char > table_names[][TRACK_TABLE_MUTATION_TABLE_NAME_LEN], > + int num_tables) > > +uint64 > +pool_track_table_mutation_normalize_and_hash(const char *query) > > Best regards, > -- > Tatsuo Ishii > SRA OSS K.K. > English: http://www.sraoss.co.jp/index_en/ > Japanese:http://www.sraoss.co.jp > --=20 Nadav Shatz Tailor Brands | CTO --0000000000008d0619064bbbbf0a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Tatsuo,

Thank you for the thorough review and th= e thoughtful pushback on the cross-session security concern. You're rig= ht that "dml_adaptive just hits himself in the foot, your patch allows= him to hit someone else's foot" =E2=80=94 that asymmetry needs a = technical answer, not just a threat-model argument.

I've address= ed this in the updated patch with two mechanisms:

1. Maximum stal= eness cap (`track_table_mutation_max_staleness`)

New configurati= on parameter (default: 60 seconds, range: 0=E2=80=933600000 ms). This bound= s how long any single table entry can continuously force primary routing, m= easured from the first write that created the entry. Even under sustained w= rites, the entry expires after this period. If the table is written to agai= n after expiry, a fresh entry is created.

This directly addresses th= e concern: the worst-case cross-session impact is bounded and configurable.= An operator can look at this parameter and know: "no matter what, a t= able's staleness effect on other sessions cannot exceed X seconds conti= nuously."

For legitimately busy tables, the brief gap between f= orced expiry and the next write re-marking the table is negligible =E2=80= =94 typically milliseconds, since writes are frequent. The correctness guar= antee is preserved.

2. Database-scoped isolation (documented)=

The tracking is already scoped by database OID =E2=80=94 writes in = one database never affect routing decisions for sessions in a different dat= abase. I've documented this explicitly as a security boundary in the do= cs. In multi-tenant deployments with separate databases, tenants are isolat= ed from each other's write activity.

Combined with the existing = safeguards (committed writes only, bounded table map size, opt-in mode), th= e cross-session impact is now bounded in both duration and scope.

I&= #39;ve also addressed the other review comments =E2=80=94 they should be ap= plied in the patch as well. tests and code structure.

Thanks!
<= br>
On Thu,= Feb 26, 2026 at 9:47=E2=80=AFAM Tatsuo Ishii <ishii@postgresql.org> wrote:
> Added some handli= ng for possible causes - works now.

Here are comments for the patch.

- Some code lines are too long. We recommend to limit each source code
=C2=A0 line up to 78 chars. You can use following script to detect too long=
=C2=A0 lines (you can ignore reports other than *.[c]) See
=C2=A0 https://wiki.postgresql.org/wiki/Committ= ing_checklist

git diff origin/master | grep -E '^(\+|diff)' | sed 's/^+//'= ; | expand -t4 | awk "length > 78 || /^diff/"

--- /dev/null
+++ b/src/test/regression/tests/043.track_table_mutation_watchdog/.gitignor= e

Please avoid to install .gitignore. .gitignore file are maintained by
pgpool core developers.

+++ b/src/test/regression/tests/043.track_table_mutation_watchdog/leader.co= nf

To test watchdog, you should use the standard watchdog_setup too.

+++ b/src/utils/pool_track_table_mutation.c

+static inline void
+query_cache_lock(void)

"query_cache_*" is confusing since we already have query cache feature. Please use different name.

+static int
+track_table_mutation_get_database_oid_internal(void)
+{
:
:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0/* Ensure we have a valid query context */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (session_context->query_context =3D=3D NU= LL)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return oid;

Why does this need? The query context is not used in this function.

+/* ----------------
+ * Public API implementation
+ * ----------------
+ */

Please add a comments on what these function do.

+Size
+pool_track_table_mutation_shmem_size(void)

+void
+pool_track_table_mutation_init(void)

+void
+pool_track_table_mutation_child_init(void)

+bool
+pool_track_table_mutation_in_cold_start(void)

+void
+pool_track_table_mutation_trigger_global_cold_start(void)

+bool
+pool_track_table_mutation_table_is_stale(int table_oid, int dboid)

__sync_fetch_and_add are old functions.=C2=A0 I recommend to replace with ordinary statements using semaphore to protect the critical region.

+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0__sync_fetch_and_ad= d(&track_table_mutation_shmem->state.stats_queries_checked, 1);

Please add a comments on what these function do.

+pool_track_table_mutation_mark_tables_written(const int *table_oids, int n= um_tables, int dboid)

+void
+pool_track_table_mutation_update_ttl(uint64 delay_us)

+bool
+pool_track_table_mutation_get_cached_parse(uint64 hash, bool *is_write,
+void
+pool_track_table_mutation_cache_parse(uint64 hash, bool is_write,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0const char table_names[][TR= ACK_TABLE_MUTATION_TABLE_NAME_LEN],
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0int num_tables)

+uint64
+pool_track_table_mutation_normalize_and_hash(const char *query)

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


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--0000000000008d0619064bbbbf0a-- --0000000000008d061b064bbbbf0c Content-Type: application/octet-stream; name="table_track.patch" Content-Disposition: attachment; filename="table_track.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm3m8zie0 RnJvbSBmNDA2NWMxY2FlODQ4ODEyNTE1ZjAyOGRmYjkwZTA1ZjVmYmU1M2ZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogVHVlLCA2IEphbiAyMDI2IDEyOjQxOjUwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gZmVh dChsb2FkX2JhbGFuY2UpOiBhZGQgaW4tbWVtb3J5IHRhYmxlIG11dGF0aW9uIHRyYWNraW5nCgpJ bnRyb2R1Y2VzICdkbWxfYWRhcHRpdmVfZ2xvYmFsJyBhcyBhIG5ldyB2YWx1ZSBmb3IgZGlzYWJs ZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUuClRoaXMgbW9kZSBpcyBhIHN1cGVyc2V0IG9mIGRtbF9h ZGFwdGl2ZTogaXQgcGVyZm9ybXMgcGVyLXRyYW5zYWN0aW9uIGxvY2FsIHRyYWNraW5nCkFORCBj cm9zcy1zZXNzaW9uIHNoYXJlZC1tZW1vcnkgdHJhY2tpbmcgb2YgcmVjZW50bHkgd3JpdHRlbiB0 YWJsZXMsIHJvdXRpbmcgcmVhZHMKdG8gcHJpbWFyeSB1bnRpbCBhIFRUTCAoYmFzZWQgb24gbWVh c3VyZWQgcmVwbGljYXRpb24gZGVsYXkpIGV4cGlyZXMuCgpTdWItcGFyYW1ldGVycyAodHJhY2tf dGFibGVfbXV0YXRpb25fKikgY29udHJvbCBUVEwgZmFjdG9yLCBjb2xkIHN0YXJ0IGR1cmF0aW9u LApoYXNoIHRhYmxlIHNpemluZywgYW5kIHF1ZXJ5IHBhcnNlIGNhY2hlIHNpemluZy4KCmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9sb2Fk YmFsYW5jZS5zZ21sCmluZGV4IGVlMTlmYWJlYmFiMjIxMGNkNGFiZTU5YTcxMWEwMzZhYzBhYzg5 NDMuLjE4MzhhNTc5MTNlOWFjYjkzM2JmY2JmNzBjY2UzMjEyMjc0MGE0OTAgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2FkYmFs YW5jZS5zZ21sCkBAIC0xMTA4LDYgKzExMDgsMTggQEAgYXBwX25hbWVfcmVkaXJlY3RfcHJlZmVy ZW5jZV9saXN0ICZndDsgZGF0YWJhc2VfcmVkaXJlY3RfcHJlZmVyZW5jZV9saXN0ICZndDsgdXMK IAkJRGVwZW5kZW50IGZ1bmN0aW9ucywgdHJpZ2dlcnMsIGFuZCB2aWV3cyBvbiB0aGUgdGFibGVz IGNhbiBiZSBjb25maWd1cmVkCiAJCXVzaW5nIDx4cmVmIGxpbmtlbmQ9Imd1Yy1kbWwtYWRhcHRp dmUtb2JqZWN0LXJlbGF0aW9uc2hpcC1saXN0Ij4KICAgICAgPC9wYXJhPgorCisgICAgIDxwYXJh PgorCQlJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gPHZhcm5hbWU+ZG1sX2FkYXB0aXZlX2ds b2JhbDwvdmFybmFtZT4sCisJCTxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gYmVoYXZlcyBsaWtl IDx2YXJuYW1lPmRtbF9hZGFwdGl2ZTwvdmFybmFtZT4KKwkJKHBlci10cmFuc2FjdGlvbiB3cml0 ZSB0cmFja2luZykgYW5kIGFkZGl0aW9uYWxseSB1c2VzIHNoYXJlZCBtZW1vcnkgdG8gdHJhY2sK KwkJcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMgYWNyb3NzIGFsbCBzZXNzaW9ucyBjbHVzdGVyLXdp ZGUuIFdoZW4gYSB0YWJsZSBpcworCQl3cml0dGVuIGluIGFueSBzZXNzaW9uLCBzdWJzZXF1ZW50 IHJlYWRzIG9mIHRoYXQgdGFibGUgZnJvbSBhbnkgc2Vzc2lvbiBhcmUKKwkJcm91dGVkIHRvIHBy aW1hcnkgdW50aWwgYSBUVEwgKGJhc2VkIG9uIG1lYXN1cmVkIHJlcGxpY2F0aW9uIGRlbGF5KSBl eHBpcmVzLgorCQlUaGlzIHByZXZlbnRzIHN0YWxlIHJlYWRzIGFmdGVyIHdyaXRlcyBldmVuIGFj cm9zcyBkaWZmZXJlbnQgY29ubmVjdGlvbnMuCisJCVNlZSA8eHJlZiBsaW5rZW5kPSJydW50aW1l LWNvbmZpZy10cmFjay10YWJsZS1tdXRhdGlvbiI+IGZvciB0aGUgc3ViLXBhcmFtZXRlcnMKKwkJ dGhhdCBjb250cm9sIHRoZSBzaGFyZWQtbWVtb3J5IHRyYWNraW5nIGJlaGF2aW9yLgorICAgICA8 L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogCkBAIC0xMTkzLDQg KzEyMDUsMzIxIEBAIGRtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRpb25zaGlwX2xpc3QgPSAndGFi bGVfMTp0YWJsZV8yJwogCiAgIDwvdmFyaWFibGVsaXN0PgogIDwvc2VjdDI+CisKKyA8c2VjdDIg aWQ9InJ1bnRpbWUtY29uZmlnLXRhYmxlLW11dGF0aW9uLW1hcCI+CisgIDx0aXRsZT5UYWJsZSBN dXRhdGlvbiBNYXAgQ29uZmlndXJhdGlvbiAoTGFnbGVzcyBSZXBsaWNhIFJlYWRzKTwvdGl0bGU+ CisKKyAgPHBhcmE+CisgICBUaGVzZSBwYXJhbWV0ZXJzIGNvbmZpZ3VyZSB0aGUgdHJhY2sgdGFi bGUgbXV0YXRpb24gZmVhdHVyZSwgd2hpY2ggaXMgYWN0aXZhdGVkIGJ5IHNldHRpbmcKKyAgIDx4 cmVmIGxpbmtlbmQ9Imd1Yy1kaXNhYmxlLWxvYWQtYmFsYW5jZS1vbi13cml0ZSI+IHRvIDxsaXRl cmFsPmRtbF9hZGFwdGl2ZV9nbG9iYWw8L2xpdGVyYWw+LgorICAgVGhlIGZlYXR1cmUgdHJhY2tz IHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzIHRvIHByZXZlbnQgc3RhbGUgcmVhZHMgZnJvbSByZXBs aWNhIG5vZGVzIGR1cmluZworICAgcmVwbGljYXRpb24gbGFnLCBpbXBsZW1lbnRpbmcgdGhlICJs YWdsZXNzIiBhcmNoaXRlY3R1cmUgcGF0dGVybiBmb3IgZGlzdHJpYnV0ZWQgc3lzdGVtcworICAg d2l0aCByZWFkIHJlcGxpY2FzLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIGEgdGFi bGUgaXMgbW9kaWZpZWQgKElOU0VSVC9VUERBVEUvREVMRVRFKSwgaXQgaXMgbWFya2VkIGFzICJz dGFsZSIgZm9yIGEgVFRMIHBlcmlvZAorICAgKDxsaXRlcmFsPnJlcGxpY2F0aW9uX2RlbGF5ICog dHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjwvbGl0ZXJhbD4pLiBBbnkgU0VMRUNUIHF1 ZXJpZXMgb24gc3RhbGUgdGFibGVzIGFyZSByb3V0ZWQKKyAgIHRvIHRoZSBwcmltYXJ5IG5vZGUg aW5zdGVhZCBvZiByZXBsaWNhcywgZW5zdXJpbmcgcmVhZC1hZnRlci13cml0ZSBjb25zaXN0ZW5j eS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhpcyBmZWF0dXJlIHJlcXVpcmVzIDx4cmVm IGxpbmtlbmQ9Imd1Yy1yZXBsaWNhdGlvbi1kZWxheS1zb3VyY2UtY21kIj4gdG8gYmUgY29uZmln dXJlZAorICAgZm9yIG1vbml0b3JpbmcgcmVwbGljYXRpb24gZGVsYXkgZnJvbSByZXBsaWNhcy4K KyAgPC9wYXJhPgorCisgIDx3YXJuaW5nPgorICAgPHBhcmE+CisgICAgRW5hYmxpbmcgPGxpdGVy YWw+ZG1sX2FkYXB0aXZlX2dsb2JhbDwvbGl0ZXJhbD4gaW5jcmVhc2VzIHNoYXJlZCBtZW1vcnkg Y29uc3VtcHRpb24uIFdpdGggZGVmYXVsdCBzZXR0aW5ncywKKyAgICB0aGUgZmVhdHVyZSByZXF1 aXJlcyBhcHByb3hpbWF0ZWx5IDYuNCBNQiBvZiBzaGFyZWQgbWVtb3J5ICgwLjEgTUIgZm9yIHRh YmxlIHRyYWNraW5nICsgNi4zIE1CIGZvciBxdWVyeSBjYWNoZSkuCisgICAgTWVtb3J5IHVzYWdl IHNjYWxlcyB3aXRoIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczoKKyAgIDwvcGFyYT4KKyAgIDxp dGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRhYmxlIHRy YWNraW5nOiA8bGl0ZXJhbD50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplICogNDAgYnl0 ZXM8L2xpdGVyYWw+IChkZWZhdWx0OiAyMDQ4ICogNDAgPSB+ODAgS0IpCisgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBRdWVy eSBjYWNoZTogPGxpdGVyYWw+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVf c2l6ZSAqIDY0MCBieXRlczwvbGl0ZXJhbD4gKGRlZmF1bHQ6IDEwMDAwICogNjQwID0gfjYuMyBN QikKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAg IDxwYXJhPgorICAgIEZvciBoaWdoLXRyYWZmaWMgc3lzdGVtcyB3aXRoIGxhcmdlIGNhY2hlIHNp emVzIChlLmcuLCA8bGl0ZXJhbD50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNo ZV9zaXplID0gMTAwMDAwPC9saXRlcmFsPiksCisgICAgbWVtb3J5IHVzYWdlIGNhbiByZWFjaCA2 NCBNQiBvciBtb3JlLiBDb25zaWRlciB5b3VyIHN5c3RlbSdzIGF2YWlsYWJsZSBzaGFyZWQgbWVt b3J5IHdoZW4gdXNpbmcgPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2dsb2JhbDwvbGl0ZXJhbD4uCisg ICA8L3BhcmE+CisgIDwvd2FybmluZz4KKworICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlz dGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tdHRsLWZhY3RvciIgeHJlZmxhYmVs PSJ0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yIj4KKyAgICA8dGVybT48dmFybmFtZT50 cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yPC92YXJuYW1lPiAoPHR5cGU+ZmxvYXRpbmcg cG9pbnQ8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ dHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBw YXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8 bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTXVsdGlwbGllciBmb3IgY2FsY3VsYXRpbmcg dGhlIFRUTDogPGxpdGVyYWw+VFRMID0gcmVwbGljYXRpb25fZGVsYXkgKiB0cmFja190YWJsZV9t dXRhdGlvbl90dGxfZmFjdG9yPC9saXRlcmFsPi4KKyAgICAgIEhpZ2hlciB2YWx1ZXMgcHJvdmlk ZSBtb3JlIHNhZmV0eSBtYXJnaW4gYnV0IG1heSByZWR1Y2UgcmVhZCByZXBsaWNhIHV0aWxpemF0 aW9uLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDEuMC0x MDAuMC4gRGVmYXVsdCBpcyA8bGl0ZXJhbD41LjA8L2xpdGVyYWw+LgorICAgICAgVGhpcyBwYXJh bWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVsb2FkaW5nIHRoZSA8cHJvZHVjdG5hbWU+UGdwb29s LUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUt bXV0YXRpb24tbWF4LXN0YWxlbmVzcyIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9t YXhfc3RhbGVuZXNzIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9t YXhfc3RhbGVuZXNzPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRl eHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9tYXhf c3RhbGVuZXNzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAg ICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+ CisgICAgICBNYXhpbXVtIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0aGF0IGEgc2luZ2xlIHRh YmxlIGVudHJ5IGNhbiBjb250aW51b3VzbHkgZm9yY2UgcXVlcmllcyB0byBwcmltYXJ5LAorICAg ICAgbWVhc3VyZWQgZnJvbSB3aGVuIHRoZSB0YWJsZSB3YXMgZmlyc3QgbWFya2VkIHN0YWxlLiBX aGVuIHRoaXMgY2FwIGlzIHJlYWNoZWQsIHRoZSBlbnRyeSBpcyBleHBpcmVkCisgICAgICByZWdh cmRsZXNzIG9mIHJlY2VudCB3cml0ZXMuIElmIHRoZSB0YWJsZSBpcyB3cml0dGVuIHRvIGFnYWlu IGFmdGVyIGV4cGlyeSwgYSBmcmVzaCB0cmFja2luZyBlbnRyeQorICAgICAgaXMgY3JlYXRlZC4K KyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGJvdW5kcyB0 aGUgY3Jvc3Mtc2Vzc2lvbiBpbXBhY3Qgb2YgdGFibGUgbXV0YXRpb24gdHJhY2tpbmcuIEV2ZW4g aWYgYSB0YWJsZSBpcyB3cml0dGVuCisgICAgICB0byBpbiBhIHRpZ2h0IGxvb3AsIGl0cyBlZmZl Y3Qgb24gb3RoZXIgc2Vzc2lvbnMnIGxvYWQgYmFsYW5jaW5nIGlzIGxpbWl0ZWQgdG8gdGhpcyBk dXJhdGlvbi4gRm9yCisgICAgICBsZWdpdGltYXRlbHkgYnVzeSB0YWJsZXMsIHRoZSBnYXAgYmV0 d2VlbiBmb3JjZWQgZXhwaXJ5IGFuZCB0aGUgbmV4dCB3cml0ZSByZS1tYXJraW5nIHRoZSB0YWJs ZSBpcworICAgICAgbmVnbGlnaWJsZSAodHlwaWNhbGx5IG1pbGxpc2Vjb25kcykuCisgICAgIDwv cGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBTZXQgdG8gMCB0byBkaXNhYmxlIHRoZSBjYXAgKG5v dCByZWNvbW1lbmRlZCBmb3IgcHJvZHVjdGlvbikuCisgICAgICBWYWxpZCByYW5nZTogMC0zNjAw MDAwIG1zLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjYwMDAwPC9saXRlcmFsPiAoNjAgc2Vjb25kcyku CisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCBieSByZWxvYWRpbmcgdGhlIDxw cm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gY29uZmlndXJhdGlvbnMuCisgICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9 Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi1jb2xkLXN0YXJ0LWR1cmF0aW9uIiB4cmVmbGFiZWw9 InRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24iPgorICAgIDx0ZXJtPjx2 YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb248L3Zhcm5hbWU+ ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5 Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb248L3Zhcm5h bWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4K KyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIER1cmF0aW9u IGluIG1pbGxpc2Vjb25kcyB0byByb3V0ZSBhbGwgcXVlcmllcyB0byBwcmltYXJ5IGFmdGVyIGEg Y2hpbGQgcHJvY2VzcyBzdGFydHMuCisgICAgICBUaGlzIHByZXZlbnRzIHN0YWxlIHJlYWRzIHdo ZW4gYSBuZXcgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBiZWZvcmUgdGhlIHRyYWNrIHRhYmxl IG11dGF0aW9uCisgICAgICBpcyBwb3B1bGF0ZWQgd2l0aCByZWNlbnQgd3JpdGUgaGlzdG9yeS4K KyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFdoZW4gd2F0Y2hkb2cgaXMgZW5hYmxl ZCBhbmQgdGhlIGxvY2FsIG5vZGUgYmVjb21lcyB0aGUgbGVhZGVyLCBQZ3Bvb2wtSUkgYWxzbyB0 cmlnZ2VycyBhCisgICAgICBnbG9iYWwgY29sZCBzdGFydCBmb3IgdGhpcyBkdXJhdGlvbiB0byBh dm9pZCBzdGFsZSByZWFkcyBhZnRlciBsZWFkZXJzaGlwIGNoYW5nZXMuCisgICAgIDwvcGFyYT4K KyAgICAgPHBhcmE+CisgICAgICBWYWxpZCByYW5nZTogMC02MDAwMCBtcy4gRGVmYXVsdCBpcyA8 bGl0ZXJhbD4yMDAwPC9saXRlcmFsPiAoMiBzZWNvbmRzKS4KKyAgICAgIFNldCB0byAwIHRvIGRp c2FibGUgY29sZCBzdGFydCBiZWhhdmlvci4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBj aGFuZ2VkIGJ5IHJlbG9hZGluZyB0aGUgPHByb2R1Y3RuYW1lPlBncG9vbC1JSTwvPiBjb25maWd1 cmF0aW9ucy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXRyYWNrLXRhYmxlLW11dGF0aW9uLXRhYmxl LWJ1Y2tldHMiIHhyZWZsYWJlbD0idHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyI+ CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czwv dmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAg PHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czwvdmFy bmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJt PgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTnVtYmVy IG9mIGhhc2ggYnVja2V0cyBmb3IgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUu CisgICAgICBIaWdoZXIgdmFsdWVzIHJlZHVjZSBoYXNoIGNvbGxpc2lvbnMgYW5kIGltcHJvdmUg bG9va3VwIHBlcmZvcm1hbmNlLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVmFs aWQgcmFuZ2U6IDY0LTY1NTM2LiBEZWZhdWx0IGlzIDxsaXRlcmFsPjEwMjQ8L2xpdGVyYWw+Lgor ICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGF0IHNlcnZlciBzdGFydC4KKyAg ICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZh cmxpc3RlbnRyeSBpZD0iZ3VjLXRyYWNrLXRhYmxlLW11dGF0aW9uLXRhYmxlLXNpemUiIHhyZWZs YWJlbD0idHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSI+CisgICAgPHRlcm0+PHZhcm5h bWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZTwvdmFybmFtZT4gKDx0eXBlPmludGVn ZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJh Y2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZTwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJh bWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTWF4aW11bSBudW1iZXIgb2YgdGFibGVzIHRoYXQg Y2FuIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3VzbHkgaW4gdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9u LgorICAgICAgV2hlbiBmdWxsLCBvbGRlc3QgZW50cmllcyBhcmUgZXZpY3RlZCB1c2luZyBhIHNp bXBsZSBldmljdGlvbiBzdHJhdGVneS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAg IFZhbGlkIHJhbmdlOiAxMjgtMTMxMDcyLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjIwNDg8L2xpdGVy YWw+LgorICAgICAgTWVtb3J5IHVzYWdlOiBhcHByb3hpbWF0ZWx5IDQwIGJ5dGVzIHBlciBlbnRy eS4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQu CisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAg IDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi1xdWVyeS1idWNrZXRz IiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHMiPgorICAgIDx0 ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHM8L3Zhcm5hbWU+ ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5 Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHM8L3Zhcm5hbWU+IGNv bmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8 L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE51bWJlciBvZiBoYXNo IGJ1Y2tldHMgZm9yIHRoZSBxdWVyeSBwYXJzZSBjYWNoZS4gVGhlIGNhY2hlIHN0b3JlcyBub3Jt YWxpemVkCisgICAgICBxdWVyeSBzdHJpbmdzIG1hcHBlZCB0byB0aGVpciB0YWJsZSBkZXBlbmRl bmNpZXMgdG8gYXZvaWQgcmVwZWF0ZWQgcGFyc2luZy4KKyAgICAgPC9wYXJhPgorICAgICA8cGFy YT4KKyAgICAgIFZhbGlkIHJhbmdlOiA2NC02NTUzNi4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4yMDQ4 PC9saXRlcmFsPi4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2 ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi1xdWVy eS1wYXJzZS1jYWNoZS1zaXplIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5 X3BhcnNlX2NhY2hlX3NpemUiPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0 aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemU8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBl PikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxl X211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24g cGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAg PGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIHF1ZXJ5IHBh cnNlIHJlc3VsdHMgdG8gY2FjaGUuIFVzZXMgTFJVIGV2aWN0aW9uIHdoZW4gZnVsbC4KKyAgICAg IExhcmdlciBjYWNoZXMgcmVkdWNlIHBhcnNpbmcgb3ZlcmhlYWQgYnV0IGNvbnN1bWUgbW9yZSBz aGFyZWQgbWVtb3J5LgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFu Z2U6IDEwMC0xMDAwMDAwLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjEwMDAwPC9saXRlcmFsPi4KKyAg ICAgIE1lbW9yeSB1c2FnZTogYXBwcm94aW1hdGVseSA2NDAgYnl0ZXMgcGVyIGVudHJ5ICh+Ni4z IE1CIGZvciBkZWZhdWx0LCB+NjQgTUIgZm9yIDEwMDAwMCBlbnRyaWVzKS4KKyAgICAgIFRoaXMg cGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+ CisKKyAgPHNlY3QzIGlkPSJydW50aW1lLWNvbmZpZy10cmFjay10YWJsZS1tdXRhdGlvbi1leGFt cGxlIj4KKyAgIDx0aXRsZT5UcmFjayBUYWJsZSBNdXRhdGlvbiBDb25maWd1cmF0aW9uIEV4YW1w bGU8L3RpdGxlPgorICAgPHBhcmE+CisgICAgVG8gZW5hYmxlIHRyYWNrIHRhYmxlIG11dGF0aW9u IHdpdGggcmVwbGljYXRpb24gZGVsYXkgbW9uaXRvcmluZzoKKyAgIDwvcGFyYT4KKyAgIDxwcm9n cmFtbGlzdGluZz4KKyMgRW5hYmxlIGRtbF9hZGFwdGl2ZV9nbG9iYWwgbW9kZSAoaW5jbHVkZXMg dHJhY2sgdGFibGUgbXV0YXRpb24pCitkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9ICdk bWxfYWRhcHRpdmVfZ2xvYmFsJwordHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9IDUu MAordHJhY2tfdGFibGVfbXV0YXRpb25fbWF4X3N0YWxlbmVzcyA9IDYwMDAwCit0cmFja190YWJs ZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uID0gMjAwMAorCisjIENvbmZpZ3VyZSBleHRl cm5hbCByZXBsaWNhdGlvbiBkZWxheSBtb25pdG9yaW5nCityZXBsaWNhdGlvbl9kZWxheV9zb3Vy Y2VfY21kID0gJy9wYXRoL3RvL2dldC1yZXBsaWNhdGlvbi1kZWxheS5zaCcKK3JlcGxpY2F0aW9u X2RlbGF5X3NvdXJjZV90aW1lb3V0ID0gMTAKKworIyBBZGp1c3QgY2FjaGUgc2l6ZXMgYmFzZWQg b24gd29ya2xvYWQgKGluY3JlYXNlcyBtZW1vcnkgdXNhZ2UpCit0cmFja190YWJsZV9tdXRhdGlv bl90YWJsZV9zaXplID0gNDA5NiAgICAgICMgVHJhY2sgdXAgdG8gNDA5NiB0YWJsZXMgKH4xNjAg S0IpCit0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplID0gNTAwMDAg ICMgQ2FjaGUgNTBrIHF1ZXJpZXMgKH4zMSBNQikKKyAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICA8 cGFyYT4KKyAgICBUb3RhbCBzaGFyZWQgbWVtb3J5IHJlcXVpcmVkIGZvciBhYm92ZSBjb25maWd1 cmF0aW9uOiBhcHByb3hpbWF0ZWx5IDMxLjIgTUIgKDMxIE1CIHF1ZXJ5IGNhY2hlICsgMC4yIE1C IHRhYmxlIG1hcCArIG92ZXJoZWFkKS4KKyAgICBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gKDEwMDAw IHF1ZXJ5IGNhY2hlIGVudHJpZXMsIDIwNDggdGFibGVzKSByZXF1aXJlcyBhcHByb3hpbWF0ZWx5 IDYuNCBNQi4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0Mz4KKworICA8c2VjdDMgaWQ9InJ1bnRpbWUt Y29uZmlnLXRyYWNrLXRhYmxlLW11dGF0aW9uLWxpbWl0YXRpb25zIj4KKyAgIDx0aXRsZT5MaW1p dGF0aW9uczwvdGl0bGU+CisgICA8cGFyYT4KKyAgICBUaGUgdHJhY2sgdGFibGUgbXV0YXRpb24g ZmVhdHVyZSBoYXMgdGhlIGZvbGxvd2luZyBsaW1pdGF0aW9uOgorICAgPC9wYXJhPgorICAgPGl0 ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+ UFJFUEFSRTwvbGl0ZXJhbD4gc3RhdGVtZW50cyBhcmUgbm90IHRyYWNrZWQuIFdoZW4gYSBwcmVw YXJlZCBzdGF0ZW1lbnQKKyAgICAgIGNvbnRhaW5pbmcgZGF0YSBtb2RpZmljYXRpb24gaXMgZXhl Y3V0ZWQsIHRoZSB0YWJsZSBtdXRhdGlvbiBpcyBub3QgcmVjb3JkZWQuCisgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisgICA8cGFyYT4KKyAgICBJZiB5 b3VyIGFwcGxpY2F0aW9uIHVzZXMgcHJlcGFyZWQgc3RhdGVtZW50cyBhbmQgcmVxdWlyZXMgcmVh ZC1hZnRlci13cml0ZSBjb25zaXN0ZW5jeSwKKyAgICBjb25zaWRlciB1c2luZyBleHBsaWNpdCB0 cmFuc2FjdGlvbiByb3V0aW5nIG9yIHRoZSA8bGl0ZXJhbD4vKk5PIExPQUQgQkFMQU5DRSovPC9s aXRlcmFsPgorICAgIGNvbW1lbnQgZGlyZWN0aXZlIGZvciBhZmZlY3RlZCBxdWVyaWVzLgorICAg PC9wYXJhPgorICAgPHBhcmE+CisgICAgVGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgdHlwZXMgPGVt cGhhc2lzPmFyZTwvZW1waGFzaXM+IHRyYWNrZWQgYW5kIHdpbGwgbWFyayB0YWJsZXMgYXMgc3Rh bGU6CisgICA8L3BhcmE+CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICA8bGl0ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5VUERBVEU8 L2xpdGVyYWw+LCA8bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+CisgICAgICBzdGF0ZW1lbnRzIChp bmNsdWRpbmcgdGhvc2Ugd2l0aCA8bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVyYWw+IGNsYXVzZXMp LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxw YXJhPgorICAgICAgPGxpdGVyYWw+VFJVTkNBVEU8L2xpdGVyYWw+IHN0YXRlbWVudHMgKGluY2x1 ZGluZyBtdWx0aXBsZSB0YWJsZXMpLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg ICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+TUVSR0U8L2xpdGVyYWw+ IHN0YXRlbWVudHMgKFBvc3RncmVTUUwgMTUrKS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0 ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPldJVEg8L2xp dGVyYWw+IGNsYXVzZXMgY29udGFpbmluZyBkYXRhIG1vZGlmaWNhdGlvbnMgKENvbW1vbiBUYWJs ZSBFeHByZXNzaW9ucworICAgICAgd2l0aCA8bGl0ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+LCA8bGl0 ZXJhbD5VUERBVEU8L2xpdGVyYWw+LCBvciA8bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+KS4KKyAg ICAgIEZvciBleGFtcGxlLCA8bGl0ZXJhbD5XSVRIIGRlbGV0ZWQgQVMgKERFTEVURSBGUk9NIHQx IFJFVFVSTklORyAqKSBTRUxFQ1QgKiBGUk9NIGRlbGV0ZWQ8L2xpdGVyYWw+CisgICAgICB3aWxs IHByb3Blcmx5IG1hcmsgdGFibGUgPGxpdGVyYWw+dDE8L2xpdGVyYWw+IGFzIHN0YWxlLgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICAgPHBhcmE+ CisgICAgPGVtcGhhc2lzPlRyYW5zYWN0aW9uIFJvbGxiYWNrIEJlaGF2aW9yOjwvZW1waGFzaXM+ IFdpdGhpbiBleHBsaWNpdCB0cmFuc2FjdGlvbnMsIHRhYmxlcworICAgIGFyZSBvbmx5IG1hcmtl ZCBhcyBzdGFsZSBpbiBzaGFyZWQgbWVtb3J5IHdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1p dHRlZC4gSWYgdGhlCisgICAgdHJhbnNhY3Rpb24gaXMgcm9sbGVkIGJhY2ssIG5vIHRhYmxlcyBh cmUgbWFya2VkLCBzaW5jZSBubyBhY3R1YWwgZGF0YSBtb2RpZmljYXRpb24KKyAgICBvY2N1cnJl ZCBvbiByZXBsaWNhcy4gVGhpcyBwcmV2ZW50cyByb2xsZWQtYmFjayB0cmFuc2FjdGlvbnMgZnJv bSB1bm5lY2Vzc2FyaWx5CisgICAgZGlzYWJsaW5nIGxvYWQgYmFsYW5jaW5nLiBGb3IgYXV0b2Nv bW1pdCBzdGF0ZW1lbnRzIChvdXRzaWRlIGV4cGxpY2l0IHRyYW5zYWN0aW9ucyksCisgICAgdGFi bGVzIGFyZSBtYXJrZWQgaW1tZWRpYXRlbHkgdXBvbiBjb21tYW5kIGNvbXBsZXRpb24uCisgICA8 L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxlbXBoYXNpcz5Dcm9zcy1TZXNzaW9uIEltcGFjdCBh bmQgU2FmZXR5IEJvdW5kczo8L2VtcGhhc2lzPgorICAgIFVubGlrZSA8bGl0ZXJhbD5kbWxfYWRh cHRpdmU8L2xpdGVyYWw+ICh3aGljaCBvbmx5IGFmZmVjdHMgdGhlIHNlc3Npb24gdGhhdCBpc3N1 ZWQgdGhlIHdyaXRlKSwKKyAgICA8bGl0ZXJhbD5kbWxfYWRhcHRpdmVfZ2xvYmFsPC9saXRlcmFs PiBhZmZlY3RzIGFsbCBzZXNzaW9ucyByZWFkaW5nIHRoZSBzYW1lIHRhYmxlIGluIHRoZSBzYW1l IGRhdGFiYXNlLgorICAgIFRoZSBmb2xsb3dpbmcgc2FmZXR5IG1lY2hhbmlzbXMgYm91bmQgdGhp cyBjcm9zcy1zZXNzaW9uIGltcGFjdDoKKyAgIDwvcGFyYT4KKyAgIDxpdGVtaXplZGxpc3Q+Cisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxlbXBoYXNpcz5NYXhpbXVtIHN0YWxl bmVzcyBjYXA6PC9lbXBoYXNpcz4gVGhlIDx4cmVmIGxpbmtlbmQ9Imd1Yy10cmFjay10YWJsZS1t dXRhdGlvbi1tYXgtc3RhbGVuZXNzIj4KKyAgICAgIHBhcmFtZXRlciAoZGVmYXVsdDogNjAgc2Vj b25kcykgbGltaXRzIGhvdyBsb25nIGFueSBzaW5nbGUgdGFibGUgZW50cnkgY2FuIGNvbnRpbnVv dXNseSBmb3JjZSBwcmltYXJ5CisgICAgICByb3V0aW5nLiBFdmVuIHVuZGVyIHN1c3RhaW5lZCB3 cml0ZXMsIHRoZSBlbnRyeSBleHBpcmVzIGFmdGVyIHRoaXMgcGVyaW9kIGFuZCBpcyBvbmx5IHJl bmV3ZWQgYnkKKyAgICAgIHN1YnNlcXVlbnQgY29tbWl0dGVkIHdyaXRlcy4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxl bXBoYXNpcz5EYXRhYmFzZSBpc29sYXRpb246PC9lbXBoYXNpcz4gVGFibGUgc3RhbGVuZXNzIHRy YWNraW5nIGlzIHNjb3BlZCBieSBkYXRhYmFzZSBPSUQuIFdyaXRlcworICAgICAgaW4gb25lIGRh dGFiYXNlIG5ldmVyIGFmZmVjdCBsb2FkIGJhbGFuY2luZyBkZWNpc2lvbnMgZm9yIHNlc3Npb25z IGNvbm5lY3RlZCB0byBhIGRpZmZlcmVudCBkYXRhYmFzZS4KKyAgICAgIEluIG11bHRpLXRlbmFu dCBkZXBsb3ltZW50cyB3aGVyZSB0ZW5hbnRzIHVzZSBzZXBhcmF0ZSBkYXRhYmFzZXMsIG9uZSB0 ZW5hbnQncyB3cml0ZSBhY3Rpdml0eSBjYW5ub3QKKyAgICAgIGluZmx1ZW5jZSBhbm90aGVyIHRl bmFudCdzIHF1ZXJ5IHJvdXRpbmcuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8ZW1waGFzaXM+Q29tbWl0dGVkIHdyaXRl cyBvbmx5OjwvZW1waGFzaXM+IE9ubHkgY29tbWl0dGVkIHRyYW5zYWN0aW9ucyBtYXJrIHRhYmxl cyBhcyBzdGFsZS4KKyAgICAgIFJvbGxlZC1iYWNrIHRyYW5zYWN0aW9ucyBoYXZlIG5vIGVmZmVj dCBvbiB0aGUgc2hhcmVkIHRyYWNraW5nIHN0YXRlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGVtcGhhc2lzPkJvdW5k ZWQgdGFibGUgbWFwIHNpemU6PC9lbXBoYXNpcz4gVGhlIHNoYXJlZCBtZW1vcnkgdGFibGUgbWFw IGhhcyBhIGZpeGVkIG1heGltdW0gc2l6ZQorICAgICAgKDx4cmVmIGxpbmtlbmQ9Imd1Yy10cmFj ay10YWJsZS1tdXRhdGlvbi10YWJsZS1zaXplIj4pLiBBdCBtb3N0IHRoaXMgbWFueSB0YWJsZXMg Y2FuIGJlIG1hcmtlZCBzdGFsZQorICAgICAgc2ltdWx0YW5lb3VzbHksIHByb3ZpZGluZyBhIG5h dHVyYWwgY2VpbGluZyBvbiB0aGUgZmVhdHVyZSdzIGltcGFjdC4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0Mz4KKworIDwvc2VjdDI+ CisKIDwvc2VjdDE+CmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUu YW0KaW5kZXggNDY3OGFiNTMwNTVlODI4YTM3YjY0Nzc4MDE2NDBhZmYxN2ZmODRhNy4uMzk1ODhh ZjU4ZGViYTA0NWRmZmMwMWFlOTMyMTE1YjhhOWRiZmNmMiAxMDA2NDQKLS0tIGEvc3JjL01ha2Vm aWxlLmFtCisrKyBiL3NyYy9NYWtlZmlsZS5hbQpAQCAtMzUsNiArMzUsNyBAQCBwZ3Bvb2xfU09V UkNFUyA9IG1haW4vbWFpbi5jIFwKIAlyZXdyaXRlL3Bvb2xfdGltZXN0YW1wLmMgXAogCXJld3Jp dGUvcG9vbF9sb2JqLmMgXAogCXV0aWxzL3Bvb2xfc2VsZWN0X3dhbGtlci5jIFwKKwl1dGlscy9w b29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmMgXAogCXV0aWxzL3N0cmxjcHkuYyBcCiAJdXRpbHMv cHNwcmludGYuYyBcCiAJdXRpbHMvcG9vbF9wYXJhbXMuYyBcCmRpZmYgLS1naXQgYS9zcmMvY29u ZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jIGIvc3JjL2NvbmZpZy9wb29sX2NvbmZpZ192YXJp YWJsZXMuYwppbmRleCBjZTEzYzQyZjZhODFjYmVjZDg3ZWYzNWM1NTA3ZDBmZjJkN2E3Zjg1Li5h NmI5MDlkNDI3ZjMwMzY2ZmFiNzMyNWZhMjE2OTA2OGM0ODlhMjYzIDEwMDY0NAotLS0gYS9zcmMv Y29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9jb25maWcvcG9vbF9jb25m aWdfdmFyaWFibGVzLmMKQEAgLTI5MCw2ICsyOTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNv bmZpZ19lbnVtX2VudHJ5IGRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlX29wdGlvbnNbXSA9 CiAJeyJ0cmFuc190cmFuc2FjdGlvbiIsIERMQk9XX1RSQU5TX1RSQU5TQUNUSU9OLCBmYWxzZX0s CiAJeyJhbHdheXMiLCBETEJPV19BTFdBWVMsIGZhbHNlfSwKIAl7ImRtbF9hZGFwdGl2ZSIsIERM Qk9XX0RNTF9BREFQVElWRSwgZmFsc2V9LAorCXsiZG1sX2FkYXB0aXZlX2dsb2JhbCIsIERMQk9X X0RNTF9BREFQVElWRV9HTE9CQUwsIGZhbHNlfSwKIAl7TlVMTCwgMCwgZmFsc2V9CiB9OwogCkBA IC0xNzc3LDYgKzE3NzgsMTkgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50X2FycmF5IENvbmZp Z3VyZU5hbWVzSW50QXJyYXlbXSA9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2RvdWJsZSBDb25m aWd1cmVOYW1lc0RvdWJsZVtdID0KIHsKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25fdHRs X2ZhY3RvciIsCisJCQlDRkdDWFRfUkVMT0FELCBMT0FEX0JBTEFOQ0VfQ09ORklHLAorCQkJIlRU TCBtdWx0aXBsaWVyIGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbiAiCisJCQkiKFRUTCA9IHJlcGxp Y2F0aW9uX2RlbGF5ICogZmFjdG9yKSIsCisJCQlDT05GSUdfVkFSX1RZUEVfRE9VQkxFLCBmYWxz ZSwgMAorCQl9LAorCQkmZ19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFj dG9yLAorCQk1LjAsCQkJCQkvKiBib290IHZhbHVlOiA1eCByZXBsaWNhdGlvbiBkZWxheSAqLwor CQkxLjAsIDEwMC4wLAkJCQkvKiBtaW4sIG1heCAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwK KwogCS8qIEVuZC1vZi1saXN0IG1hcmtlciAqLwogCUVNUFRZX0NPTkZJR19ET1VCTEUKIH07CkBA IC0yMzk3LDYgKzI0MTEsODEgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3VyZU5h bWVzSW50W10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJ0cmFja190YWJs ZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzIiwKKwkJCUNGR0NYVF9SRUxPQUQsIExPQURfQkFMQU5D RV9DT05GSUcsCisJCQkiTWF4aW11bSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdGhhdCBhICIK KwkJCSJ0YWJsZSBjYW4gYmUgbWFya2VkIHN0YWxlIGZyb20gaXRzIGZpcnN0ICIKKwkJCSJ3cml0 ZS4gMCBkaXNhYmxlcyB0aGUgY2FwLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwg R1VDX1VOSVRfTVMKKwkJfSwKKwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25f bWF4X3N0YWxlbmVzcywKKwkJNjAwMDAsCQkJCQkvKiA2MCBzZWNvbmRzICovCisJCTAsIDM2MDAw MDAsCQkJCS8qIDAgdG8gMSBob3VyICovCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJewor CQl7InRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24iLAorCQkJQ0ZHQ1hU X1JFTE9BRCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJCSJEdXJhdGlvbiBpbiBtaWxsaXNlY29u ZHMgdG8gZm9yY2UgcXVlcmllcyAiCisJCQkidG8gcHJpbWFyeSBhZnRlciBjaGlsZCBwcm9jZXNz IHN0YXJ0cy4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIEdVQ19VTklUX01TCisJ CX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVy YXRpb24sCisJCTIwMDAsCQkJCQkvKiAyIHNlY29uZHMgKi8KKwkJMCwgNjAwMDAsCQkJCS8qIDAg dG8gNjAgc2Vjb25kcyAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJ0cmFj a190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzIiwKKwkJCUNGR0NYVF9JTklULCBMT0FEX0JB TEFOQ0VfQ09ORklHLAorCQkJIk51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRyYWNrIHRhYmxl IG11dGF0aW9uLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAorCQkm Z19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzLAorCQkxMDI0 LAorCQk2NCwgNjU1MzYsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7InRyYWNr X3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUiLAorCQkJQ0ZHQ1hUX0lOSVQsIExPQURfQkFMQU5D RV9DT05GSUcsCisJCQkiTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiB0cmFjayB0YWJsZSBt dXRhdGlvbi4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIDAKKwkJfSwKKwkJJmdf cG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSwKKwkJMjA0OCwKKwkJ MTI4LCAxMzEwNzIsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7InRyYWNrX3Rh YmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHMiLAorCQkJQ0ZHQ1hUX0lOSVQsIExPQURfQkFMQU5D RV9DT05GSUcsCisJCQkiTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgcXVlcnkgcGFyc2UgY2Fj aGUuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xf Y29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHMsCisJCTIwNDgsCisJCTY0 LCA2NTUzNiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsidHJhY2tfdGFibGVf bXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSIsCisJCQlDRkdDWFRfSU5JVCwgTE9BRF9C QUxBTkNFX0NPTkZJRywKKwkJCSJNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXJ5IHBh cnNlIGNhY2hlLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAorCQkm Z19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXpl LAorCQkxMDAwMCwKKwkJMTAwLCAxMDAwMDAwLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwog CS8qIEVuZC1vZi1saXN0IG1hcmtlciAqLwogCUVNUFRZX0NPTkZJR19JTlQKIH07CmRpZmYgLS1n aXQgYS9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYyBiL3NyYy9jb250ZXh0L3Bvb2xf cXVlcnlfY29udGV4dC5jCmluZGV4IDdjZjk4MTNlYjdkNTg2NzhiYzg2YTBhYWEzOGJkM2M2NDQ1 YjY2ODcuLjY4M2IwZWM2NmZhYmQ3MDhhNWE2MWE1NGJhMDY5N2JmODY5ZWNhZmUgMTAwNjQ0Ci0t LSBhL3NyYy9jb250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5jCisrKyBiL3NyYy9jb250ZXh0L3Bv b2xfcXVlcnlfY29udGV4dC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAidXRpbHMvc3Rh dGlzdGljcy5oIgogI2luY2x1ZGUgInV0aWxzL3Bvb2xfc2VsZWN0X3dhbGtlci5oIgogI2luY2x1 ZGUgInV0aWxzL3Bvb2xfc3RyZWFtLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbi5oIgogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuaCIK ICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5oIgogI2luY2x1ZGUgInBhcnNl ci9ub2Rlcy5oIgpAQCAtMTgyOCwxNSArMTgyOSwyMyBAQCBpc19pbl9saXN0KGNoYXIgKm5hbWUs IExpc3QgKmxpc3QpCiBzdGF0aWMgYm9vbAogaXNfc2VsZWN0X29iamVjdF9pbl90ZW1wX3dyaXRl X2xpc3QoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIHsKLQlpZiAobm9kZSA9PSBOVUxMIHx8 IHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxf QURBUFRJVkUpCisJaWYgKG5vZGUgPT0gTlVMTCB8fAorCQkhRExCT1dfSVNfRE1MX0FEQVBUSVZF KAorCQkJcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSkKIAkJcmV0 dXJuIGZhbHNlOwogCiAJaWYgKElzQShub2RlLCBSYW5nZVZhcikpCiAJewogCQlSYW5nZVZhciAg ICpyZ3YgPSAoUmFuZ2VWYXIgKikgbm9kZTsKLQkJUE9PTF9TRVNTSU9OX0NPTlRFWFQgKnNlc3Np b25fY29udGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSk7CisJCVBPT0xfU0VT U0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQ7CisJCWJvb2wJCWlzX2FkYXB0aXZlOworCisJ CXNlc3Npb25fY29udGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSk7CisJCWlz X2FkYXB0aXZlID0gRExCT1dfSVNfRE1MX0FEQVBUSVZFKAorCQkJcG9vbF9jb25maWctPmRpc2Fi bGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKTsKIAotCQlpZiAocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBzZXNzaW9uX2Nv bnRleHQtPmlzX2luX3RyYW5zYWN0aW9uKQorCQlpZiAoaXNfYWRhcHRpdmUgJiYKKwkJCXNlc3Np b25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24pCiAJCXsKIAkJCWVyZXBvcnQoREVCVUcxLAog CQkJCQkoZXJybXNnKCJpc19zZWxlY3Rfb2JqZWN0X2luX3RlbXBfd3JpdGVfbGlzdDogXCIlc1wi LCBmb3VuZCByZWxhdGlvbiBcIiVzXCIiLCAoY2hhciAqKSBjb250ZXh0LCByZ3YtPnJlbG5hbWUp KSk7CkBAIC0xODgwLDcgKzE4ODksMTMgQEAgc3RhdGljIGNoYXIgKmdldF9hc3NvY2lhdGVkX29i amVjdF9mcm9tX2RtbF9hZGFwdGl2ZV9yZWxhdGlvbnMKIHZvaWQKIGNoZWNrX29iamVjdF9yZWxh dGlvbnNoaXBfbGlzdChjaGFyICpuYW1lLCBib29sIGlzX2Z1bmNfbmFtZSkKIHsKLQlpZiAocG9v bF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQ VElWRSAmJiBwb29sX2NvbmZpZy0+cGFyc2VkX2RtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRpb25z aGlwX2xpc3QpCisJYm9vbAkJaXNfYWRhcHRpdmU7CisKKwlpc19hZGFwdGl2ZSA9IERMQk9XX0lT X0RNTF9BREFQVElWRSgKKwkJcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dy aXRlKTsKKworCWlmIChpc19hZGFwdGl2ZSAmJgorCQlwb29sX2NvbmZpZy0+cGFyc2VkX2RtbF9h ZGFwdGl2ZV9vYmplY3RfcmVsYXRpb25zaGlwX2xpc3QpCiAJewogCQlQT09MX1NFU1NJT05fQ09O VEVYVCAqc2Vzc2lvbl9jb250ZXh0ID0gcG9vbF9nZXRfc2Vzc2lvbl9jb250ZXh0KGZhbHNlKTsK IApAQCAtMTk0NCw3ICsxOTU5LDcgQEAgYWRkX29iamVjdF9pbnRvX3RlbXBfd3JpdGVfbGlzdChO b2RlICpub2RlLCB2b2lkICpjb250ZXh0KQogc3RhdGljIHZvaWQKIGRtbF9hZGFwdGl2ZShOb2Rl ICpub2RlLCBjaGFyICpxdWVyeSkKIHsKLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9i YWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSkKKwlpZiAoRExCT1dfSVNfRE1M X0FEQVBUSVZFKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJ ewogCQkvKiBTZXQvVW5zZXQgdHJhbnNhY3Rpb24gc3RhdHVzIGZsYWdzICovCiAJCWlmIChJc0Eo bm9kZSwgVHJhbnNhY3Rpb25TdG10KSkKQEAgLTE5NjMsNiArMTk3OCw0NiBAQCBkbWxfYWRhcHRp dmUoTm9kZSAqbm9kZSwgY2hhciAqcXVlcnkpCiAJCQl9CiAJCQllbHNlIGlmIChpc19jb21taXRf b3Jfcm9sbGJhY2tfcXVlcnkobm9kZSkpCiAJCQl7CisJCQkJLyoKKwkJCQkgKiBGb3IgZG1sX2Fk YXB0aXZlX2dsb2JhbDogb24gQ09NTUlULCBmbHVzaAorCQkJCSAqIHRoZSBhY2N1bXVsYXRlZCB0 YWJsZSB3cml0ZXMgdG8gc2hhcmVkCisJCQkJICogbWVtb3J5LiAgT24gUk9MTEJBQ0ssIHNraXAg LS0gdGhlIHdyaXRlcworCQkJCSAqIG5ldmVyIGNvbW1pdHRlZCBzbyBubyBzdGFsZS1yZWFkIHJp c2sKKwkJCQkgKiBleGlzdHMuICBUaGlzIHByZXZlbnRzIHBvbGx1dGluZyB0aGUgdGFibGUKKwkJ CQkgKiBtYXAgd2l0aCByb2xsZWQtYmFjayB0cmFuc2FjdGlvbnMuCisJCQkJICovCisJCQkJaW50 CQlkbGJvdyA9CisJCQkJCXBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0 ZTsKKwkJCQlMaXN0ICAgKndsaXN0ID0KKwkJCQkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlv bl90ZW1wX3dyaXRlX2xpc3Q7CisKKwkJCQlpZiAoZGxib3cgPT0gRExCT1dfRE1MX0FEQVBUSVZF X0dMT0JBTCAmJgorCQkJCQlpc19jb21taXRfcXVlcnkobm9kZSkgJiYKKwkJCQkJd2xpc3QgIT0g TklMKQorCQkJCXsKKwkJCQkJTGlzdENlbGwgICAqY2VsbDsKKwkJCQkJaW50CQkJZGJvaWQ7CisK KwkJCQkJZGJvaWQgPQorCQkJCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJh c2Vfb2lkKCk7CisJCQkJCWlmIChkYm9pZCA+IDApCisJCQkJCXsKKwkJCQkJCWZvcmVhY2goY2Vs bCwgd2xpc3QpCisJCQkJCQl7CisJCQkJCQkJY2hhciAgICp0bmFtZTsKKwkJCQkJCQlpbnQJCXRv aWQ7CisKKwkJCQkJCQl0bmFtZSA9IChjaGFyICopIGxmaXJzdChjZWxsKTsKKwkJCQkJCQl0b2lk ID0KKwkJCQkJCQkJcG9vbF90YWJsZV9uYW1lX3RvX29pZCh0bmFtZSk7CisKKwkJCQkJCQlpZiAo dG9pZCA+IDApCisJCQkJCQkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZV93 cml0dGVuKAorCQkJCQkJCQkJdG9pZCwgZGJvaWQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQor CiAJCQkJc2Vzc2lvbl9jb250ZXh0LT5pc19pbl90cmFuc2FjdGlvbiA9IGZhbHNlOwogCiAJCQkJ aWYgKHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ICE9IE5JTCkK QEAgLTIwMTAsNiArMjA2NSwyMCBAQCB3aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQT09MX1FV RVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBOb2RlCiAJaWYgKGRlc3Qg PT0gUE9PTF9QUklNQVJZKQogCXsKIAkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2Nv bnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CisKKwkJLyoKKwkJICogUmVzb2x2ZSB0YWJsZSBhbmQg ZGF0YWJhc2UgT0lEcyBub3cgdG8gcG9wdWxhdGUgcmVsY2FjaGUuCisJCSAqIFRoaXMgYXZvaWRz IHBvdGVudGlhbCBoYW5ncyBpbiBDb21tYW5kQ29tcGxldGUgd2hlcmUgd2Ugc2hvdWxkbid0CisJ CSAqIGJlIHJ1bm5pbmcgbmV3IHF1ZXJpZXMgYWdhaW5zdCB0aGUgYmFja2VuZC4KKwkJICovCisJ CWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJCURM Qk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJCXsKKwkJCWludCAqb2lkczsKKworCQkJcG9vbF9l eHRyYWN0X3RhYmxlX29pZHMobm9kZSwgJm9pZHMpOworCQkJcG9vbF90cmFja190YWJsZV9tdXRh dGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCX0KIAl9CiAJLyogU2hvdWxkIGJlIHNlbnQgdG8g Ym90aCBwcmltYXJ5IGFuZCBzdGFuZGJ5PyAqLwogCWVsc2UgaWYgKGRlc3QgPT0gUE9PTF9CT1RI KQpAQCAtMjEzOSw2ICsyMjA4LDE1NCBAQCB3aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQT09M X1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBOb2RlCiAJCQkJewog CQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwgUFJJTUFSWV9OT0RF X0lEKTsKIAkJCQl9CisJCQkJLyoKKwkJCQkgKiBDaGVjayB0cmFjayB0YWJsZSBtdXRhdGlvbiBm b3IgcmVjZW50bHkKKwkJCQkgKiB3cml0dGVuIHRhYmxlcy4gIElmIGluIGNvbGQgc3RhcnQgb3Ig YW55CisJCQkJICogdGFibGUgd2FzIHJlY2VudGx5IHdyaXR0ZW4sIHJvdXRlIHRvCisJCQkJICog cHJpbWFyeSB0byBhdm9pZCBzdGFsZSByZWFkcy4KKwkJCQkgKi8KKwkJCQllbHNlIGlmIChwb29s X2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJCQkJCSBETEJPV19E TUxfQURBUFRJVkVfR0xPQkFMKQorCQkJCXsKKwkJCQkJYm9vbAlmb3JjZV9wcmltYXJ5ID0gZmFs c2U7CisJCQkJCWludAkJbGJfbm9kZTsKKwkJCQkJUE9PTF9RVUVSWV9DT05URVhUICpxY3R4ID0K KwkJCQkJCXNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dDsKKworCQkJCQlpZiAocG9vbF90 cmFja190YWJsZV9tdXRhdGlvbl9pbl9jb2xkX3N0YXJ0KCkpCisJCQkJCXsKKwkJCQkJCWVyZXBv cnQoREVCVUcxLAorCQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UiCisJCQkJ CQkJCSIgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSIKKwkJCQkJCQkJIiBtdXRhdGlvbiBjb2xkIHN0 YXJ0IiksCisJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24gPSBQUklNQVJZIgorCQkJCQkJ CQkiIGZvciBxdWVyeT0gXCIlc1wiIiwKKwkJCQkJCQkJcXVlcnkpKSk7CisJCQkJCQlmb3JjZV9w cmltYXJ5ID0gdHJ1ZTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCVNlbGVjdENv bnRleHQgY3R4OworCQkJCQkJaW50CQlkYm9pZDsKKwkJCQkJCWludAkJbnVtX29pZHM7CisJCQkJ CQlpbnQJCWk7CisKKwkJCQkJCW1lbXNldCgmY3R4LCAwLCBzaXplb2YoY3R4KSk7CisJCQkJCQlu dW1fb2lkcyA9CisJCQkJCQkJcG9vbF9leHRyYWN0X3RhYmxlX29pZHNfZnJvbV9zZWxlY3Rfc3Rt dCgKKwkJCQkJCQkJbm9kZSwgJmN0eCk7CisJCQkJCQlpZiAobnVtX29pZHMgPiAwKQorCQkJCQkJ eworCQkJCQkJCWRib2lkID0KKwkJCQkJCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRf ZGF0YWJhc2Vfb2lkKCk7CisKKwkJCQkJCQlpZiAoZGJvaWQgPD0gMCkKKwkJCQkJCQl7CisJCQkJ CQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJCQkJKGVycm1zZygiY291bGQgbm90IGxvYWQiCisJ CQkJCQkJCQkJIiBiYWxhbmNlIGJlY2F1c2UiCisJCQkJCQkJCQkJIiBkYXRhYmFzZSBvaWQgd2Fz IgorCQkJCQkJCQkJCSIgdW5hdmFpbGFibGUiKSwKKwkJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3Rp bmF0aW9uIgorCQkJCQkJCQkJCSIgPSBQUklNQVJZIGZvciIKKwkJCQkJCQkJCQkiIHF1ZXJ5PSBc IiVzXCIiLAorCQkJCQkJCQkJCXF1ZXJ5KSkpOworCQkJCQkJCQlmb3JjZV9wcmltYXJ5ID0gdHJ1 ZTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJZm9yIChpID0gMDsg aSA8IG51bV9vaWRzOyBpKyspCisJCQkJCQkJCXsKKwkJCQkJCQkJCWJvb2wgc3RhbGU7CisKKwkJ CQkJCQkJCXN0YWxlID0KKwkJCQkJCQkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVf aXNfc3RhbGUoCisJCQkJCQkJCQkJY3R4LnRhYmxlX29pZHNbaV0sCisJCQkJCQkJCQkJZGJvaWQp OworCQkJCQkJCQkJaWYgKHN0YWxlKQorCQkJCQkJCQkJeworCQkJCQkJCQkJCWVyZXBvcnQoREVC VUcxLAorCQkJCQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCIKKwkJCQkJCQkJCQkJCSIg YmFsYW5jZSBiZWNhdXNlIgorCQkJCQkJCQkJCQkJIiB0YWJsZSBcIiVzXCIgd2FzIgorCQkJCQkJ CQkJCQkJIiByZWNlbnRseSB3cml0dGVuIiwKKwkJCQkJCQkJCQkJCWN0eC50YWJsZV9uYW1lc1tp XSksCisJCQkJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9uIgorCQkJCQkJCQkJCQkJIiA9 IFBSSU1BUlkgZm9yIgorCQkJCQkJCQkJCQkJIiBxdWVyeT0gXCIlc1wiIiwKKwkJCQkJCQkJCQkJ CXF1ZXJ5KSkpOworCQkJCQkJCQkJCWZvcmNlX3ByaW1hcnkgPSB0cnVlOworCQkJCQkJCQkJCWJy ZWFrOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisK KwkJCQkJaWYgKGZvcmNlX3ByaW1hcnkpCisJCQkJCXsKKwkJCQkJCXBvb2xfc2V0X25vZGVfdG9f YmVfc2VudCgKKwkJCQkJCQlxdWVyeV9jb250ZXh0LAorCQkJCQkJCVBSSU1BUllfTk9ERV9JRCk7 CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlpZiAocG9vbF9jb25maWctPnN0YXRl bWVudF9sZXZlbF9sb2FkX2JhbGFuY2UpCisJCQkJCQl7CisJCQkJCQkJc2Vzc2lvbl9jb250ZXh0 LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCA9CisJCQkJCQkJCXNlbGVjdF9sb2FkX2JhbGFuY2luZ19u b2RlKCk7CisJCQkJCQl9CisKKwkJCQkJCS8qCisJCQkJCQkgKiBJZiByZXBsaWNhdGlvbiBkZWxh eSBpcyB0b28gbXVjaCwKKwkJCQkJCSAqIGFuZCBwcmVmZXJfbG93ZXJfZGVsYXlfc3RhbmRieSBp cworCQkJCQkJICogdHJ1ZSB0aGVuIGVsZWN0IHRoZSBsb3dlc3QtZGVsYXllZAorCQkJCQkJICog bm9kZSwgb3RoZXJ3aXNlIHNlbmQgdG8gcHJpbWFyeS4KKwkJCQkJCSAqLworCQkJCQkJbGJfbm9k ZSA9CisJCQkJCQkJc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZDsKKwkJCQkJ CWlmIChTVFJFQU0gJiYKKwkJCQkJCQljaGVja19yZXBsaWNhdGlvbl9kZWxheShsYl9ub2RlKSkK KwkJCQkJCXsKKwkJCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJKGVycm1zZygiY291bGQg bm90IGxvYWQiCisJCQkJCQkJCQkiIGJhbGFuY2UgYmVjYXVzZSBvZiIKKwkJCQkJCQkJCSIgdG9v IG11Y2ggcmVwbGljYXRpb24iCisJCQkJCQkJCQkiIGRlbGF5IiksCisJCQkJCQkJCSBlcnJkZXRh aWwoImRlc3RpbmF0aW9uIgorCQkJCQkJCQkJIiA9ICVkIGZvciIKKwkJCQkJCQkJCSIgcXVlcnk9 IFwiJXNcIiIsCisJCQkJCQkJCQlkZXN0LCBxdWVyeSkpKTsKKworCQkJCQkJCWlmIChwb29sX2Nv bmZpZy0+cHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkpCisJCQkJCQkJeworCQkJCQkJCQlsYl9u b2RlID0KKwkJCQkJCQkJCXNlbGVjdF9sb2FkX2JhbGFuY2luZ19ub2RlKCk7CisJCQkJCQkJCXNl c3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPQorCQkJCQkJCQkJbGJfbm9kZTsK KwkJCQkJCQkJcWN0eC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPQorCQkJCQkJCQkJbGJfbm9kZTsK KwkJCQkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KAorCQkJCQkJCQkJcXVlcnlfY29udGV4 dCwKKwkJCQkJCQkJCWxiX25vZGUpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJewor CQkJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQoCisJCQkJCQkJCQlxdWVyeV9jb250ZXh0 LAorCQkJCQkJCQkJUFJJTUFSWV9OT0RFX0lEKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQll bHNlCisJCQkJCQl7CisJCQkJCQkJcWN0eC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPQorCQkJCQkJ CQlzZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkOworCQkJCQkJCXBvb2xfc2V0 X25vZGVfdG9fYmVfc2VudCgKKwkJCQkJCQkJcXVlcnlfY29udGV4dCwKKwkJCQkJCQkJcWN0eC0+ bG9hZF9iYWxhbmNlX25vZGVfaWQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQogCQkJCWVsc2UK IAkJCQl7CiAJCQkJCWlmIChwb29sX2NvbmZpZy0+c3RhdGVtZW50X2xldmVsX2xvYWRfYmFsYW5j ZSkKZGlmZiAtLWdpdCBhL3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMgYi9zcmMv Y29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5jCmluZGV4IGRlZDQxYzdmYzY0Y2ViYTFkMWZh ZmQ2ZjRhOWYxMGE3NTA4NzIzNzQuLjNlYmQ2OGUxMDVhZGM0ZTk0ZmQ4ZWY5NmM4NzFkNGIwNGJl ZDhhZTAgMTAwNjQ0Ci0tLSBhL3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMKKysr IGIvc3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYwpAQCAtNTMyLDcgKzUzMiw3IEBA IGR1bXBfc2VudF9tZXNzYWdlKGNoYXIgKmNhbGxlciwgUE9PTF9TRU5UX01FU1NBR0UgKm0pCiBz dGF0aWMgdm9pZAogZG1sX2FkYXB0aXZlX2luaXQodm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWct PmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSkKKwlp ZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5j ZV9vbl93cml0ZSkpCiAJewogCQlzZXNzaW9uX2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uID0g ZmFsc2U7CiAJCXNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ID0g TklMOwpAQCAtNTQyLDcgKzU0Miw5IEBAIGRtbF9hZGFwdGl2ZV9pbml0KHZvaWQpCiBzdGF0aWMg dm9pZAogZG1sX2FkYXB0aXZlX2Rlc3Ryb3kodm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWctPmRp c2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBzZXNz aW9uX2NvbnRleHQpCisJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRSgKKwkJcG9vbF9jb25maWct PmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSAmJgorCQlzZXNzaW9uX2NvbnRleHQpCiAJ ewogCQlpZiAoc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QgIT0g TklMKQogCQkJbGlzdF9mcmVlX2RlZXAoc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1w X3dyaXRlX2xpc3QpOwpAQCAtNzM4LDEwICs3NDAsMTMgQEAgdm9pZAogcG9vbF9zZXRfd3JpdGlu Z190cmFuc2FjdGlvbih2b2lkKQogewogCS8qCi0JICogSWYgZGlzYWJsZV90cmFuc2FjdGlvbl9v bl93cml0ZSBpcyAnb2ZmJyBvciAnZG1sX2FkYXB0aXZlJywgdGhlbiBuZXZlcgotCSAqIHR1cm4g b24gd3JpdGluZyB0cmFuc2FjdGlvbiBmbGFnLgorCSAqIElmIGRpc2FibGVfbG9hZF9iYWxhbmNl X29uX3dyaXRlIGlzICdvZmYnIG9yICdkbWxfYWRhcHRpdmUnIG9yCisJICogJ2RtbF9hZGFwdGl2 ZV9nbG9iYWwnLCB0aGVuIG5ldmVyIHR1cm4gb24gd3JpdGluZyB0cmFuc2FjdGlvbiBmbGFnLgog CSAqLwotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0g RExCT1dfT0ZGICYmIHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAh PSBETEJPV19ETUxfQURBUFRJVkUpCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFs YW5jZV9vbl93cml0ZSAhPQorCQlETEJPV19PRkYgJiYKKwkJIURMQk9XX0lTX0RNTF9BREFQVElW RSgKKwkJCXBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJewog CQlwb29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpLT53cml0aW5nX3RyYW5zYWN0aW9uID0g dHJ1ZTsKIAkJZXJlcG9ydChERUJVRzUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb29sLmgg Yi9zcmMvaW5jbHVkZS9wb29sLmgKaW5kZXggZWE2Zjg3ZTEyMGFmODY2YjhlZDNhMTU3OTBkOWQ4 YThlMDA5ZmU5MS4uNzE2OGMxYWVhODc3ODU2YjU5NzhkZTMzMmFkNjM2MzI1ZWI5YzMwYyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9vbC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvb2wuaApAQCAt NDI0LDcgKzQyNCw3IEBAIHR5cGVkZWYgZW51bQogI2RlZmluZSBNaW4oeCwgeSkJCSgoeCkgPCAo eSkgPyAoeCkgOiAoeSkpCiAKIAotI2RlZmluZSBNQVhfTlVNX1NFTUFQSE9SRVMJCTgKKyNkZWZp bmUgTUFYX05VTV9TRU1BUEhPUkVTCQkxMAogI2RlZmluZSBDT05OX0NPVU5URVJfU0VNCQkwCiAj ZGVmaW5lIFJFUVVFU1RfSU5GT19TRU0JCTEKICNkZWZpbmUgUVVFUllfQ0FDSEVfU1RBVFNfU0VN CTIKQEAgLTQzNCw2ICs0MzQsOCBAQCB0eXBlZGVmIGVudW0KICNkZWZpbmUgRk9MTE9XX1BSSU1B UllfU0VNCQk2CiAjZGVmaW5lIE1BSU5fRVhJVF9IQU5ETEVSX1NFTQk3CS8qIHVzZWQgaW4gZXhp dF9oYW5kZXIgaW4gcGdwb29sIG1haW4KIAkJCQkJCQkJCSAqIHByb2Nlc3MgKi8KKyNkZWZpbmUg VFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfU0VNCTgKKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVU QVRJT05fUVVFUllfU0VNCTkKICNkZWZpbmUgTUFYX1JFUVVFU1RfUVVFVUVfU0laRQkxMAogCiAj ZGVmaW5lIE1BWF9TRUNfV0FJVF9GT1JfQ0xVU1RFUl9UUkFOU0FDVElPTiAxMCAvKiB0aW1lIGlu IHNlY29uZHMgdG8ga2VlcApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaCBi L3NyYy9pbmNsdWRlL3Bvb2xfY29uZmlnLmgKaW5kZXggOWEzOTdkMTY2NmI0MDhkYzE2ZGFkNzQz YTk1NWE3MThjY2JmMjNmNS4uYzFlNmVjYzZmMGNlNjJiMmZhOWQ3NTYwZjBhMTk5YjQwMTI2OTA4 ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaAorKysgYi9zcmMvaW5jbHVk ZS9wb29sX2NvbmZpZy5oCkBAIC0xMDUsOSArMTA1LDEzIEBAIHR5cGVkZWYgZW51bSBETEJPV19P UFRJT04KIAlETEJPV19UUkFOU0FDVElPTiwKIAlETEJPV19UUkFOU19UUkFOU0FDVElPTiwKIAlE TEJPV19BTFdBWVMsCi0JRExCT1dfRE1MX0FEQVBUSVZFCisJRExCT1dfRE1MX0FEQVBUSVZFLAor CURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwKIH0gRExCT1dfT1BUSU9OOwogCisjZGVmaW5lIERM Qk9XX0lTX0RNTF9BREFQVElWRShvcHQpIFwKKwkoKG9wdCkgPT0gRExCT1dfRE1MX0FEQVBUSVZF IHx8IChvcHQpID09IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisKIHR5cGVkZWYgZW51bSBS RUxRVEFSR0VUX09QVElPTgogewogCVJFTFFUQVJHRVRfUFJJTUFSWSA9IDEsCkBAIC0zNjUsNiAr MzY5LDI0IEBAIHR5cGVkZWYgc3RydWN0CiAJCQkJCQkJCQkgKiByZXBsaWNhdGlvbiBjaGVjayAq LwogCWNoYXIJICAgKnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQ7CS8qIGV4dGVybmFsIGNv bW1hbmQgZm9yIHJlcGxpY2F0aW9uIGRlbGF5ICovCiAJaW50CQkJcmVwbGljYXRpb25fZGVsYXlf c291cmNlX3RpbWVvdXQ7CS8qIHRpbWVvdXQgZm9yIGV4dGVybmFsIGNvbW1hbmQgaW4gc2Vjb25k cyAqLworCisJLyogVHJhY2sgdGFibGUgbXV0YXRpb24gY29uZmlndXJhdGlvbiAqLworCWRvdWJs ZQkJdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjsJLyogVFRMIG11bHRpcGxpZXIgZm9y CisJCQkJCQkJCQkJCQkgKiByZXBsaWNhdGlvbiBkZWxheSAqLworCWludAkJCXRyYWNrX3RhYmxl X211dGF0aW9uX21heF9zdGFsZW5lc3M7CS8qIG1heCBzdGFsZW5lc3MKKwkJCQkJCQkJCQkJCQkg KiBkdXJhdGlvbiBtcyAqLworCWludAkJCXRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRf ZHVyYXRpb247CS8qIGNvbGQgc3RhcnQKKwkJCQkJCQkJCQkJCQkJCSAqIGR1cmF0aW9uIG1zICov CisJaW50CQkJdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czsJLyogaGFzaCBidWNr ZXRzIGZvcgorCQkJCQkJCQkJCQkJCSAqIHRhYmxlIG1hcCAqLworCWludAkJCXRyYWNrX3RhYmxl X211dGF0aW9uX3RhYmxlX3NpemU7CS8qIG1heCB0YWJsZSBtYXAKKwkJCQkJCQkJCQkJCSAqIGVu dHJpZXMgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzOwkvKiBo YXNoIGJ1Y2tldHMgZm9yCisJCQkJCQkJCQkJCQkJICogcXVlcnkgY2FjaGUgKi8KKwlpbnQJCQl0 cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplOwkvKiBtYXggcXVlcnkK KwkJCQkJCQkJCQkJCQkJCQkgKiBjYWNoZQorCQkJCQkJCQkJCQkJCQkJCSAqIGVudHJpZXMgKi8K KwogCWNoYXIJICAgKmZhaWxvdmVyX2NvbW1hbmQ7CS8qIGV4ZWN1dGUgY29tbWFuZCB3aGVuIGZh aWxvdmVyIGhhcHBlbnMgKi8KIAljaGFyCSAgICpmb2xsb3dfcHJpbWFyeV9jb21tYW5kOyAvKiBl eGVjdXRlIGNvbW1hbmQgd2hlbiBmYWlsb3ZlciBpcwogCQkJCQkJCQkJCSAqIGVuZGVkICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgg Yi9zcmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uYjBkZTJkODA5MzQzMDUwMGM5YzE3OTZjNDE4YzliZDFkMGVkZDRiMwotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaApAQCAt MCwwICsxLDI0NSBAQAorLyogLSotcGdzcWwtYy0qLSAqLworLyoKKyAqIHBncG9vbDogYSBsYW5n dWFnZSBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHBvb2wgc2VydmVyIGZvciBQb3N0Z3JlU1FMCisg KiB3cml0dGVuIGJ5IFRhdHN1byBJc2hpaQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDI2 CVBnUG9vbCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRz IGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkK KyAqIGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBw ZWFyIGluIGFsbAorICogY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24KKyAqIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1 bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUKKyAqIGF1dGhvciBub3QgYmUgdXNl ZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworICogZGlzdHJpYnV0 aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBw ZXJtaXNzaW9uLiBUaGUgYXV0aG9yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUK KyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMg cHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHku CisgKgorICogcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oOiBJbi1tZW1vcnkgdHJhY2tpbmcg b2YKKyAqICAgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMgdG8gcHJldmVudCBzdGFsZSByZWFkcy4K KyAqLworCisjaWZuZGVmIFBPT0xfVFJBQ0tfVEFCTEVfTVVUQVRJT05fSAorI2RlZmluZSBQT09M X1RSQUNLX1RBQkxFX01VVEFUSU9OX0gKKworI2luY2x1ZGUgInBvb2wuaCIKKyNpbmNsdWRlIDxz eXMvdGltZS5oPgorCisvKgorICogTWF4aW11bSB0YWJsZSBuYW1lIGxlbmd0aCBpbmNsdWRpbmcg c2NoZW1hOiAic2NoZW1hIi4idGFibGUiCisgKiBVc2luZyBOQU1FREFUQUxFTiAqIDIgKyA0IGZv ciBxdW90ZXMgYW5kIGRvdAorICovCisjZGVmaW5lIFRSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxF X05BTUVfTEVOCShOQU1FREFUQUxFTiAqIDIgKyA0KQorCisvKgorICogTWF4aW11bSBudW1iZXIg b2YgdGFibGVzIHdlIHRyYWNrIHBlciBxdWVyeQorICovCisjZGVmaW5lIFRSQUNLX1RBQkxFX01V VEFUSU9OX01BWF9UQUJMRVNfUEVSX1FVRVJZCTgKKworLyoKKyAqIEludmFsaWQgaW5kZXggbWFy a2VyIGZvciBsaW5rZWQgbGlzdHMKKyAqLworI2RlZmluZSBUUkFDS19UQUJMRV9NVVRBVElPTl9J TlZBTElEX0lOREVYCSgtMSkKKworLyoKKyAqIERlZmF1bHQgVFRMIGluIG1pY3Jvc2Vjb25kcyAo MTAwbXMpIHVzZWQgd2hlbiByZXBsaWNhdGlvbiBkZWxheSBpcyB1bmtub3duCisgKi8KKyNkZWZp bmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVMJKDEwMCAqIDEwMDApCisKKy8q CisgKiBFbnRyeSBpbiB0aGUgdGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSAoa2V5ZWQgYnkgdGFi bGUvZGF0YWJhc2Ugb2lkcykKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHJhY2tUYWJsZU11dGF0aW9u RW50cnkKK3sKKwlpbnQJCQl0YWJsZV9vaWQ7CQkJCS8qIFRhYmxlIG9pZCAqLworCWludAkJCWRi b2lkOwkJCQkJLyogRGF0YWJhc2Ugb2lkICovCisJc3RydWN0IHRpbWV2YWwgZmlyc3Rfd3JpdGVf dGltZTsJLyogV2hlbiB0aGUgZW50cnkgd2FzIGZpcnN0IGNyZWF0ZWQgKi8KKwlzdHJ1Y3QgdGlt ZXZhbCBsYXN0X3dyaXRlX3RpbWU7CQkvKiBXaGVuIHRoZSB0YWJsZSB3YXMgbGFzdCB3cml0dGVu ICovCisJdWludDMyCQloYXNoOwkJCQkJLyogUHJlLWNvbXB1dGVkIGhhc2ggdmFsdWUgKi8KKwlp bnQJCQluZXh0OwkJCQkvKiBOZXh0IGluIGNvbGxpc2lvbiBjaGFpbiAqLworCWJvb2wJCWluX3Vz ZTsJCQkJCS8qIElzIHRoaXMgZW50cnkgaW4gdXNlPyAqLworfSBUcmFja1RhYmxlTXV0YXRpb25F bnRyeTsKKworLyoKKyAqIEhlYWRlciBmb3IgdGhlIHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUg aW4gc2hhcmVkIG1lbW9yeQorICovCit0eXBlZGVmIHN0cnVjdCBUcmFja1RhYmxlTXV0YXRpb25I YXNoVGFibGUKK3sKKwlpbnQJCQludW1fYnVja2V0czsJCS8qIE51bWJlciBvZiBoYXNoIGJ1Y2tl dHMgKi8KKwlpbnQJCQltYXhfZW50cmllczsJCS8qIE1heGltdW0gZW50cmllcyBhbGxvd2VkICov CisJaW50CQkJbnVtX2VudHJpZXM7CQkvKiBDdXJyZW50IG51bWJlciBvZiBlbnRyaWVzICovCisJ aW50CQkJZnJlZV9saXN0X2hlYWQ7CQkvKiBIZWFkIG9mIGZyZWUgZW50cnkgbGlzdCAqLworCS8q IEZsZXhpYmxlIGFycmF5IG1lbWJlcnMgZm9sbG93IGluIHNoYXJlZCBtZW1vcnk6CisJICogaW50 IGJ1Y2tldHNbbnVtX2J1Y2tldHNdOworCSAqIFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5IGVudHJp ZXNbbWF4X2VudHJpZXNdOworCSAqLworfSBUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGU7CisK Ky8qCisgKiBFbnRyeSBpbiB0aGUgcXVlcnkgcGFyc2UgY2FjaGUKKyAqLwordHlwZWRlZiBzdHJ1 Y3QgUXVlcnlQYXJzZUVudHJ5Cit7CisJdWludDY0CQlxdWVyeV9oYXNoOwkJCS8qIEhhc2ggb2Yg bm9ybWFsaXplZCBxdWVyeSAqLworCWJvb2wJCWlzX3dyaXRlOwkJCS8qIFRydWUgaWYgSU5TRVJU L1VQREFURS9ERUxFVEUgKi8KKwlpbnQJCQludW1fdGFibGVzOwkJCS8qIE51bWJlciBvZiB0YWJs ZXMgaW4gcXVlcnkgKi8KKwljaGFyCQl0YWJsZV9uYW1lcworCQkJCVtUUkFDS19UQUJMRV9NVVRB VElPTl9NQVhfVEFCTEVTX1BFUl9RVUVSWV0KKwkJCQlbVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFC TEVfTkFNRV9MRU5dOworCWludAkJCW5leHQ7CQkJCS8qIE5leHQgZW50cnkgaW4gY29sbGlzaW9u IGNoYWluICovCisJaW50CQkJbHJ1X3ByZXY7CQkJLyogUHJldmlvdXMgaW4gTFJVIGxpc3QgKi8K KwlpbnQJCQlscnVfbmV4dDsJCQkvKiBOZXh0IGluIExSVSBsaXN0ICovCisJYm9vbAkJaW5fdXNl OwkJCQkvKiBJcyB0aGlzIGVudHJ5IGluIHVzZT8gKi8KK30gUXVlcnlQYXJzZUVudHJ5OworCisv KgorICogSGVhZGVyIGZvciB0aGUgcXVlcnkgcGFyc2UgY2FjaGUgaW4gc2hhcmVkIG1lbW9yeQor ICovCit0eXBlZGVmIHN0cnVjdCBRdWVyeVBhcnNlQ2FjaGUKK3sKKwlpbnQJCQludW1fYnVja2V0 czsJCS8qIE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi8KKwlpbnQJCQltYXhfZW50cmllczsJCS8q IE1heGltdW0gZW50cmllcyBhbGxvd2VkICovCisJaW50CQkJbnVtX2VudHJpZXM7CQkvKiBDdXJy ZW50IG51bWJlciBvZiBlbnRyaWVzICovCisJaW50CQkJZnJlZV9saXN0X2hlYWQ7CQkvKiBIZWFk IG9mIGZyZWUgZW50cnkgbGlzdCAqLworCWludAkJCWxydV9oZWFkOwkJCS8qIE1vc3QgcmVjZW50 bHkgdXNlZCAqLworCWludAkJCWxydV90YWlsOwkJCS8qIExlYXN0IHJlY2VudGx5IHVzZWQgKi8K KwkvKiBGbGV4aWJsZSBhcnJheSBtZW1iZXJzIGZvbGxvdyBpbiBzaGFyZWQgbWVtb3J5OgorCSAq IGludCBidWNrZXRzW251bV9idWNrZXRzXTsKKwkgKiBRdWVyeVBhcnNlRW50cnkgZW50cmllc1tt YXhfZW50cmllc107CisJICovCit9IFF1ZXJ5UGFyc2VDYWNoZTsKKworLyoKKyAqIEdsb2JhbCBz dGF0ZSBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZQorICovCit0eXBlZGVmIHN0cnVj dCBUcmFja1RhYmxlTXV0YXRpb25TdGF0ZQoreworCWJvb2wJCWluaXRpYWxpemVkOwkJLyogU2ht ZW0gaW5pdGlhbGl6ZWQ/ICovCisJdWludDY0CQljdXJyZW50X3R0bF91czsJCQkvKiBDdXJyZW50 IFRUTCBpbiBtaWNyb3NlY29uZHMgKi8KKwlzdHJ1Y3QgdGltZXZhbCB0dGxfbGFzdF91cGRhdGVk OwkvKiBXaGVuIFRUTCB3YXMgbGFzdCB1cGRhdGVkICovCisJc3RydWN0IHRpbWV2YWwgbGFzdF9j bGVhbnVwX3RpbWU7CS8qIFdoZW4gbGFzdCBleHBpcmVkIGNsZWFudXAgcmFuICovCisJc3RydWN0 IHRpbWV2YWwgZ2xvYmFsX2NvbGRfc3RhcnRfdW50aWw7CS8qIEdsb2JhbCBjb2xkIHN0YXJ0IGVu ZCB0aW1lICovCisJdWludDMyCQlzdGF0c19xdWVyaWVzX2NoZWNrZWQ7CS8qIFF1ZXJpZXMgY2hl Y2tlZCAqLworCXVpbnQzMgkJc3RhdHNfZm9yY2VkX3ByaW1hcnk7CS8qIEZvcmNlZCB0byBwcmlt YXJ5ICovCisJdWludDMyCQlzdGF0c19hbGxvd2VkX3JlcGxpY2E7CS8qIEFsbG93ZWQgdG8gcmVw bGljYSAqLworfSBUcmFja1RhYmxlTXV0YXRpb25TdGF0ZTsKKworLyoKKyAqIE1haW4gc2hhcmVk IG1lbW9yeSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgY29tcG9uZW50cworICovCit0eXBlZGVm IHN0cnVjdCBUcmFja1RhYmxlTXV0YXRpb25TaG1lbQoreworCVRyYWNrVGFibGVNdXRhdGlvblN0 YXRlCXN0YXRlOworCVRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZQkqdGFibGVfbWFwOworCVF1 ZXJ5UGFyc2VDYWNoZQkJKnF1ZXJ5X2NhY2hlOworfSBUcmFja1RhYmxlTXV0YXRpb25TaG1lbTsK KworLyogLS0tLS0tLS0tLS0tLS0tLQorICogUHVibGljIEFQSSBmdW5jdGlvbnMKKyAqIC0tLS0t LS0tLS0tLS0tLS0KKyAqLworCisvKgorICogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IHN0cnVj dHVyZXMgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uLgorICogQ2FsbGVkIGZyb20gcGdwb29sX21h aW4uYyBhZnRlciBwb29sX2luaXRfcG9vbF9pbmZvKCkuCisgKi8KK2V4dGVybiB2b2lkIHBvb2xf dHJhY2tfdGFibGVfbXV0YXRpb25faW5pdCh2b2lkKTsKKworLyoKKyAqIEluaXRpYWxpemUgcGVy LWNoaWxkIHByb2Nlc3Mgc3RhdGUgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uLgorICogQ2FsbGVk IGZyb20gY2hpbGQuYyB3aGVuIGEgbmV3IGNoaWxkIHByb2Nlc3Mgc3RhcnRzLgorICogU2V0cyB1 cCBjb2xkIHN0YXJ0IHRyYWNraW5nLgorICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxl X211dGF0aW9uX2NoaWxkX2luaXQodm9pZCk7CisKKy8qCisgKiBDaGVjayBpZiB0aGUgY2hpbGQg cHJvY2VzcyBpcyBpbiBjb2xkIHN0YXJ0IHBlcmlvZC4KKyAqIER1cmluZyBjb2xkIHN0YXJ0LCBh bGwgcXVlcmllcyBhcmUgcm91dGVkIHRvIHByaW1hcnkuCisgKiBSZXR1cm5zIHRydWUgaWYgaW4g Y29sZCBzdGFydCwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitleHRlcm4gYm9vbCBwb29sX3RyYWNr X3RhYmxlX211dGF0aW9uX2luX2NvbGRfc3RhcnQodm9pZCk7CisKKy8qCisgKiBUcmlnZ2VyIGEg Z2xvYmFsIGNvbGQgc3RhcnQgcGVyaW9kIGZvciBhbGwgcHJvY2Vzc2VzLgorICogVXNlZCBhZnRl ciB3YXRjaGRvZyBsZWFkZXIgY2hhbmdlIHRvIGF2b2lkIHN0YWxlIHJlYWRzLgorICovCitleHRl cm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RyaWdnZXJfZ2xvYmFsX2NvbGRfc3Rh cnQodm9pZCk7CisKKy8qCisgKiBHZXQgb2lkIG9mIGN1cnJlbnQgZGF0YWJhc2UuCisgKi8KK2V4 dGVybiBpbnQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKHZvaWQp OworCisvKgorICogQ2hlY2sgaWYgYSB0YWJsZSB3YXMgcmVjZW50bHkgd3JpdHRlbiB0byAoaXMg InN0YWxlIikuCisgKiBJZiBzdGFsZSwgcmVhZHMgZnJvbSB0aGlzIHRhYmxlIHNob3VsZCBnbyB0 byBwcmltYXJ5LgorICogUmV0dXJucyB0cnVlIGlmIHRhYmxlIGlzIHN0YWxlIChyZWNlbnRseSB3 cml0dGVuKSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitleHRlcm4gYm9vbCBwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX3RhYmxlX2lzX3N0YWxlKAorCWludCB0YWJsZV9vaWQsIGludCBkYm9pZCk7 CisKKy8qCisgKiBNYXJrIHRhYmxlcyBhcyByZWNlbnRseSB3cml0dGVuLgorICogQ2FsbGVkIGFm dGVyIElOU0VSVC9VUERBVEUvREVMRVRFIHF1ZXJpZXMgY29tcGxldGUuCisgKiB0YWJsZV9vaWRz OiBhcnJheSBvZiB0YWJsZSBvaWRzCisgKiBudW1fdGFibGVzOiBudW1iZXIgb2YgdGFibGVzIGlu IGFycmF5CisgKiBkYm9pZDogZGF0YWJhc2Ugb2lkCisgKi8KK2V4dGVybiB2b2lkIHBvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZXNfd3JpdHRlbigKKwljb25zdCBpbnQgKnRhYmxl X29pZHMsIGludCBudW1fdGFibGVzLCBpbnQgZGJvaWQpOworCisvKgorICogQ29udmVuaWVuY2Ug ZnVuY3Rpb24gdG8gbWFyayBhIHNpbmdsZSB0YWJsZSBhcyB3cml0dGVuLgorICogdGFibGVfb2lk OiB0YWJsZSBvaWQKKyAqIGRib2lkOiBkYXRhYmFzZSBvaWQKKyAqLworZXh0ZXJuIHZvaWQgcG9v bF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlX3dyaXR0ZW4oCisJaW50IHRhYmxlX29p ZCwgaW50IGRib2lkKTsKKworLyoKKyAqIFVwZGF0ZSB0aGUgVFRMIGJhc2VkIG9uIGN1cnJlbnQg cmVwbGljYXRpb24gZGVsYXkuCisgKiBDYWxsZWQgZnJvbSBwb29sX3dvcmtlcl9jaGlsZC5jIHdo ZW4gcmVwbGljYXRpb24gZGVsYXkgaXMgdXBkYXRlZC4KKyAqIGRlbGF5X3VzOiByZXBsaWNhdGlv biBkZWxheSBpbiBtaWNyb3NlY29uZHMKKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbl91cGRhdGVfdHRsKHVpbnQ2NCBkZWxheV91cyk7CisKKy8qCisgKiBMb29rIHVw IGNhY2hlZCBwYXJzZSByZXN1bHQgZm9yIGEgcXVlcnkuCisgKiBoYXNoOiBoYXNoIG9mIG5vcm1h bGl6ZWQgcXVlcnkKKyAqIGlzX3dyaXRlOiBvdXRwdXQgLSB0cnVlIGlmIHF1ZXJ5IGlzIGEgd3Jp dGUKKyAqIHRhYmxlX25hbWVzOiBvdXRwdXQgLSBhcnJheSB0byBmaWxsIHdpdGggdGFibGUgbmFt ZXMKKyAqIG51bV90YWJsZXM6IG91dHB1dCAtIG51bWJlciBvZiB0YWJsZXMgZm91bmQKKyAqIFJl dHVybnMgdHJ1ZSBpZiBmb3VuZCBpbiBjYWNoZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitleHRl cm4gYm9vbCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9jYWNoZWRfcGFyc2UoCisJdWlu dDY0IGhhc2gsIGJvb2wgKmlzX3dyaXRlLAorCWNoYXIgdGFibGVfbmFtZXNbXVtUUkFDS19UQUJM RV9NVVRBVElPTl9UQUJMRV9OQU1FX0xFTl0sCisJaW50ICpudW1fdGFibGVzKTsKKworLyoKKyAq IENhY2hlIGEgcGFyc2UgcmVzdWx0IGZvciBhIHF1ZXJ5LgorICogaGFzaDogaGFzaCBvZiBub3Jt YWxpemVkIHF1ZXJ5CisgKiBpc193cml0ZTogdHJ1ZSBpZiBxdWVyeSBpcyBhIHdyaXRlCisgKiB0 YWJsZV9uYW1lczogYXJyYXkgb2YgdGFibGUgbmFtZXMKKyAqIG51bV90YWJsZXM6IG51bWJlciBv ZiB0YWJsZXMKKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9jYWNo ZV9wYXJzZSgKKwl1aW50NjQgaGFzaCwgYm9vbCBpc193cml0ZSwKKwljb25zdCBjaGFyIHRhYmxl X25hbWVzW11bVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfTkFNRV9MRU5dLAorCWludCBudW1f dGFibGVzKTsKKworLyoKKyAqIE5vcm1hbGl6ZSBhIHF1ZXJ5IGFuZCBjb21wdXRlIGl0cyBoYXNo LgorICogU3RyaXBzIGNvbW1lbnRzLCBub3JtYWxpemVzIHdoaXRlc3BhY2UgYW5kIGxpdGVyYWxz LgorICogcXVlcnk6IGlucHV0IFNRTCBxdWVyeSBzdHJpbmcKKyAqIFJldHVybnM6IDY0LWJpdCBo YXNoIG9mIG5vcm1hbGl6ZWQgcXVlcnkKKyAqLworZXh0ZXJuIHVpbnQ2NCBwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX25vcm1hbGl6ZV9hbmRfaGFzaChjb25zdCBjaGFyICpxdWVyeSk7CisKKy8q CisgKiBDYWxjdWxhdGUgcmVxdWlyZWQgc2hhcmVkIG1lbW9yeSBzaXplIGZvciB0cmFjayB0YWJs ZSBtdXRhdGlvbi4KKyAqLworZXh0ZXJuIFNpemUgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9z aG1lbV9zaXplKHZvaWQpOworCisjZW5kaWYgLyogUE9PTF9UUkFDS19UQUJMRV9NVVRBVElPTl9I ICovCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jIGIvc3JjL21haW4vcGdwb29s X21haW4uYwppbmRleCBmYTA1ZTE1ZTdhYzQzNWUwNzIyOTgwNjNmOTE4YzcwYWE0ZTU2ODBjLi4z OTUxOTFhMWM1M2ExZDc2NDM4Y2U1MjE0ODM3NWVhODlmNGYzMmNmIDEwMDY0NAotLS0gYS9zcmMv bWFpbi9wZ3Bvb2xfbWFpbi5jCisrKyBiL3NyYy9tYWluL3BncG9vbF9tYWluLmMKQEAgLTU3LDYg KzU3LDcgQEAKICNpbmNsdWRlICJhdXRoL3Bvb2xfcGFzc3dkLmgiCiAjaW5jbHVkZSAiYXV0aC9w b29sX2hiYS5oIgogI2luY2x1ZGUgInF1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmgiCisjaW5j bHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oIgogI2luY2x1ZGUgIndhdGNo ZG9nL3dkX2ludGVybmFsX2NvbW1hbmRzLmgiCiAjaW5jbHVkZSAid2F0Y2hkb2cvd2RfbGlmZWNo ZWNrLmgiCiAjaW5jbHVkZSAid2F0Y2hkb2cvd2F0Y2hkb2cuaCIKQEAgLTE0ODUsMTEgKzE0ODYs MTQgQEAgc2lndXNyMV9pbnRlcnJ1cHRfcHJvY2Vzc29yKHZvaWQpCiAKIAlpZiAodXNlcjFTaWdu YWxTbG90LT5zaWduYWxGbGFnc1tTSUdfV0FUQ0hET0dfU1RBVEVfQ0hBTkdFRF0pCiAJeworCQlX RF9TVEFURVMJd2Rfc3RhdGU7CisKIAkJZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygiUGdwb29s LUlJIHBhcmVudCBwcm9jZXNzIHJlY2VpdmVkIHdhdGNoZG9nIHN0YXRlIGNoYW5nZSBzaWduYWwg ZnJvbSB3YXRjaGRvZyIpKSk7CiAKIAkJdXNlcjFTaWduYWxTbG90LT5zaWduYWxGbGFnc1tTSUdf V0FUQ0hET0dfU1RBVEVfQ0hBTkdFRF0gPSBmYWxzZTsKLQkJaWYgKHdkX2ludGVybmFsX2dldF93 YXRjaGRvZ19sb2NhbF9ub2RlX3N0YXRlKCkgPT0gV0RfU1RBTkRCWSkKKwkJd2Rfc3RhdGUgPSB3 ZF9pbnRlcm5hbF9nZXRfd2F0Y2hkb2dfbG9jYWxfbm9kZV9zdGF0ZSgpOworCQlpZiAod2Rfc3Rh dGUgPT0gV0RfU1RBTkRCWSkKIAkJewogCQkJZXJlcG9ydChMT0csCiAJCQkJCShlcnJtc2coIndl IGhhdmUgam9pbmVkIHRoZSB3YXRjaGRvZyBjbHVzdGVyIGFzIFNUQU5EQlkgbm9kZSIpLApAQCAt MTUwMyw2ICsxNTA3LDEyIEBAIHNpZ3VzcjFfaW50ZXJydXB0X3Byb2Nlc3Nvcih2b2lkKQogCQkJ ICovCiAJCQlwb29sX3JlbGVhc2VfZm9sbG93X3ByaW1hcnlfbG9jayh0cnVlKTsKIAkJfQorCQll bHNlIGlmICh3ZF9zdGF0ZSA9PSBXRF9DT09SRElOQVRPUiAmJgorCQkJCSBwb29sX2NvbmZpZy0+ ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJCQkgRExCT1dfRE1MX0FEQVBUSVZF X0dMT0JBTCkKKwkJeworCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90cmlnZ2VyX2dsb2Jh bF9jb2xkX3N0YXJ0KCk7CisJCX0KIAl9CiAJaWYgKHVzZXIxU2lnbmFsU2xvdC0+c2lnbmFsRmxh Z3NbU0lHX0ZBSUxPVkVSX0lOVEVSUlVQVF0pCiAJewpAQCAtMzA2OCw2ICszMDc4LDE2IEBAIGlu aXRpYWxpemVfc2hhcmVkX21lbV9vYmplY3RzKGJvb2wgY2xlYXJfbWVtY2FjaGVfb2lkbWFwcykK IAkJZWxvZyhERUJVRzEsICJ3YXRjaGRvZzogJXp1IGJ5dGVzIHJlcXVlc3RlZCBmb3Igc2hhcmVk IG1lbW9yeSIsIE1BWEFMSUdOKHdkX2lwY19nZXRfc2hhcmVkX21lbV9zaXplKCkpKTsKIAl9CiAK KwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCURM Qk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJeworCQlzaXplICs9IE1BWEFMSUdOKHBvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSgpKTsKKwkJZWxvZyhERUJVRzEsCisJCQkgInRy YWNrX3RhYmxlX211dGF0aW9uOiAlenUgYnl0ZXMgcmVxdWVzdGVkIgorCQkJICIgZm9yIHNoYXJl ZCBtZW1vcnkiLAorCQkJIE1BWEFMSUdOKHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1f c2l6ZSgpKSk7CisJfQorCiAJaW5pdGlhbGl6ZV9zaGFyZWRfbWVtb3J5X21haW5fc2VnbWVudChz aXplKTsKIAogCS8qIE1vdmUgdGhlIGJhY2tlbmQgZGVzY3JpcHRvcnMgdG8gc2hhcmVkIG1lbW9y eSAqLwpAQCAtMzE4NCw2ICszMjA0LDEzIEBAIGluaXRpYWxpemVfc2hhcmVkX21lbV9vYmplY3Rz KGJvb2wgY2xlYXJfbWVtY2FjaGVfb2lkbWFwcykKIAkJd2RfaXBjX2luaXRpYWxpemVfZGF0YSgp OwogCX0KIAorCS8qIEluaXRpYWxpemUgdHJhY2sgdGFibGUgbXV0YXRpb24gZm9yIHJlY2VudGx5 IHdyaXR0ZW4gdGFibGVzICovCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5j ZV9vbl93cml0ZSA9PQorCQlETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCXsKKwkJcG9vbF90 cmFja190YWJsZV9tdXRhdGlvbl9pbml0KCk7CisJfQorCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9z cmMvcHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMgYi9zcmMvcHJvdG9jb2wvQ29tbWFuZENvbXBs ZXRlLmMKaW5kZXggYTNiOGYwZWExOTRmZmVjYzc5ZTU4NTY2YmU4MDU2MmE0NmViNzVhYi4uYTRl YzgzZjkzOGM3NGEzMzlhYjZhMWI4YmNhMmRjNTQ3Y2M1YzIxOSAxMDA2NDQKLS0tIGEvc3JjL3By b3RvY29sL0NvbW1hbmRDb21wbGV0ZS5jCisrKyBiL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxl dGUuYwpAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgInV0aWxzL3BhbGxvYy5oIgogI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJlYW0uaCIKKyNp bmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCisjaW5jbHVkZSAicXVl cnlfY2FjaGUvcG9vbF9tZW1xY2FjaGUuaCIKIAogc3RhdGljIGludAlleHRyYWN0X250dXBsZXMo Y2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgUE9PTF9TVEFUVVMgaGFuZGxlX21pc21hdGNoX3R1cGxl cyhQT09MX0NPTk5FQ1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2Vu ZCwgY2hhciAqcGFja2V0LCBpbnQgcGFja2V0bGVuLCBib29sIGNvbW1hbmRfY29tcGxldGUpOwpA QCAtMzA0LDYgKzMwNiwzMyBAQCBoYW5kbGVfcXVlcnlfY29udGV4dChQT09MX0NPTk5FQ1RJT05f UE9PTCAqYmFja2VuZCkKIAogCW5vZGUgPSBzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2NvbnRleHQt PnBhcnNlX3RyZWU7CiAKKwkvKgorCSAqIFRyYWNrIHRhYmxlIHdyaXRlcyBmb3IgZG1sX2FkYXB0 aXZlX2dsb2JhbCBmZWF0dXJlLgorCSAqIEZvciBhdXRvY29tbWl0IHN0YXRlbWVudHMgKG5vdCBp biBleHBsaWNpdCB0cmFuc2FjdGlvbiksIG1hcmsgdGFibGVzCisJICogaW1tZWRpYXRlbHkuIEZv ciBleHBsaWNpdCB0cmFuc2FjdGlvbnMsIG1hcmtpbmcgaXMgZGVmZXJyZWQgdG8gQ09NTUlUCisJ ICogaW4gZG1sX2FkYXB0aXZlKCkgc28gdGhhdCBST0xMQkFDS2VkIHdyaXRlcyBkb24ndCBwb2xs dXRlIHRoZSBzaGFyZWQKKwkgKiBtZW1vcnkgdGFibGUgbWFwLgorCSAqLworCWlmIChwb29sX2Nv bmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJRExCT1dfRE1MX0FEQVBU SVZFX0dMT0JBTCAmJgorCQlub2RlICE9IE5VTEwgJiYKKwkJIXNlc3Npb25fY29udGV4dC0+aXNf aW5fdHJhbnNhY3Rpb24pCisJeworCQlpbnQJCSAgICpvaWRzOworCQlpbnQJCQludW1fb2lkczsK KworCQludW1fb2lkcyA9IHBvb2xfZXh0cmFjdF90YWJsZV9vaWRzKG5vZGUsICZvaWRzKTsKKwkJ aWYgKG51bV9vaWRzID4gMCkKKwkJeworCQkJaW50CQlkYm9pZDsKKworCQkJZGJvaWQgPSBwb29s X3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWQoKTsKKwkJCWlmIChkYm9pZCA+ IDApCisJCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlc193cml0dGVuKAor CQkJCQlvaWRzLCBudW1fb2lkcywgZGJvaWQpOworCQl9CisJfQorCiAJaWYgKElzQShub2RlLCBQ cmVwYXJlU3RtdCkpCiAJewogCQlpZiAoc2Vzc2lvbl9jb250ZXh0LT51bmNvbXBsZXRlZF9tZXNz YWdlKQpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvY29sL2NoaWxkLmMgYi9zcmMvcHJvdG9jb2wvY2hp bGQuYwppbmRleCBjMzRmMDU3MjgxYmU2MmZlYWYzOWRiMWJiNjA1MDYyZjU2ZGMzOThjLi4zMTZi NzYyMzlkMTYzYmZkYjQyOGYwMzQ0NjM4NDA1OTI2MWYzNGJlIDEwMDY0NAotLS0gYS9zcmMvcHJv dG9jb2wvY2hpbGQuYworKysgYi9zcmMvcHJvdG9jb2wvY2hpbGQuYwpAQCAtNTcsNiArNTcsNyBA QAogI2luY2x1ZGUgInV0aWxzL2Vsb2cuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIK ICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNr X3RhYmxlX211dGF0aW9uLmgiCiAKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfcHJvY2Vzc19jb250 ZXh0LmgiCiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgpAQCAtMjEz LDYgKzIxNCwxMyBAQCBkb19jaGlsZChpbnQgKmZkcykKIAkvKiBJbml0aWFsaXplIHBlciBwcm9j ZXNzIGNvbnRleHQgKi8KIAlwb29sX2luaXRfcHJvY2Vzc19jb250ZXh0KCk7CiAKKwkvKiBJbml0 aWFsaXplIHRyYWNrIHRhYmxlIG11dGF0aW9uIGNoaWxkIHN0YXRlIGZvciBjb2xkIHN0YXJ0IHRy YWNraW5nICovCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0 ZSA9PQorCQlETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCXsKKwkJcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbl9jaGlsZF9pbml0KCk7CisJfQorCiAJLyogaW5pdGlhbGl6ZSBjb25uZWN0aW9u IHBvb2wgKi8KIAlpZiAocG9vbF9pbml0X2NwKCkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL3Byb3Rv Y29sL3Bvb2xfcHJvdG9fbW9kdWxlcy5jIGIvc3JjL3Byb3RvY29sL3Bvb2xfcHJvdG9fbW9kdWxl cy5jCmluZGV4IGY5NDU4YmI1NTdhY2I4MTI4YTZmMGQzNDExZDRmMDhjMWY1OThjMjkuLjcwNmFi ZmY1YmRiZDI0ZmVlNDA3ZWUyYTgyZTg5MTFmNzQ2OTVlYTYgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90 b2NvbC9wb29sX3Byb3RvX21vZHVsZXMuYworKysgYi9zcmMvcHJvdG9jb2wvcG9vbF9wcm90b19t b2R1bGVzLmMKQEAgLTE0NjEsNyArMTQ2MSw5IEBAIFBhcnNlKFBPT0xfQ09OTkVDVElPTiAqZnJv bnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpiYWNrZW5kLAogCQlwb29sX3doZXJlX3RvX3Nl bmQocXVlcnlfY29udGV4dCwgcXVlcnlfY29udGV4dC0+b3JpZ2luYWxfcXVlcnksCiAJCQkJCQkg ICBxdWVyeV9jb250ZXh0LT5wYXJzZV90cmVlKTsKIAotCQlpZiAocG9vbF9jb25maWctPmRpc2Fi bGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBzdHJsZW4o bmFtZSkgIT0gMCkKKwkJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRSgKKwkJCQlwb29sX2NvbmZp Zy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpCisJCQkmJiBzdHJsZW4obmFtZSkgIT0g MCkKIAkJCXBvb2xfc2V0YWxsX25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0KTsKIAogCQlp ZiAoUkVQTElDQVRJT04pCkBAIC0xODA0LDcgKzE4MDYsNyBAQCBCaW5kKFBPT0xfQ09OTkVDVElP TiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpiYWNrZW5kLAogCQkJcmV0dXJuIFBP T0xfRU5EOwogCX0KIAotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25f d3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmCisJaWYgKERMQk9XX0lTX0RNTF9BREFQVElW RShwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpICYmCiAJCVRTVEFU RShiYWNrZW5kLCBNQUlOX1JFUExJQ0EgPyBQUklNQVJZX05PREVfSUQgOiBSRUFMX01BSU5fTk9E RV9JRCkgPT0gJ1QnKQogCXsKIAkJcG9vbF93aGVyZV90b19zZW5kKHF1ZXJ5X2NvbnRleHQsIHF1 ZXJ5X2NvbnRleHQtPm9yaWdpbmFsX3F1ZXJ5LApkaWZmIC0tZ2l0IGEvc3JjL3F1ZXJ5X2NhY2hl L3Bvb2xfbWVtcWNhY2hlLmMgYi9zcmMvcXVlcnlfY2FjaGUvcG9vbF9tZW1xY2FjaGUuYwppbmRl eCBmMzhmNzExNDY5NTc2MzQyY2U1OTQ2OWIwODVjOTczNjUxMTYwMDRjLi5kY2E5MzMzNGU5ZTQ3 YmI3OTc4MDY0ZWRlY2U1Y2EwZTQwMDIxY2UzIDEwMDY0NAotLS0gYS9zcmMvcXVlcnlfY2FjaGUv cG9vbF9tZW1xY2FjaGUuYworKysgYi9zcmMvcXVlcnlfY2FjaGUvcG9vbF9tZW1xY2FjaGUuYwpA QCAtMTMwNSw2ICsxMzA1LDEyIEBAIHBvb2xfZXh0cmFjdF90YWJsZV9vaWRzKE5vZGUgKm5vZGUs IGludCAqKm9pZHNwKQogCQl9CiAJCXJldHVybiBudW1fb2lkczsKIAl9CisJZWxzZSBpZiAoSXNB KG5vZGUsIE1lcmdlU3RtdCkpCisJeworCQlNZXJnZVN0bXQgICpzdG10ID0gKE1lcmdlU3RtdCAq KSBub2RlOworCisJCXRhYmxlID0gbWFrZV90YWJsZV9uYW1lX2Zyb21fcmFuZ2V2YXIoc3RtdC0+ cmVsYXRpb24pOworCX0KIAllbHNlIGlmIChJc0Eobm9kZSwgRXhwbGFpblN0bXQpKQogCXsKIAkJ TGlzdENlbGwgICAqY2VsbDsKZGlmZiAtLWdpdCBhL3NyYy9zYW1wbGUvcGdwb29sLmNvbmYuc2Ft cGxlLXN0cmVhbSBiL3NyYy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbQppbmRleCAx YWM5ODI5MDdkMmRlM2FkOGNiOGQxYzcwYTczZGM0MTQyOGMxMzI3Li4wMDEzMmQ1MzRmNGM3OGY2 ODQ0ZGYxNmFlZTY3MzY1YThkMTAyYTYxIDEwMDY0NAotLS0gYS9zcmMvc2FtcGxlL3BncG9vbC5j b25mLnNhbXBsZS1zdHJlYW0KKysrIGIvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3Ry ZWFtCkBAIC00NzgsNiArNDc4LDE0IEBAIGJhY2tlbmRfY2x1c3RlcmluZ19tb2RlID0gc3RyZWFt aW5nX3JlcGxpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAg IG1vZGlmaWVkIHdpdGhpbiB0aGUgY3VycmVudCBleHBsaWNpdCB0cmFuc2FjdGlvbiB3aWxsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vdCBiZSBsb2FkIGJhbGFu Y2VkIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg ZG1sX2FkYXB0aXZlX2dsb2JhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyAgICAgU3VwZXJzZXQgb2YgZG1sX2FkYXB0aXZlLiBJbiBhZGRpdGlvbiB0byBwZXItdHJhbnNh Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgdHJhY2tpbmcs IHVzZXMgc2hhcmVkIG1lbW9yeSB0byB0cmFjayByZWNlbnRseSB3cml0dGVuCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIHRhYmxlcyBhY3Jvc3MgYWxsIHNlc3Npb25z LiBSZWFkcyBmcm9tIHJlY2VudGx5IHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyAgICAgdGFibGVzIGFyZSByb3V0ZWQgdG8gcHJpbWFyeSB1bnRpbCBhIFRUTCAo YmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgcmVwbGlj YXRpb24gZGVsYXkpIGV4cGlyZXMuIFJlcXVpcmVzIGFkZGl0aW9uYWwgc2hhcmVkCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG1lbW9yeS4gU2VlIHRyYWNrX3RhYmxl X211dGF0aW9uXyogcGFyYW1ldGVycyBiZWxvdy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsd2F5czoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgaWYgYSB3cml0ZSBxdWVy eSBpcyBpc3N1ZWQsIHJlYWQgcXVlcmllcyB3aWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgICAgIG5vdCBiZSBsb2FkIGJhbGFuY2VkIHVudGlsIHRoZSBzZXNzaW9uIGVu ZHMuCkBAIC00OTksNiArNTA3LDU0IEBAIGJhY2tlbmRfY2x1c3RlcmluZ19tb2RlID0gc3RyZWFt aW5nX3JlcGxpY2F0aW9uCiAjc3RhdGVtZW50X2xldmVsX2xvYWRfYmFsYW5jZSA9IG9mZgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEVuYWJsZXMgc3RhdGVtZW50IGxldmVs IGxvYWQgYmFsYW5jaW5nCiAKKyMgLSBUcmFjayBUYWJsZSBNdXRhdGlvbiAodXNlZCBieSBkbWxf YWRhcHRpdmVfZ2xvYmFsKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg V0FSTklORzogZG1sX2FkYXB0aXZlX2dsb2JhbCBpbmNyZWFzZXMgc2hhcmVkIG1lbW9yeSB1c2Fn ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERlZmF1bHQgc2V0dGluZ3Mg cmVxdWlyZSB+Ni40IE1CIHNoYXJlZCBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyAoMC4xIE1CIHRhYmxlIHRyYWNraW5nICsgNi4zIE1CIHF1ZXJ5IGNhY2hlKQor CisjdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9IDUuMAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIFRUTCBtdWx0aXBsaWVyOiBUVEwgPSByZXBsaWNhdGlvbl9k ZWxheSAqIGZhY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhpZ2hl ciB2YWx1ZXMgcHJvdmlkZSBtb3JlIHNhZmV0eSBtYXJnaW4KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBSYW5nZTogMS4wLTEwMC4wIChkZWZhdWx0OiA1LjApCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZWxvYWQpCisK KyN0cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzID0gNjAwMDAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBNYXhpbXVtIGR1cmF0aW9uIChtcykgYSB0YWJsZSBj YW4gYmUgbWFya2VkIHN0YWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg ZnJvbSBpdHMgZmlyc3Qgd3JpdGUuIEJvdW5kcyBjcm9zcy1zZXNzaW9uIGltcGFjdDoKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBldmVuIHVuZGVyIGNvbnRpbnVvdXMgd3Jp dGVzLCBzdGFsZW5lc3MgZXhwaXJlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIGFmdGVyIHRoaXMgcGVyaW9kIGFuZCBpcyBvbmx5IHJlbmV3ZWQgYnkgbmV3IHdyaXRlcy4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAwIGRpc2FibGVzIHRoZSBjYXAu IFJhbmdlOiAwLTM2MDAwMDAgKGRlZmF1bHQ6IDYwMDAwID0gNjBzKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVsb2FkKQorCisjdHJhY2tf dGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbiA9IDIwMDAKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBEdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdG8gcm91dGUg YWxsIHF1ZXJpZXMgdG8gcHJpbWFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIGFmdGVyIGNoaWxkIHByb2Nlc3Mgc3RhcnRzIChjb2xkIHN0YXJ0IHBlcmlvZCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMC02MDAwMCBtcyAoZGVmYXVs dDogMjAwMCBtcyA9IDIgc2Vjb25kcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBTZXQgdG8gMCB0byBkaXNhYmxlIGNvbGQgc3RhcnQgYmVoYXZpb3IKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlbG9hZCkKKworI3Ry YWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMgPSAxMDI0CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdHJhY2sgdGFi bGUgbXV0YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIaWdoZXIg dmFsdWVzIHJlZHVjZSBoYXNoIGNvbGxpc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBSYW5nZTogNjQtNjU1MzYgKGRlZmF1bHQ6IDEwMjQpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQorCisjdHJh Y2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSA9IDIwNDgKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBNYXhpbXVtIG51bWJlciBvZiB0YWJsZXMgdG8gdHJhY2sgc2ltdWx0 YW5lb3VzbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMTI4 LTEzMTA3MiAoZGVmYXVsdDogMjA0OCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCisKKyN0cmFja190YWJsZV9tdXRhdGlvbl9x dWVyeV9idWNrZXRzID0gMjA0OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHF1ZXJ5IHBhcnNlIGNhY2hlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDY0LTY1NTM2IChkZWZhdWx0OiAyMDQ4 KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMg cmVzdGFydCkKKworI3RyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUg PSAxMDAwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heGltdW0gbnVt YmVyIG9mIHF1ZXJ5IHBhcnNlIHJlc3VsdHMgdG8gY2FjaGUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBSYW5nZTogMTAwLTEwMDAwMDAgKGRlZmF1bHQ6IDEwMDAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1lbW9yeSB1c2FnZTogfjY0MCBieXRl cyBwZXIgZW50cnkgKH42LjMgTUIgZGVmYXVsdCwgfjY0IE1CIGZvciAxMDAwMDApCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQor CiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFNUUkVBTUlORyBSRVBMSUNBVElPTiBNT0RFCiAj LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0 aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMgYi9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xf d29ya2VyX2NoaWxkLmMKaW5kZXggMzExYjYzODY1OGU2NmViYjU2MTYyYWQ5ZmE0MzkyMzE1YjJk ZjY0ZS4uN2VhZjYzMDEwZDc5Yzc1YmE4MmEyNzM2MWJmZjZmY2RiYzYwZGZjNiAxMDA2NDQKLS0t IGEvc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jCisrKyBiL3Ny Yy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYwpAQCAtNTgsNiArNTgs NyBAQAogI2luY2x1ZGUgInV0aWxzL3Bvb2xfaXAuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0 dXMuaCIKICNpbmNsdWRlICJ1dGlscy9wb29sX3N0cmVhbS5oIgorI2luY2x1ZGUgInV0aWxzL3Bv b2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCIKIAogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9wcm9j ZXNzX2NvbnRleHQuaCIKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0Lmgi CkBAIC02OTUsNiArNjk2LDcgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWdfd2l0aF9jbWQo dm9pZCkKIAlkb3VibGUJCWRlbGF5X21zOwogCXVpbnQ2NAkJZGVsYXk7CiAJdWludDY0CQlkZWxh eV90aHJlc2hvbGRfYnlfdGltZTsKKwl1aW50NjQJCW1heF9kZWxheV91cyA9IDA7CS8qIFRyYWNr IG1heCBkZWxheSBmb3IgbXV0YXRpb24gbWFwICovCiAJaW50CQkJdG9rZW5fY291bnQgPSAwOwog CWludAkJCXByaW1hcnlfbm9kZV9pZDsKIAlpbnQJCQlzYXZlX2Vycm5vOwpAQCAtMTAwMyw2ICsx MDA1LDEwIEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnX3dpdGhfY21kKHZvaWQpCiAJCQli a2luZm8tPnN0YW5kYnlfZGVsYXkgPSBkZWxheTsKIAkJCWJraW5mby0+c3RhbmRieV9kZWxheV9i eV90aW1lID0gdHJ1ZTsKIAorCQkJLyogVHJhY2sgbWF4aW11bSBkZWxheSBmb3IgdGFibGUgbXV0 YXRpb24gbWFwIFRUTCBjYWxjdWxhdGlvbiAqLworCQkJaWYgKGRlbGF5ID4gbWF4X2RlbGF5X3Vz KQorCQkJCW1heF9kZWxheV91cyA9IGRlbGF5OworCiAJCQkvKgogCQkJICogTG9nIGRlbGF5IGlm IG5lY2Vzc2FyeS4gdGhyZXNob2xkIGlzIGluIG1pbGxpc2Vjb25kcywgY29udmVydAogCQkJICog dG8gbWljcm9zZWNvbmRzLgpAQCAtMTAyMSw2ICsxMDI3LDEyIEBAIGNoZWNrX3JlcGxpY2F0aW9u X3RpbWVfbGFnX3dpdGhfY21kKHZvaWQpCiAJCQl0b2tlbiA9IHN0cnRva19yKE5VTEwsICIgXHRc biIsICZzYXZlcHRyKTsKIAkJfQogCisJCS8qIFVwZGF0ZSB0YWJsZSBtdXRhdGlvbiBUVEwgYmFz ZWQgb24gbWF4IG9ic2VydmVkIGRlbGF5ICovCisJCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9s b2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgJiYK KwkJCW1heF9kZWxheV91cyA+IDApCisJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3VwZGF0 ZV90dGwobWF4X2RlbGF5X3VzKTsKKwogCX0KIAlQR19DQVRDSCgpOwogCXsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5zaCBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5z aAppbmRleCA3YzVhMGMxODIxMTkxYTU3MjQzMGI2NThkODBhYjM0NTU0MTEwMzYzLi4xYzhhZTM5 MmRhYTEwMDU2MTE5YzA5YzcxMjdlODM5ZDg1OWQ3MDBkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzaW9uL2xpYnMuc2gKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi9saWJzLnNoCkBAIC00 Miw2ICs0Miw4IEBAIGZ1bmN0aW9uIHdhaXRfZm9yX2ZhaWxvdmVyX2RvbmUgewogZnVuY3Rpb24g Y2xlYW5fYWxsIHsKIAlwZ3JlcCBwZ3Bvb2wgfCB4YXJncyBraWxsIC05ID4gL2Rldi9udWxsIDI+ JjEKIAlwZ3JlcCBwb3N0Z3JlcyB8IHhhcmdzIGtpbGwgLTkgPiAvZGV2L251bGwgMj4mMQorCSMg Q2xlYW4gdXAgbGVha2VkIFN5c1YgSVBDIHJlc291cmNlcyBsZWZ0IGJlaGluZCBieSBraWxsIC05 CisJaXBjcm0gLS1hbGwgMj4vZGV2L251bGwgfHwgdHJ1ZQogCXJtIC1mICRQR1NPQ0tFVF9ESVIv LnMuUEdTUUwuKgogCW5ldHN0YXQgLXQgLXAgMj4vZGV2L251bGx8Z3JlcCBwZ3Bvb2wKIH0KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQyLnRyYWNrX3RhYmxlX211dGF0 aW9uL3Rlc3Quc2ggYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0Mi50cmFja190YWJsZV9t dXRhdGlvbi90ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiNGRkMTdiODIwZDM2ZTNmYzQ4MjE2YWM3ZjA1 NDRjYmYwZjVhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3Rz LzA0Mi50cmFja190YWJsZV9tdXRhdGlvbi90ZXN0LnNoCkBAIC0wLDAgKzEsMzU0IEBACisjIS91 c3IvYmluL2VudiBiYXNoCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB0ZXN0IHNjcmlwdCBmb3IgdHJhY2sgdGFi bGUgbXV0YXRpb24gZmVhdHVyZSAoaW4tbWVtb3J5IHRhYmxlIHRyYWNraW5nKS4KKyMgVGVzdHMg cm91dGluZyBvZiBxdWVyaWVzIGJhc2VkIG9uIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzLgorIwor c291cmNlICRURVNUTElCUworVEVTVERJUj10ZXN0ZGlyCitQU1FMPSRQR0JJTi9wc3FsCitQU1FM T1BUUz0iLWEgLXEgLVgiCitQR1BPT0xCSU49JFBHUE9PTF9JTlNUQUxMX0RJUi9iaW4KK2V4cG9y dCBQR0RBVEFCQVNFPXRlc3QKKworIyBPbmx5IHJ1biBpbiBzdHJlYW1pbmcgcmVwbGljYXRpb24g bW9kZSBzaW5jZSB0aGF0J3MgdGhlIHRhcmdldCB1c2UgY2FzZQorZm9yIG1vZGUgaW4gcworZG8K KyAgICBybSAtZnIgJFRFU1RESVIKKyAgICBta2RpciAkVEVTVERJUgorICAgIGNkICRURVNURElS CisKKyAgICAjIENyZWF0ZSB0ZXN0IGVudmlyb25tZW50IHdpdGggMiBub2RlcworICAgIGVjaG8g LW4gImNyZWF0aW5nIHRlc3QgZW52aXJvbm1lbnQuLi4iCisgICAgJFBHUE9PTF9TRVRVUCAtbSAk bW9kZSAtbiAyIHx8IGV4aXQgMQorICAgIGVjaG8gImRvbmUuIgorCisgICAgc291cmNlIC4vYmFz aHJjLnBvcnRzCisKKyAgICAjIENvbmZpZ3VyZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJl IHZpYSBkbWxfYWRhcHRpdmVfZ2xvYmFsCisgICAgZWNobyAiZGlzYWJsZV9sb2FkX2JhbGFuY2Vf b25fd3JpdGUgPSAnZG1sX2FkYXB0aXZlX2dsb2JhbCciID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAg IGVjaG8gInRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IgPSA1LjAiID4+IGV0Yy9wZ3Bv b2wuY29uZgorICAgIGVjaG8gInRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRp b24gPSAxMDAwMCIgPj4gZXRjL3BncG9vbC5jb25mCisKKyAgICAjIEVuYWJsZSBsb2FkIGJhbGFu Y2luZyBleHBsaWNpdGx5CisgICAgZWNobyAibG9hZF9iYWxhbmNlX21vZGUgPSBvbiIgPj4gZXRj L3BncG9vbC5jb25mCisKKyAgICAjIENvbmZpZ3VyZSB3ZWlnaHRzIHNvIHdlIGNhbiBkaXN0aW5n dWlzaCByb3V0aW5nCisgICAgIyBCYWNrZW5kIDAgKHByaW1hcnkpIHdlaWdodD0wLCBCYWNrZW5k IDEgKHN0YW5kYnkpIHdlaWdodD0xCisgICAgIyBUaGlzIG1lYW5zIGxvYWQgYmFsYW5jZWQgcXVl cmllcyBnbyB0byBub2RlIDEgYnkgZGVmYXVsdAorICAgIGVjaG8gImJhY2tlbmRfd2VpZ2h0MCA9 IDAiID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAgIGVjaG8gImJhY2tlbmRfd2VpZ2h0MSA9IDEiID4+ IGV0Yy9wZ3Bvb2wuY29uZgorCisgICAgIyBFbmFibGUgZGVidWcgbG9nZ2luZyB0byBzZWUgcm91 dGluZyBkZWNpc2lvbnMKKyAgICBlY2hvICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIiA+PiBl dGMvcGdwb29sLmNvbmYKKworICAgIC4vc3RhcnRhbGwKKworICAgIGV4cG9ydCBQR1BPUlQ9JFBH UE9PTF9QT1JUCisgICAgZXhwb3J0IFBHSE9TVD1sb2NhbGhvc3QKKworICAgIHdhaXRfZm9yX3Bn cG9vbF9zdGFydHVwCisKKyAgICAjIENyZWF0ZSB0ZXN0IHRhYmxlcworICAgICRQU1FMIHRlc3Qg PDxFT0YKK0NSRUFURSBUQUJMRSB0MShpIElOVEVHRVIpOworQ1JFQVRFIFRBQkxFIHQyKGkgSU5U RUdFUik7CitDUkVBVEUgVEFCTEUgdDMoaSBJTlRFR0VSKTsKK0VPRgorCisgICAgZWNobyAiPT09 IFRlc3QgMTogQ29sZCBTdGFydCBSb3V0aW5nID09PSIKKyAgICAjIER1cmluZyBjb2xkIHN0YXJ0 LCBhbGwgcXVlcmllcyBzaG91bGQgZ28gdG8gcHJpbWFyeQorICAgICMgUmVzdGFydCBwZ3Bvb2wg dG8gdHJpZ2dlciBjb2xkIHN0YXJ0CisgICAgLi9zaHV0ZG93bmFsbAorICAgIC4vc3RhcnRhbGwK KyAgICB3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisgICAgIyBJbW1lZGlhdGVseSBxdWVyeSAt IHNob3VsZCBnbyB0byBwcmltYXJ5IGR1ZSB0byBjb2xkIHN0YXJ0CisgICAgJFBTUUwgdGVzdCAt YyAiU0VMRUNUICdjb2xkX3N0YXJ0X3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQxOyIgPiAvZGV2 L251bGwgMj4mMQorCisgICAgIyBDaGVjayBsb2cgZm9yIGNvbGQgc3RhcnQgbWVzc2FnZSAodXNl IC1hIHRvIGhhbmRsZSBiaW5hcnkgbG9nIGZpbGVzKQorICAgIGlmIGdyZXAgLWEgLXEgImNvdWxk IG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSBtdXRhdGlvbiBjb2xkIHN0 YXJ0IiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDEgUEFTU0VEOiBD b2xkIHN0YXJ0IHJvdXRpbmcgd29ya3MiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDEg RkFJTEVEOiBDb2xkIHN0YXJ0IHJvdXRpbmcgbm90IGRldGVjdGVkIgorICAgICAgICAuL3NodXRk b3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCAyOiBX YWl0IGZvciBjb2xkIHN0YXJ0IHRvIGVuZCA9PT0iCisgICAgIyBXYWl0IGZvciBjb2xkIHN0YXJ0 IHBlcmlvZCB0byBlbmQgKDEwIHNlY29uZHMpLgorICAgICMgVXNlIGdlbmVyb3VzIG1hcmdpbiB0 byBhdm9pZCBmbGFraW5lc3MgdW5kZXIgbG9hZCAoZS5nLiBmdWxsIHJlZ3Jlc3Npb24gc3VpdGUp LgorICAgIHNsZWVwIDEyCisKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wu bG9nCisKKyAgICAjIE5vdyBhIGNsZWFuIHRhYmxlIHF1ZXJ5IHNob3VsZCBsb2FkIGJhbGFuY2Ug KGdvIHRvIG5vZGUgMSkKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2FmdGVyX2NvbGRfc3Rh cnQnIGFzIG1hcmtlciwgKiBGUk9NIHQzOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBBZnRl ciBjb2xkIHN0YXJ0LCBxdWVyaWVzIHRvIGNsZWFuIHRhYmxlcyBzaG91bGQgbG9hZCBiYWxhbmNl CisgICAgIyBDaGVjayB0aGF0IGl0IGRpZCBOT1QgZ2V0IGZvcmNlZCB0byBwcmltYXJ5IGR1ZSB0 byB0cmFjayB0YWJsZSBtdXRhdGlvbgorICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2Fk IGJhbGFuY2UgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSBtdXRhdGlvbiBjb2xkIHN0YXJ0IiBsb2cv cGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDIgRkFJTEVEOiBTdGlsbCBpbiBj b2xkIHN0YXJ0IGFmdGVyIHdhaXRpbmciCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAg ZXhpdCAxCisgICAgZmkKKyAgICBlY2hvICJUZXN0IDIgUEFTU0VEOiBDb2xkIHN0YXJ0IGVuZGVk IGNvcnJlY3RseSIKKworICAgIGVjaG8gIj09PSBUZXN0IDM6IFdyaXRlLXRoZW4tUmVhZCBSb3V0 aW5nID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAg ICAjIFdyaXRlIHRvIHQxIGFuZCB0aGVuIHJlYWQgLSB1c2Ugc2luZ2xlIGNvbm5lY3Rpb24gdG8g ZW5zdXJlIHNhbWUgc2Vzc2lvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK0lOU0VSVCBJTlRPIHQx IFZBTFVFUyAoMSk7CitTRUxFQ1QgJ3dyaXRlX3JlYWRfdGVzdCcgYXMgbWFya2VyLCAqIEZST00g dDE7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisg ICAgc2xlZXAgMC41CisKKyAgICAjIENoZWNrIGxvZyBmb3IgdGFibGUgc3RhbGVuZXNzIG1lc3Nh Z2UKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFi bGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBl Y2hvICJUZXN0IDMgUEFTU0VEOiBXcml0ZS10aGVuLXJlYWQgcm91dGluZyB3b3JrcyIKKyAgICBl bHNlCisgICAgICAgIGVjaG8gIlRlc3QgMyBGQUlMRUQ6IFRhYmxlIHN0YWxlbmVzcyBub3QgZGV0 ZWN0ZWQgYWZ0ZXIgd3JpdGUiCisgICAgICAgICMgU2hvdyByZWxldmFudCBsb2cgZW50cmllcyBm b3IgZGVidWdnaW5nCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBs b2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAg ZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDQ6IENsZWFuIFRhYmxlIFN0aWxs IExvYWQgQmFsYW5jZXMgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9v bC5sb2cKKworICAgICMgUmVhZCBmcm9tIHQyIChuZXZlciB3cml0dGVuIHRvKSAtIHNob3VsZCBs b2FkIGJhbGFuY2UKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2NsZWFuX3RhYmxlX3Rlc3Qn IGFzIG1hcmtlciwgKiBGUk9NIHQyOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBTaG91bGQg Tk9UIHNlZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBibG9ja2luZyBtZXNzYWdlIGZvciB0MgorICAg IGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qdDIu KndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hv ICJUZXN0IDQgRkFJTEVEOiBDbGVhbiB0YWJsZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgc3RhbGUi CisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBlY2hv ICJUZXN0IDQgUEFTU0VEOiBDbGVhbiB0YWJsZXMgc3RpbGwgbG9hZCBiYWxhbmNlIgorCisgICAg ZWNobyAiPT09IFRlc3QgNTogVVBEQVRFIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAj IENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFVwZGF0ZSB0MiBh bmQgdGhlbiByZWFkIC0gdXNlIHNpbmdsZSBjb25uZWN0aW9uCisgICAgJFBTUUwgdGVzdCA8PEVP RgorVVBEQVRFIHQyIFNFVCBpID0gOTk5IFdIRVJFIGkgPSAwOworU0VMRUNUICd1cGRhdGVfdGVz dCcgYXMgbWFya2VyLCAqIEZST00gdDI7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5z dXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJj b3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVu IiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDUgUEFTU0VEOiBVUERB VEUgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDUg RkFJTEVEOiBVUERBVEUgZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICAuL3No dXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA2 OiBERUxFVEUgTWFya3MgVGFibGUgYXMgU3RhbGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZwor ICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgRGVsZXRlIGZyb20gdDMgYW5kIHRoZW4gcmVh ZCAtIHVzZSBzaW5nbGUgY29ubmVjdGlvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK0RFTEVURSBG Uk9NIHQzIFdIRVJFIGkgPSAwOworU0VMRUNUICdkZWxldGVfdGVzdCcgYXMgbWFya2VyLCAqIEZS T00gdDM7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVk CisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxh bmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsg dGhlbgorICAgICAgICBlY2hvICJUZXN0IDYgUEFTU0VEOiBERUxFVEUgbWFya3MgdGFibGUgYXMg c3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDYgRkFJTEVEOiBERUxFVEUgZGlk IG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAg IGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA3OiBUUlVOQ0FURSBNYXJrcyBU YWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29s LmxvZworCisgICAgIyBDcmVhdGUgYSBmcmVzaCB0YWJsZSBmb3IgVFJVTkNBVEUgdGVzdAorICAg ICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0X3RydW5jYXRlKGkgSU5URUdFUik7IiA+IC9k ZXYvbnVsbCAyPiYxCisgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF90cnVuY2F0ZSBW QUxVRVMgKDEpLCAoMiksICgzKTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgV2FpdCBmb3Ig YW55IFRUTCB0byBleHBpcmUKKyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBsb2cgYWdh aW4KKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFRydW5jYXRlIGFuZCB0aGVuIHJlYWQg LSB1c2Ugc2luZ2xlIGNvbm5lY3Rpb24KKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitUUlVOQ0FURSB0 X3RydW5jYXRlOworU0VMRUNUICd0cnVuY2F0ZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0X3Ry dW5jYXRlOworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hl ZAorICAgIHNsZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFs YW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7 IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA3IFBBU1NFRDogVFJVTkNBVEUgbWFya3MgdGFibGUg YXMgc3RhbGUiCisgICAgZWxzZQorICAgICAgICBlY2hvICJUZXN0IDcgRkFJTEVEOiBUUlVOQ0FU RSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNr X3RhYmxlX211dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1 dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDg6 IFdJVEggQ2xhdXNlIChDVEUgd2l0aCBERUxFVEUpIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIK KyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIENyZWF0 ZSBhIGZyZXNoIHRhYmxlIGZvciBXSVRIIHRlc3QKKyAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUg VEFCTEUgdF9jdGUoaSBJTlRFR0VSKTsiID4gL2Rldi9udWxsIDI+JjEKKyAgICAkUFNRTCB0ZXN0 IC1jICJJTlNFUlQgSU5UTyB0X2N0ZSBWQUxVRVMgKDEpLCAoMiksICgzKTsiID4gL2Rldi9udWxs IDI+JjEKKworICAgICMgV2FpdCBmb3IgYW55IFRUTCB0byBleHBpcmUKKyAgICBzbGVlcCAzCisK KyAgICAjIENsZWFyIHRoZSBsb2cgYWdhaW4KKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAj IFVzZSBXSVRIIGNsYXVzZSB3aXRoIERFTEVURSwgdGhlbiByZWFkIGZyb20gdGhlIHRhYmxlCisg ICAgJFBTUUwgdGVzdCA8PEVPRgorV0lUSCBkZWxldGVkIEFTIChERUxFVEUgRlJPTSB0X2N0ZSBX SEVSRSBpID0gMSBSRVRVUk5JTkcgKikKK1NFTEVDVCAqIEZST00gZGVsZXRlZDsKK1NFTEVDVCAn Y3RlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHRfY3RlOworRU9GCisKKyAgICAjIFNtYWxsIGRl bGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAgaWYgZ3Jl cCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50 bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA4IFBB U1NFRDogV0lUSCBjbGF1c2UgKENURSkgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQor ICAgICAgICBlY2hvICJUZXN0IDggRkFJTEVEOiBXSVRIIGNsYXVzZSAoQ1RFKSBkaWQgbm90IG1h cmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0 aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAg ICAgICAgZXhpdCAxCisgICAgZmkKKworICAgICMgVGVzdCA5OiBNRVJHRSAoUG9zdGdyZVNRTCAx NSsgb25seSkKKyAgICBQR19NQUpPUl9WRVJTSU9OPSQoJFBTUUwgLXQgLWMgIlNFTEVDVCBzdWJz dHJpbmcodmVyc2lvbigpIGZyb20gJ1Bvc3RncmVTUUwgKFswLTldKyknKTsiIHwgdHIgLWQgJyAn KQorICAgIGlmIFsgIiRQR19NQUpPUl9WRVJTSU9OIiAtZ2UgMTUgXSAyPi9kZXYvbnVsbDsgdGhl bgorICAgICAgICBlY2hvICI9PT0gVGVzdCA5OiBNRVJHRSBNYXJrcyBUYWJsZSBhcyBTdGFsZSAo UG9zdGdyZVNRTCAkUEdfTUFKT1JfVkVSU0lPTikgPT09IgorICAgICAgICAjIENsZWFyIHRoZSBs b2cKKyAgICAgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgICAgICMgQ3JlYXRlIHRhYmxlcyBm b3IgTUVSR0UgdGVzdAorICAgICAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9tZXJn ZV90YXJnZXQoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgdmFsIFRFWFQpOyIgPiAvZGV2L251bGwg Mj4mMQorICAgICAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9tZXJnZV9zb3VyY2Uo aWQgSU5URUdFUiwgdmFsIFRFWFQpOyIgPiAvZGV2L251bGwgMj4mMQorICAgICAgICAkUFNRTCB0 ZXN0IC1jICJJTlNFUlQgSU5UTyB0X21lcmdlX3RhcmdldCBWQUxVRVMgKDEsICdvbGQnKTsiID4g L2Rldi9udWxsIDI+JjEKKyAgICAgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElOVE8gdF9tZXJn ZV9zb3VyY2UgVkFMVUVTICgxLCAnbmV3JyksICgyLCAnaW5zZXJ0Jyk7IiA+IC9kZXYvbnVsbCAy PiYxCisKKyAgICAgICAgIyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAgICAgICBzbGVl cCAzCisKKyAgICAgICAgIyBDbGVhciB0aGUgbG9nIGFnYWluCisgICAgICAgID4gbG9nL3BncG9v bC5sb2cKKworICAgICAgICAjIFVzZSBNRVJHRSwgdGhlbiByZWFkIGZyb20gdGhlIHRhcmdldCB0 YWJsZQorICAgICAgICAkUFNRTCB0ZXN0IDw8RU9GCitNRVJHRSBJTlRPIHRfbWVyZ2VfdGFyZ2V0 IHQKK1VTSU5HIHRfbWVyZ2Vfc291cmNlIHMgT04gdC5pZCA9IHMuaWQKK1dIRU4gTUFUQ0hFRCBU SEVOIFVQREFURSBTRVQgdmFsID0gcy52YWwKK1dIRU4gTk9UIE1BVENIRUQgVEhFTiBJTlNFUlQg VkFMVUVTIChzLmlkLCBzLnZhbCk7CitTRUxFQ1QgJ21lcmdlX3Rlc3QnIGFzIG1hcmtlciwgKiBG Uk9NIHRfbWVyZ2VfdGFyZ2V0OworRU9GCisKKyAgICAgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1 cmUgbG9nIGlzIGZsdXNoZWQKKyAgICAgICAgc2xlZXAgMC41CisKKyAgICAgICAgaWYgZ3JlcCAt YSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkg d3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIlRlc3QgOSBQ QVNTRUQ6IE1FUkdFIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBlbHNlCisgICAgICAg ICAgICBlY2hvICJUZXN0IDkgRkFJTEVEOiBNRVJHRSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3Rh bGUiCisgICAgICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3Bn cG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICAg ICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgZWxzZQorICAgICAgICBlY2hvICI9PT0gVGVzdCA5 OiBNRVJHRSBza2lwcGVkIChyZXF1aXJlcyBQb3N0Z3JlU1FMIDE1KywgaGF2ZSAkUEdfTUFKT1Jf VkVSU0lPTikgPT09IgorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCAxMDogUk9MTEJBQ0sg RG9lcyBOT1QgTWFyayBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDcmVhdGUgYSBmcmVzaCB0 YWJsZSBmb3Igcm9sbGJhY2sgdGVzdAorICAgICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0 X3JvbGxiYWNrKGkgSU5URUdFUik7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFdhaXQgZm9y IGFueSBUVEwgdG8gZXhwaXJlCisgICAgc2xlZXAgMworCisgICAgIyBDbGVhciB0aGUgbG9nCisg ICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBXcml0ZSBpbnNpZGUgYSB0cmFuc2FjdGlvbiwg dGhlbiByb2xsYmFjaworICAgICRQU1FMIHRlc3QgPDxFT0YKK0JFR0lOOworSU5TRVJUIElOVE8g dF9yb2xsYmFjayBWQUxVRVMgKDEpOworUk9MTEJBQ0s7CitTRUxFQ1QgJ3JvbGxiYWNrX3Rlc3Qn IGFzIG1hcmtlciwgKiBGUk9NIHRfcm9sbGJhY2s7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkg dG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICAjIFNob3VsZCBO T1Qgc2VlIHRfcm9sbGJhY2sgbWFya2VkIGFzIHN0YWxlIHNpbmNlIHRoZSB3cml0ZSB3YXMgcm9s bGVkIGJhY2sKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1 c2UgdGFibGUuKnRfcm9sbGJhY2suKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxv ZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDEwIEZBSUxFRDogUm9sbGVkLWJhY2sgd3JpdGUg aW5jb3JyZWN0bHkgbWFya2VkIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBncmVwIC1hIC1pICJ0 cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAu L3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZWNobyAiVGVzdCAxMCBQ QVNTRUQ6IFJPTExCQUNLIGRvZXMgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisKKyAgICBlY2hv ICI9PT0gVGVzdCAxMTogQ09NTUlUIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENy ZWF0ZSBhIGZyZXNoIHRhYmxlIGZvciBjb21taXQgdGVzdAorICAgICRQU1FMIHRlc3QgLWMgIkNS RUFURSBUQUJMRSB0X2NvbW1pdChpIElOVEVHRVIpOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAg IyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAgIHNsZWVwIDMKKworICAgICMgQ2xlYXIg dGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgV3JpdGUgaW5zaWRlIGEgdHJh bnNhY3Rpb24sIHRoZW4gY29tbWl0LCB0aGVuIHJlYWQKKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitC RUdJTjsKK0lOU0VSVCBJTlRPIHRfY29tbWl0IFZBTFVFUyAoMSk7CitDT01NSVQ7CitTRUxFQ1Qg J2NvbW1pdF90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0X2NvbW1pdDsKK0VPRgorCisgICAgIyBT bWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAg IGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2Fz IHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRl c3QgMTEgUEFTU0VEOiBDT01NSVQgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgZWxzZQorICAg ICAgICBlY2hvICJUZXN0IDExIEZBSUxFRDogQ29tbWl0dGVkIHdyaXRlIGRpZCBub3QgbWFyayB0 YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0YXRpb24i IGxvZy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAg ICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiIgorICAgIGVjaG8gIj09PSBBbGwgVHJhY2sg VGFibGUgTXV0YXRpb24gVGVzdHMgUEFTU0VEID09PSIKKworICAgIC4vc2h1dGRvd25hbGwKKwor ICAgIGNkIC4uCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzc2lv bi90ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvdGVzdC5zaCBiL3NyYy90 ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3Rl c3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uYzUwYzIxM2Q2ZmQ3NDE1MDhhYWI3ODkzMDgwOGJhYzMwM2U3MmIx YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNr X3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3Rlc3Quc2gKQEAgLTAsMCArMSwxODQgQEAKKyMhL3Vz ci9iaW4vZW52IGJhc2gKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3Qgc2NyaXB0IGZvciB0cmFjayB0YWJs ZSBtdXRhdGlvbiBnbG9iYWwgY29sZCBzdGFydAorIyBvbiB3YXRjaGRvZyBsZWFkZXIgY2hhbmdl LgorIworIyBVc2VzICRXQVRDSERPR19TRVRVUCB0byBjcmVhdGUgYSAyLW5vZGUgd2F0Y2hkb2cg Y2x1c3RlciwKKyMgdGhlbiB2ZXJpZmllcyB0aGF0IHdoZW4gdGhlIGxlYWRlciBpcyBzdG9wcGVk IHRoZSBuZXcKKyMgbGVhZGVyIHRyaWdnZXJzIGEgZ2xvYmFsIGNvbGQgc3RhcnQuCisjLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorc291cmNlICRURVNUTElCUworVEVTVERJUj10ZXN0ZGlyCitQU1FMPSRQR0JJTi9wc3Fs CitzdWNjZXNzX2NvdW50PTAKKworZGlyPWBwd2RgCitybSAtZnIgJFRFU1RESVIKK21rZGlyICRU RVNURElSCitjZCAkVEVTVERJUgorCisjIENyZWF0ZSAyLW5vZGUgd2F0Y2hkb2cgY2x1c3Rlcgor JFdBVENIRE9HX1NFVFVQIC13biAyIHx8IGV4aXQgMQorCisjIEVuc3VyZSBwZXItbm9kZSBzY3Jp cHRzIGFyZSBleGVjdXRhYmxlCisjIChzZWQgLWkgaW4gd2F0Y2hkb2dfc2V0dXAgY2FuIHN0cmlw IHBlcm1pc3Npb25zKQorY2htb2QgNzU1IHBncG9vbCovc3RhcnRhbGwgcGdwb29sKi9zaHV0ZG93 bmFsbAorCisjIEFwcGVuZCB0cmFja190YWJsZV9tdXRhdGlvbiBjb25maWcgdG8gYm90aCBub2Rl cworZm9yIGkgaW4gMCAxCitkbworCWNhdCA+PiBwZ3Bvb2wke2l9L2V0Yy9wZ3Bvb2wuY29uZiA8 PEVPRgorZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSAnZG1sX2FkYXB0aXZlX2dsb2Jh bCcKK3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24gPSAyMDAwCitlbmFi bGVfY29uc2Vuc3VzX3dpdGhfaGFsZl92b3RlcyA9IG9uCitsb2dfbWluX21lc3NhZ2VzID0gZGVi dWcxCitFT0YKK2RvbmUKKworLi9zdGFydGFsbAorZXhwb3J0IFBDUFBBU1NGSUxFPSRkaXIvJFRF U1RESVIvcGdwb29sMC9wY3BwYXNzCisKKyMgV2FpdCBmb3Igd2F0Y2hkb2cgbGlmZWNoZWNrIG9u IG5vZGUgMAorZWNobyAtbiAid2FpdGluZyBmb3Igd2F0Y2hkb2cgbm9kZSAwIHN0YXJ0aW5nIHVw Li4uIgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAibGlmZWNoZWNr IHN0YXJ0ZWQiIFwKKwkJcGdwb29sMC9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJ aWYgWyAkPyA9IDAgXTsgdGhlbgorCQlicmVhaworCWZpCisJc2xlZXAgMgorZG9uZQorZWNobyAi ZG9uZS4iCisKKyMgVGVzdCAxOiBWZXJpZnkgbGVhZGVyIGNhbWUgdXAKK2VjaG8gIj09PSBUZXN0 IDE6IFdhaXRpbmcgZm9yIHRoZSBwZ3Bvb2wgbGVhZGVyLi4uID09PSIKK2ZvciBpIGluIDEgMiAz IDQgNSA2IDcgOCA5IDEwCitkbworCWdyZXAgIkkgYW0gdGhlIGNsdXN0ZXIgbGVhZGVyIG5vZGUi IFwKKwkJcGdwb29sMC9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9 IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCQll Y2hvICJUZXN0IDEgUEFTU0VEOiBMZWFkZXIgYnJvdWdodCB1cC4iCisJCWJyZWFrCisJZmkKKwll Y2hvICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKworaWYgWyAkc3VjY2Vzc19j b3VudCAtbHQgMSBdOyB0aGVuCisJZWNobyAiVGVzdCAxIEZBSUxFRDogTGVhZGVyIGRpZCBub3Qg c3RhcnQiCisJLi9zaHV0ZG93bmFsbAorCWV4aXQgMQorZmkKKworIyBUZXN0IDI6IFZlcmlmeSBz dGFuZGJ5IGpvaW5lZCBjbHVzdGVyCitlY2hvICI9PT0gVGVzdCAyOiBXYWl0aW5nIGZvciBzdGFu ZGJ5IHRvIGpvaW4uLi4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJ Z3JlcCAic3VjY2Vzc2Z1bGx5IGpvaW5lZCB0aGUgd2F0Y2hkb2cgY2x1c3RlciIgXAorCQlwZ3Bv b2wxL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVu CisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8gIlRlc3Qg MiBQQVNTRUQ6IFN0YW5kYnkgam9pbmVkLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10g JGkgdGltZXMiCisJc2xlZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCAyIF07 IHRoZW4KKwllY2hvICJUZXN0IDIgRkFJTEVEOiBTdGFuZGJ5IGRpZCBub3Qgam9pbiIKKwkuL3No dXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgMzogVmVyaWZ5IHRyYWNrX3RhYmxlX211 dGF0aW9uIGluaXRpYWxpemVkCitlY2hvICI9PT0gVGVzdCAzOiBWZXJpZnkgZmVhdHVyZSBpbml0 aWFsaXplZCA9PT0iCitpZiBncmVwIC1hICJ0cmFja190YWJsZV9tdXRhdGlvbjogaW5pdGlhbGl6 ZWQiIFwKKwlwZ3Bvb2wwL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwlz dWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCWVjaG8gIlRlc3QgMyBQQVNT RUQ6IEZlYXR1cmUgaW5pdGlhbGl6ZWQuIgorZWxzZQorCWVjaG8gIlRlc3QgMyBGQUlMRUQ6IEZl YXR1cmUgbm90IGluaXRpYWxpemVkIgorCS4vc2h1dGRvd25hbGwKKwlleGl0IDEKK2ZpCisKKyMg VGVzdCA0OiBTdG9wIGxlYWRlciAocGdwb29sMCkgdG8gdHJpZ2dlciBmYWlsb3ZlcgorZWNobyAi PT09IFRlc3QgNDogU3RvcHBpbmcgbGVhZGVyLi4uID09PSIKK2NkIHBncG9vbDAKK3NvdXJjZSAu L2Jhc2hyYy5wb3J0cworJFBHUE9PTF9JTlNUQUxMX0RJUi9iaW4vcGdwb29sIFwKKwktZiBldGMv cGdwb29sLmNvbmYgLW0gZiBzdG9wCitjZCAuLgorCitlY2hvICJDaGVja2luZyBzdGFuZGJ5IGRl dGVjdGVkIHNodXRkb3duLi4uIgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJ Z3JlcCAtYSAiaXMgc2h1dHRpbmcgZG93biIgXAorCQlwZ3Bvb2wxL2xvZy9wZ3Bvb2wubG9nID4g L2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9JCgo IHN1Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8gIlRlc3QgNCBQQVNTRUQ6IFNodXRkb3duIGRl dGVjdGVkLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGltZXMiCisJc2xlZXAg MgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCA0IF07IHRoZW4KKwllY2hvICJUZXN0 IDQgRkFJTEVEOiBTaHV0ZG93biBub3QgZGV0ZWN0ZWQiCisJLi9zaHV0ZG93bmFsbAorCWV4aXQg MQorZmkKKworIyBUZXN0IDU6IFZlcmlmeSBzdGFuZGJ5IGJlY2FtZSBuZXcgbGVhZGVyCitlY2hv ICI9PT0gVGVzdCA1OiBDaGVja2luZyBzdGFuZGJ5IHRha2VzIG92ZXIuLi4gPT09IgorZm9yIGkg aW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAtYSAiSSBhbSB0aGUgY2x1c3RlciBs ZWFkZXIgbm9kZSIgXAorCQlwZ3Bvb2wxL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEK KwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291bnQg KyAxICkpCisJCWVjaG8gIlRlc3QgNSBQQVNTRUQ6IFN0YW5kYnkgYmVjYW1lIGxlYWRlci4iCisJ CWJyZWFrCisJZmkKKwllY2hvICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKwor aWYgWyAkc3VjY2Vzc19jb3VudCAtbHQgNSBdOyB0aGVuCisJZWNobyAiVGVzdCA1IEZBSUxFRDog U3RhbmRieSBkaWQgbm90IGJlY29tZSBsZWFkZXIiCisJLi9zaHV0ZG93bmFsbAorCWV4aXQgMQor ZmkKKworIyBUZXN0IDY6IFZlcmlmeSBnbG9iYWwgY29sZCBzdGFydCB3YXMgdHJpZ2dlcmVkCitl Y2hvICI9PT0gVGVzdCA2OiBDaGVja2luZyBnbG9iYWwgY29sZCBzdGFydC4uLiA9PT0iCitmb3Ig aSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMAorZG8KKwlncmVwIC1hICJ0cmFja190YWJsZV9tdXRh dGlvbjogZ2xvYmFsIGNvbGQgc3RhcnQiIFwKKwkJcGdwb29sMS9sb2cvcGdwb29sLmxvZyA+IC9k ZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBz dWNjZXNzX2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDYgUEFTU0VEOiBHbG9iYWwgY29sZCBz dGFydCB0cmlnZ2VyZWQuIgorCQlicmVhaworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIK KwlzbGVlcCAyCitkb25lCisKKyMgQ2xlYW51cAorLi9zaHV0ZG93bmFsbAorCitlY2hvICIiCitl Y2hvICIkc3VjY2Vzc19jb3VudCBvdXQgb2YgNiBzdWNjZXNzZnVsIgorCitpZiB0ZXN0ICRzdWNj ZXNzX2NvdW50IC1lcSA2Cit0aGVuCisJZWNobyAiPT09IEFsbCBXYXRjaGRvZyBUZXN0cyBQQVNT RUQgPT09IgorCWV4aXQgMAorZmkKKworZXhpdCAxCmRpZmYgLS1naXQgYS9zcmMvdXRpbHMvcG9v bF90cmFja190YWJsZV9tdXRhdGlvbi5jIGIvc3JjL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi5lZTA5YjNmNTA5ZWQ3OTE5Yzg0ZDFjMmNlNjkwNmM5Yzk0ZTVj YjA2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRp b24uYwpAQCAtMCwwICsxLDE0NTMgQEAKKy8qIC0qLXBnc3FsLWMtKi0gKi8KKy8qCisgKiBwZ3Bv b2w6IGEgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiBwb29sIHNlcnZlciBmb3IgUG9z dGdyZVNRTAorICogd3JpdHRlbiBieSBUYXRzdW8gSXNoaWkKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMDMtMjAyNglQZ1Bvb2wgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogUGVybWlz c2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBh bmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUg aXMgaGVyZWJ5CisgKiBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uCisgKiBub3RpY2UgYXBwZWFyIGluIHN1cHBv cnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgdGhlCisgKiBhdXRob3Ig bm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KKyAq IGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBw cmlvcgorICogcGVybWlzc2lvbi4gVGhlIGF1dGhvciBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMg YWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9z ZS4gIEl0IGlzIHByb3ZpZGVkICJhcworICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVk IHdhcnJhbnR5LgorICoKKyAqIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYzogSW4tbWVtb3J5 IHRyYWNraW5nIG9mIHJlY2VudGx5CisgKiAgIHdyaXR0ZW4gdGFibGVzIHRvIHByZXZlbnQgc3Rh bGUgcmVhZHMgZnJvbSByZXBsaWNhcy4KKyAqCisgKiBCYXNlZCBvbiB0aGUgImxhZ2xlc3MiIGFy Y2hpdGVjdHVyZSBmcm9tIFRhaWxvciBCcmFuZHMuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5o PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8 dW5pc3RkLmg+CisKKyNpbmNsdWRlICJwb29sLmgiCisjaW5jbHVkZSAicG9vbF9jb25maWcuaCIK KyNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmgiCisjaW5jbHVkZSAidXRp bHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oIgorI2luY2x1ZGUgInV0aWxzL2Vsb2cuaCIK KyNpbmNsdWRlICJ1dGlscy9wb29sX2lwYy5oIgorI2luY2x1ZGUgInV0aWxzL3BhbGxvYy5oIgor I2luY2x1ZGUgInV0aWxzL3Bvb2xfcmVsY2FjaGUuaCIKKworI2RlZmluZSBEQVRBQkFTRV9UT19P SURfUVVFUlkgXAorCSJTRUxFQ1Qgb2lkIEZST00gcGdfY2F0YWxvZy5wZ19kYXRhYmFzZSIgXAor CSIgV0hFUkUgZGF0bmFtZSA9ICclcyciCisKKy8qCisgKiBIZWxwZXIgbWFjcm86IHRydWUgd2hl biB0aGUgZmVhdHVyZSBpcyBub3QgYWN0aXZlLgorICovCisjZGVmaW5lIFRSQUNLX1RBQkxFX01V VEFUSU9OX0RJU0FCTEVEKCkgXAorCShwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vf b25fd3JpdGUgIT0gXAorCSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMIHx8IFwKKwkgdHJhY2tf dGFibGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICog TG9jYWwgdmFyaWFibGVzCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogUG9pbnRlciB0 byBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSAqLworc3RhdGljIFRyYWNrVGFibGVNdXRhdGlvblNo bWVtICp0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbSA9IE5VTEw7CisKKy8qIFBlci1wcm9jZXNz IGNvbGQgc3RhcnQgdHJhY2tpbmcgKG5vdCBpbiBzaGFyZWQgbWVtb3J5KSAqLworc3RhdGljIHN0 cnVjdCB0aW1ldmFsIHByb2Nlc3Nfc3RhcnRfdGltZTsKK3N0YXRpYyBib29sIGNvbGRfc3RhcnRf aW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogSGVscGVyIG1h Y3JvcyBmb3IgZmxleGlibGUgYXJyYXlzIGluIHNoYXJlZCBtZW1vcnkKKyAqIC0tLS0tLS0tLS0t LS0tLS0KKyAqLworCisvKiBHZXQgcG9pbnRlciB0byBidWNrZXQgYXJyYXkgaW4gdGFibGUgbWFw ICovCisjZGVmaW5lIFRBQkxFX01BUF9CVUNLRVRTKG1hcCkgXAorCSgoaW50ICopKChjaGFyICop KG1hcCkgKyBcCisJCXNpemVvZihUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUpKSkKKworLyog R2V0IHBvaW50ZXIgdG8gZW50cnkgYXJyYXkgaW4gdGFibGUgbWFwICovCisjZGVmaW5lIFRBQkxF X01BUF9FTlRSSUVTKG1hcCkgXAorCSgoVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKikoKGNoYXIg KikobWFwKSArIFwKKwkJc2l6ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSkgKyBcCisJ CShtYXApLT5udW1fYnVja2V0cyAqIHNpemVvZihpbnQpKSkKKworLyogR2V0IHBvaW50ZXIgdG8g YnVja2V0IGFycmF5IGluIHBhcnNlIGNhY2hlICovCisjZGVmaW5lIFBBUlNFX0NBQ0hFX0JVQ0tF VFMoY2FjaGUpIFwKKwkoKGludCAqKSgoY2hhciAqKShjYWNoZSkgKyBzaXplb2YoUXVlcnlQYXJz ZUNhY2hlKSkpCisKKy8qIEdldCBwb2ludGVyIHRvIGVudHJ5IGFycmF5IGluIHBhcnNlIGNhY2hl ICovCisjZGVmaW5lIFBBUlNFX0NBQ0hFX0VOVFJJRVMoY2FjaGUpIFwKKwkoKFF1ZXJ5UGFyc2VF bnRyeSAqKSgoY2hhciAqKShjYWNoZSkgKyBcCisJCXNpemVvZihRdWVyeVBhcnNlQ2FjaGUpICsg XAorCQkoY2FjaGUpLT5udW1fYnVja2V0cyAqIHNpemVvZihpbnQpKSkKKworLyogLS0tLS0tLS0t LS0tLS0tLQorICogU2VtYXBob3JlIGxvY2sgaGVscGVycworICogLS0tLS0tLS0tLS0tLS0tLQor ICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbWFwX2xvY2sodm9pZCkKK3sKKwlwb29s X3NlbWFwaG9yZV9sb2NrKFRSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX1NFTSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbWFwX3VubG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBo b3JlX3VubG9jayhUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJMRV9TRU0pOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQKK3BhcnNlX2NhY2hlX2xvY2sodm9pZCkKK3sKKwlwb29sX3NlbWFwaG9yZV9s b2NrKFRSQUNLX1RBQkxFX01VVEFUSU9OX1FVRVJZX1NFTSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZAorcGFyc2VfY2FjaGVfdW5sb2NrKHZvaWQpCit7CisJcG9vbF9zZW1hcGhvcmVfdW5sb2Nr KFRSQUNLX1RBQkxFX01VVEFUSU9OX1FVRVJZX1NFTSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0KKyAqIEhhc2ggZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAq IEZOVi0xYSBoYXNoIGZvciB0YWJsZS9kYXRhYmFzZSBvaWQgcGFpcgorICovCitzdGF0aWMgdWlu dDMyCitmbnYxYV9oYXNoX3RhYmxlX2tleShpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQpCit7CisJ dWludDMyIGhhc2ggPSAyMTY2MTM2MjYxdTsJLyogRk5WIG9mZnNldCBiYXNpcyAqLworCXVpbnQz MiBkYXRhWzJdOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzOworCXNpemVfdCBpOworCisJ ZGF0YVswXSA9ICh1aW50MzIpIHRhYmxlX29pZDsKKwlkYXRhWzFdID0gKHVpbnQzMikgZGJvaWQ7 CisJYnl0ZXMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBkYXRhOworCisJZm9yIChpID0gMDsg aSA8IHNpemVvZihkYXRhKTsgaSsrKQorCXsKKwkJaGFzaCBePSBieXRlc1tpXTsKKwkJaGFzaCAq PSAxNjc3NzYxOXU7CQkvKiBGTlYgcHJpbWUgKi8KKwl9CisKKwlyZXR1cm4gaGFzaDsKK30KKwor LyoKKyAqIEZOVi0xYSBoYXNoIGZvciA2NC1iaXQgdmFsdWUKKyAqLworc3RhdGljIHVpbnQ2NAor Zm52MWFfaGFzaF82NChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCit7CisJLyogRk5WIG9m ZnNldCBiYXNpcyBmb3IgNjQtYml0ICovCisJdWludDY0IGhhc2ggPSAxNDY5NTk4MTAzOTM0NjY1 NjAzN1VMTDsKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwl7CisJ CWhhc2ggXj0gKHVpbnQ4KXN0cltpXTsKKwkJaGFzaCAqPSAxMDk5NTExNjI4MjExVUxMOwkvKiBG TlYgcHJpbWUgKi8KKwl9CisKKwlyZXR1cm4gaGFzaDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LQorICogVGltZSB1dGlsaXRpZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICog R2V0IGVsYXBzZWQgdGltZSBpbiBtaWNyb3NlY29uZHMgYmV0d2VlbiB0d28gdGltZXZhbHMKKyAq Lworc3RhdGljIGludDY0CitlbGFwc2VkX3VzKHN0cnVjdCB0aW1ldmFsICpzdGFydCwgc3RydWN0 IHRpbWV2YWwgKmVuZCkKK3sKKwlyZXR1cm4gKChpbnQ2NCkoZW5kLT50dl9zZWMgLSBzdGFydC0+ dHZfc2VjKSAqIDEwMDAwMDApCisJCSsgKGVuZC0+dHZfdXNlYyAtIHN0YXJ0LT50dl91c2VjKTsK K30KKworLyoKKyAqIEdldCBjdXJyZW50IHRpbWUKKyAqLworc3RhdGljIHZvaWQKK2dldF9jdXJy ZW50X3RpbWUoc3RydWN0IHRpbWV2YWwgKnR2KQoreworCWdldHRpbWVvZmRheSh0diwgTlVMTCk7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIERhdGFiYXNlIG9pZCBsb29rdXAKKyAqIC0t LS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgaW50Cit0cmFja190YWJsZV9tdXRhdGlvbl9n ZXRfZGF0YWJhc2Vfb2lkX2ludGVybmFsKHZvaWQpCit7CisJaW50CQkJb2lkID0gMDsKKwlzdGF0 aWMgUE9PTF9SRUxDQUNIRSAqcmVsY2FjaGU7CisJUE9PTF9DT05ORUNUSU9OX1BPT0wgKmJhY2tl bmQ7CisJUE9PTF9TRVNTSU9OX0NPTlRFWFQgKnNlc3Npb25fY29udGV4dDsKKworCS8qIFNhZmV0 eSBjaGVjazogbXVzdCBoYXZlIHNobWVtIGluaXRpYWxpemVkICovCisJaWYgKHRyYWNrX3RhYmxl X211dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJldHVybiBvaWQ7CisKKwlzZXNzaW9uX2NvbnRl eHQgPSBwb29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpOworCWlmIChzZXNzaW9uX2NvbnRl eHQgPT0gTlVMTCkKKwkJcmV0dXJuIG9pZDsKKworCWJhY2tlbmQgPSBzZXNzaW9uX2NvbnRleHQt PmJhY2tlbmQ7CisJaWYgKGJhY2tlbmQgPT0gTlVMTCB8fAorCQlNQUlOX0NPTk5FQ1RJT04oYmFj a2VuZCkgPT0gTlVMTCB8fAorCQlNQUlOX0NPTk5FQ1RJT04oYmFja2VuZCktPnNwID09IE5VTEwp CisJCXJldHVybiBvaWQ7CisKKwkvKiBFbnN1cmUgZGF0YWJhc2UgbmFtZSBpcyB2YWxpZCAqLwor CWlmIChNQUlOX0NPTk5FQ1RJT04oYmFja2VuZCktPnNwLT5kYXRhYmFzZSA9PSBOVUxMKQorCQly ZXR1cm4gb2lkOworCisJaWYgKCFyZWxjYWNoZSkKKwl7CisJCXJlbGNhY2hlID0gcG9vbF9jcmVh dGVfcmVsY2FjaGUoCisJCQkJCXBvb2xfY29uZmlnLT5yZWxjYWNoZV9zaXplLAorCQkJCQlEQVRB QkFTRV9UT19PSURfUVVFUlksCisJCQkJCWludF9yZWdpc3Rlcl9mdW5jLAorCQkJCQlpbnRfdW5y ZWdpc3Rlcl9mdW5jLAorCQkJCQlmYWxzZSk7CisJCWlmIChyZWxjYWNoZSA9PSBOVUxMKQorCQl7 CisJCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgor CQkJCQkJImVycm9yIGNyZWF0aW5nIHJlbGNhY2hlIikpKTsKKwkJCXJldHVybiBvaWQ7CisJCX0K Kwl9CisKKwlvaWQgPSAoaW50KSAoaW50cHRyX3QpIHBvb2xfc2VhcmNoX3JlbGNhY2hlKAorCQkJ CXJlbGNhY2hlLCBiYWNrZW5kLAorCQkJCU1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AtPmRh dGFiYXNlKTsKKwlyZXR1cm4gb2lkOworfQorCitpbnQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRp b25fZ2V0X2RhdGFiYXNlX29pZCh2b2lkKQoreworCXJldHVybiB0cmFja190YWJsZV9tdXRhdGlv bl9nZXRfZGF0YWJhc2Vfb2lkX2ludGVybmFsKCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0K KyAqIFRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUgb3BlcmF0aW9ucworICogLS0tLS0tLS0tLS0t LS0tLQorICovCisKKy8qCisgKiBJbml0aWFsaXplIHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUK KyAqLworc3RhdGljIHZvaWQKK3RhYmxlX21hcF9pbml0KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hU YWJsZSAqbWFwLAorCQkJICAgaW50IG51bV9idWNrZXRzLCBpbnQgbWF4X2VudHJpZXMpCit7CisJ aW50ICpidWNrZXRzOworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzOworCWludCBp OworCWludCBpbnZhbGlkID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKwor CW1hcC0+bnVtX2J1Y2tldHMgPSBudW1fYnVja2V0czsKKwltYXAtPm1heF9lbnRyaWVzID0gbWF4 X2VudHJpZXM7CisJbWFwLT5udW1fZW50cmllcyA9IDA7CisJbWFwLT5mcmVlX2xpc3RfaGVhZCA9 IDA7CisKKwlidWNrZXRzID0gVEFCTEVfTUFQX0JVQ0tFVFMobWFwKTsKKwllbnRyaWVzID0gVEFC TEVfTUFQX0VOVFJJRVMobWFwKTsKKworCS8qIEluaXRpYWxpemUgYWxsIGJ1Y2tldHMgdG8gZW1w dHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykKKwkJYnVja2V0c1tpXSA9 IGludmFsaWQ7CisKKwkvKiBJbml0aWFsaXplIGZyZWUgbGlzdCAtIGNoYWluIGFsbCBlbnRyaWVz ICovCisJZm9yIChpID0gMDsgaSA8IG1heF9lbnRyaWVzOyBpKyspCisJeworCQllbnRyaWVzW2ld LmluX3VzZSA9IGZhbHNlOworCQllbnRyaWVzW2ldLm5leHQgPSAoaSA8IG1heF9lbnRyaWVzIC0g MSkgPworCQkJaSArIDEgOiBpbnZhbGlkOworCX0KKworCWVyZXBvcnQoREVCVUcxLAorCQkoZXJy bXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCSJ0YWJsZSBtYXAgaW5pdCAlZCBidWNr ZXRzLCAiCisJCQkJIiVkIG1heCBlbnRyaWVzIiwKKwkJCQludW1fYnVja2V0cywgbWF4X2VudHJp ZXMpKSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbiBlbnRyeSBmcm9tIHRoZSBmcmVlIGxpc3QK KyAqLworc3RhdGljIGludAordGFibGVfbWFwX2FsbG9jX2VudHJ5KFRyYWNrVGFibGVNdXRhdGlv bkhhc2hUYWJsZSAqbWFwKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzOwor CWludCBpZHg7CisJaW50IGludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lO REVYOworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisKKwlpZiAobWFwLT5m cmVlX2xpc3RfaGVhZCA9PSBpbnZhbGlkKQorCQlyZXR1cm4gaW52YWxpZDsKKworCWlkeCA9IG1h cC0+ZnJlZV9saXN0X2hlYWQ7CisJbWFwLT5mcmVlX2xpc3RfaGVhZCA9IGVudHJpZXNbaWR4XS5u ZXh0OworCWVudHJpZXNbaWR4XS5pbl91c2UgPSB0cnVlOworCWVudHJpZXNbaWR4XS5uZXh0ID0g aW52YWxpZDsKKwltYXAtPm51bV9lbnRyaWVzKys7CisKKwlyZXR1cm4gaWR4OworfQorCisvKgor ICogRnJlZSBhbiBlbnRyeSBiYWNrIHRvIHRoZSBmcmVlIGxpc3QKKyAqLworc3RhdGljIHZvaWQK K3RhYmxlX21hcF9mcmVlX2VudHJ5KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLAor CQkJCQkgaW50IGlkeCkKK3sKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsKKwor CWVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCisJZW50cmllc1tpZHhdLmluX3Vz ZSA9IGZhbHNlOworCWVudHJpZXNbaWR4XS5uZXh0ID0gbWFwLT5mcmVlX2xpc3RfaGVhZDsKKwlt YXAtPmZyZWVfbGlzdF9oZWFkID0gaWR4OworCW1hcC0+bnVtX2VudHJpZXMtLTsKK30KKworLyoK KyAqIExvb2sgdXAgYSB0YWJsZSBpbiB0aGUgaGFzaCB0YWJsZS4KKyAqIFJldHVybnMgZW50cnkg aW5kZXggb3IgSU5WQUxJRF9JTkRFWCBpZiBub3QgZm91bmQuCisgKiBNdXN0IGJlIGNhbGxlZCB3 aXRoIGxvY2sgaGVsZC4KKyAqLworc3RhdGljIGludAordGFibGVfbWFwX2xvb2t1cChUcmFja1Rh YmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCwKKwkJCQkgaW50IHRhYmxlX29pZCwgaW50IGRib2lk LAorCQkJCSB1aW50MzIgaGFzaCkKK3sKKwlpbnQgKmJ1Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VU UyhtYXApOworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzOworCWludCBidWNrZXQg PSBoYXNoICUgbWFwLT5udW1fYnVja2V0czsKKwlpbnQgaWR4ID0gYnVja2V0c1tidWNrZXRdOwor CWludCBpbnZhbGlkID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKworCWVu dHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCisJd2hpbGUgKGlkeCAhPSBpbnZhbGlk KQorCXsKKwkJaWYgKGVudHJpZXNbaWR4XS5oYXNoID09IGhhc2ggJiYKKwkJCWVudHJpZXNbaWR4 XS50YWJsZV9vaWQgPT0gdGFibGVfb2lkICYmCisJCQllbnRyaWVzW2lkeF0uZGJvaWQgPT0gZGJv aWQpCisJCXsKKwkJCXJldHVybiBpZHg7CisJCX0KKwkJaWR4ID0gZW50cmllc1tpZHhdLm5leHQ7 CisJfQorCisJcmV0dXJuIGludmFsaWQ7Cit9CisKKy8qCisgKiBJbnNlcnQgb3IgdXBkYXRlIGEg dGFibGUgZW50cnkuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZC4KKyAqLworc3Rh dGljIHZvaWQKK3RhYmxlX21hcF9pbnNlcnQoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICpt YXAsCisJCQkJIGludCB0YWJsZV9vaWQsIGludCBkYm9pZCwKKwkJCQkgdWludDMyIGhhc2gsCisJ CQkJIHN0cnVjdCB0aW1ldmFsICp3cml0ZV90aW1lKQoreworCWludCAqYnVja2V0cyA9IFRBQkxF X01BUF9CVUNLRVRTKG1hcCk7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisJ aW50IGJ1Y2tldCA9IGhhc2ggJSBtYXAtPm51bV9idWNrZXRzOworCWludCBpZHg7CisJaW50IGlu dmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJZW50cmllcyA9 IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisKKwkvKiBDaGVjayBpZiBlbnRyeSBhbHJlYWR5IGV4 aXN0cyAqLworCWlkeCA9IHRhYmxlX21hcF9sb29rdXAobWFwLCB0YWJsZV9vaWQsIGRib2lkLCBo YXNoKTsKKwlpZiAoaWR4ICE9IGludmFsaWQpCisJeworCQkvKiBVcGRhdGUgbGFzdCB3cml0ZSB0 aW1lOyBrZWVwIGZpcnN0X3dyaXRlX3RpbWUgKi8KKwkJZW50cmllc1tpZHhdLmxhc3Rfd3JpdGVf dGltZSA9ICp3cml0ZV90aW1lOworCQlyZXR1cm47CisJfQorCisJLyogQWxsb2NhdGUgbmV3IGVu dHJ5ICovCisJaWR4ID0gdGFibGVfbWFwX2FsbG9jX2VudHJ5KG1hcCk7CisJaWYgKGlkeCA9PSBp bnZhbGlkKQorCXsKKwkJaW50IGI7CisKKwkJLyogVGFibGUgaXMgZnVsbCAtIGV2aWN0IGZpcnN0 IG5vbi1lbXB0eSBidWNrZXQgKi8KKwkJZm9yIChiID0gMDsgYiA8IG1hcC0+bnVtX2J1Y2tldHM7 IGIrKykKKwkJeworCQkJaWYgKGJ1Y2tldHNbYl0gIT0gaW52YWxpZCkKKwkJCXsKKwkJCQlpbnQg dmljdGltID0gYnVja2V0c1tiXTsKKworCQkJCWJ1Y2tldHNbYl0gPSBlbnRyaWVzW3ZpY3RpbV0u bmV4dDsKKwkJCQl0YWJsZV9tYXBfZnJlZV9lbnRyeShtYXAsIHZpY3RpbSk7CisJCQkJaWR4ID0g dGFibGVfbWFwX2FsbG9jX2VudHJ5KG1hcCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlp ZiAoaWR4ID09IGludmFsaWQpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNn KCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBlbnRy eSAiCisJCQkJCQkiZm9yIG9pZCAlZCAoZGJvaWQgJWQpIiwKKwkJCQkJCXRhYmxlX29pZCwgZGJv aWQpKSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBJbml0aWFsaXplIG5ldyBlbnRyeSAq LworCWVudHJpZXNbaWR4XS50YWJsZV9vaWQgPSB0YWJsZV9vaWQ7CisJZW50cmllc1tpZHhdLmRi b2lkID0gZGJvaWQ7CisJZW50cmllc1tpZHhdLmhhc2ggPSBoYXNoOworCWVudHJpZXNbaWR4XS5m aXJzdF93cml0ZV90aW1lID0gKndyaXRlX3RpbWU7CisJZW50cmllc1tpZHhdLmxhc3Rfd3JpdGVf dGltZSA9ICp3cml0ZV90aW1lOworCisJLyogSW5zZXJ0IGF0IGhlYWQgb2YgYnVja2V0IGNoYWlu ICovCisJZW50cmllc1tpZHhdLm5leHQgPSBidWNrZXRzW2J1Y2tldF07CisJYnVja2V0c1tidWNr ZXRdID0gaWR4OworCisJZXJlcG9ydChERUJVRzIsCisJCShlcnJtc2coInRyYWNrX3RhYmxlX211 dGF0aW9uOiAiCisJCQkJIm1hcmtlZCBvaWQgJWQgKGRib2lkICVkKSB3cml0dGVuIiwKKwkJCQl0 YWJsZV9vaWQsIGRib2lkKSkpOworfQorCisvKgorICogUmVtb3ZlIGV4cGlyZWQgZW50cmllcyBm cm9tIHRoZSB0YWJsZSBtYXAuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZC4KKyAq Lworc3RhdGljIHZvaWQKK3RhYmxlX21hcF9jbGVhbnVwX2V4cGlyZWQoCisJVHJhY2tUYWJsZU11 dGF0aW9uSGFzaFRhYmxlICptYXAsIHVpbnQ2NCB0dGxfdXMpCit7CisJaW50ICpidWNrZXRzID0g VEFCTEVfTUFQX0JVQ0tFVFMobWFwKTsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmll czsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50NjQgbWF4X3N0YWxlX3VzOworCWludCByZW1v dmVkID0gMDsKKwlpbnQgYjsKKwlpbnQgaW52YWxpZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lO VkFMSURfSU5ERVg7CisKKwllbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwlnZXRf Y3VycmVudF90aW1lKCZub3cpOworCisJbWF4X3N0YWxlX3VzID0gKGludDY0KXBvb2xfY29uZmln CisJCS0+dHJhY2tfdGFibGVfbXV0YXRpb25fbWF4X3N0YWxlbmVzcyAqIDEwMDBMTDsKKworCWZv ciAoYiA9IDA7IGIgPCBtYXAtPm51bV9idWNrZXRzOyBiKyspCisJeworCQlpbnQgKnByZXZfcHRy ID0gJmJ1Y2tldHNbYl07CisJCWludCBpZHggPSBidWNrZXRzW2JdOworCisJCXdoaWxlIChpZHgg IT0gaW52YWxpZCkKKwkJeworCQkJaW50NjQgYWdlOworCQkJaW50NjQgdG90YWxfYWdlOworCQkJ Ym9vbCBleHBpcmVkOworCisJCQlhZ2UgPSBlbGFwc2VkX3VzKAorCQkJCSZlbnRyaWVzW2lkeF0u bGFzdF93cml0ZV90aW1lLCAmbm93KTsKKwkJCWV4cGlyZWQgPSAoYWdlID4gKGludDY0KXR0bF91 cyk7CisKKwkJCS8qCisJCQkgKiBBbHNvIGV2aWN0IGVudHJpZXMgdGhhdCBleGNlZWQKKwkJCSAq IG1heF9zdGFsZW5lc3MgZnJvbSBmaXJzdCB3cml0ZS4KKwkJCSAqLworCQkJaWYgKCFleHBpcmVk ICYmIG1heF9zdGFsZV91cyA+IDApCisJCQl7CisJCQkJdG90YWxfYWdlID0gZWxhcHNlZF91cygK KwkJCQkJJmVudHJpZXNbaWR4XS5maXJzdF93cml0ZV90aW1lLAorCQkJCQkmbm93KTsKKwkJCQll eHBpcmVkID0gKHRvdGFsX2FnZSA+PSBtYXhfc3RhbGVfdXMpOworCQkJfQorCisJCQlpZiAoZXhw aXJlZCkKKwkJCXsKKwkJCQkvKiBFbnRyeSBoYXMgZXhwaXJlZCAtIHJlbW92ZSBpdCAqLworCQkJ CWludCBuZXh0ID0gZW50cmllc1tpZHhdLm5leHQ7CisKKwkJCQkqcHJldl9wdHIgPSBuZXh0Owor CQkJCXRhYmxlX21hcF9mcmVlX2VudHJ5KG1hcCwgaWR4KTsKKwkJCQlpZHggPSBuZXh0OworCQkJ CXJlbW92ZWQrKzsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmV2X3B0ciA9ICZlbnRyaWVz W2lkeF0ubmV4dDsKKwkJCQlpZHggPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwkJCX0KKwkJfQorCX0K KworCWlmIChyZW1vdmVkID4gMCkKKwl7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygi dHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJImNsZWFuZWQgdXAgJWQgZXhwaXJlZCBlbnRy aWVzIiwKKwkJCQkJcmVtb3ZlZCkpKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAq IFBhcnNlIGNhY2hlIG9wZXJhdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgor ICogSW5pdGlhbGl6ZSBwYXJzZSBjYWNoZQorICovCitzdGF0aWMgdm9pZAorcGFyc2VfY2FjaGVf aW5pdChRdWVyeVBhcnNlQ2FjaGUgKmNhY2hlLAorCQkJCSBpbnQgbnVtX2J1Y2tldHMsIGludCBt YXhfZW50cmllcykKK3sKKwlpbnQgKmJ1Y2tldHM7CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVz OworCWludCBpOworCWludCBpbnZhbGlkID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9J TkRFWDsKKworCWNhY2hlLT5udW1fYnVja2V0cyA9IG51bV9idWNrZXRzOworCWNhY2hlLT5tYXhf ZW50cmllcyA9IG1heF9lbnRyaWVzOworCWNhY2hlLT5udW1fZW50cmllcyA9IDA7CisJY2FjaGUt PmZyZWVfbGlzdF9oZWFkID0gMDsKKwljYWNoZS0+bHJ1X2hlYWQgPSBpbnZhbGlkOworCWNhY2hl LT5scnVfdGFpbCA9IGludmFsaWQ7CisKKwlidWNrZXRzID0gUEFSU0VfQ0FDSEVfQlVDS0VUUyhj YWNoZSk7CisJZW50cmllcyA9IFBBUlNFX0NBQ0hFX0VOVFJJRVMoY2FjaGUpOworCisJLyogSW5p dGlhbGl6ZSBhbGwgYnVja2V0cyB0byBlbXB0eSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVj a2V0czsgaSsrKQorCQlidWNrZXRzW2ldID0gaW52YWxpZDsKKworCS8qIEluaXRpYWxpemUgZnJl ZSBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IG1heF9lbnRyaWVzOyBpKyspCisJeworCQllbnRy aWVzW2ldLmluX3VzZSA9IGZhbHNlOworCQllbnRyaWVzW2ldLm5leHQgPSAoaSA8IG1heF9lbnRy aWVzIC0gMSkgPworCQkJaSArIDEgOiBpbnZhbGlkOworCQllbnRyaWVzW2ldLmxydV9wcmV2ID0g aW52YWxpZDsKKwkJZW50cmllc1tpXS5scnVfbmV4dCA9IGludmFsaWQ7CisJfQorCisJZXJlcG9y dChERUJVRzEsCisJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJInBhcnNl IGNhY2hlIGluaXQgJWQgYnVja2V0cywgIgorCQkJCSIlZCBtYXggZW50cmllcyIsCisJCQkJbnVt X2J1Y2tldHMsIG1heF9lbnRyaWVzKSkpOworfQorCisvKgorICogTW92ZSBlbnRyeSB0byBmcm9u dCBvZiBMUlUgbGlzdCAobW9zdCByZWNlbnRseSB1c2VkKQorICovCitzdGF0aWMgdm9pZAorcGFy c2VfY2FjaGVfbHJ1X3RvdWNoKFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUsIGludCBpZHgpCit7CisJ UXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzID0gUEFSU0VfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJ aW50IGludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJLyog QWxyZWFkeSBhdCBoZWFkPyAqLworCWlmIChjYWNoZS0+bHJ1X2hlYWQgPT0gaWR4KQorCQlyZXR1 cm47CisKKwkvKiBSZW1vdmUgZnJvbSBjdXJyZW50IHBvc2l0aW9uICovCisJaWYgKGVudHJpZXNb aWR4XS5scnVfcHJldiAhPSBpbnZhbGlkKQorCQllbnRyaWVzW2VudHJpZXNbaWR4XS5scnVfcHJl dl0ubHJ1X25leHQgPQorCQkJZW50cmllc1tpZHhdLmxydV9uZXh0OworCWlmIChlbnRyaWVzW2lk eF0ubHJ1X25leHQgIT0gaW52YWxpZCkKKwkJZW50cmllc1tlbnRyaWVzW2lkeF0ubHJ1X25leHRd LmxydV9wcmV2ID0KKwkJCWVudHJpZXNbaWR4XS5scnVfcHJldjsKKwlpZiAoY2FjaGUtPmxydV90 YWlsID09IGlkeCkKKwkJY2FjaGUtPmxydV90YWlsID0gZW50cmllc1tpZHhdLmxydV9wcmV2Owor CisJLyogSW5zZXJ0IGF0IGhlYWQgKi8KKwllbnRyaWVzW2lkeF0ubHJ1X3ByZXYgPSBpbnZhbGlk OworCWVudHJpZXNbaWR4XS5scnVfbmV4dCA9IGNhY2hlLT5scnVfaGVhZDsKKwlpZiAoY2FjaGUt PmxydV9oZWFkICE9IGludmFsaWQpCisJCWVudHJpZXNbY2FjaGUtPmxydV9oZWFkXS5scnVfcHJl diA9IGlkeDsKKwljYWNoZS0+bHJ1X2hlYWQgPSBpZHg7CisJaWYgKGNhY2hlLT5scnVfdGFpbCA9 PSBpbnZhbGlkKQorCQljYWNoZS0+bHJ1X3RhaWwgPSBpZHg7Cit9CisKKy8qCisgKiBBZGQgZW50 cnkgdG8gTFJVIGxpc3QgKGF0IGhlYWQpCisgKi8KK3N0YXRpYyB2b2lkCitwYXJzZV9jYWNoZV9s cnVfYWRkKFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUsIGludCBpZHgpCit7CisJUXVlcnlQYXJzZUVu dHJ5ICplbnRyaWVzID0gUEFSU0VfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJaW50IGludmFsaWQg PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJZW50cmllc1tpZHhdLmxy dV9wcmV2ID0gaW52YWxpZDsKKwllbnRyaWVzW2lkeF0ubHJ1X25leHQgPSBjYWNoZS0+bHJ1X2hl YWQ7CisKKwlpZiAoY2FjaGUtPmxydV9oZWFkICE9IGludmFsaWQpCisJCWVudHJpZXNbY2FjaGUt PmxydV9oZWFkXS5scnVfcHJldiA9IGlkeDsKKworCWNhY2hlLT5scnVfaGVhZCA9IGlkeDsKKwor CWlmIChjYWNoZS0+bHJ1X3RhaWwgPT0gaW52YWxpZCkKKwkJY2FjaGUtPmxydV90YWlsID0gaWR4 OworfQorCisvKgorICogUmVtb3ZlIGVudHJ5IGZyb20gTFJVIGxpc3QKKyAqLworc3RhdGljIHZv aWQKK3BhcnNlX2NhY2hlX2xydV9yZW1vdmUoUXVlcnlQYXJzZUNhY2hlICpjYWNoZSwgaW50IGlk eCkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBQQVJTRV9DQUNIRV9FTlRSSUVTKGNh Y2hlKTsKKwlpbnQgaW52YWxpZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7 CisKKwlpZiAoZW50cmllc1tpZHhdLmxydV9wcmV2ICE9IGludmFsaWQpCisJCWVudHJpZXNbZW50 cmllc1tpZHhdLmxydV9wcmV2XS5scnVfbmV4dCA9CisJCQllbnRyaWVzW2lkeF0ubHJ1X25leHQ7 CisJZWxzZQorCQljYWNoZS0+bHJ1X2hlYWQgPSBlbnRyaWVzW2lkeF0ubHJ1X25leHQ7CisKKwlp ZiAoZW50cmllc1tpZHhdLmxydV9uZXh0ICE9IGludmFsaWQpCisJCWVudHJpZXNbZW50cmllc1tp ZHhdLmxydV9uZXh0XS5scnVfcHJldiA9CisJCQllbnRyaWVzW2lkeF0ubHJ1X3ByZXY7CisJZWxz ZQorCQljYWNoZS0+bHJ1X3RhaWwgPSBlbnRyaWVzW2lkeF0ubHJ1X3ByZXY7CisKKwllbnRyaWVz W2lkeF0ubHJ1X3ByZXYgPSBpbnZhbGlkOworCWVudHJpZXNbaWR4XS5scnVfbmV4dCA9IGludmFs aWQ7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBlbnRyeSBmcm9tIGZyZWUgbGlzdCwgZXZpY3Rpbmcg TFJVIGlmIG5lZWRlZAorICovCitzdGF0aWMgaW50CitwYXJzZV9jYWNoZV9hbGxvY19lbnRyeShR dWVyeVBhcnNlQ2FjaGUgKmNhY2hlKQoreworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50cmllcyA9IFBB UlNFX0NBQ0hFX0VOVFJJRVMoY2FjaGUpOworCWludCAqYnVja2V0cyA9IFBBUlNFX0NBQ0hFX0JV Q0tFVFMoY2FjaGUpOworCWludCBpZHg7CisJaW50IGludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRB VElPTl9JTlZBTElEX0lOREVYOworCisJaWYgKGNhY2hlLT5mcmVlX2xpc3RfaGVhZCAhPSBpbnZh bGlkKQorCXsKKwkJaWR4ID0gY2FjaGUtPmZyZWVfbGlzdF9oZWFkOworCQljYWNoZS0+ZnJlZV9s aXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwkJZW50cmllc1tpZHhdLmluX3VzZSA9IHRy dWU7CisJCWVudHJpZXNbaWR4XS5uZXh0ID0gaW52YWxpZDsKKwkJY2FjaGUtPm51bV9lbnRyaWVz Kys7CisJCXJldHVybiBpZHg7CisJfQorCisJLyogTm8gZnJlZSBlbnRyaWVzIC0gZXZpY3QgTFJV ICovCisJaWYgKGNhY2hlLT5scnVfdGFpbCA9PSBpbnZhbGlkKQorCQlyZXR1cm4gaW52YWxpZDsK KworCWlkeCA9IGNhY2hlLT5scnVfdGFpbDsKKworCS8qIFJlbW92ZSBmcm9tIGhhc2ggYnVja2V0 ICovCisJeworCQlpbnQgYnVja2V0OworCQlpbnQgKnByZXZfcHRyOworCQlpbnQgY3VycjsKKwor CQlidWNrZXQgPSBlbnRyaWVzW2lkeF0ucXVlcnlfaGFzaCAlCisJCQkJIGNhY2hlLT5udW1fYnVj a2V0czsKKwkJcHJldl9wdHIgPSAmYnVja2V0c1tidWNrZXRdOworCQljdXJyID0gYnVja2V0c1ti dWNrZXRdOworCisJCXdoaWxlIChjdXJyICE9IGludmFsaWQpCisJCXsKKwkJCWlmIChjdXJyID09 IGlkeCkKKwkJCXsKKwkJCQkqcHJldl9wdHIgPSBlbnRyaWVzW2N1cnJdLm5leHQ7CisJCQkJYnJl YWs7CisJCQl9CisJCQlwcmV2X3B0ciA9ICZlbnRyaWVzW2N1cnJdLm5leHQ7CisJCQljdXJyID0g ZW50cmllc1tjdXJyXS5uZXh0OworCQl9CisJfQorCisJLyogUmVtb3ZlIGZyb20gTFJVIGxpc3Qg Ki8KKwlwYXJzZV9jYWNoZV9scnVfcmVtb3ZlKGNhY2hlLCBpZHgpOworCisJLyogUmVpbml0aWFs aXplIGVudHJ5ICovCisJZW50cmllc1tpZHhdLmluX3VzZSA9IHRydWU7CisJZW50cmllc1tpZHhd Lm5leHQgPSBpbnZhbGlkOworCisJcmV0dXJuIGlkeDsKK30KKworLyoKKyAqIExvb2sgdXAgYSBx dWVyeSBpbiB0aGUgcGFyc2UgY2FjaGUKKyAqLworc3RhdGljIGludAorcGFyc2VfY2FjaGVfbG9v a3VwKFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUsIHVpbnQ2NCBoYXNoKQoreworCWludCAqYnVja2V0 cyA9IFBBUlNFX0NBQ0hFX0JVQ0tFVFMoY2FjaGUpOworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50cmll cyA9IFBBUlNFX0NBQ0hFX0VOVFJJRVMoY2FjaGUpOworCWludCBidWNrZXQgPSBoYXNoICUgY2Fj aGUtPm51bV9idWNrZXRzOworCWludCBpZHggPSBidWNrZXRzW2J1Y2tldF07CisJaW50IGludmFs aWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJd2hpbGUgKGlkeCAh PSBpbnZhbGlkKQorCXsKKwkJaWYgKGVudHJpZXNbaWR4XS5xdWVyeV9oYXNoID09IGhhc2gpCisJ CQlyZXR1cm4gaWR4OworCQlpZHggPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwl9CisKKwlyZXR1cm4g aW52YWxpZDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogUXVlcnkgbm9ybWFsaXphdGlv bgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBTaW1wbGUgcXVlcnkgbm9ybWFs aXphdGlvbjoKKyAqIC0gU3RyaXAgY29tbWVudHMgKC0tIGFuZCBDLXN0eWxlIGJsb2NrIGNvbW1l bnRzKQorICogLSBDb2xsYXBzZSB3aGl0ZXNwYWNlCisgKiAtIENvbnZlcnQgdG8gbG93ZXJjYXNl IChleGNlcHQgaW5zaWRlIHN0cmluZ3MpCisgKiAtIFJlcGxhY2UgbGl0ZXJhbCB2YWx1ZXMgd2l0 aCBwbGFjZWhvbGRlcnMKKyAqLworc3RhdGljIHNpemVfdAorbm9ybWFsaXplX3F1ZXJ5KGNvbnN0 IGNoYXIgKnF1ZXJ5LCBjaGFyICpvdXRwdXQsCisJCQkJc2l6ZV90IG91dHB1dF9zaXplKQorewor CWNvbnN0IGNoYXIgKnNyYyA9IHF1ZXJ5OworCWNoYXIgKmRzdCA9IG91dHB1dDsKKwljaGFyICpk c3RfZW5kID0gb3V0cHV0ICsgb3V0cHV0X3NpemUgLSAxOworCWJvb2wgaW5fc3RyaW5nID0gZmFs c2U7CisJY2hhciBzdHJpbmdfY2hhciA9IDA7CisJYm9vbCBsYXN0X3dhc19zcGFjZSA9IHRydWU7 CisKKwl3aGlsZSAoKnNyYyAmJiBkc3QgPCBkc3RfZW5kKQorCXsKKwkJLyogSGFuZGxlIHN0cmlu ZyBsaXRlcmFscyAqLworCQlpZiAoaW5fc3RyaW5nKQorCQl7CisJCQlpZiAoKnNyYyA9PSBzdHJp bmdfY2hhcikKKwkJCXsKKwkJCQlpZiAoKihzcmMgKyAxKSA9PSBzdHJpbmdfY2hhcikKKwkJCQl7 CisJCQkJCS8qIEVzY2FwZWQgcXVvdGUgKi8KKwkJCQkJc3JjICs9IDI7CisJCQkJCWNvbnRpbnVl OworCQkJCX0KKwkJCQlpbl9zdHJpbmcgPSBmYWxzZTsKKwkJCQkvKiBSZXBsYWNlIHN0cmluZyB3 aXRoIHBsYWNlaG9sZGVyICovCisJCQkJKmRzdCsrID0gJyQnOworCQkJfQorCQkJc3JjKys7CisJ CQljb250aW51ZTsKKwkJfQorCisJCS8qIENoZWNrIGZvciBzdHJpbmcgc3RhcnQgKi8KKwkJaWYg KCpzcmMgPT0gJ1wnJyB8fCAqc3JjID09ICciJykKKwkJeworCQkJaW5fc3RyaW5nID0gdHJ1ZTsK KwkJCXN0cmluZ19jaGFyID0gKnNyYzsKKwkJCXNyYysrOworCQkJY29udGludWU7CisJCX0KKwor CQkvKiBIYW5kbGUgc2luZ2xlLWxpbmUgY29tbWVudHMgKi8KKwkJaWYgKCpzcmMgPT0gJy0nICYm ICooc3JjICsgMSkgPT0gJy0nKQorCQl7CisJCQl3aGlsZSAoKnNyYyAmJiAqc3JjICE9ICdcbicp CisJCQkJc3JjKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBtdWx0aS1saW5l IGNvbW1lbnRzICovCisJCWlmICgqc3JjID09ICcvJyAmJiAqKHNyYyArIDEpID09ICcqJykKKwkJ eworCQkJc3JjICs9IDI7CisJCQl3aGlsZSAoKnNyYyAmJgorCQkJCSAgICEoKnNyYyA9PSAnKicg JiYgKihzcmMgKyAxKSA9PSAnLycpKQorCQkJCXNyYysrOworCQkJaWYgKCpzcmMpCisJCQkJc3Jj ICs9IDI7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSB3aGl0ZXNwYWNlICovCisJ CWlmICgqc3JjID09ICcgJyB8fCAqc3JjID09ICdcdCcgfHwKKwkJCSpzcmMgPT0gJ1xuJyB8fCAq c3JjID09ICdccicpCisJCXsKKwkJCWlmICghbGFzdF93YXNfc3BhY2UpCisJCQl7CisJCQkJKmRz dCsrID0gJyAnOworCQkJCWxhc3Rfd2FzX3NwYWNlID0gdHJ1ZTsKKwkJCX0KKwkJCXNyYysrOwor CQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5kbGUgbnVtYmVycyAtIHJlcGxhY2Ugd2l0aCBw bGFjZWhvbGRlciAqLworCQlpZiAoKCpzcmMgPj0gJzAnICYmICpzcmMgPD0gJzknKSB8fAorCQkJ KCpzcmMgPT0gJy4nICYmICooc3JjICsgMSkgPj0gJzAnICYmCisJCQkgKihzcmMgKyAxKSA8PSAn OScpKQorCQl7CisJCQl3aGlsZSAoKnNyYyAmJgorCQkJCSAgICgoKnNyYyA+PSAnMCcgJiYgKnNy YyA8PSAnOScpIHx8CisJCQkJCSpzcmMgPT0gJy4nKSkKKwkJCQlzcmMrKzsKKwkJCWlmICghbGFz dF93YXNfc3BhY2UgJiYKKwkJCQlkc3QgPiBvdXRwdXQgJiYgKihkc3QgLSAxKSAhPSAnJCcpCisJ CQkJKmRzdCsrID0gJyQnOworCQkJbGFzdF93YXNfc3BhY2UgPSBmYWxzZTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJLyogUmVndWxhciBjaGFyYWN0ZXIgLSBjb252ZXJ0IHRvIGxvd2VyY2FzZSAq LworCQlpZiAoKnNyYyA+PSAnQScgJiYgKnNyYyA8PSAnWicpCisJCQkqZHN0KysgPSAqc3JjICsg MzI7CisJCWVsc2UKKwkJCSpkc3QrKyA9ICpzcmM7CisKKwkJbGFzdF93YXNfc3BhY2UgPSBmYWxz ZTsKKwkJc3JjKys7CisJfQorCisJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisJaWYgKGRz dCA+IG91dHB1dCAmJiAqKGRzdCAtIDEpID09ICcgJykKKwkJZHN0LS07CisKKwkqZHN0ID0gJ1ww JzsKKwlyZXR1cm4gZHN0IC0gb3V0cHV0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBQ dWJsaWMgQVBJIGltcGxlbWVudGF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoK KyAqIENhbGN1bGF0ZSB0aGUgdG90YWwgc2hhcmVkIG1lbW9yeSBzaXplIHJlcXVpcmVkCisgKiBm b3IgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUuCisgKi8KK1NpemUKK3Bvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSh2b2lkKQoreworCVNpemUgc2l6ZSA9IDA7CisJ aW50IHRibF9ia3Q7CisJaW50IHRibF9zejsKKwlpbnQgcXJ5X2JrdDsKKwlpbnQgcXJ5X3N6Owor CisJdGJsX2JrdCA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNr ZXRzOworCXRibF9zeiA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9z aXplOworCXFyeV9ia3QgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlf YnVja2V0czsKKwlxcnlfc3ogPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVl cnlfcGFyc2VfY2FjaGVfc2l6ZTsKKworCS8qIE1haW4gc3RydWN0dXJlICovCisJc2l6ZSArPSBz aXplb2YoVHJhY2tUYWJsZU11dGF0aW9uU2htZW0pOworCisJLyogVGFibGUgbXV0YXRpb24gaGFz aCB0YWJsZSAqLworCXNpemUgKz0gc2l6ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSk7 CisJc2l6ZSArPSB0YmxfYmt0ICogc2l6ZW9mKGludCk7CisJc2l6ZSArPSB0Ymxfc3ogKiBzaXpl b2YoVHJhY2tUYWJsZU11dGF0aW9uRW50cnkpOworCisJLyogUGFyc2UgY2FjaGUgKi8KKwlzaXpl ICs9IHNpemVvZihRdWVyeVBhcnNlQ2FjaGUpOworCXNpemUgKz0gcXJ5X2JrdCAqIHNpemVvZihp bnQpOworCXNpemUgKz0gcXJ5X3N6ICogc2l6ZW9mKFF1ZXJ5UGFyc2VFbnRyeSk7CisKKwlyZXR1 cm4gc2l6ZTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVz IGZvciB0aGUKKyAqIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUuICBBbGxvY2F0ZXMgYW5k IHNldHMKKyAqIHVwIHRoZSB0YWJsZSBtYXAgYW5kIHBhcnNlIGNhY2hlIGluIHNoYXJlZCBtZW1v cnkuCisgKiBDYWxsZWQgb25jZSBmcm9tIHBncG9vbCBtYWluIHByb2Nlc3MgYXQgc3RhcnR1cC4K KyAqLwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbml0KHZvaWQpCit7CisjaWZu ZGVmIFBPT0xfUFJJVkFURQorCVNpemUJCXNobWVtX3NpemU7CisJY2hhcgkgICAqc2htZW1fcHRy OworCVRyYWNrVGFibGVNdXRhdGlvblN0YXRlICpzdDsKKwlpbnQJCQl0YmxfYmt0OworCWludAkJ CXRibF9zejsKKwlpbnQJCQlxcnlfYmt0OworCWludAkJCXFyeV9zejsKKworCWlmIChwb29sX2Nv bmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0KKwkJRExCT1dfRE1MX0FEQVBU SVZFX0dMT0JBTCkKKwl7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygidHJhY2tfdGFi bGVfbXV0YXRpb246ICIKKwkJCQkJImZlYXR1cmUgZGlzYWJsZWQiKSkpOworCQlyZXR1cm47CisJ fQorCisJdGJsX2JrdCA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9i dWNrZXRzOworCXRibF9zeiA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJs ZV9zaXplOworCXFyeV9ia3QgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVl cnlfYnVja2V0czsKKwlxcnlfc3ogPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25f cXVlcnlfcGFyc2VfY2FjaGVfc2l6ZTsKKworCXNobWVtX3NpemUgPSBwb29sX3RyYWNrX3RhYmxl X211dGF0aW9uX3NobWVtX3NpemUoKTsKKworCS8qCisJICogQWxsb2NhdGUgZnJvbSB0aGUgbWFp biBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCisJICogTWVtb3J5IGlzIHplcm9lZCBieQorCSAqIGlu aXRpYWxpemVfc2hhcmVkX21lbW9yeV9tYWluX3NlZ21lbnQoKS4KKwkgKi8KKwlzaG1lbV9wdHIg PSBwb29sX3NoYXJlZF9tZW1vcnlfc2VnbWVudF9nZXRfY2h1bmsoCisJCQkJCXNobWVtX3NpemUp OworCWlmIChzaG1lbV9wdHIgPT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkoZXJy bXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlICV6 dSBieXRlcyIsCisJCQkJCXNobWVtX3NpemUpKSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTZXQg dXAgcG9pbnRlcnMgd2l0aGluIHNoYXJlZCBtZW1vcnkgKi8KKwl0cmFja190YWJsZV9tdXRhdGlv bl9zaG1lbSA9CisJCShUcmFja1RhYmxlTXV0YXRpb25TaG1lbSAqKSBzaG1lbV9wdHI7CisJc2ht ZW1fcHRyICs9IHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25TaG1lbSk7CisKKwl0cmFja190YWJs ZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwID0KKwkJKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hU YWJsZSAqKSBzaG1lbV9wdHI7CisJc2htZW1fcHRyICs9IHNpemVvZihUcmFja1RhYmxlTXV0YXRp b25IYXNoVGFibGUpOworCXNobWVtX3B0ciArPSB0YmxfYmt0ICogc2l6ZW9mKGludCk7CisJc2ht ZW1fcHRyICs9IHRibF9zeiAqIHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25FbnRyeSk7CisKKwl0 cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+cXVlcnlfY2FjaGUgPQorCQkoUXVlcnlQYXJzZUNh Y2hlICopIHNobWVtX3B0cjsKKworCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLworCXRhYmxl X21hcF9pbml0KAorCQl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwLAorCQl0 YmxfYmt0LCB0Ymxfc3opOworCisJcGFyc2VfY2FjaGVfaW5pdCgKKwkJdHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW0tPnF1ZXJ5X2NhY2hlLAorCQlxcnlfYmt0LCBxcnlfc3opOworCisJLyogSW5p dGlhbGl6ZSBnbG9iYWwgc3RhdGUgKi8KKwlzdCA9ICZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1l bS0+c3RhdGU7CisJc3QtPmluaXRpYWxpemVkID0gdHJ1ZTsKKwlzdC0+Y3VycmVudF90dGxfdXMg PSBUUkFDS19UQUJMRV9NVVRBVElPTl9ERUZBVUxUX1RUTF9VUzsKKwlnZXRfY3VycmVudF90aW1l KCZzdC0+dHRsX2xhc3RfdXBkYXRlZCk7CisJZ2V0X2N1cnJlbnRfdGltZSgmc3QtPmxhc3RfY2xl YW51cF90aW1lKTsKKwlzdC0+Z2xvYmFsX2NvbGRfc3RhcnRfdW50aWwudHZfc2VjID0gMDsKKwlz dC0+Z2xvYmFsX2NvbGRfc3RhcnRfdW50aWwudHZfdXNlYyA9IDA7CisJc3QtPnN0YXRzX3F1ZXJp ZXNfY2hlY2tlZCA9IDA7CisJc3QtPnN0YXRzX2ZvcmNlZF9wcmltYXJ5ID0gMDsKKwlzdC0+c3Rh dHNfYWxsb3dlZF9yZXBsaWNhID0gMDsKKworCWVyZXBvcnQoTE9HLAorCQkoZXJybXNnKCJ0cmFj a190YWJsZV9tdXRhdGlvbjogIgorCQkJCSJpbml0aWFsaXplZCB3aXRoICV6dSBieXRlcyBzaG1l bSIsCisJCQkJc2htZW1fc2l6ZSkpKTsKKyNlbmRpZgorfQorCisvKgorICogSW5pdGlhbGl6ZSBw ZXItY2hpbGQgcHJvY2VzcyBzdGF0ZS4KKyAqIFJlY29yZHMgdGhlIHByb2Nlc3Mgc3RhcnQgdGlt ZSBmb3IgY29sZCBzdGFydAorICogcGVyaW9kIHRyYWNraW5nLiAgQ2FsbGVkIHdoZW4gYSBjaGls ZCBwcm9jZXNzIHN0YXJ0cy4KKyAqLwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9j aGlsZF9pbml0KHZvaWQpCit7CisJaW50IGR1cjsKKworCWlmIChUUkFDS19UQUJMRV9NVVRBVElP Tl9ESVNBQkxFRCgpKQorCQlyZXR1cm47CisKKwlnZXRfY3VycmVudF90aW1lKCZwcm9jZXNzX3N0 YXJ0X3RpbWUpOworCWNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQgPSB0cnVlOworCWR1ciA9IHBvb2xf Y29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uOworCisJZXJl cG9ydChERUJVRzEsCisJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJImNo aWxkIGluaXQsIGNvbGQgc3RhcnQgJWQgbXMiLAorCQkJCWR1cikpKTsKK30KKworLyoKKyAqIENo ZWNrIGlmIHRoZSBwcm9jZXNzIGlzIGluIGNvbGQgc3RhcnQgcGVyaW9kLgorICogRHVyaW5nIGNv bGQgc3RhcnQsIGFsbCBxdWVyaWVzIGFyZSByb3V0ZWQgdG8KKyAqIHByaW1hcnkgdG8gYXZvaWQg c3RhbGUgcmVhZHMuICBDaGVja3MgYm90aAorICogcGVyLXByb2Nlc3MgYW5kIGdsb2JhbCAod2F0 Y2hkb2cpIGNvbGQgc3RhcnQuCisgKi8KK2Jvb2wKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25f aW5fY29sZF9zdGFydCh2b2lkKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQ2NAkJZWxh cHNlZF9tczsKKwlpbnQJCQlkdXI7CisJVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUgKnN0OworCisJ aWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkpCisJCXJldHVybiBmYWxzZTsKKwor CWR1ciA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0 aW9uOworCWlmIChkdXIgPD0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJZ2V0X2N1cnJlbnRfdGlt ZSgmbm93KTsKKwlzdCA9ICZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGU7CisKKwkv KiBDaGVjayB3YXRjaGRvZy10cmlnZ2VyZWQgZ2xvYmFsIGNvbGQgc3RhcnQgKi8KKwlpZiAoc3Qt Pmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsLnR2X3NlYyAhPSAwICYmCisJCWVsYXBzZWRfdXMoJm5v dywKKwkJCQkgICAmc3QtPmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsKSA+IDApCisJeworCQlyZXR1 cm4gdHJ1ZTsKKwl9CisKKwkvKiBDaGVjayBwZXItcHJvY2VzcyBjb2xkIHN0YXJ0ICovCisJaWYg KCFjb2xkX3N0YXJ0X2luaXRpYWxpemVkKQorCQlyZXR1cm4gZmFsc2U7CisKKwllbGFwc2VkX21z ID0gZWxhcHNlZF91cygmcHJvY2Vzc19zdGFydF90aW1lLCAmbm93KSAvIDEwMDA7CisKKwlpZiAo ZWxhcHNlZF9tcyA8IGR1cikKKwl7CisJCWVyZXBvcnQoREVCVUcyLAorCQkJKGVycm1zZygidHJh Y2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJImNvbGQgc3RhcnQgKCVsZC8lZCBtcykiLAorCQkJ CQkobG9uZyllbGFwc2VkX21zLCBkdXIpKSk7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKworLyoKKyAqIFRyaWdnZXIgYSBnbG9iYWwgY29sZCBzdGFydCBmb3IgYWxs IHByb2Nlc3Nlcy4KKyAqIFNldHMgdGhlIGNvbGQgc3RhcnQgZW5kIHRpbWUgaW4gc2hhcmVkIG1l bW9yeS4KKyAqIENhbGxlZCBhZnRlciB3YXRjaGRvZyBsZWFkZXIgY2hhbmdlIHRvIGZvcmNlIGFs bAorICogcXVlcmllcyB0byBwcmltYXJ5IGR1cmluZyB0aGUgdHJhbnNpdGlvbi4KKyAqLwordm9p ZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90cmlnZ2VyX2dsb2JhbF9jb2xkX3N0YXJ0KHZv aWQpCit7CisJc3RydWN0IHRpbWV2YWwgbm93OworCXN0cnVjdCB0aW1ldmFsICp1bnRpbDsKKwlp bnQJCQlkdXI7CisKKwlpZiAoVFJBQ0tfVEFCTEVfTVVUQVRJT05fRElTQUJMRUQoKSkKKwkJcmV0 dXJuOworCisJZHVyID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3Rh cnRfZHVyYXRpb247CisJaWYgKGR1ciA8PSAwKQorCQlyZXR1cm47CisKKwlnZXRfY3VycmVudF90 aW1lKCZub3cpOworCXVudGlsID0gJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZQor CQkJCS5nbG9iYWxfY29sZF9zdGFydF91bnRpbDsKKwkqdW50aWwgPSBub3c7CisJdW50aWwtPnR2 X3NlYyArPSBkdXIgLyAxMDAwOworCXVudGlsLT50dl91c2VjICs9IChkdXIgJSAxMDAwKSAqIDEw MDA7CisJaWYgKHVudGlsLT50dl91c2VjID49IDEwMDAwMDApCisJeworCQl1bnRpbC0+dHZfc2Vj ICs9IHVudGlsLT50dl91c2VjIC8gMTAwMDAwMDsKKwkJdW50aWwtPnR2X3VzZWMgJT0gMTAwMDAw MDsKKwl9CisKKwllcmVwb3J0KExPRywKKwkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246 ICIKKwkJCQkiZ2xvYmFsIGNvbGQgc3RhcnQgZm9yICVkIG1zIiwKKwkJCQlkdXIpKSk7Cit9CisK Ky8qCisgKiBDaGVjayBpZiBhIHRhYmxlIHdhcyByZWNlbnRseSB3cml0dGVuIChpcyAic3RhbGUi KS4KKyAqIFJldHVybnMgdHJ1ZSBpZiByZWFkcyBzaG91bGQgZ28gdG8gcHJpbWFyeSBiZWNhdXNl CisgKiB0aGUgdGFibGUgd2FzIHdyaXR0ZW4gd2l0aGluIHRoZSBjdXJyZW50IFRUTCB3aW5kb3cu CisgKi8KK2Jvb2wKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfaXNfc3RhbGUoCisJ aW50IHRhYmxlX29pZCwgaW50IGRib2lkKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJs ZSAqbWFwOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwl1aW50NjQJCXR0bF91czsKKwl1aW50MzIJ CWhhc2g7CisJaW50CQkJaWR4OworCWJvb2wJCWlzX3N0YWxlID0gZmFsc2U7CisKKwlpZiAoVFJB Q0tfVEFCTEVfTVVUQVRJT05fRElTQUJMRUQoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHRh YmxlX29pZCA8PSAwIHx8IGRib2lkIDw9IDApCisJeworCQlpc19zdGFsZSA9IHRydWU7CisJCWdv dG8gdXBkYXRlX3N0YXRzOworCX0KKworCW1hcCA9IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVt LT50YWJsZV9tYXA7CisJaGFzaCA9IGZudjFhX2hhc2hfdGFibGVfa2V5KHRhYmxlX29pZCwgZGJv aWQpOworCisJdGFibGVfbWFwX2xvY2soKTsKKworCWlkeCA9IHRhYmxlX21hcF9sb29rdXAobWFw LCB0YWJsZV9vaWQsIGRib2lkLCBoYXNoKTsKKwlpZiAoaWR4ICE9IFRSQUNLX1RBQkxFX01VVEFU SU9OX0lOVkFMSURfSU5ERVgpCisJeworCQlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmll czsKKwkJaW50NjQJYWdlOworCQlpbnQ2NAl0b3RhbF9hZ2U7CisJCWludDY0CW1heF9zdGFsZV91 czsKKworCQllbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwkJZ2V0X2N1cnJlbnRf dGltZSgmbm93KTsKKwkJdHRsX3VzID0gdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRl CisJCQkJCS5jdXJyZW50X3R0bF91czsKKworCQlhZ2UgPSBlbGFwc2VkX3VzKAorCQkJJmVudHJp ZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUsICZub3cpOworCQlpc19zdGFsZSA9IChhZ2UgPCAoaW50 NjQpdHRsX3VzKTsKKworCQkvKgorCQkgKiBFbmZvcmNlIG1heF9zdGFsZW5lc3MgaGFyZCBjYXA6 IG5vIGVudHJ5CisJCSAqIGNhbiBmb3JjZSBwcmltYXJ5IHJvdXRpbmcgbG9uZ2VyIHRoYW4KKwkJ ICogbWF4X3N0YWxlbmVzcyBmcm9tIGl0cyBmaXJzdCB3cml0ZS4KKwkJICovCisJCWlmIChpc19z dGFsZSkKKwkJeworCQkJbWF4X3N0YWxlX3VzID0gKGludDY0KXBvb2xfY29uZmlnCisJCQkJLT50 cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzCisJCQkJKiAxMDAwTEw7CisJCQlpZiAo bWF4X3N0YWxlX3VzID4gMCkKKwkJCXsKKwkJCQl0b3RhbF9hZ2UgPSBlbGFwc2VkX3VzKAorCQkJ CQkmZW50cmllc1tpZHhdLmZpcnN0X3dyaXRlX3RpbWUsCisJCQkJCSZub3cpOworCQkJCWlmICh0 b3RhbF9hZ2UgPj0gbWF4X3N0YWxlX3VzKQorCQkJCQlpc19zdGFsZSA9IGZhbHNlOworCQkJfQor CQl9CisKKwkJZXJlcG9ydChERUJVRzIsCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlv bjogIgorCQkJCQkib2lkICVkIGRib2lkICVkICIKKwkJCQkJImVsYXBzZWQ9JWxkIHR0bD0lbHUg c3RhbGU9JWQiLAorCQkJCQl0YWJsZV9vaWQsIGRib2lkLAorCQkJCQkobG9uZylhZ2UsCisJCQkJ CSh1bnNpZ25lZCBsb25nKXR0bF91cywKKwkJCQkJaXNfc3RhbGUpKSk7CisJfQorCisJdGFibGVf bWFwX3VubG9jaygpOworCit1cGRhdGVfc3RhdHM6CisJLyogVXBkYXRlIHN0YXRpc3RpY3MgdXNp bmcgc2VtYXBob3JlICovCisJaWYgKHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtICE9IE5VTEwp CisJeworCQlUcmFja1RhYmxlTXV0YXRpb25TdGF0ZSAqc3Q7CisKKwkJdGFibGVfbWFwX2xvY2so KTsKKwkJc3QgPSAmdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlOworCQlzdC0+c3Rh dHNfcXVlcmllc19jaGVja2VkKys7CisJCWlmIChpc19zdGFsZSkKKwkJCXN0LT5zdGF0c19mb3Jj ZWRfcHJpbWFyeSsrOworCQllbHNlCisJCQlzdC0+c3RhdHNfYWxsb3dlZF9yZXBsaWNhKys7CisJ CXRhYmxlX21hcF91bmxvY2soKTsKKwl9CisKKwlyZXR1cm4gaXNfc3RhbGU7Cit9CisKKy8qCisg KiBNYXJrIG11bHRpcGxlIHRhYmxlcyBhcyByZWNlbnRseSB3cml0dGVuLgorICogQ2FsbGVkIGFm dGVyIERNTCBxdWVyaWVzIGNvbXBsZXRlIHRvIHJlY29yZAorICogd2hpY2ggdGFibGVzIHdlcmUg bW9kaWZpZWQuCisgKi8KK3ZvaWQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbWFya190YWJs ZXNfd3JpdHRlbigKKwljb25zdCBpbnQgKnRhYmxlX29pZHMsIGludCBudW1fdGFibGVzLCBpbnQg ZGJvaWQpCit7CisJVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXA7CisJVHJhY2tUYWJs ZU11dGF0aW9uU3RhdGUgKnN0OworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQJCQlpOworCisJ aWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkpCisJCXJldHVybjsKKworCWlmIChu dW1fdGFibGVzIDw9IDAgfHwgdGFibGVfb2lkcyA9PSBOVUxMIHx8CisJCWRib2lkIDw9IDApCisJ CXJldHVybjsKKworCW1hcCA9IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT50YWJsZV9tYXA7 CisJc3QgPSAmdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlOworCWdldF9jdXJyZW50 X3RpbWUoJm5vdyk7CisKKwl0YWJsZV9tYXBfbG9jaygpOworCisJLyogUGVyaW9kaWNhbGx5IGNs ZWFuIHVwIGV4cGlyZWQgZW50cmllcyAqLworCWlmIChtYXAtPm51bV9lbnRyaWVzID4gbWFwLT5t YXhfZW50cmllcyAqIDMgLyA0KQorCXsKKwkJaW50NjQgc2luY2VfY2xlYW51cDsKKworCQlzaW5j ZV9jbGVhbnVwID0gZWxhcHNlZF91cygKKwkJCSZzdC0+bGFzdF9jbGVhbnVwX3RpbWUsICZub3cp OworCQkvKiAxMDBtcyBpbnRlcnZhbCAqLworCQlpZiAoc2luY2VfY2xlYW51cCA+IDEwMDAwMCkK KwkJeworCQkJdGFibGVfbWFwX2NsZWFudXBfZXhwaXJlZCgKKwkJCQltYXAsIHN0LT5jdXJyZW50 X3R0bF91cyk7CisJCQlzdC0+bGFzdF9jbGVhbnVwX3RpbWUgPSBub3c7CisJCX0KKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgbnVtX3RhYmxlczsgaSsrKQorCXsKKwkJdWludDMyCWhhc2g7CisJCWlu dAkJdGFibGVfb2lkID0gdGFibGVfb2lkc1tpXTsKKworCQlpZiAodGFibGVfb2lkID4gMCkKKwkJ eworCQkJaGFzaCA9IGZudjFhX2hhc2hfdGFibGVfa2V5KAorCQkJCXRhYmxlX29pZCwgZGJvaWQp OworCQkJdGFibGVfbWFwX2luc2VydChtYXAsIHRhYmxlX29pZCwKKwkJCQkJCQkgZGJvaWQsIGhh c2gsICZub3cpOworCQl9CisJfQorCisJdGFibGVfbWFwX3VubG9jaygpOworfQorCisvKgorICog TWFyayBhIHNpbmdsZSB0YWJsZSBhcyByZWNlbnRseSB3cml0dGVuLgorICovCit2b2lkCitwb29s X3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVfd3JpdHRlbigKKwlpbnQgdGFibGVfb2lk LCBpbnQgZGJvaWQpCit7CisJaWYgKHRhYmxlX29pZCA+IDAgJiYgZGJvaWQgPiAwKQorCXsKKwkJ Y29uc3QgaW50IHRhYmxlc1sxXSA9IHsgdGFibGVfb2lkIH07CisKKwkJcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbl9tYXJrX3RhYmxlc193cml0dGVuKAorCQkJdGFibGVzLCAxLCBkYm9pZCk7CisJ fQorfQorCisvKgorICogVXBkYXRlIHRoZSBzdGFsZW5lc3MgVFRMIGJhc2VkIG9uIG9ic2VydmVk CisgKiByZXBsaWNhdGlvbiBkZWxheS4gIE5ldyBUVEwgPSBkZWxheSAqIGZhY3RvciwKKyAqIGNs YW1wZWQgdG8gW2RlZmF1bHRfdHRsLCAxIGhvdXJdLgorICovCit2b2lkCitwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX3VwZGF0ZV90dGwodWludDY0IGRlbGF5X3VzKQoreworCXVpbnQ2NAkJbmV3 X3R0bDsKKwlkb3VibGUJCWZhY3RvcjsKKwlUcmFja1RhYmxlTXV0YXRpb25TdGF0ZSAqc3Q7CisK KwlpZiAoVFJBQ0tfVEFCTEVfTVVUQVRJT05fRElTQUJMRUQoKSkKKwkJcmV0dXJuOworCisJZmFj dG9yID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3I7CisJbmV3 X3R0bCA9ICh1aW50NjQpKGRlbGF5X3VzICogZmFjdG9yKTsKKwlpZiAobmV3X3R0bCA8IFRSQUNL X1RBQkxFX01VVEFUSU9OX0RFRkFVTFRfVFRMX1VTKQorCQluZXdfdHRsID0gVFJBQ0tfVEFCTEVf TVVUQVRJT05fREVGQVVMVF9UVExfVVM7CisKKwkvKiBNYXhpbXVtIFRUTCBvZiAxIGhvdXIgKi8K KwlpZiAobmV3X3R0bCA+IDM2MDBVTEwgKiAxMDAwMDAwVUxMKQorCQluZXdfdHRsID0gMzYwMFVM TCAqIDEwMDAwMDBVTEw7CisKKwlzdCA9ICZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3Rh dGU7CisJc3QtPmN1cnJlbnRfdHRsX3VzID0gbmV3X3R0bDsKKwlnZXRfY3VycmVudF90aW1lKCZz dC0+dHRsX2xhc3RfdXBkYXRlZCk7CisKKwllcmVwb3J0KERFQlVHMSwKKwkJKGVycm1zZygidHJh Y2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkiVFRMPSVsdSB1cyAoZGVsYXk9JWx1IGZhY3Rvcj0l LjFmKSIsCisJCQkJKHVuc2lnbmVkIGxvbmcpbmV3X3R0bCwKKwkJCQkodW5zaWduZWQgbG9uZylk ZWxheV91cywKKwkJCQlmYWN0b3IpKSk7Cit9CisKKy8qCisgKiBMb29rIHVwIGEgY2FjaGVkIHBh cnNlIHJlc3VsdCBieSBxdWVyeSBoYXNoLgorICogUmV0dXJucyB0cnVlIGFuZCBmaWxscyBvdXRw dXQgcGFyYW1ldGVycyBpZgorICogdGhlIHF1ZXJ5IHdhcyBmb3VuZCBpbiB0aGUgcGFyc2UgY2Fj aGUuCisgKi8KK2Jvb2wKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2NhY2hlZF9wYXJz ZSgKKwl1aW50NjQgaGFzaCwgYm9vbCAqaXNfd3JpdGUsCisJY2hhciB0YWJsZV9uYW1lc1tdW1RS QUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX05BTUVfTEVOXSwKKwlpbnQgKm51bV90YWJsZXMpCit7 CisJUXVlcnlQYXJzZUNhY2hlICpjYWNoZTsKKwlpbnQJCQlpZHg7CisJYm9vbAkJZm91bmQgPSBm YWxzZTsKKwlpbnQJCQltYXhfdGFibGVzOworCisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJ U0FCTEVEKCkpCisJCXJldHVybiBmYWxzZTsKKworCW1heF90YWJsZXMgPSBUUkFDS19UQUJMRV9N VVRBVElPTl9NQVhfVEFCTEVTX1BFUl9RVUVSWTsKKwljYWNoZSA9IHRyYWNrX3RhYmxlX211dGF0 aW9uX3NobWVtLT5xdWVyeV9jYWNoZTsKKworCXBhcnNlX2NhY2hlX2xvY2soKTsKKworCWlkeCA9 IHBhcnNlX2NhY2hlX2xvb2t1cChjYWNoZSwgaGFzaCk7CisJaWYgKGlkeCAhPSBUUkFDS19UQUJM RV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVz OworCQlpbnQJCWk7CisJCWludAkJbmFtZWxlbjsKKworCQllbnRyaWVzID0gUEFSU0VfQ0FDSEVf RU5UUklFUyhjYWNoZSk7CisJCW5hbWVsZW4gPSBUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJMRV9O QU1FX0xFTjsKKwkJKmlzX3dyaXRlID0gZW50cmllc1tpZHhdLmlzX3dyaXRlOworCQkqbnVtX3Rh YmxlcyA9IGVudHJpZXNbaWR4XS5udW1fdGFibGVzOworCisJCWZvciAoaSA9IDA7CisJCQkgaSA8 IGVudHJpZXNbaWR4XS5udW1fdGFibGVzICYmCisJCQkgaSA8IG1heF90YWJsZXM7CisJCQkgaSsr KQorCQl7CisJCQlzdHJsY3B5KHRhYmxlX25hbWVzW2ldLAorCQkJCQllbnRyaWVzW2lkeF0udGFi bGVfbmFtZXNbaV0sCisJCQkJCW5hbWVsZW4pOworCQl9CisKKwkJLyogTW92ZSB0byBmcm9udCBv ZiBMUlUgKi8KKwkJcGFyc2VfY2FjaGVfbHJ1X3RvdWNoKGNhY2hlLCBpZHgpOworCQlmb3VuZCA9 IHRydWU7CisJfQorCisJcGFyc2VfY2FjaGVfdW5sb2NrKCk7CisKKwlyZXR1cm4gZm91bmQ7Cit9 CisKKy8qCisgKiBTdG9yZSBhIHBhcnNlIHJlc3VsdCBpbiB0aGUgc2hhcmVkIGNhY2hlLgorICog RXZpY3RzIHRoZSBMUlUgZW50cnkgaWYgdGhlIGNhY2hlIGlzIGZ1bGwuCisgKi8KK3ZvaWQKK3Bv b2xfdHJhY2tfdGFibGVfbXV0YXRpb25fY2FjaGVfcGFyc2UoCisJdWludDY0IGhhc2gsIGJvb2wg aXNfd3JpdGUsCisJY29uc3QgY2hhciB0YWJsZV9uYW1lc1tdW1RSQUNLX1RBQkxFX01VVEFUSU9O X1RBQkxFX05BTUVfTEVOXSwKKwlpbnQgbnVtX3RhYmxlcykKK3sKKwlRdWVyeVBhcnNlQ2FjaGUg KmNhY2hlOworCWludAkJICAgKmJ1Y2tldHM7CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzOwor CWludAkJCWlkeDsKKwlpbnQJCQlidWNrZXQ7CisJaW50CQkJbWF4X3RhYmxlczsKKwlpbnQJCQlu YW1lbGVuOworCisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkpCisJCXJldHVy bjsKKworCW1heF90YWJsZXMgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9NQVhfVEFCTEVTX1BFUl9R VUVSWTsKKwluYW1lbGVuID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfTkFNRV9MRU47CisJ Y2FjaGUgPSB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+cXVlcnlfY2FjaGU7CisKKwlwYXJz ZV9jYWNoZV9sb2NrKCk7CisKKwkvKiBDaGVjayBpZiBhbHJlYWR5IGV4aXN0cyAqLworCWlkeCA9 IHBhcnNlX2NhY2hlX2xvb2t1cChjYWNoZSwgaGFzaCk7CisJaWYgKGlkeCAhPSBUUkFDS19UQUJM RV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJcGFyc2VfY2FjaGVfdW5sb2NrKCk7CisJ CXJldHVybjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgZW50cnkgKG1heSBldmljdCBMUlUpICov CisJaWR4ID0gcGFyc2VfY2FjaGVfYWxsb2NfZW50cnkoY2FjaGUpOworCWlmIChpZHggPT0gVFJB Q0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwl7CisJCXBhcnNlX2NhY2hlX3VubG9j aygpOworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlv bjogIgorCQkJCQkicGFyc2UgY2FjaGUgYWxsb2MgZmFpbGVkIikpKTsKKwkJcmV0dXJuOworCX0K KworCWVudHJpZXMgPSBQQVJTRV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKwlidWNrZXRzID0gUEFS U0VfQ0FDSEVfQlVDS0VUUyhjYWNoZSk7CisKKwkvKiBGaWxsIGluIGVudHJ5ICovCisJZW50cmll c1tpZHhdLnF1ZXJ5X2hhc2ggPSBoYXNoOworCWVudHJpZXNbaWR4XS5pc193cml0ZSA9IGlzX3dy aXRlOworCWVudHJpZXNbaWR4XS5udW1fdGFibGVzID0KKwkJKG51bV90YWJsZXMgPiBtYXhfdGFi bGVzKSA/CisJCW1heF90YWJsZXMgOiBudW1fdGFibGVzOworCisJeworCQlpbnQJCWk7CisKKwkJ Zm9yIChpID0gMDsgaSA8IGVudHJpZXNbaWR4XS5udW1fdGFibGVzOyBpKyspCisJCXsKKwkJCXN0 cmxjcHkoZW50cmllc1tpZHhdLnRhYmxlX25hbWVzW2ldLAorCQkJCQl0YWJsZV9uYW1lc1tpXSwg bmFtZWxlbik7CisJCX0KKwl9CisKKwkvKiBJbnNlcnQgaW50byBoYXNoIGJ1Y2tldCAqLworCWJ1 Y2tldCA9IGhhc2ggJSBjYWNoZS0+bnVtX2J1Y2tldHM7CisJZW50cmllc1tpZHhdLm5leHQgPSBi dWNrZXRzW2J1Y2tldF07CisJYnVja2V0c1tidWNrZXRdID0gaWR4OworCisJLyogQWRkIHRvIExS VSBsaXN0ICovCisJcGFyc2VfY2FjaGVfbHJ1X2FkZChjYWNoZSwgaWR4KTsKKworCXBhcnNlX2Nh Y2hlX3VubG9jaygpOworfQorCisvKgorICogTm9ybWFsaXplIGEgU1FMIHF1ZXJ5IGFuZCBjb21w dXRlIGl0cyA2NC1iaXQgaGFzaC4KKyAqIFN0cmlwcyBjb21tZW50cywgY29sbGFwc2VzIHdoaXRl c3BhY2UsIGxvd2VyY2FzZXMsCisgKiBhbmQgcmVwbGFjZXMgbGl0ZXJhbHMgd2l0aCBwbGFjZWhv bGRlcnMuCisgKi8KK3VpbnQ2NAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9ub3JtYWxpemVf YW5kX2hhc2goCisJY29uc3QgY2hhciAqcXVlcnkpCit7CisJY2hhcglub3JtYWxpemVkWzgxOTJd OworCXNpemVfdAlsZW47CisKKwlpZiAocXVlcnkgPT0gTlVMTCB8fCBxdWVyeVswXSA9PSAnXDAn KQorCQlyZXR1cm4gMDsKKworCWxlbiA9IG5vcm1hbGl6ZV9xdWVyeShxdWVyeSwgbm9ybWFsaXpl ZCwKKwkJCQkJCSAgc2l6ZW9mKG5vcm1hbGl6ZWQpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVy biAwOworCisJcmV0dXJuIGZudjFhX2hhc2hfNjQobm9ybWFsaXplZCwgbGVuKTsKK30KLS0gCjIu NTMuMAoK --0000000000008d061b064bbbbf0c--