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 1wET9w-0043BP-1e for pgpool-hackers@arkaria.postgresql.org; Sun, 19 Apr 2026 14:30:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wET9u-00FUYB-2p for pgpool-hackers@arkaria.postgresql.org; Sun, 19 Apr 2026 14:30:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wET9u-00FUXY-0M for pgpool-hackers@lists.postgresql.org; Sun, 19 Apr 2026 14:30:02 +0000 Received: from mail-yw1-x112b.google.com ([2607:f8b0:4864:20::112b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wET9n-00000001mc2-2SZM for pgpool-hackers@lists.postgresql.org; Sun, 19 Apr 2026 14:30:00 +0000 Received: by mail-yw1-x112b.google.com with SMTP id 00721157ae682-7a469383e0bso14671307b3.2 for ; Sun, 19 Apr 2026 07:29:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776608995; cv=none; d=google.com; s=arc-20240605; b=FGJBZNktK+DuUC3Dn7Ryrv3a1mYENLdVqlAqmH6N9kqegu9dA+kQlmyAu1wyMXqUjn r4wHz2nznIlw753sHHxZoJuN7Z513rMxW1IO+oqYBubckdEP1J6kaQSPeEK5F6FNbnQx 34Vg6KjmP+B0ajY7Szvz64mxZjpbcFv7uBgrBPrDxC9VVXXb6ajJ4ZmkXzga8IR0jf9g tN0vYQlSXDWdRmkP6WfP+jEcNUFmDQTTZOYQDXMh62FyhynT/WvQbFzdTRUYvxdRhTpO fV85LTje/zrot1iA+VYXdPOKec/RoNH1wmHGJIGiKe94sdLmkYIo6QoNRded0mEi0+uy nAQw== 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=iuXp61xhb9j+jglvldvn+L0yW0Ec4Zc6KA6uwKpVoU0=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=SaLkMepv3oaKOucbZ1zLfrCGhIh1HSMkJS0Gw/unLfyTHrHNa2Sbs//Hdutdba4mN9 91o43t1gzs3uCVhaiXnDwSYltbObBIQc1RdcqiAEwvwid0L1gUd3mZ9suLaCft9su1mH AT184ScP/4Rtlgn1gZha1bfVFpyJtPPhtLae83kOwjdwGN7hLKjTqJsRUvK/E2agSCHU ZUkmlnl0+NEa4r0jtiCvjHNV2fUdrHp00cGseUM4OP0FNsJmTC5PCMfk2p1JrcRAeV0W 9vJM4UjJNCRGD4tym12YddYiOoHVFlK8AYEL/PkZ/gipkol/KRzdKY3wHn8Tuvf9DjsM 7KxQ==; 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=1776608995; x=1777213795; 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=iuXp61xhb9j+jglvldvn+L0yW0Ec4Zc6KA6uwKpVoU0=; b=VIMsvTLabJZKvueqkSuRxtnJmo3JBZXMCE0iFUB5aMME4uvggnBKvgKpViJvvfE49C rNK9dHyedBeIKVMG1guwpZEz1kHc15W/Kdos5WrJHwsfpW5UbFDfrf7odfsApnwQh5E2 dCTUcuYkOkymnof/GTzJ40FmShOyO6L92ccfzZdfBc0xRxjanVAuwvnPXstIKb6sf6eE dqJMCYDskDyvgt8yckLXrGC7xf252PMywBy69Q9xLSRUvVpQxw9QMaom2iCw1t12tn0z +ZXz551hIcFHHhxGCQTGPjFJ+xKEJXoPXoJxEIkdORMPaaTP7Xsw/TXXtsE3lrjrdLbi tI2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776608995; x=1777213795; 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=iuXp61xhb9j+jglvldvn+L0yW0Ec4Zc6KA6uwKpVoU0=; b=fvRnxeC3fghK/oP2+GqmBMsT+7NpPxtIvBSx8c2bJFbHZcFqWJKEYyAu3/syk1p8cJ A+5raS9OP9co6/T87/U51rnv7xcVaqOZIJbrjbei2Mn42gomUC81HCEvHqvlYAauVa44 uIGDaf4xgcMd0n7uBaSToji8t5ccitylJXZUVJZDF0BxfrssBWS8HvtSwxuSQwjc7Ogy YgoF5Ib0P+HMijhg1o7H3jRdMVPvnldngtAjqf0PCe4En2jXA0o1yV+oi512ergPEtgE fTTVKRjimCCe8+TIa/NT/vHMQIO5ADHfhu0xy8pSOq1wULVQPORrpmd7fyQUyYEu9t+c wzhw== X-Gm-Message-State: AOJu0YyQ5lO69rA/+seTGZuD59qjNynkh9Nn7yIBYCmn+uRg7e3+hFEX /7rrCQPPA3/3gPHFra8gzK6ZwqlYbVi6fL+XV5pc6T9C8jatNaNDA+gLIWyc0L++cEJgR742ubh 9ig6NEZZ+8xMJ7PViUbEB9L9w2eC14RfXsva2+PJUuWBdEo4ZP6WgSr4xPA== X-Gm-Gg: AeBDietjPsYWveExJoKLt5sSsA2i/MyWZv0YYQ/n2o1Ch3euipW2QW0XSovzIjHsgOv s/rxTAWrg4BZHWmY3An+mjP+P8kd9uOYMU1FiseVsCwQbfTQ0pWGWXSy25Ytjo9EYI8jT2Lv6QZ TxHbKd6JKbSIrRdqxU2bJ552LLq1/yuLuzuTd1PRjOi6O7zvWtm8vbnu7rshvd2WtAA4QfmMFul ZazKCCF2Pa2jHmmXxPgUUgu6H4gi9rDITtfboM/o6fai6zdcA+hR3MBAtT++As7oAUm/+UHzxMf FpOCU7h29UDv2oXEnBSraxx21bnFxDZ/ceu1NXnQe8uDf2/1mFQwJpV8Tw/I/KuLK3kL9QbrXe5 G7HcMEsq+v9ZPlsi9dMYvp0XdXHl77N8PEqLH6ByqIrunDIQ= X-Received: by 2002:a05:690c:10c:b0:7b3:f33:35ff with SMTP id 00721157ae682-7bad58a3014mr72043097b3.10.1776608994644; Sun, 19 Apr 2026 07:29:54 -0700 (PDT) MIME-Version: 1.0 References: <20260415.074316.165236259583247685.ishii@postgresql.org> <20260419.162444.1985634870518309110.ishii@postgresql.org> In-Reply-To: <20260419.162444.1985634870518309110.ishii@postgresql.org> From: Nadav Shatz Date: Sun, 19 Apr 2026 17:29:42 +0300 X-Gm-Features: AQROBzASqIdLexDMngKT4fOWB4mc5HDiUQsjcMHvoB5ThosSh3dbUzcPeJ1b5N4 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="00000000000008515b064fd104d5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000008515b064fd104d5 Content-Type: multipart/alternative; boundary="00000000000008515a064fd104d3" --00000000000008515a064fd104d3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Tatsuo, Rebased onto current master, renumbered the regression tests (043/044 to avoid collision with the new 042.ssl_reload), and combined everything into a single commit. Attached: v2-0001-Feature-load-balancing-control-by-table-tracking.patch Looking forward to your review. On Sun, Apr 19, 2026 at 10:25=E2=80=AFAM Tatsuo Ishii wrote: > > Hi Tatsuo, > > > > hank you for the detailed review. Attached patch addresses all items. > > I guess the attached patch is on top of > v1-0001-Feature-load-balancing-control-by-table-tracking.patch. To > apply v2-0001-address-review.patch, we need to apply > v1-0001-Feature-load-balancing-control-by-table-tracking.patch first. > Unfortunately due to recent commit, it does not apply anymore. Can you > please provide v1 + v2 that are rebased against latest master branch? > Also 042 regression test is already used by recent commit. Can you > renumber 042.track_table_mutation and > 043.track_table_mutation_watchdog to 043.track_table_mutation and > 044.track_table_mutation_watchdog accordingly? > > Looking forward to seeing new patch. > > Regards, > -- > Tatsuo Ishii > SRA OSS K.K. > English: http://www.sraoss.co.jp/index_en/ > Japanese:http://www.sraoss.co.jp > > > > memqcache bug fix > > ----------------- > > > > Good catch. The root cause: pool_set_writing_transaction() was > > explicitly skipping dml_adaptive_global, so > > pool_is_writing_transaction() always returned false in this mode. > > The query cache fetch guard at pool_proto_modules.c:270 > > (!pool_is_writing_transaction()) then served stale cached results > > after DML in the same transaction. > > > > Fix: pool_set_writing_transaction() now sets the flag for > > dml_adaptive_global (only 'off' and 'dml_adaptive' skip it). This > > ensures the query cache is properly bypassed after writes within > > the same transaction. > > > > Removed dead query parse cache code (~700 lines) > > ------------------------------------------------- > > > > You're right -- pool_track_table_mutation_get_cached_parse, > > pool_track_table_mutation_cache_parse, and > > pool_track_table_mutation_normalize_and_hash were never called. > > These were leftover from an earlier design where we planned to > > cache SQL parse results in shared memory. The feature ended up > > using pgpool's existing parser directly, and this code was never > > wired up. > > > > Removed: QueryParseCache and QueryParseEntry structs, all related > > static functions, the TRACK_TABLE_MUTATION_QUERY_SEM semaphore, > > and the track_table_mutation_query_buckets / > > track_table_mutation_query_parse_cache_size configuration > > parameters. This also reduces shared memory usage from ~6.4 MB > > to ~80 KB with default settings. > > > > check_object_relationship_list scope > > ------------------------------------- > > > > You're correct -- dml_adaptive_global does not use > > dml_adaptive_object_relationship_list. Changed > > check_object_relationship_list() to check for DLBOW_DML_ADAPTIVE > > only, not DLBOW_IS_DML_ADAPTIVE (which includes global). > > > > Documentation fixes > > ------------------- > > > > - Removed "(Lagless Replica Reads)" from section title and > > "lagless" language from description. > > > > - Described fallback behavior when neither > > replication_delay_source_cmd nor delay_threshold_by_time is > > configured (TTL stays at 100ms default minimum). > > > > - "query cache" references removed (the query parse cache is gone). > > > > - Added 128-table-per-SELECT limit to Limitations section > > (uses POOL_MAX_SELECT_OIDS). > > > > Code style fixes > > ---------------- > > > > - DLBOW_IS_DML_ADAPTIVE() calls no longer split across lines. > > > > - Split the long errmsg line in > > is_select_object_in_temp_write_list. > > > > - Removed redundant is_adaptive variable in > > is_select_object_in_temp_write_list (the check at function > > entry already guarantees it). > > > > Thanks! > > > > On Wed, Apr 15, 2026 at 1:43=E2=80=AFAM Tatsuo Ishii > wrote: > > > >> Hi Nadav, > >> > >> > Hi Tatsuo, > >> > > >> > Looks good to me thanks! > >> > > >> > Please go ahead with your review. waiting to hear back from you. > >> > >> Here are the code review results. > >> > >> diff --git a/doc/src/sgml/loadbalance.sgml > b/doc/src/sgml/loadbalance.sgml > >> index 9e1e7b39b..7384ce81a 100644 > >> --- a/doc/src/sgml/loadbalance.sgml > >> +++ b/doc/src/sgml/loadbalance.sgml > >> : > >> + > >> + Table Mutation Map Configuration (Lagless Replica > Reads) > >> > >> "(Lagless Replica Reads)" sounds like an advertisement to me. It > >> should be removed. > >> > >> + > >> + These parameters configure the track table mutation feature, which > is > >> activated by setting > >> + to > >> dml_adaptive_global. > >> + The feature tracks recently written tables to prevent stale reads > from > >> replica nodes during > >> + replication lag, implementing the "lagless" architecture pattern f= or > >> distributed systems > >> + with read replicas. > >> > >> I think the feature does not guarantee "lagless" anytime, in all cases= . > >> > >> + > >> + This feature requires time-based replication delay monitoring. Thi= s > >> can be provided by either > >> + (external comm= and > >> mode) or by setting > >> + (which uses > >> pg_stat_replication.replay_lag > >> + from PostgreSQL 10+). At least one of these must be configured for > the > >> TTL calculation to work. > >> > >> If one of these is not set, what happens? Error? Need to describe it. > >> > >> + > >> + > >> + > >> + > >> + Enabling dml_adaptive_global increases shared > >> memory consumption. With default settings, > >> + the feature requires approximately 6.4 MB of shared memory (0.1 M= B > >> for table tracking + 6.3 MB for query cache). > >> > >> "query cache" should be "query parse cache". > >> > >> + Memory usage scales with configuration parameters: > >> + > >> + > >> + > >> + > >> + Table tracking: track_table_mutation_table_size * 40 > >> bytes (default: 2048 * 40 =3D ~80 KB) > >> + > >> + > >> + > >> + > >> + Query cache: > track_table_mutation_query_parse_cache_size * > >> 640 bytes (default: 10000 * 640 =3D ~6.3 MB) > >> > >> "query cache" should be "query parse cache". > >> > >> + Limitations > >> > >> I think number of tables tacked in a SELECT is limited to 8. It should > >> be mentioned. > >> > >> diff --git a/src/context/pool_query_context.c > >> b/src/context/pool_query_context.c > >> index a056ac596..0190d3673 100644 > >> --- a/src/context/pool_query_context.c > >> +++ b/src/context/pool_query_context.c > >> @@ -1828,15 +1829,23 @@ is_in_list(char *name, List *list) > >> static bool > >> is_select_object_in_temp_write_list(Node *node, void *context) > >> { > >> - if (node =3D=3D NULL || pool_config->disable_load_balance_on_w= rite > !=3D > >> DLBOW_DML_ADAPTIVE) > >> + if (node =3D=3D NULL || > >> + !DLBOW_IS_DML_ADAPTIVE( > >> + > >> pool_config->disable_load_balance_on_write)) > >> > >> You don't need to split the line. > >> > >> + is_adaptive =3D DLBOW_IS_DML_ADAPTIVE( > >> + > >> pool_config->disable_load_balance_on_write); > >> > >> You don't need to split the line. > >> > >> - if (pool_config->disable_load_balance_on_write =3D=3D > >> DLBOW_DML_ADAPTIVE && session_context->is_in_transaction) > >> + if (is_adaptive && > >> + session_context->is_in_transaction) > >> { > >> ereport(DEBUG1, > >> > >> (errmsg("is_select_object_in_temp_write_list: \"%s\", found relation > >> \"%s\"", (char *) context, rgv->relname))); > >> This line is too long. Please split. > >> > >> @@ -1880,7 +1889,13 @@ static char > >> *get_associated_object_from_dml_adaptive_relations > >> void > >> check_object_relationship_list(char *name, bool is_func_name) > >> { > >> - if (pool_config->disable_load_balance_on_write =3D=3D > >> DLBOW_DML_ADAPTIVE && > >> pool_config->parsed_dml_adaptive_object_relationship_list) > >> + bool is_adaptive; > >> + > >> + is_adaptive =3D DLBOW_IS_DML_ADAPTIVE( > >> + > >> pool_config->disable_load_balance_on_write); > >> > >> I wrote in the commit message: > >> > >> modifications are only detected in the same transaction). Note, > >> however, you cannot use dml_adaptive_object_relationship_list to track > >> dependency among table and other objects. > >> > >> In my understanding the feature does not use > >> dml_adaptive_object_relationship_list. If this is correct, why > >> check_object_relationship_list() is called here in case > >> dml_adaptive_global? If the feature uses > >> dml_adaptive_object_relationship_list, test cases should be included. > >> > >> diff --git a/src/utils/pool_track_table_mutation.c > >> b/src/utils/pool_track_table_mutation.c > >> new file mode 100644 > >> index 000000000..9be46b28f > >> --- /dev/null > >> +++ b/src/utils/pool_track_table_mutation.c > >> > >> It seems following functions are not used anywhere. I wonder if this > >> feature actually use "query parse cache". > >> > >> pool_track_table_mutation_get_cached_parse > >> pool_track_table_mutation_cache_parse > >> pool_track_table_mutation_normalize_and_hash > >> > >> Besides the code review, I mutated one of regression tests to check > >> whether the feature co exists with in the existing memory query cache > >> feature. After attached patch applied, I ran 006.memqcache and got the > >> following result. > >> > >> cd src/test/regression > >> ./regress.sh 006 > >> creating pgpool-II temporary installation ... > >> moving pgpool_setup to temporary installation path ... > >> moving watchdog_setup to temporary installation path ... > >> using pgpool-II at > >> > /home/t-ishii/work/Pgpool-II/current/pgpool2/src/test/regression/temp/ins= talled > >> ************************* > >> REGRESSION MODE : install > >> Pgpool-II version : pgpool-II version 4.8devel (mitsukakeboshi) > >> Pgpool-II install path : > >> > /home/t-ishii/work/Pgpool-II/current/pgpool2/src/test/regression/temp/ins= talled > >> PostgreSQL bin : /usr/local/pgsql/bin > >> PostgreSQL Major version : 18 > >> pgbench : /usr/local/pgsql/bin/pgbench > >> PostgreSQL jdbc : > >> /usr/local/pgsql/share/postgresql-9.2-1003.jdbc4.jar > >> ************************* > >> testing 006.memqcache...failed. > >> out of 1 ok:0 failed:1 timeout:0 > >> > >> log/006.memqcache shows: > >> > >> ../expected.txt result.txt differ: char 1, line 1 > >> > >> So I checked the test script and found the error was generated by a > >> Java program test. > >> > >> java jdbctest > result.txt 2>&1 > >> cmp ../expected.txt result.txt > >> if [ $? !=3D 0 ];then > >> ./shutdownall > >> exit 1 > >> fi > >> > >> In jdbctest.java: > >> > >> /* > >> * Cache test in an explicit transaction > >> */ > >> conn.setAutoCommit(false); > >> // execute DML. This should prevent SELECTs from using > >> query cache in the transaction. > >> sql =3D "UPDATE t1 SET i =3D 2;"; > >> pst =3D conn.createStatement(); > >> pst.executeUpdate(sql); > >> pst.close(); > >> // should not use the cache and should return "2", > rather > >> than "1" > >> prest =3D conn.prepareStatement("SELECT * FROM t1"); > >> rs =3D prest.executeQuery(); > >> > >> The expected file (expected.txt) has "2" but the result file > >> (testdir/result.txt) was "1". This is the reason why the test > >> failed. I wonder if there's something wrong with the feature when the > >> query cache is enabled. Can you look into this? > >> > >> Regards, > >> -- > >> Tatsuo Ishii > >> SRA OSS K.K. > >> English: http://www.sraoss.co.jp/index_en/ > >> Japanese:http://www.sraoss.co.jp > >> > > > > > > -- > > Nadav Shatz > > Tailor Brands | CTO > --=20 Nadav Shatz Tailor Brands | CTO --00000000000008515a064fd104d3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Tatsuo,

Rebased onto current master,= renumbered the regression tests
(043/044 to avoid collision with the ne= w 042.ssl_reload), and
combined everything into a single commit.

= Attached: v2-0001-Feature-load-balancing-control-by-table-tracking.patch

Looking forward to your review.

=

On Sun, Apr 19, 2026 at 10:25=E2=80=AFAM Tatsuo Ishii= <ishii@postgresql.org> w= rote:
> Hi Ta= tsuo,
>
> hank you for the detailed review. Attached patch addresses all items.<= br>
I guess the attached patch is on top of
v1-0001-Feature-load-balancing-control-by-table-tracking.patch.=C2=A0 To apply v2-0001-address-review.patch, we need to apply
v1-0001-Feature-load-balancing-control-by-table-tracking.patch first.
Unfortunately due to recent commit, it does not apply anymore. Can you
please provide v1 + v2 that are rebased against latest master branch?
Also 042 regression test is already used by recent commit. Can you
renumber 042.track_table_mutation and
043.track_table_mutation_watchdog to 043.track_table_mutation and
044.track_table_mutation_watchdog accordingly?

Looking forward to seeing new patch.

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


> memqcache bug fix
> -----------------
>
> Good catch. The root cause: pool_set_writing_transaction() was
> explicitly skipping dml_adaptive_global, so
> pool_is_writing_transaction() always returned false in this mode.
> The query cache fetch guard at pool_proto_modules.c:270
> (!pool_is_writing_transaction()) then served stale cached results
> after DML in the same transaction.
>
> Fix: pool_set_writing_transaction() now sets the flag for
> dml_adaptive_global (only 'off' and 'dml_adaptive' ski= p it). This
> ensures the query cache is properly bypassed after writes within
> the same transaction.
>
> Removed dead query parse cache code (~700 lines)
> -------------------------------------------------
>
> You're right -- pool_track_table_mutation_get_cached_parse,
> pool_track_table_mutation_cache_parse, and
> pool_track_table_mutation_normalize_and_hash were never called.
> These were leftover from an earlier design where we planned to
> cache SQL parse results in shared memory. The feature ended up
> using pgpool's existing parser directly, and this code was never > wired up.
>
> Removed: QueryParseCache and QueryParseEntry structs, all related
> static functions, the TRACK_TABLE_MUTATION_QUERY_SEM semaphore,
> and the track_table_mutation_query_buckets /
> track_table_mutation_query_parse_cache_size configuration
> parameters. This also reduces shared memory usage from ~6.4 MB
> to ~80 KB with default settings.
>
> check_object_relationship_list scope
> -------------------------------------
>
> You're correct -- dml_adaptive_global does not use
> dml_adaptive_object_relationship_list. Changed
> check_object_relationship_list() to check for DLBOW_DML_ADAPTIVE
> only, not DLBOW_IS_DML_ADAPTIVE (which includes global).
>
> Documentation fixes
> -------------------
>
> - Removed "(Lagless Replica Reads)" from section title and >=C2=A0 =C2=A0"lagless" language from description.
>
> - Described fallback behavior when neither
>=C2=A0 =C2=A0replication_delay_source_cmd nor delay_threshold_by_time i= s
>=C2=A0 =C2=A0configured (TTL stays at 100ms default minimum).
>
> - "query cache" references removed (the query parse cache is= gone).
>
> - Added 128-table-per-SELECT limit to Limitations section
>=C2=A0 =C2=A0(uses POOL_MAX_SELECT_OIDS).
>
> Code style fixes
> ----------------
>
> - DLBOW_IS_DML_ADAPTIVE() calls no longer split across lines.
>
> - Split the long errmsg line in
>=C2=A0 =C2=A0is_select_object_in_temp_write_list.
>
> - Removed redundant is_adaptive variable in
>=C2=A0 =C2=A0is_select_object_in_temp_write_list (the check at function=
>=C2=A0 =C2=A0entry already guarantees it).
>
> Thanks!
>
> On Wed, Apr 15, 2026 at 1:43=E2=80=AFAM Tatsuo Ishii <ishii@postgresql.org> w= rote:
>
>> Hi Nadav,
>>
>> > Hi Tatsuo,
>> >
>> > Looks good to me thanks!
>> >
>> > Please go ahead with your review. waiting to hear back from y= ou.
>>
>> Here are the code review results.
>>
>> diff --git a/doc/src/sgml/loadbalance.sgml b/doc/src/sgml/loadbala= nce.sgml
>> index 9e1e7b39b..7384ce81a 100644
>> --- a/doc/src/sgml/loadbalance.sgml
>> +++ b/doc/src/sgml/loadbalance.sgml
>> :
>> + <sect2 id=3D"runtime-config-table-mutation-map">=
>> +=C2=A0 <title>Table Mutation Map Configuration (Lagless Rep= lica Reads)</title>
>>
>> "(Lagless Replica Reads)" sounds like an advertisement t= o me. It
>> should be removed.
>>
>> +=C2=A0 <para>
>> +=C2=A0 =C2=A0These parameters configure the track table mutation = feature, which is
>> activated by setting
>> +=C2=A0 =C2=A0<xref linkend=3D"guc-disable-load-balance-on= -write"> to
>> <literal>dml_adaptive_global</literal>.
>> +=C2=A0 =C2=A0The feature tracks recently written tables to preven= t stale reads from
>> replica nodes during
>> +=C2=A0 =C2=A0replication lag, implementing the "lagless"= ; architecture pattern for
>> distributed systems
>> +=C2=A0 =C2=A0with read replicas.
>>
>> I think the feature does not guarantee "lagless" anytime= , in all cases.
>>
>> +=C2=A0 <para>
>> +=C2=A0 =C2=A0This feature requires time-based replication delay m= onitoring. This
>> can be provided by either
>> +=C2=A0 =C2=A0<xref linkend=3D"guc-replication-delay-sourc= e-cmd"> (external command
>> mode) or by setting
>> +=C2=A0 =C2=A0<xref linkend=3D"guc-delay-threshold-by-time= "> (which uses
>> <literal>pg_stat_replication.replay_lag</literal>
>> +=C2=A0 =C2=A0from PostgreSQL 10+). At least one of these must be = configured for the
>> TTL calculation to work.
>>
>> If one of these is not set, what happens? Error? Need to describe = it.
>>
>> +=C2=A0 </para>
>> +
>> +=C2=A0 <warning>
>> +=C2=A0 =C2=A0<para>
>> +=C2=A0 =C2=A0 Enabling <literal>dml_adaptive_global</lit= eral> increases shared
>> memory consumption. With default settings,
>> +=C2=A0 =C2=A0 the feature requires approximately 6.4 MB of shared= memory (0.1 MB
>> for table tracking + 6.3 MB for query cache).
>>
>> "query cache" should be "query parse cache". >>
>> +=C2=A0 =C2=A0 Memory usage scales with configuration parameters:<= br> >> +=C2=A0 =C2=A0</para>
>> +=C2=A0 =C2=A0<itemizedlist>
>> +=C2=A0 =C2=A0 <listitem>
>> +=C2=A0 =C2=A0 =C2=A0<para>
>> +=C2=A0 =C2=A0 =C2=A0 Table tracking: <literal>track_table_m= utation_table_size * 40
>> bytes</literal> (default: 2048 * 40 =3D ~80 KB)
>> +=C2=A0 =C2=A0 =C2=A0</para>
>> +=C2=A0 =C2=A0 </listitem>
>> +=C2=A0 =C2=A0 <listitem>
>> +=C2=A0 =C2=A0 =C2=A0<para>
>> +=C2=A0 =C2=A0 =C2=A0 Query cache: <literal>track_table_muta= tion_query_parse_cache_size *
>> 640 bytes</literal> (default: 10000 * 640 =3D ~6.3 MB)
>>
>> "query cache" should be "query parse cache". >>
>> +=C2=A0 =C2=A0<title>Limitations</title>
>>
>> I think number of tables tacked in a SELECT is limited to 8. It sh= ould
>> be mentioned.
>>
>> diff --git a/src/context/pool_query_context.c
>> b/src/context/pool_query_context.c
>> index a056ac596..0190d3673 100644
>> --- a/src/context/pool_query_context.c
>> +++ b/src/context/pool_query_context.c
>> @@ -1828,15 +1829,23 @@ is_in_list(char *name, List *list)
>>=C2=A0 static bool
>>=C2=A0 is_select_object_in_temp_write_list(Node *node, void *contex= t)
>>=C2=A0 {
>> -=C2=A0 =C2=A0 =C2=A0 =C2=A0if (node =3D=3D NULL || pool_config-&g= t;disable_load_balance_on_write !=3D
>> DLBOW_DML_ADAPTIVE)
>> +=C2=A0 =C2=A0 =C2=A0 =C2=A0if (node =3D=3D NULL ||
>> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0!DLBOW_IS_= DML_ADAPTIVE(
>> +
>> pool_config->disable_load_balance_on_write))
>>
>> You don't need to split the line.
>>
>> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0is_adaptiv= e =3D DLBOW_IS_DML_ADAPTIVE(
>> +
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 pool_config->di= sable_load_balance_on_write);
>>
>> You don't need to split the line.
>>
>> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (pool_c= onfig->disable_load_balance_on_write =3D=3D
>> DLBOW_DML_ADAPTIVE && session_context->is_in_transactio= n)
>> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (is_ada= ptive &&
>> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0session_context->is_in_transaction)
>>=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=A0ereport(DEBUG1,
>>
>> (errmsg("is_select_object_in_temp_write_list: \"%s\"= ;, found relation
>> \"%s\"", (char *) context, rgv->relname)));
>> This line is too long. Please split.
>>
>> @@ -1880,7 +1889,13 @@ static char
>> *get_associated_object_from_dml_adaptive_relations
>>=C2=A0 void
>>=C2=A0 check_object_relationship_list(char *name, bool is_func_name= )
>>=C2=A0 {
>> -=C2=A0 =C2=A0 =C2=A0 =C2=A0if (pool_config->disable_load_balan= ce_on_write =3D=3D
>> DLBOW_DML_ADAPTIVE &&
>> pool_config->parsed_dml_adaptive_object_relationship_list)
>> +=C2=A0 =C2=A0 =C2=A0 =C2=A0bool=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 is_adaptive;
>> +
>> +=C2=A0 =C2=A0 =C2=A0 =C2=A0is_adaptive =3D DLBOW_IS_DML_ADAPTIVE(=
>> +
>>=C2=A0 =C2=A0 =C2=A0 pool_config->disable_load_balance_on_write)= ;
>>
>> I wrote in the commit message:
>>
>> modifications are only detected in the same transaction). Note, >> however, you cannot use dml_adaptive_object_relationship_list to t= rack
>> dependency among table and other objects.
>>
>> In my understanding the feature does not use
>> dml_adaptive_object_relationship_list. If this is correct, why
>> check_object_relationship_list() is called here in case
>> dml_adaptive_global?=C2=A0 If the feature uses
>> dml_adaptive_object_relationship_list, test cases should be includ= ed.
>>
>> diff --git a/src/utils/pool_track_table_mutation.c
>> b/src/utils/pool_track_table_mutation.c
>> new file mode 100644
>> index 000000000..9be46b28f
>> --- /dev/null
>> +++ b/src/utils/pool_track_table_mutation.c
>>
>> It seems following functions are not used anywhere. I wonder if th= is
>> feature actually use "query parse cache".
>>
>> pool_track_table_mutation_get_cached_parse
>> pool_track_table_mutation_cache_parse
>> pool_track_table_mutation_normalize_and_hash
>>
>> Besides the code review, I mutated one of regression tests to chec= k
>> whether the feature co exists with in the existing memory query ca= che
>> feature. After attached patch applied, I ran 006.memqcache and got= the
>> following result.
>>
>> cd src/test/regression
>> ./regress.sh 006
>> creating pgpool-II temporary installation ...
>> moving pgpool_setup to temporary installation path ...
>> moving watchdog_setup to temporary installation path ...
>> using pgpool-II at
>> /home/t-ishii/work/Pgpool-II/current/pgpool2/src/test/regression/t= emp/installed
>> *************************
>> REGRESSION MODE=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : install
>> Pgpool-II version=C2=A0 =C2=A0 =C2=A0 =C2=A0 : pgpool-II version 4= .8devel (mitsukakeboshi)
>> Pgpool-II install path=C2=A0 =C2=A0:
>> /home/t-ishii/work/Pgpool-II/current/pgpool2/src/test/regression/t= emp/installed
>> PostgreSQL bin=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0: /usr/loca= l/pgsql/bin
>> PostgreSQL Major version : 18
>> pgbench=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 : /usr/local/pgsql/bin/pgbench
>> PostgreSQL jdbc=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 :
>> /usr/local/pgsql/share/postgresql-9.2-1003.jdbc4.jar
>> *************************
>> testing 006.memqcache...failed.
>> out of 1 ok:0 failed:1 timeout:0
>>
>> log/006.memqcache shows:
>>
>> ../expected.txt result.txt differ: char 1, line 1
>>
>> So I checked the test script and found the error was generated by = a
>> Java program test.
>>
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0java jdbctest > result.txt 2&g= t;&1
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cmp ../expected.txt result.txt >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if [ $? !=3D 0 ];then
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0./shu= tdownall
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0exit = 1
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0fi
>>
>> In jdbctest.java:
>>
>>=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 * Ca= che test in an explicit transaction
>>=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=A0conn.= setAutoCommit(false);
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0// ex= ecute DML. This should prevent SELECTs from using
>> query cache in the transaction.
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0sql = =3D "UPDATE t1 SET i =3D 2;";
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pst = =3D conn.createStatement();
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pst.e= xecuteUpdate(sql);
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pst.c= lose();
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0// sh= ould not use the cache and should return "2", rather
>> than "1"
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0prest= =3D conn.prepareStatement("SELECT * FROM t1");
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0rs = =3D prest.executeQuery();
>>
>> The expected file (expected.txt) has "2" but the result = file
>> (testdir/result.txt) was "1".=C2=A0 This is the reason w= hy the test
>> failed. I wonder if there's something wrong with the feature w= hen the
>> query cache is enabled. Can you look into this?
>>
>> Regards,
>> --
>> Tatsuo Ishii
>> SRA OSS K.K.
>> English: http://www.sraoss.co.jp/index_en/
>> Japanese:http://www.sraoss.co.jp
>>
>
>
> --
> Nadav Shatz
> Tailor Brands | CTO


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--00000000000008515a064fd104d3-- --00000000000008515b064fd104d5 Content-Type: application/octet-stream; name="v2-0001-Feature-load-balancing-control-by-table-tracking.patch" Content-Disposition: attachment; filename="v2-0001-Feature-load-balancing-control-by-table-tracking.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo5v46wu0 RnJvbSAxYWQzOTY1OWNmNGNlYzBiYWVhYmZjM2QwMmVhOWI4ODE2M2U5MDQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogU3VuLCAxOSBBcHIgMjAyNiAxNzoxMDoyNCArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjJd IEZlYXR1cmU6IGxvYWQgYmFsYW5jaW5nIGNvbnRyb2wgYnkgdGFibGUgdHJhY2tpbmcuCgpQcmV2 ZW50IHJvdXRpbmcgb2YgcmVhZCBvbmx5IHF1ZXJpZXMgdG8gc3RhbmRieSBpZiByZXBsaWNhdGlv biBkZWxheQpvZiB0YWJsZXMgdXNlZCBpbiB0aGUgcXVlcnkgZXhjZWVkcyBjZXJ0YWluIGFtb3Vu dCBvZiB2YWx1ZQpjb2xsZWN0ZWQgYnkgc3RyZWFtaW5nIHJlcGxpY2F0aW9uIHByb2Nlc3MuIFRv IGVuYWJsZSB0aGlzIGZlYXR1cmUsCnNldCBkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSB0 byBkbWxfYWRhcHRpdmVfZ2xvYmFsLgoKSW4gdGhpcyBtb2RlLCB3aGVuIHRhYmxlcyBhcmUgbW9k aWZpZWQgYnkKSU5TRVJUL1VQREFURS9ERUxFVEUvVFJVTkNBVEUvTUVSR0UvZGF0YSBtb2RpZmlj YXRpb24gV0lUSCwgZm9yCmNlcnRhaW4gcGVvcmlvZCBTRUxFQ1RzIHVzaW5nIHRoZSB0YWJsZXMg YXJlIG5vdCBsb2FkIGJhbGFuY2VkOgppLmUuIHJvdXRlZCB0byB0aGUgcHJpbWFyeSBQb3N0Z3Jl U1FMIHNlcnZlciB0byBhdm9pZCB0aGUgZGF0YQpzdGFsZW5lc3MgYnkgcmVwbGljYXRpb24gZGVs YXkuCgpVbmxpa2UgZG1sX2FkYXB0aXZlIG1vZGUsIGFueSB0YWJsZSBtb2RpZmljYXRpb25zIGRl Y3JpYmVkIGFib3ZlIGFyZQpkZXRlY3RlZCBldmVuIHRoZXkgaGFwcG4gaW4gb3RoZXIgc2Vzc2lv bnMgKGluIGRtbF9hZGFwdGl2ZSwgdGFibGUKbW9kaWZpY2F0aW9ucyBhcmUgb25seSBkZXRlY3Rl ZCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbikuIE5vdGUsCmhvd2V2ZXIsIHlvdSBjYW5ub3QgdXNl IGRtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRpb25zaGlwX2xpc3QgdG8gdHJhY2sKZGVwZW5kZW5j eSBhbW9uZyB0YWJsZSBhbmQgb3RoZXIgb2JqZWN0cy4KCkJlc2lkZXMgZG1sX2FkYXB0aXZlX2ds b2JhbCwgdGhlcmUgYXJlIHNvbWUgdHVuaW5nIGtub2JzIGZvciB0aGUKZmVhdHVyZToKCi0gdHJh Y2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcgogIFBhcmFtZXRlciB0byBjYWxjdWxhdGUgVFRM IG9mIGVhY2ggdHJhY2tpbmcgZGF0YS4KCi0gdHJhY2tfdGFibGVfbXV0YXRpb25fbWF4X3N0YWxl bmVzcwogIE1heGltdW0gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHRoYXQgYSBzaW5nbGUgdGFi bGUgZW50cnkgY2FuCiAgY29udGludW91c2x5IGZvcmNlIHF1ZXJpZXMgdG8gcHJpbWFyeS4KCi0g dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbgogIER1cmF0aW9uIGluIG1p bGxpc2Vjb25kcyB0byByb3V0ZSBhbGwgcXVlcmllcyB0byBwcmltYXJ5IGFmdGVyIGEKICBjaGls ZCBwcm9jZXNzIHN0YXJ0cy4KCi0gdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cwog IE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBoYXNo IHRhYmxlLgoKLSB0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplCiAgTWF4aW11bSBudW1i ZXIgb2YgdGFibGVzIHRoYXQgY2FuIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3VzbHkgaW4gdGhlCiAg dHJhY2sgdGFibGUgbXV0YXRpb24uCgpBdXRob3I6IE5hZGF2IFNoYXR6IDxuYWRhdkB0YWlsb3Ji cmFuZHMuY29tPgpSZXZpZXdlZC1ieTogVGF0c3VvIElzaGlpIDxpc2hpaUBwb3N0Z3Jlc3FsLm9y Zz4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0 LzIwMjYwNDA3LjE4MTAwOS4xNzYyMjA0MDMzMDc0MTY0ODQxLmlzaGlpJTQwcG9zdGdyZXNxbC5v cmcjNThjMTM5YzFhN2Y4ZDU1NjI4NjU5MjFkMDczMzY2N2IKLS0tCiBkb2Mvc3JjL3NnbWwvbG9h ZGJhbGFuY2Uuc2dtbCAgICAgICAgICAgICAgICAgfCAyODggKysrKysrCiBzcmMvTWFrZWZpbGUu YW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2NvbmZpZy9wb29s X2NvbmZpZ192YXJpYWJsZXMuYyAgICAgICAgICAgIHwgIDY1ICsrCiBzcmMvY29udGV4dC9wb29s X3F1ZXJ5X2NvbnRleHQuYyAgICAgICAgICAgICAgfCAyNDIgKysrKy0KIHNyYy9jb250ZXh0L3Bv b2xfc2Vzc2lvbl9jb250ZXh0LmMgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1ZGUvcG9v bC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9wb29s X2NvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgfCAgMjQgKy0KIHNyYy9pbmNsdWRlL3V0aWxz L3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCB8IDE2NyArKysrCiBzcmMvbWFpbi9wZ3Bvb2xf bWFpbi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjkgKy0KIHNyYy9wcm90b2NvbC9Db21t YW5kQ29tcGxldGUuYyAgICAgICAgICAgICAgICB8ICAyOCArCiBzcmMvcHJvdG9jb2wvY2hpbGQu YyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogc3JjL3Byb3RvY29sL3Bvb2xfcHJv dG9fbW9kdWxlcy5jICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvc2FtcGxlL3BncG9vbC5jb25m LnNhbXBsZS1zdHJlYW0gICAgICAgICAgfCAgNDUgKwogc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlv bi9wb29sX3dvcmtlcl9jaGlsZC5jIHwgIDI0ICsKIHNyYy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5z aCAgICAgICAgICAgICAgICAgICB8ICAgMiArCiAuLi4vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211 dGF0aW9uL3Rlc3Quc2ggICAgfCAzNTQgKysrKysrKwogLi4uLzA0NC50cmFja190YWJsZV9tdXRh dGlvbl93YXRjaGRvZy90ZXN0LnNoIHwgMTg0ICsrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgNCArCiBzcmMvdXRpbHMvcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbi5jICAgICAgICAgfCA5MDIgKysrKysrKysrKysrKysrKysrCiAxOSBmaWxlcyBj aGFuZ2VkLCAyMzY4IGluc2VydGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaAogY3Jl YXRlIG1vZGUgMTAwNzU1IHNyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxl X211dGF0aW9uL3Rlc3Quc2gKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvdGVzdC9yZWdyZXNzaW9u L3Rlc3RzLzA0NC50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy90ZXN0LnNoCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYwoKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvYWRi YWxhbmNlLnNnbWwKaW5kZXggOWUxZTdiMzliLi5kNGZiY2YxYTUgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5z Z21sCkBAIC0xMTEwLDYgKzExMTAsMTggQEAgYXBwX25hbWVfcmVkaXJlY3RfcHJlZmVyZW5jZV9s aXN0ICZndDsgZGF0YWJhc2VfcmVkaXJlY3RfcHJlZmVyZW5jZV9saXN0ICZndDsgdXMKIAkJRGVw ZW5kZW50IGZ1bmN0aW9ucywgdHJpZ2dlcnMsIGFuZCB2aWV3cyBvbiB0aGUgdGFibGVzIGNhbiBi ZSBjb25maWd1cmVkCiAJCXVzaW5nIDx4cmVmIGxpbmtlbmQ9Imd1Yy1kbWwtYWRhcHRpdmUtb2Jq ZWN0LXJlbGF0aW9uc2hpcC1saXN0Ij4KICAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorCQlJ ZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gPHZhcm5hbWU+ZG1sX2FkYXB0aXZlX2dsb2JhbDwv dmFybmFtZT4sCisJCTxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gYmVoYXZlcyBsaWtlIDx2YXJu YW1lPmRtbF9hZGFwdGl2ZTwvdmFybmFtZT4KKwkJKHBlci10cmFuc2FjdGlvbiB3cml0ZSB0cmFj a2luZykgYW5kIGFkZGl0aW9uYWxseSB1c2VzIHNoYXJlZCBtZW1vcnkgdG8gdHJhY2sKKwkJcmVj ZW50bHkgd3JpdHRlbiB0YWJsZXMgYWNyb3NzIGFsbCBzZXNzaW9ucyBjbHVzdGVyLXdpZGUuIFdo ZW4gYSB0YWJsZSBpcworCQl3cml0dGVuIGluIGFueSBzZXNzaW9uLCBzdWJzZXF1ZW50IHJlYWRz IG9mIHRoYXQgdGFibGUgZnJvbSBhbnkgc2Vzc2lvbiBhcmUKKwkJcm91dGVkIHRvIHByaW1hcnkg dW50aWwgYSBUVEwgKGJhc2VkIG9uIG1lYXN1cmVkIHJlcGxpY2F0aW9uIGRlbGF5KSBleHBpcmVz LgorCQlUaGlzIHByZXZlbnRzIHN0YWxlIHJlYWRzIGFmdGVyIHdyaXRlcyBldmVuIGFjcm9zcyBk aWZmZXJlbnQgY29ubmVjdGlvbnMuCisJCVNlZSA8eHJlZiBsaW5rZW5kPSJydW50aW1lLWNvbmZp Zy10YWJsZS1tdXRhdGlvbi1tYXAiPiBmb3IgdGhlIHN1Yi1wYXJhbWV0ZXJzCisJCXRoYXQgY29u dHJvbCB0aGUgc2hhcmVkLW1lbW9yeSB0cmFja2luZyBiZWhhdmlvci4KKyAgICAgPC9wYXJhPgog ICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIApAQCAtMTE5NSw0ICsxMjA3LDI4 MCBAQCBkbWxfYWRhcHRpdmVfb2JqZWN0X3JlbGF0aW9uc2hpcF9saXN0ID0gJ3RhYmxlXzE6dGFi bGVfMicKIAogICA8L3ZhcmlhYmxlbGlzdD4KICA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJydW50 aW1lLWNvbmZpZy10YWJsZS1tdXRhdGlvbi1tYXAiPgorICA8dGl0bGU+VGFibGUgTXV0YXRpb24g VHJhY2tpbmcgQ29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGVzZSBwYXJh bWV0ZXJzIGNvbmZpZ3VyZSB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSwgd2hpY2gg aXMgYWN0aXZhdGVkIGJ5IHNldHRpbmcKKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1kaXNhYmxlLWxv YWQtYmFsYW5jZS1vbi13cml0ZSI+IHRvIDxsaXRlcmFsPmRtbF9hZGFwdGl2ZV9nbG9iYWw8L2xp dGVyYWw+LgorICAgVGhlIGZlYXR1cmUgdHJhY2tzIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzIHRv IHByZXZlbnQgc3RhbGUgcmVhZHMgZnJvbSByZXBsaWNhIG5vZGVzIGR1cmluZworICAgcmVwbGlj YXRpb24gbGFnLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIGEgdGFibGUgaXMgbW9k aWZpZWQgKElOU0VSVC9VUERBVEUvREVMRVRFKSwgaXQgaXMgbWFya2VkIGFzICJzdGFsZSIgZm9y IGEgVFRMIHBlcmlvZAorICAgKDxsaXRlcmFsPnJlcGxpY2F0aW9uX2RlbGF5ICogdHJhY2tfdGFi bGVfbXV0YXRpb25fdHRsX2ZhY3RvcjwvbGl0ZXJhbD4pLiBBbnkgU0VMRUNUIHF1ZXJpZXMgb24g c3RhbGUgdGFibGVzIGFyZSByb3V0ZWQKKyAgIHRvIHRoZSBwcmltYXJ5IG5vZGUgaW5zdGVhZCBv ZiByZXBsaWNhcywgZW5zdXJpbmcgcmVhZC1hZnRlci13cml0ZSBjb25zaXN0ZW5jeS4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgVGhpcyBmZWF0dXJlIHJlcXVpcmVzIHRpbWUtYmFzZWQgcmVw bGljYXRpb24gZGVsYXkgbW9uaXRvcmluZy4gVGhpcyBjYW4gYmUgcHJvdmlkZWQgYnkgZWl0aGVy CisgICA8eHJlZiBsaW5rZW5kPSJndWMtcmVwbGljYXRpb24tZGVsYXktc291cmNlLWNtZCI+IChl eHRlcm5hbCBjb21tYW5kIG1vZGUpIG9yIGJ5IHNldHRpbmcKKyAgIDx4cmVmIGxpbmtlbmQ9Imd1 Yy1kZWxheS10aHJlc2hvbGQtYnktdGltZSI+ICh3aGljaCB1c2VzIDxsaXRlcmFsPnBnX3N0YXRf cmVwbGljYXRpb24ucmVwbGF5X2xhZzwvbGl0ZXJhbD4KKyAgIGZyb20gUG9zdGdyZVNRTCAxMCsp LiBJZiBuZWl0aGVyIGlzIGNvbmZpZ3VyZWQsIHRoZSBUVEwgcmVtYWlucyBhdCBpdHMgZGVmYXVs dCBtaW5pbXVtIHZhbHVlCisgICAoMTAwIG1pbGxpc2Vjb25kcykgYW5kIGlzIG5ldmVyIHVwZGF0 ZWQgYmFzZWQgb24gYWN0dWFsIHJlcGxpY2F0aW9uIGRlbGF5LCB3aGljaCBtYXkgcmVzdWx0Cisg ICBpbiBzdWJvcHRpbWFsIHJvdXRpbmcgZGVjaXNpb25zLgorICA8L3BhcmE+CisKKyAgPHdhcm5p bmc+CisgICA8cGFyYT4KKyAgICBFbmFibGluZyA8bGl0ZXJhbD5kbWxfYWRhcHRpdmVfZ2xvYmFs PC9saXRlcmFsPiBpbmNyZWFzZXMgc2hhcmVkIG1lbW9yeSBjb25zdW1wdGlvbi4gV2l0aCBkZWZh dWx0IHNldHRpbmdzLAorICAgIHRoZSBmZWF0dXJlIHJlcXVpcmVzIGFwcHJveGltYXRlbHkgODAg S0Igb2Ygc2hhcmVkIG1lbW9yeSBmb3IgdGFibGUgdHJhY2tpbmc6CisgICAgPGxpdGVyYWw+dHJh Y2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSAqIDQwIGJ5dGVzPC9saXRlcmFsPiAoZGVmYXVs dDogMjA0OCAqIDQwID0gfjgwIEtCKS4KKyAgIDwvcGFyYT4KKyAgPC93YXJuaW5nPgorCisgIDx2 YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRh dGlvbi10dGwtZmFjdG9yIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0 b3IiPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3I8 L3Zhcm5hbWU+ICg8dHlwZT5mbG9hdGluZyBwb2ludDwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+ CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9y PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRl eHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBN dWx0aXBsaWVyIGZvciBjYWxjdWxhdGluZyB0aGUgVFRMOiA8bGl0ZXJhbD5UVEwgPSByZXBsaWNh dGlvbl9kZWxheSAqIHRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3I8L2xpdGVyYWw+Lgor ICAgICAgSGlnaGVyIHZhbHVlcyBwcm92aWRlIG1vcmUgc2FmZXR5IG1hcmdpbiBidXQgbWF5IHJl ZHVjZSByZWFkIHJlcGxpY2EgdXRpbGl6YXRpb24uCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+ CisgICAgICBWYWxpZCByYW5nZTogMS4wLTEwMC4wLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjUuMDwv bGl0ZXJhbD4uCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCBieSByZWxvYWRp bmcgdGhlIDxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gY29uZmlndXJhdGlvbnMuCisgICAgIDwv cGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0 ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi1tYXgtc3RhbGVuZXNzIiB4cmVmbGFi ZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3MiPgorICAgIDx0ZXJtPjx2YXJu YW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3M8L3Zhcm5hbWU+ICg8dHlwZT5p bnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1l PnRyYWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3M8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRp b24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+Cisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE1heGltdW0gZHVyYXRpb24gaW4gbWls bGlzZWNvbmRzIHRoYXQgYSBzaW5nbGUgdGFibGUgZW50cnkgY2FuIGNvbnRpbnVvdXNseSBmb3Jj ZSBxdWVyaWVzIHRvIHByaW1hcnksCisgICAgICBtZWFzdXJlZCBmcm9tIHdoZW4gdGhlIHRhYmxl IHdhcyBmaXJzdCBtYXJrZWQgc3RhbGUuIFdoZW4gdGhpcyBjYXAgaXMgcmVhY2hlZCwgdGhlIGVu dHJ5IGlzIGV4cGlyZWQKKyAgICAgIHJlZ2FyZGxlc3Mgb2YgcmVjZW50IHdyaXRlcy4gSWYgdGhl IHRhYmxlIGlzIHdyaXR0ZW4gdG8gYWdhaW4gYWZ0ZXIgZXhwaXJ5LCBhIGZyZXNoIHRyYWNraW5n IGVudHJ5CisgICAgICBpcyBjcmVhdGVkLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAg ICAgVGhpcyBwYXJhbWV0ZXIgYm91bmRzIHRoZSBjcm9zcy1zZXNzaW9uIGltcGFjdCBvZiB0YWJs ZSBtdXRhdGlvbiB0cmFja2luZy4gRXZlbiBpZiBhIHRhYmxlIGlzIHdyaXR0ZW4KKyAgICAgIHRv IGluIGEgdGlnaHQgbG9vcCwgaXRzIGVmZmVjdCBvbiBvdGhlciBzZXNzaW9ucycgbG9hZCBiYWxh bmNpbmcgaXMgbGltaXRlZCB0byB0aGlzIGR1cmF0aW9uLiBGb3IKKyAgICAgIGxlZ2l0aW1hdGVs eSBidXN5IHRhYmxlcywgdGhlIGdhcCBiZXR3ZWVuIGZvcmNlZCBleHBpcnkgYW5kIHRoZSBuZXh0 IHdyaXRlIHJlLW1hcmtpbmcgdGhlIHRhYmxlIGlzCisgICAgICBuZWdsaWdpYmxlICh0eXBpY2Fs bHkgbWlsbGlzZWNvbmRzKS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFNldCB0 byAwIHRvIGRpc2FibGUgdGhlIGNhcCAobm90IHJlY29tbWVuZGVkIGZvciBwcm9kdWN0aW9uKS4K KyAgICAgIFZhbGlkIHJhbmdlOiAwLTM2MDAwMDAgbXMuIERlZmF1bHQgaXMgPGxpdGVyYWw+NjAw MDA8L2xpdGVyYWw+ICg2MCBzZWNvbmRzKS4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBj aGFuZ2VkIGJ5IHJlbG9hZGluZyB0aGUgPHByb2R1Y3RuYW1lPlBncG9vbC1JSTwvPiBjb25maWd1 cmF0aW9ucy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXRyYWNrLXRhYmxlLW11dGF0aW9uLWNvbGQt c3RhcnQtZHVyYXRpb24iIHhyZWZsYWJlbD0idHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFy dF9kdXJhdGlvbiI+CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fY29s ZF9zdGFydF9kdXJhdGlvbjwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8 aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25f Y29sZF9zdGFydF9kdXJhdGlvbjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3By aW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+Cisg ICAgIDxwYXJhPgorICAgICAgRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHRvIHJvdXRlIGFsbCBx dWVyaWVzIHRvIHByaW1hcnkgYWZ0ZXIgYSBjaGlsZCBwcm9jZXNzIHN0YXJ0cy4KKyAgICAgIFRo aXMgcHJldmVudHMgc3RhbGUgcmVhZHMgd2hlbiBhIG5ldyBjb25uZWN0aW9uIGlzIGVzdGFibGlz aGVkIGJlZm9yZSB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24KKyAgICAgIGlzIHBvcHVsYXRlZCB3 aXRoIHJlY2VudCB3cml0ZSBoaXN0b3J5LgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAg ICAgV2hlbiB3YXRjaGRvZyBpcyBlbmFibGVkIGFuZCB0aGUgbG9jYWwgbm9kZSBiZWNvbWVzIHRo ZSBsZWFkZXIsIFBncG9vbC1JSSBhbHNvIHRyaWdnZXJzIGEKKyAgICAgIGdsb2JhbCBjb2xkIHN0 YXJ0IGZvciB0aGlzIGR1cmF0aW9uIHRvIGF2b2lkIHN0YWxlIHJlYWRzIGFmdGVyIGxlYWRlcnNo aXAgY2hhbmdlcy4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdl OiAwLTYwMDAwIG1zLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjIwMDA8L2xpdGVyYWw+ICgyIHNlY29u ZHMpLgorICAgICAgU2V0IHRvIDAgdG8gZGlzYWJsZSBjb2xkIHN0YXJ0IGJlaGF2aW9yLgorICAg ICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVsb2FkaW5nIHRoZSA8cHJvZHVj dG5hbWU+UGdwb29sLUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt dHJhY2stdGFibGUtbXV0YXRpb24tdGFibGUtYnVja2V0cyIgeHJlZmxhYmVsPSJ0cmFja190YWJs ZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJs ZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4p CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJsZV9t dXRhdGlvbl90YWJsZV9idWNrZXRzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwv cHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4K KyAgICAgPHBhcmE+CisgICAgICBOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciB0aGUgdHJhY2sg dGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZS4KKyAgICAgIEhpZ2hlciB2YWx1ZXMgcmVkdWNlIGhh c2ggY29sbGlzaW9ucyBhbmQgaW1wcm92ZSBsb29rdXAgcGVyZm9ybWFuY2UuCisgICAgIDwvcGFy YT4KKyAgICAgPHBhcmE+CisgICAgICBWYWxpZCByYW5nZTogNjQtNjU1MzYuIERlZmF1bHQgaXMg PGxpdGVyYWw+MTAyNDwvbGl0ZXJhbD4uCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBi ZSBzZXQgYXQgc2VydmVyIHN0YXJ0LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUt bXV0YXRpb24tdGFibGUtc2l6ZSIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl90YWJs ZV9zaXplIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9z aXplPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+Cisg ICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplPC92 YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRl cm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhp bXVtIG51bWJlciBvZiB0YWJsZXMgdGhhdCBjYW4gYmUgdHJhY2tlZCBzaW11bHRhbmVvdXNseSBp biB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24uCisgICAgICBXaGVuIGZ1bGwsIG9sZGVzdCBlbnRy aWVzIGFyZSBldmljdGVkIHVzaW5nIGEgc2ltcGxlIGV2aWN0aW9uIHN0cmF0ZWd5LgorICAgICA8 L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDEyOC0xMzEwNzIuIERlZmF1 bHQgaXMgPGxpdGVyYWw+MjA0ODwvbGl0ZXJhbD4uCisgICAgICBNZW1vcnkgdXNhZ2U6IGFwcHJv eGltYXRlbHkgNDAgYnl0ZXMgcGVyIGVudHJ5LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9u bHkgYmUgc2V0IGF0IHNlcnZlciBzdGFydC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworICA8c2VjdDMgaWQ9 InJ1bnRpbWUtY29uZmlnLXRyYWNrLXRhYmxlLW11dGF0aW9uLWV4YW1wbGUiPgorICAgPHRpdGxl PlRyYWNrIFRhYmxlIE11dGF0aW9uIENvbmZpZ3VyYXRpb24gRXhhbXBsZTwvdGl0bGU+CisgICA8 cGFyYT4KKyAgICBUbyBlbmFibGUgdHJhY2sgdGFibGUgbXV0YXRpb24gd2l0aCByZXBsaWNhdGlv biBkZWxheSBtb25pdG9yaW5nOgorICAgPC9wYXJhPgorICAgPHByb2dyYW1saXN0aW5nPgorIyBF bmFibGUgZG1sX2FkYXB0aXZlX2dsb2JhbCBtb2RlIChpbmNsdWRlcyB0cmFjayB0YWJsZSBtdXRh dGlvbikKK2Rpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID0gJ2RtbF9hZGFwdGl2ZV9nbG9i YWwnCit0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yID0gNS4wCit0cmFja190YWJsZV9t dXRhdGlvbl9tYXhfc3RhbGVuZXNzID0gNjAwMDAKK3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRf c3RhcnRfZHVyYXRpb24gPSAyMDAwCisKKyMgT3B0aW9uIEE6IFVzZSBleHRlcm5hbCBjb21tYW5k IGZvciByZXBsaWNhdGlvbiBkZWxheQorcmVwbGljYXRpb25fZGVsYXlfc291cmNlX2NtZCA9ICcv cGF0aC90by9nZXQtcmVwbGljYXRpb24tZGVsYXkuc2gnCityZXBsaWNhdGlvbl9kZWxheV9zb3Vy Y2VfdGltZW91dCA9IDEwCisKKyMgT3B0aW9uIEI6IFVzZSBwZ19zdGF0X3JlcGxpY2F0aW9uIHJl cGxheV9sYWcgKFBHIDEwKykKKyMgZGVsYXlfdGhyZXNob2xkX2J5X3RpbWUgPSAxMDAwCisKKyMg QWRqdXN0IHRhYmxlIG1hcCBzaXplIGJhc2VkIG9uIHdvcmtsb2FkCit0cmFja190YWJsZV9tdXRh dGlvbl90YWJsZV9zaXplID0gNDA5NgorICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgIDxwYXJhPgor ICAgIFNoYXJlZCBtZW1vcnkgcmVxdWlyZWQgZm9yIGFib3ZlIGNvbmZpZ3VyYXRpb246IGFwcHJv eGltYXRlbHkgMTYwIEtCIGZvciB0aGUgdGFibGUgbWFwLgorICAgIERlZmF1bHQgY29uZmlndXJh dGlvbiAoMjA0OCB0YWJsZXMpIHJlcXVpcmVzIGFwcHJveGltYXRlbHkgODAgS0IuCisgICA8L3Bh cmE+CisgIDwvc2VjdDM+CisKKyAgPHNlY3QzIGlkPSJydW50aW1lLWNvbmZpZy10cmFjay10YWJs ZS1tdXRhdGlvbi1saW1pdGF0aW9ucyI+CisgICA8dGl0bGU+TGltaXRhdGlvbnM8L3RpdGxlPgor ICAgPHBhcmE+CisgICAgVGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUgaGFzIHRoZSBm b2xsb3dpbmcgbGltaXRhdGlvbnM6CisgICA8L3BhcmE+CisgICA8aXRlbWl6ZWRsaXN0PgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5QUkVQQVJFPC9saXRlcmFs PiBzdGF0ZW1lbnRzIGFyZSBub3QgdHJhY2tlZC4gV2hlbiBhIHByZXBhcmVkIHN0YXRlbWVudAor ICAgICAgY29udGFpbmluZyBkYXRhIG1vZGlmaWNhdGlvbiBpcyBleGVjdXRlZCwgdGhlIHRhYmxl IG11dGF0aW9uIGlzIG5vdCByZWNvcmRlZC4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIEEgbWF4aW11bSBvZiAxMjggdGFi bGVzIGNhbiBiZSB0cmFja2VkIHBlciBTRUxFQ1QgcXVlcnkgZm9yIHN0YWxlbmVzcyBjaGVja2lu Zy4KKyAgICAgIFRoaXMgbGltaXQgaXMgc2hhcmVkIHdpdGggdGhlIHF1ZXJ5IGNhY2hlIHN1YnN5 c3RlbQorICAgICAgKDxsaXRlcmFsPlBPT0xfTUFYX1NFTEVDVF9PSURTPC9saXRlcmFsPikuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisgICA8cGFy YT4KKyAgICBJZiB5b3VyIGFwcGxpY2F0aW9uIHVzZXMgcHJlcGFyZWQgc3RhdGVtZW50cyBhbmQg cmVxdWlyZXMgcmVhZC1hZnRlci13cml0ZSBjb25zaXN0ZW5jeSwKKyAgICBjb25zaWRlciB1c2lu ZyBleHBsaWNpdCB0cmFuc2FjdGlvbiByb3V0aW5nIG9yIHRoZSA8bGl0ZXJhbD4vKk5PIExPQUQg QkFMQU5DRSovPC9saXRlcmFsPgorICAgIGNvbW1lbnQgZGlyZWN0aXZlIGZvciBhZmZlY3RlZCBx dWVyaWVzLgorICAgPC9wYXJhPgorICAgPHBhcmE+CisgICAgVGhlIGZvbGxvd2luZyBzdGF0ZW1l bnQgdHlwZXMgPGVtcGhhc2lzPmFyZTwvZW1waGFzaXM+IHRyYWNrZWQgYW5kIHdpbGwgbWFyayB0 YWJsZXMgYXMgc3RhbGU6CisgICA8L3BhcmE+CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+LCA8bGl0 ZXJhbD5VUERBVEU8L2xpdGVyYWw+LCA8bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+CisgICAgICBz dGF0ZW1lbnRzIChpbmNsdWRpbmcgdGhvc2Ugd2l0aCA8bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVy YWw+IGNsYXVzZXMpLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+VFJVTkNBVEU8L2xpdGVyYWw+IHN0YXRl bWVudHMgKGluY2x1ZGluZyBtdWx0aXBsZSB0YWJsZXMpLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+TUVS R0U8L2xpdGVyYWw+IHN0YXRlbWVudHMgKFBvc3RncmVTUUwgMTUrKS4KKyAgICAgPC9wYXJhPgor ICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRl cmFsPldJVEg8L2xpdGVyYWw+IGNsYXVzZXMgY29udGFpbmluZyBkYXRhIG1vZGlmaWNhdGlvbnMg KENvbW1vbiBUYWJsZSBFeHByZXNzaW9ucworICAgICAgd2l0aCA8bGl0ZXJhbD5JTlNFUlQ8L2xp dGVyYWw+LCA8bGl0ZXJhbD5VUERBVEU8L2xpdGVyYWw+LCBvciA8bGl0ZXJhbD5ERUxFVEU8L2xp dGVyYWw+KS4KKyAgICAgIEZvciBleGFtcGxlLCA8bGl0ZXJhbD5XSVRIIGRlbGV0ZWQgQVMgKERF TEVURSBGUk9NIHQxIFJFVFVSTklORyAqKSBTRUxFQ1QgKiBGUk9NIGRlbGV0ZWQ8L2xpdGVyYWw+ CisgICAgICB3aWxsIHByb3Blcmx5IG1hcmsgdGFibGUgPGxpdGVyYWw+dDE8L2xpdGVyYWw+IGFz IHN0YWxlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0 PgorICAgPHBhcmE+CisgICAgPGVtcGhhc2lzPlRyYW5zYWN0aW9uIFJvbGxiYWNrIEJlaGF2aW9y OjwvZW1waGFzaXM+IFdpdGhpbiBleHBsaWNpdCB0cmFuc2FjdGlvbnMsIHRhYmxlcworICAgIGFy ZSBvbmx5IG1hcmtlZCBhcyBzdGFsZSBpbiBzaGFyZWQgbWVtb3J5IHdoZW4gdGhlIHRyYW5zYWN0 aW9uIGlzIGNvbW1pdHRlZC4gSWYgdGhlCisgICAgdHJhbnNhY3Rpb24gaXMgcm9sbGVkIGJhY2ss IG5vIHRhYmxlcyBhcmUgbWFya2VkLCBzaW5jZSBubyBhY3R1YWwgZGF0YSBtb2RpZmljYXRpb24K KyAgICBvY2N1cnJlZCBvbiByZXBsaWNhcy4gVGhpcyBwcmV2ZW50cyByb2xsZWQtYmFjayB0cmFu c2FjdGlvbnMgZnJvbSB1bm5lY2Vzc2FyaWx5CisgICAgZGlzYWJsaW5nIGxvYWQgYmFsYW5jaW5n LiBGb3IgYXV0b2NvbW1pdCBzdGF0ZW1lbnRzIChvdXRzaWRlIGV4cGxpY2l0IHRyYW5zYWN0aW9u cyksCisgICAgdGFibGVzIGFyZSBtYXJrZWQgaW1tZWRpYXRlbHkgdXBvbiBjb21tYW5kIGNvbXBs ZXRpb24uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxlbXBoYXNpcz5Dcm9zcy1TZXNz aW9uIEltcGFjdCBhbmQgU2FmZXR5IEJvdW5kczo8L2VtcGhhc2lzPgorICAgIFVubGlrZSA8bGl0 ZXJhbD5kbWxfYWRhcHRpdmU8L2xpdGVyYWw+ICh3aGljaCBvbmx5IGFmZmVjdHMgdGhlIHNlc3Np b24gdGhhdCBpc3N1ZWQgdGhlIHdyaXRlKSwKKyAgICA8bGl0ZXJhbD5kbWxfYWRhcHRpdmVfZ2xv YmFsPC9saXRlcmFsPiBhZmZlY3RzIGFsbCBzZXNzaW9ucyByZWFkaW5nIHRoZSBzYW1lIHRhYmxl IGluIHRoZSBzYW1lIGRhdGFiYXNlLgorICAgIFRoZSBmb2xsb3dpbmcgc2FmZXR5IG1lY2hhbmlz bXMgYm91bmQgdGhpcyBjcm9zcy1zZXNzaW9uIGltcGFjdDoKKyAgIDwvcGFyYT4KKyAgIDxpdGVt aXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxlbXBoYXNpcz5N YXhpbXVtIHN0YWxlbmVzcyBjYXA6PC9lbXBoYXNpcz4gVGhlIDx4cmVmIGxpbmtlbmQ9Imd1Yy10 cmFjay10YWJsZS1tdXRhdGlvbi1tYXgtc3RhbGVuZXNzIj4KKyAgICAgIHBhcmFtZXRlciAoZGVm YXVsdDogNjAgc2Vjb25kcykgbGltaXRzIGhvdyBsb25nIGFueSBzaW5nbGUgdGFibGUgZW50cnkg Y2FuIGNvbnRpbnVvdXNseSBmb3JjZSBwcmltYXJ5CisgICAgICByb3V0aW5nLiBFdmVuIHVuZGVy IHN1c3RhaW5lZCB3cml0ZXMsIHRoZSBlbnRyeSBleHBpcmVzIGFmdGVyIHRoaXMgcGVyaW9kIGFu ZCBpcyBvbmx5IHJlbmV3ZWQgYnkKKyAgICAgIHN1YnNlcXVlbnQgY29tbWl0dGVkIHdyaXRlcy4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIDxlbXBoYXNpcz5EYXRhYmFzZSBpc29sYXRpb246PC9lbXBoYXNpcz4gVGFibGUg c3RhbGVuZXNzIHRyYWNraW5nIGlzIHNjb3BlZCBieSBkYXRhYmFzZSBPSUQuIFdyaXRlcworICAg ICAgaW4gb25lIGRhdGFiYXNlIG5ldmVyIGFmZmVjdCBsb2FkIGJhbGFuY2luZyBkZWNpc2lvbnMg Zm9yIHNlc3Npb25zIGNvbm5lY3RlZCB0byBhIGRpZmZlcmVudCBkYXRhYmFzZS4KKyAgICAgIElu IG11bHRpLXRlbmFudCBkZXBsb3ltZW50cyB3aGVyZSB0ZW5hbnRzIHVzZSBzZXBhcmF0ZSBkYXRh YmFzZXMsIG9uZSB0ZW5hbnQncyB3cml0ZSBhY3Rpdml0eSBjYW5ub3QKKyAgICAgIGluZmx1ZW5j ZSBhbm90aGVyIHRlbmFudCdzIHF1ZXJ5IHJvdXRpbmcuCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8ZW1waGFzaXM+Q29t bWl0dGVkIHdyaXRlcyBvbmx5OjwvZW1waGFzaXM+IE9ubHkgY29tbWl0dGVkIHRyYW5zYWN0aW9u cyBtYXJrIHRhYmxlcyBhcyBzdGFsZS4KKyAgICAgIFJvbGxlZC1iYWNrIHRyYW5zYWN0aW9ucyBo YXZlIG5vIGVmZmVjdCBvbiB0aGUgc2hhcmVkIHRyYWNraW5nIHN0YXRlLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGVt cGhhc2lzPkJvdW5kZWQgdGFibGUgbWFwIHNpemU6PC9lbXBoYXNpcz4gVGhlIHNoYXJlZCBtZW1v cnkgdGFibGUgbWFwIGhhcyBhIGZpeGVkIG1heGltdW0gc2l6ZQorICAgICAgKDx4cmVmIGxpbmtl bmQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi10YWJsZS1zaXplIj4pLiBBdCBtb3N0IHRoaXMg bWFueSB0YWJsZXMgY2FuIGJlIG1hcmtlZCBzdGFsZQorICAgICAgc2ltdWx0YW5lb3VzbHksIHBy b3ZpZGluZyBhIG5hdHVyYWwgY2VpbGluZyBvbiB0aGUgZmVhdHVyZSdzIGltcGFjdC4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0Mz4K KworIDwvc2VjdDI+CisKIDwvc2VjdDE+CmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9z cmMvTWFrZWZpbGUuYW0KaW5kZXggNDY3OGFiNTMwLi4zOTU4OGFmNTggMTAwNjQ0Ci0tLSBhL3Ny Yy9NYWtlZmlsZS5hbQorKysgYi9zcmMvTWFrZWZpbGUuYW0KQEAgLTM1LDYgKzM1LDcgQEAgcGdw b29sX1NPVVJDRVMgPSBtYWluL21haW4uYyBcCiAJcmV3cml0ZS9wb29sX3RpbWVzdGFtcC5jIFwK IAlyZXdyaXRlL3Bvb2xfbG9iai5jIFwKIAl1dGlscy9wb29sX3NlbGVjdF93YWxrZXIuYyBcCisJ dXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jIFwKIAl1dGlscy9zdHJsY3B5LmMgXAog CXV0aWxzL3BzcHJpbnRmLmMgXAogCXV0aWxzL3Bvb2xfcGFyYW1zLmMgXApkaWZmIC0tZ2l0IGEv c3JjL2NvbmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYyBiL3NyYy9jb25maWcvcG9vbF9jb25m aWdfdmFyaWFibGVzLmMKaW5kZXggYjc3NWIyMTA2Li4zMDM5ZTMyZjAgMTAwNjQ0Ci0tLSBhL3Ny Yy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMKKysrIGIvc3JjL2NvbmZpZy9wb29sX2Nv bmZpZ192YXJpYWJsZXMuYwpAQCAtMjkwLDYgKzI5MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg Y29uZmlnX2VudW1fZW50cnkgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGVfb3B0aW9uc1td ID0KIAl7InRyYW5zX3RyYW5zYWN0aW9uIiwgRExCT1dfVFJBTlNfVFJBTlNBQ1RJT04sIGZhbHNl fSwKIAl7ImFsd2F5cyIsIERMQk9XX0FMV0FZUywgZmFsc2V9LAogCXsiZG1sX2FkYXB0aXZlIiwg RExCT1dfRE1MX0FEQVBUSVZFLCBmYWxzZX0sCisJeyJkbWxfYWRhcHRpdmVfZ2xvYmFsIiwgRExC T1dfRE1MX0FEQVBUSVZFX0dMT0JBTCwgZmFsc2V9LAogCXtOVUxMLCAwLCBmYWxzZX0KIH07CiAK QEAgLTE3NzcsNiArMTc3OCwxOSBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19pbnRfYXJyYXkgQ29u ZmlndXJlTmFtZXNJbnRBcnJheVtdID0KIAogc3RhdGljIHN0cnVjdCBjb25maWdfZG91YmxlIENv bmZpZ3VyZU5hbWVzRG91YmxlW10gPQogeworCXsKKwkJeyJ0cmFja190YWJsZV9tdXRhdGlvbl90 dGxfZmFjdG9yIiwKKwkJCUNGR0NYVF9SRUxPQUQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJCQki VFRMIG11bHRpcGxpZXIgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uICIKKwkJCSIoVFRMID0gcmVw bGljYXRpb25fZGVsYXkgKiBmYWN0b3IpIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9ET1VCTEUsIGZh bHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9m YWN0b3IsCisJCTUuMCwJCQkJCS8qIGJvb3QgdmFsdWU6IDV4IHJlcGxpY2F0aW9uIGRlbGF5ICov CisJCTEuMCwgMTAwLjAsCQkJCS8qIG1pbiwgbWF4ICovCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9 LAorCiAJLyogRW5kLW9mLWxpc3QgbWFya2VyICovCiAJRU1QVFlfQ09ORklHX0RPVUJMRQogfTsK QEAgLTIzOTcsNiArMjQxMSw1NyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19pbnQgQ29uZmlndXJl TmFtZXNJbnRbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7InRyYWNrX3Rh YmxlX211dGF0aW9uX21heF9zdGFsZW5lc3MiLAorCQkJQ0ZHQ1hUX1JFTE9BRCwgTE9BRF9CQUxB TkNFX0NPTkZJRywKKwkJCSJNYXhpbXVtIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0aGF0IGEg IgorCQkJInRhYmxlIGNhbiBiZSBtYXJrZWQgc3RhbGUgZnJvbSBpdHMgZmlyc3QgIgorCQkJIndy aXRlLiAwIGRpc2FibGVzIHRoZSBjYXAuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNl LCBHVUNfVU5JVF9NUworCQl9LAorCQkmZ19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlv bl9tYXhfc3RhbGVuZXNzLAorCQk2MDAwMCwJCQkJCS8qIDYwIHNlY29uZHMgKi8KKwkJMCwgMzYw MDAwMCwJCQkJLyogMCB0byAxIGhvdXIgKi8KKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7 CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbiIsCisJCQlDRkdD WFRfUkVMT0FELCBMT0FEX0JBTEFOQ0VfQ09ORklHLAorCQkJIkR1cmF0aW9uIGluIG1pbGxpc2Vj b25kcyB0byBmb3JjZSBxdWVyaWVzICIKKwkJCSJ0byBwcmltYXJ5IGFmdGVyIGNoaWxkIHByb2Nl c3Mgc3RhcnRzLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgR1VDX1VOSVRfTVMK KwkJfSwKKwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9k dXJhdGlvbiwKKwkJMjAwMCwJCQkJCS8qIDIgc2Vjb25kcyAqLworCQkwLCA2MDAwMCwJCQkJLyog MCB0byA2MCBzZWNvbmRzICovCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7InRy YWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMiLAorCQkJQ0ZHQ1hUX0lOSVQsIExPQURf QkFMQU5DRV9DT05GSUcsCisJCQkiTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdHJhY2sgdGFi bGUgbXV0YXRpb24uIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJ CSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMsCisJCTEw MjQsCisJCTY0LCA2NTUzNiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsidHJh Y2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSIsCisJCQlDRkdDWFRfSU5JVCwgTE9BRF9CQUxB TkNFX0NPTkZJRywKKwkJCSJNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRyYWNrIHRhYmxl IG11dGF0aW9uLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAorCQkm Z19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplLAorCQkyMDQ4LAor CQkxMjgsIDEzMTA3MiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlz dCBtYXJrZXIgKi8KIAlFTVBUWV9DT05GSUdfSU5UCiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRl eHQvcG9vbF9xdWVyeV9jb250ZXh0LmMgYi9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQu YwppbmRleCBhMDU2YWM1OTYuLmMyMGEzYTQyMCAxMDA2NDQKLS0tIGEvc3JjL2NvbnRleHQvcG9v bF9xdWVyeV9jb250ZXh0LmMKKysrIGIvc3JjL2NvbnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmMK QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJ1dGlscy9zdGF0aXN0aWNzLmgiCiAjaW5jbHVk ZSAidXRpbHMvcG9vbF9zZWxlY3Rfd2Fsa2VyLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJl YW0uaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCiAjaW5j bHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgogI2luY2x1ZGUgImNvbnRleHQv cG9vbF9xdWVyeV9jb250ZXh0LmgiCiAjaW5jbHVkZSAicGFyc2VyL25vZGVzLmgiCkBAIC0xODI4 LDIwICsxODI5LDI2IEBAIGlzX2luX2xpc3QoY2hhciAqbmFtZSwgTGlzdCAqbGlzdCkKIHN0YXRp YyBib29sCiBpc19zZWxlY3Rfb2JqZWN0X2luX3RlbXBfd3JpdGVfbGlzdChOb2RlICpub2RlLCB2 b2lkICpjb250ZXh0KQogewotCWlmIChub2RlID09IE5VTEwgfHwgcG9vbF9jb25maWctPmRpc2Fi bGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9XX0RNTF9BREFQVElWRSkKKwlpZiAobm9k ZSA9PSBOVUxMIHx8CisJCSFETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2Fi bGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKElzQShu b2RlLCBSYW5nZVZhcikpCiAJewogCQlSYW5nZVZhciAgICpyZ3YgPSAoUmFuZ2VWYXIgKikgbm9k ZTsKLQkJUE9PTF9TRVNTSU9OX0NPTlRFWFQgKnNlc3Npb25fY29udGV4dCA9IHBvb2xfZ2V0X3Nl c3Npb25fY29udGV4dChmYWxzZSk7CisJCVBPT0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2Nv bnRleHQ7CiAKLQkJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0 ZSA9PSBETEJPV19ETUxfQURBUFRJVkUgJiYgc2Vzc2lvbl9jb250ZXh0LT5pc19pbl90cmFuc2Fj dGlvbikKKwkJc2Vzc2lvbl9jb250ZXh0ID0gcG9vbF9nZXRfc2Vzc2lvbl9jb250ZXh0KGZhbHNl KTsKKworCQlpZiAoc2Vzc2lvbl9jb250ZXh0LT5pc19pbl90cmFuc2FjdGlvbikKIAkJewogCQkJ ZXJlcG9ydChERUJVRzEsCi0JCQkJCShlcnJtc2coImlzX3NlbGVjdF9vYmplY3RfaW5fdGVtcF93 cml0ZV9saXN0OiBcIiVzXCIsIGZvdW5kIHJlbGF0aW9uIFwiJXNcIiIsIChjaGFyICopIGNvbnRl eHQsIHJndi0+cmVsbmFtZSkpKTsKKwkJCQkJKGVycm1zZygiaXNfc2VsZWN0X29iamVjdF9pbl90 ZW1wX3dyaXRlX2xpc3Q6IgorCQkJCQkJCSIgXCIlc1wiLCBmb3VuZCByZWxhdGlvbiBcIiVzXCIi LAorCQkJCQkJCShjaGFyICopIGNvbnRleHQsIHJndi0+cmVsbmFtZSkpKTsKIAotCQkJcmV0dXJu IGlzX2luX2xpc3Qocmd2LT5yZWxuYW1lLCBzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3Rl bXBfd3JpdGVfbGlzdCk7CisJCQlyZXR1cm4gaXNfaW5fbGlzdChyZ3YtPnJlbG5hbWUsCisJCQkJ CQkJICBzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCk7CiAJCX0K IAl9CiAKQEAgLTE4ODAsMTUgKzE4ODcsMjIgQEAgc3RhdGljIGNoYXIgKmdldF9hc3NvY2lhdGVk X29iamVjdF9mcm9tX2RtbF9hZGFwdGl2ZV9yZWxhdGlvbnMKIHZvaWQKIGNoZWNrX29iamVjdF9y ZWxhdGlvbnNoaXBfbGlzdChjaGFyICpuYW1lLCBib29sIGlzX2Z1bmNfbmFtZSkKIHsKLQlpZiAo cG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9B REFQVElWRSAmJiBwb29sX2NvbmZpZy0+cGFyc2VkX2RtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRp b25zaGlwX2xpc3QpCisJYm9vbAkJaXNfYWRhcHRpdmU7CisKKwlpc19hZGFwdGl2ZSA9CisJCShw b29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJIERMQk9XX0RN TF9BREFQVElWRSk7CisKKwlpZiAoaXNfYWRhcHRpdmUgJiYKKwkJcG9vbF9jb25maWctPnBhcnNl ZF9kbWxfYWRhcHRpdmVfb2JqZWN0X3JlbGF0aW9uc2hpcF9saXN0KQogCXsKIAkJUE9PTF9TRVNT SU9OX0NPTlRFWFQgKnNlc3Npb25fY29udGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChm YWxzZSk7CiAKIAkJaWYgKHNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24pCiAJCXsK IAkJCWNoYXIJICAgKnJpZ2h0X3Rva2VuID0KLQkJCQlnZXRfYXNzb2NpYXRlZF9vYmplY3RfZnJv bV9kbWxfYWRhcHRpdmVfcmVsYXRpb25zCi0JCQkJKG5hbWUsIGlzX2Z1bmNfbmFtZSA/IE9CSkVD VF9UWVBFX0ZVTkNUSU9OIDogT0JKRUNUX1RZUEVfUkVMQVRJT04pOworCQkJZ2V0X2Fzc29jaWF0 ZWRfb2JqZWN0X2Zyb21fZG1sX2FkYXB0aXZlX3JlbGF0aW9ucworCQkJKG5hbWUsIGlzX2Z1bmNf bmFtZSA/IE9CSkVDVF9UWVBFX0ZVTkNUSU9OIDogT0JKRUNUX1RZUEVfUkVMQVRJT04pOwogCiAJ CQlpZiAocmlnaHRfdG9rZW4pCiAJCQl7CkBAIC0xOTQ3LDcgKzE5NjEsNyBAQCBhZGRfb2JqZWN0 X2ludG9fdGVtcF93cml0ZV9saXN0KE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCiBzdGF0aWMg dm9pZAogZG1sX2FkYXB0aXZlKE5vZGUgKm5vZGUsIGNoYXIgKnF1ZXJ5KQogewotCWlmIChwb29s X2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBU SVZFKQorCWlmIChETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2FibGVfbG9h ZF9iYWxhbmNlX29uX3dyaXRlKSkKIAl7CiAJCS8qIFNldC9VbnNldCB0cmFuc2FjdGlvbiBzdGF0 dXMgZmxhZ3MgKi8KIAkJaWYgKElzQShub2RlLCBUcmFuc2FjdGlvblN0bXQpKQpAQCAtMTk2Niw2 ICsxOTgwLDQ1IEBAIGRtbF9hZGFwdGl2ZShOb2RlICpub2RlLCBjaGFyICpxdWVyeSkKIAkJCX0K IAkJCWVsc2UgaWYgKGlzX2NvbW1pdF9vcl9yb2xsYmFja19xdWVyeShub2RlKSkKIAkJCXsKKwkJ CQkvKgorCQkJCSAqIEZvciBkbWxfYWRhcHRpdmVfZ2xvYmFsOiBvbiBDT01NSVQsIGZsdXNoIHRo ZSBhY2N1bXVsYXRlZAorCQkJCSAqIHRhYmxlIHdyaXRlcyB0byBzaGFyZWQgbWVtb3J5LiAgT24g Uk9MTEJBQ0ssIHNraXAgLS0gdGhlCisJCQkJICogd3JpdGVzIG5ldmVyIGNvbW1pdHRlZCBzbyBu byBzdGFsZS1yZWFkIHJpc2sgZXhpc3RzLiAgVGhpcworCQkJCSAqIHByZXZlbnRzIHBvbGx1dGlu ZyB0aGUgdGFibGUgbWFwIHdpdGggcm9sbGVkLWJhY2sKKwkJCQkgKiB0cmFuc2FjdGlvbnMuCisJ CQkJICovCisJCQkJaW50CQkJZGxib3cgPQorCQkJCXBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRf YmFsYW5jZV9vbl93cml0ZTsKKwkJCQlMaXN0CSAgICp3bGlzdCA9CisJCQkJc2Vzc2lvbl9jb250 ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3Q7CisKKwkJCQlpZiAoZGxib3cgPT0gRExC T1dfRE1MX0FEQVBUSVZFX0dMT0JBTCAmJgorCQkJCQlpc19jb21taXRfcXVlcnkobm9kZSkgJiYK KwkJCQkJd2xpc3QgIT0gTklMKQorCQkJCXsKKwkJCQkJTGlzdENlbGwgICAqY2VsbDsKKwkJCQkJ aW50CQkJZGJvaWQ7CisKKwkJCQkJZGJvaWQgPQorCQkJCQkJcG9vbF90cmFja190YWJsZV9tdXRh dGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCQkJCWlmIChkYm9pZCA+IDApCisJCQkJCXsKKwkJ CQkJCWZvcmVhY2goY2VsbCwgd2xpc3QpCisJCQkJCQl7CisJCQkJCQkJY2hhcgkgICAqdG5hbWU7 CisJCQkJCQkJaW50CQkJdG9pZDsKKworCQkJCQkJCXRuYW1lID0gKGNoYXIgKikgbGZpcnN0KGNl bGwpOworCQkJCQkJCXRvaWQgPQorCQkJCQkJCQlwb29sX3RhYmxlX25hbWVfdG9fb2lkKHRuYW1l KTsKKworCQkJCQkJCWlmICh0b2lkID4gMCkKKwkJCQkJCQkJcG9vbF90cmFja190YWJsZV9tdXRh dGlvbl9tYXJrX3RhYmxlX3dyaXR0ZW4oCisJCQkJCQkJCQkJCQkJCQkJCQkJIHRvaWQsIGRib2lk KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwogCQkJCXNlc3Npb25fY29udGV4dC0+aXNfaW5f dHJhbnNhY3Rpb24gPSBmYWxzZTsKIAogCQkJCWlmIChzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0 aW9uX3RlbXBfd3JpdGVfbGlzdCAhPSBOSUwpCkBAIC0yMDA4LDcgKzIwNjEsNyBAQCB3aGVyZV90 b19zZW5kX21haW5fcmVwbGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNo YXIgKnF1ZXJ5LCBOb2RlCiAJc2Vzc2lvbl9jb250ZXh0ID0gcG9vbF9nZXRfc2Vzc2lvbl9jb250 ZXh0KGZhbHNlKTsKIAliYWNrZW5kID0gc2Vzc2lvbl9jb250ZXh0LT5iYWNrZW5kOwogCi0JLyog CisJLyoKIAkgKiBDb2xsZWN0L2Rpc2NhcmQgaW5mb3JtYXRpb24gZm9yIGRpc2FibGVfbG9hZF9i YWxhbmNlX29uX3dyaXRlID0KIAkgKiBkbWxfYWRhcHRpdmUgY2FzZS4KIAkgKi8KQEAgLTIwMjIs NiArMjA3NSwyMCBAQCB3aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQT09MX1FVRVJZX0NPTlRF WFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBOb2RlCiAJaWYgKGRlc3QgPT0gUE9PTF9Q UklNQVJZKQogCXsKIAkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIFBS SU1BUllfTk9ERV9JRCk7CisKKwkJLyoKKwkJICogUmVzb2x2ZSB0YWJsZSBhbmQgZGF0YWJhc2Ug T0lEcyBub3cgdG8gcG9wdWxhdGUgcmVsY2FjaGUuIFRoaXMKKwkJICogYXZvaWRzIHBvdGVudGlh bCBoYW5ncyBpbiBDb21tYW5kQ29tcGxldGUgd2hlcmUgd2Ugc2hvdWxkbid0IGJlCisJCSAqIHJ1 bm5pbmcgbmV3IHF1ZXJpZXMgYWdhaW5zdCB0aGUgYmFja2VuZC4KKwkJICovCisJCWlmIChwb29s X2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJCURMQk9XX0RNTF9B REFQVElWRV9HTE9CQUwpCisJCXsKKwkJCWludAkJICAgKm9pZHM7CisKKwkJCXBvb2xfZXh0cmFj dF90YWJsZV9vaWRzKG5vZGUsICZvaWRzKTsKKwkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25f Z2V0X2RhdGFiYXNlX29pZCgpOworCQl9CiAJfQogCS8qIFNob3VsZCBiZSBzZW50IHRvIGJvdGgg cHJpbWFyeSBhbmQgc3RhbmRieT8gKi8KIAllbHNlIGlmIChkZXN0ID09IFBPT0xfQk9USCkKQEAg LTIxNTEsNiArMjIxOCwxNTMgQEAgd2hlcmVfdG9fc2VuZF9tYWluX3JlcGxpY2EoUE9PTF9RVUVS WV9DT05URVhUICpxdWVyeV9jb250ZXh0LCBjaGFyICpxdWVyeSwgTm9kZQogCQkJCXsKIAkJCQkJ cG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9JRCk7 CiAJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBDaGVjayB0cmFjayB0YWJsZSBtdXRhdGlvbiBmb3Ig cmVjZW50bHkgd3JpdHRlbiB0YWJsZXMuICBJZgorCQkJCSAqIGluIGNvbGQgc3RhcnQgb3IgYW55 IHRhYmxlIHdhcyByZWNlbnRseSB3cml0dGVuLCByb3V0ZSB0bworCQkJCSAqIHByaW1hcnkgdG8g YXZvaWQgc3RhbGUgcmVhZHMuCisJCQkJICovCisJCQkJZWxzZSBpZiAocG9vbF9jb25maWctPmRp c2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCQkJCQkgRExCT1dfRE1MX0FEQVBUSVZF X0dMT0JBTCkKKwkJCQl7CisJCQkJCWJvb2wJCWZvcmNlX3ByaW1hcnkgPSBmYWxzZTsKKwkJCQkJ aW50CQkJbGJfbm9kZTsKKwkJCQkJUE9PTF9RVUVSWV9DT05URVhUICpxY3R4ID0KKwkJCQkJc2Vz c2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0OworCisJCQkJCWlmIChwb29sX3RyYWNrX3RhYmxl X211dGF0aW9uX2luX2NvbGRfc3RhcnQoKSkKKwkJCQkJeworCQkJCQkJZXJlcG9ydChERUJVRzEs CisJCQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UiCisJCQkJCQkJCQkJIiBi ZWNhdXNlIG9mIHRyYWNrIHRhYmxlIgorCQkJCQkJCQkJCSIgbXV0YXRpb24gY29sZCBzdGFydCIp LAorCQkJCQkJCQkgZXJyZGV0YWlsKCJkZXN0aW5hdGlvbiA9IFBSSU1BUlkiCisJCQkJCQkJCQkJ ICAgIiBmb3IgcXVlcnk9IFwiJXNcIiIsCisJCQkJCQkJCQkJICAgcXVlcnkpKSk7CisJCQkJCQlm b3JjZV9wcmltYXJ5ID0gdHJ1ZTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCVNl bGVjdENvbnRleHQgY3R4OworCQkJCQkJaW50CQkJZGJvaWQ7CisJCQkJCQlpbnQJCQludW1fb2lk czsKKwkJCQkJCWludAkJCWk7CisKKwkJCQkJCW1lbXNldCgmY3R4LCAwLCBzaXplb2YoY3R4KSk7 CisJCQkJCQludW1fb2lkcyA9CisJCQkJCQkJcG9vbF9leHRyYWN0X3RhYmxlX29pZHNfZnJvbV9z ZWxlY3Rfc3RtdCgKKwkJCQkJCQkJCQkJCQkJCQkJIG5vZGUsICZjdHgpOworCQkJCQkJaWYgKG51 bV9vaWRzID4gMCkKKwkJCQkJCXsKKwkJCQkJCQlkYm9pZCA9CisJCQkJCQkJCXBvb2xfdHJhY2tf dGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZCgpOworCisJCQkJCQkJaWYgKGRib2lkIDw9 IDApCisJCQkJCQkJeworCQkJCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJCQkoZXJybXNn KCJjb3VsZCBub3QgbG9hZCIKKwkJCQkJCQkJCQkJCSIgYmFsYW5jZSBiZWNhdXNlIgorCQkJCQkJ CQkJCQkJIiBkYXRhYmFzZSBvaWQgd2FzIgorCQkJCQkJCQkJCQkJIiB1bmF2YWlsYWJsZSIpLAor CQkJCQkJCQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9uIgorCQkJCQkJCQkJCQkJICAgIiA9IFBS SU1BUlkgZm9yIgorCQkJCQkJCQkJCQkJICAgIiBxdWVyeT0gXCIlc1wiIiwKKwkJCQkJCQkJCQkJ CSAgIHF1ZXJ5KSkpOworCQkJCQkJCQlmb3JjZV9wcmltYXJ5ID0gdHJ1ZTsKKwkJCQkJCQl9CisJ CQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJZm9yIChpID0gMDsgaSA8IG51bV9vaWRzOyBp KyspCisJCQkJCQkJCXsKKwkJCQkJCQkJCWJvb2wJCXN0YWxlOworCisJCQkJCQkJCQlzdGFsZSA9 CisJCQkJCQkJCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9pc19zdGFsZSgKKwkJ CQkJCQkJCQkJCQkJCQkJCQkJIGN0eC50YWJsZV9vaWRzW2ldLAorCQkJCQkJCQkJCQkJCQkJCQkJ CQkgZGJvaWQpOworCQkJCQkJCQkJaWYgKHN0YWxlKQorCQkJCQkJCQkJeworCQkJCQkJCQkJCWVy ZXBvcnQoREVCVUcxLAorCQkJCQkJCQkJCQkJKGVycm1zZygiY291bGQgbm90IGxvYWQiCisJCQkJ CQkJCQkJCQkJCSIgYmFsYW5jZSBiZWNhdXNlIgorCQkJCQkJCQkJCQkJCQkiIHRhYmxlIFwiJXNc IiB3YXMiCisJCQkJCQkJCQkJCQkJCSIgcmVjZW50bHkgd3JpdHRlbiIsCisJCQkJCQkJCQkJCQkJ CWN0eC50YWJsZV9uYW1lc1tpXSksCisJCQkJCQkJCQkJCQkgZXJyZGV0YWlsKCJkZXN0aW5hdGlv biIKKwkJCQkJCQkJCQkJCQkJICAgIiA9IFBSSU1BUlkgZm9yIgorCQkJCQkJCQkJCQkJCQkgICAi IHF1ZXJ5PSBcIiVzXCIiLAorCQkJCQkJCQkJCQkJCQkgICBxdWVyeSkpKTsKKwkJCQkJCQkJCQlm b3JjZV9wcmltYXJ5ID0gdHJ1ZTsKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKwkJCQkJ CQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWlmIChmb3JjZV9wcmltYXJ5 KQorCQkJCQl7CisJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQoCisJCQkJCQkJCQkJCQkg cXVlcnlfY29udGV4dCwKKwkJCQkJCQkJCQkJCSBQUklNQVJZX05PREVfSUQpOworCQkJCQl9CisJ CQkJCWVsc2UKKwkJCQkJeworCQkJCQkJaWYgKHBvb2xfY29uZmlnLT5zdGF0ZW1lbnRfbGV2ZWxf bG9hZF9iYWxhbmNlKQorCQkJCQkJeworCQkJCQkJCXNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxh bmNlX25vZGVfaWQgPQorCQkJCQkJCQlzZWxlY3RfbG9hZF9iYWxhbmNpbmdfbm9kZSgpOworCQkJ CQkJfQorCisJCQkJCQkvKgorCQkJCQkJICogSWYgcmVwbGljYXRpb24gZGVsYXkgaXMgdG9vIG11 Y2gsIGFuZAorCQkJCQkJICogcHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkgaXMgdHJ1ZSB0aGVu IGVsZWN0IHRoZQorCQkJCQkJICogbG93ZXN0LWRlbGF5ZWQgbm9kZSwgb3RoZXJ3aXNlIHNlbmQg dG8gcHJpbWFyeS4KKwkJCQkJCSAqLworCQkJCQkJbGJfbm9kZSA9CisJCQkJCQkJc2Vzc2lvbl9j b250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZDsKKwkJCQkJCWlmIChTVFJFQU0gJiYKKwkJCQkJ CQljaGVja19yZXBsaWNhdGlvbl9kZWxheShsYl9ub2RlKSkKKwkJCQkJCXsKKwkJCQkJCQllcmVw b3J0KERFQlVHMSwKKwkJCQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBsb2FkIgorCQkJCQkJCQkJ CQkiIGJhbGFuY2UgYmVjYXVzZSBvZiIKKwkJCQkJCQkJCQkJIiB0b28gbXVjaCByZXBsaWNhdGlv biIKKwkJCQkJCQkJCQkJIiBkZWxheSIpLAorCQkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRp b24iCisJCQkJCQkJCQkJCSAgICIgPSAlZCBmb3IiCisJCQkJCQkJCQkJCSAgICIgcXVlcnk9IFwi JXNcIiIsCisJCQkJCQkJCQkJCSAgIGRlc3QsIHF1ZXJ5KSkpOworCisJCQkJCQkJaWYgKHBvb2xf Y29uZmlnLT5wcmVmZXJfbG93ZXJfZGVsYXlfc3RhbmRieSkKKwkJCQkJCQl7CisJCQkJCQkJCWxi X25vZGUgPQorCQkJCQkJCQkJc2VsZWN0X2xvYWRfYmFsYW5jaW5nX25vZGUoKTsKKwkJCQkJCQkJ c2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCA9CisJCQkJCQkJCQlsYl9ub2Rl OworCQkJCQkJCQlxY3R4LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCA9CisJCQkJCQkJCQlsYl9ub2Rl OworCQkJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQoCisJCQkJCQkJCQkJCQkJCSBxdWVy eV9jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkgbGJfbm9kZSk7CisJCQkJCQkJfQorCQkJCQkJCWVs c2UKKwkJCQkJCQl7CisJCQkJCQkJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudCgKKwkJCQkJCQkJ CQkJCQkJIHF1ZXJ5X2NvbnRleHQsCisJCQkJCQkJCQkJCQkJCSBQUklNQVJZX05PREVfSUQpOwor CQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlxY3R4LT5sb2Fk X2JhbGFuY2Vfbm9kZV9pZCA9CisJCQkJCQkJCXNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNl X25vZGVfaWQ7CisJCQkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KAorCQkJCQkJCQkJCQkJ CSBxdWVyeV9jb250ZXh0LAorCQkJCQkJCQkJCQkJCSBxY3R4LT5sb2FkX2JhbGFuY2Vfbm9kZV9p ZCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CiAJCQkJZWxzZQogCQkJCXsKIAkJCQkJaWYgKHBv b2xfY29uZmlnLT5zdGF0ZW1lbnRfbGV2ZWxfbG9hZF9iYWxhbmNlKQpAQCAtMjE3MSw3ICsyMzg1 LDggQEAgd2hlcmVfdG9fc2VuZF9tYWluX3JlcGxpY2EoUE9PTF9RVUVSWV9DT05URVhUICpxdWVy eV9jb250ZXh0LCBjaGFyICpxdWVyeSwgTm9kZQogCQkJCQkJCQkgZXJyZGV0YWlsKCJkZXN0aW5h dGlvbiA9ICVkIGZvciBxdWVyeT0gXCIlc1wiIiwgZGVzdCwgcXVlcnkpKSk7CiAKIAkJCQkJCS8q Ci0JCQkJCQkgKiBJZiBwcmVmZXJfbG93ZXJfZGVsYXlfc3RhbmRieSBpcyBvbiwgY2hvb3NlIGxv d2VyIGRlbGF5IHN0YW5kYnkuCisJCQkJCQkgKiBJZiBwcmVmZXJfbG93ZXJfZGVsYXlfc3RhbmRi eSBpcyBvbiwgY2hvb3NlIGxvd2VyCisJCQkJCQkgKiBkZWxheSBzdGFuZGJ5LgogCQkJCQkJICov CiAJCQkJCQlpZiAocG9vbF9jb25maWctPnByZWZlcl9sb3dlcl9kZWxheV9zdGFuZGJ5KQogCQkJ CQkJewpAQCAtMjE4MSw3ICsyMzk2LDggQEAgd2hlcmVfdG9fc2VuZF9tYWluX3JlcGxpY2EoUE9P TF9RVUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0LCBjaGFyICpxdWVyeSwgTm9kZQogCQkJCQkJ CXNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPSBz ZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkOwogCQkJCQkJCXBvb2xfc2V0X25v ZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LCBzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2NvbnRl eHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkKTsKIAkJCQkJCX0KLQkJCQkJCWVsc2UJLyogZGVsYXkg aXMgdG9vIG11Y2guIHByZWZlciB0byBzZW5kIHRvIHByaW1hcnkgKi8KKwkJCQkJCWVsc2UJLyog ZGVsYXkgaXMgdG9vIG11Y2guIHByZWZlciB0byBzZW5kIHRvCisJCQkJCQkJCSAqIHByaW1hcnkg Ki8KIAkJCQkJCXsKIAkJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4 dCwgUFJJTUFSWV9OT0RFX0lEKTsKIAkJCQkJCX0KQEAgLTIxOTEsNyArMjQwNyw3IEBAIHdoZXJl X3RvX3NlbmRfbWFpbl9yZXBsaWNhKFBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlfY29udGV4dCwg Y2hhciAqcXVlcnksIE5vZGUKIAkJCQkJICogTm90IHN0cmVhbWluZyByZXBsaWNhdGlvbiBtb2Rl LCBvciBkZWxheV90aHJlc2hvbGQgaXMgMAogCQkJCQkgKiBvciByZXBsaWNhdGlvbiBkZWxheSBp cyBzbWFsbCBlbm91Z2guCiAJCQkJCSAqLwotCQkJCQllbHNlCQorCQkJCQllbHNlCiAJCQkJCXsK IAkJCQkJCXNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVf aWQgPSBzZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkOwogCQkJCQkJcG9vbF9z ZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsCmRpZmYgLS1naXQgYS9zcmMvY29udGV4 dC9wb29sX3Nlc3Npb25fY29udGV4dC5jIGIvc3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRl eHQuYwppbmRleCBkZWQ0MWM3ZmMuLmJlMzBmMWE3YyAxMDA2NDQKLS0tIGEvc3JjL2NvbnRleHQv cG9vbF9zZXNzaW9uX2NvbnRleHQuYworKysgYi9zcmMvY29udGV4dC9wb29sX3Nlc3Npb25fY29u dGV4dC5jCkBAIC01MzIsNyArNTMyLDcgQEAgZHVtcF9zZW50X21lc3NhZ2UoY2hhciAqY2FsbGVy LCBQT09MX1NFTlRfTUVTU0FHRSAqbSkKIHN0YXRpYyB2b2lkCiBkbWxfYWRhcHRpdmVfaW5pdCh2 b2lkKQogewotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUg PT0gRExCT1dfRE1MX0FEQVBUSVZFKQorCWlmIChETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9j b25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSkKIAl7CiAJCXNlc3Npb25fY29u dGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24gPSBmYWxzZTsKIAkJc2Vzc2lvbl9jb250ZXh0LT50cmFu c2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QgPSBOSUw7CkBAIC01NDIsNyArNTQyLDkgQEAgZG1sX2Fk YXB0aXZlX2luaXQodm9pZCkKIHN0YXRpYyB2b2lkCiBkbWxfYWRhcHRpdmVfZGVzdHJveSh2b2lk KQogewotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0g RExCT1dfRE1MX0FEQVBUSVZFICYmIHNlc3Npb25fY29udGV4dCkKKwlpZiAoRExCT1dfSVNfRE1M X0FEQVBUSVZFKAorCQkJCQkJCSAgcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlKSAmJgorCQlzZXNzaW9uX2NvbnRleHQpCiAJewogCQlpZiAoc2Vzc2lvbl9jb250ZXh0 LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QgIT0gTklMKQogCQkJbGlzdF9mcmVlX2RlZXAo c2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QpOwpAQCAtNzM4LDEw ICs3NDAsMTUgQEAgdm9pZAogcG9vbF9zZXRfd3JpdGluZ190cmFuc2FjdGlvbih2b2lkKQogewog CS8qCi0JICogSWYgZGlzYWJsZV90cmFuc2FjdGlvbl9vbl93cml0ZSBpcyAnb2ZmJyBvciAnZG1s X2FkYXB0aXZlJywgdGhlbiBuZXZlcgotCSAqIHR1cm4gb24gd3JpdGluZyB0cmFuc2FjdGlvbiBm bGFnLgorCSAqIElmIGRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlIGlzICdvZmYnIG9yICdk bWxfYWRhcHRpdmUnLCB0aGVuIG5ldmVyCisJICogdHVybiBvbiB3cml0aW5nIHRyYW5zYWN0aW9u IGZsYWcuIEZvciBkbWxfYWRhcHRpdmVfZ2xvYmFsIHdlIGRvIHNldCBpdAorCSAqIHNvIHRoYXQg dGhlIHF1ZXJ5IGNhY2hlIChtZW1xY2FjaGUpIGlzIHByb3Blcmx5IHNraXBwZWQgYWZ0ZXIgRE1M CisJICogd2l0aGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLgogCSAqLwotCWlmIChwb29sX2NvbmZp Zy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gRExCT1dfT0ZGICYmIHBvb2xfY29u ZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkUp CisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPQorCQlE TEJPV19PRkYgJiYKKwkJcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRl ICE9CisJCURMQk9XX0RNTF9BREFQVElWRSkKIAl7CiAJCXBvb2xfZ2V0X3Nlc3Npb25fY29udGV4 dChmYWxzZSktPndyaXRpbmdfdHJhbnNhY3Rpb24gPSB0cnVlOwogCQllcmVwb3J0KERFQlVHNSwK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvb2wuaCBiL3NyYy9pbmNsdWRlL3Bvb2wuaAppbmRl eCA2NTkwN2RjZjEuLjc5ZDc5ODhmYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9vbC5oCisr KyBiL3NyYy9pbmNsdWRlL3Bvb2wuaApAQCAtNDI0LDcgKzQyNCw3IEBAIHR5cGVkZWYgZW51bQog I2RlZmluZSBNaW4oeCwgeSkJCSgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCiAKIAotI2RlZmluZSBN QVhfTlVNX1NFTUFQSE9SRVMJCTgKKyNkZWZpbmUgTUFYX05VTV9TRU1BUEhPUkVTCQk5CiAjZGVm aW5lIENPTk5fQ09VTlRFUl9TRU0JCTAKICNkZWZpbmUgUkVRVUVTVF9JTkZPX1NFTQkJMQogI2Rl ZmluZSBRVUVSWV9DQUNIRV9TVEFUU19TRU0JMgpAQCAtNDM0LDYgKzQzNCw3IEBAIHR5cGVkZWYg ZW51bQogI2RlZmluZSBGT0xMT1dfUFJJTUFSWV9TRU0JCTYKICNkZWZpbmUgTUFJTl9FWElUX0hB TkRMRVJfU0VNCTcJLyogdXNlZCBpbiBleGl0X2hhbmRlciBpbiBwZ3Bvb2wgbWFpbgogCQkJCQkJ CQkJICogcHJvY2VzcyAqLworI2RlZmluZSBUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJMRV9TRU0J OAogI2RlZmluZSBNQVhfUkVRVUVTVF9RVUVVRV9TSVpFCTEwCiAKICNkZWZpbmUgTUFYX1NFQ19X QUlUX0ZPUl9DTFVTVEVSX1RSQU5TQUNUSU9OIDEwIC8qIHRpbWUgaW4gc2Vjb25kcyB0byBrZWVw CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oIGIvc3JjL2luY2x1ZGUvcG9v bF9jb25maWcuaAppbmRleCA5YTM5N2QxNjYuLmI4YWJhZGQ1MCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcG9vbF9jb25maWcuaAorKysgYi9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oCkBAIC0x MDUsOSArMTA1LDEzIEBAIHR5cGVkZWYgZW51bSBETEJPV19PUFRJT04KIAlETEJPV19UUkFOU0FD VElPTiwKIAlETEJPV19UUkFOU19UUkFOU0FDVElPTiwKIAlETEJPV19BTFdBWVMsCi0JRExCT1df RE1MX0FEQVBUSVZFCisJRExCT1dfRE1MX0FEQVBUSVZFLAorCURMQk9XX0RNTF9BREFQVElWRV9H TE9CQUwKIH0gRExCT1dfT1BUSU9OOwogCisjZGVmaW5lIERMQk9XX0lTX0RNTF9BREFQVElWRShv cHQpIFwKKwkoKG9wdCkgPT0gRExCT1dfRE1MX0FEQVBUSVZFIHx8IChvcHQpID09IERMQk9XX0RN TF9BREFQVElWRV9HTE9CQUwpCisKIHR5cGVkZWYgZW51bSBSRUxRVEFSR0VUX09QVElPTgogewog CVJFTFFUQVJHRVRfUFJJTUFSWSA9IDEsCkBAIC0zNjMsOCArMzY3LDIyIEBAIHR5cGVkZWYgc3Ry dWN0CiAJY2hhcgkgICAqc3JfY2hlY2tfcGFzc3dvcmQ7CS8qIHBhc3N3b3JkIGZvciBzcl9jaGVj a191c2VyICovCiAJY2hhcgkgICAqc3JfY2hlY2tfZGF0YWJhc2U7CS8qIFBvc3RncmVTUUwgZGF0 YWJhc2UgbmFtZSBmb3Igc3RyZWFtaW5nCiAJCQkJCQkJCQkgKiByZXBsaWNhdGlvbiBjaGVjayAq LwotCWNoYXIJICAgKnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQ7CS8qIGV4dGVybmFsIGNv bW1hbmQgZm9yIHJlcGxpY2F0aW9uIGRlbGF5ICovCi0JaW50CQkJcmVwbGljYXRpb25fZGVsYXlf c291cmNlX3RpbWVvdXQ7CS8qIHRpbWVvdXQgZm9yIGV4dGVybmFsIGNvbW1hbmQgaW4gc2Vjb25k cyAqLworCWNoYXIJICAgKnJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQ7CS8qIGV4dGVybmFs IGNvbW1hbmQgZm9yCisJCQkJCQkJCQkJCQkgKiByZXBsaWNhdGlvbiBkZWxheSAqLworCWludAkJ CXJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0OwkvKiB0aW1lb3V0IGZvciBleHRlcm5h bAorCQkJCQkJCQkJCQkJCSAqIGNvbW1hbmQgaW4gc2Vjb25kcyAqLworCisJLyogVHJhY2sgdGFi bGUgbXV0YXRpb24gY29uZmlndXJhdGlvbiAqLworCWRvdWJsZQkJdHJhY2tfdGFibGVfbXV0YXRp b25fdHRsX2ZhY3RvcjsJLyogVFRMIG11bHRpcGxpZXIgZm9yCisJCQkJCQkJCQkJCQkJICogcmVw bGljYXRpb24gZGVsYXkgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVu ZXNzOyAvKiBtYXggc3RhbGVuZXNzIGR1cmF0aW9uCisJCQkJCQkJCQkJCQkJICogbXMgKi8KKwlp bnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uOwkvKiBjb2xkIHN0 YXJ0IGR1cmF0aW9uCisJCQkJCQkJCQkJCQkJCQkgKiBtcyAqLworCWludAkJCXRyYWNrX3RhYmxl X211dGF0aW9uX3RhYmxlX2J1Y2tldHM7IC8qIGhhc2ggYnVja2V0cyBmb3IgdGFibGUKKwkJCQkJ CQkJCQkJCQkgKiBtYXAgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXpl OwkvKiBtYXggdGFibGUgbWFwIGVudHJpZXMgKi8KKwogCWNoYXIJICAgKmZhaWxvdmVyX2NvbW1h bmQ7CS8qIGV4ZWN1dGUgY29tbWFuZCB3aGVuIGZhaWxvdmVyIGhhcHBlbnMgKi8KIAljaGFyCSAg ICpmb2xsb3dfcHJpbWFyeV9jb21tYW5kOyAvKiBleGVjdXRlIGNvbW1hbmQgd2hlbiBmYWlsb3Zl ciBpcwogCQkJCQkJCQkJCSAqIGVuZGVkICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmggYi9zcmMvaW5jbHVkZS91dGlscy9wb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw Li5kZmJhYzY2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qIC0qLXBnc3FsLWMtKi0g Ki8KKy8qCisgKiBwZ3Bvb2w6IGEgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiBwb29s IHNlcnZlciBmb3IgUG9zdGdyZVNRTAorICogd3JpdHRlbiBieSBUYXRzdW8gSXNoaWkKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAyNglQZ1Bvb2wgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUg dGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBh bmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CisgKiBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIGNvcGllcyBhbmQgdGhhdCBi b3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uCisgKiBub3RpY2Ug YXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2Yg dGhlCisgKiBhdXRob3Igbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBl cnRhaW5pbmcgdG8KKyAqIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVj aWZpYywgd3JpdHRlbiBwcmlvcgorICogcGVybWlzc2lvbi4gVGhlIGF1dGhvciBtYWtlcyBubyBy ZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJl IGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcworICogaXMiIHdpdGhvdXQgZXhw cmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRp b24uaDogSW4tbWVtb3J5IHRyYWNraW5nIG9mCisgKiAgIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVz IHRvIHByZXZlbnQgc3RhbGUgcmVhZHMuCisgKi8KKworI2lmbmRlZiBQT09MX1RSQUNLX1RBQkxF X01VVEFUSU9OX0gKKyNkZWZpbmUgUE9PTF9UUkFDS19UQUJMRV9NVVRBVElPTl9ICisKKyNpbmNs dWRlICJwb29sLmgiCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworLyoKKyAqIEludmFsaWQgaW5k ZXggbWFya2VyIGZvciBsaW5rZWQgbGlzdHMKKyAqLworI2RlZmluZSBUUkFDS19UQUJMRV9NVVRB VElPTl9JTlZBTElEX0lOREVYCSgtMSkKKworLyoKKyAqIERlZmF1bHQgVFRMIGluIG1pY3Jvc2Vj b25kcyAoMTAwbXMpIHVzZWQgd2hlbiByZXBsaWNhdGlvbiBkZWxheSBpcyB1bmtub3duCisgKi8K KyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVMJKDEwMCAqIDEwMDAp CisKKy8qCisgKiBFbnRyeSBpbiB0aGUgdGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSAoa2V5ZWQg YnkgdGFibGUvZGF0YWJhc2Ugb2lkcykKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHJhY2tUYWJsZU11 dGF0aW9uRW50cnkKK3sKKwlpbnQJCQl0YWJsZV9vaWQ7CQkvKiBUYWJsZSBvaWQgKi8KKwlpbnQJ CQlkYm9pZDsJCQkvKiBEYXRhYmFzZSBvaWQgKi8KKwlzdHJ1Y3QgdGltZXZhbCBmaXJzdF93cml0 ZV90aW1lOwkvKiBXaGVuIHRoZSBlbnRyeSB3YXMgZmlyc3QgY3JlYXRlZCAqLworCXN0cnVjdCB0 aW1ldmFsIGxhc3Rfd3JpdGVfdGltZTsgLyogV2hlbiB0aGUgdGFibGUgd2FzIGxhc3Qgd3JpdHRl biAqLworCXVpbnQzMgkJaGFzaDsJCQkvKiBQcmUtY29tcHV0ZWQgaGFzaCB2YWx1ZSAqLworCWlu dAkJCW5leHQ7CQkJLyogTmV4dCBpbiBjb2xsaXNpb24gY2hhaW4gKi8KKwlib29sCQlpbl91c2U7 CQkJLyogSXMgdGhpcyBlbnRyeSBpbiB1c2U/ICovCit9IFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5 OworCisvKgorICogSGVhZGVyIGZvciB0aGUgdGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSBpbiBz aGFyZWQgbWVtb3J5CisgKi8KK3R5cGVkZWYgc3RydWN0IFRyYWNrVGFibGVNdXRhdGlvbkhhc2hU YWJsZQoreworCWludAkJCW51bV9idWNrZXRzOwkvKiBOdW1iZXIgb2YgaGFzaCBidWNrZXRzICov CisJaW50CQkJbWF4X2VudHJpZXM7CS8qIE1heGltdW0gZW50cmllcyBhbGxvd2VkICovCisJaW50 CQkJbnVtX2VudHJpZXM7CS8qIEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgKi8KKwlpbnQJCQlm cmVlX2xpc3RfaGVhZDsgLyogSGVhZCBvZiBmcmVlIGVudHJ5IGxpc3QgKi8KKworCS8qCisJICog RmxleGlibGUgYXJyYXkgbWVtYmVycyBmb2xsb3cgaW4gc2hhcmVkIG1lbW9yeTogaW50CisJICog YnVja2V0c1tudW1fYnVja2V0c107IFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5IGVudHJpZXNbbWF4 X2VudHJpZXNdOworCSAqLworfSBUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGU7CisKKy8qCisg KiBHbG9iYWwgc3RhdGUgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUKKyAqLwordHlw ZWRlZiBzdHJ1Y3QgVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUKK3sKKwlib29sCQlpbml0aWFsaXpl ZDsJLyogU2htZW0gaW5pdGlhbGl6ZWQ/ICovCisJdWludDY0CQljdXJyZW50X3R0bF91czsgLyog Q3VycmVudCBUVEwgaW4gbWljcm9zZWNvbmRzICovCisJc3RydWN0IHRpbWV2YWwgdHRsX2xhc3Rf dXBkYXRlZDsJLyogV2hlbiBUVEwgd2FzIGxhc3QgdXBkYXRlZCAqLworCXN0cnVjdCB0aW1ldmFs IGxhc3RfY2xlYW51cF90aW1lOwkvKiBXaGVuIGxhc3QgZXhwaXJlZCBjbGVhbnVwIHJhbiAqLwor CXN0cnVjdCB0aW1ldmFsIGdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsOyAvKiBHbG9iYWwgY29sZCBz dGFydCBlbmQgdGltZSAqLworCXVpbnQzMgkJc3RhdHNfcXVlcmllc19jaGVja2VkOwkvKiBRdWVy aWVzIGNoZWNrZWQgKi8KKwl1aW50MzIJCXN0YXRzX2ZvcmNlZF9wcmltYXJ5OwkvKiBGb3JjZWQg dG8gcHJpbWFyeSAqLworCXVpbnQzMgkJc3RhdHNfYWxsb3dlZF9yZXBsaWNhOwkvKiBBbGxvd2Vk IHRvIHJlcGxpY2EgKi8KK30gVHJhY2tUYWJsZU11dGF0aW9uU3RhdGU7CisKKy8qCisgKiBNYWlu IHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIGNvbnRhaW5pbmcgYWxsIGNvbXBvbmVudHMKKyAqLwor dHlwZWRlZiBzdHJ1Y3QgVHJhY2tUYWJsZU11dGF0aW9uU2htZW0KK3sKKwlUcmFja1RhYmxlTXV0 YXRpb25TdGF0ZSBzdGF0ZTsKKwlUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKnRhYmxlX21h cDsKK30gVHJhY2tUYWJsZU11dGF0aW9uU2htZW07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAq IFB1YmxpYyBBUEkgZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAq IEluaXRpYWxpemUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGZvciB0cmFjayB0YWJsZSBtdXRh dGlvbi4KKyAqIENhbGxlZCBmcm9tIHBncG9vbF9tYWluLmMgYWZ0ZXIgcG9vbF9pbml0X3Bvb2xf aW5mbygpLgorICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2luaXQo dm9pZCk7CisKKy8qCisgKiBJbml0aWFsaXplIHBlci1jaGlsZCBwcm9jZXNzIHN0YXRlIGZvciB0 cmFjayB0YWJsZSBtdXRhdGlvbi4KKyAqIENhbGxlZCBmcm9tIGNoaWxkLmMgd2hlbiBhIG5ldyBj aGlsZCBwcm9jZXNzIHN0YXJ0cy4KKyAqIFNldHMgdXAgY29sZCBzdGFydCB0cmFja2luZy4KKyAq LworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9jaGlsZF9pbml0KHZvaWQp OworCisvKgorICogQ2hlY2sgaWYgdGhlIGNoaWxkIHByb2Nlc3MgaXMgaW4gY29sZCBzdGFydCBw ZXJpb2QuCisgKiBEdXJpbmcgY29sZCBzdGFydCwgYWxsIHF1ZXJpZXMgYXJlIHJvdXRlZCB0byBw cmltYXJ5LgorICogUmV0dXJucyB0cnVlIGlmIGluIGNvbGQgc3RhcnQsIGZhbHNlIG90aGVyd2lz ZS4KKyAqLworZXh0ZXJuIGJvb2wgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbl9jb2xkX3N0 YXJ0KHZvaWQpOworCisvKgorICogVHJpZ2dlciBhIGdsb2JhbCBjb2xkIHN0YXJ0IHBlcmlvZCBm b3IgYWxsIHByb2Nlc3Nlcy4KKyAqIFVzZWQgYWZ0ZXIgd2F0Y2hkb2cgbGVhZGVyIGNoYW5nZSB0 byBhdm9pZCBzdGFsZSByZWFkcy4KKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190YWJsZV9t dXRhdGlvbl90cmlnZ2VyX2dsb2JhbF9jb2xkX3N0YXJ0KHZvaWQpOworCisvKgorICogR2V0IG9p ZCBvZiBjdXJyZW50IGRhdGFiYXNlLgorICovCitleHRlcm4gaW50CXBvb2xfdHJhY2tfdGFibGVf bXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZCh2b2lkKTsKKworLyoKKyAqIENoZWNrIGlmIGEgdGFi bGUgd2FzIHJlY2VudGx5IHdyaXR0ZW4gdG8gKGlzICJzdGFsZSIpLgorICogSWYgc3RhbGUsIHJl YWRzIGZyb20gdGhpcyB0YWJsZSBzaG91bGQgZ28gdG8gcHJpbWFyeS4KKyAqIFJldHVybnMgdHJ1 ZSBpZiB0YWJsZSBpcyBzdGFsZSAocmVjZW50bHkgd3JpdHRlbiksIGZhbHNlIG90aGVyd2lzZS4K KyAqLworZXh0ZXJuIGJvb2wgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9pc19zdGFs ZSgKKwkJCQkJCQkJCQkJCQkgaW50IHRhYmxlX29pZCwgaW50IGRib2lkKTsKKworLyoKKyAqIE1h cmsgdGFibGVzIGFzIHJlY2VudGx5IHdyaXR0ZW4uCisgKiBDYWxsZWQgYWZ0ZXIgSU5TRVJUL1VQ REFURS9ERUxFVEUgcXVlcmllcyBjb21wbGV0ZS4KKyAqIHRhYmxlX29pZHM6IGFycmF5IG9mIHRh YmxlIG9pZHMKKyAqIG51bV90YWJsZXM6IG51bWJlciBvZiB0YWJsZXMgaW4gYXJyYXkKKyAqIGRi b2lkOiBkYXRhYmFzZSBvaWQKKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRh dGlvbl9tYXJrX3RhYmxlc193cml0dGVuKAorCQkJCQkJCQkJCQkJCQkgIGNvbnN0IGludCAqdGFi bGVfb2lkcywgaW50IG51bV90YWJsZXMsIGludCBkYm9pZCk7CisKKy8qCisgKiBDb252ZW5pZW5j ZSBmdW5jdGlvbiB0byBtYXJrIGEgc2luZ2xlIHRhYmxlIGFzIHdyaXR0ZW4uCisgKiB0YWJsZV9v aWQ6IHRhYmxlIG9pZAorICogZGJvaWQ6IGRhdGFiYXNlIG9pZAorICovCitleHRlcm4gdm9pZCBw b29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVfd3JpdHRlbigKKwkJCQkJCQkJCQkJ CQkJIGludCB0YWJsZV9vaWQsIGludCBkYm9pZCk7CisKKy8qCisgKiBVcGRhdGUgdGhlIFRUTCBi YXNlZCBvbiBjdXJyZW50IHJlcGxpY2F0aW9uIGRlbGF5LgorICogQ2FsbGVkIGZyb20gcG9vbF93 b3JrZXJfY2hpbGQuYyB3aGVuIHJlcGxpY2F0aW9uIGRlbGF5IGlzIHVwZGF0ZWQuCisgKiBkZWxh eV91czogcmVwbGljYXRpb24gZGVsYXkgaW4gbWljcm9zZWNvbmRzCisgKi8KK2V4dGVybiB2b2lk IHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdXBkYXRlX3R0bCh1aW50NjQgZGVsYXlfdXMpOwor CisvKgorICogQ2FsY3VsYXRlIHJlcXVpcmVkIHNoYXJlZCBtZW1vcnkgc2l6ZSBmb3IgdHJhY2sg dGFibGUgbXV0YXRpb24uCisgKi8KK2V4dGVybiBTaXplIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRp b25fc2htZW1fc2l6ZSh2b2lkKTsKKworI2VuZGlmCQkJCQkJCS8qIFBPT0xfVFJBQ0tfVEFCTEVf TVVUQVRJT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vcGdwb29sX21haW4uYyBiL3NyYy9t YWluL3BncG9vbF9tYWluLmMKaW5kZXggMzJiY2IwYTFmLi5lNDFjNTc1YmUgMTAwNjQ0Ci0tLSBh L3NyYy9tYWluL3BncG9vbF9tYWluLmMKKysrIGIvc3JjL21haW4vcGdwb29sX21haW4uYwpAQCAt NTcsNiArNTcsNyBAQAogI2luY2x1ZGUgImF1dGgvcG9vbF9wYXNzd2QuaCIKICNpbmNsdWRlICJh dXRoL3Bvb2xfaGJhLmgiCiAjaW5jbHVkZSAicXVlcnlfY2FjaGUvcG9vbF9tZW1xY2FjaGUuaCIK KyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCiAjaW5jbHVkZSAi d2F0Y2hkb2cvd2RfaW50ZXJuYWxfY29tbWFuZHMuaCIKICNpbmNsdWRlICJ3YXRjaGRvZy93ZF9s aWZlY2hlY2suaCIKICNpbmNsdWRlICJ3YXRjaGRvZy93YXRjaGRvZy5oIgpAQCAtMTUwMSwxMSAr MTUwMiwxNCBAQCBzaWd1c3IxX2ludGVycnVwdF9wcm9jZXNzb3Iodm9pZCkKIAogCWlmICh1c2Vy MVNpZ25hbFNsb3QtPnNpZ25hbEZsYWdzW1NJR19XQVRDSERPR19TVEFURV9DSEFOR0VEXSkKIAl7 CisJCVdEX1NUQVRFUwl3ZF9zdGF0ZTsKKwogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJQ Z3Bvb2wtSUkgcGFyZW50IHByb2Nlc3MgcmVjZWl2ZWQgd2F0Y2hkb2cgc3RhdGUgY2hhbmdlIHNp Z25hbCBmcm9tIHdhdGNoZG9nIikpKTsKIAogCQl1c2VyMVNpZ25hbFNsb3QtPnNpZ25hbEZsYWdz W1NJR19XQVRDSERPR19TVEFURV9DSEFOR0VEXSA9IGZhbHNlOwotCQlpZiAod2RfaW50ZXJuYWxf Z2V0X3dhdGNoZG9nX2xvY2FsX25vZGVfc3RhdGUoKSA9PSBXRF9TVEFOREJZKQorCQl3ZF9zdGF0 ZSA9IHdkX2ludGVybmFsX2dldF93YXRjaGRvZ19sb2NhbF9ub2RlX3N0YXRlKCk7CisJCWlmICh3 ZF9zdGF0ZSA9PSBXRF9TVEFOREJZKQogCQl7CiAJCQllcmVwb3J0KExPRywKIAkJCQkJKGVycm1z Zygid2UgaGF2ZSBqb2luZWQgdGhlIHdhdGNoZG9nIGNsdXN0ZXIgYXMgU1RBTkRCWSBub2RlIiks CkBAIC0xNTE5LDYgKzE1MjMsMTIgQEAgc2lndXNyMV9pbnRlcnJ1cHRfcHJvY2Vzc29yKHZvaWQp CiAJCQkgKi8KIAkJCXBvb2xfcmVsZWFzZV9mb2xsb3dfcHJpbWFyeV9sb2NrKHRydWUpOwogCQl9 CisJCWVsc2UgaWYgKHdkX3N0YXRlID09IFdEX0NPT1JESU5BVE9SICYmCisJCQkJIHBvb2xfY29u ZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PQorCQkJCSBETEJPV19ETUxfQURB UFRJVkVfR0xPQkFMKQorCQl7CisJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RyaWdnZXJf Z2xvYmFsX2NvbGRfc3RhcnQoKTsKKwkJfQogCX0KIAlpZiAodXNlcjFTaWduYWxTbG90LT5zaWdu YWxGbGFnc1tTSUdfRkFJTE9WRVJfSU5URVJSVVBUXSkKIAl7CkBAIC0zMDg0LDYgKzMwOTQsMTYg QEAgaW5pdGlhbGl6ZV9zaGFyZWRfbWVtX29iamVjdHMoYm9vbCBjbGVhcl9tZW1jYWNoZV9vaWRt YXBzKQogCQllbG9nKERFQlVHMSwgIndhdGNoZG9nOiAlenUgYnl0ZXMgcmVxdWVzdGVkIGZvciBz aGFyZWQgbWVtb3J5IiwgTUFYQUxJR04od2RfaXBjX2dldF9zaGFyZWRfbWVtX3NpemUoKSkpOwog CX0KIAorCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0K KwkJRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwl7CisJCXNpemUgKz0gTUFYQUxJR04ocG9v bF90cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbV9zaXplKCkpOworCQllbG9nKERFQlVHMSwKKwkJ CSAidHJhY2tfdGFibGVfbXV0YXRpb246ICV6dSBieXRlcyByZXF1ZXN0ZWQiCisJCQkgIiBmb3Ig c2hhcmVkIG1lbW9yeSIsCisJCQkgTUFYQUxJR04ocG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9z aG1lbV9zaXplKCkpKTsKKwl9CisKIAlpbml0aWFsaXplX3NoYXJlZF9tZW1vcnlfbWFpbl9zZWdt ZW50KHNpemUpOwogCiAJLyogTW92ZSB0aGUgYmFja2VuZCBkZXNjcmlwdG9ycyB0byBzaGFyZWQg bWVtb3J5ICovCkBAIC0zMjAwLDYgKzMyMjAsMTMgQEAgaW5pdGlhbGl6ZV9zaGFyZWRfbWVtX29i amVjdHMoYm9vbCBjbGVhcl9tZW1jYWNoZV9vaWRtYXBzKQogCQl3ZF9pcGNfaW5pdGlhbGl6ZV9k YXRhKCk7CiAJfQogCisJLyogSW5pdGlhbGl6ZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmb3IgcmVj ZW50bHkgd3JpdHRlbiB0YWJsZXMgKi8KKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9i YWxhbmNlX29uX3dyaXRlID09CisJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJeworCQlw b29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2luaXQoKTsKKwl9CisKIH0KIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxldGUuYyBiL3NyYy9wcm90b2NvbC9Db21tYW5k Q29tcGxldGUuYwppbmRleCBhM2I4ZjBlYTEuLmY0NDVmMjY4YiAxMDA2NDQKLS0tIGEvc3JjL3By b3RvY29sL0NvbW1hbmRDb21wbGV0ZS5jCisrKyBiL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxl dGUuYwpAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgInV0aWxzL3BhbGxvYy5oIgogI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJlYW0uaCIKKyNp bmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCisjaW5jbHVkZSAicXVl cnlfY2FjaGUvcG9vbF9tZW1xY2FjaGUuaCIKIAogc3RhdGljIGludAlleHRyYWN0X250dXBsZXMo Y2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgUE9PTF9TVEFUVVMgaGFuZGxlX21pc21hdGNoX3R1cGxl cyhQT09MX0NPTk5FQ1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2Vu ZCwgY2hhciAqcGFja2V0LCBpbnQgcGFja2V0bGVuLCBib29sIGNvbW1hbmRfY29tcGxldGUpOwpA QCAtMzA0LDYgKzMwNiwzMiBAQCBoYW5kbGVfcXVlcnlfY29udGV4dChQT09MX0NPTk5FQ1RJT05f UE9PTCAqYmFja2VuZCkKIAogCW5vZGUgPSBzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2NvbnRleHQt PnBhcnNlX3RyZWU7CiAKKwkvKgorCSAqIFRyYWNrIHRhYmxlIHdyaXRlcyBmb3IgZG1sX2FkYXB0 aXZlX2dsb2JhbCBmZWF0dXJlLiBGb3IgYXV0b2NvbW1pdAorCSAqIHN0YXRlbWVudHMgKG5vdCBp biBleHBsaWNpdCB0cmFuc2FjdGlvbiksIG1hcmsgdGFibGVzIGltbWVkaWF0ZWx5LiBGb3IKKwkg KiBleHBsaWNpdCB0cmFuc2FjdGlvbnMsIG1hcmtpbmcgaXMgZGVmZXJyZWQgdG8gQ09NTUlUIGlu IGRtbF9hZGFwdGl2ZSgpCisJICogc28gdGhhdCBST0xMQkFDS2VkIHdyaXRlcyBkb24ndCBwb2xs dXRlIHRoZSBzaGFyZWQgbWVtb3J5IHRhYmxlIG1hcC4KKwkgKi8KKwlpZiAocG9vbF9jb25maWct PmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCURMQk9XX0RNTF9BREFQVElWRV9H TE9CQUwgJiYKKwkJbm9kZSAhPSBOVUxMICYmCisJCSFzZXNzaW9uX2NvbnRleHQtPmlzX2luX3Ry YW5zYWN0aW9uKQorCXsKKwkJaW50CQkgICAqb2lkczsKKwkJaW50CQkJbnVtX29pZHM7CisKKwkJ bnVtX29pZHMgPSBwb29sX2V4dHJhY3RfdGFibGVfb2lkcyhub2RlLCAmb2lkcyk7CisJCWlmIChu dW1fb2lkcyA+IDApCisJCXsKKwkJCWludAkJCWRib2lkOworCisJCQlkYm9pZCA9IHBvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZCgpOworCQkJaWYgKGRib2lkID4gMCkK KwkJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVzX3dyaXR0ZW4oCisJCQkJ CQkJCQkJCQkJCQkgIG9pZHMsIG51bV9vaWRzLCBkYm9pZCk7CisJCX0KKwl9CisKIAlpZiAoSXNB KG5vZGUsIFByZXBhcmVTdG10KSkKIAl7CiAJCWlmIChzZXNzaW9uX2NvbnRleHQtPnVuY29tcGxl dGVkX21lc3NhZ2UpCmRpZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvY2hpbGQuYyBiL3NyYy9wcm90 b2NvbC9jaGlsZC5jCmluZGV4IDc2MTg3NmY1My4uNGE1MjdjODRjIDEwMDY0NAotLS0gYS9zcmMv cHJvdG9jb2wvY2hpbGQuYworKysgYi9zcmMvcHJvdG9jb2wvY2hpbGQuYwpAQCAtNTcsNiArNTcs NyBAQAogI2luY2x1ZGUgInV0aWxzL2Vsb2cuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMu aCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uLmgiCiAKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfcHJvY2Vzc19j b250ZXh0LmgiCiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgpAQCAt MjEzLDYgKzIxNCwxMyBAQCBkb19jaGlsZChpbnQgKmZkcykKIAkvKiBJbml0aWFsaXplIHBlciBw cm9jZXNzIGNvbnRleHQgKi8KIAlwb29sX2luaXRfcHJvY2Vzc19jb250ZXh0KCk7CiAKKwkvKiBJ bml0aWFsaXplIHRyYWNrIHRhYmxlIG11dGF0aW9uIGNoaWxkIHN0YXRlIGZvciBjb2xkIHN0YXJ0 IHRyYWNraW5nICovCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93 cml0ZSA9PQorCQlETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCXsKKwkJcG9vbF90cmFja190 YWJsZV9tdXRhdGlvbl9jaGlsZF9pbml0KCk7CisJfQorCiAJLyogaW5pdGlhbGl6ZSBjb25uZWN0 aW9uIHBvb2wgKi8KIAlpZiAocG9vbF9pbml0X2NwKCkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL3By b3RvY29sL3Bvb2xfcHJvdG9fbW9kdWxlcy5jIGIvc3JjL3Byb3RvY29sL3Bvb2xfcHJvdG9fbW9k dWxlcy5jCmluZGV4IGY5NDU4YmI1NS4uNzRlZTAwZDE2IDEwMDY0NAotLS0gYS9zcmMvcHJvdG9j b2wvcG9vbF9wcm90b19tb2R1bGVzLmMKKysrIGIvc3JjL3Byb3RvY29sL3Bvb2xfcHJvdG9fbW9k dWxlcy5jCkBAIC0xNDYxLDcgKzE0NjEsOSBAQCBQYXJzZShQT09MX0NPTk5FQ1RJT04gKmZyb250 ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2VuZCwKIAkJcG9vbF93aGVyZV90b19zZW5k KHF1ZXJ5X2NvbnRleHQsIHF1ZXJ5X2NvbnRleHQtPm9yaWdpbmFsX3F1ZXJ5LAogCQkJCQkJICAg cXVlcnlfY29udGV4dC0+cGFyc2VfdHJlZSk7CiAKLQkJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxl X2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJVkUgJiYgc3RybGVuKG5h bWUpICE9IDApCisJCWlmIChETEJPV19JU19ETUxfQURBUFRJVkUoCisJCQkJCQkJCSAgcG9vbF9j b25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKQorCQkJJiYgc3RybGVuKG5hbWUp ICE9IDApCiAJCQlwb29sX3NldGFsbF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCk7CiAK IAkJaWYgKFJFUExJQ0FUSU9OKQpAQCAtMTgwNCw3ICsxODA2LDcgQEAgQmluZChQT09MX0NPTk5F Q1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2VuZCwKIAkJCXJldHVy biBQT09MX0VORDsKIAl9CiAKLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNl X29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSAmJgorCWlmIChETEJPV19JU19ETUxfQURB UFRJVkUocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSAmJgogCQlU U1RBVEUoYmFja2VuZCwgTUFJTl9SRVBMSUNBID8gUFJJTUFSWV9OT0RFX0lEIDogUkVBTF9NQUlO X05PREVfSUQpID09ICdUJykKIAl7CiAJCXBvb2xfd2hlcmVfdG9fc2VuZChxdWVyeV9jb250ZXh0 LCBxdWVyeV9jb250ZXh0LT5vcmlnaW5hbF9xdWVyeSwKZGlmZiAtLWdpdCBhL3NyYy9zYW1wbGUv cGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbSBiL3NyYy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxl LXN0cmVhbQppbmRleCAxYWM5ODI5MDcuLmNlOWI5MmRhMCAxMDA2NDQKLS0tIGEvc3JjL3NhbXBs ZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCisrKyBiL3NyYy9zYW1wbGUvcGdwb29sLmNvbmYu c2FtcGxlLXN0cmVhbQpAQCAtNDc4LDYgKzQ3OCwxNCBAQCBiYWNrZW5kX2NsdXN0ZXJpbmdfbW9k ZSA9IHN0cmVhbWluZ19yZXBsaWNhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjICAgICBtb2RpZmllZCB3aXRoaW4gdGhlIGN1cnJlbnQgZXhwbGljaXQgdHJhbnNhY3Rp b24gd2lsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3QgYmUg bG9hZCBiYWxhbmNlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIGRtbF9hZGFwdGl2ZV9nbG9iYWw6CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgICAgIFN1cGVyc2V0IG9mIGRtbF9hZGFwdGl2ZS4gSW4gYWRkaXRpb24gdG8g cGVyLXRyYW5zYWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAg IHRyYWNraW5nLCB1c2VzIHNoYXJlZCBtZW1vcnkgdG8gdHJhY2sgcmVjZW50bHkgd3JpdHRlbgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICB0YWJsZXMgYWNyb3NzIGFs bCBzZXNzaW9ucy4gUmVhZHMgZnJvbSByZWNlbnRseSB3cml0dGVuCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgICAgIHRhYmxlcyBhcmUgcm91dGVkIHRvIHByaW1hcnkgdW50 aWwgYSBUVEwgKGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg ICAgIHJlcGxpY2F0aW9uIGRlbGF5KSBleHBpcmVzLiBSZXF1aXJlcyBhZGRpdGlvbmFsIHNoYXJl ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBtZW1vcnkuIFNlZSB0 cmFja190YWJsZV9tdXRhdGlvbl8qIHBhcmFtZXRlcnMgYmVsb3cuCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBhbHdheXM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIGlmIGEg d3JpdGUgcXVlcnkgaXMgaXNzdWVkLCByZWFkIHF1ZXJpZXMgd2lsbAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjICAgICBub3QgYmUgbG9hZCBiYWxhbmNlZCB1bnRpbCB0aGUg c2Vzc2lvbiBlbmRzLgpAQCAtNDk5LDYgKzUwNyw0MyBAQCBiYWNrZW5kX2NsdXN0ZXJpbmdfbW9k ZSA9IHN0cmVhbWluZ19yZXBsaWNhdGlvbgogI3N0YXRlbWVudF9sZXZlbF9sb2FkX2JhbGFuY2Ug PSBvZmYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFbmFibGVzIHN0YXRl bWVudCBsZXZlbCBsb2FkIGJhbGFuY2luZwogCisjIC0gVHJhY2sgVGFibGUgTXV0YXRpb24gKHVz ZWQgYnkgZG1sX2FkYXB0aXZlX2dsb2JhbCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIFdBUk5JTkc6IGRtbF9hZGFwdGl2ZV9nbG9iYWwgaW5jcmVhc2VzIHNoYXJlZCBt ZW1vcnkgdXNhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEZWZhdWx0 IHNldHRpbmdzIHJlcXVpcmUgfjgwIEtCIHNoYXJlZCBtZW1vcnkgZm9yIHRhYmxlIHRyYWNraW5n CisKKyN0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yID0gNS4wCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgVFRMIG11bHRpcGxpZXI6IFRUTCA9IHJlcGxpY2F0aW9u X2RlbGF5ICogZmFjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGln aGVyIHZhbHVlcyBwcm92aWRlIG1vcmUgc2FmZXR5IG1hcmdpbgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIFJhbmdlOiAxLjAtMTAwLjAgKGRlZmF1bHQ6IDUuMCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlbG9hZCkK KworI3RyYWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3MgPSA2MDAwMAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heGltdW0gZHVyYXRpb24gKG1zKSBhIHRhYmxl IGNhbiBiZSBtYXJrZWQgc3RhbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBmcm9tIGl0cyBmaXJzdCB3cml0ZS4gQm91bmRzIGNyb3NzLXNlc3Npb24gaW1wYWN0OgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGV2ZW4gdW5kZXIgY29udGludW91cyB3 cml0ZXMsIHN0YWxlbmVzcyBleHBpcmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgYWZ0ZXIgdGhpcyBwZXJpb2QgYW5kIGlzIG9ubHkgcmVuZXdlZCBieSBuZXcgd3JpdGVz LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDAgZGlzYWJsZXMgdGhlIGNh cC4gUmFuZ2U6IDAtMzYwMDAwMCAoZGVmYXVsdDogNjAwMDAgPSA2MHMpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZWxvYWQpCisKKyN0cmFj a190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uID0gMjAwMAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byByb3V0 ZSBhbGwgcXVlcmllcyB0byBwcmltYXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgYWZ0ZXIgY2hpbGQgcHJvY2VzcyBzdGFydHMgKGNvbGQgc3RhcnQgcGVyaW9kKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiAwLTYwMDAwIG1zIChkZWZh dWx0OiAyMDAwIG1zID0gMiBzZWNvbmRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIFNldCB0byAwIHRvIGRpc2FibGUgY29sZCBzdGFydCBiZWhhdmlvcgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVsb2FkKQorCisj dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyA9IDEwMjQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciB0cmFjayB0 YWJsZSBtdXRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhpZ2hl ciB2YWx1ZXMgcmVkdWNlIGhhc2ggY29sbGlzaW9ucworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjIFJhbmdlOiA2NC02NTUzNiAoZGVmYXVsdDogMTAyNCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCisKKyN0 cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplID0gMjA0OAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIE1heGltdW0gbnVtYmVyIG9mIHRhYmxlcyB0byB0cmFjayBzaW11 bHRhbmVvdXNseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiAx MjgtMTMxMDcyIChkZWZhdWx0OiAyMDQ4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKworCiAjLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAjIFNUUkVBTUlORyBSRVBMSUNBVElPTiBNT0RFCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmRpZmYgLS1naXQgYS9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxk LmMgYi9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMKaW5kZXgg MzExYjYzODY1Li5jZGQ1NzAzOTYgMTAwNjQ0Ci0tLSBhL3NyYy9zdHJlYW1pbmdfcmVwbGljYXRp b24vcG9vbF93b3JrZXJfY2hpbGQuYworKysgYi9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bv b2xfd29ya2VyX2NoaWxkLmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJ1dGlscy9wb29s X2lwLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9v bF9zdHJlYW0uaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgi CiAKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfcHJvY2Vzc19jb250ZXh0LmgiCiAjaW5jbHVkZSAi Y29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgpAQCAtNDE5LDYgKzQyMCw3IEBAIGNoZWNr X3JlcGxpY2F0aW9uX3RpbWVfbGFnKHZvaWQpCiAJQmFja2VuZEluZm8gKmJraW5mbzsKIAl1aW50 NjQJCWxhZzsKIAl1aW50NjQJCWRlbGF5X3RocmVzaG9sZF9ieV90aW1lOworCXVpbnQ2NAkJbWF4 X2RlbGF5X3VzID0gMDsKIAlFcnJvckNvbnRleHRDYWxsYmFjayBjYWxsYmFjazsKIAlpbnQJCQlh Y3RpdmVfc3RhbmRieV9ub2RlOwogCWJvb2wJCXJlcGxpY2F0aW9uX2RlbGF5X2J5X3RpbWU7CkBA IC02NDMsNiArNjQ1LDEwIEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnKHZvaWQpCiAJCQkJ CQkJCQkJCQkJICogc2Vjb25kcyB0byBtaWNybwogCQkJCQkJCQkJCQkJCSAqIHNlY29uZHMgKi8K IAorCQkJCS8qIFRyYWNrIG1heCBkZWxheSBmb3IgbXV0YXRpb24gVFRMICovCisJCQkJaWYgKGxh ZyA+IG1heF9kZWxheV91cykKKwkJCQkJbWF4X2RlbGF5X3VzID0gbGFnOworCiAJCQkJLyogTG9n IGRlbGF5IGlmIG5lY2Vzc2FyeSAqLwogCQkJCWlmICgocG9vbF9jb25maWctPmxvZ19zdGFuZGJ5 X2RlbGF5ID09IExTRF9BTFdBWVMgJiYgbGFnID4gMCkgfHwKIAkJCQkJKHBvb2xfY29uZmlnLT5s b2dfc3RhbmRieV9kZWxheSA9PSBMU0RfT1ZFUl9USFJFU0hPTEQgJiYKQEAgLTY2OCw2ICs2NzQs MTMgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWcodm9pZCkKIAkJfQogCX0KIAorCS8qCisJ ICogVXBkYXRlIHRyYWNrIHRhYmxlIG11dGF0aW9uIFRUTCBmcm9tIHRoZSBtYXggb2JzZXJ2ZWQg dGltZS1iYXNlZAorCSAqIHJlcGxpY2F0aW9uIGRlbGF5LgorCSAqLworCWlmIChyZXBsaWNhdGlv bl9kZWxheV9ieV90aW1lICYmIG1heF9kZWxheV91cyA+IDApCisJCXBvb2xfdHJhY2tfdGFibGVf bXV0YXRpb25fdXBkYXRlX3R0bChtYXhfZGVsYXlfdXMpOworCiAJZXJyb3JfY29udGV4dF9zdGFj ayA9IGNhbGxiYWNrLnByZXZpb3VzOwogfQogCkBAIC02OTUsNiArNzA4LDcgQEAgY2hlY2tfcmVw bGljYXRpb25fdGltZV9sYWdfd2l0aF9jbWQodm9pZCkKIAlkb3VibGUJCWRlbGF5X21zOwogCXVp bnQ2NAkJZGVsYXk7CiAJdWludDY0CQlkZWxheV90aHJlc2hvbGRfYnlfdGltZTsKKwl1aW50NjQJ CW1heF9kZWxheV91cyA9IDA7CS8qIFRyYWNrIG1heCBkZWxheSBmb3IgbXV0YXRpb24gbWFwICov CiAJaW50CQkJdG9rZW5fY291bnQgPSAwOwogCWludAkJCXByaW1hcnlfbm9kZV9pZDsKIAlpbnQJ CQlzYXZlX2Vycm5vOwpAQCAtMTAwMyw2ICsxMDE3LDEwIEBAIGNoZWNrX3JlcGxpY2F0aW9uX3Rp bWVfbGFnX3dpdGhfY21kKHZvaWQpCiAJCQlia2luZm8tPnN0YW5kYnlfZGVsYXkgPSBkZWxheTsK IAkJCWJraW5mby0+c3RhbmRieV9kZWxheV9ieV90aW1lID0gdHJ1ZTsKIAorCQkJLyogVHJhY2sg bWF4aW11bSBkZWxheSBmb3IgdGFibGUgbXV0YXRpb24gbWFwIFRUTCBjYWxjdWxhdGlvbiAqLwor CQkJaWYgKGRlbGF5ID4gbWF4X2RlbGF5X3VzKQorCQkJCW1heF9kZWxheV91cyA9IGRlbGF5Owor CiAJCQkvKgogCQkJICogTG9nIGRlbGF5IGlmIG5lY2Vzc2FyeS4gdGhyZXNob2xkIGlzIGluIG1p bGxpc2Vjb25kcywgY29udmVydAogCQkJICogdG8gbWljcm9zZWNvbmRzLgpAQCAtMTAyMSw2ICsx MDM5LDEyIEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnX3dpdGhfY21kKHZvaWQpCiAJCQl0 b2tlbiA9IHN0cnRva19yKE5VTEwsICIgXHRcbiIsICZzYXZlcHRyKTsKIAkJfQogCisJCS8qIFVw ZGF0ZSB0YWJsZSBtdXRhdGlvbiBUVEwgYmFzZWQgb24gbWF4IG9ic2VydmVkIGRlbGF5ICovCisJ CWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJCURM Qk9XX0RNTF9BREFQVElWRV9HTE9CQUwgJiYKKwkJCW1heF9kZWxheV91cyA+IDApCisJCQlwb29s X3RyYWNrX3RhYmxlX211dGF0aW9uX3VwZGF0ZV90dGwobWF4X2RlbGF5X3VzKTsKKwogCX0KIAlQ R19DQVRDSCgpOwogCXsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5zaCBi L3NyYy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5zaAppbmRleCA3YzVhMGMxODIuLjFjOGFlMzkyZCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzc2lvbi9saWJzLnNoCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3Npb24vbGlicy5zaApAQCAtNDIsNiArNDIsOCBAQCBmdW5jdGlvbiB3YWl0X2Zvcl9mYWls b3Zlcl9kb25lIHsKIGZ1bmN0aW9uIGNsZWFuX2FsbCB7CiAJcGdyZXAgcGdwb29sIHwgeGFyZ3Mg a2lsbCAtOSA+IC9kZXYvbnVsbCAyPiYxCiAJcGdyZXAgcG9zdGdyZXMgfCB4YXJncyBraWxsIC05 ID4gL2Rldi9udWxsIDI+JjEKKwkjIENsZWFuIHVwIGxlYWtlZCBTeXNWIElQQyByZXNvdXJjZXMg bGVmdCBiZWhpbmQgYnkga2lsbCAtOQorCWlwY3JtIC0tYWxsIDI+L2Rldi9udWxsIHx8IHRydWUK IAlybSAtZiAkUEdTT0NLRVRfRElSLy5zLlBHU1FMLioKIAluZXRzdGF0IC10IC1wIDI+L2Rldi9u dWxsfGdyZXAgcGdwb29sCiB9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3Rz LzA0My50cmFja190YWJsZV9tdXRhdGlvbi90ZXN0LnNoIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90 ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb24vdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1 NQppbmRleCAwMDAwMDAwMDAuLjhiNGRkMTdiOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uL3Rlc3Quc2gKQEAgLTAs MCArMSwzNTQgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRlc3Qgc2Ny aXB0IGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlIChpbi1tZW1vcnkgdGFibGUgdHJh Y2tpbmcpLgorIyBUZXN0cyByb3V0aW5nIG9mIHF1ZXJpZXMgYmFzZWQgb24gcmVjZW50bHkgd3Jp dHRlbiB0YWJsZXMuCisjCitzb3VyY2UgJFRFU1RMSUJTCitURVNURElSPXRlc3RkaXIKK1BTUUw9 JFBHQklOL3BzcWwKK1BTUUxPUFRTPSItYSAtcSAtWCIKK1BHUE9PTEJJTj0kUEdQT09MX0lOU1RB TExfRElSL2JpbgorZXhwb3J0IFBHREFUQUJBU0U9dGVzdAorCisjIE9ubHkgcnVuIGluIHN0cmVh bWluZyByZXBsaWNhdGlvbiBtb2RlIHNpbmNlIHRoYXQncyB0aGUgdGFyZ2V0IHVzZSBjYXNlCitm b3IgbW9kZSBpbiBzCitkbworICAgIHJtIC1mciAkVEVTVERJUgorICAgIG1rZGlyICRURVNURElS CisgICAgY2QgJFRFU1RESVIKKworICAgICMgQ3JlYXRlIHRlc3QgZW52aXJvbm1lbnQgd2l0aCAy IG5vZGVzCisgICAgZWNobyAtbiAiY3JlYXRpbmcgdGVzdCBlbnZpcm9ubWVudC4uLiIKKyAgICAk UEdQT09MX1NFVFVQIC1tICRtb2RlIC1uIDIgfHwgZXhpdCAxCisgICAgZWNobyAiZG9uZS4iCisK KyAgICBzb3VyY2UgLi9iYXNocmMucG9ydHMKKworICAgICMgQ29uZmlndXJlIHRyYWNrIHRhYmxl IG11dGF0aW9uIGZlYXR1cmUgdmlhIGRtbF9hZGFwdGl2ZV9nbG9iYWwKKyAgICBlY2hvICJkaXNh YmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9ICdkbWxfYWRhcHRpdmVfZ2xvYmFsJyIgPj4gZXRj L3BncG9vbC5jb25mCisgICAgZWNobyAidHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9 IDUuMCIgPj4gZXRjL3BncG9vbC5jb25mCisgICAgZWNobyAidHJhY2tfdGFibGVfbXV0YXRpb25f Y29sZF9zdGFydF9kdXJhdGlvbiA9IDEwMDAwIiA+PiBldGMvcGdwb29sLmNvbmYKKworICAgICMg RW5hYmxlIGxvYWQgYmFsYW5jaW5nIGV4cGxpY2l0bHkKKyAgICBlY2hvICJsb2FkX2JhbGFuY2Vf bW9kZSA9IG9uIiA+PiBldGMvcGdwb29sLmNvbmYKKworICAgICMgQ29uZmlndXJlIHdlaWdodHMg c28gd2UgY2FuIGRpc3Rpbmd1aXNoIHJvdXRpbmcKKyAgICAjIEJhY2tlbmQgMCAocHJpbWFyeSkg d2VpZ2h0PTAsIEJhY2tlbmQgMSAoc3RhbmRieSkgd2VpZ2h0PTEKKyAgICAjIFRoaXMgbWVhbnMg bG9hZCBiYWxhbmNlZCBxdWVyaWVzIGdvIHRvIG5vZGUgMSBieSBkZWZhdWx0CisgICAgZWNobyAi YmFja2VuZF93ZWlnaHQwID0gMCIgPj4gZXRjL3BncG9vbC5jb25mCisgICAgZWNobyAiYmFja2Vu ZF93ZWlnaHQxID0gMSIgPj4gZXRjL3BncG9vbC5jb25mCisKKyAgICAjIEVuYWJsZSBkZWJ1ZyBs b2dnaW5nIHRvIHNlZSByb3V0aW5nIGRlY2lzaW9ucworICAgIGVjaG8gImxvZ19taW5fbWVzc2Fn ZXMgPSBkZWJ1ZzEiID4+IGV0Yy9wZ3Bvb2wuY29uZgorCisgICAgLi9zdGFydGFsbAorCisgICAg ZXhwb3J0IFBHUE9SVD0kUEdQT09MX1BPUlQKKyAgICBleHBvcnQgUEdIT1NUPWxvY2FsaG9zdAor CisgICAgd2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAKKworICAgICMgQ3JlYXRlIHRlc3QgdGFibGVz CisgICAgJFBTUUwgdGVzdCA8PEVPRgorQ1JFQVRFIFRBQkxFIHQxKGkgSU5URUdFUik7CitDUkVB VEUgVEFCTEUgdDIoaSBJTlRFR0VSKTsKK0NSRUFURSBUQUJMRSB0MyhpIElOVEVHRVIpOworRU9G CisKKyAgICBlY2hvICI9PT0gVGVzdCAxOiBDb2xkIFN0YXJ0IFJvdXRpbmcgPT09IgorICAgICMg RHVyaW5nIGNvbGQgc3RhcnQsIGFsbCBxdWVyaWVzIHNob3VsZCBnbyB0byBwcmltYXJ5CisgICAg IyBSZXN0YXJ0IHBncG9vbCB0byB0cmlnZ2VyIGNvbGQgc3RhcnQKKyAgICAuL3NodXRkb3duYWxs CisgICAgLi9zdGFydGFsbAorICAgIHdhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyAgICAjIElt bWVkaWF0ZWx5IHF1ZXJ5IC0gc2hvdWxkIGdvIHRvIHByaW1hcnkgZHVlIHRvIGNvbGQgc3RhcnQK KyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2NvbGRfc3RhcnRfdGVzdCcgYXMgbWFya2VyLCAq IEZST00gdDE7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIENoZWNrIGxvZyBmb3IgY29sZCBz dGFydCBtZXNzYWdlICh1c2UgLWEgdG8gaGFuZGxlIGJpbmFyeSBsb2cgZmlsZXMpCisgICAgaWYg Z3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIG9mIHRyYWNrIHRhYmxl IG11dGF0aW9uIGNvbGQgc3RhcnQiIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8g IlRlc3QgMSBQQVNTRUQ6IENvbGQgc3RhcnQgcm91dGluZyB3b3JrcyIKKyAgICBlbHNlCisgICAg ICAgIGVjaG8gIlRlc3QgMSBGQUlMRUQ6IENvbGQgc3RhcnQgcm91dGluZyBub3QgZGV0ZWN0ZWQi CisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVj aG8gIj09PSBUZXN0IDI6IFdhaXQgZm9yIGNvbGQgc3RhcnQgdG8gZW5kID09PSIKKyAgICAjIFdh aXQgZm9yIGNvbGQgc3RhcnQgcGVyaW9kIHRvIGVuZCAoMTAgc2Vjb25kcykuCisgICAgIyBVc2Ug Z2VuZXJvdXMgbWFyZ2luIHRvIGF2b2lkIGZsYWtpbmVzcyB1bmRlciBsb2FkIChlLmcuIGZ1bGwg cmVncmVzc2lvbiBzdWl0ZSkuCisgICAgc2xlZXAgMTIKKworICAgICMgQ2xlYXIgdGhlIGxvZwor ICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgTm93IGEgY2xlYW4gdGFibGUgcXVlcnkgc2hv dWxkIGxvYWQgYmFsYW5jZSAoZ28gdG8gbm9kZSAxKQorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVD VCAnYWZ0ZXJfY29sZF9zdGFydCcgYXMgbWFya2VyLCAqIEZST00gdDM7IiA+IC9kZXYvbnVsbCAy PiYxCisKKyAgICAjIEFmdGVyIGNvbGQgc3RhcnQsIHF1ZXJpZXMgdG8gY2xlYW4gdGFibGVzIHNo b3VsZCBsb2FkIGJhbGFuY2UKKyAgICAjIENoZWNrIHRoYXQgaXQgZGlkIE5PVCBnZXQgZm9yY2Vk IHRvIHByaW1hcnkgZHVlIHRvIHRyYWNrIHRhYmxlIG11dGF0aW9uCisgICAgaWYgZ3JlcCAtYSAt cSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIG9mIHRyYWNrIHRhYmxlIG11dGF0aW9u IGNvbGQgc3RhcnQiIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgMiBG QUlMRUQ6IFN0aWxsIGluIGNvbGQgc3RhcnQgYWZ0ZXIgd2FpdGluZyIKKyAgICAgICAgLi9zaHV0 ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGVjaG8gIlRlc3QgMiBQQVNTRUQ6 IENvbGQgc3RhcnQgZW5kZWQgY29ycmVjdGx5IgorCisgICAgZWNobyAiPT09IFRlc3QgMzogV3Jp dGUtdGhlbi1SZWFkIFJvdXRpbmcgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9n L3BncG9vbC5sb2cKKworICAgICMgV3JpdGUgdG8gdDEgYW5kIHRoZW4gcmVhZCAtIHVzZSBzaW5n bGUgY29ubmVjdGlvbiB0byBlbnN1cmUgc2FtZSBzZXNzaW9uCisgICAgJFBTUUwgdGVzdCA8PEVP RgorSU5TRVJUIElOVE8gdDEgVkFMVUVTICgxKTsKK1NFTEVDVCAnd3JpdGVfcmVhZF90ZXN0JyBh cyBtYXJrZXIsICogRlJPTSB0MTsKK0VPRgorCisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUg bG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgICMgQ2hlY2sgbG9nIGZvciB0YWJs ZSBzdGFsZW5lc3MgbWVzc2FnZQorICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJh bGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9n OyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgMyBQQVNTRUQ6IFdyaXRlLXRoZW4tcmVhZCByb3V0 aW5nIHdvcmtzIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCAzIEZBSUxFRDogVGFibGUg c3RhbGVuZXNzIG5vdCBkZXRlY3RlZCBhZnRlciB3cml0ZSIKKyAgICAgICAgIyBTaG93IHJlbGV2 YW50IGxvZyBlbnRyaWVzIGZvciBkZWJ1Z2dpbmcKKyAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tf dGFibGVfbXV0YXRpb24iIGxvZy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAgICAgICAgLi9zaHV0 ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgNDog Q2xlYW4gVGFibGUgU3RpbGwgTG9hZCBCYWxhbmNlcyA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9n CisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBSZWFkIGZyb20gdDIgKG5ldmVyIHdyaXR0 ZW4gdG8pIC0gc2hvdWxkIGxvYWQgYmFsYW5jZQorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAn Y2xlYW5fdGFibGVfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdDI7IiA+IC9kZXYvbnVsbCAyPiYx CisKKyAgICAjIFNob3VsZCBOT1Qgc2VlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGJsb2NraW5nIG1l c3NhZ2UgZm9yIHQyCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBi ZWNhdXNlIHRhYmxlLip0Mi4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0 aGVuCisgICAgICAgIGVjaG8gIlRlc3QgNCBGQUlMRUQ6IENsZWFuIHRhYmxlIGluY29ycmVjdGx5 IG1hcmtlZCBhcyBzdGFsZSIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEK KyAgICBmaQorICAgIGVjaG8gIlRlc3QgNCBQQVNTRUQ6IENsZWFuIHRhYmxlcyBzdGlsbCBsb2Fk IGJhbGFuY2UiCisKKyAgICBlY2hvICI9PT0gVGVzdCA1OiBVUERBVEUgTWFya3MgVGFibGUgYXMg U3RhbGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKwor ICAgICMgVXBkYXRlIHQyIGFuZCB0aGVuIHJlYWQgLSB1c2Ugc2luZ2xlIGNvbm5lY3Rpb24KKyAg ICAkUFNRTCB0ZXN0IDw8RU9GCitVUERBVEUgdDIgU0VUIGkgPSA5OTkgV0hFUkUgaSA9IDA7CitT RUxFQ1QgJ3VwZGF0ZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0MjsKK0VPRgorCisgICAgIyBT bWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAg IGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2Fz IHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRl c3QgNSBQQVNTRUQ6IFVQREFURSBtYXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAgICBlbHNlCisgICAg ICAgIGVjaG8gIlRlc3QgNSBGQUlMRUQ6IFVQREFURSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3Rh bGUiCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAg IGVjaG8gIj09PSBUZXN0IDY6IERFTEVURSBNYXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAg IyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBEZWxldGUgZnJv bSB0MyBhbmQgdGhlbiByZWFkIC0gdXNlIHNpbmdsZSBjb25uZWN0aW9uCisgICAgJFBTUUwgdGVz dCA8PEVPRgorREVMRVRFIEZST00gdDMgV0hFUkUgaSA9IDA7CitTRUxFQ1QgJ2RlbGV0ZV90ZXN0 JyBhcyBtYXJrZXIsICogRlJPTSB0MzsKK0VPRgorCisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1 cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgIGlmIGdyZXAgLWEgLXEgImNv dWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4i IGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgNiBQQVNTRUQ6IERFTEVU RSBtYXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgNiBG QUlMRUQ6IERFTEVURSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIC4vc2h1 dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDc6 IFRSVU5DQVRFIE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cK KyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIENyZWF0ZSBhIGZyZXNoIHRhYmxlIGZvciBU UlVOQ0FURSB0ZXN0CisgICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfdHJ1bmNhdGUo aSBJTlRFR0VSKTsiID4gL2Rldi9udWxsIDI+JjEKKyAgICAkUFNRTCB0ZXN0IC1jICJJTlNFUlQg SU5UTyB0X3RydW5jYXRlIFZBTFVFUyAoMSksICgyKSwgKDMpOyIgPiAvZGV2L251bGwgMj4mMQor CisgICAgIyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAgIHNsZWVwIDMKKworICAgICMg Q2xlYXIgdGhlIGxvZyBhZ2FpbgorICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgVHJ1bmNh dGUgYW5kIHRoZW4gcmVhZCAtIHVzZSBzaW5nbGUgY29ubmVjdGlvbgorICAgICRQU1FMIHRlc3Qg PDxFT0YKK1RSVU5DQVRFIHRfdHJ1bmNhdGU7CitTRUxFQ1QgJ3RydW5jYXRlX3Rlc3QnIGFzIG1h cmtlciwgKiBGUk9NIHRfdHJ1bmNhdGU7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5z dXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJj b3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVu IiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDcgUEFTU0VEOiBUUlVO Q0FURSBtYXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3Qg NyBGQUlMRUQ6IFRSVU5DQVRFIGRpZCBub3QgbWFyayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAg Z3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0YXRpb24iIGxvZy9wZ3Bvb2wubG9nIHwgdGFpbCAt MjAKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAg ZWNobyAiPT09IFRlc3QgODogV0lUSCBDbGF1c2UgKENURSB3aXRoIERFTEVURSkgTWFya3MgVGFi bGUgYXMgU3RhbGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5s b2cKKworICAgICMgQ3JlYXRlIGEgZnJlc2ggdGFibGUgZm9yIFdJVEggdGVzdAorICAgICRQU1FM IHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0X2N0ZShpIElOVEVHRVIpOyIgPiAvZGV2L251bGwgMj4m MQorICAgICRQU1FMIHRlc3QgLWMgIklOU0VSVCBJTlRPIHRfY3RlIFZBTFVFUyAoMSksICgyKSwg KDMpOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGly ZQorICAgIHNsZWVwIDMKKworICAgICMgQ2xlYXIgdGhlIGxvZyBhZ2FpbgorICAgID4gbG9nL3Bn cG9vbC5sb2cKKworICAgICMgVXNlIFdJVEggY2xhdXNlIHdpdGggREVMRVRFLCB0aGVuIHJlYWQg ZnJvbSB0aGUgdGFibGUKKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitXSVRIIGRlbGV0ZWQgQVMgKERF TEVURSBGUk9NIHRfY3RlIFdIRVJFIGkgPSAxIFJFVFVSTklORyAqKQorU0VMRUNUICogRlJPTSBk ZWxldGVkOworU0VMRUNUICdjdGVfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdF9jdGU7CitFT0YK KworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAg MC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2Ug dGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAg ICBlY2hvICJUZXN0IDggUEFTU0VEOiBXSVRIIGNsYXVzZSAoQ1RFKSBtYXJrcyB0YWJsZSBhcyBz dGFsZSIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgOCBGQUlMRUQ6IFdJVEggY2xhdXNl IChDVEUpIGRpZCBub3QgbWFyayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgZ3JlcCAtYSAtaSAi dHJhY2tfdGFibGVfbXV0YXRpb24iIGxvZy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAgICAgICAg Li9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgIyBUZXN0IDk6IE1F UkdFIChQb3N0Z3JlU1FMIDE1KyBvbmx5KQorICAgIFBHX01BSk9SX1ZFUlNJT049JCgkUFNRTCAt dCAtYyAiU0VMRUNUIHN1YnN0cmluZyh2ZXJzaW9uKCkgZnJvbSAnUG9zdGdyZVNRTCAoWzAtOV0r KScpOyIgfCB0ciAtZCAnICcpCisgICAgaWYgWyAiJFBHX01BSk9SX1ZFUlNJT04iIC1nZSAxNSBd IDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gIj09PSBUZXN0IDk6IE1FUkdFIE1hcmtz IFRhYmxlIGFzIFN0YWxlIChQb3N0Z3JlU1FMICRQR19NQUpPUl9WRVJTSU9OKSA9PT0iCisgICAg ICAgICMgQ2xlYXIgdGhlIGxvZworICAgICAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAgICAg IyBDcmVhdGUgdGFibGVzIGZvciBNRVJHRSB0ZXN0CisgICAgICAgICRQU1FMIHRlc3QgLWMgIkNS RUFURSBUQUJMRSB0X21lcmdlX3RhcmdldChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCB2YWwgVEVY VCk7IiA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAgICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJM RSB0X21lcmdlX3NvdXJjZShpZCBJTlRFR0VSLCB2YWwgVEVYVCk7IiA+IC9kZXYvbnVsbCAyPiYx CisgICAgICAgICRQU1FMIHRlc3QgLWMgIklOU0VSVCBJTlRPIHRfbWVyZ2VfdGFyZ2V0IFZBTFVF UyAoMSwgJ29sZCcpOyIgPiAvZGV2L251bGwgMj4mMQorICAgICAgICAkUFNRTCB0ZXN0IC1jICJJ TlNFUlQgSU5UTyB0X21lcmdlX3NvdXJjZSBWQUxVRVMgKDEsICduZXcnKSwgKDIsICdpbnNlcnQn KTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICAgICAjIFdhaXQgZm9yIGFueSBUVEwgdG8gZXhw aXJlCisgICAgICAgIHNsZWVwIDMKKworICAgICAgICAjIENsZWFyIHRoZSBsb2cgYWdhaW4KKyAg ICAgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgICAgICMgVXNlIE1FUkdFLCB0aGVuIHJlYWQg ZnJvbSB0aGUgdGFyZ2V0IHRhYmxlCisgICAgICAgICRQU1FMIHRlc3QgPDxFT0YKK01FUkdFIElO VE8gdF9tZXJnZV90YXJnZXQgdAorVVNJTkcgdF9tZXJnZV9zb3VyY2UgcyBPTiB0LmlkID0gcy5p ZAorV0hFTiBNQVRDSEVEIFRIRU4gVVBEQVRFIFNFVCB2YWwgPSBzLnZhbAorV0hFTiBOT1QgTUFU Q0hFRCBUSEVOIElOU0VSVCBWQUxVRVMgKHMuaWQsIHMudmFsKTsKK1NFTEVDVCAnbWVyZ2VfdGVz dCcgYXMgbWFya2VyLCAqIEZST00gdF9tZXJnZV90YXJnZXQ7CitFT0YKKworICAgICAgICAjIFNt YWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgICAgICBzbGVlcCAwLjUKKwor ICAgICAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFi bGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICAg ICAgZWNobyAiVGVzdCA5IFBBU1NFRDogTUVSR0UgbWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIlRlc3QgOSBGQUlMRUQ6IE1FUkdFIGRpZCBub3Qg bWFyayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxl X211dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgICAgICAuL3NodXRk b3duYWxsCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICBlbHNlCisgICAgICAg IGVjaG8gIj09PSBUZXN0IDk6IE1FUkdFIHNraXBwZWQgKHJlcXVpcmVzIFBvc3RncmVTUUwgMTUr LCBoYXZlICRQR19NQUpPUl9WRVJTSU9OKSA9PT0iCisgICAgZmkKKworICAgIGVjaG8gIj09PSBU ZXN0IDEwOiBST0xMQkFDSyBEb2VzIE5PVCBNYXJrIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAj IENyZWF0ZSBhIGZyZXNoIHRhYmxlIGZvciByb2xsYmFjayB0ZXN0CisgICAgJFBTUUwgdGVzdCAt YyAiQ1JFQVRFIFRBQkxFIHRfcm9sbGJhY2soaSBJTlRFR0VSKTsiID4gL2Rldi9udWxsIDI+JjEK KworICAgICMgV2FpdCBmb3IgYW55IFRUTCB0byBleHBpcmUKKyAgICBzbGVlcCAzCisKKyAgICAj IENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFdyaXRlIGluc2lk ZSBhIHRyYW5zYWN0aW9uLCB0aGVuIHJvbGxiYWNrCisgICAgJFBTUUwgdGVzdCA8PEVPRgorQkVH SU47CitJTlNFUlQgSU5UTyB0X3JvbGxiYWNrIFZBTFVFUyAoMSk7CitST0xMQkFDSzsKK1NFTEVD VCAncm9sbGJhY2tfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdF9yb2xsYmFjazsKK0VPRgorCisg ICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUK KworICAgICMgU2hvdWxkIE5PVCBzZWUgdF9yb2xsYmFjayBtYXJrZWQgYXMgc3RhbGUgc2luY2Ug dGhlIHdyaXRlIHdhcyByb2xsZWQgYmFjaworICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBs b2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qdF9yb2xsYmFjay4qd2FzIHJlY2VudGx5IHdyaXR0 ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgMTAgRkFJTEVEOiBS b2xsZWQtYmFjayB3cml0ZSBpbmNvcnJlY3RseSBtYXJrZWQgdGFibGUgYXMgc3RhbGUiCisgICAg ICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRh aWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAg ICBlY2hvICJUZXN0IDEwIFBBU1NFRDogUk9MTEJBQ0sgZG9lcyBub3QgbWFyayB0YWJsZSBhcyBz dGFsZSIKKworICAgIGVjaG8gIj09PSBUZXN0IDExOiBDT01NSVQgTWFya3MgVGFibGUgYXMgU3Rh bGUgPT09IgorICAgICMgQ3JlYXRlIGEgZnJlc2ggdGFibGUgZm9yIGNvbW1pdCB0ZXN0CisgICAg JFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfY29tbWl0KGkgSU5URUdFUik7IiA+IC9kZXYv bnVsbCAyPiYxCisKKyAgICAjIFdhaXQgZm9yIGFueSBUVEwgdG8gZXhwaXJlCisgICAgc2xlZXAg MworCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBX cml0ZSBpbnNpZGUgYSB0cmFuc2FjdGlvbiwgdGhlbiBjb21taXQsIHRoZW4gcmVhZAorICAgICRQ U1FMIHRlc3QgPDxFT0YKK0JFR0lOOworSU5TRVJUIElOVE8gdF9jb21taXQgVkFMVUVTICgxKTsK K0NPTU1JVDsKK1NFTEVDVCAnY29tbWl0X3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHRfY29tbWl0 OworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAg IHNsZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBi ZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4K KyAgICAgICAgZWNobyAiVGVzdCAxMSBQQVNTRUQ6IENPTU1JVCBtYXJrcyB0YWJsZSBhcyBzdGFs ZSIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgMTEgRkFJTEVEOiBDb21taXR0ZWQgd3Jp dGUgZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBncmVwIC1hIC1pICJ0cmFj a190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAuL3No dXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICIiCisgICAgZWNo byAiPT09IEFsbCBUcmFjayBUYWJsZSBNdXRhdGlvbiBUZXN0cyBQQVNTRUQgPT09IgorCisgICAg Li9zaHV0ZG93bmFsbAorCisgICAgY2QgLi4KK2RvbmUKKworZXhpdCAwCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0NC50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRv Zy90ZXN0LnNoIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDQudHJhY2tfdGFibGVfbXV0 YXRpb25fd2F0Y2hkb2cvdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAw MDAuLmM1MGMyMTNkNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVz dHMvMDQ0LnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3Rlc3Quc2gKQEAgLTAsMCArMSwx ODQgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3Qgc2NyaXB0IGZv ciB0cmFjayB0YWJsZSBtdXRhdGlvbiBnbG9iYWwgY29sZCBzdGFydAorIyBvbiB3YXRjaGRvZyBs ZWFkZXIgY2hhbmdlLgorIworIyBVc2VzICRXQVRDSERPR19TRVRVUCB0byBjcmVhdGUgYSAyLW5v ZGUgd2F0Y2hkb2cgY2x1c3RlciwKKyMgdGhlbiB2ZXJpZmllcyB0aGF0IHdoZW4gdGhlIGxlYWRl ciBpcyBzdG9wcGVkIHRoZSBuZXcKKyMgbGVhZGVyIHRyaWdnZXJzIGEgZ2xvYmFsIGNvbGQgc3Rh cnQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorc291cmNlICRURVNUTElCUworVEVTVERJUj10ZXN0ZGlyCitQU1FM PSRQR0JJTi9wc3FsCitzdWNjZXNzX2NvdW50PTAKKworZGlyPWBwd2RgCitybSAtZnIgJFRFU1RE SVIKK21rZGlyICRURVNURElSCitjZCAkVEVTVERJUgorCisjIENyZWF0ZSAyLW5vZGUgd2F0Y2hk b2cgY2x1c3RlcgorJFdBVENIRE9HX1NFVFVQIC13biAyIHx8IGV4aXQgMQorCisjIEVuc3VyZSBw ZXItbm9kZSBzY3JpcHRzIGFyZSBleGVjdXRhYmxlCisjIChzZWQgLWkgaW4gd2F0Y2hkb2dfc2V0 dXAgY2FuIHN0cmlwIHBlcm1pc3Npb25zKQorY2htb2QgNzU1IHBncG9vbCovc3RhcnRhbGwgcGdw b29sKi9zaHV0ZG93bmFsbAorCisjIEFwcGVuZCB0cmFja190YWJsZV9tdXRhdGlvbiBjb25maWcg dG8gYm90aCBub2RlcworZm9yIGkgaW4gMCAxCitkbworCWNhdCA+PiBwZ3Bvb2wke2l9L2V0Yy9w Z3Bvb2wuY29uZiA8PEVPRgorZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSAnZG1sX2Fk YXB0aXZlX2dsb2JhbCcKK3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24g PSAyMDAwCitlbmFibGVfY29uc2Vuc3VzX3dpdGhfaGFsZl92b3RlcyA9IG9uCitsb2dfbWluX21l c3NhZ2VzID0gZGVidWcxCitFT0YKK2RvbmUKKworLi9zdGFydGFsbAorZXhwb3J0IFBDUFBBU1NG SUxFPSRkaXIvJFRFU1RESVIvcGdwb29sMC9wY3BwYXNzCisKKyMgV2FpdCBmb3Igd2F0Y2hkb2cg bGlmZWNoZWNrIG9uIG5vZGUgMAorZWNobyAtbiAid2FpdGluZyBmb3Igd2F0Y2hkb2cgbm9kZSAw IHN0YXJ0aW5nIHVwLi4uIgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3Jl cCAibGlmZWNoZWNrIHN0YXJ0ZWQiIFwKKwkJcGdwb29sMC9sb2cvcGdwb29sLmxvZyA+IC9kZXYv bnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlicmVhaworCWZpCisJc2xlZXAgMgor ZG9uZQorZWNobyAiZG9uZS4iCisKKyMgVGVzdCAxOiBWZXJpZnkgbGVhZGVyIGNhbWUgdXAKK2Vj aG8gIj09PSBUZXN0IDE6IFdhaXRpbmcgZm9yIHRoZSBwZ3Bvb2wgbGVhZGVyLi4uID09PSIKK2Zv ciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWdyZXAgIkkgYW0gdGhlIGNsdXN0ZXIg bGVhZGVyIG5vZGUiIFwKKwkJcGdwb29sMC9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYx CisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50 ICsgMSApKQorCQllY2hvICJUZXN0IDEgUEFTU0VEOiBMZWFkZXIgYnJvdWdodCB1cC4iCisJCWJy ZWFrCisJZmkKKwllY2hvICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKworaWYg WyAkc3VjY2Vzc19jb3VudCAtbHQgMSBdOyB0aGVuCisJZWNobyAiVGVzdCAxIEZBSUxFRDogTGVh ZGVyIGRpZCBub3Qgc3RhcnQiCisJLi9zaHV0ZG93bmFsbAorCWV4aXQgMQorZmkKKworIyBUZXN0 IDI6IFZlcmlmeSBzdGFuZGJ5IGpvaW5lZCBjbHVzdGVyCitlY2hvICI9PT0gVGVzdCAyOiBXYWl0 aW5nIGZvciBzdGFuZGJ5IHRvIGpvaW4uLi4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4 IDkgMTAKK2RvCisJZ3JlcCAic3VjY2Vzc2Z1bGx5IGpvaW5lZCB0aGUgd2F0Y2hkb2cgY2x1c3Rl ciIgXAorCQlwZ3Bvb2wxL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ ID0gMCBdOyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkpCisJ CWVjaG8gIlRlc3QgMiBQQVNTRUQ6IFN0YW5kYnkgam9pbmVkLiIKKwkJYnJlYWsKKwlmaQorCWVj aG8gIltjaGVja10gJGkgdGltZXMiCisJc2xlZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2Nv dW50IC1sdCAyIF07IHRoZW4KKwllY2hvICJUZXN0IDIgRkFJTEVEOiBTdGFuZGJ5IGRpZCBub3Qg am9pbiIKKwkuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgMzogVmVyaWZ5IHRy YWNrX3RhYmxlX211dGF0aW9uIGluaXRpYWxpemVkCitlY2hvICI9PT0gVGVzdCAzOiBWZXJpZnkg ZmVhdHVyZSBpbml0aWFsaXplZCA9PT0iCitpZiBncmVwIC1hICJ0cmFja190YWJsZV9tdXRhdGlv bjogaW5pdGlhbGl6ZWQiIFwKKwlwZ3Bvb2wwL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+ JjE7IHRoZW4KKwlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCWVjaG8g IlRlc3QgMyBQQVNTRUQ6IEZlYXR1cmUgaW5pdGlhbGl6ZWQuIgorZWxzZQorCWVjaG8gIlRlc3Qg MyBGQUlMRUQ6IEZlYXR1cmUgbm90IGluaXRpYWxpemVkIgorCS4vc2h1dGRvd25hbGwKKwlleGl0 IDEKK2ZpCisKKyMgVGVzdCA0OiBTdG9wIGxlYWRlciAocGdwb29sMCkgdG8gdHJpZ2dlciBmYWls b3ZlcgorZWNobyAiPT09IFRlc3QgNDogU3RvcHBpbmcgbGVhZGVyLi4uID09PSIKK2NkIHBncG9v bDAKK3NvdXJjZSAuL2Jhc2hyYy5wb3J0cworJFBHUE9PTF9JTlNUQUxMX0RJUi9iaW4vcGdwb29s IFwKKwktZiBldGMvcGdwb29sLmNvbmYgLW0gZiBzdG9wCitjZCAuLgorCitlY2hvICJDaGVja2lu ZyBzdGFuZGJ5IGRldGVjdGVkIHNodXRkb3duLi4uIgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4 IDkgMTAKK2RvCisJZ3JlcCAtYSAiaXMgc2h1dHRpbmcgZG93biIgXAorCQlwZ3Bvb2wxL2xvZy9w Z3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nl c3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8gIlRlc3QgNCBQQVNTRUQ6 IFNodXRkb3duIGRldGVjdGVkLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGlt ZXMiCisJc2xlZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCA0IF07IHRoZW4K KwllY2hvICJUZXN0IDQgRkFJTEVEOiBTaHV0ZG93biBub3QgZGV0ZWN0ZWQiCisJLi9zaHV0ZG93 bmFsbAorCWV4aXQgMQorZmkKKworIyBUZXN0IDU6IFZlcmlmeSBzdGFuZGJ5IGJlY2FtZSBuZXcg bGVhZGVyCitlY2hvICI9PT0gVGVzdCA1OiBDaGVja2luZyBzdGFuZGJ5IHRha2VzIG92ZXIuLi4g PT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAtYSAiSSBhbSB0 aGUgY2x1c3RlciBsZWFkZXIgbm9kZSIgXAorCQlwZ3Bvb2wxL2xvZy9wZ3Bvb2wubG9nID4gL2Rl di9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1 Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8gIlRlc3QgNSBQQVNTRUQ6IFN0YW5kYnkgYmVjYW1l IGxlYWRlci4iCisJCWJyZWFrCisJZmkKKwllY2hvICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVw IDIKK2RvbmUKKworaWYgWyAkc3VjY2Vzc19jb3VudCAtbHQgNSBdOyB0aGVuCisJZWNobyAiVGVz dCA1IEZBSUxFRDogU3RhbmRieSBkaWQgbm90IGJlY29tZSBsZWFkZXIiCisJLi9zaHV0ZG93bmFs bAorCWV4aXQgMQorZmkKKworIyBUZXN0IDY6IFZlcmlmeSBnbG9iYWwgY29sZCBzdGFydCB3YXMg dHJpZ2dlcmVkCitlY2hvICI9PT0gVGVzdCA2OiBDaGVja2luZyBnbG9iYWwgY29sZCBzdGFydC4u LiA9PT0iCitmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMAorZG8KKwlncmVwIC1hICJ0cmFj a190YWJsZV9tdXRhdGlvbjogZ2xvYmFsIGNvbGQgc3RhcnQiIFwKKwkJcGdwb29sMS9sb2cvcGdw b29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNz X2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDYgUEFTU0VEOiBH bG9iYWwgY29sZCBzdGFydCB0cmlnZ2VyZWQuIgorCQlicmVhaworCWZpCisJZWNobyAiW2NoZWNr XSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisKKyMgQ2xlYW51cAorLi9zaHV0ZG93bmFsbAor CitlY2hvICIiCitlY2hvICIkc3VjY2Vzc19jb3VudCBvdXQgb2YgNiBzdWNjZXNzZnVsIgorCitp ZiB0ZXN0ICRzdWNjZXNzX2NvdW50IC1lcSA2Cit0aGVuCisJZWNobyAiPT09IEFsbCBXYXRjaGRv ZyBUZXN0cyBQQVNTRUQgPT09IgorCWV4aXQgMAorZmkKKworZXhpdCAxCmRpZmYgLS1naXQgYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CmluZGV4IDkzOTIwMDk2NS4uNDY3ZWMxMTRjIDEwMDY0NAotLS0gYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdApAQCAtNTE5LDYgKzUxOSwxMCBAQCBUYWJsZUxpa2VDbGF1c2UKIFRhYmxlU2FtcGxl Q2xhdXNlCiBUYXJnZXRFbnRyeQogVG9rZW5pemVkTGluZQorVHJhY2tUYWJsZU11dGF0aW9uRW50 cnkKK1RyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZQorVHJhY2tUYWJsZU11dGF0aW9uU2htZW0K K1RyYWNrVGFibGVNdXRhdGlvblN0YXRlCiBUcmFuc2FjdGlvbklkCiBUcmFuc2FjdGlvblN0bXQK IFRyYW5zYWN0aW9uU3RtdEtpbmQKZGlmZiAtLWdpdCBhL3NyYy91dGlscy9wb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uLmMgYi9zcmMvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZTc3NzFlN2JmCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYwpAQCAtMCwwICsx LDkwMiBAQAorLyogLSotcGdzcWwtYy0qLSAqLworLyoKKyAqIHBncG9vbDogYSBsYW5ndWFnZSBp bmRlcGVuZGVudCBjb25uZWN0aW9uIHBvb2wgc2VydmVyIGZvciBQb3N0Z3JlU1FMCisgKiB3cml0 dGVuIGJ5IFRhdHN1byBJc2hpaQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDI2CVBnUG9v bCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3Vt ZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKKyAqIGdy YW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGlu IGFsbAorICogY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24KKyAqIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0 aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUKKyAqIGF1dGhvciBub3QgYmUgdXNlZCBpbiBh ZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworICogZGlzdHJpYnV0aW9uIG9m IHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNz aW9uLiBUaGUgYXV0aG9yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1 aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlk ZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgor ICogcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jOiBJbi1tZW1vcnkgdHJhY2tpbmcgb2YgcmVj ZW50bHkKKyAqICAgd3JpdHRlbiB0YWJsZXMgdG8gcHJldmVudCBzdGFsZSByZWFkcyBmcm9tIHJl cGxpY2FzLgorICoKKyAqIEJhc2VkIG9uIHRoZSAibGFnbGVzcyIgYXJjaGl0ZWN0dXJlIGZyb20g VGFpbG9yIEJyYW5kcy4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3Rk bGliLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lu Y2x1ZGUgInBvb2wuaCIKKyNpbmNsdWRlICJwb29sX2NvbmZpZy5oIgorI2luY2x1ZGUgImNvbnRl eHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uLmgiCisjaW5jbHVkZSAidXRpbHMvZWxvZy5oIgorI2luY2x1ZGUgInV0aWxz L3Bvb2xfaXBjLmgiCisjaW5jbHVkZSAidXRpbHMvcGFsbG9jLmgiCisjaW5jbHVkZSAidXRpbHMv cG9vbF9yZWxjYWNoZS5oIgorCisjZGVmaW5lIERBVEFCQVNFX1RPX09JRF9RVUVSWSBcCisJIlNF TEVDVCBvaWQgRlJPTSBwZ19jYXRhbG9nLnBnX2RhdGFiYXNlIiBcCisJIiBXSEVSRSBkYXRuYW1l ID0gJyVzJyIKKworLyoKKyAqIEhlbHBlciBtYWNybzogdHJ1ZSB3aGVuIHRoZSBmZWF0dXJlIGlz IG5vdCBhY3RpdmUuCisgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fRElTQUJMRUQo KSBcCisJKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBcCisJ IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgfHwgXAorCSB0cmFja190YWJsZV9tdXRhdGlvbl9z aG1lbSA9PSBOVUxMKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXMK KyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBQb2ludGVyIHRvIHNoYXJlZCBtZW1vcnkg c3RydWN0dXJlICovCitzdGF0aWMgVHJhY2tUYWJsZU11dGF0aW9uU2htZW0gKnRyYWNrX3RhYmxl X211dGF0aW9uX3NobWVtID0gTlVMTDsKKworLyogUGVyLXByb2Nlc3MgY29sZCBzdGFydCB0cmFj a2luZyAobm90IGluIHNoYXJlZCBtZW1vcnkpICovCitzdGF0aWMgc3RydWN0IHRpbWV2YWwgcHJv Y2Vzc19zdGFydF90aW1lOworc3RhdGljIGJvb2wgY29sZF9zdGFydF9pbml0aWFsaXplZCA9IGZh bHNlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBIZWxwZXIgbWFjcm9zIGZvciBmbGV4aWJs ZSBhcnJheXMgaW4gc2hhcmVkIG1lbW9yeQorICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8q IEdldCBwb2ludGVyIHRvIGJ1Y2tldCBhcnJheSBpbiB0YWJsZSBtYXAgKi8KKyNkZWZpbmUgVEFC TEVfTUFQX0JVQ0tFVFMobWFwKSBcCisJKChpbnQgKikoKGNoYXIgKikobWFwKSArIFwKKwkJc2l6 ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSkpKQorCisvKiBHZXQgcG9pbnRlciB0byBl bnRyeSBhcnJheSBpbiB0YWJsZSBtYXAgKi8KKyNkZWZpbmUgVEFCTEVfTUFQX0VOVFJJRVMobWFw KSBcCisJKChUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqKSgoY2hhciAqKShtYXApICsgXAorCQlz aXplb2YoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlKSArIFwKKwkJKG1hcCktPm51bV9idWNr ZXRzICogc2l6ZW9mKGludCkpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBTZW1hcGhvcmUg bG9jayBoZWxwZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIGlubGluZSB2 b2lkCit0YWJsZV9tYXBfbG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBob3JlX2xvY2soVFJBQ0tf VEFCTEVfTVVUQVRJT05fVEFCTEVfU0VNKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJs ZV9tYXBfdW5sb2NrKHZvaWQpCit7CisJcG9vbF9zZW1hcGhvcmVfdW5sb2NrKFRSQUNLX1RBQkxF X01VVEFUSU9OX1RBQkxFX1NFTSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIEhhc2gg ZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEZOVi0xYSBoYXNo IGZvciB0YWJsZS9kYXRhYmFzZSBvaWQgcGFpcgorICovCitzdGF0aWMgdWludDMyCitmbnYxYV9o YXNoX3RhYmxlX2tleShpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQpCit7CisJdWludDMyCQloYXNo ID0gMjE2NjEzNjI2MXU7IC8qIEZOViBvZmZzZXQgYmFzaXMgKi8KKwl1aW50MzIJCWRhdGFbMl07 CisJY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXM7CisJc2l6ZV90CQlpOworCisJZGF0YVswXSA9 ICh1aW50MzIpIHRhYmxlX29pZDsKKwlkYXRhWzFdID0gKHVpbnQzMikgZGJvaWQ7CisJYnl0ZXMg PSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBkYXRhOworCisJZm9yIChpID0gMDsgaSA8IHNpemVv ZihkYXRhKTsgaSsrKQorCXsKKwkJaGFzaCBePSBieXRlc1tpXTsKKwkJaGFzaCAqPSAxNjc3NzYx OXU7CQkvKiBGTlYgcHJpbWUgKi8KKwl9CisKKwlyZXR1cm4gaGFzaDsKK30KKworLyogLS0tLS0t LS0tLS0tLS0tLQorICogVGltZSB1dGlsaXRpZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisvKgorICogR2V0IGVsYXBzZWQgdGltZSBpbiBtaWNyb3NlY29uZHMgYmV0d2VlbiB0d28gdGlt ZXZhbHMKKyAqLworc3RhdGljIGludDY0CitlbGFwc2VkX3VzKHN0cnVjdCB0aW1ldmFsICpzdGFy dCwgc3RydWN0IHRpbWV2YWwgKmVuZCkKK3sKKwlyZXR1cm4gKChpbnQ2NCkgKGVuZC0+dHZfc2Vj IC0gc3RhcnQtPnR2X3NlYykgKiAxMDAwMDAwKQorCQkrIChlbmQtPnR2X3VzZWMgLSBzdGFydC0+ dHZfdXNlYyk7Cit9CisKKy8qCisgKiBHZXQgY3VycmVudCB0aW1lCisgKi8KK3N0YXRpYyB2b2lk CitnZXRfY3VycmVudF90aW1lKHN0cnVjdCB0aW1ldmFsICp0dikKK3sKKwlnZXR0aW1lb2ZkYXko dHYsIE5VTEwpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBEYXRhYmFzZSBvaWQgbG9v a3VwCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIGludAordHJhY2tfdGFibGVf bXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZF9pbnRlcm5hbCh2b2lkKQoreworCWludAkJCW9pZCA9 IDA7CisJc3RhdGljIFBPT0xfUkVMQ0FDSEUgKnJlbGNhY2hlOworCVBPT0xfQ09OTkVDVElPTl9Q T09MICpiYWNrZW5kOworCVBPT0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQ7CisK KwkvKiBTYWZldHkgY2hlY2s6IG11c3QgaGF2ZSBzaG1lbSBpbml0aWFsaXplZCAqLworCWlmICh0 cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbSA9PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJc2Vz c2lvbl9jb250ZXh0ID0gcG9vbF9nZXRfc2Vzc2lvbl9jb250ZXh0KGZhbHNlKTsKKwlpZiAoc2Vz c2lvbl9jb250ZXh0ID09IE5VTEwpCisJCXJldHVybiBvaWQ7CisKKwliYWNrZW5kID0gc2Vzc2lv bl9jb250ZXh0LT5iYWNrZW5kOworCWlmIChiYWNrZW5kID09IE5VTEwgfHwKKwkJTUFJTl9DT05O RUNUSU9OKGJhY2tlbmQpID09IE5VTEwgfHwKKwkJTUFJTl9DT05ORUNUSU9OKGJhY2tlbmQpLT5z cCA9PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJLyogRW5zdXJlIGRhdGFiYXNlIG5hbWUgaXMg dmFsaWQgKi8KKwlpZiAoTUFJTl9DT05ORUNUSU9OKGJhY2tlbmQpLT5zcC0+ZGF0YWJhc2UgPT0g TlVMTCkKKwkJcmV0dXJuIG9pZDsKKworCWlmICghcmVsY2FjaGUpCisJeworCQlyZWxjYWNoZSA9 IHBvb2xfY3JlYXRlX3JlbGNhY2hlKAorCQkJCQkJCQkJCXBvb2xfY29uZmlnLT5yZWxjYWNoZV9z aXplLAorCQkJCQkJCQkJCURBVEFCQVNFX1RPX09JRF9RVUVSWSwKKwkJCQkJCQkJCQlpbnRfcmVn aXN0ZXJfZnVuYywKKwkJCQkJCQkJCQlpbnRfdW5yZWdpc3Rlcl9mdW5jLAorCQkJCQkJCQkJCWZh bHNlKTsKKwkJaWYgKHJlbGNhY2hlID09IE5VTEwpCisJCXsKKwkJCWVyZXBvcnQoTE9HLAorCQkJ CQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkJCSJlcnJvciBjcmVhdGlu ZyByZWxjYWNoZSIpKSk7CisJCQlyZXR1cm4gb2lkOworCQl9CisJfQorCisJb2lkID0gKGludCkg KGludHB0cl90KSBwb29sX3NlYXJjaF9yZWxjYWNoZSgKKwkJCQkJCQkJCQkJCXJlbGNhY2hlLCBi YWNrZW5kLAorCQkJCQkJCQkJCQkJTUFJTl9DT05ORUNUSU9OKGJhY2tlbmQpLT5zcC0+ZGF0YWJh c2UpOworCXJldHVybiBvaWQ7Cit9CisKK2ludAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9n ZXRfZGF0YWJhc2Vfb2lkKHZvaWQpCit7CisJcmV0dXJuIHRyYWNrX3RhYmxlX211dGF0aW9uX2dl dF9kYXRhYmFzZV9vaWRfaW50ZXJuYWwoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICog VGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSBvcGVyYXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0t CisgKi8KKworLyoKKyAqIEluaXRpYWxpemUgdGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZQorICov CitzdGF0aWMgdm9pZAordGFibGVfbWFwX2luaXQoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxl ICptYXAsCisJCQkgICBpbnQgbnVtX2J1Y2tldHMsIGludCBtYXhfZW50cmllcykKK3sKKwlpbnQJ CSAgICpidWNrZXRzOworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzOworCWludAkJ CWk7CisJaW50CQkJaW52YWxpZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7 CisKKwltYXAtPm51bV9idWNrZXRzID0gbnVtX2J1Y2tldHM7CisJbWFwLT5tYXhfZW50cmllcyA9 IG1heF9lbnRyaWVzOworCW1hcC0+bnVtX2VudHJpZXMgPSAwOworCW1hcC0+ZnJlZV9saXN0X2hl YWQgPSAwOworCisJYnVja2V0cyA9IFRBQkxFX01BUF9CVUNLRVRTKG1hcCk7CisJZW50cmllcyA9 IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisKKwkvKiBJbml0aWFsaXplIGFsbCBidWNrZXRzIHRv IGVtcHR5ICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspCisJCWJ1Y2tldHNb aV0gPSBpbnZhbGlkOworCisJLyogSW5pdGlhbGl6ZSBmcmVlIGxpc3QgLSBjaGFpbiBhbGwgZW50 cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfZW50cmllczsgaSsrKQorCXsKKwkJZW50cmll c1tpXS5pbl91c2UgPSBmYWxzZTsKKwkJZW50cmllc1tpXS5uZXh0ID0gKGkgPCBtYXhfZW50cmll cyAtIDEpID8KKwkJCWkgKyAxIDogaW52YWxpZDsKKwl9CisKKwllcmVwb3J0KERFQlVHMSwKKwkJ CShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJCSJ0YWJsZSBtYXAgaW5pdCAl ZCBidWNrZXRzLCAiCisJCQkJCSIlZCBtYXggZW50cmllcyIsCisJCQkJCW51bV9idWNrZXRzLCBt YXhfZW50cmllcykpKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGFuIGVudHJ5IGZyb20gdGhlIGZy ZWUgbGlzdAorICovCitzdGF0aWMgaW50Cit0YWJsZV9tYXBfYWxsb2NfZW50cnkoVHJhY2tUYWJs ZU11dGF0aW9uSGFzaFRhYmxlICptYXApCit7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVu dHJpZXM7CisJaW50CQkJaWR4OworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElP Tl9JTlZBTElEX0lOREVYOworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisK KwlpZiAobWFwLT5mcmVlX2xpc3RfaGVhZCA9PSBpbnZhbGlkKQorCQlyZXR1cm4gaW52YWxpZDsK KworCWlkeCA9IG1hcC0+ZnJlZV9saXN0X2hlYWQ7CisJbWFwLT5mcmVlX2xpc3RfaGVhZCA9IGVu dHJpZXNbaWR4XS5uZXh0OworCWVudHJpZXNbaWR4XS5pbl91c2UgPSB0cnVlOworCWVudHJpZXNb aWR4XS5uZXh0ID0gaW52YWxpZDsKKwltYXAtPm51bV9lbnRyaWVzKys7CisKKwlyZXR1cm4gaWR4 OworfQorCisvKgorICogRnJlZSBhbiBlbnRyeSBiYWNrIHRvIHRoZSBmcmVlIGxpc3QKKyAqLwor c3RhdGljIHZvaWQKK3RhYmxlX21hcF9mcmVlX2VudHJ5KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hU YWJsZSAqbWFwLAorCQkJCQkgaW50IGlkeCkKK3sKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAq ZW50cmllczsKKworCWVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCisJZW50cmll c1tpZHhdLmluX3VzZSA9IGZhbHNlOworCWVudHJpZXNbaWR4XS5uZXh0ID0gbWFwLT5mcmVlX2xp c3RfaGVhZDsKKwltYXAtPmZyZWVfbGlzdF9oZWFkID0gaWR4OworCW1hcC0+bnVtX2VudHJpZXMt LTsKK30KKworLyoKKyAqIExvb2sgdXAgYSB0YWJsZSBpbiB0aGUgaGFzaCB0YWJsZS4KKyAqIFJl dHVybnMgZW50cnkgaW5kZXggb3IgSU5WQUxJRF9JTkRFWCBpZiBub3QgZm91bmQuCisgKiBNdXN0 IGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZC4KKyAqLworc3RhdGljIGludAordGFibGVfbWFwX2xv b2t1cChUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCwKKwkJCQkgaW50IHRhYmxlX29p ZCwgaW50IGRib2lkLAorCQkJCSB1aW50MzIgaGFzaCkKK3sKKwlpbnQJCSAgICpidWNrZXRzID0g VEFCTEVfTUFQX0JVQ0tFVFMobWFwKTsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmll czsKKwlpbnQJCQlidWNrZXQgPSBoYXNoICUgbWFwLT5udW1fYnVja2V0czsKKwlpbnQJCQlpZHgg PSBidWNrZXRzW2J1Y2tldF07CisJaW50CQkJaW52YWxpZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9O X0lOVkFMSURfSU5ERVg7CisKKwllbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwor CXdoaWxlIChpZHggIT0gaW52YWxpZCkKKwl7CisJCWlmIChlbnRyaWVzW2lkeF0uaGFzaCA9PSBo YXNoICYmCisJCQllbnRyaWVzW2lkeF0udGFibGVfb2lkID09IHRhYmxlX29pZCAmJgorCQkJZW50 cmllc1tpZHhdLmRib2lkID09IGRib2lkKQorCQl7CisJCQlyZXR1cm4gaWR4OworCQl9CisJCWlk eCA9IGVudHJpZXNbaWR4XS5uZXh0OworCX0KKworCXJldHVybiBpbnZhbGlkOworfQorCisvKgor ICogSW5zZXJ0IG9yIHVwZGF0ZSBhIHRhYmxlIGVudHJ5LgorICogTXVzdCBiZSBjYWxsZWQgd2l0 aCBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkCit0YWJsZV9tYXBfaW5zZXJ0KFRyYWNrVGFi bGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLAorCQkJCSBpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQs CisJCQkJIHVpbnQzMiBoYXNoLAorCQkJCSBzdHJ1Y3QgdGltZXZhbCAqd3JpdGVfdGltZSkKK3sK KwlpbnQJCSAgICpidWNrZXRzID0gVEFCTEVfTUFQX0JVQ0tFVFMobWFwKTsKKwlUcmFja1RhYmxl TXV0YXRpb25FbnRyeSAqZW50cmllczsKKwlpbnQJCQlidWNrZXQgPSBoYXNoICUgbWFwLT5udW1f YnVja2V0czsKKwlpbnQJCQlpZHg7CisJaW50CQkJaW52YWxpZCA9IFRSQUNLX1RBQkxFX01VVEFU SU9OX0lOVkFMSURfSU5ERVg7CisKKwllbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsK KworCS8qIENoZWNrIGlmIGVudHJ5IGFscmVhZHkgZXhpc3RzICovCisJaWR4ID0gdGFibGVfbWFw X2xvb2t1cChtYXAsIHRhYmxlX29pZCwgZGJvaWQsIGhhc2gpOworCWlmIChpZHggIT0gaW52YWxp ZCkKKwl7CisJCS8qIFVwZGF0ZSBsYXN0IHdyaXRlIHRpbWU7IGtlZXAgZmlyc3Rfd3JpdGVfdGlt ZSAqLworCQllbnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lID0gKndyaXRlX3RpbWU7CisJCXJl dHVybjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgZW50cnkgKi8KKwlpZHggPSB0YWJsZV9tYXBf YWxsb2NfZW50cnkobWFwKTsKKwlpZiAoaWR4ID09IGludmFsaWQpCisJeworCQlpbnQJCQliOwor CisJCS8qIFRhYmxlIGlzIGZ1bGwgLSBldmljdCBmaXJzdCBub24tZW1wdHkgYnVja2V0ICovCisJ CWZvciAoYiA9IDA7IGIgPCBtYXAtPm51bV9idWNrZXRzOyBiKyspCisJCXsKKwkJCWlmIChidWNr ZXRzW2JdICE9IGludmFsaWQpCisJCQl7CisJCQkJaW50CQkJdmljdGltID0gYnVja2V0c1tiXTsK KworCQkJCWJ1Y2tldHNbYl0gPSBlbnRyaWVzW3ZpY3RpbV0ubmV4dDsKKwkJCQl0YWJsZV9tYXBf ZnJlZV9lbnRyeShtYXAsIHZpY3RpbSk7CisJCQkJaWR4ID0gdGFibGVfbWFwX2FsbG9jX2VudHJ5 KG1hcCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaWR4ID09IGludmFsaWQpCisJ CXsKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRp b246ICIKKwkJCQkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIGVudHJ5ICIKKwkJCQkJCQkiZm9yIG9p ZCAlZCAoZGJvaWQgJWQpIiwKKwkJCQkJCQl0YWJsZV9vaWQsIGRib2lkKSkpOworCQkJcmV0dXJu OworCQl9CisJfQorCisJLyogSW5pdGlhbGl6ZSBuZXcgZW50cnkgKi8KKwllbnRyaWVzW2lkeF0u dGFibGVfb2lkID0gdGFibGVfb2lkOworCWVudHJpZXNbaWR4XS5kYm9pZCA9IGRib2lkOworCWVu dHJpZXNbaWR4XS5oYXNoID0gaGFzaDsKKwllbnRyaWVzW2lkeF0uZmlyc3Rfd3JpdGVfdGltZSA9 ICp3cml0ZV90aW1lOworCWVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUgPSAqd3JpdGVfdGlt ZTsKKworCS8qIEluc2VydCBhdCBoZWFkIG9mIGJ1Y2tldCBjaGFpbiAqLworCWVudHJpZXNbaWR4 XS5uZXh0ID0gYnVja2V0c1tidWNrZXRdOworCWJ1Y2tldHNbYnVja2V0XSA9IGlkeDsKKworCWVy ZXBvcnQoREVCVUcyLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJ Im1hcmtlZCBvaWQgJWQgKGRib2lkICVkKSB3cml0dGVuIiwKKwkJCQkJdGFibGVfb2lkLCBkYm9p ZCkpKTsKK30KKworLyoKKyAqIFJlbW92ZSBleHBpcmVkIGVudHJpZXMgZnJvbSB0aGUgdGFibGUg bWFwLgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lk Cit0YWJsZV9tYXBfY2xlYW51cF9leHBpcmVkKAorCQkJCQkJICBUcmFja1RhYmxlTXV0YXRpb25I YXNoVGFibGUgKm1hcCwgdWludDY0IHR0bF91cykKK3sKKwlpbnQJCSAgICpidWNrZXRzID0gVEFC TEVfTUFQX0JVQ0tFVFMobWFwKTsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsK KwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50NjQJCW1heF9zdGFsZV91czsKKwlpbnQJCQlyZW1v dmVkID0gMDsKKwlpbnQJCQliOworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElP Tl9JTlZBTElEX0lOREVYOworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisJ Z2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKworCW1heF9zdGFsZV91cyA9IChpbnQ2NCkgcG9vbF9j b25maWcKKwkJLT50cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzICogMTAwMExMOwor CisJZm9yIChiID0gMDsgYiA8IG1hcC0+bnVtX2J1Y2tldHM7IGIrKykKKwl7CisJCWludAkJICAg KnByZXZfcHRyID0gJmJ1Y2tldHNbYl07CisJCWludAkJCWlkeCA9IGJ1Y2tldHNbYl07CisKKwkJ d2hpbGUgKGlkeCAhPSBpbnZhbGlkKQorCQl7CisJCQlpbnQ2NAkJYWdlOworCQkJaW50NjQJCXRv dGFsX2FnZTsKKwkJCWJvb2wJCWV4cGlyZWQ7CisKKwkJCWFnZSA9IGVsYXBzZWRfdXMoCisJCQkJ CQkJICZlbnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lLCAmbm93KTsKKwkJCWV4cGlyZWQgPSAo YWdlID4gKGludDY0KSB0dGxfdXMpOworCisJCQkvKgorCQkJICogQWxzbyBldmljdCBlbnRyaWVz IHRoYXQgZXhjZWVkIG1heF9zdGFsZW5lc3MgZnJvbSBmaXJzdCB3cml0ZS4KKwkJCSAqLworCQkJ aWYgKCFleHBpcmVkICYmIG1heF9zdGFsZV91cyA+IDApCisJCQl7CisJCQkJdG90YWxfYWdlID0g ZWxhcHNlZF91cygKKwkJCQkJCQkJCSAgICZlbnRyaWVzW2lkeF0uZmlyc3Rfd3JpdGVfdGltZSwK KwkJCQkJCQkJCSAgICZub3cpOworCQkJCWV4cGlyZWQgPSAodG90YWxfYWdlID49IG1heF9zdGFs ZV91cyk7CisJCQl9CisKKwkJCWlmIChleHBpcmVkKQorCQkJeworCQkJCS8qIEVudHJ5IGhhcyBl eHBpcmVkIC0gcmVtb3ZlIGl0ICovCisJCQkJaW50CQkJbmV4dCA9IGVudHJpZXNbaWR4XS5uZXh0 OworCisJCQkJKnByZXZfcHRyID0gbmV4dDsKKwkJCQl0YWJsZV9tYXBfZnJlZV9lbnRyeShtYXAs IGlkeCk7CisJCQkJaWR4ID0gbmV4dDsKKwkJCQlyZW1vdmVkKys7CisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJcHJldl9wdHIgPSAmZW50cmllc1tpZHhdLm5leHQ7CisJCQkJaWR4ID0gZW50cmll c1tpZHhdLm5leHQ7CisJCQl9CisJCX0KKwl9CisKKwlpZiAocmVtb3ZlZCA+IDApCisJeworCQll cmVwb3J0KERFQlVHMSwKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJ CQkJImNsZWFuZWQgdXAgJWQgZXhwaXJlZCBlbnRyaWVzIiwKKwkJCQkJCXJlbW92ZWQpKSk7CisJ fQorfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIFB1YmxpYyBBUEkgaW1wbGVtZW50YXRp b24KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogQ2FsY3VsYXRlIHRoZSB0b3Rh bCBzaGFyZWQgbWVtb3J5IHNpemUgcmVxdWlyZWQKKyAqIGZvciB0aGUgdHJhY2sgdGFibGUgbXV0 YXRpb24gZmVhdHVyZS4KKyAqLworU2l6ZQorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9zaG1l bV9zaXplKHZvaWQpCit7CisJU2l6ZQkJc2l6ZSA9IDA7CisJaW50CQkJdGJsX2JrdDsKKwlpbnQJ CQl0Ymxfc3o7CisKKwl0YmxfYmt0ID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9u X3RhYmxlX2J1Y2tldHM7CisJdGJsX3N6ID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0 aW9uX3RhYmxlX3NpemU7CisKKwkvKiBNYWluIHN0cnVjdHVyZSAqLworCXNpemUgKz0gc2l6ZW9m KFRyYWNrVGFibGVNdXRhdGlvblNobWVtKTsKKworCS8qIFRhYmxlIG11dGF0aW9uIGhhc2ggdGFi bGUgKi8KKwlzaXplICs9IHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUpOworCXNp emUgKz0gdGJsX2JrdCAqIHNpemVvZihpbnQpOworCXNpemUgKz0gdGJsX3N6ICogc2l6ZW9mKFRy YWNrVGFibGVNdXRhdGlvbkVudHJ5KTsKKworCXJldHVybiBzaXplOworfQorCisvKgorICogSW5p dGlhbGl6ZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMgZm9yIHRoZQorICogdHJhY2sgdGFibGUg bXV0YXRpb24gZmVhdHVyZS4gIEFsbG9jYXRlcyBhbmQgc2V0cworICogdXAgdGhlIHRhYmxlIG1h cCBhbmQgcGFyc2UgY2FjaGUgaW4gc2hhcmVkIG1lbW9yeS4KKyAqIENhbGxlZCBvbmNlIGZyb20g cGdwb29sIG1haW4gcHJvY2VzcyBhdCBzdGFydHVwLgorICovCit2b2lkCitwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgUE9PTF9QUklWQVRFCisJU2l6ZQkJ c2htZW1fc2l6ZTsKKwljaGFyCSAgICpzaG1lbV9wdHI7CisJVHJhY2tUYWJsZU11dGF0aW9uU3Rh dGUgKnN0OworCWludAkJCXRibF9ia3Q7CisJaW50CQkJdGJsX3N6OworCisJaWYgKHBvb2xfY29u ZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPQorCQlETEJPV19ETUxfQURBUFRJ VkVfR0xPQkFMKQorCXsKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZygidHJhY2tfdGFi bGVfbXV0YXRpb246ICIKKwkJCQkJCSJmZWF0dXJlIGRpc2FibGVkIikpKTsKKwkJcmV0dXJuOwor CX0KKworCXRibF9ia3QgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVf YnVja2V0czsKKwl0Ymxfc3ogPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFi bGVfc2l6ZTsKKworCXNobWVtX3NpemUgPSBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVt X3NpemUoKTsKKworCS8qCisJICogQWxsb2NhdGUgZnJvbSB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5 IHNlZ21lbnQuIE1lbW9yeSBpcyB6ZXJvZWQgYnkKKwkgKiBpbml0aWFsaXplX3NoYXJlZF9tZW1v cnlfbWFpbl9zZWdtZW50KCkuCisJICovCisJc2htZW1fcHRyID0gcG9vbF9zaGFyZWRfbWVtb3J5 X3NlZ21lbnRfZ2V0X2NodW5rKAorCQkJCQkJCQkJCQkJCSBzaG1lbV9zaXplKTsKKwlpZiAoc2ht ZW1fcHRyID09IE5VTEwpCisJeworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coInRyYWNr X3RhYmxlX211dGF0aW9uOiAiCisJCQkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlICV6dSBieXRlcyIs CisJCQkJCQlzaG1lbV9zaXplKSkpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IHVwIHBvaW50 ZXJzIHdpdGhpbiBzaGFyZWQgbWVtb3J5ICovCisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0g PQorCQkoVHJhY2tUYWJsZU11dGF0aW9uU2htZW0gKikgc2htZW1fcHRyOworCXNobWVtX3B0ciAr PSBzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9uU2htZW0pOworCisJdHJhY2tfdGFibGVfbXV0YXRp b25fc2htZW0tPnRhYmxlX21hcCA9CisJCShUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKikg c2htZW1fcHRyOworCisJLyogSW5pdGlhbGl6ZSB0YWJsZSBtYXAgKi8KKwl0YWJsZV9tYXBfaW5p dCgKKwkJCQkgICB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwLAorCQkJCSAg IHRibF9ia3QsIHRibF9zeik7CisKKwkvKiBJbml0aWFsaXplIGdsb2JhbCBzdGF0ZSAqLworCXN0 ID0gJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZTsKKwlzdC0+aW5pdGlhbGl6ZWQg PSB0cnVlOworCXN0LT5jdXJyZW50X3R0bF91cyA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RFRkFV TFRfVFRMX1VTOworCWdldF9jdXJyZW50X3RpbWUoJnN0LT50dGxfbGFzdF91cGRhdGVkKTsKKwln ZXRfY3VycmVudF90aW1lKCZzdC0+bGFzdF9jbGVhbnVwX3RpbWUpOworCXN0LT5nbG9iYWxfY29s ZF9zdGFydF91bnRpbC50dl9zZWMgPSAwOworCXN0LT5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50 dl91c2VjID0gMDsKKwlzdC0+c3RhdHNfcXVlcmllc19jaGVja2VkID0gMDsKKwlzdC0+c3RhdHNf Zm9yY2VkX3ByaW1hcnkgPSAwOworCXN0LT5zdGF0c19hbGxvd2VkX3JlcGxpY2EgPSAwOworCisJ ZXJlcG9ydChMT0csCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQki aW5pdGlhbGl6ZWQgd2l0aCAlenUgYnl0ZXMgc2htZW0iLAorCQkJCQlzaG1lbV9zaXplKSkpOwor I2VuZGlmCit9CisKKy8qCisgKiBJbml0aWFsaXplIHBlci1jaGlsZCBwcm9jZXNzIHN0YXRlLgor ICogUmVjb3JkcyB0aGUgcHJvY2VzcyBzdGFydCB0aW1lIGZvciBjb2xkIHN0YXJ0CisgKiBwZXJp b2QgdHJhY2tpbmcuICBDYWxsZWQgd2hlbiBhIGNoaWxkIHByb2Nlc3Mgc3RhcnRzLgorICovCit2 b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2NoaWxkX2luaXQodm9pZCkKK3sKKwlpbnQJ CQlkdXI7CisKKwlpZiAoVFJBQ0tfVEFCTEVfTVVUQVRJT05fRElTQUJMRUQoKSkKKwkJcmV0dXJu OworCisJZ2V0X2N1cnJlbnRfdGltZSgmcHJvY2Vzc19zdGFydF90aW1lKTsKKwljb2xkX3N0YXJ0 X2luaXRpYWxpemVkID0gdHJ1ZTsKKwlkdXIgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0 YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbjsKKworCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1z ZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJImNoaWxkIGluaXQsIGNvbGQgc3RhcnQg JWQgbXMiLAorCQkJCQlkdXIpKSk7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgcHJvY2VzcyBp cyBpbiBjb2xkIHN0YXJ0IHBlcmlvZC4KKyAqIER1cmluZyBjb2xkIHN0YXJ0LCBhbGwgcXVlcmll cyBhcmUgcm91dGVkIHRvCisgKiBwcmltYXJ5IHRvIGF2b2lkIHN0YWxlIHJlYWRzLiAgQ2hlY2tz IGJvdGgKKyAqIHBlci1wcm9jZXNzIGFuZCBnbG9iYWwgKHdhdGNoZG9nKSBjb2xkIHN0YXJ0Lgor ICovCitib29sCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2luX2NvbGRfc3RhcnQodm9pZCkK K3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50NjQJCWVsYXBzZWRfbXM7CisJaW50CQkJZHVy OworCVRyYWNrVGFibGVNdXRhdGlvblN0YXRlICpzdDsKKworCWlmIChUUkFDS19UQUJMRV9NVVRB VElPTl9ESVNBQkxFRCgpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlkdXIgPSBwb29sX2NvbmZpZy0+ dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbjsKKwlpZiAoZHVyIDw9IDAp CisJCXJldHVybiBmYWxzZTsKKworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisJc3QgPSAmdHJh Y2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlOworCisJLyogQ2hlY2sgd2F0Y2hkb2ctdHJp Z2dlcmVkIGdsb2JhbCBjb2xkIHN0YXJ0ICovCisJaWYgKHN0LT5nbG9iYWxfY29sZF9zdGFydF91 bnRpbC50dl9zZWMgIT0gMCAmJgorCQllbGFwc2VkX3VzKCZub3csCisJCQkJICAgJnN0LT5nbG9i YWxfY29sZF9zdGFydF91bnRpbCkgPiAwKQorCXsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyog Q2hlY2sgcGVyLXByb2Nlc3MgY29sZCBzdGFydCAqLworCWlmICghY29sZF9zdGFydF9pbml0aWFs aXplZCkKKwkJcmV0dXJuIGZhbHNlOworCisJZWxhcHNlZF9tcyA9IGVsYXBzZWRfdXMoJnByb2Nl c3Nfc3RhcnRfdGltZSwgJm5vdykgLyAxMDAwOworCisJaWYgKGVsYXBzZWRfbXMgPCBkdXIpCisJ eworCQllcmVwb3J0KERFQlVHMiwKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjog IgorCQkJCQkJImNvbGQgc3RhcnQgKCVsZC8lZCBtcykiLAorCQkJCQkJKGxvbmcpIGVsYXBzZWRf bXMsIGR1cikpKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisv KgorICogVHJpZ2dlciBhIGdsb2JhbCBjb2xkIHN0YXJ0IGZvciBhbGwgcHJvY2Vzc2VzLgorICog U2V0cyB0aGUgY29sZCBzdGFydCBlbmQgdGltZSBpbiBzaGFyZWQgbWVtb3J5LgorICogQ2FsbGVk IGFmdGVyIHdhdGNoZG9nIGxlYWRlciBjaGFuZ2UgdG8gZm9yY2UgYWxsCisgKiBxdWVyaWVzIHRv IHByaW1hcnkgZHVyaW5nIHRoZSB0cmFuc2l0aW9uLgorICovCit2b2lkCitwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX3RyaWdnZXJfZ2xvYmFsX2NvbGRfc3RhcnQodm9pZCkKK3sKKwlzdHJ1Y3Qg dGltZXZhbCBub3c7CisJc3RydWN0IHRpbWV2YWwgKnVudGlsOworCWludAkJCWR1cjsKKworCWlm IChUUkFDS19UQUJMRV9NVVRBVElPTl9ESVNBQkxFRCgpKQorCQlyZXR1cm47CisKKwlkdXIgPSBw b29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbjsKKwlp ZiAoZHVyIDw9IDApCisJCXJldHVybjsKKworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisJdW50 aWwgPSAmdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlCisJCS5nbG9iYWxfY29sZF9z dGFydF91bnRpbDsKKwkqdW50aWwgPSBub3c7CisJdW50aWwtPnR2X3NlYyArPSBkdXIgLyAxMDAw OworCXVudGlsLT50dl91c2VjICs9IChkdXIgJSAxMDAwKSAqIDEwMDA7CisJaWYgKHVudGlsLT50 dl91c2VjID49IDEwMDAwMDApCisJeworCQl1bnRpbC0+dHZfc2VjICs9IHVudGlsLT50dl91c2Vj IC8gMTAwMDAwMDsKKwkJdW50aWwtPnR2X3VzZWMgJT0gMTAwMDAwMDsKKwl9CisKKwllcmVwb3J0 KExPRywKKwkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJCSJnbG9iYWwg Y29sZCBzdGFydCBmb3IgJWQgbXMiLAorCQkJCQlkdXIpKSk7Cit9CisKKy8qCisgKiBDaGVjayBp ZiBhIHRhYmxlIHdhcyByZWNlbnRseSB3cml0dGVuIChpcyAic3RhbGUiKS4KKyAqIFJldHVybnMg dHJ1ZSBpZiByZWFkcyBzaG91bGQgZ28gdG8gcHJpbWFyeSBiZWNhdXNlCisgKiB0aGUgdGFibGUg d2FzIHdyaXR0ZW4gd2l0aGluIHRoZSBjdXJyZW50IFRUTCB3aW5kb3cuCisgKi8KK2Jvb2wKK3Bv b2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfaXNfc3RhbGUoCisJCQkJCQkJCQkJIGludCB0 YWJsZV9vaWQsIGludCBkYm9pZCkKK3sKKwlUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1h cDsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJdWludDY0CQl0dGxfdXM7CisJdWludDMyCQloYXNo OworCWludAkJCWlkeDsKKwlib29sCQlpc19zdGFsZSA9IGZhbHNlOworCisJaWYgKFRSQUNLX1RB QkxFX01VVEFUSU9OX0RJU0FCTEVEKCkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICh0YWJsZV9v aWQgPD0gMCB8fCBkYm9pZCA8PSAwKQorCXsKKwkJaXNfc3RhbGUgPSB0cnVlOworCQlnb3RvIHVw ZGF0ZV9zdGF0czsKKwl9CisKKwltYXAgPSB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFi bGVfbWFwOworCWhhc2ggPSBmbnYxYV9oYXNoX3RhYmxlX2tleSh0YWJsZV9vaWQsIGRib2lkKTsK KworCXRhYmxlX21hcF9sb2NrKCk7CisKKwlpZHggPSB0YWJsZV9tYXBfbG9va3VwKG1hcCwgdGFi bGVfb2lkLCBkYm9pZCwgaGFzaCk7CisJaWYgKGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9J TlZBTElEX0lOREVYKQorCXsKKwkJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisJ CWludDY0CQlhZ2U7CisJCWludDY0CQl0b3RhbF9hZ2U7CisJCWludDY0CQltYXhfc3RhbGVfdXM7 CisKKwkJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisJCWdldF9jdXJyZW50X3Rp bWUoJm5vdyk7CisJCXR0bF91cyA9IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZQor CQkJLmN1cnJlbnRfdHRsX3VzOworCisJCWFnZSA9IGVsYXBzZWRfdXMoCisJCQkJCQkgJmVudHJp ZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUsICZub3cpOworCQlpc19zdGFsZSA9IChhZ2UgPCAoaW50 NjQpIHR0bF91cyk7CisKKwkJLyoKKwkJICogRW5mb3JjZSBtYXhfc3RhbGVuZXNzIGhhcmQgY2Fw OiBubyBlbnRyeSBjYW4gZm9yY2UgcHJpbWFyeSByb3V0aW5nCisJCSAqIGxvbmdlciB0aGFuIG1h eF9zdGFsZW5lc3MgZnJvbSBpdHMgZmlyc3Qgd3JpdGUuCisJCSAqLworCQlpZiAoaXNfc3RhbGUp CisJCXsKKwkJCW1heF9zdGFsZV91cyA9IChpbnQ2NCkgcG9vbF9jb25maWcKKwkJCQktPnRyYWNr X3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3MKKwkJCQkqIDEwMDBMTDsKKwkJCWlmIChtYXhf c3RhbGVfdXMgPiAwKQorCQkJeworCQkJCXRvdGFsX2FnZSA9IGVsYXBzZWRfdXMoCisJCQkJCQkJ CQkgICAmZW50cmllc1tpZHhdLmZpcnN0X3dyaXRlX3RpbWUsCisJCQkJCQkJCQkgICAmbm93KTsK KwkJCQlpZiAodG90YWxfYWdlID49IG1heF9zdGFsZV91cykKKwkJCQkJaXNfc3RhbGUgPSBmYWxz ZTsKKwkJCX0KKwkJfQorCisJCWVyZXBvcnQoREVCVUcyLAorCQkJCShlcnJtc2coInRyYWNrX3Rh YmxlX211dGF0aW9uOiAiCisJCQkJCQkib2lkICVkIGRib2lkICVkICIKKwkJCQkJCSJlbGFwc2Vk PSVsZCB0dGw9JWx1IHN0YWxlPSVkIiwKKwkJCQkJCXRhYmxlX29pZCwgZGJvaWQsCisJCQkJCQko bG9uZykgYWdlLAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpIHR0bF91cywKKwkJCQkJCWlzX3N0YWxl KSkpOworCX0KKworCXRhYmxlX21hcF91bmxvY2soKTsKKwordXBkYXRlX3N0YXRzOgorCS8qIFVw ZGF0ZSBzdGF0aXN0aWNzIHVzaW5nIHNlbWFwaG9yZSAqLworCWlmICh0cmFja190YWJsZV9tdXRh dGlvbl9zaG1lbSAhPSBOVUxMKQorCXsKKwkJVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUgKnN0Owor CisJCXRhYmxlX21hcF9sb2NrKCk7CisJCXN0ID0gJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVt LT5zdGF0ZTsKKwkJc3QtPnN0YXRzX3F1ZXJpZXNfY2hlY2tlZCsrOworCQlpZiAoaXNfc3RhbGUp CisJCQlzdC0+c3RhdHNfZm9yY2VkX3ByaW1hcnkrKzsKKwkJZWxzZQorCQkJc3QtPnN0YXRzX2Fs bG93ZWRfcmVwbGljYSsrOworCQl0YWJsZV9tYXBfdW5sb2NrKCk7CisJfQorCisJcmV0dXJuIGlz X3N0YWxlOworfQorCisvKgorICogTWFyayBtdWx0aXBsZSB0YWJsZXMgYXMgcmVjZW50bHkgd3Jp dHRlbi4KKyAqIENhbGxlZCBhZnRlciBETUwgcXVlcmllcyBjb21wbGV0ZSB0byByZWNvcmQKKyAq IHdoaWNoIHRhYmxlcyB3ZXJlIG1vZGlmaWVkLgorICovCit2b2lkCitwb29sX3RyYWNrX3RhYmxl X211dGF0aW9uX21hcmtfdGFibGVzX3dyaXR0ZW4oCisJCQkJCQkJCQkJCSAgY29uc3QgaW50ICp0 YWJsZV9vaWRzLCBpbnQgbnVtX3RhYmxlcywgaW50IGRib2lkKQoreworCVRyYWNrVGFibGVNdXRh dGlvbkhhc2hUYWJsZSAqbWFwOworCVRyYWNrVGFibGVNdXRhdGlvblN0YXRlICpzdDsKKwlzdHJ1 Y3QgdGltZXZhbCBub3c7CisJaW50CQkJaTsKKworCWlmIChUUkFDS19UQUJMRV9NVVRBVElPTl9E SVNBQkxFRCgpKQorCQlyZXR1cm47CisKKwlpZiAobnVtX3RhYmxlcyA8PSAwIHx8IHRhYmxlX29p ZHMgPT0gTlVMTCB8fAorCQlkYm9pZCA8PSAwKQorCQlyZXR1cm47CisKKwltYXAgPSB0cmFja190 YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwOworCXN0ID0gJnRyYWNrX3RhYmxlX211dGF0 aW9uX3NobWVtLT5zdGF0ZTsKKwlnZXRfY3VycmVudF90aW1lKCZub3cpOworCisJdGFibGVfbWFw X2xvY2soKTsKKworCS8qIFBlcmlvZGljYWxseSBjbGVhbiB1cCBleHBpcmVkIGVudHJpZXMgKi8K KwlpZiAobWFwLT5udW1fZW50cmllcyA+IG1hcC0+bWF4X2VudHJpZXMgKiAzIC8gNCkKKwl7CisJ CWludDY0CQlzaW5jZV9jbGVhbnVwOworCisJCXNpbmNlX2NsZWFudXAgPSBlbGFwc2VkX3VzKAor CQkJCQkJCQkgICAmc3QtPmxhc3RfY2xlYW51cF90aW1lLCAmbm93KTsKKwkJLyogMTAwbXMgaW50 ZXJ2YWwgKi8KKwkJaWYgKHNpbmNlX2NsZWFudXAgPiAxMDAwMDApCisJCXsKKwkJCXRhYmxlX21h cF9jbGVhbnVwX2V4cGlyZWQoCisJCQkJCQkJCQkgIG1hcCwgc3QtPmN1cnJlbnRfdHRsX3VzKTsK KwkJCXN0LT5sYXN0X2NsZWFudXBfdGltZSA9IG5vdzsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7 IGkgPCBudW1fdGFibGVzOyBpKyspCisJeworCQl1aW50MzIJCWhhc2g7CisJCWludAkJCXRhYmxl X29pZCA9IHRhYmxlX29pZHNbaV07CisKKwkJaWYgKHRhYmxlX29pZCA+IDApCisJCXsKKwkJCWhh c2ggPSBmbnYxYV9oYXNoX3RhYmxlX2tleSgKKwkJCQkJCQkJCQl0YWJsZV9vaWQsIGRib2lkKTsK KwkJCXRhYmxlX21hcF9pbnNlcnQobWFwLCB0YWJsZV9vaWQsCisJCQkJCQkJIGRib2lkLCBoYXNo LCAmbm93KTsKKwkJfQorCX0KKworCXRhYmxlX21hcF91bmxvY2soKTsKK30KKworLyoKKyAqIE1h cmsgYSBzaW5nbGUgdGFibGUgYXMgcmVjZW50bHkgd3JpdHRlbi4KKyAqLwordm9pZAorcG9vbF90 cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlX3dyaXR0ZW4oCisJCQkJCQkJCQkJCSBpbnQg dGFibGVfb2lkLCBpbnQgZGJvaWQpCit7CisJaWYgKHRhYmxlX29pZCA+IDAgJiYgZGJvaWQgPiAw KQorCXsKKwkJY29uc3QgaW50CXRhYmxlc1sxXSA9IHt0YWJsZV9vaWR9OworCisJCXBvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZXNfd3JpdHRlbigKKwkJCQkJCQkJCQkJCQkgIHRh YmxlcywgMSwgZGJvaWQpOworCX0KK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgc3RhbGVuZXNzIFRU TCBiYXNlZCBvbiBvYnNlcnZlZAorICogcmVwbGljYXRpb24gZGVsYXkuICBOZXcgVFRMID0gZGVs YXkgKiBmYWN0b3IsCisgKiBjbGFtcGVkIHRvIFtkZWZhdWx0X3R0bCwgMSBob3VyXS4KKyAqLwor dm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl91cGRhdGVfdHRsKHVpbnQ2NCBkZWxheV91 cykKK3sKKwl1aW50NjQJCW5ld190dGw7CisJZG91YmxlCQlmYWN0b3I7CisJVHJhY2tUYWJsZU11 dGF0aW9uU3RhdGUgKnN0OworCisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkp CisJCXJldHVybjsKKworCWZhY3RvciA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlv bl90dGxfZmFjdG9yOworCW5ld190dGwgPSAodWludDY0KSAoZGVsYXlfdXMgKiBmYWN0b3IpOwor CWlmIChuZXdfdHRsIDwgVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVMpCisJCW5l d190dGwgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9ERUZBVUxUX1RUTF9VUzsKKworCS8qIE1heGlt dW0gVFRMIG9mIDEgaG91ciAqLworCWlmIChuZXdfdHRsID4gMzYwMFVMTCAqIDEwMDAwMDBVTEwp CisJCW5ld190dGwgPSAzNjAwVUxMICogMTAwMDAwMFVMTDsKKworCXN0ID0gJnRyYWNrX3RhYmxl X211dGF0aW9uX3NobWVtLT5zdGF0ZTsKKwlzdC0+Y3VycmVudF90dGxfdXMgPSBuZXdfdHRsOwor CWdldF9jdXJyZW50X3RpbWUoJnN0LT50dGxfbGFzdF91cGRhdGVkKTsKKworCWVyZXBvcnQoREVC VUcxLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJIlRUTD0lbHUg dXMgKGRlbGF5PSVsdSBmYWN0b3I9JS4xZikiLAorCQkJCQkodW5zaWduZWQgbG9uZykgbmV3X3R0 bCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpIGRlbGF5X3VzLAorCQkJCQlmYWN0b3IpKSk7Cit9Ci0t IAoyLjUzLjAKCg== --00000000000008515b064fd104d5--