Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tTS5f-005nSn-Ro for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jan 2025 20:46:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tTS5f-001YPW-1U for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jan 2025 20:46:46 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tTS5e-001YP9-Dc for pgsql-hackers@lists.postgresql.org; Thu, 02 Jan 2025 20:46:46 +0000 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tTS5a-002sfl-9o for pgsql-hackers@lists.postgresql.org; Thu, 02 Jan 2025 20:46:45 +0000 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-5401bd6cdb7so12366107e87.2 for ; Thu, 02 Jan 2025 12:46:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fittl.com; s=google; t=1735850801; x=1736455601; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=zbRvtobFpCn2XEqyf9Tg2GWZndraa03f4qTA498ATyg=; b=gW2UKaI0JsqsKQYrByqymvm8fHg8hjCPVPGzaHGl8fbGI2yrud41UqvzBPcRAMyTE4 8MifZgoR5d7ixWpaq1ln8h628HPl1ubVN5ynhI/O52yQhVOiXpns4/H8fQcH0XIpALHm i7Cu/ue0lnNjVuGOkQTZ1ZFswW4lFzRkd8ZhM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1735850801; x=1736455601; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=zbRvtobFpCn2XEqyf9Tg2GWZndraa03f4qTA498ATyg=; b=Z3ARgQd5hZGo5qAhbR+fTcyQE6Zi7v/lgaZtUAAl0ElR5OoANlJ3ZovgTFepEzGaXZ sMVfLiks1DPocWuoyK3KnaGd6AN6ZMK81YBE/mnmaCEU+0G+PryZkgCVIUCBu1tWlK7B 6exRapaN48C6nIiZN651s4KalBmXIRb9qGlrLWqGlaw7sYXxJ4kgn8FPlhHx7A+YNcXj MEw+EyIF21ySX1Pne+u3T02V8mlgJKffPRIIKFteTCDStYDs374PhqhZNtCh4yzswYfk Ry4+pZD3YTUtdPl+iDqvH+d1jMWSwqaCgjYoIo+7QnwwnIDSOBetT68GBccm/XWU/dii CIRg== X-Gm-Message-State: AOJu0YzjxkXkP/GNJeWqfGr1iMwpRA5yAub73BFkoi/BTW3C1t6Q1rOo gyNOXHltGOy0wHHg9mfx2gwmx2UMtTMVkNrIO9/x3n3cfuVrGvoL/J921LAExRSEkqpbo4vU96W cWgk2+qthkNPV1bIR7K712SiUCp2+GSJ3EThBuCx94lLs30AKjPv6 X-Gm-Gg: ASbGncv55sxz+PLt1nBTWZ0LkJqQISsXYZpqYnoWzn/pjuPZuycvIo/lm1kLXrmVTmT 1WHzgT3IKXOOLx+W17qCIrm74C+BIKoZMin2/wAI= X-Google-Smtp-Source: AGHT+IE5Tx3IW6JbJKCNnIc1Rj9dPFF7mTd4wEoK94DobH7UZO2j3YaxJIl1cI4l4nqmY9UkbBwoM1EvULoczGTV+Q8= X-Received: by 2002:ac2:4e08:0:b0:542:292b:1e68 with SMTP id 2adb3069b0e04-5422953c3afmr14280724e87.32.1735850801216; Thu, 02 Jan 2025 12:46:41 -0800 (PST) MIME-Version: 1.0 From: Lukas Fittl Date: Thu, 2 Jan 2025 12:46:04 -0800 Message-ID: Subject: [PATCH] Optionally record Plan IDs to track plan changes for a query To: PostgreSQL Hackers Cc: Marko M , Sami Imseih Content-Type: multipart/mixed; boundary="00000000000063f644062abf42fc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000063f644062abf42fc Content-Type: multipart/alternative; boundary="00000000000063f642062abf42fa" --00000000000063f642062abf42fa Content-Type: text/plain; charset="UTF-8" Hi all, Inspired by a prior proposal by Sami Imseih for tracking Plan IDs [0], as well as extensions like pg_stat_plans [1] (unmaintained), pg_store_plans [2] (not usable on production, see notes later) and aurora_stat_plans [3] (enabled by default on AWS), this proposed patch set adds: 1. An updated in-core facility to optionally track Plan IDs based on hashing the plan nodes during the existing treewalk in setrefs.c - controlled by the new "compute_plan_id" GUC 2. An example user of plan IDs with a new pg_stat_plans extension in contrib, that also records the first plan text with EXPLAIN (COSTS OFF) My overall perspective is that (1) is best done in-core to keep overhead low, whilst (2) could be done outside of core (or merged with a future pg_stat_statements) and is included here mainly for illustration purposes. Notes including what constitutes a plan ID follow, after a quick example: ## Example Having the planid + an extension that records it, plus the first plan text, lets you track different plans for the same query: bench=# SELECT * FROM pgbench_accounts WHERE aid = 123; bench=# SET enable_indexscan = off; bench=# SELECT * FROM pgbench_accounts WHERE aid = 123; bench=# SELECT queryid, planid, plan FROM pg_stat_plans WHERE plan LIKE '%pgbench%'; queryid | planid | plan ----------------------+----------------------+------------------------------------------------------------ -5986989572677096226 | -2057350818695327558 | Index Scan using pgbench_accounts_pkey on pgbench_accounts+ | | Index Cond: (aid = 123) -5986989572677096226 | 2815444815385882663 | Bitmap Heap Scan on pgbench_accounts + | | Recheck Cond: (aid = 123) + | | -> Bitmap Index Scan on pgbench_accounts_pkey + | | Index Cond: (aid = 123) And this also supports showing the plan for a currently running query (call count is zero in such cases): session 1: bench# SELECT pg_sleep(100), COUNT(*) FROM pgbench_accounts; session 2: bench=# SELECT query, plan FROM pg_stat_activity JOIN pg_stat_plans ON (usesysid = userid AND datid = dbid AND query_id = queryid AND plan_id = planid) WHERE query LIKE 'SELECT pg_sleep%'; query | plan -------------------------------------------------------+------------------------------------ SELECT pg_sleep(100), COUNT(*) FROM pgbench_accounts; | Aggregate + | -> Seq Scan on pgbench_accounts ## What is a plan ID? My overall hypothesis here is that identifying different plan shapes for the same normalized query (i.e. queryid) is useful, because it lets you detect use of different plan choices such as which join order or index was used based on different input parameters (or different column statistics due to a recent ANALYZE) for the same normalized query. You can get this individually for a given query with EXPLAIN of course, but if you want to track this over time the only workable mechanism in my experience is auto_explain, which is good for sampling outliers, but bad for getting a comprehensive view of which plans where used and how often. To me the closest to what I consider a "plan shape" is the output of EXPLAIN (COSTS OFF), that is, the plan nodes and their filters/conditions, but discarding the exact costs as well as ignoring any execution statistics. The idea behind the proposed plan ID implementation is trying to match that by hashing plan nodes, similar to how query IDs hash post-parse analysis query nodes. One notable edge case are plans that involve partitions - those could of course lead to a lot of different planids for a given queryid, based on how many partitions were pruned. We could consider special casing this, e.g. by trying to be smart about declarative partitioning, and considering plans to be identical if they scan the same number of partitions with the same scan methods. However this could also be done by an out-of-core extension, either by defining a better planid mechanism, or maintaining a grouped planid of sorts based on the internal planid. The partitions problem reminds me a bit of the IN list problem with pg_stat_statements (which we still haven't resolved) - despite the problem the extension has been successfully used for many years by many Postgres users, even for those workloads where you have thousands of entries for the same query with different IN list lengths. ## Why does this need to be in core? Unfortunately both existing open-source extensions I'm familiar with are not suitable for production use. Out of the two, only pg_store_plans [2] is being maintained, however it carries significant overhead because it calculates the plan ID by hashing the EXPLAIN text output every time a query is executed. My colleague Marko (CCed) and I evaluated whether pg_store_plans could be modified to instead calculate the planid by hashing the plan tree, and ran into three issues: 1. The existing node jumbling in core is not usable by extensions, and it is necessary to have something like it for hashing Filters/Conds (ultimately requiring us to duplicate all of it in the extension, and keep maintaining that for every major release) 2. Whilst its cheap enough, it seems unnecessary to do an additional tree walk when setrefs.c already walks the plan tree in a near-final state 3. It seems useful to enable showing the plan shape of a currently running query (e.g. to identify whether a plan regression causes the query to run forever), and this is much easier to do by adding planid to pg_stat_activity, like the queryid I also suspect that Aurora's implementation in [3] had some in-core modifications to enable it work efficiently, but I'm not familiar with any implementation details beyond what's in the public documentation. ## Implementation notes The attached patch set includes two preparatory patches that could be committed independently if deemed useful: The first patch allows use of node jumbling by other unit files / extensions, which would help an out-of-core extension avoid duplicating all the node jumbling code. The second patch adds a function for the extensible cumulative statistics system to drop all entries for a given statistics kind. This already exists for resetting, but in case of a dynamic list of entries its more useful to be able to drop all of them when "reset" is called. The third patch adds plan ID tracking in core. This is turned off by default, and can be enabled by setting "compute_plan_id" to "on". Plan IDs are shown in pg_stat_activity, as well as EXPLAIN and auto_explain output, to allow matching a given plan ID to a plan text, without requiring the use of an extension. There are some minor TODOs in the plan jumbling logic that I haven't finalized yet. There is also an open question whether we should use the node attribute mechanism instead of custom jumbling logic? The fourth patch adds the pg_stat_plans contrib extension, for illustrative purposes. This is inspired by pg_stat_statements, but intentionally kept separate for easier review and since it does not use an external file and could technically be used independently. We may want to develop this into a unified pg_stat_statements+plans in-core mechanism in the future, but I think that is best kept for a separate discussion. The pg_stat_plans extension utilizes the cumulative statistics system for tracking statistics (extensible thanks to recent changes!), as well as dynamic shared memory to track plan texts up to a given limit (2kB by default). As a side note, managing extra allocations with the new extensible stats is a bit cumbersome - it would be helpful to have a hook for cleaning up data associated to entries (like a DSA allocation). Thanks, Lukas [0]: https://www.postgresql.org/message-id/flat/604E3199-2DD2-47DD-AC47-774A6F97DCA9%40amazon.com [1]: https://github.com/2ndQuadrant/pg_stat_plans [2]: https://ossc-db.github.io/pg_store_plans/ [3]: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora_stat_plans.html -- Lukas Fittl --00000000000063f642062abf42fa Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi all,

Inspired by a prior = proposal by Sami Imseih for tracking Plan IDs [0], as well as extensions li= ke pg_stat_plans [1] (unmaintained), pg_store_plans [2] (not usable on prod= uction, see notes later) and aurora_stat_plans [3] (enabled by default on A= WS), this proposed patch set adds:

1. An updated i= n-core facility to optionally track Plan IDs based on hashing the plan node= s during the existing treewalk in setrefs.c - controlled by the new "c= ompute_plan_id" GUC
2. An example user of plan IDs with = a new pg_stat_plans extension in contrib, that also records the first plan = text with EXPLAIN (COSTS OFF)

My overall perspect= ive is that (1) is best done in-core to keep overhead low, whilst (2) could= be done outside of core (or merged with a future pg_stat_statements) and i= s included here mainly for illustration purposes.

= Notes including what constitutes a plan ID follow, after a quick example:

## Example

Having the = planid + an extension that records it, plus the first plan text, lets you t= rack different plans for the same query:

bench=3D#= SELECT * FROM pgbench_accounts WHERE aid =3D 123;
bench=3D# SET = enable_indexscan =3D off;
bench=3D# SELECT * FROM pgbench_account= s WHERE aid =3D 123;
bench=3D# SELECT queryid, planid, plan FROM = pg_stat_plans WHERE plan LIKE '%pgbench%';
=C2=A0 =C2=A0 =C2=A0 = =C2=A0queryid =C2=A0 =C2=A0 =C2=A0 =C2=A0| =C2=A0 =C2=A0 =C2=A0 =C2=A0plani= d =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=A0plan =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-5986989572677096226= | -2057350818695327558 | Index Scan using pgbench_accounts_pkey on pgbench= _accounts+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 | =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0| =C2=A0 Index Cond: (aid =3D 123)
=C2=A0-598698957= 2677096226 | =C2=A02815444815385882663 | Bitmap Heap Scan on pgbench_accoun= ts =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 | =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0| =C2=A0 Recheck Cond: (aid =3D 123) =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 +
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 | =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0| =C2=A0 -> =C2=A0Bitmap Index Scan on pgbench_acco= unts_pkey =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0+
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| =C2=A0 =C2=A0 =C2= =A0 =C2=A0 Index Cond: (aid =3D 123)

And this = also supports showing the plan for a currently running query (call count is= zero in such cases):

session 1:
bench# SELECT = pg_sleep(100), COUNT(*) FROM pgbench_accounts;

session 2:
bench= =3D# SELECT query, plan FROM pg_stat_activity
=C2=A0 JOIN pg_stat_plans = ON (usesysid =3D userid AND datid =3D dbid AND query_id =3D queryid AND pla= n_id =3D planid)
=C2=A0 WHERE query LIKE 'SELECT pg_sleep%';
= =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=A0query =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=A0plan =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<= br>-------------------------------------------------------+----------------= --------------------
=C2=A0SELECT pg_sleep(100), COUNT(*) FROM pgbench_a= ccounts; | Aggregate =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 +
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=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=A0Seq Scan on pgbench_accounts

<= /div>
## What is a plan ID?

My overall hypothe= sis here is that identifying different plan shapes for the same normalized = query (i.e. queryid) is useful, because it lets you detect use of different= plan choices such as which join order or index was used based on different= input parameters (or different column statistics due to a recent ANALYZE) = for the same normalized query.

You can get this in= dividually for a given query with EXPLAIN of course, but if you want to tra= ck this over time the only workable mechanism in my experience is auto_expl= ain, which is good for sampling outliers, but bad for getting a comprehensi= ve view of which plans where used and how often.

To me the closest to what I consider a "plan shape" is the out= put of EXPLAIN (COSTS OFF), that is, the plan nodes and their filters/condi= tions, but discarding the exact costs as well as ignoring any execution sta= tistics. The idea behind the proposed plan ID implementation is trying to m= atch that by hashing plan nodes, similar to how query IDs hash post-parse a= nalysis query nodes.

One notable edge case are pla= ns that involve partitions - those could of course lead to a lot of differe= nt planids for a given queryid, based on how many partitions were pruned. W= e could consider special casing this, e.g. by trying to be smart about decl= arative partitioning, and considering plans to be identical if they scan th= e same number of partitions with the same scan methods. However this could = also be done by an out-of-core extension, either by defining a better plani= d mechanism, or maintaining a grouped planid of sorts based on the internal= planid.

The partitions problem reminds me a bit o= f the IN list problem with pg_stat_statements (which we still haven't r= esolved) - despite the problem the extension has been successfully used for= many years by many Postgres users, even for those workloads where you have= thousands of entries for the same query with different IN list lengths.

## Why does this need to be in core?
<= br>
Unfortunately both existing open-source extensions I'm fa= miliar with are not suitable for production use. Out of the two, only pg_st= ore_plans [2] is being maintained, however it carries significant overhead = because it calculates the plan ID by hashing the EXPLAIN text output every = time a query is executed.

My colleague Marko (CCed= ) and I evaluated whether pg_store_plans could be modified to instead calcu= late the planid by hashing the plan tree, and ran into three issues:
<= div>
1. The existing node jumbling in core is not usable by e= xtensions, and it is necessary to have something like it for hashing Filter= s/Conds (ultimately requiring us to duplicate all of it in the extension, a= nd keep maintaining that for every major release)
2. Whilst its c= heap enough, it seems unnecessary to do an additional tree walk when setref= s.c already walks the plan tree in a near-final state
3. It seems= useful to enable showing the plan shape of a currently running query (e.g.= to identify whether a plan regression causes the query to run forever), an= d this is much easier to do by adding planid to pg_stat_activity, like the = queryid

I also suspect that Aurora's imple= mentation in [3] had some in-core modifications to enable it work efficient= ly, but I'm not familiar with any implementation details beyond what= 9;s in the public documentation.

## Implementa= tion notes

The attached patch set includes two pre= paratory patches that could be committed independently if deemed useful:

The first patch allows use of node jumbling by other= unit files / extensions, which would help an out-of-core extension avoid d= uplicating all the node jumbling code.

The second = patch adds a function for the extensible cumulative statistics system to dr= op all entries for a given statistics kind. This already exists for resetti= ng, but in case of a dynamic list of entries its more useful to be able to = drop all of them when "reset" is called.

The third patch adds plan ID tracking in core. This is turned off by defau= lt, and can be enabled by setting "compute_plan_id" to "on&q= uot;. Plan IDs are shown in pg_stat_activity, as well as EXPLAIN and auto_e= xplain output, to allow matching a given plan ID to a plan text, without re= quiring the use of an extension. There are some minor TODOs in the plan jum= bling logic that I haven't finalized yet. There is also an open questio= n whether we should use the node attribute mechanism instead of custom jumb= ling logic?

The fourth patch adds the pg_stat_= plans contrib extension, for illustrative purposes. This is inspired by pg_= stat_statements, but=20 intentionally kept separate for easier review and since it does not use=20 an external file and could technically be used independently. We may=20 want to develop this into a unified pg_stat_statements+plans in-core=20 mechanism in the future, but I think that is best kept for a separate=20 discussion.

The pg_stat_plans extension utilizes t= he cumulative statistics system for tracking statistics (extensible thanks = to recent changes!), as well as dynamic shared memory to track plan texts u= p to a given limit (2kB by default). As a side note, managing extra allocat= ions with the new extensible stats is a bit cumbersome - it would be helpfu= l to have a hook for cleaning up data associated to entries (like a DSA all= ocation).

Thanks,
Lukas
--00000000000063f642062abf42fa-- --00000000000063f644062abf42fc Content-Type: application/octet-stream; name="0002-Cumulative-statistics-Add-pgstat_drop_entries_of_kin.patch" Content-Disposition: attachment; filename="0002-Cumulative-statistics-Add-pgstat_drop_entries_of_kin.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5fsow5r1 RnJvbSBkNjFhOWM5NDMyNWY5ODBjNzZkNTQ4YmU2ZGI2ZjZlODZmOTZlMGNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpEYXRlOiBU aHUsIDIgSmFuIDIwMjUgMTA6NDY6MzAgLTA4MDAKU3ViamVjdDogW1BBVENIIDIvNF0gQ3VtdWxh dGl2ZSBzdGF0aXN0aWNzOiBBZGQgcGdzdGF0X2Ryb3BfZW50cmllc19vZl9raW5kCiBoZWxwZXIK ClRoaXMgYWxsb3dzIHVzZXJzIG9mIHRoZSBjdW11bGF0aXZlIHN0YXRpc3RpY3Mgc3lzdGVtcyB0 byBkcm9wIGFsbAplbnRyaWVzIGZvciBhIGdpdmVuIGtpbmQsIHNpbWlsYXIgdG8gaG93IHBnc3Rh dF9yZXNldF9lbnRyaWVzX29mX2tpbmQKYWxsb3dzIHJlc2V0dGluZyBhbGwgZW50cmVpcyBmb3Ig YSBnaXZlbiBzdGF0aXN0aWNzIGtpbmQuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkv cGdzdGF0X3NobWVtLmMgfCAzMyArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUv dXRpbHMvcGdzdGF0X2ludGVybmFsLmggICAgICAgfCAgMSArCiAyIGZpbGVzIGNoYW5nZWQsIDM0 IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9w Z3N0YXRfc2htZW0uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9zaG1lbS5j CmluZGV4IGJjYzhiMmViNGYuLjQzZjJkZmQ2OTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L3Bnc3RhdF9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2 aXR5L3Bnc3RhdF9zaG1lbS5jCkBAIC0xMDE1LDYgKzEwMTUsMzkgQEAgcGdzdGF0X2Ryb3BfYWxs X2VudHJpZXModm9pZCkKIAkJcGdzdGF0X3JlcXVlc3RfZW50cnlfcmVmc19nYygpOwogfQogCit2 b2lkCitwZ3N0YXRfZHJvcF9lbnRyaWVzX29mX2tpbmQoUGdTdGF0X0tpbmQga2luZCkKK3sKKwlk c2hhc2hfc2VxX3N0YXR1cyBoc3RhdDsKKwlQZ1N0YXRTaGFyZWRfSGFzaEVudHJ5ICpwczsKKwl1 aW50NjQJCW5vdF9mcmVlZF9jb3VudCA9IDA7CisKKwlkc2hhc2hfc2VxX2luaXQoJmhzdGF0LCBw Z1N0YXRMb2NhbC5zaGFyZWRfaGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChwcyA9IGRzaGFzaF9zZXFf bmV4dCgmaHN0YXQpKSAhPSBOVUxMKQorCXsKKwkJaWYgKHBzLT5kcm9wcGVkIHx8IHBzLT5rZXku a2luZCAhPSBraW5kKQorCQkJY29udGludWU7CisKKwkJLyogZGVsZXRlIGxvY2FsIHJlZmVyZW5j ZSAqLworCQlpZiAocGdTdGF0RW50cnlSZWZIYXNoKQorCQl7CisJCQlQZ1N0YXRfRW50cnlSZWZI YXNoRW50cnkgKmxvaGFzaGVudCA9CisJCQkJcGdzdGF0X2VudHJ5X3JlZl9oYXNoX2xvb2t1cChw Z1N0YXRFbnRyeVJlZkhhc2gsIHBzLT5rZXkpOworCisJCQlpZiAobG9oYXNoZW50KQorCQkJCXBn c3RhdF9yZWxlYXNlX2VudHJ5X3JlZihsb2hhc2hlbnQtPmtleSwgbG9oYXNoZW50LT5lbnRyeV9y ZWYsCisJCQkJCQkJCQkJdHJ1ZSk7CisJCX0KKworCQlpZiAoIXBnc3RhdF9kcm9wX2VudHJ5X2lu dGVybmFsKHBzLCAmaHN0YXQpKQorCQkJbm90X2ZyZWVkX2NvdW50Kys7CisJfQorCWRzaGFzaF9z ZXFfdGVybSgmaHN0YXQpOworCisJaWYgKG5vdF9mcmVlZF9jb3VudCA+IDApCisJCXBnc3RhdF9y ZXF1ZXN0X2VudHJ5X3JlZnNfZ2MoKTsKK30KKwogc3RhdGljIHZvaWQKIHNoYXJlZF9zdGF0X3Jl c2V0X2NvbnRlbnRzKFBnU3RhdF9LaW5kIGtpbmQsIFBnU3RhdFNoYXJlZF9Db21tb24gKmhlYWRl ciwKIAkJCQkJCSAgIFRpbWVzdGFtcFR6IHRzKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRp bHMvcGdzdGF0X2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9wZ3N0YXRfaW50ZXJuYWwu aAppbmRleCA4MTFlZDliMDA1Li45MDBmNzFjMDMzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9wZ3N0YXRfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ3N0YXRfaW50 ZXJuYWwuaApAQCAtNzA3LDYgKzcwNyw3IEBAIGV4dGVybiBib29sIHBnc3RhdF9sb2NrX2VudHJ5 X3NoYXJlZChQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZiwgYm9vbCBub3dhaXQpOwogZXh0ZXJu IHZvaWQgcGdzdGF0X3VubG9ja19lbnRyeShQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZik7CiBl eHRlcm4gYm9vbCBwZ3N0YXRfZHJvcF9lbnRyeShQZ1N0YXRfS2luZCBraW5kLCBPaWQgZGJvaWQs IHVpbnQ2NCBvYmppZCk7CiBleHRlcm4gdm9pZCBwZ3N0YXRfZHJvcF9hbGxfZW50cmllcyh2b2lk KTsKK2V4dGVybiB2b2lkIHBnc3RhdF9kcm9wX2VudHJpZXNfb2Zfa2luZChQZ1N0YXRfS2luZCBr aW5kKTsKIGV4dGVybiBQZ1N0YXRfRW50cnlSZWYgKnBnc3RhdF9nZXRfZW50cnlfcmVmX2xvY2tl ZChQZ1N0YXRfS2luZCBraW5kLCBPaWQgZGJvaWQsIHVpbnQ2NCBvYmppZCwKIAkJCQkJCQkJCQkJ CQlib29sIG5vd2FpdCk7CiBleHRlcm4gdm9pZCBwZ3N0YXRfcmVzZXRfZW50cnkoUGdTdGF0X0tp bmQga2luZCwgT2lkIGRib2lkLCB1aW50NjQgb2JqaWQsIFRpbWVzdGFtcFR6IHRzKTsKLS0gCjIu NDcuMQoK --00000000000063f644062abf42fc Content-Type: application/octet-stream; name="0003-Optionally-record-a-plan_id-in-PlannedStmt-to-identi.patch" Content-Disposition: attachment; filename="0003-Optionally-record-a-plan_id-in-PlannedStmt-to-identi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5fsow5t2 RnJvbSA1YjVkODRmM2Q1YTI1ZWY0N2ZhOTA0Mjk4NWE4ZGZlMzNjNzY0NzNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpEYXRlOiBU dWUsIDMxIERlYyAyMDI0IDE1OjE2OjEwIC0wODAwClN1YmplY3Q6IFtQQVRDSCAzLzRdIE9wdGlv bmFsbHkgcmVjb3JkIGEgcGxhbl9pZCBpbiBQbGFubmVkU3RtdCB0byBpZGVudGlmeQogcGxhbiBz aGFwZQoKV2hlbiBlbmFibGVkIHZpYSB0aGUgbmV3IGNvbXB1dGVfcGxhbl9pZCBHVUMgKGRlZmF1 bHQgb2ZmKSwgdGhpcyB1dGlsaXplcwp0aGUgZXhpc3RpbmcgdHJlZXdhbGsgaW4gc2V0cmVmcy5j IGFmdGVyIHBsYW5uaW5nIHRvIGNhbGN1bGF0ZSBhIGhhc2gKKHRoZSAicGxhbl9pZCIsIG9yIHBs YW4gaWRlbnRpZmllcikgdGhhdCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeQp3aGljaCBwbGFuIHdh cyBjaG9zZW4uCgpUaGUgcGxhbl9pZCBnZW5lcmFsbHkgaW50ZW5kcyB0byBiZSB0aGUgc2FtZSBp ZiBhIGdpdmVuIEVYUExBSU4gKHdpdGhvdXQKQU5BTFlaRSkgb3V0cHV0IGlzIHRoZSBzYW1lLiBU aGUgcGxhbl9pZCBpbmNsdWRlcyBib3RoIHRoZSB0b3AtbGV2ZWwgcGxhbgphcyB3ZWxsIGFzIGFs bCBzdWJwbGFucy4gRXhlY3V0aW9uIHN0YXRpc3RpY3MgYXJlIGV4Y2x1ZGVkLgoKSWYgZW5hYmxl ZCwgdGhlIHBsYW5faWQgaXMgc2hvd24gZm9yIGN1cnJlbnRseSBydW5uaW5nIHF1ZXJpZXMgaW4K cGdfc3RhdF9hY3Rpdml0eSwgYXMgd2VsbCBhcyByZWNvcmRlZCBpbiBFWFBMQUlOIGFuZCBhdXRv X2V4cGxhaW4gb3V0cHV0LgoKT3RoZXIgaW4gY29yZSB1c2VycyBvciBleHRlbnNpb25zIGNhbiB1 c2UgdGhpcyBmYWNpbGl0eSB0byBzaG93IG9yCmFjY3VtdWxhdGUgc3RhdGlzdGljcyBhYm91dCB0 aGUgcGxhbnMgdXNlZCBieSBxdWVyaWVzLCB0byBoZWxwIGlkZW50aWZ5CnBsYW4gcmVncmVzc2lv bnMsIG9yIGRyaXZlIHBsYW4gbWFuYWdlbWVudCBkZWNpc2lvbnMuCgpOb3RlIHRoYXQgdGhpcyBj b21taXQgaW50ZW50aW9uYWxseSBkb2VzIG5vdCBpbmNsdWRlIGEgZmFjaWxpdHkgdG8gbWFwCmEg Z2l2ZW4gcGxhbl9pZCB0byB0aGUgRVhQTEFJTiB0ZXh0IG91dHB1dCAtIGl0IGlzIGEgYXNzdW1l ZCB0aGF0IHVzZXJzCmNhbiB1dGlsaXplIHRoZSBhdXRvX2V4cGxhaW4gZXh0ZW5zaW9uIHRvIGVz dGFibGlzaCB0aGlzIG1hcHBpbmcgYXMKbmVlZGVkLCBvciBleHRlbnNpb25zIGNhbiByZWNvcmQg dGhpcyB2aWEgdGhlIGV4aXN0aW5nIHBsYW5uZXIgaG9vay4KLS0tCiBkb2Mvc3JjL3NnbWwvY29u ZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgMzIgKysKIGRvYy9zcmMvc2dtbC9tb25p dG9yaW5nLnNnbWwgICAgICAgICAgICAgICAgICB8ICAxNiArCiBzcmMvYmFja2VuZC9jYXRhbG9n L3N5c3RlbV92aWV3cy5zcWwgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXhwbGFpbi5jICAgICAgICAgICAgICAgIHwgIDE3ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNNYWluLmMgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1BhcmFsbGVsLmMgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL25vZGVzL01ha2VmaWxl ICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9ub2Rlcy9tZXNvbi5idWls ZCAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvbm9kZXMvcGxhbmp1bWJsZS5j ICAgICAgICAgICAgICAgIHwgNDUxICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAgICAgIHwgIDE3ICsKIHNyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3NldHJlZnMuYyAgICAgICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC90Y29wL3Bv c3RncmVzLmMgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvYmFja2VuZF9zdGF0dXMuYyAgIHwgIDcwICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3Bnc3RhdGZ1bmNzLmMgICAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYyAgICAgICAgICAgfCAgMjggKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0ICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFuanVtYmxl LmggICAgICAgICAgICAgICAgfCAgMzMgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o ICAgICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3N0YXR1 cy5oICAgICAgICAgICAgfCAgIDUgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWlu Lm91dCAgICAgICAgIHwgIDExICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0 ICAgICAgICAgICB8ICAgOSArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwgICAg ICAgICAgICAgIHwgICA0ICsKIDI1IGZpbGVzIGNoYW5nZWQsIDcyMiBpbnNlcnRpb25zKCspLCAx OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9ub2Rlcy9wbGFu anVtYmxlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFuanVtYmxl LmgKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwv Y29uZmlnLnNnbWwKaW5kZXggZmJkZDZjZTU3NC4uMTk2ZDY0ZWZkOCAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAt ODU0Niw2ICs4NTQ2LDM4IEBAIENPUFkgcG9zdGdyZXNfbG9nIEZST00gJy9mdWxsL3BhdGgvdG8v bG9nZmlsZS5jc3YnIFdJVEggY3N2OwogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0 ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWNvbXB1dGUtcGxhbi1pZCIgeHJl ZmxhYmVsPSJjb21wdXRlX3BsYW5faWQiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+Y29tcHV0ZV9w bGFuX2lkPC92YXJuYW1lPiAoPHR5cGU+ZW51bTwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgor ICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmNvbXB1dGVfcGxhbl9pZDwvdmFybmFtZT4gY29uZmln dXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwv dGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxlcyBp bi1jb3JlIGNvbXB1dGF0aW9uIG9mIGEgcGxhbiBpZGVudGlmaWVyLgorICAgICAgICBQbGFuIGlk ZW50aWZpZXJzIGNhbiBiZSBkaXNwbGF5ZWQgaW4gdGhlIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9 Im1vbml0b3JpbmctcGctc3RhdC1hY3Rpdml0eS12aWV3Ij48c3RydWN0bmFtZT5wZ19zdGF0X2Fj dGl2aXR5PC9zdHJ1Y3RuYW1lPjwvbGluaz4KKyAgICAgICAgdmlldyBvciB1c2luZyA8Y29tbWFu ZD5FWFBMQUlOPC9jb21tYW5kPi4KKyAgICAgICAgTm90ZSB0aGF0IGFuIGV4dGVybmFsIG1vZHVs ZSBjYW4gYWx0ZXJuYXRpdmVseSBiZSB1c2VkIGlmIHRoZQorICAgICAgICBpbi1jb3JlIHBsYW4g aWRlbnRpZmllciBjb21wdXRhdGlvbiBtZXRob2QgaXMgbm90IGFjY2VwdGFibGUuCisgICAgICAg IEluIHRoaXMgY2FzZSwgaW4tY29yZSBjb21wdXRhdGlvbiBtdXN0IGJlIGFsd2F5cyBkaXNhYmxl ZC4KKyAgICAgICAgVmFsaWQgdmFsdWVzIGFyZSA8bGl0ZXJhbD5vZmY8L2xpdGVyYWw+IChhbHdh eXMgZGlzYWJsZWQpLAorICAgICAgICA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4gKGFsd2F5cyBlbmFi bGVkKSBhbmQgPGxpdGVyYWw+cmVncmVzczwvbGl0ZXJhbD4gd2hpY2gKKyAgICAgICAgaGFzIHRo ZSBzYW1lIGVmZmVjdCBhcyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIGV4Y2VwdCB0aGF0IHRoZQor ICAgICAgICBxdWVyeSBpZGVudGlmaWVyIGlzIG5vdCBzaG93biBpbiB0aGUgPGxpdGVyYWw+RVhQ TEFJTjwvbGl0ZXJhbD4gb3V0cHV0CisgICAgICAgIGluIG9yZGVyIHRvIGZhY2lsaXRhdGUgYXV0 b21hdGVkIHJlZ3Jlc3Npb24gdGVzdGluZy4KKyAgICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVy YWw+b2ZmPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPG5vdGU+CisgICAgICAg IDxwYXJhPgorICAgICAgICAgVG8gZW5zdXJlIHRoYXQgb25seSBvbmUgcGxhbiBpZGVudGlmaWVy IGlzIGNhbGN1bGF0ZWQgYW5kCisgICAgICAgICBkaXNwbGF5ZWQsIGV4dGVuc2lvbnMgdGhhdCBj YWxjdWxhdGUgcGxhbiBpZGVudGlmaWVycyBzaG91bGQKKyAgICAgICAgIHRocm93IGFuIGVycm9y IGlmIGEgcGxhbiBpZGVudGlmaWVyIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQuCisgICAgICAg IDwvcGFyYT4KKyAgICAgICA8L25vdGU+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxp c3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtbG9nLXN0YXRlbWVudC1zdGF0 cyI+CiAgICAgICA8dGVybT48dmFybmFtZT5sb2dfc3RhdGVtZW50X3N0YXRzPC92YXJuYW1lPiAo PHR5cGU+Ym9vbGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwK aW5kZXggZDBkMTc2Y2M1NC4uODViMzhlZTY0MiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL21v bml0b3Jpbmcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCkBAIC05NzIs NiArOTcyLDIyIEBAIHBvc3RncmVzICAgMjcwOTMgIDAuMCAgMC4wICAzMDA5NiAgMjc1MiA/ICAg ICAgICBTcyAgIDExOjM0ICAgMDowMCBwb3N0Z3Jlczogc2VyCiAgICAgIDwvcGFyYT48L2VudHJ5 PgogICAgIDwvcm93PgogCisgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2df dGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3Ry dWN0ZmllbGQ+cGxhbl9pZDwvc3RydWN0ZmllbGQ+IDx0eXBlPmJpZ2ludDwvdHlwZT4KKyAgICAg IDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIElkZW50aWZpZXIgb2YgdGhpcyBiYWNrZW5k J3MgbW9zdCByZWNlbnQgcXVlcnkgcGxhbi4gSWYKKyAgICAgICA8c3RydWN0ZmllbGQ+c3RhdGU8 L3N0cnVjdGZpZWxkPiBpcyA8bGl0ZXJhbD5hY3RpdmU8L2xpdGVyYWw+IHRoaXMKKyAgICAgICBm aWVsZCBzaG93cyB0aGUgaWRlbnRpZmllciBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBxdWVy eSBwbGFuLiBJbgorICAgICAgIGFsbCBvdGhlciBzdGF0ZXMsIGl0IHNob3dzIHRoZSBpZGVudGlm aWVyIG9mIGxhc3QgcXVlcnkgcGxhbiB0aGF0CisgICAgICAgd2FzIGV4ZWN1dGVkLiAgUGxhbiBp ZGVudGlmaWVycyBhcmUgbm90IGNvbXB1dGVkIGJ5IGRlZmF1bHQgc28gdGhpcworICAgICAgIGZp ZWxkIHdpbGwgYmUgbnVsbCB1bmxlc3MgPHhyZWYgbGlua2VuZD0iZ3VjLWNvbXB1dGUtcGxhbi1p ZCIvPgorICAgICAgIHBhcmFtZXRlciBpcyBlbmFibGVkIG9yIGEgdGhpcmQtcGFydHkgbW9kdWxl IHRoYXQgY29tcHV0ZXMgcGxhbgorICAgICAgIGlkZW50aWZpZXJzIGlzIGNvbmZpZ3VyZWQuCisg ICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKICAgICAgPHJvdz4KICAgICAgIDxl bnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5p dGlvbiI+CiAgICAgICAgPHN0cnVjdGZpZWxkPnF1ZXJ5PC9zdHJ1Y3RmaWVsZD4gPHR5cGU+dGV4 dDwvdHlwZT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNx bCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAppbmRleCBkYTlhOGZlOTlm Li5hMjZlMDBhNzkyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3 cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCkBAIC04ODAs NiArODgwLDcgQEAgQ1JFQVRFIFZJRVcgcGdfc3RhdF9hY3Rpdml0eSBBUwogICAgICAgICAgICAg Uy5iYWNrZW5kX3hpZCwKICAgICAgICAgICAgIHMuYmFja2VuZF94bWluLAogICAgICAgICAgICAg Uy5xdWVyeV9pZCwKKyAgICAgICAgICAgIFMucGxhbl9pZCwKICAgICAgICAgICAgIFMucXVlcnks CiAgICAgICAgICAgICBTLmJhY2tlbmRfdHlwZQogICAgIEZST00gcGdfc3RhdF9nZXRfYWN0aXZp dHkoTlVMTCkgQVMgUwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGEyMDFlZDMwODIuLmRlZWVk ZjcwY2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl ICJub2Rlcy9leHRlbnNpYmxlLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5j bHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvcGxhbmp1bWJsZS5oIgog I2luY2x1ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5o IgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKQEAgLTk2Niw2ICs5NjcsMjIg QEAgRXhwbGFpblByaW50UGxhbihFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVz YykKIAkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiUXVlcnkgSWRlbnRpZmllciIsIE5VTEwsIChp bnQ2NCkKIAkJCQkJCQkgICBxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5xdWVyeUlkLCBlcyk7CiAJ fQorCisJLyoKKwkgKiBDT01QVVRFX1BMQU5fSURfUkVHUkVTUyBtZWFucyBDT01QVVRFX1BMQU5f SURfWUVTLCBidXQgd2UgZG9uJ3Qgc2hvdworCSAqIHRoZSBxdWVyeWlkIGluIGFueSBvZiB0aGUg RVhQTEFJTiBwbGFucyB0byBrZWVwIHN0YWJsZSB0aGUgcmVzdWx0cworCSAqIGdlbmVyYXRlZCBi eSByZWdyZXNzaW9uIHRlc3Qgc3VpdGVzLgorCSAqLworCWlmIChlcy0+dmVyYm9zZSAmJiBxdWVy eURlc2MtPnBsYW5uZWRzdG10LT5wbGFuSWQgIT0gVUlOVDY0Q09OU1QoMCkgJiYKKwkJY29tcHV0 ZV9wbGFuX2lkICE9IENPTVBVVEVfUExBTl9JRF9SRUdSRVNTKQorCXsKKwkJLyoKKwkJICogT3V0 cHV0IHRoZSBxdWVyeWlkIGFzIGFuIGludDY0IHJhdGhlciB0aGFuIGEgdWludDY0IHNvIHdlIG1h dGNoCisJCSAqIHdoYXQgd291bGQgYmUgc2VlbiBpbiB0aGUgQklHSU5UIHBnX3N0YXRfYWN0aXZp dHkucGxhbl9pZCBjb2x1bW4uCisJCSAqLworCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJQbGFu IElkZW50aWZpZXIiLCBOVUxMLCAoaW50NjQpCisJCQkJCQkJICAgcXVlcnlEZXNjLT5wbGFubmVk c3RtdC0+cGxhbklkLCBlcyk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKaW5k ZXggMWMxMmQ2ZWJmZi4uMTliZWNkZDY2YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC0x MjAsMTMgKzEyMCwxNSBAQCBFeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQg ZWZsYWdzKQogewogCS8qCiAJICogSW4gc29tZSBjYXNlcyAoZS5nLiBhbiBFWEVDVVRFIHN0YXRl bWVudCBvciBhbiBleGVjdXRlIG1lc3NhZ2Ugd2l0aCB0aGUKLQkgKiBleHRlbmRlZCBxdWVyeSBw cm90b2NvbCkgdGhlIHF1ZXJ5X2lkIHdvbid0IGJlIHJlcG9ydGVkLCBzbyBkbyBpdCBub3cuCisJ ICogZXh0ZW5kZWQgcXVlcnkgcHJvdG9jb2wpIHRoZSBxdWVyeV9pZCBhbmQgcGxhbl9pZCB3b24n dCBiZSByZXBvcnRlZCwKKwkgKiBzbyBkbyBpdCBub3cuCiAJICoKLQkgKiBOb3RlIHRoYXQgaXQn cyBoYXJtbGVzcyB0byByZXBvcnQgdGhlIHF1ZXJ5X2lkIG11bHRpcGxlIHRpbWVzLCBhcyB0aGUK LQkgKiBjYWxsIHdpbGwgYmUgaWdub3JlZCBpZiB0aGUgdG9wIGxldmVsIHF1ZXJ5X2lkIGhhcyBh bHJlYWR5IGJlZW4KKwkgKiBOb3RlIHRoYXQgaXQncyBoYXJtbGVzcyB0byByZXBvcnQgdGhlIGlk ZW50aWZpZXJzIG11bHRpcGxlIHRpbWVzLCBhcyB0aGUKKwkgKiBjYWxsIHdpbGwgYmUgaWdub3Jl ZCBpZiB0aGUgdG9wIGxldmVsIHF1ZXJ5X2lkIC8gcGxhbl9pZCBoYXMgYWxyZWFkeSBiZWVuCiAJ ICogcmVwb3J0ZWQuCiAJICovCiAJcGdzdGF0X3JlcG9ydF9xdWVyeV9pZChxdWVyeURlc2MtPnBs YW5uZWRzdG10LT5xdWVyeUlkLCBmYWxzZSk7CisJcGdzdGF0X3JlcG9ydF9wbGFuX2lkKHF1ZXJ5 RGVzYy0+cGxhbm5lZHN0bXQtPnBsYW5JZCwgcXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+cXVlcnlJ ZCwgZmFsc2UpOwogCiAJaWYgKEV4ZWN1dG9yU3RhcnRfaG9vaykKIAkJKCpFeGVjdXRvclN0YXJ0 X2hvb2spIChxdWVyeURlc2MsIGVmbGFncyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5j CmluZGV4IDg0NmVjNzI3ZGUuLjU0Y2IyMjk2N2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJh bGxlbC5jCkBAIC0xNzQsNiArMTc0LDcgQEAgRXhlY1NlcmlhbGl6ZVBsYW4oUGxhbiAqcGxhbiwg RVN0YXRlICplc3RhdGUpCiAJcHN0bXQgPSBtYWtlTm9kZShQbGFubmVkU3RtdCk7CiAJcHN0bXQt PmNvbW1hbmRUeXBlID0gQ01EX1NFTEVDVDsKIAlwc3RtdC0+cXVlcnlJZCA9IHBnc3RhdF9nZXRf bXlfcXVlcnlfaWQoKTsKKwlwc3RtdC0+cGxhbklkID0gcGdzdGF0X2dldF9teV9wbGFuX2lkKCk7 CiAJcHN0bXQtPmhhc1JldHVybmluZyA9IGZhbHNlOwogCXBzdG10LT5oYXNNb2RpZnlpbmdDVEUg PSBmYWxzZTsKIAlwc3RtdC0+Y2FuU2V0VGFnID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL25vZGVzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUKaW5kZXggNjZi YmFkOGU2ZS4uMWFiOTM0NWQyOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZp bGUKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUKQEAgLTI1LDYgKzI1LDcgQEAgT0JK UyA9IFwKIAlub2RlRnVuY3MubyBcCiAJb3V0ZnVuY3MubyBcCiAJcGFyYW1zLm8gXAorCXBsYW5q dW1ibGUubyBcCiAJcHJpbnQubyBcCiAJcXVlcnlqdW1ibGVmdW5jcy5vIFwKIAlyZWFkLm8gXApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9u b2Rlcy9tZXNvbi5idWlsZAppbmRleCA0OTYyNmYxNjBlLi40NjQwZTdhMzYxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9ub2Rlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9t ZXNvbi5idWlsZApAQCAtOCw2ICs4LDcgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAn bXVsdGliaXRtYXBzZXQuYycsCiAgICdub2RlRnVuY3MuYycsCiAgICdwYXJhbXMuYycsCisgICdw bGFuanVtYmxlLmMnLAogICAncHJpbnQuYycsCiAgICdyZWFkLmMnLAogICAndGlkYml0bWFwLmMn LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvcGxhbmp1bWJsZS5jIGIvc3JjL2JhY2tl bmQvbm9kZXMvcGxhbmp1bWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLmEyZjU4MGQ3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9wbGFu anVtYmxlLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBs YW5qdW1ibGUuYworICoJIFBsYW4gZmluZ2VycHJpbnRpbmcuCisgKgorICogQ2FsY3VsYXRlcyB0 aGUgcGxhbiBmaW5nZXJwcmludCBmb3IgYSBnaXZlbiBwbGFuIHRyZWUuIE5vdGUgdGhpcyB3b3Jr cworICogaW4gY29tYmluYXRpb24gd2l0aCB0aGUgcGxhbm5lcidzIHNldHJlZnMgZnVuY3Rpb25h bGl0eSBpbiBvcmRlciB0bworICogd2FsayB0aGUgdHJlZS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNr ZW5kL25vZGVzL3BsYW5qdW1ibGUuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibm9kZXMvcGxhbmp1bWJsZS5oIgorI2lu Y2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKworI2RlZmluZSBKVU1CTEVfU0laRQkJCQkxMDI0 CS8qIHF1ZXJ5IHNlcmlhbGl6YXRpb24gYnVmZmVyIHNpemUgKi8KKworLyogR1VDIHBhcmFtZXRl cnMgKi8KK2ludAkJCWNvbXB1dGVfcGxhbl9pZCA9IENPTVBVVEVfUExBTl9JRF9PRkY7CisKKyNk ZWZpbmUgSlVNQkxFX1ZBTFVFKGl0ZW0pIFwKKwlBcHBlbmRKdW1ibGUoanN0YXRlLCAoY29uc3Qg dW5zaWduZWQgY2hhciAqKSAmKGl0ZW0pLCBzaXplb2YoaXRlbSkpCisjZGVmaW5lIEpVTUJMRV9T VFJJTkcoc3RyKSBcCitkbyB7IFwKKwlpZiAoc3RyKSBcCisJCUFwcGVuZEp1bWJsZShqc3RhdGUs IChjb25zdCB1bnNpZ25lZCBjaGFyICopIChzdHIpLCBzdHJsZW4oc3RyKSArIDEpOyBcCit9IHdo aWxlKDApCisKKy8qCisgKiBKdW1ibGUgdGhlIHRhcmdldCByZWxhdGlvbiBvZiBhIHNjYW4gb3Ig bW9kaWZ5IG5vZGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9ucyBzaW1pbGFybHkgdG8gRXhwbGFpblRh cmdldFJlbC4KKyAqLworc3RhdGljIHZvaWQKK0p1bWJsZVRhcmdldFJlbChKdW1ibGVTdGF0ZSAq anN0YXRlLCBMaXN0KiBydGFibGUsIFBsYW4gKnBsYW4sIEluZGV4IHJ0aSkKK3sKKwlSYW5nZVRi bEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwlzd2l0Y2ggKG5vZGVUYWco cGxhbikpCisJeworCQljYXNlIFRfU2VxU2NhbjoKKwkJY2FzZSBUX1NhbXBsZVNjYW46CisJCWNh c2UgVF9JbmRleFNjYW46CisJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgorCQljYXNlIFRfQml0bWFw SGVhcFNjYW46CisJCWNhc2UgVF9UaWRTY2FuOgorCQljYXNlIFRfVGlkUmFuZ2VTY2FuOgorCQlj YXNlIFRfRm9yZWlnblNjYW46CisJCWNhc2UgVF9DdXN0b21TY2FuOgorCQljYXNlIFRfTW9kaWZ5 VGFibGU6CisJCQkvKiBBc3NlcnQgaXQncyBvbiBhIHJlYWwgcmVsYXRpb24gKi8KKwkJCUFzc2Vy dChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKTsKKwkJCUpVTUJMRV9WQUxVRShydGUtPnJl bGlkKTsKKwkJCWJyZWFrOworCQljYXNlIFRfVGFibGVGdW5jU2NhbjoKKwkJCXsKKwkJCQlUYWJs ZUZ1bmMgICp0YWJsZWZ1bmMgPSAoKFRhYmxlRnVuY1NjYW4gKikgcGxhbiktPnRhYmxlZnVuYzsK KworCQkJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1RBQkxFRlVOQyk7CisJCQkJSlVNQkxF X1ZBTFVFKHRhYmxlZnVuYy0+ZnVuY3R5cGUpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9W YWx1ZXNTY2FuOgorCQkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfVkFMVUVTKTsKKwkJCWJy ZWFrOworCQljYXNlIFRfQ3RlU2NhbjoKKwkJCS8qIEFzc2VydCBpdCdzIG9uIGEgbm9uLXNlbGYt cmVmZXJlbmNlIENURSAqLworCQkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfQ1RFKTsKKwkJ CUFzc2VydCghcnRlLT5zZWxmX3JlZmVyZW5jZSk7CisJCQlKVU1CTEVfU1RSSU5HKHJ0ZS0+Y3Rl bmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBUX05hbWVkVHVwbGVzdG9yZVNjYW46CisJCQlBc3Nl cnQocnRlLT5ydGVraW5kID09IFJURV9OQU1FRFRVUExFU1RPUkUpOworCQkJSlVNQkxFX1NUUklO RyhydGUtPmVucm5hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgVF9Xb3JrVGFibGVTY2FuOgorCQkJ LyogQXNzZXJ0IGl0J3Mgb24gYSBzZWxmLXJlZmVyZW5jZSBDVEUgKi8KKwkJCUFzc2VydChydGUt PnJ0ZWtpbmQgPT0gUlRFX0NURSk7CisJCQlBc3NlcnQocnRlLT5zZWxmX3JlZmVyZW5jZSk7CisJ CQlKVU1CTEVfU1RSSU5HKHJ0ZS0+Y3RlbmFtZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWJyZWFrOworCX0KK30KKworLyoKKyAqIEp1bWJsZSB0aGUgdGFyZ2V0IG9mIGEgU2NhbiBub2Rl CisgKi8KK3N0YXRpYyB2b2lkCitKdW1ibGVTY2FuVGFyZ2V0KEp1bWJsZVN0YXRlICpqc3RhdGUs IExpc3QqIHJ0YWJsZSwgU2NhbiAqc2NhbikKK3sKKwlKdW1ibGVUYXJnZXRSZWwoanN0YXRlLCBy dGFibGUsIChQbGFuICopIHNjYW4sIHNjYW4tPnNjYW5yZWxpZCk7Cit9CisKKy8qCisgKiBKdW1i bGVQbGFuTm9kZTogQXBwZW5kIHNpZ25pZmljYW50IGluZm9ybWF0aW9uIHRvIHRoZSBwbGFuIGlk ZW50aWZpZXIganVtYmxlCisgKgorICogTm90ZSB0aGlzIGludGVudGlvbmFsbHkgZG9lc24ndCBk ZXNjZW5kIGludG8gY2hpbGQgcGxhbiBub2Rlcywgc2luY2UgdGhlIGNhbGxlcgorICogYWxyZWFk eSB0YWtlcyBjYXJlIG9mIHRoYXQuCisgKi8KK3ZvaWQKK0p1bWJsZVBsYW5Ob2RlKEp1bWJsZVN0 YXRlICpqc3RhdGUsIExpc3QqIHJ0YWJsZSwgUGxhbiAqcGxhbikKK3sKKwlKVU1CTEVfVkFMVUUo bm9kZVRhZyhwbGFuKSk7CisJSnVtYmxlTm9kZShqc3RhdGUsIChOb2RlICopIHBsYW4tPnF1YWwp OworCUp1bWJsZU5vZGUoanN0YXRlLCAoTm9kZSAqKSBwbGFuLT50YXJnZXRsaXN0KTsKKworCS8q CisJICogUGxhbi10eXBlLXNwZWNpZmljIGZpeGVzCisJICovCisJc3dpdGNoIChub2RlVGFnKHBs YW4pKQorCXsKKwkJY2FzZSBUX1NlcVNjYW46CisJCQl7CisJCQkJU2VxU2Nhbgkqc3BsYW4gPSAo U2VxU2NhbiAqKSBwbGFuOworCQkJCUp1bWJsZVNjYW5UYXJnZXQoanN0YXRlLCBydGFibGUsICZz cGxhbi0+c2Nhbik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX1NhbXBsZVNjYW46CisJCQl7 CisJCQkJU2FtcGxlU2NhbiAqc3BsYW4gPSAoU2FtcGxlU2NhbiAqKSBwbGFuOworCQkJCUp1bWJs ZVNjYW5UYXJnZXQoanN0YXRlLCBydGFibGUsICZzcGxhbi0+c2Nhbik7CisJCQkJLyogVE9ETzog SXQgbWF5IGJlIHdvcnRoIGp1bWJsaW5nIHRoZSBwcm9wZXJ0aWVzIG9mIHNwbGFuLT50YWJsZXNh bXBsZSAqLworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9JbmRleFNjYW46CisJCQl7CisJCQkJ SW5kZXhTY2FuICAqc3BsYW4gPSAoSW5kZXhTY2FuICopIHBsYW47CisJCQkJSnVtYmxlU2NhblRh cmdldChqc3RhdGUsIHJ0YWJsZSwgJnNwbGFuLT5zY2FuKTsKKwkJCQlKVU1CTEVfVkFMVUUoc3Bs YW4tPmluZGV4aWQpOworCQkJCUp1bWJsZU5vZGUoanN0YXRlLCAoTm9kZSAqKSBzcGxhbi0+aW5k ZXhxdWFsKTsKKwkJCQkvKiBTa2lwIHNwbGFuLT5pbmRleHF1YWxvcmlnICovCisJCQkJSnVtYmxl Tm9kZShqc3RhdGUsIChOb2RlICopIHNwbGFuLT5pbmRleG9yZGVyYnkpOworCQkJCS8qIFNraXAg c3BsYW4tPmluZGV4b3JkZXJieW9yaWcgKi8KKwkJCQlKVU1CTEVfVkFMVUUoc3BsYW4tPmluZGV4 b3JkZXJkaXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgorCQkJ eworCQkJCUluZGV4T25seVNjYW4gKnNwbGFuID0gKEluZGV4T25seVNjYW4gKikgcGxhbjsKKwkJ CQlKdW1ibGVTY2FuVGFyZ2V0KGpzdGF0ZSwgcnRhYmxlLCAmc3BsYW4tPnNjYW4pOworCQkJCUpV TUJMRV9WQUxVRShzcGxhbi0+aW5kZXhpZCk7CisJCQkJSnVtYmxlTm9kZShqc3RhdGUsIChOb2Rl ICopIHNwbGFuLT5pbmRleHF1YWwpOworCQkJCS8qIFNraXAgc3BsYW4tPnJlY2hlY2txdWFsICov CisJCQkJSnVtYmxlTm9kZShqc3RhdGUsIChOb2RlICopIHNwbGFuLT5pbmRleG9yZGVyYnkpOwor CQkJCS8qIFNraXAgc3BsYW4tPmluZGV4dGxpc3QgKi8KKwkJCQlKVU1CTEVfVkFMVUUoc3BsYW4t PmluZGV4b3JkZXJkaXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBJbmRleFNj YW46CisJCQl7CisJCQkJQml0bWFwSW5kZXhTY2FuICpzcGxhbiA9IChCaXRtYXBJbmRleFNjYW4g KikgcGxhbjsKKwkJCQlKdW1ibGVTY2FuVGFyZ2V0KGpzdGF0ZSwgcnRhYmxlLCAmc3BsYW4tPnNj YW4pOworCQkJCUpVTUJMRV9WQUxVRShzcGxhbi0+aW5kZXhpZCk7CisJCQkJSnVtYmxlTm9kZShq c3RhdGUsIChOb2RlICopIHNwbGFuLT5pbmRleHF1YWwpOworCQkJCS8qIFNraXAgc3BsYW4tPmlu ZGV4cXVhbG9yaWcgKi8KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwSGVhcFNjYW46 CisJCQl7CisJCQkJQml0bWFwSGVhcFNjYW4gKnNwbGFuID0gKEJpdG1hcEhlYXBTY2FuICopIHBs YW47CisJCQkJSnVtYmxlU2NhblRhcmdldChqc3RhdGUsIHJ0YWJsZSwgJnNwbGFuLT5zY2FuKTsK KwkJCQkvKiBTa2lwIHNwbGFuLT5iaXRtYXBxdWFsb3JpZyAqLworCQkJfQorCQkJYnJlYWs7CisJ CWNhc2UgVF9UaWRTY2FuOgorCQkJeworCQkJCVRpZFNjYW4JKnNwbGFuID0gKFRpZFNjYW4gKikg cGxhbjsKKwkJCQlKdW1ibGVTY2FuVGFyZ2V0KGpzdGF0ZSwgcnRhYmxlLCAmc3BsYW4tPnNjYW4p OworCQkJCUp1bWJsZU5vZGUoanN0YXRlLCAoTm9kZSAqKSBzcGxhbi0+dGlkcXVhbHMpOworCQkJ fQorCQkJYnJlYWs7CisJCWNhc2UgVF9UaWRSYW5nZVNjYW46CisJCQl7CisJCQkJVGlkUmFuZ2VT Y2FuICpzcGxhbiA9IChUaWRSYW5nZVNjYW4gKikgcGxhbjsKKwkJCQlKdW1ibGVTY2FuVGFyZ2V0 KGpzdGF0ZSwgcnRhYmxlLCAmc3BsYW4tPnNjYW4pOworCQkJCUp1bWJsZU5vZGUoanN0YXRlLCAo Tm9kZSAqKSBzcGxhbi0+dGlkcmFuZ2VxdWFscyk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBU X1N1YnF1ZXJ5U2NhbjoKKwkJCXsKKwkJCQlTdWJxdWVyeVNjYW4gKnNwbGFuID0gKFN1YnF1ZXJ5 U2NhbiAqKSBwbGFuOworCQkJCS8qIFRPRE86IEp1bWJsZVNjYW5IZWFkZXIgY3VycmVudGx5IGRv ZXNuJ3QganVtYmxlIHRoZSBzdWJwbGFuIG5hbWUgKi8KKwkJCQlKdW1ibGVTY2FuVGFyZ2V0KGpz dGF0ZSwgcnRhYmxlLCAmc3BsYW4tPnNjYW4pOworCQkJCS8qIFdlIHJlbHkgb24gdGhlIGNhbGxl ciB0byBkZXNjZW5kIGludG8gdGhlIGFjdHVhbCBzdWJwbGFucyAqLworCQkJfQorCQkJYnJlYWs7 CisJCWNhc2UgVF9GdW5jdGlvblNjYW46CisJCQl7CisJCQkJRnVuY3Rpb25TY2FuICpzcGxhbiA9 IChGdW5jdGlvblNjYW4gKikgcGxhbjsKKworCQkJCS8qCisJCQkJICogSWYgdGhlIGV4cHJlc3Np b24gaXMgc3RpbGwgYSBjYWxsIG9mIGEgc2luZ2xlIGZ1bmN0aW9uLAorCQkJCSAqIHdlIGNhbiBq dW1ibGUgdGhlIE9JRCBvZiB0aGUgZnVuY3Rpb24uIE90aGVyd2lzZSwgcHVudC4KKwkJCQkgKiAo RXZlbiBpZiBpdCB3YXMgYSBzaW5nbGUgZnVuY3Rpb24gY2FsbCBvcmlnaW5hbGx5LCB0aGUKKwkJ CQkgKiBvcHRpbWl6ZXIgY291bGQgaGF2ZSBzaW1wbGlmaWVkIGl0IGF3YXkuKQorCQkJCSAqLwor CQkJCWlmIChsaXN0X2xlbmd0aChzcGxhbi0+ZnVuY3Rpb25zKSA9PSAxKQorCQkJCXsKKwkJCQkJ UmFuZ2VUYmxGdW5jdGlvbiAqcnRmdW5jID0gKFJhbmdlVGJsRnVuY3Rpb24gKikgbGluaXRpYWwo c3BsYW4tPmZ1bmN0aW9ucyk7CisKKwkJCQkJaWYgKElzQShydGZ1bmMtPmZ1bmNleHByLCBGdW5j RXhwcikpCisJCQkJCXsKKwkJCQkJCUZ1bmNFeHByICAgKmZ1bmNleHByID0gKEZ1bmNFeHByICop IHJ0ZnVuYy0+ZnVuY2V4cHI7CisJCQkJCQlPaWQJCQlmdW5jaWQgPSBmdW5jZXhwci0+ZnVuY2lk OworCQkJCQkJSlVNQkxFX1ZBTFVFKGZ1bmNpZCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQli cmVhazsKKwkJY2FzZSBUX1RhYmxlRnVuY1NjYW46CisJCQl7CisJCQkJVGFibGVGdW5jU2NhbiAq c3BsYW4gPSAoVGFibGVGdW5jU2NhbiAqKSBwbGFuOworCQkJCUp1bWJsZVNjYW5UYXJnZXQoanN0 YXRlLCBydGFibGUsICZzcGxhbi0+c2Nhbik7CisJCQkJLyogVE9ETzogU2hvdWxkIHdlIGp1bWJs ZSBzcGxhbi0+dGFibGVmdW5jPyAqLworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9WYWx1ZXNT Y2FuOgorCQkJeworCQkJCVZhbHVlc1NjYW4gKnNwbGFuID0gKFZhbHVlc1NjYW4gKikgcGxhbjsK KwkJCQlKdW1ibGVTY2FuVGFyZ2V0KGpzdGF0ZSwgcnRhYmxlLCAmc3BsYW4tPnNjYW4pOworCQkJ CUp1bWJsZU5vZGUoanN0YXRlLCAoTm9kZSAqKSBzcGxhbi0+dmFsdWVzX2xpc3RzKTsKKwkJCX0K KwkJCWJyZWFrOworCQljYXNlIFRfQ3RlU2NhbjoKKwkJCXsKKwkJCQlDdGVTY2FuCSpzcGxhbiA9 IChDdGVTY2FuICopIHBsYW47CisJCQkJSnVtYmxlU2NhblRhcmdldChqc3RhdGUsIHJ0YWJsZSwg JnNwbGFuLT5zY2FuKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfTmFtZWRUdXBsZXN0b3Jl U2NhbjoKKwkJCXsKKwkJCQlOYW1lZFR1cGxlc3RvcmVTY2FuICpzcGxhbiA9IChOYW1lZFR1cGxl c3RvcmVTY2FuICopIHBsYW47CisJCQkJSnVtYmxlU2NhblRhcmdldChqc3RhdGUsIHJ0YWJsZSwg JnNwbGFuLT5zY2FuKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfV29ya1RhYmxlU2NhbjoK KwkJCXsKKwkJCQlXb3JrVGFibGVTY2FuICpzcGxhbiA9IChXb3JrVGFibGVTY2FuICopIHBsYW47 CisJCQkJSnVtYmxlU2NhblRhcmdldChqc3RhdGUsIHJ0YWJsZSwgJnNwbGFuLT5zY2FuKTsKKwkJ CX0KKwkJCWJyZWFrOworCQljYXNlIFRfRm9yZWlnblNjYW46CisJCQl7CisJCQkJRm9yZWlnblNj YW4gKnNwbGFuID0gKEZvcmVpZ25TY2FuICopIHBsYW47CisJCQkJSnVtYmxlU2NhblRhcmdldChq c3RhdGUsIHJ0YWJsZSwgJnNwbGFuLT5zY2FuKTsKKwkJCQkvKiBUT0RPOiBTaG91bGQgd2UganVt YmxlIGFueSBGRFctc3BlY2lmaWMgaW5mb3JtYXRpb24gaGVyZSwgbGlrZSBFWFBMQUlOPyAqLwor CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9DdXN0b21TY2FuOgorCQkJeworCQkJCUZvcmVpZ25T Y2FuICpzcGxhbiA9IChGb3JlaWduU2NhbiAqKSBwbGFuOworCQkJCUp1bWJsZVNjYW5UYXJnZXQo anN0YXRlLCBydGFibGUsICZzcGxhbi0+c2Nhbik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBU X05lc3RMb29wOgorCQkJeworCQkJCU5lc3RMb29wICpqcGxhbiA9IChOZXN0TG9vcCAqKSBwbGFu OworCQkJCUpVTUJMRV9WQUxVRShqcGxhbi0+am9pbi5qb2ludHlwZSk7CisJCQkJLyogU2tpcCBq cGxhbi0+am9pbi5pbm5lcl91bmlxdWUgKi8KKwkJCQlKdW1ibGVOb2RlKGpzdGF0ZSwgKE5vZGUg KikganBsYW4tPmpvaW4uam9pbnF1YWwpOworCQkJCUp1bWJsZU5vZGUoanN0YXRlLCAoTm9kZSAq KSBqcGxhbi0+bmVzdFBhcmFtcyk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX01lcmdlSm9p bjoKKwkJCXsKKwkJCQlNZXJnZUpvaW4gKmpwbGFuID0gKE1lcmdlSm9pbiAqKSBwbGFuOworCQkJ CUpVTUJMRV9WQUxVRShqcGxhbi0+am9pbi5qb2ludHlwZSk7CisJCQkJLyogU2tpcCBqcGxhbi0+ am9pbi5pbm5lcl91bmlxdWUgKi8KKwkJCQlKdW1ibGVOb2RlKGpzdGF0ZSwgKE5vZGUgKikganBs YW4tPmpvaW4uam9pbnF1YWwpOworCQkJCUp1bWJsZU5vZGUoanN0YXRlLCAoTm9kZSAqKSBqcGxh bi0+bWVyZ2VjbGF1c2VzKTsKKwkJCQlKdW1ibGVOb2RlKGpzdGF0ZSwgKE5vZGUgKikganBsYW4t Pm1lcmdlRmFtaWxpZXMpOworCQkJCUp1bWJsZU5vZGUoanN0YXRlLCAoTm9kZSAqKSBqcGxhbi0+ bWVyZ2VDb2xsYXRpb25zKTsKKwkJCQlKdW1ibGVOb2RlKGpzdGF0ZSwgKE5vZGUgKikganBsYW4t Pm1lcmdlUmV2ZXJzYWxzKTsKKwkJCQlKdW1ibGVOb2RlKGpzdGF0ZSwgKE5vZGUgKikganBsYW4t Pm1lcmdlTnVsbHNGaXJzdCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0hhc2hKb2luOgor CQkJeworCQkJCUhhc2hKb2luICpqcGxhbiA9IChIYXNoSm9pbiAqKSBwbGFuOworCQkJCUpVTUJM RV9WQUxVRShqcGxhbi0+am9pbi5qb2ludHlwZSk7CisJCQkJLyogU2tpcCBqcGxhbi0+am9pbi5p bm5lcl91bmlxdWUgKi8KKwkJCQlKdW1ibGVOb2RlKGpzdGF0ZSwgKE5vZGUgKikganBsYW4tPmpv aW4uam9pbnF1YWwpOworCQkJCUp1bWJsZU5vZGUoanN0YXRlLCAoTm9kZSAqKSBqcGxhbi0+aGFz aGNsYXVzZXMpOworCQkJCUp1bWJsZU5vZGUoanN0YXRlLCAoTm9kZSAqKSBqcGxhbi0+aGFzaG9w ZXJhdG9ycyk7CisJCQkJSnVtYmxlTm9kZShqc3RhdGUsIChOb2RlICopIGpwbGFuLT5oYXNoY29s bGF0aW9ucyk7CisJCQkJSnVtYmxlTm9kZShqc3RhdGUsIChOb2RlICopIGpwbGFuLT5oYXNoa2V5 cyk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0dhdGhlcjoKKwkJCXsKKwkJCQlHYXRoZXIg KmdwbGFuID0gKEdhdGhlciAqKSBwbGFuOworCQkJCUpVTUJMRV9WQUxVRShncGxhbi0+bnVtX3dv cmtlcnMpOworCQkJCS8qIFNraXAgYWxsIG90aGVyIGZpZWxkcyAqLworCQkJfQorCQkJYnJlYWs7 CisJCWNhc2UgVF9HYXRoZXJNZXJnZToKKwkJCXsKKwkJCQlHYXRoZXJNZXJnZSAqZ3BsYW4gPSAo R2F0aGVyTWVyZ2UgKikgcGxhbjsKKwkJCQlKVU1CTEVfVkFMVUUoZ3BsYW4tPm51bV93b3JrZXJz KTsKKwkJCQkvKiBTa2lwIGFsbCBvdGhlciBmaWVsZHMgKi8KKwkJCX0KKwkJCWJyZWFrOworCQlj YXNlIFRfSGFzaDoKKwkJCXsKKwkJCQlIYXNoICpocGxhbiA9IChIYXNoICopIHBsYW47CisJCQkJ SnVtYmxlTm9kZShqc3RhdGUsIChOb2RlICopIGhwbGFuLT5oYXNoa2V5cyk7CisJCQkJLyogU2tp cCBhbGwgb3RoZXIgZmllbGRzICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2Fz ZSBUX01lbW9pemU6CisJCQl7CisJCQkJTWVtb2l6ZQkqbXBsYW4gPSAoTWVtb2l6ZSAqKSBwbGFu OworCQkJCUp1bWJsZU5vZGUoanN0YXRlLCAoTm9kZSAqKSBtcGxhbi0+cGFyYW1fZXhwcnMpOwor CQkJCUpVTUJMRV9WQUxVRShtcGxhbi0+YmluYXJ5X21vZGUpOworCQkJCS8qIFNraXAgYWxsIG90 aGVyIGZpZWxkcyAqLworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9NYXRlcmlhbDoKKwkJCS8q IE1hdGVyaWFsaXplIG5vZGUgaGFzIG5vIGZpZWxkcyBvZiBpdHMgb3duICovCisJCQlicmVhazsK KwkJY2FzZSBUX1NvcnQ6CisJCQl7CisJCQkJU29ydCAqc3BsYW4gPSAoU29ydCAqKSBwbGFuOwor CQkJCWludCBpOworCQkJCWZvciAoaSA9IDA7IGkgPCBzcGxhbi0+bnVtQ29sczsgaSsrKQorCQkJ CXsKKwkJCQkJSlVNQkxFX1ZBTFVFKHNwbGFuLT5zb3J0Q29sSWR4W2ldKTsKKwkJCQkJSlVNQkxF X1ZBTFVFKHNwbGFuLT5zb3J0T3BlcmF0b3JzW2ldKTsKKwkJCQkJSlVNQkxFX1ZBTFVFKHNwbGFu LT5jb2xsYXRpb25zW2ldKTsKKwkJCQkJSlVNQkxFX1ZBTFVFKHNwbGFuLT5udWxsc0ZpcnN0W2ld KTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0luY3JlbWVudGFsU29ydDoKKwkJ CXsKKwkJCQlJbmNyZW1lbnRhbFNvcnQgKnNwbGFuID0gKEluY3JlbWVudGFsU29ydCAqKSBwbGFu OworCQkJCWludCBpOworCQkJCWZvciAoaSA9IDA7IGkgPCBzcGxhbi0+c29ydC5udW1Db2xzOyBp KyspCisJCQkJeworCQkJCQlKVU1CTEVfVkFMVUUoc3BsYW4tPnNvcnQuc29ydENvbElkeFtpXSk7 CisJCQkJCUpVTUJMRV9WQUxVRShzcGxhbi0+c29ydC5zb3J0T3BlcmF0b3JzW2ldKTsKKwkJCQkJ SlVNQkxFX1ZBTFVFKHNwbGFuLT5zb3J0LmNvbGxhdGlvbnNbaV0pOworCQkJCQlKVU1CTEVfVkFM VUUoc3BsYW4tPnNvcnQubnVsbHNGaXJzdFtpXSk7CisJCQkJfQorCQkJCUpVTUJMRV9WQUxVRShz cGxhbi0+blByZXNvcnRlZENvbHMpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9VbmlxdWU6 CisJCQkvKiBTa2lwIGFsbCBVbmlxdWUgbm9kZSBmaWVsZHMgc2luY2UgRVhQTEFJTiBkb2VzIG5v dCBzaG93IHRoZW0gZWl0aGVyICovCisJCQlicmVhazsKKwkJY2FzZSBUX1NldE9wOgorCQkJewor CQkJCVNldE9wICpzcGxhbiA9IChTZXRPcCAqKSBwbGFuOworCQkJCUpVTUJMRV9WQUxVRShzcGxh bi0+Y21kKTsKKwkJCQlKVU1CTEVfVkFMVUUoc3BsYW4tPnN0cmF0ZWd5KTsKKwkJCQkvKiBTa2lw IGFsbCBvdGhlciBmaWVsZHMgc2luY2UgRVhQTEFJTiBkb2VzIG5vdCBzaG93IHRoZW0gZWl0aGVy ICovCisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0xvY2tSb3dzOgorCQkJLyogU2tpcCBhbGwg TG9ja1Jvd3Mgbm9kZSBmaWVsZHMgc2luY2UgRVhQTEFJTiBkb2VzIG5vdCBzaG93IHRoZW0gZWl0 aGVyICovCisJCQlicmVhazsKKwkJY2FzZSBUX0xpbWl0OgorCQkJLyogU2tpcCBhbGwgTGltaXQg bm9kZSBmaWVsZHMgc2luY2UgRVhQTEFJTiBkb2VzIG5vdCBzaG93IHRoZW0gZWl0aGVyICovCisJ CQlicmVhazsKKwkJY2FzZSBUX0FnZzoKKwkJCXsKKwkJCQlBZ2cgKmFnZyA9IChBZ2cgKikgcGxh bjsKKwkJCQlKVU1CTEVfVkFMVUUoYWdnLT5hZ2dzdHJhdGVneSk7CisJCQkJSlVNQkxFX1ZBTFVF KGFnZy0+YWdnc3BsaXQpOworCQkJCS8qIFNraXAgYWxsIG90aGVyIGZpZWxkcyBzaW5jZSBFWFBM QUlOIGRvZXMgbm90IHNob3cgdGhlbSBlaXRoZXIgKi8KKwkJCX0KKwkJCWJyZWFrOworCQljYXNl IFRfR3JvdXA6CisJCQl7CisJCQkJR3JvdXAgKmdwbGFuID0gKEdyb3VwICopIHBsYW47CisJCQkJ aW50IGk7CisJCQkJZm9yIChpID0gMDsgaSA8IGdwbGFuLT5udW1Db2xzOyBpKyspCisJCQkJewor CQkJCQlKVU1CTEVfVkFMVUUoZ3BsYW4tPmdycENvbElkeFtpXSk7CisJCQkJCUpVTUJMRV9WQUxV RShncGxhbi0+Z3JwT3BlcmF0b3JzW2ldKTsKKwkJCQkJSlVNQkxFX1ZBTFVFKGdwbGFuLT5ncnBD b2xsYXRpb25zW2ldKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX1dpbmRvd0Fn ZzoKKwkJCXsKKwkJCQlXaW5kb3dBZ2cgKndwbGFuID0gKFdpbmRvd0FnZyAqKSBwbGFuOworCQkJ CUp1bWJsZU5vZGUoanN0YXRlLCAoTm9kZSAqKSB3cGxhbi0+cnVuQ29uZGl0aW9uT3JpZyk7CisJ CQkJLyogU2tpcCBhbGwgb3RoZXIgZmllbGRzIHNpbmNlIEVYUExBSU4gZG9lcyBub3Qgc2hvdyB0 aGVtIGVpdGhlciAqLworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9SZXN1bHQ6CisJCQl7CisJ CQkJUmVzdWx0ICpzcGxhbiA9IChSZXN1bHQgKikgcGxhbjsKKwkJCQlKdW1ibGVOb2RlKGpzdGF0 ZSwgc3BsYW4tPnJlc2NvbnN0YW50cXVhbCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX1By b2plY3RTZXQ6CisJCQkvKiBQcm9qZWN0U2V0IG5vZGUgaGFzIG5vIGZpZWxkcyBvZiBpdHMgb3du ICovCisJCQlicmVhazsKKwkJY2FzZSBUX01vZGlmeVRhYmxlOgorCQkJeworCQkJCU1vZGlmeVRh YmxlICpzcGxhbiA9IChNb2RpZnlUYWJsZSAqKSBwbGFuOworCQkJCUxpc3RDZWxsICpsYzsKKwkJ CQlKVU1CTEVfVkFMVUUoc3BsYW4tPm9wZXJhdGlvbik7CisJCQkJZm9yZWFjaCAobGMsIHNwbGFu LT5yZXN1bHRSZWxhdGlvbnMpCisJCQkJeworCQkJCQlKdW1ibGVUYXJnZXRSZWwoanN0YXRlLCBy dGFibGUsIHBsYW4sIGxmaXJzdF9pbnQobGMpKTsKKwkJCQl9CisJCQkJSlVNQkxFX1ZBTFVFKHNw bGFuLT5vbkNvbmZsaWN0QWN0aW9uKTsKKwkJCQlmb3JlYWNoIChsYywgc3BsYW4tPmFyYml0ZXJJ bmRleGVzKQorCQkJCXsKKwkJCQkJSnVtYmxlVGFyZ2V0UmVsKGpzdGF0ZSwgcnRhYmxlLCBwbGFu LCBsZmlyc3RfaW50KGxjKSk7CisJCQkJfQorCQkJCUp1bWJsZU5vZGUoanN0YXRlLCBzcGxhbi0+ b25Db25mbGljdFdoZXJlKTsKKwkJCQkvKiBTa2lwIGFsbCBvdGhlciBmaWVsZHMgc2luY2UgRVhQ TEFJTiBkb2VzIG5vdCBzaG93IHRoZW0gZWl0aGVyICovCisJCQl9CisJCQlicmVhazsKKwkJY2Fz ZSBUX0FwcGVuZDoKKwkJCS8qIERlc2NlbmRpbmcgaW50byBBcHBlbmQgbm9kZSBjaGlsZHJlbiBp cyBoYW5kbGVkIGJ5IHRoZSBjYWxsZXIgKi8KKwkJCWJyZWFrOworCQljYXNlIFRfTWVyZ2VBcHBl bmQ6CisJCQkvKiBEZXNjZW5kaW5nIGludG8gTWVyZ2VBcHBlbmQgbm9kZSBjaGlsZHJlbiBpcyBo YW5kbGVkIGJ5IHRoZSBjYWxsZXIgKi8KKwkJCWJyZWFrOworCQljYXNlIFRfUmVjdXJzaXZlVW5p b246CisJCQkvKiBTa2lwIGFsbCBSZWN1cnNpdmVVbmlvbiBub2RlIGZpZWxkcyBzaW5jZSBFWFBM QUlOIGRvZXMgbm90IHNob3cgdGhlbSBlaXRoZXIgKi8KKwkJCWJyZWFrOworCQljYXNlIFRfQml0 bWFwQW5kOgorCQkJLyogRGVzY2VuZGluZyBpbnRvIEJpdG1hcEFuZCBub2RlIGNoaWxkcmVuIGlz IGhhbmRsZWQgYnkgdGhlIGNhbGxlciAqLworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBPcjoK KwkJCS8qIERlc2NlbmRpbmcgaW50byBCaXRtYXBPciBub2RlIGNoaWxkcmVuIGlzIGhhbmRsZWQg YnkgdGhlIGNhbGxlciAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi dW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLAorCQkJCSAoaW50KSBub2RlVGFnKHBsYW4pKTsK KwkJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA3 NDY4OTYxYjAxLi4xNjg4OGQxNTJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9k ZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAi bm9kZXMvcGxhbmp1bWJsZS5oIgogI2lmZGVmIE9QVElNSVpFUl9ERUJVRwogI2luY2x1ZGUgIm5v ZGVzL3ByaW50LmgiCiAjZW5kaWYKQEAgLTUzMiw2ICs1MzMsMTUgQEAgc3RhbmRhcmRfcGxhbm5l cihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlv bnMsCiAJQXNzZXJ0KGdsb2ItPmZpbmFscm93bWFya3MgPT0gTklMKTsKIAlBc3NlcnQoZ2xvYi0+ cmVzdWx0UmVsYXRpb25zID09IE5JTCk7CiAJQXNzZXJ0KGdsb2ItPmFwcGVuZFJlbGF0aW9ucyA9 PSBOSUwpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHBsYW4gaWRlbnRpZmllciBqdW1ibGUgaWYg bmVlZGVkCisJICoKKwkgKiBOb3RlIHRoZSBhY3R1YWwganVtYmxpbmcgaXMgZG9uZSBpbiB0aGUg dHJlZSB3YWxrIGluIHNldF9wbGFuX3JlZmVyZW5jZXMKKwkgKi8KKwlpZiAoY29tcHV0ZV9wbGFu X2lkID09IENPTVBVVEVfUExBTl9JRF9PTikKKwkJZ2xvYi0+cGxhbl9qdW1ibGVfc3RhdGUgPSBJ bml0aWFsaXplSnVtYmxlU3RhdGUoZmFsc2UpOworCiAJdG9wX3BsYW4gPSBzZXRfcGxhbl9yZWZl cmVuY2VzKHJvb3QsIHRvcF9wbGFuKTsKIAkvKiAuLi4gYW5kIHRoZSBzdWJwbGFucyAoYm90aCBy ZWd1bGFyIHN1YnBsYW5zIGFuZCBpbml0cGxhbnMpICovCiAJQXNzZXJ0KGxpc3RfbGVuZ3RoKGds b2ItPnN1YnBsYW5zKSA9PSBsaXN0X2xlbmd0aChnbG9iLT5zdWJyb290cykpOwpAQCAtNTcwLDYg KzU4MCwxMyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVl cnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnN0bXRfbG9jYXRpb24gPSBw YXJzZS0+c3RtdF9sb2NhdGlvbjsKIAlyZXN1bHQtPnN0bXRfbGVuID0gcGFyc2UtPnN0bXRfbGVu OwogCisJaWYgKGNvbXB1dGVfcGxhbl9pZCA9PSBDT01QVVRFX1BMQU5fSURfT04pCisJeworCQly ZXN1bHQtPnBsYW5JZCA9IEhhc2hKdW1ibGVTdGF0ZShnbG9iLT5wbGFuX2p1bWJsZV9zdGF0ZSk7 CisJCXBmcmVlKGdsb2ItPnBsYW5fanVtYmxlX3N0YXRlLT5qdW1ibGUpOworCQlwZnJlZShnbG9i LT5wbGFuX2p1bWJsZV9zdGF0ZSk7CisJfQorCiAJcmVzdWx0LT5qaXRGbGFncyA9IFBHSklUX05P TkU7CiAJaWYgKGppdF9lbmFibGVkICYmIGppdF9hYm92ZV9jb3N0ID49IDAgJiYKIAkJdG9wX3Bs YW4tPnRvdGFsX2Nvc3QgPiBqaXRfYWJvdmVfY29zdCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Nl dHJlZnMuYwppbmRleCA2ZDIzZGYxMDhkLi5jMDJmOTM5NjkwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190 eXBlLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9k ZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvcGxhbmp1bWJsZS5oIgogI2luY2x1ZGUgIm9wdGlt aXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKICNpbmNs dWRlICJvcHRpbWl6ZXIvcGxhbm1haW4uaCIKQEAgLTEyOTUsNiArMTI5NiwxMyBAQCBzZXRfcGxh bl9yZWZzKFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpwbGFuLCBpbnQgcnRvZmZzZXQpCiAJCQli cmVhazsKIAl9CiAKKwkvKgorCSAqIElmIGVuYWJsZWQsIGFwcGVuZCBzaWduaWZpY2FudCBpbmZv cm1hdGlvbiB0byB0aGUgcGxhbiBpZGVudGlmaWVyIGp1bWJsZQorCSAqICh3ZSBkbyB0aGlzIGhl cmUgc2luY2Ugd2UncmUgYWxyZWFkeSB3YWxraW5nIHRoZSB0cmVlIGluIGEgbmVhci1maW5hbCBz dGF0ZSkKKwkgKi8KKwlpZiAoY29tcHV0ZV9wbGFuX2lkID09IENPTVBVVEVfUExBTl9JRF9PTikK KwkJSnVtYmxlUGxhbk5vZGUocm9vdC0+Z2xvYi0+cGxhbl9qdW1ibGVfc3RhdGUsIHJvb3QtPmds b2ItPmZpbmFscnRhYmxlLCBwbGFuKTsKKwogCS8qCiAJICogTm93IHJlY3Vyc2UgaW50byBjaGls ZCBwbGFucywgaWYgYW55CiAJICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCA4NTkwMjc4ODE4Li4wM2Ew NGExOThlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0xMTA2LDYgKzExMDYsNyBAQCBleGVjX3NpbXBs ZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAJCXNpemVfdAkJY21kdGFnbGVuOwog CiAJCXBnc3RhdF9yZXBvcnRfcXVlcnlfaWQoMCwgdHJ1ZSk7CisJCXBnc3RhdF9yZXBvcnRfcGxh bl9pZCgwLCAwLCB0cnVlKTsKIAogCQkvKgogCQkgKiBHZXQgdGhlIGNvbW1hbmQgbmFtZSBmb3Ig dXNlIGluIHN0YXR1cyBkaXNwbGF5IChpdCBhbHNvIGJlY29tZXMgdGhlCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNrZW5kX3N0YXR1cy5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYwppbmRleCBiZjMzZTMzYTRlLi43N2YzY2Ex NGZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNrZW5kX3N0YXR1 cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMKQEAg LTM3OSw2ICszNzksNyBAQCBwZ3N0YXRfYmVzdGFydCh2b2lkKQogCWxiZWVudHJ5LnN0X3Byb2dy ZXNzX2NvbW1hbmQgPSBQUk9HUkVTU19DT01NQU5EX0lOVkFMSUQ7CiAJbGJlZW50cnkuc3RfcHJv Z3Jlc3NfY29tbWFuZF90YXJnZXQgPSBJbnZhbGlkT2lkOwogCWxiZWVudHJ5LnN0X3F1ZXJ5X2lk ID0gVUlOVDY0Q09OU1QoMCk7CisJbGJlZW50cnkuc3RfcGxhbl9pZCA9IFVJTlQ2NENPTlNUKDAp OwogCiAJLyoKIAkgKiB3ZSBkb24ndCB6ZXJvIHN0X3Byb2dyZXNzX3BhcmFtIGhlcmUgdG8gc2F2 ZSBjeWNsZXM7IG5vYm9keSBzaG91bGQKQEAgLTUzMyw2ICs1MzQsNyBAQCBwZ3N0YXRfcmVwb3J0 X2FjdGl2aXR5KEJhY2tlbmRTdGF0ZSBzdGF0ZSwgY29uc3QgY2hhciAqY21kX3N0cikKIAkJCS8q IHN0X3hhY3Rfc3RhcnRfdGltZXN0YW1wIGFuZCB3YWl0X2V2ZW50X2luZm8gYXJlIGFsc28gZGlz YWJsZWQgKi8KIAkJCWJlZW50cnktPnN0X3hhY3Rfc3RhcnRfdGltZXN0YW1wID0gMDsKIAkJCWJl ZW50cnktPnN0X3F1ZXJ5X2lkID0gVUlOVDY0Q09OU1QoMCk7CisJCQliZWVudHJ5LT5zdF9wbGFu X2lkID0gVUlOVDY0Q09OU1QoMCk7CiAJCQlwcm9jLT53YWl0X2V2ZW50X2luZm8gPSAwOwogCQkJ UEdTVEFUX0VORF9XUklURV9BQ1RJVklUWShiZWVudHJ5KTsKIAkJfQpAQCAtNTg4LDEyICs1OTAs MTUgQEAgcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShCYWNrZW5kU3RhdGUgc3RhdGUsIGNvbnN0IGNo YXIgKmNtZF9zdHIpCiAJYmVlbnRyeS0+c3Rfc3RhdGVfc3RhcnRfdGltZXN0YW1wID0gY3VycmVu dF90aW1lc3RhbXA7CiAKIAkvKgotCSAqIElmIGEgbmV3IHF1ZXJ5IGlzIHN0YXJ0ZWQsIHdlIHJl c2V0IHRoZSBxdWVyeSBpZGVudGlmaWVyIGFzIGl0J2xsIG9ubHkKLQkgKiBiZSBrbm93biBhZnRl ciBwYXJzZSBhbmFseXNpcywgdG8gYXZvaWQgcmVwb3J0aW5nIGxhc3QgcXVlcnkncwotCSAqIGlk ZW50aWZpZXIuCisJICogSWYgYSBuZXcgcXVlcnkgaXMgc3RhcnRlZCwgd2UgcmVzZXQgdGhlIHF1 ZXJ5IGFuZCBwbGFuIGlkZW50aWZpZXIgYXMgaXQnbGwgb25seQorCSAqIGJlIGtub3duIGFmdGVy IHBhcnNlIGFuYWx5c2lzIC8gcGxhbm5pbmcsIHRvIGF2b2lkIHJlcG9ydGluZyBsYXN0IHF1ZXJ5 J3MKKwkgKiBpZGVudGlmaWVycy4KIAkgKi8KIAlpZiAoc3RhdGUgPT0gU1RBVEVfUlVOTklORykK Kwl7CiAJCWJlZW50cnktPnN0X3F1ZXJ5X2lkID0gVUlOVDY0Q09OU1QoMCk7CisJCWJlZW50cnkt PnN0X3BsYW5faWQgPSBVSU5UNjRDT05TVCgwKTsKKwl9CiAKIAlpZiAoY21kX3N0ciAhPSBOVUxM KQogCXsKQEAgLTY0NCw2ICs2NDksNDUgQEAgcGdzdGF0X3JlcG9ydF9xdWVyeV9pZCh1aW50NjQg cXVlcnlfaWQsIGJvb2wgZm9yY2UpCiAJUEdTVEFUX0VORF9XUklURV9BQ1RJVklUWShiZWVudHJ5 KTsKIH0KIAorLyogLS0tLS0tLS0KKyAqIHBnc3RhdF9yZXBvcnRfcGxhbl9pZCgpIC0KKyAqCisg KiBDYWxsZWQgdG8gdXBkYXRlIHRvcC1sZXZlbCBwbGFuIGlkZW50aWZpZXIuCisgKiAtLS0tLS0t LQorICovCit2b2lkCitwZ3N0YXRfcmVwb3J0X3BsYW5faWQodWludDY0IHBsYW5faWQsIHVpbnQ2 NCBxdWVyeV9pZCwgYm9vbCBmb3JjZSkKK3sKKwl2b2xhdGlsZSBQZ0JhY2tlbmRTdGF0dXMgKmJl ZW50cnkgPSBNeUJFRW50cnk7CisKKwkvKgorCSAqIGlmIHRyYWNrX2FjdGl2aXRpZXMgaXMgZGlz YWJsZWQsIHN0X3BsYW5faWQgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuCisJICogcmVzZXQKKwkg Ki8KKwlpZiAoIWJlZW50cnkgfHwgIXBnc3RhdF90cmFja19hY3Rpdml0aWVzKQorCQlyZXR1cm47 CisKKwkvKgorCSAqIFdlIG9ubHkgcmVwb3J0IHRoZSB0b3AtbGV2ZWwgcGxhbiBpZGVudGlmaWVy cy4gIFRoZSBzdG9yZWQgcGxhbl9pZCBpcworCSAqIHJlc2V0IHdoZW4gYSBiYWNrZW5kIGNhbGxz IHBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVOTklORyksIG9yCisJICogd2l0aCBhbiBl eHBsaWNpdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gdXNpbmcgdGhlIGZvcmNlIGZsYWcuICBJZiB0 aGUKKwkgKiBzYXZlZCBwbGFuIGlkZW50aWZpZXIgaXMgbm90IHplcm8gb3IgdGhlIHF1ZXJ5IGlk ZW50aWZpZXIgaXMgMCwKKwkgKiBpdCBtZWFucyB0aGF0IGl0J3Mgbm90IGEgdG9wLWxldmVsIGNv bW1hbmQsIHNvIGlnbm9yZSB0aGUgb25lIHByb3ZpZGVkCisJICogdW5sZXNzIGl0J3MgYW4gZXhw bGljaXQgY2FsbCB0byByZXNldCB0aGUgaWRlbnRpZmllci4KKwkgKi8KKwlpZiAoKGJlZW50cnkt PnN0X3BsYW5faWQgIT0gMCB8fCBxdWVyeV9pZCA9PSAwKSAmJiAhZm9yY2UpCisJCXJldHVybjsK KworCS8qCisJICogVXBkYXRlIG15IHN0YXR1cyBlbnRyeSwgZm9sbG93aW5nIHRoZSBwcm90b2Nv bCBvZiBidW1waW5nCisJICogc3RfY2hhbmdlY291bnQgYmVmb3JlIGFuZCBhZnRlci4gIFdlIHVz ZSBhIHZvbGF0aWxlIHBvaW50ZXIgaGVyZSB0bworCSAqIGVuc3VyZSB0aGUgY29tcGlsZXIgZG9l c24ndCB0cnkgdG8gZ2V0IGN1dGUuCisJICovCisJUEdTVEFUX0JFR0lOX1dSSVRFX0FDVElWSVRZ KGJlZW50cnkpOworCWJlZW50cnktPnN0X3BsYW5faWQgPSBwbGFuX2lkOworCVBHU1RBVF9FTkRf V1JJVEVfQUNUSVZJVFkoYmVlbnRyeSk7Cit9CisKIAogLyogLS0tLS0tLS0tLQogICogcGdzdGF0 X3JlcG9ydF9hcHBuYW1lKCkgLQpAQCAtMTA0MCw2ICsxMDg0LDI2IEBAIHBnc3RhdF9nZXRfbXlf cXVlcnlfaWQodm9pZCkKIAlyZXR1cm4gTXlCRUVudHJ5LT5zdF9xdWVyeV9pZDsKIH0KIAorLyog LS0tLS0tLS0tLQorICogcGdzdGF0X2dldF9teV9wbGFuX2lkKCkgLQorICoKKyAqIFJldHVybiBj dXJyZW50IGJhY2tlbmQncyBwbGFuIGlkZW50aWZpZXIuCisgKi8KK3VpbnQ2NAorcGdzdGF0X2dl dF9teV9wbGFuX2lkKHZvaWQpCit7CisJaWYgKCFNeUJFRW50cnkpCisJCXJldHVybiAwOworCisJ LyoKKwkgKiBUaGVyZSdzIG5vIG5lZWQgZm9yIGEgbG9jayBhcm91bmQgcGdzdGF0X2JlZ2luX3Jl YWRfYWN0aXZpdHkgLworCSAqIHBnc3RhdF9lbmRfcmVhZF9hY3Rpdml0eSBoZXJlIGFzIGl0J3Mg b25seSBjYWxsZWQgZnJvbQorCSAqIHBnX3N0YXRfZ2V0X2FjdGl2aXR5IHdoaWNoIGlzIGFscmVh ZHkgcHJvdGVjdGVkLCBvciBmcm9tIHRoZSBzYW1lCisJICogYmFja2VuZCB3aGljaCBtZWFucyB0 aGF0IHRoZXJlIHdvbid0IGJlIGNvbmN1cnJlbnQgd3JpdGVzLgorCSAqLworCXJldHVybiBNeUJF RW50cnktPnN0X3BsYW5faWQ7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIHBnc3RhdF9nZXRfYmFj a2VuZF90eXBlX2J5X3Byb2NfbnVtYmVyKCkgLQogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1 bmNzLmMKaW5kZXggNmZjMzRmNzQ5NC4uNGE1ZmM5NDg3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bn c3RhdGZ1bmNzLmMKQEAgLTMwMiw3ICszMDIsNyBAQCBwZ19zdGF0X2dldF9wcm9ncmVzc19pbmZv KFBHX0ZVTkNUSU9OX0FSR1MpCiBEYXR1bQogcGdfc3RhdF9nZXRfYWN0aXZpdHkoUEdfRlVOQ1RJ T05fQVJHUykKIHsKLSNkZWZpbmUgUEdfU1RBVF9HRVRfQUNUSVZJVFlfQ09MUwkzMQorI2RlZmlu ZSBQR19TVEFUX0dFVF9BQ1RJVklUWV9DT0xTCTMyCiAJaW50CQkJbnVtX2JhY2tlbmRzID0gcGdz dGF0X2ZldGNoX3N0YXRfbnVtYmFja2VuZHMoKTsKIAlpbnQJCQljdXJyX2JhY2tlbmQ7CiAJaW50 CQkJcGlkID0gUEdfQVJHSVNOVUxMKDApID8gLTEgOiBQR19HRVRBUkdfSU5UMzIoMCk7CkBAIC02 MTMsNiArNjEzLDEwIEBAIHBnX3N0YXRfZ2V0X2FjdGl2aXR5KFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CQkJbnVsbHNbMzBdID0gdHJ1ZTsKIAkJCWVsc2UKIAkJCQl2YWx1ZXNbMzBdID0gVUludDY0R2V0 RGF0dW0oYmVlbnRyeS0+c3RfcXVlcnlfaWQpOworCQkJaWYgKGJlZW50cnktPnN0X3BsYW5faWQg PT0gMCkKKwkJCQludWxsc1szMV0gPSB0cnVlOworCQkJZWxzZQorCQkJCXZhbHVlc1szMV0gPSBV SW50NjRHZXREYXR1bShiZWVudHJ5LT5zdF9wbGFuX2lkKTsKIAkJfQogCQllbHNlCiAJCXsKQEAg LTY0Miw2ICs2NDYsNyBAQCBwZ19zdGF0X2dldF9hY3Rpdml0eShQR19GVU5DVElPTl9BUkdTKQog CQkJbnVsbHNbMjhdID0gdHJ1ZTsKIAkJCW51bGxzWzI5XSA9IHRydWU7CiAJCQludWxsc1szMF0g PSB0cnVlOworCQkJbnVsbHNbMzFdID0gdHJ1ZTsKIAkJfQogCiAJCXR1cGxlc3RvcmVfcHV0dmFs dWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsIHZhbHVlcywgbnVsbHMpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA4Y2YxYWZiYWQyLi41MTM5YmEwOTRh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtNTAsNiArNTAsNyBAQAogI2lu Y2x1ZGUgImxpYnBxL2F1dGguaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgogI2luY2x1ZGUg ImxpYnBxL3NjcmFtLmgiCisjaW5jbHVkZSAibm9kZXMvcGxhbmp1bWJsZS5oIgogI2luY2x1ZGUg Im5vZGVzL3F1ZXJ5anVtYmxlLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNs dWRlICJvcHRpbWl6ZXIvZ2Vxby5oIgpAQCAtMzA5LDYgKzMxMCwyMyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGNvbmZpZ19lbnVtX2VudHJ5IGNvbXB1dGVfcXVlcnlfaWRfb3B0aW9uc1tdID0gewog CXtOVUxMLCAwLCBmYWxzZX0KIH07CiAKKy8qCisgKiBBbHRob3VnaCBvbmx5ICJvbiIgYW5kICJv ZmYiIGFyZSBkb2N1bWVudGVkLCB3ZSBhY2NlcHQKKyAqIGFsbCB0aGUgbGlrZWx5IHZhcmlhbnRz IG9mICJvbiIgYW5kICJvZmYiLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19lbnVt X2VudHJ5IGNvbXB1dGVfcGxhbl9pZF9vcHRpb25zW10gPSB7CisJeyJyZWdyZXNzIiwgQ09NUFVU RV9QTEFOX0lEX1JFR1JFU1MsIGZhbHNlfSwKKwl7Im9uIiwgQ09NUFVURV9QTEFOX0lEX09OLCBm YWxzZX0sCisJeyJvZmYiLCBDT01QVVRFX1BMQU5fSURfT0ZGLCBmYWxzZX0sCisJeyJ0cnVlIiwg Q09NUFVURV9QTEFOX0lEX09OLCB0cnVlfSwKKwl7ImZhbHNlIiwgQ09NUFVURV9QTEFOX0lEX09G RiwgdHJ1ZX0sCisJeyJ5ZXMiLCBDT01QVVRFX1BMQU5fSURfT04sIHRydWV9LAorCXsibm8iLCBD T01QVVRFX1BMQU5fSURfT0ZGLCB0cnVlfSwKKwl7IjEiLCBDT01QVVRFX1BMQU5fSURfT04sIHRy dWV9LAorCXsiMCIsIENPTVBVVEVfUExBTl9JRF9PRkYsIHRydWV9LAorCXtOVUxMLCAwLCBmYWxz ZX0KK307CisKIC8qCiAgKiBBbHRob3VnaCBvbmx5ICJvbiIsICJvZmYiLCBhbmQgInBhcnRpdGlv biIgYXJlIGRvY3VtZW50ZWQsIHdlCiAgKiBhY2NlcHQgYWxsIHRoZSBsaWtlbHkgdmFyaWFudHMg b2YgIm9uIiBhbmQgIm9mZiIuCkBAIC00ODYzLDYgKzQ4ODEsMTYgQEAgc3RydWN0IGNvbmZpZ19l bnVtIENvbmZpZ3VyZU5hbWVzRW51bVtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7 CisJCXsiY29tcHV0ZV9wbGFuX2lkIiwgUEdDX1NVU0VULCBTVEFUU19NT05JVE9SSU5HLAorCQkJ Z2V0dGV4dF9ub29wKCJFbmFibGVzIGluLWNvcmUgY29tcHV0YXRpb24gb2YgcGxhbiBpZGVudGlm aWVycy4iKSwKKwkJCU5VTEwKKwkJfSwKKwkJJmNvbXB1dGVfcGxhbl9pZCwKKwkJQ09NUFVURV9Q TEFOX0lEX09GRiwgY29tcHV0ZV9wbGFuX2lkX29wdGlvbnMsCisJCU5VTEwsIE5VTEwsIE5VTEwK Kwl9LAorCiAJewogCQl7ImNvbnN0cmFpbnRfZXhjbHVzaW9uIiwgUEdDX1VTRVJTRVQsIFFVRVJZ X1RVTklOR19PVEhFUiwKIAkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyB0aGUgcGxhbm5lciB0byB1 c2UgY29uc3RyYWludHMgdG8gb3B0aW1pemUgcXVlcmllcy4iKSwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBhMmFjNzU3NWNhLi43MGZhN2Y4 ODZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl CkBAIC02NDksNiArNjQ5LDcgQEAKICMgLSBNb25pdG9yaW5nIC0KIAogI2NvbXB1dGVfcXVlcnlf aWQgPSBhdXRvCisjY29tcHV0ZV9wbGFuX2lkID0gb2ZmCiAjbG9nX3N0YXRlbWVudF9zdGF0cyA9 IG9mZgogI2xvZ19wYXJzZXJfc3RhdHMgPSBvZmYKICNsb2dfcGxhbm5lcl9zdGF0cyA9IG9mZgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggMmRjYzJkNDJkYS4uNTZmZWFlMjU4MyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CkBAIC01NTQ5LDkgKzU1NDksOSBAQAogICBwcm9uYW1lID0+ICdw Z19zdGF0X2dldF9hY3Rpdml0eScsIHByb3Jvd3MgPT4gJzEwMCcsIHByb2lzc3RyaWN0ID0+ICdm JywKICAgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9wYXJhbGxlbCA9 PiAncicsCiAgIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICdpbnQ0JywK LSAgcHJvYWxsYXJndHlwZXMgPT4gJ3tpbnQ0LG9pZCxpbnQ0LG9pZCx0ZXh0LHRleHQsdGV4dCx0 ZXh0LHRleHQsdGltZXN0YW1wdHosdGltZXN0YW1wdHosdGltZXN0YW1wdHosdGltZXN0YW1wdHos aW5ldCx0ZXh0LGludDQseGlkLHhpZCx0ZXh0LGJvb2wsdGV4dCx0ZXh0LGludDQsdGV4dCxudW1l cmljLHRleHQsYm9vbCx0ZXh0LGJvb2wsYm9vbCxpbnQ0LGludDh9JywKLSAgcHJvYXJnbW9kZXMg PT4gJ3tpLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8s byxvLG8sbyxvLG99JywKLSAgcHJvYXJnbmFtZXMgPT4gJ3twaWQsZGF0aWQscGlkLHVzZXN5c2lk LGFwcGxpY2F0aW9uX25hbWUsc3RhdGUscXVlcnksd2FpdF9ldmVudF90eXBlLHdhaXRfZXZlbnQs eGFjdF9zdGFydCxxdWVyeV9zdGFydCxiYWNrZW5kX3N0YXJ0LHN0YXRlX2NoYW5nZSxjbGllbnRf YWRkcixjbGllbnRfaG9zdG5hbWUsY2xpZW50X3BvcnQsYmFja2VuZF94aWQsYmFja2VuZF94bWlu LGJhY2tlbmRfdHlwZSxzc2wsc3NsdmVyc2lvbixzc2xjaXBoZXIsc3NsYml0cyxzc2xfY2xpZW50 X2RuLHNzbF9jbGllbnRfc2VyaWFsLHNzbF9pc3N1ZXJfZG4sZ3NzX2F1dGgsZ3NzX3ByaW5jLGdz c19lbmMsZ3NzX2RlbGVnYXRpb24sbGVhZGVyX3BpZCxxdWVyeV9pZH0nLAorICBwcm9hbGxhcmd0 eXBlcyA9PiAne2ludDQsb2lkLGludDQsb2lkLHRleHQsdGV4dCx0ZXh0LHRleHQsdGV4dCx0aW1l c3RhbXB0eix0aW1lc3RhbXB0eix0aW1lc3RhbXB0eix0aW1lc3RhbXB0eixpbmV0LHRleHQsaW50 NCx4aWQseGlkLHRleHQsYm9vbCx0ZXh0LHRleHQsaW50NCx0ZXh0LG51bWVyaWMsdGV4dCxib29s LHRleHQsYm9vbCxib29sLGludDQsaW50OCxpbnQ4fScsCisgIHByb2FyZ21vZGVzID0+ICd7aSxv LG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8s byxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3twaWQsZGF0aWQscGlkLHVzZXN5c2lkLGFwcGxp Y2F0aW9uX25hbWUsc3RhdGUscXVlcnksd2FpdF9ldmVudF90eXBlLHdhaXRfZXZlbnQseGFjdF9z dGFydCxxdWVyeV9zdGFydCxiYWNrZW5kX3N0YXJ0LHN0YXRlX2NoYW5nZSxjbGllbnRfYWRkcixj bGllbnRfaG9zdG5hbWUsY2xpZW50X3BvcnQsYmFja2VuZF94aWQsYmFja2VuZF94bWluLGJhY2tl bmRfdHlwZSxzc2wsc3NsdmVyc2lvbixzc2xjaXBoZXIsc3NsYml0cyxzc2xfY2xpZW50X2RuLHNz bF9jbGllbnRfc2VyaWFsLHNzbF9pc3N1ZXJfZG4sZ3NzX2F1dGgsZ3NzX3ByaW5jLGdzc19lbmMs Z3NzX2RlbGVnYXRpb24sbGVhZGVyX3BpZCxxdWVyeV9pZCxwbGFuX2lkfScsCiAgIHByb3NyYyA9 PiAncGdfc3RhdF9nZXRfYWN0aXZpdHknIH0sCiB7IG9pZCA9PiAnNjMxOCcsIGRlc2NyID0+ICdk ZXNjcmliZSB3YWl0IGV2ZW50cycsCiAgIHByb25hbWUgPT4gJ3BnX2dldF93YWl0X2V2ZW50cycs IHByb2Nvc3QgPT4gJzEwJywgcHJvcm93cyA9PiAnMjUwJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5k ZXggNTg3NDhkMmNhNi4uOTA2OGNiODI2ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTE2Myw2 ICsxNjMsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAKIAkvKiBwYXJ0aXRpb24g ZGVzY3JpcHRvcnMgKi8KIAlQYXJ0aXRpb25EaXJlY3RvcnkgcGFydGl0aW9uX2RpcmVjdG9yeSBw Z19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOworCisJLyogb3B0aW9uYWwganVtYmxlIHN0 YXRlIGZvciBwbGFuIGlkZW50aWZpZXIgY2xhY3VsYXRpb24gKi8KKwlzdHJ1Y3QgSnVtYmxlU3Rh dGUgKnBsYW5fanVtYmxlX3N0YXRlIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiB9 IFBsYW5uZXJHbG9iYWw7CiAKIC8qIG1hY3JvIGZvciBmZXRjaGluZyB0aGUgUGxhbiBhc3NvY2lh dGVkIHdpdGggYSBTdWJQbGFuIG5vZGUgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L3BsYW5qdW1ibGUuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5qdW1ibGUuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kMzViNjZhZWM0Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbmp1bWJsZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHBsYW5qdW1ibGUuaAorICoJICBQbGFuIGZpbmdlcnByaW50 aW5nLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI0LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElG SUNBVElPTgorICoJICBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFuanVtYmxlLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQTEFOSlVNQkxFX0gKKyNkZWZpbmUgUExBTkpVTUJM RV9ICisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9xdWVy eWp1bWJsZS5oIgorCisvKiBWYWx1ZXMgZm9yIHRoZSBjb21wdXRlX3BsYW5faWQgR1VDICovCitl bnVtIENvbXB1dGVQbGFuSWRUeXBlCit7CisJQ09NUFVURV9QTEFOX0lEX09GRiwKKwlDT01QVVRF X1BMQU5fSURfT04sCisJQ09NUFVURV9QTEFOX0lEX1JFR1JFU1MsCit9OworCisvKiBHVUMgcGFy YW1ldGVycyAqLworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb21wdXRlX3BsYW5faWQ7CisKK2V4 dGVybiB2b2lkIEp1bWJsZVBsYW5Ob2RlKEp1bWJsZVN0YXRlICpqdW1ibGUsIExpc3QqIHJ0YWJs ZSwgUGxhbiAqcGxhbik7CisKKyNlbmRpZgkJCQkJCQkvKiBQTEFOSlVNQkxFX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMv cGxhbm5vZGVzLmgKaW5kZXggNDYzMzEyMTY4OS4uMmYwNmQxZDQ5NiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmgKQEAgLTUzLDYgKzUzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAogCXVp bnQ2NAkJcXVlcnlJZDsJCS8qIHF1ZXJ5IGlkZW50aWZpZXIgKGNvcGllZCBmcm9tIFF1ZXJ5KSAq LwogCisJdWludDY0CQlwbGFuSWQ7CQkJLyogcGxhbiBpZGVudGlmaWVyIChjYWxjdWxhdGVkIGlm IGNvbXB1dGVfcGxhbl9pZCBpcyBlbmFibGVkLCBjYW4gYWxzbyBiZSBzZXQgYnkgcGx1Z2lucykg Ki8KKwogCWJvb2wJCWhhc1JldHVybmluZzsJLyogaXMgaXQgaW5zZXJ0fHVwZGF0ZXxkZWxldGV8 bWVyZ2UgUkVUVVJOSU5HPyAqLwogCiAJYm9vbAkJaGFzTW9kaWZ5aW5nQ1RFOwkvKiBoYXMgaW5z ZXJ0fHVwZGF0ZXxkZWxldGV8bWVyZ2UgaW4gV0lUSD8gKi8KQEAgLTgxMyw3ICs4MTUsNyBAQCB0 eXBlZGVmIHN0cnVjdCBOZXN0TG9vcAogCiB0eXBlZGVmIHN0cnVjdCBOZXN0TG9vcFBhcmFtCiB7 Ci0JcGdfbm9kZV9hdHRyKG5vX2VxdWFsLCBub19xdWVyeV9qdW1ibGUpCisJcGdfbm9kZV9hdHRy KG5vX2VxdWFsKQogCiAJTm9kZVRhZwkJdHlwZTsKIAlpbnQJCQlwYXJhbW5vOwkJLyogbnVtYmVy IG9mIHRoZSBQQVJBTV9FWEVDIFBhcmFtIHRvIHNldCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbm9kZXMvcHJpbW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRl eCBiMGVmMTk1MmU4Li5lYWM2NTExZjgxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9w cmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAtMTA1OCw4 ICsxMDU4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU3ViTGluawogICovCiB0eXBlZGVmIHN0cnVjdCBT dWJQbGFuCiB7Ci0JcGdfbm9kZV9hdHRyKG5vX3F1ZXJ5X2p1bWJsZSkKLQogCUV4cHIJCXhwcjsK IAkvKiBGaWVsZHMgY29waWVkIGZyb20gb3JpZ2luYWwgU3ViTGluazogKi8KIAlTdWJMaW5rVHlw ZSBzdWJMaW5rVHlwZTsJLyogc2VlIGFib3ZlICovCkBAIC0xMDkwLDggKzEwODgsOCBAQCB0eXBl ZGVmIHN0cnVjdCBTdWJQbGFuCiAJTGlzdAkgICAqcGFyUGFyYW07CQkvKiBpbmRpY2VzIG9mIGlu cHV0IFBhcmFtcyBmcm9tIHBhcmVudCBwbGFuICovCiAJTGlzdAkgICAqYXJnczsJCQkvKiBleHBy cyB0byBwYXNzIGFzIHBhclBhcmFtIHZhbHVlcyAqLwogCS8qIEVzdGltYXRlZCBleGVjdXRpb24g Y29zdHM6ICovCi0JQ29zdAkJc3RhcnR1cF9jb3N0OwkvKiBvbmUtdGltZSBzZXR1cCBjb3N0ICov Ci0JQ29zdAkJcGVyX2NhbGxfY29zdDsJLyogY29zdCBmb3IgZWFjaCBzdWJwbGFuIGV2YWx1YXRp b24gKi8KKwlDb3N0CQlzdGFydHVwX2Nvc3QgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25v cmUpOwkJLyogb25lLXRpbWUgc2V0dXAgY29zdCAqLworCUNvc3QJCXBlcl9jYWxsX2Nvc3QgcGdf bm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOwkvKiBjb3N0IGZvciBlYWNoIHN1YnBsYW4g ZXZhbHVhdGlvbiAqLwogfSBTdWJQbGFuOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvYmFja2VuZF9zdGF0dXMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfc3RhdHVz LmgKaW5kZXggNGU4YjM5YTY2ZC4uOGJiMDEyNTZkZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvYmFja2VuZF9zdGF0dXMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3N0 YXR1cy5oCkBAIC0xNzAsNiArMTcwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdCYWNrZW5kU3RhdHVz CiAKIAkvKiBxdWVyeSBpZGVudGlmaWVyLCBvcHRpb25hbGx5IGNvbXB1dGVkIHVzaW5nIHBvc3Rf cGFyc2VfYW5hbHl6ZV9ob29rICovCiAJdWludDY0CQlzdF9xdWVyeV9pZDsKKworCS8qIHBsYW4g aWRlbnRpZmllciwgb3B0aW9uYWxseSBjb21wdXRlZCBhZnRlciBwbGFubmluZyAqLworCXVpbnQ2 NAkJc3RfcGxhbl9pZDsKIH0gUGdCYWNrZW5kU3RhdHVzOwogCiAKQEAgLTMxNiw2ICszMTksNyBA QCBleHRlcm4gdm9pZCBwZ3N0YXRfY2xlYXJfYmFja2VuZF9hY3Rpdml0eV9zbmFwc2hvdCh2b2lk KTsKIC8qIEFjdGl2aXR5IHJlcG9ydGluZyBmdW5jdGlvbnMgKi8KIGV4dGVybiB2b2lkIHBnc3Rh dF9yZXBvcnRfYWN0aXZpdHkoQmFja2VuZFN0YXRlIHN0YXRlLCBjb25zdCBjaGFyICpjbWRfc3Ry KTsKIGV4dGVybiB2b2lkIHBnc3RhdF9yZXBvcnRfcXVlcnlfaWQodWludDY0IHF1ZXJ5X2lkLCBi b29sIGZvcmNlKTsKK2V4dGVybiB2b2lkIHBnc3RhdF9yZXBvcnRfcGxhbl9pZCh1aW50NjQgcXVl cnlfaWQsIHVpbnQ2NCBwbGFuX2lkLCBib29sIGZvcmNlKTsKIGV4dGVybiB2b2lkIHBnc3RhdF9y ZXBvcnRfdGVtcGZpbGUoc2l6ZV90IGZpbGVzaXplKTsKIGV4dGVybiB2b2lkIHBnc3RhdF9yZXBv cnRfYXBwbmFtZShjb25zdCBjaGFyICphcHBuYW1lKTsKIGV4dGVybiB2b2lkIHBnc3RhdF9yZXBv cnRfeGFjdF90aW1lc3RhbXAoVGltZXN0YW1wVHogdHN0YW1wKTsKQEAgLTMyMyw2ICszMjcsNyBA QCBleHRlcm4gY29uc3QgY2hhciAqcGdzdGF0X2dldF9iYWNrZW5kX2N1cnJlbnRfYWN0aXZpdHko aW50IHBpZCwgYm9vbCBjaGVja1VzZXIpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnBnc3RhdF9nZXRf Y3Jhc2hlZF9iYWNrZW5kX2FjdGl2aXR5KGludCBwaWQsIGNoYXIgKmJ1ZmZlciwKIAkJCQkJCQkJ CQkJCQkgICBpbnQgYnVmbGVuKTsKIGV4dGVybiB1aW50NjQgcGdzdGF0X2dldF9teV9xdWVyeV9p ZCh2b2lkKTsKK2V4dGVybiB1aW50NjQgcGdzdGF0X2dldF9teV9wbGFuX2lkKHZvaWQpOwogZXh0 ZXJuIEJhY2tlbmRUeXBlIHBnc3RhdF9nZXRfYmFja2VuZF90eXBlX2J5X3Byb2NfbnVtYmVyKFBy b2NOdW1iZXIgcHJvY051bWJlcik7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9leHBsYWluLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5v dXQKaW5kZXggZWUzMWU0MWQ1MC4uOGJmYTNjMWE1ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9leHBsYWluLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2V4cGxhaW4ub3V0CkBAIC02OTksNiArNjk5LDE3IEBAIHNlbGVjdCBleHBsYWluX2ZpbHRlcign ZXhwbGFpbiAodmVyYm9zZSkgY3JlYXRlIHRhYmxlIHRlc3RfY3RhcyBhcyBzZWxlY3QgMScpOwog IFF1ZXJ5IElkZW50aWZpZXI6IE4KICgzIHJvd3MpCiAKKy0tIFRlc3QgY29tcHV0ZV9wbGFuX2lk CitzZXQgY29tcHV0ZV9wbGFuX2lkID0gb247CitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxh aW4gKHZlcmJvc2UpIHNlbGVjdCAqIGZyb20gaW50OF90YmwgaTgnKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBleHBsYWluX2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBTZXEgU2NhbiBvbiBwdWJsaWMuaW50OF90YmwgaTggIChjb3N0PU4uTi4uTi5OIHJvd3M9 TiB3aWR0aD1OKQorICAgT3V0cHV0OiBxMSwgcTIKKyBRdWVyeSBJZGVudGlmaWVyOiBOCisgUGxh biBJZGVudGlmaWVyOiBOCisoNCByb3dzKQorCiAtLSBUZXN0IFNFUklBTElaRSBvcHRpb24KIHNl bGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6ZSxidWZmZXJzIG9mZixzZXJpYWxp emUpIHNlbGVjdCAqIGZyb20gaW50OF90YmwgaTgnKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBleHBsYWluX2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1 bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IDMwMTRk MDQ3ZmUuLmMwNDFhNDlkZWEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cnVsZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CkBAIC0x NzYwLDkgKzE3NjAsMTAgQEAgcGdfc3RhdF9hY3Rpdml0eXwgU0VMRUNUIHMuZGF0aWQsCiAgICAg cy5iYWNrZW5kX3hpZCwKICAgICBzLmJhY2tlbmRfeG1pbiwKICAgICBzLnF1ZXJ5X2lkLAorICAg IHMucGxhbl9pZCwKICAgICBzLnF1ZXJ5LAogICAgIHMuYmFja2VuZF90eXBlCi0gICBGUk9NICgo cGdfc3RhdF9nZXRfYWN0aXZpdHkoTlVMTDo6aW50ZWdlcikgcyhkYXRpZCwgcGlkLCB1c2VzeXNp ZCwgYXBwbGljYXRpb25fbmFtZSwgc3RhdGUsIHF1ZXJ5LCB3YWl0X2V2ZW50X3R5cGUsIHdhaXRf ZXZlbnQsIHhhY3Rfc3RhcnQsIHF1ZXJ5X3N0YXJ0LCBiYWNrZW5kX3N0YXJ0LCBzdGF0ZV9jaGFu Z2UsIGNsaWVudF9hZGRyLCBjbGllbnRfaG9zdG5hbWUsIGNsaWVudF9wb3J0LCBiYWNrZW5kX3hp ZCwgYmFja2VuZF94bWluLCBiYWNrZW5kX3R5cGUsIHNzbCwgc3NsdmVyc2lvbiwgc3NsY2lwaGVy LCBzc2xiaXRzLCBzc2xfY2xpZW50X2RuLCBzc2xfY2xpZW50X3NlcmlhbCwgc3NsX2lzc3Vlcl9k biwgZ3NzX2F1dGgsIGdzc19wcmluYywgZ3NzX2VuYywgZ3NzX2RlbGVnYXRpb24sIGxlYWRlcl9w aWQsIHF1ZXJ5X2lkKQorICAgRlJPTSAoKHBnX3N0YXRfZ2V0X2FjdGl2aXR5KE5VTEw6OmludGVn ZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lzaWQsIGFwcGxpY2F0aW9uX25hbWUsIHN0YXRlLCBxdWVy eSwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50LCB4YWN0X3N0YXJ0LCBxdWVyeV9zdGFydCwg YmFja2VuZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGllbnRfYWRkciwgY2xpZW50X2hvc3RuYW1l LCBjbGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tlbmRfeG1pbiwgYmFja2VuZF90eXBlLCBz c2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0cywgc3NsX2NsaWVudF9kbiwgc3NsX2Ns aWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJfZG4sIGdzc19hdXRoLCBnc3NfcHJpbmMsIGdzc19lbmMs IGdzc19kZWxlZ2F0aW9uLCBsZWFkZXJfcGlkLCBxdWVyeV9pZCwgcGxhbl9pZCkKICAgICAgTEVG VCBKT0lOIHBnX2RhdGFiYXNlIGQgT04gKChzLmRhdGlkID0gZC5vaWQpKSkKICAgICAgTEVGVCBK T0lOIHBnX2F1dGhpZCB1IE9OICgocy51c2VzeXNpZCA9IHUub2lkKSkpOwogcGdfc3RhdF9hbGxf aW5kZXhlc3wgU0VMRUNUIGMub2lkIEFTIHJlbGlkLApAQCAtMTg4Niw3ICsxODg3LDcgQEAgcGdf c3RhdF9nc3NhcGl8IFNFTEVDVCBwaWQsCiAgICAgZ3NzX3ByaW5jIEFTIHByaW5jaXBhbCwKICAg ICBnc3NfZW5jIEFTIGVuY3J5cHRlZCwKICAgICBnc3NfZGVsZWdhdGlvbiBBUyBjcmVkZW50aWFs c19kZWxlZ2F0ZWQKLSAgIEZST00gcGdfc3RhdF9nZXRfYWN0aXZpdHkoTlVMTDo6aW50ZWdlcikg cyhkYXRpZCwgcGlkLCB1c2VzeXNpZCwgYXBwbGljYXRpb25fbmFtZSwgc3RhdGUsIHF1ZXJ5LCB3 YWl0X2V2ZW50X3R5cGUsIHdhaXRfZXZlbnQsIHhhY3Rfc3RhcnQsIHF1ZXJ5X3N0YXJ0LCBiYWNr ZW5kX3N0YXJ0LCBzdGF0ZV9jaGFuZ2UsIGNsaWVudF9hZGRyLCBjbGllbnRfaG9zdG5hbWUsIGNs aWVudF9wb3J0LCBiYWNrZW5kX3hpZCwgYmFja2VuZF94bWluLCBiYWNrZW5kX3R5cGUsIHNzbCwg c3NsdmVyc2lvbiwgc3NsY2lwaGVyLCBzc2xiaXRzLCBzc2xfY2xpZW50X2RuLCBzc2xfY2xpZW50 X3NlcmlhbCwgc3NsX2lzc3Vlcl9kbiwgZ3NzX2F1dGgsIGdzc19wcmluYywgZ3NzX2VuYywgZ3Nz X2RlbGVnYXRpb24sIGxlYWRlcl9waWQsIHF1ZXJ5X2lkKQorICAgRlJPTSBwZ19zdGF0X2dldF9h Y3Rpdml0eShOVUxMOjppbnRlZ2VyKSBzKGRhdGlkLCBwaWQsIHVzZXN5c2lkLCBhcHBsaWNhdGlv bl9uYW1lLCBzdGF0ZSwgcXVlcnksIHdhaXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCwgeGFjdF9z dGFydCwgcXVlcnlfc3RhcnQsIGJhY2tlbmRfc3RhcnQsIHN0YXRlX2NoYW5nZSwgY2xpZW50X2Fk ZHIsIGNsaWVudF9ob3N0bmFtZSwgY2xpZW50X3BvcnQsIGJhY2tlbmRfeGlkLCBiYWNrZW5kX3ht aW4sIGJhY2tlbmRfdHlwZSwgc3NsLCBzc2x2ZXJzaW9uLCBzc2xjaXBoZXIsIHNzbGJpdHMsIHNz bF9jbGllbnRfZG4sIHNzbF9jbGllbnRfc2VyaWFsLCBzc2xfaXNzdWVyX2RuLCBnc3NfYXV0aCwg Z3NzX3ByaW5jLCBnc3NfZW5jLCBnc3NfZGVsZWdhdGlvbiwgbGVhZGVyX3BpZCwgcXVlcnlfaWQs IHBsYW5faWQpCiAgIFdIRVJFIChjbGllbnRfcG9ydCBJUyBOT1QgTlVMTCk7CiBwZ19zdGF0X2lv fCBTRUxFQ1QgYmFja2VuZF90eXBlLAogICAgIG9iamVjdCwKQEAgLTIwOTAsNyArMjA5MSw3IEBA IHBnX3N0YXRfcmVwbGljYXRpb258IFNFTEVDVCBzLnBpZCwKICAgICB3LnN5bmNfcHJpb3JpdHks CiAgICAgdy5zeW5jX3N0YXRlLAogICAgIHcucmVwbHlfdGltZQotICAgRlJPTSAoKHBnX3N0YXRf Z2V0X2FjdGl2aXR5KE5VTEw6OmludGVnZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lzaWQsIGFwcGxp Y2F0aW9uX25hbWUsIHN0YXRlLCBxdWVyeSwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50LCB4 YWN0X3N0YXJ0LCBxdWVyeV9zdGFydCwgYmFja2VuZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGll bnRfYWRkciwgY2xpZW50X2hvc3RuYW1lLCBjbGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tl bmRfeG1pbiwgYmFja2VuZF90eXBlLCBzc2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0 cywgc3NsX2NsaWVudF9kbiwgc3NsX2NsaWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJfZG4sIGdzc19h dXRoLCBnc3NfcHJpbmMsIGdzc19lbmMsIGdzc19kZWxlZ2F0aW9uLCBsZWFkZXJfcGlkLCBxdWVy eV9pZCkKKyAgIEZST00gKChwZ19zdGF0X2dldF9hY3Rpdml0eShOVUxMOjppbnRlZ2VyKSBzKGRh dGlkLCBwaWQsIHVzZXN5c2lkLCBhcHBsaWNhdGlvbl9uYW1lLCBzdGF0ZSwgcXVlcnksIHdhaXRf ZXZlbnRfdHlwZSwgd2FpdF9ldmVudCwgeGFjdF9zdGFydCwgcXVlcnlfc3RhcnQsIGJhY2tlbmRf c3RhcnQsIHN0YXRlX2NoYW5nZSwgY2xpZW50X2FkZHIsIGNsaWVudF9ob3N0bmFtZSwgY2xpZW50 X3BvcnQsIGJhY2tlbmRfeGlkLCBiYWNrZW5kX3htaW4sIGJhY2tlbmRfdHlwZSwgc3NsLCBzc2x2 ZXJzaW9uLCBzc2xjaXBoZXIsIHNzbGJpdHMsIHNzbF9jbGllbnRfZG4sIHNzbF9jbGllbnRfc2Vy aWFsLCBzc2xfaXNzdWVyX2RuLCBnc3NfYXV0aCwgZ3NzX3ByaW5jLCBnc3NfZW5jLCBnc3NfZGVs ZWdhdGlvbiwgbGVhZGVyX3BpZCwgcXVlcnlfaWQsIHBsYW5faWQpCiAgICAgIEpPSU4gcGdfc3Rh dF9nZXRfd2FsX3NlbmRlcnMoKSB3KHBpZCwgc3RhdGUsIHNlbnRfbHNuLCB3cml0ZV9sc24sIGZs dXNoX2xzbiwgcmVwbGF5X2xzbiwgd3JpdGVfbGFnLCBmbHVzaF9sYWcsIHJlcGxheV9sYWcsIHN5 bmNfcHJpb3JpdHksIHN5bmNfc3RhdGUsIHJlcGx5X3RpbWUpIE9OICgocy5waWQgPSB3LnBpZCkp KQogICAgICBMRUZUIEpPSU4gcGdfYXV0aGlkIHUgT04gKChzLnVzZXN5c2lkID0gdS5vaWQpKSk7 CiBwZ19zdGF0X3JlcGxpY2F0aW9uX3Nsb3RzfCBTRUxFQ1Qgcy5zbG90X25hbWUsCkBAIC0yMTI0 LDcgKzIxMjUsNyBAQCBwZ19zdGF0X3NzbHwgU0VMRUNUIHBpZCwKICAgICBzc2xfY2xpZW50X2Ru IEFTIGNsaWVudF9kbiwKICAgICBzc2xfY2xpZW50X3NlcmlhbCBBUyBjbGllbnRfc2VyaWFsLAog ICAgIHNzbF9pc3N1ZXJfZG4gQVMgaXNzdWVyX2RuCi0gICBGUk9NIHBnX3N0YXRfZ2V0X2FjdGl2 aXR5KE5VTEw6OmludGVnZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lzaWQsIGFwcGxpY2F0aW9uX25h bWUsIHN0YXRlLCBxdWVyeSwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50LCB4YWN0X3N0YXJ0 LCBxdWVyeV9zdGFydCwgYmFja2VuZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGllbnRfYWRkciwg Y2xpZW50X2hvc3RuYW1lLCBjbGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tlbmRfeG1pbiwg YmFja2VuZF90eXBlLCBzc2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0cywgc3NsX2Ns aWVudF9kbiwgc3NsX2NsaWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJfZG4sIGdzc19hdXRoLCBnc3Nf cHJpbmMsIGdzc19lbmMsIGdzc19kZWxlZ2F0aW9uLCBsZWFkZXJfcGlkLCBxdWVyeV9pZCkKKyAg IEZST00gcGdfc3RhdF9nZXRfYWN0aXZpdHkoTlVMTDo6aW50ZWdlcikgcyhkYXRpZCwgcGlkLCB1 c2VzeXNpZCwgYXBwbGljYXRpb25fbmFtZSwgc3RhdGUsIHF1ZXJ5LCB3YWl0X2V2ZW50X3R5cGUs IHdhaXRfZXZlbnQsIHhhY3Rfc3RhcnQsIHF1ZXJ5X3N0YXJ0LCBiYWNrZW5kX3N0YXJ0LCBzdGF0 ZV9jaGFuZ2UsIGNsaWVudF9hZGRyLCBjbGllbnRfaG9zdG5hbWUsIGNsaWVudF9wb3J0LCBiYWNr ZW5kX3hpZCwgYmFja2VuZF94bWluLCBiYWNrZW5kX3R5cGUsIHNzbCwgc3NsdmVyc2lvbiwgc3Ns Y2lwaGVyLCBzc2xiaXRzLCBzc2xfY2xpZW50X2RuLCBzc2xfY2xpZW50X3NlcmlhbCwgc3NsX2lz c3Vlcl9kbiwgZ3NzX2F1dGgsIGdzc19wcmluYywgZ3NzX2VuYywgZ3NzX2RlbGVnYXRpb24sIGxl YWRlcl9waWQsIHF1ZXJ5X2lkLCBwbGFuX2lkKQogICBXSEVSRSAoY2xpZW50X3BvcnQgSVMgTk9U IE5VTEwpOwogcGdfc3RhdF9zdWJzY3JpcHRpb258IFNFTEVDVCBzdS5vaWQgQVMgc3ViaWQsCiAg ICAgc3Uuc3VibmFtZSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cGxhaW4u c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwKaW5kZXggMGJhZmE4NzA0OS4u ZDc4N2FkMmNkYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwKQEAgLTE2Nyw2ICsxNjcsMTAg QEAgc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluICh2ZXJib3NlKSBzZWxlY3QgKiBmcm9t IGludDhfdGJsIGk4Jyk7CiBzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKHZlcmJvc2Up IGRlY2xhcmUgdGVzdF9jdXIgY3Vyc29yIGZvciBzZWxlY3QgKiBmcm9tIGludDhfdGJsJyk7CiBz ZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKHZlcmJvc2UpIGNyZWF0ZSB0YWJsZSB0ZXN0 X2N0YXMgYXMgc2VsZWN0IDEnKTsKIAorLS0gVGVzdCBjb21wdXRlX3BsYW5faWQKK3NldCBjb21w dXRlX3BsYW5faWQgPSBvbjsKK3NlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAodmVyYm9z ZSkgc2VsZWN0ICogZnJvbSBpbnQ4X3RibCBpOCcpOworCiAtLSBUZXN0IFNFUklBTElaRSBvcHRp b24KIHNlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6ZSxidWZmZXJzIG9mZixz ZXJpYWxpemUpIHNlbGVjdCAqIGZyb20gaW50OF90YmwgaTgnKTsKIHNlbGVjdCBleHBsYWluX2Zp bHRlcignZXhwbGFpbiAoYW5hbHl6ZSxzZXJpYWxpemUgdGV4dCxidWZmZXJzLHRpbWluZyBvZmYp IHNlbGVjdCAqIGZyb20gaW50OF90YmwgaTgnKTsKLS0gCjIuNDcuMQoK --00000000000063f644062abf42fc Content-Type: application/octet-stream; name="0001-Allow-using-jumbling-logic-outside-of-query-jumble-u.patch" Content-Disposition: attachment; filename="0001-Allow-using-jumbling-logic-outside-of-query-jumble-u.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5fsow5o0 RnJvbSAyMzkxMWRmNWJmOWU5ODQxYjAyYTMwMDg0MDJjODcwYThiNzU3MjU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpEYXRlOiBU dWUsIDMxIERlYyAyMDI0IDE1OjA1OjM5IC0wODAwClN1YmplY3Q6IFtQQVRDSCAxLzRdIEFsbG93 IHVzaW5nIGp1bWJsaW5nIGxvZ2ljIG91dHNpZGUgb2YgcXVlcnkganVtYmxlIHVuaXQKIGZpbGUK ClRoaXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIgZm9yIGp1bWJsaW5nIGV4cHJlc3Npb25zIGluIG90 aGVyIGNvbnRleHRzCihlLmcuIHRvIGNhbGN1bGF0ZSBhIHBsYW4ganVtYmxlKSwgb3IgdG8gYWxs b3cgZXh0ZW5zaW9ucyB0byB1c2UKYSBtb2RpZmllZCBqdW1ibGluZyBsb2dpYyBtb3JlIGVhc2ls eS4KClRoaXMgaW50ZW50aW9uYWxseSBzdXBwb3J0cyB0aGUgdXNlIGNhc2Ugd2hlcmUgYSBzZXBh cmF0ZSBqdW1ibGluZyBsb2dpYwpkb2VzIG5vdCBjYXJlIGFib3V0IHJlY29yZGluZyBjb25zdGFu dHMsIGFzIHRoZSBxdWVyeSBqdW1ibGUgZG9lcy4KLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9xdWVy eWp1bWJsZWZ1bmNzLmMgfCA1OSArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCiBzcmMvaW5j bHVkZS9ub2Rlcy9xdWVyeWp1bWJsZS5oICAgICAgfCAgNiArKysKIDIgZmlsZXMgY2hhbmdlZCwg NDEgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1i bGVmdW5jcy5jCmluZGV4IGU4YmY5NTY5MGIuLjBiM2FmNDE2OWEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL25vZGVzL3F1ZXJ5anVtYmxlZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9x dWVyeWp1bWJsZWZ1bmNzLmMKQEAgLTUxLDEwICs1MSw3IEBAIGludAkJCWNvbXB1dGVfcXVlcnlf aWQgPSBDT01QVVRFX1FVRVJZX0lEX0FVVE87CiAgKi8KIGJvb2wJCXF1ZXJ5X2lkX2VuYWJsZWQg PSBmYWxzZTsKIAotc3RhdGljIHZvaWQgQXBwZW5kSnVtYmxlKEp1bWJsZVN0YXRlICpqc3RhdGUs Ci0JCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaXRlbSwgU2l6ZSBzaXplKTsKIHN0YXRpYyB2 b2lkIFJlY29yZENvbnN0TG9jYXRpb24oSnVtYmxlU3RhdGUgKmpzdGF0ZSwgaW50IGxvY2F0aW9u KTsKLXN0YXRpYyB2b2lkIF9qdW1ibGVOb2RlKEp1bWJsZVN0YXRlICpqc3RhdGUsIE5vZGUgKm5v ZGUpOwogc3RhdGljIHZvaWQgX2p1bWJsZUFfQ29uc3QoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgTm9k ZSAqbm9kZSk7CiBzdGF0aWMgdm9pZCBfanVtYmxlTGlzdChKdW1ibGVTdGF0ZSAqanN0YXRlLCBO b2RlICpub2RlKTsKIHN0YXRpYyB2b2lkIF9qdW1ibGVWYXJpYWJsZVNldFN0bXQoSnVtYmxlU3Rh dGUgKmpzdGF0ZSwgTm9kZSAqbm9kZSk7CkBAIC0xMDksMjggKzEwNiw0MiBAQCBDbGVhblF1ZXJ5 dGV4dChjb25zdCBjaGFyICpxdWVyeSwgaW50ICpsb2NhdGlvbiwgaW50ICpsZW4pCiB9CiAKIEp1 bWJsZVN0YXRlICoKLUp1bWJsZVF1ZXJ5KFF1ZXJ5ICpxdWVyeSkKK0luaXRpYWxpemVKdW1ibGVT dGF0ZShib29sIHJlY29yZF9jbG9jYXRpb25zKQogewotCUp1bWJsZVN0YXRlICpqc3RhdGUgPSBO VUxMOwotCi0JQXNzZXJ0KElzUXVlcnlJZEVuYWJsZWQoKSk7Ci0KLQlqc3RhdGUgPSAoSnVtYmxl U3RhdGUgKikgcGFsbG9jKHNpemVvZihKdW1ibGVTdGF0ZSkpOworCUp1bWJsZVN0YXRlICpqc3Rh dGUgPSAoSnVtYmxlU3RhdGUgKikgcGFsbG9jMChzaXplb2YoSnVtYmxlU3RhdGUpKTsKIAogCS8q IFNldCB1cCB3b3Jrc3BhY2UgZm9yIHF1ZXJ5IGp1bWJsaW5nICovCiAJanN0YXRlLT5qdW1ibGUg PSAodW5zaWduZWQgY2hhciAqKSBwYWxsb2MoSlVNQkxFX1NJWkUpOwogCWpzdGF0ZS0+anVtYmxl X2xlbiA9IDA7Ci0JanN0YXRlLT5jbG9jYXRpb25zX2J1Zl9zaXplID0gMzI7Ci0JanN0YXRlLT5j bG9jYXRpb25zID0gKExvY2F0aW9uTGVuICopCi0JCXBhbGxvYyhqc3RhdGUtPmNsb2NhdGlvbnNf YnVmX3NpemUgKiBzaXplb2YoTG9jYXRpb25MZW4pKTsKLQlqc3RhdGUtPmNsb2NhdGlvbnNfY291 bnQgPSAwOwotCWpzdGF0ZS0+aGlnaGVzdF9leHRlcm5fcGFyYW1faWQgPSAwOworCisJaWYgKHJl Y29yZF9jbG9jYXRpb25zKQorCXsKKwkJanN0YXRlLT5jbG9jYXRpb25zX2J1Zl9zaXplID0gMzI7 CisJCWpzdGF0ZS0+Y2xvY2F0aW9ucyA9IChMb2NhdGlvbkxlbiAqKQorCQkJcGFsbG9jKGpzdGF0 ZS0+Y2xvY2F0aW9uc19idWZfc2l6ZSAqIHNpemVvZihMb2NhdGlvbkxlbikpOworCX0KKworCXJl dHVybiBqc3RhdGU7Cit9CisKK3VpbnQ2NAorSGFzaEp1bWJsZVN0YXRlKEp1bWJsZVN0YXRlICpq c3RhdGUpCit7CisJcmV0dXJuIERhdHVtR2V0VUludDY0KGhhc2hfYW55X2V4dGVuZGVkKGpzdGF0 ZS0+anVtYmxlLAorCQkJCQkJCQkJCQlqc3RhdGUtPmp1bWJsZV9sZW4sCisJCQkJCQkJCQkJCTAp KTsKK30KKworSnVtYmxlU3RhdGUgKgorSnVtYmxlUXVlcnkoUXVlcnkgKnF1ZXJ5KQoreworCUp1 bWJsZVN0YXRlICpqc3RhdGUgPSBJbml0aWFsaXplSnVtYmxlU3RhdGUodHJ1ZSk7CisKKwlBc3Nl cnQoSXNRdWVyeUlkRW5hYmxlZCgpKTsKIAogCS8qIENvbXB1dGUgcXVlcnkgSUQgYW5kIG1hcmsg dGhlIFF1ZXJ5IG5vZGUgd2l0aCBpdCAqLwotCV9qdW1ibGVOb2RlKGpzdGF0ZSwgKE5vZGUgKikg cXVlcnkpOwotCXF1ZXJ5LT5xdWVyeUlkID0gRGF0dW1HZXRVSW50NjQoaGFzaF9hbnlfZXh0ZW5k ZWQoanN0YXRlLT5qdW1ibGUsCi0JCQkJCQkJCQkJCQkJICBqc3RhdGUtPmp1bWJsZV9sZW4sCi0J CQkJCQkJCQkJCQkJICAwKSk7CisJSnVtYmxlTm9kZShqc3RhdGUsIChOb2RlICopIHF1ZXJ5KTsK KwlxdWVyeS0+cXVlcnlJZCA9IEhhc2hKdW1ibGVTdGF0ZShqc3RhdGUpOwogCiAJLyoKIAkgKiBJ ZiB3ZSBhcmUgdW5sdWNreSBlbm91Z2ggdG8gZ2V0IGEgaGFzaCBvZiB6ZXJvLCB1c2UgMSBpbnN0 ZWFkIGZvcgpAQCAtMTY0LDcgKzE3NSw3IEBAIEVuYWJsZVF1ZXJ5SWQodm9pZCkKICAqIEFwcGVu ZEp1bWJsZTogQXBwZW5kIGEgdmFsdWUgdGhhdCBpcyBzdWJzdGFudGl2ZSBpbiBhIGdpdmVuIHF1 ZXJ5IHRvCiAgKiB0aGUgY3VycmVudCBqdW1ibGUuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBB cHBlbmRKdW1ibGUoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqaXRl bSwgU2l6ZSBzaXplKQogewogCXVuc2lnbmVkIGNoYXIgKmp1bWJsZSA9IGpzdGF0ZS0+anVtYmxl OwpAQCAtMjA1LDcgKzIxNiw3IEBAIHN0YXRpYyB2b2lkCiBSZWNvcmRDb25zdExvY2F0aW9uKEp1 bWJsZVN0YXRlICpqc3RhdGUsIGludCBsb2NhdGlvbikKIHsKIAkvKiAtMSBpbmRpY2F0ZXMgdW5r bm93biBvciB1bmRlZmluZWQgbG9jYXRpb24gKi8KLQlpZiAobG9jYXRpb24gPj0gMCkKKwlpZiAo bG9jYXRpb24gPj0gMCAmJiBqc3RhdGUtPmNsb2NhdGlvbnNfYnVmX3NpemUgPiAwKQogCXsKIAkJ LyogZW5sYXJnZSBhcnJheSBpZiBuZWVkZWQgKi8KIAkJaWYgKGpzdGF0ZS0+Y2xvY2F0aW9uc19j b3VudCA+PSBqc3RhdGUtPmNsb2NhdGlvbnNfYnVmX3NpemUpCkBAIC0yMjQsNyArMjM1LDcgQEAg UmVjb3JkQ29uc3RMb2NhdGlvbihKdW1ibGVTdGF0ZSAqanN0YXRlLCBpbnQgbG9jYXRpb24pCiB9 CiAKICNkZWZpbmUgSlVNQkxFX05PREUoaXRlbSkgXAotCV9qdW1ibGVOb2RlKGpzdGF0ZSwgKE5v ZGUgKikgZXhwci0+aXRlbSkKKwlKdW1ibGVOb2RlKGpzdGF0ZSwgKE5vZGUgKikgZXhwci0+aXRl bSkKICNkZWZpbmUgSlVNQkxFX0xPQ0FUSU9OKGxvY2F0aW9uKSBcCiAJUmVjb3JkQ29uc3RMb2Nh dGlvbihqc3RhdGUsIGV4cHItPmxvY2F0aW9uKQogI2RlZmluZSBKVU1CTEVfRklFTEQoaXRlbSkg XApAQCAtMjM5LDggKzI1MCw4IEBAIGRvIHsgXAogCiAjaW5jbHVkZSAicXVlcnlqdW1ibGVmdW5j cy5mdW5jcy5jIgogCi1zdGF0aWMgdm9pZAotX2p1bWJsZU5vZGUoSnVtYmxlU3RhdGUgKmpzdGF0 ZSwgTm9kZSAqbm9kZSkKK3ZvaWQKK0p1bWJsZU5vZGUoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgTm9k ZSAqbm9kZSkKIHsKIAlOb2RlCSAgICpleHByID0gbm9kZTsKIApAQCAtMzA1LDcgKzMxNiw3IEBA IF9qdW1ibGVMaXN0KEp1bWJsZVN0YXRlICpqc3RhdGUsIE5vZGUgKm5vZGUpCiAJewogCQljYXNl IFRfTGlzdDoKIAkJCWZvcmVhY2gobCwgZXhwcikKLQkJCQlfanVtYmxlTm9kZShqc3RhdGUsIGxm aXJzdChsKSk7CisJCQkJSnVtYmxlTm9kZShqc3RhdGUsIGxmaXJzdChsKSk7CiAJCQlicmVhazsK IAkJY2FzZSBUX0ludExpc3Q6CiAJCQlmb3JlYWNoKGwsIGV4cHIpCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9xdWVyeWp1bWJsZS5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1i bGUuaAppbmRleCBmMWM1NWM4MDY3Li43ZjM2ZGQwMjVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9ub2Rlcy9xdWVyeWp1bWJsZS5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxl LmgKQEAgLTgzLDQgKzgzLDEwIEBAIElzUXVlcnlJZEVuYWJsZWQodm9pZCkKIAlyZXR1cm4gcXVl cnlfaWRfZW5hYmxlZDsKIH0KIAorLyogRnVuY3Rpb25zIGludGVuZGVkIGZvciBvdGhlciB1c2Vy cyBvZiBqdW1ibGluZyAoZS5nLiBwbGFuIGp1bWJsaW5nKSAqLworZXh0ZXJuIEp1bWJsZVN0YXRl ICpJbml0aWFsaXplSnVtYmxlU3RhdGUoYm9vbCByZWNvcmRfY2xvY2F0aW9ucyk7CitleHRlcm4g dm9pZCBBcHBlbmRKdW1ibGUoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hh ciAqaXRlbSwgU2l6ZSBzaXplKTsKK2V4dGVybiB2b2lkIEp1bWJsZU5vZGUoSnVtYmxlU3RhdGUg KmpzdGF0ZSwgTm9kZSAqbm9kZSk7CitleHRlcm4gdWludDY0IEhhc2hKdW1ibGVTdGF0ZShKdW1i bGVTdGF0ZSAqanN0YXRlKTsKKwogI2VuZGlmCQkJCQkJCS8qIFFVRVJZSlVNQkxFX0ggKi8KLS0g CjIuNDcuMQoK --00000000000063f644062abf42fc Content-Type: application/octet-stream; name="0004-Add-pg_stat_plans-contrib-extension.patch" Content-Disposition: attachment; filename="0004-Add-pg_stat_plans-contrib-extension.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5fsow5v3 RnJvbSA5ODQwZWRiYmZiMjJlNGM2ZmZiYmY2YTVlYjgwYWE4NjNhOTVlZGY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpEYXRlOiBU aHUsIDIgSmFuIDIwMjUgMTA6NDc6NTAgLTA4MDAKU3ViamVjdDogW1BBVENIIDQvNF0gQWRkIHBn X3N0YXRfcGxhbnMgY29udHJpYiBleHRlbnNpb24KClRoaXMgZXh0ZW5zaW9uIGFsbG93cyB0cmFj a2luZyBwZXItcGxhbiBjYWxsIGNvdW50cyBhbmQgZXhlY3V0aW9uIHRpbWUsCmFzIHdlbGwgYXMg Y2FwdHVyaW5nIHRoZSBwbGFuIHRleHQsIGFrYSBFWFBMQUlOIChDT1NUUyBPRkYpLCBmb3IgdGhl CmZpcnN0IGV4ZWN1dGlvbiBvZiBhIGdpdmVuIHBsYW4uIFRoaXMgdXRpbGl6ZSB0aGUgY29tcHV0 ZV9wbGFuX2lkCmZ1bmN0aW9uYWxpdHkgZm9yIHRyYWNraW5nIGRpZmZlcmVudCBwbGFucy4KLS0t CiBjb250cmliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwog Y29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGNv bnRyaWIvcGdfc3RhdF9wbGFucy9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAyOSArCiBjb250 cmliL3BnX3N0YXRfcGxhbnMvZXhwZWN0ZWQvY2xlYW51cC5vdXQgICAgfCAgIDEgKwogY29udHJp Yi9wZ19zdGF0X3BsYW5zL2V4cGVjdGVkL3ByaXZpbGVnZXMub3V0IHwgMTI1ICsrKwogY29udHJp Yi9wZ19zdGF0X3BsYW5zL2V4cGVjdGVkL3NlbGVjdC5vdXQgICAgIHwgMjYyICsrKysrKwogY29u dHJpYi9wZ19zdGF0X3BsYW5zL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwgIDQzICsKIGNvbnRy aWIvcGdfc3RhdF9wbGFucy9wZ19zdGF0X3BsYW5zLS0xLjAuc3FsICB8ICAzMiArCiBjb250cmli L3BnX3N0YXRfcGxhbnMvcGdfc3RhdF9wbGFucy5jICAgICAgICAgfCA3NDMgKysrKysrKysrKysr KysrKysrCiBjb250cmliL3BnX3N0YXRfcGxhbnMvcGdfc3RhdF9wbGFucy5jb25mICAgICAgfCAg IDMgKwogY29udHJpYi9wZ19zdGF0X3BsYW5zL3BnX3N0YXRfcGxhbnMuY29udHJvbCAgIHwgICA1 ICsKIGNvbnRyaWIvcGdfc3RhdF9wbGFucy9zcWwvY2xlYW51cC5zcWwgICAgICAgICB8ICAgMSAr CiBjb250cmliL3BnX3N0YXRfcGxhbnMvc3FsL3ByaXZpbGVnZXMuc3FsICAgICAgfCAgNTkgKysK IGNvbnRyaWIvcGdfc3RhdF9wbGFucy9zcWwvc2VsZWN0LnNxbCAgICAgICAgICB8ICA2NyArKwog ZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRv Yy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkb2Mv c3JjL3NnbWwvcGdzdGF0cGxhbnMuc2dtbCAgICAgICAgICAgICAgICAgfCA0MTMgKysrKysrKysr KwogMTcgZmlsZXMgY2hhbmdlZCwgMTc4NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19zdGF0X3BsYW5zL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19zdGF0X3BsYW5zL2V4cGVjdGVkL2NsZWFudXAub3V0CiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19zdGF0X3BsYW5zL2V4cGVjdGVkL3ByaXZpbGVnZXMub3V0CiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGF0X3BsYW5zL2V4cGVjdGVkL3NlbGVjdC5vdXQKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXRfcGxhbnMvbWVzb24uYnVpbGQKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXRfcGxhbnMvcGdfc3RhdF9wbGFucy0tMS4wLnNx bAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3RhdF9wbGFucy9wZ19zdGF0X3BsYW5z LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXRfcGxhbnMvcGdfc3RhdF9wbGFu cy5jb25mCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGF0X3BsYW5zL3BnX3N0YXRf cGxhbnMuY29udHJvbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3RhdF9wbGFucy9z cWwvY2xlYW51cC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXRfcGxhbnMv c3FsL3ByaXZpbGVnZXMuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGF0X3Bs YW5zL3NxbC9zZWxlY3Quc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL3NyYy9zZ21sL3Bnc3Rh dHBsYW5zLnNnbWwKCmRpZmYgLS1naXQgYS9jb250cmliL01ha2VmaWxlIGIvY29udHJpYi9NYWtl ZmlsZQppbmRleCA5NTI4NTVkOWI2Li44ZGUwMTBhZmRlIDEwMDY0NAotLS0gYS9jb250cmliL01h a2VmaWxlCisrKyBiL2NvbnRyaWIvTWFrZWZpbGUKQEAgLTM0LDYgKzM0LDcgQEAgU1VCRElSUyA9 IFwKIAkJcGdfZnJlZXNwYWNlbWFwIFwKIAkJcGdfbG9naWNhbGluc3BlY3QgXAogCQlwZ19wcmV3 YXJtCVwKKwkJcGdfc3RhdF9wbGFucyBcCiAJCXBnX3N0YXRfc3RhdGVtZW50cyBcCiAJCXBnX3N1 cmdlcnkJXAogCQlwZ190cmdtCQlcCmRpZmYgLS1naXQgYS9jb250cmliL21lc29uLmJ1aWxkIGIv Y29udHJpYi9tZXNvbi5idWlsZAppbmRleCAxNTlmZjQxNTU1Li40MzA5MTBmYmE0IDEwMDY0NAot LS0gYS9jb250cmliL21lc29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvbWVzb24uYnVpbGQKQEAgLTQ5 LDYgKzQ5LDcgQEAgc3ViZGlyKCdwZ19mcmVlc3BhY2VtYXAnKQogc3ViZGlyKCdwZ19sb2dpY2Fs aW5zcGVjdCcpCiBzdWJkaXIoJ3BnX3ByZXdhcm0nKQogc3ViZGlyKCdwZ3Jvd2xvY2tzJykKK3N1 YmRpcigncGdfc3RhdF9wbGFucycpCiBzdWJkaXIoJ3BnX3N0YXRfc3RhdGVtZW50cycpCiBzdWJk aXIoJ3Bnc3RhdHR1cGxlJykKIHN1YmRpcigncGdfc3VyZ2VyeScpCmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3N0YXRfcGxhbnMvTWFrZWZpbGUgYi9jb250cmliL3BnX3N0YXRfcGxhbnMvTWFrZWZp bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTA3M2RiOTVlZAotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9wbGFucy9NYWtlZmlsZQpAQCAtMCwwICsx LDI5IEBACisjIGNvbnRyaWIvcGdfc3RhdF9wbGFucy9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0g cGdfc3RhdF9wbGFucworT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJcGdfc3RhdF9wbGFucy5v CisKK0VYVEVOU0lPTiA9IHBnX3N0YXRfcGxhbnMKK0RBVEEgPSBwZ19zdGF0X3BsYW5zLS0xLjAu c3FsCitQR0ZJTEVERVNDID0gInBnX3N0YXRfcGxhbnMgLSB0cmFjayBwZXItcGxhbiBjYWxsIGNv dW50cywgZXhlY3V0aW9uIHRpbWVzIGFuZCBFWFBMQUlOIHRleHRzIgorCitMREZMQUdTX1NMICs9 ICQoZmlsdGVyIC1sbSwgJChMSUJTKSkKKworUkVHUkVTU19PUFRTID0gLS10ZW1wLWNvbmZpZyAk KHRvcF9zcmNkaXIpL2NvbnRyaWIvcGdfc3RhdF9wbGFucy9wZ19zdGF0X3BsYW5zLmNvbmYKK1JF R1JFU1MgPSBzZWxlY3QgcHJpdmlsZWdlcyBjbGVhbnVwCisjIERpc2FibGVkIGJlY2F1c2UgdGhl c2UgdGVzdHMgcmVxdWlyZSAic2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzPXBnX3N0YXRfcGxhbnMi LAorIyB3aGljaCB0eXBpY2FsIGluc3RhbGxjaGVjayB1c2VycyBkbyBub3QgaGF2ZSAoZS5nLiBi dWlsZGZhcm0gY2xpZW50cykuCitOT19JTlNUQUxMQ0hFQ0sgPSAxCisKK2lmZGVmIFVTRV9QR1hT CitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1w Z3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBjb250cmliL3BnX3N0YXRfcGxh bnMKK3RvcF9idWlsZGRpciA9IC4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFr ZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2Jh bC5taworZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9wbGFucy9leHBlY3RlZC9j bGVhbnVwLm91dCBiL2NvbnRyaWIvcGdfc3RhdF9wbGFucy9leHBlY3RlZC9jbGVhbnVwLm91dApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41MTU2NTYxN2NlCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19zdGF0X3BsYW5zL2V4cGVjdGVkL2NsZWFudXAub3V0CkBA IC0wLDAgKzEgQEAKK0RST1AgRVhURU5TSU9OIHBnX3N0YXRfcGxhbnM7CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3N0YXRfcGxhbnMvZXhwZWN0ZWQvcHJpdmlsZWdlcy5vdXQgYi9jb250cmliL3Bn X3N0YXRfcGxhbnMvZXhwZWN0ZWQvcHJpdmlsZWdlcy5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uM2UyMWQ2ZDcwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfc3RhdF9wbGFucy9leHBlY3RlZC9wcml2aWxlZ2VzLm91dApAQCAtMCwwICsxLDEyNSBAQAor LS0KKy0tIE9ubHkgc3VwZXJ1c2VycyBhbmQgcm9sZXMgd2l0aCBwcml2aWxlZ2VzIG9mIHRoZSBw Z19yZWFkX2FsbF9zdGF0cyByb2xlCistLSBhcmUgYWxsb3dlZCB0byBzZWUgdGhlIHBsYW4gdGV4 dCwgcXVlcnlpZCBhbmQgcGxhbmlkIG9mIHF1ZXJpZXMgZXhlY3V0ZWQgYnkKKy0tIG90aGVyIHVz ZXJzLiBPdGhlciB1c2VycyBjYW4gc2VlIHRoZSBzdGF0aXN0aWNzLgorLS0KK0NSRUFURSBST0xF IHJlZ3Jlc3Nfc3RhdHNfc3VwZXJ1c2VyIFNVUEVSVVNFUjsKK0NSRUFURSBST0xFIHJlZ3Jlc3Nf c3RhdHNfdXNlcjE7CitDUkVBVEUgUk9MRSByZWdyZXNzX3N0YXRzX3VzZXIyOworR1JBTlQgcGdf cmVhZF9hbGxfc3RhdHMgVE8gcmVncmVzc19zdGF0c191c2VyMjsKK1NFVCBST0xFIHJlZ3Jlc3Nf c3RhdHNfc3VwZXJ1c2VyOworU0VMRUNUIHBnX3N0YXRfcGxhbnNfcmVzZXQoKSBJUyBOT1QgTlVM TCBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCAxIEFTICJPTkUiOworIE9O RSAKKy0tLS0tCisgICAxCisoMSByb3cpCisKK1NFVCBST0xFIHJlZ3Jlc3Nfc3RhdHNfdXNlcjE7 CitTRUxFQ1QgMSsxIEFTICJUV08iOworIFRXTyAKKy0tLS0tCisgICAyCisoMSByb3cpCisKKy0t CistLSBBIHN1cGVydXNlciBjYW4gcmVhZCBhbGwgY29sdW1ucyBvZiBxdWVyaWVzIGV4ZWN1dGVk IGJ5IG90aGVycywKKy0tIGluY2x1ZGluZyBwbGFuIHRleHQsIHF1ZXJ5aWQgYW5kIHBsYW5pZC4K Ky0tCitTRVQgUk9MRSByZWdyZXNzX3N0YXRzX3N1cGVydXNlcjsKK1NFTEVDVCByLnJvbG5hbWUs IHNzLnF1ZXJ5aWQgPD4gMCBBUyBxdWVyeWlkX2Jvb2wsIHNzLnBsYW5pZCA8PiAwIEFTIHBsYW5p ZF9ib29sLCBzcy5wbGFuLCBzcy5jYWxscworICBGUk9NIHBnX3N0YXRfcGxhbnMgc3MgSk9JTiBw Z19yb2xlcyByIE9OIHNzLnVzZXJpZCA9IHIub2lkCisgIE9SREVSIEJZIHIucm9sbmFtZSwgc3Mu cGxhbiBDT0xMQVRFICJDIiwgc3MuY2FsbHM7CisgICAgICAgICByb2xuYW1lICAgICAgICAgfCBx dWVyeWlkX2Jvb2wgfCBwbGFuaWRfYm9vbCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBsYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBj YWxscyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQorIHJlZ3Jlc3Nfc3RhdHNf c3VwZXJ1c2VyIHwgdCAgICAgICAgICAgIHwgdCAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgIDEKKyByZWdyZXNzX3N0YXRzX3N1cGVydXNlciB8IHQgICAgICAgICAg ICB8IHQgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAxCisgcmVn cmVzc19zdGF0c19zdXBlcnVzZXIgfCB0ICAgICAgICAgICAgfCB0ICAgICAgICAgICB8IFNvcnQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArfCAgICAgMAorICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgIFNvcnQgS2V5OiBwZ19hdXRoaWQucm9sbmFt ZSwgcGdfc3RhdF9wbGFucy5wbGFuIENPTExBVEUgIkMiLCBwZ19zdGF0X3BsYW5zLmNhbGxzK3wg CisgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8 ICAgLT4gIEhhc2ggSm9pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICBIYXNoIENvbmQ6IChwZ19zdGF0 X3BsYW5zLnVzZXJpZCA9IHBnX2F1dGhpZC5vaWQpICAgICAgICAgICAgICAgICAgICAgICAgICt8 IAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAg fCAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX3N0YXRfcGxhbnMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAgICAgICAgICAgICAgICAgICAgICAg fCAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgLT4gIEhhc2ggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr fCAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAg IHwgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGdfYXV0aGlkICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorIHJlZ3Jlc3Nfc3RhdHNfdXNlcjEgICAg IHwgdCAgICAgICAgICAgIHwgdCAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgIDEKKyg0IHJvd3MpCisKKy0tCistLSByZWdyZXNzX3N0YXRzX3VzZXIxIGhhcyBubyBw cml2aWxlZ2VzIHRvIHJlYWQgdGhlIHBsYW4gdGV4dCwgcXVlcnlpZAorLS0gb3IgcGxhbmlkIG9m IHF1ZXJpZXMgZXhlY3V0ZWQgYnkgb3RoZXJzIGJ1dCBjYW4gc2VlIHN0YXRpc3RpY3MKKy0tIGxp a2UgY2FsbHMgYW5kIHJvd3MuCistLQorU0VUIFJPTEUgcmVncmVzc19zdGF0c191c2VyMTsKK1NF TEVDVCByLnJvbG5hbWUsIHNzLnF1ZXJ5aWQgPD4gMCBBUyBxdWVyeWlkX2Jvb2wsIHNzLnBsYW5p ZCA8PiAwIEFTIHBsYW5pZF9ib29sLCBzcy5wbGFuLCBzcy5jYWxscworICBGUk9NIHBnX3N0YXRf cGxhbnMgc3MgSk9JTiBwZ19yb2xlcyByIE9OIHNzLnVzZXJpZCA9IHIub2lkCisgIE9SREVSIEJZ IHIucm9sbmFtZSwgc3MucGxhbiBDT0xMQVRFICJDIiwgc3MuY2FsbHM7CisgICAgICAgICByb2xu YW1lICAgICAgICAgfCBxdWVyeWlkX2Jvb2wgfCBwbGFuaWRfYm9vbCB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCBjYWxscyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQor IHJlZ3Jlc3Nfc3RhdHNfc3VwZXJ1c2VyIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCA8 aW5zdWZmaWNpZW50IHByaXZpbGVnZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIDEKKyByZWdyZXNzX3N0YXRzX3N1cGVydXNl ciB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgPGluc3VmZmljaWVudCBwcml2aWxlZ2U+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgICAxCisgcmVncmVzc19zdGF0c19zdXBlcnVzZXIgfCAgICAgICAgICAgICAgfCAgICAg ICAgICAgICB8IDxpbnN1ZmZpY2llbnQgcHJpdmlsZWdlPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMQorIHJlZ3Jlc3Nfc3Rh dHNfdXNlcjEgICAgIHwgdCAgICAgICAgICAgIHwgdCAgICAgICAgICAgfCBSZXN1bHQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgIDEKKyByZWdyZXNzX3N0YXRzX3VzZXIxICAgICB8IHQgICAgICAg ICAgICB8IHQgICAgICAgICAgIHwgU29ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8ICAgICAwCisg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAg U29ydCBLZXk6IHBnX2F1dGhpZC5yb2xuYW1lLCBwZ19zdGF0X3BsYW5zLnBsYW4gQ09MTEFURSAi QyIsIHBnX3N0YXRfcGxhbnMuY2FsbHMrfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg ICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAtPiAgSGFzaCBKb2luICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8IAor ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAg ICAgICAgIEhhc2ggQ29uZDogKHBnX3N0YXRfcGxhbnMudXNlcmlkID0gcGdfYXV0aGlkLm9pZCkg ICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24g cGdfc3RhdF9wbGFucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAK KyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwg ICAgICAgICAtPiAgSGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwZ19hdXRoaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg CisoNSByb3dzKQorCistLQorLS0gcmVncmVzc19zdGF0c191c2VyMiwgd2l0aCBwZ19yZWFkX2Fs bF9zdGF0cyByb2xlIHByaXZpbGVnZXMsIGNhbgorLS0gcmVhZCBhbGwgY29sdW1ucywgaW5jbHVk aW5nIHBsYW4gdGV4dCwgcXVlcnlpZCBhbmQgcGxhbmlkLCBvZiBxdWVyaWVzCistLSBleGVjdXRl ZCBieSBvdGhlcnMuCistLQorU0VUIFJPTEUgcmVncmVzc19zdGF0c191c2VyMjsKK1NFTEVDVCBy LnJvbG5hbWUsIHNzLnF1ZXJ5aWQgPD4gMCBBUyBxdWVyeWlkX2Jvb2wsIHNzLnBsYW5pZCA8PiAw IEFTIHBsYW5pZF9ib29sLCBzcy5wbGFuLCBzcy5jYWxscworICBGUk9NIHBnX3N0YXRfcGxhbnMg c3MgSk9JTiBwZ19yb2xlcyByIE9OIHNzLnVzZXJpZCA9IHIub2lkCisgIE9SREVSIEJZIHIucm9s bmFtZSwgc3MucGxhbiBDT0xMQVRFICJDIiwgc3MuY2FsbHM7CisgICAgICAgICByb2xuYW1lICAg ICAgICAgfCBxdWVyeWlkX2Jvb2wgfCBwbGFuaWRfYm9vbCB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBsYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCBjYWxscyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQorIHJlZ3Jl c3Nfc3RhdHNfc3VwZXJ1c2VyIHwgdCAgICAgICAgICAgIHwgdCAgICAgICAgICAgfCBSZXN1bHQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgIDEKKyByZWdyZXNzX3N0YXRzX3N1cGVydXNlciB8IHQg ICAgICAgICAgICB8IHQgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg ICAxCisgcmVncmVzc19zdGF0c19zdXBlcnVzZXIgfCB0ICAgICAgICAgICAgfCB0ICAgICAgICAg ICB8IFNvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAgICAgMQorICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgIFNvcnQgS2V5OiBwZ19hdXRo aWQucm9sbmFtZSwgcGdfc3RhdF9wbGFucy5wbGFuIENPTExBVEUgIkMiLCBwZ19zdGF0X3BsYW5z LmNhbGxzK3wgCisgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAg ICAgICAgICB8ICAgLT4gIEhhc2ggSm9pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICBIYXNoIENvbmQ6 IChwZ19zdGF0X3BsYW5zLnVzZXJpZCA9IHBnX2F1dGhpZC5vaWQpICAgICAgICAgICAgICAgICAg ICAgICAgICt8IAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAg ICAgICAgICAgfCAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX3N0YXRfcGxhbnMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgLT4gIEhhc2gg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGdfYXV0aGlkICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorIHJlZ3Jlc3Nfc3RhdHNf dXNlcjEgICAgIHwgdCAgICAgICAgICAgIHwgdCAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgIDEKKyByZWdyZXNzX3N0YXRzX3VzZXIxICAgICB8IHQgICAgICAgICAg ICB8IHQgICAgICAgICAgIHwgU29ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8ICAgICAxCisgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgU29y dCBLZXk6IHBnX2F1dGhpZC5yb2xuYW1lLCBwZ19zdGF0X3BsYW5zLnBsYW4gQ09MTEFURSAiQyIs IHBnX3N0YXRfcGxhbnMuY2FsbHMrfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICB8ICAgICAgICAgICAgIHwgICAtPiAgSGFzaCBKb2luICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8IAorICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAg ICAgIEhhc2ggQ29uZDogKHBnX3N0YXRfcGxhbnMudXNlcmlkID0gcGdfYXV0aGlkLm9pZCkgICAg ICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg ICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdf c3RhdF9wbGFucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAg ICAgICAtPiAgSGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg ICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw Z19hdXRoaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCisg cmVncmVzc19zdGF0c191c2VyMiAgICAgfCB0ICAgICAgICAgICAgfCB0ICAgICAgICAgICB8IFNv cnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArfCAgICAgMAorICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgIFNvcnQgS2V5OiBwZ19hdXRoaWQucm9s bmFtZSwgcGdfc3RhdF9wbGFucy5wbGFuIENPTExBVEUgIkMiLCBwZ19zdGF0X3BsYW5zLmNhbGxz K3wgCisgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAg ICB8ICAgLT4gIEhhc2ggSm9pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICBIYXNoIENvbmQ6IChwZ19z dGF0X3BsYW5zLnVzZXJpZCA9IHBnX2F1dGhpZC5vaWQpICAgICAgICAgICAgICAgICAgICAgICAg ICt8IAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAg ICAgfCAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX3N0YXRfcGxhbnMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgLT4gIEhhc2ggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAg ICAgIHwgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGdfYXV0aGlkICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorKDYgcm93cykKKworLS0KKy0tIGNs ZWFudXAKKy0tCitSRVNFVCBST0xFOworRFJPUCBST0xFIHJlZ3Jlc3Nfc3RhdHNfc3VwZXJ1c2Vy OworRFJPUCBST0xFIHJlZ3Jlc3Nfc3RhdHNfdXNlcjE7CitEUk9QIFJPTEUgcmVncmVzc19zdGF0 c191c2VyMjsKK1NFTEVDVCBwZ19zdGF0X3BsYW5zX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsK KyB0IAorLS0tCisgdAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfcGxh bnMvZXhwZWN0ZWQvc2VsZWN0Lm91dCBiL2NvbnRyaWIvcGdfc3RhdF9wbGFucy9leHBlY3RlZC9z ZWxlY3Qub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjkwNmQ4Y2U5 MGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXRfcGxhbnMvZXhwZWN0ZWQvc2Vs ZWN0Lm91dApAQCAtMCwwICsxLDI2MiBAQAorLS0KKy0tIFNFTEVDVCBzdGF0ZW1lbnRzCistLQor Q1JFQVRFIEVYVEVOU0lPTiBwZ19zdGF0X3BsYW5zOworU0VMRUNUIHBnX3N0YXRfcGxhbnNfcmVz ZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cpCisKKy0tCistLSBz aW1wbGUgc3RhdGVtZW50cworLS0KK1NFTEVDVCAxIEZST00gcGdfY2xhc3MgTElNSVQgMTsKKyA/ Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgICAgMQorKDEgcm93KQorCitTRUxFQ1QgMSBGUk9N IHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAncGdfY2xhc3MnOworID9jb2x1bW4/IAorLS0tLS0t LS0tLQorICAgICAgICAxCisoMSByb3cpCisKK1NFVCBlbmFibGVfaW5kZXhzY2FuID0gb2ZmOwor U0VMRUNUIDEgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ3BnX2NsYXNzJzsKKyA/Y29s dW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgICAgMQorKDEgcm93KQorCitTRVQgZW5hYmxlX2luZGV4 c2NhbiA9IG9uOworU0VMRUNUIHBsYW4sIGNhbGxzIEZST00gcGdfc3RhdF9wbGFucyBPUkRFUiBC WSBwbGFuIENPTExBVEUgIkMiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbGxzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQorIEJpdG1h cCBIZWFwIFNjYW4gb24gcGdfY2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8 ICAgICAxCisgICBSZWNoZWNrIENvbmQ6IChyZWxuYW1lID0gJ3BnX2NsYXNzJzo6bmFtZSkgICAg ICAgICAgICAgICAgK3wgCisgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gcGdfY2xhc3NfcmVs bmFtZV9uc3BfaW5kZXggICAgICAgK3wgCisgICAgICAgICBJbmRleCBDb25kOiAocmVsbmFtZSA9 ICdwZ19jbGFzcyc6Om5hbWUpICAgICAgICAgICAgIHwgCisgSW5kZXggT25seSBTY2FuIHVzaW5n IHBnX2NsYXNzX3JlbG5hbWVfbnNwX2luZGV4IG9uIHBnX2NsYXNzK3wgICAgIDEKKyAgIEluZGV4 IENvbmQ6IChyZWxuYW1lID0gJ3BnX2NsYXNzJzo6bmFtZSkgICAgICAgICAgICAgICAgICAgfCAK KyBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICArfCAgICAgMQorICAgLT4gIFNlcSBTY2FuIG9uIHBnX2NsYXNzICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IAorIFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAxCisgU29ydCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgICAgIDAKKyAgIFNv cnQgS2V5OiBwZ19zdGF0X3BsYW5zLnBsYW4gQ09MTEFURSAiQyIgICAgICAgICAgICAgICAgICAr fCAKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX3N0YXRfcGxhbnMgICAgICAgICAgICAgICAg ICAgICAgICAgfCAKKyg1IHJvd3MpCisKK1NFTEVDVCBwZ19zdGF0X3BsYW5zX3Jlc2V0KCkgSVMg Tk9UIE5VTEwgQVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCistLQorLS0gc3VicGxhbnMg YW5kIENURXMKKy0tCitXSVRIIHggQVMgTUFURVJJQUxJWkVEIChTRUxFQ1QgMSkKK1NFTEVDVCAq IEZST00geDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgICAgMQorKDEgcm93KQorCitT RUxFQ1QgYS5hdHRuYW1lLAorICAgKFNFTEVDVCBwZ19jYXRhbG9nLnBnX2dldF9leHByKGQuYWRi aW4sIGQuYWRyZWxpZCkKKyAgICBGUk9NIHBnX2NhdGFsb2cucGdfYXR0cmRlZiBkCisgICAgV0hF UkUgZC5hZHJlbGlkID0gYS5hdHRyZWxpZCBBTkQgZC5hZG51bSA9IGEuYXR0bnVtIEFORCBhLmF0 dGhhc2RlZikKKyBGUk9NIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlIGEKKyBXSEVSRSBhLmF0dHJl bGlkID0gJ3BnX2NsYXNzJzo6cmVnY2xhc3MKKyBPUkRFUiBCWSBhdHRudW0gTElNSVQgMTsKKyBh dHRuYW1lICB8IHBnX2dldF9leHByIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgdGFibGVv aWQgfCAKKygxIHJvdykKKworU0VMRUNUIHBsYW4sIGNhbGxzIEZST00gcGdfc3RhdF9wbGFucyBP UkRFUiBCWSBwbGFuIENPTExBVEUgIkMiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBsYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FsbHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0KKyBDVEUgU2NhbiBvbiB4ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8 ICAgICAxCisgICBDVEUgeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAgICAgLT4gIFJlc3VsdCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IAorIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgK3wgICAgIDEKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IHBnX2F0dHJpYnV0ZV9yZWxpZF9hdHRudW1faW5kZXggb24gcGdfYXR0cmlidXRlIGEgICAgICt8 IAorICAgICAgICAgSW5kZXggQ29uZDogKGF0dHJlbGlkID0gJzEyNTknOjpvaWQpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAgICAgICBTdWJQbGFuIDEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAg ICAgICAgICAgLT4gIFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgICAgICAgICBPbmUtVGltZSBGaWx0ZXI6 IGEuYXR0aGFzZGVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwZ19hdHRyZGVmIGQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArfCAKKyAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKGFkcmVs aWQgPSBhLmF0dHJlbGlkKSBBTkQgKGFkbnVtID0gYS5hdHRudW0pKSB8IAorIFJlc3VsdCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgIDEKKyBTb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8ICAgICAwCisgICBTb3J0 IEtleTogcGdfc3RhdF9wbGFucy5wbGFuIENPTExBVEUgIkMiICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArfCAKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX3N0YXRfcGxhbnMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorKDQgcm93cykKKwor U0VMRUNUIHBnX3N0YXRfcGxhbnNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworIHQgCistLS0K KyB0CisoMSByb3cpCisKKy0tCistLSBwYXJ0aXRvbmluZworLS0KK2NyZWF0ZSB0YWJsZSBscCAo YSBjaGFyKSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVhdGUgdGFibGUgbHBfZGVmYXVsdCBw YXJ0aXRpb24gb2YgbHAgZGVmYXVsdDsKK2NyZWF0ZSB0YWJsZSBscF9lZiBwYXJ0aXRpb24gb2Yg bHAgZm9yIHZhbHVlcyBpbiAoJ2UnLCAnZicpOworY3JlYXRlIHRhYmxlIGxwX2FkIHBhcnRpdGlv biBvZiBscCBmb3IgdmFsdWVzIGluICgnYScsICdkJyk7CitjcmVhdGUgdGFibGUgbHBfYmMgcGFy dGl0aW9uIG9mIGxwIGZvciB2YWx1ZXMgaW4gKCdiJywgJ2MnKTsKK2NyZWF0ZSB0YWJsZSBscF9n IHBhcnRpdGlvbiBvZiBscCBmb3IgdmFsdWVzIGluICgnZycpOworY3JlYXRlIHRhYmxlIGxwX251 bGwgcGFydGl0aW9uIG9mIGxwIGZvciB2YWx1ZXMgaW4gKG51bGwpOworc2VsZWN0ICogZnJvbSBs cDsKKyBhIAorLS0tCisoMCByb3dzKQorCitzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgPiAnYScg YW5kIGEgPCAnZCc7CisgYSAKKy0tLQorKDAgcm93cykKKworc2VsZWN0ICogZnJvbSBscCB3aGVy ZSBhID4gJ2EnIGFuZCBhIDw9ICdkJzsKKyBhIAorLS0tCisoMCByb3dzKQorCitzZWxlY3QgKiBm cm9tIGxwIHdoZXJlIGEgPSAnYSc7CisgYSAKKy0tLQorKDAgcm93cykKKworc2VsZWN0ICogZnJv bSBscCB3aGVyZSAnYScgPSBhOwkvKiBjb21tdXRlZCAqLworIGEgCistLS0KKygwIHJvd3MpCisK K3NlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBpcyBub3QgbnVsbDsKKyBhIAorLS0tCisoMCByb3dz KQorCitzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbnVsbDsKKyBhIAorLS0tCisoMCByb3dz KQorCitzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgPSAnYScgb3IgYSA9ICdjJzsKKyBhIAorLS0t CisoMCByb3dzKQorCitzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbm90IG51bGwgYW5kIChh ID0gJ2EnIG9yIGEgPSAnYycpOworIGEgCistLS0KKygwIHJvd3MpCisKK3NlbGVjdCAqIGZyb20g bHAgd2hlcmUgYSA8PiAnZyc7CisgYSAKKy0tLQorKDAgcm93cykKKworc2VsZWN0ICogZnJvbSBs cCB3aGVyZSBhIDw+ICdhJyBhbmQgYSA8PiAnZCc7CisgYSAKKy0tLQorKDAgcm93cykKKworc2Vs ZWN0ICogZnJvbSBscCB3aGVyZSBhIG5vdCBpbiAoJ2EnLCAnZCcpOworIGEgCistLS0KKygwIHJv d3MpCisKK1NFTEVDVCBwbGFuLCBjYWxscyBGUk9NIHBnX3N0YXRfcGxhbnMgT1JERVIgQlkgcGxh biBDT0xMQVRFICJDIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxh biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYWxscyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0KKyBBcHBlbmQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAgICAgMQor ICAgLT4gIFNlcSBTY2FuIG9uIGxwX2FkIGxwXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgRmlsdGVyOiAoKGEgPSAnYSc6OmJw Y2hhcikgT1IgKGEgPSAnYyc6OmJwY2hhcikpICAgICAgICAgICAgICAgICAgICAgICt8IAorICAg LT4gIFNlcSBTY2FuIG9uIGxwX2JjIGxwXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgRmlsdGVyOiAoKGEgPSAnYSc6OmJwY2hh cikgT1IgKGEgPSAnYyc6OmJwY2hhcikpICAgICAgICAgICAgICAgICAgICAgICB8IAorIEFwcGVu ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICt8ICAgICAxCisgICAtPiAgU2VxIFNjYW4gb24gbHBfYWQgbHBfMSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAg ICAgICBGaWx0ZXI6ICgoYSA+ICdhJzo6YnBjaGFyKSBBTkQgKGEgPD0gJ2QnOjpicGNoYXIpKSAg ICAgICAgICAgICAgICAgICAgK3wgCisgICAtPiAgU2VxIFNjYW4gb24gbHBfYmMgbHBfMiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAgICAg ICBGaWx0ZXI6ICgoYSA+ICdhJzo6YnBjaGFyKSBBTkQgKGEgPD0gJ2QnOjpicGNoYXIpKSAgICAg ICAgICAgICAgICAgICAgK3wgCisgICAtPiAgU2VxIFNjYW4gb24gbHBfZGVmYXVsdCBscF8zICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAgICAgICBG aWx0ZXI6ICgoYSA+ICdhJzo6YnBjaGFyKSBBTkQgKGEgPD0gJ2QnOjpicGNoYXIpKSAgICAgICAg ICAgICAgICAgICAgIHwgCisgQXBwZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgICAgIDEKKyAgIC0+ICBT ZXEgU2NhbiBvbiBscF9hZCBscF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArfCAKKyAgICAgICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQg KChhID0gJ2EnOjpicGNoYXIpIE9SIChhID0gJ2MnOjpicGNoYXIpKSkrfCAKKyAgIC0+ICBTZXEg U2NhbiBvbiBscF9iYyBscF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArfCAKKyAgICAgICAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKChh ID0gJ2EnOjpicGNoYXIpIE9SIChhID0gJ2MnOjpicGNoYXIpKSkgfCAKKyBBcHBlbmQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArfCAgICAgMQorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2FkIGxwXzEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgRmls dGVyOiAoYSA8PiAnZyc6OmJwY2hhcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICt8IAorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2JjIGxwXzIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgRmlsdGVy OiAoYSA8PiAnZyc6OmJwY2hhcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICt8IAorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2VmIGxwXzMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgRmlsdGVyOiAo YSA8PiAnZyc6OmJwY2hhcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICt8IAorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2RlZmF1bHQgbHBfNCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgRmlsdGVyOiAoYSA8 PiAnZyc6OmJwY2hhcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IAorIEFwcGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8ICAgICAxCisgICAtPiAgU2VxIFNjYW4gb24g bHBfYWQgbHBfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgK3wgCisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAtPiAgU2VxIFNjYW4gb24gbHBf YmMgbHBfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg K3wgCisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAtPiAgU2VxIFNjYW4gb24gbHBfZWYg bHBfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wg CisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAtPiAgU2VxIFNjYW4gb24gbHBfZyBscF80 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisg ICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAtPiAgU2VxIFNjYW4gb24gbHBfZGVmYXVsdCBs cF81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAg ICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgCisgQXBwZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgICAgIDEKKyAg IC0+ICBTZXEgU2NhbiBvbiBscF9hZCBscF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArfCAKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9iYyBscF8yICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAgIC0+ ICBTZXEgU2NhbiBvbiBscF9lZiBscF8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArfCAKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9nIGxwXzQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAgIC0+ICBT ZXEgU2NhbiBvbiBscF9udWxsIGxwXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArfCAKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9kZWZhdWx0IGxwXzYgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKKyBBcHBlbmQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArfCAgICAgMQorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2JjIGxwXzEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAg RmlsdGVyOiAoKGEgPD4gJ2EnOjpicGNoYXIpIEFORCAoYSA8PiAnZCc6OmJwY2hhcikpICAgICAg ICAgICAgICAgICAgICt8IAorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2VmIGxwXzIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgRmls dGVyOiAoKGEgPD4gJ2EnOjpicGNoYXIpIEFORCAoYSA8PiAnZCc6OmJwY2hhcikpICAgICAgICAg ICAgICAgICAgICt8IAorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2cgbHBfMyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgRmlsdGVy OiAoKGEgPD4gJ2EnOjpicGNoYXIpIEFORCAoYSA8PiAnZCc6OmJwY2hhcikpICAgICAgICAgICAg ICAgICAgICt8IAorICAgLT4gIFNlcSBTY2FuIG9uIGxwX2RlZmF1bHQgbHBfNCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8IAorICAgICAgICAgRmlsdGVyOiAo KGEgPD4gJ2EnOjpicGNoYXIpIEFORCAoYSA8PiAnZCc6OmJwY2hhcikpICAgICAgICAgICAgICAg ICAgICB8IAorIEFwcGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8ICAgICAxCisgICAtPiAgU2VxIFNjYW4g b24gbHBfYmMgbHBfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgK3wgCisgICAgICAgICBGaWx0ZXI6ICgoYSA+ICdhJzo6YnBjaGFyKSBBTkQgKGEgPCAn ZCc6OmJwY2hhcikpICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAtPiAgU2VxIFNjYW4gb24g bHBfZGVmYXVsdCBscF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgK3wgCisgICAgICAgICBGaWx0ZXI6ICgoYSA+ICdhJzo6YnBjaGFyKSBBTkQgKGEgPCAnZCc6 OmJwY2hhcikpICAgICAgICAgICAgICAgICAgICAgIHwgCisgQXBwZW5kICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg K3wgICAgIDEKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9iYyBscF8xICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAgICAgICAgIEZpbHRlcjogKGEg PD4gQUxMICgne2EsZH0nOjpicGNoYXJbXSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArfCAKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9lZiBscF8yICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAgICAgICAgIEZpbHRlcjogKGEgPD4g QUxMICgne2EsZH0nOjpicGNoYXJbXSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr fCAKKyAgIC0+ICBTZXEgU2NhbiBvbiBscF9nIGxwXzMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAgICAgICAgIEZpbHRlcjogKGEgPD4gQUxM ICgne2EsZH0nOjpicGNoYXJbXSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArfCAK KyAgIC0+ICBTZXEgU2NhbiBvbiBscF9kZWZhdWx0IGxwXzQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArfCAKKyAgICAgICAgIEZpbHRlcjogKGEgPD4gQUxMICgn e2EsZH0nOjpicGNoYXJbXSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKKyBS ZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgMQorIFNlcSBTY2FuIG9uIGxwX2FkIGxwICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt8ICAg ICAxCisgICBGaWx0ZXI6ICgnYSc6OmJwY2hhciA9IGEpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCisgU2VxIFNjYW4gb24gbHBfYWQgbHAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wg ICAgIDEKKyAgIEZpbHRlcjogKGEgPSAnYSc6OmJwY2hhcikgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKKyBTZXEgU2NhbiBvbiBscF9udWxsIGxw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr fCAgICAgMQorICAgRmlsdGVyOiAoYSBJUyBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorIFNvcnQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICt8ICAgICAwCisgICBTb3J0IEtleTogcGdfc3RhdF9wbGFucy5wbGFuIENPTExBVEUgIkMiICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3wgCisgICAtPiAgRnVuY3Rpb24gU2Nh biBvbiBwZ19zdGF0X3BsYW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgCisoMTQgcm93cykKKworU0VMRUNUIHBnX3N0YXRfcGxhbnNfcmVzZXQoKSBJUyBOT1Qg TlVMTCBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfc3RhdF9wbGFucy9tZXNvbi5idWlsZCBiL2NvbnRyaWIvcGdfc3RhdF9wbGFucy9tZXNvbi5i dWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zYmQ4ODRkOTYwCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGF0X3BsYW5zL21lc29uLmJ1aWxkCkBAIC0w LDAgKzEsNDMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorCitwZ19zdGF0X3BsYW5zX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3BnX3N0 YXRfcGxhbnMuYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBwZ19zdGF0 X3BsYW5zX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9h cmdzOiBbCisgICAgJy0tTkFNRScsICdwZ19zdGF0X3BsYW5zJywKKyAgICAnLS1GSUxFREVTQycs ICdwZ19zdGF0X3BsYW5zIC0gdHJhY2sgcGVyLXBsYW4gY2FsbCBjb3VudHMsIGV4ZWN1dGlvbiB0 aW1lcyBhbmQgRVhQTEFJTiB0ZXh0cycsXSkKK2VuZGlmCisKK3BnX3N0YXRfcGxhbnMgPSBzaGFy ZWRfbW9kdWxlKCdwZ19zdGF0X3BsYW5zJywKKyAgcGdfc3RhdF9wbGFuc19zb3VyY2VzLAorICBr d2FyZ3M6IGNvbnRyaWJfbW9kX2FyZ3MgKyB7CisgICAgJ2RlcGVuZGVuY2llcyc6IGNvbnRyaWJf bW9kX2FyZ3NbJ2RlcGVuZGVuY2llcyddLAorICB9LAorKQorY29udHJpYl90YXJnZXRzICs9IHBn X3N0YXRfcGxhbnMKKworaW5zdGFsbF9kYXRhKAorICAncGdfc3RhdF9wbGFucy5jb250cm9sJywK KyAgJ3BnX3N0YXRfcGxhbnMtLTEuMC5zcWwnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdz LAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3BnX3N0YXRfcGxhbnMnLAorICAnc2QnOiBt ZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9k aXIoKSwKKyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICdzZWxlY3QnLAorICAg ICAgJ3ByaXZpbGVnZXMnLAorICAgICAgJ2NsZWFudXAnLAorICAgIF0sCisgICAgJ3JlZ3Jlc3Nf YXJncyc6IFsnLS10ZW1wLWNvbmZpZycsIGZpbGVzKCdwZ19zdGF0X3BsYW5zLmNvbmYnKV0sCisg ICAgIyBEaXNhYmxlZCBiZWNhdXNlIHRoZXNlIHRlc3RzIHJlcXVpcmUKKyAgICAjICJzaGFyZWRf cHJlbG9hZF9saWJyYXJpZXM9cGdfc3RhdF9wbGFucyIsIHdoaWNoIHR5cGljYWwKKyAgICAjIHJ1 bm5pbmdjaGVjayB1c2VycyBkbyBub3QgaGF2ZSAoZS5nLiBidWlsZGZhcm0gY2xpZW50cykuCisg ICAgJ3J1bm5pbmdjaGVjayc6IGZhbHNlLAorICB9Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3N0YXRfcGxhbnMvcGdfc3RhdF9wbGFucy0tMS4wLnNxbCBiL2NvbnRyaWIvcGdfc3RhdF9wbGFu cy9wZ19zdGF0X3BsYW5zLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLjQxMmQ5ZTczYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXRfcGxh bnMvcGdfc3RhdF9wbGFucy0tMS4wLnNxbApAQCAtMCwwICsxLDMyIEBACisvKiBjb250cmliL3Bn X3N0YXRfcGxhbnMvcGdfc3RhdF9wbGFucy0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBz Y3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lP TgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX3N0YXRfcGxhbnMiIHRvIGxvYWQgdGhp cyBmaWxlLiBccXVpdAorCistLSBSZWdpc3RlciBmdW5jdGlvbnMuCitDUkVBVEUgRlVOQ1RJT04g cGdfc3RhdF9wbGFuc19yZXNldCgpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUn CitMQU5HVUFHRSBDIFBBUkFMTEVMIFNBRkU7CisKK0NSRUFURSBGVU5DVElPTiBwZ19zdGF0X3Bs YW5zKElOIHNob3dwbGFuIGJvb2xlYW4sCisgICAgT1VUIHVzZXJpZCBvaWQsCisgICAgT1VUIGRi aWQgb2lkLAorICAgIE9VVCBxdWVyeWlkIGJpZ2ludCwKKyAgICBPVVQgcGxhbmlkIGJpZ2ludCwK KyAgICBPVVQgY2FsbHMgaW50OCwKKyAgICBPVVQgdG90YWxfZXhlY190aW1lIGZsb2F0OCwKKyAg ICBPVVQgcGxhbiB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRI TkFNRScsICdwZ19zdGF0X3BsYW5zXzFfMCcKK0xBTkdVQUdFIEMgU1RSSUNUIFZPTEFUSUxFIFBB UkFMTEVMIFNBRkU7CisKKy0tIFJlZ2lzdGVyIGEgdmlldyBvbiB0aGUgZnVuY3Rpb24gZm9yIGVh c2Ugb2YgdXNlLgorQ1JFQVRFIFZJRVcgcGdfc3RhdF9wbGFucyBBUworICBTRUxFQ1QgKiBGUk9N IHBnX3N0YXRfcGxhbnModHJ1ZSk7CisKK0dSQU5UIFNFTEVDVCBPTiBwZ19zdGF0X3BsYW5zIFRP IFBVQkxJQzsKKworLS0gRG9uJ3Qgd2FudCB0aGlzIHRvIGJlIGF2YWlsYWJsZSB0byBub24tc3Vw ZXJ1c2Vycy4KK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfc3RhdF9wbGFuc19yZXNldCgpIEZS T00gUFVCTElDOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3BsYW5zL3BnX3N0YXRfcGxh bnMuYyBiL2NvbnRyaWIvcGdfc3RhdF9wbGFucy9wZ19zdGF0X3BsYW5zLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMzE4YTdjZGRjNwotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfc3RhdF9wbGFucy9wZ19zdGF0X3BsYW5zLmMKQEAgLTAsMCArMSw3NDMgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19zdGF0X3BsYW5zLmMKKyAqCQlUcmFjayBw ZXItcGxhbiBjYWxsIGNvdW50cywgZXhlY3V0aW9uIHRpbWVzIGFuZCBFWFBMQUlOIHRleHRzCisg KgkJYWNyb3NzIGEgd2hvbGUgZGF0YWJhc2UgY2x1c3Rlci4KKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCQljb250cmliL3BnX3N0 YXRfcGxhbnMvcGdfc3RhdF9wbGFucy5jCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWlu LmgiCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNp bmNsdWRlICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgIm5vZGVzL3BsYW5qdW1ibGUuaCIKKyNp bmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5oIgorI2luY2x1 ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAi dXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCisjaW5jbHVk ZSAidXRpbHMvc25hcG1nci5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKKy8qIEN1cnJlbnQgbmVz dGluZyBkZXB0aCBvZiBwbGFubmVyL0V4ZWN1dG9yUnVuL1Byb2Nlc3NVdGlsaXR5IGNhbGxzICov CitzdGF0aWMgaW50CW5lc3RpbmdfbGV2ZWwgPSAwOworCisvKiBTYXZlZCBob29rIHZhbHVlcyAq Lworc3RhdGljIHBsYW5uZXJfaG9va190eXBlIHByZXZfcGxhbm5lcl9ob29rID0gTlVMTDsKK3N0 YXRpYyBFeGVjdXRvclN0YXJ0X2hvb2tfdHlwZSBwcmV2X0V4ZWN1dG9yU3RhcnQgPSBOVUxMOwor c3RhdGljIEV4ZWN1dG9yUnVuX2hvb2tfdHlwZSBwcmV2X0V4ZWN1dG9yUnVuID0gTlVMTDsKK3N0 YXRpYyBFeGVjdXRvckZpbmlzaF9ob29rX3R5cGUgcHJldl9FeGVjdXRvckZpbmlzaCA9IE5VTEw7 CitzdGF0aWMgRXhlY3V0b3JFbmRfaG9va190eXBlIHByZXZfRXhlY3V0b3JFbmQgPSBOVUxMOwor CisvKi0tLS0gR1VDIHZhcmlhYmxlcyAtLS0tKi8KKwordHlwZWRlZiBlbnVtCit7CisJUEdTUF9U UkFDS19OT05FLAkJCS8qIHRyYWNrIG5vIHBsYW5zICovCisJUEdTUF9UUkFDS19UT1AsCQkJCS8q IG9ubHkgcGxhbnMgZm9yIHRvcCBsZXZlbCBzdGF0ZW1lbnRzICovCisJUEdTUF9UUkFDS19BTEws CQkJCS8qIGFsbCBwbGFucywgaW5jbHVkaW5nIGZvciBuZXN0ZWQgc3RhdGVtZW50cyAqLworfSBQ R1NQVHJhY2tMZXZlbDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSB0 cmFja19vcHRpb25zW10gPQoreworCXsibm9uZSIsIFBHU1BfVFJBQ0tfTk9ORSwgZmFsc2V9LAor CXsidG9wIiwgUEdTUF9UUkFDS19UT1AsIGZhbHNlfSwKKwl7ImFsbCIsIFBHU1BfVFJBQ0tfQUxM LCBmYWxzZX0sCisJe05VTEwsIDAsIGZhbHNlfQorfTsKKworc3RhdGljIGludAlwZ3NwX21heCA9 IDUwMDA7CS8qIG1heCAjIHBsYW5zIHRvIHRyYWNrICovCitzdGF0aWMgaW50CXBnc3BfbWF4X3Np emUgPSAyMDQ4OwkvKiBtYXggc2l6ZSBvZiBwbGFuIHRleHQgdG8gdHJhY2sgKGluIGJ5dGVzKSAq Lworc3RhdGljIGludAlwZ3NwX3RyYWNrID0gUEdTUF9UUkFDS19UT1A7CS8qIHRyYWNraW5nIGxl dmVsICovCisKKyNkZWZpbmUgcGdzcF9lbmFibGVkKGxldmVsKSBcCisJKCFJc1BhcmFsbGVsV29y a2VyKCkgJiYgXAorCShjb21wdXRlX3BsYW5faWQgIT0gQ09NUFVURV9QTEFOX0lEX09GRikgJiYg XAorCShwZ3NwX3RyYWNrID09IFBHU1BfVFJBQ0tfQUxMIHx8IFwKKwkocGdzcF90cmFjayA9PSBQ R1NQX1RSQUNLX1RPUCAmJiAobGV2ZWwpID09IDApKSkKKworI2RlZmluZSBVU0FHRV9JTkNSRUFT RQkJCTAuNQkJLyogaW5jcmVhc2UgYnkgdGhpcyBlYWNoIHRpbWUgd2UgcmVwb3J0IHN0YXRzICov CisjZGVmaW5lIFVTQUdFX0RFQ1JFQVNFX0ZBQ1RPUgkoMC45OSkJLyogZGVjcmVhc2VkIGV2ZXJ5 IHBnc3RhdF9kZWFsbG9jX3BsYW5zICovCisjZGVmaW5lIFVTQUdFX0RFQUxMT0NfUEVSQ0VOVAk1 CQkvKiBmcmVlIHRoaXMgJSBvZiBlbnRyaWVzIGF0IG9uY2UgKi8KKworLyotLS0tIEZ1bmN0aW9u IGRlY2xhcmF0aW9ucyAtLS0tKi8KKworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3BsYW5z X3Jlc2V0KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9wbGFuc18xXzApOworCisvKiBT dHJ1Y3R1cmVzIGZvciBzdGF0aXN0aWNzIG9mIHBsYW5zICovCit0eXBlZGVmIHN0cnVjdCBQZ1N0 YXRTaGFyZWRfUGxhbkluZm8KK3sKKwkvKiBrZXkgZWxlbWVudHMgdGhhdCBpZGVudGlmeSBhIHBs YW4gKHRvZ2V0aGVyIHdpdGggdGhlIGRib2lkKSAqLworCXVpbnQ2NAlwbGFuaWQ7CisJdWludDY0 CXF1ZXJ5aWQ7CisJT2lkCQl1c2VyaWQ7IC8qIHVzZXJpZCBpcyB0cmFja2VkIHRvIGFsbG93IHVz ZXJzIHRvIHNlZSB0aGVpciBvd24gcXVlcnkgcGxhbnMgKi8KKworCWRzYV9wb2ludGVyIHBsYW5f dGV4dDsgIC8qIHBvaW50ZXIgdG8gRFNBIG1lbW9yeSBjb250YWluaW5nIHBsYW4gdGV4dCAqLwor CWludAkJcGxhbl9lbmNvZGluZzsJLyogcGxhbiB0ZXh0IGVuY29kaW5nICovCit9IFBnU3RhdFNo YXJlZF9QbGFuSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X1N0YXRQbGFuRW50cnkKK3sK KwlQZ1N0YXRfQ291bnRlcglleGVjX2NvdW50OworCWRvdWJsZQkJCWV4ZWNfdGltZTsKKwlkb3Vi bGUJCQl1c2FnZTsgLyogVXNhZ2UgZmFjdG9yIG9mIHRoZSBlbnRyeSwgdXNlZCB0byBwcmlvcml0 aXplIHdoaWNoIHBsYW5zIHRvIGFnZSBvdXQgKi8KKworCS8qIE9ubHkgdXNlZCBpbiBzaGFyZWQg c3RydWN0dXJlLCBub3QgaW4gbG9jYWwgcGVuZGluZyBzdGF0cyAqLworCVBnU3RhdFNoYXJlZF9Q bGFuSW5mbyBpbmZvOworfSBQZ1N0YXRfU3RhdFBsYW5FbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3Qg UGdTdGF0U2hhcmVkX1BsYW4KK3sKKwlQZ1N0YXRTaGFyZWRfQ29tbW9uIGhlYWRlcjsKKwlQZ1N0 YXRfU3RhdFBsYW5FbnRyeSBzdGF0czsKK30gUGdTdGF0U2hhcmVkX1BsYW47CisKK3N0YXRpYyBi b29sIHBsYW5fc3RhdHNfZmx1c2hfY2IoUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWYsIGJvb2wg bm93YWl0KTsKKworc3RhdGljIGNvbnN0IFBnU3RhdF9LaW5kSW5mbyBwbGFuX3N0YXRzID0gewor CS5uYW1lID0gInBsYW5fc3RhdHMiLAorCS5maXhlZF9hbW91bnQgPSBmYWxzZSwKKworCS8qIFdl IGN1cnJlbnRseSBkb24ndCB3cml0ZSB0byBhIGZpbGUgc2luY2UgcGxhbiB0ZXh0cyB3b3VsZCBn ZXQgbG9zdCAoYW5kIGp1c3QgdGhlIHN0YXRzIG9uIHRoZWlyIG93biBhcmVuJ3QgdGhhdCB1c2Vm dWwpICovCisJLndyaXRlX3RvX2ZpbGUgPSBmYWxzZSwKKworCS8qIFBsYW4gc3RhdGlzdGljcyBh cmUgYXZhaWxhYmxlIHN5c3RlbS13aWRlIHRvIHNpbXBsaWZ5IG1vbml0b3Jpbmcgc2NyaXB0cyAq LworCS5hY2Nlc3NlZF9hY3Jvc3NfZGF0YWJhc2VzID0gdHJ1ZSwKKworCS5zaGFyZWRfc2l6ZSA9 IHNpemVvZihQZ1N0YXRTaGFyZWRfUGxhbiksCisJLnNoYXJlZF9kYXRhX29mZiA9IG9mZnNldG9m KFBnU3RhdFNoYXJlZF9QbGFuLCBzdGF0cyksCisJLnNoYXJlZF9kYXRhX2xlbiA9IHNpemVvZigo KFBnU3RhdFNoYXJlZF9QbGFuICopIDApLT5zdGF0cyksCisJLnBlbmRpbmdfc2l6ZSA9IHNpemVv ZihQZ1N0YXRfU3RhdFBsYW5FbnRyeSksCisJLmZsdXNoX3BlbmRpbmdfY2IgPSBwbGFuX3N0YXRz X2ZsdXNoX2NiLAorfTsKKworLyoKKyAqIENvbXB1dGUgc3RhdHMgZW50cnkgaWR4IGZyb20gcXVl cnkgSUQgYW5kIHBsYW4gSUQgd2l0aCBhbiA4LWJ5dGUgaGFzaC4KKyAqCisgKiBXaGlsc3Qgd2Ug Y291bGQgdGhlb3JpY2FsbHkganVzdCB1c2UgdGhlIHBsYW4gSUQgaGVyZSwgd2UgaW50ZW50aW9u YWxseQorICogYWRkIHRoZSBxdWVyeSBJRCBpbnRvIHRoZSBtaXggdG8gZWFzZSBpbnRlcnByZXRp bmcgdGhlIGRhdGEgaW4gY29tYmluYXRpb24KKyAqIHdpdGggcGdfc3RhdF9zdGF0ZW1lbnRzLgor ICovCisjZGVmaW5lIFBHU1RBVF9QTEFOX0lEWChxdWVyeV9pZCwgcGxhbl9pZCwgdXNlcl9pZCkg aGFzaF9jb21iaW5lNjQocXVlcnlfaWQsIGhhc2hfY29tYmluZTY0KHBsYW5faWQsIHVzZXJfaWQp KQorCisvKgorICogS2luZCBJRCByZXNlcnZlZCBmb3Igc3RhdGlzdGljcyBvZiBwbGFucy4KKyAq LworI2RlZmluZSBQR1NUQVRfS0lORF9QTEFOUwlQR1NUQVRfS0lORF9FWFBFUklNRU5UQUwgLyog VE9ETzogQXNzaWduICovCisKKy8qCisgKiBDYWxsYmFjayBmb3Igc3RhdHMgaGFuZGxpbmcKKyAq Lworc3RhdGljIGJvb2wKK3BsYW5fc3RhdHNfZmx1c2hfY2IoUGdTdGF0X0VudHJ5UmVmICplbnRy eV9yZWYsIGJvb2wgbm93YWl0KQoreworCVBnU3RhdF9TdGF0UGxhbkVudHJ5ICpsb2NhbGVudDsK KwlQZ1N0YXRTaGFyZWRfUGxhbiAqc2hmdW5jZW50OworCisJbG9jYWxlbnQgPSAoUGdTdGF0X1N0 YXRQbGFuRW50cnkgKikgZW50cnlfcmVmLT5wZW5kaW5nOworCXNoZnVuY2VudCA9IChQZ1N0YXRT aGFyZWRfUGxhbiAqKSBlbnRyeV9yZWYtPnNoYXJlZF9zdGF0czsKKworCWlmICghcGdzdGF0X2xv Y2tfZW50cnkoZW50cnlfcmVmLCBub3dhaXQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzaGZ1bmNl bnQtPnN0YXRzLmV4ZWNfY291bnQgKz0gbG9jYWxlbnQtPmV4ZWNfY291bnQ7CisJc2hmdW5jZW50 LT5zdGF0cy5leGVjX3RpbWUgKz0gbG9jYWxlbnQtPmV4ZWNfdGltZTsKKwlzaGZ1bmNlbnQtPnN0 YXRzLnVzYWdlICs9IGxvY2FsZW50LT51c2FnZTsKKworCXBnc3RhdF91bmxvY2tfZW50cnkoZW50 cnlfcmVmKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgY2hhciAqCitwZ3NwX2V4cGxh aW5fcGxhbihRdWVyeURlc2MgKnF1ZXJ5RGVzYykKK3sKKwlFeHBsYWluU3RhdGUgKmVzOworCVN0 cmluZ0luZm8gZXNfc3RyOworCisJZXMgPSBOZXdFeHBsYWluU3RhdGUoKTsKKwllc19zdHIgPSBl cy0+c3RyOworCisJLyoKKwkgKiBXZSB0dXJuIG9mZiBDT1NUUyBzaW5jZSBpZGVudGljYWwgcGxh bmlkcyBtYXkgaGF2ZSB2ZXJ5IGRpZmZlcmVudCBjb3N0cywKKwkgKiBhbmQgaXQgY291bGQgYmUg bWlzbGVhZGluZyB0byBvbmx5IHNob3cgdGhlIGZpcnN0IHJlY29yZGVkIHBsYW4ncyBjb3N0cy4K KwkgKi8KKwllcy0+Y29zdHMgPSBmYWxzZTsKKwllcy0+Zm9ybWF0ID0gRVhQTEFJTl9GT1JNQVRf VEVYVDsKKworCUV4cGxhaW5CZWdpbk91dHB1dChlcyk7CisJRXhwbGFpblByaW50UGxhbihlcywg cXVlcnlEZXNjKTsKKwlFeHBsYWluRW5kT3V0cHV0KGVzKTsKKworCXJldHVybiBlc19zdHItPmRh dGE7Cit9CisKK3N0YXRpYyB2b2lkCitwZ3N0YXRfZ2NfcGxhbl9tZW1vcnkoKQoreworCWRzaGFz aF9zZXFfc3RhdHVzIGhzdGF0OworCVBnU3RhdFNoYXJlZF9IYXNoRW50cnkgKnA7CisKKwkvKiBk c2hhc2ggZW50cnkgaXMgbm90IG1vZGlmaWVkLCB0YWtlIHNoYXJlZCBsb2NrICovCisJZHNoYXNo X3NlcV9pbml0KCZoc3RhdCwgcGdTdGF0TG9jYWwuc2hhcmVkX2hhc2gsIGZhbHNlKTsKKwl3aGls ZSAoKHAgPSBkc2hhc2hfc2VxX25leHQoJmhzdGF0KSkgIT0gTlVMTCkKKwl7CisJCVBnU3RhdFNo YXJlZF9Db21tb24gKmhlYWRlcjsKKwkJUGdTdGF0X1N0YXRQbGFuRW50cnkgKnN0YXRlbnQ7CisK KwkJaWYgKCFwLT5kcm9wcGVkIHx8IHAtPmtleS5raW5kICE9IFBHU1RBVF9LSU5EX1BMQU5TKQor CQkJY29udGludWU7CisKKwkJaGVhZGVyID0gZHNhX2dldF9hZGRyZXNzKHBnU3RhdExvY2FsLmRz YSwgcC0+Ym9keSk7CisKKwkJaWYgKCFMV0xvY2tDb25kaXRpb25hbEFjcXVpcmUoJmhlYWRlci0+ bG9jaywgTFdfRVhDTFVTSVZFKSkKKwkJCWNvbnRpbnVlOworCisJCXN0YXRlbnQgPSAoUGdTdGF0 X1N0YXRQbGFuRW50cnkgKikgcGdzdGF0X2dldF9lbnRyeV9kYXRhKFBHU1RBVF9LSU5EX1BMQU5T LCBoZWFkZXIpOworCisJCS8qIENsZWFuIHVwIHRoaXMgZW50cnkncyBwbGFuIHRleHQgYWxsb2Nh dGlvbiwgaWYgd2UgaGF2ZW4ndCBkb25lIHNvIGFscmVhZHkgKi8KKwkJaWYgKERzYVBvaW50ZXJJ c1ZhbGlkKHN0YXRlbnQtPmluZm8ucGxhbl90ZXh0KSkKKwkJeworCQkJZHNhX2ZyZWUocGdTdGF0 TG9jYWwuZHNhLCBzdGF0ZW50LT5pbmZvLnBsYW5fdGV4dCk7CisJCQlzdGF0ZW50LT5pbmZvLnBs YW5fdGV4dCA9IEludmFsaWREc2FQb2ludGVyOworCisJCQkvKiBBbGxvdyByZW1vdmFsIG9mIHRo ZSBzaGFyZWQgc3RhdHMgZW50cnkgKi8KKwkJCXBnX2F0b21pY19mZXRjaF9zdWJfdTMyKCZwLT5y ZWZjb3VudCwgMSk7CisJCX0KKworCQlMV0xvY2tSZWxlYXNlKCZoZWFkZXItPmxvY2spOworCX0K Kwlkc2hhc2hfc2VxX3Rlcm0oJmhzdGF0KTsKKworCS8vIEVuY291cmFnZSBvdGhlciBiYWNrZW5k cyB0byBjbGVhbiB1cCBkcm9wcGVkIGVudHJ5IHJlZnMKKwlwZ3N0YXRfcmVxdWVzdF9lbnRyeV9y ZWZzX2djKCk7Cit9CisKK3R5cGVkZWYgc3RydWN0IFBsYW5EZWFsbG9jRW50cnkKK3sKKwlQZ1N0 YXRfSGFzaEtleSBrZXk7CisJZG91YmxlIHVzYWdlOworfSBQbGFuRGVhbGxvY0VudHJ5OworCisv KgorICogbGlzdCBzb3J0IGNvbXBhcmF0b3IgZm9yIHNvcnRpbmcgaW50byBkZWNyZWFzaW5nIHVz YWdlIG9yZGVyCisgKi8KK3N0YXRpYyBpbnQKK2VudHJ5X2NtcF9scnUoY29uc3QgdW5pb24gTGlz dENlbGwgKmxocywgY29uc3QgdW5pb24gTGlzdENlbGwgKnJocykKK3sKKwlkb3VibGUJCWxfdXNh Z2UgPSAoKFBsYW5EZWFsbG9jRW50cnkgKikgbGZpcnN0KGxocykpLT51c2FnZTsKKwlkb3VibGUJ CXJfdXNhZ2UgPSAoKFBsYW5EZWFsbG9jRW50cnkgKikgbGZpcnN0KHJocykpLT51c2FnZTsKKwor CWlmIChsX3VzYWdlID4gcl91c2FnZSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGxfdXNhZ2Ug PCByX3VzYWdlKQorCQlyZXR1cm4gKzE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQKK3Bnc3RhdF9kZWFsbG9jX3BsYW5zKCkKK3sKKwlkc2hhc2hfc2VxX3N0YXR1cyBoc3Rh dDsKKwlQZ1N0YXRTaGFyZWRfSGFzaEVudHJ5ICpwOworCUxpc3QgKmVudHJpZXMgPSBOSUw7CisJ TGlzdENlbGwgKmxjOworCWludCBudmljdGltczsKKworCS8qIGRzaGFzaCBlbnRyeSBpcyBub3Qg bW9kaWZpZWQsIHRha2Ugc2hhcmVkIGxvY2sgKi8KKwlkc2hhc2hfc2VxX2luaXQoJmhzdGF0LCBw Z1N0YXRMb2NhbC5zaGFyZWRfaGFzaCwgZmFsc2UpOworCXdoaWxlICgocCA9IGRzaGFzaF9zZXFf bmV4dCgmaHN0YXQpKSAhPSBOVUxMKQorCXsKKwkJUGdTdGF0U2hhcmVkX0NvbW1vbiAqaGVhZGVy OworCQlQZ1N0YXRfU3RhdFBsYW5FbnRyeSAqc3RhdGVudDsKKwkJUGxhbkRlYWxsb2NFbnRyeSAq ZW50cnk7CisKKwkJaWYgKHAtPmRyb3BwZWQgfHwgcC0+a2V5LmtpbmQgIT0gUEdTVEFUX0tJTkRf UExBTlMpCisJCQljb250aW51ZTsKKworCQloZWFkZXIgPSBkc2FfZ2V0X2FkZHJlc3MocGdTdGF0 TG9jYWwuZHNhLCBwLT5ib2R5KTsKKworCQlpZiAoIUxXTG9ja0NvbmRpdGlvbmFsQWNxdWlyZSgm aGVhZGVyLT5sb2NrLCBMV19FWENMVVNJVkUpKQorCQkJY29udGludWU7CisKKwkJc3RhdGVudCA9 IChQZ1N0YXRfU3RhdFBsYW5FbnRyeSAqKSBwZ3N0YXRfZ2V0X2VudHJ5X2RhdGEoUEdTVEFUX0tJ TkRfUExBTlMsIGhlYWRlcik7CisJCXN0YXRlbnQtPnVzYWdlICo9IFVTQUdFX0RFQ1JFQVNFX0ZB Q1RPUjsKKworCQllbnRyeSA9IHBhbGxvYyhzaXplb2YoUGxhbkRlYWxsb2NFbnRyeSkpOworCQll bnRyeS0+a2V5ID0gcC0+a2V5OworCQllbnRyeS0+dXNhZ2UgPSBzdGF0ZW50LT51c2FnZTsKKwor CQlMV0xvY2tSZWxlYXNlKCZoZWFkZXItPmxvY2spOworCisJCWVudHJpZXMgPSBsYXBwZW5kKGVu dHJpZXMsIGVudHJ5KTsKKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZoc3RhdCk7CisKKwkvKiBTb3J0 IGJ5IHVzYWdlIGFzY2VuZGluZyAobG93ZXN0IHVzZWQgZW50cmllcyBhcmUgbGFzdCkgKi8KKwls aXN0X3NvcnQoZW50cmllcywgZW50cnlfY21wX2xydSk7CisKKwkvKiBBdCBhIG1pbmltdW0sIGRl YWxsb2NhdGUgMTAgZW50cmllcyB0byBtYWtlIGl0IHdvcnRoIG91ciB3aGlsZSAqLworCW52aWN0 aW1zID0gTWF4KDEwLCBsaXN0X2xlbmd0aChlbnRyaWVzKSAqIFVTQUdFX0RFQUxMT0NfUEVSQ0VO VCAvIDEwMCk7CisJbnZpY3RpbXMgPSBNaW4obnZpY3RpbXMsIGxpc3RfbGVuZ3RoKGVudHJpZXMp KTsKKworCS8qIEFjdHVhbGx5IGRyb3AgdGhlIGVudHJpZXMgKi8KKwlmb3JfZWFjaF9mcm9tKGxj LCBlbnRyaWVzLCBsaXN0X2xlbmd0aChlbnRyaWVzKSAtIG52aWN0aW1zKQorCXsKKwkJUGxhbkRl YWxsb2NFbnRyeSAqZW50cnkgPSBsZmlyc3QobGMpOworCQlwZ3N0YXRfZHJvcF9lbnRyeShlbnRy eS0+a2V5LmtpbmQsIGVudHJ5LT5rZXkuZGJvaWQsIGVudHJ5LT5rZXkub2JqaWQpOworCX0KKwor CS8qIENsZWFuIHVwIG91ciB3b3JraW5nIG1lbW9yeSBpbW1lZGlhdGVseSAqLworCWZvcmVhY2go bGMsIGVudHJpZXMpCisJeworCQlQbGFuRGVhbGxvY0VudHJ5ICplbnRyeSA9IGxmaXJzdChsYyk7 CisJCXBmcmVlKGVudHJ5KTsKKwl9CisJcGZyZWUoZW50cmllcyk7Cit9CisKK3N0YXRpYyB2b2lk CitwZ3N0YXRfZ2NfcGxhbnMoKQoreworCWRzaGFzaF9zZXFfc3RhdHVzIGhzdGF0OworCVBnU3Rh dFNoYXJlZF9IYXNoRW50cnkgKnA7CisJYm9vbCBoYXZlX2Ryb3BwZWRfZW50cmllcyA9IGZhbHNl OworCXNpemVfdCBwbGFuX2VudHJ5X2NvdW50ID0gMDsKKworCS8qIFRPRE86IFByZXZlbnQgY29u Y3VycmVudCBHQyBjeWNsZXMgLSBmbGFnIGFuIGFjdGl2ZSBHQyBydW4gc29tZWhvdyAqLworCisJ LyoKKwkgKiBDb3VudCBvdXIgYWN0aXZlIGVudHJpZXMsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBh bnkgZHJvcHBlZCBlbnRyaWVzIHdlCisJICogbWF5IG5lZWQgdG8gY2xlYW4gdXAgYXQgdGhlIGVu ZC4KKwkgKi8KKwlkc2hhc2hfc2VxX2luaXQoJmhzdGF0LCBwZ1N0YXRMb2NhbC5zaGFyZWRfaGFz aCwgZmFsc2UpOworCXdoaWxlICgocCA9IGRzaGFzaF9zZXFfbmV4dCgmaHN0YXQpKSAhPSBOVUxM KQorCXsKKwkJaWYgKHAtPmtleS5raW5kICE9IFBHU1RBVF9LSU5EX1BMQU5TKQorCQkJY29udGlu dWU7CisKKwkJaWYgKHAtPmRyb3BwZWQpCisJCQloYXZlX2Ryb3BwZWRfZW50cmllcyA9IHRydWU7 CisJCWVsc2UKKwkJCXBsYW5fZW50cnlfY291bnQrKzsKKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZo c3RhdCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG92ZXIgdGhlIGxpbWl0LCBkZWxldGUgZW50cmll cyB3aXRoIGxvd2VzdCB1c2FnZSBmYWN0b3IuCisJICovCisJaWYgKHBsYW5fZW50cnlfY291bnQg PiBwZ3NwX21heCkKKwl7CisJCXBnc3RhdF9kZWFsbG9jX3BsYW5zKCk7CisJCWhhdmVfZHJvcHBl ZF9lbnRyaWVzID0gdHJ1ZTsgLyogQXNzdW1lIHdlIGRpZCBzb21lIHdvcmsgKi8KKwl9CisKKwkv KiBJZiB0aGVyZSBhcmUgZHJvcHBlZCBlbnRyaWVzLCBjbGVhbiB1cCB0aGVpciBwbGFuIG1lbW9y eSBpZiBuZWVkZWQgKi8KKwlpZiAoaGF2ZV9kcm9wcGVkX2VudHJpZXMpCisJCXBnc3RhdF9nY19w bGFuX21lbW9yeSgpOworfQorCitzdGF0aWMgdm9pZAorcGdzdGF0X3JlcG9ydF9wbGFuX3N0YXRz KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLAorCQkJCQkJIFBnU3RhdF9Db3VudGVyIGV4ZWNfY291bnQs CisJCSAgIAkJCQkgZG91YmxlIGV4ZWNfdGltZSkKK3sKKwlQZ1N0YXRfRW50cnlSZWYgKmVudHJ5 X3JlZjsKKwlQZ1N0YXRTaGFyZWRfUGxhbiAqc2hzdGF0ZW50OworCVBnU3RhdF9TdGF0UGxhbkVu dHJ5ICpzdGF0ZW50OworCWJvb2wgbmV3bHlfY3JlYXRlZDsKKwl1aW50NjQJcXVlcnlJZCA9IHF1 ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnF1ZXJ5SWQ7CisJdWludDY0CXBsYW5JZCA9IHF1ZXJ5RGVz Yy0+cGxhbm5lZHN0bXQtPnBsYW5JZDsKKwlPaWQgCXVzZXJpZCA9IEdldFVzZXJJZCgpOworCisJ ZW50cnlfcmVmID0gcGdzdGF0X3ByZXBfcGVuZGluZ19lbnRyeShQR1NUQVRfS0lORF9QTEFOUywg TXlEYXRhYmFzZUlkLAorCQkJCQkJCQkJCSAgUEdTVEFUX1BMQU5fSURYKHF1ZXJ5SWQsIHBsYW5J ZCwgdXNlcmlkKSwgJm5ld2x5X2NyZWF0ZWQpOworCisJc2hzdGF0ZW50ID0gKFBnU3RhdFNoYXJl ZF9QbGFuICopIGVudHJ5X3JlZi0+c2hhcmVkX3N0YXRzOworCXN0YXRlbnQgPSAmc2hzdGF0ZW50 LT5zdGF0czsKKworCWlmIChuZXdseV9jcmVhdGVkKQorCXsKKwkJY2hhciAqcGxhbiA9IHBnc3Bf ZXhwbGFpbl9wbGFuKHF1ZXJ5RGVzYyk7CisJCXNpemVfdCBwbGFuX3NpemUgPSBNaW4oc3RybGVu KHBsYW4pLCBwZ3NwX21heF9zaXplKTsKKworCQkodm9pZCkgcGdzdGF0X2xvY2tfZW50cnkoZW50 cnlfcmVmLCBmYWxzZSk7CisKKwkJLyoKKwkJICogV2UgbWF5IGJlIG92ZXIgdGhlIGxpbWl0LCBz byBydW4gR0Mgbm93IGJlZm9yZSBzYXZpbmcgZW50cnkKKwkJICogKHdlIGRvIHRoaXMgd2hpbHN0 IGhvbGRpbmcgdGhlIGxvY2sgb24gdGhlIG5ldyBlbnRyeSBzbyB3ZSBkb24ndCByZW1vdmUgaXQg YnkgYWNjaWRlbnQpCisJCSAqLworCQlwZ3N0YXRfZ2NfcGxhbnMoKTsKKworCQlzaHN0YXRlbnQt PnN0YXRzLmluZm8ucGxhbmlkID0gcGxhbklkOworCQlzaHN0YXRlbnQtPnN0YXRzLmluZm8ucXVl cnlpZCA9IHF1ZXJ5SWQ7CisJCXNoc3RhdGVudC0+c3RhdHMuaW5mby51c2VyaWQgPSB1c2VyaWQ7 CisJCXNoc3RhdGVudC0+c3RhdHMuaW5mby5wbGFuX3RleHQgPSBkc2FfYWxsb2NhdGUocGdTdGF0 TG9jYWwuZHNhLCBwbGFuX3NpemUpOworCQlzdHJsY3B5KGRzYV9nZXRfYWRkcmVzcyhwZ1N0YXRM b2NhbC5kc2EsIHNoc3RhdGVudC0+c3RhdHMuaW5mby5wbGFuX3RleHQpLCBwbGFuLCBwbGFuX3Np emUpOworCisJCXNoc3RhdGVudC0+c3RhdHMuaW5mby5wbGFuX2VuY29kaW5nID0gR2V0RGF0YWJh c2VFbmNvZGluZygpOworCisJCS8qIEluY3JlYXNlIHJlZmNvdW50IGhlcmUgc28gZW50cnkgY2Fu J3QgZ2V0IHJlbGVhc2VkIHdpdGhvdXQgdXMgZHJvcHBpbmcgdGhlIHBsYW4gdGV4dCAqLworCQlw Z19hdG9taWNfZmV0Y2hfYWRkX3UzMigmZW50cnlfcmVmLT5zaGFyZWRfZW50cnktPnJlZmNvdW50 LCAxKTsKKworCQlwZ3N0YXRfdW5sb2NrX2VudHJ5KGVudHJ5X3JlZik7CisKKwkJcGZyZWUocGxh bik7CisJfQorCisJc3RhdGVudC0+ZXhlY19jb3VudCArPSBleGVjX2NvdW50OworCXN0YXRlbnQt PmV4ZWNfdGltZSArPSBleGVjX3RpbWU7CisJc3RhdGVudC0+dXNhZ2UgKz0gVVNBR0VfSU5DUkVB U0U7Cit9CisKKy8qCisgKiBQbGFubmVyIGhvb2s6IGZvcndhcmQgdG8gcmVndWxhciBwbGFubmVy LCBidXQgaW5jcmVhc2UgcGxhbiBjb3VudCBhbmQKKyAqIHJlY29yZCBxdWVyeSBwbGFuIGlmIG5l ZWRlZC4KKyAqLworc3RhdGljIFBsYW5uZWRTdG10ICoKK3Bnc3BfcGxhbm5lcihRdWVyeSAqcGFy c2UsCisJCQkgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJIGludCBjdXJzb3JPcHRpb25z LAorCQkJIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMpCit7CisJUGxhbm5lZFN0bXQgKnJlc3Vs dDsKKworCS8qCisJKiBJbmNyZW1lbnQgdGhlIG5lc3RpbmcgbGV2ZWwsIHRvIGVuc3VyZSB0aGF0 IGZ1bmN0aW9ucworCSogZXZhbHVhdGVkIGR1cmluZyBwbGFubmluZyBhcmUgbm90IHNlZW4gYXMg dG9wLWxldmVsIGNhbGxzLgorCSovCisJbmVzdGluZ19sZXZlbCsrOworCVBHX1RSWSgpOworCXsK KwkJaWYgKHByZXZfcGxhbm5lcl9ob29rKQorCQkJcmVzdWx0ID0gcHJldl9wbGFubmVyX2hvb2so cGFyc2UsIHF1ZXJ5X3N0cmluZywgY3Vyc29yT3B0aW9ucywKKwkJCQkJCQkJCQlib3VuZFBhcmFt cyk7CisJCWVsc2UKKwkJCXJlc3VsdCA9IHN0YW5kYXJkX3BsYW5uZXIocGFyc2UsIHF1ZXJ5X3N0 cmluZywgY3Vyc29yT3B0aW9ucywKKwkJCQkJCQkJCQlib3VuZFBhcmFtcyk7CisJfQorCVBHX0ZJ TkFMTFkoKTsKKwl7CisJCW5lc3RpbmdfbGV2ZWwtLTsKKwl9CisJUEdfRU5EX1RSWSgpOworCisJ cmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEV4ZWN1dG9yU3RhcnQgaG9vazogc3RhcnQgdXAg dHJhY2tpbmcgaWYgbmVlZGVkCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NwX0V4ZWN1dG9yU3RhcnQo UXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCit7CisJdWludDY0CXF1ZXJ5SWQgPSBx dWVyeURlc2MtPnBsYW5uZWRzdG10LT5xdWVyeUlkOworCXVpbnQ2NAlwbGFuSWQgPSBxdWVyeURl c2MtPnBsYW5uZWRzdG10LT5wbGFuSWQ7CisKKwlpZiAocHJldl9FeGVjdXRvclN0YXJ0KQorCQlw cmV2X0V4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBlZmxhZ3MpOworCWVsc2UKKwkJc3RhbmRhcmRf RXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7CisKKwlpZiAocXVlcnlJZCAhPSBVSU5U NjRDT05TVCgwKSAmJiBwbGFuSWQgIT0gVUlOVDY0Q09OU1QoMCkgJiYKKwkgICAgcGdzcF9lbmFi bGVkKG5lc3RpbmdfbGV2ZWwpKQorCXsKKwkJLyogUmVjb3JkIGluaXRpYWwgZW50cnkgbm93LCBz byBwbGFuIHRleHQgaXMgYXZhaWxhYmxlIGZvciBjdXJyZW50bHkgcnVubmluZyBxdWVyaWVzICov CisJCXBnc3RhdF9yZXBvcnRfcGxhbl9zdGF0cyhxdWVyeURlc2MsCisJCQkJCQkJCSAwLCAvKiBl eGVjdXRpb25zIGFyZSBjb3VudGVkIGluIHBnc3BfRXhlY3V0b3JFbmQgKi8KKwkJCQkgICAJCQkJ IDAuMCk7CisKKwkJLyoKKwkJICogU2V0IHVwIHRvIHRyYWNrIHRvdGFsIGVsYXBzZWQgdGltZSBp biBFeGVjdXRvclJ1bi4gIE1ha2Ugc3VyZSB0aGUKKwkJICogc3BhY2UgaXMgYWxsb2NhdGVkIGlu IHRoZSBwZXItcXVlcnkgY29udGV4dCBzbyBpdCB3aWxsIGdvIGF3YXkgYXQKKwkJICogRXhlY3V0 b3JFbmQuCisJCSAqLworCQlpZiAocXVlcnlEZXNjLT50b3RhbHRpbWUgPT0gTlVMTCkKKwkJewor CQkJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwkJCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfcXVlcnlfY3h0KTsKKwkJCXF1ZXJ5RGVzYy0+dG90 YWx0aW1lID0gSW5zdHJBbGxvYygxLCBJTlNUUlVNRU5UX0FMTCwgZmFsc2UpOworCQkJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBFeGVjdXRvclJ1 biBob29rOiBhbGwgd2UgbmVlZCBkbyBpcyB0cmFjayBuZXN0aW5nIGRlcHRoCisgKi8KK3N0YXRp YyB2b2lkCitwZ3NwX0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbiwgdWludDY0IGNvdW50KQoreworCW5lc3RpbmdfbGV2ZWwrKzsKKwlQR19U UlkoKTsKKwl7CisJCWlmIChwcmV2X0V4ZWN1dG9yUnVuKQorCQkJcHJldl9FeGVjdXRvclJ1bihx dWVyeURlc2MsIGRpcmVjdGlvbiwgY291bnQpOworCQllbHNlCisJCQlzdGFuZGFyZF9FeGVjdXRv clJ1bihxdWVyeURlc2MsIGRpcmVjdGlvbiwgY291bnQpOworCX0KKwlQR19GSU5BTExZKCk7CisJ eworCQluZXN0aW5nX2xldmVsLS07CisJfQorCVBHX0VORF9UUlkoKTsKK30KKworLyoKKyAqIEV4 ZWN1dG9yRmluaXNoIGhvb2s6IGFsbCB3ZSBuZWVkIGRvIGlzIHRyYWNrIG5lc3RpbmcgZGVwdGgK KyAqLworc3RhdGljIHZvaWQKK3Bnc3BfRXhlY3V0b3JGaW5pc2goUXVlcnlEZXNjICpxdWVyeURl c2MpCit7CisJbmVzdGluZ19sZXZlbCsrOworCVBHX1RSWSgpOworCXsKKwkJaWYgKHByZXZfRXhl Y3V0b3JGaW5pc2gpCisJCQlwcmV2X0V4ZWN1dG9yRmluaXNoKHF1ZXJ5RGVzYyk7CisJCWVsc2UK KwkJCXN0YW5kYXJkX0V4ZWN1dG9yRmluaXNoKHF1ZXJ5RGVzYyk7CisJfQorCVBHX0ZJTkFMTFko KTsKKwl7CisJCW5lc3RpbmdfbGV2ZWwtLTsKKwl9CisJUEdfRU5EX1RSWSgpOworfQorCisvKgor ICogRXhlY3V0b3JFbmQgaG9vazogc3RvcmUgcmVzdWx0cyBpZiBuZWVkZWQKKyAqLworc3RhdGlj IHZvaWQKK3Bnc3BfRXhlY3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURlc2MpCit7CisJdWludDY0 CXF1ZXJ5SWQgPSBxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5xdWVyeUlkOworCXVpbnQ2NAlwbGFu SWQgPSBxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5wbGFuSWQ7CisKKwlpZiAocXVlcnlJZCAhPSBV SU5UNjRDT05TVCgwKSAmJiBwbGFuSWQgIT0gVUlOVDY0Q09OU1QoMCkgJiYKKwkgICAgcXVlcnlE ZXNjLT50b3RhbHRpbWUgJiYgcGdzcF9lbmFibGVkKG5lc3RpbmdfbGV2ZWwpKQorCXsKKwkJLyoK KwkJICogTWFrZSBzdXJlIHN0YXRzIGFjY3VtdWxhdGlvbiBpcyBkb25lLiAgKE5vdGU6IGl0J3Mg b2theSBpZiBzZXZlcmFsCisJCSAqIGxldmVscyBvZiBob29rIGFsbCBkbyB0aGlzLikKKwkJICov CisJCUluc3RyRW5kTG9vcChxdWVyeURlc2MtPnRvdGFsdGltZSk7CisKKwkJcGdzdGF0X3JlcG9y dF9wbGFuX3N0YXRzKHF1ZXJ5RGVzYywKKwkJCQkJCQkJIDEsCisJCQkJICAgCQkJCSBxdWVyeURl c2MtPnRvdGFsdGltZS0+dG90YWwgKiAxMDAwLjAgLyogY29udmVydCB0byBtc2VjICovKTsKKwl9 CisKKwlpZiAocHJldl9FeGVjdXRvckVuZCkKKwkJcHJldl9FeGVjdXRvckVuZChxdWVyeURlc2Mp OworCWVsc2UKKwkJc3RhbmRhcmRfRXhlY3V0b3JFbmQocXVlcnlEZXNjKTsKK30KKworLyoKKyAq IE1vZHVsZSBsb2FkIGNhbGxiYWNrCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJLyoK KwkgKiBJbiBvcmRlciB0byByZWdpc3RlciBmb3Igc2hhcmVkIG1lbW9yeSBzdGF0cywgd2UgaGF2 ZSB0byBiZSBsb2FkZWQgdmlhCisJICogc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzLiAgSWYgbm90 LCBmYWxsIG91dCB3aXRob3V0IGhvb2tpbmcgaW50byBhbnkgb2YKKwkgKiB0aGUgbWFpbiBzeXN0 ZW0uICAoV2UgZG9uJ3QgdGhyb3cgZXJyb3IgaGVyZSBiZWNhdXNlIGl0IHNlZW1zIHVzZWZ1bCB0 bworCSAqIGFsbG93IHRoZSBwZ19zdGF0X3BsYW5zIGZ1bmN0aW9ucyB0byBiZSBjcmVhdGVkIGV2 ZW4gd2hlbiB0aGUKKwkgKiBtb2R1bGUgaXNuJ3QgYWN0aXZlLiAgVGhlIGZ1bmN0aW9ucyBtdXN0 IHByb3RlY3QgdGhlbXNlbHZlcyBhZ2FpbnN0CisJICogYmVpbmcgY2FsbGVkIHRoZW4sIGhvd2V2 ZXIuKQorCSAqLworCWlmICghcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJv Z3Jlc3MpCisJCXJldHVybjsKKworCS8qCisJICogSW5mb3JtIHRoZSBwb3N0bWFzdGVyIHRoYXQg d2Ugd2FudCB0byBlbmFibGUgcXVlcnlfaWQgY2FsY3VsYXRpb24gaWYKKwkgKiBjb21wdXRlX3F1 ZXJ5X2lkIGlzIHNldCB0byBhdXRvLgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qg YXBwbHkgdG8gY29tcHV0ZV9wbGFuX2lkLCB3aGljaCBtdXN0IGJlCisJICogZW5hYmxlZCBleHBs aWNpdGx5LgorCSAqLworCUVuYWJsZVF1ZXJ5SWQoKTsKKworCS8qCisJICogRGVmaW5lIChvciBy ZWRlZmluZSkgY3VzdG9tIEdVQyB2YXJpYWJsZXMuCisJICovCisJRGVmaW5lQ3VzdG9tSW50VmFy aWFibGUoInBnX3N0YXRfcGxhbnMubWF4IiwKKwkJCQkJCQkiU2V0cyB0aGUgbWF4aW11bSBudW1i ZXIgb2YgcGxhbnMgdHJhY2tlZCBieSBwZ19zdGF0X3BsYW5zIGluIHNoYXJlZCBtZW1vcnkuIiwK KwkJCQkJCQlOVUxMLAorCQkJCQkJCSZwZ3NwX21heCwKKwkJCQkJCQk1MDAwLAorCQkJCQkJCTEw MCwKKwkJCQkJCQlJTlRfTUFYIC8gMiwKKwkJCQkJCQlQR0NfU0lHSFVQLAorCQkJCQkJCTAsCisJ CQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwpOworCisJRGVmaW5lQ3VzdG9t SW50VmFyaWFibGUoInBnX3N0YXRfcGxhbnMubWF4X3NpemUiLAorCQkJCQkJCSJTZXRzIHRoZSBt YXhpbXVtIHNpemUgb2YgcGxhbiB0ZXh0cyB0cmFja2VkIGJ5IHBnX3N0YXRfcGxhbnMgaW4gc2hh cmVkIG1lbW9yeS4iLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnc3BfbWF4X3NpemUsCisJCQkJ CQkJMjA0OCwKKwkJCQkJCQkxMDAsCisJCQkJCQkJMTA0ODU3NiwgLyogMU1CIGhhcmQgbGltaXQg Ki8KKwkJCQkJCQlQR0NfU1VTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5V TEwsCisJCQkJCQkJTlVMTCk7CisKKwlEZWZpbmVDdXN0b21FbnVtVmFyaWFibGUoInBnX3N0YXRf cGxhbnMudHJhY2siLAorCQkJCQkJCSAiU2VsZWN0cyB3aGljaCBwbGFucyBhcmUgdHJhY2tlZCBi eSBwZ19zdGF0X3BsYW5zLiIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ3NwX3RyYWNrLAor CQkJCQkJCSBQR1NQX1RSQUNLX1RPUCwKKwkJCQkJCQkgdHJhY2tfb3B0aW9ucywKKwkJCQkJCQkg UEdDX1NVU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMLAorCQkJ CQkJCSBOVUxMKTsKKworCU1hcmtHVUNQcmVmaXhSZXNlcnZlZCgicGdfc3RhdF9wbGFucyIpOwor CisJLyoKKwkgKiBJbnN0YWxsIGhvb2tzLgorCSAqLworCXByZXZfcGxhbm5lcl9ob29rID0gcGxh bm5lcl9ob29rOworCXBsYW5uZXJfaG9vayA9IHBnc3BfcGxhbm5lcjsKKwlwcmV2X0V4ZWN1dG9y U3RhcnQgPSBFeGVjdXRvclN0YXJ0X2hvb2s7CisJRXhlY3V0b3JTdGFydF9ob29rID0gcGdzcF9F eGVjdXRvclN0YXJ0OworCXByZXZfRXhlY3V0b3JSdW4gPSBFeGVjdXRvclJ1bl9ob29rOworCUV4 ZWN1dG9yUnVuX2hvb2sgPSBwZ3NwX0V4ZWN1dG9yUnVuOworCXByZXZfRXhlY3V0b3JGaW5pc2gg PSBFeGVjdXRvckZpbmlzaF9ob29rOworCUV4ZWN1dG9yRmluaXNoX2hvb2sgPSBwZ3NwX0V4ZWN1 dG9yRmluaXNoOworCXByZXZfRXhlY3V0b3JFbmQgPSBFeGVjdXRvckVuZF9ob29rOworCUV4ZWN1 dG9yRW5kX2hvb2sgPSBwZ3NwX0V4ZWN1dG9yRW5kOworCisJcGdzdGF0X3JlZ2lzdGVyX2tpbmQo UEdTVEFUX0tJTkRfUExBTlMsICZwbGFuX3N0YXRzKTsKK30KKworLyoKKyAqIFJlc2V0IHN0YXRl bWVudCBzdGF0aXN0aWNzLgorICovCitEYXR1bQorcGdfc3RhdF9wbGFuc19yZXNldChQR19GVU5D VElPTl9BUkdTKQoreworCXBnc3RhdF9kcm9wX2VudHJpZXNfb2Zfa2luZChQR1NUQVRfS0lORF9Q TEFOUyk7CisKKwkvKiBGcmVlIHBsYW4gdGV4dCBtZW1vcnkgYW5kIGFsbG93IGNsZWFudXAgb2Yg ZHJvcHBlZCBlbnRyaWVzICovCisJcGdzdGF0X2djX3BsYW5fbWVtb3J5KCk7CisKKwlQR19SRVRV Uk5fVk9JRCgpOworfQorCisjZGVmaW5lIFBHX1NUQVRfUExBTlNfQ09MUyA3CisKK0RhdHVtCitw Z19zdGF0X3BsYW5zXzFfMChQR19GVU5DVElPTl9BUkdTKQoreworCWJvb2wJCXNob3dwbGFuID0g UEdfR0VUQVJHX0JPT0woMCk7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldElu Zm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgpOwor CWJvb2wJCWlzX2FsbG93ZWRfcm9sZSA9IGZhbHNlOworCisJZHNoYXNoX3NlcV9zdGF0dXMgaHN0 YXQ7CisJUGdTdGF0U2hhcmVkX0hhc2hFbnRyeSAqcDsKKworCS8qCisJICogU3VwZXJ1c2VycyBv ciByb2xlcyB3aXRoIHRoZSBwcml2aWxlZ2VzIG9mIHBnX3JlYWRfYWxsX3N0YXRzIG1lbWJlcnMK KwkgKiBhcmUgYWxsb3dlZAorCSAqLworCWlzX2FsbG93ZWRfcm9sZSA9IGhhc19wcml2c19vZl9y b2xlKHVzZXJpZCwgUk9MRV9QR19SRUFEX0FMTF9TVEFUUyk7CisKKwkvKiBzdGF0cyBraW5kIG11 c3QgYmUgcmVnaXN0ZXJlZCBhbHJlYWR5ICovCisJaWYgKCFwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhQ R1NUQVRfS0lORF9QTEFOUykpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygicGdfc3Rh dF9wbGFucyBtdXN0IGJlIGxvYWRlZCB2aWEgXCJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNcIiIp KSk7CisKKwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwkvKiBkc2hhc2ggZW50 cnkgaXMgbm90IG1vZGlmaWVkLCB0YWtlIHNoYXJlZCBsb2NrICovCisJZHNoYXNoX3NlcV9pbml0 KCZoc3RhdCwgcGdTdGF0TG9jYWwuc2hhcmVkX2hhc2gsIGZhbHNlKTsKKwl3aGlsZSAoKHAgPSBk c2hhc2hfc2VxX25leHQoJmhzdGF0KSkgIT0gTlVMTCkKKwl7CisJCVBnU3RhdF9TdGF0UGxhbkVu dHJ5ICpzdGF0ZW50OworCQlEYXR1bQkJdmFsdWVzW1BHX1NUQVRfUExBTlNfQ09MU107CisJCWJv b2wJCW51bGxzW1BHX1NUQVRfUExBTlNfQ09MU107CisJCWludAkJCWkgPSAwOworCisJCWlmIChw LT5kcm9wcGVkIHx8IHAtPmtleS5raW5kICE9IFBHU1RBVF9LSU5EX1BMQU5TKQorCQkJY29udGlu dWU7CisKKwkJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOworCQltZW1zZXQobnVs bHMsIDAsIHNpemVvZihudWxscykpOworCisJCXN0YXRlbnQgPSBwZ3N0YXRfZmV0Y2hfZW50cnko cC0+a2V5LmtpbmQsIHAtPmtleS5kYm9pZCwgcC0+a2V5Lm9iamlkKTsKKworCQl2YWx1ZXNbaSsr XSA9IE9iamVjdElkR2V0RGF0dW0oc3RhdGVudC0+aW5mby51c2VyaWQpOworCQl2YWx1ZXNbaSsr XSA9IE9iamVjdElkR2V0RGF0dW0ocC0+a2V5LmRib2lkKTsKKwkJaWYgKGlzX2FsbG93ZWRfcm9s ZSB8fCBzdGF0ZW50LT5pbmZvLnVzZXJpZCA9PSB1c2VyaWQpCisJCXsKKwkJCWludDY0IHF1ZXJ5 aWQgPSBzdGF0ZW50LT5pbmZvLnF1ZXJ5aWQ7CisJCQlpbnQ2NCBwbGFuaWQgPSBzdGF0ZW50LT5p bmZvLnBsYW5pZDsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bUZhc3QocXVlcnlpZCk7 CisJCQl2YWx1ZXNbaSsrXSA9IEludDY0R2V0RGF0dW1GYXN0KHBsYW5pZCk7CisJCX0KKwkJZWxz ZQorCQl7CisJCQludWxsc1tpKytdID0gdHJ1ZTsKKwkJCW51bGxzW2krK10gPSB0cnVlOworCQl9 CisJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bUZhc3Qoc3RhdGVudC0+ZXhlY19jb3VudCk7 CisJCXZhbHVlc1tpKytdID0gRmxvYXQ4R2V0RGF0dW1GYXN0KHN0YXRlbnQtPmV4ZWNfdGltZSk7 CisKKwkJaWYgKHNob3dwbGFuICYmIChpc19hbGxvd2VkX3JvbGUgfHwgc3RhdGVudC0+aW5mby51 c2VyaWQgPT0gdXNlcmlkKSkKKwkJeworCQkJY2hhciAqcHN0ciA9IERzYVBvaW50ZXJJc1ZhbGlk KHN0YXRlbnQtPmluZm8ucGxhbl90ZXh0KSA/IGRzYV9nZXRfYWRkcmVzcyhwZ1N0YXRMb2NhbC5k c2EsIHN0YXRlbnQtPmluZm8ucGxhbl90ZXh0KSA6IE5VTEw7CisKKwkJCWlmIChwc3RyKQorCQkJ eworCQkJCWNoYXIgKmVuYyA9IHBnX2FueV90b19zZXJ2ZXIocHN0ciwgc3RybGVuKHBzdHIpLCBz dGF0ZW50LT5pbmZvLnBsYW5fZW5jb2RpbmcpOworCQkJCXZhbHVlc1tpKytdID0gQ1N0cmluZ0dl dFRleHREYXR1bShlbmMpOworCisJCQkJaWYgKGVuYyAhPSBwc3RyKQorCQkJCQlwZnJlZShlbmMp OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCW51bGxzW2krK10gPSB0cnVlOworCQkJfQorCQl9 CisJCWVsc2UgaWYgKHNob3dwbGFuKQorCQl7CisJCQl2YWx1ZXNbaSsrXSA9IENTdHJpbmdHZXRU ZXh0RGF0dW0oIjxpbnN1ZmZpY2llbnQgcHJpdmlsZWdlPiIpOworCQl9CisJCWVsc2UKKwkJewor CQkJbnVsbHNbaSsrXSA9IHRydWU7CisJCX0KKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZv LT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CisJfQorCWRzaGFz aF9zZXFfdGVybSgmaHN0YXQpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfc3RhdF9wbGFucy9wZ19zdGF0X3BsYW5zLmNvbmYgYi9jb250cmliL3BnX3N0 YXRfcGxhbnMvcGdfc3RhdF9wbGFucy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLmJmZTU3MWQ1NDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXRf cGxhbnMvcGdfc3RhdF9wbGFucy5jb25mCkBAIC0wLDAgKzEsMyBAQAorc2hhcmVkX3ByZWxvYWRf bGlicmFyaWVzID0gJ3BnX3N0YXRfcGxhbnMnCitjb21wdXRlX3BsYW5faWQgPSBvbgorY29tcHV0 ZV9xdWVyeV9pZCA9IG9uCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfcGxhbnMvcGdfc3Rh dF9wbGFucy5jb250cm9sIGIvY29udHJpYi9wZ19zdGF0X3BsYW5zL3BnX3N0YXRfcGxhbnMuY29u dHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40ZGIzYTQ3MjM5Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGF0X3BsYW5zL3BnX3N0YXRfcGxhbnMuY29u dHJvbApAQCAtMCwwICsxLDUgQEAKKyMgcGdfc3RhdF9wbGFucyBleHRlbnNpb24KK2NvbW1lbnQg PSAndHJhY2sgcGVyLXBsYW4gY2FsbCBjb3VudHMsIGV4ZWN1dGlvbiB0aW1lcyBhbmQgRVhQTEFJ TiB0ZXh0cycKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxp YmRpci9wZ19zdGF0X3BsYW5zJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3N0YXRfcGxhbnMvc3FsL2NsZWFudXAuc3FsIGIvY29udHJpYi9wZ19zdGF0X3BsYW5z L3NxbC9jbGVhbnVwLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41 MTU2NTYxN2NlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGF0X3BsYW5zL3NxbC9j bGVhbnVwLnNxbApAQCAtMCwwICsxIEBACitEUk9QIEVYVEVOU0lPTiBwZ19zdGF0X3BsYW5zOwpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3BsYW5zL3NxbC9wcml2aWxlZ2VzLnNxbCBiL2Nv bnRyaWIvcGdfc3RhdF9wbGFucy9zcWwvcHJpdmlsZWdlcy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uYWFhZDcyYTY1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfc3RhdF9wbGFucy9zcWwvcHJpdmlsZWdlcy5zcWwKQEAgLTAsMCArMSw1OSBAQAorLS0K Ky0tIE9ubHkgc3VwZXJ1c2VycyBhbmQgcm9sZXMgd2l0aCBwcml2aWxlZ2VzIG9mIHRoZSBwZ19y ZWFkX2FsbF9zdGF0cyByb2xlCistLSBhcmUgYWxsb3dlZCB0byBzZWUgdGhlIHBsYW4gdGV4dCwg cXVlcnlpZCBhbmQgcGxhbmlkIG9mIHF1ZXJpZXMgZXhlY3V0ZWQgYnkKKy0tIG90aGVyIHVzZXJz LiBPdGhlciB1c2VycyBjYW4gc2VlIHRoZSBzdGF0aXN0aWNzLgorLS0KKworQ1JFQVRFIFJPTEUg cmVncmVzc19zdGF0c19zdXBlcnVzZXIgU1VQRVJVU0VSOworQ1JFQVRFIFJPTEUgcmVncmVzc19z dGF0c191c2VyMTsKK0NSRUFURSBST0xFIHJlZ3Jlc3Nfc3RhdHNfdXNlcjI7CitHUkFOVCBwZ19y ZWFkX2FsbF9zdGF0cyBUTyByZWdyZXNzX3N0YXRzX3VzZXIyOworCitTRVQgUk9MRSByZWdyZXNz X3N0YXRzX3N1cGVydXNlcjsKK1NFTEVDVCBwZ19zdGF0X3BsYW5zX3Jlc2V0KCkgSVMgTk9UIE5V TEwgQVMgdDsKK1NFTEVDVCAxIEFTICJPTkUiOworCitTRVQgUk9MRSByZWdyZXNzX3N0YXRzX3Vz ZXIxOworU0VMRUNUIDErMSBBUyAiVFdPIjsKKworLS0KKy0tIEEgc3VwZXJ1c2VyIGNhbiByZWFk IGFsbCBjb2x1bW5zIG9mIHF1ZXJpZXMgZXhlY3V0ZWQgYnkgb3RoZXJzLAorLS0gaW5jbHVkaW5n IHBsYW4gdGV4dCwgcXVlcnlpZCBhbmQgcGxhbmlkLgorLS0KKworU0VUIFJPTEUgcmVncmVzc19z dGF0c19zdXBlcnVzZXI7CitTRUxFQ1Qgci5yb2xuYW1lLCBzcy5xdWVyeWlkIDw+IDAgQVMgcXVl cnlpZF9ib29sLCBzcy5wbGFuaWQgPD4gMCBBUyBwbGFuaWRfYm9vbCwgc3MucGxhbiwgc3MuY2Fs bHMKKyAgRlJPTSBwZ19zdGF0X3BsYW5zIHNzIEpPSU4gcGdfcm9sZXMgciBPTiBzcy51c2VyaWQg PSByLm9pZAorICBPUkRFUiBCWSByLnJvbG5hbWUsIHNzLnBsYW4gQ09MTEFURSAiQyIsIHNzLmNh bGxzOworCistLQorLS0gcmVncmVzc19zdGF0c191c2VyMSBoYXMgbm8gcHJpdmlsZWdlcyB0byBy ZWFkIHRoZSBwbGFuIHRleHQsIHF1ZXJ5aWQKKy0tIG9yIHBsYW5pZCBvZiBxdWVyaWVzIGV4ZWN1 dGVkIGJ5IG90aGVycyBidXQgY2FuIHNlZSBzdGF0aXN0aWNzCistLSBsaWtlIGNhbGxzIGFuZCBy b3dzLgorLS0KKworU0VUIFJPTEUgcmVncmVzc19zdGF0c191c2VyMTsKK1NFTEVDVCByLnJvbG5h bWUsIHNzLnF1ZXJ5aWQgPD4gMCBBUyBxdWVyeWlkX2Jvb2wsIHNzLnBsYW5pZCA8PiAwIEFTIHBs YW5pZF9ib29sLCBzcy5wbGFuLCBzcy5jYWxscworICBGUk9NIHBnX3N0YXRfcGxhbnMgc3MgSk9J TiBwZ19yb2xlcyByIE9OIHNzLnVzZXJpZCA9IHIub2lkCisgIE9SREVSIEJZIHIucm9sbmFtZSwg c3MucGxhbiBDT0xMQVRFICJDIiwgc3MuY2FsbHM7CisKKy0tCistLSByZWdyZXNzX3N0YXRzX3Vz ZXIyLCB3aXRoIHBnX3JlYWRfYWxsX3N0YXRzIHJvbGUgcHJpdmlsZWdlcywgY2FuCistLSByZWFk IGFsbCBjb2x1bW5zLCBpbmNsdWRpbmcgcGxhbiB0ZXh0LCBxdWVyeWlkIGFuZCBwbGFuaWQsIG9m IHF1ZXJpZXMKKy0tIGV4ZWN1dGVkIGJ5IG90aGVycy4KKy0tCisKK1NFVCBST0xFIHJlZ3Jlc3Nf c3RhdHNfdXNlcjI7CitTRUxFQ1Qgci5yb2xuYW1lLCBzcy5xdWVyeWlkIDw+IDAgQVMgcXVlcnlp ZF9ib29sLCBzcy5wbGFuaWQgPD4gMCBBUyBwbGFuaWRfYm9vbCwgc3MucGxhbiwgc3MuY2FsbHMK KyAgRlJPTSBwZ19zdGF0X3BsYW5zIHNzIEpPSU4gcGdfcm9sZXMgciBPTiBzcy51c2VyaWQgPSBy Lm9pZAorICBPUkRFUiBCWSByLnJvbG5hbWUsIHNzLnBsYW4gQ09MTEFURSAiQyIsIHNzLmNhbGxz OworCistLQorLS0gY2xlYW51cAorLS0KKworUkVTRVQgUk9MRTsKK0RST1AgUk9MRSByZWdyZXNz X3N0YXRzX3N1cGVydXNlcjsKK0RST1AgUk9MRSByZWdyZXNzX3N0YXRzX3VzZXIxOworRFJPUCBS T0xFIHJlZ3Jlc3Nfc3RhdHNfdXNlcjI7CitTRUxFQ1QgcGdfc3RhdF9wbGFuc19yZXNldCgpIElT IE5PVCBOVUxMIEFTIHQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfcGxhbnMvc3FsL3Nl bGVjdC5zcWwgYi9jb250cmliL3BnX3N0YXRfcGxhbnMvc3FsL3NlbGVjdC5zcWwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZjBlODAzYWQ3MAotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfc3RhdF9wbGFucy9zcWwvc2VsZWN0LnNxbApAQCAtMCwwICsxLDY3IEBA CistLQorLS0gU0VMRUNUIHN0YXRlbWVudHMKKy0tCisKK0NSRUFURSBFWFRFTlNJT04gcGdfc3Rh dF9wbGFuczsKK1NFTEVDVCBwZ19zdGF0X3BsYW5zX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsK KworLS0KKy0tIHNpbXBsZSBzdGF0ZW1lbnRzCistLQorCitTRUxFQ1QgMSBGUk9NIHBnX2NsYXNz IExJTUlUIDE7CisKK1NFTEVDVCAxIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICdwZ19j bGFzcyc7CisKK1NFVCBlbmFibGVfaW5kZXhzY2FuID0gb2ZmOworU0VMRUNUIDEgRlJPTSBwZ19j bGFzcyBXSEVSRSByZWxuYW1lID0gJ3BnX2NsYXNzJzsKK1NFVCBlbmFibGVfaW5kZXhzY2FuID0g b247CisKK1NFTEVDVCBwbGFuLCBjYWxscyBGUk9NIHBnX3N0YXRfcGxhbnMgT1JERVIgQlkgcGxh biBDT0xMQVRFICJDIjsKK1NFTEVDVCBwZ19zdGF0X3BsYW5zX3Jlc2V0KCkgSVMgTk9UIE5VTEwg QVMgdDsKKworLS0KKy0tIHN1YnBsYW5zIGFuZCBDVEVzCistLQorCitXSVRIIHggQVMgTUFURVJJ QUxJWkVEIChTRUxFQ1QgMSkKK1NFTEVDVCAqIEZST00geDsKKworU0VMRUNUIGEuYXR0bmFtZSwK KyAgIChTRUxFQ1QgcGdfY2F0YWxvZy5wZ19nZXRfZXhwcihkLmFkYmluLCBkLmFkcmVsaWQpCisg ICAgRlJPTSBwZ19jYXRhbG9nLnBnX2F0dHJkZWYgZAorICAgIFdIRVJFIGQuYWRyZWxpZCA9IGEu YXR0cmVsaWQgQU5EIGQuYWRudW0gPSBhLmF0dG51bSBBTkQgYS5hdHRoYXNkZWYpCisgRlJPTSBw Z19jYXRhbG9nLnBnX2F0dHJpYnV0ZSBhCisgV0hFUkUgYS5hdHRyZWxpZCA9ICdwZ19jbGFzcyc6 OnJlZ2NsYXNzCisgT1JERVIgQlkgYXR0bnVtIExJTUlUIDE7CisKK1NFTEVDVCBwbGFuLCBjYWxs cyBGUk9NIHBnX3N0YXRfcGxhbnMgT1JERVIgQlkgcGxhbiBDT0xMQVRFICJDIjsKK1NFTEVDVCBw Z19zdGF0X3BsYW5zX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKKworLS0KKy0tIHBhcnRpdG9u aW5nCistLQorCitjcmVhdGUgdGFibGUgbHAgKGEgY2hhcikgcGFydGl0aW9uIGJ5IGxpc3QgKGEp OworY3JlYXRlIHRhYmxlIGxwX2RlZmF1bHQgcGFydGl0aW9uIG9mIGxwIGRlZmF1bHQ7CitjcmVh dGUgdGFibGUgbHBfZWYgcGFydGl0aW9uIG9mIGxwIGZvciB2YWx1ZXMgaW4gKCdlJywgJ2YnKTsK K2NyZWF0ZSB0YWJsZSBscF9hZCBwYXJ0aXRpb24gb2YgbHAgZm9yIHZhbHVlcyBpbiAoJ2EnLCAn ZCcpOworY3JlYXRlIHRhYmxlIGxwX2JjIHBhcnRpdGlvbiBvZiBscCBmb3IgdmFsdWVzIGluICgn YicsICdjJyk7CitjcmVhdGUgdGFibGUgbHBfZyBwYXJ0aXRpb24gb2YgbHAgZm9yIHZhbHVlcyBp biAoJ2cnKTsKK2NyZWF0ZSB0YWJsZSBscF9udWxsIHBhcnRpdGlvbiBvZiBscCBmb3IgdmFsdWVz IGluIChudWxsKTsKKworc2VsZWN0ICogZnJvbSBscDsKK3NlbGVjdCAqIGZyb20gbHAgd2hlcmUg YSA+ICdhJyBhbmQgYSA8ICdkJzsKK3NlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSA+ICdhJyBhbmQg YSA8PSAnZCc7CitzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgPSAnYSc7CitzZWxlY3QgKiBmcm9t IGxwIHdoZXJlICdhJyA9IGE7CS8qIGNvbW11dGVkICovCitzZWxlY3QgKiBmcm9tIGxwIHdoZXJl IGEgaXMgbm90IG51bGw7CitzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgaXMgbnVsbDsKK3NlbGVj dCAqIGZyb20gbHAgd2hlcmUgYSA9ICdhJyBvciBhID0gJ2MnOworc2VsZWN0ICogZnJvbSBscCB3 aGVyZSBhIGlzIG5vdCBudWxsIGFuZCAoYSA9ICdhJyBvciBhID0gJ2MnKTsKK3NlbGVjdCAqIGZy b20gbHAgd2hlcmUgYSA8PiAnZyc7CitzZWxlY3QgKiBmcm9tIGxwIHdoZXJlIGEgPD4gJ2EnIGFu ZCBhIDw+ICdkJzsKK3NlbGVjdCAqIGZyb20gbHAgd2hlcmUgYSBub3QgaW4gKCdhJywgJ2QnKTsK KworU0VMRUNUIHBsYW4sIGNhbGxzIEZST00gcGdfc3RhdF9wbGFucyBPUkRFUiBCWSBwbGFuIENP TExBVEUgIkMiOworU0VMRUNUIHBnX3N0YXRfcGxhbnNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0 OwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbCBiL2RvYy9zcmMvc2dtbC9j b250cmliLnNnbWwKaW5kZXggN2MzODE5NDlhNS4uNGE1YTAyYzcwNCAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2NvbnRyaWIuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCkBA IC0xNTcsNiArMTU3LDcgQEAgQ1JFQVRFIEVYVEVOU0lPTiA8cmVwbGFjZWFibGU+ZXh0ZW5zaW9u X25hbWU8L3JlcGxhY2VhYmxlPjsKICAmcGdsb2dpY2FsaW5zcGVjdDsKICAmcGdwcmV3YXJtOwog ICZwZ3Jvd2xvY2tzOworICZwZ3N0YXRwbGFuczsKICAmcGdzdGF0c3RhdGVtZW50czsKICAmcGdz dGF0dHVwbGU7CiAgJnBnc3VyZ2VyeTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9maWxlbGlz dC5zZ21sIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKaW5kZXggNjZlNmRjY2Q0Yy4uYjBh ZmIzM2NlMiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKQEAgLTE0Niw2ICsxNDYsNyBAQAogPCFFTlRJVFkgcGds b2dpY2FsaW5zcGVjdCAgU1lTVEVNICJwZ2xvZ2ljYWxpbnNwZWN0LnNnbWwiPgogPCFFTlRJVFkg cGdwcmV3YXJtICAgICAgIFNZU1RFTSAicGdwcmV3YXJtLnNnbWwiPgogPCFFTlRJVFkgcGdyb3ds b2NrcyAgICAgIFNZU1RFTSAicGdyb3dsb2Nrcy5zZ21sIj4KKzwhRU5USVRZIHBnc3RhdHBsYW5z ICAgICBTWVNURU0gInBnc3RhdHBsYW5zLnNnbWwiPgogPCFFTlRJVFkgcGdzdGF0c3RhdGVtZW50 cyBTWVNURU0gInBnc3RhdHN0YXRlbWVudHMuc2dtbCI+CiA8IUVOVElUWSBwZ3N0YXR0dXBsZSAg ICAgU1lTVEVNICJwZ3N0YXR0dXBsZS5zZ21sIj4KIDwhRU5USVRZIHBnc3VyZ2VyeSAgICAgICBT WVNURU0gInBnc3VyZ2VyeS5zZ21sIj4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ3N0YXRw bGFucy5zZ21sIGIvZG9jL3NyYy9zZ21sL3Bnc3RhdHBsYW5zLnNnbWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTAwY2U2YjNhYQotLS0gL2Rldi9udWxsCisrKyBiL2Rv Yy9zcmMvc2dtbC9wZ3N0YXRwbGFucy5zZ21sCkBAIC0wLDAgKzEsNDEzIEBACis8IS0tIGRvYy9z cmMvc2dtbC9wZ3N0YXRwbGFucy5zZ21sIC0tPgorCis8c2VjdDEgaWQ9InBnc3RhdHBsYW5zIiB4 cmVmbGFiZWw9InBnX3N0YXRfcGxhbnMiPgorIDx0aXRsZT5wZ19zdGF0X3BsYW5zICZtZGFzaDsg dHJhY2sgcGVyLXBsYW4gY2FsbCBjb3VudHMsIGV4ZWN1dGlvbiB0aW1lcyBhbmQgRVhQTEFJTiB0 ZXh0czwvdGl0bGU+CisKKyA8aW5kZXh0ZXJtIHpvbmU9InBnc3RhdHBsYW5zIj4KKyAgPHByaW1h cnk+cGdfc3RhdF9wbGFuczwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxwYXJhPgorICBU aGUgPGZpbGVuYW1lPnBnX3N0YXRfcGxhbnM8L2ZpbGVuYW1lPiBtb2R1bGUgcHJvdmlkZXMgYSBt ZWFucyBmb3IKKyAgdHJhY2tpbmcgcGVyLXBsYW4gc3RhdGlzdGljcyBhbmQgcGxhbiB0ZXh0cyBv ZiBhbGwgU1FMIHN0YXRlbWVudHMgZXhlY3V0ZWQgYnkKKyAgYSBzZXJ2ZXIuCisgPC9wYXJhPgor CisgPHBhcmE+CisgIFRoZSBtb2R1bGUgbXVzdCBiZSBsb2FkZWQgYnkgYWRkaW5nIDxsaXRlcmFs PnBnX3N0YXRfcGxhbnM8L2xpdGVyYWw+IHRvCisgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1zaGFyZWQt cHJlbG9hZC1saWJyYXJpZXMiLz4gaW4KKyAgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmls ZW5hbWU+LCBiZWNhdXNlIGl0IHJlcXVpcmVzIGFkZGl0aW9uYWwgc2hhcmVkIG1lbW9yeS4KKyAg VGhpcyBtZWFucyB0aGF0IGEgc2VydmVyIHJlc3RhcnQgaXMgbmVlZGVkIHRvIGFkZCBvciByZW1v dmUgdGhlIG1vZHVsZS4KKyAgSW4gYWRkaXRpb24sIHF1ZXJ5IGFuZCBwbGFuIGlkZW50aWZpZXIg Y2FsY3VsYXRpb24gbXVzdCBiZSBlbmFibGVkIGluIG9yZGVyIGZvciB0aGUKKyAgbW9kdWxlIHRv IGJlIGFjdGl2ZSBieSBzZXR0aW5nIGJvdGggPHhyZWYgbGlua2VuZD0iZ3VjLWNvbXB1dGUtcGxh bi1pZCIvPiB0byA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4KKyAgYW5kIDx4cmVmIGxpbmtlbmQ9Imd1 Yy1jb21wdXRlLXF1ZXJ5LWlkIi8+IHRvIDxsaXRlcmFsPmF1dG88L2xpdGVyYWw+IG9yIDxsaXRl cmFsPm9uPC9saXRlcmFsPi4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgIFdoZW4gPGZpbGVuYW1l PnBnX3N0YXRfcGxhbnM8L2ZpbGVuYW1lPiBpcyBhY3RpdmUsIGl0IHRyYWNrcworICAgc3RhdGlz dGljcyBhY3Jvc3MgYWxsIGRhdGFiYXNlcyBvZiB0aGUgc2VydmVyLiAgVG8gYWNjZXNzIGFuZCBt YW5pcHVsYXRlCisgICB0aGVzZSBzdGF0aXN0aWNzLCB0aGUgbW9kdWxlIHByb3ZpZGVzIHRoZSA8 c3RydWN0bmFtZT5wZ19zdGF0X3BsYW5zPC9zdHJ1Y3RuYW1lPgorICAgdmlldyBhbmQgdGhlIHV0 aWxpdHkgZnVuY3Rpb25zIDxmdW5jdGlvbj5wZ19zdGF0X3BsYW5zX3Jlc2V0PC9mdW5jdGlvbj4g YW5kCisgICA8ZnVuY3Rpb24+cGdfc3RhdF9wbGFuczwvZnVuY3Rpb24+LiAgVGhlc2UgYXJlIG5v dCBhdmFpbGFibGUgZ2xvYmFsbHkgYnV0CisgICBjYW4gYmUgZW5hYmxlZCBmb3IgYSBzcGVjaWZp YyBkYXRhYmFzZSB3aXRoCisgICA8Y29tbWFuZD5DUkVBVEUgRVhURU5TSU9OIHBnX3N0YXRfcGxh bnM8L2NvbW1hbmQ+LgorIDwvcGFyYT4KKworIDxzZWN0MiBpZD0icGdzdGF0cGxhbnMtcGctc3Rh dC1wbGFucyI+CisgIDx0aXRsZT5UaGUgPHN0cnVjdG5hbWU+cGdfc3RhdF9wbGFuczwvc3RydWN0 bmFtZT4gVmlldzwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGUgc3RhdGlzdGljcyBnYXRoZXJl ZCBieSB0aGUgbW9kdWxlIGFyZSBtYWRlIGF2YWlsYWJsZSB2aWEgYQorICAgdmlldyBuYW1lZCA8 c3RydWN0bmFtZT5wZ19zdGF0X3BsYW5zPC9zdHJ1Y3RuYW1lPi4gIFRoaXMgdmlldworICAgY29u dGFpbnMgb25lIHJvdyBmb3IgZWFjaCBkaXN0aW5jdCBjb21iaW5hdGlvbiBvZiBkYXRhYmFzZSBJ RCwgdXNlcgorICAgSUQsIHF1ZXJ5IElEIGFuZCBwbGFuIElEICh1cCB0byB0aGUgbWF4aW11bSBu dW1iZXIgb2YgZGlzdGluY3QgcGxhbnMKKyAgIHRoYXQgdGhlIG1vZHVsZSBjYW4gdHJhY2spLiBU aGUgY29sdW1ucyBvZiB0aGUgdmlldyBhcmUgc2hvd24gaW4KKyAgIDx4cmVmIGxpbmtlbmQ9InBn c3RhdHBsYW5zLWNvbHVtbnMiLz4uCisgIDwvcGFyYT4KKworICA8dGFibGUgaWQ9InBnc3RhdHBs YW5zLWNvbHVtbnMiPgorICAgPHRpdGxlPjxzdHJ1Y3RuYW1lPnBnX3N0YXRfcGxhbnM8L3N0cnVj dG5hbWU+IENvbHVtbnM8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIxIj4KKyAgICA8dGhlYWQ+ CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBh cmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIENvbHVtbiBUeXBlCisgICAgICA8 L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBEZXNjcmlwdGlvbgorICAgICAgPC9wYXJhPjwv ZW50cnk+CisgICAgIDwvcm93PgorICAgIDwvdGhlYWQ+CisKKyAgICA8dGJvZHk+CisgICAgIDxy b3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0i Y29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD51c2VyaWQ8L3N0cnVjdGZp ZWxkPiA8dHlwZT5vaWQ8L3R5cGU+CisgICAgICAgKHJlZmVyZW5jZXMgPGxpbmsgbGlua2VuZD0i Y2F0YWxvZy1wZy1hdXRoaWQiPjxzdHJ1Y3RuYW1lPnBnX2F1dGhpZDwvc3RydWN0bmFtZT48L2xp bms+LjxzdHJ1Y3RmaWVsZD5vaWQ8L3N0cnVjdGZpZWxkPikKKyAgICAgIDwvcGFyYT4KKyAgICAg IDxwYXJhPgorICAgICAgIE9JRCBvZiB1c2VyIHdobyBleGVjdXRlZCB0aGUgc3RhdGVtZW50Cisg ICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxl bnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5p dGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPmRiaWQ8L3N0cnVjdGZpZWxkPiA8dHlwZT5vaWQ8 L3R5cGU+CisgICAgICAgKHJlZmVyZW5jZXMgPGxpbmsgbGlua2VuZD0iY2F0YWxvZy1wZy1kYXRh YmFzZSI+PHN0cnVjdG5hbWU+cGdfZGF0YWJhc2U8L3N0cnVjdG5hbWU+PC9saW5rPi48c3RydWN0 ZmllbGQ+b2lkPC9zdHJ1Y3RmaWVsZD4pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAg ICAgICBPSUQgb2YgZGF0YWJhc2UgaW4gd2hpY2ggdGhlIHN0YXRlbWVudCB3YXMgZXhlY3V0ZWQK KyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAg PGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZp bml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+cXVlcnlpZDwvc3RydWN0ZmllbGQ+IDx0eXBl PmJpZ2ludDwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIEhhc2gg Y29kZSB0byBpZGVudGlmeSBpZGVudGljYWwgbm9ybWFsaXplZCBxdWVyaWVzLgorICAgICAgPC9w YXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9s ZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgor ICAgICAgIDxzdHJ1Y3RmaWVsZD5wbGFuaWQ8L3N0cnVjdGZpZWxkPiA8dHlwZT5iaWdpbnQ8L3R5 cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBIYXNoIGNvZGUgdG8gaWRl bnRpZnkgaWRlbnRpY2FsIHBsYW4gc2hhcGVzLgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAg IDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9l bnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVs ZD5wbGFuPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+dGV4dDwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAg ICAgIDxwYXJhPgorICAgICAgIFBsYW4gdGV4dCBvZiBhIHJlcHJlc2VudGF0aXZlIHBsYW4uIFRo aXMgaXMgc2ltaWxhciB0byB0aGUgb3V0cHV0IG9mCisgICAgICAgPGxpdGVyYWw+RVhQTEFJTiAo Q09TVFMgT0ZGKTwvbGl0ZXJhbD4uIE5vdGUgdGhlIHBsYW4gdGV4dCB3aWxsIGNvbnRhaW4gY29u c3RhbnQKKyAgICAgICB2YWx1ZXMgb2YgdGhlIGZpcnN0IHBsYW4gcmVjb3JkZWQsIGJ1dCBzdWJz ZXF1ZW50IGV4ZWN1dGlvbnMgb2YgdGhlCisgICAgICAgc2FtZSBwbGFuIGhhc2ggY29kZSAoPHN0 cnVjdGZpZWxkPnBsYW5pZDwvc3RydWN0ZmllbGQ+KSB3aXRoIGRpZmZlcmVudAorICAgICAgIGNv bnN0YW50IHZhbHVlcyB3aWxsIGJlIHRyYWNrZWQgdW5kZXIgdGhlIHNhbWUgZW50cnkuCisgICAg ICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRy eSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlv biI+CisgICAgICAgPHN0cnVjdGZpZWxkPmNhbGxzPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+YmlnaW50 PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgTnVtYmVyIG9mIHRp bWVzIHRoZSBwbGFuIHdhcyBleGVjdXRlZAorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwv cm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRy eSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD50 b3RhbF9leGVjX3RpbWU8L3N0cnVjdGZpZWxkPiA8dHlwZT5kb3VibGUgcHJlY2lzaW9uPC90eXBl PgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVG90YWwgdGltZSBzcGVudCBl eGVjdXRpbmcgdGhlIHBsYW4sIGluIG1pbGxpc2Vjb25kcworICAgICAgPC9wYXJhPjwvZW50cnk+ CisgICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICA8L3Rncm91cD4KKyAgPC90YWJsZT4KKwor ICA8cGFyYT4KKyAgIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IHN1cGVydXNlcnMgYW5kIHJv bGVzIHdpdGggcHJpdmlsZWdlcyBvZiB0aGUKKyAgIDxsaXRlcmFsPnBnX3JlYWRfYWxsX3N0YXRz PC9saXRlcmFsPiByb2xlIGFyZSBhbGxvd2VkIHRvIHNlZSB0aGUgcGxhbiB0ZXh0LAorICAgPHN0 cnVjdGZpZWxkPnF1ZXJ5aWQ8L3N0cnVjdGZpZWxkPiBhbmQgPHN0cnVjdGZpZWxkPnBsYW5pZDwv c3RydWN0ZmllbGQ+CisgICBvZiBxdWVyaWVzIGV4ZWN1dGVkIGJ5IG90aGVyIHVzZXJzLiBPdGhl ciB1c2VycyBjYW4gc2VlIHRoZSBzdGF0aXN0aWNzLAorICAgaG93ZXZlciwgaWYgdGhlIHZpZXcg aGFzIGJlZW4gaW5zdGFsbGVkIGluIHRoZWlyIGRhdGFiYXNlLgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBQbGFubmFibGUgcXVlcmllcyAodGhhdCBpcywgPGNvbW1hbmQ+U0VMRUNUPC9jb21t YW5kPiwgPGNvbW1hbmQ+SU5TRVJUPC9jb21tYW5kPiwKKyAgIDxjb21tYW5kPlVQREFURTwvY29t bWFuZD4sIDxjb21tYW5kPkRFTEVURTwvY29tbWFuZD4sIGFuZCA8Y29tbWFuZD5NRVJHRTwvY29t bWFuZD4pCisgICBhcmUgY29tYmluZWQgaW50byBhIHNpbmdsZSA8c3RydWN0bmFtZT5wZ19zdGF0 X3BsYW5zPC9zdHJ1Y3RuYW1lPiBlbnRyeSB3aGVuZXZlcgorICAgdGhleSBoYXZlIGlkZW50aWNh bCBwbGFuIHN0cnVjdHVyZXMgYWNjb3JkaW5nIHRvIGFuIGludGVybmFsIGhhc2ggY2FsY3VsYXRp b24uCisgICBUeXBpY2FsbHksIHR3byBwbGFucyB3aWxsIGJlIGNvbnNpZGVyZWQgdGhlIHNhbWUg Zm9yIHRoaXMgcHVycG9zZSBpZiB0aGV5IGhhdmUKKyAgIHRoZSBzYW1lIDxsaXRlcmFsPkVYUExB SU4gKENPU1RTIE9GRik8L2xpdGVyYWw+IG91dHB1dCBhbmQgYXJlIHNlbWFudGljYWxseQorICAg ZXF1aXZhbGVudCBleGNlcHQgZm9yIHRoZSB2YWx1ZXMgb2YgbGl0ZXJhbCBjb25zdGFudHMgYXBw ZWFyaW5nIGluIHRoZSBxdWVyeSBwbGFuLgorICA8L3BhcmE+CisgIAorICA8cGFyYT4KKyAgIE5v dGUgdGhhdCBxdWVyaWVzIHRoYXQgaGF2ZSBub3QgZmluaXNoZWQgZXhlY3V0aW5nIHlldCB3aWxs IHNob3cgaW4KKyAgIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfcGxhbnM8L3N0cnVjdG5hbWU+IHdpdGgg dGhlaXIgcGxhbiB0ZXh0LCBidXQgd2l0aG91dAorICAgdGhlIDxzdHJ1Y3RuYW1lPmNhbGxzPC9z dHJ1Y3RuYW1lPiBmaWVsZCBiZWluZyBpbmNyZW1lbnRlZC4gVGhpcyBjYW4gYmUKKyAgIHVzZWQg dG8gaWRlbnRpZnkgdGhlIHF1ZXJ5IHBsYW4gZm9yIGEgY3VycmVudGx5IHJ1bm5pbmcgc3RhdGVt ZW50IGJ5IGpvaW5pbmcKKyAgIDxsaW5rIGxpbmtlbmQ9Im1vbml0b3JpbmctcGctc3RhdC1hY3Rp dml0eS12aWV3Ij5wZ19zdGF0X2FjdGl2aXR5PC9saW5rPgorICAgd2l0aCA8c3RydWN0bmFtZT5w Z19zdGF0X3BsYW5zPC9zdHJ1Y3RuYW1lPiwgc2VlIGV4YW1wbGUgdXNhZ2UgaW4KKyAgIDx4cmVm IGxpbmtlbmQ9InBnc3RhdHBsYW5zLXNhbXBsZS1vdXRwdXQiLz4uCisgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIENvbnN1bWVycyBvZiA8c3RydWN0bmFtZT5wZ19zdGF0X3BsYW5zPC9zdHJ1Y3Ru YW1lPiBzaG91bGQgdXNlCisgICA8c3RydWN0ZmllbGQ+cGxhbmlkPC9zdHJ1Y3RmaWVsZD4gaW4g Y29tYmluYXRpb24gd2l0aAorICAgPHN0cnVjdGZpZWxkPnF1ZXJ5aWQ8L3N0cnVjdGZpZWxkPiwg PHN0cnVjdGZpZWxkPmRiaWQ8L3N0cnVjdGZpZWxkPgorICAgYW5kIDxzdHJ1Y3RmaWVsZD51c2Vy aWQ8L3N0cnVjdGZpZWxkPiBhcyBhIHN0YWJsZSBhbmQgcmVsaWFibGUgaWRlbnRpZmllcgorICAg Zm9yIGVhY2ggZW50cnksIGluc3RlYWQgb2YgdXNpbmcgaXRzIHBsYW4gdGV4dC4gSG93ZXZlciwg aXQgaXMgaW1wb3J0YW50CisgICB0byB1bmRlcnN0YW5kIHRoYXQgdGhlcmUgYXJlIG9ubHkgbGlt aXRlZCBndWFyYW50ZWVzIGFyb3VuZCB0aGUgc3RhYmlsaXR5CisgICBvZiB0aGUgPHN0cnVjdGZp ZWxkPnBsYW5pZDwvc3RydWN0ZmllbGQ+IGhhc2ggdmFsdWUuICBTaW5jZSB0aGUgaWRlbnRpZmll cgorICAgaXMgZGVyaXZlZCBmcm9tIHRoZSBwbGFuIHRyZWUsIGl0cyB2YWx1ZSBpcyBhIGZ1bmN0 aW9uIG9mLCBhbW9uZyBvdGhlcgorICAgdGhpbmdzLCB0aGUgaW50ZXJuYWwgb2JqZWN0IGlkZW50 aWZpZXJzIGFwcGVhcmluZyBpbiB0aGlzIHJlcHJlc2VudGF0aW9uLgorICAgVGhpcyBoYXMgc29t ZSBjb3VudGVyaW50dWl0aXZlIGltcGxpY2F0aW9ucy4gIEZvciBleGFtcGxlLAorICAgPGZpbGVu YW1lPnBnX3N0YXRfcGxhbnM8L2ZpbGVuYW1lPiB3aWxsIGNvbnNpZGVyIHR3byBhcHBhcmVudGx5 LWlkZW50aWNhbAorICAgcGxhbnMgdG8gYmUgZGlzdGluY3QsIGlmIHRoZXkgcmVmZXJlbmNlIGEg dGFibGUgdGhhdCB3YXMgZHJvcHBlZAorICAgYW5kIHJlY3JlYXRlZCBiZXR3ZWVuIHRoZSBjcmVh dGlvbiBvZiB0aGUgdHdvIHBsYW5zLgorICAgVGhlIGhhc2hpbmcgcHJvY2VzcyBpcyBhbHNvIHNl bnNpdGl2ZSB0byBkaWZmZXJlbmNlcyBpbgorICAgbWFjaGluZSBhcmNoaXRlY3R1cmUgYW5kIG90 aGVyIGZhY2V0cyBvZiB0aGUgcGxhdGZvcm0uCisgICBGdXJ0aGVybW9yZSwgaXQgaXMgbm90IHNh ZmUgdG8gYXNzdW1lIHRoYXQgPHN0cnVjdGZpZWxkPnBsYW5pZDwvc3RydWN0ZmllbGQ+CisgICB3 aWxsIGJlIHN0YWJsZSBhY3Jvc3MgbWFqb3IgdmVyc2lvbnMgb2YgPHByb2R1Y3RuYW1lPlBvc3Rn cmVTUUw8L3Byb2R1Y3RuYW1lPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVHdvIHNlcnZl cnMgcGFydGljaXBhdGluZyBpbiByZXBsaWNhdGlvbiBiYXNlZCBvbiBwaHlzaWNhbCBXQUwgcmVw bGF5IGNhbgorICAgYmUgZXhwZWN0ZWQgdG8gaGF2ZSBpZGVudGljYWwgPHN0cnVjdGZpZWxkPnBs YW5pZDwvc3RydWN0ZmllbGQ+IHZhbHVlcyBmb3IKKyAgIHRoZSBzYW1lIHBsYW4uICBIb3dldmVy LCBsb2dpY2FsIHJlcGxpY2F0aW9uIHNjaGVtZXMgZG8gbm90IHByb21pc2UgdG8KKyAgIGtlZXAg cmVwbGljYXMgaWRlbnRpY2FsIGluIGFsbCByZWxldmFudCBkZXRhaWxzLCBzbworICAgPHN0cnVj dGZpZWxkPnBsYW5pZDwvc3RydWN0ZmllbGQ+IHdpbGwgbm90IGJlIGEgdXNlZnVsIGlkZW50aWZp ZXIgZm9yCisgICBhY2N1bXVsYXRpbmcgY29zdHMgYWNyb3NzIGEgc2V0IG9mIGxvZ2ljYWwgcmVw bGljYXMuCisgICBJZiBpbiBkb3VidCwgZGlyZWN0IHRlc3RpbmcgaXMgcmVjb21tZW5kZWQuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFBsYW4gdGV4dHMgYXJlIHN0b3JlZCBpbiBzaGFyZWQg bWVtb3J5LCBhbmQgbGltaXRlZCBpbiBsZW5ndGguIFRvIGluY3JlYXNlCisgICB0aGUgbWF4aW11 bSBsZW5ndGggb2Ygc3RvcmVkIHBsYW4gdGV4dHMgeW91IGNhbiBpbmNyZWFzZQorICAgPHZhcm5h bWU+cGdfc3RhdF9wbGFucy5tYXhfc2l6ZTwvdmFybmFtZT4uIFRoaXMgdmFsdWUgY2FuIGJlIGNo YW5nZWQgZm9yCisgICBhbiBpbmRpdmlkdWFsIGNvbm5lY3Rpb24sIG9yIHNldCBhcyBhIHNlcnZl ci13aWRlIHNldHRpbmcuCisgIDwvcGFyYT4KKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3N0 YXRwbGFucy1mdW5jcyI+CisgIDx0aXRsZT5GdW5jdGlvbnM8L3RpdGxlPgorCisgIDx2YXJpYWJs ZWxpc3Q+CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdf c3RhdF9wbGFuc19yZXNldCgpIHJldHVybnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRl cm0+CisgICAgICA8cHJpbWFyeT5wZ19zdGF0X3BsYW5zX3Jlc2V0PC9wcmltYXJ5PgorICAgICA8 L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgor ICAgICAgPGZ1bmN0aW9uPnBnX3N0YXRfcGxhbnNfcmVzZXQ8L2Z1bmN0aW9uPiBkaXNjYXJkcyBz dGF0aXN0aWNzIGFuZCBwbGFuIHRleHRzCisgICAgICBnYXRoZXJlZCBzbyBmYXIgYnkgPGZpbGVu YW1lPnBnX3N0YXRfcGxhbnM8L2ZpbGVuYW1lPi4KKyAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgZnVu Y3Rpb24gY2FuIG9ubHkgYmUgZXhlY3V0ZWQgYnkgc3VwZXJ1c2Vycy4KKyAgICAgIEFjY2VzcyBt YXkgYmUgZ3JhbnRlZCB0byBvdGhlcnMgdXNpbmcgPGNvbW1hbmQ+R1JBTlQ8L2NvbW1hbmQ+Lgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8 dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfc3RhdF9wbGFucyhz aG93cGxhbiBib29sZWFuKSByZXR1cm5zIHNldG9mIHJlY29yZDwvZnVuY3Rpb24+CisgICAgIDxp bmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19zdGF0X3BsYW5zPC9wcmltYXJ5PgorICAgICAg PHNlY29uZGFyeT5mdW5jdGlvbjwvc2Vjb25kYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8 L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGhlIDxzdHJ1Y3Ru YW1lPnBnX3N0YXRfcGxhbnM8L3N0cnVjdG5hbWU+IHZpZXcgaXMgZGVmaW5lZCBpbgorICAgICAg dGVybXMgb2YgYSBmdW5jdGlvbiBhbHNvIG5hbWVkIDxmdW5jdGlvbj5wZ19zdGF0X3BsYW5zPC9m dW5jdGlvbj4uCisgICAgICBJdCBpcyBwb3NzaWJsZSBmb3IgY2xpZW50cyB0byBjYWxsCisgICAg ICB0aGUgPGZ1bmN0aW9uPnBnX3N0YXRfcGxhbnM8L2Z1bmN0aW9uPiBmdW5jdGlvbiBkaXJlY3Rs eSwgYW5kIGJ5CisgICAgICBzcGVjaWZ5aW5nIDxsaXRlcmFsPnNob3dwbGFuIDo9IGZhbHNlPC9s aXRlcmFsPiBoYXZlIHBsYW4gdGV4dHMgYmUKKyAgICAgIG9taXR0ZWQgKHRoYXQgaXMsIHRoZSA8 bGl0ZXJhbD5PVVQ8L2xpdGVyYWw+IGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMKKyAgICAgIHRv IHRoZSB2aWV3J3MgPHN0cnVjdGZpZWxkPnBsYW48L3N0cnVjdGZpZWxkPiBjb2x1bW4gd2lsbCBy ZXR1cm4gbnVsbHMpLiAgVGhpcworICAgICAgZmVhdHVyZSBpcyBpbnRlbmRlZCB0byBzdXBwb3J0 IGV4dGVybmFsIHRvb2xzIHRoYXQgbWlnaHQgd2lzaCB0byBhdm9pZAorICAgICAgdGhlIG92ZXJo ZWFkIG9mIHJlcGVhdGVkbHkgcmV0cmlldmluZyBwbGFuIHRleHRzIG9mIGluZGV0ZXJtaW5hdGUK KyAgICAgIGxlbmd0aC4gIFN1Y2ggdG9vbHMgY2FuIGluc3RlYWQgY2FjaGUgdGhlIGZpcnN0IHBs YW4gdGV4dCBvYnNlcnZlZAorICAgICAgZm9yIGVhY2ggZW50cnkgdGhlbXNlbHZlcywgc2luY2Ug dGhhdCBpcworICAgICAgYWxsIDxmaWxlbmFtZT5wZ19zdGF0X3BsYW5zPC9maWxlbmFtZT4gaXRz ZWxmIGRvZXMsIGFuZCB0aGVuIHJldHJpZXZlCisgICAgICBwbGFuIHRleHRzIG9ubHkgYXMgbmVl ZGVkLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5Pgor ICA8L3ZhcmlhYmxlbGlzdD4KKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3N0YXRwbGFucy1j b25maWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gUGFyYW1ldGVyczwvdGl0bGU+ CisKKyAgPHZhcmlhYmxlbGlzdD4KKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAg IDx2YXJuYW1lPnBnX3N0YXRfcGxhbnMubWF4PC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlw ZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19zdGF0X3Bs YW5zLm1heDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAg IDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+ CisgICAgICA8dmFybmFtZT5wZ19zdGF0X3BsYW5zLm1heDwvdmFybmFtZT4gaXMgdGhlIG1heGlt dW0gbnVtYmVyIG9mCisgICAgICBwbGFucyB0cmFja2VkIGJ5IHRoZSBtb2R1bGUgKGkuZS4sIHRo ZSBtYXhpbXVtIG51bWJlciBvZiByb3dzCisgICAgICBpbiB0aGUgPHN0cnVjdG5hbWU+cGdfc3Rh dF9wbGFuczwvc3RydWN0bmFtZT4gdmlldykuICBJZiBtb3JlIGRpc3RpbmN0CisgICAgICBwbGFu cyB0aGFuIHRoYXQgYXJlIG9ic2VydmVkLCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGVhc3QtZXhl Y3V0ZWQKKyAgICAgIHBsYW5zIGlzIGRpc2NhcmRlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNTAw MC4KKyAgICAgIE9ubHkgc3VwZXJ1c2VycyBjYW4gY2hhbmdlIHRoaXMgc2V0dGluZy4gQ2hhbmdp bmcgdGhlIHNldHRpbmcgcmVxdWlyZXMKKyAgICAgIGEgcmVsb2FkIG9mIHRoZSBzZXJ2ZXIuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisgIAorICAg PHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfc3RhdF9wbGFucy5t YXhfc2l6ZTwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJt PgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfc3RhdF9wbGFucy5tYXhfc2l6ZTwvdmFybmFt ZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgor ICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFybmFt ZT5wZ19zdGF0X3BsYW5zLm1heF9zaXplPC92YXJuYW1lPiBpcyB0aGUgbWF4aW11bSBsZW5ndGgg b2YKKyAgICAgIGVhY2ggcGxhbiB0ZXh0IHRyYWNrZWQgYnkgdGhlIG1vZHVsZSBpbiBieXRlcy4g TG9uZ2VyIHBsYW4gdGV4dHMgd2lsbCBiZSB0cnVuY2F0ZWQuCisgICAgICBUaGUgZGVmYXVsdCB2 YWx1ZSBpcyAyMDQ4ICgya0IpLgorICAgICAgT25seSBzdXBlcnVzZXJzIGNhbiBjaGFuZ2UgdGhp cyBzZXR0aW5nLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19z dGF0X3BsYW5zLnRyYWNrPC92YXJuYW1lPiAoPHR5cGU+ZW51bTwvdHlwZT4pCisgICAgIDxpbmRl eHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19zdGF0X3BsYW5zLnRyYWNrPC92YXJu YW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+ CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJu YW1lPnBnX3N0YXRfcGxhbnMudHJhY2s8L3Zhcm5hbWU+IGNvbnRyb2xzIHdoaWNoIHBsYW5zCisg ICAgICBhcmUgY291bnRlZCBieSB0aGUgbW9kdWxlLgorICAgICAgU3BlY2lmeSA8bGl0ZXJhbD50 b3A8L2xpdGVyYWw+IHRvIHRyYWNrIHBsYW5zIGJ5IHRvcC1sZXZlbCBzdGF0ZW1lbnRzICh0aG9z ZSBpc3N1ZWQKKyAgICAgIGRpcmVjdGx5IGJ5IGNsaWVudHMpLCA8bGl0ZXJhbD5hbGw8L2xpdGVy YWw+IHRvIGFsc28gdHJhY2sgbmVzdGVkIHN0YXRlbWVudHMKKyAgICAgIChzdWNoIGFzIHN0YXRl bWVudHMgaW52b2tlZCB3aXRoaW4gZnVuY3Rpb25zKSwgb3IgPGxpdGVyYWw+bm9uZTwvbGl0ZXJh bD4gdG8KKyAgICAgIGRpc2FibGUgcGxhbiBzdGF0aXN0aWNzIGNvbGxlY3Rpb24uCisgICAgICBU aGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD50b3A8L2xpdGVyYWw+LgorICAgICAgT25seSBz dXBlcnVzZXJzIGNhbiBjaGFuZ2UgdGhpcyBzZXR0aW5nLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKworICA8cGFy YT4KKyAgIFRoZSBtb2R1bGUgcmVxdWlyZXMgYWRkaXRpb25hbCBzaGFyZWQgbWVtb3J5IHByb3Bv cnRpb25hbCB0bworICAgPHZhcm5hbWU+cGdfc3RhdF9wbGFucy5tYXg8L3Zhcm5hbWU+IGZvciBz dGF0aXN0aWNzLCBhcyB3ZWxsIGFzCisgICA8dmFybmFtZT5wZ19zdGF0X3BsYW5zLm1heDwvdmFy bmFtZT4gbXVsdGlwbGllZCBieQorICAgPHZhcm5hbWU+cGdfc3RhdF9wbGFucy5tYXhfc2l6ZTwv dmFybmFtZT4gZm9yIHBsYW4gdGV4dHMuIE5vdGUgdGhhdCB0aGlzCisgICBtZW1vcnkgaXMgb25s eSBjb25zdW1lZCB3aGVuIGVudHJpZXMgYXJlIGNyZWF0ZWQsIGFuZCBub3QgaWYKKyAgIDx2YXJu YW1lPnBnX3N0YXRfcGxhbnMudHJhY2s8L3Zhcm5hbWU+IGlzIHNldCB0byA8bGl0ZXJhbD5ub25l PC9saXRlcmFsPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlc2UgcGFyYW1ldGVycyBt dXN0IGJlIHNldCBpbiA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4uCisgICBU eXBpY2FsIHVzYWdlIG1pZ2h0IGJlOgorCis8cHJvZ3JhbWxpc3Rpbmc+CisjIHBvc3RncmVzcWwu Y29uZgorc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzID0gJ3BnX3N0YXRfcGxhbnMnCisKK2NvbXB1 dGVfcXVlcnlfaWQgPSBvbgorY29tcHV0ZV9wbGFuX2lkID0gb24KK3BnX3N0YXRfcGxhbnMubWF4 ID0gMTAwMDAKK3BnX3N0YXRfcGxhbnMubWF4X3NpemUgPSA0MDk2CitwZ19zdGF0X3BsYW5zLnRy YWNrID0gYWxsCis8L3Byb2dyYW1saXN0aW5nPgorICA8L3BhcmE+CisgPC9zZWN0Mj4KKworIDxz ZWN0MiBpZD0icGdzdGF0cGxhbnMtc2FtcGxlLW91dHB1dCI+CisgIDx0aXRsZT5TYW1wbGUgT3V0 cHV0PC90aXRsZT4KKworPHNjcmVlbj4KK2JlbmNoPSMgU0VMRUNUIHBnX3N0YXRfcGxhbnNfcmVz ZXQoKTsKKworJCBwZ2JlbmNoIC1pIGJlbmNoCiskIHBnYmVuY2ggLWMxMCAtdDMwMCBiZW5jaAor CitiZW5jaD0jIFx4CitiZW5jaD0jIFNFTEVDVCBwbGFuLCBjYWxscywgdG90YWxfZXhlY190aW1l CisgIEZST00gcGdfc3RhdF9wbGFucyBPUkRFUiBCWSB0b3RhbF9leGVjX3RpbWUgREVTQyBMSU1J VCA1OworLVsgUkVDT1JEIDEgXS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGxhbiAgICAgICAgICAgIHwgVXBkYXRl IG9uIHBnYmVuY2hfdGVsbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICsKKyAgICAgICAgICAgICAgICB8ICAgLT4gIFNlcSBTY2FuIG9uIHBnYmVuY2hfdGVsbGVycyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgfCAgICAgICAg IEZpbHRlcjogKHRpZCA9IDUpCitjYWxscyAgICAgICAgICAgfCAzMDAwCit0b3RhbF9leGVjX3Rp bWUgfCA2NDIuODg4MDkxOTk5OTk5MworLVsgUkVDT1JEIDIgXS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGxhbiAg ICAgICAgICAgIHwgVXBkYXRlIG9uIHBnYmVuY2hfYnJhbmNoZXMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICB8ICAgLT4gIFNlcSBTY2FuIG9u IHBnYmVuY2hfYnJhbmNoZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAg ICAgICAgICAgfCAgICAgICAgIEZpbHRlcjogKGJpZCA9IDEpCitjYWxscyAgICAgICAgICAgfCAx ODEzCit0b3RhbF9leGVjX3RpbWUgfCA0NzYuNjQxNTI3MDAwMDAwMDUKKy1bIFJFQ09SRCAzIF0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KK3BsYW4gICAgICAgICAgICB8IFVwZGF0ZSBvbiBwZ2JlbmNoX2JyYW5jaGVz ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAg fCAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHBnYmVuY2hfYnJhbmNoZXNfcGtleSBvbiBwZ2JlbmNo X2JyYW5jaGVzKworICAgICAgICAgICAgICAgIHwgICAgICAgICBJbmRleCBDb25kOiAoYmlkID0g MSkKK2NhbGxzICAgICAgICAgICB8IDExODcKK3RvdGFsX2V4ZWNfdGltZSB8IDMyNi4xMjU3NTQ5 OTk5OTk5CistWyBSRUNPUkQgNCBdLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwbGFuICAgICAgICAgICAgfCBVcGRh dGUgb24gcGdiZW5jaF9hY2NvdW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKworICAgICAgICAgICAgICAgIHwgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwZ2JlbmNoX2Fj Y291bnRzX3BrZXkgb24gcGdiZW5jaF9hY2NvdW50cysKKyAgICAgICAgICAgICAgICB8ICAgICAg ICAgSW5kZXggQ29uZDogKGFpZCA9IDQ4NzkzKQorY2FsbHMgICAgICAgICAgIHwgMzAwMAordG90 YWxfZXhlY190aW1lIHwgMjEuNjY0NjkwMDAwMDAwMDkzCistWyBSRUNPUkQgNSBdLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCitwbGFuICAgICAgICAgICAgfCBJbnNlcnQgb24gcGdiZW5jaF9oaXN0b3J5ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgIHwgICAtPiAg UmVzdWx0CitjYWxscyAgICAgICAgICAgfCAzMDAwCit0b3RhbF9leGVjX3RpbWUgfCA0LjM2NTI1 MDk5OTk5OTk1NworCitzZXNzaW9uIDE6CisKK2JlbmNoIyBTRUxFQ1QgcGdfc2xlZXAoMTAwKSwg Q09VTlQoKikgRlJPTSBwZ2JlbmNoX2FjY291bnRzOworCitzZXNzaW9uIDI6CisKK2JlbmNoPSMg U0VMRUNUIHF1ZXJ5LCBwbGFuIEZST00gcGdfc3RhdF9hY3Rpdml0eQorICBKT0lOIHBnX3N0YXRf cGxhbnMgT04gKHVzZXN5c2lkID0gdXNlcmlkIEFORCBkYXRpZCA9IGRiaWQgQU5EIHF1ZXJ5X2lk ID0gcXVlcnlpZCBBTkQgcGxhbl9pZCA9IHBsYW5pZCkKKyAgV0hFUkUgcXVlcnkgTElLRSAnU0VM RUNUIHBnX3NsZWVwJSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBwbGFuICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTRUxFQ1QgcGdfc2xlZXAoMTAwKSwg Q09VTlQoKikgRlJPTSBwZ2JlbmNoX2FjY291bnRzOyB8IEFnZ3JlZ2F0ZSAgICAgICAgICAgICAg ICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIC0+ICBTZXEgU2NhbiBvbiBwZ2JlbmNoX2FjY291bnRzCisoMSByb3cp CisKKzwvc2NyZWVuPgorIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBnc3RhdHBsYW5zLWF1dGhv cnMiPgorICA8dGl0bGU+QXV0aG9yczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBMdWthcyBGaXR0 bCA8ZW1haWw+bHVrYXNAZml0dGwuY29tPC9lbWFpbD4uCisgIDwvcGFyYT4KKyA8L3NlY3QyPgor Cis8L3NlY3QxPgotLSAKMi40Ny4xCgo= --00000000000063f644062abf42fc--