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 1tq42N-00GQ3P-DT for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Mar 2025 05:44:52 +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 1tq41N-00GokS-4f for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Mar 2025 05:43:49 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tq3qK-00GYVP-7Z for pgsql-hackers@lists.postgresql.org; Thu, 06 Mar 2025 05:32:24 +0000 Received: from mail-lj1-x22f.google.com ([2a00:1450:4864:20::22f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tq3qH-001Eyv-1F for pgsql-hackers@postgresql.org; Thu, 06 Mar 2025 05:32:23 +0000 Received: by mail-lj1-x22f.google.com with SMTP id 38308e7fff4ca-307bc125e2eso2676861fa.3 for ; Wed, 05 Mar 2025 21:32:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741239140; x=1741843940; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=d3N/V8Yo7q5VtGrq9P6akUib9hxQ1ImEcr/1DmIyxkI=; b=EOowtYkFqWA3U/Ppf//UASKWuDSiuwCra+L86xhOV7+O5hFRUONp+AY5WiJJ9FiEMj Dx5mAfsbGWKO5eYRqh8/I0siN6dKPPzA5s0Ee/3JMy9imzgG2W+useRa7Rruwmht/Iyo 4WuGeooqKL2+NCpuHzblaMa6pH4TPO5cKTfnK8ZVw3/4QbhIJjn6fIL+11snyN35NlkN FafFB5Z+cW0Rext6QnjS+CA2yR8izGm4bwbTIwBqVYMxcnFBzvOuB8PzhuhpxNiyozK+ zUAxnYPcKWgqhL8zPW+CNxHtTlHlRHHQT+6ANcU/aF8Mr1yy8s9WxqVuG4eieHmTPtZ5 0u+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741239140; x=1741843940; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=d3N/V8Yo7q5VtGrq9P6akUib9hxQ1ImEcr/1DmIyxkI=; b=WuzZF3taGtQUae0/oeucl6fWlbLvnp37zuXxuMnRt+Z/O40vu5pFNtBuFSxjOY77/f fU4kGhj2Qql7Q00wLYRZ2pti1+nowlJy2TLuV/qSv7QwKkNykfC0n13I6gPSMwrOR3Wy bVNnTCr9+UfxLRQcEmf4Ls3bqJkSuvONHnURJLmkhpaawdPPrV58WvaBptRHkZ4V1oyS Oi9L2Cwk22wBla6dI42K/tL17WFieX1fPG9p9tb9zX9dB66iv8BrVVcD4ETyAtTsqai/ uXzSvpfUHl1A6e2OmyZEwFl/tBBKZypcwH6Rk03pq7sKmEq64KuWAPhUgw9QlqXUuT6A cUFw== X-Gm-Message-State: AOJu0YxRyG0D4scLxeyn3javhX4e/O7S9KcPk+JlTPEwB1VqRGWDGmNm hffRxK/t6sRceXaBaQqU6ZFjyynTAWBvoq2jiGCGeSSrQbdXrCtbZQLFqL3V8FB/UTwJlulaWVn DC4RahOS2bNYrvMyR+FJnEst6YYgvDUxd X-Gm-Gg: ASbGncuU5ttJdn8vUO2myS2TXwkk0aF5pdiG6fTbnFLQE/KK8LK5zDg1eVVy0bileR1 aFRX/TnOj00scoVNP/ctLLNwQjty07laaHxrf+BZocfs2vgYUdWtYCR9mDYScY6/ZFkpuD0tNaK nWBnS81SIhmiaKr4BwCWlO9x9wgPXy X-Google-Smtp-Source: AGHT+IEJw78gf1BDU9fjECSlD83aujncixKJWsBIwe8Fc/RX8MemzmHhrw7OfeksB0Mh81cRGkrNhsPd4orEwj8Tq7c= X-Received: by 2002:a05:651c:198d:b0:30b:a20b:eccc with SMTP id 38308e7fff4ca-30bd7a35e33mr24075171fa.11.1741239139290; Wed, 05 Mar 2025 21:32:19 -0800 (PST) MIME-Version: 1.0 From: Nikhil Kumar Veldanda Date: Wed, 5 Mar 2025 21:32:07 -0800 X-Gm-Features: AQ5f1JoxbD1JmWwW1tPvMupUkX-sBPGaSh3aVTkzDppT7GC3Yn5TPcxGKV00d4E Message-ID: Subject: ZStandard (with dictionaries) compression support for TOAST compression To: pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="0000000000005deec4062fa5d40d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005deec4062fa5d40d Content-Type: multipart/alternative; boundary="0000000000005deec4062fa5d40b" --0000000000005deec4062fa5d40b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi all, The ZStandard compression algorithm [1][2], though not currently used for TOAST compression in PostgreSQL, offers significantly improved compression ratios compared to lz4/pglz in both dictionary-based and non-dictionary modes. Attached find for review my patch to add ZStandard compression to Postgres. In tests this patch used with a pre-trained dictionary achieved up to four times the compression ratio of LZ4, while ZStandard without a dictionary outperformed LZ4/pglz by about two times during compression of data. Notably, this is the first compression algorithm for Postgres that can make use of a dictionary to provide higher levels of compression, but dictionaries have to be generated and maintained, and so I=E2=80=99ve had t= o break new ground in that regard. To use the dictionary support requires training and storing a dictionary for a given variable-length column type. On a variable-length column, a SQL function will be called. It will sample the column=E2=80=99s data and feed it into the ZStandard training API which wil= l return a dictionary. In the example, the column is of JSONB type. The SQL function takes the table name and the attribute number as inputs. If the training is successful, it will return true; otherwise, it will return false. =E2=80=98=E2=80=99=E2=80=98 test=3D# select build_zstd_dict_for_attribute('"public"."zstd"', 1); build_zstd_dict_for_attribute ------------------------------- t (1 row) =E2=80=98=E2=80=99=E2=80=98 The sampling logic and data to feed to the ZStandard training API can vary by data type. The patch includes an method to write other type-specific training functions and includes a default for JSONB, TEXT and BYTEA. There is a new option called =E2=80=98build_zstd_dict=E2=80=99 that takes a funct= ion name as input in =E2=80=98CREATE TYPE=E2=80=99. In this way anyone can write their = own type-specific training function by handling sampling logic and returning the necessary information for the ZStandard training API in =E2=80=9CZstdTrainingData=E2=80=9D format. ``` typedef struct ZstdTrainingData { char *sample_buffer; /* Pointer to the raw sample buffer */ size_t *sample_sizes; /* Array of sample sizes */ int nitems; /* Number of sample sizes */ } ZstdTrainingData; ``` This information is feed into the ZStandard train API, which generates a dictionary and inserts it into the dictionary catalog table. Additionally, we update the =E2=80=98pg_attribute=E2=80=99 attribute options to include t= he unique dictionary ID for that specific attribute. During compression, based on the available dictionary ID, we retrieve the dictionary and use it to compress the documents. I=E2=80=99ve created standard training function (`zstd_dictionary_builder`) for JSONB, TEXT, and BYTEA. We store dictionary and dictid in the new catalog table =E2=80=98pg_zstd_dictionaries=E2=80=99 ``` test=3D# \d pg_zstd_dictionaries Table "pg_catalog.pg_zstd_dictionaries" Column | Type | Collation | Nullable | Default --------+-------+-----------+----------+--------- dictid | oid | | not null | dict | bytea | | not null | Indexes: "pg_zstd_dictionaries_dictid_index" PRIMARY KEY, btree (dictid) ``` This is the entire ZStandard dictionary infrastructure. A column can have multiple dictionaries. The latest dictionary will be identified by the pg_attribute attoptions. We never delete dictionaries once they are generated. If a dictionary is not provided and attcompression is set to zstd, we compress with ZStandard without dictionary. For decompression, the zstd-compressed frame contains a dictionary identifier (dictid) that indicates the dictionary used for compression. By retrieving this dictid from the zstd frame, we then fetch the corresponding dictionary and perform decompression. ###########################################################################= ## Enter toast compression framework changes, We identify a compressed datum compression algorithm using the top two bits of va_tcinfo (varattrib_4b.va_compressed). It is possible to have four compression methods. However, based on previous community email discussions regarding toast compression changes[3], the idea of using it for a new compression algorithm has been rejected, and a suggestion has been made to extend it which I=E2=80=99ve implemented in thi= s patch. This change necessitates an update to =E2=80=98varattrib_4b=E2=80=99 and = =E2=80=98varatt_external=E2=80=99 on disk structures. I=E2=80=99ve made sure that this changes are backward compatible. ``` typedef union { struct /* Normal varlena (4-byte length) */ { uint32 va_header; char va_data[FLEXIBLE_ARRAY_MEMBER]; } va_4byte; struct /* Compressed-in-line format */ { uint32 va_header; uint32 va_tcinfo; /* Original data size (excludes header) and * compression method; see va_extinfo */ char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Compressed data */ } va_compressed; struct { uint32 va_header; uint32 va_tcinfo; uint32 va_cmp_alg; char va_data[FLEXIBLE_ARRAY_MEMBER]; } va_compressed_ext; } varattrib_4b; typedef struct varatt_external { int32 va_rawsize; /* Original data size (includes header) */ uint32 va_extinfo; /* External saved size (without header) and * compression method */ Oid va_valueid; /* Unique ID of value within TOAST table */ Oid va_toastrelid; /* RelID of TOAST table containing it */ uint32 va_cmp_alg; /* The additional compression algorithms * information. */ } varatt_external; ``` As I need to update this structs, I=E2=80=99ve made changes to the existing= macros. Additionally added compression and decompression routines related to ZStandard as needed. These are major design changes in the patch to incorporate ZStandard with dictionary compression. Please let me know what you think about all this. Are there any concerns with my approach? In particular, I would appreciate your thoughts on the on-disk changes that result from this. kind regards, Nikhil Veldanda Amazon Web Services: https://aws.amazon.com [1] https://facebook.github.io/zstd/ [2] https://github.com/facebook/zstd [3] https://www.postgresql.org/message-id/flat/YoMiNmkztrslDbNS%40paquier.xyz --0000000000005deec4062fa5d40b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi all,

The ZStandard compression algorithm [1][2= ], though not currently used for TOAST compression in PostgreSQL, offers si= gnificantly improved compression ratios compared to lz4/pglz in both dictio= nary-based and non-dictionary modes. Attached find for review my patch to a= dd ZStandard compression to Postgres. In tests this patch used with a pre-t= rained dictionary achieved up to four times the compression ratio of LZ4, w= hile ZStandard without a dictionary outperformed LZ4/pglz by about two time= s during compression of data.

Notably, this is the first compression algorithm = for Postgres that can make use of a dictionary to provide higher levels of = compression, but dictionaries have to be generated and maintained, and so I= =E2=80=99ve had to break new ground in that regard. To use the dictionary s= upport requires training and storing a dictionary for a given variable-leng= th column type. On a variable-length column, a SQL function will be called.= It will sample the column=E2=80=99s data and feed it into the ZStandard tr= aining API which will return a dictionary. In the example, the column is of= JSONB type. The SQL function takes the table name and the attribute number= as inputs. If the training is successful, it will return true; otherwise, = it will return false.

=E2=80=98=E2=80=99=E2=80=98
test=3D# select build_zstd_dic= t_for_attribute('"public"."zstd"', 1);build_zst= d_dict_for_attribute
-------------------------------
t
(1 row)
=E2=80=98=E2=80= =99=E2=80=98

The sampling logic and data to feed to the ZStandard training API = can vary by data type. The patch includes an method to write other type-spe= cific training functions and includes a default for JSONB, TEXT and BYTEA. = There is a new option called =E2=80=98build_zstd_dict=E2=80=99 that takes a= function name as input in =E2=80=98CREATE TYPE=E2=80=99. In this way anyon= e can write their own type-specific training function by handling sampling = logic and returning the necessary information for the ZStandard training AP= I in =E2=80=9CZstdTrainingData=E2=80=9D format.

```
typedef struct ZstdTrainingD= ata
{
char *sample_buffer; /* Pointer to the raw sample buffer */
size_t *samp= le_sizes; /* Array of sample sizes */
int nitems; /* Number of sample sizes = */
```
This information is feed into the ZStandard train A= PI, which generates a dictionary and inserts it into the dictionary catalog= table. Additionally, we update the =E2=80=98pg_attribute=E2=80=99 attribut= e options to include the unique dictionary ID for that specific attribute. = During compression, based on the available dictionary ID, we retrieve the d= ictionary and use it to compress the documents. I=E2=80=99ve created standa= rd training function (`zstd_dictionary_builder`) for JSONB, TEXT, and BYTEA= .=C2=A0

We store dictionary= and dictid in the new catalog table =E2=80=98pg_zstd_dictionaries=E2=80=99=

```=
= test=3D# \d pg_zstd_dictionaries
Table "pg_catalog.pg_zstd_dictionaries= "
Column | Type | Collation | Nullable | Default
--------+-------+------= -----+----------+---------
dictid | oid | | not null |
dict | bytea | | not n= ull |
Indexes:
"pg_zstd_dictionaries_dictid_index" PRIMARY KEY, btr= ee (dictid)
```=C2=A0
=
This is= the entire ZStandard dictionary infrastructure. A column can have multiple= dictionaries. The latest dictionary will be identified by the pg_attribute= attoptions. We never delete dictionaries once they are generated. If a dic= tionary is not provided and attcompression is set to zstd, we compress with= ZStandard without dictionary. For decompression, the zstd-compressed frame= contains a dictionary identifier (dictid) that indicates the dictionary us= ed for compression. By retrieving this dictid from the zstd frame, we then = fetch the corresponding dictionary and perform decompression.


###############= ##############################################################

Enter toast com= pression framework changes,

We identify a compressed datum compression algorith= m using the top two bits of va_tcinfo (varattrib_4b.va_compressed).=C2=A0
It is possible to have fou= r compression methods. However, based on previous community email discussio= ns regarding toast compression changes[3], the idea of using it for a new c= ompression algorithm has been rejected, and a suggestion has been made to e= xtend it which I=E2=80=99ve implemented in this patch. This change necessit= ates an update to =E2=80=98varattrib_4b=E2=80=99 and =E2=80=98varatt_extern= al=E2=80=99 on disk structures. I=E2=80=99ve made sure that this changes ar= e backward compatible.=C2=A0

```
typedef union
{
struct /* Normal varlena (4-byte length) */
{
uint32 va_hea= der;
char va_data[FLEXIBLE_ARRAY_MEMBER];
} va_4byte;
struct /* Compressed-in-= line format */
{
uint32 va_header;
uint32 va_tcinfo; /* Original data size (ex= cludes header) and
* compression method; see va_extinfo */
char va_data[FL= EXIBLE_ARRAY_MEMBER]; /* Compressed data */
} va_compressed;
struct{
<= br style=3D"color:rgb(0,0,0);font-style:normal;font-variant-caps:normal;fon= t-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-tr= ansform:none;white-space:normal;word-spacing:0px;text-decoration:none">uint32 v= a_header;

uint32 va_tcinfo;
uint32 va_cmp_alg;
char va_data[FLEXIBLE_ARRAY_MEM= BER];
} va_compressed_ext;
} varattrib_4b;

typedef struct varatt_external<= br style=3D"color:rgb(0,0,0);font-style:normal;font-variant-caps:normal;fon= t-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-tr= ansform:none;white-space:normal;word-spacing:0px;text-decoration:none">{=
int32 v= a_rawsize; /* Original data size (includes header) */
uint32 va_extinfo; /* = External saved size (without header) and
* compression method */
Oid va_value= id; /* Unique ID of value within TOAST table */
Oid va_toastrelid; /* RelID = of TOAST table containing it */
uint32 va_cmp_alg; /* The additional compres= sion algorithms
* information. */
} varatt_external;
```

As I need to update this = structs, I=E2=80=99ve made changes to the existing macros. Additionally add= ed compression and decompression routines related to ZStandard as needed. T= hese are major design changes in the patch to incorporate ZStandard with di= ctionary compression.=C2=A0


= Please let me know what you think about all this. Are there any concerns wi= th my approach? In particular, I would appreciate your thoughts on the on-d= isk changes that result from this.

kind regards,

Nikhil Veldanda
Amazon Web Services= :=C2=A0https://aws.amazon.= com

[1]= =C2=A0https://fac= ebook.github.io/zstd/
[2]=C2=A0https://github.com/facebook/zstd
[3]=C2=A0htt= ps://www.postgresql.org/message-id/flat/YoMiNmkztrslDbNS%40paquier.xyz<= br style=3D"color:rgb(0,0,0);font-style:normal;font-variant-caps:normal;fon= t-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-tr= ansform:none;white-space:normal;word-spacing:0px;text-decoration:none">
=
--0000000000005deec4062fa5d40b-- --0000000000005deec4062fa5d40d Content-Type: application/octet-stream; name="v1-0001-Add-ZStandard-with-dictionaries-compression-suppo.patch" Content-Disposition: attachment; filename="v1-0001-Add-ZStandard-with-dictionaries-compression-suppo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7wwsdn10 RnJvbSA5NGNiZjExNWQyZDEyZDM5MDhlYWM1Yjc4NGM2MDhlMTZkZjU3OWU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtoaWwgS3VtYXIgVmVsZGFuZGEgPG5pa2hpbGt2QGFtYXpv bi5jb20+CkRhdGU6IFR1ZSwgNCBNYXIgMjAyNSAwODoxNDozMiArMDAwMApTdWJqZWN0OiBbUEFU Q0ggdjFdIEFkZCBaU3RhbmRhcmQgKHdpdGggZGljdGlvbmFyaWVzKSBjb21wcmVzc2lvbiBzdXBw b3J0IGZvcgogVE9BU1QKCi0tLQogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9oZWFwYW0uYyAgICAg ICAgICAgICAgIHwgICAxICsKIGRvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAg ICAgICAgICB8ICA1NSArKwogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdHlwZS5zZ21sICAgICAg ICAgICAgIHwgIDIxICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMgICAg ICAgICAgfCAgMTggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vZGV0b2FzdC5jICAgICAg ICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1cGxlLmMgICAg ICAgIHwgIDE4ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyAgICAg ICAgfCAgMzYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdG9hc3RfY29tcHJlc3Npb24u YyB8IDI2OSArKysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5h bHMuYyAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdG9hc3RfaGVscGVyLmMg ICAgICAgfCAgMTcgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvTWFrZWZpbGUgICAgICAgICAgICAg ICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMgICAgICAgICAgICAgICAg ICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL21lc29uLmJ1aWxkICAgICAgICAgICAg ICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ190eXBlLmMgICAgICAgICAgICAgICAg IHwgIDExICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3pzdGRfZGljdGlvbmFyaWVzLmMgICAg fCA2MDEgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMg ICAgICAgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3R5cGVjbWRzLmMg ICAgICAgICAgICAgICB8ICA5OSArKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMg ICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMu YyAgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlIHwgICAyICstCiBzcmMvYmluL3BnX2FtY2hlY2svdC8wMDRfdmVyaWZ5X2hlYXBh bS5wbCAgICAgfCAgMTQgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAg ICAgICAgICB8ICAyNSArLQogc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAg ICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfY29tcHJlc3Npb24uaCAg ICAgICAgfCAgMTMgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90b2FzdF9oZWxwZXIuaCAgICAgICAg ICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmggICAgICAg ICAgfCAgMzUgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvTWFrZWZpbGUgICAgICAgICAgICAgICAg ICB8ICAgMyArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmggICAgICAgICAgICAg IHwgICAyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL21lc29uLmJ1aWxkICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgIHwg IDEwICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfdHlwZS5kYXQgICAgICAgICAgICAgICB8ICAg NiArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ190eXBlLmggICAgICAgICAgICAgICAgIHwgICA4 ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3pzdGRfZGljdGlvbmFyaWVzLmggICAgfCAgNTMg KysKIHNyYy9pbmNsdWRlL3BhcnNlci9hbmFseXplLmggICAgICAgICAgICAgICAgICB8ICAgNSAr CiBzcmMvaW5jbHVkZS91dGlscy9hdHRvcHRjYWNoZS5oICAgICAgICAgICAgICAgfCAgIDYgKwog c3JjL2luY2x1ZGUvdmFyYXR0LmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgwICsrLQog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb21wcmVzc2lvbi5vdXQgICAgIHwgICA1ICstCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbXByZXNzaW9uXzEub3V0ICAgfCAgIDMgKwogLi4u L3JlZ3Jlc3MvZXhwZWN0ZWQvY29tcHJlc3Npb25fenN0ZC5vdXQgICAgIHwgMTIzICsrKysKIC4u Li9yZWdyZXNzL2V4cGVjdGVkL2NvbXByZXNzaW9uX3pzdGRfMS5vdXQgICB8IDE4MSArKysrKysK IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2lkam9pbnMub3V0ICAgICAgICB8ICAgMSArCiBz cmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgIDIgKy0KIHNy Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbXByZXNzaW9uLnNxbCAgICAgICAgICB8ICAgMSArCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9jb21wcmVzc2lvbl96c3RkLnNxbCAgICAgfCAgOTcgKysrCiBzcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDUgKwogNDUgZmls ZXMgY2hhbmdlZCwgMTc5MSBpbnNlcnRpb25zKCspLCA4OCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3pzdGRfZGljdGlvbmFyaWVzLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3pzdGRfZGljdGlvbmFyaWVz LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbXByZXNz aW9uX3pzdGQub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9jb21wcmVzc2lvbl96c3RkXzEub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY29tcHJlc3Npb25fenN0ZC5zcWwKCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hl Y2svdmVyaWZ5X2hlYXBhbS5jIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9oZWFwYW0uYwppbmRl eCA4MjczMTIzMDZmLi5mMDFjYzk0MGUzIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svdmVy aWZ5X2hlYXBhbS5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfaGVhcGFtLmMKQEAgLTE3 MDAsNiArMTcwMCw3IEBAIGNoZWNrX3R1cGxlX2F0dHJpYnV0ZShIZWFwQ2hlY2tDb250ZXh0ICpj dHgpCiAJCQkJLyogTGlzdCBvZiBhbGwgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIElEcyAqLwog CQkJY2FzZSBUT0FTVF9QR0xaX0NPTVBSRVNTSU9OX0lEOgogCQkJY2FzZSBUT0FTVF9MWjRfQ09N UFJFU1NJT05fSUQ6CisJCQljYXNlIFRPQVNUX1pTVERfQ09NUFJFU1NJT05fSUQ6CiAJCQkJdmFs aWQgPSB0cnVlOwogCQkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxv Z3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IGZiMDUwNjM1NTUuLmVk NGM1MWE2NzggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCkBAIC0zNjksNiArMzY5LDEyIEBACiAgICAgICA8ZW50 cnk+PGxpbmsgbGlua2VuZD0iY2F0YWxvZy1wZy11c2VyLW1hcHBpbmciPjxzdHJ1Y3RuYW1lPnBn X3VzZXJfbWFwcGluZzwvc3RydWN0bmFtZT48L2xpbms+PC9lbnRyeT4KICAgICAgIDxlbnRyeT5t YXBwaW5ncyBvZiB1c2VycyB0byBmb3JlaWduIHNlcnZlcnM8L2VudHJ5PgogICAgICA8L3Jvdz4K KworICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaW5rIGxpbmtlbmQ9ImNhdGFsb2ctcGctenN0 ZC1kaWN0aW9uYXJpZXMiPjxzdHJ1Y3RuYW1lPnBnX3pzdGRfZGljdGlvbmFyaWVzPC9zdHJ1Y3Ru YW1lPjwvbGluaz48L2VudHJ5PgorICAgICAgPGVudHJ5PlpzdGFuZGFyZCBkaWN0aW9uYXJpZXM8 L2VudHJ5PgorICAgICA8L3Jvdz4KKwogICAgIDwvdGJvZHk+CiAgICA8L3Rncm91cD4KICAgPC90 YWJsZT4KQEAgLTk3NzksNCArOTc4NSw1MyBAQCBTQ1JBTS1TSEEtMjU2JDxyZXBsYWNlYWJsZT4m bHQ7aXRlcmF0aW9uIGNvdW50Jmd0OzwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT4mbAogICA8 L3RhYmxlPgogIDwvc2VjdDE+CiAKKworPHNlY3QxIGlkPSJjYXRhbG9nLXBnLXpzdGQtZGljdGlv bmFyaWVzIj4KKyAgPHRpdGxlPjxzdHJ1Y3RuYW1lPnBnX3pzdGRfZGljdGlvbmFyaWVzPC9zdHJ1 Y3RuYW1lPjwvdGl0bGU+CisKKyAgPGluZGV4dGVybSB6b25lPSJjYXRhbG9nLXBnLXpzdGQtZGlj dGlvbmFyaWVzIj4KKyAgICA8cHJpbWFyeT5wZ196c3RkX2RpY3Rpb25hcmllczwvcHJpbWFyeT4K KyAgPC9pbmRleHRlcm0+CisKKyAgPHBhcmE+CisgICAgVGhlIGNhdGFsb2cgPHN0cnVjdG5hbWU+ cGdfenN0ZF9kaWN0aW9uYXJpZXM8L3N0cnVjdG5hbWU+IG1haW50YWlucyB0aGUgZGljdGlvbmFy aWVzIGVzc2VudGlhbCBmb3IgWnN0YW5kYXJkIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9u LgorICA8L3BhcmE+CisKKyAgPHRhYmxlPgorICAgIDx0aXRsZT48c3RydWN0bmFtZT5wZ196c3Rk X2RpY3Rpb25hcmllczwvc3RydWN0bmFtZT4gQ29sdW1uczwvdGl0bGU+CisgICAgPHRncm91cCBj b2xzPSIxIj4KKyAgICAgIDx0aGVhZD4KKyAgICAgICAgPHJvdz4KKyAgICAgICAgICA8ZW50cnkg cm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+CisgICAgICAgICAgICA8cGFyYSByb2xlPSJjb2x1 bW5fZGVmaW5pdGlvbiI+Q29sdW1uIFR5cGU8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT5EZXNj cmlwdGlvbjwvcGFyYT4KKyAgICAgICAgICA8L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICAg IDwvdGhlYWQ+CisgICAgICA8dGJvZHk+CisgICAgICAgIDxyb3c+CisgICAgICAgICAgPGVudHJ5 IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPgorICAgICAgICAgICAgPHBhcmEgcm9sZT0iY29s dW1uX2RlZmluaXRpb24iPgorICAgICAgICAgICAgICA8c3RydWN0ZmllbGQ+ZGljdGlkPC9zdHJ1 Y3RmaWVsZD4gPHR5cGU+b2lkPC90eXBlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAg ICAgPHBhcmE+CisgICAgICAgICAgICAgIERpY3Rpb25hcnkgaWRlbnRpZmllcjsgYSBub24tbnVs bCBPSUQgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGEgZGljdGlvbmFyeS4KKyAgICAgICAgICAg IDwvcGFyYT4KKyAgICAgICAgICA8L2VudHJ5PgorICAgICAgICA8L3Jvdz4KKyAgICAgICAgPHJv dz4KKyAgICAgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+CisgICAgICAg ICAgICA8cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgICAgICAgIDxzdHJ1 Y3RmaWVsZD5kaWN0PC9zdHJ1Y3RmaWVsZD4gPHR5cGU+Ynl0ZWE8L3R5cGU+CisgICAgICAgICAg ICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVmFyaWFibGUtbGVu Z3RoIGZpZWxkIGNvbnRhaW5pbmcgdGhlIHpzdGQgZGljdGlvbmFyeSBkYXRhLiBUaGlzIGZpZWxk IG11c3Qgbm90IGJlIG51bGwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9lbnRy eT4KKyAgICAgICAgPC9yb3c+CisgICAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICA8L3Rh YmxlPgorPC9zZWN0MT4KKwogPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Jl Zi9jcmVhdGVfdHlwZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdHlwZS5zZ21sCmlu ZGV4IDk5NGRmYzY1MjYuLmFkNGNmMmY4YjMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYv Y3JlYXRlX3R5cGUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90eXBlLnNnbWwK QEAgLTU2LDYgKzU2LDcgQEAgQ1JFQVRFIFRZUEUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiAoCiAgICAgWyAsIEVMRU1FTlQgPSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+ZWxlbWVudDwvcmVwbGFjZWFibGU+IF0KICAgICBbICwgREVMSU1J VEVSID0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRlbGltaXRlcjwvcmVwbGFjZWFi bGU+IF0KICAgICBbICwgQ09MTEFUQUJMRSA9IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5jb2xsYXRhYmxlPC9yZXBsYWNlYWJsZT4gXQorICAgIFsgLCBCVUlMRF9aU1REX0RJQ1QgPSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+enN0ZF90cmFpbmluZ19mdW5jdGlvbjwvcmVw bGFjZWFibGU+IF0KICkKIAogQ1JFQVRFIFRZUEUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgpAQCAtMjExLDcgKzIxMiw4IEBAIENSRUFURSBUWVBFIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4KICAgIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50eXBlX21vZGlmaWVyX2lucHV0X2Z1bmN0aW9uPC9y ZXBsYWNlYWJsZT4sCiAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dHlwZV9tb2Rp Zmllcl9vdXRwdXRfZnVuY3Rpb248L3JlcGxhY2VhYmxlPiwKICAgIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5hbmFseXplX2Z1bmN0aW9uPC9yZXBsYWNlYWJsZT4sIGFuZAotICAgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnN1YnNjcmlwdF9mdW5jdGlvbjwvcmVwbGFjZWFi bGU+CisgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3Vic2NyaXB0X2Z1bmN0aW9u PC9yZXBsYWNlYWJsZT4sIGFuZAorICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnpz dGRfdHJhaW5pbmdfZnVuY3Rpb248L3JlcGxhY2VhYmxlPgogICAgYXJlIG9wdGlvbmFsLiAgR2Vu ZXJhbGx5IHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHRvIGJlIGNvZGVkIGluIEMKICAgIG9yIGFub3Ro ZXIgbG93LWxldmVsIGxhbmd1YWdlLgogICA8L3BhcmE+CkBAIC00OTEsNiArNDkzLDE1IEBAIENS RUFURSBUWVBFIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJs ZT4KICAgIG1ha2UgdXNlIG9mIHRoZSBjb2xsYXRpb24gaW5mb3JtYXRpb247IHRoaXMgZG9lcyBu b3QgaGFwcGVuCiAgICBhdXRvbWF0aWNhbGx5IG1lcmVseSBieSBtYXJraW5nIHRoZSB0eXBlIGNv bGxhdGFibGUuCiAgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgICBUaGUgb3B0aW9uYWwgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnpzdGRfdHJhaW5pbmdfZnVuY3Rpb248L3JlcGxhY2Vh YmxlPgorICAgIHBlcmZvcm1zIHR5cGUtc3BlY2lmaWMgc2FtcGxlIGNvbGxlY3Rpb24gZm9yIGEg Y29sdW1uIG9mIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgdHlwZS4KKyAgICBCeSBkZWZhdWx0LCBm b3IgPHR5cGU+anNvbmI8L3R5cGU+LCA8dHlwZT50ZXh0PC90eXBlPiwgYW5kIDx0eXBlPmJ5dGVh PC90eXBlPiBkYXRhIHR5cGVzLCB0aGUgZnVuY3Rpb24gPGxpdGVyYWw+enN0ZF9kaWN0aW9uYXJ5 X2J1aWxkZXI8L2xpdGVyYWw+IGlzIGRlZmluZWQuIEl0IGF0dGVtcHRzIHRvIGdhdGhlciBzYW1w bGVzIGZvciBhIGNvbHVtbiAKKyAgICBhbmQgcmV0dXJucyBhIHNhbXBsZSBidWZmZXIgZm9yIHpz dGQgZGljdGlvbmFyeSB0cmFpbmluZy4gVGhlIHRyYWluaW5nIGZ1bmN0aW9uIG11c3QgYmUgZGVj bGFyZWQgdG8gYWNjZXB0IHR3byBhcmd1bWVudHMgb2YgdHlwZSA8dHlwZT5pbnRlcm5hbDwvdHlw ZT4gYW5kIHJldHVybiBhbiA8dHlwZT5pbnRlcm5hbDwvdHlwZT4gcmVzdWx0LiAKKyAgICBUaGUg ZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIHpzdGQgdHJhaW5pbmcgZnVuY3Rpb24gaXMgcHJvdmlk ZWQgaW4gPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfenN0ZF9kaWN0aW9uYXJpZXMu YzwvZmlsZW5hbWU+LgorICA8L3BhcmE+CisKICAgPC9yZWZzZWN0Mj4KIAogICA8cmVmc2VjdDIg aWQ9InNxbC1jcmVhdGV0eXBlLWFycmF5IiB4cmVmbGFiZWw9IkFycmF5IFR5cGVzIj4KQEAgLTg0 Niw2ICs4NTcsMTQgQEAgQ1JFQVRFIFRZUEUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pm5hbWU8L3JlcGxhY2VhYmxlPgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwv dmFybGlzdGVudHJ5PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+YnVpbGRfenN0ZF9kaWN0PC9yZXBsYWNlYWJsZT48L3Rlcm0+Cisg ICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1l IG9mIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBzYW1wbGluZyBhbmQgcHJvdmlkZXMgdGhlIGxv Z2ljIG5lY2Vzc2FyeSB0byBnZW5lcmF0ZSBhIHNhbXBsZSBidWZmZXIgZm9yIHpzdGQgdHJhaW5p bmcuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+ CiAgIDwvdmFyaWFibGVsaXN0PgogIDwvcmVmc2VjdDE+CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2Jy aW5fdHVwbGUuYwppbmRleCA4NjFmMzk3ZTZkLi42NzE3NTk0MmU5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2JyaW4vYnJpbl90dXBsZS5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3R1 cG1hY3MuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0 aWxzLmgiCi0KKyNpbmNsdWRlICJ1dGlscy9hdHRvcHRjYWNoZS5oIgogCiAvKgogICogVGhpcyBl bmFibGVzIGRlLXRvYXN0aW5nIG9mIGluZGV4IGVudHJpZXMuICBOZWVkZWQgdW50aWwgVkFDVVVN IGlzCkBAIC0yMjMsNiArMjIzLDggQEAgYnJpbl9mb3JtX3R1cGxlKEJyaW5EZXNjICpicmRlc2Ms IEJsb2NrTnVtYmVyIGJsa25vLCBCcmluTWVtVHVwbGUgKnR1cGxlLAogCQkJewogCQkJCURhdHVt CQljdmFsdWU7CiAJCQkJY2hhcgkJY29tcHJlc3Npb247CisJCQkJaW50CQkJenN0ZF9jbXBfbGV2 ZWwgPSBERUZBVUxUX1pTVERfQ01QX0xFVkVMOworCQkJCU9pZAkJCXpzdGRfZGljdGlkID0gSW52 YWxpZERpY3RJZDsKIAkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGJy ZGVzYy0+YmRfdHVwZGVzYywKIAkJCQkJCQkJCQkJCQkgIGtleW5vKTsKIApAQCAtMjM3LDcgKzIz OSwxOSBAQCBicmluX2Zvcm1fdHVwbGUoQnJpbkRlc2MgKmJyZGVzYywgQmxvY2tOdW1iZXIgYmxr bm8sIEJyaW5NZW1UdXBsZSAqdHVwbGUsCiAJCQkJZWxzZQogCQkJCQljb21wcmVzc2lvbiA9IElu dmFsaWRDb21wcmVzc2lvbk1ldGhvZDsKIAotCQkJCWN2YWx1ZSA9IHRvYXN0X2NvbXByZXNzX2Rh dHVtKHZhbHVlLCBjb21wcmVzc2lvbik7CisJCQkJaWYgKGNvbXByZXNzaW9uID09IFRPQVNUX1pT VERfQ09NUFJFU1NJT04pCisJCQkJeworCQkJCQlBdHRyaWJ1dGVPcHRzICphb3B0ID0gZ2V0X2F0 dHJpYnV0ZV9vcHRpb25zKGF0dC0+YXR0cmVsaWQsIGF0dC0+YXR0bnVtKTsKKworCQkJCQlpZiAo YW9wdCAhPSBOVUxMKQorCQkJCQl7CisJCQkJCQl6c3RkX2NtcF9sZXZlbCA9IGFvcHQtPnpzdGRf Y21wX2xldmVsOworCQkJCQkJenN0ZF9kaWN0aWQgPSAoT2lkKSBhb3B0LT56c3RkX2RpY3RpZDsK KwkJCQkJfQorCQkJCX0KKwkJCQljdmFsdWUgPSB0b2FzdF9jb21wcmVzc19kYXR1bSh2YWx1ZSwg Y29tcHJlc3Npb24sCisJCQkJCQkJCQkJCSAgenN0ZF9kaWN0aWQsCisJCQkJCQkJCQkJCSAgenN0 ZF9jbXBfbGV2ZWwpOwogCiAJCQkJaWYgKERhdHVtR2V0UG9pbnRlcihjdmFsdWUpICE9IE5VTEwp CiAJCQkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9kZXRvYXN0LmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2RldG9hc3QuYwppbmRleCA2MjY1MTc4Nzc0Li5i NTdhOWYwMjRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2RldG9hc3Qu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL2RldG9hc3QuYwpAQCAtMjQ2LDEwICsy NDYsMTAgQEAgZGV0b2FzdF9hdHRyX3NsaWNlKHN0cnVjdCB2YXJsZW5hICphdHRyLAogCQkJICog RGV0ZXJtaW5lIG1heGltdW0gYW1vdW50IG9mIGNvbXByZXNzZWQgZGF0YSBuZWVkZWQgZm9yIGEg cHJlZml4CiAJCQkgKiBvZiBhIGdpdmVuIGxlbmd0aCAoYWZ0ZXIgZGVjb21wcmVzc2lvbikuCiAJ CQkgKgotCQkJICogQXQgbGVhc3QgZm9yIG5vdywgaWYgaXQncyBMWjQgZGF0YSwgd2UnbGwgaGF2 ZSB0byBmZXRjaCB0aGUKLQkJCSAqIHdob2xlIHRoaW5nLCBiZWNhdXNlIHRoZXJlIGRvZXNuJ3Qg c2VlbSB0byBiZSBhbiBBUEkgY2FsbCB0bwotCQkJICogZGV0ZXJtaW5lIGhvdyBtdWNoIGNvbXBy ZXNzZWQgZGF0YSB3ZSBuZWVkIHRvIGJlIHN1cmUgb2YgYmVpbmcKLQkJCSAqIGFibGUgdG8gZGVj b21wcmVzcyB0aGUgcmVxdWlyZWQgc2xpY2UuCisJCQkgKiBBdCBsZWFzdCBmb3Igbm93LCBpZiBp dCdzIExaNCBvciBac3RhbmRhcmQgZGF0YSwgd2UnbGwgaGF2ZSB0bworCQkJICogZmV0Y2ggdGhl IHdob2xlIHRoaW5nLCBiZWNhdXNlIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbiBBUEkKKwkJ CSAqIGNhbGwgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIGNvbXByZXNzZWQgZGF0YSB3ZSBuZWVkIHRv IGJlIHN1cmUKKwkJCSAqIG9mIGJlaW5nIGFibGUgdG8gZGVjb21wcmVzcyB0aGUgcmVxdWlyZWQg c2xpY2UuCiAJCQkgKi8KIAkJCWlmIChWQVJBVFRfRVhURVJOQUxfR0VUX0NPTVBSRVNTX01FVEhP RCh0b2FzdF9wb2ludGVyKSA9PQogCQkJCVRPQVNUX1BHTFpfQ09NUFJFU1NJT05fSUQpCkBAIC00 ODUsNiArNDg1LDggQEAgdG9hc3RfZGVjb21wcmVzc19kYXR1bShzdHJ1Y3QgdmFybGVuYSAqYXR0 cikKIAkJCXJldHVybiBwZ2x6X2RlY29tcHJlc3NfZGF0dW0oYXR0cik7CiAJCWNhc2UgVE9BU1Rf TFo0X0NPTVBSRVNTSU9OX0lEOgogCQkJcmV0dXJuIGx6NF9kZWNvbXByZXNzX2RhdHVtKGF0dHIp OworCQljYXNlIFRPQVNUX1pTVERfQ09NUFJFU1NJT05fSUQ6CisJCQlyZXR1cm4genN0ZF9kZWNv bXByZXNzX2RhdHVtKGF0dHIpOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgImludmFsaWQg Y29tcHJlc3Npb24gbWV0aG9kIGlkICVkIiwgY21pZCk7CiAJCQlyZXR1cm4gTlVMTDsJCS8qIGtl ZXAgY29tcGlsZXIgcXVpZXQgKi8KQEAgLTUyOCw2ICs1MzAsOCBAQCB0b2FzdF9kZWNvbXByZXNz X2RhdHVtX3NsaWNlKHN0cnVjdCB2YXJsZW5hICphdHRyLCBpbnQzMiBzbGljZWxlbmd0aCkKIAkJ CXJldHVybiBwZ2x6X2RlY29tcHJlc3NfZGF0dW1fc2xpY2UoYXR0ciwgc2xpY2VsZW5ndGgpOwog CQljYXNlIFRPQVNUX0xaNF9DT01QUkVTU0lPTl9JRDoKIAkJCXJldHVybiBsejRfZGVjb21wcmVz c19kYXR1bV9zbGljZShhdHRyLCBzbGljZWxlbmd0aCk7CisJCWNhc2UgVE9BU1RfWlNURF9DT01Q UkVTU0lPTl9JRDoKKwkJCXJldHVybiB6c3RkX2RlY29tcHJlc3NfZGF0dW1fc2xpY2UoYXR0ciwg c2xpY2VsZW5ndGgpOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgImludmFsaWQgY29tcHJl c3Npb24gbWV0aG9kIGlkICVkIiwgY21pZCk7CiAJCQlyZXR1cm4gTlVMTDsJCS8qIGtlZXAgY29t cGlsZXIgcXVpZXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vaW5k ZXh0dXBsZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1cGxlLmMKaW5kZXgg MTk4NmI5NDNhMi4uNjI1ZjkxNjI5YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2Nv bW1vbi9pbmRleHR1cGxlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9pbmRleHR1 cGxlLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgi CiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfaW50ZXJu YWxzLmgiCisjaW5jbHVkZSAidXRpbHMvYXR0b3B0Y2FjaGUuaCIKIAogLyoKICAqIFRoaXMgZW5h YmxlcyBkZS10b2FzdGluZyBvZiBpbmRleCBlbnRyaWVzLiAgTmVlZGVkIHVudGlsIFZBQ1VVTSBp cwpAQCAtMTI0LDggKzEyNSwyMyBAQCBpbmRleF9mb3JtX3R1cGxlX2NvbnRleHQoVHVwbGVEZXNj IHR1cGxlRGVzY3JpcHRvciwKIAkJewogCQkJRGF0dW0JCWN2YWx1ZTsKIAorCQkJaW50CQkJenN0 ZF9jbXBfbGV2ZWwgPSBERUZBVUxUX1pTVERfQ01QX0xFVkVMOworCQkJT2lkCQkJenN0ZF9kaWN0 aWQgPSBJbnZhbGlkRGljdElkOworCisJCQlpZiAoYXR0LT5hdHRjb21wcmVzc2lvbiA9PSBUT0FT VF9aU1REX0NPTVBSRVNTSU9OKQorCQkJeworCQkJCUF0dHJpYnV0ZU9wdHMgKmFvcHQgPSBnZXRf YXR0cmlidXRlX29wdGlvbnMoYXR0LT5hdHRyZWxpZCwgYXR0LT5hdHRudW0pOworCisJCQkJaWYg KGFvcHQgIT0gTlVMTCkKKwkJCQl7CisJCQkJCXpzdGRfY21wX2xldmVsID0gYW9wdC0+enN0ZF9j bXBfbGV2ZWw7CisJCQkJCXpzdGRfZGljdGlkID0gKE9pZCkgYW9wdC0+enN0ZF9kaWN0aWQ7CisJ CQkJfQorCQkJfQogCQkJY3ZhbHVlID0gdG9hc3RfY29tcHJlc3NfZGF0dW0odW50b2FzdGVkX3Zh bHVlc1tpXSwKLQkJCQkJCQkJCQkgIGF0dC0+YXR0Y29tcHJlc3Npb24pOworCQkJCQkJCQkJCSAg YXR0LT5hdHRjb21wcmVzc2lvbiwKKwkJCQkJCQkJCQkgIHpzdGRfZGljdGlkLAorCQkJCQkJCQkJ CSAgenN0ZF9jbXBfbGV2ZWwpOwogCiAJCQlpZiAoRGF0dW1HZXRQb2ludGVyKGN2YWx1ZSkgIT0g TlVMTCkKIAkJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0 aW9ucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMKaW5kZXggNTlm YjUzZTc3MC4uYjk5YmE5M2VjMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1v bi9yZWxvcHRpb25zLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25z LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1 dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgImFjY2Vz cy90b2FzdF9jb21wcmVzc2lvbi5oIgogCiAvKgogICogQ29udGVudHMgb2YgcGdfY2xhc3MucmVs b3B0aW9ucwpAQCAtMzg5LDcgKzM5MCwyNiBAQCBzdGF0aWMgcmVsb3B0X2ludCBpbnRSZWxPcHRz W10gPQogCQl9LAogCQktMSwgMCwgMTAyNAogCX0sCi0KKwl7CisJCXsKKwkJCSJ6c3RkX2RpY3Rf c2l6ZSIsCisJCQkiTWF4IGRpY3Qgc2l6ZSBmb3IgenN0ZCIsCisJCQlSRUxPUFRfS0lORF9BVFRS SUJVVEUsCisJCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sKKwkJfSwKKwkJREVGQVVMVF9aU1RE X0RJQ1RfU0laRSwgMCwgMTEyNjQwCS8qIE1heCBkaWN0IHNpemUoMTEwIEtCKSwgMAorCQkJCQkJ CQkJCQkgKiBpbmRpY2F0ZXMgRG9uJ3QgdXNlIGRpY3Rpb25hcnkKKwkJCQkJCQkJCQkJICogZm9y IGNvbXByZXNzaW9uICovCisJfSwKKwl7CisJCXsKKwkJCSJ6c3RkX2NtcF9sZXZlbCIsCisJCQki U2V0IGNvbHVtbidzIFpTVEQgY29tcHJlc3Npb24gbGV2ZWwiLAorCQkJUkVMT1BUX0tJTkRfQVRU UklCVVRFLAorCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCisJCX0sCisJCURFRkFVTFRfWlNU RF9DTVBfTEVWRUwsIDEsIDIyCisJfSwKIAkvKiBsaXN0IHRlcm1pbmF0b3IgKi8KIAl7e05VTEx9 fQogfTsKQEAgLTQ3OCw2ICs0OTgsMTUgQEAgc3RhdGljIHJlbG9wdF9yZWFsIHJlYWxSZWxPcHRz W10gPQogCQl9LAogCQkwLCAtMS4wLCBEQkxfTUFYCiAJfSwKKwl7CisJCXsKKwkJCSJ6c3RkX2Rp Y3RpZCIsCisJCQkiQ3VycmVudCBac3RkIGRpY3RpZCBmb3IgY29sdW1uIiwKKwkJCVJFTE9QVF9L SU5EX0FUVFJJQlVURSwKKwkJCVNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaworCQl9LAorCQlJbnZh bGlkRGljdElkLCBJbnZhbGlkRGljdElkLCBVSU5UMzJfTUFYCisJfSwKIAl7CiAJCXsKIAkJCSJ2 YWN1dW1fY2xlYW51cF9pbmRleF9zY2FsZV9mYWN0b3IiLApAQCAtMjA5Myw3ICsyMTIyLDEwIEBA IGF0dHJpYnV0ZV9yZWxvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpCiB7 CiAJc3RhdGljIGNvbnN0IHJlbG9wdF9wYXJzZV9lbHQgdGFiW10gPSB7CiAJCXsibl9kaXN0aW5j dCIsIFJFTE9QVF9UWVBFX1JFQUwsIG9mZnNldG9mKEF0dHJpYnV0ZU9wdHMsIG5fZGlzdGluY3Qp fSwKLQkJeyJuX2Rpc3RpbmN0X2luaGVyaXRlZCIsIFJFTE9QVF9UWVBFX1JFQUwsIG9mZnNldG9m KEF0dHJpYnV0ZU9wdHMsIG5fZGlzdGluY3RfaW5oZXJpdGVkKX0KKwkJeyJuX2Rpc3RpbmN0X2lu aGVyaXRlZCIsIFJFTE9QVF9UWVBFX1JFQUwsIG9mZnNldG9mKEF0dHJpYnV0ZU9wdHMsIG5fZGlz dGluY3RfaW5oZXJpdGVkKX0sCisJCXsienN0ZF9kaWN0aWQiLCBSRUxPUFRfVFlQRV9SRUFMLCBv ZmZzZXRvZihBdHRyaWJ1dGVPcHRzLCB6c3RkX2RpY3RpZCl9LAorCQl7InpzdGRfZGljdF9zaXpl IiwgUkVMT1BUX1RZUEVfSU5ULCBvZmZzZXRvZihBdHRyaWJ1dGVPcHRzLCB6c3RkX2RpY3Rfc2l6 ZSl9LAorCQl7InpzdGRfY21wX2xldmVsIiwgUkVMT1BUX1RZUEVfSU5ULCBvZmZzZXRvZihBdHRy aWJ1dGVPcHRzLCB6c3RkX2NtcF9sZXZlbCl9LAogCX07CiAKIAlyZXR1cm4gKGJ5dGVhICopIGJ1 aWxkX3JlbG9wdGlvbnMocmVsb3B0aW9ucywgdmFsaWRhdGUsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2NvbXByZXNzaW9uLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL3RvYXN0X2NvbXByZXNzaW9uLmMKaW5kZXggMjFmMmY0YWY5Ny4uNjQxNTFlYjc3 OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9jb21wcmVzc2lv bi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdG9hc3RfY29tcHJlc3Npb24uYwpA QCAtMTcsMTkgKzE3LDI1IEBACiAjaW5jbHVkZSA8bHo0Lmg+CiAjZW5kaWYKIAorI2lmZGVmIFVT RV9aU1RECisjaW5jbHVkZSA8enN0ZC5oPgorI2luY2x1ZGUgPHpkaWN0Lmg+CisjZW5kaWYKKwog I2luY2x1ZGUgImFjY2Vzcy9kZXRvYXN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXBy ZXNzaW9uLmgiCiAjaW5jbHVkZSAiY29tbW9uL3BnX2x6Y29tcHJlc3MuaCIKICNpbmNsdWRlICJ2 YXJhdHQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3pzdGRfZGljdGlvbmFyaWVzLmgiCiAKIC8q IEdVQyAqLwogaW50CQkJZGVmYXVsdF90b2FzdF9jb21wcmVzc2lvbiA9IFRPQVNUX1BHTFpfQ09N UFJFU1NJT047CiAKLSNkZWZpbmUgTk9fTFo0X1NVUFBPUlQoKSBcCisjZGVmaW5lIE5PX01FVEhP RF9TVVBQT1JUKG1ldGhvZCkgXAogCWVyZXBvcnQoRVJST1IsIFwKIAkJCShlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgXAotCQkJIGVycm1zZygiY29tcHJlc3Npb24gbWV0 aG9kIGx6NCBub3Qgc3VwcG9ydGVkIiksIFwKLQkJCSBlcnJkZXRhaWwoIlRoaXMgZnVuY3Rpb25h bGl0eSByZXF1aXJlcyB0aGUgc2VydmVyIHRvIGJlIGJ1aWx0IHdpdGggbHo0IHN1cHBvcnQuIikp KQorCQkJIGVycm1zZygiY29tcHJlc3Npb24gbWV0aG9kICVzIG5vdCBzdXBwb3J0ZWQiLCBtZXRo b2QpLCBcCisJCQkgZXJyZGV0YWlsKCJUaGlzIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZXMgdGhlIHNl cnZlciB0byBiZSBidWlsdCB3aXRoICVzIHN1cHBvcnQuIiwgbWV0aG9kKSkpCiAKIC8qCiAgKiBD b21wcmVzcyBhIHZhcmxlbmEgdXNpbmcgUEdMWi4KQEAgLTEzOSw3ICsxNDUsNyBAQCBzdHJ1Y3Qg dmFybGVuYSAqCiBsejRfY29tcHJlc3NfZGF0dW0oY29uc3Qgc3RydWN0IHZhcmxlbmEgKnZhbHVl KQogewogI2lmbmRlZiBVU0VfTFo0Ci0JTk9fTFo0X1NVUFBPUlQoKTsKKwlOT19NRVRIT0RfU1VQ UE9SVCgibHo0Iik7CiAJcmV0dXJuIE5VTEw7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8K ICNlbHNlCiAJaW50MzIJCXZhbHNpemU7CkBAIC0xODIsNyArMTg4LDcgQEAgc3RydWN0IHZhcmxl bmEgKgogbHo0X2RlY29tcHJlc3NfZGF0dW0oY29uc3Qgc3RydWN0IHZhcmxlbmEgKnZhbHVlKQog ewogI2lmbmRlZiBVU0VfTFo0Ci0JTk9fTFo0X1NVUFBPUlQoKTsKKwlOT19NRVRIT0RfU1VQUE9S VCgibHo0Iik7CiAJcmV0dXJuIE5VTEw7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KICNl bHNlCiAJaW50MzIJCXJhd3NpemU7CkBAIC0yMTUsNyArMjIxLDcgQEAgc3RydWN0IHZhcmxlbmEg KgogbHo0X2RlY29tcHJlc3NfZGF0dW1fc2xpY2UoY29uc3Qgc3RydWN0IHZhcmxlbmEgKnZhbHVl LCBpbnQzMiBzbGljZWxlbmd0aCkKIHsKICNpZm5kZWYgVVNFX0xaNAotCU5PX0xaNF9TVVBQT1JU KCk7CisJTk9fTUVUSE9EX1NVUFBPUlQoImx6NCIpOwogCXJldHVybiBOVUxMOwkJCQkvKiBrZWVw IGNvbXBpbGVyIHF1aWV0ICovCiAjZWxzZQogCWludDMyCQlyYXdzaXplOwpAQCAtMjg5LDEwICsy OTUsMTcgQEAgQ29tcHJlc3Npb25OYW1lVG9NZXRob2QoY29uc3QgY2hhciAqY29tcHJlc3Npb24p CiAJZWxzZSBpZiAoc3RyY21wKGNvbXByZXNzaW9uLCAibHo0IikgPT0gMCkKIAl7CiAjaWZuZGVm IFVTRV9MWjQKLQkJTk9fTFo0X1NVUFBPUlQoKTsKKwkJTk9fTUVUSE9EX1NVUFBPUlQoImx6NCIp OwogI2VuZGlmCiAJCXJldHVybiBUT0FTVF9MWjRfQ09NUFJFU1NJT047CiAJfQorCWVsc2UgaWYg KHN0cmNtcChjb21wcmVzc2lvbiwgInpzdGQiKSA9PSAwKQorCXsKKyNpZm5kZWYgVVNFX1pTVEQK KwkJTk9fTUVUSE9EX1NVUFBPUlQoInpzdGQiKTsKKyNlbmRpZgorCQlyZXR1cm4gVE9BU1RfWlNU RF9DT01QUkVTU0lPTjsKKwl9CiAKIAlyZXR1cm4gSW52YWxpZENvbXByZXNzaW9uTWV0aG9kOwog fQpAQCAtMzA5LDggKzMyMiwyNTAgQEAgR2V0Q29tcHJlc3Npb25NZXRob2ROYW1lKGNoYXIgbWV0 aG9kKQogCQkJcmV0dXJuICJwZ2x6IjsKIAkJY2FzZSBUT0FTVF9MWjRfQ09NUFJFU1NJT046CiAJ CQlyZXR1cm4gImx6NCI7CisJCWNhc2UgVE9BU1RfWlNURF9DT01QUkVTU0lPTjoKKwkJCXJldHVy biAienN0ZCI7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBjb21wcmVzc2lv biBtZXRob2QgJWMiLCBtZXRob2QpOwogCQkJcmV0dXJuIE5VTEw7CQkvKiBrZWVwIGNvbXBpbGVy IHF1aWV0ICovCiAJfQogfQorCisvKiBDb21wcmVzcyBkYXR1bSB1c2luZyBaU1REIHdpdGggb3B0 aW9uYWwgZGljdGlvbmFyeSAodXNpbmcgY2RpY3QpICovCitzdHJ1Y3QgdmFybGVuYSAqCit6c3Rk X2NvbXByZXNzX2RhdHVtKGNvbnN0IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSwgT2lkIGRpY3RpZCwg aW50IHpzdGRfbGV2ZWwpCit7CisjaWZkZWYgVVNFX1pTVEQKKwl1aW50MzIJCXZhbHNpemUgPSBW QVJTSVpFX0FOWV9FWEhEUih2YWx1ZSk7CisJc2l6ZV90CQltYXhfc2l6ZSA9IFpTVERfY29tcHJl c3NCb3VuZCh2YWxzaXplKTsKKwlzdHJ1Y3QgdmFybGVuYSAqY29tcHJlc3NlZDsKKwl2b2lkCSAg ICpkZXN0OworCXNpemVfdAkJY21wX3NpemUsCisJCQkJcmV0OworCVpTVERfQ0N0eCAgKmNjdHgg PSBaU1REX2NyZWF0ZUNDdHgoKTsKKwlaU1REX0NEaWN0ICpjZGljdCA9IE5VTEw7CisKKwlpZiAo IWNjdHgpCisJCWVyZXBvcnQoRVJST1IsIChlcnJtc2coIkZhaWxlZCB0byBjcmVhdGUgWlNURCBj b21wcmVzc2lvbiBjb250ZXh0IikpKTsKKworCXJldCA9IFpTVERfQ0N0eF9zZXRQYXJhbWV0ZXIo Y2N0eCwgWlNURF9jX2NvbXByZXNzaW9uTGV2ZWwsIHpzdGRfbGV2ZWwpOworCWlmIChaU1REX2lz RXJyb3IocmV0KSkKKwl7CisJCVpTVERfZnJlZUNDdHgoY2N0eCk7CisJCWVyZXBvcnQoRVJST1Is IChlcnJtc2coIkZhaWxlZCB0byByZWZlcmVuY2UgWlNURCBjb21wcmVzc2lvbiBsZXZlbDogJXMi LCBaU1REX2dldEVycm9yTmFtZShyZXQpKSkpOworCX0KKworCWlmIChkaWN0aWQgIT0gSW52YWxp ZERpY3RJZCkKKwl7CisJCWJ5dGVhCSAgICpkaWN0X2J5dGVhID0gZ2V0X3pzdGRfZGljdChkaWN0 aWQpOworCQljb25zdCB2b2lkICpkaWN0X2J1ZmZlciA9IFZBUkRBVEFfQU5ZKGRpY3RfYnl0ZWEp OworCQl1aW50MzIJCWRpY3Rfc2l6ZSA9IFZBUlNJWkVfQU5ZKGRpY3RfYnl0ZWEpIC0gVkFSSERS U1o7CisKKwkJY2RpY3QgPSBaU1REX2NyZWF0ZUNEaWN0KGRpY3RfYnVmZmVyLCBkaWN0X3NpemUs IHpzdGRfbGV2ZWwpOworCQlwZnJlZShkaWN0X2J5dGVhKTsKKworCQlpZiAoIWNkaWN0KQorCQl7 CisJCQlaU1REX2ZyZWVDQ3R4KGNjdHgpOworCQkJZXJlcG9ydChFUlJPUiwgKGVycm1zZygiRmFp bGVkIHRvIGNyZWF0ZSBaU1REIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkiKSkpOworCQl9CisKKwkJ cmV0ID0gWlNURF9DQ3R4X3JlZkNEaWN0KGNjdHgsIGNkaWN0KTsKKwkJaWYgKFpTVERfaXNFcnJv cihyZXQpKQorCQl7CisJCQlaU1REX2ZyZWVDRGljdChjZGljdCk7CisJCQlaU1REX2ZyZWVDQ3R4 KGNjdHgpOworCQkJZXJlcG9ydChFUlJPUiwgKGVycm1zZygiRmFpbGVkIHRvIHJlZmVyZW5jZSBa U1REIGRpY3Rpb25hcnk6ICVzIiwgWlNURF9nZXRFcnJvck5hbWUocmV0KSkpKTsKKwkJfQorCX0K KworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgY29tcHJlc3NlZCB2YXJsZW5hIChoZWFkZXIg KyBkYXRhKSAqLworCWNvbXByZXNzZWQgPSAoc3RydWN0IHZhcmxlbmEgKikgcGFsbG9jKG1heF9z aXplICsgVkFSSERSU1pfQ09NUFJFU1NFRF9FWFQpOworCWRlc3QgPSAoY2hhciAqKSBjb21wcmVz c2VkICsgVkFSSERSU1pfQ09NUFJFU1NFRF9FWFQ7CisKKwkvKiBDb21wcmVzcyB0aGUgZGF0YSAq LworCWNtcF9zaXplID0gWlNURF9jb21wcmVzczIoY2N0eCwgZGVzdCwgbWF4X3NpemUsIFZBUkRB VEFfQU5ZKHZhbHVlKSwgdmFsc2l6ZSk7CisKKwkvKiBDbGVhbnVwICovCisJWlNURF9mcmVlQ0Rp Y3QoY2RpY3QpOworCVpTVERfZnJlZUNDdHgoY2N0eCk7CisKKwlpZiAoWlNURF9pc0Vycm9yKGNt cF9zaXplKSkKKwl7CisJCXBmcmVlKGNvbXByZXNzZWQpOworCQllcmVwb3J0KEVSUk9SLCAoZXJy bXNnKCJaU1REIGNvbXByZXNzaW9uIGZhaWxlZDogJXMiLCBaU1REX2dldEVycm9yTmFtZShjbXBf c2l6ZSkpKSk7CisJfQorCisJLyoKKwkgKiBJZiBjb21wcmVzc2lvbiBkaWQgbm90IHJlZHVjZSBz aXplLCByZXR1cm4gTlVMTCBzbyB0aGF0IHRoZQorCSAqIHVuY29tcHJlc3NlZCBkYXRhIGlzIHN0 b3JlZAorCSAqLworCWlmIChjbXBfc2l6ZSA+IHZhbHNpemUpCisJeworCQlwZnJlZShjb21wcmVz c2VkKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogU2V0IHRoZSBjb21wcmVzc2VkIHNpemUg aW4gdGhlIHZhcmxlbmEgaGVhZGVyICovCisJU0VUX1ZBUlNJWkVfQ09NUFJFU1NFRChjb21wcmVz c2VkLCBjbXBfc2l6ZSArIFZBUkhEUlNaX0NPTVBSRVNTRURfRVhUKTsKKwlyZXR1cm4gY29tcHJl c3NlZDsKKworI2Vsc2UKKwlOT19NRVRIT0RfU1VQUE9SVCgienN0ZCIpOworCXJldHVybiBOVUxM OworI2VuZGlmCit9CisKK3N0cnVjdCB2YXJsZW5hICoKK3pzdGRfZGVjb21wcmVzc19kYXR1bShj b25zdCBzdHJ1Y3QgdmFybGVuYSAqdmFsdWUpCit7CisjaWZkZWYgVVNFX1pTVEQKKwl1aW50MzIJ CWFjdHVhbF9zaXplX2V4aGRyID0gVkFSREFUQV9DT01QUkVTU0VEX0dFVF9FWFRTSVpFKHZhbHVl KTsKKwl1aW50MzIJCWNtcF9zaXplX2V4aGRyID0gVkFSU0laRV80Qih2YWx1ZSkgLSBWQVJIRFJT Wl9DT01QUkVTU0VEX0VYVDsKKwlPaWQJCQlkaWN0aWQ7CisJc3RydWN0IHZhcmxlbmEgKnJlc3Vs dDsKKwlzaXplX3QJCXVuY21wX3NpemUsCisJCQkJcmV0OworCVpTVERfREN0eCAgKmRjdHggPSBa U1REX2NyZWF0ZURDdHgoKTsKKwlaU1REX0REaWN0ICpkZGljdCA9IE5VTEw7CisKKwlpZiAoIWRj dHgpCisJCWVyZXBvcnQoRVJST1IsIChlcnJtc2coIkZhaWxlZCB0byBjcmVhdGUgWlNURCBkZWNv bXByZXNzaW9uIGNvbnRleHQiKSkpOworCisJLyoKKwkgKiBFeHRyYWN0IHRoZSBkaWN0aW9uYXJ5 IElEIGZyb20gdGhlIGNvbXByZXNzZWQgZnJhbWUuIFRoaXMgZnVuY3Rpb24KKwkgKiByZWFkcyB0 aGUgZGljdGlvbmFyeSBJRCBmcm9tIHRoZSBmcmFtZSBoZWFkZXIuCisJICovCisJZGljdGlkID0g KE9pZCkgWlNURF9nZXREaWN0SURfZnJvbUZyYW1lKFZBUkRBVEFfNEJfQyh2YWx1ZSksIGNtcF9z aXplX2V4aGRyKTsKKworCWlmIChkaWN0aWQgIT0gSW52YWxpZERpY3RJZCkKKwl7CisJCWJ5dGVh CSAgICpkaWN0X2J5dGVhID0gZ2V0X3pzdGRfZGljdChkaWN0aWQpOworCQljb25zdCB2b2lkICpk aWN0X2J1ZmZlciA9IFZBUkRBVEFfQU5ZKGRpY3RfYnl0ZWEpOworCQl1aW50MzIJCWRpY3Rfc2l6 ZSA9IFZBUlNJWkVfQU5ZKGRpY3RfYnl0ZWEpIC0gVkFSSERSU1o7CisKKwkJZGRpY3QgPSBaU1RE X2NyZWF0ZUREaWN0KGRpY3RfYnVmZmVyLCBkaWN0X3NpemUpOworCQlwZnJlZShkaWN0X2J5dGVh KTsKKworCQlpZiAoIWRkaWN0KQorCQl7CisJCQlaU1REX2ZyZWVEQ3R4KGRjdHgpOworCQkJZXJl cG9ydChFUlJPUiwgKGVycm1zZygiRmFpbGVkIHRvIGNyZWF0ZSBaU1REIGNvbXByZXNzaW9uIGRp Y3Rpb25hcnkiKSkpOworCQl9CisKKwkJcmV0ID0gWlNURF9EQ3R4X3JlZkREaWN0KGRjdHgsIGRk aWN0KTsKKwkJaWYgKFpTVERfaXNFcnJvcihyZXQpKQorCQl7CisJCQlaU1REX2ZyZWVERGljdChk ZGljdCk7CisJCQlaU1REX2ZyZWVEQ3R4KGRjdHgpOworCQkJZXJlcG9ydChFUlJPUiwgKGVycm1z ZygiRmFpbGVkIHRvIHJlZmVyZW5jZSBaU1REIGRpY3Rpb25hcnk6ICVzIiwgWlNURF9nZXRFcnJv ck5hbWUocmV0KSkpKTsKKwkJfQorCX0KKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgdW5j b21wcmVzc2VkIGRhdGEgKi8KKwlyZXN1bHQgPSAoc3RydWN0IHZhcmxlbmEgKikgcGFsbG9jKGFj dHVhbF9zaXplX2V4aGRyICsgVkFSSERSU1opOworCisJdW5jbXBfc2l6ZSA9IFpTVERfZGVjb21w cmVzc0RDdHgoZGN0eCwKKwkJCQkJCQkJCSBWQVJEQVRBKHJlc3VsdCksCisJCQkJCQkJCQkgYWN0 dWFsX3NpemVfZXhoZHIsCisJCQkJCQkJCQkgVkFSREFUQV80Ql9DKHZhbHVlKSwKKwkJCQkJCQkJ CSBjbXBfc2l6ZV9leGhkcik7CisKKwkvKiBDbGVhbnVwICovCisJWlNURF9mcmVlRERpY3QoZGRp Y3QpOworCVpTVERfZnJlZURDdHgoZGN0eCk7CisKKwlpZiAoWlNURF9pc0Vycm9yKHVuY21wX3Np emUpKQorCXsKKwkJcGZyZWUocmVzdWx0KTsKKwkJZXJlcG9ydChFUlJPUiwgKGVycm1zZygiWlNU RCBkZWNvbXByZXNzaW9uIGZhaWxlZDogJXMiLCBaU1REX2dldEVycm9yTmFtZSh1bmNtcF9zaXpl KSkpKTsKKwl9CisKKwkvKiBTZXQgZmluYWwgc2l6ZSBpbiB0aGUgdmFybGVuYSBoZWFkZXIgKi8K KwlTRVRfVkFSU0laRShyZXN1bHQsIHVuY21wX3NpemUgKyBWQVJIRFJTWik7CisJcmV0dXJuIHJl c3VsdDsKKworI2Vsc2UKKwlOT19NRVRIT0RfU1VQUE9SVCgienN0ZCIpOworCXJldHVybiBOVUxM OworI2VuZGlmCit9CisKKy8qIERlY29tcHJlc3MgYSBzbGljZSBvZiB0aGUgZGF0dW0gdXNpbmcg dGhlIHN0cmVhbWluZyBBUEkgYW5kIG9wdGlvbmFsIGRpY3Rpb25hcnkgKi8KK3N0cnVjdCB2YXJs ZW5hICoKK3pzdGRfZGVjb21wcmVzc19kYXR1bV9zbGljZShjb25zdCBzdHJ1Y3QgdmFybGVuYSAq dmFsdWUsIGludDMyIHNsaWNlbGVuZ3RoKQoreworI2lmZGVmIFVTRV9aU1RECisJc3RydWN0IHZh cmxlbmEgKnJlc3VsdDsKKwlaU1REX2luQnVmZmVyIGluQnVmOworCVpTVERfb3V0QnVmZmVyIG91 dEJ1ZjsKKwlaU1REX0RDdHggICpkY3R4ID0gWlNURF9jcmVhdGVEQ3R4KCk7CisJWlNURF9ERGlj dCAqZGRpY3QgPSBOVUxMOworCU9pZAkJCWRpY3RpZDsKKwl1aW50MzIJCWNtcF9zaXplX2V4aGRy ID0gVkFSU0laRV80Qih2YWx1ZSkgLSBWQVJIRFJTWl9DT01QUkVTU0VEX0VYVDsKKwlzaXplX3QJ CXJldDsKKworCWlmIChkY3R4ID09IE5VTEwpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgY3Jl YXRlIHpzdGQgZGVjb21wcmVzc2lvbiBjb250ZXh0Iik7CisKKwkvKiBFeHRyYWN0IHRoZSBkaWN0 aW9uYXJ5IElEIGZyb20gdGhlIGNvbXByZXNzZWQgZnJhbWUgKi8KKwlkaWN0aWQgPSAoT2lkKSBa U1REX2dldERpY3RJRF9mcm9tRnJhbWUoVkFSREFUQV80Ql9DKHZhbHVlKSwgY21wX3NpemVfZXho ZHIpOworCisJaWYgKGRpY3RpZCAhPSBJbnZhbGlkRGljdElkKQorCXsKKwkJYnl0ZWEJICAgKmRp Y3RfYnl0ZWEgPSBnZXRfenN0ZF9kaWN0KGRpY3RpZCk7CisJCWNvbnN0IHZvaWQgKmRpY3RfYnVm ZmVyID0gVkFSREFUQV9BTlkoZGljdF9ieXRlYSk7CisJCXVpbnQzMgkJZGljdF9zaXplID0gVkFS U0laRV9BTlkoZGljdF9ieXRlYSkgLSBWQVJIRFJTWjsKKworCQkvKiBDcmVhdGUgYW5kIGJpbmQg dGhlIGRpY3Rpb25hcnkgdG8gdGhlIGRlY29tcHJlc3Npb24gY29udGV4dCAqLworCQlkZGljdCA9 IFpTVERfY3JlYXRlRERpY3QoZGljdF9idWZmZXIsIGRpY3Rfc2l6ZSk7CisJCXBmcmVlKGRpY3Rf Ynl0ZWEpOworCisJCWlmICghZGRpY3QpCisJCXsKKwkJCVpTVERfZnJlZURDdHgoZGN0eCk7CisJ CQllcmVwb3J0KEVSUk9SLCAoZXJybXNnKCJGYWlsZWQgdG8gY3JlYXRlIFpTVEQgY29tcHJlc3Np b24gZGljdGlvbmFyeSIpKSk7CisJCX0KKworCQlyZXQgPSBaU1REX0RDdHhfcmVmRERpY3QoZGN0 eCwgZGRpY3QpOworCQlpZiAoWlNURF9pc0Vycm9yKHJldCkpCisJCXsKKwkJCVpTVERfZnJlZURE aWN0KGRkaWN0KTsKKwkJCVpTVERfZnJlZURDdHgoZGN0eCk7CisJCQllcmVwb3J0KEVSUk9SLCAo ZXJybXNnKCJGYWlsZWQgdG8gcmVmZXJlbmNlIFpTVEQgZGljdGlvbmFyeTogJXMiLCBaU1REX2dl dEVycm9yTmFtZShyZXQpKSkpOworCQl9CisJfQorCisJaW5CdWYuc3JjID0gKGNoYXIgKikgdmFs dWUgKyBWQVJIRFJTWl9DT01QUkVTU0VEX0VYVDsKKwlpbkJ1Zi5zaXplID0gVkFSU0laRSh2YWx1 ZSkgLSBWQVJIRFJTWl9DT01QUkVTU0VEX0VYVDsKKwlpbkJ1Zi5wb3MgPSAwOworCisJcmVzdWx0 ID0gKHN0cnVjdCB2YXJsZW5hICopIHBhbGxvYyhzbGljZWxlbmd0aCArIFZBUkhEUlNaKTsKKwlv dXRCdWYuZHN0ID0gKGNoYXIgKikgcmVzdWx0ICsgVkFSSERSU1o7CisJb3V0QnVmLnNpemUgPSBz bGljZWxlbmd0aDsKKwlvdXRCdWYucG9zID0gMDsKKworCS8qIENvbW1vbiBkZWNvbXByZXNzaW9u IGxvb3AgKi8KKwl3aGlsZSAoaW5CdWYucG9zIDwgaW5CdWYuc2l6ZSAmJiBvdXRCdWYucG9zIDwg b3V0QnVmLnNpemUpCisJeworCQlyZXQgPSBaU1REX2RlY29tcHJlc3NTdHJlYW0oZGN0eCwgJm91 dEJ1ZiwgJmluQnVmKTsKKwkJaWYgKFpTVERfaXNFcnJvcihyZXQpKQorCQl7CisJCQlwZnJlZShy ZXN1bHQpOworCQkJWlNURF9mcmVlRERpY3QoZGRpY3QpOworCQkJWlNURF9mcmVlREN0eChkY3R4 KTsKKwkJCWVsb2coRVJST1IsICJ6c3RkIGRlY29tcHJlc3Npb24gZmFpbGVkOiAlcyIsIFpTVERf Z2V0RXJyb3JOYW1lKHJldCkpOworCQl9CisJfQorCisJLyogQ2xlYW51cCAqLworCVpTVERfZnJl ZUREaWN0KGRkaWN0KTsKKwlaU1REX2ZyZWVEQ3R4KGRjdHgpOworCisJQXNzZXJ0KG91dEJ1Zi5z aXplID09IHNsaWNlbGVuZ3RoICYmIG91dEJ1Zi5wb3MgPT0gc2xpY2VsZW5ndGgpOworCVNFVF9W QVJTSVpFKHJlc3VsdCwgb3V0QnVmLnBvcyArIFZBUkhEUlNaKTsKKwlyZXR1cm4gcmVzdWx0Owor I2Vsc2UKKwlOT19NRVRIT0RfU1VQUE9SVCgienN0ZCIpOworCXJldHVybiBOVUxMOworI2VuZGlm Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2ludGVybmFs cy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYwppbmRleCA3 ZDhiZTgzNDZjLi5jOGEwM2E2YWFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3RvYXN0X2ludGVybmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdG9h c3RfaW50ZXJuYWxzLmMKQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIGJvb2wgdG9hc3RpZF92YWx1 ZWlkX2V4aXN0cyhPaWQgdG9hc3RyZWxpZCwgT2lkIHZhbHVlaWQpOwogICogLS0tLS0tLS0tLQog ICovCiBEYXR1bQotdG9hc3RfY29tcHJlc3NfZGF0dW0oRGF0dW0gdmFsdWUsIGNoYXIgY21ldGhv ZCkKK3RvYXN0X2NvbXByZXNzX2RhdHVtKERhdHVtIHZhbHVlLCBjaGFyIGNtZXRob2QsIE9pZCB6 c3RkX2RpY3RpZCwgaW50IHpzdGRfbGV2ZWwpCiB7CiAJc3RydWN0IHZhcmxlbmEgKnRtcCA9IE5V TEw7CiAJaW50MzIJCXZhbHNpemU7CkBAIC03MSw2ICs3MSwxMCBAQCB0b2FzdF9jb21wcmVzc19k YXR1bShEYXR1bSB2YWx1ZSwgY2hhciBjbWV0aG9kKQogCQkJdG1wID0gbHo0X2NvbXByZXNzX2Rh dHVtKChjb25zdCBzdHJ1Y3QgdmFybGVuYSAqKSB2YWx1ZSk7CiAJCQljbWlkID0gVE9BU1RfTFo0 X0NPTVBSRVNTSU9OX0lEOwogCQkJYnJlYWs7CisJCWNhc2UgVE9BU1RfWlNURF9DT01QUkVTU0lP TjoKKwkJCXRtcCA9IHpzdGRfY29tcHJlc3NfZGF0dW0oKGNvbnN0IHN0cnVjdCB2YXJsZW5hICop IHZhbHVlLCB6c3RkX2RpY3RpZCwgenN0ZF9sZXZlbCk7CisJCQljbWlkID0gVE9BU1RfWlNURF9D T01QUkVTU0lPTl9JRDsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgImlu dmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICVjIiwgY21ldGhvZCk7CiAJfQpAQCAtMTc2LDYgKzE4 MCw3IEBAIHRvYXN0X3NhdmVfZGF0dW0oUmVsYXRpb24gcmVsLCBEYXR1bSB2YWx1ZSwKIAkJZGF0 YV90b2RvID0gVkFSU0laRV9TSE9SVChkdmFsKSAtIFZBUkhEUlNaX1NIT1JUOwogCQl0b2FzdF9w b2ludGVyLnZhX3Jhd3NpemUgPSBkYXRhX3RvZG8gKyBWQVJIRFJTWjsJLyogYXMgaWYgbm90IHNo b3J0ICovCiAJCXRvYXN0X3BvaW50ZXIudmFfZXh0aW5mbyA9IGRhdGFfdG9kbzsKKwkJdG9hc3Rf cG9pbnRlci52YV9jbXBfYWxnID0gMDsKIAl9CiAJZWxzZSBpZiAoVkFSQVRUX0lTX0NPTVBSRVNT RUQoZHZhbCkpCiAJewpAQCAtMTk2LDYgKzIwMSw3IEBAIHRvYXN0X3NhdmVfZGF0dW0oUmVsYXRp b24gcmVsLCBEYXR1bSB2YWx1ZSwKIAkJZGF0YV90b2RvID0gVkFSU0laRShkdmFsKSAtIFZBUkhE UlNaOwogCQl0b2FzdF9wb2ludGVyLnZhX3Jhd3NpemUgPSBWQVJTSVpFKGR2YWwpOwogCQl0b2Fz dF9wb2ludGVyLnZhX2V4dGluZm8gPSBkYXRhX3RvZG87CisJCXRvYXN0X3BvaW50ZXIudmFfY21w X2FsZyA9IDA7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJs ZS90b2FzdF9oZWxwZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90b2FzdF9oZWxwZXIu YwppbmRleCBiNjBmYWIwYTRkLi5iYmE5MDA5N2QzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdGFibGUvdG9hc3RfaGVscGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxl L3RvYXN0X2hlbHBlci5jCkBAIC0xOSw3ICsxOSw4IEBACiAjaW5jbHVkZSAiYWNjZXNzL3RvYXN0 X2ludGVybmFscy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZV9kLmgiCiAjaW5jbHVkZSAi dmFyYXR0LmgiCi0KKyNpbmNsdWRlICJ1dGlscy9hdHRvcHRjYWNoZS5oIgorI2luY2x1ZGUgImFj Y2Vzcy90b2FzdF9jb21wcmVzc2lvbi5oIgogCiAvKgogICogUHJlcGFyZSB0byBUT0FTVCBhIHR1 cGxlLgpAQCAtNTUsNiArNTYsMTggQEAgdG9hc3RfdHVwbGVfaW5pdChUb2FzdFR1cGxlQ29udGV4 dCAqdHRjKQogCQl0dGMtPnR0Y19hdHRyW2ldLnRhaV9jb2xmbGFncyA9IDA7CiAJCXR0Yy0+dHRj X2F0dHJbaV0udGFpX29sZGV4dGVybmFsID0gTlVMTDsKIAkJdHRjLT50dGNfYXR0cltpXS50YWlf Y29tcHJlc3Npb24gPSBhdHQtPmF0dGNvbXByZXNzaW9uOworCQl0dGMtPnR0Y19hdHRyW2ldLnpz dGRfZGljdGlkID0gSW52YWxpZERpY3RJZDsKKwkJdHRjLT50dGNfYXR0cltpXS56c3RkX2xldmVs ID0gREVGQVVMVF9aU1REX0NNUF9MRVZFTDsKKwkJaWYgKGF0dC0+YXR0Y29tcHJlc3Npb24gPT0g VE9BU1RfWlNURF9DT01QUkVTU0lPTikKKwkJeworCQkJQXR0cmlidXRlT3B0cyAqYW9wdCA9IGdl dF9hdHRyaWJ1dGVfb3B0aW9ucyhhdHQtPmF0dHJlbGlkLCBhdHQtPmF0dG51bSk7CisKKwkJCWlm IChhb3B0KQorCQkJeworCQkJCXR0Yy0+dHRjX2F0dHJbaV0uenN0ZF9kaWN0aWQgPSAoT2lkKSBh b3B0LT56c3RkX2RpY3RpZDsKKwkJCQl0dGMtPnR0Y19hdHRyW2ldLnpzdGRfbGV2ZWwgPSBhb3B0 LT56c3RkX2NtcF9sZXZlbDsKKwkJCX0KKwkJfQogCiAJCWlmICh0dGMtPnR0Y19vbGR2YWx1ZXMg IT0gTlVMTCkKIAkJewpAQCAtMjMwLDcgKzI0Myw3IEBAIHRvYXN0X3R1cGxlX3RyeV9jb21wcmVz c2lvbihUb2FzdFR1cGxlQ29udGV4dCAqdHRjLCBpbnQgYXR0cmlidXRlKQogCURhdHVtCQluZXdf dmFsdWU7CiAJVG9hc3RBdHRySW5mbyAqYXR0ciA9ICZ0dGMtPnR0Y19hdHRyW2F0dHJpYnV0ZV07 CiAKLQluZXdfdmFsdWUgPSB0b2FzdF9jb21wcmVzc19kYXR1bSgqdmFsdWUsIGF0dHItPnRhaV9j b21wcmVzc2lvbik7CisJbmV3X3ZhbHVlID0gdG9hc3RfY29tcHJlc3NfZGF0dW0oKnZhbHVlLCBh dHRyLT50YWlfY29tcHJlc3Npb24sIGF0dHItPnpzdGRfZGljdGlkLCBhdHRyLT56c3RkX2xldmVs KTsKIAogCWlmIChEYXR1bUdldFBvaW50ZXIobmV3X3ZhbHVlKSAhPSBOVUxMKQogCXsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jYXRhbG9n L01ha2VmaWxlCmluZGV4IGMwOTAwOTRlZDAuLjI4MmFmYmNlZjUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9NYWtlZmls ZQpAQCAtNDYsNyArNDYsOCBAQCBPQkpTID0gXAogCXBnX3N1YnNjcmlwdGlvbi5vIFwKIAlwZ190 eXBlLm8gXAogCXN0b3JhZ2UubyBcCi0JdG9hc3RpbmcubworCXRvYXN0aW5nLm8gXAorCXBnX3pz dGRfZGljdGlvbmFyaWVzLm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2Nv bW1vbi5tawogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvaGVhcC5jCmluZGV4IGJkMzU1NGMwYmYuLjQ5Mzk2M2IxYjggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvaGVhcC5jCkBAIC0xMDcxLDcgKzEwNzEsOSBAQCBBZGROZXdSZWxhdGlvblR5cGUoY29uc3Qg Y2hhciAqdHlwZU5hbWUsCiAJCQkJICAgLTEsCQkJLyogdHlwbW9kICovCiAJCQkJICAgMCwJCQkv KiBhcnJheSBkaW1lbnNpb25zIGZvciB0eXBCYXNlVHlwZSAqLwogCQkJCSAgIGZhbHNlLAkJLyog VHlwZSBOT1QgTlVMTCAqLwotCQkJCSAgIEludmFsaWRPaWQpOyAvKiByb3d0eXBlcyBuZXZlciBo YXZlIGEgY29sbGF0aW9uICovCisJCQkJICAgSW52YWxpZE9pZCwJLyogcm93dHlwZXMgbmV2ZXIg aGF2ZSBhIGNvbGxhdGlvbiAqLworCQkJCSAgIEludmFsaWRPaWQJLyogZ2VuZXJhdGUgZGljdGlv bmFyeSBwcm9jZWR1cmUgLSBkZWZhdWx0ICovCisJCSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzk0LDcgKzEzOTYsOSBAQCBoZWFwX2NyZWF0ZV93aXRo X2NhdGFsb2coY29uc3QgY2hhciAqcmVsbmFtZSwKIAkJCQkgICAtMSwJCQkvKiB0eXBtb2QgKi8K IAkJCQkgICAwLAkJCS8qIGFycmF5IGRpbWVuc2lvbnMgZm9yIHR5cEJhc2VUeXBlICovCiAJCQkJ ICAgZmFsc2UsCQkvKiBUeXBlIE5PVCBOVUxMICovCi0JCQkJICAgSW52YWxpZE9pZCk7IC8qIHJv d3R5cGVzIG5ldmVyIGhhdmUgYSBjb2xsYXRpb24gKi8KKwkJCQkgICBJbnZhbGlkT2lkLAkvKiBy b3d0eXBlcyBuZXZlciBoYXZlIGEgY29sbGF0aW9uICovCisJCQkJICAgSW52YWxpZE9pZAkvKiBn ZW5lcmF0ZSBkaWN0aW9uYXJ5IHByb2NlZHVyZSAtIGRlZmF1bHQgKi8KKwkJCSk7CiAKIAkJcGZy ZWUocmVsYXJyYXluYW1lKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL21l c29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9tZXNvbi5idWlsZAppbmRleCAxOTU4ZWE5 MjM4Li44ZjA0MTMxODljIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL21lc29uLmJ1 aWxkCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvbWVzb24uYnVpbGQKQEAgLTM0LDYgKzM0LDcg QEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAncGdfdHlwZS5jJywKICAgJ3N0b3JhZ2Uu YycsCiAgICd0b2FzdGluZy5jJywKKyAgJ3BnX3pzdGRfZGljdGlvbmFyaWVzLmMnLAogKQogCiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfdHlwZS5jIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ190eXBlLmMKaW5kZXggYjM2ZjgxYWZiOS4uYmJlZDhmNjRhZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ190eXBlLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ190eXBlLmMKQEAgLTEyMCw2ICsxMjAsNyBAQCBUeXBlU2hlbGxNYWtlKGNvbnN0IGNoYXIg KnR5cGVOYW1lLCBPaWQgdHlwZU5hbWVzcGFjZSwgT2lkIG93bmVySWQpCiAJdmFsdWVzW0FudW1f cGdfdHlwZV90eXB0eXBtb2QgLSAxXSA9IEludDMyR2V0RGF0dW0oLTEpOwogCXZhbHVlc1tBbnVt X3BnX3R5cGVfdHlwbmRpbXMgLSAxXSA9IEludDMyR2V0RGF0dW0oMCk7CiAJdmFsdWVzW0FudW1f cGdfdHlwZV90eXBjb2xsYXRpb24gLSAxXSA9IE9iamVjdElkR2V0RGF0dW0oSW52YWxpZE9pZCk7 CisJdmFsdWVzW0FudW1fcGdfdHlwZV90eXBlYnVpbGR6c3RkZGljdGlvbmFyeSAtIDFdID0gT2Jq ZWN0SWRHZXREYXR1bShJbnZhbGlkT2lkKTsKIAludWxsc1tBbnVtX3BnX3R5cGVfdHlwZGVmYXVs dGJpbiAtIDFdID0gdHJ1ZTsKIAludWxsc1tBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdCAtIDFdID0g dHJ1ZTsKIAludWxsc1tBbnVtX3BnX3R5cGVfdHlwYWNsIC0gMV0gPSB0cnVlOwpAQCAtMjIzLDcg KzIyNCw4IEBAIFR5cGVDcmVhdGUoT2lkIG5ld1R5cGVPaWQsCiAJCSAgIGludDMyIHR5cGVNb2Qs CiAJCSAgIGludDMyIHR5cE5EaW1zLAkJLyogQXJyYXkgZGltZW5zaW9ucyBmb3IgYmFzZVR5cGUg Ki8KIAkJICAgYm9vbCB0eXBlTm90TnVsbCwKLQkJICAgT2lkIHR5cGVDb2xsYXRpb24pCisJCSAg IE9pZCB0eXBlQ29sbGF0aW9uLAorCQkgICBPaWQgZ2VuZXJhdGVEaWN0aW9uYXJ5UHJvY2VkdXJl KQogewogCVJlbGF0aW9uCXBnX3R5cGVfZGVzYzsKIAlPaWQJCQl0eXBlT2JqZWN0SWQ7CkBAIC0z NzgsNiArMzgwLDcgQEAgVHlwZUNyZWF0ZShPaWQgbmV3VHlwZU9pZCwKIAl2YWx1ZXNbQW51bV9w Z190eXBlX3R5cHR5cG1vZCAtIDFdID0gSW50MzJHZXREYXR1bSh0eXBlTW9kKTsKIAl2YWx1ZXNb QW51bV9wZ190eXBlX3R5cG5kaW1zIC0gMV0gPSBJbnQzMkdldERhdHVtKHR5cE5EaW1zKTsKIAl2 YWx1ZXNbQW51bV9wZ190eXBlX3R5cGNvbGxhdGlvbiAtIDFdID0gT2JqZWN0SWRHZXREYXR1bSh0 eXBlQ29sbGF0aW9uKTsKKwl2YWx1ZXNbQW51bV9wZ190eXBlX3R5cGVidWlsZHpzdGRkaWN0aW9u YXJ5IC0gMV0gPSBPYmplY3RJZEdldERhdHVtKGdlbmVyYXRlRGljdGlvbmFyeVByb2NlZHVyZSk7 CiAKIAkvKgogCSAqIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgYmluYXJ5IHZhbHVlIGZvciB0aGlz IHR5cGUuICBDaGVjayBmb3IgbnVsbHMgb2YKQEAgLTY3OSw2ICs2ODIsMTIgQEAgR2VuZXJhdGVU eXBlRGVwZW5kZW5jaWVzKEhlYXBUdXBsZSB0eXBlVHVwbGUsCiAJCWFkZF9leGFjdF9vYmplY3Rf YWRkcmVzcygmcmVmZXJlbmNlZCwgYWRkcnNfbm9ybWFsKTsKIAl9CiAKKwlpZiAoT2lkSXNWYWxp ZCh0eXBlRm9ybS0+dHlwZWJ1aWxkenN0ZGRpY3Rpb25hcnkpKQorCXsKKwkJT2JqZWN0QWRkcmVz c1NldChyZWZlcmVuY2VkLCBQcm9jZWR1cmVSZWxhdGlvbklkLCB0eXBlRm9ybS0+dHlwZWJ1aWxk enN0ZGRpY3Rpb25hcnkpOworCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3MoJnJlZmVyZW5jZWQs IGFkZHJzX25vcm1hbCk7CisJfQorCiAJaWYgKE9pZElzVmFsaWQodHlwZUZvcm0tPnR5cHN1YnNj cmlwdCkpCiAJewogCQlPYmplY3RBZGRyZXNzU2V0KHJlZmVyZW5jZWQsIFByb2NlZHVyZVJlbGF0 aW9uSWQsIHR5cGVGb3JtLT50eXBzdWJzY3JpcHQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ196c3RkX2RpY3Rpb25hcmllcy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ196 c3RkX2RpY3Rpb25hcmllcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmY1MmY5ZGVjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3pz dGRfZGljdGlvbmFyaWVzLmMKQEAgLTAsMCArMSw2MDEgQEAKKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKKyNpbmNs dWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKKyNpbmNs dWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvZGVwZW5kZW5jeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXhpbmcu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzX2QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X3pzdGRfZGljdGlvbmFyaWVzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ196c3RkX2RpY3Rpb25h cmllc19kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0 aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMv c3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCisjaW5jbHVkZSAiYWNjZXNz L3RvYXN0X2NvbXByZXNzaW9uLmgiCisjaW5jbHVkZSAidXRpbHMvYXR0b3B0Y2FjaGUuaCIKKyNp bmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgorI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNp bmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9ucy5o IgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgorI2lu Y2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWls cy5oIgorI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCisjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgorI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0 LmgiCisKKyNpZmRlZiBVU0VfWlNURAorI2luY2x1ZGUgPHpzdGQuaD4KKyNpbmNsdWRlIDx6ZGlj dC5oPgorI2VuZGlmCisKKyNkZWZpbmUgVEFSR19ST1dTIDEwMDAKKwordHlwZWRlZiBzdHJ1Y3Qg U2FtcGxlRW50cnkgU2FtcGxlRW50cnk7Cit0eXBlZGVmIHN0cnVjdCBTYW1wbGVDb2xsZWN0b3Ig U2FtcGxlQ29sbGVjdG9yOworCisvKiBTdHJ1Y3R1cmUgdG8gc3RvcmUgYSBzYW1wbGUgZW50cnkg Ki8KK3N0cnVjdCBTYW1wbGVFbnRyeQoreworCXZvaWQJICAgKmRhdGE7CQkJLyogUG9pbnRlciB0 byBzYW1wbGUgZGF0YSAqLworCXNpemVfdAkJc2l6ZTsJCQkvKiBTaXplIG9mIHRoZSBzYW1wbGUg Ki8KK307CisKKy8qIFN0cnVjdHVyZSB0byBjb2xsZWN0IHNhbXBsZXMgYWxvbmcgd2l0aCBhIGhh c2ggdGFibGUgZm9yIGRlZHVwbGljYXRpb24gKi8KK3N0cnVjdCBTYW1wbGVDb2xsZWN0b3IKK3sK KwlTYW1wbGVFbnRyeSAqc2FtcGxlczsJCS8qIER5bmFtaWMgYXJyYXkgb2YgcG9pbnRlcnMgdG8g U2FtcGxlRW50cnkgKi8KKwlpbnQJCQlzYW1wbGVfY291bnQ7CS8qIE51bWJlciBvZiBjb2xsZWN0 ZWQgc2FtcGxlcyAqLworfTsKKworc3RhdGljIGJvb2wgYnVpbGRfenN0ZF9kaWN0aW9uYXJ5X2lu dGVybmFsKE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRubyk7CitzdGF0aWMgT2lkCUdldE5ld0Rp Y3RJZChSZWxhdGlvbiByZWxhdGlvbiwgT2lkIGluZGV4SWQsIEF0dHJOdW1iZXIgZGljdElkQ29s dW1uKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICogWnN0YW5kYXJkIGRpY3Rpb25hcnkgdHJhaW5pbmcgcmVs YXRlZCBtZXRob2RzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIGJ1aWxkX3pzdGRfZGljdGlv bmFyeV9pbnRlcm5hbAorICogICAxKSBWYWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiAocmVsaWQsIGF0 dG5vKSBjYW4gaGF2ZSBhIFpzdGQgY29tcHJlc3Npb24gZW5hYmxlZCBvbiBoZWFwIHJlbGF0aW9u CisgKiAgIDIpIENhbGwgdGhlIHR5cGUtc3BlY2lmaWMgZGljdGlvbmFyeSBidWlsZGVyCisgKiAg IDMpIFRyYWluIGEgZGljdGlvbmFyeSB2aWEgWkRJQ1RfdHJhaW5Gcm9tQnVmZmVyKCkKKyAqICAg NCkgSW5zZXJ0IGRpY3Rpb25hcnkgaW50byBwZ196c3RkX2RpY3Rpb25hcmllcworICogICA1KSBV cGRhdGUgcGdfYXR0cmlidXRlLmF0dG9wdGlvbnMgd2l0aCBkaWN0aWQKKyAqLworcGdfYXR0cmli dXRlX3VudXNlZCgpCitzdGF0aWMgYm9vbAorYnVpbGRfenN0ZF9kaWN0aW9uYXJ5X2ludGVybmFs KE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRubykKK3sKKyNpZmRlZiBVU0VfWlNURAorCVJlbGF0 aW9uCWNhdGFsb2dSZWw7CisJVHVwbGVEZXNjCWNhdFR1cERlc2M7CisJT2lkCQkJZGljdGlkOwor CVJlbGF0aW9uCXJlbDsKKwlUdXBsZURlc2MJdHVwbGVEZXNjOworCUZvcm1fcGdfYXR0cmlidXRl IGF0dDsKKwlBdHRyaWJ1dGVPcHRzICphdHRvcHQ7CisJSGVhcFR1cGxlCXR5cGVUdXA7CisJRm9y bV9wZ190eXBlIHR5cGVGb3JtOworCU9pZAkJCWJhc2VUeXBlT2lkOworCU9pZAkJCXRyYWluX2Z1 bmM7CisJRGF0dW0JCWRpY3REYXR1bTsKKwlac3RkVHJhaW5pbmdEYXRhICpkaWN0OworCWNoYXIJ ICAgKnNhbXBsZXNfYnVmZmVyOworCXNpemVfdAkgICAqc2FtcGxlX3NpemVzOworCWludAkJCW5p dGVtczsKKwl1aW50MzIJCWRpY3Rpb25hcnlfc2l6ZTsKKwl2b2lkCSAgICpkaWN0X2RhdGE7CisJ c2l6ZV90CQlkaWN0X3NpemU7CisKKwkvKiAtLS0tCisgICAgICogMSkgT3BlbiB1c2VyIHJlbGF0 aW9uIGp1c3QgdG8gdmVyaWZ5IGl0J3MgYSBub3JtYWwgdGFibGUgYW5kIGhhcyBac3RkIGNvbXBy ZXNzaW9uCisgICAgICogLS0tLQorICAgICAqLworCXJlbCA9IHRhYmxlX29wZW4ocmVsaWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUkVM QVRJT04pCisJeworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCXJldHVy biBmYWxzZTsJCQkvKiBub3QgYSByZWd1bGFyIHRhYmxlICovCisJfQorCisJLyogSWYgdGhlIGNv bHVtbiBkb2Vzbid0IHVzZSBac3RkLCBub3RoaW5nIHRvIGRvICovCisJdHVwbGVEZXNjID0gUmVs YXRpb25HZXREZXNjcihyZWwpOworCWF0dCA9IFR1cGxlRGVzY0F0dHIodHVwbGVEZXNjLCBhdHRu byAtIDEpOworCWlmIChhdHQtPmF0dGNvbXByZXNzaW9uICE9IFRPQVNUX1pTVERfQ09NUFJFU1NJ T04pCisJeworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwkvKiBDaGVjayBhdHRvcHRpb25zIGZvciB1c2VyLXJlcXVlc3RlZCBkaWN0 aW9uYXJ5IHNpemUsIGV0Yy4gKi8KKwlhdHRvcHQgPSBnZXRfYXR0cmlidXRlX29wdGlvbnMocmVs aWQsIGF0dG5vKTsKKwlpZiAoYXR0b3B0ICYmIGF0dG9wdC0+enN0ZF9kaWN0X3NpemUgPT0gMCkK Kwl7CisJCS8qIHVzZXIgZXhwbGljaXRseSBzYXlzICJubyBkaWN0aW9uYXJ5IG5lZWRlZCIgKi8K KwkJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJLyoKKwkgKiAyKSBMb29rIHVwIHRoZSB0eXBlJ3MgY3VzdG9tIGRpY3Rpb25hcnkgYnVp bGRlciBmdW5jdGlvbiBXZSdsbCBjYWxsIGl0CisJICogdG8gZ2V0IHNhbXBsZSBkYXRhLiBUaGVu IHdlIGNhbiBjbG9zZSAncmVsJyBiZWNhdXNlIHdlIGRvbid0IG5lZWQgaXQKKwkgKiBvcGVuIHRv IGRvIHRoZSBhY3R1YWwgWmRpY3QgdHJhaW5pbmcuCisJICovCisJdHlwZVR1cCA9IFNlYXJjaFN5 c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGF0dC0+YXR0dHlwaWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHlwZVR1cCkpCisJeworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vz c1NoYXJlTG9jayk7CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBl ICV1IiwgYXR0LT5hdHR0eXBpZCk7CisJfQorCXR5cGVGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VU U1RSVUNUKHR5cGVUdXApOworCisJaWYgKHR5cGVGb3JtLT50eXBsZW4gIT0gLTEpCisJeworCQlS ZWxlYXNlU3lzQ2FjaGUodHlwZVR1cCk7CisJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIEdldCB0aGUgYmFzZSB0eXBlICovCisJ YmFzZVR5cGVPaWQgPSBnZXRfZWxlbWVudF90eXBlKHR5cGVGb3JtLT5vaWQpOworCXRyYWluX2Z1 bmMgPSBJbnZhbGlkT2lkOworCisJaWYgKE9pZElzVmFsaWQoYmFzZVR5cGVPaWQpKQorCXsKKwkJ SGVhcFR1cGxlCWJhc2VUeXBlVHVwOworCQlGb3JtX3BnX3R5cGUgYmFzZVR5cGVGb3JtOworCisJ CS8qIEl0J3MgYW4gYXJyYXkgdHlwZTogZ2V0IHRoZSBiYXNlIHR5cGUncyB0cmFpbmluZyBmdW5j dGlvbiAqLworCQliYXNlVHlwZVR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJ ZEdldERhdHVtKGJhc2VUeXBlT2lkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChiYXNlVHlw ZVR1cCkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJDYWNoZSBsb29rdXAgZmFp bGVkIGZvciBiYXNlIHR5cGUgJXUiLCBiYXNlVHlwZU9pZCkpKTsKKworCQliYXNlVHlwZUZvcm0g PSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoYmFzZVR5cGVUdXApOworCQl0cmFpbl9mdW5jID0g YmFzZVR5cGVGb3JtLT50eXBlYnVpbGR6c3RkZGljdGlvbmFyeTsKKwkJUmVsZWFzZVN5c0NhY2hl KGJhc2VUeXBlVHVwKTsKKwl9CisJZWxzZQorCQl0cmFpbl9mdW5jID0gdHlwZUZvcm0tPnR5cGVi dWlsZHpzdGRkaWN0aW9uYXJ5OworCisJLyogSWYgdGhlIHR5cGUgZG9lcyBub3Qgc3VwcGx5IGEg YnVpbGRlciwgc2tpcCAqLworCWlmICghT2lkSXNWYWxpZCh0cmFpbl9mdW5jKSkKKwl7CisJCVJl bGVhc2VTeXNDYWNoZSh0eXBlVHVwKTsKKwkJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogQ2FsbCB0aGUgdHlwZS1zcGVjaWZpYyBi dWlsZGVyLiBJdCBzaG91bGQgcmV0dXJuIFpzdGRUcmFpbmluZ0RhdGEgKi8KKwlkaWN0RGF0dW0g PSBPaWRGdW5jdGlvbkNhbGwyKHRyYWluX2Z1bmMsCisJCQkJCQkJCSBQb2ludGVyR2V0RGF0dW0o cmVsKSwJLyogcGFzcyByZWxhdGlvbiByZWYgKi8KKwkJCQkJCQkJIFBvaW50ZXJHZXREYXR1bShh dHQpKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHlwZVR1cCk7CisKKwkvKiBXZSBubyBsb25nZXIgbmVl ZCB0aGUgdXNlciByZWxhdGlvbiBvcGVuICovCisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJZGljdCA9IChac3RkVHJhaW5pbmdEYXRhICopIERhdHVtR2V0UG9pbnRlcihk aWN0RGF0dW0pOworCWlmICghZGljdCB8fCBkaWN0LT5uaXRlbXMgPT0gMCkKKwkJcmV0dXJuIGZh bHNlOworCisJLyoKKwkgKiAzKSBUcmFpbiBhIFpzdGQgZGljdGlvbmFyeSBpbi1tZW1vcnkuCisJ ICovCisJc2FtcGxlc19idWZmZXIgPSBkaWN0LT5zYW1wbGVfYnVmZmVyOworCXNhbXBsZV9zaXpl cyA9IGRpY3QtPnNhbXBsZV9zaXplczsKKwluaXRlbXMgPSBkaWN0LT5uaXRlbXM7CisKKwlkaWN0 aW9uYXJ5X3NpemUgPSAoIWF0dG9wdCA/IERFRkFVTFRfWlNURF9ESUNUX1NJWkUKKwkJCQkJICAg OiBhdHRvcHQtPnpzdGRfZGljdF9zaXplKTsKKworCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgZGlj dGlvbmFyeSB0cmFpbmluZyByZXN1bHQgKi8KKwlkaWN0X2RhdGEgPSBwYWxsb2MoZGljdGlvbmFy eV9zaXplKTsKKwlkaWN0X3NpemUgPSBaRElDVF90cmFpbkZyb21CdWZmZXIoZGljdF9kYXRhLAor CQkJCQkJCQkJICBkaWN0aW9uYXJ5X3NpemUsCisJCQkJCQkJCQkgIHNhbXBsZXNfYnVmZmVyLAor CQkJCQkJCQkJICBzYW1wbGVfc2l6ZXMsCisJCQkJCQkJCQkgIG5pdGVtcyk7CisJaWYgKFpESUNU X2lzRXJyb3IoZGljdF9zaXplKSkKKwl7CisJCWVsb2coTE9HLCAiWnN0ZCBkaWN0aW9uYXJ5IHRy YWluaW5nIGZhaWxlZDogJXMiLAorCQkJIFpESUNUX2dldEVycm9yTmFtZShkaWN0X3NpemUpKTsK KwkJcGZyZWUoZGljdF9kYXRhKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogRmlu YWxpemUgZGljdGlvbmFyeSB0byBlbWJlZCBhIGN1c3RvbSBkaWN0SUQuIEUuZy4gV2UgY2FuIGdl dCBhIG5ldyBPaWQKKwkgKiBmcm9tIHBnX3pzdGRfZGljdGlvbmFyaWVzIGhlcmUgKmJlZm9yZSog d2UgYnVpbGQgdGhlIGJ5dGVhLiBCdXQgZm9yCisJICogYnJldml0eSwgbGV0J3MgZG8gaXQgYWZ0 ZXIgb3BlbmluZyBwZ196c3RkX2RpY3Rpb25hcmllcyAoc28gd2UgY2FuIGRvCisJICogdGhlIGRp Y3Rpb25hcnkgaW5zZXJ0aW9uICsgSUQgYXNzaWdubWVudCBpbiBvbmUgcGxhY2UpLgorCSAqCisJ ICogNCkgSW5zZXJ0IGRpY3Rpb25hcnkgaW50byBwZ196c3RkX2RpY3Rpb25hcmllcyBXZSBkbyB0 aGF0IGJ5IG9wZW5pbmcKKwkgKiB0aGUgWnN0ZERpY3Rpb25hcmllc1JlbGF0aW9uLCBnZW5lcmF0 aW5nIGEgbmV3IGRpY3RpZCwgZm9ybWluZyBhIHR1cGxlLAorCSAqIGFuZCBpbnNlcnRpbmcgaXQu CisJICoKKwkgKiBmaW5hbGl6ZSB0byBlbWJlZCB0aGF0ICdkaWN0aWQnIGluIHRoZSBkaWN0aW9u YXJ5IGl0c2VsZgorCSAqLworCXsKKwkJWkRJQ1RfcGFyYW1zX3QgZlBhcmFtczsKKwkJc2l6ZV90 CQlmaW5hbF9kaWN0X3NpemU7CisKKwkJLyogT3BlbiB0aGUgY2F0YWxvZyByZWxhdGlvbiB3aXRo IFNoYXJlUm93RXhjbHVzaXZlTG9jayAqLworCQljYXRhbG9nUmVsID0gdGFibGVfb3Blbihac3Rk RGljdGlvbmFyaWVzUmVsYXRpb25JZCwgU2hhcmVSb3dFeGNsdXNpdmVMb2NrKTsKKwkJY2F0VHVw RGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZ1JlbCk7CisJCWRpY3RpZCA9IEdldE5ld0Rp Y3RJZChjYXRhbG9nUmVsLCBac3RkRGljdGlkSW5kZXhJZCwgQW51bV9wZ196c3RkX2RpY3Rpb25h cmllc19kaWN0aWQpOworCisJCW1lbXNldCgmZlBhcmFtcywgMCwgc2l6ZW9mKGZQYXJhbXMpKTsK KwkJZlBhcmFtcy5kaWN0SUQgPSBkaWN0aWQ7CS8qIGVtYmVkIHRoZSBuZXdseSBhbGxvY2F0ZWQg T2lkIGFzIHRoZQorCQkJCQkJCQkJICogZGljdElEICovCisKKwkJZmluYWxfZGljdF9zaXplID0g WkRJQ1RfZmluYWxpemVEaWN0aW9uYXJ5KAorCQkJCQkJCQkJCQkJICAgZGljdF9kYXRhLAkvKiBv dXRwdXQgYnVmZmVyIChyZXVzZSkgKi8KKwkJCQkJCQkJCQkJCSAgIGRpY3Rpb25hcnlfc2l6ZSwg LyogY2FwYWNpdHkgKi8KKwkJCQkJCQkJCQkJCSAgIGRpY3RfZGF0YSwJLyogaW5wdXQgZGljdGlv bmFyeSBmcm9tCisJCQkJCQkJCQkJCQkJCQkJICogdHJhaW4gc3RlcCAqLworCQkJCQkJCQkJCQkJ ICAgZGljdF9zaXplLAkvKiBzaXplIGZyb20gdHJhaW4gc3RlcCAqLworCQkJCQkJCQkJCQkJICAg c2FtcGxlc19idWZmZXIsCisJCQkJCQkJCQkJCQkgICBzYW1wbGVfc2l6ZXMsCisJCQkJCQkJCQkJ CQkgICBuaXRlbXMsCisJCQkJCQkJCQkJCQkgICBmUGFyYW1zKTsKKworCQkvKiBWZXJpZnkgdGhh dCB0aGUgZW1iZWRkZWQgZGljdGlvbmFyeSBJRCBtYXRjaGVzIHRoZSBleHBlY3RlZCB2YWx1ZSAq LworCQlpZiAoZGljdGlkICE9IChPaWQpIFpESUNUX2dldERpY3RJRChkaWN0X2RhdGEsIGZpbmFs X2RpY3Rfc2l6ZSkpCisJCQllbG9nKEVSUk9SLCAiWnN0ZCBkaWN0aW9uYXJ5IElEIG1pc21hdGNo Iik7CisKKwkJaWYgKFpESUNUX2lzRXJyb3IoZmluYWxfZGljdF9zaXplKSkKKwkJeworCQkJZWxv ZyhMT0csICJac3RkIGRpY3Rpb25hcnkgZmluYWxpemF0aW9uIGZhaWxlZDogJXMiLAorCQkJCSBa RElDVF9nZXRFcnJvck5hbWUoZmluYWxfZGljdF9zaXplKSk7CisJCQlwZnJlZShkaWN0X2RhdGEp OworCQkJdGFibGVfY2xvc2UoY2F0YWxvZ1JlbCwgU2hhcmVSb3dFeGNsdXNpdmVMb2NrKTsKKwkJ CXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8qIE5vdyBjb3B5IHRoYXQgZmluYWxpemVkIGRpY3Rp b25hcnkgaW50byBhIGJ5dGVhLiAqLworCQl7CisJCQkvKiBXZeKAmWxsIHN0b3JlIHRoaXMgYnl0 ZWEgaW4gcGdfenN0ZF9kaWN0aW9uYXJpZXMuICovCisJCQlEYXR1bQkJdmFsdWVzW05hdHRzX3Bn X3pzdGRfZGljdGlvbmFyaWVzXTsKKwkJCWJvb2wJCW51bGxzW05hdHRzX3BnX3pzdGRfZGljdGlv bmFyaWVzXTsKKwkJCUhlYXBUdXBsZQl0dXA7CisKKwkJCWJ5dGVhCSAgICpkaWN0X2J5dGVhID0g KGJ5dGVhICopIHBhbGxvYyhWQVJIRFJTWiArIGZpbmFsX2RpY3Rfc2l6ZSk7CisKKwkJCVNFVF9W QVJTSVpFKGRpY3RfYnl0ZWEsIFZBUkhEUlNaICsgZmluYWxfZGljdF9zaXplKTsKKwkJCW1lbWNw eShWQVJEQVRBKGRpY3RfYnl0ZWEpLCBkaWN0X2RhdGEsIGZpbmFsX2RpY3Rfc2l6ZSk7CisKKwkJ CU1lbVNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKKwkJCU1lbVNldChudWxscywgZmFs c2UsIHNpemVvZihudWxscykpOworCisJCQl2YWx1ZXNbQW51bV9wZ196c3RkX2RpY3Rpb25hcmll c19kaWN0aWQgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0oZGljdGlkKTsKKwkJCXZhbHVlc1tBbnVt X3BnX3pzdGRfZGljdGlvbmFyaWVzX2RpY3QgLSAxXSA9IFBvaW50ZXJHZXREYXR1bShkaWN0X2J5 dGVhKTsKKworCQkJdHVwID0gaGVhcF9mb3JtX3R1cGxlKGNhdFR1cERlc2MsIHZhbHVlcywgbnVs bHMpOworCQkJQ2F0YWxvZ1R1cGxlSW5zZXJ0KGNhdGFsb2dSZWwsIHR1cCk7CisJCQloZWFwX2Zy ZWV0dXBsZSh0dXApOworCisJCQlwZnJlZShkaWN0X2J5dGVhKTsKKwkJfQorCisJCXBmcmVlKGRp Y3RfZGF0YSk7CisJfQorCisJcGZyZWUoc2FtcGxlc19idWZmZXIpOworCXBmcmVlKHNhbXBsZV9z aXplcyk7CisJcGZyZWUoZGljdCk7CisKKwkvKgorCSAqIDUpIFVwZGF0ZSBwZ19hdHRyaWJ1dGUu YXR0b3B0aW9ucyB3aXRoICJ6c3RkX2RpY3RpZCIgPT4gZGljdGlkIHNvIHRoZQorCSAqIGNvbHVt biBrbm93cyB3aGljaCBkaWN0aW9uYXJ5IHRvIHVzZSBhdCBjb21wcmVzc2lvbiB0aW1lLgorCSAq LworCXsKKwkJUmVsYXRpb24JYXR0UmVsID0gdGFibGVfb3BlbihBdHRyaWJ1dGVSZWxhdGlvbklk LCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJSGVhcFR1cGxlCWF0dHR1cCwKKwkJCQkJbmV3dHVwbGU7 CisJCURhdHVtCQlhdHRvcHRpb25zRGF0dW0sCisJCQkJCW5ld09wdGlvbnM7CisJCWJvb2wJCWlz bnVsbDsKKwkJRGF0dW0JCXJlcGxfdmFsW05hdHRzX3BnX2F0dHJpYnV0ZV07CisJCWJvb2wJCXJl cGxfbnVsbFtOYXR0c19wZ19hdHRyaWJ1dGVdOworCQlib29sCQlyZXBsX3JlcGxbTmF0dHNfcGdf YXR0cmlidXRlXTsKKwkJRGVmRWxlbSAgICAqZGVmOworCisJCWF0dHR1cCA9IFNlYXJjaFN5c0Nh Y2hlQXR0TnVtKHJlbGlkLCBhdHRubyk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHR0dXAp KQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfQ09M VU1OKSwKKwkJCQkJIGVycm1zZygiY29sdW1uIG51bWJlciAlZCBvZiByZWxhdGlvbiBcIiV1XCIg ZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJCWF0dG5vLCByZWxpZCkpKTsKKworCQkvKiBCdWlsZCBu ZXcgYXR0b3B0aW9ucyB3aXRoIHpzdGRfZGljdGlkPS4uLiAqLworCQlkZWYgPSBtYWtlRGVmRWxl bSgienN0ZF9kaWN0aWQiLAorCQkJCQkJICAoTm9kZSAqKSBtYWtlU3RyaW5nKHBzcHJpbnRmKCIl dSIsIGRpY3RpZCkpLAorCQkJCQkJICAtMSk7CisKKwkJYXR0b3B0aW9uc0RhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyKEFUVE5VTSwgYXR0dHVwLAorCQkJCQkJCQkJCSAgQW51bV9wZ19hdHRyaWJ1dGVf YXR0b3B0aW9ucywKKwkJCQkJCQkJCQkgICZpc251bGwpOworCQluZXdPcHRpb25zID0gdHJhbnNm b3JtUmVsT3B0aW9ucyhpc251bGwgPyAoRGF0dW0pIDAgOiBhdHRvcHRpb25zRGF0dW0sCisJCQkJ CQkJCQkJIGxpc3RfbWFrZTEoZGVmKSwKKwkJCQkJCQkJCQkgTlVMTCwgTlVMTCwKKwkJCQkJCQkJ CQkgZmFsc2UsIGZhbHNlKTsKKwkJLyogVmFsaWRhdGUgdGhlbSAodGhyb3dzIGVycm9yIGlmIGlu dmFsaWQpICovCisJCSh2b2lkKSBhdHRyaWJ1dGVfcmVsb3B0aW9ucyhuZXdPcHRpb25zLCB0cnVl KTsKKworCQlNZW1TZXQocmVwbF9udWxsLCBmYWxzZSwgc2l6ZW9mKHJlcGxfbnVsbCkpOworCQlN ZW1TZXQocmVwbF9yZXBsLCBmYWxzZSwgc2l6ZW9mKHJlcGxfcmVwbCkpOworCisJCWlmIChuZXdP cHRpb25zICE9IChEYXR1bSkgMCkKKwkJCXJlcGxfdmFsW0FudW1fcGdfYXR0cmlidXRlX2F0dG9w dGlvbnMgLSAxXSA9IG5ld09wdGlvbnM7CisJCWVsc2UKKwkJCXJlcGxfbnVsbFtBbnVtX3BnX2F0 dHJpYnV0ZV9hdHRvcHRpb25zIC0gMV0gPSB0cnVlOworCisJCXJlcGxfcmVwbFtBbnVtX3BnX2F0 dHJpYnV0ZV9hdHRvcHRpb25zIC0gMV0gPSB0cnVlOworCisJCW5ld3R1cGxlID0gaGVhcF9tb2Rp ZnlfdHVwbGUoYXR0dHVwLAorCQkJCQkJCQkJIFJlbGF0aW9uR2V0RGVzY3IoYXR0UmVsKSwKKwkJ CQkJCQkJCSByZXBsX3ZhbCwKKwkJCQkJCQkJCSByZXBsX251bGwsCisJCQkJCQkJCQkgcmVwbF9y ZXBsKTsKKworCQlDYXRhbG9nVHVwbGVVcGRhdGUoYXR0UmVsLCAmbmV3dHVwbGUtPnRfc2VsZiwg bmV3dHVwbGUpOworCQloZWFwX2ZyZWV0dXBsZShuZXd0dXBsZSk7CisKKwkJUmVsZWFzZVN5c0Nh Y2hlKGF0dHR1cCk7CisKKwkJdGFibGVfY2xvc2UoYXR0UmVsLCBOb0xvY2spOworCX0KKworCS8q KgorICAgICAqIERvbmUgaW5zZXJ0aW5nIGRpY3Rpb25hcnkgYW5kIHVwZGF0aW5nIGF0dHJpYnV0 ZS4KKyAgICAgKiBVbmxvY2sgdGhlIHRhYmxlIChsb2NrcyByZW1haW4gaGVsZCB1bnRpbCB0cmFu c2FjdGlvbiBjb21taXQpCisgICAgICovCisJdGFibGVfY2xvc2UoY2F0YWxvZ1JlbCwgTm9Mb2Nr KTsKKworCXJldHVybiB0cnVlOworI2Vsc2UKKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwor LyoKKyAqIEFjcXVpcmUgYSBuZXcgdW5pcXVlIERpY3RJZCBmb3IgYSByZWxhdGlvbi4KKyAqCisg KiBBc3N1bWVzIHRoZSByZWxhdGlvbiBpcyBhbHJlYWR5IGxvY2tlZCB3aXRoIFNoYXJlUm93RXhj bHVzaXZlTG9jaywKKyAqIGVuc3VyaW5nIHRoYXQgY29uY3VycmVudCB0cmFuc2FjdGlvbnMgY2Fu bm90IGdlbmVyYXRlIGR1cGxpY2F0ZSBEaWN0SWRzLgorICovCitwZ19hdHRyaWJ1dGVfdW51c2Vk KCkKK3N0YXRpYyBPaWQKK0dldE5ld0RpY3RJZChSZWxhdGlvbiByZWxhdGlvbiwgT2lkIGluZGV4 SWQsIEF0dHJOdW1iZXIgZGljdElkQ29sdW1uKQoreworCVJlbGF0aW9uCWluZGV4UmVsID0gaW5k ZXhfb3BlbihpbmRleElkLCBBY2Nlc3NTaGFyZUxvY2spOworCU9pZAkJCW1heERpY3RJZCA9IElu dmFsaWREaWN0SWQ7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7CisJYm9v bAkJY29sbGlzaW9uOworCVNjYW5LZXlEYXRhIGtleTsKKwlPaWQJCQluZXdEaWN0SWQ7CisKKwkv KiBSZXRyaWV2ZSB0aGUgbWF4aW11bSBleGlzdGluZyBEaWN0SWQgYnkgc2Nhbm5pbmcgaW4gcmV2 ZXJzZSBvcmRlciAqLworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW5fb3JkZXJlZChyZWxhdGlv biwgaW5kZXhSZWwsIFNuYXBzaG90QW55LCAwLCBOVUxMKTsKKwl0dXBsZSA9IHN5c3RhYmxlX2dl dG5leHRfb3JkZXJlZChzY2FuLCBCYWNrd2FyZFNjYW5EaXJlY3Rpb24pOworCWlmIChIZWFwVHVw bGVJc1ZhbGlkKHR1cGxlKSkKKwl7CisJCURhdHVtCQl2YWx1ZTsKKwkJYm9vbAkJaXNOdWxsOwor CisJCXZhbHVlID0gaGVhcF9nZXRhdHRyKHR1cGxlLCBkaWN0SWRDb2x1bW4sIFJlbGF0aW9uR2V0 RGVzY3IocmVsYXRpb24pLCAmaXNOdWxsKTsKKwkJaWYgKCFpc051bGwpCisJCQltYXhEaWN0SWQg PSBEYXR1bUdldE9iamVjdElkKHZhbHVlKTsKKwl9CisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsK KworCW5ld0RpY3RJZCA9IG1heERpY3RJZCArIDE7CisJQXNzZXJ0KG5ld0RpY3RJZCAhPSBJbnZh bGlkRGljdElkKTsKKworCS8qIENoZWNrIHRoYXQgdGhlIG5ldyBEaWN0SWQgaXMgaW5kZWVkIHVu aXF1ZSAqLworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJZGljdElkQ29sdW1uLAorCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG5ld0RpY3RJ ZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWxhdGlvbiwgaW5kZXhSZWwtPnJk X2lkLCB0cnVlLAorCQkJCQkJCSAgU25hcHNob3RBbnksIDEsICZrZXkpOworCWNvbGxpc2lvbiA9 IEhlYXBUdXBsZUlzVmFsaWQoc3lzdGFibGVfZ2V0bmV4dChzY2FuKSk7CisJc3lzdGFibGVfZW5k c2NhbihzY2FuKTsKKworCWlmIChjb2xsaXNpb24pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9FUlJPUiksCisJCQkJIGVycm1zZygidW5leHBlY3RlZCBj b2xsaXNpb24gZm9yIG5ldyBEaWN0SWQgJWQiLCBuZXdEaWN0SWQpKSk7CisKKwlyZXR1cm4gbmV3 RGljdElkOworfQorCisvKgorICogZ2V0X3pzdGRfZGljdCAtIEZldGNoZXMgdGhlIFpTVEQgZGlj dGlvbmFyeSBmcm9tIHRoZSBjYXRhbG9nCisgKgorICogZGljdGlkOiBUaGUgT2lkIG9mIHRoZSBk aWN0aW9uYXJ5IHRvIGZldGNoLgorICoKKyAqIFJldHVybnM6IEEgcG9pbnRlciB0byBhIGJ5dGVh IGNvbnRhaW5pbmcgdGhlIGRpY3Rpb25hcnkgZGF0YS4KKyAqLworYnl0ZWEgKgorZ2V0X3pzdGRf ZGljdChPaWQgZGljdGlkKQoreworCUhlYXBUdXBsZQl0dXBsZTsKKwlEYXR1bQkJZGF0dW07CisJ Ym9vbAkJaXNOdWxsOworCWJ5dGVhCSAgICpkaWN0X2J5dGVhOworCWJ5dGVhCSAgICpyZXN1bHQ7 CisJU2l6ZQkJYnl0ZWFfbGVuOworCisJLyogRmV0Y2ggdGhlIGRpY3Rpb25hcnkgdHVwbGUgZnJv bSB0aGUgc3lzY2FjaGUgKi8KKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShaU1RERElDVElET0lE LCBPYmplY3RJZEdldERhdHVtKGRpY3RpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBs ZSkpCisJCWVyZXBvcnQoRVJST1IsIChlcnJtc2coIkNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRp Y3RpZCAldSIsIGRpY3RpZCkpKTsKKworCS8qIEdldCB0aGUgZGljdGlvbmFyeSBhdHRyaWJ1dGUg ZnJvbSB0aGUgdHVwbGUgKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihBVFROVU0sIHR1cGxl LCBBbnVtX3BnX3pzdGRfZGljdGlvbmFyaWVzX2RpY3QsICZpc051bGwpOworCWlmIChpc051bGwp CisJCWVyZXBvcnQoRVJST1IsIChlcnJtc2coIkRpY3Rpb25hcnkgbm90IGZvdW5kIGZvciBkaWN0 aWQgJXUiLCBkaWN0aWQpKSk7CisKKwlkaWN0X2J5dGVhID0gRGF0dW1HZXRCeXRlYVAoZGF0dW0p OworCWlmIChkaWN0X2J5dGVhID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsIChlcnJtc2coIkZh aWxlZCB0byBmZXRjaCBkaWN0aW9uYXJ5IikpKTsKKworCS8qIERldGVybWluZSB0aGUgdG90YWwg c2l6ZSBvZiB0aGUgYnl0ZWEgKGhlYWRlciArIGRhdGEpICovCisJYnl0ZWFfbGVuID0gVkFSU0la RShkaWN0X2J5dGVhKTsKKworCXJlc3VsdCA9IHBhbGxvYyhieXRlYV9sZW4pOworCW1lbWNweShy ZXN1bHQsIGRpY3RfYnl0ZWEsIGJ5dGVhX2xlbik7CisKKwkvKiBSZWxlYXNlIHRoZSBzeXNjYWNo ZSB0dXBsZTsgdGhlIHJldHVybmVkIGJ5dGVhIGlzIG5vdyBpbmRlcGVuZGVudCAqLworCVJlbGVh c2VTeXNDYWNoZSh0dXBsZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogenN0ZF9k aWN0aW9uYXJ5X2J1aWxkZXIKKyAqICAgIEFjcXVpcmUgc2FtcGxlcyBmcm9tIGEgY29sdW1uLCBz dG9yZSB0aGVtIGluIGEgU2FtcGxlQ29sbGVjdG9yLAorICogICAgZmlsdGVyIHRoZW0sIHRoZW4g YnVpbGQgYSBac3RkVHJhaW5pbmdEYXRhIHN0cnVjdC4KKyAqLworRGF0dW0KK3pzdGRfZGljdGlv bmFyeV9idWlsZGVyKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJWnN0ZFRyYWluaW5nRGF0YSAqZGlj dCA9IHBhbGxvYzAoc2l6ZW9mKFpzdGRUcmFpbmluZ0RhdGEpKTsKKwlSZWxhdGlvbglyZWwgPSAo UmVsYXRpb24pIFBHX0dFVEFSR19QT0lOVEVSKDApOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9 IChGb3JtX3BnX2F0dHJpYnV0ZSkgUEdfR0VUQVJHX1BPSU5URVIoMSk7CisJVHVwbGVEZXNjCXR1 cGxlRGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKworCS8qIEFjcXVpcmUgdXAgdG8gVEFS R19ST1dTIHNhbXBsZSByb3dzLiAqLworCUhlYXBUdXBsZSAgKnNhbXBsZV9yb3dzID0gcGFsbG9j KFRBUkdfUk9XUyAqIHNpemVvZihIZWFwVHVwbGUpKTsKKwlkb3VibGUJCXRvdGFscm93cyA9IDAs CisJCQkJdG90YWxkZWFkcm93cyA9IDA7CisJaW50CQkJbnVtX3NhbXBsZWQgPSBhY3F1aXJlX3Nh bXBsZV9yb3dzKHJlbCwgMCwgc2FtcGxlX3Jvd3MsCisJCQkJCQkJCQkJCQkgIFRBUkdfUk9XUywK KwkJCQkJCQkJCQkJCSAgJnRvdGFscm93cywKKwkJCQkJCQkJCQkJCSAgJnRvdGFsZGVhZHJvd3Mp OworCisJLyogQ3JlYXRlIGEgY29sbGVjdG9yIHRvIGFjY3VtdWxhdGUgcmF3IHZhcmxlbmEgc2Ft cGxlcy4gKi8KKwlzaXplX3QJCWZpbHRlcmVkX3NhbXBsZV9jb3VudCA9IDA7CisJc2l6ZV90CQlm aWx0ZXJlZF9zYW1wbGVzX3NpemUgPSAwOworCWNoYXIJICAgKnNhbXBsZXNfYnVmZmVyOworCXNp emVfdAkgICAqc2FtcGxlX3NpemVzOworCXNpemVfdAkJY3VycmVudF9vZmZzZXQgPSAwOworCisJ U2FtcGxlQ29sbGVjdG9yICpjb2xsZWN0b3IgPSBwYWxsb2Moc2l6ZW9mKFNhbXBsZUNvbGxlY3Rv cikpOworCisJY29sbGVjdG9yLT5zYW1wbGVzID0gcGFsbG9jKG51bV9zYW1wbGVkICogc2l6ZW9m KFNhbXBsZUVudHJ5KSk7CisJY29sbGVjdG9yLT5zYW1wbGVfY291bnQgPSAwOworCisJLyogRXh0 cmFjdCBjb2x1bW4gZGF0YSBmcm9tIGVhY2ggc2FtcGxlZCByb3cuICovCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBudW1fc2FtcGxlZDsgaSsrKQorCXsKKwkJYm9vbAkJaXNudWxsOworCQlEYXR1bQkJ dmFsdWU7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQl2YWx1ZSA9IGhlYXBfZ2V0 YXR0cihzYW1wbGVfcm93c1tpXSwKKwkJCQkJCQkgYXR0LT5hdHRudW0sCisJCQkJCQkJIHR1cGxl RGVzYywKKwkJCQkJCQkgJmlzbnVsbCk7CisJCWlmICghaXNudWxsKQorCQl7CisJCQlzdHJ1Y3Qg dmFybGVuYSAqYXR0cjsKKwkJCXNpemVfdAkJc2l6ZTsKKwkJCXZvaWQJICAgKmRhdGE7CisJCQlT YW1wbGVFbnRyeSBlbnRyeTsKKwkJCWludAkJCWlkeDsKKworCQkJYXR0ciA9IChzdHJ1Y3QgdmFy bGVuYSAqKSBQR19ERVRPQVNUX0RBVFVNKHZhbHVlKTsKKwkJCXNpemUgPSBWQVJTSVpFX0FOWV9F WEhEUihhdHRyKTsKKworCQkJaWYgKGZpbHRlcmVkX3NhbXBsZXNfc2l6ZSArIHNpemUgPiBNYXhB bGxvY1NpemUpCisJCQkJYnJlYWs7CisKKwkJCWRhdGEgPSBwYWxsb2Moc2l6ZSk7CisJCQltZW1j cHkoZGF0YSwgVkFSREFUQV9BTlkoYXR0ciksIHNpemUpOworCisJCQllbnRyeS5kYXRhID0gZGF0 YTsKKwkJCWVudHJ5LnNpemUgPSBzaXplOworCisJCQlpZHggPSBjb2xsZWN0b3ItPnNhbXBsZV9j b3VudDsKKwkJCWNvbGxlY3Rvci0+c2FtcGxlc1tpZHhdID0gZW50cnk7CisJCQljb2xsZWN0b3It PnNhbXBsZV9jb3VudCsrOworCisJCQlmaWx0ZXJlZF9zYW1wbGVzX3NpemUgKz0gc2l6ZTsKKwkJ CWZpbHRlcmVkX3NhbXBsZV9jb3VudCsrOworCQl9CisJfQorCisJaWYgKGZpbHRlcmVkX3NhbXBs ZV9jb3VudCA9PSAwKQorCXsKKwkJLyogTm8gc2FtcGxlcyB3ZXJlIGNvbGxlY3RlZCwgb3IgdGhl eSB3ZXJlIHRvbyBsYXJnZS4gKi8KKwkJUEdfUkVUVVJOX1BPSU5URVIoZGljdCk7CisJfQorCisJ LyogQWxsb2NhdGUgYSBidWZmZXIgZm9yIGFsbCBzYW1wbGUgZGF0YSwgcGx1cyBhbiBhcnJheSBv ZiBzYW1wbGUgc2l6ZXMuICovCisJc2FtcGxlc19idWZmZXIgPSBwYWxsb2MoZmlsdGVyZWRfc2Ft cGxlc19zaXplKTsKKwlzYW1wbGVfc2l6ZXMgPSBwYWxsb2MoZmlsdGVyZWRfc2FtcGxlX2NvdW50 ICogc2l6ZW9mKHNpemVfdCkpOworCisJLyoKKwkgKiBDb25jYXRlbmF0ZSB0aGUgc2FtcGxlcyBp bnRvIHNhbXBsZXNfYnVmZmVyLCByZWNvcmRpbmcgZWFjaCBzYW1wbGUncworCSAqIHNpemUgaW4g c2FtcGxlX3NpemVzLgorCSAqLworCWN1cnJlbnRfb2Zmc2V0ID0gMDsKKwlmb3IgKGludCBpID0g MDsgaSA8IGZpbHRlcmVkX3NhbXBsZV9jb3VudDsgaSsrKQorCXsKKwkJbWVtY3B5KHNhbXBsZXNf YnVmZmVyICsgY3VycmVudF9vZmZzZXQsCisJCQkgICBjb2xsZWN0b3ItPnNhbXBsZXNbaV0uZGF0 YSwKKwkJCSAgIGNvbGxlY3Rvci0+c2FtcGxlc1tpXS5zaXplKTsKKworCQlzYW1wbGVfc2l6ZXNb aV0gPSBjb2xsZWN0b3ItPnNhbXBsZXNbaV0uc2l6ZTsKKwkJY3VycmVudF9vZmZzZXQgKz0gY29s bGVjdG9yLT5zYW1wbGVzW2ldLnNpemU7CisKKwkJcGZyZWUoY29sbGVjdG9yLT5zYW1wbGVzW2ld LmRhdGEpOworCX0KKwlwZnJlZShjb2xsZWN0b3ItPnNhbXBsZXMpOworCXBmcmVlKGNvbGxlY3Rv cik7CisKKwlkaWN0LT5zYW1wbGVfYnVmZmVyID0gc2FtcGxlc19idWZmZXI7CisJZGljdC0+c2Ft cGxlX3NpemVzID0gc2FtcGxlX3NpemVzOworCWRpY3QtPm5pdGVtcyA9IGZpbHRlcmVkX3NhbXBs ZV9jb3VudDsKKworCVBHX1JFVFVSTl9QT0lOVEVSKGRpY3QpOworfQorCitEYXR1bQorYnVpbGRf enN0ZF9kaWN0X2Zvcl9hdHRyaWJ1dGUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKyNpZm5kZWYgVVNF X1pTVEQKKwlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisjZWxzZQorCXRleHQJICAgKnRhYmxlbmFt ZSA9IFBHX0dFVEFSR19URVhUX1BQKDApOworCVJhbmdlVmFyICAgKnRhYmxlcmVsOworCU9pZAkJ CXRhYmxlb2lkID0gSW52YWxpZE9pZDsKKwlBdHRyTnVtYmVyCWF0dG5vID0gUEdfR0VUQVJHX0lO VDMyKDEpOworCWJvb2wJCXN1Y2Nlc3M7CisKKwkvKiBMb29rIHVwIHRhYmxlIG5hbWUuICovCisJ dGFibGVyZWwgPSBtYWtlUmFuZ2VWYXJGcm9tTmFtZUxpc3QodGV4dFRvUXVhbGlmaWVkTmFtZUxp c3QodGFibGVuYW1lKSk7CisJdGFibGVvaWQgPSBSYW5nZVZhckdldFJlbGlkKHRhYmxlcmVsLCBO b0xvY2ssIGZhbHNlKTsKKwlzdWNjZXNzID0gYnVpbGRfenN0ZF9kaWN0aW9uYXJ5X2ludGVybmFs KHRhYmxlb2lkLCBhdHRubyk7CisJUEdfUkVUVVJOX0JPT0woc3VjY2Vzcyk7CisjZW5kaWYKK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2FuYWx5emUuYwppbmRleCAyYjVmYmRjYmQ4Li4yYjU1MDBmNDVmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvYW5hbHl6ZS5jCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAidXRpbHMvc29ydHN1 cHBvcnQuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3Rp bWVzdGFtcC5oIgotCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIKIAogLyogUGVyLWluZGV4 IGRhdGEgZm9yIEFOQUxZWkUgKi8KIHR5cGVkZWYgc3RydWN0IEFubEluZGV4RGF0YQpAQCAtODUs OSArODUsNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX2luZGV4X3N0YXRzKFJlbGF0aW9uIG9uZXJl bCwgZG91YmxlIHRvdGFscm93cywKIAkJCQkJCQkJTWVtb3J5Q29udGV4dCBjb2xfY29udGV4dCk7 CiBzdGF0aWMgVmFjQXR0clN0YXRzICpleGFtaW5lX2F0dHJpYnV0ZShSZWxhdGlvbiBvbmVyZWws IGludCBhdHRudW0sCiAJCQkJCQkJCQkgICBOb2RlICppbmRleF9leHByKTsKLXN0YXRpYyBpbnQJ YWNxdWlyZV9zYW1wbGVfcm93cyhSZWxhdGlvbiBvbmVyZWwsIGludCBlbGV2ZWwsCi0JCQkJCQkJ CUhlYXBUdXBsZSAqcm93cywgaW50IHRhcmdyb3dzLAotCQkJCQkJCQlkb3VibGUgKnRvdGFscm93 cywgZG91YmxlICp0b3RhbGRlYWRyb3dzKTsKIHN0YXRpYyBpbnQJY29tcGFyZV9yb3dzKGNvbnN0 IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZyk7CiBzdGF0aWMgaW50CWFjcXVpcmVf aW5oZXJpdGVkX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgaW50IGVsZXZlbCwKIAkJCQkJ CQkJCQkgIEhlYXBUdXBsZSAqcm93cywgaW50IHRhcmdyb3dzLApAQCAtMTE5NSw3ICsxMTkyLDcg QEAgYmxvY2tfc2FtcGxpbmdfcmVhZF9zdHJlYW1fbmV4dChSZWFkU3RyZWFtICpzdHJlYW0sCiAg KiBibG9jay4gIFRoZSBwcmV2aW91cyBzYW1wbGluZyBtZXRob2QgcHV0IHRvbyBtdWNoIGNyZWRl bmNlIGluIHRoZSByb3cKICAqIGRlbnNpdHkgbmVhciB0aGUgc3RhcnQgb2YgdGhlIHRhYmxlLgog ICovCi1zdGF0aWMgaW50CitpbnQKIGFjcXVpcmVfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVs LCBpbnQgZWxldmVsLAogCQkJCQlIZWFwVHVwbGUgKnJvd3MsIGludCB0YXJncm93cywKIAkJCQkJ ZG91YmxlICp0b3RhbHJvd3MsIGRvdWJsZSAqdG90YWxkZWFkcm93cykKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3R5cGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90eXBl Y21kcy5jCmluZGV4IDNjYjNjYTFjY2EuLmM1ODNlNDgxNjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3R5cGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHlwZWNt ZHMuYwpAQCAtOTUsNiArOTUsNyBAQCB0eXBlZGVmIHN0cnVjdAogCWJvb2wJCXVwZGF0ZVR5cG1v ZG91dDsKIAlib29sCQl1cGRhdGVBbmFseXplOwogCWJvb2wJCXVwZGF0ZVN1YnNjcmlwdDsKKwli b29sCQl1cGRhdGVHZW5lcmF0ZURpY3Rpb25hcnk7CiAJLyogTmV3IHZhbHVlcyBmb3IgcmVsZXZh bnQgYXR0cmlidXRlcyAqLwogCWNoYXIJCXN0b3JhZ2U7CiAJT2lkCQkJcmVjZWl2ZU9pZDsKQEAg LTEwMyw2ICsxMDQsNyBAQCB0eXBlZGVmIHN0cnVjdAogCU9pZAkJCXR5cG1vZG91dE9pZDsKIAlP aWQJCQlhbmFseXplT2lkOwogCU9pZAkJCXN1YnNjcmlwdE9pZDsKKwlPaWQJCQlidWlsZFpzdGRE aWN0aW9uYXJ5OwogfSBBbHRlclR5cGVSZWN1cnNlUGFyYW1zOwogCiAvKiBQb3RlbnRpYWxseSBz ZXQgYnkgcGdfdXBncmFkZV9zdXBwb3J0IGZ1bmN0aW9ucyAqLwpAQCAtMTIyLDYgKzEyNCw3IEBA IHN0YXRpYyBPaWQJZmluZFR5cGVTZW5kRnVuY3Rpb24oTGlzdCAqcHJvY25hbWUsIE9pZCB0eXBl T2lkKTsKIHN0YXRpYyBPaWQJZmluZFR5cGVUeXBtb2RpbkZ1bmN0aW9uKExpc3QgKnByb2NuYW1l KTsKIHN0YXRpYyBPaWQJZmluZFR5cGVUeXBtb2RvdXRGdW5jdGlvbihMaXN0ICpwcm9jbmFtZSk7 CiBzdGF0aWMgT2lkCWZpbmRUeXBlQW5hbHl6ZUZ1bmN0aW9uKExpc3QgKnByb2NuYW1lLCBPaWQg dHlwZU9pZCk7CitzdGF0aWMgT2lkCWZpbmRUeXBlR2VuZXJhdGVEaWN0aW9uYXJ5RnVuY3Rpb24o TGlzdCAqcHJvY25hbWUsIE9pZCB0eXBlT2lkKTsKIHN0YXRpYyBPaWQJZmluZFR5cGVTdWJzY3Jp cHRpbmdGdW5jdGlvbihMaXN0ICpwcm9jbmFtZSwgT2lkIHR5cGVPaWQpOwogc3RhdGljIE9pZAlm aW5kUmFuZ2VTdWJPcGNsYXNzKExpc3QgKm9wY25hbWUsIE9pZCBzdWJ0eXBlKTsKIHN0YXRpYyBP aWQJZmluZFJhbmdlQ2Fub25pY2FsRnVuY3Rpb24oTGlzdCAqcHJvY25hbWUsIE9pZCB0eXBlT2lk KTsKQEAgLTE2Miw2ICsxNjUsNyBAQCBEZWZpbmVUeXBlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlz dCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMpCiAJTGlzdAkgICAqdHlwbW9kb3V0TmFtZSA9IE5J TDsKIAlMaXN0CSAgICphbmFseXplTmFtZSA9IE5JTDsKIAlMaXN0CSAgICpzdWJzY3JpcHROYW1l ID0gTklMOworCUxpc3QJICAgKmdlbmVyYXRlRGljdGlvbmFyeU5hbWUgPSBOSUw7CiAJY2hhcgkJ Y2F0ZWdvcnkgPSBUWVBDQVRFR09SWV9VU0VSOwogCWJvb2wJCXByZWZlcnJlZCA9IGZhbHNlOwog CWNoYXIJCWRlbGltaXRlciA9IERFRkFVTFRfVFlQREVMSU07CkBAIC0xOTAsNiArMTk0LDcgQEAg RGVmaW5lVHlwZShQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0 ZXJzKQogCURlZkVsZW0gICAgKmFsaWdubWVudEVsID0gTlVMTDsKIAlEZWZFbGVtICAgICpzdG9y YWdlRWwgPSBOVUxMOwogCURlZkVsZW0gICAgKmNvbGxhdGFibGVFbCA9IE5VTEw7CisJRGVmRWxl bSAgICAqZ2VuZXJhdGVEaWN0aW9uYXJ5RWwgPSBOVUxMOwogCU9pZAkJCWlucHV0T2lkOwogCU9p ZAkJCW91dHB1dE9pZDsKIAlPaWQJCQlyZWNlaXZlT2lkID0gSW52YWxpZE9pZDsKQEAgLTE5OCw2 ICsyMDMsNyBAQCBEZWZpbmVUeXBlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExp c3QgKnBhcmFtZXRlcnMpCiAJT2lkCQkJdHlwbW9kb3V0T2lkID0gSW52YWxpZE9pZDsKIAlPaWQJ CQlhbmFseXplT2lkID0gSW52YWxpZE9pZDsKIAlPaWQJCQlzdWJzY3JpcHRPaWQgPSBJbnZhbGlk T2lkOworCU9pZAkJCWJ1aWxkWnN0ZERpY3Rpb25hcnkgPSBJbnZhbGlkT2lkOwogCWNoYXIJICAg KmFycmF5X3R5cGU7CiAJT2lkCQkJYXJyYXlfb2lkOwogCU9pZAkJCXR5cG9pZDsKQEAgLTMyMyw2 ICszMjksOCBAQCBEZWZpbmVUeXBlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExp c3QgKnBhcmFtZXRlcnMpCiAJCQlkZWZlbHAgPSAmc3RvcmFnZUVsOwogCQllbHNlIGlmIChzdHJj bXAoZGVmZWwtPmRlZm5hbWUsICJjb2xsYXRhYmxlIikgPT0gMCkKIAkJCWRlZmVscCA9ICZjb2xs YXRhYmxlRWw7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImJ1aWxkX3pzdGRf ZGljdCIpID09IDApCisJCQlkZWZlbHAgPSAmZ2VuZXJhdGVEaWN0aW9uYXJ5RWw7CiAJCWVsc2UK IAkJewogCQkJLyogV0FSTklORywgbm90IEVSUk9SLCBmb3IgaGlzdG9yaWNhbCBiYWNrd2FyZHMt Y29tcGF0aWJpbGl0eSAqLwpAQCAtNDU1LDYgKzQ2Myw4IEBAIERlZmluZVR5cGUoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycykKIAl9CiAJaWYgKGNvbGxh dGFibGVFbCkKIAkJY29sbGF0aW9uID0gZGVmR2V0Qm9vbGVhbihjb2xsYXRhYmxlRWwpID8gREVG QVVMVF9DT0xMQVRJT05fT0lEIDogSW52YWxpZE9pZDsKKwlpZiAoZ2VuZXJhdGVEaWN0aW9uYXJ5 RWwpCisJCWdlbmVyYXRlRGljdGlvbmFyeU5hbWUgPSBkZWZHZXRRdWFsaWZpZWROYW1lKGdlbmVy YXRlRGljdGlvbmFyeUVsKTsKIAogCS8qCiAJICogbWFrZSBzdXJlIHdlIGhhdmUgb3VyIHJlcXVp cmVkIGRlZmluaXRpb25zCkBAIC01MTYsNiArNTI2LDE1IEBAIERlZmluZVR5cGUoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycykKIAkJCQkJIGVycm1zZygi ZWxlbWVudCB0eXBlIGNhbm5vdCBiZSBzcGVjaWZpZWQgd2l0aG91dCBhIHN1YnNjcmlwdGluZyBm dW5jdGlvbiIpKSk7CiAJfQogCisJaWYgKGdlbmVyYXRlRGljdGlvbmFyeU5hbWUpCisJeworCQlp ZiAoaW50ZXJuYWxMZW5ndGggIT0gLTEpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAorCQkJCQkgZXJybXNnKCJ0eXBl IGJ1aWxkX3pzdGRfZGljdCBmdW5jdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBvbmx5IGlmIGRhdGEg dHlwZSBpcyB2YXJpYWJsZSBsZW5ndGguIikpKTsKKwkJYnVpbGRac3RkRGljdGlvbmFyeSA9IGZp bmRUeXBlR2VuZXJhdGVEaWN0aW9uYXJ5RnVuY3Rpb24oZ2VuZXJhdGVEaWN0aW9uYXJ5TmFtZSwg dHlwb2lkKTsKKwl9CisKIAkvKgogCSAqIENoZWNrIHBlcm1pc3Npb25zIG9uIGZ1bmN0aW9ucy4g IFdlIGNob29zZSB0byByZXF1aXJlIHRoZSBjcmVhdG9yL293bmVyCiAJICogb2YgYSB0eXBlIHRv IGFsc28gb3duIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9ucy4gIFNpbmNlIGNyZWF0aW5nIGEgdHlw ZQpAQCAtNTUwLDYgKzU2OSw5IEBAIERlZmluZVR5cGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0 ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycykKIAlpZiAoYW5hbHl6ZU9pZCAmJiAhb2JqZWN0X293 bmVyY2hlY2soUHJvY2VkdXJlUmVsYXRpb25JZCwgYW5hbHl6ZU9pZCwgR2V0VXNlcklkKCkpKQog CQlhY2xjaGVja19lcnJvcihBQ0xDSEVDS19OT1RfT1dORVIsIE9CSkVDVF9GVU5DVElPTiwKIAkJ CQkJICAgTmFtZUxpc3RUb1N0cmluZyhhbmFseXplTmFtZSkpOworCWlmIChidWlsZFpzdGREaWN0 aW9uYXJ5ICYmICFvYmplY3Rfb3duZXJjaGVjayhQcm9jZWR1cmVSZWxhdGlvbklkLCBidWlsZFpz dGREaWN0aW9uYXJ5LCBHZXRVc2VySWQoKSkpCisJCWFjbGNoZWNrX2Vycm9yKEFDTENIRUNLX05P VF9PV05FUiwgT0JKRUNUX0ZVTkNUSU9OLAorCQkJCQkgICBOYW1lTGlzdFRvU3RyaW5nKGdlbmVy YXRlRGljdGlvbmFyeU5hbWUpKTsKIAlpZiAoc3Vic2NyaXB0T2lkICYmICFvYmplY3Rfb3duZXJj aGVjayhQcm9jZWR1cmVSZWxhdGlvbklkLCBzdWJzY3JpcHRPaWQsIEdldFVzZXJJZCgpKSkKIAkJ YWNsY2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBPQkpFQ1RfRlVOQ1RJT04sCiAJCQkJ CSAgIE5hbWVMaXN0VG9TdHJpbmcoc3Vic2NyaXB0TmFtZSkpOwpAQCAtNjAxLDcgKzYyMyw4IEBA IERlZmluZVR5cGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1l dGVycykKIAkJCQkgICAtMSwJCQkvKiB0eXBNb2QgKERvbWFpbnMgb25seSkgKi8KIAkJCQkgICAw LAkJCS8qIEFycmF5IERpbWVuc2lvbnMgb2YgdHlwYmFzZXR5cGUgKi8KIAkJCQkgICBmYWxzZSwJ CS8qIFR5cGUgTk9UIE5VTEwgKi8KLQkJCQkgICBjb2xsYXRpb24pOwkvKiB0eXBlJ3MgY29sbGF0 aW9uICovCisJCQkJICAgY29sbGF0aW9uLAkvKiB0eXBlJ3MgY29sbGF0aW9uICovCisJCQkJICAg YnVpbGRac3RkRGljdGlvbmFyeSk7CS8qIGJ1aWxkX3pzdGRfZGljdCBwcm9jZWR1cmUgKi8KIAlB c3NlcnQodHlwb2lkID09IGFkZHJlc3Mub2JqZWN0SWQpOwogCiAJLyoKQEAgLTY0Myw3ICs2NjYs OCBAQCBEZWZpbmVUeXBlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBh cmFtZXRlcnMpCiAJCQkgICAtMSwJCQkJLyogdHlwTW9kIChEb21haW5zIG9ubHkpICovCiAJCQkg ICAwLAkJCQkvKiBBcnJheSBkaW1lbnNpb25zIG9mIHR5cGJhc2V0eXBlICovCiAJCQkgICBmYWxz ZSwJCQkvKiBUeXBlIE5PVCBOVUxMICovCi0JCQkgICBjb2xsYXRpb24pOwkJLyogdHlwZSdzIGNv bGxhdGlvbiAqLworCQkJICAgY29sbGF0aW9uLAkJLyogdHlwZSdzIGNvbGxhdGlvbiAqLworCQkJ ICAgSW52YWxpZE9pZCk7CQkvKiBidWlsZF96c3RkX2RpY3QgcHJvY2VkdXJlICovCiAKIAlwZnJl ZShhcnJheV90eXBlKTsKIApAQCAtNzA2LDYgKzczMCw3IEBAIERlZmluZURvbWFpbihQYXJzZVN0 YXRlICpwc3RhdGUsIENyZWF0ZURvbWFpblN0bXQgKnN0bXQpCiAJT2lkCQkJcmVjZWl2ZVByb2Nl ZHVyZTsKIAlPaWQJCQlzZW5kUHJvY2VkdXJlOwogCU9pZAkJCWFuYWx5emVQcm9jZWR1cmU7CisJ T2lkCQkJYnVpbGRac3RkRGljdGlvbmFyeTsKIAlib29sCQlieVZhbHVlOwogCWNoYXIJCWNhdGVn b3J5OwogCWNoYXIJCWRlbGltaXRlcjsKQEAgLTg0Miw2ICs4NjcsOSBAQCBEZWZpbmVEb21haW4o UGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVEb21haW5TdG10ICpzdG10KQogCS8qIEFuYWx5c2lz IGZ1bmN0aW9uICovCiAJYW5hbHl6ZVByb2NlZHVyZSA9IGJhc2VUeXBlLT50eXBhbmFseXplOwog CisJLyogR2VuZXJhdGUgZGljdGlvbmFyeSBmdW5jdGlvbiAqLworCWJ1aWxkWnN0ZERpY3Rpb25h cnkgPSBiYXNlVHlwZS0+dHlwZWJ1aWxkenN0ZGRpY3Rpb25hcnk7CisKIAkvKgogCSAqIERvbWFp bnMgZG9uJ3QgbmVlZCBhIHN1YnNjcmlwdCBmdW5jdGlvbiwgc2luY2UgdGhleSBhcmUgbm90CiAJ ICogc3Vic2NyaXB0YWJsZSBvbiB0aGVpciBvd24uICBJZiB0aGUgYmFzZSB0eXBlIGlzIHN1YnNj cmlwdGFibGUsIHRoZQpAQCAtMTA3OCw3ICsxMTA2LDggQEAgRGVmaW5lRG9tYWluKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQ3JlYXRlRG9tYWluU3RtdCAqc3RtdCkKIAkJCQkgICBiYXNldHlwZU1vZCwg LyogdHlwZU1vZCB2YWx1ZSAqLwogCQkJCSAgIHR5cE5EaW1zLAkvKiBBcnJheSBkaW1lbnNpb25z IGZvciBiYXNlIHR5cGUgKi8KIAkJCQkgICB0eXBOb3ROdWxsLAkvKiBUeXBlIE5PVCBOVUxMICov Ci0JCQkJICAgZG9tYWluY29sbCk7IC8qIHR5cGUncyBjb2xsYXRpb24gKi8KKwkJCQkgICBkb21h aW5jb2xsLAkvKiB0eXBlJ3MgY29sbGF0aW9uICovCisJCQkJICAgYnVpbGRac3RkRGljdGlvbmFy eSk7CS8qIGJ1aWxkX3pzdGRfZGljdCBwcm9jZWR1cmUgKi8KIAogCS8qCiAJICogQ3JlYXRlIHRo ZSBhcnJheSB0eXBlIHRoYXQgZ29lcyB3aXRoIGl0LgpAQCAtMTExOSw3ICsxMTQ4LDggQEAgRGVm aW5lRG9tYWluKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlRG9tYWluU3RtdCAqc3RtdCkKIAkJ CSAgIC0xLAkJCQkvKiB0eXBNb2QgKERvbWFpbnMgb25seSkgKi8KIAkJCSAgIDAsCQkJCS8qIEFy cmF5IGRpbWVuc2lvbnMgb2YgdHlwYmFzZXR5cGUgKi8KIAkJCSAgIGZhbHNlLAkJCS8qIFR5cGUg Tk9UIE5VTEwgKi8KLQkJCSAgIGRvbWFpbmNvbGwpOwkJLyogdHlwZSdzIGNvbGxhdGlvbiAqLwor CQkJICAgZG9tYWluY29sbCwJCS8qIHR5cGUncyBjb2xsYXRpb24gKi8KKwkJCSAgIEludmFsaWRP aWQpOwkJLyogYnVpbGRfenN0ZF9kaWN0IHByb2NlZHVyZSAqLwogCiAJcGZyZWUoZG9tYWluQXJy YXlOYW1lKTsKIApAQCAtMTI0MSw3ICsxMjcxLDggQEAgRGVmaW5lRW51bShDcmVhdGVFbnVtU3Rt dCAqc3RtdCkKIAkJCQkgICAtMSwJCQkvKiB0eXBNb2QgKERvbWFpbnMgb25seSkgKi8KIAkJCQkg ICAwLAkJCS8qIEFycmF5IGRpbWVuc2lvbnMgb2YgdHlwYmFzZXR5cGUgKi8KIAkJCQkgICBmYWxz ZSwJCS8qIFR5cGUgTk9UIE5VTEwgKi8KLQkJCQkgICBJbnZhbGlkT2lkKTsgLyogdHlwZSdzIGNv bGxhdGlvbiAqLworCQkJCSAgIEludmFsaWRPaWQsCS8qIHR5cGUncyBjb2xsYXRpb24gKi8KKwkJ CQkgICBJbnZhbGlkT2lkKTsgLyogZ2VuZXJhdGUgZGljdGlvbmFyeSBwcm9jZWR1cmUgLSBkZWZh dWx0ICovCiAKIAkvKiBFbnRlciB0aGUgZW51bSdzIHZhbHVlcyBpbnRvIHBnX2VudW0gKi8KIAlF bnVtVmFsdWVzQ3JlYXRlKGVudW1UeXBlQWRkci5vYmplY3RJZCwgc3RtdC0+dmFscyk7CkBAIC0x MjgyLDcgKzEzMTMsOCBAQCBEZWZpbmVFbnVtKENyZWF0ZUVudW1TdG10ICpzdG10KQogCQkJICAg LTEsCQkJCS8qIHR5cE1vZCAoRG9tYWlucyBvbmx5KSAqLwogCQkJICAgMCwJCQkJLyogQXJyYXkg ZGltZW5zaW9ucyBvZiB0eXBiYXNldHlwZSAqLwogCQkJICAgZmFsc2UsCQkJLyogVHlwZSBOT1Qg TlVMTCAqLwotCQkJICAgSW52YWxpZE9pZCk7CQkvKiB0eXBlJ3MgY29sbGF0aW9uICovCisJCQkg ICBJbnZhbGlkT2lkLAkJLyogdHlwZSdzIGNvbGxhdGlvbiAqLworCQkJICAgSW52YWxpZE9pZCk7 CQkvKiBnZW5lcmF0ZSBkaWN0aW9uYXJ5IHByb2NlZHVyZSAtIGRlZmF1bHQgKi8KIAogCXBmcmVl KGVudW1BcnJheU5hbWUpOwogCkBAIC0xNTgzLDcgKzE2MTUsOCBAQCBEZWZpbmVSYW5nZShQYXJz ZVN0YXRlICpwc3RhdGUsIENyZWF0ZVJhbmdlU3RtdCAqc3RtdCkKIAkJCQkgICAtMSwJCQkvKiB0 eXBNb2QgKERvbWFpbnMgb25seSkgKi8KIAkJCQkgICAwLAkJCS8qIEFycmF5IGRpbWVuc2lvbnMg b2YgdHlwYmFzZXR5cGUgKi8KIAkJCQkgICBmYWxzZSwJCS8qIFR5cGUgTk9UIE5VTEwgKi8KLQkJ CQkgICBJbnZhbGlkT2lkKTsgLyogdHlwZSdzIGNvbGxhdGlvbiAocmFuZ2VzIG5ldmVyIGhhdmUg b25lKSAqLworCQkJCSAgIEludmFsaWRPaWQsCS8qIHR5cGUncyBjb2xsYXRpb24gKHJhbmdlcyBu ZXZlciBoYXZlIG9uZSkgKi8KKwkJCQkgICBJbnZhbGlkT2lkKTsgLyogZ2VuZXJhdGUgZGljdGlv bmFyeSBwcm9jZWR1cmUgLSBkZWZhdWx0ICovCiAJQXNzZXJ0KHR5cG9pZCA9PSBJbnZhbGlkT2lk IHx8IHR5cG9pZCA9PSBhZGRyZXNzLm9iamVjdElkKTsKIAl0eXBvaWQgPSBhZGRyZXNzLm9iamVj dElkOwogCkBAIC0xNjUwLDcgKzE2ODMsOCBAQCBEZWZpbmVSYW5nZShQYXJzZVN0YXRlICpwc3Rh dGUsIENyZWF0ZVJhbmdlU3RtdCAqc3RtdCkKIAkJCQkgICAtMSwJCQkvKiB0eXBNb2QgKERvbWFp bnMgb25seSkgKi8KIAkJCQkgICAwLAkJCS8qIEFycmF5IGRpbWVuc2lvbnMgb2YgdHlwYmFzZXR5 cGUgKi8KIAkJCQkgICBmYWxzZSwJCS8qIFR5cGUgTk9UIE5VTEwgKi8KLQkJCQkgICBJbnZhbGlk T2lkKTsgLyogdHlwZSdzIGNvbGxhdGlvbiAocmFuZ2VzIG5ldmVyIGhhdmUgb25lKSAqLworCQkJ CSAgIEludmFsaWRPaWQsCS8qIHR5cGUncyBjb2xsYXRpb24gKHJhbmdlcyBuZXZlciBoYXZlIG9u ZSkgKi8KKwkJCQkgICBJbnZhbGlkT2lkKTsgLyogZ2VuZXJhdGUgZGljdGlvbmFyeSBwcm9jZWR1 cmUgLSBkZWZhdWx0ICovCiAJQXNzZXJ0KG11bHRpcmFuZ2VPaWQgPT0gbWx0cm5nYWRkcmVzcy5v YmplY3RJZCk7CiAKIAkvKiBDcmVhdGUgdGhlIGVudHJ5IGluIHBnX3JhbmdlICovCkBAIC0xNjkz LDcgKzE3MjcsOCBAQCBEZWZpbmVSYW5nZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVJhbmdl U3RtdCAqc3RtdCkKIAkJCSAgIC0xLAkJCQkvKiB0eXBNb2QgKERvbWFpbnMgb25seSkgKi8KIAkJ CSAgIDAsCQkJCS8qIEFycmF5IGRpbWVuc2lvbnMgb2YgdHlwYmFzZXR5cGUgKi8KIAkJCSAgIGZh bHNlLAkJCS8qIFR5cGUgTk9UIE5VTEwgKi8KLQkJCSAgIEludmFsaWRPaWQpOwkJLyogdHlwY29s bGF0aW9uICovCisJCQkgICBJbnZhbGlkT2lkLAkJLyogdHlwY29sbGF0aW9uICovCisJCQkgICBJ bnZhbGlkT2lkKTsJCS8qIGdlbmVyYXRlIGRpY3Rpb25hcnkgcHJvY2VkdXJlIC0gZGVmYXVsdCAq LwogCiAJcGZyZWUocmFuZ2VBcnJheU5hbWUpOwogCkBAIC0xNzMyLDcgKzE3NjcsOCBAQCBEZWZp bmVSYW5nZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVJhbmdlU3RtdCAqc3RtdCkKIAkJCSAg IC0xLAkJCQkvKiB0eXBNb2QgKERvbWFpbnMgb25seSkgKi8KIAkJCSAgIDAsCQkJCS8qIEFycmF5 IGRpbWVuc2lvbnMgb2YgdHlwYmFzZXR5cGUgKi8KIAkJCSAgIGZhbHNlLAkJCS8qIFR5cGUgTk9U IE5VTEwgKi8KLQkJCSAgIEludmFsaWRPaWQpOwkJLyogdHlwY29sbGF0aW9uICovCisJCQkgICBJ bnZhbGlkT2lkLAkJLyogdHlwY29sbGF0aW9uICovCisJCQkgICBJbnZhbGlkT2lkKTsJCS8qIGdl bmVyYXRlIGRpY3Rpb25hcnkgcHJvY2VkdXJlIC0gZGVmYXVsdCAqLwogCiAJLyogQW5kIGNyZWF0 ZSB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb25zIGZvciB0aGlzIHJhbmdlIHR5cGUgKi8KIAltYWtl UmFuZ2VDb25zdHJ1Y3RvcnModHlwZU5hbWUsIHR5cGVOYW1lc3BhY2UsIHR5cG9pZCwgcmFuZ2VT dWJ0eXBlKTsKQEAgLTIyNTcsNiArMjI5MywzMSBAQCBmaW5kVHlwZUFuYWx5emVGdW5jdGlvbihM aXN0ICpwcm9jbmFtZSwgT2lkIHR5cGVPaWQpCiAJcmV0dXJuIHByb2NPaWQ7CiB9CiAKK3N0YXRp YyBPaWQKK2ZpbmRUeXBlR2VuZXJhdGVEaWN0aW9uYXJ5RnVuY3Rpb24oTGlzdCAqcHJvY25hbWUs IE9pZCB0eXBlT2lkKQoreworCU9pZAkJCWFyZ0xpc3RbMl07CisJT2lkCQkJcHJvY09pZDsKKwor CWFyZ0xpc3RbMF0gPSBPSURPSUQ7CisJYXJnTGlzdFsxXSA9IElOVDRPSUQ7CisKKwlwcm9jT2lk ID0gTG9va3VwRnVuY05hbWUocHJvY25hbWUsIDIsIGFyZ0xpc3QsIHRydWUpOworCWlmICghT2lk SXNWYWxpZChwcm9jT2lkKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X1VOREVGSU5FRF9GVU5DVElPTiksCisJCQkJIGVycm1zZygiZnVuY3Rpb24gJXMgZG9lcyBub3Qg ZXhpc3QiLAorCQkJCQkJZnVuY19zaWduYXR1cmVfc3RyaW5nKHByb2NuYW1lLCAxLCBOSUwsIGFy Z0xpc3QpKSkpOworCisJaWYgKGdldF9mdW5jX3JldHR5cGUocHJvY09pZCkgIT0gSU5URVJOQUxP SUQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX09CSkVD VF9ERUZJTklUSU9OKSwKKwkJCQkgZXJybXNnKCJ0eXBlIGJ1aWxkIHpzdGQgZGljdGlvbmFyeSBm dW5jdGlvbiAlcyBtdXN0IHJldHVybiB0eXBlICVzIiwKKwkJCQkJCU5hbWVMaXN0VG9TdHJpbmco cHJvY25hbWUpLCAiaW50ZXJuYWwiKSkpOworCisJcmV0dXJuIHByb2NPaWQ7Cit9CisKIHN0YXRp YyBPaWQKIGZpbmRUeXBlU3Vic2NyaXB0aW5nRnVuY3Rpb24oTGlzdCAqcHJvY25hbWUsIE9pZCB0 eXBlT2lkKQogewpAQCAtNDQ0MCw2ICs0NTAxLDE5IEBAIEFsdGVyVHlwZShBbHRlclR5cGVTdG10 ICpzdG10KQogCQkJLyogUmVwbGFjaW5nIGEgc3Vic2NyaXB0IGZ1bmN0aW9uIHJlcXVpcmVzIHN1 cGVydXNlci4gKi8KIAkJCXJlcXVpcmVTdXBlciA9IHRydWU7CiAJCX0KKwkJZWxzZSBpZiAoc3Ry Y21wKGRlZmVsLT5kZWZuYW1lLCAiYnVpbGRfenN0ZF9kaWN0IikgPT0gMCkKKwkJeworCQkJaWYg KGRlZmVsLT5hcmcgIT0gTlVMTCkKKwkJCQlhdHBhcmFtcy5idWlsZFpzdGREaWN0aW9uYXJ5ID0K KwkJCQkJZmluZFR5cGVHZW5lcmF0ZURpY3Rpb25hcnlGdW5jdGlvbihkZWZHZXRRdWFsaWZpZWRO YW1lKGRlZmVsKSwKKwkJCQkJCQkJCQkJCQkgICB0eXBlT2lkKTsKKwkJCWVsc2UKKwkJCQlhdHBh cmFtcy5idWlsZFpzdGREaWN0aW9uYXJ5ID0gSW52YWxpZE9pZDsJLyogTk9ORSwgcmVtb3ZlIGZ1 bmN0aW9uICovCisKKwkJCWF0cGFyYW1zLnVwZGF0ZUdlbmVyYXRlRGljdGlvbmFyeSA9IHRydWU7 CisJCQkvKiBSZXBsYWNpbmcgYSBjYW5vbmljYWwgZnVuY3Rpb24gcmVxdWlyZXMgc3VwZXJ1c2Vy LiAqLworCQkJcmVxdWlyZVN1cGVyID0gdHJ1ZTsKKwkJfQogCiAJCS8qCiAJCSAqIFRoZSByZXN0 IG9mIHRoZSBvcHRpb25zIHRoYXQgQ1JFQVRFIGFjY2VwdHMgY2Fubm90IGJlIGNoYW5nZWQuCkBA IC00NjAyLDYgKzQ2NzYsMTEgQEAgQWx0ZXJUeXBlUmVjdXJzZShPaWQgdHlwZU9pZCwgYm9vbCBp c0ltcGxpY2l0QXJyYXksCiAJCXJlcGxhY2VzW0FudW1fcGdfdHlwZV90eXBzdWJzY3JpcHQgLSAx XSA9IHRydWU7CiAJCXZhbHVlc1tBbnVtX3BnX3R5cGVfdHlwc3Vic2NyaXB0IC0gMV0gPSBPYmpl Y3RJZEdldERhdHVtKGF0cGFyYW1zLT5zdWJzY3JpcHRPaWQpOwogCX0KKwlpZiAoYXRwYXJhbXMt PnVwZGF0ZUdlbmVyYXRlRGljdGlvbmFyeSkKKwl7CisJCXJlcGxhY2VzW0FudW1fcGdfdHlwZV90 eXBlYnVpbGR6c3RkZGljdGlvbmFyeSAtIDFdID0gdHJ1ZTsKKwkJdmFsdWVzW0FudW1fcGdfdHlw ZV90eXBlYnVpbGR6c3RkZGljdGlvbmFyeSAtIDFdID0gT2JqZWN0SWRHZXREYXR1bShhdHBhcmFt cy0+YnVpbGRac3RkRGljdGlvbmFyeSk7CisJfQogCiAJbmV3dHVwID0gaGVhcF9tb2RpZnlfdHVw bGUodHVwLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAogCQkJCQkJCSAgIHZhbHVlcywgbnVs bHMsIHJlcGxhY2VzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5h LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCmluZGV4IGU0NTU2NTcxNzAuLjQw ZTI5NDUyYzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwpAQCAtNTE4NCw2ICs1MTg0LDkgQEAg cGdfY29sdW1uX2NvbXByZXNzaW9uKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWNhc2UgVE9BU1RfTFo0 X0NPTVBSRVNTSU9OX0lEOgogCQkJcmVzdWx0ID0gImx6NCI7CiAJCQlicmVhazsKKwkJY2FzZSBU T0FTVF9aU1REX0NPTVBSRVNTSU9OX0lEOgorCQkJcmVzdWx0ID0gInpzdGQiOworCQkJYnJlYWs7 CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2Qg aWQgJWQiLCBjbWlkKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IGFk MjVjYmIzOWMuLmUwM2FjOGRkZGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBA IC00NTMsNiArNDUzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSBk ZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uX29wdGlvbnNbXSA9IHsKIAl7InBnbHoiLCBUT0FTVF9Q R0xaX0NPTVBSRVNTSU9OLCBmYWxzZX0sCiAjaWZkZWYgIFVTRV9MWjQKIAl7Imx6NCIsIFRPQVNU X0xaNF9DT01QUkVTU0lPTiwgZmFsc2V9LAorI2VuZGlmCisjaWZkZWYgIFVTRV9aU1RECisJeyJ6 c3RkIiwgVE9BU1RfWlNURF9DT01QUkVTU0lPTiwgZmFsc2V9LAogI2VuZGlmCiAJe05VTEwsIDAs IGZhbHNlfQogfTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZQppbmRleCAyZDFkZTljMzdiLi40Nzc3M2UyOTE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC03MzEsNyArNzMxLDcgQEAgYXV0b3Zh Y3V1bV93b3JrZXJfc2xvdHMgPSAxNgkjIGF1dG92YWN1dW0gd29ya2VyIHNsb3RzIHRvIGFsbG9j YXRlCiAjcm93X3NlY3VyaXR5ID0gb24KICNkZWZhdWx0X3RhYmxlX2FjY2Vzc19tZXRob2QgPSAn aGVhcCcKICNkZWZhdWx0X3RhYmxlc3BhY2UgPSAnJwkJIyBhIHRhYmxlc3BhY2UgbmFtZSwgJycg dXNlcyB0aGUgZGVmYXVsdAotI2RlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24gPSAncGdseicJIyAn cGdseicgb3IgJ2x6NCcKKyNkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uID0gJ3BnbHonCSMgJ3Bn bHonIG9yICdsejQnIG9yICd6c3RkJwogI3RlbXBfdGFibGVzcGFjZXMgPSAnJwkJCSMgYSBsaXN0 IG9mIHRhYmxlc3BhY2UgbmFtZXMsICcnIHVzZXMKIAkJCQkJIyBvbmx5IGRlZmF1bHQgdGFibGVz cGFjZQogI2NoZWNrX2Z1bmN0aW9uX2JvZGllcyA9IG9uCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2FtY2hlY2svdC8wMDRfdmVyaWZ5X2hlYXBhbS5wbCBiL3NyYy9iaW4vcGdfYW1jaGVjay90LzAw NF92ZXJpZnlfaGVhcGFtLnBsCmluZGV4IDJhM2FmMjY2NmYuLjMwMzA5OThlNTggMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfYW1jaGVjay90LzAwNF92ZXJpZnlfaGVhcGFtLnBsCisrKyBiL3NyYy9i aW4vcGdfYW1jaGVjay90LzAwNF92ZXJpZnlfaGVhcGFtLnBsCkBAIC03NSw3ICs3NSw3IEBAIHVz ZSBUZXN0OjpNb3JlOwogIyAgICB4eCAgICAgICAgICAgICAgICAgICAgIHRfYml0czogeAkJCW9m ZnNldCA9IDIzCQlDCiAjICAgIHh4IHh4IHh4IHh4IHh4IHh4IHh4IHh4ICAgJ2EnOiB4eHh4eHh4 eAlvZmZzZXQgPSAyNAkJTEwKICMgICAgeHggeHggeHggeHggeHggeHggeHggeHggICAnYic6IHh4 eHh4eHh4CW9mZnNldCA9IDMyCQlDQ0NDQ0NDQwotIyAgICB4eCB4eCB4eCB4eCB4eCB4eCB4eCB4 eCAgICdjJzogeHh4eHh4eHgJb2Zmc2V0ID0gNDAJCUNDbGxMTAorIyAgICB4eCB4eCB4eCB4eCB4 eCB4eCB4eCB4eCAgICdjJzogeHh4eHh4eHgJb2Zmc2V0ID0gNDAJCUNDbGxMTEwKICMgICAgeHgg eHggeHggeHggeHggeHggeHggeHggICAgICA6IHh4eHh4eHh4CSAuLi5jb250aW51ZWQKICMgICAg eHggeHggICAgICAgICAgICAgICAgICAgICAgICA6IHh4CQkJIC4uLmNvbnRpbnVlZAogIwpAQCAt ODMsOCArODMsOCBAQCB1c2UgVGVzdDo6TW9yZTsKICMgaXQgaXMgY29udmVuaWVudCBlbm91Z2gg dG8gZG8gaXQgdGhpcyB3YXkuICBXZSBkZWZpbmUgcGFja2luZyBjb2RlCiAjIGNvbnN0YW50cyBo ZXJlLCB3aGVyZSB0aGV5IGNhbiBiZSBjb21wYXJlZCBlYXNpbHkgYWdhaW5zdCB0aGUgbGF5b3V0 LgogCi11c2UgY29uc3RhbnQgSEVBUFRVUExFX1BBQ0tfQ09ERSA9PiAnTExMU1NTU1NDQ0xMQ0ND Q0NDQ0NDQ2xsTEwnOwotdXNlIGNvbnN0YW50IEhFQVBUVVBMRV9QQUNLX0xFTkdUSCA9PiA1ODsg ICAgIyBUb3RhbCBzaXplCit1c2UgY29uc3RhbnQgSEVBUFRVUExFX1BBQ0tfQ09ERSA9PiAnTExM U1NTU1NDQ0xMQ0NDQ0NDQ0NDQ2xsTExMJzsKK3VzZSBjb25zdGFudCBIRUFQVFVQTEVfUEFDS19M RU5HVEggPT4gNjI7ICAgICMgVG90YWwgc2l6ZQogCiAjIFJlYWQgYSB0dXBsZSBvZiBvdXIgdGFi bGUgZnJvbSBhIGhlYXAgcGFnZS4KICMKQEAgLTEzMCw3ICsxMzAsOCBAQCBzdWIgcmVhZF90dXBs ZQogCQljX3ZhX3Jhd3NpemUgPT4gc2hpZnQsCiAJCWNfdmFfZXh0aW5mbyA9PiBzaGlmdCwKIAkJ Y192YV92YWx1ZWlkID0+IHNoaWZ0LAotCQljX3ZhX3RvYXN0cmVsaWQgPT4gc2hpZnQpOworCQlj X3ZhX3RvYXN0cmVsaWQgPT4gc2hpZnQsCisJCWNfdmFfY21wX2FsZyA9PiBzaGlmdCk7CiAJIyBT dGl0Y2ggdG9nZXRoZXIgdGhlIHRleHQgZm9yIGNvbHVtbiAnYicKIAkkdHVwe2J9ID0gam9pbign JywgbWFwIHsgY2hyKCR0dXB7ImJfYm9keSRfIn0pIH0gKDEgLi4gNykpOwogCXJldHVybiBcJXR1 cDsKQEAgLTE2Myw3ICsxNjQsOCBAQCBzdWIgd3JpdGVfdHVwbGUKIAkJJHR1cC0+e2JfYm9keTZ9 LCAkdHVwLT57Yl9ib2R5N30sCiAJCSR0dXAtPntjX3ZhX2hlYWRlcn0sICR0dXAtPntjX3ZhX3Zh cnRhZ30sCiAJCSR0dXAtPntjX3ZhX3Jhd3NpemV9LCAkdHVwLT57Y192YV9leHRpbmZvfSwKLQkJ JHR1cC0+e2NfdmFfdmFsdWVpZH0sICR0dXAtPntjX3ZhX3RvYXN0cmVsaWR9KTsKKwkJJHR1cC0+ e2NfdmFfdmFsdWVpZH0sICR0dXAtPntjX3ZhX3RvYXN0cmVsaWR9LCAKKwkJJHR1cC0+e2NfdmFf Y21wX2FsZ30pOwogCXN5c3NlZWsoJGZoLCAkb2Zmc2V0LCAwKQogCSAgb3IgQkFJTF9PVVQoInN5 c3NlZWsgZmFpbGVkOiAkISIpOwogCWRlZmluZWQoc3lzd3JpdGUoJGZoLCAkYnVmZmVyLCBIRUFQ VFVQTEVfUEFDS19MRU5HVEgpKQpAQCAtNDk2LDcgKzQ5OCw3IEBAIGZvciAobXkgJHR1cGlkeCA9 IDA7ICR0dXBpZHggPCAkUk9XQ09VTlQ7ICR0dXBpZHgrKykKIAkJJHR1cC0+e3RfaG9mZn0gKz0g MTI4OwogCiAJCXB1c2ggQGV4cGVjdGVkLAotCQkgIHFyLyR7JGhlYWRlcn1kYXRhIGJlZ2lucyBh dCBvZmZzZXQgMTUyIGJleW9uZCB0aGUgdHVwbGUgbGVuZ3RoIDU4LywKKwkJICBxci8keyRoZWFk ZXJ9ZGF0YSBiZWdpbnMgYXQgb2Zmc2V0IDE1MiBiZXlvbmQgdGhlIHR1cGxlIGxlbmd0aCA2Mi8s CiAJCSAgcXIvJHskaGVhZGVyfXR1cGxlIGRhdGEgc2hvdWxkIGJlZ2luIGF0IGJ5dGUgMjQsIGJ1 dCBhY3R1YWxseSBiZWdpbnMgYXQgYnl0ZSAxNTIgXCgzIGF0dHJpYnV0ZXMsIG5vIG51bGxzXCkv OwogCX0KIAllbHNpZiAoJG9mZm51bSA9PSA2KQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNGY0YWQyZWUxNS4u MDJiZWM3NjVhZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC04OTY1LDcgKzg5NjUsOCBAQCBnZXRUYWJsZUF0 dHJzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyAqdGJsaW5mbywgaW50IG51bVRhYmxlcykKIAkJ CQkJCSAiYS5hdHRhbGlnbixcbiIKIAkJCQkJCSAiYS5hdHRpc2xvY2FsLFxuIgogCQkJCQkJICJw Z19jYXRhbG9nLmZvcm1hdF90eXBlKHQub2lkLCBhLmF0dHR5cG1vZCkgQVMgYXR0dHlwbmFtZSxc biIKLQkJCQkJCSAiYXJyYXlfdG9fc3RyaW5nKGEuYXR0b3B0aW9ucywgJywgJykgQVMgYXR0b3B0 aW9ucyxcbiIKKwkJCQkJCSAiYXJyYXlfdG9fc3RyaW5nKEFSUkFZKFNFTEVDVCB4IEZST00gdW5u ZXN0KGEuYXR0b3B0aW9ucykgQVMgeCBcbiIKKwkJCQkJCSAiV0hFUkUgeCBOT1QgTElLRSAnenN0 ZF9kaWN0aWQ9JScpLCAnLCAnKSBBUyBhdHRvcHRpb25zLCBcbiIKIAkJCQkJCSAiQ0FTRSBXSEVO IGEuYXR0Y29sbGF0aW9uIDw+IHQudHlwY29sbGF0aW9uICIKIAkJCQkJCSAiVEhFTiBhLmF0dGNv bGxhdGlvbiBFTFNFIDAgRU5EIEFTIGF0dGNvbGxhdGlvbixcbiIKIAkJCQkJCSAicGdfY2F0YWxv Zy5hcnJheV90b19zdHJpbmcoQVJSQVkoIgpAQCAtMTE3ODQsMTIgKzExNzg1LDE0IEBAIGR1bXBC YXNlVHlwZShBcmNoaXZlICpmb3V0LCBjb25zdCBUeXBlSW5mbyAqdHlpbmZvKQogCWNoYXIJICAg KnR5cG1vZG91dDsKIAljaGFyCSAgICp0eXBhbmFseXplOwogCWNoYXIJICAgKnR5cHN1YnNjcmlw dDsKKwljaGFyCSAgICp0eXBlYnVpbGR6c3RkZGljdGlvbmFyeTsKIAlPaWQJCQl0eXByZWNlaXZl b2lkOwogCU9pZAkJCXR5cHNlbmRvaWQ7CiAJT2lkCQkJdHlwbW9kaW5vaWQ7CiAJT2lkCQkJdHlw bW9kb3V0b2lkOwogCU9pZAkJCXR5cGFuYWx5emVvaWQ7CiAJT2lkCQkJdHlwc3Vic2NyaXB0b2lk OworCU9pZAkJCXR5cGVidWlsZHpzdGRkaWN0aW9uYXJ5b2lkOwogCWNoYXIJICAgKnR5cGNhdGVn b3J5OwogCWNoYXIJICAgKnR5cGlzcHJlZmVycmVkOwogCWNoYXIJICAgKnR5cGRlbGltOwpAQCAt MTE4MjIsMTAgKzExODI1LDE4IEBAIGR1bXBCYXNlVHlwZShBcmNoaXZlICpmb3V0LCBjb25zdCBU eXBlSW5mbyAqdHlpbmZvKQogCQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNDAwMDApCiAJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkJICJ0eXBzdWJzY3JpcHQsICIK LQkJCQkJCQkJICJ0eXBzdWJzY3JpcHQ6OnBnX2NhdGFsb2cub2lkIEFTIHR5cHN1YnNjcmlwdG9p ZCAiKTsKKwkJCQkJCQkJICJ0eXBzdWJzY3JpcHQ6OnBnX2NhdGFsb2cub2lkIEFTIHR5cHN1YnNj cmlwdG9pZCwgIik7CiAJCWVsc2UKIAkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAotCQkJ CQkJCQkgIictJyBBUyB0eXBzdWJzY3JpcHQsIDAgQVMgdHlwc3Vic2NyaXB0b2lkICIpOworCQkJ CQkJCQkgIictJyBBUyB0eXBzdWJzY3JpcHQsIDAgQVMgdHlwc3Vic2NyaXB0b2lkLCAiKTsKKwor CQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxODAwMDApCisJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwKKwkJCQkJCQkJICJ0eXBlYnVpbGR6c3RkZGljdGlvbmFyeSwgIgorCQkJCQkJ CQkgInR5cGVidWlsZHpzdGRkaWN0aW9uYXJ5OjpwZ19jYXRhbG9nLm9pZCBBUyB0eXBlYnVpbGR6 c3RkZGljdGlvbmFyeW9pZCAiKTsKKwkJZWxzZQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVl cnksCisJCQkJCQkJCSAiJy0nIEFTIHR5cGVidWlsZHpzdGRkaWN0aW9uYXJ5LCAwIEFTIHR5cGVi dWlsZHpzdGRkaWN0aW9uYXJ5b2lkICIpOwogCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5 LCAiRlJPTSBwZ19jYXRhbG9nLnBnX3R5cGUgIgogCQkJCQkJCSAiV0hFUkUgb2lkID0gJDEiKTsK QEAgLTExODUwLDEyICsxMTg2MSwxNCBAQCBkdW1wQmFzZVR5cGUoQXJjaGl2ZSAqZm91dCwgY29u c3QgVHlwZUluZm8gKnR5aW5mbykKIAl0eXBtb2RvdXQgPSBQUWdldHZhbHVlKHJlcywgMCwgUFFm bnVtYmVyKHJlcywgInR5cG1vZG91dCIpKTsKIAl0eXBhbmFseXplID0gUFFnZXR2YWx1ZShyZXMs IDAsIFBRZm51bWJlcihyZXMsICJ0eXBhbmFseXplIikpOwogCXR5cHN1YnNjcmlwdCA9IFBRZ2V0 dmFsdWUocmVzLCAwLCBQUWZudW1iZXIocmVzLCAidHlwc3Vic2NyaXB0IikpOworCXR5cGVidWls ZHpzdGRkaWN0aW9uYXJ5ID0gUFFnZXR2YWx1ZShyZXMsIDAsIFBRZm51bWJlcihyZXMsICJ0eXBl YnVpbGR6c3RkZGljdGlvbmFyeSIpKTsKIAl0eXByZWNlaXZlb2lkID0gYXRvb2lkKFBRZ2V0dmFs dWUocmVzLCAwLCBQUWZudW1iZXIocmVzLCAidHlwcmVjZWl2ZW9pZCIpKSk7CiAJdHlwc2VuZG9p ZCA9IGF0b29pZChQUWdldHZhbHVlKHJlcywgMCwgUFFmbnVtYmVyKHJlcywgInR5cHNlbmRvaWQi KSkpOwogCXR5cG1vZGlub2lkID0gYXRvb2lkKFBRZ2V0dmFsdWUocmVzLCAwLCBQUWZudW1iZXIo cmVzLCAidHlwbW9kaW5vaWQiKSkpOwogCXR5cG1vZG91dG9pZCA9IGF0b29pZChQUWdldHZhbHVl KHJlcywgMCwgUFFmbnVtYmVyKHJlcywgInR5cG1vZG91dG9pZCIpKSk7CiAJdHlwYW5hbHl6ZW9p ZCA9IGF0b29pZChQUWdldHZhbHVlKHJlcywgMCwgUFFmbnVtYmVyKHJlcywgInR5cGFuYWx5emVv aWQiKSkpOwogCXR5cHN1YnNjcmlwdG9pZCA9IGF0b29pZChQUWdldHZhbHVlKHJlcywgMCwgUFFm bnVtYmVyKHJlcywgInR5cHN1YnNjcmlwdG9pZCIpKSk7CisJdHlwZWJ1aWxkenN0ZGRpY3Rpb25h cnlvaWQgPSBhdG9vaWQoUFFnZXR2YWx1ZShyZXMsIDAsIFBRZm51bWJlcihyZXMsICJ0eXBlYnVp bGR6c3RkZGljdGlvbmFyeW9pZCIpKSk7CiAJdHlwY2F0ZWdvcnkgPSBQUWdldHZhbHVlKHJlcywg MCwgUFFmbnVtYmVyKHJlcywgInR5cGNhdGVnb3J5IikpOwogCXR5cGlzcHJlZmVycmVkID0gUFFn ZXR2YWx1ZShyZXMsIDAsIFBRZm51bWJlcihyZXMsICJ0eXBpc3ByZWZlcnJlZCIpKTsKIAl0eXBk ZWxpbSA9IFBRZ2V0dmFsdWUocmVzLCAwLCBQUWZudW1iZXIocmVzLCAidHlwZGVsaW0iKSk7CkBA IC0xMTkxMSw3ICsxMTkyNCw4IEBAIGR1bXBCYXNlVHlwZShBcmNoaXZlICpmb3V0LCBjb25zdCBU eXBlSW5mbyAqdHlpbmZvKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihxLCAiLFxuICAgIFRZUE1PRF9P VVQgPSAlcyIsIHR5cG1vZG91dCk7CiAJaWYgKE9pZElzVmFsaWQodHlwYW5hbHl6ZW9pZCkpCiAJ CWFwcGVuZFBRRXhwQnVmZmVyKHEsICIsXG4gICAgQU5BTFlaRSA9ICVzIiwgdHlwYW5hbHl6ZSk7 Ci0KKwlpZiAoT2lkSXNWYWxpZCh0eXBlYnVpbGR6c3RkZGljdGlvbmFyeW9pZCkpCisJCWFwcGVu ZFBRRXhwQnVmZmVyKHEsICIsXG4gICAgQlVJTERfWlNURF9ESUNUID0gJXMiLCB0eXBlYnVpbGR6 c3RkZGljdGlvbmFyeSk7CiAJaWYgKHN0cmNtcCh0eXBjb2xsYXRhYmxlLCAidCIpID09IDApCiAJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHEsICIsXG4gICAgQ09MTEFUQUJMRSA9IHRydWUiKTsKIApA QCAtMTcxNzAsNiArMTcxODQsOSBAQCBkdW1wVGFibGVTY2hlbWEoQXJjaGl2ZSAqZm91dCwgY29u c3QgVGFibGVJbmZvICp0YmluZm8pCiAJCQkJCWNhc2UgJ2wnOgogCQkJCQkJY21uYW1lID0gImx6 NCI7CiAJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAneic6CisJCQkJCQljbW5hbWUgPSAienN0ZCI7 CisJCQkJCQlicmVhazsKIAkJCQkJZGVmYXVsdDoKIAkJCQkJCWNtbmFtZSA9IE5VTEw7CiAJCQkJ CQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMKaW5kZXggZTZjZjQ2OGFjOS4uMGJhMzdiYjE3NSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAg LTIxNjcsOCArMjE2Nyw5IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNj aGVtYW5hbWUsCiAJCQkvKiB0aGVzZSBzdHJpbmdzIGFyZSBsaXRlcmFsIGluIG91ciBzeW50YXgs IHNvIG5vdCB0cmFuc2xhdGVkLiAqLwogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIChjb21w cmVzc2lvblswXSA9PSAncCcgPyAicGdseiIgOgogCQkJCQkJCQkJICAoY29tcHJlc3Npb25bMF0g PT0gJ2wnID8gImx6NCIgOgotCQkJCQkJCQkJICAgKGNvbXByZXNzaW9uWzBdID09ICdcMCcgPyAi IiA6Ci0JCQkJCQkJCQkJIj8/PyIpKSksCisJCQkJCQkJCQkgICAoY29tcHJlc3Npb25bMF0gPT0g J3onID8gInpzdGQiIDoKKwkJCQkJCQkJCQkoY29tcHJlc3Npb25bMF0gPT0gJ1wwJyA/ICIiIDoK KwkJCQkJCQkJCQkgIj8/PyIpKSkpLAogCQkJCQkJCSAgZmFsc2UsIGZhbHNlKTsKIAkJfQogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfY29tcHJlc3Npb24uaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy90b2FzdF9jb21wcmVzc2lvbi5oCmluZGV4IDEzYzQ2MTJjZWUuLmFmZmYx ZjgwZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90b2FzdF9jb21wcmVzc2lvbi5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90b2FzdF9jb21wcmVzc2lvbi5oCkBAIC0zOCw3ICsz OCw4IEBAIHR5cGVkZWYgZW51bSBUb2FzdENvbXByZXNzaW9uSWQKIHsKIAlUT0FTVF9QR0xaX0NP TVBSRVNTSU9OX0lEID0gMCwKIAlUT0FTVF9MWjRfQ09NUFJFU1NJT05fSUQgPSAxLAotCVRPQVNU X0lOVkFMSURfQ09NUFJFU1NJT05fSUQgPSAyLAorCVRPQVNUX1pTVERfQ09NUFJFU1NJT05fSUQg PSAyLAorCVRPQVNUX0lOVkFMSURfQ09NUFJFU1NJT05fSUQgPSAzCiB9IFRvYXN0Q29tcHJlc3Np b25JZDsKIAogLyoKQEAgLTQ4LDEwICs0OSwxNSBAQCB0eXBlZGVmIGVudW0gVG9hc3RDb21wcmVz c2lvbklkCiAgKi8KICNkZWZpbmUgVE9BU1RfUEdMWl9DT01QUkVTU0lPTgkJCSdwJwogI2RlZmlu ZSBUT0FTVF9MWjRfQ09NUFJFU1NJT04JCQknbCcKKyNkZWZpbmUgVE9BU1RfWlNURF9DT01QUkVT U0lPTgkJCSd6JwogI2RlZmluZSBJbnZhbGlkQ29tcHJlc3Npb25NZXRob2QJCSdcMCcKIAogI2Rl ZmluZSBDb21wcmVzc2lvbk1ldGhvZElzVmFsaWQoY20pICAoKGNtKSAhPSBJbnZhbGlkQ29tcHJl c3Npb25NZXRob2QpCiAKKyNkZWZpbmUgSW52YWxpZERpY3RJZAkJCQkJCTAKKyNkZWZpbmUgREVG QVVMVF9aU1REX0NNUF9MRVZFTAkJCQkzCS8qIFJlZmZlcmVkIGZyb20KKwkJCQkJCQkJCQkJCSAq IFpTVERfQ0xFVkVMX0RFRkFVTFQgKi8KKyNkZWZpbmUgREVGQVVMVF9aU1REX0RJQ1RfU0laRSAJ CQkJKDQgKiAxMDI0KQkvKiA0IEtCICovCiAKIC8qIHBnbHogY29tcHJlc3Npb24vZGVjb21wcmVz c2lvbiByb3V0aW5lcyAqLwogZXh0ZXJuIHN0cnVjdCB2YXJsZW5hICpwZ2x6X2NvbXByZXNzX2Rh dHVtKGNvbnN0IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSk7CkBAIC02NSw2ICs3MSwxMSBAQCBleHRl cm4gc3RydWN0IHZhcmxlbmEgKmx6NF9kZWNvbXByZXNzX2RhdHVtKGNvbnN0IHN0cnVjdCB2YXJs ZW5hICp2YWx1ZSk7CiBleHRlcm4gc3RydWN0IHZhcmxlbmEgKmx6NF9kZWNvbXByZXNzX2RhdHVt X3NsaWNlKGNvbnN0IHN0cnVjdCB2YXJsZW5hICp2YWx1ZSwKIAkJCQkJCQkJCQkJCSAgaW50MzIg c2xpY2VsZW5ndGgpOwogCisvKiB6c3RkIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcm91dGlu ZXMgKi8KK2V4dGVybiBzdHJ1Y3QgdmFybGVuYSAqenN0ZF9jb21wcmVzc19kYXR1bShjb25zdCBz dHJ1Y3QgdmFybGVuYSAqdmFsdWUsIE9pZCBkaWN0aWQsIGludCB6c3RkX2xldmVsKTsKK2V4dGVy biBzdHJ1Y3QgdmFybGVuYSAqenN0ZF9kZWNvbXByZXNzX2RhdHVtKGNvbnN0IHN0cnVjdCB2YXJs ZW5hICp2YWx1ZSk7CitleHRlcm4gc3RydWN0IHZhcmxlbmEgKnpzdGRfZGVjb21wcmVzc19kYXR1 bV9zbGljZShjb25zdCBzdHJ1Y3QgdmFybGVuYSAqdmFsdWUsIGludDMyIHNsaWNlbGVuZ3RoKTsK KwogLyogb3RoZXIgc3R1ZmYgKi8KIGV4dGVybiBUb2FzdENvbXByZXNzaW9uSWQgdG9hc3RfZ2V0 X2NvbXByZXNzaW9uX2lkKHN0cnVjdCB2YXJsZW5hICphdHRyKTsKIGV4dGVybiBjaGFyIENvbXBy ZXNzaW9uTmFtZVRvTWV0aG9kKGNvbnN0IGNoYXIgKmNvbXByZXNzaW9uKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2FjY2Vzcy90b2FzdF9oZWxwZXIuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90 b2FzdF9oZWxwZXIuaAppbmRleCBlNmFiOGFmZmZiLi41ZGY4NGU1ZTgwIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfaGVscGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3RvYXN0X2hlbHBlci5oCkBAIC0zMyw2ICszMyw4IEBAIHR5cGVkZWYgc3RydWN0CiAJaW50MzIJ CXRhaV9zaXplOwogCXVpbnQ4CQl0YWlfY29sZmxhZ3M7CiAJY2hhcgkJdGFpX2NvbXByZXNzaW9u OworCU9pZAkJCXpzdGRfZGljdGlkOworCWludAkJCXpzdGRfbGV2ZWw7CiB9IFRvYXN0QXR0cklu Zm87CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfaW50ZXJuYWxz LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmgKaW5kZXggMDZhZTg1ODNj MS4uMjY1Mjg4NTBiYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RvYXN0X2ludGVy bmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90b2FzdF9pbnRlcm5hbHMuaApAQCAtMjUs NiArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCB0b2FzdF9jb21wcmVzc19oZWFkZXIKIAlpbnQzMgkJ dmxfbGVuXzsJCS8qIHZhcmxlbmEgaGVhZGVyIChkbyBub3QgdG91Y2ggZGlyZWN0bHkhKSAqLwog CXVpbnQzMgkJdGNpbmZvOwkJCS8qIDIgYml0cyBmb3IgY29tcHJlc3Npb24gbWV0aG9kIGFuZCAz MCBiaXRzCiAJCQkJCQkJCSAqIGV4dGVybmFsIHNpemU7IHNlZSB2YV9leHRpbmZvICovCisJdWlu dDMyCQlleHRfYWxnOwogfSB0b2FzdF9jb21wcmVzc19oZWFkZXI7CiAKIC8qCkBAIC0zMywxOSAr MzQsMzEgQEAgdHlwZWRlZiBzdHJ1Y3QgdG9hc3RfY29tcHJlc3NfaGVhZGVyCiAgKi8KICNkZWZp bmUgVE9BU1RfQ09NUFJFU1NfRVhUU0laRShwdHIpIFwKIAkoKCh0b2FzdF9jb21wcmVzc19oZWFk ZXIgKikgKHB0cikpLT50Y2luZm8gJiBWQVJMRU5BX0VYVFNJWkVfTUFTSykKLSNkZWZpbmUgVE9B U1RfQ09NUFJFU1NfTUVUSE9EKHB0cikgXAotCSgoKHRvYXN0X2NvbXByZXNzX2hlYWRlciAqKSAo cHRyKSktPnRjaW5mbyA+PiBWQVJMRU5BX0VYVFNJWkVfQklUUykKLQotI2RlZmluZSBUT0FTVF9D T01QUkVTU19TRVRfU0laRV9BTkRfQ09NUFJFU1NfTUVUSE9EKHB0ciwgbGVuLCBjbV9tZXRob2Qp IFwKLQlkbyB7IFwKLQkJQXNzZXJ0KChsZW4pID4gMCAmJiAobGVuKSA8PSBWQVJMRU5BX0VYVFNJ WkVfTUFTSyk7IFwKLQkJQXNzZXJ0KChjbV9tZXRob2QpID09IFRPQVNUX1BHTFpfQ09NUFJFU1NJ T05fSUQgfHwgXAotCQkJICAgKGNtX21ldGhvZCkgPT0gVE9BU1RfTFo0X0NPTVBSRVNTSU9OX0lE KTsgXAotCQkoKHRvYXN0X2NvbXByZXNzX2hlYWRlciAqKSAocHRyKSktPnRjaW5mbyA9IFwKLQkJ CShsZW4pIHwgKCh1aW50MzIpIChjbV9tZXRob2QpIDw8IFZBUkxFTkFfRVhUU0laRV9CSVRTKTsg XAorI2RlZmluZSBUT0FTVF9DT01QUkVTU19NRVRIT0QoUFRSKSAgICAgICAgICAgICAgICAgICAg ICAgCQkJCQkJCQkJCQkJCSAgCQlcCisJKCAoKCgodG9hc3RfY29tcHJlc3NfaGVhZGVyICopIChQ VFIpKS0+dGNpbmZvID4+IFZBUkxFTkFfRVhUU0laRV9CSVRTKSA9PSBWQVJMRU5BX0VYVEVOREVE X0NPTVBSRVNTSU9OX0ZMQUcgKSAJXAorCQk/ICgoKHRvYXN0X2NvbXByZXNzX2hlYWRlciAqKSAo UFRSKSktPmV4dF9hbGcpICAgICAJCQkJCQkJCQkJCQkJIAkJXAorCQk6ICggKCgodG9hc3RfY29t cHJlc3NfaGVhZGVyICopIChQVFIpKS0+dGNpbmZvKSA+PiBWQVJMRU5BX0VYVFNJWkVfQklUUyAp ICkKKworI2RlZmluZSBUT0FTVF9DT01QUkVTU19TRVRfU0laRV9BTkRfQ09NUFJFU1NfTUVUSE9E KHB0ciwgbGVuLCBjbV9tZXRob2QpIAkJCQkJCQkJCQlcCisJZG8geyAJCQkJCQkJCQkJCQkJCQkJ CQkJCQkJCQkJCVwKKwkJQXNzZXJ0KChsZW4pID4gMCAmJiAobGVuKSA8PSBWQVJMRU5BX0VYVFNJ WkVfTUFTSyk7IAkJCQkJCQkJCQkJCQlcCisJCUFzc2VydCgoY21fbWV0aG9kKSA9PSBUT0FTVF9Q R0xaX0NPTVBSRVNTSU9OX0lEIHx8IAkJCQkJCQkJCQkJCQkJXAorCQkJCShjbV9tZXRob2QpID09 IFRPQVNUX0xaNF9DT01QUkVTU0lPTl9JRCAgfHwgCQkJCQkJCQkJCQkJCVwKKwkJCQkoY21fbWV0 aG9kKSA9PSBUT0FTVF9aU1REX0NPTVBSRVNTSU9OX0lEKTsgCQkJCQkJCQkJCQkJCQlcCisJCS8q IElmIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgaXMgbGVzcyB0aGFuIFRPQVNUX1pTVERfQ09NUFJF U1NJT05fSUQsIGRvbid0IHVzZSBleHRfYWxnICovIAkJCQlcCisJCWlmICgoY21fbWV0aG9kKSA8 IFRPQVNUX1pTVERfQ09NUFJFU1NJT05fSUQpIHsgCQkJCQkJCQkJCQkJCQkJXAorCQkJKCh0b2Fz dF9jb21wcmVzc19oZWFkZXIgKikgKHB0cikpLT50Y2luZm8gPSAJCQkJCQkJCQkJCQkJCVwKKwkJ CQkobGVuKSB8ICgodWludDMyKSAoY21fbWV0aG9kKSA8PCBWQVJMRU5BX0VYVFNJWkVfQklUUyk7 IAkJCQkJCQkJCQlcCisJCX0gZWxzZSB7IAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCS8q IEZvciBjb21wcmVzc2lvbiBtZXRob2RzIGFmdGVyIGx6NCwgdXNlICdWQVJMRU5BX0VYVEVOREVE X0NPTVBSRVNTSU9OX0ZMQUcnIAkJCQkJCVwKKwkJCQlpbiB0aGUgdG9wIGJpdHMgb2YgdGNpbmZv IHRvIGluZGljYXRlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyBzdG9yZWQgaW4gZXh0X2FsZy4J Ki8JCQlcCisJCQkoKHRvYXN0X2NvbXByZXNzX2hlYWRlciAqKSAocHRyKSktPnRjaW5mbyA9IAkJ CQkJCQkJCQkJCQkJXAorCQkJKGxlbikgfCAoKHVpbnQzMilWQVJMRU5BX0VYVEVOREVEX0NPTVBS RVNTSU9OX0ZMQUcgPDwgVkFSTEVOQV9FWFRTSVpFX0JJVFMpOyAJCQkJCQlcCisJCQkoKHRvYXN0 X2NvbXByZXNzX2hlYWRlciAqKSAocHRyKSktPmV4dF9hbGcgPSAoY21fbWV0aG9kKTsgCQkJCQkJ CQkJCQlcCisJCX0gCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAot ZXh0ZXJuIERhdHVtIHRvYXN0X2NvbXByZXNzX2RhdHVtKERhdHVtIHZhbHVlLCBjaGFyIGNtZXRo b2QpOworZXh0ZXJuIERhdHVtIHRvYXN0X2NvbXByZXNzX2RhdHVtKERhdHVtIHZhbHVlLCBjaGFy IGNtZXRob2QsIE9pZCB6c3RkX2RpY3RpZCwgaW50IHpzdGRfbGV2ZWwpOwogZXh0ZXJuIE9pZAl0 b2FzdF9nZXRfdmFsaWRfaW5kZXgoT2lkIHRvYXN0b2lkLCBMT0NLTU9ERSBsb2NrKTsKIAogZXh0 ZXJuIHZvaWQgdG9hc3RfZGVsZXRlX2RhdHVtKFJlbGF0aW9uIHJlbCwgRGF0dW0gdmFsdWUsIGJv b2wgaXNfc3BlY3VsYXRpdmUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9NYWtl ZmlsZSBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvTWFrZWZpbGUKaW5kZXggMmJiYzc4MDVmZS4uMWVj ZDc2ZGQzMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9NYWtlZmlsZQorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL01ha2VmaWxlCkBAIC04MSw3ICs4MSw4IEBAIENBVEFMT0dfSEVB REVSUyA6PSBcCiAJcGdfcHVibGljYXRpb25fbmFtZXNwYWNlLmggXAogCXBnX3B1YmxpY2F0aW9u X3JlbC5oIFwKIAlwZ19zdWJzY3JpcHRpb24uaCBcCi0JcGdfc3Vic2NyaXB0aW9uX3JlbC5oCisJ cGdfc3Vic2NyaXB0aW9uX3JlbC5oIFwKKwlwZ196c3RkX2RpY3Rpb25hcmllcy5oCiAKIEdFTkVS QVRFRF9IRUFERVJTIDo9ICQoQ0FUQUxPR19IRUFERVJTOiUuaD0lX2QuaCkKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9n L2NhdHZlcnNpb24uaAppbmRleCBmMDk2MmUxN2IzLi5kOGExNDQzMmJkIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L2NhdHZlcnNpb24uaApAQCAtNTcsNiArNTcsNiBAQAogICovCiAKIC8qCQkJCQkJCXl5eXltbWRk TiAqLwotI2RlZmluZSBDQVRBTE9HX1ZFUlNJT05fTk8JMjAyNTAzMDMxCisjZGVmaW5lIENBVEFM T0dfVkVSU0lPTl9OTwkyMDI1MDMwNTEKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL21lc29uLmJ1aWxkIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9tZXNvbi5idWlsZApp bmRleCBlYzFjZjQ2N2Y2Li5lOWNiNmQ5MTFjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL21lc29uLmJ1aWxkCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvbWVzb24uYnVpbGQKQEAg LTY5LDYgKzY5LDcgQEAgY2F0YWxvZ19oZWFkZXJzID0gWwogICAncGdfcHVibGljYXRpb25fcmVs LmgnLAogICAncGdfc3Vic2NyaXB0aW9uLmgnLAogICAncGdfc3Vic2NyaXB0aW9uX3JlbC5oJywK KyAgJ3BnX3pzdGRfZGljdGlvbmFyaWVzLmgnLAogXQogCiAjIFRoZSAuZGF0IGZpbGVzIHdlIG5l ZWQgY2FuIGp1c3QgYmUgbGlzdGVkIGFscGhhYmV0aWNhbGx5LgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKaW5kZXggMTM0YjNkZDg2OC4uMzc2Mzc1YzA1NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CkBAIC0xMjQ1MCw0ICsxMjQ1MCwxNCBAQAogICBwcm9hcmd0eXBlcyA9PiAnaW50NCcsCiAgIHBy b3NyYyA9PiAnZ2lzdF9zdHJhdG51bV9jb21tb24nIH0sCiAKKyMgWlNURCBnZW5lcmF0ZSBkaWN0 aW9uYXJ5IHRyYWluaW5nIGZ1bmN0aW9ucworeyBvaWQgPT4gJzkyNDEnLCBkZXNjciA9PiAnWlNU RCBnZW5lcmF0ZSBkaWN0aW9uYXJ5IHN1cHBvcnQnLAorICBwcm9uYW1lID0+ICd6c3RkX2RpY3Rp b25hcnlfYnVpbGRlcicsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMg PT4gJ2ludGVybmFsIGludGVybmFsJywKKyAgcHJvc3JjID0+ICd6c3RkX2RpY3Rpb25hcnlfYnVp bGRlcicgfSwKKworeyBvaWQgPT4gJzkyNDInLCBkZXNjciA9PiAnQnVpbGQgenN0ZCBkaWN0aW9u YXJpZXMgZm9yIGEgY29sdW1uLicsCisgIHByb25hbWUgPT4gJ2J1aWxkX3pzdGRfZGljdF9mb3Jf YXR0cmlidXRlJywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0 IGludDQnLAorICBwcm9zcmMgPT4gJ2J1aWxkX3pzdGRfZGljdF9mb3JfYXR0cmlidXRlJyB9LAog XQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ190eXBlLmRhdCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfdHlwZS5kYXQKaW5kZXggNmRjYTc3ZTBhMi4uNThhMzg5YTc4YyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ190eXBlLmRhdAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3R5cGUuZGF0CkBAIC00MCw3ICs0MCw3IEBACiAgIGRlc2NyID0+ICd2YXJp YWJsZS1sZW5ndGggc3RyaW5nLCBiaW5hcnkgdmFsdWVzIGVzY2FwZWQnLAogICB0eXBuYW1lID0+ ICdieXRlYScsIHR5cGxlbiA9PiAnLTEnLCB0eXBieXZhbCA9PiAnZicsIHR5cGNhdGVnb3J5ID0+ ICdVJywKICAgdHlwaW5wdXQgPT4gJ2J5dGVhaW4nLCB0eXBvdXRwdXQgPT4gJ2J5dGVhb3V0Jywg dHlwcmVjZWl2ZSA9PiAnYnl0ZWFyZWN2JywKLSAgdHlwc2VuZCA9PiAnYnl0ZWFzZW5kJywgdHlw YWxpZ24gPT4gJ2knLCB0eXBzdG9yYWdlID0+ICd4JyB9LAorICB0eXBzZW5kID0+ICdieXRlYXNl bmQnLCB0eXBhbGlnbiA9PiAnaScsIHR5cHN0b3JhZ2UgPT4gJ3gnLCB0eXBlYnVpbGR6c3RkZGlj dGlvbmFyeSA9PiAnenN0ZF9kaWN0aW9uYXJ5X2J1aWxkZXInIH0sCiB7IG9pZCA9PiAnMTgnLCBh cnJheV90eXBlX29pZCA9PiAnMTAwMicsIGRlc2NyID0+ICdzaW5nbGUgY2hhcmFjdGVyJywKICAg dHlwbmFtZSA9PiAnY2hhcicsIHR5cGxlbiA9PiAnMScsIHR5cGJ5dmFsID0+ICd0JywgdHlwY2F0 ZWdvcnkgPT4gJ1onLAogICB0eXBpbnB1dCA9PiAnY2hhcmluJywgdHlwb3V0cHV0ID0+ICdjaGFy b3V0JywgdHlwcmVjZWl2ZSA9PiAnY2hhcnJlY3YnLApAQCAtODMsNyArODMsNyBAQAogICB0eXBu YW1lID0+ICd0ZXh0JywgdHlwbGVuID0+ICctMScsIHR5cGJ5dmFsID0+ICdmJywgdHlwY2F0ZWdv cnkgPT4gJ1MnLAogICB0eXBpc3ByZWZlcnJlZCA9PiAndCcsIHR5cGlucHV0ID0+ICd0ZXh0aW4n LCB0eXBvdXRwdXQgPT4gJ3RleHRvdXQnLAogICB0eXByZWNlaXZlID0+ICd0ZXh0cmVjdicsIHR5 cHNlbmQgPT4gJ3RleHRzZW5kJywgdHlwYWxpZ24gPT4gJ2knLAotICB0eXBzdG9yYWdlID0+ICd4 JywgdHlwY29sbGF0aW9uID0+ICdkZWZhdWx0JyB9LAorICB0eXBzdG9yYWdlID0+ICd4JywgdHlw ZWJ1aWxkenN0ZGRpY3Rpb25hcnkgPT4gJ3pzdGRfZGljdGlvbmFyeV9idWlsZGVyJywgdHlwY29s bGF0aW9uID0+ICdkZWZhdWx0JyB9LAogeyBvaWQgPT4gJzI2JywgYXJyYXlfdHlwZV9vaWQgPT4g JzEwMjgnLAogICBkZXNjciA9PiAnb2JqZWN0IGlkZW50aWZpZXIob2lkKSwgbWF4aW11bSA0IGJp bGxpb24nLAogICB0eXBuYW1lID0+ICdvaWQnLCB0eXBsZW4gPT4gJzQnLCB0eXBieXZhbCA9PiAn dCcsIHR5cGNhdGVnb3J5ID0+ICdOJywKQEAgLTQ0Niw3ICs0NDYsNyBAQAogICB0eXBuYW1lID0+ ICdqc29uYicsIHR5cGxlbiA9PiAnLTEnLCB0eXBieXZhbCA9PiAnZicsIHR5cGNhdGVnb3J5ID0+ ICdVJywKICAgdHlwc3Vic2NyaXB0ID0+ICdqc29uYl9zdWJzY3JpcHRfaGFuZGxlcicsIHR5cGlu cHV0ID0+ICdqc29uYl9pbicsCiAgIHR5cG91dHB1dCA9PiAnanNvbmJfb3V0JywgdHlwcmVjZWl2 ZSA9PiAnanNvbmJfcmVjdicsIHR5cHNlbmQgPT4gJ2pzb25iX3NlbmQnLAotICB0eXBhbGlnbiA9 PiAnaScsIHR5cHN0b3JhZ2UgPT4gJ3gnIH0sCisgIHR5cGFsaWduID0+ICdpJywgdHlwc3RvcmFn ZSA9PiAneCcsIHR5cGVidWlsZHpzdGRkaWN0aW9uYXJ5ID0+ICd6c3RkX2RpY3Rpb25hcnlfYnVp bGRlcicgfSwKIHsgb2lkID0+ICc0MDcyJywgYXJyYXlfdHlwZV9vaWQgPT4gJzQwNzMnLCBkZXNj ciA9PiAnSlNPTiBwYXRoJywKICAgdHlwbmFtZSA9PiAnanNvbnBhdGgnLCB0eXBsZW4gPT4gJy0x JywgdHlwYnl2YWwgPT4gJ2YnLCB0eXBjYXRlZ29yeSA9PiAnVScsCiAgIHR5cGlucHV0ID0+ICdq c29ucGF0aF9pbicsIHR5cG91dHB1dCA9PiAnanNvbnBhdGhfb3V0JywKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfdHlwZS5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ190eXBl LmgKaW5kZXggZmY2NjY3MTFhNS4uYmQ4MmRhOGE4OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ190eXBlLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ190eXBlLmgKQEAg LTIyNyw2ICsyMjcsMTEgQEAgQ0FUQUxPRyhwZ190eXBlLDEyNDcsVHlwZVJlbGF0aW9uSWQpIEJL SV9CT09UU1RSQVAgQktJX1JPV1RZUEVfT0lEKDcxLFR5cGVSZWxhdGkKIAkgKi8KIAlPaWQJCQl0 eXBjb2xsYXRpb24gQktJX0RFRkFVTFQoMCkgQktJX0xPT0tVUF9PUFQocGdfY29sbGF0aW9uKTsK IAorCS8qCisJICogQ3VzdG9tIGdlbmVyYXRlIGRpY3Rpb25hcnkgcHJvY2VkdXJlIGZvciB0aGUg ZGF0YXR5cGUgKDAgc2VsZWN0cyB0aGUKKwkgKiBkZWZhdWx0KS4KKwkgKi8KKwlyZWdwcm9jCQl0 eXBlYnVpbGR6c3RkZGljdGlvbmFyeSBCS0lfREVGQVVMVCgtKSBCS0lfQVJSQVlfREVGQVVMVCgt KSBCS0lfTE9PS1VQX09QVChwZ19wcm9jKTsKICNpZmRlZiBDQVRBTE9HX1ZBUkxFTgkJCS8qIHZh cmlhYmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSAqLwogCiAJLyoKQEAgLTM4MCw3ICszODUs OCBAQCBleHRlcm4gT2JqZWN0QWRkcmVzcyBUeXBlQ3JlYXRlKE9pZCBuZXdUeXBlT2lkLAogCQkJ CQkJCQlpbnQzMiB0eXBlTW9kLAogCQkJCQkJCQlpbnQzMiB0eXBORGltcywKIAkJCQkJCQkJYm9v bCB0eXBlTm90TnVsbCwKLQkJCQkJCQkJT2lkIHR5cGVDb2xsYXRpb24pOworCQkJCQkJCQlPaWQg dHlwZUNvbGxhdGlvbiwKKwkJCQkJCQkJT2lkIGdlbmVyYXRlRGljdGlvbmFyeVByb2NlZHVyZSk7 CiAKIGV4dGVybiB2b2lkIEdlbmVyYXRlVHlwZURlcGVuZGVuY2llcyhIZWFwVHVwbGUgdHlwZVR1 cGxlLAogCQkJCQkJCQkJIFJlbGF0aW9uIHR5cGVDYXRhbG9nLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ196c3RkX2RpY3Rpb25hcmllcy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ196c3RkX2RpY3Rpb25hcmllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLmIyMDBhYjU0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3pzdGRfZGljdGlvbmFyaWVzLmgKQEAgLTAsMCArMSw1MyBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogcGdfenN0ZF9kaWN0aW9uYXJpZXMuaAorICoJICBkZWZpbml0aW9uIG9mIHRo ZSAienN0ZCBkaWN0aW9uYXkiIHN5c3RlbSBjYXRhbG9nIChwZ196c3RkX2RpY3Rpb25hcmllcykK KyAqCisgKiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3pzdGRfZGljdGlvbmFyaWVzLmgKKyAqCisg KiBOT1RFUworICoJICBUaGUgQ2F0YWxvZy5wbSBtb2R1bGUgcmVhZHMgdGhpcyBmaWxlIGFuZCBk ZXJpdmVzIHNjaGVtYQorICoJICBpbmZvcm1hdGlvbi4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2lmbmRlZiBQR19aU1REX0RJQ1RJT05BUklFU19ICisjZGVmaW5lIFBHX1pTVERfRElD VElPTkFSSUVTX0gKKworI2luY2x1ZGUgImNhdGFsb2cvZ2VuYmtpLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ196c3RkX2RpY3Rpb25hcmllc19kLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAq CQlwZ196c3RkX2RpY3Rpb25hcmllcyBkZWZpbml0aW9uLiAgY3BwIHR1cm5zIHRoaXMgaW50bwor ICoJCXR5cGVkZWYgc3RydWN0IEZvcm1EYXRhX3BnX3pzdGRfZGljdGlvbmFyaWVzCisgKiAtLS0t LS0tLS0tLS0tLS0tCisgKi8KK0NBVEFMT0cocGdfenN0ZF9kaWN0aW9uYXJpZXMsOTk0Nixac3Rk RGljdGlvbmFyaWVzUmVsYXRpb25JZCkKK3sKKwlPaWQJCQlkaWN0aWQgQktJX0ZPUkNFX05PVF9O VUxMOworCisJLyoKKwkgKiB2YXJpYWJsZS1sZW5ndGggZmllbGRzIHN0YXJ0IGhlcmUsIGJ1dCB3 ZSBhbGxvdyBkaXJlY3QgYWNjZXNzIHRvIGRpY3QKKwkgKi8KKwlieXRlYQkJZGljdCBCS0lfRk9S Q0VfTk9UX05VTEw7Cit9IEZvcm1EYXRhX3BnX3pzdGRfZGljdGlvbmFyaWVzOworCisvKiBQb2lu dGVyIHR5cGUgdG8gYSB0dXBsZSB3aXRoIHRoZSBmb3JtYXQgb2YgcGdfenN0ZF9kaWN0aW9uYXJp ZXMgcmVsYXRpb24gKi8KK3R5cGVkZWYgRm9ybURhdGFfcGdfenN0ZF9kaWN0aW9uYXJpZXMgKkZv cm1fcGdfenN0ZF9kaWN0aW9uYXJpZXM7CisKK0RFQ0xBUkVfVE9BU1QocGdfenN0ZF9kaWN0aW9u YXJpZXMsIDk5NDcsIDk5NDgpOworCitERUNMQVJFX1VOSVFVRV9JTkRFWF9QS0VZKHBnX3pzdGRf ZGljdGlvbmFyaWVzX2RpY3RpZF9pbmRleCwgOTk0OSwgWnN0ZERpY3RpZEluZGV4SWQsIHBnX3pz dGRfZGljdGlvbmFyaWVzLCBidHJlZShkaWN0aWQgb2lkX29wcykpOworCitNQUtFX1NZU0NBQ0hF KFpTVERESUNUSURPSUQsIHBnX3pzdGRfZGljdGlvbmFyaWVzX2RpY3RpZF9pbmRleCwgMTI4KTsK KwordHlwZWRlZiBzdHJ1Y3QgWnN0ZFRyYWluaW5nRGF0YQoreworCWNoYXIJICAgKnNhbXBsZV9i dWZmZXI7CS8qIFBvaW50ZXIgdG8gdGhlIHJhdyBzYW1wbGUgYnVmZmVyICovCisJc2l6ZV90CSAg ICpzYW1wbGVfc2l6ZXM7CS8qIEFycmF5IG9mIHNhbXBsZSBzaXplcyAqLworCWludAkJCW5pdGVt czsJCQkvKiBOdW1iZXIgb2Ygc2FtcGxlIHNpemVzICovCit9IFpzdGRUcmFpbmluZ0RhdGE7CisK K2V4dGVybiBieXRlYSAqZ2V0X3pzdGRfZGljdChPaWQgZGljdGlkKTsKKworI2VuZGlmCQkJCQkJ CS8qIFBHX1pTVERfRElDVElPTkFSSUVTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bh cnNlci9hbmFseXplLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvYW5hbHl6ZS5oCmluZGV4IGYxYmQx OGM0OWYuLmU0OTQ0MzY4NzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9hbmFseXpl LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2FuYWx5emUuaApAQCAtMTcsNiArMTcsNyBAQAog I2luY2x1ZGUgIm5vZGVzL3BhcmFtcy5oIgogI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgi CiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvaHR1cC5o IgogCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGF0IGVuZCBvZiBwYXJzZSBh bmFseXNpcyAqLwogdHlwZWRlZiB2b2lkICgqcG9zdF9wYXJzZV9hbmFseXplX2hvb2tfdHlwZSkg KFBhcnNlU3RhdGUgKnBzdGF0ZSwKQEAgLTY0LDQgKzY1LDggQEAgZXh0ZXJuIExpc3QgKkJ1aWxk T25Db25mbGljdEV4Y2x1ZGVkVGFyZ2V0bGlzdChSZWxhdGlvbiB0YXJnZXRyZWwsCiAKIGV4dGVy biBTb3J0R3JvdXBDbGF1c2UgKm1ha2VTb3J0R3JvdXBDbGF1c2VGb3JTZXRPcChPaWQgcmVzY29s dHlwZSwgYm9vbCByZXF1aXJlX2hhc2gpOwogCitleHRlcm4gaW50CWFjcXVpcmVfc2FtcGxlX3Jv d3MoUmVsYXRpb24gb25lcmVsLCBpbnQgZWxldmVsLAorCQkJCQkJCQlIZWFwVHVwbGUgKnJvd3Ms IGludCB0YXJncm93cywKKwkJCQkJCQkJZG91YmxlICp0b3RhbHJvd3MsIGRvdWJsZSAqdG90YWxk ZWFkcm93cyk7CisKICNlbmRpZgkJCQkJCQkvKiBBTkFMWVpFX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2F0dG9wdGNhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9hdHRvcHRj YWNoZS5oCmluZGV4IGY2ODRhNzcyYWYuLjkzYzZjNTllMDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL2F0dG9wdGNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvYXR0b3B0Y2Fj aGUuaApAQCAtMjEsNiArMjEsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQXR0cmlidXRlT3B0cwogCWlu dDMyCQl2bF9sZW5fOwkJLyogdmFybGVuYSBoZWFkZXIgKGRvIG5vdCB0b3VjaCBkaXJlY3RseSEp ICovCiAJZmxvYXQ4CQluX2Rpc3RpbmN0OwogCWZsb2F0OAkJbl9kaXN0aW5jdF9pbmhlcml0ZWQ7 CisJZG91YmxlCQl6c3RkX2RpY3RpZDsJLyogT2lkIGlzIGEgMzItYml0IHVuc2lnbmVkIGludGVn ZXIsIGJ1dAorCQkJCQkJCQkgKiByZWxvcHRfaW50IGlzIGxpbWl0ZWQgdG8gSU5UX01BWCwgc28g aXQKKwkJCQkJCQkJICogY2Fubm90IHJlcHJlc2VudCB0aGUgZnVsbCByYW5nZSBvZiBPaWQKKwkJ CQkJCQkJICogdmFsdWVzLiAqLworCWludAkJCXpzdGRfZGljdF9zaXplOworCWludAkJCXpzdGRf Y21wX2xldmVsOwogfSBBdHRyaWJ1dGVPcHRzOwogCiBleHRlcm4gQXR0cmlidXRlT3B0cyAqZ2V0 X2F0dHJpYnV0ZV9vcHRpb25zKE9pZCBhdHRyZWxpZCwgaW50IGF0dG51bSk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS92YXJhdHQuaCBiL3NyYy9pbmNsdWRlL3ZhcmF0dC5oCmluZGV4IDJlODU2 NGQ0OTkuLjExZTBiZjUzYWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3ZhcmF0dC5oCisrKyBi L3NyYy9pbmNsdWRlL3ZhcmF0dC5oCkBAIC0zNiwxNCArMzYsMTcgQEAgdHlwZWRlZiBzdHJ1Y3Qg dmFyYXR0X2V4dGVybmFsCiAJCQkJCQkJCSAqIGNvbXByZXNzaW9uIG1ldGhvZCAqLwogCU9pZAkJ CXZhX3ZhbHVlaWQ7CQkvKiBVbmlxdWUgSUQgb2YgdmFsdWUgd2l0aGluIFRPQVNUIHRhYmxlICov CiAJT2lkCQkJdmFfdG9hc3RyZWxpZDsJLyogUmVsSUQgb2YgVE9BU1QgdGFibGUgY29udGFpbmlu ZyBpdCAqLworCXVpbnQzMgkJdmFfY21wX2FsZzsJCS8qIFRoZSBhZGRpdGlvbmFsIGNvbXByZXNz aW9uIGFsZ29yaXRobXMKKwkJCQkJCQkJICogaW5mb3JtYXRpb24uICovCiB9CQkJdmFyYXR0X2V4 dGVybmFsOwogCiAvKgogICogVGhlc2UgbWFjcm9zIGRlZmluZSB0aGUgInNhdmVkIHNpemUiIHBv cnRpb24gb2YgdmFfZXh0aW5mby4gIEl0cyByZW1haW5pbmcKICAqIHR3byBoaWdoLW9yZGVyIGJp dHMgaWRlbnRpZnkgdGhlIGNvbXByZXNzaW9uIG1ldGhvZC4KICAqLwotI2RlZmluZSBWQVJMRU5B X0VYVFNJWkVfQklUUwkzMAotI2RlZmluZSBWQVJMRU5BX0VYVFNJWkVfTUFTSwkoKDFVIDw8IFZB UkxFTkFfRVhUU0laRV9CSVRTKSAtIDEpCisjZGVmaW5lIFZBUkxFTkFfRVhUU0laRV9CSVRTCQkJ CTMwCisjZGVmaW5lIFZBUkxFTkFfRVhUU0laRV9NQVNLCQkJCSgoMVUgPDwgVkFSTEVOQV9FWFRT SVpFX0JJVFMpIC0gMSkKKyNkZWZpbmUgVkFSTEVOQV9FWFRFTkRFRF9DT01QUkVTU0lPTl9GTEFH CTB4MwogCiAvKgogICogc3RydWN0IHZhcmF0dF9pbmRpcmVjdCBpcyBhICJUT0FTVCBwb2ludGVy IiByZXByZXNlbnRpbmcgYW4gb3V0LW9mLWxpbmUKQEAgLTEyMiw2ICsxMjUsMTMgQEAgdHlwZWRl ZiB1bmlvbgogCQkJCQkJCQkgKiBjb21wcmVzc2lvbiBtZXRob2Q7IHNlZSB2YV9leHRpbmZvICov CiAJCWNoYXIJCXZhX2RhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsgLyogQ29tcHJlc3NlZCBk YXRhICovCiAJfQkJCXZhX2NvbXByZXNzZWQ7CisJc3RydWN0CisJeworCQl1aW50MzIJCXZhX2hl YWRlcjsKKwkJdWludDMyCQl2YV90Y2luZm87CisJCXVpbnQzMgkJdmFfY21wX2FsZzsKKwkJY2hh cgkJdmFfZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworCX0JCQl2YV9jb21wcmVzc2VkX2V4 dDsKIH0gdmFyYXR0cmliXzRiOwogCiB0eXBlZGVmIHN0cnVjdApAQCAtMjQyLDcgKzI1MiwxNCBA QCB0eXBlZGVmIHN0cnVjdAogI2VuZGlmCQkJCQkJCS8qIFdPUkRTX0JJR0VORElBTiAqLwogCiAj ZGVmaW5lIFZBUkRBVEFfNEIoUFRSKQkJKCgodmFyYXR0cmliXzRiICopIChQVFIpKS0+dmFfNGJ5 dGUudmFfZGF0YSkKLSNkZWZpbmUgVkFSREFUQV80Ql9DKFBUUikJKCgodmFyYXR0cmliXzRiICop IChQVFIpKS0+dmFfY29tcHJlc3NlZC52YV9kYXRhKQorLyoKKyAqIElmIHZhX3RjaW5mbyA+PiBW QVJMRU5BX0VYVFNJWkVfQklUUyA9PSBWQVJMRU5BX0VYVEVOREVEX0NPTVBSRVNTSU9OX0ZMQUcK KyAqIHVzZSB2YV9jb21wcmVzc2VkX2V4dDsgb3RoZXJ3aXNlLCB1c2UgdGhlIHZhX2NvbXByZXNz ZWQuCisgKi8KKyNkZWZpbmUgVkFSREFUQV80Ql9DKFBUUikgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCSAgXAorKCAoKCh2YXJhdHRyaWJf NGIgKikoUFRSKSktPnZhX2NvbXByZXNzZWQudmFfdGNpbmZvID4+IFZBUkxFTkFfRVhUU0laRV9C SVRTKSA9PSBWQVJMRU5BX0VYVEVOREVEX0NPTVBSRVNTSU9OX0ZMQUcgXAorICA/ICgodmFyYXR0 cmliXzRiICopKFBUUikpLT52YV9jb21wcmVzc2VkX2V4dC52YV9kYXRhICAgICAgICAgICAgICAg ICAgICAgICAgCQkJCQkJCQkgIFwKKyAgOiAoKHZhcmF0dHJpYl80YiAqKShQVFIpKS0+dmFfY29t cHJlc3NlZC52YV9kYXRhICkKICNkZWZpbmUgVkFSREFUQV8xQihQVFIpCQkoKCh2YXJhdHRyaWJf MWIgKikgKFBUUikpLT52YV9kYXRhKQogI2RlZmluZSBWQVJEQVRBXzFCX0UoUFRSKQkoKCh2YXJh dHRyaWJfMWJfZSAqKSAoUFRSKSktPnZhX2RhdGEpCiAKQEAgLTI1Miw2ICsyNjksNyBAQCB0eXBl ZGVmIHN0cnVjdAogCiAjZGVmaW5lIFZBUkhEUlNaX0VYVEVSTkFMCQlvZmZzZXRvZih2YXJhdHRy aWJfMWJfZSwgdmFfZGF0YSkKICNkZWZpbmUgVkFSSERSU1pfQ09NUFJFU1NFRAkJb2Zmc2V0b2Yo dmFyYXR0cmliXzRiLCB2YV9jb21wcmVzc2VkLnZhX2RhdGEpCisjZGVmaW5lIFZBUkhEUlNaX0NP TVBSRVNTRURfRVhUCW9mZnNldG9mKHZhcmF0dHJpYl80YiwgdmFfY29tcHJlc3NlZF9leHQudmFf ZGF0YSkKICNkZWZpbmUgVkFSSERSU1pfU0hPUlQJCQlvZmZzZXRvZih2YXJhdHRyaWJfMWIsIHZh X2RhdGEpCiAKICNkZWZpbmUgVkFSQVRUX1NIT1JUX01BWAkJMHg3RgpAQCAtMzI3LDIyICszNDUs NTQgQEAgdHlwZWRlZiBzdHJ1Y3QKIC8qIERlY29tcHJlc3NlZCBzaXplIGFuZCBjb21wcmVzc2lv biBtZXRob2Qgb2YgYSBjb21wcmVzc2VkLWluLWxpbmUgRGF0dW0gKi8KICNkZWZpbmUgVkFSREFU QV9DT01QUkVTU0VEX0dFVF9FWFRTSVpFKFBUUikgXAogCSgoKHZhcmF0dHJpYl80YiAqKSAoUFRS KSktPnZhX2NvbXByZXNzZWQudmFfdGNpbmZvICYgVkFSTEVOQV9FWFRTSVpFX01BU0spCi0jZGVm aW5lIFZBUkRBVEFfQ09NUFJFU1NFRF9HRVRfQ09NUFJFU1NfTUVUSE9EKFBUUikgXAotCSgoKHZh cmF0dHJpYl80YiAqKSAoUFRSKSktPnZhX2NvbXByZXNzZWQudmFfdGNpbmZvID4+IFZBUkxFTkFf RVhUU0laRV9CSVRTKQorLyoKKyAqICAtICJFeHRlbmRlZCIgZm9ybWF0IGlzIGluZGljYXRlZCBi eSAodmFfdGNpbmZvID4+IFZBUkxFTkFfRVhUU0laRV9CSVRTKSA9PSBWQVJMRU5BX0VYVEVOREVE X0NPTVBSRVNTSU9OX0ZMQUcKKyAqICAtIEZvciB0aGUgbm9uLWV4dGVuZGVkIGZvcm1hdHMsIHRo ZSBtZXRob2QgY29kZSBpcyBzdG9yZWQgaW4gdGhlIHRvcCBiaXRzIG9mIHZhX3RjaW5mby4KKyAq ICAtIEluIHRoZSBleHRlbmRlZCBmb3JtYXQsIHRoZSBtZXRob2QgY29kZSBpcyBzdG9yZWQgaW4g dmFfY21wX2FsZyBpbnN0ZWFkLgorICovCisjZGVmaW5lIFZBUkRBVEFfQ09NUFJFU1NFRF9HRVRf Q09NUFJFU1NfTUVUSE9EKFBUUikgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgIAkJ XAorKCAoKCgodmFyYXR0cmliXzRiICopIChQVFIpKS0+dmFfY29tcHJlc3NlZC52YV90Y2luZm8g Pj4gVkFSTEVOQV9FWFRTSVpFX0JJVFMpID09IFZBUkxFTkFfRVhURU5ERURfQ09NUFJFU1NJT05f RkxBRyApIAlcCisgID8gKCgodmFyYXR0cmliXzRiICopIChQVFIpKS0+dmFfY29tcHJlc3NlZF9l eHQudmFfY21wX2FsZykgICAgIAkJCQkJCQkJCQkJCSAgCQlcCisgIDogKCAoKCh2YXJhdHRyaWJf NGIgKikgKFBUUikpLT52YV9jb21wcmVzc2VkLnZhX3RjaW5mbykgPj4gVkFSTEVOQV9FWFRTSVpF X0JJVFMpKQogCiAvKiBTYW1lIGZvciBleHRlcm5hbCBEYXR1bXM7IGJ1dCBub3RlIGFyZ3VtZW50 IGlzIGEgc3RydWN0IHZhcmF0dF9leHRlcm5hbCAqLwogI2RlZmluZSBWQVJBVFRfRVhURVJOQUxf R0VUX0VYVFNJWkUodG9hc3RfcG9pbnRlcikgXAogCSgodG9hc3RfcG9pbnRlcikudmFfZXh0aW5m byAmIFZBUkxFTkFfRVhUU0laRV9NQVNLKQotI2RlZmluZSBWQVJBVFRfRVhURVJOQUxfR0VUX0NP TVBSRVNTX01FVEhPRCh0b2FzdF9wb2ludGVyKSBcCi0JKCh0b2FzdF9wb2ludGVyKS52YV9leHRp bmZvID4+IFZBUkxFTkFfRVhUU0laRV9CSVRTKQotCi0jZGVmaW5lIFZBUkFUVF9FWFRFUk5BTF9T RVRfU0laRV9BTkRfQ09NUFJFU1NfTUVUSE9EKHRvYXN0X3BvaW50ZXIsIGxlbiwgY20pIFwKLQlk byB7IFwKLQkJQXNzZXJ0KChjbSkgPT0gVE9BU1RfUEdMWl9DT01QUkVTU0lPTl9JRCB8fCBcCi0J CQkgICAoY20pID09IFRPQVNUX0xaNF9DT01QUkVTU0lPTl9JRCk7IFwKLQkJKCh0b2FzdF9wb2lu dGVyKS52YV9leHRpbmZvID0gXAotCQkJKGxlbikgfCAoKHVpbnQzMikgKGNtKSA8PCBWQVJMRU5B X0VYVFNJWkVfQklUUykpOyBcCi0JfSB3aGlsZSAoMCkKKy8qCisgKiBJZiAoKHRvYXN0X3BvaW50 ZXIpLnZhX2V4dGluZm8gPj4gVkFSTEVOQV9FWFRTSVpFX0JJVFMpID09IFZBUkxFTkFfRVhURU5E RURfQ09NUFJFU1NJT05fRkxBRywKKyAqIHRoYXQgbWVhbnMgdGhlIGNvbXByZXNzaW9uIG1ldGhv ZCBjb2RlIGlzIGluIHZhX2NtcF9hbGcuCisgKiBPdGhlcndpc2UsIHdlIHJldHVybiB0aGUgdG9w IHR3byBiaXRzIGRpcmVjdGx5IGZyb20gdmFfZXh0aW5mby4KKyAqLworI2RlZmluZSBWQVJBVFRf RVhURVJOQUxfR0VUX0NPTVBSRVNTX01FVEhPRCh0b2FzdF9wb2ludGVyKSAgCQkJCQkJCQkJXAor KCAoICgodG9hc3RfcG9pbnRlcikudmFfZXh0aW5mbyA+PiBWQVJMRU5BX0VYVFNJWkVfQklUUykg PT0gVkFSTEVOQV9FWFRFTkRFRF9DT01QUkVTU0lPTl9GTEFHICkgXAorICA/ICh0b2FzdF9wb2lu dGVyKS52YV9jbXBfYWxnICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCVwKKyAg OiAoKHRvYXN0X3BvaW50ZXIpLnZhX2V4dGluZm8gPj4gVkFSTEVOQV9FWFRTSVpFX0JJVFMpICkK KworI2RlZmluZSBWQVJBVFRfRVhURVJOQUxfU0VUX1NJWkVfQU5EX0NPTVBSRVNTX01FVEhPRCh0 b2FzdF9wb2ludGVyLCBsZW4sIGNtKSAJXAorICAgIGRvIHsgCQkJCQkJCQkJCQkJCQkJCQkJXAor ICAgICAgICAvKiBJZiBkZXNpcmVkLCBrZWVwIG9yIGV4cGFuZCB0aGUgQXNzZXJ0IGNoZWNrcyBm b3Iga25vd24gbWV0aG9kczogKi8gCVwKKyAgICAgICAgQXNzZXJ0KChjbSkgPT0gVE9BU1RfUEdM Wl9DT01QUkVTU0lPTl9JRCB8fCAJCQkJCQkJXAorICAgICAgICAgICAgICAgKGNtKSA9PSBUT0FT VF9MWjRfQ09NUFJFU1NJT05fSUQgfHwgCQkJCQkJCQlcCisJCQkgICAoY20pID09IFRPQVNUX1pT VERfQ09NUFJFU1NJT05fSUQpOyAJCQkJCQkJCVwKKyAgICAgICAgaWYgKChjbSkgPCBUT0FTVF9a U1REX0NPTVBSRVNTSU9OX0lEKSAJCQkJCQkJCQlcCisgICAgICAgIHsgCQkJCQkJCQkJCQkJCQkJ CQkJXAorICAgICAgICAgICAgLyogU3RvcmUgdGhlIGFjdHVhbCBtZXRob2QgaW4gdmFfZXh0aW5m byAqLyAJCQkJCQlcCisJCQkodG9hc3RfcG9pbnRlcikudmFfZXh0aW5mbyA9ICh1aW50MzIpKGxl bikgCQkJCQkJCVwKKyAgICAgICAgICAgICAgICB8ICgodWludDMyKShjbSkgPDwgVkFSTEVOQV9F WFRTSVpFX0JJVFMpOyAJCQkJCQlcCisgICAgICAgICAgICAvKiBDbGVhciBvciBzZXQgdmFfY21w X2FsZyB0byAwICovIAkJCQkJCQkJCVwKKyAgICAgICAgICAgICh0b2FzdF9wb2ludGVyKS52YV9j bXBfYWxnID0gMDsgCQkJCQkJCQkJXAorICAgICAgICB9IAkJCQkJCQkJCQkJCQkJCQkJCVwKKyAg ICAgICAgZWxzZSAJCQkJCQkJCQkJCQkJCQkJCVwKKyAgICAgICAgeyAJCQkJCQkJCQkJCQkJCQkJ CQlcCisgICAgICAgICAgICAvKiBTdG9yZSBWQVJMRU5BX0VYVEVOREVEX0NPTVBSRVNTSU9OX0ZM QUcgaW4gdGhlIHRvcCBiaXRzLAkJCVwKKwkJCSBtZWFuaW5nICJleHRlbmRlZCIgbWV0aG9kLiAq LyAJCQkJCQkJCQkJXAorICAgICAgICAgICAgKHRvYXN0X3BvaW50ZXIpLnZhX2V4dGluZm8gPSAo dWludDMyKShsZW4pIHwJCQkJCQlcCisgICAgICAgICAgICAgICAgKCh1aW50MzIpVkFSTEVOQV9F WFRFTkRFRF9DT01QUkVTU0lPTl9GTEFHIAkJCQkJCVwKKwkJCQkJCTw8IFZBUkxFTkFfRVhUU0la RV9CSVRTKTsJCQkJCQkJCVwKKyAgICAgICAgICAgIC8qIFB1dCB0aGUgcmVhbCBtZXRob2QgY29k ZSBpbiB2YV9jbXBfYWxnICovIAkJCQkJCVwKKyAgICAgICAgICAgICh0b2FzdF9wb2ludGVyKS52 YV9jbXBfYWxnID0gKGNtKTsgCQkJCQkJCQkJXAorICAgICAgICB9IAkJCQkJCQkJCQkJCQkJCQkJ CVwKKyAgICB9IHdoaWxlICgwKQogCiAvKgogICogVGVzdGluZyB3aGV0aGVyIGFuIGV4dGVybmFs bHktc3RvcmVkIHZhbHVlIGlzIGNvbXByZXNzZWQgbm93IHJlcXVpcmVzCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbXByZXNzaW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvY29tcHJlc3Npb24ub3V0CmluZGV4IDRkZDllZTcyMDAuLjk0NDk1Mzg4YWQg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29tcHJlc3Npb24ub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29tcHJlc3Npb24ub3V0CkBAIC0yMzgsMTAg KzIzOCwxMSBAQCBOT1RJQ0U6ICBtZXJnaW5nIG11bHRpcGxlIGluaGVyaXRlZCBkZWZpbml0aW9u cyBvZiBjb2x1bW4gImYxIgogLS0gdGVzdCBkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uIEdVQwog U0VUIGRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24gPSAnJzsKIEVSUk9SOiAgaW52YWxpZCB2YWx1 ZSBmb3IgcGFyYW1ldGVyICJkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uIjogIiIKLUhJTlQ6ICBB dmFpbGFibGUgdmFsdWVzOiBwZ2x6LCBsejQuCitISU5UOiAgQXZhaWxhYmxlIHZhbHVlczogcGds eiwgbHo0LCB6c3RkLgogU0VUIGRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24gPSAnSSBkbyBub3Qg ZXhpc3QgY29tcHJlc3Npb24nOwogRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIg ImRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24iOiAiSSBkbyBub3QgZXhpc3QgY29tcHJlc3Npb24i Ci1ISU5UOiAgQXZhaWxhYmxlIHZhbHVlczogcGdseiwgbHo0LgorSElOVDogIEF2YWlsYWJsZSB2 YWx1ZXM6IHBnbHosIGx6NCwgenN0ZC4KK1NFVCBkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uID0g J3pzdGQnOwogU0VUIGRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24gPSAnbHo0JzsKIFNFVCBkZWZh dWx0X3RvYXN0X2NvbXByZXNzaW9uID0gJ3BnbHonOwogLS0gdGVzdCBhbHRlciBjb21wcmVzc2lv biBtZXRob2QKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29tcHJlc3Np b25fMS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbXByZXNzaW9uXzEub3V0Cmlu ZGV4IDdiZDc2NDJiNGIuLjBjZTQ5MTUyMTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY29tcHJlc3Npb25fMS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9jb21wcmVzc2lvbl8xLm91dApAQCAtMjMzLDYgKzIzMyw5IEBAIEhJTlQ6ICBBdmFpbGFibGUg dmFsdWVzOiBwZ2x6LgogU0VUIGRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24gPSAnSSBkbyBub3Qg ZXhpc3QgY29tcHJlc3Npb24nOwogRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIg ImRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24iOiAiSSBkbyBub3QgZXhpc3QgY29tcHJlc3Npb24i CiBISU5UOiAgQXZhaWxhYmxlIHZhbHVlczogcGdsei4KK1NFVCBkZWZhdWx0X3RvYXN0X2NvbXBy ZXNzaW9uID0gJ3pzdGQnOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgImRl ZmF1bHRfdG9hc3RfY29tcHJlc3Npb24iOiAienN0ZCIKK0hJTlQ6ICBBdmFpbGFibGUgdmFsdWVz OiBwZ2x6LgogU0VUIGRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24gPSAnbHo0JzsKIEVSUk9SOiAg aW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uIjog Imx6NCIKIEhJTlQ6ICBBdmFpbGFibGUgdmFsdWVzOiBwZ2x6LgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jb21wcmVzc2lvbl96c3RkLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvY29tcHJlc3Npb25fenN0ZC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uN2RlMTEwYTkwYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY29tcHJlc3Npb25fenN0ZC5vdXQKQEAgLTAsMCArMSwxMjMgQEAKK1xz ZXQgSElERV9UT0FTVF9DT01QUkVTU0lPTiBmYWxzZQorLS0gRW5zdXJlIHN0YWJsZSByZXN1bHRz IHJlZ2FyZGxlc3Mgb2YgdGhlIGluc3RhbGxhdGlvbidzIGRlZmF1bHQuCitTRVQgZGVmYXVsdF90 b2FzdF9jb21wcmVzc2lvbiA9ICdwZ2x6JzsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIDEuIENyZWF0ZSBUZXN0IFRh YmxlIHdpdGggWnN0ZCBDb21wcmVzc2lvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMg Y21kYXRhX3pzdGQgQ0FTQ0FERTsKK05PVElDRTogIHRhYmxlICJjbWRhdGFfenN0ZCIgZG9lcyBu b3QgZXhpc3QsIHNraXBwaW5nCitDUkVBVEUgVEFCTEUgY21kYXRhX3pzdGQgKAorICAgIGYxIFRF WFQgQ09NUFJFU1NJT04genN0ZAorKTsKK0VSUk9SOiAgY29tcHJlc3Npb24gbWV0aG9kIHpzdGQg bm90IHN1cHBvcnRlZAorREVUQUlMOiAgVGhpcyBmdW5jdGlvbmFsaXR5IHJlcXVpcmVzIHRoZSBz ZXJ2ZXIgdG8gYmUgYnVpbHQgd2l0aCB6c3RkIHN1cHBvcnQuCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAyLiBJbnNl cnQgRGF0YSBSb3dzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCitETyAkJAorQkVHSU4KKyAgRk9SIGkgSU4gMS4uMTUgTE9P UAorICAgIElOU0VSVCBJTlRPIGNtZGF0YV96c3RkIChmMSkgVkFMVUVTIChyZXBlYXQoJzEyMzQ1 Njc4OTAnLCAxMDA0KSk7CisgIEVORCBMT09QOworRU5EICQkOworRVJST1I6ICByZWxhdGlvbiAi Y21kYXRhX3pzdGQiIGRvZXMgbm90IGV4aXN0CitMSU5FIDE6IElOU0VSVCBJTlRPIGNtZGF0YV96 c3RkIChmMSkgVkFMVUVTIChyZXBlYXQoJzEyMzQ1Njc4OTAnLCAxMC4uLgorICAgICAgICAgICAg ICAgICAgICBeCitRVUVSWTogIElOU0VSVCBJTlRPIGNtZGF0YV96c3RkIChmMSkgVkFMVUVTIChy ZXBlYXQoJzEyMzQ1Njc4OTAnLCAxMDA0KSkKK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBp bmxpbmVfY29kZV9ibG9jayBsaW5lIDQgYXQgU1FMIHN0YXRlbWVudAorLS0gQ3JlYXRlIGEgaGVs cGVyIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGV4dHJhLWxhcmdlIHZhbHVlcy4KK0NSRUFURSBPUiBS RVBMQUNFIEZVTkNUSU9OIGxhcmdlX3ZhbCgpIFJFVFVSTlMgVEVYVCBMQU5HVUFHRSBTUUwgQVMK KyQkCisgICAgU0VMRUNUIHN0cmluZ19hZ2cobWQ1KGc6OnRleHQpLCAnJykKKyAgICBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDI1NikgZworJCQ7CistLSBJbnNlcnQgNSBleHRyYS1sYXJnZSByb3dz IHRvIGZvcmNlIGV4dGVybmFsbHkgc3RvcmVkIGNvbXByZXNzaW9uLgorRE8gJCQKK0JFR0lOCisg IEZPUiBpIElOIDEuLjUgTE9PUAorICAgIElOU0VSVCBJTlRPIGNtZGF0YV96c3RkIChmMSkKKyAg ICBWQUxVRVMgKGxhcmdlX3ZhbCgpIHx8IHJlcGVhdCgnYScsIDQwMDApKTsKKyAgRU5EIExPT1A7 CitFTkQgJCQ7CitFUlJPUjogIHJlbGF0aW9uICJjbWRhdGFfenN0ZCIgZG9lcyBub3QgZXhpc3QK K0xJTkUgMTogSU5TRVJUIElOVE8gY21kYXRhX3pzdGQgKGYxKQorICAgICAgICAgICAgICAgICAg ICBeCitRVUVSWTogIElOU0VSVCBJTlRPIGNtZGF0YV96c3RkIChmMSkKKyAgICBWQUxVRVMgKGxh cmdlX3ZhbCgpIHx8IHJlcGVhdCgnYScsIDQwMDApKQorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0 aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgNCBhdCBTUUwgc3RhdGVtZW50CistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCist LSAzLiBWZXJpZnkgVGFibGUgU3RydWN0dXJlIGFuZCBDb21wcmVzc2lvbiBTZXR0aW5ncworLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorLS0gVGFibGUgU3RydWN0dXJlIGZvciBjbWRhdGFfenN0ZAorXGQrIGNtZGF0YV96c3Rk OworLS0gQ29tcHJlc3Npb24gU2V0dGluZ3MgZm9yIGYxIENvbHVtbgorU0VMRUNUIHBnX2NvbHVt bl9jb21wcmVzc2lvbihmMSkgQVMgY29tcHJlc3Npb25fbWV0aG9kLAorICAgICAgIGNvdW50KCop IEFTIHJvd19jb3VudAorRlJPTSBjbWRhdGFfenN0ZAorR1JPVVAgQlkgcGdfY29sdW1uX2NvbXBy ZXNzaW9uKGYxKTsKK0VSUk9SOiAgcmVsYXRpb24gImNtZGF0YV96c3RkIiBkb2VzIG5vdCBleGlz dAorTElORSAzOiBGUk9NIGNtZGF0YV96c3RkCisgICAgICAgICAgICAgXgorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0g NC4gRGVjb21wcmVzc2lvbiBUZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIERlY29tcHJlc3Npb24gU2xpY2Ug VGVzdCAoRXh0cmFjdGluZyBTdWJzdHJpbmdzKQorU0VMRUNUIFNVQlNUUihmMSwgMjAwLCA1MCkg QVMgZGF0YV9zbGljZQorRlJPTSBjbWRhdGFfenN0ZDsKK0VSUk9SOiAgcmVsYXRpb24gImNtZGF0 YV96c3RkIiBkb2VzIG5vdCBleGlzdAorTElORSAyOiBGUk9NIGNtZGF0YV96c3RkOworICAgICAg ICAgICAgIF4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKy0tIDUuIFRlc3QgVGFibGUgQ3JlYXRpb24gd2l0aCBMSUtFIElO Q0xVRElORyBDT01QUkVTU0lPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgY21kYXRh X3pzdGRfMjsKK05PVElDRTogIHRhYmxlICJjbWRhdGFfenN0ZF8yIiBkb2VzIG5vdCBleGlzdCwg c2tpcHBpbmcKK0NSRUFURSBUQUJMRSBjbWRhdGFfenN0ZF8yIChMSUtFIGNtZGF0YV96c3RkIElO Q0xVRElORyBDT01QUkVTU0lPTik7CitFUlJPUjogIHJlbGF0aW9uICJjbWRhdGFfenN0ZCIgZG9l cyBub3QgZXhpc3QKK0xJTkUgMTogQ1JFQVRFIFRBQkxFIGNtZGF0YV96c3RkXzIgKExJS0UgY21k YXRhX3pzdGQgSU5DTFVESU5HIENPTVBSLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF4KKy0tICBUYWJsZSBTdHJ1Y3R1cmUgZm9yIGNtZGF0YV96c3RkXzIKK1xk KyBjbWRhdGFfenN0ZF8yOworRFJPUCBUQUJMRSBjbWRhdGFfenN0ZF8yOworRVJST1I6ICB0YWJs ZSAiY21kYXRhX3pzdGRfMiIgZG9lcyBub3QgZXhpc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIDYuIE1hdGVyaWFs aXplZCBWaWV3IENvbXByZXNzaW9uIFRlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RST1AgTUFURVJJQUxJWkVEIFZJ RVcgSUYgRVhJU1RTIGNvbXByZXNzbXZfenN0ZDsKK05PVElDRTogIG1hdGVyaWFsaXplZCB2aWV3 ICJjb21wcmVzc212X3pzdGQiIGRvZXMgbm90IGV4aXN0LCBza2lwcGluZworQ1JFQVRFIE1BVEVS SUFMSVpFRCBWSUVXIGNvbXByZXNzbXZfenN0ZCBBUworICBTRUxFQ1QgZjEgRlJPTSBjbWRhdGFf enN0ZDsKK0VSUk9SOiAgcmVsYXRpb24gImNtZGF0YV96c3RkIiBkb2VzIG5vdCBleGlzdAorTElO RSAyOiAgIFNFTEVDVCBmMSBGUk9NIGNtZGF0YV96c3RkOworICAgICAgICAgICAgICAgICAgICAg ICAgIF4KKy0tICBNYXRlcmlhbGl6ZWQgVmlldyBTdHJ1Y3R1cmUgZm9yIGNvbXByZXNzbXZfenN0 ZAorXGQrIGNvbXByZXNzbXZfenN0ZDsKKy0tICBNYXRlcmlhbGl6ZWQgVmlldyBDb21wcmVzc2lv biBDaGVjaworU0VMRUNUIHBnX2NvbHVtbl9jb21wcmVzc2lvbihmMSkgQVMgbXZfY29tcHJlc3Np b24KK0ZST00gY29tcHJlc3Ntdl96c3RkOworRVJST1I6ICByZWxhdGlvbiAiY29tcHJlc3Ntdl96 c3RkIiBkb2VzIG5vdCBleGlzdAorTElORSAyOiBGUk9NIGNvbXByZXNzbXZfenN0ZDsKKyAgICAg ICAgICAgICBeCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCistLSA3LiBBZGRpdGlvbmFsIFVwZGF0ZXMgYW5kIFJvdW5kLVRy aXAgVGVzdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKy0tIFVwZGF0ZSBzb21lIHJvd3MgdG8gY2hlY2sgaWYgdGhlIGRp Y3Rpb25hcnkgcmVtYWlucyBlZmZlY3RpdmUgYWZ0ZXIgbW9kaWZpY2F0aW9ucy4KK1VQREFURSBj bWRhdGFfenN0ZAorU0VUIGYxID0gZjEgfHwgJyBVUERBVEVEJzsKK0VSUk9SOiAgcmVsYXRpb24g ImNtZGF0YV96c3RkIiBkb2VzIG5vdCBleGlzdAorTElORSAxOiBVUERBVEUgY21kYXRhX3pzdGQK KyAgICAgICAgICAgICAgIF4KKy0tICBWZXJpZmljYXRpb24gb2YgVXBkYXRlZCBSb3dzCitTRUxF Q1QgU1VCU1RSKGYxLCBMRU5HVEgoZjEpIC0gNyArIDEsIDcpIEFTIHByZXZpZXcKK0ZST00gY21k YXRhX3pzdGQ7CitFUlJPUjogIHJlbGF0aW9uICJjbWRhdGFfenN0ZCIgZG9lcyBub3QgZXhpc3QK K0xJTkUgMjogRlJPTSBjbWRhdGFfenN0ZDsKKyAgICAgICAgICAgICBeCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSA4 LiBDbGVhbiBVcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBNQVRFUklBTElaRUQgVklFVyBjb21wcmVzc212X3pz dGQ7CitFUlJPUjogIG1hdGVyaWFsaXplZCB2aWV3ICJjb21wcmVzc212X3pzdGQiIGRvZXMgbm90 IGV4aXN0CitEUk9QIFRBQkxFIGNtZGF0YV96c3RkOworRVJST1I6ICB0YWJsZSAiY21kYXRhX3pz dGQiIGRvZXMgbm90IGV4aXN0Citcc2V0IEhJREVfVE9BU1RfQ09NUFJFU1NJT04gdHJ1ZQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb21wcmVzc2lvbl96c3RkXzEub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb21wcmVzc2lvbl96c3RkXzEub3V0Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmE1NDBjOTliMzcKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbXByZXNzaW9uX3pzdGRfMS5vdXQK QEAgLTAsMCArMSwxODEgQEAKK1xzZXQgSElERV9UT0FTVF9DT01QUkVTU0lPTiBmYWxzZQorLS0g RW5zdXJlIHN0YWJsZSByZXN1bHRzIHJlZ2FyZGxlc3Mgb2YgdGhlIGluc3RhbGxhdGlvbidzIGRl ZmF1bHQuCitTRVQgZGVmYXVsdF90b2FzdF9jb21wcmVzc2lvbiA9ICdwZ2x6JzsKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K Ky0tIDEuIENyZWF0ZSBUZXN0IFRhYmxlIHdpdGggWnN0ZCBDb21wcmVzc2lvbgorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor RFJPUCBUQUJMRSBJRiBFWElTVFMgY21kYXRhX3pzdGQgQ0FTQ0FERTsKK05PVElDRTogIHRhYmxl ICJjbWRhdGFfenN0ZCIgZG9lcyBub3QgZXhpc3QsIHNraXBwaW5nCitDUkVBVEUgVEFCTEUgY21k YXRhX3pzdGQgKAorICAgIGYxIFRFWFQgQ09NUFJFU1NJT04genN0ZAorKTsKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0t IDIuIEluc2VydCBEYXRhIFJvd3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkCitCRUdJTgorICBGT1IgaSBJTiAx Li4xNSBMT09QCisgICAgSU5TRVJUIElOVE8gY21kYXRhX3pzdGQgKGYxKSBWQUxVRVMgKHJlcGVh dCgnMTIzNDU2Nzg5MCcsIDEwMDQpKTsKKyAgRU5EIExPT1A7CitFTkQgJCQ7CistLSBDcmVhdGUg YSBoZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgZXh0cmEtbGFyZ2UgdmFsdWVzLgorQ1JFQVRF IE9SIFJFUExBQ0UgRlVOQ1RJT04gbGFyZ2VfdmFsKCkgUkVUVVJOUyBURVhUIExBTkdVQUdFIFNR TCBBUworJCQKKyAgICBTRUxFQ1Qgc3RyaW5nX2FnZyhtZDUoZzo6dGV4dCksICcnKQorICAgIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMjU2KSBnCiskJDsKKy0tIEluc2VydCA1IGV4dHJhLWxhcmdl IHJvd3MgdG8gZm9yY2UgZXh0ZXJuYWxseSBzdG9yZWQgY29tcHJlc3Npb24uCitETyAkJAorQkVH SU4KKyAgRk9SIGkgSU4gMS4uNSBMT09QCisgICAgSU5TRVJUIElOVE8gY21kYXRhX3pzdGQgKGYx KQorICAgIFZBTFVFUyAobGFyZ2VfdmFsKCkgfHwgcmVwZWF0KCdhJywgNDAwMCkpOworICBFTkQg TE9PUDsKK0VORCAkJDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIDMuIFZlcmlmeSBUYWJsZSBTdHJ1Y3R1cmUgYW5k IENvbXByZXNzaW9uIFNldHRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBUYWJsZSBTdHJ1Y3R1cmUgZm9yIGNt ZGF0YV96c3RkCitcZCsgY21kYXRhX3pzdGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRhYmxlICJwdWJsaWMuY21kYXRhX3pzdGQiCisgQ29sdW1uIHwgVHlwZSB8IENv bGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgQ29tcHJlc3Npb24gfCBT dGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLQorIGYxICAgICB8IHRleHQgfCAgICAgICAgICAgfCAgICAgICAgICB8 ICAgICAgICAgfCBleHRlbmRlZCB8IHpzdGQgICAgICAgIHwgICAgICAgICAgICAgIHwgCisKKy0t IENvbXByZXNzaW9uIFNldHRpbmdzIGZvciBmMSBDb2x1bW4KK1NFTEVDVCBwZ19jb2x1bW5fY29t cHJlc3Npb24oZjEpIEFTIGNvbXByZXNzaW9uX21ldGhvZCwKKyAgICAgICBjb3VudCgqKSBBUyBy b3dfY291bnQKK0ZST00gY21kYXRhX3pzdGQKK0dST1VQIEJZIHBnX2NvbHVtbl9jb21wcmVzc2lv bihmMSk7CisgY29tcHJlc3Npb25fbWV0aG9kIHwgcm93X2NvdW50IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0KKyB6c3RkICAgICAgICAgICAgICAgfCAgICAgICAgMjAKKygxIHJv dykKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorLS0gNC4gRGVjb21wcmVzc2lvbiBUZXN0cworLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIERl Y29tcHJlc3Npb24gU2xpY2UgVGVzdCAoRXh0cmFjdGluZyBTdWJzdHJpbmdzKQorU0VMRUNUIFNV QlNUUihmMSwgMjAwLCA1MCkgQVMgZGF0YV9zbGljZQorRlJPTSBjbWRhdGFfenN0ZDsKKyAgICAg ICAgICAgICAgICAgICAgIGRhdGFfc2xpY2UgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAwMTIzNDU2Nzg5 MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQorIDAxMjM0NTY3ODkwMTIz NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CisgMDEyMzQ1Njc4OTAxMjM0NTY3 ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKKyAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQorIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1 Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CisgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5 MDEyMzQ1Njc4OTAxMjM0NTY3ODkKKyAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz NDU2Nzg5MDEyMzQ1Njc4OQorIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3 ODkwMTIzNDU2Nzg5CisgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx MjM0NTY3ODkKKyAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1 Njc4OQorIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5 CisgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKKyAw MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQorIDAxMjM0 NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CisgMDEyMzQ1Njc4 OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKKyBmY2VlYTE2N2E1YTM2 ZGVkZDRiZWEyNTQzYzlmMGY4OTVmYjk4YWI5MTU5ZjUxZmQwMgorIGZjZWVhMTY3YTVhMzZkZWRk NGJlYTI1NDNjOWYwZjg5NWZiOThhYjkxNTlmNTFmZDAyCisgZmNlZWExNjdhNWEzNmRlZGQ0YmVh MjU0M2M5ZjBmODk1ZmI5OGFiOTE1OWY1MWZkMDIKKyBmY2VlYTE2N2E1YTM2ZGVkZDRiZWEyNTQz YzlmMGY4OTVmYjk4YWI5MTU5ZjUxZmQwMgorIGZjZWVhMTY3YTVhMzZkZWRkNGJlYTI1NDNjOWYw Zjg5NWZiOThhYjkxNTlmNTFmZDAyCisoMjAgcm93cykKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gNS4gVGVzdCBU YWJsZSBDcmVhdGlvbiB3aXRoIExJS0UgSU5DTFVESU5HIENPTVBSRVNTSU9OCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitE Uk9QIFRBQkxFIElGIEVYSVNUUyBjbWRhdGFfenN0ZF8yOworTk9USUNFOiAgdGFibGUgImNtZGF0 YV96c3RkXzIiIGRvZXMgbm90IGV4aXN0LCBza2lwcGluZworQ1JFQVRFIFRBQkxFIGNtZGF0YV96 c3RkXzIgKExJS0UgY21kYXRhX3pzdGQgSU5DTFVESU5HIENPTVBSRVNTSU9OKTsKKy0tICBUYWJs ZSBTdHJ1Y3R1cmUgZm9yIGNtZGF0YV96c3RkXzIKK1xkKyBjbWRhdGFfenN0ZF8yOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlICJwdWJsaWMuY21kYXRhX3pzdGRf MiIKKyBDb2x1bW4gfCBUeXBlIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IHwgU3Rv cmFnZSAgfCBDb21wcmVzc2lvbiB8IFN0YXRzIHRhcmdldCB8IERlc2NyaXB0aW9uIAorLS0tLS0t LS0rLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgZjEgICAgIHwgdGV4dCB8 ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgenN0ZCAgICAgICAg fCAgICAgICAgICAgICAgfCAKKworRFJPUCBUQUJMRSBjbWRhdGFfenN0ZF8yOworLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor LS0gNi4gTWF0ZXJpYWxpemVkIFZpZXcgQ29tcHJlc3Npb24gVGVzdAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBN QVRFUklBTElaRUQgVklFVyBJRiBFWElTVFMgY29tcHJlc3Ntdl96c3RkOworTk9USUNFOiAgbWF0 ZXJpYWxpemVkIHZpZXcgImNvbXByZXNzbXZfenN0ZCIgZG9lcyBub3QgZXhpc3QsIHNraXBwaW5n CitDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcgY29tcHJlc3Ntdl96c3RkIEFTCisgIFNFTEVDVCBm MSBGUk9NIGNtZGF0YV96c3RkOworLS0gIE1hdGVyaWFsaXplZCBWaWV3IFN0cnVjdHVyZSBmb3Ig Y29tcHJlc3Ntdl96c3RkCitcZCsgY29tcHJlc3Ntdl96c3RkOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTWF0ZXJpYWxpemVkIHZpZXcgInB1YmxpYy5jb21wcmVzc212X3pzdGQiCisg Q29sdW1uIHwgVHlwZSB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2Ug IHwgQ29tcHJlc3Npb24gfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGYxICAgICB8IHRleHQgfCAgICAg ICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBleHRlbmRlZCB8ICAgICAgICAgICAgIHwgICAg ICAgICAgICAgIHwgCitWaWV3IGRlZmluaXRpb246CisgU0VMRUNUIGYxCisgICBGUk9NIGNtZGF0 YV96c3RkOworCistLSAgTWF0ZXJpYWxpemVkIFZpZXcgQ29tcHJlc3Npb24gQ2hlY2sKK1NFTEVD VCBwZ19jb2x1bW5fY29tcHJlc3Npb24oZjEpIEFTIG12X2NvbXByZXNzaW9uCitGUk9NIGNvbXBy ZXNzbXZfenN0ZDsKKyBtdl9jb21wcmVzc2lvbiAKKy0tLS0tLS0tLS0tLS0tLS0KKyB6c3RkCisg enN0ZAorIHpzdGQKKyB6c3RkCisgenN0ZAorIHpzdGQKKyB6c3RkCisgenN0ZAorIHpzdGQKKyB6 c3RkCisgenN0ZAorIHpzdGQKKyB6c3RkCisgenN0ZAorIHpzdGQKKyB6c3RkCisgenN0ZAorIHpz dGQKKyB6c3RkCisgenN0ZAorKDIwIHJvd3MpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIDcuIEFkZGl0aW9uYWwg VXBkYXRlcyBhbmQgUm91bmQtVHJpcCBUZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVXBkYXRlIHNvbWUgcm93 cyB0byBjaGVjayBpZiB0aGUgZGljdGlvbmFyeSByZW1haW5zIGVmZmVjdGl2ZSBhZnRlciBtb2Rp ZmljYXRpb25zLgorVVBEQVRFIGNtZGF0YV96c3RkCitTRVQgZjEgPSBmMSB8fCAnIFVQREFURUQn OworLS0gIFZlcmlmaWNhdGlvbiBvZiBVcGRhdGVkIFJvd3MKK1NFTEVDVCBTVUJTVFIoZjEsIExF TkdUSChmMSkgLSA3ICsgMSwgNykgQVMgcHJldmlldworRlJPTSBjbWRhdGFfenN0ZDsKKyBwcmV2 aWV3IAorLS0tLS0tLS0tCisgVVBEQVRFRAorIFVQREFURUQKKyBVUERBVEVECisgVVBEQVRFRAor IFVQREFURUQKKyBVUERBVEVECisgVVBEQVRFRAorIFVQREFURUQKKyBVUERBVEVECisgVVBEQVRF RAorIFVQREFURUQKKyBVUERBVEVECisgVVBEQVRFRAorIFVQREFURUQKKyBVUERBVEVECisgVVBE QVRFRAorIFVQREFURUQKKyBVUERBVEVECisgVVBEQVRFRAorIFVQREFURUQKKygyMCByb3dzKQor CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCistLSA4LiBDbGVhbiBVcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBNQVRFUklBTElaRUQgVklF VyBjb21wcmVzc212X3pzdGQ7CitEUk9QIFRBQkxFIGNtZGF0YV96c3RkOworXHNldCBISURFX1RP QVNUX0NPTVBSRVNTSU9OIHRydWUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvb2lkam9pbnMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vaWRqb2lucy5vdXQK aW5kZXggMjE1ZWI4OTliZS4uYWM1ZGEzZjVhYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9vaWRqb2lucy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9v aWRqb2lucy5vdXQKQEAgLTcxLDYgKzcxLDcgQEAgTk9USUNFOiAgY2hlY2tpbmcgcGdfdHlwZSB7 dHlwbW9kb3V0fSA9PiBwZ19wcm9jIHtvaWR9CiBOT1RJQ0U6ICBjaGVja2luZyBwZ190eXBlIHt0 eXBhbmFseXplfSA9PiBwZ19wcm9jIHtvaWR9CiBOT1RJQ0U6ICBjaGVja2luZyBwZ190eXBlIHt0 eXBiYXNldHlwZX0gPT4gcGdfdHlwZSB7b2lkfQogTk9USUNFOiAgY2hlY2tpbmcgcGdfdHlwZSB7 dHlwY29sbGF0aW9ufSA9PiBwZ19jb2xsYXRpb24ge29pZH0KK05PVElDRTogIGNoZWNraW5nIHBn X3R5cGUge3R5cGVidWlsZHpzdGRkaWN0aW9uYXJ5fSA9PiBwZ19wcm9jIHtvaWR9CiBOT1RJQ0U6 ICBjaGVja2luZyBwZ19hdHRyaWJ1dGUge2F0dHJlbGlkfSA9PiBwZ19jbGFzcyB7b2lkfQogTk9U SUNFOiAgY2hlY2tpbmcgcGdfYXR0cmlidXRlIHthdHR0eXBpZH0gPT4gcGdfdHlwZSB7b2lkfQog Tk9USUNFOiAgY2hlY2tpbmcgcGdfYXR0cmlidXRlIHthdHRjb2xsYXRpb259ID0+IHBnX2NvbGxh dGlvbiB7b2lkfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggMzdiNmQyMWUxZi4u NDA3YTA2NDRmOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0xMTksNyArMTE5 LDcgQEAgdGVzdDogcGxhbmNhY2hlIGxpbWl0IHBscGdzcWwgY29weTIgdGVtcCBkb21haW4gcmFu Z2VmdW5jcyBwcmVwYXJlIGNvbnZlcnNpb24gdHIKICMgVGhlIHN0YXRzIHRlc3QgcmVzZXRzIHN0 YXRzLCBzbyBub3RoaW5nIGVsc2UgbmVlZGluZyBzdGF0cyBhY2Nlc3MgY2FuIGJlIGluCiAjIHRo aXMgZ3JvdXAuCiAjIC0tLS0tLS0tLS0KLXRlc3Q6IHBhcnRpdGlvbl9qb2luIHBhcnRpdGlvbl9w cnVuZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGluZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBh cnRpdGlvbl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNvbXByZXNzaW9uIG1lbW9pemUgc3RhdHMg cHJlZGljYXRlCit0ZXN0OiBwYXJ0aXRpb25fam9pbiBwYXJ0aXRpb25fcHJ1bmUgcmVsb3B0aW9u cyBoYXNoX3BhcnQgaW5kZXhpbmcgcGFydGl0aW9uX2FnZ3JlZ2F0ZSBwYXJ0aXRpb25faW5mbyB0 dXBsZXNvcnQgZXhwbGFpbiBjb21wcmVzc2lvbiBjb21wcmVzc2lvbl96c3RkIG1lbW9pemUgc3Rh dHMgcHJlZGljYXRlCiAKICMgZXZlbnRfdHJpZ2dlciBkZXBlbmRzIG9uIGNyZWF0ZV9hbSBhbmQg Y2Fubm90IHJ1biBjb25jdXJyZW50bHkgd2l0aAogIyBhbnkgdGVzdCB0aGF0IHJ1bnMgRERMCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb21wcmVzc2lvbi5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9jb21wcmVzc2lvbi5zcWwKaW5kZXggNDkwNTk1ZmNmYi4uZTI5OTA5NTU4 ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29tcHJlc3Npb24uc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbXByZXNzaW9uLnNxbApAQCAtMTAyLDYgKzEwMiw3IEBA IENSRUFURSBUQUJMRSBjbWluaCgpIElOSEVSSVRTIChjbWRhdGEsIGNtZGF0YTMpOwogLS0gdGVz dCBkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uIEdVQwogU0VUIGRlZmF1bHRfdG9hc3RfY29tcHJl c3Npb24gPSAnJzsKIFNFVCBkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uID0gJ0kgZG8gbm90IGV4 aXN0IGNvbXByZXNzaW9uJzsKK1NFVCBkZWZhdWx0X3RvYXN0X2NvbXByZXNzaW9uID0gJ3pzdGQn OwogU0VUIGRlZmF1bHRfdG9hc3RfY29tcHJlc3Npb24gPSAnbHo0JzsKIFNFVCBkZWZhdWx0X3Rv YXN0X2NvbXByZXNzaW9uID0gJ3BnbHonOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9jb21wcmVzc2lvbl96c3RkLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbXByZXNz aW9uX3pzdGQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjdjZjkz ZTNkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb21wcmVzc2lv bl96c3RkLnNxbApAQCAtMCwwICsxLDk3IEBACitcc2V0IEhJREVfVE9BU1RfQ09NUFJFU1NJT04g ZmFsc2UKKworLS0gRW5zdXJlIHN0YWJsZSByZXN1bHRzIHJlZ2FyZGxlc3Mgb2YgdGhlIGluc3Rh bGxhdGlvbidzIGRlZmF1bHQuCitTRVQgZGVmYXVsdF90b2FzdF9jb21wcmVzc2lvbiA9ICdwZ2x6 JzsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorLS0gMS4gQ3JlYXRlIFRlc3QgVGFibGUgd2l0aCBac3RkIENvbXByZXNz aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCitEUk9QIFRBQkxFIElGIEVYSVNUUyBjbWRhdGFfenN0ZCBDQVNDQURFOwor Q1JFQVRFIFRBQkxFIGNtZGF0YV96c3RkICgKKyAgICBmMSBURVhUIENPTVBSRVNTSU9OIHpzdGQK Kyk7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKy0tIDIuIEluc2VydCBEYXRhIFJvd3MKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkCitC RUdJTgorICBGT1IgaSBJTiAxLi4xNSBMT09QCisgICAgSU5TRVJUIElOVE8gY21kYXRhX3pzdGQg KGYxKSBWQUxVRVMgKHJlcGVhdCgnMTIzNDU2Nzg5MCcsIDEwMDQpKTsKKyAgRU5EIExPT1A7CitF TkQgJCQ7CisKKy0tIENyZWF0ZSBhIGhlbHBlciBmdW5jdGlvbiB0byBnZW5lcmF0ZSBleHRyYS1s YXJnZSB2YWx1ZXMuCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBsYXJnZV92YWwoKSBSRVRV Uk5TIFRFWFQgTEFOR1VBR0UgU1FMIEFTCiskJAorICAgIFNFTEVDVCBzdHJpbmdfYWdnKG1kNShn Ojp0ZXh0KSwgJycpCisgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwyNTYpIGcKKyQkOworCist LSBJbnNlcnQgNSBleHRyYS1sYXJnZSByb3dzIHRvIGZvcmNlIGV4dGVybmFsbHkgc3RvcmVkIGNv bXByZXNzaW9uLgorRE8gJCQKK0JFR0lOCisgIEZPUiBpIElOIDEuLjUgTE9PUAorICAgIElOU0VS VCBJTlRPIGNtZGF0YV96c3RkIChmMSkKKyAgICBWQUxVRVMgKGxhcmdlX3ZhbCgpIHx8IHJlcGVh dCgnYScsIDQwMDApKTsKKyAgRU5EIExPT1A7CitFTkQgJCQ7CisKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIDMuIFZl cmlmeSBUYWJsZSBTdHJ1Y3R1cmUgYW5kIENvbXByZXNzaW9uIFNldHRpbmdzCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCist LSBUYWJsZSBTdHJ1Y3R1cmUgZm9yIGNtZGF0YV96c3RkCitcZCsgY21kYXRhX3pzdGQ7CisKKy0t IENvbXByZXNzaW9uIFNldHRpbmdzIGZvciBmMSBDb2x1bW4KK1NFTEVDVCBwZ19jb2x1bW5fY29t cHJlc3Npb24oZjEpIEFTIGNvbXByZXNzaW9uX21ldGhvZCwKKyAgICAgICBjb3VudCgqKSBBUyBy b3dfY291bnQKK0ZST00gY21kYXRhX3pzdGQKK0dST1VQIEJZIHBnX2NvbHVtbl9jb21wcmVzc2lv bihmMSk7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKy0tIDQuIERlY29tcHJlc3Npb24gVGVzdHMKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0t ICBEZWNvbXByZXNzaW9uIFNsaWNlIFRlc3QgKEV4dHJhY3RpbmcgU3Vic3RyaW5ncykKK1NFTEVD VCBTVUJTVFIoZjEsIDIwMCwgNTApIEFTIGRhdGFfc2xpY2UKK0ZST00gY21kYXRhX3pzdGQ7CisK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKy0tIDUuIFRlc3QgVGFibGUgQ3JlYXRpb24gd2l0aCBMSUtFIElOQ0xVRElORyBD T01QUkVTU0lPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBUQUJMRSBJRiBFWElTVFMgY21kYXRhX3pzdGRfMjsK K0NSRUFURSBUQUJMRSBjbWRhdGFfenN0ZF8yIChMSUtFIGNtZGF0YV96c3RkIElOQ0xVRElORyBD T01QUkVTU0lPTik7CistLSAgVGFibGUgU3RydWN0dXJlIGZvciBjbWRhdGFfenN0ZF8yCitcZCsg Y21kYXRhX3pzdGRfMjsKK0RST1AgVEFCTEUgY21kYXRhX3pzdGRfMjsKKworLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0g Ni4gTWF0ZXJpYWxpemVkIFZpZXcgQ29tcHJlc3Npb24gVGVzdAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRFJPUCBNQVRF UklBTElaRUQgVklFVyBJRiBFWElTVFMgY29tcHJlc3Ntdl96c3RkOworQ1JFQVRFIE1BVEVSSUFM SVpFRCBWSUVXIGNvbXByZXNzbXZfenN0ZCBBUworICBTRUxFQ1QgZjEgRlJPTSBjbWRhdGFfenN0 ZDsKKy0tICBNYXRlcmlhbGl6ZWQgVmlldyBTdHJ1Y3R1cmUgZm9yIGNvbXByZXNzbXZfenN0ZAor XGQrIGNvbXByZXNzbXZfenN0ZDsKKy0tICBNYXRlcmlhbGl6ZWQgVmlldyBDb21wcmVzc2lvbiBD aGVjaworU0VMRUNUIHBnX2NvbHVtbl9jb21wcmVzc2lvbihmMSkgQVMgbXZfY29tcHJlc3Npb24K K0ZST00gY29tcHJlc3Ntdl96c3RkOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSA3LiBBZGRpdGlvbmFsIFVwZGF0 ZXMgYW5kIFJvdW5kLVRyaXAgVGVzdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFVwZGF0ZSBzb21lIHJvd3MgdG8g Y2hlY2sgaWYgdGhlIGRpY3Rpb25hcnkgcmVtYWlucyBlZmZlY3RpdmUgYWZ0ZXIgbW9kaWZpY2F0 aW9ucy4KK1VQREFURSBjbWRhdGFfenN0ZAorU0VUIGYxID0gZjEgfHwgJyBVUERBVEVEJzsKKwor LS0gIFZlcmlmaWNhdGlvbiBvZiBVcGRhdGVkIFJvd3MKK1NFTEVDVCBTVUJTVFIoZjEsIExFTkdU SChmMSkgLSA3ICsgMSwgNykgQVMgcHJldmlldworRlJPTSBjbWRhdGFfenN0ZDsKKworLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorLS0gOC4gQ2xlYW4gVXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RST1AgTUFURVJJQUxJWkVEIFZJRVcgY29tcHJl c3Ntdl96c3RkOworRFJPUCBUQUJMRSBjbWRhdGFfenN0ZDsKKworXHNldCBISURFX1RPQVNUX0NP TVBSRVNTSU9OIHRydWUKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOTg0MDA2MDk5Ny4u YWRiOTRlZTdmZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTg4Niw2ICs4ODYsNyBA QCBGb3JtRGF0YV9wZ190c19wYXJzZXIKIEZvcm1EYXRhX3BnX3RzX3RlbXBsYXRlCiBGb3JtRGF0 YV9wZ190eXBlCiBGb3JtRGF0YV9wZ191c2VyX21hcHBpbmcKK0Zvcm1EYXRhX3BnX3pzdGRfZGlj dGlvbmFyaWVzCiBGb3JtRXh0cmFEYXRhX3BnX2F0dHJpYnV0ZQogRm9ybV9wZ19hZ2dyZWdhdGUK IEZvcm1fcGdfYW0KQEAgLTk0NSw2ICs5NDYsNyBAQCBGb3JtX3BnX3RzX3BhcnNlcgogRm9ybV9w Z190c190ZW1wbGF0ZQogRm9ybV9wZ190eXBlCiBGb3JtX3BnX3VzZXJfbWFwcGluZworRm9ybV9w Z196c3RkX2RpY3Rpb25hcmllcwogRm9ybWF0Tm9kZQogRnJlZUJsb2NrTnVtYmVyQXJyYXkKIEZy ZWVMaXN0RGF0YQpAQCAtMjU4Miw2ICsyNTg0LDggQEAgU1RBUlRVUElORk8KIFNUUkxFTgogU1YK IFNZTkNIUk9OSVpBVElPTl9CQVJSSUVSCitTYW1wbGVDb2xsZWN0b3IKK1NhbXBsZUVudHJ5CiBT YW1wbGVTY2FuCiBTYW1wbGVTY2FuR2V0U2FtcGxlU2l6ZV9mdW5jdGlvbgogU2FtcGxlU2NhblN0 YXRlCkBAIC0zMzA2LDYgKzMzMTAsNyBAQCBaU1REX2NQYXJhbWV0ZXIKIFpTVERfaW5CdWZmZXIK IFpTVERfb3V0QnVmZmVyCiBac3RkQ29tcHJlc3NvclN0YXRlCitac3RkVHJhaW5pbmdEYXRhCiBf U1BJX2Nvbm5lY3Rpb24KIF9TUElfcGxhbgogX19tMTI4aQoKYmFzZS1jb21taXQ6IDM5ZGU0ZjE1 N2QzYWMwYjg4OWJiMjc2YzI0ODdmZTE2MDU3OGY5NjcKLS0gCjIuNDcuMQoK --0000000000005deec4062fa5d40d--